From bcc0d633e948227e68da8a264d1533771a54b5c4 Mon Sep 17 00:00:00 2001 From: Rangi Date: Thu, 29 Oct 2020 14:45:40 -0400 Subject: [PATCH] Identify the remaining (non-mobile) uses of another WRAM union --- data/text/common_3.asm | 2 +- docs/bugs_and_glitches.md | 4 +- engine/battle/core.asm | 24 +++--- engine/battle/move_effects/beat_up.asm | 20 ++--- engine/events/print_unown_2.asm | 2 +- engine/events/prof_oaks_pc.asm | 10 +-- engine/games/unown_puzzle.asm | 6 +- engine/items/item_effects.asm | 29 +++---- engine/link/link.asm | 56 +++++++------ engine/link/time_capsule.asm | 12 +-- engine/overworld/decorations.asm | 29 ++++--- engine/overworld/scripting.asm | 2 +- engine/pokemon/bills_pc.asm | 26 +++--- engine/pokemon/evolve.asm | 2 +- engine/pokemon/mail.asm | 2 +- engine/pokemon/move_mon.asm | 6 +- engine/pokemon/switchpartymons.asm | 20 ++--- home/init.asm | 2 +- home/movement.asm | 2 +- home/serial.asm | 93 +++++++++++---------- wram.asm | 109 ++++++++++++++++++------- 21 files changed, 259 insertions(+), 199 deletions(-) diff --git a/data/text/common_3.asm b/data/text/common_3.asm index cc5a53c2e..e081f0d32 100644 --- a/data/text/common_3.asm +++ b/data/text/common_3.asm @@ -72,7 +72,7 @@ _LinkAbnormalMonText:: _LinkAskTradeForText:: text "Trade @" - text_ram wd004 + text_ram wBufferTrademonNick text_start line "for @" text_ram wStringBuffer1 diff --git a/docs/bugs_and_glitches.md b/docs/bugs_and_glitches.md index bda8bccad..4d7abd7a2 100644 --- a/docs/bugs_and_glitches.md +++ b/docs/bugs_and_glitches.md @@ -560,7 +560,7 @@ This bug affects Attract, Curse, Foresight, Mean Look, Mimic, Nightmare, Spider ```diff .got_mon - ld a, [wd002] + ld a, [wCurBeatUpPartyMon] ld hl, wPartyMonNicknames call GetNick ld a, MON_HP @@ -568,7 +568,7 @@ This bug affects Attract, Curse, Foresight, Mean Look, Mimic, Nightmare, Spider ld a, [hli] or [hl] jp z, .beatup_fail ; fainted - ld a, [wd002] + ld a, [wCurBeatUpPartyMon] ld c, a ld a, [wCurBattleMon] - ; BUG: this can desynchronize link battles diff --git a/engine/battle/core.asm b/engine/battle/core.asm index 3c2bf571f..f84864a95 100644 --- a/engine/battle/core.asm +++ b/engine/battle/core.asm @@ -7438,13 +7438,13 @@ AnimateExpBar: jp nc, .finish ldh a, [hProduct + 3] - ld [wd004], a + ld [wExperienceGained + 2], a push af ldh a, [hProduct + 2] - ld [wd003], a + ld [wExperienceGained + 1], a push af xor a - ld [wd002], a + ld [wExperienceGained], a xor a ; PARTYMON ld [wMonType], a predef CopyMonToTempMon @@ -7456,10 +7456,10 @@ AnimateExpBar: call CalcExpBar push bc ld hl, wTempMonExp + 2 - ld a, [wd004] + ld a, [wExperienceGained + 2] add [hl] ld [hld], a - ld a, [wd003] + ld a, [wExperienceGained + 1] adc [hl] ld [hld], a jr nc, .NoOverflow @@ -8788,7 +8788,7 @@ AddLastLinkBattleToLinkRecord: .FindOpponentAndAppendRecord: ld b, NUM_LINK_BATTLE_RECORDS ld hl, sLinkBattleRecord1End - 1 - ld de, wd002 + ld de, wLinkBattleRecordBuffer .loop3 push bc push de @@ -8817,16 +8817,16 @@ AddLastLinkBattleToLinkRecord: add b add b ld e, a - ld d, $0 - ld hl, wd002 + ld d, 0 + ld hl, wLinkBattleRecordBuffer add hl, de push hl ld a, c add c add c ld e, a - ld d, $0 - ld hl, wd002 + ld d, 0 + ld hl, wLinkBattleRecordBuffer add hl, de ld d, h ld e, l @@ -8858,7 +8858,7 @@ AddLastLinkBattleToLinkRecord: ld hl, sLinkBattleRecord call AddNTimes push hl - ld de, wd002 + ld de, wLinkBattleRecordBuffer ld bc, LINK_BATTLE_RECORD_LENGTH call CopyBytes pop hl @@ -8872,7 +8872,7 @@ AddLastLinkBattleToLinkRecord: push hl ld bc, LINK_BATTLE_RECORD_LENGTH call CopyBytes - ld hl, wd002 + ld hl, wLinkBattleRecordBuffer ld bc, LINK_BATTLE_RECORD_LENGTH pop de call CopyBytes diff --git a/engine/battle/move_effects/beat_up.asm b/engine/battle/move_effects/beat_up.asm index 73bbb2e42..f1cc7a5c2 100644 --- a/engine/battle/move_effects/beat_up.asm +++ b/engine/battle/move_effects/beat_up.asm @@ -14,7 +14,7 @@ BattleCommand_BeatUp: call DelayFrames xor a ld [wPlayerRolloutCount], a - ld [wd002], a + ld [wCurBeatUpPartyMon], a ld [wBeatUpHitAtLeastOnce], a jr .got_mon @@ -23,10 +23,10 @@ BattleCommand_BeatUp: ld b, a ld a, [wPartyCount] sub b - ld [wd002], a + ld [wCurBeatUpPartyMon], a .got_mon - ld a, [wd002] + ld a, [wCurBeatUpPartyMon] ld hl, wPartyMonNicknames call GetNick ld a, MON_HP @@ -34,7 +34,7 @@ BattleCommand_BeatUp: ld a, [hli] or [hl] jp z, .beatup_fail ; fainted - ld a, [wd002] + ld a, [wCurBeatUpPartyMon] ld c, a ld a, [wCurBattleMon] ; BUG: this can desynchronize link battles @@ -88,7 +88,7 @@ BattleCommand_BeatUp: xor a ld [wEnemyRolloutCount], a - ld [wd002], a + ld [wCurBeatUpPartyMon], a ld [wBeatUpHitAtLeastOnce], a jr .enemy_got_mon @@ -97,7 +97,7 @@ BattleCommand_BeatUp: ld b, a ld a, [wOTPartyCount] sub b - ld [wd002], a + ld [wCurBeatUpPartyMon], a .enemy_got_mon ld a, [wBattleMode] @@ -112,7 +112,7 @@ BattleCommand_BeatUp: and a jr nz, .link_or_tower - ld a, [wd002] + ld a, [wCurBeatUpPartyMon] ld c, a ld b, 0 ld hl, wOTPartySpecies @@ -123,7 +123,7 @@ BattleCommand_BeatUp: jr .got_enemy_nick .link_or_tower - ld a, [wd002] + ld a, [wCurBeatUpPartyMon] ld hl, wOTPartyMonNicknames ld bc, NAME_LENGTH call AddNTimes @@ -137,7 +137,7 @@ BattleCommand_BeatUp: or [hl] jp z, .beatup_fail - ld a, [wd002] + ld a, [wCurBeatUpPartyMon] ld b, a ld a, [wCurOTMon] cp b @@ -217,7 +217,7 @@ GetBeatupMonLocation: ld hl, wOTPartyMon1Species .got_species - ld a, [wd002] + ld a, [wCurBeatUpPartyMon] add hl, bc call GetPartyLocation pop bc diff --git a/engine/events/print_unown_2.asm b/engine/events/print_unown_2.asm index 0b72ae0b0..4926bf532 100644 --- a/engine/events/print_unown_2.asm +++ b/engine/events/print_unown_2.asm @@ -65,7 +65,7 @@ RotateUnownFrontpic: ld a, b ld [hli], a push hl - ld hl, wd003 + ld hl, wPrintedUnownTileSource + 1 call .CountSetBit pop hl ld a, b diff --git a/engine/events/prof_oaks_pc.asm b/engine/events/prof_oaks_pc.asm index 1be775a4c..b272e3fb5 100644 --- a/engine/events/prof_oaks_pc.asm +++ b/engine/events/prof_oaks_pc.asm @@ -36,18 +36,18 @@ Rate: ld hl, wPokedexSeen ld b, wEndPokedexSeen - wPokedexSeen call CountSetBits - ld [wd002], a + ld [wTempPokedexSeenCount], a ld hl, wPokedexCaught ld b, wEndPokedexCaught - wPokedexCaught call CountSetBits - ld [wd003], a + ld [wTempPokedexCaughtCount], a ; print appropriate rating call .UpdateRatingBuffers ld hl, OakPCText3 call PrintText call JoyWaitAorB - ld a, [wd003] + ld a, [wTempPokedexCaughtCount] ld hl, OakRatings call FindOakRating push de @@ -57,10 +57,10 @@ Rate: .UpdateRatingBuffers: ld hl, wStringBuffer3 - ld de, wd002 + ld de, wTempPokedexSeenCount call .UpdateRatingBuffer ld hl, wStringBuffer4 - ld de, wd003 + ld de, wTempPokedexCaughtCount call .UpdateRatingBuffer ret diff --git a/engine/games/unown_puzzle.asm b/engine/games/unown_puzzle.asm index 871cb4541..48e36b899 100644 --- a/engine/games/unown_puzzle.asm +++ b/engine/games/unown_puzzle.asm @@ -504,13 +504,13 @@ CheckSolvedUnownPuzzle: RedrawUnownPuzzlePieces: call GetCurrentPuzzlePieceVTileCorner - ld [wd002], a + ld [wUnownPuzzleCornerTile], a xor a call GetUnownPuzzleCoordData ; get pixel positions ld a, [hli] ld b, [hl] ld c, a - ld a, [wd002] + ld a, [wUnownPuzzleCornerTile] cp $e0 jr z, .NoPiece ld hl, .OAM_HoldingPiece @@ -532,7 +532,7 @@ RedrawUnownPuzzlePieces: add c ld [de], a ; x inc de - ld a, [wd002] + ld a, [wUnownPuzzleCornerTile] add [hl] ld [de], a ; tile id inc hl diff --git a/engine/items/item_effects.asm b/engine/items/item_effects.asm index 24bc22add..f91332761 100644 --- a/engine/items/item_effects.asm +++ b/engine/items/item_effects.asm @@ -2166,11 +2166,12 @@ INCLUDE "data/items/x_stats.asm" PokeFluteEffect: ld a, [wBattleMode] and a - jr nz, .dummy -.dummy + jr nz, .in_battle + ; overworld flute code was dummied out here +.in_battle xor a - ld [wd002], a + ld [wPokeFluteCuredSleep], a ld b, $ff ^ SLP @@ -2193,7 +2194,7 @@ PokeFluteEffect: and b ld [hl], a - ld a, [wd002] + ld a, [wPokeFluteCuredSleep] and a ld hl, .PlayedFluteText jp z, PrintText @@ -2202,22 +2203,22 @@ PokeFluteEffect: ld a, [wLowHealthAlarm] and 1 << DANGER_ON_F - jr nz, .dummy2 -.dummy2 + jr nz, .dummy + ; more code was dummied out here +.dummy ld hl, .FluteWakeUpText jp PrintText .CureSleep: ld de, PARTYMON_STRUCT_LENGTH ld c, PARTY_LENGTH - .loop ld a, [hl] push af and SLP jr z, .not_asleep - ld a, 1 - ld [wd002], a + ld a, TRUE + ld [wPokeFluteCuredSleep], a .not_asleep pop af and b @@ -2290,7 +2291,7 @@ ItemfinderEffect: RestorePPEffect: ld a, [wCurItem] - ld [wd002], a + ld [wTempRestorePPItem], a .loop ; Party Screen opens to choose on which mon to use the Item @@ -2299,14 +2300,14 @@ RestorePPEffect: jp c, PPRestoreItem_Cancel .loop2 - ld a, [wd002] + ld a, [wTempRestorePPItem] cp MAX_ELIXER jp z, Elixer_RestorePPofAllMoves cp ELIXER jp z, Elixer_RestorePPofAllMoves ld hl, RaiseThePPOfWhichMoveText - ld a, [wd002] + ld a, [wTempRestorePPItem] cp PP_UP jr z, .ppup ld hl, RestoreThePPOfWhichMoveText @@ -2337,7 +2338,7 @@ RestorePPEffect: call CopyName1 pop hl - ld a, [wd002] + ld a, [wTempRestorePPItem] cp PP_UP jp nz, Not_PP_Up @@ -2486,7 +2487,7 @@ RestorePP: cp b jr nc, .dont_restore - ld a, [wd002] + ld a, [wTempRestorePPItem] cp MAX_ELIXER jr z, .restore_all cp MAX_ETHER diff --git a/engine/link/link.asm b/engine/link/link.asm index 7c396c098..490f7b971 100644 --- a/engine/link/link.asm +++ b/engine/link/link.asm @@ -27,7 +27,7 @@ LinkCommunications: call PlaceString call SetTradeRoomBGPals call WaitBGMap2 - ld hl, wcf5d + ld hl, wLinkByteTimeout xor a ; LOW($5000) ld [hli], a ld [hl], HIGH($5000) @@ -510,6 +510,8 @@ LinkTimeout: text_end ExchangeBytes: +; This is similar to Serial_ExchangeBytes, +; but without a SERIAL_PREAMBLE_BYTE check. ld a, TRUE ldh [hSerialIgnoringInitialData], a .loop @@ -520,9 +522,9 @@ ExchangeBytes: ld b, a inc hl ld a, 48 -.delay_cycles +.wait dec a - jr nz, .delay_cycles + jr nz, .wait ldh a, [hSerialIgnoringInitialData] and a ld a, b @@ -1423,13 +1425,13 @@ Function28926: pop af ld [wMenuCursorY], a dec a - ld [wd002], a + ld [wCurTradePartyMon], a ld [wPlayerLinkAction], a farcall Function16d6ce ld a, [wOtherPlayerLinkMode] cp $f jp z, InitTradeMenuDisplay - ld [wd003], a + ld [wCurOTTradePartyMon], a call Function28b68 ld c, 100 call DelayFrames @@ -1454,7 +1456,7 @@ Function28926: xor a ld [wcf57], a ld [wOtherPlayerLinkAction], a - ld a, [wd003] + ld a, [wCurOTTradePartyMon] ld hl, wOTPartySpecies ld c, a ld b, 0 @@ -1610,7 +1612,7 @@ LinkTrade: ld c, 18 call LinkTextboxAtHL farcall Link_WaitBGMap - ld a, [wd002] + ld a, [wCurTradePartyMon] ld hl, wPartySpecies ld c, a ld b, 0 @@ -1619,10 +1621,10 @@ LinkTrade: ld [wNamedObjectIndexBuffer], a call GetPokemonName ld hl, wStringBuffer1 - ld de, wd004 + ld de, wBufferTrademonNick ld bc, MON_NAME_LENGTH call CopyBytes - ld a, [wd003] + ld a, [wCurOTTradePartyMon] ld hl, wOTPartySpecies ld c, a ld b, 0 @@ -1702,7 +1704,7 @@ LinkTrade: .asm_28c7b ld hl, sPartyMail - ld a, [wd002] + ld a, [wCurTradePartyMon] ld bc, MAIL_STRUCT_LENGTH call AddNTimes ld a, BANK(sPartyMail) @@ -1711,7 +1713,7 @@ LinkTrade: ld e, l ld bc, MAIL_STRUCT_LENGTH add hl, bc - ld a, [wd002] + ld a, [wCurTradePartyMon] ld c, a .asm_28c96 inc c @@ -1732,7 +1734,7 @@ LinkTrade: call AddNTimes push hl ld hl, wc9f4 - ld a, [wd003] + ld a, [wCurOTTradePartyMon] ld bc, MAIL_STRUCT_LENGTH call AddNTimes pop de @@ -1743,7 +1745,7 @@ LinkTrade: ld de, wPlayerTrademonSenderName ld bc, NAME_LENGTH call CopyBytes - ld a, [wd002] + ld a, [wCurTradePartyMon] ld hl, wPartySpecies ld b, 0 ld c, a @@ -1751,27 +1753,27 @@ LinkTrade: ld a, [hl] ld [wPlayerTrademonSpecies], a push af - ld a, [wd002] + ld a, [wCurTradePartyMon] ld hl, wPartyMonOT call SkipNames ld de, wPlayerTrademonOTName ld bc, NAME_LENGTH call CopyBytes ld hl, wPartyMon1ID - ld a, [wd002] + ld a, [wCurTradePartyMon] call GetPartyLocation ld a, [hli] ld [wPlayerTrademonID], a ld a, [hl] ld [wPlayerTrademonID + 1], a ld hl, wPartyMon1DVs - ld a, [wd002] + ld a, [wCurTradePartyMon] call GetPartyLocation ld a, [hli] ld [wPlayerTrademonDVs], a ld a, [hl] ld [wPlayerTrademonDVs + 1], a - ld a, [wd002] + ld a, [wCurTradePartyMon] ld hl, wPartyMon1Species call GetPartyLocation ld b, h @@ -1783,34 +1785,34 @@ LinkTrade: ld de, wOTTrademonSenderName ld bc, NAME_LENGTH call CopyBytes - ld a, [wd003] + ld a, [wCurOTTradePartyMon] ld hl, wOTPartySpecies ld b, 0 ld c, a add hl, bc ld a, [hl] ld [wOTTrademonSpecies], a - ld a, [wd003] + ld a, [wCurOTTradePartyMon] ld hl, wOTPartyMonOT call SkipNames ld de, wOTTrademonOTName ld bc, NAME_LENGTH call CopyBytes ld hl, wOTPartyMon1ID - ld a, [wd003] + ld a, [wCurOTTradePartyMon] call GetPartyLocation ld a, [hli] ld [wOTTrademonID], a ld a, [hl] ld [wOTTrademonID + 1], a ld hl, wOTPartyMon1DVs - ld a, [wd003] + ld a, [wCurOTTradePartyMon] call GetPartyLocation ld a, [hli] ld [wOTTrademonDVs], a ld a, [hl] ld [wOTTrademonDVs + 1], a - ld a, [wd003] + ld a, [wCurOTTradePartyMon] ld hl, wOTPartyMon1Species call GetPartyLocation ld b, h @@ -1818,14 +1820,14 @@ LinkTrade: farcall GetCaughtGender ld a, c ld [wOTTrademonCaughtData], a - ld a, [wd002] + ld a, [wCurTradePartyMon] ld [wCurPartyMon], a ld hl, wPartySpecies ld b, 0 ld c, a add hl, bc ld a, [hl] - ld [wd002], a + ld [wCurTradePartyMon], a xor a ; REMOVE_PARTY ld [wPokemonWithdrawDepositParameter], a callfar RemoveMonFromPartyOrBox @@ -1834,14 +1836,14 @@ LinkTrade: ld [wCurPartyMon], a ld a, TRUE ld [wForceEvolution], a - ld a, [wd003] + ld a, [wCurOTTradePartyMon] push af ld hl, wOTPartySpecies ld b, 0 ld c, a add hl, bc ld a, [hl] - ld [wd003], a + ld [wCurOTTradePartyMon], a ld c, 100 call DelayFrames call ClearTilemap @@ -2248,7 +2250,7 @@ CheckLinkTimeout_Receptionist: ld a, $1 ld [wPlayerLinkAction], a ld hl, wLinkTimeoutFrames - ld a, $3 + ld a, 3 ld [hli], a xor a ld [hl], a diff --git a/engine/link/time_capsule.asm b/engine/link/time_capsule.asm index bacda9c4b..b8c68a32b 100644 --- a/engine/link/time_capsule.asm +++ b/engine/link/time_capsule.asm @@ -1,11 +1,11 @@ ; These functions seem to be related to backwards compatibility ValidateOTTrademon: - ld a, [wd003] + ld a, [wCurOTTradePartyMon] ld hl, wOTPartyMon1Species call GetPartyLocation push hl - ld a, [wd003] + ld a, [wCurOTTradePartyMon] inc a ld c, a ld b, 0 @@ -30,7 +30,7 @@ ValidateOTTrademon: cp LINK_TIMECAPSULE jr nz, .normal ld hl, wOTPartySpecies - ld a, [wd003] + ld a, [wCurOTTradePartyMon] ld c, a ld b, 0 add hl, bc @@ -65,11 +65,11 @@ ValidateOTTrademon: ret CheckAnyOtherAliveMonsForTrade: - ld a, [wd002] + ld a, [wCurTradePartyMon] ld d, a ld a, [wPartyCount] ld b, a - ld c, $0 + ld c, 0 .loop ld a, c cp d @@ -87,7 +87,7 @@ CheckAnyOtherAliveMonsForTrade: inc c dec b jr nz, .loop - ld a, [wd003] + ld a, [wCurOTTradePartyMon] ld hl, wOTPartyMon1HP call GetPartyLocation ld a, [hli] diff --git a/engine/overworld/decorations.asm b/engine/overworld/decorations.asm index 3499cf54f..6cc86181a 100644 --- a/engine/overworld/decorations.asm +++ b/engine/overworld/decorations.asm @@ -44,7 +44,7 @@ _PlayerDecorationMenu: .MenuData: db STATICMENU_CURSOR | STATICMENU_WRAP ; flags db 0 ; items - dw wd002 + dw wNumOwnedDecoCategories dw PlaceNthMenuStrings dw .pointers @@ -75,7 +75,7 @@ _PlayerDecorationMenu: ld a, 7 call .AppendToStringBuffer2 ld hl, wStringBuffer2 - ld de, wd002 + ld de, wDecoNameBuffer ld bc, ITEM_NAME_LENGTH call CopyBytes ret @@ -133,10 +133,11 @@ _PlayerDecorationMenu: Deco_FillTempWithMinusOne: xor a - ld hl, wd002 + ld hl, wNumOwnedDecoCategories ld [hli], a + assert wNumOwnedDecoCategories + 1 == wOwnedDecoCategories ld a, -1 - ld bc, $10 + ld bc, 16 call ByteFill ret @@ -161,10 +162,11 @@ CheckAllDecorationFlags: ret AppendDecoIndex: - ld hl, wd002 + ld hl, wNumOwnedDecoCategories inc [hl] + assert wNumOwnedDecoCategories + 1 == wOwnedDecoCategories ld e, [hl] - ld d, $0 + ld d, 0 add hl, de ld [hl], a ret @@ -176,7 +178,7 @@ FindOwnedDecosInCategory: pop hl call CheckAllDecorationFlags pop bc - ld a, [wd002] + ld a, [wNumOwnedDecoCategories] and a ret z @@ -335,7 +337,7 @@ DecoExitMenu: ret PopulateDecoCategoryMenu: - ld a, [wd002] + ld a, [wNumOwnedDecoCategories] and a jr z, .empty cp 8 @@ -353,9 +355,10 @@ PopulateDecoCategoryMenu: ret .beyond_eight - ld hl, wd002 + ld hl, wNumOwnedDecoCategories ld e, [hl] dec [hl] + assert wNumOwnedDecoCategories + 1 == wOwnedDecoCategories ld d, 0 add hl, de ld [hl], -1 @@ -395,7 +398,7 @@ PopulateDecoCategoryMenu: .NonscrollingMenuData: db STATICMENU_CURSOR | STATICMENU_WRAP ; flags db 0 ; items - dw wd002 + dw wDecoNameBuffer dw DecorationMenuFunction dw DecorationAttributes @@ -409,10 +412,10 @@ PopulateDecoCategoryMenu: db SCROLLINGMENU_DISPLAY_ARROWS ; flags db 8, 0 ; rows, columns db SCROLLINGMENU_ITEMS_NORMAL ; item format - dbw 0, wd002 ; text pointer + dbw 0, wDecoNameBuffer ; text pointer dba DecorationMenuFunction - dbw 0, 0 - dbw 0, 0 + dbw 0, NULL + dbw 0, NULL GetDecorationData: ld hl, DecorationAttributes diff --git a/engine/overworld/scripting.asm b/engine/overworld/scripting.asm index 8258ea830..d9878269b 100644 --- a/engine/overworld/scripting.asm +++ b/engine/overworld/scripting.asm @@ -1703,7 +1703,7 @@ Script_givepokemail: push bc inc hl ld bc, MAIL_MSG_LENGTH - ld de, wd002 + ld de, wMonMailMessageBuffer ld a, [wScriptBank] call FarCopyBytes pop bc diff --git a/engine/pokemon/bills_pc.asm b/engine/pokemon/bills_pc.asm index d96aaa245..2c5145b9f 100644 --- a/engine/pokemon/bills_pc.asm +++ b/engine/pokemon/bills_pc.asm @@ -1377,20 +1377,20 @@ copy_box_data: MACRO jr z, .done\@ and a jr z, .done\@ - ld [de], a + ld [de], a ; species inc de ld a, [wBillsPC_LoadedBox] - ld [de], a + ld [de], a ; box number inc de - ld a, [wd003] - ld [de], a + ld a, [wBillsPCTempListIndex] + ld [de], a ; list index inc a - ld [wd003], a + ld [wBillsPCTempListIndex], a inc de inc hl - ld a, [wd004] + ld a, [wBillsPCTempBoxCount] inc a - ld [wd004], a + ld [wBillsPCTempBoxCount], a jr .loop\@ .done\@ @@ -1399,7 +1399,7 @@ if \1 endc ld a, -1 ld [de], a - ld a, [wd004] + ld a, [wBillsPCTempBoxCount] inc a ld [wBillsPC_NumMonsInBox], a ENDM @@ -1411,8 +1411,8 @@ CopyBoxmonSpecies: call ByteFill ld de, wBillsPCPokemonList xor a - ld [wd003], a - ld [wd004], a + ld [wBillsPCTempListIndex], a + ld [wBillsPCTempBoxCount], a ld a, [wBillsPC_LoadedBox] and a jr z, .party @@ -2455,7 +2455,7 @@ BillsPC_ChangeBoxSubmenu: .Name: ld b, NAME_BOX - ld de, wd002 + ld de, wBoxNameBuffer farcall NamingScreen call ClearTilemap call LoadStandardFont @@ -2465,13 +2465,13 @@ BillsPC_ChangeBoxSubmenu: call GetBoxName ld e, l ld d, h - ld hl, wd002 + ld hl, wBoxNameBuffer ld c, BOX_NAME_LENGTH - 1 call InitString ld a, [wMenuSelection] dec a call GetBoxName - ld de, wd002 + ld de, wBoxNameBuffer call CopyName2 ret diff --git a/engine/pokemon/evolve.asm b/engine/pokemon/evolve.asm index 16138de22..3e6c4f969 100644 --- a/engine/pokemon/evolve.asm +++ b/engine/pokemon/evolve.asm @@ -512,7 +512,7 @@ FillMoves: ld a, [wEvolutionOldSpecies] and a jr z, .CheckMove - ld a, [wd002] + ld a, [wPrevPartyLevel] cp b jr nc, .GetMove diff --git a/engine/pokemon/mail.asm b/engine/pokemon/mail.asm index c7b1ab4ed..940061461 100644 --- a/engine/pokemon/mail.asm +++ b/engine/pokemon/mail.asm @@ -206,7 +206,7 @@ GivePokeMail:: call AddNTimes ld d, h ld e, l - ld hl, wd002 + ld hl, wMonMailMessageBuffer ld bc, MAIL_MSG_LENGTH + 1 ld a, BANK(sPartyMail) call OpenSRAM diff --git a/engine/pokemon/move_mon.asm b/engine/pokemon/move_mon.asm index 36d8c4fd3..3fc4dbc73 100644 --- a/engine/pokemon/move_mon.asm +++ b/engine/pokemon/move_mon.asm @@ -780,7 +780,7 @@ RetrieveMonFromDayCareMan: call WaitSFX call GetBreedMon1LevelGrowth ld a, b - ld [wd002], a + ld [wPrevPartyLevel], a ld a, e ld [wCurPartyLevel], a xor a @@ -795,12 +795,12 @@ RetrieveMonFromDayCareLady: call WaitSFX call GetBreedMon2LevelGrowth ld a, b - ld [wd002], a + ld [wPrevPartyLevel], a ld a, e ld [wCurPartyLevel], a ld a, PC_DEPOSIT ld [wPokemonWithdrawDepositParameter], a - jp RetrieveBreedmon + jp RetrieveBreedmon ; pointless RetrieveBreedmon: ld hl, wPartyCount diff --git a/engine/pokemon/switchpartymons.asm b/engine/pokemon/switchpartymons.asm index 26aa6e5fa..2c00b34b4 100644 --- a/engine/pokemon/switchpartymons.asm +++ b/engine/pokemon/switchpartymons.asm @@ -65,7 +65,7 @@ _SwitchPartyMons: ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes push hl - ld de, wd002 + ld de, wSwitchMonBuffer ld bc, PARTYMON_STRUCT_LENGTH call CopyBytes ld a, [wBuffer3] @@ -77,14 +77,14 @@ _SwitchPartyMons: ld bc, PARTYMON_STRUCT_LENGTH call CopyBytes pop de - ld hl, wd002 + ld hl, wSwitchMonBuffer ld bc, PARTYMON_STRUCT_LENGTH call CopyBytes ld a, [wBuffer2] ld hl, wPartyMonOT call SkipNames push hl - call .CopyNameTowd002 + call .CopyNameToSwitchMonBuffer ld a, [wBuffer3] ld hl, wPartyMonOT call SkipNames @@ -92,13 +92,13 @@ _SwitchPartyMons: push hl call .CopyName pop de - ld hl, wd002 + ld hl, wSwitchMonBuffer call .CopyName ld hl, wPartyMonNicknames ld a, [wBuffer2] call SkipNames push hl - call .CopyNameTowd002 + call .CopyNameToSwitchMonBuffer ld hl, wPartyMonNicknames ld a, [wBuffer3] call SkipNames @@ -106,14 +106,14 @@ _SwitchPartyMons: push hl call .CopyName pop de - ld hl, wd002 + ld hl, wSwitchMonBuffer call .CopyName ld hl, sPartyMail ld a, [wBuffer2] ld bc, MAIL_STRUCT_LENGTH call AddNTimes push hl - ld de, wd002 + ld de, wSwitchMonBuffer ld bc, MAIL_STRUCT_LENGTH ld a, BANK(sPartyMail) call OpenSRAM @@ -127,7 +127,7 @@ _SwitchPartyMons: ld bc, MAIL_STRUCT_LENGTH call CopyBytes pop de - ld hl, wd002 + ld hl, wSwitchMonBuffer ld bc, MAIL_STRUCT_LENGTH call CopyBytes call CloseSRAM @@ -136,8 +136,8 @@ _SwitchPartyMons: pop hl ret -.CopyNameTowd002: - ld de, wd002 +.CopyNameToSwitchMonBuffer: + ld de, wSwitchMonBuffer .CopyName: ld bc, NAME_LENGTH diff --git a/home/init.asm b/home/init.asm index a270b2b9a..683f7f10e 100644 --- a/home/init.asm +++ b/home/init.asm @@ -50,7 +50,7 @@ Init:: ldh [rOBP1], a ldh [rTMA], a ldh [rTAC], a - ld [wUnusedInitializedToZero], a + ld [wBetaTitleSequenceOpeningType], a ld a, %100 ; Start timer at 4096Hz ldh [rTAC], a diff --git a/home/movement.asm b/home/movement.asm index f329a3c3e..80d7ed5bf 100644 --- a/home/movement.asm +++ b/home/movement.asm @@ -2,7 +2,7 @@ InitMovementBuffer:: ld [wMovementBufferObject], a xor a ld [wMovementBufferCount], a - ld a, $0 ; useless + ld a, $0 ; was BANK(wMovementBuffer) in G/S ld [wUnusedMovementBufferBank], a ld a, LOW(wMovementBuffer) ld [wUnusedMovementBufferPointer], a diff --git a/home/serial.asm b/home/serial.asm index fe2a78761..40cdc8c33 100644 --- a/home/serial.asm +++ b/home/serial.asm @@ -57,13 +57,13 @@ Serial:: xor a ldh [rSB], a + ld a, 3 ldh [rDIV], a - -.wait_bit_7 +.delay_loop ldh a, [rDIV] bit 7, a - jr nz, .wait_bit_7 + jr nz, .delay_loop ld a, (0 << rSC_ON) | (0 << rSC_CLOCK) ldh [rSC], a @@ -89,8 +89,9 @@ Serial:: reti Serial_ExchangeBytes:: - ld a, $1 + ld a, TRUE ldh [hSerialIgnoringInitialData], a + .loop ld a, [hl] ldh [hSerialSend], a @@ -98,10 +99,12 @@ Serial_ExchangeBytes:: push bc ld b, a inc hl - ld a, $30 + + ld a, 48 .wait dec a jr nz, .wait + ldh a, [hSerialIgnoringInitialData] and a ld a, b @@ -124,7 +127,7 @@ Serial_ExchangeBytes:: ret Serial_ExchangeByte:: -.loop +.timeout_loop xor a ldh [hSerialReceivedNewData], a ldh a, [hSerialConnectionStatus] @@ -135,16 +138,16 @@ Serial_ExchangeByte:: ld a, (1 << rSC_ON) | (1 << rSC_CLOCK) ldh [rSC], a .not_player_2 -.loop2 +.loop ldh a, [hSerialReceivedNewData] and a - jr nz, .reset_ffca + jr nz, .await_new_data ldh a, [hSerialConnectionStatus] cp USING_EXTERNAL_CLOCK - jr nz, .not_player_1_or_wLinkTimeoutFrames_zero - call CheckwLinkTimeoutFramesNonzero - jr z, .not_player_1_or_wLinkTimeoutFrames_zero - call .delay_15_cycles + jr nz, .not_player_1_or_timed_out + call CheckLinkTimeoutFramesNonzero + jr z, .not_player_1_or_timed_out + call .ShortDelay push hl ld hl, wLinkTimeoutFrames + 1 inc [hl] @@ -154,51 +157,51 @@ Serial_ExchangeByte:: .no_rollover_up pop hl - call CheckwLinkTimeoutFramesNonzero - jr nz, .loop2 + call CheckLinkTimeoutFramesNonzero + jr nz, .loop jp SerialDisconnected -.not_player_1_or_wLinkTimeoutFrames_zero +.not_player_1_or_timed_out ldh a, [rIE] and (1 << SERIAL) | (1 << TIMER) | (1 << LCD_STAT) | (1 << VBLANK) cp 1 << SERIAL - jr nz, .loop2 - ld a, [wcf5d] + jr nz, .loop + ld a, [wLinkByteTimeout] dec a - ld [wcf5d], a - jr nz, .loop2 - ld a, [wcf5d + 1] + ld [wLinkByteTimeout], a + jr nz, .loop + ld a, [wLinkByteTimeout + 1] dec a - ld [wcf5d + 1], a - jr nz, .loop2 + ld [wLinkByteTimeout + 1], a + jr nz, .loop ldh a, [hSerialConnectionStatus] cp USING_EXTERNAL_CLOCK - jr z, .reset_ffca + jr z, .await_new_data ld a, 255 -.delay_255_cycles +.long_delay_loop dec a - jr nz, .delay_255_cycles + jr nz, .long_delay_loop -.reset_ffca +.await_new_data xor a ldh [hSerialReceivedNewData], a ldh a, [rIE] and (1 << SERIAL) | (1 << TIMER) | (1 << LCD_STAT) | (1 << VBLANK) sub 1 << SERIAL - jr nz, .rIE_not_equal_8 + jr nz, .non_serial_interrupts_enabled - ; LOW($5000) - ld [wcf5d], a + ; a == LOW($5000) + ld [wLinkByteTimeout], a ld a, HIGH($5000) - ld [wcf5d + 1], a + ld [wLinkByteTimeout + 1], a -.rIE_not_equal_8 +.non_serial_interrupts_enabled ldh a, [hSerialReceive] cp SERIAL_NO_DATA_BYTE ret nz - call CheckwLinkTimeoutFramesNonzero - jr z, .linkTimeoutFrames_zero + call CheckLinkTimeoutFramesNonzero + jr z, .timed_out push hl ld hl, wLinkTimeoutFrames + 1 ld a, [hl] @@ -210,10 +213,10 @@ Serial_ExchangeByte:: .no_rollover pop hl - call CheckwLinkTimeoutFramesNonzero + call CheckLinkTimeoutFramesNonzero jr z, SerialDisconnected -.linkTimeoutFrames_zero +.timed_out ldh a, [rIE] and (1 << SERIAL) | (1 << TIMER) | (1 << LCD_STAT) | (1 << VBLANK) cp 1 << SERIAL @@ -222,16 +225,16 @@ Serial_ExchangeByte:: ld a, [hl] ldh [hSerialSend], a call DelayFrame - jp .loop + jp .timeout_loop -.delay_15_cycles +.ShortDelay: ld a, 15 -.delay_cycles +.short_delay_loop dec a - jr nz, .delay_cycles + jr nz, .short_delay_loop ret -CheckwLinkTimeoutFramesNonzero:: +CheckLinkTimeoutFramesNonzero:: push hl ld hl, wLinkTimeoutFrames ld a, [hli] @@ -239,8 +242,10 @@ CheckwLinkTimeoutFramesNonzero:: pop hl ret +; This sets wLinkTimeoutFrames to $ffff, since +; a is always 0 when it is called. SerialDisconnected:: - dec a ; a is always 0 when this is called + dec a ld [wLinkTimeoutFrames], a ld [wLinkTimeoutFrames + 1], a ret @@ -281,9 +286,7 @@ Serial_PrintWaitingTextAndSyncAndExchangeNybble:: Serial_SyncAndExchangeNybble:: ; unreferenced call LoadTilemapToTempTilemap callfar PlaceWaitingText - jp WaitLinkTransfer - -; One "giant" leap for machinekind + jp WaitLinkTransfer ; pointless WaitLinkTransfer:: ld a, $ff @@ -291,7 +294,7 @@ WaitLinkTransfer:: .loop call LinkTransfer call DelayFrame - call CheckwLinkTimeoutFramesNonzero + call CheckLinkTimeoutFramesNonzero jr z, .check push hl ld hl, wLinkTimeoutFrames + 1 diff --git a/wram.asm b/wram.asm index bbc78d30d..7244bcaac 100644 --- a/wram.asm +++ b/wram.asm @@ -1341,7 +1341,7 @@ wPlayerLinkAction:: db wcf57:: db ds 3 wLinkTimeoutFrames:: dw -wcf5d:: dw +wLinkByteTimeout:: dw wMonType:: db @@ -1664,13 +1664,19 @@ SECTION "WRAM 1", WRAMX wGBCOnlyDecompressBuffer:: ; a $540-byte buffer that continues past this SECTION -wUnusedInitializedToZero:: db +wBetaTitleSequenceOpeningType:: +; This selected the title screen animation (fire/notes) in pokegold-spaceworld. + db wDefaultSpawnpoint:: db UNION -; mail temp storage -wTempMail:: mailmsg wTempMail +; mon buffer +wBufferMonNick:: ds MON_NAME_LENGTH +wBufferMonOT:: ds NAME_LENGTH +wBufferMon:: party_struct wBufferMon + ds 8 +wMonOrItemNameBuffer:: ds 22 NEXTU ; poke seer @@ -1686,12 +1692,8 @@ wSeerCaughtData:: db wSeerCaughtGender:: db NEXTU -; mon buffer -wBufferMonNick:: ds MON_NAME_LENGTH -wBufferMonOT:: ds NAME_LENGTH -wBufferMon:: party_struct wBufferMon - ds 8 -wMonOrItemNameBuffer:: +; mail temp storage +wTempMail:: mailmsg wTempMail NEXTU ; bug-catching contest @@ -1725,6 +1727,8 @@ wTownMapCursorLandmark:: db wTownMapCursorObjectPointer:: dw NEXTU wTownMapCursorCoordinates:: dw +wStartFlypoint:: db +wEndFlypoint:: db ENDU NEXTU @@ -1780,6 +1784,10 @@ wMobileParticipant1Nickname:: ds NAME_LENGTH_JAPANESE wMobileParticipant2Nickname:: ds NAME_LENGTH_JAPANESE wMobileParticipant3Nickname:: ds NAME_LENGTH_JAPANESE +NEXTU +; battle exp gain +wExperienceGained:: ds 3 + NEXTU ; earthquake data buffer wEarthquakeMovementDataBuffer:: ds 5 @@ -1788,16 +1796,65 @@ NEXTU ; switching items in pack wSwitchItemBuffer:: ds 2 ; may store 1 or 2 bytes +NEXTU +; switching pokemon in party +; may store NAME_LENGTH, PARTYMON_STRUCT_LENGTH, or MAIL_STRUCT_LENGTH bytes +wSwitchMonBuffer:: ds 48 + +NEXTU +; giving pokemon mail +wMonMailMessageBuffer:: ds MAIL_MSG_LENGTH + 1 + +NEXTU +; bill's pc +UNION +wBoxNameBuffer:: ds BOX_NAME_LENGTH +NEXTU + ds 1 +wBillsPCTempListIndex:: db +wBillsPCTempBoxCount:: db +ENDU + +NEXTU +; prof. oak's pc +wTempPokedexSeenCount:: db +wTempPokedexCaughtCount:: db + +NEXTU +; player's room pc +UNION +wDecoNameBuffer:: ds ITEM_NAME_LENGTH +NEXTU +wNumOwnedDecoCategories:: db +wOwnedDecoCategories:: ds 16 +ENDU + +NEXTU +; trade +wCurTradePartyMon:: db +wCurOTTradePartyMon:: db +wBufferTrademonNick:: ds MON_NAME_LENGTH + +NEXTU +; link battle record data +wLinkBattleRecordBuffer:: +wLinkBattleRecordName:: ds NAME_LENGTH +wLinkBattleRecordWins:: dw +wLinkBattleRecordLosses:: dw +wLinkBattleRecordDraws:: dw + NEXTU ; miscellaneous wTempDayOfWeek:: +wPrevPartyLevel:: +wCurBeatUpPartyMon:: +wUnownPuzzleCornerTile:: +wKeepSevenBiasChance:: +wPokeFluteCuredSleep:: +wTempRestorePPItem:: wApricorns:: -wKeepSevenBiasChance:: ; used in the slots to handle the favoring of 7 symbol streaks wSuicuneFrame:: db - ds 2 -wStartFlypoint:: db -wEndFlypoint:: db NEXTU ; debug color picker @@ -1806,21 +1863,11 @@ wDebugColorIsShiny:: db wDebugColorCurTMHM:: db NEXTU -; link battle record data -wLinkBattleRecordName:: ds NAME_LENGTH -wLinkBattleRecordWins:: dw -wLinkBattleRecordLosses:: dw -wLinkBattleRecordDraws:: dw - -NEXTU -; unidentified -wd002:: db -wd003:: db -wd004:: db - ; mobile? - ds 1 - ds 2 +wd002:: ds 1 +wd003:: ds 1 +wd004:: ds 1 + ds 3 wd008:: ds 2 ds 6 wd010:: ds 1 @@ -1842,7 +1889,11 @@ wd032:: ds 1 wd033:: ds 1 wd034:: ds 2 wd036:: ds 2 - ds 6 + +NEXTU +; Every previous NEXTU takes up 60 or fewer bytes, +; except the initial "mon buffer" UNION. + ds 60 UNION ; trainer data