mirror of
https://github.com/pret/pokegold-spaceworld.git
synced 2026-09-27 13:41:49 -04:00
e1659ecd41
Addresses of sections will now be added to the linkerscript via `org`, and the section name will be the path/to/file. If there is more than one section in the file, then add a @SectionName after the path/to/file to describe the section.
195 lines
3.9 KiB
NASM
195 lines
3.9 KiB
NASM
INCLUDE "constants.asm"
|
|
|
|
; if DEBUG
|
|
SECTION "home/overworld.asm@Startmenu and Select Button Check", ROM0
|
|
; else
|
|
; SECTION "Startmenu and Select Button Check", ROM0[$2BDF]
|
|
; endc
|
|
|
|
OverworldStartButtonCheck:: ; 2c05 (0:2c05)
|
|
ldh a, [hJoyState]
|
|
bit START_F, a
|
|
ret z
|
|
if DEBUG
|
|
and (START | B_BUTTON)
|
|
cp (START | B_BUTTON)
|
|
jr nz, .regularMenu
|
|
ld a, [wDebugFlags]
|
|
bit DEBUG_FIELD_F, a
|
|
ret z ; debug disabled
|
|
callba InGameDebugMenu
|
|
jr CheckStartmenuSelectHook
|
|
.regularMenu
|
|
endc
|
|
callba DisplayStartMenu
|
|
jr CheckStartmenuSelectHook
|
|
SelectButtonFunction:: ; 2c2a (0:2c2a)
|
|
callab 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
|
|
|
|
Function2c4a: ; 2c4a (0:2c4a)
|
|
; copy of Function2ba8
|
|
; calling Functiond4e6 instead of Functiond6e4
|
|
.loop
|
|
call Function2c5a
|
|
and a
|
|
ld a, [$cb6e]
|
|
bit 5, a
|
|
ret z
|
|
bit 6, a
|
|
jr z, .loop
|
|
scf
|
|
ret
|
|
|
|
Function2c5a: ; 2c5a (0:2c5a)
|
|
ldh a, [hROMBank]
|
|
push af
|
|
ld a, BANK(Function50b9)
|
|
call Bankswitch
|
|
call Function50b9
|
|
call Function18a0
|
|
ld a, BANK(Functiond4e6)
|
|
call Bankswitch
|
|
call Functiond4e6
|
|
ld a, BANK(_UpdateSprites)
|
|
call Bankswitch
|
|
call _UpdateSprites
|
|
call DelayFrame
|
|
call UpdateToolgear
|
|
ld hl, wToolgearFlags
|
|
set 2, [hl]
|
|
call DelayFrame
|
|
pop af
|
|
call Bankswitch
|
|
ret
|
|
|
|
UpdateAndTransferToolgear: ; 2c8b (0:2c8b)
|
|
call DelayFrame
|
|
call UpdateToolgear
|
|
ld hl, wToolgearFlags
|
|
set 2, [hl] ; ; transfer toolgear to window
|
|
call DelayFrame
|
|
ret
|
|
|
|
ScheduleNorthRowRedraw: ; 2c9a (0:2c9a)
|
|
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: ; 2caf (0:2caf)
|
|
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: ; 2cd0 (0:2cd0)
|
|
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: ; 2cef (0:2cef)
|
|
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: ; 2d04 (0:2d04)
|
|
ld de, wRedrawRowOrColumnSrcTiles
|
|
ld c, 2 * SCREEN_WIDTH
|
|
.loop
|
|
ld a, [hli]
|
|
ld [de], a
|
|
inc de
|
|
dec c
|
|
jr nz, .loop
|
|
ret
|
|
|
|
ScheduleColumnRedrawHelper: ; 2d10 (0:2d10)
|
|
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
|
|
|
|
; if DEBUG
|
|
SECTION "home/overworld.asm@QueueScript", ROM0
|
|
; else
|
|
; SECTION "QueueScript", ROM0[$35B0]
|
|
; endc
|
|
|
|
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 |