From d001ced41b53271373753de835a9c3b3413dc318 Mon Sep 17 00:00:00 2001 From: vulcandth Date: Thu, 13 Jul 2023 20:27:56 -0500 Subject: Add macros, constants, and labels for map scripts and text (#367) This introduces `def_script_pointers`, `def_text_pointers`, and `object_const_def` macros, and applies them to all maps. Most other map labels have also been identified. --- home/overworld.asm | 2 +- home/text.asm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'home') diff --git a/home/overworld.asm b/home/overworld.asm index a4e547bf..be1e6b24 100644 --- a/home/overworld.asm +++ b/home/overworld.asm @@ -5,7 +5,7 @@ HandleMidJump:: EnterMap:: ; Load a new map. - ld a, $ff + ld a, A_BUTTON | B_BUTTON | SELECT | START | D_RIGHT | D_LEFT | D_UP | D_DOWN ld [wJoyIgnore], a call LoadMapData farcall ClearVariablesOnEnterMap diff --git a/home/text.asm b/home/text.asm index b1f5e55c..836f3986 100644 --- a/home/text.asm +++ b/home/text.asm @@ -547,7 +547,7 @@ TextCommandSounds:: db TX_SOUND_GET_KEY_ITEM, SFX_GET_KEY_ITEM db TX_SOUND_DEX_PAGE_ADDED, SFX_DEX_PAGE_ADDED db TX_SOUND_CRY_NIDORINA, NIDORINA ; used in OakSpeech - db TX_SOUND_CRY_PIDGEOT, PIDGEOT ; used in SaffronCityText12 + db TX_SOUND_CRY_PIDGEOT, PIDGEOT ; used in SaffronCityPidgeotText db TX_SOUND_CRY_DEWGONG, DEWGONG ; unused TextCommand_DOTS:: -- cgit v1.3.1-sl0p From f46db37d508f0111ad44ad062ed3d83ba3282d1d Mon Sep 17 00:00:00 2001 From: SatoMew Date: Sat, 15 Jul 2023 23:36:59 +0100 Subject: Thoroughly document debug code (#410) --- constants/item_constants.asm | 2 +- constants/misc_constants.asm | 3 ++ data/maps/special_warps.asm | 10 +++--- engine/battle/core.asm | 25 +++++++++----- engine/battle/init_battle_variables.asm | 2 +- engine/debug/debug_menu.asm | 23 +++++++------ engine/debug/debug_party.asm | 24 ++++++------- engine/menus/main_menu.asm | 13 ++++--- engine/movie/oak_speech/oak_speech.asm | 17 ++++++--- engine/movie/title.asm | 8 ++--- engine/overworld/special_warps.asm | 61 ++++++++++++++++----------------- gfx/font.asm | 4 +-- home/npc_movement.asm | 6 ++-- home/overworld.asm | 10 +++--- home/text.asm | 6 +++- home/trainers.asm | 2 ++ ram/wram.asm | 19 +++------- scripts/HallOfFame.asm | 2 +- 18 files changed, 128 insertions(+), 109 deletions(-) (limited to 'home') diff --git a/constants/item_constants.asm b/constants/item_constants.asm index edd70379..e25aadba 100644 --- a/constants/item_constants.asm +++ b/constants/item_constants.asm @@ -13,7 +13,7 @@ const POKE_BALL ; $04 const TOWN_MAP ; $05 const BICYCLE ; $06 - const SURFBOARD ; $07 buggy? + const SURFBOARD ; $07 const SAFARI_BALL ; $08 const POKEDEX ; $09 const MOON_STONE ; $0A diff --git a/constants/misc_constants.asm b/constants/misc_constants.asm index 84775608..a230b3d7 100644 --- a/constants/misc_constants.asm +++ b/constants/misc_constants.asm @@ -16,3 +16,6 @@ DEF TEXT_DELAY_SLOW EQU %101 ; 5 const_def 6 const BIT_BATTLE_SHIFT ; 6 const BIT_BATTLE_ANIMATION ; 7 + +; wd732 flags +DEF BIT_DEBUG_MODE EQU 1 diff --git a/data/maps/special_warps.asm b/data/maps/special_warps.asm index cad320ed..28cdbf6c 100644 --- a/data/maps/special_warps.asm +++ b/data/maps/special_warps.asm @@ -44,15 +44,15 @@ MACRO special_warp_spec db \4 ENDM -FirstMapSpec: +NewGameWarp: special_warp_spec REDS_HOUSE_2F, 3, 6, REDS_HOUSE_2 -TradeCenterSpec1: +TradeCenterPlayerWarp: special_warp_spec TRADE_CENTER, 3, 4, CLUB -TradeCenterSpec2: +TradeCenterFriendWarp: special_warp_spec TRADE_CENTER, 6, 4, CLUB -ColosseumSpec1: +ColosseumPlayerWarp: special_warp_spec COLOSSEUM, 3, 4, CLUB -ColosseumSpec2: +ColosseumFriendWarp: special_warp_spec COLOSSEUM, 6, 4, CLUB diff --git a/engine/battle/core.asm b/engine/battle/core.asm index 4a0263e2..f976674a 100644 --- a/engine/battle/core.asm +++ b/engine/battle/core.asm @@ -2493,9 +2493,9 @@ MoveSelectionMenu: ; so it is necessary to put the di ei block to not cause tearing call TextBoxBorder hlcoord 4, 12 - ld [hl], $7a + ld [hl], "─" hlcoord 10, 12 - ld [hl], $7e + ld [hl], "┘" ei hlcoord 6, 13 call .writemoves @@ -2557,11 +2557,12 @@ MoveSelectionMenu: ld a, [wLinkState] cp LINK_STATE_BATTLING jr z, .matchedkeyspicked + ; Disable left, right, and START buttons in regular battles. ld a, [wFlags_D733] bit BIT_TEST_BATTLE, a ld b, D_UP | D_DOWN | A_BUTTON | B_BUTTON | SELECT jr z, .matchedkeyspicked - ld b, $ff + ld b, D_UP | D_DOWN | D_LEFT | D_RIGHT | A_BUTTON | B_BUTTON | SELECT | START .matchedkeyspicked ld a, b ld [hli], a ; wMenuWatchedKeys @@ -2585,8 +2586,12 @@ SelectMenuItem: call PlaceString jr .select .battleselect + ; Hide move swap cursor in TestBattle. ld a, [wFlags_D733] bit BIT_TEST_BATTLE, a + ; This causes PrintMenuItem to not run in TestBattle. + ; MoveSelectionMenu still draws part of its window, an issue + ; which did not seem to exist in the Japanese versions. jr nz, .select call PrintMenuItem ld a, [wMenuItemToSwap] @@ -2648,8 +2653,9 @@ SelectMenuItem: jr z, .disabled ld a, [wPlayerBattleStatus3] bit 3, a ; transformed - jr nz, .dummy ; game freak derp -.dummy + jr nz, .transformedMoveSelected +.transformedMoveSelected ; pointless + ; Allow moves copied by Transform to be used. ld a, [wCurrentMenuItem] ld hl, wBattleMonMoves ld c, a @@ -6085,6 +6091,7 @@ GetCurrentMove: jr .selected .player ld de, wPlayerMoveNum + ; Apply InitBattleVariables to TestBattle. ld a, [wFlags_D733] bit BIT_TEST_BATTLE, a ld a, [wTestBattlePlayerSelectedMove] @@ -6768,12 +6775,12 @@ InitOpponent: DetermineWildOpponent: ld a, [wd732] - bit 1, a - jr z, .notDebug + bit BIT_DEBUG_MODE, a + jr z, .notDebugMode ldh a, [hJoyHeld] - bit BIT_B_BUTTON, a + bit BIT_B_BUTTON, a ; disable wild encounters ret nz -.notDebug +.notDebugMode ld a, [wNumberOfNoRandomBattleStepsLeft] and a ret nz diff --git a/engine/battle/init_battle_variables.asm b/engine/battle/init_battle_variables.asm index dd9f9714..aa081296 100644 --- a/engine/battle/init_battle_variables.asm +++ b/engine/battle/init_battle_variables.asm @@ -20,7 +20,7 @@ InitBattleVariables: ld [hli], a ; wPlayerHPBarColor ld [hl], a ; wEnemyHPBarColor ld hl, wCanEvolveFlags - ld b, $3c + ld b, wMiscBattleDataEnd - wMiscBattleData .loop ld [hli], a dec b diff --git a/engine/debug/debug_menu.asm b/engine/debug/debug_menu.asm index 907acb8a..fbf136fe 100644 --- a/engine/debug/debug_menu.asm +++ b/engine/debug/debug_menu.asm @@ -56,7 +56,7 @@ IF DEF(_DEBUG) ; DEBUG ld hl, wd732 - set 1, [hl] + set BIT_DEBUG_MODE, [hl] jp StartNewGameDebug DebugBattlePlayerName: @@ -72,18 +72,23 @@ ELSE ret ENDC -TestBattle: +TestBattle: ; unreferenced except in _DEBUG .loop call GBPalNormal - ; Don't mess around - ; with obedience. + ; Don't mess around with obedience. ld a, 1 << BIT_EARTHBADGE ld [wObtainedBadges], a ld hl, wFlags_D733 set BIT_TEST_BATTLE, [hl] + ; wNumBagItems and wBagItems are not initialized here, + ; and their garbage values happen to act as if EXP_ALL + ; is in the bag at the end of the test battle. + ; pokeyellow fixes this by initializing them with a + ; list of items. + ; Reset the party. ld hl, wPartyCount xor a @@ -91,8 +96,7 @@ TestBattle: dec a ld [hl], a - ; Give the player a - ; level 20 Rhydon. + ; Give the player a level 20 Rhydon. ld a, RHYDON ld [wcf91], a ld a, 20 @@ -102,15 +106,14 @@ TestBattle: ld [wCurMap], a call AddPartyMon - ; Fight against a - ; level 20 Rhydon. + ; Fight against a level 20 Rhydon. ld a, RHYDON ld [wCurOpponent], a predef InitOpponent - ; When the battle ends, - ; do it all again. + ; When the battle ends, do it all again. + ; There are some graphical quirks in SGB mode. ld a, 1 ld [wUpdateSpritesEnabled], a ldh [hAutoBGTransferEnabled], a diff --git a/engine/debug/debug_party.asm b/engine/debug/debug_party.asm index 36eb8e6f..0c76bde1 100644 --- a/engine/debug/debug_party.asm +++ b/engine/debug/debug_party.asm @@ -1,13 +1,5 @@ -; This function is a debugging feature to give the player Tsunekazu Ishihara's -; favorite Pokemon. This is indicated by the overpowered Exeggutor, which -; Ishihara (president of Creatures Inc.) said was his favorite Pokemon in an ABC -; interview on February 8, 2000. -; "Exeggutor is my favorite. That's because I was always using this character -; while I was debugging the program." -; http://www.ign.com/articles/2000/02/09/abc-news-pokamon-chat-transcript - -SetIshiharaTeam: - ld de, IshiharaTeam +SetDebugNewGameParty: ; unreferenced except in _DEBUG + ld de, DebugNewGameParty .loop ld a, [de] cp -1 @@ -20,7 +12,11 @@ SetIshiharaTeam: call AddPartyMon jr .loop -IshiharaTeam: +DebugNewGameParty: ; unreferenced except in _DEBUG + ; Exeggutor is the only debug party member shared with Red, Green, and Japanese Blue. + ; "Tsunekazu Ishihara: Exeggutor is my favorite. That's because I was + ; always using this character while I was debugging the program." + ; From https://web.archive.org/web/20000607152840/http://pocket.ign.com/news/14973.html db EXEGGUTOR, 90 IF DEF(_DEBUG) db MEW, 5 @@ -35,13 +31,13 @@ IF DEF(_DEBUG) ENDC db -1 ; end -DebugStart: +PrepareNewGameDebug: ; dummy except in _DEBUG IF DEF(_DEBUG) xor a ; PLAYER_PARTY_DATA ld [wMonDataLocation], a ; Fly anywhere. - dec a ; $ff + dec a ; $ff (all bits) ld [wTownVisitedFlag], a ld [wTownVisitedFlag + 1], a @@ -49,7 +45,7 @@ IF DEF(_DEBUG) ld a, ~(1 << BIT_EARTHBADGE) ld [wObtainedBadges], a - call SetIshiharaTeam + call SetDebugNewGameParty ; Exeggutor gets four HM moves. ld hl, wPartyMon1Moves diff --git a/engine/menus/main_menu.asm b/engine/menus/main_menu.asm index 024def28..69b3b918 100644 --- a/engine/menus/main_menu.asm +++ b/engine/menus/main_menu.asm @@ -121,7 +121,7 @@ MainMenu: ld [wDestinationMap], a ld hl, wd732 set 2, [hl] ; fly warp or dungeon warp - call SpecialWarpIn + call PrepareForSpecialWarp jp SpecialEnterMap InitOptions: @@ -268,10 +268,10 @@ LinkMenu: ld c, 50 call DelayFrames ld hl, wd732 - res 1, [hl] + res BIT_DEBUG_MODE, [hl] ld a, [wDefaultMap] ld [wDestinationMap], a - call SpecialWarpIn + call PrepareForSpecialWarp ld c, 20 call DelayFrames xor a @@ -308,7 +308,12 @@ LinkCanceledText: StartNewGame: ld hl, wd732 - res 1, [hl] + ; Ensure debug mode is not used when + ; starting a regular new game. + ; Debug mode persists in saved games for + ; both debug and non-debug builds, and is + ; only reset here by the main menu. + res BIT_DEBUG_MODE, [hl] ; fallthrough StartNewGameDebug: call OakSpeech diff --git a/engine/movie/oak_speech/oak_speech.asm b/engine/movie/oak_speech/oak_speech.asm index 3a08372d..4ed4735e 100644 --- a/engine/movie/oak_speech/oak_speech.asm +++ b/engine/movie/oak_speech/oak_speech.asm @@ -3,6 +3,11 @@ PrepareOakSpeech: push af ld a, [wOptions] push af + ; Retrieve BIT_DEBUG_MODE set in DebugMenu for StartNewGameDebug. + ; BUG: StartNewGame carries over bit 5 from previous save files, + ; which causes CheckForceBikeOrSurf to not return. + ; To fix this in debug builds, reset bit 5 here or in StartNewGame. + ; In non-debug builds, the instructions can be removed. ld a, [wd732] push af ld hl, wPlayerName @@ -24,6 +29,7 @@ PrepareOakSpeech: call z, InitOptions ; These debug names are used for StartNewGameDebug. ; TestBattle uses the debug names from DebugMenu. + ; A variant of this process is performed in PrepareTitleScreen. ld hl, DebugNewGamePlayerName ld de, wPlayerName ld bc, NAME_LENGTH @@ -49,15 +55,15 @@ OakSpeech: ld [wcf91], a ld a, 1 ld [wItemQuantity], a - call AddItemToInventory ; give one potion + call AddItemToInventory ld a, [wDefaultMap] ld [wDestinationMap], a - call SpecialWarpIn + call PrepareForSpecialWarp xor a ldh [hTileAnimations], a ld a, [wd732] - bit 1, a ; possibly a debug mode bit - jp nz, .skipChoosingNames + bit BIT_DEBUG_MODE, a + jp nz, .skipSpeech ld de, ProfOakPic lb bc, BANK(ProfOakPic), $00 call IntroDisplayPicCenteredOrUpperRight @@ -93,7 +99,7 @@ OakSpeech: ld hl, IntroduceRivalText call PrintText call ChooseRivalName -.skipChoosingNames +.skipSpeech call GBFadeOutToWhite call ClearScreen ld de, RedPicFront @@ -159,6 +165,7 @@ OakSpeechText1: text_end OakSpeechText2: text_far _OakSpeechText2A + ; BUG: The cry played does not match the sprite displayed. sound_cry_nidorina text_far _OakSpeechText2B text_end diff --git a/engine/movie/title.asm b/engine/movie/title.asm index ad5f6ebf..36a28b0d 100644 --- a/engine/movie/title.asm +++ b/engine/movie/title.asm @@ -1,4 +1,4 @@ -CopyDebugName: +CopyDebugName: ; unused ld bc, NAME_LENGTH jp CopyData @@ -42,10 +42,10 @@ DisplayTitleScreen: ld bc, 5 tiles ld a, BANK(NintendoCopyrightLogoGraphics) call FarCopyData2 - ld hl, GamefreakLogoGraphics + ld hl, GameFreakLogoGraphics ld de, vTitleLogo2 tile (16 + 5) ld bc, 9 tiles - ld a, BANK(GamefreakLogoGraphics) + ld a, BANK(GameFreakLogoGraphics) call FarCopyData2 ld hl, PokemonLogoGraphics ld de, vTitleLogo @@ -378,7 +378,7 @@ LoadCopyrightAndTextBoxTiles: LoadCopyrightTiles: ld de, NintendoCopyrightLogoGraphics ld hl, vChars2 tile $60 - lb bc, BANK(NintendoCopyrightLogoGraphics), (GamefreakLogoGraphicsEnd - NintendoCopyrightLogoGraphics) / $10 + lb bc, BANK(NintendoCopyrightLogoGraphics), (GameFreakLogoGraphicsEnd - NintendoCopyrightLogoGraphics) / $10 call CopyVideoData hlcoord 2, 7 ld de, CopyrightTextString diff --git a/engine/overworld/special_warps.asm b/engine/overworld/special_warps.asm index 61356a03..c538938b 100644 --- a/engine/overworld/special_warps.asm +++ b/engine/overworld/special_warps.asm @@ -1,60 +1,60 @@ -SpecialWarpIn:: +PrepareForSpecialWarp:: call LoadSpecialWarpData predef LoadTilesetHeader ld hl, wd732 bit 2, [hl] ; dungeon warp or fly warp? res 2, [hl] - jr z, .next -; if dungeon warp or fly warp + jr z, .debugNewGameWarp ld a, [wDestinationMap] - jr .next2 + jr .next +.debugNewGameWarp + bit BIT_DEBUG_MODE, [hl] + jr z, .setNewGameMatWarp ; apply to StartNewGameDebug only + call PrepareNewGameDebug +.setNewGameMatWarp + ; This is called by OakSpeech during StartNewGame and + ; loads the first warp event for the specified map index. + ld a, PALLET_TOWN .next - bit 1, [hl] - jr z, .next3 - call DebugStart -.next3 - ld a, 0 -.next2 ld b, a ld a, [wd72d] and a - jr nz, .next4 + jr nz, .next2 ld a, b -.next4 +.next2 ld hl, wd732 - bit 4, [hl] ; dungeon warp? + bit 4, [hl] ; dungeon warp ret nz -; if not dungeon warp ld [wLastMap], a ret -; gets the map ID, tile block map view pointer, tileset, and coordinates LoadSpecialWarpData: ld a, [wd72d] cp TRADE_CENTER jr nz, .notTradeCenter - ld hl, TradeCenterSpec1 + ld hl, TradeCenterPlayerWarp ldh a, [hSerialConnectionStatus] - cp USING_INTERNAL_CLOCK ; which gameboy is clocking determines who is on the left and who is on the right + cp USING_INTERNAL_CLOCK jr z, .copyWarpData - ld hl, TradeCenterSpec2 + ld hl, TradeCenterFriendWarp jr .copyWarpData .notTradeCenter cp COLOSSEUM jr nz, .notColosseum - ld hl, ColosseumSpec1 + ld hl, ColosseumPlayerWarp ldh a, [hSerialConnectionStatus] cp USING_INTERNAL_CLOCK jr z, .copyWarpData - ld hl, ColosseumSpec2 + ld hl, ColosseumFriendWarp jr .copyWarpData .notColosseum ld a, [wd732] - bit 1, a - jr nz, .notFirstMap + bit BIT_DEBUG_MODE, a + ; warp to wLastMap (PALLET_TOWN) for StartNewGameDebug + jr nz, .notNewGameWarp bit 2, a - jr nz, .notFirstMap - ld hl, FirstMapSpec + jr nz, .notNewGameWarp + ld hl, NewGameWarp .copyWarpData ld de, wCurMap ld c, $7 @@ -68,18 +68,17 @@ LoadSpecialWarpData: ld [wCurMapTileset], a xor a jr .done -.notFirstMap +.notNewGameWarp ld a, [wLastMap] ; this value is overwritten before it's ever read ld hl, wd732 - bit 4, [hl] ; used dungeon warp (jumped down hole/waterfall)? - jr nz, .usedDunegonWarp - bit 6, [hl] ; return to last pokemon center (or player's house)? + bit 4, [hl] ; dungeon warp + jr nz, .usedDungeonWarp + bit 6, [hl] ; blacked out res 6, [hl] jr z, .otherDestination -; return to last pokemon center or player's house ld a, [wLastBlackoutMap] jr .usedFlyWarp -.usedDunegonWarp +.usedDungeonWarp ld hl, wd72d res 4, [hl] ld a, [wDungeonWarpDestinationMap] @@ -142,7 +141,7 @@ LoadSpecialWarpData: .done ld [wYOffsetSinceLastSpecialWarp], a ld [wXOffsetSinceLastSpecialWarp], a - ld a, $ff ; the player's coordinates have already been updated using a special warp, so don't use any of the normal warps + ld a, -1 ; exclude normal warps ld [wDestinationWarpID], a ret diff --git a/gfx/font.asm b/gfx/font.asm index fc2aff4f..daff3632 100644 --- a/gfx/font.asm +++ b/gfx/font.asm @@ -15,8 +15,8 @@ BattleHudTiles3End: NintendoCopyrightLogoGraphics: INCBIN "gfx/splash/copyright.2bpp" -GamefreakLogoGraphics: INCBIN "gfx/title/gamefreak_inc.2bpp" -GamefreakLogoGraphicsEnd: +GameFreakLogoGraphics: INCBIN "gfx/title/gamefreak_inc.2bpp" +GameFreakLogoGraphicsEnd: TextBoxGraphics:: INCBIN "gfx/font/font_extra.2bpp" TextBoxGraphicsEnd:: diff --git a/home/npc_movement.asm b/home/npc_movement.asm index a3367f9a..23a85427 100644 --- a/home/npc_movement.asm +++ b/home/npc_movement.asm @@ -50,10 +50,12 @@ RunNPCMovementScript:: EndNPCMovementScript:: farjp _EndNPCMovementScript -DebugPressedOrHeldB:: +DebugPressedOrHeldB:: ; dummy except in _DEBUG +; This is used to skip Trainer battles, the +; Safari Game step counter, and some NPC scripts. IF DEF(_DEBUG) ld a, [wd732] - bit 1, a + bit BIT_DEBUG_MODE, a ret z ldh a, [hJoyHeld] bit BIT_B_BUTTON, a diff --git a/home/overworld.asm b/home/overworld.asm index be1e6b24..1ebc794b 100644 --- a/home/overworld.asm +++ b/home/overworld.asm @@ -117,7 +117,7 @@ OverworldLoopLessDelay:: predef LoadSAV ld a, [wCurMap] ld [wDestinationMap], a - call SpecialWarpIn + call PrepareForSpecialWarp ld a, [wCurMap] call SwitchToMapRomBank ; switch to the ROM bank of the current map ld hl, wCurMapTileset @@ -762,11 +762,11 @@ HandleBlackOut:: call StopMusic ld hl, wd72e res 5, [hl] - ld a, BANK(ResetStatusAndHalveMoneyOnBlackout) ; also BANK(SpecialWarpIn) and BANK(SpecialEnterMap) + ld a, BANK(ResetStatusAndHalveMoneyOnBlackout) ; also BANK(PrepareForSpecialWarp) and BANK(SpecialEnterMap) ldh [hLoadedROMBank], a ld [MBC1RomBank], a call ResetStatusAndHalveMoneyOnBlackout - call SpecialWarpIn + call PrepareForSpecialWarp call PlayDefaultMusicFadeOutCurrent jp SpecialEnterMap @@ -793,10 +793,10 @@ HandleFlyWarpOrDungeonWarp:: set 2, [hl] ; fly warp or dungeon warp res 5, [hl] ; forced to ride bike call LeaveMapAnim - ld a, BANK(SpecialWarpIn) + ld a, BANK(PrepareForSpecialWarp) ldh [hLoadedROMBank], a ld [MBC1RomBank], a - call SpecialWarpIn + call PrepareForSpecialWarp jp SpecialEnterMap LeaveMapAnim:: diff --git a/home/text.asm b/home/text.asm index 836f3986..9462c749 100644 --- a/home/text.asm +++ b/home/text.asm @@ -111,10 +111,14 @@ NextChar:: inc de jp PlaceNextChar -NullChar:: +NullChar:: ; unused ld b, h ld c, l pop hl + ; A "" character in a printed string + ; displays an error message with the current value + ; of hSpriteIndexOrTextID in decimal format. + ; This is a debugging leftover. ld de, TextIDErrorText dec de ret diff --git a/home/trainers.asm b/home/trainers.asm index 4dc63fef..e0195729 100644 --- a/home/trainers.asm +++ b/home/trainers.asm @@ -135,7 +135,9 @@ ENDC ld a, [wSpriteIndex] cp $ff jr nz, .trainerEngaging +IF DEF(_DEBUG) .trainerNotEngaging +ENDC xor a ld [wSpriteIndex], a ld [wTrainerHeaderFlagBit], a diff --git a/ram/wram.asm b/ram/wram.asm index ac382f79..0d7de416 100644 --- a/ram/wram.asm +++ b/ram/wram.asm @@ -420,6 +420,7 @@ wAddedToParty:: ; The purpose of these flags is to track which mons levelled up during the ; current battle at the end of the battle when evolution occurs. ; Other methods of evolution simply set it by calling TryEvolvingMon. +wMiscBattleData:: wCanEvolveFlags:: db wForceEvolution:: db @@ -433,8 +434,7 @@ wAILayer2Encouragement:: db wPlayerSubstituteHP:: db wEnemySubstituteHP:: db -; The player's selected move during a test battle. -; InitBattleVariables sets it to the move Pound. +; used for TestBattle (unused in non-debug builds) wTestBattlePlayerSelectedMove:: db ds 1 @@ -502,6 +502,7 @@ wEnemyNumHits:: ; db wEnemyBideAccumulatedDamage:: dw ds 8 +wMiscBattleDataEnd:: ENDU ; This union spans 39 bytes. @@ -2155,17 +2156,7 @@ wd730:: db ds 1 ; bit 0: play time being counted -; bit 1: remnant of debug mode; only set by the debug build. -; if it is set: -; 1. skips most of Prof. Oak's speech, and uses NINTEN as the player's name and SONY as the rival's name -; 2. does not have the player start in floor two of the player's house (instead sending them to [wLastMap]) -; 3. allows wild battles to be avoided by holding down B -; furthermore, in the debug build: -; 4. allows trainers to be avoided by holding down B -; 5. skips Safari Zone step counter by holding down B -; 6. skips the NPC who blocks Route 3 before beating Brock by holding down B -; 7. skips Cerulean City rival battle by holding down B -; 8. skips Pokémon Tower rival battle by holding down B +; bit 1: debug mode (unused and incomplete in non-debug builds) ; bit 2: the target warp is a fly warp (bit 3 set or blacked out) or a dungeon warp (bit 4 set) ; bit 3: used warp pad, escape rope, dig, teleport, or fly, so the target warp is a "fly warp" ; bit 4: jumped into hole (Pokemon Mansion, Seafoam Islands, Victory Road) or went down waterfall (Seafoam Islands), so the target warp is a "dungeon warp" @@ -2173,7 +2164,7 @@ wd730:: db ; bit 6: map destination is [wLastBlackoutMap] (usually the last used pokemon center, but could be the player's house) wd732:: db -; bit 0: running a test battle +; bit 0: running a test battle (unused in non-debug builds) ; bit 1: prevent music from changing when entering new map ; bit 2: skip the joypad check in CheckWarpsNoCollision (used for the forced warp down the waterfall in the Seafoam Islands) ; bit 3: trainer wants to battle diff --git a/scripts/HallOfFame.asm b/scripts/HallOfFame.asm index 9fc7da18..523567df 100644 --- a/scripts/HallOfFame.asm +++ b/scripts/HallOfFame.asm @@ -32,7 +32,7 @@ HallOfFameResetEventsAndSaveScript: ld hl, wFlags_D733 res 1, [hl] inc hl - set 0, [hl] + set BIT_TEST_BATTLE, [hl] ; debug, unused? xor a ; SCRIPT_*_DEFAULT ld hl, wLoreleisRoomCurScript ld [hli], a ; wLoreleisRoomCurScript -- cgit v1.3.1-sl0p From 83b373ad734fb0bf4b476b0f38dbeec8ea205f19 Mon Sep 17 00:00:00 2001 From: Linus Unnebäck Date: Fri, 17 Nov 2023 19:50:27 +0100 Subject: Add constants for wMapConnections bits and group map header wram labels * Add constants for wMapConnections bits * Apply Vulcandth and Rangi42 feedback --------- Co-authored-by: vulcandth --- constants/map_data_constants.asm | 7 +++++++ engine/menus/save.asm | 2 +- home/overworld.asm | 21 ++++++++++----------- home/predef_text.asm | 10 +++++----- home/text_script.asm | 2 +- ram/wram.asm | 15 +++++++-------- scripts/OaksLab.asm | 4 ++-- scripts/ViridianMart.asm | 4 ++-- 8 files changed, 35 insertions(+), 30 deletions(-) (limited to 'home') diff --git a/constants/map_data_constants.asm b/constants/map_data_constants.asm index 1877e6a0..b28b3d79 100644 --- a/constants/map_data_constants.asm +++ b/constants/map_data_constants.asm @@ -3,6 +3,13 @@ DEF MAP_BORDER EQU 3 ; connection directions + const_def + const EAST_F + const WEST_F + const SOUTH_F + const NORTH_F + +; wCurMapConnections const_def shift_const EAST ; 1 shift_const WEST ; 2 diff --git a/engine/menus/save.asm b/engine/menus/save.asm index b74b9058..1857d6f5 100644 --- a/engine/menus/save.asm +++ b/engine/menus/save.asm @@ -372,7 +372,7 @@ ChangeBox:: call GetBoxSRAMLocation ld de, wBoxDataStart call CopyBoxToOrFromSRAM ; copy new box from SRAM to WRAM - ld hl, wMapTextPtr + ld hl, wCurMapTextPtr ld de, wChangeBoxSavedMapTextPointer ld a, [hli] ld [de], a diff --git a/home/overworld.asm b/home/overworld.asm index 1ebc794b..defa1728 100644 --- a/home/overworld.asm +++ b/home/overworld.asm @@ -910,9 +910,9 @@ LoadTileBlockMap:: add hl, bc ld c, MAP_BORDER add hl, bc ; this puts us past the (west) border - ld a, [wMapDataPtr] ; tile map pointer + ld a, [wCurMapDataPtr] ; tile map pointer ld e, a - ld a, [wMapDataPtr + 1] + ld a, [wCurMapDataPtr + 1] ld d, a ; de = tile map pointer ld a, [wCurMapHeight] ld b, a @@ -1966,7 +1966,7 @@ RunMapScript:: call RunNPCMovementScript ld a, [wCurMap] ; current map number call SwitchToMapRomBank ; change to the ROM bank the map's data is in - ld hl, wMapScriptPtr + ld hl, wCurMapScriptPtr ld a, [hli] ld h, [hl] ld l, a @@ -2035,9 +2035,8 @@ LoadMapHeader:: ld a, [hli] ld h, [hl] ld l, a ; hl = base of map header -; copy the first 10 bytes (the fixed area) of the map data to D367-D370 - ld de, wCurMapTileset - ld c, $0a + ld de, wCurMapHeader + ld c, wCurMapHeaderEnd - wCurMapHeader .copyFixedHeaderLoop ld a, [hli] ld [de], a @@ -2051,25 +2050,25 @@ LoadMapHeader:: ld [wWestConnectedMap], a ld [wEastConnectedMap], a ; copy connection data (if any) to WRAM - ld a, [wMapConnections] + ld a, [wCurMapConnections] ld b, a .checkNorth - bit 3, b + bit NORTH_F, b jr z, .checkSouth ld de, wNorthConnectionHeader call CopyMapConnectionHeader .checkSouth - bit 2, b + bit SOUTH_F, b jr z, .checkWest ld de, wSouthConnectionHeader call CopyMapConnectionHeader .checkWest - bit 1, b + bit WEST_F, b jr z, .checkEast ld de, wWestConnectionHeader call CopyMapConnectionHeader .checkEast - bit 0, b + bit EAST_F, b jr z, .getObjectDataPointer ld de, wEastConnectionHeader call CopyMapConnectionHeader diff --git a/home/predef_text.asm b/home/predef_text.asm index b494a2c8..1537ad5b 100644 --- a/home/predef_text.asm +++ b/home/predef_text.asm @@ -7,7 +7,7 @@ PrintPredefTextID:: call DisplayTextID RestoreMapTextPointer:: - ld hl, wMapTextPtr + ld hl, wCurMapTextPtr ldh a, [hSavedMapTextPtr] ld [hli], a ldh a, [hSavedMapTextPtr + 1] @@ -15,14 +15,14 @@ RestoreMapTextPointer:: ret SetMapTextPointer:: - ld a, [wMapTextPtr] + ld a, [wCurMapTextPtr] ldh [hSavedMapTextPtr], a - ld a, [wMapTextPtr + 1] + ld a, [wCurMapTextPtr + 1] ldh [hSavedMapTextPtr + 1], a ld a, l - ld [wMapTextPtr], a + ld [wCurMapTextPtr], a ld a, h - ld [wMapTextPtr + 1], a + ld [wCurMapTextPtr + 1], a ret INCLUDE "data/text_predef_pointers.asm" diff --git a/home/text_script.asm b/home/text_script.asm index 9e1ba275..ceae1a0a 100644 --- a/home/text_script.asm +++ b/home/text_script.asm @@ -13,7 +13,7 @@ DisplayTextID:: .skipSwitchToMapBank ld a, 30 ; half a second ldh [hFrameCounter], a ; used as joypad poll timer - ld hl, wMapTextPtr + ld hl, wCurMapTextPtr ld a, [hli] ld h, [hl] ld l, a ; hl = map text pointer diff --git a/ram/wram.asm b/ram/wram.asm index df286676..753a9678 100644 --- a/ram/wram.asm +++ b/ram/wram.asm @@ -1795,17 +1795,16 @@ wLastMap:: db wUnusedD366:: db +wCurMapHeader:: wCurMapTileset:: db - -; blocks -wCurMapHeight:: db +wCurMapHeight:: db wCurMapWidth:: db +wCurMapDataPtr:: dw +wCurMapTextPtr:: dw +wCurMapScriptPtr:: dw +wCurMapConnections:: db +wCurMapHeaderEnd:: -wMapDataPtr:: dw -wMapTextPtr:: dw -wMapScriptPtr:: dw - -wMapConnections:: db wNorthConnectionHeader:: map_connection_struct wNorth wSouthConnectionHeader:: map_connection_struct wSouth wWestConnectionHeader:: map_connection_struct wWest diff --git a/scripts/OaksLab.asm b/scripts/OaksLab.asm index 407ee3e5..30ee93ed 100644 --- a/scripts/OaksLab.asm +++ b/scripts/OaksLab.asm @@ -715,9 +715,9 @@ OaksLabCalcRivalMovementScript: OaksLabLoadTextPointers2Script: ld hl, OaksLab_TextPointers2 ld a, l - ld [wMapTextPtr], a + ld [wCurMapTextPtr], a ld a, h - ld [wMapTextPtr + 1], a + ld [wCurMapTextPtr + 1], a ret OaksLab_TextPointers: diff --git a/scripts/ViridianMart.asm b/scripts/ViridianMart.asm index 2e78a036..8f91afd6 100644 --- a/scripts/ViridianMart.asm +++ b/scripts/ViridianMart.asm @@ -14,9 +14,9 @@ ViridianMartCheckParcelDeliveredScript: ld hl, ViridianMart_TextPointers2 .done ld a, l - ld [wMapTextPtr], a + ld [wCurMapTextPtr], a ld a, h - ld [wMapTextPtr+1], a + ld [wCurMapTextPtr+1], a ret ViridianMart_ScriptPointers: -- cgit v1.3.1-sl0p From dc705d25c57d18c1ef40d35a786d09192303e85e Mon Sep 17 00:00:00 2001 From: Alchav <59858495+Alchav@users.noreply.github.com> Date: Sat, 18 Nov 2023 23:48:40 -0500 Subject: Correct wTilePlayerStandingOn "unused?" comment (#433) `TilePairCollisionsWater` contains the entry `db CAVERN, $14, $05`, which prevents surfing from raised cave ground tiles. If `wTilePlayerStandingOn` is not updated when the start menu is opened, it will be left at the previous tile, which will be the raised ground tile if you have just walked onto the stairs from one. --- home/overworld.asm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'home') diff --git a/home/overworld.asm b/home/overworld.asm index defa1728..8085f484 100644 --- a/home/overworld.asm +++ b/home/overworld.asm @@ -104,7 +104,7 @@ OverworldLoopLessDelay:: bit 0, a jr nz, .checkForOpponent lda_coord 8, 9 - ld [wTilePlayerStandingOn], a ; unused? + ld [wTilePlayerStandingOn], a ; checked when using Surf for forbidden tile pairs call DisplayTextID ; display either the start menu or the NPC/sign text ld a, [wEnteringCableClub] and a -- cgit v1.3.1-sl0p