mirror of
https://github.com/pret/pokegold.git
synced 2026-08-27 02:54:29 -05:00
More WRAM label backports
This commit is contained in:
18
home.asm
18
home.asm
@@ -18,12 +18,10 @@ INCLUDE "home/lcd.asm"
|
||||
INCLUDE "home/time.asm"
|
||||
INCLUDE "home/init.asm"
|
||||
INCLUDE "home/serial.asm"
|
||||
INCLUDE "home/joypad.asm"
|
||||
|
||||
JoypadInt::
|
||||
dr $8df, $8e6
|
||||
|
||||
Joypad::
|
||||
dr $8e6, $bdf
|
||||
Functionaf0:: ; af0
|
||||
dr $af0, $bdf
|
||||
|
||||
UpdatePalsIfCGB::
|
||||
ld a, [hCGB]
|
||||
@@ -87,10 +85,16 @@ BackUpTilesToBuffer::
|
||||
dr $3158, $3164
|
||||
|
||||
ReloadTilesFromBuffer::
|
||||
dr $3164, $3564
|
||||
dr $3164, $344c
|
||||
|
||||
Function344c::
|
||||
dr $344c, $3564
|
||||
|
||||
Function3564::
|
||||
dr $3564, $3d4f
|
||||
|
||||
DisableAudio::
|
||||
dr $3d4f, $3fee
|
||||
dr $3d4f, $3e24
|
||||
|
||||
Function3e24::
|
||||
dr $3e24, $3fee
|
||||
|
||||
425
home/joypad.asm
425
home/joypad.asm
@@ -1,457 +1,295 @@
|
||||
JoypadInt:: ; 92e
|
||||
; Replaced by Joypad, called from VBlank instead of the useless
|
||||
; joypad interrupt.
|
||||
|
||||
; This is a placeholder in case the interrupt is somehow enabled.
|
||||
JoypadInt:: ; 8df (0:08df)
|
||||
reti
|
||||
; 92f
|
||||
|
||||
ClearJoypad:: ; 92f
|
||||
xor a
|
||||
; Pressed this frame (delta)
|
||||
ld [hJoyPressed], a
|
||||
; Currently pressed
|
||||
ld [hJoyDown], a
|
||||
ret
|
||||
; 935
|
||||
|
||||
Joypad:: ; 935
|
||||
; Read the joypad register and translate it to something more
|
||||
; workable for use in-game. There are 8 buttons, so we can use
|
||||
; one byte to contain all player input.
|
||||
|
||||
; Updates:
|
||||
|
||||
; hJoypadReleased: released this frame (delta)
|
||||
; hJoypadPressed: pressed this frame (delta)
|
||||
; hJoypadDown: currently pressed
|
||||
; hJoypadSum: pressed so far
|
||||
|
||||
; Any of these three bits can be used to disable input.
|
||||
ld a, [wcfbe]
|
||||
and %11010000
|
||||
Joypad:: ; 8e6 (0:08e6)
|
||||
ld a, [wd8ba]
|
||||
and $d0
|
||||
ret nz
|
||||
|
||||
; If we're saving, input is disabled.
|
||||
ld a, [wc2cd]
|
||||
ld a, [wc1cc]
|
||||
and a
|
||||
ret nz
|
||||
|
||||
; We can only get four inputs at a time.
|
||||
; We take d-pad first for no particular reason.
|
||||
ld a, R_DPAD
|
||||
ld a, $20
|
||||
ld [rJOYP], a
|
||||
; Read twice to give the request time to take.
|
||||
rept 2
|
||||
ld a, [rJOYP]
|
||||
endr
|
||||
|
||||
; The Joypad register output is in the lo nybble (inversed).
|
||||
; We make the hi nybble of our new container d-pad input.
|
||||
ld a, [rJOYP]
|
||||
cpl
|
||||
and $f
|
||||
swap a
|
||||
|
||||
; We'll keep this in b for now.
|
||||
ld b, a
|
||||
|
||||
; Buttons make 8 total inputs (A, B, Select, Start).
|
||||
; We can fit this into one byte.
|
||||
ld a, R_BUTTONS
|
||||
ld a, $10
|
||||
ld [rJOYP], a
|
||||
; Wait for input to stabilize.
|
||||
rept 6
|
||||
ld a, [rJOYP]
|
||||
endr
|
||||
; Buttons take the lo nybble.
|
||||
ld a, [rJOYP]
|
||||
ld a, [rJOYP]
|
||||
ld a, [rJOYP]
|
||||
ld a, [rJOYP]
|
||||
ld a, [rJOYP]
|
||||
cpl
|
||||
and $f
|
||||
or b
|
||||
ld b, a
|
||||
|
||||
; Reset the joypad register since we're done with it.
|
||||
ld a, $30
|
||||
ld [rJOYP], a
|
||||
|
||||
; To get the delta we xor the last frame's input with the new one.
|
||||
ld a, [hJoypadDown] ; last frame
|
||||
ld a, [hJoypadDown]
|
||||
ld e, a
|
||||
xor b
|
||||
ld d, a
|
||||
; Released this frame:
|
||||
and e
|
||||
ld [hJoypadReleased], a
|
||||
; Pressed this frame:
|
||||
ld a, d
|
||||
and b
|
||||
ld [hJoypadPressed], a
|
||||
|
||||
; Add any new presses to the list of collective presses:
|
||||
ld c, a
|
||||
ld a, [hJoypadSum]
|
||||
or c
|
||||
ld [hJoypadSum], a
|
||||
|
||||
; Currently pressed:
|
||||
ld a, b
|
||||
ld [hJoypadDown], a
|
||||
|
||||
; Now that we have the input, we can do stuff with it.
|
||||
|
||||
; For example, soft reset:
|
||||
and A_BUTTON | B_BUTTON | SELECT | START
|
||||
cp A_BUTTON | B_BUTTON | SELECT | START
|
||||
and $f
|
||||
cp $f
|
||||
jp z, Reset
|
||||
|
||||
ret
|
||||
; 984
|
||||
|
||||
|
||||
GetJoypad:: ; 984
|
||||
; Update mirror joypad input from hJoypadDown (real input)
|
||||
|
||||
; hJoyReleased: released this frame (delta)
|
||||
; hJoyPressed: pressed this frame (delta)
|
||||
; hJoyDown: currently pressed
|
||||
|
||||
; bit 0 A
|
||||
; 1 B
|
||||
; 2 SELECT
|
||||
; 3 START
|
||||
; 4 RIGHT
|
||||
; 5 LEFT
|
||||
; 6 UP
|
||||
; 7 DOWN
|
||||
|
||||
Function935:: ; 935 (0:0935)
|
||||
push af
|
||||
push hl
|
||||
push de
|
||||
push bc
|
||||
|
||||
; The player input can be automated using an input stream.
|
||||
; See more below.
|
||||
ld a, [InputType]
|
||||
cp a, AUTO_INPUT
|
||||
jr z, .auto
|
||||
|
||||
; To get deltas, take this and last frame's input.
|
||||
ld a, [hJoypadDown] ; real input
|
||||
ld a, [wc1c6]
|
||||
cp $ff
|
||||
jr z, .asm_958
|
||||
ld a, [hJoypadDown]
|
||||
ld b, a
|
||||
ld a, [hJoyDown] ; last frame mirror
|
||||
ld a, [hJoyDown]
|
||||
ld e, a
|
||||
|
||||
; Released this frame:
|
||||
xor b
|
||||
ld d, a
|
||||
and e
|
||||
ld [hJoyReleased], a
|
||||
|
||||
; Pressed this frame:
|
||||
ld a, d
|
||||
and b
|
||||
ld [hJoyPressed], a
|
||||
|
||||
; It looks like the collective presses got commented out here.
|
||||
ld c, a
|
||||
|
||||
; Currently pressed:
|
||||
ld a, b
|
||||
ld [hJoyDown], a ; frame input
|
||||
|
||||
.quit
|
||||
ld [hJoyDown], a
|
||||
.asm_953
|
||||
pop bc
|
||||
pop de
|
||||
pop hl
|
||||
pop af
|
||||
ret
|
||||
|
||||
.auto
|
||||
; Use a predetermined input stream (used in the catching tutorial).
|
||||
|
||||
; Stream format: [input][duration]
|
||||
; A value of $ff will immediately end the stream.
|
||||
|
||||
; Read from the input stream.
|
||||
ret
|
||||
.asm_958
|
||||
ld a, [hROMBank]
|
||||
push af
|
||||
ld a, [AutoInputBank]
|
||||
ld a, [wc1c9]
|
||||
rst Bankswitch
|
||||
|
||||
ld hl, AutoInputAddress
|
||||
ld hl, wc1c7
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
|
||||
; We only update when the input duration has expired.
|
||||
ld a, [AutoInputLength]
|
||||
ld a, [wc1ca]
|
||||
and a
|
||||
jr z, .updateauto
|
||||
|
||||
; Until then, don't change anything.
|
||||
jr z, .asm_973
|
||||
dec a
|
||||
ld [AutoInputLength], a
|
||||
ld [wc1ca], a
|
||||
pop af
|
||||
rst Bankswitch
|
||||
jr .quit
|
||||
|
||||
|
||||
.updateauto
|
||||
; An input of $ff will end the stream.
|
||||
jr .asm_953
|
||||
.asm_973
|
||||
ld a, [hli]
|
||||
cp a, -1
|
||||
jr z, .stopauto
|
||||
cp $ff
|
||||
jr z, .asm_991
|
||||
ld b, a
|
||||
|
||||
; A duration of $ff will end the stream indefinitely.
|
||||
ld a, [hli]
|
||||
ld [AutoInputLength], a
|
||||
cp a, -1
|
||||
jr nz, .next
|
||||
|
||||
; The current input is overwritten.
|
||||
rept 2
|
||||
ld [wc1ca], a
|
||||
cp $ff
|
||||
jr nz, .asm_987
|
||||
dec hl
|
||||
endr
|
||||
ld b, NO_INPUT
|
||||
jr .finishauto
|
||||
|
||||
.next
|
||||
; On to the next input...
|
||||
dec hl
|
||||
ld b, $0
|
||||
jr .asm_996
|
||||
.asm_987
|
||||
ld a, l
|
||||
ld [AutoInputAddress], a
|
||||
ld [wc1c7], a
|
||||
ld a, h
|
||||
ld [AutoInputAddress+1], a
|
||||
jr .finishauto
|
||||
|
||||
.stopauto
|
||||
call StopAutoInput
|
||||
ld b, NO_INPUT
|
||||
|
||||
.finishauto
|
||||
ld [wc1c8], a
|
||||
jr .asm_996
|
||||
.asm_991
|
||||
call Function9bb
|
||||
ld b, $0
|
||||
.asm_996
|
||||
pop af
|
||||
rst Bankswitch
|
||||
ld a, b
|
||||
ld [hJoyPressed], a ; pressed
|
||||
ld [hJoyDown], a ; input
|
||||
jr .quit
|
||||
; 9ee
|
||||
|
||||
|
||||
StartAutoInput:: ; 9ee
|
||||
; Start reading automated input stream at a:hl.
|
||||
|
||||
ld [AutoInputBank], a
|
||||
ld [hJoyPressed], a
|
||||
ld [hJoyDown], a
|
||||
jr .asm_953
|
||||
ld [wc1c9], a
|
||||
ld a, l
|
||||
ld [AutoInputAddress], a
|
||||
ld [wc1c7], a
|
||||
ld a, h
|
||||
ld [AutoInputAddress+1], a
|
||||
; Start reading the stream immediately.
|
||||
ld [wc1c8], a
|
||||
xor a
|
||||
ld [AutoInputLength], a
|
||||
; Reset input mirrors.
|
||||
ld [wc1ca], a
|
||||
xor a
|
||||
ld [hJoyPressed], a ; pressed this frame
|
||||
ld [hJoyReleased], a ; released this frame
|
||||
ld [hJoyDown], a ; currently pressed
|
||||
|
||||
ld a, AUTO_INPUT
|
||||
ld [InputType], a
|
||||
ld [hJoyPressed], a
|
||||
ld [hJoyReleased], a
|
||||
ld [hJoyDown], a
|
||||
ld a, $ff
|
||||
ld [wc1c6], a
|
||||
ret
|
||||
; a0a
|
||||
|
||||
|
||||
StopAutoInput:: ; a0a
|
||||
; Clear variables related to automated input.
|
||||
Function9bb:: ; 9bb (0:09bb)
|
||||
xor a
|
||||
ld [AutoInputBank], a
|
||||
ld [AutoInputAddress], a
|
||||
ld [AutoInputAddress+1], a
|
||||
ld [AutoInputLength], a
|
||||
; Back to normal input.
|
||||
ld [InputType], a
|
||||
ld [wc1c9], a
|
||||
ld [wc1c7], a
|
||||
ld [wc1c8], a
|
||||
ld [wc1ca], a
|
||||
ld [wc1c6], a
|
||||
ret
|
||||
; a1b
|
||||
|
||||
|
||||
JoyTitleScreenInput:: ; a1b
|
||||
.loop
|
||||
|
||||
.asm_9cc
|
||||
call DelayFrame
|
||||
|
||||
push bc
|
||||
call JoyTextDelay
|
||||
call Functiona08
|
||||
pop bc
|
||||
|
||||
ld a, [hJoyDown]
|
||||
cp D_UP | SELECT | B_BUTTON
|
||||
jr z, .keycombo
|
||||
|
||||
cp $46
|
||||
jr z, .asm_9e5
|
||||
ld a, [hJoyLast]
|
||||
and START | A_BUTTON
|
||||
jr nz, .keycombo
|
||||
|
||||
and $9
|
||||
jr nz, .asm_9e5
|
||||
dec c
|
||||
jr nz, .loop
|
||||
|
||||
jr nz, .asm_9cc
|
||||
and a
|
||||
ret
|
||||
|
||||
.keycombo
|
||||
.asm_9e5
|
||||
scf
|
||||
ret
|
||||
; a36
|
||||
|
||||
|
||||
JoyWaitAorB:: ; a36
|
||||
.loop
|
||||
.asm_9e7
|
||||
call DelayFrame
|
||||
call GetJoypad
|
||||
call Function935
|
||||
ld a, [hJoyPressed]
|
||||
and A_BUTTON | B_BUTTON
|
||||
and $3
|
||||
ret nz
|
||||
call RTC
|
||||
jr .loop
|
||||
; a46
|
||||
|
||||
WaitButton:: ; a46
|
||||
call Function343
|
||||
jr .asm_9e7
|
||||
ld a, [hOAMUpdate]
|
||||
push af
|
||||
ld a, 1
|
||||
ld a, $1
|
||||
ld [hOAMUpdate], a
|
||||
call WaitBGMap
|
||||
call JoyWaitAorB
|
||||
call Function344c
|
||||
call .asm_9e7
|
||||
pop af
|
||||
ld [hOAMUpdate], a
|
||||
ret
|
||||
; a57
|
||||
|
||||
JoyTextDelay:: ; a57
|
||||
call GetJoypad
|
||||
Functiona08:: ; a08 (0:0a08)
|
||||
call Function935
|
||||
ld a, [hInMenu]
|
||||
and a
|
||||
ld a, [hJoyPressed]
|
||||
jr z, .ok
|
||||
jr z, .asm_a14
|
||||
ld a, [hJoyDown]
|
||||
.ok
|
||||
.asm_a14
|
||||
ld [hJoyLast], a
|
||||
ld a, [hJoyPressed]
|
||||
and a
|
||||
jr z, .checkframedelay
|
||||
ld a, 15
|
||||
ld [TextDelayFrames], a
|
||||
jr z, .asm_a21
|
||||
ld a, $f
|
||||
ld [wTextDelayFrames], a
|
||||
ret
|
||||
|
||||
.checkframedelay
|
||||
ld a, [TextDelayFrames]
|
||||
.asm_a21
|
||||
ld a, [wTextDelayFrames]
|
||||
and a
|
||||
jr z, .restartframedelay
|
||||
jr z, .asm_a2b
|
||||
xor a
|
||||
ld [hJoyLast], a
|
||||
ret
|
||||
|
||||
.restartframedelay
|
||||
ld a, 5
|
||||
ld [TextDelayFrames], a
|
||||
.asm_a2b
|
||||
ld a, $5
|
||||
ld [wTextDelayFrames], a
|
||||
ret
|
||||
; a80
|
||||
|
||||
WaitPressAorB_BlinkCursor:: ; a80
|
||||
ld a, [hMapObjectIndexBuffer]
|
||||
push af
|
||||
ld a, [hObjectStructIndexBuffer]
|
||||
push af
|
||||
xor a
|
||||
ld [hMapObjectIndexBuffer], a
|
||||
ld a, 6
|
||||
ld a, $6
|
||||
ld [hObjectStructIndexBuffer], a
|
||||
|
||||
.loop
|
||||
.asm_a3e
|
||||
push hl
|
||||
hlcoord 18, 17
|
||||
call BlinkCursor
|
||||
call Functionab6
|
||||
pop hl
|
||||
|
||||
call JoyTextDelay
|
||||
call Functiona08
|
||||
ld a, [hJoyLast]
|
||||
and A_BUTTON | B_BUTTON
|
||||
jr z, .loop
|
||||
|
||||
and $3
|
||||
jr z, .asm_a3e
|
||||
pop af
|
||||
ld [hObjectStructIndexBuffer], a
|
||||
pop af
|
||||
ld [hMapObjectIndexBuffer], a
|
||||
ret
|
||||
; aa5
|
||||
|
||||
SimpleWaitPressAorB:: ; aa5
|
||||
.loop
|
||||
call JoyTextDelay
|
||||
.asm_a56
|
||||
call Functiona08
|
||||
ld a, [hJoyLast]
|
||||
and A_BUTTON | B_BUTTON
|
||||
jr z, .loop
|
||||
and $3
|
||||
jr z, .asm_a56
|
||||
ret
|
||||
; aaf
|
||||
|
||||
ButtonSound:: ; aaf
|
||||
ld a, [wLinkMode]
|
||||
and a
|
||||
jr nz, .link
|
||||
call .wait_input
|
||||
jr nz, .asm_a72
|
||||
call Functiona77
|
||||
push de
|
||||
ld de, SFX_READ_TEXT_2
|
||||
call PlaySFX
|
||||
ld de, $8
|
||||
call Function3e24
|
||||
pop de
|
||||
ret
|
||||
|
||||
.link
|
||||
ld c, 65
|
||||
.asm_a72
|
||||
ld c, $41
|
||||
jp DelayFrames
|
||||
; ac6
|
||||
|
||||
.wait_input: ; ac6
|
||||
Functiona77:: ; a77 (0:0a77)
|
||||
ld a, [hOAMUpdate]
|
||||
push af
|
||||
ld a, $1
|
||||
ld [hOAMUpdate], a
|
||||
ld a, [InputType]
|
||||
ld a, [wc1c6]
|
||||
or a
|
||||
jr z, .input_wait_loop
|
||||
callba _DudeAutoInput_A
|
||||
|
||||
.input_wait_loop
|
||||
call .blink_cursor
|
||||
call JoyTextDelay
|
||||
jr z, .asm_a8a
|
||||
ld a, $70
|
||||
ld hl, $4de9
|
||||
rst FarCall
|
||||
.asm_a8a
|
||||
call Functionaa6
|
||||
call Functiona08
|
||||
ld a, [hJoyPressed]
|
||||
and A_BUTTON | B_BUTTON
|
||||
jr nz, .received_input
|
||||
call RTC
|
||||
and $3
|
||||
jr nz, .asm_aa2
|
||||
call Function343
|
||||
ld a, $1
|
||||
ld [hBGMapMode], a
|
||||
call DelayFrame
|
||||
jr .input_wait_loop
|
||||
|
||||
.received_input
|
||||
jr .asm_a8a
|
||||
.asm_aa2
|
||||
pop af
|
||||
ld [hOAMUpdate], a
|
||||
ret
|
||||
; af5
|
||||
|
||||
.blink_cursor: ; af5
|
||||
Functionaa6:: ; aa6 (0:0aa6)
|
||||
ld a, [hVBlankCounter]
|
||||
and %00010000 ; bit 4, a
|
||||
and $10
|
||||
jr z, .cursor_off
|
||||
ld a, "▼"
|
||||
jr .load_cursor_state
|
||||
|
||||
.cursor_off
|
||||
ld a, [TileMap + 17 + 17 * SCREEN_WIDTH]
|
||||
|
||||
ld a, "─"
|
||||
.load_cursor_state
|
||||
ld [TileMap + 18 + 17 * SCREEN_WIDTH], a
|
||||
Coorda 18, 17
|
||||
ret
|
||||
; b06
|
||||
|
||||
BlinkCursor:: ; b06
|
||||
Functionab6:: ; ab6 (0:0ab6)
|
||||
push bc
|
||||
ld a, [hl]
|
||||
ld b, a
|
||||
@@ -493,4 +331,3 @@ BlinkCursor:: ; b06
|
||||
ld a, "▼"
|
||||
ld [hl], a
|
||||
ret
|
||||
; b40
|
||||
|
||||
14
macros.asm
14
macros.asm
@@ -129,31 +129,31 @@ hlcoord equs "coord hl,"
|
||||
coord: MACRO
|
||||
; register, x, y[, origin]
|
||||
if _NARG < 4
|
||||
ld \1, TileMap + SCREEN_WIDTH * (\3) + (\2)
|
||||
ld \1, wTileMap + SCREEN_WIDTH * (\3) + (\2)
|
||||
else
|
||||
ld \1, \4 + SCREEN_WIDTH * (\3) + (\2)
|
||||
endc
|
||||
ENDM
|
||||
|
||||
dwcoord: MACRO
|
||||
dwCoord: MACRO
|
||||
rept _NARG / 2
|
||||
dw TileMap + SCREEN_WIDTH * (\2) + (\1)
|
||||
dw wTileMap + SCREEN_WIDTH * (\2) + (\1)
|
||||
shift
|
||||
shift
|
||||
endr
|
||||
ENDM
|
||||
|
||||
ldcoord_a: MACRO
|
||||
Coorda: MACRO
|
||||
if _NARG < 3
|
||||
ld [TileMap + SCREEN_WIDTH * (\2) + (\1)], a
|
||||
ld [wTileMap + SCREEN_WIDTH * (\2) + (\1)], a
|
||||
else
|
||||
ld [\3 + SCREEN_WIDTH * (\2) + (\1)], a
|
||||
endc
|
||||
ENDM
|
||||
|
||||
lda_coord: MACRO
|
||||
aCoord: MACRO
|
||||
if _NARG < 3
|
||||
ld a, [TileMap + SCREEN_WIDTH * (\2) + (\1)]
|
||||
ld a, [wTileMap + SCREEN_WIDTH * (\2) + (\1)]
|
||||
else
|
||||
ld a, [\3 + SCREEN_WIDTH * (\2) + (\1)]
|
||||
endc
|
||||
|
||||
Reference in New Issue
Block a user