Files
luckytyphlosion e1659ecd41 Introduce linkerscript.
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.
2018-07-03 17:07:05 -04:00

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