diff options
-rw-r--r-- | home.asm | 53 | ||||
-rw-r--r-- | home/audio.asm | 599 | ||||
-rw-r--r-- | home/fade.asm | 8 | ||||
-rw-r--r-- | home/joypad.asm | 212 | ||||
-rw-r--r-- | home/palettes.asm | 286 | ||||
-rw-r--r-- | home/rtc.asm | 2 | ||||
-rw-r--r-- | home/serial.asm | 49 | ||||
-rw-r--r-- | macros.asm | 12 | ||||
-rw-r--r-- | macros/rst.asm | 10 | ||||
-rw-r--r-- | main.asm | 9 | ||||
-rw-r--r-- | wram.asm | 300 |
11 files changed, 298 insertions, 1242 deletions
@@ -1,6 +1,6 @@ -; rst vectors INCLUDE "constants.asm" +; rst vectors INCLUDE "rst.asm" INCLUDE "interrupts.asm" @@ -19,22 +19,11 @@ INCLUDE "home/time.asm" INCLUDE "home/init.asm" INCLUDE "home/serial.asm" INCLUDE "home/joypad.asm" +INCLUDE "home/decompress.asm" +INCLUDE "home/palettes.asm" -Functionaf0:: ; af0 - dr $af0, $bdf - -UpdatePalsIfCGB:: - ld a, [hCGB] - and a - ret z -UpdateCGBPals:: - dr $be3, $c61 - -Functionc61:: - dr $c61, $c83 - -Functionc83:: - dr $c83, $1458 +Functiond70:: + dr $d70, $1458 UpdateBGMapBuffer:: dr $1458, $14bb @@ -76,16 +65,36 @@ CloseSRAM:: dr $30f1, $30ff Function30ff:: - dr $30ff, $314c + dr $30ff, $311a + +CopyBytes:: + dr $311a, $314c ByteFill:: dr $314c, $3158 BackUpTilesToBuffer:: - dr $3158, $3164 + hlcoord 0, 0 + decoord 0, 0, wTileMapBackup + ld bc, SCREEN_HEIGHT * SCREEN_WIDTH + jp CopyBytes ReloadTilesFromBuffer:: - dr $3164, $344c + xor a + ld [hBGMapMode], a + call ReloadTilesFromBuffer_ + ld a, $1 + ld [hBGMapMode], a + ret + +ReloadTilesFromBuffer_:: + hlcoord 0, 0, wTileMapBackup + decoord 0, 0 + ld bc, SCREEN_HEIGHT * SCREEN_WIDTH + jp CopyBytes + +Function317b:: + dr $317b, $344c Function344c:: dr $344c, $3564 @@ -93,8 +102,4 @@ Function344c:: Function3564:: dr $3564, $3d4f -DisableAudio:: - dr $3d4f, $3e24 - -Function3e24:: - dr $3e24, $3fee +INCLUDE "home/audio.asm" diff --git a/home/audio.asm b/home/audio.asm index c7bb7fed..1c58598f 100644 --- a/home/audio.asm +++ b/home/audio.asm @@ -1,596 +1,5 @@ -; Audio interfaces. +DisableAudio:: + dr $3d4f, $3e24 -MapSetup_Sound_Off:: ; 3b4e - - push hl - push de - push bc - push af - - ld a, [hROMBank] - push af - ld a, BANK(_MapSetup_Sound_Off) - ld [hROMBank], a - ld [MBC3RomBank], a - - call _MapSetup_Sound_Off - - pop af - ld [hROMBank], a - ld [MBC3RomBank], a - - pop af - pop bc - pop de - pop hl - ret -; 3b6a - - -UpdateSound:: ; 3b6a - - push hl - push de - push bc - push af - - ld a, [hROMBank] - push af - ld a, BANK(_UpdateSound) - ld [hROMBank], a - ld [MBC3RomBank], a - - call _UpdateSound - - pop af - ld [hROMBank], a - ld [MBC3RomBank], a - - pop af - pop bc - pop de - pop hl - ret -; 3b86 - - -_LoadMusicByte:: ; 3b86 -; CurMusicByte = [a:de] -GLOBAL LoadMusicByte - - ld [hROMBank], a - ld [MBC3RomBank], a - - ld a, [de] - ld [CurMusicByte], a - ld a, BANK(LoadMusicByte) - - ld [hROMBank], a - ld [MBC3RomBank], a - ret -; 3b97 - - -PlayMusic:: ; 3b97 -; Play music de. - - push hl - push de - push bc - push af - - ld a, [hROMBank] - push af - ld a, BANK(_PlayMusic) ; and BANK(_MapSetup_Sound_Off) - ld [hROMBank], a - ld [MBC3RomBank], a - - ld a, e - and a - jr z, .nomusic - - call _PlayMusic - jr .end - -.nomusic - call _MapSetup_Sound_Off - -.end - pop af - ld [hROMBank], a - ld [MBC3RomBank], a - pop af - pop bc - pop de - pop hl - ret -; 3bbc - - -PlayMusic2:: ; 3bbc -; Stop playing music, then play music de. - - push hl - push de - push bc - push af - - ld a, [hROMBank] - push af - ld a, BANK(_PlayMusic) - ld [hROMBank], a - ld [MBC3RomBank], a - - push de - ld de, MUSIC_NONE - call _PlayMusic - call DelayFrame - pop de - call _PlayMusic - - pop af - ld [hROMBank], a - ld [MBC3RomBank], a - - pop af - pop bc - pop de - pop hl - ret - -; 3be3 - - -PlayCryHeader:: ; 3be3 -; Play cry header de. - - push hl - push de - push bc - push af - - ld a, [hROMBank] - push af - - ; Cry headers are stuck in one bank. - ld a, BANK(CryHeaders) - ld [hROMBank], a - ld [MBC3RomBank], a - - ld hl, CryHeaders -rept 6 - add hl, de -endr - - ld e, [hl] - inc hl - ld d, [hl] - inc hl - - ld a, [hli] - ld [CryPitch], a - ld a, [hli] - ld [CryPitch + 1], a - ld a, [hli] - ld [CryLength], a - ld a, [hl] - ld [CryLength + 1], a - - ld a, BANK(_PlayCryHeader) - ld [hROMBank], a - ld [MBC3RomBank], a - - call _PlayCryHeader - - pop af - ld [hROMBank], a - ld [MBC3RomBank], a - - pop af - pop bc - pop de - pop hl - ret -; 3c23 - - -PlaySFX:: ; 3c23 -; Play sound effect de. -; Sound effects are ordered by priority (lowest to highest) - - push hl - push de - push bc - push af - - ; Is something already playing? - call CheckSFX - jr nc, .play - - ; Does it have priority? - ld a, [CurSFX] - cp e - jr c, .done - -.play - ld a, [hROMBank] - push af - ld a, BANK(_PlaySFX) - ld [hROMBank], a - ld [MBC3RomBank], a - - ld a, e - ld [CurSFX], a - call _PlaySFX - - pop af - ld [hROMBank], a - ld [MBC3RomBank], a - -.done - pop af - pop bc - pop de - pop hl - ret -; 3c4e - - -WaitPlaySFX:: ; 3c4e - call WaitSFX - call PlaySFX - ret -; 3c55 - - -WaitSFX:: ; 3c55 -; infinite loop until sfx is done playing - - push hl - -.wait - ld hl, Channel5Flags - bit 0, [hl] - jr nz, .wait - ld hl, Channel6Flags - bit 0, [hl] - jr nz, .wait - ld hl, Channel7Flags - bit 0, [hl] - jr nz, .wait - ld hl, Channel8Flags - bit 0, [hl] - jr nz, .wait - - pop hl - ret -; 3c74 - -IsSFXPlaying:: ; 3c74 -; Return carry if no sound effect is playing. -; The inverse of CheckSFX. - push hl - - ld hl, Channel5Flags - bit 0, [hl] - jr nz, .playing - ld hl, Channel6Flags - bit 0, [hl] - jr nz, .playing - ld hl, Channel7Flags - bit 0, [hl] - jr nz, .playing - ld hl, Channel8Flags - bit 0, [hl] - jr nz, .playing - - pop hl - scf - ret - -.playing - pop hl - and a - ret -; 3c97 - -MaxVolume:: ; 3c97 - ld a, $77 ; max - ld [Volume], a - ret -; 3c9d - -LowVolume:: ; 3c9d - ld a, $33 ; 40% - ld [Volume], a - ret -; 3ca3 - -VolumeOff:: ; 3ca3 - xor a - ld [Volume], a - ret -; 3ca8 - -Unused_FadeOutMusic:: ; 3ca8 - ld a, 4 - ld [MusicFade], a - ret -; 3cae - -FadeInMusic:: ; 3cae - ld a, 4 | 1 << 7 - ld [MusicFade], a - ret -; 3cb4 - -SkipMusic:: ; 3cb4 -; Skip a frames of music. -.loop - and a - ret z - dec a - call UpdateSound - jr .loop -; 3cbc - -FadeToMapMusic:: ; 3cbc - push hl - push de - push bc - push af - - call GetMapMusic - ld a, [wMapMusic] - cp e - jr z, .done - - ld a, 8 - ld [MusicFade], a - ld a, e - ld [MusicFadeIDLo], a - ld a, d - ld [MusicFadeIDHi], a - ld a, e - ld [wMapMusic], a - -.done - pop af - pop bc - pop de - pop hl - ret -; 3cdf - -PlayMapMusic:: ; 3cdf - push hl - push de - push bc - push af - - call GetMapMusic - ld a, [wMapMusic] - cp e - jr z, .done - - push de - ld de, MUSIC_NONE - call PlayMusic - call DelayFrame - pop de - ld a, e - ld [wMapMusic], a - call PlayMusic - -.done - pop af - pop bc - pop de - pop hl - ret -; 3d03 - -EnterMapMusic:: ; 3d03 - push hl - push de - push bc - push af - - xor a - ld [wDontPlayMapMusicOnReload], a - ld de, MUSIC_BICYCLE - ld a, [PlayerState] - cp PLAYER_BIKE - jr z, .play - call GetMapMusic -.play - push de - ld de, MUSIC_NONE - call PlayMusic - call DelayFrame - pop de - - ld a, e - ld [wMapMusic], a - call PlayMusic - - pop af - pop bc - pop de - pop hl - ret -; 3d2f - -TryRestartMapMusic:: ; 3d2f - ld a, [wDontPlayMapMusicOnReload] - and a - jr z, RestartMapMusic - xor a - ld [wMapMusic], a - ld de, MUSIC_NONE - call PlayMusic - call DelayFrame - xor a - ld [wDontPlayMapMusicOnReload], a - ret -; 3d47 - -RestartMapMusic:: ; 3d47 - push hl - push de - push bc - push af - ld de, MUSIC_NONE - call PlayMusic - call DelayFrame - ld a, [wMapMusic] - ld e, a - ld d, 0 - call PlayMusic - pop af - pop bc - pop de - pop hl - ret -; 3d62 - -SpecialMapMusic:: ; 3d62 - ld a, [PlayerState] - cp PLAYER_SURF - jr z, .surf - cp PLAYER_SURF_PIKA - jr z, .surf - - ld a, [StatusFlags2] - bit 2, a - jr nz, .contest - -.no - and a - ret - -.bike - ld de, MUSIC_BICYCLE - scf - ret - -.surf - ld de, MUSIC_SURF - scf - ret - -.contest - ld a, [MapGroup] - cp GROUP_ROUTE_35_NATIONAL_PARK_GATE - jr nz, .no - ld a, [MapNumber] - cp MAP_ROUTE_35_NATIONAL_PARK_GATE - jr z, .ranking - cp MAP_ROUTE_36_NATIONAL_PARK_GATE - jr nz, .no - -.ranking - ld de, MUSIC_BUG_CATCHING_CONTEST_RANKING - scf - ret -; 3d97 - -GetMapMusic:: ; 3d97 - call SpecialMapMusic - ret c - call GetMapHeaderMusic - ret -; 3d9f - -Function3d9f:: ; 3d9f -; Places a BCD number at the -; upper center of the screen. -; Unreferenced. - ld a, 4 * 8 - ld [Sprites + 38 * 4], a - ld [Sprites + 39 * 4], a - ld a, 10 * 8 - ld [Sprites + 38 * 4 + 1], a - ld a, 11 * 8 - ld [Sprites + 39 * 4 + 1], a - xor a - ld [Sprites + 38 * 4 + 3], a - ld [Sprites + 39 * 4 + 3], a - ld a, [wc296] - cp 100 - jr nc, .max - add 1 - daa - ld b, a - swap a - and $f - add "0" - ld [Sprites + 38 * 4 + 2], a - ld a, b - and $f - add "0" - ld [Sprites + 39 * 4 + 2], a - ret - -.max - ld a, "9" - ld [Sprites + 38 * 4 + 2], a - ld [Sprites + 39 * 4 + 2], a - ret -; 3dde - -CheckSFX:: ; 3dde -; Return carry if any SFX channels are active. - ld a, [Channel5Flags] - bit 0, a - jr nz, .playing - ld a, [Channel6Flags] - bit 0, a - jr nz, .playing - ld a, [Channel7Flags] - bit 0, a - jr nz, .playing - ld a, [Channel8Flags] - bit 0, a - jr nz, .playing - and a - ret -.playing - scf - ret -; 3dfe - -TerminateExpBarSound:: ; 3dfe - xor a - ld [Channel5Flags], a - ld [SoundInput], a - ld [rNR10], a - ld [rNR11], a - ld [rNR12], a - ld [rNR13], a - ld [rNR14], a - ret -; 3e10 - - -ChannelsOff:: ; 3e10 -; Quickly turn off music channels - xor a - ld [Channel1Flags], a - ld [Channel2Flags], a - ld [Channel3Flags], a - ld [Channel4Flags], a - ld [SoundInput], a - ret -; 3e21 - -SFXChannelsOff:: ; 3e21 -; Quickly turn off sound effect channels - xor a - ld [Channel5Flags], a - ld [Channel6Flags], a - ld [Channel7Flags], a - ld [Channel8Flags], a - ld [SoundInput], a - ret -; 3e32 +PlaySound:: + dr $3e24, $3fee diff --git a/home/fade.asm b/home/fade.asm index 421a4815..7b11604c 100644 --- a/home/fade.asm +++ b/home/fade.asm @@ -46,12 +46,12 @@ RotatePalettesRight:: .loop push de ld a, [hli] - call Functionc61 + call DmgToCgbBGPals ld a, [hli] ld e, a ld a, [hli] ld d, a - call Functionc83 + call DmgToCgbObjPals ld c, 8 call DelayFrames pop de @@ -89,9 +89,9 @@ RotatePalettesLeft:: ld d, a ld a, [hld] ld e, a - call Functionc83 + call DmgToCgbObjPals ld a, [hld] - call Functionc61 + call DmgToCgbBGPals ld c, 8 call DelayFrames pop de diff --git a/home/joypad.asm b/home/joypad.asm index 58e00eac..de2c792f 100644 --- a/home/joypad.asm +++ b/home/joypad.asm @@ -4,11 +4,12 @@ JoypadInt:: ; 8df (0:08df) ld [hJoyPressed], a ld [hJoyDown], a ret + Joypad:: ; 8e6 (0:08e6) ld a, [wd8ba] and $d0 ret nz - ld a, [wc1cc] + ld a, [wGameLogicPaused] and a ret nz ld a, $20 @@ -52,14 +53,15 @@ Joypad:: ; 8e6 (0:08e6) cp $f jp z, Reset ret -Function935:: ; 935 (0:0935) + +GetJoypad:: ; 935 (0:0935) push af push hl push de push bc - ld a, [wc1c6] + ld a, [wInputType] cp $ff - jr z, .asm_958 + jr z, .auto ld a, [hJoypadDown] ld b, a ld a, [hJoyDown] @@ -74,141 +76,163 @@ Function935:: ; 935 (0:0935) ld c, a ld a, b ld [hJoyDown], a -.asm_953 +.quit pop bc pop de pop hl pop af ret -.asm_958 + +.auto ld a, [hROMBank] push af - ld a, [wc1c9] + ld a, [wAutoInputBank] rst Bankswitch - ld hl, wc1c7 + ld hl, wAutoInputAddress ld a, [hli] ld h, [hl] ld l, a - ld a, [wc1ca] + ld a, [wAutoInputLength] and a - jr z, .asm_973 + jr z, .updateauto dec a - ld [wc1ca], a + ld [wAutoInputLength], a pop af rst Bankswitch - jr .asm_953 -.asm_973 + jr .quit + +.updateauto ld a, [hli] cp $ff - jr z, .asm_991 + jr z, .stopauto ld b, a ld a, [hli] - ld [wc1ca], a + ld [wAutoInputLength], a cp $ff - jr nz, .asm_987 + jr nz, .next dec hl dec hl ld b, $0 - jr .asm_996 -.asm_987 + jr .finishauto + +.next ld a, l - ld [wc1c7], a + ld [wAutoInputAddress], a ld a, h - ld [wc1c8], a - jr .asm_996 -.asm_991 - call Function9bb + ld [wAutoInputAddress + 1], a + jr .finishauto + +.stopauto + call StopAutoInput ld b, $0 -.asm_996 +.finishauto pop af rst Bankswitch ld a, b ld [hJoyPressed], a ld [hJoyDown], a - jr .asm_953 - ld [wc1c9], a + jr .quit + +StartAutoInput:: + ld [wAutoInputBank], a ld a, l - ld [wc1c7], a + ld [wAutoInputAddress], a ld a, h - ld [wc1c8], a + ld [wAutoInputAddress + 1], a xor a - ld [wc1ca], a + ld [wAutoInputLength], a xor a ld [hJoyPressed], a ld [hJoyReleased], a ld [hJoyDown], a ld a, $ff - ld [wc1c6], a + ld [wInputType], a ret -Function9bb:: ; 9bb (0:09bb) + +StopAutoInput:: ; 9bb (0:09bb) xor a - ld [wc1c9], a - ld [wc1c7], a - ld [wc1c8], a - ld [wc1ca], a - ld [wc1c6], a + ld [wAutoInputBank], a + ld [wAutoInputAddress], a + ld [wAutoInputAddress + 1], a + ld [wAutoInputLength], a + ld [wInputType], a ret -.asm_9cc + +JoyTitleScreenInput:: +.loop call DelayFrame push bc - call Functiona08 + call JoyTextDelay pop bc + ld a, [hJoyDown] - cp $46 - jr z, .asm_9e5 + cp D_UP | SELECT | B_BUTTON + jr z, .keycombo + ld a, [hJoyLast] - and $9 - jr nz, .asm_9e5 + and START | A_BUTTON + jr nz, .keycombo + dec c - jr nz, .asm_9cc + jr nz, .loop + and a ret -.asm_9e5 + +.keycombo scf ret -.asm_9e7 + +JoyWaitAorB:: call DelayFrame - call Function935 + call GetJoypad ld a, [hJoyPressed] - and $3 + and A_BUTTON | B_BUTTON ret nz - call Function343 - jr .asm_9e7 + call RTC + jr JoyWaitAorB + +WaitButton:: ld a, [hOAMUpdate] push af ld a, $1 ld [hOAMUpdate], a call Function344c - call .asm_9e7 + call JoyWaitAorB pop af ld [hOAMUpdate], a ret -Functiona08:: ; a08 (0:0a08) - call Function935 + +JoyTextDelay:: ; a08 (0:0a08) + call GetJoypad ld a, [hInMenu] and a ld a, [hJoyPressed] - jr z, .asm_a14 + jr z, .ok ld a, [hJoyDown] -.asm_a14 +.ok ld [hJoyLast], a ld a, [hJoyPressed] and a - jr z, .asm_a21 - ld a, $f + jr z, .checkframedelay + ld a, 15 ld [wTextDelayFrames], a ret -.asm_a21 + +.checkframedelay ld a, [wTextDelayFrames] and a - jr z, .asm_a2b + jr z, .restartframedelay xor a ld [hJoyLast], a ret -.asm_a2b - ld a, $5 + +.restartframedelay + ld a, 5 ld [wTextDelayFrames], a ret + +WaitPressAorB_BlinkCursor:: ld a, [hMapObjectIndexBuffer] push af ld a, [hObjectStructIndexBuffer] @@ -217,66 +241,72 @@ Functiona08:: ; a08 (0:0a08) ld [hMapObjectIndexBuffer], a ld a, $6 ld [hObjectStructIndexBuffer], a -.asm_a3e +.loop push hl hlcoord 18, 17 - call Functionab6 + call BlinkCursor pop hl - call Functiona08 + call JoyTextDelay ld a, [hJoyLast] - and $3 - jr z, .asm_a3e + and A_BUTTON | B_BUTTON + jr z, .loop pop af ld [hObjectStructIndexBuffer], a pop af ld [hMapObjectIndexBuffer], a ret -.asm_a56 - call Functiona08 + +SimpleWaitPressAorB:: +.loop + call JoyTextDelay ld a, [hJoyLast] - and $3 - jr z, .asm_a56 + and A_BUTTON | B_BUTTON + jr z, .loop ret + +ButtonSound:: ld a, [wLinkMode] and a - jr nz, .asm_a72 - call Functiona77 + jr nz, .link_delay + call JoyWaitInput push de - ld de, $8 - call Function3e24 + ld de, SFX_READ_TEXT_2 + call PlaySound pop de ret -.asm_a72 - ld c, $41 + +.link_delay + ld c, 65 jp DelayFrames -Functiona77:: ; a77 (0:0a77) + +JoyWaitInput:: ; a77 (0:0a77) ld a, [hOAMUpdate] push af ld a, $1 ld [hOAMUpdate], a - ld a, [wc1c6] + ld a, [wInputType] or a - jr z, .asm_a8a - ld a, $70 - ld hl, $4de9 - rst FarCall -.asm_a8a - call Functionaa6 - call Functiona08 + jr z, .wait_loop + callba _DudeAutoInput_A + +.wait_loop + call JoyBlinkCursor + call JoyTextDelay ld a, [hJoyPressed] - and $3 - jr nz, .asm_aa2 - call Function343 + and A_BUTTON | B_BUTTON + jr nz, .received_input + call RTC ld a, $1 ld [hBGMapMode], a call DelayFrame - jr .asm_a8a -.asm_aa2 + jr .wait_loop + +.received_input pop af ld [hOAMUpdate], a ret -Functionaa6:: ; aa6 (0:0aa6) +JoyBlinkCursor:: ; aa6 (0:0aa6) ld a, [hVBlankCounter] and $10 jr z, .cursor_off @@ -289,7 +319,7 @@ Functionaa6:: ; aa6 (0:0aa6) Coorda 18, 17 ret -Functionab6:: ; ab6 (0:0ab6) +BlinkCursor:: ; ab6 (0:0ab6) push bc ld a, [hl] ld b, a diff --git a/home/palettes.asm b/home/palettes.asm index 2f179209..961327d5 100644 --- a/home/palettes.asm +++ b/home/palettes.asm @@ -1,365 +1,219 @@ -; Functions dealing with palettes. - - -UpdatePalsIfCGB:: ; c2f -; update bgp data from BGPals -; update obp data from OBPals -; return carry if successful - -; check cgb +UpdatePalsIfCGB:: ; bdf (0:0bdf) ld a, [hCGB] and a ret z - - -UpdateCGBPals:: ; c33 -; return carry if successful -; any pals to update? +UpdateCGBPals:: ; be3 (0:0be3) ld a, [hCGBPalUpdate] and a ret z - - -ForceUpdateCGBPals:: ; c37 - - ld a, [rSVBK] - push af - ld a, 5 ; BANK(BGPals) - ld [rSVBK], a - - ld hl, BGPals ; 5:d080 - -; copy 8 pals to bgpd - ld a, %10000000 ; auto increment, index 0 +ForceUpdateCGBPals:: + ld hl, wBGPals + ld a, $80 ld [rBGPI], a - ld c, rBGPD % $100 - ld b, 4 ; NUM_PALS / 2 + ld c, 8 / 2 .bgp rept 2 palettes ld a, [hli] - ld [$ff00+c], a + ld [rBGPD], a endr - - dec b + dec c jr nz, .bgp - -; hl is now 5:d0c0 OBPals - -; copy 8 pals to obpd - ld a, %10000000 ; auto increment, index 0 + ld a, $80 ld [rOBPI], a - ld c, rOBPD % $100 - ld b, 4 ; NUM_PALS / 2 + ld c, 8 / 2 .obp rept 2 palettes ld a, [hli] - ld [$ff00+c], a + ld [rOBPD], a endr - - dec b + dec c jr nz, .obp - - pop af - ld [rSVBK], a - -; clear pal update queue xor a ld [hCGBPalUpdate], a - scf ret -; c9f - - -DmgToCgbBGPals:: ; c9f -; exists to forego reinserting cgb-converted image data - -; input: a -> bgp +DmgToCgbBGPals:: ; c61 (0:0c61) ld [rBGP], a push af - -; Don't need to be here if DMG ld a, [hCGB] and a jr z, .end - push hl push de push bc - ld a, [rSVBK] - push af - - ld a, 5 ; gfx - ld [rSVBK], a - -; copy & reorder bg pal buffer - ld hl, BGPals ; to - ld de, UnknBGPals ; from -; order + ld hl, wBGPals + ld de, wUnknBGPals ld a, [rBGP] ld b, a -; all pals - ld c, 8 + ld c, $8 call CopyPals -; request pal update - ld a, 1 + ld a, $1 ld [hCGBPalUpdate], a - - pop af - ld [rSVBK], a pop bc pop de pop hl .end pop af ret -; ccb - - -DmgToCgbObjPals:: ; ccb -; exists to forego reinserting cgb-converted image data - -; input: d -> obp1 -; e -> obp2 +DmgToCgbObjPals:: ; c83 (0:0c83) ld a, e ld [rOBP0], a ld a, d ld [rOBP1], a - ld a, [hCGB] and a ret z - push hl push de push bc - ld a, [rSVBK] - push af - - ld a, 5 - ld [rSVBK], a - -; copy & reorder obj pal buffer - ld hl, OBPals ; to - ld de, UnknOBPals ; from -; order + ld hl, wOBPals + ld de, wUnknOBPals ld a, [rOBP0] ld b, a -; all pals - ld c, 8 + ld c, $8 call CopyPals -; request pal update - ld a, 1 + ld a, $1 ld [hCGBPalUpdate], a - - pop af - ld [rSVBK], a pop bc pop de pop hl ret -; cf8 - -DmgToCgbObjPal0:: ; cf8 +DmgToCgbObjPal0:: ld [rOBP0], a push af - -; Don't need to be here if not CGB ld a, [hCGB] and a - jr z, .dmg - + jr z, .end push hl push de push bc - - ld a, [rSVBK] - push af - ld a, 5 ; gfx - ld [rSVBK], a - - ld hl, OBPals - ld de, UnknOBPals + ld hl, wOBPals + ld de, wUnknOBPals ld a, [rOBP0] ld b, a - ld c, 1 + ld c, $1 call CopyPals - ld a, 1 + ld a, $1 ld [hCGBPalUpdate], a - - pop af - ld [rSVBK], a - pop bc pop de pop hl - -.dmg +.end pop af ret -; d24 -DmgToCgbObjPal1:: ; d24 +DmgToCgbObjPal1:: ld [rOBP1], a push af - ld a, [hCGB] and a - jr z, .dmg - + jr z, .end push hl push de push bc - - ld a, [rSVBK] - push af - ld a, 5 ; gfx - ld [rSVBK], a - - ld hl, OBPals + 1 palettes - ld de, UnknOBPals + 1 palettes + ld hl, wOBPals + 1 palettes + ld de, wUnknOBPals + 1 palettes ld a, [rOBP1] ld b, a - ld c, 1 + ld c, $1 call CopyPals - ld a, 1 + ld a, $1 ld [hCGBPalUpdate], a - - pop af - ld [rSVBK], a - pop bc pop de pop hl - -.dmg +.end pop af ret -; d50 - - - -CopyPals:: ; d50 -; copy c palettes in order b from de to hl +CopyPals:: ; cea (0:0cea) push bc - ld c, 4 ; NUM_PAL_COLORS + ld c, $4 .loop push de push hl - -; get pal color ld a, b - and %11 ; color -; 2 bytes per color + and $3 add a ld l, a - ld h, 0 + ld h, $0 add hl, de ld e, [hl] inc hl ld d, [hl] - -; dest pop hl -; write color ld [hl], e inc hl ld [hl], d inc hl -; next pal color srl b srl b -; source pop de -; done pal? dec c jr nz, .loop - -; de += 8 (next pal) - ld a, 1 palettes ; NUM_PAL_COLORS * 2 ; bytes per pal + ld a, $8 add e jr nc, .ok inc d .ok ld e, a - -; how many more pals? pop bc dec c jr nz, CopyPals ret -; d79 - -ClearVBank1:: ; d79 +ClearVBank1:: ld a, [hCGB] and a ret z - - ld a, 1 + ld a, $1 ld [rVBK], a - - ld hl, VTiles0 - ld bc, VRAM_End - VTiles0 + ld hl, $8000 + ld bc, $2000 xor a call ByteFill - - ld a, 0 + ld a, $0 ld [rVBK], a ret -; d90 - -ret_d90:: ; d90 +Functiond2a:: + ld hl, wTileMap + ld de, wccd9 + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT +.asm_d33 + ld a, [hli] + cp $60 + jr c, .asm_d3b + ld a, $7 + ld [de], a +.asm_d3b + inc de + dec bc + ld a, b + or c + jr nz, .asm_d33 ret -; d91 - -Special_ReloadSpritesNoPalettes:: ; d91 +Functiond42:: ld a, [hCGB] and a ret z - ld a, [rSVBK] - push af - ld a, 5 ; BANK(BGPals) - ld [rSVBK], a - ld hl, BGPals - ld bc, $40 + $10 + ld hl, wBGPals + ld bc, $50 xor a call ByteFill - pop af - ld [rSVBK], a - ld a, 1 + ld a, $1 ld [hCGBPalUpdate], a call DelayFrame ret -; db1 - -FarCallSwapTextboxPalettes:: ; db1 - ld a, [hROMBank] - push af - ld a, BANK(SwapTextboxPalettes) - rst Bankswitch - call SwapTextboxPalettes - pop af - rst Bankswitch +FarCallSwapTextboxPalettes:: + homecall SwapTextboxPalettes ret -; dbd - -FarCallScrollBGMapPalettes:: ; dbd - ld a, [hROMBank] - push af - ld a, BANK(ScrollBGMapPalettes) - rst Bankswitch - call ScrollBGMapPalettes - - pop af - rst Bankswitch +FarCallScrollBGMapPalettes:: + homecall ScrollBGMapPalettes ret -; dc9 diff --git a/home/rtc.asm b/home/rtc.asm index 4b950ac6..ca014e46 100644 --- a/home/rtc.asm +++ b/home/rtc.asm @@ -1,4 +1,4 @@ -Function343:: ; 343 +RTC:: ; 343 ; update time and time-sensitive palettes ; rtc enabled? diff --git a/home/serial.asm b/home/serial.asm index 02474ed7..645f531f 100644 --- a/home/serial.asm +++ b/home/serial.asm @@ -18,9 +18,9 @@ Serial:: ; 6aa (0:06aa) ld a, [hLinkPlayerNumber] cp $2 jr z, .player2 - ld a, $0 + ld a, 0 << rSC_ON ld [rSC], a - ld a, $80 + ld a, 1 << rSC_ON ld [rSC], a jr .player2 @@ -174,7 +174,7 @@ Function73b:: ; 73b (0:073b) jr nz, .rIE_not_equal_8 ld [wce5d], a - ld a, $50 + ld a, 80 ld [wce5d + 1], a .rIE_not_equal_8 @@ -201,7 +201,7 @@ Function73b:: ; 73b (0:073b) ld a, [rIE] and $f cp $8 - ld a, $fe + ld a, SERIAL_NO_DATA_BYTE ret z ld a, [hl] ld [hSerialSend], a @@ -230,8 +230,8 @@ SerialDisconnected:: ; 7e4 (0:07e4) ret Function7ec:: ; 7ec - ld hl, wce56 - ld de, wce51 + ld hl, wPlayerLinkAction + ld de, wOtherPlayerLinkMode ld c, $2 ld a, $1 ld [hFFCE], a @@ -269,7 +269,7 @@ Function822:: ; 822 WaitLinkTransfer:: ; 82e (0:082e) ld a, $ff - ld [wce52], a + ld [wOtherPlayerLinkAction], a .loop call LinkTransfer call DelayFrame @@ -290,7 +290,7 @@ WaitLinkTransfer:: ; 82e (0:082e) pop hl .check - ld a, [wce52] + ld a, [wOtherPlayerLinkAction] inc a jr z, .loop @@ -308,25 +308,26 @@ WaitLinkTransfer:: ; 82e (0:082e) dec b jr nz, .acknowledge - ld a, [wce52] - ld [wce51], a + ld a, [wOtherPlayerLinkAction] + ld [wOtherPlayerLinkMode], a ret LinkTransfer:: ; 872 (0:0872) push bc - ld b, $60 + ld b, SERIAL_TIMECAPSULE ld a, [wLinkMode] - cp $1 - jr z, .asm_888 - ld b, $60 - jr c, .asm_888 - cp $2 - ld b, $70 - jr z, .asm_888 - ld b, $80 -.asm_888 + cp LINK_TIMECAPSULE + jr z, .got_high_nybble + ld b, SERIAL_TIMECAPSULE + jr c, .got_high_nybble + cp LINK_TRADECENTER + ld b, SERIAL_TRADECENTER + jr z, .got_high_nybble + ld b, SERIAL_BATTLE + +.got_high_nybble call LinkTransferReceive - ld a, [wce56] + ld a, [wPlayerLinkAction] add b ld [hSerialSend], a ld a, [hLinkPlayerNumber] @@ -343,15 +344,15 @@ LinkTransfer:: ; 872 (0:0872) LinkTransferReceive:: ; 8a4 (0:08a4) ld a, [hSerialReceive] - ld [wce51], a + ld [wOtherPlayerLinkMode], a and $f0 cp b ret nz xor a ld [hSerialReceive], a - ld a, [wce51] + ld a, [wOtherPlayerLinkMode] and $f - ld [wce52], a + ld [wOtherPlayerLinkAction], a ret LinkDataReceived:: ; 8b9 (0:08b9) @@ -27,18 +27,6 @@ ENDC ENDC ENDM -callba_hc: macro - ld a, \1 - ld hl, \2 - rst FarCall -endm - -callab_hc: macro - ld hl, \2 - ld a, \1 - rst FarCall -endm - RGB: MACRO dw ((\3) << 10) + ((\2) << 5) + (\1) ENDM diff --git a/macros/rst.asm b/macros/rst.asm index 50259c96..cc79ccad 100644 --- a/macros/rst.asm +++ b/macros/rst.asm @@ -15,3 +15,13 @@ callab: MACRO ; address, bank ld a, BANK(\1) rst FarCall ENDM + +homecall: macro + ld a, [hROMBank] + push af + ld a, BANK(\1) + rst Bankswitch + call \1 + pop af + rst Bankswitch + endm @@ -18,7 +18,10 @@ GameInit:: ENDC SECTION "bank2", DATA, BANK[$2] - dr $8000, $9cfd +SwapTextboxPalettes:: + dr $8000, $804f +ScrollBGMapPalettes:: + dr $804f, $9cfd InitCGBPals:: ; 9cfd dr $9cfd, $c000 @@ -365,7 +368,9 @@ SECTION "bank6f", DATA, BANK[$6f] dr $1bc000, $1c0000 SECTION "bank70", DATA, BANK[$70] - dr $1c0000, $1c4000 + dr $1c0000, $1c0de9 +_DudeAutoInput_A:: + dr $1c0de9, $1c4000 SECTION "bank71", DATA, BANK[$71] dr $1c4000, $1c8000 @@ -125,23 +125,21 @@ wDontPlayMapMusicOnReload:: ds 1 wMusicEnd:: SECTION "WRAM", WRAM0 -wc1c2:: ds 1 ; c1c2 -wc1c3:: ds 1 ; c1c3 -wc1c4:: ds 1 ; c1c4 +wLZAddress:: dw ; c1c2 +wLZBank:: ds 1 ; c1c4 wc1c5:: ds 1 ; c1c5 -wc1c6:: ds 1 ; c1c6 -wc1c7:: ds 1 ; c1c7 -wc1c8:: ds 1 ; c1c8 -wc1c9:: ds 1 ; c1c9 -wc1ca:: ds 1 ; c1ca + +wInputType:: ds 1 ; c1c6 +wAutoInputAddress:: dw ; c1c7 +wAutoInputBank:: ds 1 ; c1c9 +wAutoInputLength:: ds 1 ; c1ca + wc1cb:: ds 1 ; c1cb -wc1cc:: ds 1 ; c1cc +wGameLogicPaused:: ds 1 ; c1cc wRTCEnabled:: ds 1 wc1ce:: ds 1 ; c1ce -wc1cf:: ds 1 ; c1cf -wc1d0:: ds 1 ; c1d0 -wc1d1:: ds 1 ; c1d1 -wc1d2:: ds 1 ; c1d2 +wMapTimeOfDay:: ds 1 ; c1cf + ds 3 wPrinterConnectionOpen:: ds 1 wc1d4:: ds 1 ; c1d4 wc1d5:: ds 1 ; c1d5 @@ -187,262 +185,12 @@ wc1fc:: ds 1 ; c1fc wc1fd:: ds 1 ; c1fd wc1fe:: ds 1 ; c1fe wc1ff:: ds 1 ; c1ff -wc200:: ds 1 ; c200 -wc201:: ds 1 ; c201 -wc202:: ds 1 ; c202 -wc203:: ds 1 ; c203 -wc204:: ds 1 ; c204 -wc205:: ds 1 ; c205 -wc206:: ds 1 ; c206 -wc207:: ds 1 ; c207 -wc208:: ds 1 ; c208 -wc209:: ds 1 ; c209 -wc20a:: ds 1 ; c20a -wc20b:: ds 1 ; c20b -wc20c:: ds 1 ; c20c -wc20d:: ds 1 ; c20d -wc20e:: ds 1 ; c20e -wc20f:: ds 1 ; c20f -wc210:: ds 1 ; c210 -wc211:: ds 1 ; c211 -wc212:: ds 1 ; c212 -wc213:: ds 1 ; c213 -wc214:: ds 1 ; c214 -wc215:: ds 1 ; c215 -wc216:: ds 1 ; c216 -wc217:: ds 1 ; c217 -wc218:: ds 1 ; c218 -wc219:: ds 1 ; c219 -wc21a:: ds 1 ; c21a -wc21b:: ds 1 ; c21b -wc21c:: ds 1 ; c21c -wc21d:: ds 1 ; c21d -wc21e:: ds 1 ; c21e -wc21f:: ds 1 ; c21f -wc220:: ds 1 ; c220 -wc221:: ds 1 ; c221 -wc222:: ds 1 ; c222 -wc223:: ds 1 ; c223 -wc224:: ds 1 ; c224 -wc225:: ds 1 ; c225 -wc226:: ds 1 ; c226 -wc227:: ds 1 ; c227 -wc228:: ds 1 ; c228 -wc229:: ds 1 ; c229 -wc22a:: ds 1 ; c22a -wc22b:: ds 1 ; c22b -wc22c:: ds 1 ; c22c -wc22d:: ds 1 ; c22d -wc22e:: ds 1 ; c22e -wc22f:: ds 1 ; c22f -wc230:: ds 1 ; c230 -wc231:: ds 1 ; c231 -wc232:: ds 1 ; c232 -wc233:: ds 1 ; c233 -wc234:: ds 1 ; c234 -wc235:: ds 1 ; c235 -wc236:: ds 1 ; c236 -wc237:: ds 1 ; c237 -wc238:: ds 1 ; c238 -wc239:: ds 1 ; c239 -wc23a:: ds 1 ; c23a -wc23b:: ds 1 ; c23b -wc23c:: ds 1 ; c23c -wc23d:: ds 1 ; c23d -wc23e:: ds 1 ; c23e -wc23f:: ds 1 ; c23f -wc240:: ds 1 ; c240 -wc241:: ds 1 ; c241 -wc242:: ds 1 ; c242 -wc243:: ds 1 ; c243 -wc244:: ds 1 ; c244 -wc245:: ds 1 ; c245 -wc246:: ds 1 ; c246 -wc247:: ds 1 ; c247 -wc248:: ds 1 ; c248 -wc249:: ds 1 ; c249 -wc24a:: ds 1 ; c24a -wc24b:: ds 1 ; c24b -wc24c:: ds 1 ; c24c -wc24d:: ds 1 ; c24d -wc24e:: ds 1 ; c24e -wc24f:: ds 1 ; c24f -wc250:: ds 1 ; c250 -wc251:: ds 1 ; c251 -wc252:: ds 1 ; c252 -wc253:: ds 1 ; c253 -wc254:: ds 1 ; c254 -wc255:: ds 1 ; c255 -wc256:: ds 1 ; c256 -wc257:: ds 1 ; c257 -wc258:: ds 1 ; c258 -wc259:: ds 1 ; c259 -wc25a:: ds 1 ; c25a -wc25b:: ds 1 ; c25b -wc25c:: ds 1 ; c25c -wc25d:: ds 1 ; c25d -wc25e:: ds 1 ; c25e -wc25f:: ds 1 ; c25f -wc260:: ds 1 ; c260 -wc261:: ds 1 ; c261 -wc262:: ds 1 ; c262 -wc263:: ds 1 ; c263 -wc264:: ds 1 ; c264 -wc265:: ds 1 ; c265 -wc266:: ds 1 ; c266 -wc267:: ds 1 ; c267 -wc268:: ds 1 ; c268 -wc269:: ds 1 ; c269 -wc26a:: ds 1 ; c26a -wc26b:: ds 1 ; c26b -wc26c:: ds 1 ; c26c -wc26d:: ds 1 ; c26d -wc26e:: ds 1 ; c26e -wc26f:: ds 1 ; c26f -wc270:: ds 1 ; c270 -wc271:: ds 1 ; c271 -wc272:: ds 1 ; c272 -wc273:: ds 1 ; c273 -wc274:: ds 1 ; c274 -wc275:: ds 1 ; c275 -wc276:: ds 1 ; c276 -wc277:: ds 1 ; c277 -wc278:: ds 1 ; c278 -wc279:: ds 1 ; c279 -wc27a:: ds 1 ; c27a -wc27b:: ds 1 ; c27b -wc27c:: ds 1 ; c27c -wc27d:: ds 1 ; c27d -wc27e:: ds 1 ; c27e -wc27f:: ds 1 ; c27f -wc280:: ds 1 ; c280 -wc281:: ds 1 ; c281 -wc282:: ds 1 ; c282 -wc283:: ds 1 ; c283 -wc284:: ds 1 ; c284 -wc285:: ds 1 ; c285 -wc286:: ds 1 ; c286 -wc287:: ds 1 ; c287 -wc288:: ds 1 ; c288 -wc289:: ds 1 ; c289 -wc28a:: ds 1 ; c28a -wc28b:: ds 1 ; c28b -wc28c:: ds 1 ; c28c -wc28d:: ds 1 ; c28d -wc28e:: ds 1 ; c28e -wc28f:: ds 1 ; c28f -wc290:: ds 1 ; c290 -wc291:: ds 1 ; c291 -wc292:: ds 1 ; c292 -wc293:: ds 1 ; c293 -wc294:: ds 1 ; c294 -wc295:: ds 1 ; c295 -wc296:: ds 1 ; c296 -wc297:: ds 1 ; c297 -wc298:: ds 1 ; c298 -wc299:: ds 1 ; c299 -wc29a:: ds 1 ; c29a -wc29b:: ds 1 ; c29b -wc29c:: ds 1 ; c29c -wc29d:: ds 1 ; c29d -wc29e:: ds 1 ; c29e -wc29f:: ds 1 ; c29f -wc2a0:: ds 1 ; c2a0 -wc2a1:: ds 1 ; c2a1 -wc2a2:: ds 1 ; c2a2 -wc2a3:: ds 1 ; c2a3 -wc2a4:: ds 1 ; c2a4 -wc2a5:: ds 1 ; c2a5 -wc2a6:: ds 1 ; c2a6 -wc2a7:: ds 1 ; c2a7 -wc2a8:: ds 1 ; c2a8 -wc2a9:: ds 1 ; c2a9 -wc2aa:: ds 1 ; c2aa -wc2ab:: ds 1 ; c2ab -wc2ac:: ds 1 ; c2ac -wc2ad:: ds 1 ; c2ad -wc2ae:: ds 1 ; c2ae -wc2af:: ds 1 ; c2af -wc2b0:: ds 1 ; c2b0 -wc2b1:: ds 1 ; c2b1 -wc2b2:: ds 1 ; c2b2 -wc2b3:: ds 1 ; c2b3 -wc2b4:: ds 1 ; c2b4 -wc2b5:: ds 1 ; c2b5 -wc2b6:: ds 1 ; c2b6 -wc2b7:: ds 1 ; c2b7 -wc2b8:: ds 1 ; c2b8 -wc2b9:: ds 1 ; c2b9 -wc2ba:: ds 1 ; c2ba -wc2bb:: ds 1 ; c2bb -wc2bc:: ds 1 ; c2bc -wc2bd:: ds 1 ; c2bd -wc2be:: ds 1 ; c2be -wc2bf:: ds 1 ; c2bf -wc2c0:: ds 1 ; c2c0 -wc2c1:: ds 1 ; c2c1 -wc2c2:: ds 1 ; c2c2 -wc2c3:: ds 1 ; c2c3 -wc2c4:: ds 1 ; c2c4 -wc2c5:: ds 1 ; c2c5 -wc2c6:: ds 1 ; c2c6 -wc2c7:: ds 1 ; c2c7 -wc2c8:: ds 1 ; c2c8 -wc2c9:: ds 1 ; c2c9 -wc2ca:: ds 1 ; c2ca -wc2cb:: ds 1 ; c2cb -wc2cc:: ds 1 ; c2cc -wc2cd:: ds 1 ; c2cd -wc2ce:: ds 1 ; c2ce -wc2cf:: ds 1 ; c2cf -wc2d0:: ds 1 ; c2d0 -wc2d1:: ds 1 ; c2d1 -wc2d2:: ds 1 ; c2d2 -wc2d3:: ds 1 ; c2d3 -wc2d4:: ds 1 ; c2d4 -wc2d5:: ds 1 ; c2d5 -wc2d6:: ds 1 ; c2d6 -wc2d7:: ds 1 ; c2d7 -wc2d8:: ds 1 ; c2d8 -wc2d9:: ds 1 ; c2d9 -wc2da:: ds 1 ; c2da -wc2db:: ds 1 ; c2db -wc2dc:: ds 1 ; c2dc -wc2dd:: ds 1 ; c2dd -wc2de:: ds 1 ; c2de -wc2df:: ds 1 ; c2df -wc2e0:: ds 1 ; c2e0 -wc2e1:: ds 1 ; c2e1 -wc2e2:: ds 1 ; c2e2 -wc2e3:: ds 1 ; c2e3 -wc2e4:: ds 1 ; c2e4 -wc2e5:: ds 1 ; c2e5 -wc2e6:: ds 1 ; c2e6 -wc2e7:: ds 1 ; c2e7 -wc2e8:: ds 1 ; c2e8 -wc2e9:: ds 1 ; c2e9 -wc2ea:: ds 1 ; c2ea -wc2eb:: ds 1 ; c2eb -wc2ec:: ds 1 ; c2ec -wc2ed:: ds 1 ; c2ed -wc2ee:: ds 1 ; c2ee -wc2ef:: ds 1 ; c2ef -wc2f0:: ds 1 ; c2f0 -wc2f1:: ds 1 ; c2f1 -wc2f2:: ds 1 ; c2f2 -wc2f3:: ds 1 ; c2f3 -wc2f4:: ds 1 ; c2f4 -wc2f5:: ds 1 ; c2f5 -wc2f6:: ds 1 ; c2f6 -wc2f7:: ds 1 ; c2f7 -wc2f8:: ds 1 ; c2f8 -wc2f9:: ds 1 ; c2f9 -wc2fa:: ds 1 ; c2fa -wc2fb:: ds 1 ; c2fb -wc2fc:: ds 1 ; c2fc -wc2fd:: ds 1 ; c2fd -wc2fe:: ds 1 ; c2fe -wc2ff:: ds 1 ; c2ff + +SECTION "GBC Palettes", WRAM0 +wUnknBGPals:: ds 8 * 8 ; c200 +wUnknOBPals:: ds 8 * 8 ; c240 +wBGPals:: ds 8 * 8 ; c280 +wOBPals:: ds 8 * 8 ; c2c0 SECTION "OAM Buffer", WRAM0 wOAMBuffer:: ; c300 @@ -453,6 +201,8 @@ wTileMap:: ; c3a0 ds SCREEN_HEIGHT * SCREEN_WIDTH SECTION "Animated Objects", WRAM0 +wTileMapBackup:: ; c508 + ; ds SCREEN_HEIGHT * SCREEN_WIDTH wAnimatedObjectDynamicVTileOffsets:: ds 10 * 2 ; c508 wAnimatedObjectStructs:: ; c51c ; Field 0: Index @@ -2675,12 +2425,12 @@ wce4d:: ds 1 ; ce4d wce4e:: ds 1 ; ce4e wce4f:: ds 1 ; ce4f wce50:: ds 1 ; ce50 -wce51:: ds 1 ; ce51 -wce52:: ds 1 ; ce52 +wOtherPlayerLinkMode:: ds 1 ; ce51 +wOtherPlayerLinkAction:: ds 1 ; ce52 wce53:: ds 1 ; ce53 wce54:: ds 1 ; ce54 wce55:: ds 1 ; ce55 -wce56:: ds 1 ; ce56 +wPlayerLinkAction:: ds 1 ; ce56 wce57:: ds 1 ; ce57 wce58:: ds 1 ; ce58 wce59:: ds 1 ; ce59 @@ -3086,7 +2836,11 @@ wd03e:: ds 1 ; d03e wd03f:: ds 1 ; d03f wd040:: ds 1 ; d040 wd041:: ds 1 ; d041 -wLinkMode:: ds 1 + +wLinkMode:: ds 1 ; d042 +; 0 not in link battle +; 1 link battle + wd043:: ds 1 ; d043 wd044:: ds 1 ; d044 wd045:: ds 1 ; d045 |