mirror of
https://github.com/pret/pokegold-spaceworld.git
synced 2026-03-21 17:45:52 -05:00
187 lines
3.7 KiB
NASM
187 lines
3.7 KiB
NASM
INCLUDE "constants.asm"
|
|
|
|
|
|
SECTION "home/overworld.asm@Startmenu and Select Button Check", ROM0
|
|
|
|
OverworldStartButtonCheck::
|
|
ldh a, [hJoyState]
|
|
bit START_F, a
|
|
ret z
|
|
and (START | B_BUTTON)
|
|
cp (START | B_BUTTON)
|
|
jr nz, .regularMenu
|
|
ld a, [wDebugFlags]
|
|
bit DEBUG_FIELD_F, a
|
|
ret z ; debug disabled
|
|
farcall FieldDebugMenu
|
|
jr CheckStartmenuSelectHook
|
|
.regularMenu
|
|
farcall DisplayStartMenu
|
|
jr CheckStartmenuSelectHook
|
|
SelectButtonFunction::
|
|
callfar CheckRegisteredItem
|
|
CheckStartmenuSelectHook:
|
|
ldh a, [hStartmenuCloseAndSelectHookEnable]
|
|
and a
|
|
ret z ; hook is disabled
|
|
ld hl, wQueuedScriptAddr
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
ld a, [wQueuedScriptBank]
|
|
call FarCall_hl
|
|
ld hl, hStartmenuCloseAndSelectHookEnable
|
|
xor a
|
|
ld [hli], a ; clear hook enable and ???
|
|
ld [hl], a
|
|
dec a
|
|
ret
|
|
|
|
; Runs the code for all map objects that move, and stays in a loop as long as the player is moving.
|
|
HandleMapObjects::
|
|
.loop
|
|
call .HandleMapObjects
|
|
and a
|
|
ld a, [wPlayerStepFlags]
|
|
bit PLAYERSTEP_CONTINUE_F, a
|
|
ret z
|
|
bit PLAYERSTEP_STOP_F, a
|
|
jr z, .loop
|
|
scf
|
|
ret
|
|
|
|
.HandleMapObjects:
|
|
ldh a, [hROMBank]
|
|
push af
|
|
ld a, BANK(HandleNPCStep)
|
|
call Bankswitch
|
|
call HandleNPCStep
|
|
call LoadMinorObjectGFX
|
|
ld a, BANK(_HandlePlayerStep)
|
|
call Bankswitch
|
|
call _HandlePlayerStep
|
|
ld a, BANK(InitSprites)
|
|
call Bankswitch
|
|
call InitSprites
|
|
call DelayFrame
|
|
call UpdateToolgear
|
|
ld hl, wToolgearFlags
|
|
set 2, [hl]
|
|
call DelayFrame
|
|
pop af
|
|
call Bankswitch
|
|
ret
|
|
|
|
UpdateAndTransferToolgear:
|
|
call DelayFrame
|
|
call UpdateToolgear
|
|
ld hl, wToolgearFlags
|
|
set 2, [hl] ; transfer toolgear to window
|
|
call DelayFrame
|
|
ret
|
|
|
|
ScheduleNorthRowRedraw:
|
|
coord hl, 0, 0
|
|
call CopyToRedrawRowOrColumnSrcTiles
|
|
ld a, [wBGMapAnchor]
|
|
ldh [hRedrawRowOrColumnDest], a
|
|
ld a, [wBGMapAnchor + 1]
|
|
ldh [hRedrawRowOrColumnDest + 1], a
|
|
ld a, REDRAW_ROW
|
|
ldh [hRedrawRowOrColumnMode], a
|
|
ret
|
|
|
|
ScheduleSouthRowRedraw:
|
|
coord hl, 0, SCREEN_HEIGHT - 2
|
|
call CopyToRedrawRowOrColumnSrcTiles
|
|
ld a, [wBGMapAnchor]
|
|
ld l, a
|
|
ld a, [wBGMapAnchor + 1]
|
|
ld h, a
|
|
ld bc, BG_MAP_WIDTH * (SCREEN_HEIGHT - 2)
|
|
add hl, bc
|
|
; the following 4 lines wrap us from bottom to top if necessary
|
|
ld a, h
|
|
and HIGH(vBGMap1 - vBGMap0 - $01)
|
|
or HIGH(vBGMap0)
|
|
ldh [hRedrawRowOrColumnDest + 1], a
|
|
ld a, l
|
|
ldh [hRedrawRowOrColumnDest], a
|
|
ld a, REDRAW_ROW
|
|
ldh [hRedrawRowOrColumnMode], a
|
|
ret
|
|
|
|
ScheduleEastColumnRedraw:
|
|
coord hl, SCREEN_WIDTH - 2, 0
|
|
call ScheduleColumnRedrawHelper
|
|
ld a, [wBGMapAnchor]
|
|
ld c, a
|
|
and ($FF ^ (BG_MAP_WIDTH - 1)) ; mask upper address bits
|
|
ld b, a
|
|
ld a, c
|
|
add SCREEN_WIDTH - 2
|
|
and BG_MAP_WIDTH - 1 ; mask lower address bits
|
|
or b
|
|
ldh [hRedrawRowOrColumnDest], a
|
|
ld a, [wBGMapAnchor + 1]
|
|
ldh [hRedrawRowOrColumnDest + 1], a
|
|
ld a, REDRAW_COL
|
|
ldh [hRedrawRowOrColumnMode], a
|
|
ret
|
|
|
|
ScheduleWestColumnRedraw:
|
|
coord hl, 0, 0
|
|
call ScheduleColumnRedrawHelper
|
|
ld a, [wBGMapAnchor]
|
|
ldh [hRedrawRowOrColumnDest], a
|
|
ld a, [wBGMapAnchor + 1]
|
|
ldh [hRedrawRowOrColumnDest + 1], a
|
|
ld a, REDRAW_COL
|
|
ldh [hRedrawRowOrColumnMode], a
|
|
ret
|
|
|
|
CopyToRedrawRowOrColumnSrcTiles:
|
|
ld de, wRedrawRowOrColumnSrcTiles
|
|
ld c, 2 * SCREEN_WIDTH
|
|
.loop
|
|
ld a, [hli]
|
|
ld [de], a
|
|
inc de
|
|
dec c
|
|
jr nz, .loop
|
|
ret
|
|
|
|
ScheduleColumnRedrawHelper:
|
|
ld de, wRedrawRowOrColumnSrcTiles
|
|
ld c, SCREEN_HEIGHT
|
|
.loop
|
|
ld a, [hli]
|
|
ld [de], a
|
|
inc de
|
|
ld a, [hl]
|
|
ld [de], a
|
|
inc de
|
|
ld a, SCREEN_WIDTH - 1
|
|
add l
|
|
ld l, a
|
|
jr nc, .noCarry
|
|
inc h
|
|
.noCarry
|
|
dec c
|
|
jr nz, .loop
|
|
ret
|
|
|
|
|
|
SECTION "home/overworld.asm@QueueScript", ROM0
|
|
|
|
QueueScript::
|
|
; Install a function that is called as soon as
|
|
; the start menu is closed or directly after
|
|
; the select button function ran
|
|
ld [wQueuedScriptBank], a
|
|
ld a, l
|
|
ld [wQueuedScriptAddr], a
|
|
ld a, h
|
|
ld [wQueuedScriptAddr + 1], a
|
|
ret
|