From f3326786259f4e53c06b7565369add7605bea8ba Mon Sep 17 00:00:00 2001 From: Narishma-gb <194818981+Narishma-gb@users.noreply.github.com> Date: Tue, 18 Nov 2025 21:17:31 +0100 Subject: Use more hardware and graphics constants (#532) - Use `OBJ_SIZE` and `TILE_SIZE` from hardware.inc. - `SPRITESTATEDATA1_LENGTH`, `NUM_SPRITESTATEDATA_STRUCTS` and `TILE_1BPP_SIZE` are used in some places. - Highlight an oversight in `OakSpeech` where several direct MBC bank switches are requested. - Remove redundant comments in home/overworld.asm. - Add unreferenced `FillBgMap` function to avoid a byte of dead code. - Some constants added in wram.asm. - Correctly separate the commented code in `SaveMainData`. --- engine/battle/animations.asm | 18 +++++++++--------- engine/battle/battle_transitions.asm | 6 +++--- engine/battle/core.asm | 12 ++++++------ engine/battle/draw_hud_pokeball_gfx.asm | 2 +- engine/battle/effects.asm | 2 +- engine/events/diploma.asm | 2 +- engine/gfx/load_pokedex_tiles.asm | 2 +- engine/gfx/mon_icons.asm | 10 +++++----- engine/gfx/palettes.asm | 2 +- engine/gfx/sprite_oam.asm | 8 ++++---- engine/items/town_map.asm | 10 +++++----- engine/link/cable_club.asm | 2 +- engine/menus/display_text_id_init.asm | 7 ++++--- engine/menus/naming_screen.asm | 2 +- engine/menus/save.asm | 4 ++-- engine/menus/start_sub_menus.asm | 10 +++++----- engine/movie/credits.asm | 4 ++-- engine/movie/intro.asm | 4 ++-- engine/movie/oak_speech/oak_speech.asm | 11 ++++++++++- engine/movie/splash.asm | 8 ++++---- engine/movie/title.asm | 5 +++-- engine/movie/trade.asm | 4 ++-- engine/overworld/cut.asm | 6 +++--- engine/overworld/dust_smoke.asm | 4 ++-- engine/overworld/ledges.asm | 2 +- engine/overworld/player_animations.asm | 6 +++--- 26 files changed, 82 insertions(+), 71 deletions(-) (limited to 'engine') diff --git a/engine/battle/animations.asm b/engine/battle/animations.asm index 40b2047b..711ebda4 100644 --- a/engine/battle/animations.asm +++ b/engine/battle/animations.asm @@ -928,7 +928,7 @@ BallMoveDistances2: DoGrowlSpecialEffects: ld hl, wShadowOAM ld de, wShadowOAMSprite04 - ld bc, $10 + ld bc, OBJ_SIZE * 4 call CopyData ; copy the musical note graphic ld a, [wSubAnimCounter] dec a @@ -1308,7 +1308,7 @@ AdjustOAMBlockXPos: ld h, d AdjustOAMBlockXPos2: - ld de, 4 + ld de, OBJ_SIZE .loop ld a, [wCoordAdjustmentAmount] ld b, a @@ -1318,7 +1318,7 @@ AdjustOAMBlockXPos2: jr c, .skipPuttingEntryOffScreen ; put off-screen if X >= 168 dec hl - ld a, 160 + ld a, SCREEN_HEIGHT_PX + OAM_Y_OFS ld [hli], a .skipPuttingEntryOffScreen ld [hl], a @@ -1332,7 +1332,7 @@ AdjustOAMBlockYPos: ld h, d AdjustOAMBlockYPos2: - ld de, 4 + ld de, OBJ_SIZE .loop ld a, [wCoordAdjustmentAmount] ld b, a @@ -1670,7 +1670,7 @@ _AnimationShootBallsUpward: dec a ld [wNumShootingBalls], a .next - ld de, 4 + ld de, OBJ_SIZE add hl, de ; next OAM entry dec b jr nz, .innerLoop @@ -1723,10 +1723,10 @@ AnimationMinimizeMon: ld hl, wTempPic push hl xor a - ld bc, 7 * 7 * $10 + ld bc, (7 * 7) tiles call FillMemory pop hl - ld de, 7 * 3 * $10 + 4 * $10 + 4 + ld de, (7 * 3 + 4) tiles + TILE_SIZE / 4 add hl, de ld de, MinimizedMonSprite ld c, MinimizedMonSpriteEnd - MinimizedMonSprite @@ -1971,7 +1971,7 @@ AnimationSubstitute: jp AnimationShowMonPic CopyMonsterSpriteData: - ld bc, 1 tiles + ld bc, TILE_SIZE ld a, BANK(MonsterSprite) jp FarCopyData2 @@ -2379,7 +2379,7 @@ FallingObjects_UpdateOAMEntry: inc a cp 112 jr c, .next - ld a, 160 ; if Y >= 112, put it off-screen + ld a, SCREEN_HEIGHT_PX + OAM_Y_OFS ; if Y >= 112, put it off-screen .next ld [hli], a ; Y ld a, [wFallingObjectMovementByte] diff --git a/engine/battle/battle_transitions.asm b/engine/battle/battle_transitions.asm index fe731c5d..3670cddc 100644 --- a/engine/battle/battle_transitions.asm +++ b/engine/battle/battle_transitions.asm @@ -14,7 +14,7 @@ BattleTransition: ldh a, [hSpriteIndex] ; enemy trainer sprite index (0 if wild battle) ld c, a ld b, 0 - ld de, $10 + ld de, SPRITESTATEDATA1_LENGTH .loop1 ld a, [hl] cp $ff @@ -35,13 +35,13 @@ BattleTransition: jr z, .skip2 ; skip clearing the block if the enemy trainer is using it push hl push bc - ld bc, $10 + ld bc, OBJ_SIZE * 4 xor a call FillMemory pop bc pop hl .skip2 - ld de, $10 + ld de, OBJ_SIZE * 4 add hl, de dec c jr nz, .loop2 diff --git a/engine/battle/core.asm b/engine/battle/core.asm index 87abf2e8..0916176c 100644 --- a/engine/battle/core.asm +++ b/engine/battle/core.asm @@ -106,8 +106,8 @@ SlidePlayerAndEnemySilhouettesOnScreen: SlidePlayerHeadLeft: push bc ld hl, wShadowOAMSprite00XCoord - ld c, $15 ; number of OAM entries - ld de, $4 ; size of OAM entry + ld c, 7 * 3 ; number of OAM entries + ld de, OBJ_SIZE .loop dec [hl] ; decrement X dec [hl] ; decrement X @@ -6655,11 +6655,11 @@ LoadHudTilePatterns: .lcdEnabled ld de, BattleHudTiles1 ld hl, vChars2 tile $6d - lb bc, BANK(BattleHudTiles1), (BattleHudTiles1End - BattleHudTiles1) / $8 + lb bc, BANK(BattleHudTiles1), (BattleHudTiles1End - BattleHudTiles1) / TILE_1BPP_SIZE call CopyVideoDataDouble ld de, BattleHudTiles2 ld hl, vChars2 tile $73 - lb bc, BANK(BattleHudTiles2), (BattleHudTiles3End - BattleHudTiles2) / $8 + lb bc, BANK(BattleHudTiles2), (BattleHudTiles3End - BattleHudTiles2) / TILE_1BPP_SIZE jp CopyVideoDataDouble PrintEmptyString: @@ -7040,14 +7040,14 @@ LoadMonBackPic: ld b, 7 ld c, 8 call ClearScreenArea - ld hl, wMonHBackSprite - wMonHeader + ld hl, wMonHBackSprite - wMonHeader call UncompressMonSprite predef ScaleSpriteByTwo ld de, vBackPic call InterlaceMergeSpriteBuffers ; combine the two buffers to a single 2bpp sprite ld hl, vSprites ld de, vBackPic - ld c, (2 * SPRITEBUFFERSIZE) / 16 ; count of 16-byte chunks to be copied + ld c, (2 * SPRITEBUFFERSIZE) / TILE_SIZE ; count of 16-byte chunks to be copied ldh a, [hLoadedROMBank] ld b, a jp CopyVideoData diff --git a/engine/battle/draw_hud_pokeball_gfx.asm b/engine/battle/draw_hud_pokeball_gfx.asm index 34bff58d..983e7cdf 100644 --- a/engine/battle/draw_hud_pokeball_gfx.asm +++ b/engine/battle/draw_hud_pokeball_gfx.asm @@ -13,7 +13,7 @@ DrawEnemyPokeballs: LoadPartyPokeballGfx: ld de, PokeballTileGraphics ld hl, vSprites tile $31 - lb bc, BANK(PokeballTileGraphics), (PokeballTileGraphicsEnd - PokeballTileGraphics) / $10 + lb bc, BANK(PokeballTileGraphics), (PokeballTileGraphicsEnd - PokeballTileGraphics) / TILE_SIZE jp CopyVideoData SetupOwnPartyPokeballs: diff --git a/engine/battle/effects.asm b/engine/battle/effects.asm index 413c34d9..e107853c 100644 --- a/engine/battle/effects.asm +++ b/engine/battle/effects.asm @@ -686,7 +686,7 @@ UpdateLoweredStatDone: .ApplyBadgeBoostsAndStatusPenalties ldh a, [hWhoseTurn] and a - call nz, ApplyBadgeStatBoosts ; whenever the player uses a stat-down move, badge boosts get reapplied again to every stat, + call nz, ApplyBadgeStatBoosts ; whenever the opponent uses a stat-down move, badge boosts get reapplied again to every stat, ; even to those not affected by the stat-down move (will be boosted further) ld hl, MonsStatsFellText call PrintText diff --git a/engine/events/diploma.asm b/engine/events/diploma.asm index b4ccbb07..3d181210 100644 --- a/engine/events/diploma.asm +++ b/engine/events/diploma.asm @@ -11,7 +11,7 @@ DisplayDiploma:: call DisableLCD ld hl, CircleTile ld de, vChars2 tile CIRCLE_TILE_ID - ld bc, $10 + ld bc, TILE_SIZE ld a, BANK(CircleTile) call FarCopyData2 hlcoord 0, 0 diff --git a/engine/gfx/load_pokedex_tiles.asm b/engine/gfx/load_pokedex_tiles.asm index a3f69171..b0857137 100644 --- a/engine/gfx/load_pokedex_tiles.asm +++ b/engine/gfx/load_pokedex_tiles.asm @@ -3,7 +3,7 @@ LoadPokedexTilePatterns: call LoadHpBarAndStatusTilePatterns ld de, PokedexTileGraphics ld hl, vChars2 tile $60 - lb bc, BANK(PokedexTileGraphics), (PokedexTileGraphicsEnd - PokedexTileGraphics) / $10 + lb bc, BANK(PokedexTileGraphics), (PokedexTileGraphicsEnd - PokedexTileGraphics) / TILE_SIZE call CopyVideoData ld de, PokeballTileGraphics ld hl, vChars2 tile $72 diff --git a/engine/gfx/mon_icons.asm b/engine/gfx/mon_icons.asm index 49e789a5..63da2345 100644 --- a/engine/gfx/mon_icons.asm +++ b/engine/gfx/mon_icons.asm @@ -44,7 +44,7 @@ GetAnimationSpeed: push bc ld hl, wMonPartySpritesSavedOAM ld de, wShadowOAM - ld bc, $60 + ld bc, OBJ_SIZE * 4 * PARTY_LENGTH call CopyData pop bc xor a @@ -52,7 +52,7 @@ GetAnimationSpeed: .animateSprite push bc ld hl, wShadowOAMSprite00TileID - ld bc, $10 + ld bc, OBJ_SIZE * 4 ld a, [wCurrentMenuItem] call AddNTimes ld c, ICONOFFSET @@ -68,8 +68,8 @@ GetAnimationSpeed: ld c, $1 ; amount to increase the y coord by ; otherwise, load a second sprite frame .editTileIDS - ld b, $4 - ld de, $4 + ld b, 4 + ld de, OBJ_SIZE .loop ld a, [hl] add c @@ -254,7 +254,7 @@ WriteMonPartySpriteOAM: .makeCopy ld hl, wShadowOAM ld de, wMonPartySpritesSavedOAM - ld bc, $60 + ld bc, OBJ_SIZE * 4 * PARTY_LENGTH jp CopyData GetPartyMonSpriteID: diff --git a/engine/gfx/palettes.asm b/engine/gfx/palettes.asm index 0497f74a..f4ae5c39 100644 --- a/engine/gfx/palettes.asm +++ b/engine/gfx/palettes.asm @@ -611,7 +611,7 @@ CopySGBBorderTiles: ld b, 128 .tileLoop ; Copy bit planes 1 and 2 of the tile data. - ld c, 16 + ld c, TILE_SIZE .copyLoop ld a, [hli] ld [de], a diff --git a/engine/gfx/sprite_oam.asm b/engine/gfx/sprite_oam.asm index 737443a6..649ab01e 100644 --- a/engine/gfx/sprite_oam.asm +++ b/engine/gfx/sprite_oam.asm @@ -148,16 +148,16 @@ PrepareOAMData:: ldh a, [hOAMBufferOffset] ld l, a ld h, HIGH(wShadowOAM) - ld de, $4 - ld b, $a0 + ld de, OBJ_SIZE + ld b, SCREEN_HEIGHT_PX + OAM_Y_OFS ld a, [wMovementFlags] bit BIT_LEDGE_OR_FISHING, a - ld a, $a0 + ld a, LOW(wShadowOAMEnd) jr z, .clear ; Don't clear the last 4 entries because they are used for the shadow in the ; jumping down ledge animation and the rod in the fishing animation. - ld a, $90 + ld a, LOW(wShadowOAMSprite36) .clear cp l diff --git a/engine/items/town_map.asm b/engine/items/town_map.asm index 6758adea..573ba581 100644 --- a/engine/items/town_map.asm +++ b/engine/items/town_map.asm @@ -24,7 +24,7 @@ DisplayTownMap: call CopyData ld hl, vSprites tile BIRD_BASE_TILE ld de, TownMapCursor - lb bc, BANK(TownMapCursor), (TownMapCursorEnd - TownMapCursor) / $8 + lb bc, BANK(TownMapCursor), (TownMapCursorEnd - TownMapCursor) / TILE_1BPP_SIZE call CopyVideoDataDouble xor a ld [wWhichTownMapLocation], a @@ -149,7 +149,7 @@ LoadTownMap_Fly:: call CopyVideoData ld de, TownMapUpArrow ld hl, vChars1 tile $6d - lb bc, BANK(TownMapUpArrow), (TownMapUpArrowEnd - TownMapUpArrow) / $8 + lb bc, BANK(TownMapUpArrow), (TownMapUpArrowEnd - TownMapUpArrow) / TILE_1BPP_SIZE call CopyVideoDataDouble call BuildFlyLocationsList ld hl, wUpdateSpritesEnabled @@ -609,11 +609,11 @@ TownMapSpriteBlinkingAnimation:: xor a jr .done .hideSprites - ld hl, wShadowOAM + ld hl, wShadowOAMSprite00YCoord ld b, OAM_COUNT - 4 - ld de, $4 + ld de, OBJ_SIZE .hideSpritesLoop - ld [hl], $a0 + ld [hl], SCREEN_HEIGHT_PX + OAM_Y_OFS add hl, de dec b jr nz, .hideSpritesLoop diff --git a/engine/link/cable_club.asm b/engine/link/cable_club.asm index c94b2693..ea39b938 100644 --- a/engine/link/cable_club.asm +++ b/engine/link/cable_club.asm @@ -977,5 +977,5 @@ CableClub_DrawHorizontalLine: LoadTrainerInfoTextBoxTiles: ld de, TrainerInfoTextBoxTileGraphics ld hl, vChars2 tile $76 - lb bc, BANK(TrainerInfoTextBoxTileGraphics), (TrainerInfoTextBoxTileGraphicsEnd - TrainerInfoTextBoxTileGraphics) / $10 + lb bc, BANK(TrainerInfoTextBoxTileGraphics), (TrainerInfoTextBoxTileGraphicsEnd - TrainerInfoTextBoxTileGraphics) / TILE_SIZE jp CopyVideoData diff --git a/engine/menus/display_text_id_init.asm b/engine/menus/display_text_id_init.asm index f8bd6512..7ffdf7c3 100644 --- a/engine/menus/display_text_id_init.asm +++ b/engine/menus/display_text_id_init.asm @@ -43,8 +43,8 @@ DisplayTextIDInit:: ; this is done because when you talk to an NPC, they turn to look your way ; the original direction they were facing must be restored after the dialogue is over ld hl, wSprite01StateData1FacingDirection - ld c, $0f - ld de, $10 + ld c, NUM_SPRITESTATEDATA_STRUCTS - 1 + ld de, SPRITESTATEDATA1_LENGTH .spriteFacingDirectionCopyLoop ld a, [hl] ; x#SPRITESTATEDATA1_FACINGDIRECTION inc h @@ -56,7 +56,8 @@ DisplayTextIDInit:: ; loop to force all the sprites in the middle of animation to stand still ; (so that they don't like they're frozen mid-step during the dialogue) ld hl, wSpritePlayerStateData1ImageIndex - ld de, $10 + ld de, SPRITESTATEDATA1_LENGTH + ASSERT NUM_SPRITESTATEDATA_STRUCTS == SPRITESTATEDATA1_LENGTH ld c, e .spriteStandStillLoop ld a, [hl] diff --git a/engine/menus/naming_screen.asm b/engine/menus/naming_screen.asm index fda482e3..9c0cd0a8 100644 --- a/engine/menus/naming_screen.asm +++ b/engine/menus/naming_screen.asm @@ -327,7 +327,7 @@ LoadEDTile: ld de, ED_Tile ld hl, vFont tile $70 ; BUG: BANK("Home") should be BANK(ED_Tile), although it coincidentally works as-is - lb bc, BANK("Home"), (ED_TileEnd - ED_Tile) / $8 + lb bc, BANK("Home"), (ED_TileEnd - ED_Tile) / TILE_1BPP_SIZE jp CopyVideoDataDouble ED_Tile: diff --git a/engine/menus/save.asm b/engine/menus/save.asm index 9dfdd949..3fab0d01 100644 --- a/engine/menus/save.asm +++ b/engine/menus/save.asm @@ -225,15 +225,15 @@ SaveMainData: ld de, sSpriteData ld bc, wSpriteDataEnd - wSpriteDataStart call CopyData - ld hl, wBoxDataStart ; this part is redundant, SaveCurrentBoxData is always called next + ld hl, wBoxDataStart ld de, sCurBoxData ld bc, wBoxDataEnd - wBoxDataStart call CopyData + ldh a, [hTileAnimations] ld [sTileAnimations], a - ld hl, sGameData ld bc, sGameDataEnd - sGameData call CalcCheckSum diff --git a/engine/menus/start_sub_menus.asm b/engine/menus/start_sub_menus.asm index 8ba05b3f..c27e58a9 100644 --- a/engine/menus/start_sub_menus.asm +++ b/engine/menus/start_sub_menus.asm @@ -511,7 +511,7 @@ DrawTrainerInfo: ld de, 13 tiles add hl, de ; hl = colon tile pattern ld de, vChars1 tile $56 - ld bc, 1 tiles + ld bc, TILE_SIZE ld a, BANK(TextBoxGraphics) push bc call FarCopyData2 @@ -677,13 +677,13 @@ SwitchPartyMon_ClearGfx: dec c jr nz, .clearMonBGLoop pop af - ld hl, wShadowOAM - ld bc, $10 + ld hl, wShadowOAMSprite00YCoord + ld bc, OBJ_SIZE * 4 call AddNTimes - ld de, $4 + ld de, OBJ_SIZE ld c, e .clearMonOAMLoop - ld [hl], $a0 + ld [hl], SCREEN_HEIGHT_PX + OAM_Y_OFS add hl, de dec c jr nz, .clearMonOAMLoop diff --git a/engine/movie/credits.asm b/engine/movie/credits.asm index 1a68a7b5..b1ca7c91 100644 --- a/engine/movie/credits.asm +++ b/engine/movie/credits.asm @@ -11,7 +11,7 @@ HallOfFamePC: ld bc, ($20 tiles) / 2 call ZeroMemory ld hl, vChars2 tile $7e - ld bc, 1 tiles + ld bc, TILE_SIZE ld a, $ff ; solid black call FillMemory hlcoord 0, 0 @@ -246,7 +246,7 @@ Credits: pop de ld de, TheEndGfx ld hl, vChars2 tile $60 - lb bc, BANK(TheEndGfx), (TheEndGfxEnd - TheEndGfx) / $10 + lb bc, BANK(TheEndGfx), (TheEndGfxEnd - TheEndGfx) / TILE_SIZE call CopyVideoData hlcoord 4, 8 ld de, TheEndTextString diff --git a/engine/movie/intro.asm b/engine/movie/intro.asm index 00316018..2fa442f9 100644 --- a/engine/movie/intro.asm +++ b/engine/movie/intro.asm @@ -439,12 +439,12 @@ IntroNidorinoAnimation7: GameFreakIntro: INCBIN "gfx/splash/gamefreak_presents.2bpp" INCBIN "gfx/splash/gamefreak_logo.2bpp" - ds 16, $00 ; blank tile + ds TILE_SIZE, $00 ; blank tile GameFreakIntroEnd: FightIntroBackMon: INCBIN "gfx/intro/gengar.2bpp" - ds 16, $00 ; blank tile + ds TILE_SIZE, $00 ; blank tile FightIntroBackMonEnd: IF DEF(_RED) diff --git a/engine/movie/oak_speech/oak_speech.asm b/engine/movie/oak_speech/oak_speech.asm index 02826b98..a5f13def 100644 --- a/engine/movie/oak_speech/oak_speech.asm +++ b/engine/movie/oak_speech/oak_speech.asm @@ -117,6 +117,9 @@ OakSpeech: ld a, SFX_SHRINK call PlaySound pop af +; bug: switching ROM Bank should not happen outside of Home Bank +; This code does nothing, as PlaySound does all necessary Bank switch +; It looks like a leftover from an early development stage ldh [hLoadedROMBank], a ld [rROMB], a ld c, 4 @@ -145,6 +148,7 @@ OakSpeech: ld [wNewSoundID], a call PlaySound pop af +; bug: switching ROM Bank should not happen outside of Home Bank ldh [hLoadedROMBank], a ld [rROMB], a ld c, 20 @@ -160,21 +164,26 @@ OakSpeech: call DelayFrames call GBFadeOutToWhite jp ClearScreen + OakSpeechText1: text_far _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 + IntroducePlayerText: text_far _IntroducePlayerText text_end + IntroduceRivalText: text_far _IntroduceRivalText text_end + OakSpeechText3: text_far _OakSpeechText3 text_end @@ -226,7 +235,7 @@ IntroDisplayPicCenteredOrUpperRight: call UncompressSpriteFromDE ld hl, sSpriteBuffer1 ld de, sSpriteBuffer0 - ld bc, $310 + ld bc, 2 * SPRITEBUFFERSIZE call CopyData ld de, vFrontPic call InterlaceMergeSpriteBuffers diff --git a/engine/movie/splash.asm b/engine/movie/splash.asm index da3fec0d..7f06c68b 100644 --- a/engine/movie/splash.asm +++ b/engine/movie/splash.asm @@ -13,7 +13,7 @@ LoadShootingStarGraphics: call CopyVideoData ld de, FallingStar ld hl, vChars1 tile $22 - lb bc, BANK(FallingStar), (FallingStarEnd - FallingStar) / $10 + lb bc, BANK(FallingStar), (FallingStarEnd - FallingStar) / TILE_SIZE call CopyVideoData ld hl, GameFreakLogoOAMData ld de, wShadowOAMSprite24 @@ -60,11 +60,11 @@ AnimateShootingStar: jr nz, .bigStarLoop ; Clear big star OAM. - ld hl, wShadowOAM + ld hl, wShadowOAMSprite00YCoord ld c, 4 - ld de, 4 + ld de, OBJ_SIZE .clearOAMLoop - ld [hl], 160 + ld [hl], SCREEN_HEIGHT_PX + OAM_Y_OFS add hl, de dec c jr nz, .clearOAMLoop diff --git a/engine/movie/title.asm b/engine/movie/title.asm index 698dd5e0..c9ea4b47 100644 --- a/engine/movie/title.asm +++ b/engine/movie/title.asm @@ -104,7 +104,7 @@ DisplayTitleScreen: ; place tiles for title screen copyright hlcoord 2, 17 ld de, .tileScreenCopyrightTiles - ld b, $10 + ld b, .tileScreenCopyrightTilesEnd - .tileScreenCopyrightTiles .tileScreenCopyrightTilesLoop ld a, [de] ld [hli], a @@ -116,6 +116,7 @@ DisplayTitleScreen: .tileScreenCopyrightTiles db $41,$42,$43,$42,$44,$42,$45,$46,$47,$48,$49,$4A,$4B,$4C,$4D,$4E ; ©'95.'96.'98 GAME FREAK inc. +.tileScreenCopyrightTilesEnd .next call SaveScreenTilesToBuffer2 @@ -380,7 +381,7 @@ LoadCopyrightAndTextBoxTiles: LoadCopyrightTiles: ld de, NintendoCopyrightLogoGraphics ld hl, vChars2 tile $60 - lb bc, BANK(NintendoCopyrightLogoGraphics), (GameFreakLogoGraphicsEnd - NintendoCopyrightLogoGraphics) / $10 + lb bc, BANK(NintendoCopyrightLogoGraphics), (GameFreakLogoGraphicsEnd - NintendoCopyrightLogoGraphics) / TILE_SIZE call CopyVideoData hlcoord 2, 7 ld de, CopyrightTextString diff --git a/engine/movie/trade.asm b/engine/movie/trade.asm index bf77f21e..292f47cd 100644 --- a/engine/movie/trade.asm +++ b/engine/movie/trade.asm @@ -316,7 +316,7 @@ Trade_AnimateBallEnteringLinkCable: ld [wLinkCableAnimBulgeToggle], a add $7e ld hl, wShadowOAMSprite00TileID - ld de, 4 + ld de, OBJ_SIZE ld c, e .cycleLinkCableBulgeTile ld [hl], a @@ -602,7 +602,7 @@ Trade_AnimCircledMon: xor $3c ; make link cable flash ldh [rBGP], a ld hl, wShadowOAMSprite00TileID - ld de, $4 + ld de, OBJ_SIZE ld c, $14 .loop ld a, [hl] diff --git a/engine/overworld/cut.asm b/engine/overworld/cut.asm index 93902b51..368941d5 100644 --- a/engine/overworld/cut.asm +++ b/engine/overworld/cut.asm @@ -100,13 +100,13 @@ InitCutAnimOAM: call LoadCutGrassAnimationTilePattern call WriteCutOrBoulderDustAnimationOAMBlock ld hl, wShadowOAMSprite36Attributes - ld de, 4 - ld a, $30 + ld de, OBJ_SIZE + ld a, OAM_XFLIP | OAM_PAL1 ld c, e .loop ld [hl], a add hl, de - xor $60 + xor OAM_YFLIP | OAM_XFLIP dec c jr nz, .loop ret diff --git a/engine/overworld/dust_smoke.asm b/engine/overworld/dust_smoke.asm index 96dd364a..85b89cdc 100644 --- a/engine/overworld/dust_smoke.asm +++ b/engine/overworld/dust_smoke.asm @@ -70,7 +70,7 @@ LoadSmokeTileFourTimes:: push hl call LoadSmokeTile pop hl - ld bc, 1 tiles + ld bc, TILE_SIZE add hl, bc pop bc dec c @@ -79,7 +79,7 @@ LoadSmokeTileFourTimes:: LoadSmokeTile: ld de, SSAnneSmokePuffTile - lb bc, BANK(SSAnneSmokePuffTile), (SSAnneSmokePuffTileEnd - SSAnneSmokePuffTile) / $10 + lb bc, BANK(SSAnneSmokePuffTile), (SSAnneSmokePuffTileEnd - SSAnneSmokePuffTile) / TILE_SIZE jp CopyVideoData SSAnneSmokePuffTile: diff --git a/engine/overworld/ledges.asm b/engine/overworld/ledges.asm index db8b9e97..69403042 100644 --- a/engine/overworld/ledges.asm +++ b/engine/overworld/ledges.asm @@ -59,7 +59,7 @@ INCLUDE "data/tilesets/ledge_tiles.asm" LoadHoppingShadowOAM: ld hl, vChars1 tile $7f ld de, LedgeHoppingShadow - lb bc, BANK(LedgeHoppingShadow), (LedgeHoppingShadowEnd - LedgeHoppingShadow) / $8 + lb bc, BANK(LedgeHoppingShadow), (LedgeHoppingShadowEnd - LedgeHoppingShadow) / TILE_1BPP_SIZE call CopyVideoDataDouble ld a, $9 lb bc, $54, $48 ; b, c = y, x coordinates of shadow diff --git a/engine/overworld/player_animations.asm b/engine/overworld/player_animations.asm index c163b27e..4ed1f49f 100644 --- a/engine/overworld/player_animations.asm +++ b/engine/overworld/player_animations.asm @@ -209,13 +209,13 @@ LeaveMapThroughHoleAnim: ld [wShadowOAMSprite02TileID], a ld a, [wShadowOAMSprite01TileID] ld [wShadowOAMSprite03TileID], a - ld a, $a0 + ld a, SCREEN_HEIGHT_PX + OAM_Y_OFS ld [wShadowOAMSprite00YCoord], a ld [wShadowOAMSprite01YCoord], a ld c, 2 call DelayFrames ; hide upper half of player's sprite - ld a, $a0 + ld a, SCREEN_HEIGHT_PX + OAM_Y_OFS ld [wShadowOAMSprite02YCoord], a ld [wShadowOAMSprite03YCoord], a call GBFadeOutToWhite @@ -423,7 +423,7 @@ FishingAnim: ld a, [wSpritePlayerStateData1ImageIndex] ; (image index is locked to standing images) cp SPRITE_FACING_UP jr nz, .skipHidingFishingRod - ld a, $a0 + ld a, SCREEN_HEIGHT_PX + OAM_Y_OFS ld [wShadowOAMSprite39YCoord], a .skipHidingFishingRod -- cgit v1.3.1-sl0p From 308189b638d3dbed2283e041221b8db7d6063094 Mon Sep 17 00:00:00 2001 From: Rangi <35663410+Rangi42@users.noreply.github.com> Date: Sun, 23 Nov 2025 22:19:21 -0500 Subject: Use `ld_hli_a_string` macro to make byte-by-byte strings more obvious (#540) --- engine/battle/core.asm | 12 +----------- engine/battle/link_battle_versus_text.asm | 4 +--- engine/pokemon/status_ailments.asm | 30 +++++------------------------- home/pokemon.asm | 6 +----- macros/code.asm | 8 ++++++++ 5 files changed, 16 insertions(+), 44 deletions(-) (limited to 'engine') diff --git a/engine/battle/core.asm b/engine/battle/core.asm index 0916176c..672bd416 100644 --- a/engine/battle/core.asm +++ b/engine/battle/core.asm @@ -6841,17 +6841,7 @@ InitWildBattle: ld [hli], a ; write front sprite pointer ld [hl], b ld hl, wEnemyMonNick ; set name to "GHOST" - ld a, 'G' - ld [hli], a - ld a, 'H' - ld [hli], a - ld a, 'O' - ld [hli], a - ld a, 'S' - ld [hli], a - ld a, 'T' - ld [hli], a - ld [hl], '@' + ld_hli_a_string "GHOST@" ld a, [wCurPartySpecies] push af ld a, MON_GHOST diff --git a/engine/battle/link_battle_versus_text.asm b/engine/battle/link_battle_versus_text.asm index d37d40c7..89201f4a 100644 --- a/engine/battle/link_battle_versus_text.asm +++ b/engine/battle/link_battle_versus_text.asm @@ -13,9 +13,7 @@ DisplayLinkBattleVersusTextBox: call PlaceString ; place bold "VS" tiles between the names hlcoord 9, 8 - ld a, '' - ld [hli], a - ld [hl], '' + ld_hli_a_string "" xor a ld [wUpdateSpritesEnabled], a callfar SetupPlayerAndEnemyPokeballs diff --git a/engine/pokemon/status_ailments.asm b/engine/pokemon/status_ailments.asm index 2c5b3bcd..3cc2d490 100644 --- a/engine/pokemon/status_ailments.asm +++ b/engine/pokemon/status_ailments.asm @@ -10,37 +10,17 @@ PrintStatusAilment:: jr nz, .par and SLP_MASK ret z - ld a, 'S' - ld [hli], a - ld a, 'L' - ld [hli], a - ld [hl], 'P' + ld_hli_a_string "SLP" ret .psn - ld a, 'P' - ld [hli], a - ld a, 'S' - ld [hli], a - ld [hl], 'N' + ld_hli_a_string "PSN" ret .brn - ld a, 'B' - ld [hli], a - ld a, 'R' - ld [hli], a - ld [hl], 'N' + ld_hli_a_string "BRN" ret .frz - ld a, 'F' - ld [hli], a - ld a, 'R' - ld [hli], a - ld [hl], 'Z' + ld_hli_a_string "FRZ" ret .par - ld a, 'P' - ld [hli], a - ld a, 'A' - ld [hli], a - ld [hl], 'R' + ld_hli_a_string "PAR" ret diff --git a/home/pokemon.asm b/home/pokemon.asm index d720a642..df984d00 100644 --- a/home/pokemon.asm +++ b/home/pokemon.asm @@ -320,11 +320,7 @@ PrintStatusCondition:: pop de jr nz, PrintStatusConditionNotFainted ; if the pokemon's HP is 0, print "FNT" - ld a, 'F' - ld [hli], a - ld a, 'N' - ld [hli], a - ld [hl], 'T' + ld_hli_a_string "FNT" and a ret diff --git a/macros/code.asm b/macros/code.asm index c972f97e..70ff4249 100644 --- a/macros/code.asm +++ b/macros/code.asm @@ -10,6 +10,14 @@ ENDM ; Design patterns +MACRO ld_hli_a_string + FOR n, CHARLEN(\1) - 1 + ld a, CHARVAL(STRCHAR(\1, n)) + ld [hli], a + ENDR + ld [hl], CHARVAL(STRCHAR(\1, CHARLEN(\1) - 1)) +ENDM + MACRO dict IF \1 == 0 and a -- cgit v1.3.1-sl0p From e92d1af478c8381fde30f709c2619abe90104d3a Mon Sep 17 00:00:00 2001 From: Rangi <35663410+Rangi42@users.noreply.github.com> Date: Tue, 25 Nov 2025 17:53:29 -0500 Subject: Avoid magic numbers for most `CopyData` calls (#542) --- constants/gfx_constants.asm | 6 +++++- constants/text_constants.asm | 1 + engine/battle/animations.asm | 20 ++++++++++---------- engine/battle/core.asm | 21 +++++++++++---------- engine/battle/draw_hud_pokeball_gfx.asm | 8 ++++---- engine/battle/effects.asm | 2 +- engine/battle/ghost_marowak_anim.asm | 2 +- engine/battle/move_effects/transform.asm | 9 +++++---- engine/battle/trainer_ai.asm | 4 ++-- engine/events/in_game_trades.asm | 2 +- engine/items/item_effects.asm | 6 +++--- engine/items/town_map.asm | 4 ++-- engine/movie/evolution.asm | 2 +- engine/movie/hall_of_fame.asm | 2 +- engine/movie/splash.asm | 2 +- engine/overworld/cut2.asm | 6 +++--- engine/overworld/player_animations.asm | 6 +++--- engine/pokemon/add_mon.asm | 2 +- engine/slots/slot_machine.asm | 2 +- home/trainers.asm | 2 +- ram/vram.asm | 6 +++--- ram/wram.asm | 10 +++++++--- 22 files changed, 68 insertions(+), 57 deletions(-) (limited to 'engine') diff --git a/constants/gfx_constants.asm b/constants/gfx_constants.asm index 1a06238c..c3f29ca5 100644 --- a/constants/gfx_constants.asm +++ b/constants/gfx_constants.asm @@ -7,7 +7,11 @@ DEF SCREEN_BLOCK_HEIGHT EQU 5 ; blocks DEF SURROUNDING_WIDTH EQU SCREEN_BLOCK_WIDTH * BLOCK_WIDTH ; tiles DEF SURROUNDING_HEIGHT EQU SCREEN_BLOCK_HEIGHT * BLOCK_HEIGHT ; tiles -DEF SPRITEBUFFERSIZE EQU 7 * 7 * TILE_1BPP_SIZE +DEF PIC_WIDTH EQU 7 ; tiles +DEF PIC_HEIGHT EQU PIC_WIDTH ; tiles +DEF PIC_SIZE EQU PIC_WIDTH * PIC_HEIGHT ; tiles + +DEF SPRITEBUFFERSIZE EQU PIC_WIDTH * PIC_HEIGHT * TILE_1BPP_SIZE ; HP bar DEF HP_BAR_GREEN EQU 0 diff --git a/constants/text_constants.asm b/constants/text_constants.asm index 4dbdf666..ed195172 100644 --- a/constants/text_constants.asm +++ b/constants/text_constants.asm @@ -1,6 +1,7 @@ DEF NAME_LENGTH EQU 11 DEF ITEM_NAME_LENGTH EQU 13 DEF NAME_BUFFER_LENGTH EQU 20 +DEF GYM_CITY_LENGTH EQU 17 ; PrintNumber, PrintBCDNumber const_def 5 diff --git a/engine/battle/animations.asm b/engine/battle/animations.asm index 711ebda4..f66be640 100644 --- a/engine/battle/animations.asm +++ b/engine/battle/animations.asm @@ -1213,12 +1213,12 @@ _AnimationSlideMonUp: push bc ; In each iteration, slide up all rows but the top one (which is overwritten). - ld b, 6 + ld b, PIC_HEIGHT - 1 .slideLoop push bc push de push hl - ld bc, 7 + ld bc, PIC_WIDTH call CopyData ; Note that de and hl are popped in the same order they are pushed, swapping ; their values. When CopyData is called, hl points to a tile 1 row below @@ -1242,10 +1242,10 @@ _AnimationSlideMonUp: ld a, [wSlideMonUpBottomRowLeftTile] inc a ld [wSlideMonUpBottomRowLeftTile], a - ld c, 7 + ld c, PIC_WIDTH .fillBottomRowLoop ld [hli], a - add 7 + add PIC_WIDTH dec c jr nz, .fillBottomRowLoop @@ -1723,10 +1723,10 @@ AnimationMinimizeMon: ld hl, wTempPic push hl xor a - ld bc, (7 * 7) tiles + ld bc, PIC_SIZE tiles call FillMemory pop hl - ld de, (7 * 3 + 4) tiles + TILE_SIZE / 4 + ld de, (PIC_WIDTH * 3 + 4) tiles + TILE_SIZE / 4 add hl, de ld de, MinimizedMonSprite ld c, MinimizedMonSpriteEnd - MinimizedMonSprite @@ -1774,7 +1774,7 @@ AnimationSlideMonDownAndHide: jr nz, .loop call AnimationHideMonPic ld hl, wTempPic - ld bc, 7 * 7 tiles + ld bc, PIC_SIZE tiles xor a call FillMemory jp CopyTempPicToMonPic @@ -1867,7 +1867,7 @@ CopyTempPicToMonPic: ld hl, vFrontPic ; enemy turn .next ld de, wTempPic - ld bc, 7 * 7 + ld bc, PIC_SIZE jp CopyVideoData AnimationWavyScreen: @@ -1935,7 +1935,7 @@ AnimationSubstitute: ; Changes the pokemon's sprite to the mini sprite ld hl, wTempPic xor a - ld bc, 7 * 7 tiles + ld bc, PIC_SIZE tiles call FillMemory ldh a, [hWhoseTurn] and a @@ -2473,7 +2473,7 @@ AnimationShakeEnemyHUD: ; Make a copy of the back pic's tile patterns in sprite tile pattern VRAM. ld de, vBackPic ld hl, vSprites - ld bc, 7 * 7 + ld bc, PIC_SIZE call CopyVideoData xor a diff --git a/engine/battle/core.asm b/engine/battle/core.asm index 672bd416..4c25373a 100644 --- a/engine/battle/core.asm +++ b/engine/battle/core.asm @@ -1183,17 +1183,17 @@ SlideDownFaintedMonPic: push af set BIT_NO_TEXT_DELAY, a ld [wStatusFlags5], a - ld b, 7 ; number of times to slide + ld b, PIC_HEIGHT ; number of times to slide .slideStepLoop ; each iteration, the mon is slid down one row push bc push de push hl - ld b, 6 ; number of rows + ld b, PIC_HEIGHT - 1 ; number of rows .rowLoop push bc push hl push de - ld bc, $7 + ld bc, PIC_WIDTH call CopyData pop de pop hl @@ -1225,7 +1225,8 @@ SlideDownFaintedMonPic: ret SevenSpacesText: - db " @" + ds PIC_WIDTH, ' ' + db "@" ; slides the player or enemy trainer off screen ; a is the number of tiles to slide it horizontally (always 9 for the player trainer or 8 for the enemy trainer) @@ -1237,7 +1238,7 @@ SlideTrainerPicOffScreen: .slideStepLoop ; each iteration, the trainer pic is slid one tile left/right push bc push hl - ld b, 7 ; number of rows + ld b, PIC_HEIGHT ; number of rows .rowLoop push hl ldh a, [hSlideAmount] @@ -1794,7 +1795,7 @@ AnimateRetreatingPlayerMon: lb bc, 7, 7 jp ClearScreenArea -; Copies player's current pokemon's current HP and status into the party +; Copies player's current pokemon's current HP, party pos, and status into the party ; struct data so it stays after battle or switching ReadPlayerMonCurHPAndStatus: ld a, [wPlayerMonNumber] @@ -1804,7 +1805,7 @@ ReadPlayerMonCurHPAndStatus: ld d, h ld e, l ld hl, wBattleMonHP - ld bc, $4 ; 2 bytes HP, 1 byte unknown (unused?), 1 byte status + ld bc, MON_STATUS + 1 - MON_HP ; also copies party pos in-between HP and status jp CopyData DrawHUDsAndHPBars: @@ -6352,7 +6353,7 @@ LoadPlayerBackPic: ld [hl], d ; OAM Y inc hl ld [hl], e ; OAM X - ld a, $8 ; height of tile + ld a, TILE_HEIGHT add d ; increase Y by height of tile ld d, a inc hl @@ -6366,7 +6367,7 @@ LoadPlayerBackPic: ldh a, [hOAMTile] add $4 ; increase tile number by 4 ldh [hOAMTile], a - ld a, $8 ; width of tile + ld a, TILE_WIDTH add e ; increase X by width of tile ld e, a dec b @@ -6381,7 +6382,7 @@ LoadPlayerBackPic: ld de, sSpriteBuffer1 ldh a, [hLoadedROMBank] ld b, a - ld c, 7 * 7 + ld c, PIC_SIZE call CopyVideoData xor a ld [rRAMG], a diff --git a/engine/battle/draw_hud_pokeball_gfx.asm b/engine/battle/draw_hud_pokeball_gfx.asm index 983e7cdf..011b4b33 100644 --- a/engine/battle/draw_hud_pokeball_gfx.asm +++ b/engine/battle/draw_hud_pokeball_gfx.asm @@ -119,7 +119,7 @@ WritePokeballOAMData: PlacePlayerHUDTiles: ld hl, PlayerBattleHUDGraphicsTiles ld de, wHUDGraphicsTiles - ld bc, $3 + ld bc, wHUDGraphicsTilesEnd - wHUDGraphicsTiles call CopyData hlcoord 18, 10 ld de, -1 @@ -134,7 +134,7 @@ PlayerBattleHUDGraphicsTiles: PlaceEnemyHUDTiles: ld hl, EnemyBattleHUDGraphicsTiles ld de, wHUDGraphicsTiles - ld bc, $3 + ld bc, wHUDGraphicsTilesEnd - wHUDGraphicsTiles call CopyData hlcoord 1, 2 ld de, $1 @@ -150,7 +150,7 @@ PlaceHUDTiles: ld [hl], $73 ld bc, SCREEN_WIDTH add hl, bc - ld a, [wHUDGraphicsTiles + 1] ; leftmost tile + ld a, [wHUDCornerTile] ; leftmost tile ld [hl], a ld a, 8 .loop @@ -159,7 +159,7 @@ PlaceHUDTiles: dec a jr nz, .loop add hl, de - ld a, [wHUDGraphicsTiles + 2] ; rightmost tile + ld a, [wHUDTriangleTile] ; rightmost tile ld [hl], a ret diff --git a/engine/battle/effects.asm b/engine/battle/effects.asm index e107853c..003592aa 100644 --- a/engine/battle/effects.asm +++ b/engine/battle/effects.asm @@ -754,7 +754,7 @@ PrintStatText: jr .findStatName_inner .foundStatName ld de, wStringBuffer - ld bc, $a + ld bc, NAME_LENGTH - 1 ; all StatModTextStrings are at most 10 bytes jp CopyData INCLUDE "data/battle/stat_mod_names.asm" diff --git a/engine/battle/ghost_marowak_anim.asm b/engine/battle/ghost_marowak_anim.asm index 4b1eb452..1040f85f 100644 --- a/engine/battle/ghost_marowak_anim.asm +++ b/engine/battle/ghost_marowak_anim.asm @@ -52,7 +52,7 @@ MarowakAnim: CopyMonPicFromBGToSpriteVRAM: ld de, vFrontPic ld hl, vSprites - ld bc, 7 * 7 + ld bc, PIC_SIZE call CopyVideoData ld a, $10 ld [wBaseCoordY], a diff --git a/engine/battle/move_effects/transform.asm b/engine/battle/move_effects/transform.asm index 6f2e705c..343fa3ca 100644 --- a/engine/battle/move_effects/transform.asm +++ b/engine/battle/move_effects/transform.asm @@ -82,14 +82,15 @@ TransformEffect_: ld a, [hli] ld [de], a inc de -; Attack, Defense, Speed, and Special stats +; Skip level and max HP inc hl inc hl inc hl inc de inc de inc de - ld bc, $8 +; Attack, Defense, Speed, and Special stats + ld bc, (NUM_STATS - 1) * 2 call CopyData ld bc, wBattleMonMoves - wBattleMonPP add hl, bc ; ld hl, wBattleMonMoves @@ -99,7 +100,7 @@ TransformEffect_: ld a, [hli] and a jr z, .lessThanFourMoves - ld a, $5 + ld a, 5 ld [de], a inc de dec b @@ -136,7 +137,7 @@ TransformEffect_: ld l, e pop de .gotStatsOrModsToCopy - ld bc, $8 + ld bc, (NUM_STATS - 1) * 2 jp CopyData .failed diff --git a/engine/battle/trainer_ai.asm b/engine/battle/trainer_ai.asm index 4134047f..546dd60e 100644 --- a/engine/battle/trainer_ai.asm +++ b/engine/battle/trainer_ai.asm @@ -583,7 +583,7 @@ AISwitchIfEnoughMons: SwitchEnemyMon: -; prepare to withdraw the active monster: copy hp, number, and status to roster +; prepare to withdraw the active monster: copy HP, party pos, and status to roster ld a, [wEnemyMonPartyPos] ld hl, wEnemyMon1HP @@ -592,7 +592,7 @@ SwitchEnemyMon: ld d, h ld e, l ld hl, wEnemyMonHP - ld bc, 4 + ld bc, MON_STATUS + 1 - MON_HP ; also copies party pos in-between HP and status call CopyData ld hl, AIBattleWithdrawText diff --git a/engine/events/in_game_trades.asm b/engine/events/in_game_trades.asm index 4c6041b0..5cc251f4 100644 --- a/engine/events/in_game_trades.asm +++ b/engine/events/in_game_trades.asm @@ -226,7 +226,7 @@ InGameTrade_CopyDataToReceivedMon: ld bc, wPartyMon2 - wPartyMon1 call InGameTrade_GetReceivedMonPointer ld hl, wTradedEnemyMonOTID - ld bc, $2 + ld bc, 2 jp CopyData ; the received mon's index is (partyCount - 1), diff --git a/engine/items/item_effects.asm b/engine/items/item_effects.asm index 1b68e47a..7fffae59 100644 --- a/engine/items/item_effects.asm +++ b/engine/items/item_effects.asm @@ -1302,13 +1302,13 @@ ItemUseMedicine: .statNameInnerLoop ld a, [hli] ld b, a - ld a, $50 + ld a, '@' cp b jr nz, .statNameInnerLoop jr .statNameLoop .gotStatName ld de, wStringBuffer - ld bc, 10 + ld bc, NAME_LENGTH - 1 ; all VitaminStats are at most 10 bytes call CopyData ; copy the stat's name to wStringBuffer ld a, SFX_HEAL_AILMENT call PlaySound @@ -2029,7 +2029,7 @@ ItemUsePPRestore: ld bc, wPartyMon2 - wPartyMon1 call AddNTimes ld de, wBattleMonPP - ld bc, 4 + ld bc, NUM_MOVES call CopyData ; copy party data to in-battle data .skipUpdatingInBattleData ld a, SFX_HEAL_AILMENT diff --git a/engine/items/town_map.asm b/engine/items/town_map.asm index 573ba581..35acaa29 100644 --- a/engine/items/town_map.asm +++ b/engine/items/town_map.asm @@ -20,7 +20,7 @@ DisplayTownMap: call PlaceString ld hl, wShadowOAMSprite00 ld de, wShadowOAMBackupSprite00 - ld bc, 4 * 4 + ld bc, OBJ_SIZE * 4 call CopyData ld hl, vSprites tile BIRD_BASE_TILE ld de, TownMapCursor @@ -64,7 +64,7 @@ DisplayTownMap: call PlaceString ld hl, wShadowOAMSprite04 ld de, wShadowOAMBackupSprite04 - ld bc, 4 * 4 + ld bc, OBJ_SIZE * 4 call CopyData .inputLoop call TownMapSpriteBlinkingAnimation diff --git a/engine/movie/evolution.asm b/engine/movie/evolution.asm index 4258b94d..b6e541c5 100644 --- a/engine/movie/evolution.asm +++ b/engine/movie/evolution.asm @@ -30,7 +30,7 @@ EvolveMon: call Evolution_LoadPic ld de, vFrontPic ld hl, vBackPic - ld bc, 7 * 7 + ld bc, PIC_SIZE call CopyVideoData ld a, [wEvoOldSpecies] ld [wCurPartySpecies], a diff --git a/engine/movie/hall_of_fame.asm b/engine/movie/hall_of_fame.asm index b2c0de42..88e777af 100644 --- a/engine/movie/hall_of_fame.asm +++ b/engine/movie/hall_of_fame.asm @@ -188,7 +188,7 @@ HoFLoadPlayerPics: call UncompressSpriteFromDE ld hl, sSpriteBuffer1 ld de, sSpriteBuffer0 - ld bc, $310 + ld bc, 2 * SPRITEBUFFERSIZE call CopyData ld de, vFrontPic call InterlaceMergeSpriteBuffers diff --git a/engine/movie/splash.asm b/engine/movie/splash.asm index 7f06c68b..cc5526ae 100644 --- a/engine/movie/splash.asm +++ b/engine/movie/splash.asm @@ -133,7 +133,7 @@ AnimateShootingStar: ; shift the existing OAM entries down to make room for the next wave ld hl, wShadowOAMSprite04 ld de, wShadowOAM - ld bc, $50 + ld bc, OBJ_SIZE * 20 call CopyData pop af diff --git a/engine/overworld/cut2.asm b/engine/overworld/cut2.asm index 69c8cb13..7697d430 100644 --- a/engine/overworld/cut2.asm +++ b/engine/overworld/cut2.asm @@ -77,13 +77,13 @@ AnimCutGrass_UpdateOAMEntries: AnimCutGrass_SwapOAMEntries: ld hl, wShadowOAMSprite36 ld de, wBuffer - ld bc, $8 + ld bc, 2 * OBJ_SIZE call CopyData ld hl, wShadowOAMSprite38 ld de, wShadowOAMSprite36 - ld bc, $8 + ld bc, 2 * OBJ_SIZE call CopyData ld hl, wBuffer ld de, wShadowOAMSprite38 - ld bc, $8 + ld bc, 2 * OBJ_SIZE jp CopyData diff --git a/engine/overworld/player_animations.asm b/engine/overworld/player_animations.asm index 4ed1f49f..657c001e 100644 --- a/engine/overworld/player_animations.asm +++ b/engine/overworld/player_animations.asm @@ -264,7 +264,7 @@ InitFacingDirectionList: ld [wSavedPlayerScreenY], a ld hl, PlayerSpinningFacingOrder ld de, wFacingDirectionList - ld bc, 4 + ld bc, OBJ_SIZE call CopyData ld a, [wSpritePlayerStateData1ImageIndex] ; (image index is locked to standing images) ld hl, wFacingDirectionList @@ -288,7 +288,7 @@ SpinPlayerSprite: push hl ld hl, wFacingDirectionList ld de, wFacingDirectionList - 1 - ld bc, 4 + ld bc, OBJ_SIZE call CopyData ld a, [wFacingDirectionList - 1] ld [wFacingDirectionList + 3], a @@ -393,7 +393,7 @@ FishingAnim: ld hl, FishingRodOAM add hl, bc ld de, wShadowOAMSprite39 - ld bc, $4 + ld bc, OBJ_SIZE call CopyData ld c, 100 call DelayFrames diff --git a/engine/pokemon/add_mon.asm b/engine/pokemon/add_mon.asm index 7eaca222..a7c201ea 100644 --- a/engine/pokemon/add_mon.asm +++ b/engine/pokemon/add_mon.asm @@ -231,7 +231,7 @@ _AddPartyMon:: dec a jr nz, .calcFreshStats ld hl, wEnemyMonMaxHP - ld bc, $a + ld bc, NUM_STATS * 2 call CopyData ; copy stats of cur enemy mon pop hl jr .done diff --git a/engine/slots/slot_machine.asm b/engine/slots/slot_machine.asm index 147519c7..2e02caf3 100644 --- a/engine/slots/slot_machine.asm +++ b/engine/slots/slot_machine.asm @@ -447,7 +447,7 @@ SlotMachine_CheckForMatches: ld h, [hl] ld l, a ld de, wStringBuffer - ld bc, 4 + ld bc, 4 ; every SlotReward*Text is at most 4 bytes call CopyData pop hl ld de, .flashScreenLoop diff --git a/home/trainers.asm b/home/trainers.asm index ab8d5fff..f00c4df9 100644 --- a/home/trainers.asm +++ b/home/trainers.asm @@ -31,7 +31,7 @@ ExecuteCurMapScriptInTable:: LoadGymLeaderAndCityName:: push de ld de, wGymCityName - ld bc, $11 + ld bc, GYM_CITY_LENGTH call CopyData ; load city name pop hl ld de, wGymLeaderName diff --git a/ram/vram.asm b/ram/vram.asm index fafb5d8e..0819fe0a 100644 --- a/ram/vram.asm +++ b/ram/vram.asm @@ -12,8 +12,8 @@ NEXTU ; battle/menu vSprites:: ds $80 tiles vFont:: ds $80 tiles -vFrontPic:: ds 7 * 7 tiles -vBackPic:: ds 7 * 7 tiles +vFrontPic:: ds PIC_SIZE tiles +vBackPic:: ds PIC_SIZE tiles NEXTU ; overworld @@ -25,7 +25,7 @@ NEXTU ; title ds $80 tiles vTitleLogo:: ds $80 tiles - ds 7 * 7 tiles + ds PIC_SIZE tiles vTitleLogo2:: ds 30 tiles ENDU diff --git a/ram/wram.asm b/ram/wram.asm index ff7d10ae..0b00d272 100644 --- a/ram/wram.asm +++ b/ram/wram.asm @@ -191,7 +191,7 @@ wOverworldMap:: ds 1300 wOverworldMapEnd:: NEXTU -wTempPic:: ds 7 * 7 tiles +wTempPic:: ds PIC_SIZE tiles ENDU @@ -688,7 +688,11 @@ NEXTU ds 1 ; difference in X between the next ball and the current one wHUDPokeballGfxOffsetX:: db -wHUDGraphicsTiles:: ds 3 +wHUDGraphicsTiles:: +wHUDUnusedTopTile:: db +wHUDCornerTile:: db +wHUDTriangleTile:: db +wHUDGraphicsTilesEnd:: NEXTU ; the level of the mon at the time it entered day care @@ -1079,7 +1083,7 @@ wExpAmountGained:: dw wGainBoostedExp:: db ENDU -wGymCityName:: ds 17 +wGymCityName:: ds GYM_CITY_LENGTH wGymLeaderName:: ds NAME_LENGTH -- cgit v1.3.1-sl0p From 3a4382c6055e21da72357dd18638947a2acbbda9 Mon Sep 17 00:00:00 2001 From: Narishma-gb <194818981+Narishma-gb@users.noreply.github.com> Date: Thu, 27 Nov 2025 19:39:25 +0100 Subject: Use more Pokemon data constants, create MOVE_NAME_LENGTH (#543) --- constants/pokemon_data_constants.asm | 4 +- constants/text_constants.asm | 2 + engine/battle/battle_transitions.asm | 4 +- engine/battle/core.asm | 52 +++++++------- engine/battle/decrement_pp.asm | 2 +- engine/battle/draw_hud_pokeball_gfx.asm | 2 +- engine/battle/effects.asm | 4 +- engine/battle/end_of_battle.asm | 6 +- engine/battle/experience.asm | 26 +++---- engine/battle/read_trainer_party.asm | 2 +- engine/battle/trainer_ai.asm | 6 +- engine/events/heal_party.asm | 10 +-- engine/events/in_game_trades.asm | 6 +- engine/events/poison.asm | 4 +- engine/items/item_effects.asm | 124 +++++++++++++++++--------------- engine/items/tmhm.asm | 2 +- engine/link/cable_club.asm | 12 ++-- engine/menus/naming_screen.asm | 4 +- engine/menus/start_sub_menus.asm | 14 ++-- engine/menus/text_box.asm | 2 +- engine/movie/hall_of_fame.asm | 2 +- engine/pokemon/add_mon.asm | 33 ++++----- engine/pokemon/bills_pc.asm | 4 +- engine/pokemon/evos_moves.asm | 10 +-- engine/pokemon/learn_move.asm | 6 +- engine/pokemon/load_mon_data.asm | 6 +- engine/pokemon/remove_mon.asm | 70 ++++++++++-------- engine/pokemon/set_types.asm | 2 +- engine/pokemon/status_screen.asm | 2 +- home/list_menu.asm | 2 +- home/move_mon.asm | 2 +- macros/ram.asm | 2 - ram/wram.asm | 7 +- scripts/Daycare.asm | 4 +- scripts/NameRatersHouse.asm | 2 +- 35 files changed, 235 insertions(+), 207 deletions(-) (limited to 'engine') diff --git a/constants/pokemon_data_constants.asm b/constants/pokemon_data_constants.asm index 1234acab..16d21f54 100644 --- a/constants/pokemon_data_constants.asm +++ b/constants/pokemon_data_constants.asm @@ -44,7 +44,7 @@ DEF MON_SPD_EXP rw DEF MON_SPC_EXP rw DEF MON_DVS rw DEF MON_PP rb NUM_MOVES -DEF BOXMON_STRUCT_LENGTH EQU _RS +DEF BOXMON_STRUCT_LENGTH EQU _RS ; $21 DEF MON_LEVEL rb DEF MON_STATS rw NUM_STATS rsset MON_STATS @@ -53,7 +53,7 @@ DEF MON_ATK rw DEF MON_DEF rw DEF MON_SPD rw DEF MON_SPC rw -DEF PARTYMON_STRUCT_LENGTH EQU _RS +DEF PARTYMON_STRUCT_LENGTH EQU _RS ; $2c DEF PARTY_LENGTH EQU 6 diff --git a/constants/text_constants.asm b/constants/text_constants.asm index ed195172..88a42bbe 100644 --- a/constants/text_constants.asm +++ b/constants/text_constants.asm @@ -1,5 +1,7 @@ +DEF PLAYER_NAME_LENGTH EQU 8 DEF NAME_LENGTH EQU 11 DEF ITEM_NAME_LENGTH EQU 13 +DEF MOVE_NAME_LENGTH EQU 14 DEF NAME_BUFFER_LENGTH EQU 20 DEF GYM_CITY_LENGTH EQU 17 diff --git a/engine/battle/battle_transitions.asm b/engine/battle/battle_transitions.asm index 3670cddc..a37a5054 100644 --- a/engine/battle/battle_transitions.asm +++ b/engine/battle/battle_transitions.asm @@ -104,11 +104,11 @@ GetBattleTransitionID_CompareLevels: ld a, [hli] or [hl] jr nz, .notFainted - ld de, wPartyMon2 - (wPartyMon1 + 1) + ld de, PARTYMON_STRUCT_LENGTH - 1 add hl, de jr .faintedLoop .notFainted - ld de, wPartyMon1Level - (wPartyMon1HP + 1) + ld de, MON_LEVEL - (MON_HP + 1) add hl, de ld a, [hl] add $3 diff --git a/engine/battle/core.asm b/engine/battle/core.asm index 4c25373a..44fd9a70 100644 --- a/engine/battle/core.asm +++ b/engine/battle/core.asm @@ -137,7 +137,7 @@ StartBattle: inc a ld [wFirstMonsNotOutYet], a ld hl, wEnemyMon1HP - ld bc, wEnemyMon2 - wEnemyMon1 - 1 + ld bc, PARTYMON_STRUCT_LENGTH - 1 ld d, $3 .findFirstAliveEnemyMonLoop inc d @@ -736,7 +736,7 @@ FaintEnemyPokemon: jr z, .wild ld a, [wEnemyMonPartyPos] ld hl, wEnemyMon1HP - ld bc, wEnemyMon2 - wEnemyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes xor a ld [hli], a @@ -876,7 +876,7 @@ AnyEnemyPokemonAliveCheck: ld b, a xor a ld hl, wEnemyMon1HP - ld de, wEnemyMon2 - wEnemyMon1 + ld de, PARTYMON_STRUCT_LENGTH .nextPokemon or [hl] inc hl @@ -1330,7 +1330,7 @@ EnemySendOutFirstMon: ld a, b ld [wWhichPokemon], a push bc - ld bc, wEnemyMon2 - wEnemyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes pop bc inc hl @@ -1342,7 +1342,7 @@ EnemySendOutFirstMon: .next3 ld a, [wWhichPokemon] ld hl, wEnemyMon1Level - ld bc, wEnemyMon2 - wEnemyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld a, [hl] ld [wCurEnemyLevel], a @@ -1457,7 +1457,7 @@ AnyPartyAlive:: ld e, a xor a ld hl, wPartyMon1HP - ld bc, wPartyMon2 - wPartyMon1 - 1 + ld bc, PARTYMON_STRUCT_LENGTH - 1 .partyMonsLoop or [hl] inc hl @@ -1473,7 +1473,7 @@ AnyPartyAlive:: HasMonFainted: ld a, [wWhichPokemon] ld hl, wPartyMon1HP - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld a, [hli] or [hl] @@ -1625,16 +1625,16 @@ GotAwayText: ; copies from party data to battle mon data when sending out a new player mon LoadBattleMonFromParty: ld a, [wWhichPokemon] - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH ld hl, wPartyMon1Species call AddNTimes ld de, wBattleMonSpecies ld bc, wBattleMonDVs - wBattleMonSpecies call CopyData - ld bc, wPartyMon1DVs - wPartyMon1OTID + ld bc, MON_DVS - MON_OTID add hl, bc ld de, wBattleMonDVs - ld bc, wPartyMon1PP - wPartyMon1DVs + ld bc, MON_PP - MON_DVS call CopyData ld de, wBattleMonPP ld bc, NUM_MOVES @@ -1669,16 +1669,16 @@ LoadBattleMonFromParty: ; copies from enemy party data to current enemy mon data when sending out a new enemy mon LoadEnemyMonFromParty: ld a, [wWhichPokemon] - ld bc, wEnemyMon2 - wEnemyMon1 + ld bc, PARTYMON_STRUCT_LENGTH ld hl, wEnemyMons call AddNTimes ld de, wEnemyMonSpecies ld bc, wEnemyMonDVs - wEnemyMonSpecies call CopyData - ld bc, wEnemyMon1DVs - wEnemyMon1OTID + ld bc, MON_DVS - MON_OTID add hl, bc ld de, wEnemyMonDVs - ld bc, wEnemyMon1PP - wEnemyMon1DVs + ld bc, MON_PP - MON_DVS call CopyData ld de, wEnemyMonPP ld bc, NUM_MOVES @@ -1800,7 +1800,7 @@ AnimateRetreatingPlayerMon: ReadPlayerMonCurHPAndStatus: ld a, [wPlayerMonNumber] ld hl, wPartyMon1HP - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld d, h ld e, l @@ -2520,7 +2520,7 @@ MoveSelectionMenu: .relearnmenu ld a, [wWhichPokemon] ld hl, wPartyMon1Moves - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes call .loadmoves hlcoord 4, 7 @@ -2798,12 +2798,12 @@ SwapMovesInMenu: .swapMovesInPartyMon ld hl, wPartyMon1Moves ld a, [wPlayerMonNumber] - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes push hl call .swapBytes ; swap moves pop hl - ld bc, wPartyMon1PP - wPartyMon1Moves + ld bc, MON_PP - MON_MOVES add hl, bc call .swapBytes ; swap move PP xor a @@ -3451,7 +3451,7 @@ CheckPlayerStatusConditions: bit PAR, [hl] jr z, .BideCheck call BattleRandom - cp $3F ; 25% to be fully paralyzed + cp 25 percent ; chance to be fully paralyzed jr nc, .BideCheck ld hl, FullyParalyzedText call PrintText @@ -3970,7 +3970,7 @@ CheckForDisobedience: ; compare the mon's original trainer ID with the player's ID to see if it was traded .checkIfMonIsTraded ld hl, wPartyMon1OTID - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH ld a, [wPlayerMonNumber] call AddNTimes ld a, [wPlayerID] @@ -4197,7 +4197,7 @@ GetDamageVarsForPlayerAttack: push bc ld hl, wPartyMon1Attack ld a, [wPlayerMonNumber] - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes pop bc jr .scaleStats @@ -4229,7 +4229,7 @@ GetDamageVarsForPlayerAttack: push bc ld hl, wPartyMon1Special ld a, [wPlayerMonNumber] - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes pop bc ; if either the offensive or defensive stat is too large to store in a byte, scale both stats by dividing them by 4 @@ -4303,7 +4303,7 @@ GetDamageVarsForEnemyAttack: ; in the case of a critical hit, reset the player's defense and the enemy's attack to their base values ld hl, wPartyMon1Defense ld a, [wPlayerMonNumber] - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld a, [hli] ld b, a @@ -4335,7 +4335,7 @@ GetDamageVarsForEnemyAttack: ; in the case of a critical hit, reset the player's and enemy's specials to their base values ld hl, wPartyMon1Special ld a, [wPlayerMonNumber] - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld a, [hli] ld b, a @@ -4398,7 +4398,7 @@ GetEnemyMonStat: ld b, $0 add hl, bc ld a, [wEnemyMonPartyPos] - ld bc, wEnemyMon2 - wEnemyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld a, [hli] ldh [hMultiplicand + 1], a @@ -5197,7 +5197,7 @@ IncrementMovePP: jr z, .updatePP ld a, [wEnemyMonPartyPos] ; value for enemy turn .updatePP - ld bc, wEnemyMon2 - wEnemyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes inc [hl] ; increment PP in the party memory location ret @@ -6206,7 +6206,7 @@ LoadEnemyMonData: ; if it's a trainer battle, copy moves from enemy party data ld hl, wEnemyMon1Moves ld a, [wWhichPokemon] - ld bc, wEnemyMon2 - wEnemyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld bc, NUM_MOVES call CopyData diff --git a/engine/battle/decrement_pp.asm b/engine/battle/decrement_pp.asm index 441bbb81..93515224 100644 --- a/engine/battle/decrement_pp.asm +++ b/engine/battle/decrement_pp.asm @@ -31,7 +31,7 @@ DecrementPP: ld hl, wPartyMon1PP ; PP of first move (in party) ld a, [wPlayerMonNumber] ; which mon in party is active - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ; calculate address of the mon to modify .DecrementPP: ld a, [wPlayerMoveListIndex] ; which move (0, 1, 2, 3) did we use? diff --git a/engine/battle/draw_hud_pokeball_gfx.asm b/engine/battle/draw_hud_pokeball_gfx.asm index 011b4b33..768a6e20 100644 --- a/engine/battle/draw_hud_pokeball_gfx.asm +++ b/engine/battle/draw_hud_pokeball_gfx.asm @@ -90,7 +90,7 @@ PickPokeball: .done ld a, b ld [de], a - ld bc, wPartyMon2 - wPartyMon1Status + ld bc, PARTYMON_STRUCT_LENGTH - MON_STATUS add hl, bc ; next mon struct ret diff --git a/engine/battle/effects.asm b/engine/battle/effects.asm index 003592aa..2cef2521 100644 --- a/engine/battle/effects.asm +++ b/engine/battle/effects.asm @@ -323,7 +323,7 @@ CheckDefrost: ld [wEnemyMonStatus], a ; set opponent status to 00 ["defrost" a frozen monster] ld hl, wEnemyMon1Status ld a, [wEnemyMonPartyPos] - ld bc, wEnemyMon2 - wEnemyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes xor a ld [hl], a ; clear status in roster @@ -336,7 +336,7 @@ CheckDefrost: ld [wBattleMonStatus], a ld hl, wPartyMon1Status ld a, [wPlayerMonNumber] - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes xor a ld [hl], a diff --git a/engine/battle/end_of_battle.asm b/engine/battle/end_of_battle.asm index 80fdf002..2feb50bd 100644 --- a/engine/battle/end_of_battle.asm +++ b/engine/battle/end_of_battle.asm @@ -5,7 +5,7 @@ EndOfBattle: ; link battle ld a, [wEnemyMonPartyPos] ld hl, wEnemyMon1Status - ld bc, wEnemyMon2 - wEnemyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld a, [wEnemyMonStatus] ld [hl], a @@ -60,8 +60,8 @@ EndOfBattle: ld [hli], a ld [hl], a ld [wListScrollOffset], a - ld hl, wPlayerStatsToDouble - ld b, $18 + ld hl, wBattleStatusData + ld b, wBattleStatusDataEnd - wBattleStatusData .loop ld [hli], a dec b diff --git a/engine/battle/experience.asm b/engine/battle/experience.asm index a8ee6747..4e44643c 100644 --- a/engine/battle/experience.asm +++ b/engine/battle/experience.asm @@ -21,7 +21,7 @@ GainExperience: and a ; is mon's gain exp flag set? pop hl jp z, .nextMon ; if mon's gain exp flag not set, go to next mon - ld de, (wPartyMon1HPExp + 1) - (wPartyMon1HP + 1) + ld de, (MON_HP_EXP + 1) - (MON_HP + 1) add hl, de ld d, h ld e, l @@ -66,9 +66,9 @@ GainExperience: ldh [hDivisor], a ld b, 4 call Divide - ld hl, wPartyMon1OTID - (wPartyMon1DVs - 1) + ld hl, MON_OTID - (MON_DVS - 1) add hl, de - ld b, [hl] ; party mon OTID + ld b, [hl] ; wPartyMon*OTID inc hl ld a, [wPlayerID] cp b @@ -152,7 +152,7 @@ GainExperience: ld [wMonDataLocation], a call LoadMonData pop hl - ld bc, wPartyMon1Level - wPartyMon1Exp + ld bc, MON_LEVEL - MON_EXP add hl, bc push hl farcall CalcLevelFromExperience @@ -166,13 +166,13 @@ GainExperience: ld a, d ld [wCurEnemyLevel], a ld [hl], a - ld bc, wPartyMon1Species - wPartyMon1Level + ld bc, MON_SPECIES - MON_LEVEL add hl, bc ld a, [hl] ld [wCurSpecies], a ld [wPokedexNum], a call GetMonHeader - ld bc, (wPartyMon1MaxHP + 1) - wPartyMon1Species + ld bc, (MON_MAXHP + 1) - MON_SPECIES add hl, bc push hl ld a, [hld] @@ -181,7 +181,7 @@ GainExperience: push bc ; push max HP (from before levelling up) ld d, h ld e, l - ld bc, (wPartyMon1HPExp - 1) - wPartyMon1MaxHP + ld bc, (MON_HP_EXP - 1) - MON_MAXHP add hl, bc ld b, $1 ; consider stat exp when calculating stats call CalcStats @@ -193,15 +193,15 @@ GainExperience: ld a, [hl] sbc b ld b, a ; bc = difference between old max HP and new max HP after levelling - ld de, (wPartyMon1HP + 1) - wPartyMon1MaxHP + ld de, (MON_HP + 1) - MON_MAXHP add hl, de ; add to the current HP the amount of max HP gained when levelling - ld a, [hl] ; wPartyMon1HP + 1 + ld a, [hl] ; wPartyMon*HP + 1 add c ld [hld], a - ld a, [hl] ; wPartyMon1HP + 1 + ld a, [hl] ; wPartyMon*HP + 1 adc b - ld [hl], a ; wPartyMon1HP + ld [hl], a ; wPartyMon*HP ld a, [wPlayerMonNumber] ld b, a ld a, [wWhichPokemon] @@ -216,7 +216,7 @@ GainExperience: ld a, [hl] ld [de], a ; copy other stats from party mon to battle mon - ld bc, wPartyMon1Level - (wPartyMon1HP + 1) + ld bc, MON_LEVEL - (MON_HP + 1) add hl, bc push hl ld de, wBattleMonLevel @@ -271,7 +271,7 @@ GainExperience: cp b jr z, .done ld [wWhichPokemon], a - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH ld hl, wPartyMon1 call AddNTimes jp .partyMonLoop diff --git a/engine/battle/read_trainer_party.asm b/engine/battle/read_trainer_party.asm index df1132ea..1e173690 100644 --- a/engine/battle/read_trainer_party.asm +++ b/engine/battle/read_trainer_party.asm @@ -92,7 +92,7 @@ ReadTrainer: ld a, [hli] ld d, [hl] ld hl, wEnemyMon1Moves + 2 - ld bc, wEnemyMon2 - wEnemyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld [hl], d jr .FinishUp diff --git a/engine/battle/trainer_ai.asm b/engine/battle/trainer_ai.asm index 546dd60e..b9447779 100644 --- a/engine/battle/trainer_ai.asm +++ b/engine/battle/trainer_ai.asm @@ -569,7 +569,7 @@ AISwitchIfEnoughMons: inc d .Fainted push bc - ld bc, wEnemyMon2 - wEnemyMon1 + ld bc, PARTYMON_STRUCT_LENGTH add hl, bc pop bc dec c @@ -587,7 +587,7 @@ SwitchEnemyMon: ld a, [wEnemyMonPartyPos] ld hl, wEnemyMon1HP - ld bc, wEnemyMon2 - wEnemyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld d, h ld e, l @@ -626,7 +626,7 @@ AICureStatus: ; cures the status of enemy's active pokemon ld a, [wEnemyMonPartyPos] ld hl, wEnemyMon1Status - ld bc, wEnemyMon2 - wEnemyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes xor a ld [hl], a ; clear status in enemy team roster diff --git a/engine/events/heal_party.asm b/engine/events/heal_party.asm index e6551bcd..5532fd92 100644 --- a/engine/events/heal_party.asm +++ b/engine/events/heal_party.asm @@ -11,7 +11,7 @@ HealParty: push hl push de - ld hl, wPartyMon1Status - wPartyMon1HP + ld hl, MON_STATUS - MON_HP add hl, de xor a ld [hl], a @@ -19,7 +19,7 @@ HealParty: push de ld b, NUM_MOVES ; A Pokémon has 4 moves .pp - ld hl, wPartyMon1Moves - wPartyMon1HP + ld hl, MON_MOVES - MON_HP add hl, de ld a, [hl] @@ -27,7 +27,7 @@ HealParty: jr z, .nextmove dec a - ld hl, wPartyMon1PP - wPartyMon1HP + ld hl, MON_PP - MON_HP add hl, de push hl @@ -60,7 +60,7 @@ HealParty: jr nz, .pp pop de - ld hl, wPartyMon1MaxHP - wPartyMon1HP + ld hl, MON_MAXHP - MON_HP add hl, de ld a, [hli] ld [de], a @@ -72,7 +72,7 @@ HealParty: pop hl push hl - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH ld h, d ld l, e add hl, bc diff --git a/engine/events/in_game_trades.asm b/engine/events/in_game_trades.asm index 5cc251f4..3107550f 100644 --- a/engine/events/in_game_trades.asm +++ b/engine/events/in_game_trades.asm @@ -115,7 +115,7 @@ InGameTrade_DoTrade: jr nz, .tradeFailed ; jump if the selected mon's species is not the required one ld a, [wWhichPokemon] ld hl, wPartyMon1Level - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld a, [hl] ld [wCurEnemyLevel], a @@ -190,7 +190,7 @@ InGameTrade_PrepareTradeData: ld de, wLinkEnemyTrainerName call InGameTrade_CopyData ld hl, wPartyMon1OTID - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH ld a, [wWhichPokemon] call AddNTimes ld de, wTradedPlayerMonOTID @@ -223,7 +223,7 @@ InGameTrade_CopyDataToReceivedMon: ld bc, NAME_LENGTH call CopyData ld hl, wPartyMon1OTID - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call InGameTrade_GetReceivedMonPointer ld hl, wTradedEnemyMonOTID ld bc, 2 diff --git a/engine/events/poison.asm b/engine/events/poison.asm index beb1a312..8c3dc8b3 100644 --- a/engine/events/poison.asm +++ b/engine/events/poison.asm @@ -65,7 +65,7 @@ ApplyOutOfBattlePoisonDamage: ld a, [de] inc a jr z, .applyDamageLoopDone - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH add hl, bc push hl ld hl, wWhichPokemon @@ -82,7 +82,7 @@ ApplyOutOfBattlePoisonDamage: and 1 << PSN or e ld e, a - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH add hl, bc dec d jr nz, .countPoisonedLoop diff --git a/engine/items/item_effects.asm b/engine/items/item_effects.asm index 7fffae59..a716ebb7 100644 --- a/engine/items/item_effects.asm +++ b/engine/items/item_effects.asm @@ -834,7 +834,7 @@ ItemUseMedicine: .getPartyMonDataAddress jp c, .canceledItemUse ld hl, wPartyMons - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH ld a, [wWhichPokemon] call AddNTimes ld a, [wWhichPokemon] @@ -866,7 +866,7 @@ ItemUseMedicine: jr nc, .healHP ; if it's a Full Restore or one of the potions ; fall through if it's one of the status-specific healing items .cureStatusAilment - ld bc, wPartyMon1Status - wPartyMon1 + ld bc, MON_STATUS add hl, bc ; hl now points to status ld a, [wCurItem] lb bc, ANTIDOTE_MSG, 1 << PSN @@ -904,7 +904,7 @@ ItemUseMedicine: ld hl, wPlayerBattleStatus3 res BADLY_POISONED, [hl] ; heal Toxic status pop hl - ld bc, wPartyMon1Stats - wPartyMon1Status + ld bc, MON_STATS - MON_STATUS add hl, bc ; hl now points to party stats ld de, wBattleMonStats ld bc, NUM_STATS * 2 @@ -962,7 +962,7 @@ ItemUseMedicine: .compareCurrentHPToMaxHP push hl push bc - ld bc, wPartyMon1MaxHP - (wPartyMon1HP + 1) + ld bc, MON_MAXHP - (MON_HP + 1) add hl, bc ; hl now points to max HP pop bc ld a, [hli] @@ -994,7 +994,7 @@ ItemUseMedicine: ld [wChannelSoundIDs + CHAN5], a push hl push de - ld bc, wPartyMon1MaxHP - (wPartyMon1HP + 1) + ld bc, MON_MAXHP - (MON_HP + 1) add hl, bc ; hl now points to max HP ld a, [hli] ld [wHPBarMaxHP+1], a @@ -1015,7 +1015,7 @@ ItemUseMedicine: push af ld hl, wPartyMon1MaxHP ld a, [wWhichPokemon] - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld a, [hli] ld [wHPBarMaxHP + 1], a @@ -1027,7 +1027,7 @@ ItemUseMedicine: ldh [hDivisor], a ld b, 2 ; number of bytes call Divide ; get 1/5 of max HP of pokemon that used Softboiled - ld bc, (wPartyMon1HP + 1) - (wPartyMon1MaxHP + 1) + ld bc, (MON_HP + 1) - (MON_MAXHP + 1) add hl, bc ; hl now points to LSB of current HP of pokemon that used Softboiled ; subtract 1/5 of max HP from current HP of pokemon that used Softboiled ldh a, [hQuotient + 3] @@ -1106,7 +1106,7 @@ ItemUseMedicine: inc hl ld d, h ld e, l ; de now points to current HP - ld hl, (wPartyMon1MaxHP + 1) - (wPartyMon1HP + 1) + ld hl, (MON_MAXHP + 1) - (MON_HP + 1) add hl, de ; hl now points to max HP ld a, [wCurItem] cp REVIVE @@ -1153,7 +1153,7 @@ ItemUseMedicine: ld a, [wCurItem] cp FULL_RESTORE jr nz, .updateInBattleData - ld bc, wPartyMon1Status - (wPartyMon1MaxHP + 1) + ld bc, MON_STATUS - (MON_MAXHP + 1) add hl, bc xor a ld [hl], a ; remove the status ailment in the party data @@ -1256,7 +1256,7 @@ ItemUseMedicine: ld a, [hl] ld [wCurSpecies], a ld [wPokedexNum], a - ld bc, wPartyMon1Level - wPartyMon1 + ld bc, MON_LEVEL add hl, bc ; hl now points to level ld a, [hl] ; a = level ld [wCurEnemyLevel], a ; store level @@ -1273,7 +1273,7 @@ ItemUseMedicine: push hl sub HP_UP add a - ld bc, wPartyMon1HPExp - wPartyMon1 + ld bc, MON_HP_EXP add hl, bc add l ld l, a @@ -1321,17 +1321,17 @@ ItemUseMedicine: call PrintText jp GBPalWhiteOut .recalculateStats - ld bc, wPartyMon1Stats - wPartyMon1 + ld bc, MON_STATS add hl, bc ld d, h ld e, l ; de now points to stats - ld bc, (wPartyMon1Exp + 2) - wPartyMon1Stats + ld bc, (MON_EXP + 2) - MON_STATS add hl, bc ; hl now points to LSB of experience ld b, 1 jp CalcStats ; recalculate stats .useRareCandy push hl - ld bc, wPartyMon1Level - wPartyMon1 + ld bc, MON_LEVEL add hl, bc ; hl now points to level ld a, [hl] ; a = level cp MAX_LEVEL @@ -1345,7 +1345,7 @@ ItemUseMedicine: callfar CalcExperience ; calculate experience for next level and store it at hExperience pop de pop hl - ld bc, wPartyMon1Exp - wPartyMon1Level + ld bc, MON_EXP - MON_LEVEL add hl, bc ; hl now points to MSB of experience ; update experience to minimum for new level ldh a, [hExperience] @@ -1361,7 +1361,7 @@ ItemUseMedicine: push af push de push hl - ld bc, wPartyMon1MaxHP - wPartyMon1 + ld bc, MON_MAXHP add hl, bc ; hl now points to MSB of max HP ld a, [hli] ld b, a @@ -1371,7 +1371,7 @@ ItemUseMedicine: push hl call .recalculateStats pop hl - ld bc, (wPartyMon1MaxHP + 1) - wPartyMon1 + ld bc, (MON_MAXHP + 1) add hl, bc ; hl now points to LSB of max HP pop bc ld a, [hld] @@ -1381,7 +1381,7 @@ ItemUseMedicine: sbc b ld b, a ; bc = the amount of max HP gained from leveling up ; add the amount gained to the current HP - ld de, (wPartyMon1HP + 1) - wPartyMon1MaxHP + ld de, (MON_HP + 1) - MON_MAXHP add hl, de ; hl now points to LSB of current HP ld a, [hl] add c @@ -1984,7 +1984,7 @@ ItemUsePPRestore: ld [wPlayerMoveListIndex], a jr nz, .chooseMon ld hl, wPartyMon1Moves - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call GetSelectedMoveOffset push hl ld a, [hl] @@ -1996,7 +1996,7 @@ ItemUsePPRestore: cp ETHER jr nc, .useEther ; if Ether or Max Ether .usePPUp - ld bc, wPartyMon1PP - wPartyMon1Moves + ld bc, MON_PP - MON_MOVES add hl, bc ld a, [hl] ; move PP cp 3 << 6 ; have 3 PP Ups already been used? @@ -2026,7 +2026,7 @@ ItemUsePPRestore: cp b ; is the pokemon whose PP was restored active in battle? jr nz, .skipUpdatingInBattleData ld hl, wPartyMon1PP - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld de, wBattleMonPP ld bc, NUM_MOVES @@ -2048,9 +2048,9 @@ ItemUsePPRestore: ld [wMonDataLocation], a call GetMaxPP ld hl, wPartyMon1Moves - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call GetSelectedMoveOffset - ld bc, wPartyMon1PP - wPartyMon1Moves + ld bc, MON_PP - MON_MOVES add hl, bc ; hl now points to move's PP ld a, [wMaxPP] ld b, a @@ -2098,7 +2098,7 @@ ItemUsePPRestore: .elixirLoop push bc ld hl, wPartyMon1Moves - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call GetSelectedMoveOffset ld a, [hl] and a ; does the current slot have a move? @@ -2195,7 +2195,7 @@ ItemUseTMHM: .chooseMon ld hl, wStringBuffer ld de, wTempMoveNameBuffer - ld bc, ITEM_NAME_LENGTH + 1 + ld bc, MOVE_NAME_LENGTH call CopyData ; save the move name because DisplayPartyMenu will overwrite it ld a, $ff ld [wUpdateSpritesEnabled], a @@ -2205,7 +2205,7 @@ ItemUseTMHM: push af ld hl, wTempMoveNameBuffer ld de, wStringBuffer - ld bc, ITEM_NAME_LENGTH + 1 + ld bc, MOVE_NAME_LENGTH call CopyData pop af jr nc, .checkIfAbleToLearnMove @@ -2375,14 +2375,14 @@ GotOffBicycleText: ; [wCurrentMenuItem] = index of move (when using a PP Up) RestoreBonusPP: ld hl, wPartyMon1Moves - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH ld a, [wWhichPokemon] call AddNTimes push hl ld de, wNormalMaxPPList - 1 predef LoadMovePPs ; loads the normal max PP of each of the pokemon's moves to wNormalMaxPPList pop hl - ld c, wPartyMon1PP - wPartyMon1Moves + ld c, MON_PP - MON_MOVES ld b, 0 add hl, bc ; hl now points to move 1 PP ld de, wNormalMaxPPList @@ -2468,13 +2468,13 @@ GetMaxPP: ld a, [wMonDataLocation] and a ld hl, wPartyMon1Moves - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH jr z, .sourceWithMultipleMon ld hl, wEnemyMon1Moves dec a jr z, .sourceWithMultipleMon ld hl, wBoxMon1Moves - ld bc, wBoxMon2 - wBoxMon1 + ld bc, BOXMON_STRUCT_LENGTH dec a jr z, .sourceWithMultipleMon ld hl, wDayCareMonMoves @@ -2501,7 +2501,7 @@ GetMaxPP: ld b, a ; b = normal max PP pop hl push bc - ld bc, wPartyMon1PP - wPartyMon1Moves ; PP offset if not player's in-battle pokemon data + ld bc, MON_PP - MON_MOVES ; PP offset if not player's in-battle pokemon data ld a, [wMonDataLocation] cp 4 ; player's in-battle pokemon? jr nz, .addPPOffset @@ -2645,29 +2645,33 @@ IsKeyItem_:: INCLUDE "data/items/key_items.asm" +; store the new mon in the first slot, shifting all existing box data down SendNewMonToBox: ld de, wBoxCount ld a, [de] inc a ld [de], a + ld a, [wCurPartySpecies] ld [wCurSpecies], a ld c, a -.loop +.shiftSpeciesLoop inc de ld a, [de] ld b, a ld a, c ld c, b ld [de], a - cp $ff - jr nz, .loop + cp -1 + jr nz, .shiftSpeciesLoop + call GetMonHeader ld hl, wBoxMonOT ld bc, NAME_LENGTH ld a, [wBoxCount] dec a - jr z, .skip + jr z, .skipOTshift ; if the box was empty, there is nothing to shift + dec a call AddNTimes push hl @@ -2679,7 +2683,7 @@ SendNewMonToBox: ld a, [wBoxCount] dec a ld b, a -.loop2 +.shiftMonOTLoop push bc push hl ld bc, NAME_LENGTH @@ -2691,15 +2695,18 @@ SendNewMonToBox: add hl, bc pop bc dec b - jr nz, .loop2 -.skip + jr nz, .shiftMonOTLoop + +.skipOTshift ld hl, wPlayerName - ld de, wBoxMonOT + ld de, wBoxMon1OT ld bc, NAME_LENGTH call CopyData + ld a, [wBoxCount] dec a - jr z, .skip2 + jr z, .skipNickShift + ld hl, wBoxMonNicks ld bc, NAME_LENGTH dec a @@ -2713,7 +2720,7 @@ SendNewMonToBox: ld a, [wBoxCount] dec a ld b, a -.loop3 +.shiftNickLoop push bc push hl ld bc, NAME_LENGTH @@ -2725,21 +2732,24 @@ SendNewMonToBox: add hl, bc pop bc dec b - jr nz, .loop3 -.skip2 - ld hl, wBoxMonNicks + jr nz, .shiftNickLoop + +.skipNickShift + ld hl, wBoxMon1Nick ld a, NAME_MON_SCREEN ld [wNamingScreenType], a predef AskName + ld a, [wBoxCount] dec a - jr z, .skip3 + jr z, .skipMonDataShift + ld hl, wBoxMons - ld bc, wBoxMon2 - wBoxMon1 + ld bc, BOXMON_STRUCT_LENGTH dec a call AddNTimes push hl - ld bc, wBoxMon2 - wBoxMon1 + ld bc, BOXMON_STRUCT_LENGTH add hl, bc ld d, h ld e, l @@ -2747,20 +2757,21 @@ SendNewMonToBox: ld a, [wBoxCount] dec a ld b, a -.loop4 +.shiftMonDataLoop push bc push hl - ld bc, wBoxMon2 - wBoxMon1 + ld bc, BOXMON_STRUCT_LENGTH call CopyData pop hl ld d, h ld e, l - ld bc, wBoxMon1 - wBoxMon2 + ld bc, -BOXMON_STRUCT_LENGTH add hl, bc pop bc dec b - jr nz, .loop4 -.skip3 + jr nz, .shiftMonDataLoop + +.skipMonDataShift ld a, [wEnemyMonLevel] ld [wEnemyMonBoxLevel], a ld hl, wEnemyMon @@ -2790,11 +2801,12 @@ SendNewMonToBox: inc de xor a ld b, NUM_STATS * 2 -.loop5 +.statLoop ld [de], a inc de dec b - jr nz, .loop5 + jr nz, .statLoop + ld hl, wEnemyMonDVs ld a, [hli] ld [de], a @@ -2803,12 +2815,12 @@ SendNewMonToBox: ld [de], a ld hl, wEnemyMonPP ld b, NUM_MOVES -.loop6 +.movePPLoop ld a, [hli] inc de ld [de], a dec b - jr nz, .loop6 + jr nz, .movePPLoop ret ; checks if the tile in front of the player is a shore or water tile diff --git a/engine/items/tmhm.asm b/engine/items/tmhm.asm index a11cd736..bac92f5d 100644 --- a/engine/items/tmhm.asm +++ b/engine/items/tmhm.asm @@ -2,7 +2,7 @@ CheckIfMoveIsKnown: ld a, [wWhichPokemon] ld hl, wPartyMon1Moves - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld a, [wMoveNum] ld b, a diff --git a/engine/link/cable_club.asm b/engine/link/cable_club.asm index ea39b938..4a300164 100644 --- a/engine/link/cable_club.asm +++ b/engine/link/cable_club.asm @@ -763,9 +763,9 @@ TradeCenter_Trade: call CopyData ld hl, wPartyMon1Species ld a, [wTradingWhichPlayerMon] - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes - ld bc, wPartyMon1OTID - wPartyMon1 + ld bc, MON_OTID add hl, bc ld a, [hli] ld [wTradedPlayerMonOTID], a @@ -779,9 +779,9 @@ TradeCenter_Trade: call CopyData ld hl, wEnemyMons ld a, [wTradingWhichEnemyMon] - ld bc, wEnemyMon2 - wEnemyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes - ld bc, wEnemyMon1OTID - wEnemyMon1 + ld bc, MON_OTID add hl, bc ld a, [hli] ld [wTradedEnemyMonOTID], a @@ -809,10 +809,10 @@ TradeCenter_Trade: ld [wCurPartySpecies], a ld hl, wEnemyMons ld a, c - ld bc, wEnemyMon2 - wEnemyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld de, wLoadedMon - ld bc, wEnemyMon2 - wEnemyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call CopyData call AddEnemyMonToPlayerParty ld a, [wPartyCount] diff --git a/engine/menus/naming_screen.asm b/engine/menus/naming_screen.asm index 9c0cd0a8..24b172f0 100644 --- a/engine/menus/naming_screen.asm +++ b/engine/menus/naming_screen.asm @@ -241,11 +241,11 @@ DisplayNamingScreen: cp NAME_MON_SCREEN jr nc, .checkMonNameLength ld a, [wNamingScreenNameLength] - cp $7 ; max length of player/rival names + cp PLAYER_NAME_LENGTH - 1 jr .checkNameLength .checkMonNameLength ld a, [wNamingScreenNameLength] - cp $a ; max length of pokemon nicknames + cp NAME_LENGTH - 1 .checkNameLength jr c, .addLetter ret diff --git a/engine/menus/start_sub_menus.asm b/engine/menus/start_sub_menus.asm index c27e58a9..ec10dd11 100644 --- a/engine/menus/start_sub_menus.asm +++ b/engine/menus/start_sub_menus.asm @@ -236,7 +236,7 @@ StartMenu_Pokemon:: .softboiled ld hl, wPartyMon1MaxHP ld a, [wWhichPokemon] - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld a, [hli] ldh [hDividend], a @@ -246,7 +246,7 @@ StartMenu_Pokemon:: ldh [hDivisor], a ld b, 2 ; number of bytes call Divide - ld bc, wPartyMon1HP - wPartyMon1MaxHP + ld bc, MON_HP - MON_MAXHP add hl, bc ld a, [hld] ld b, a @@ -743,24 +743,24 @@ SwitchPartyMon_InitVarOrSwapData: ldh a, [hSwapTemp] ld [de], a ld hl, wPartyMons - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH ld a, [wCurrentMenuItem] call AddNTimes push hl ld de, wSwitchPartyMonTempBuffer - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call CopyData ld hl, wPartyMons - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH ld a, [wMenuItemToSwap] call AddNTimes pop de push hl - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call CopyData pop de ld hl, wSwitchPartyMonTempBuffer - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call CopyData ld hl, wPartyMonOT ld a, [wCurrentMenuItem] diff --git a/engine/menus/text_box.asm b/engine/menus/text_box.asm index 94c432c7..e618b1d0 100644 --- a/engine/menus/text_box.asm +++ b/engine/menus/text_box.asm @@ -509,7 +509,7 @@ PokemonMenuEntries: GetMonFieldMoves: ld a, [wWhichPokemon] ld hl, wPartyMon1Moves - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld d, h ld e, l diff --git a/engine/movie/hall_of_fame.asm b/engine/movie/hall_of_fame.asm index 88e777af..ec457141 100644 --- a/engine/movie/hall_of_fame.asm +++ b/engine/movie/hall_of_fame.asm @@ -49,7 +49,7 @@ AnimateHallOfFame: ld a, c ld [wHoFPartyMonIndex], a ld hl, wPartyMon1Level - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld a, [hl] ld [wHoFMonLevel], a diff --git a/engine/pokemon/add_mon.asm b/engine/pokemon/add_mon.asm index a7c201ea..455221ce 100644 --- a/engine/pokemon/add_mon.asm +++ b/engine/pokemon/add_mon.asm @@ -59,7 +59,7 @@ _AddPartyMon:: .next3 ldh a, [hNewPartyLength] dec a - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld e, l ld d, h @@ -117,12 +117,12 @@ _AddPartyMon:: .next4 push bc - ld bc, wPartyMon1DVs - wPartyMon1 + ld bc, MON_DVS add hl, bc pop bc ld [hli], a ld [hl], b ; write IVs - ld bc, (wPartyMon1HPExp - 1) - (wPartyMon1DVs + 1) + ld bc, (MON_HP_EXP - 1) - (MON_DVS + 1) add hl, bc ld a, 1 ld c, a @@ -142,7 +142,7 @@ _AddPartyMon:: inc de jr .copyMonTypesAndMoves .copyEnemyMonData - ld bc, wEnemyMon1DVs - wEnemyMon1 + ld bc, MON_DVS add hl, bc ld a, [wEnemyMonDVs] ; copy IVs from cur enemy mon ld [hli], a @@ -237,7 +237,7 @@ _AddPartyMon:: jr .done .calcFreshStats pop hl - ld bc, wPartyMon1HPExp - 1 - wPartyMon1 + ld bc, MON_HP_EXP - 1 add hl, bc ld b, $0 call CalcStats ; calculate fresh set of stats @@ -294,7 +294,7 @@ _AddEnemyMonToPlayerParty:: ld hl, wPartyMons ld a, [wPartyCount] dec a - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld e, l ld d, h @@ -379,12 +379,12 @@ _MoveMon:: ld a, [wMoveMonType] dec a ld hl, wPartyMons - ld bc, wPartyMon2 - wPartyMon1 ; $2c + ld bc, PARTYMON_STRUCT_LENGTH ld a, [wPartyCount] jr nz, .addMonOffset ; if it's PARTY_TO_BOX ld hl, wBoxMons - ld bc, wBoxMon2 - wBoxMon1 ; $21 + ld bc, BOXMON_STRUCT_LENGTH ld a, [wBoxCount] .addMonOffset dec a @@ -396,20 +396,20 @@ _MoveMon:: ld a, [wMoveMonType] and a ld hl, wBoxMons - ld bc, wBoxMon2 - wBoxMon1 ; $21 + ld bc, BOXMON_STRUCT_LENGTH jr z, .addMonOffset2 cp DAYCARE_TO_PARTY ld hl, wDayCareMon jr z, .copyMonData ld hl, wPartyMons - ld bc, wPartyMon2 - wPartyMon1 ; $2c + ld bc, PARTYMON_STRUCT_LENGTH .addMonOffset2 ld a, [wWhichPokemon] call AddNTimes .copyMonData push hl push de - ld bc, wBoxMon2 - wBoxMon1 + ld bc, BOXMON_STRUCT_LENGTH call CopyData pop de pop hl @@ -418,7 +418,7 @@ _MoveMon:: jr z, .findOTdest cp DAYCARE_TO_PARTY jr z, .findOTdest - ld bc, wBoxMon2 - wBoxMon1 + ld bc, BOXMON_STRUCT_LENGTH add hl, bc ld a, [hl] ; hl = Level inc de @@ -493,6 +493,7 @@ _MoveMon:: jr z, .done cp PARTY_TO_DAYCARE jr z, .done + ; returning mon to party, compute level and stats push hl srl a add $2 @@ -502,13 +503,13 @@ _MoveMon:: ld a, d ld [wCurEnemyLevel], a pop hl - ld bc, wBoxMon2 - wBoxMon1 - add hl, bc + ld bc, BOXMON_STRUCT_LENGTH + add hl, bc ; hl = wPartyMon*Level ld [hli], a ld d, h ld e, l - ld bc, -18 - add hl, bc + ld bc, (MON_HP_EXP - 1) - MON_STATS + add hl, bc ; hl = wPartyMon*HPExp - 1 ld b, $1 call CalcStats .done diff --git a/engine/pokemon/bills_pc.asm b/engine/pokemon/bills_pc.asm index 0fcdedc6..09adfa37 100644 --- a/engine/pokemon/bills_pc.asm +++ b/engine/pokemon/bills_pc.asm @@ -352,11 +352,11 @@ BoxNoPCText: KnowsHMMove:: ; returns whether mon with party index [wWhichPokemon] knows an HM move ld hl, wPartyMon1Moves - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH jr .next ; unreachable ld hl, wBoxMon1Moves - ld bc, wBoxMon2 - wBoxMon1 + ld bc, BOXMON_STRUCT_LENGTH .next ld a, [wWhichPokemon] call AddNTimes diff --git a/engine/pokemon/evos_moves.asm b/engine/pokemon/evos_moves.asm index 1b92a093..794cb164 100644 --- a/engine/pokemon/evos_moves.asm +++ b/engine/pokemon/evos_moves.asm @@ -177,13 +177,13 @@ Evolution_PartyMonLoop: ; loop over party mons call CalcStats ld a, [wWhichPokemon] ld hl, wPartyMon1 - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld e, l ld d, h push hl push bc - ld bc, wPartyMon1MaxHP - wPartyMon1 + ld bc, MON_MAXHP add hl, bc ld a, [hli] ld b, a @@ -357,7 +357,7 @@ LearnMoveFromLevelUp: ; If it is not 0, this function will not work properly. ld hl, wPartyMon1Moves ld a, [wWhichPokemon] - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes .next ld b, NUM_MOVES @@ -458,7 +458,7 @@ WriteMonMoves: ; shift PP as well if learning moves from day care push de - ld bc, wPartyMon1PP - (wPartyMon1Moves + 3) + ld bc, MON_PP - (MON_MOVES + 3) add hl, bc ld d, h ld e, l @@ -477,7 +477,7 @@ WriteMonMoves: ; write move PP value if learning moves from day care push hl ld a, [hl] - ld hl, wPartyMon1PP - wPartyMon1Moves + ld hl, MON_PP - MON_MOVES add hl, de push hl dec a diff --git a/engine/pokemon/learn_move.asm b/engine/pokemon/learn_move.asm index 62ffeefd..b57fedcd 100644 --- a/engine/pokemon/learn_move.asm +++ b/engine/pokemon/learn_move.asm @@ -10,7 +10,7 @@ LearnMove: DontAbandonLearning: ld hl, wPartyMon1Moves - ld bc, wPartyMon2Moves - wPartyMon1Moves + ld bc, PARTYMON_STRUCT_LENGTH ld a, [wWhichPokemon] call AddNTimes ld d, h @@ -38,7 +38,7 @@ DontAbandonLearning: .next ld a, [wMoveNum] ld [hl], a - ld bc, wPartyMon1PP - wPartyMon1Moves + ld bc, MON_PP - MON_MOVES add hl, bc push hl push de @@ -66,7 +66,7 @@ DontAbandonLearning: ld de, wBattleMonMoves ld bc, NUM_MOVES call CopyData - ld bc, wPartyMon1PP - wPartyMon1OTID + ld bc, MON_PP - MON_OTID add hl, bc ld de, wBattleMonPP ld bc, NUM_MOVES diff --git a/engine/pokemon/load_mon_data.asm b/engine/pokemon/load_mon_data.asm index 7a39f083..d90b9cd8 100644 --- a/engine/pokemon/load_mon_data.asm +++ b/engine/pokemon/load_mon_data.asm @@ -23,7 +23,7 @@ LoadMonData_:: call GetMonHeader ld hl, wPartyMons - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH ld a, [wMonDataLocation] cp ENEMY_PARTY_DATA jr c, .getMonEntry @@ -33,7 +33,7 @@ LoadMonData_:: cp 2 ld hl, wBoxMons - ld bc, wBoxMon2 - wBoxMon1 + ld bc, BOXMON_STRUCT_LENGTH jr z, .getMonEntry ld hl, wDayCareMon @@ -45,5 +45,5 @@ LoadMonData_:: .copyMonData ld de, wLoadedMon - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH jp CopyData diff --git a/engine/pokemon/remove_mon.asm b/engine/pokemon/remove_mon.asm index 60ec8c27..ee47f0c8 100644 --- a/engine/pokemon/remove_mon.asm +++ b/engine/pokemon/remove_mon.asm @@ -2,15 +2,16 @@ _RemovePokemon:: ld hl, wPartyCount ld a, [wRemoveMonFromBox] and a - jr z, .usePartyCount + jr z, .gotCount ld hl, wBoxCount -.usePartyCount +.gotCount ld a, [hl] dec a ld [hli], a + ld a, [wWhichPokemon] ld c, a - ld b, $0 + ld b, 0 add hl, bc ld e, l ld d, h @@ -21,21 +22,27 @@ _RemovePokemon:: ld [hli], a inc a ; reached terminator? jr nz, .shiftMonSpeciesLoop ; if not, continue shifting species + ld hl, wPartyMonOT ld d, PARTY_LENGTH - 1 ; max number of pokemon to shift ld a, [wRemoveMonFromBox] and a - jr z, .usePartyMonOTs + jr z, .gotOTsPointer ld hl, wBoxMonOT ld d, MONS_PER_BOX - 1 -.usePartyMonOTs +.gotOTsPointer ld a, [wWhichPokemon] call SkipFixedLengthTextEntries ld a, [wWhichPokemon] cp d ; are we removing the last pokemon? jr nz, .notRemovingLastMon ; if not, shift the pokemon below - ld [hl], $ff ; else, write the terminator and return + + ; bug: to erase a string, this should be ld [hl], '@' + ; This is not needed, as wBoxSpecies/wPartySpecies determine if a slot is used. + ; Besides, existing mon nick is left untouched + ld [hl], $ff ret + .notRemovingLastMon ld d, h ld e, l @@ -44,44 +51,49 @@ _RemovePokemon:: ld bc, wPartyMonNicks ld a, [wRemoveMonFromBox] and a - jr z, .usePartyMonNicks + jr z, .gotNicksPointer ld bc, wBoxMonNicks -.usePartyMonNicks +.gotNicksPointer call CopyDataUntil + ld hl, wPartyMons - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH ld a, [wRemoveMonFromBox] and a - jr z, .usePartyMonStructs + jr z, .gotMonStructs ld hl, wBoxMons - ld bc, wBoxMon2 - wBoxMon1 -.usePartyMonStructs + ld bc, BOXMON_STRUCT_LENGTH +.gotMonStructs ld a, [wWhichPokemon] call AddNTimes ; get address of the pokemon removed - ld d, h ; store in de for CopyDataUntil + + ld d, h ; de = start address for CopyDataUntil ld e, l ld a, [wRemoveMonFromBox] and a - jr z, .copyUntilPartyMonOTs - ld bc, wBoxMon2 - wBoxMon1 - add hl, bc ; get address of pokemon after the pokemon removed - ld bc, wBoxMonOT ; address of when to stop copying - jr .continue -.copyUntilPartyMonOTs - ld bc, wPartyMon2 - wPartyMon1 - add hl, bc ; get address of pokemon after the pokemon removed - ld bc, wPartyMonOT ; address of when to stop copying -.continue - call CopyDataUntil ; shift all pokemon data after the removed mon to the removed mon's location + jr z, .copyUntilPartyMonOT +; copy until wBoxMonOT + ld bc, BOXMON_STRUCT_LENGTH + add hl, bc ; get address of next slot + ld bc, wBoxMonOT + jr .shiftOTs +.copyUntilPartyMonOT + ld bc, PARTYMON_STRUCT_LENGTH + add hl, bc ; get address of next slot + ld bc, wPartyMonOT +.shiftOTs + call CopyDataUntil ; shift all pokemon data up one slot + ld hl, wPartyMonNicks ld a, [wRemoveMonFromBox] and a - jr z, .usePartyMonNicks2 + jr z, .gotNicksPointer2 ld hl, wBoxMonNicks -.usePartyMonNicks2 +.gotNicksPointer2 ld bc, NAME_LENGTH ld a, [wWhichPokemon] call AddNTimes + ld d, h ld e, l ld bc, NAME_LENGTH @@ -89,7 +101,7 @@ _RemovePokemon:: ld bc, wPartyMonNicksEnd ld a, [wRemoveMonFromBox] and a - jr z, .copyUntilPartyMonNicksEnd + jr z, .shiftMonNicks ld bc, wBoxMonNicksEnd -.copyUntilPartyMonNicksEnd - jp CopyDataUntil +.shiftMonNicks + jp CopyDataUntil ; shift all pokemon nicknames up one slot diff --git a/engine/pokemon/set_types.asm b/engine/pokemon/set_types.asm index 2cf8f14c..d42c3cf3 100644 --- a/engine/pokemon/set_types.asm +++ b/engine/pokemon/set_types.asm @@ -1,7 +1,7 @@ ; updates the types of a party mon (pointed to in hl) to the ones of the mon specified in [wPokedexNum] SetPartyMonTypes: call GetPredefRegisters - ld bc, wPartyMon1Type - wPartyMon1 ; $5 + ld bc, MON_TYPE add hl, bc ld a, [wPokedexNum] ld [wCurSpecies], a diff --git a/engine/pokemon/status_screen.asm b/engine/pokemon/status_screen.asm index 80cdfb17..9c708a22 100644 --- a/engine/pokemon/status_screen.asm +++ b/engine/pokemon/status_screen.asm @@ -361,7 +361,7 @@ StatusScreen2: pop de pop hl push hl - ld bc, wPartyMon1PP - wPartyMon1Moves - 1 + ld bc, MON_PP - MON_MOVES - 1 add hl, bc ld a, [hl] and PP_MASK diff --git a/home/list_menu.asm b/home/list_menu.asm index 00b5704a..d0d3f732 100644 --- a/home/list_menu.asm +++ b/home/list_menu.asm @@ -456,7 +456,7 @@ PrintListMenuEntries:: ld [wLoadedMonLevel], a .skipCopyingLevel pop hl - ld bc, $1c + ld bc, SCREEN_WIDTH + 8 ; 1 row down and 8 columns right add hl, bc call PrintLevel pop af diff --git a/home/move_mon.asm b/home/move_mon.asm index 45b10322..cb19d0e3 100644 --- a/home/move_mon.asm +++ b/home/move_mon.asm @@ -94,7 +94,7 @@ CalcStat:: srl c pop hl push bc - ld bc, wPartyMon1DVs - (wPartyMon1HPExp - 1) ; also wEnemyMonDVs - wEnemyMonHP + ld bc, MON_DVS - (MON_HP_EXP - 1) add hl, bc pop bc ld a, c diff --git a/macros/ram.asm b/macros/ram.asm index 61358434..5f7c5228 100644 --- a/macros/ram.asm +++ b/macros/ram.asm @@ -4,8 +4,6 @@ MACRO? flag_array ds ((\1) + 7) / 8 ENDM -DEF BOX_STRUCT_LENGTH EQU 25 + NUM_MOVES * 2 - MACRO box_struct \1Species:: db \1HP:: dw diff --git a/ram/wram.asm b/ram/wram.asm index 0b00d272..fff7f703 100644 --- a/ram/wram.asm +++ b/ram/wram.asm @@ -1212,7 +1212,7 @@ wTrainerPicPointer:: dw ds 1 UNION -wTempMoveNameBuffer:: ds ITEM_NAME_LENGTH + 1 +wTempMoveNameBuffer:: ds MOVE_NAME_LENGTH NEXTU ; The name of the mon that is learning a move. @@ -1274,6 +1274,7 @@ wCriticalHitOrOHKO:: db wMoveMissed:: db +wBattleStatusData:: ; always 0 wPlayerStatsToDouble:: db ; always 0 @@ -1331,6 +1332,7 @@ wPlayerNumHits:: db ENDU ds 2 +wBattleStatusDataEnd:: ; non-zero when an item or move that allows escape from battle was used wEscapedFromBattle:: db @@ -1560,7 +1562,8 @@ wMoves:: ds NUM_MOVES wMoveNum:: db -wMovesString:: ds 56 +; concatenated move name list where intermediate '@' are replaced with '' +wMovesString:: ds NUM_MOVES * MOVE_NAME_LENGTH wUnusedCurMapTilesetCopy:: db diff --git a/scripts/Daycare.asm b/scripts/Daycare.asm index 05b69935..f7354e37 100644 --- a/scripts/Daycare.asm +++ b/scripts/Daycare.asm @@ -173,7 +173,7 @@ DaycareGentlemanText: ld a, [wPartyCount] dec a push af - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH push bc ld hl, wPartyMon1Moves call AddNTimes @@ -190,7 +190,7 @@ DaycareGentlemanText: call AddNTimes ld d, h ld e, l - ld bc, wPartyMon1MaxHP - wPartyMon1HP + ld bc, MON_MAXHP - MON_HP add hl, bc ld a, [hli] ld [de], a diff --git a/scripts/NameRatersHouse.asm b/scripts/NameRatersHouse.asm index 61b10a3e..b1e3bf95 100644 --- a/scripts/NameRatersHouse.asm +++ b/scripts/NameRatersHouse.asm @@ -19,7 +19,7 @@ NameRatersHouseCheckMonOTScript: call .check_match_loop jr c, .no_match ld hl, wPartyMon1OTID - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH ld a, [wWhichPokemon] call AddNTimes ld de, wPlayerID -- cgit v1.3.1-sl0p From 9a6bb3ed0c44155a711d66df4d8996d9396ebd6a Mon Sep 17 00:00:00 2001 From: Rangi <35663410+Rangi42@users.noreply.github.com> Date: Mon, 1 Dec 2025 11:00:56 -0500 Subject: Define player and rival names once, to be used in two places (#545) --- constants/player_constants.asm | 21 +++++++++++++++++++++ data/player/names.asm | 15 +++++++++++++++ data/player/names_list.asm | 17 +++++++++++++++++ data/player_names.asm | 31 ------------------------------- data/player_names_list.asm | 27 --------------------------- engine/movie/oak_speech/oak_speech2.asm | 4 ++-- includes.asm | 1 + 7 files changed, 56 insertions(+), 60 deletions(-) create mode 100644 constants/player_constants.asm create mode 100644 data/player/names.asm create mode 100644 data/player/names_list.asm delete mode 100644 data/player_names.asm delete mode 100644 data/player_names_list.asm (limited to 'engine') diff --git a/constants/player_constants.asm b/constants/player_constants.asm new file mode 100644 index 00000000..666ccf99 --- /dev/null +++ b/constants/player_constants.asm @@ -0,0 +1,21 @@ +DEF NUM_PLAYER_NAMES EQU 3 + +IF DEF(_RED) +DEF PLAYERNAME1 EQUS "RED" +DEF PLAYERNAME2 EQUS "ASH" +DEF PLAYERNAME3 EQUS "JACK" + +DEF RIVALNAME1 EQUS "BLUE" +DEF RIVALNAME2 EQUS "GARY" +DEF RIVALNAME3 EQUS "JOHN" +ENDC + +IF DEF(_BLUE) +DEF PLAYERNAME1 EQUS "BLUE" +DEF PLAYERNAME2 EQUS "GARY" +DEF PLAYERNAME3 EQUS "JOHN" + +DEF RIVALNAME1 EQUS "RED" +DEF RIVALNAME2 EQUS "ASH" +DEF RIVALNAME3 EQUS "JACK" +ENDC diff --git a/data/player/names.asm b/data/player/names.asm new file mode 100644 index 00000000..67f2df36 --- /dev/null +++ b/data/player/names.asm @@ -0,0 +1,15 @@ +; see constants/player_constants.asm + +DefaultNamesPlayer: + db "NEW NAME" +FOR n, 1, NUM_PLAYER_NAMES + 1 + next #PLAYERNAME{d:n} +ENDR + db "@" + +DefaultNamesRival: + db "NEW NAME" +FOR n, 1, NUM_PLAYER_NAMES + 1 + next #RIVALNAME{d:n} +ENDR + db "@" diff --git a/data/player/names_list.asm b/data/player/names_list.asm new file mode 100644 index 00000000..786c1229 --- /dev/null +++ b/data/player/names_list.asm @@ -0,0 +1,17 @@ +; see constants/player_constants.asm + +DefaultNamesPlayerList: + db "NEW NAME@" + list_start +FOR n, 1, NUM_PLAYER_NAMES + 1 + li #PLAYERNAME{d:n} +ENDR + assert_list_length NUM_PLAYER_NAMES + +DefaultNamesRivalList: + db "NEW NAME@" + list_start +FOR n, 1, NUM_PLAYER_NAMES + 1 + li #RIVALNAME{d:n} +ENDR + assert_list_length NUM_PLAYER_NAMES diff --git a/data/player_names.asm b/data/player_names.asm deleted file mode 100644 index f57c9877..00000000 --- a/data/player_names.asm +++ /dev/null @@ -1,31 +0,0 @@ -IF DEF(_RED) -DefaultNamesPlayer: - db "NEW NAME" - next "RED" - next "ASH" - next "JACK" - db "@" - -DefaultNamesRival: - db "NEW NAME" - next "BLUE" - next "GARY" - next "JOHN" - db "@" -ENDC - -IF DEF(_BLUE) -DefaultNamesPlayer: - db "NEW NAME" - next "BLUE" - next "GARY" - next "JOHN" - db "@" - -DefaultNamesRival: - db "NEW NAME" - next "RED" - next "ASH" - next "JACK" - db "@" -ENDC diff --git a/data/player_names_list.asm b/data/player_names_list.asm deleted file mode 100644 index 56075df0..00000000 --- a/data/player_names_list.asm +++ /dev/null @@ -1,27 +0,0 @@ -IF DEF(_RED) -DefaultNamesPlayerList: - db "NEW NAME@" - db "RED@" - db "ASH@" - db "JACK@" - -DefaultNamesRivalList: - db "NEW NAME@" - db "BLUE@" - db "GARY@" - db "JOHN@" -ENDC - -IF DEF(_BLUE) -DefaultNamesPlayerList: - db "NEW NAME@" - db "BLUE@" - db "GARY@" - db "JOHN@" - -DefaultNamesRivalList: - db "NEW NAME@" - db "RED@" - db "ASH@" - db "JACK@" -ENDC diff --git a/engine/movie/oak_speech/oak_speech2.asm b/engine/movie/oak_speech/oak_speech2.asm index df05091a..bff12f62 100644 --- a/engine/movie/oak_speech/oak_speech2.asm +++ b/engine/movie/oak_speech/oak_speech2.asm @@ -187,7 +187,7 @@ DisplayIntroNameTextBox: .namestring db "NAME@" -INCLUDE "data/player_names.asm" +INCLUDE "data/player/names.asm" GetDefaultName: ; a = name index @@ -213,7 +213,7 @@ GetDefaultName: ld bc, NAME_BUFFER_LENGTH jp CopyData -INCLUDE "data/player_names_list.asm" +INCLUDE "data/player/names_list.asm" LinkMenuEmptyText: text_end diff --git a/includes.asm b/includes.asm index 5087809c..781bb0b1 100644 --- a/includes.asm +++ b/includes.asm @@ -31,6 +31,7 @@ INCLUDE "constants/item_constants.asm" INCLUDE "constants/pokemon_constants.asm" INCLUDE "constants/pokedex_constants.asm" INCLUDE "constants/pokemon_data_constants.asm" +INCLUDE "constants/player_constants.asm" INCLUDE "constants/trainer_constants.asm" INCLUDE "constants/icon_constants.asm" INCLUDE "constants/sprite_constants.asm" -- cgit v1.3.1-sl0p From 8bb03542bd0dd01b1e4fce990751edc0822a878f Mon Sep 17 00:00:00 2001 From: Narishma-gb <194818981+Narishma-gb@users.noreply.github.com> Date: Mon, 1 Dec 2025 20:46:28 +0100 Subject: Update `StatusScreen`, add `*_STATS_BOX` constants (#546) --- constants/menu_constants.asm | 5 +++ engine/battle/experience.asm | 2 +- engine/items/item_effects.asm | 22 ++++++------- engine/pokemon/status_screen.asm | 70 ++++++++++++++++++---------------------- home/pics.asm | 4 +-- 5 files changed, 51 insertions(+), 52 deletions(-) (limited to 'engine') diff --git a/constants/menu_constants.asm b/constants/menu_constants.asm index a6e035e7..c4476e03 100644 --- a/constants/menu_constants.asm +++ b/constants/menu_constants.asm @@ -90,3 +90,8 @@ DEF FIRST_PARTY_MENU_TEXT_ID EQU const_value const NAME_PLAYER_SCREEN ; 0 const NAME_RIVAL_SCREEN ; 1 const NAME_MON_SCREEN ; 2 + +; Stats box layout (see engine/pokemon/status_screen.asm) + const_def + const STATUS_SCREEN_STATS_BOX ; 0 + const LEVEL_UP_STATS_BOX ; 1 diff --git a/engine/battle/experience.asm b/engine/battle/experience.asm index 4e44643c..f9f47f82 100644 --- a/engine/battle/experience.asm +++ b/engine/battle/experience.asm @@ -245,7 +245,7 @@ GainExperience: xor a ; PLAYER_PARTY_DATA ld [wMonDataLocation], a call LoadMonData - ld d, $1 + ld d, LEVEL_UP_STATS_BOX callfar PrintStatsBox call WaitForTextScrollButtonPress call LoadScreenTilesFromBuffer1 diff --git a/engine/items/item_effects.asm b/engine/items/item_effects.asm index a716ebb7..90853bee 100644 --- a/engine/items/item_effects.asm +++ b/engine/items/item_effects.asm @@ -1400,15 +1400,15 @@ ItemUseMedicine: xor a ; PLAYER_PARTY_DATA ld [wMonDataLocation], a call LoadMonData - ld d, $01 - callfar PrintStatsBox ; display new stats text box - call WaitForTextScrollButtonPress ; wait for button press + ld d, LEVEL_UP_STATS_BOX + callfar PrintStatsBox + call WaitForTextScrollButtonPress xor a ; PLAYER_PARTY_DATA ld [wMonDataLocation], a - predef LearnMoveFromLevelUp ; learn level up move, if any + predef LearnMoveFromLevelUp xor a ld [wForceEvolution], a - callfar TryEvolvingMon ; evolve pokemon, if appropriate + callfar TryEvolvingMon ld a, $01 ld [wUpdateSpritesEnabled], a pop af @@ -1433,11 +1433,11 @@ INCLUDE "data/battle/stat_names.asm" ItemUseBait: ld hl, ThrewBaitText call PrintText - ld hl, wEnemyMonActualCatchRate ; catch rate + ld hl, wEnemyMonActualCatchRate srl [hl] ; halve catch rate ld a, BAIT_ANIM - ld hl, wSafariBaitFactor ; bait factor - ld de, wSafariEscapeFactor ; escape factor + ld hl, wSafariBaitFactor + ld de, wSafariEscapeFactor jr BaitRockCommon ; for CASCADEBADGE when used from the @@ -1446,7 +1446,7 @@ ItemUseBait: ItemUseRock: ld hl, ThrewRockText call PrintText - ld hl, wEnemyMonActualCatchRate ; catch rate + ld hl, wEnemyMonActualCatchRate ld a, [hl] add a ; double catch rate jr nc, .noCarry @@ -1454,8 +1454,8 @@ ItemUseRock: .noCarry ld [hl], a ld a, ROCK_ANIM - ld hl, wSafariEscapeFactor ; escape factor - ld de, wSafariBaitFactor ; bait factor + ld hl, wSafariEscapeFactor + ld de, wSafariBaitFactor BaitRockCommon: ld [wAnimationID], a diff --git a/engine/pokemon/status_screen.asm b/engine/pokemon/status_screen.asm index 9c708a22..84a56d5a 100644 --- a/engine/pokemon/status_screen.asm +++ b/engine/pokemon/status_screen.asm @@ -61,8 +61,6 @@ DrawHP_: pop de ret - -; Predef 0x37 StatusScreen: call LoadMonData ld a, [wMonDataLocation] @@ -75,7 +73,7 @@ StatusScreen: ld hl, wLoadedMonHPExp - 1 ld de, wLoadedMonStats ld b, $1 - call CalcStats ; Recalculate stats + call CalcStats .DontRecalculate ld hl, wStatusFlags2 set BIT_NO_AUDIO_FADE_OUT, [hl] @@ -117,8 +115,8 @@ StatusScreen: lb bc, 8, 6 call DrawLineBox ; Draws the box around types, ID No. and OT hlcoord 10, 9 - ld de, Type1Text - call PlaceString ; "TYPE1/" + ld de, TypesIDNoOTText + call PlaceString hlcoord 11, 3 predef DrawHP ld hl, wStatusScreenHPBarColor @@ -137,7 +135,7 @@ StatusScreen: ld de, StatusText call PlaceString ; "STATUS/" hlcoord 14, 2 - call PrintLevel ; Pokémon level + call PrintLevel ld a, [wMonHIndex] ld [wPokedexNum], a ld [wCurSpecies], a @@ -164,7 +162,7 @@ StatusScreen: ld de, wLoadedMonOTID lb bc, LEADING_ZEROES | 2, 5 call PrintNumber ; ID Number - ld d, $0 + ld d, STATUS_SCREEN_STATS_BOX call PrintStatsBox call Delay3 call GBPalNormal @@ -204,20 +202,11 @@ NamePointers2: dw wBoxMonNicks dw wDayCareMonName -Type1Text: +TypesIDNoOTText: db "TYPE1/" - next "" - ; fallthrough -Type2Text: - db "TYPE2/" - next "" - ; fallthrough -IDNoText: - db "№/" - next "" - ; fallthrough -OTText: - db "OT/" + next "TYPE2/" + next "№/" + next "OT/" next "@" StatusText: @@ -248,40 +237,42 @@ PTile: INCBIN "gfx/font/P.1bpp" PrintStatsBox: ld a, d - and a ; a is 0 from the status screen - jr nz, .DifferentBox + ASSERT STATUS_SCREEN_STATS_BOX == 0 + and a + jr nz, .LevelUpStatsBox ; battle or Rare Candy hlcoord 0, 8 ld b, 8 ld c, 8 - call TextBoxBorder ; Draws the box - hlcoord 1, 9 ; Start printing stats from here - ld bc, $19 ; Number offset + call TextBoxBorder + hlcoord 1, 9 + ld bc, SCREEN_WIDTH + 5 ; one row down and 5 columns right jr .PrintStats -.DifferentBox +.LevelUpStatsBox hlcoord 9, 2 ld b, 8 ld c, 9 call TextBoxBorder hlcoord 11, 3 - ld bc, $18 + ld bc, SCREEN_WIDTH + 4 ; one row down and 4 columns right .PrintStats push bc push hl - ld de, StatsText + ld de, .StatsText call PlaceString pop hl pop bc add hl, bc ld de, wLoadedMonAttack lb bc, 2, 3 - call PrintStat + call .PrintStat ld de, wLoadedMonDefense - call PrintStat + call .PrintStat ld de, wLoadedMonSpeed - call PrintStat + call .PrintStat ld de, wLoadedMonSpecial jp PrintNumber -PrintStat: + +.PrintStat: push hl call PrintNumber pop hl @@ -289,7 +280,7 @@ PrintStat: add hl, de ret -StatsText: +.StatsText: db "ATTACK" next "DEFENSE" next "SPEED" @@ -323,10 +314,10 @@ StatusScreen2: call PlaceString ; Print moves ld a, [wNumMovesMinusOne] inc a - ld c, a - ld a, $4 + ld c, a ; number of known moves + ld a, NUM_MOVES sub c - ld b, a ; Number of moves ? + ld b, a ; number of blank moves hlcoord 11, 10 ld de, SCREEN_WIDTH * 2 ld a, '' @@ -386,7 +377,7 @@ StatusScreen2: pop bc inc b ld a, b - cp $4 + cp NUM_MOVES jr nz, .PrintPP .PPDone hlcoord 9, 3 @@ -415,8 +406,11 @@ StatusScreen2: hlcoord 7, 6 lb bc, 3, 7 call PrintNumber ; exp needed to level up + + ; unneeded, this clears the diacritic characters in JPN versions hlcoord 9, 0 call StatusScreen_ClearName + hlcoord 9, 1 call StatusScreen_ClearName ld a, [wMonHIndex] @@ -468,7 +462,7 @@ StatusScreenExpText: next "LEVEL UP@" StatusScreen_ClearName: - ld bc, 10 + ld bc, NAME_LENGTH - 1 ld a, ' ' jp FillMemory diff --git a/home/pics.asm b/home/pics.asm index 475e834d..5ebb8f82 100644 --- a/home/pics.asm +++ b/home/pics.asm @@ -188,9 +188,9 @@ InterlaceMergeSpriteBuffers:: or c jr nz, .swapLoop .notFlipped - pop hl + pop hl ; hl = output address ld de, sSpriteBuffer1 - ld c, (2 * SPRITEBUFFERSIZE) / TILE_SIZE ; $31, number of 16 byte chunks to be copied + ld c, PIC_SIZE ; tiles ldh a, [hLoadedROMBank] ld b, a jp CopyVideoData -- cgit v1.3.1-sl0p From e9d3324bc06faa7de3b7a35d1f9429e610e8a761 Mon Sep 17 00:00:00 2001 From: Narishma-gb <194818981+Narishma-gb@users.noreply.github.com> Date: Mon, 15 Dec 2025 21:14:17 +0100 Subject: Comment more unreferenced local labels (#550) --- engine/battle/animations.asm | 18 +++++++------- engine/battle/core.asm | 39 ++++++++++++++++--------------- engine/battle/draw_hud_pokeball_gfx.asm | 2 +- engine/battle/effects.asm | 12 ++++++---- engine/battle/ghost_marowak_anim.asm | 2 +- engine/battle/move_effects/substitute.asm | 4 ++-- engine/battle/move_effects/transform.asm | 5 ++++ engine/events/diploma.asm | 4 ++-- engine/events/pokemart.asm | 4 ++-- engine/events/prize_menu.asm | 14 +++++------ engine/flag_action.asm | 4 ++-- engine/items/inventory.asm | 1 - engine/items/item_effects.asm | 18 +++++++------- engine/link/cable_club.asm | 2 +- engine/menus/main_menu.asm | 7 +++--- engine/menus/naming_screen.asm | 36 ++++++++++++++-------------- engine/menus/party_menu.asm | 4 ++-- engine/menus/pokedex.asm | 14 +++++------ engine/menus/start_sub_menus.asm | 6 ++--- engine/menus/swap_items.asm | 2 +- engine/movie/credits.asm | 21 ++++++++++------- engine/overworld/auto_movement.asm | 4 ++-- engine/overworld/missable_objects.asm | 4 ++-- engine/overworld/movement.asm | 11 +++++---- engine/overworld/pathfinding.asm | 4 ++-- engine/overworld/push_boulder.asm | 2 +- engine/pokemon/add_mon.asm | 4 ++-- engine/pokemon/load_mon_data.asm | 2 +- home/joypad2.asm | 4 ++-- home/list_menu.asm | 14 +++++------ home/load_font.asm | 6 ++--- home/map_objects.asm | 4 ++-- home/move_mon.asm | 2 +- home/overworld.asm | 9 ++++--- home/print_bcd.asm | 4 ++-- home/print_num.asm | 17 +++++++++----- home/print_text.asm | 2 +- home/start_menu.asm | 2 +- home/trainers.asm | 24 +++++++++---------- home/window.asm | 12 +++++----- macros/scripts/events.asm | 2 +- scripts/BillsHouse.asm | 4 ++-- scripts/Colosseum.asm | 1 + 43 files changed, 189 insertions(+), 168 deletions(-) (limited to 'engine') diff --git a/engine/battle/animations.asm b/engine/battle/animations.asm index f66be640..eac4115a 100644 --- a/engine/battle/animations.asm +++ b/engine/battle/animations.asm @@ -22,7 +22,7 @@ DrawFrameBlock: jp z, .flipHorizontalTranslateDown ; SUBANIMTYPE_HFLIP dec a jr z, .flipBaseCoords ; SUBANIMTYPE_COORDFLIP -.noTransformation +; no transformation ld a, [wBaseCoordY] add [hl] ld [de], a ; store Y @@ -130,7 +130,7 @@ DrawFrameBlock: ld a, [wNumFBTiles] cp c jp nz, .loop ; go back up if there are more tiles to draw -.afterDrawingTiles +; after drawing tiles ld a, [wFBMode] cp FRAMEBLOCKMODE_02 jr z, .advanceFrameBlockDestAddr ; skip delay and don't clean OAM buffer @@ -185,7 +185,7 @@ PlayAnimation: jr z, .AnimationOver cp FIRST_SE_ID ; is this subanimation or a special effect? jr c, .playSubanimation -.doSpecialEffect +; do Special Effect ld c, a ld de, SpecialEffectPointers .searchSpecialEffectTableLoop @@ -295,11 +295,11 @@ LoadSubanimation: and %11100000 cp SUBANIMTYPE_ENEMY << 5 vc_hook_blue Reduce_move_anim_flashing_Blizzard - jr nz, .isNotType5 -.isType5 + jr nz, .isNotTypeEnemy +; subanim type enemy call GetSubanimationTransform2 jr .saveTransformation -.isNotType5 +.isNotTypeEnemy vc_hook Reduce_move_anim_flashing_Hyper_Beam call GetSubanimationTransform1 .saveTransformation @@ -427,11 +427,11 @@ MoveAnimation: call PlayAnimation vc_hook_red Stop_reducing_move_anim_flashing_Bubblebeam_Mega_Kick vc_hook_blue Stop_reducing_move_anim_flashing_Spore - jr .next4 + jr .next .animationsDisabled ld c, 30 call DelayFrames -.next4 +.next vc_hook_red Stop_reducing_move_anim_flashing vc_hook_blue Stop_reducing_move_anim_flashing_Rock_Slide_Dream_Eater call PlayApplyingAttackAnimation ; shake the screen or flash the pic in and out (to show damage) @@ -1097,6 +1097,8 @@ SetAnimationBGPalette: ldh [rBGP], a ret +AnimationUnusedShakeScreen: ; unreferenced +; Shakes the screen for a while. ld b, $5 AnimationShakeScreenVertically: diff --git a/engine/battle/core.asm b/engine/battle/core.asm index 44fd9a70..dd9fbc71 100644 --- a/engine/battle/core.asm +++ b/engine/battle/core.asm @@ -1247,7 +1247,7 @@ SlideTrainerPicOffScreen: ldh a, [hSlideAmount] cp 8 jr z, .slideRight -.slideLeft ; slide player sprite off screen +; slide player sprite left off screen ld a, [hld] ld [hli], a inc hl @@ -3557,11 +3557,12 @@ CheckPlayerStatusConditions: ld hl, AttackContinuesText call PrintText ld a, [wPlayerNumAttacksLeft] - dec a ; did multi-turn move end? + dec a ld [wPlayerNumAttacksLeft], a - ld hl, GetPlayerAnimationType ; if it didn't, skip damage calculation (deal damage equal to last hit), - ; DecrementPP and MoveHitTest - jp nz, .returnToHL + ld hl, GetPlayerAnimationType ; skip damage calculation (deal damage equal to last hit), + ; DecrementPP and MoveHitTest + jp nz, .returnToHL ; redundant leftover code, the case wEnemyNumAttacksLeft == 0 + ; is handled within CheckNumAttacksLeft jp .returnToHL .RageCheck @@ -3626,7 +3627,7 @@ ConfusedNoMoreText: text_far _ConfusedNoMoreText text_end -SavingEnergyText: +SavingEnergyText: ; unreferenced text_far _SavingEnergyText text_end @@ -4171,7 +4172,7 @@ GetDamageVarsForPlayerAttack: ld a, [hl] ; a = [wPlayerMoveType] cp SPECIAL ; types >= SPECIAL are all special jr nc, .specialAttack -.physicalAttack +; physical attack ld hl, wEnemyMonDefense ld a, [hli] ld b, a @@ -4284,7 +4285,7 @@ GetDamageVarsForEnemyAttack: ld a, [hl] ; a = [wEnemyMoveType] cp SPECIAL ; types >= SPECIAL are all special jr nc, .specialAttack -.physicalAttack +; physical attack ld hl, wBattleMonDefense ld a, [hli] ld b, a @@ -5301,7 +5302,6 @@ AdjustDamageForMoveType: ld [hl], a or b ; is damage 0? jr nz, .skipTypeImmunity -.typeImmunity ; if damage is 0, make the move miss ; this only occurs if a move that would do 2 or 3 damage is 0.25x effective against the target inc a @@ -5394,7 +5394,7 @@ MoveHitTest: ldh a, [hWhoseTurn] and a jr nz, .enemyTurn -.playerTurn +; player's turn ; this checks if the move effect is disallowed by mist ld a, [wPlayerMoveEffect] cp ATTACK_DOWN1_EFFECT @@ -5466,12 +5466,12 @@ MoveHitTest: ld [wMoveMissed], a ldh a, [hWhoseTurn] and a - jr z, .playerTurn2 -.enemyTurn2 + jr z, .playerTurn +; enemy's turn ld hl, wEnemyBattleStatus1 res USING_TRAPPING_MOVE, [hl] ; end multi-turn attack e.g. wrap ret -.playerTurn2 +.playerTurn ld hl, wPlayerBattleStatus1 res USING_TRAPPING_MOVE, [hl] ; end multi-turn attack e.g. wrap ret @@ -6063,10 +6063,11 @@ CheckEnemyStatusConditions: ld hl, AttackContinuesText call PrintText ld hl, wEnemyNumAttacksLeft - dec [hl] ; did multi-turn move end? - ld hl, GetEnemyAnimationType ; if it didn't, skip damage calculation (deal damage equal to last hit), + dec [hl] + ld hl, GetEnemyAnimationType ; skip damage calculation (deal damage equal to last hit), ; DecrementPP and MoveHitTest - jp nz, .enemyReturnToHL + jp nz, .enemyReturnToHL ; redundant leftover code, the case wEnemyNumAttacksLeft == 0 + ; is handled within CheckNumAttacksLeft jp .enemyReturnToHL .checkIfUsingRage ld a, [wEnemyBattleStatus2] @@ -6415,7 +6416,7 @@ QuarterSpeedDueToParalysis: ldh a, [hWhoseTurn] and a jr z, .playerTurn -.enemyTurn ; quarter the player's speed +; enemy's turn, quarter the player's speed ld a, [wBattleMonStatus] and 1 << PAR ret z ; return if player not paralysed @@ -6458,7 +6459,7 @@ HalveAttackDueToBurn: ldh a, [hWhoseTurn] and a jr z, .playerTurn -.enemyTurn ; halve the player's attack +; enemy's turn, halve the player's attack ld a, [wBattleMonStatus] and 1 << BRN ret z ; return if player not burnt @@ -6642,7 +6643,7 @@ LoadHudTilePatterns: ldh a, [rLCDC] add a ; is LCD disabled? jr c, .lcdEnabled -.lcdDisabled +; LCD disabled ld hl, BattleHudTiles1 ld de, vChars2 tile $6d ld bc, BattleHudTiles1End - BattleHudTiles1 diff --git a/engine/battle/draw_hud_pokeball_gfx.asm b/engine/battle/draw_hud_pokeball_gfx.asm index 768a6e20..adeaaf62 100644 --- a/engine/battle/draw_hud_pokeball_gfx.asm +++ b/engine/battle/draw_hud_pokeball_gfx.asm @@ -18,7 +18,7 @@ LoadPartyPokeballGfx: SetupOwnPartyPokeballs: call PlacePlayerHUDTiles - ld hl, wPartyMon1 + ld hl, wPartyMons ld de, wPartyCount call SetupPokeballs ld a, $60 diff --git a/engine/battle/effects.asm b/engine/battle/effects.asm index 2cef2521..22765140 100644 --- a/engine/battle/effects.asm +++ b/engine/battle/effects.asm @@ -230,7 +230,7 @@ FreezeBurnParalyzeEffect: jr z, .burn1 cp FREEZE_SIDE_EFFECT1 jr z, .freeze1 -; .paralyze1 +; paralyze1 ld a, 1 << PAR ld [wEnemyMonStatus], a call QuarterSpeedDueToParalysis ; quarter speed of affected mon @@ -283,7 +283,7 @@ FreezeBurnParalyzeEffect: jr z, .burn2 cp FREEZE_SIDE_EFFECT1 jr z, .freeze2 -; .paralyze2 +; paralyze2 ld a, 1 << PAR ld [wBattleMonStatus], a call QuarterSpeedDueToParalysis @@ -593,7 +593,7 @@ StatModifierDownEffect: ld a, [de] cp ATTACK_DOWN2_EFFECT - $16 ; $24 jr c, .ok - cp EVASION_DOWN2_EFFECT + $5 ; $44 + cp ATTACK_DOWN_SIDE_EFFECT ; move side effects, stat mod decrease is always 1 jr nc, .ok dec b ; stat down 2 effects only (dec mod again) jr nz, .ok @@ -711,7 +711,7 @@ CantLowerAnymore: MoveMissed: ld a, [de] - cp $44 + cp ATTACK_DOWN_SIDE_EFFECT ret nc jp ConditionalPrintButItFailed @@ -1321,7 +1321,7 @@ DisableEffect: cp LINK_STATE_BATTLING pop hl ; wEnemyMonMoves jr nz, .playerTurnNotLinkBattle -; .playerTurnLinkBattle +; player's turn, Link Battle push hl ld hl, wEnemyMonPP .enemyTurn @@ -1456,6 +1456,7 @@ PlayCurrentMoveAnimation2: .notEnemyTurn and a ret z +; fallthrough PlayBattleAnimation2: ; play animation ID at a and animation type 6 or 3 @@ -1482,6 +1483,7 @@ PlayCurrentMoveAnimation: .notEnemyTurn and a ret z +; fallthrough PlayBattleAnimation: ; play animation ID at a and predefined animation type diff --git a/engine/battle/ghost_marowak_anim.asm b/engine/battle/ghost_marowak_anim.asm index 1040f85f..efda9f8f 100644 --- a/engine/battle/ghost_marowak_anim.asm +++ b/engine/battle/ghost_marowak_anim.asm @@ -48,7 +48,7 @@ MarowakAnim: call Delay3 jp ClearSprites -; copies a mon pic's from background VRAM to sprite VRAM and sets up OAM +; copies a mon pic's from background VRAM to sprite VRAM and sets up OAM CopyMonPicFromBGToSpriteVRAM: ld de, vFrontPic ld hl, vSprites diff --git a/engine/battle/move_effects/substitute.asm b/engine/battle/move_effects/substitute.asm index e4311209..01d5a8a3 100644 --- a/engine/battle/move_effects/substitute.asm +++ b/engine/battle/move_effects/substitute.asm @@ -37,8 +37,8 @@ SubstituteEffect_: sbc 0 pop bc jr c, .notEnoughHP ; underflow means user would be left with negative health - ; bug: since it only branches on carry, it will possibly leave user with 0 HP -.userHasZeroOrMoreHP + ; bug: since it only branches on carry, it will possibly leave user with 0 HP +; user has 0 or more HP ld [hli], a ; save resulting HP after subtraction into current HP ld [hl], d ld h, b diff --git a/engine/battle/move_effects/transform.asm b/engine/battle/move_effects/transform.asm index 343fa3ca..95e17833 100644 --- a/engine/battle/move_effects/transform.asm +++ b/engine/battle/move_effects/transform.asm @@ -2,17 +2,22 @@ TransformEffect_: ld hl, wBattleMonSpecies ld de, wEnemyMonSpecies ld bc, wEnemyBattleStatus3 + ; bug: on enemy's turn, a is overloaded with hWhoseTurn, + ; before the check for INVULNERABLE ld a, [wEnemyBattleStatus1] ldh a, [hWhoseTurn] and a jr nz, .hitTest +; player's turn ld hl, wEnemyMonSpecies ld de, wBattleMonSpecies ld bc, wPlayerBattleStatus3 ld [wPlayerMoveListIndex], a + ; bug: this should be target's BattleStatus1 (i.e. wEnemyBattleStatus1) ld a, [wPlayerBattleStatus1] .hitTest bit INVULNERABLE, a ; is mon invulnerable to typical attacks? (fly/dig) + ; this check doesn't work due to above bugs jp nz, .failed push hl push de diff --git a/engine/events/diploma.asm b/engine/events/diploma.asm index 3d181210..e2a34a3b 100644 --- a/engine/events/diploma.asm +++ b/engine/events/diploma.asm @@ -73,8 +73,8 @@ DisplayDiploma:: jp GBPalNormal UnusedPlayerNameLengthFunc: -; Unused function that does a calculation involving the length of the player's -; name. +; Unused function that performs bc = -(player name's length) +; leftover from the JPN versions ld hl, wPlayerName lb bc, $ff, $00 .loop diff --git a/engine/events/pokemart.asm b/engine/events/pokemart.asm index b280c711..cb25ab4c 100644 --- a/engine/events/pokemart.asm +++ b/engine/events/pokemart.asm @@ -99,7 +99,7 @@ DisplayPokemartDialogue_:: dec a jr z, .sellMenuLoop -.sellItem +; sell item ld a, [wBoughtOrSoldItemInMart] and a jr nz, .skipSettingFlag1 @@ -177,7 +177,7 @@ DisplayPokemartDialogue_:: dec a jr z, .buyMenuLoop -.buyItem +; buy item call .isThereEnoughMoney jr c, .notEnoughMoney ld hl, wNumBagItems diff --git a/engine/events/prize_menu.asm b/engine/events/prize_menu.asm index 15b991ed..1f71af42 100644 --- a/engine/events/prize_menu.asm +++ b/engine/events/prize_menu.asm @@ -195,7 +195,7 @@ HandlePrizeChoice: .getMonName call GetMonName .givePrize - ld hl, SoYouWantPrizeTextPtr + ld hl, SoYouWantPrizeText call PrintText call YesNoChoice ld a, [wCurrentMenuItem] ; yes/no answer (Y=0, N=1) @@ -243,25 +243,25 @@ HandlePrizeChoice: predef SubBCDPredef jp PrintPrizePrice .bagFull - ld hl, PrizeRoomBagIsFullTextPtr + ld hl, PrizeRoomBagIsFullText jp PrintText .notEnoughCoins ld hl, SorryNeedMoreCoinsText jp PrintText .printOhFineThen - ld hl, OhFineThenTextPtr + ld hl, OhFineThenText jp PrintText UnknownPrizeData: ; XXX what's this? db $00,$01,$00,$01,$00,$01,$00,$00,$01 -HereYouGoTextPtr: +HereYouGoText: ; unreferenced text_far _HereYouGoText text_waitbutton text_end -SoYouWantPrizeTextPtr: +SoYouWantPrizeText: text_far _SoYouWantPrizeText text_end @@ -270,12 +270,12 @@ SorryNeedMoreCoinsText: text_waitbutton text_end -PrizeRoomBagIsFullTextPtr: +PrizeRoomBagIsFullText: text_far _OopsYouDontHaveEnoughRoomText text_waitbutton text_end -OhFineThenTextPtr: +OhFineThenText: text_far _OhFineThenText text_waitbutton text_end diff --git a/engine/flag_action.asm b/engine/flag_action.asm index dc516887..150bebab 100644 --- a/engine/flag_action.asm +++ b/engine/flag_action.asm @@ -43,10 +43,10 @@ FlagAction: ld a, b and a jr z, .reset - cp 2 + cp FLAG_TEST jr z, .read -.set +; set ld b, [hl] ld a, d or b diff --git a/engine/items/inventory.asm b/engine/items/inventory.asm index 6ac75ec7..84950a4e 100644 --- a/engine/items/inventory.asm +++ b/engine/items/inventory.asm @@ -118,7 +118,6 @@ RemoveItemFromInventory_:: jr nz, .skipMovingUpSlots ; if the remaining quantity is 0, ; remove the emptied item slot and move up all the following item slots -.moveSlotsUp ld e, l ld d, h inc de diff --git a/engine/items/item_effects.asm b/engine/items/item_effects.asm index 90853bee..12b5bd00 100644 --- a/engine/items/item_effects.asm +++ b/engine/items/item_effects.asm @@ -156,7 +156,7 @@ ItemUseBall: dec a jr nz, .notOldManBattle -.oldManBattle +; Old Man battle ld hl, wGrassRate ld de, wPlayerName ld bc, NAME_LENGTH @@ -645,7 +645,7 @@ ItemUseBicycle: jp z, ItemUseNotTime dec a ; is player already bicycling? jr nz, .tryToGetOnBike -.getOffBike +; get off bike call ItemUseReloadOverworldData xor a ld [wWalkBikeSurfState], a ; change player state to walking @@ -671,13 +671,13 @@ ItemUseSurfboard: ld [wWalkBikeSurfStateCopy], a cp 2 ; is the player already surfing? jr z, .tryToStopSurfing -.tryToSurf +; try to Surf call IsNextTileShoreOrWater jp c, SurfingAttemptFailed ld hl, TilePairCollisionsWater call CheckForTilePairCollisions jp c, SurfingAttemptFailed -.surf +; surfing call .makePlayerMoveForward ld hl, wStatusFlags5 set BIT_SCRIPTED_MOVEMENT_STATE, [hl] @@ -921,7 +921,7 @@ ItemUseMedicine: ld [wHPBarOldHP], a ; current HP stored at wHPBarOldHP (2 bytes, big-endian) or b jr nz, .notFainted -.fainted +; fainted ld a, [wCurItem] cp REVIVE jr z, .updateInBattleFaintedData @@ -973,7 +973,7 @@ ItemUseMedicine: .skipComparingLSB pop hl jr nz, .notFullHP -.fullHP ; if the pokemon's current HP equals its max HP +; if the pokemon's current HP equals its max HP ld a, [wCurItem] cp FULL_RESTORE jp nz, .healingItemNoEffect @@ -1753,8 +1753,8 @@ ItemUsePokeFlute: ; OUTPUT: ; [wWereAnyMonsAsleep]: set to 1 if any pokemon were asleep WakeUpEntireParty: - ld de, 44 - ld c, 6 + ld de, PARTYMON_STRUCT_LENGTH + ld c, PARTY_LENGTH .loop ld a, [hl] push af @@ -1995,7 +1995,7 @@ ItemUsePPRestore: ld a, [wPPRestoreItem] cp ETHER jr nc, .useEther ; if Ether or Max Ether -.usePPUp +; use PP Up ld bc, MON_PP - MON_MOVES add hl, bc ld a, [hl] ; move PP diff --git a/engine/link/cable_club.asm b/engine/link/cable_club.asm index 4a300164..6ffb2aea 100644 --- a/engine/link/cable_club.asm +++ b/engine/link/cable_club.asm @@ -673,7 +673,7 @@ TradeCenter_PrintPartyListNames: pop de inc de pop hl - ld bc, 20 + ld bc, SCREEN_WIDTH add hl, bc pop bc inc c diff --git a/engine/menus/main_menu.asm b/engine/menus/main_menu.asm index f4d8ec03..84af085f 100644 --- a/engine/menus/main_menu.asm +++ b/engine/menus/main_menu.asm @@ -495,6 +495,7 @@ DisplayOptionMenu: jr nz, .exitMenu bit B_PAD_A, b jr z, .checkDirectionKeys +; A was pressed ld a, [wTopMenuItemY] cp 16 ; is the cursor on Cancel? jr nz, .loop @@ -518,7 +519,7 @@ DisplayOptionMenu: jr z, .cursorInBattleStyle cp 16 ; cursor on Cancel? jr z, .loop -.cursorInTextSpeed +; cursor in Text Speed bit B_PAD_LEFT, b jp nz, .pressedLeftInTextSpeed jp .pressedRightInTextSpeed @@ -625,7 +626,7 @@ SetOptionsFromCursorPositions: ld a, [wOptionsBattleAnimCursorX] ; battle animation cursor X coordinate dec a jr z, .battleAnimationOn -.battleAnimationOff +; battle animation Off set BIT_BATTLE_ANIMATION, d jr .checkBattleStyle .battleAnimationOn @@ -634,7 +635,7 @@ SetOptionsFromCursorPositions: ld a, [wOptionsBattleStyleCursorX] ; battle style cursor X coordinate dec a jr z, .battleStyleShift -.battleStyleSet +; battle style Set set BIT_BATTLE_SHIFT, d jr .storeOptions .battleStyleShift diff --git a/engine/menus/naming_screen.asm b/engine/menus/naming_screen.asm index 24b172f0..9356cc66 100644 --- a/engine/menus/naming_screen.asm +++ b/engine/menus/naming_screen.asm @@ -379,12 +379,13 @@ PrintNicknameAndUnderscores: hlcoord 10, 3 ld a, [wNamingScreenType] cp NAME_MON_SCREEN - jr nc, .pokemon1 - ld b, 7 ; player or rival max name length - jr .playerOrRival1 -.pokemon1 - ld b, 10 ; pokemon max name length -.playerOrRival1 + jr nc, .pokemon +; player or rival + ld b, PLAYER_NAME_LENGTH - 1 + jr .gotUnderscoreCount +.pokemon + ld b, NAME_LENGTH - 1 +.gotUnderscoreCount ld a, $76 ; underscore tile id .placeUnderscoreLoop ld [hli], a @@ -394,13 +395,15 @@ PrintNicknameAndUnderscores: cp NAME_MON_SCREEN ld a, [wNamingScreenNameLength] jr nc, .pokemon2 - cp 7 ; player or rival max name length - jr .playerOrRival2 +; player or rival + cp PLAYER_NAME_LENGTH - 1 + jr .checkEmptySpaces .pokemon2 - cp 10 ; pokemon max name length -.playerOrRival2 - jr nz, .emptySpacesRemaining - ; when all spaces are filled, force the cursor onto the ED tile + cp NAME_LENGTH - 1 +.checkEmptySpaces + jr nz, .placeRaisedUnderscore ; jump if empty spaces remain + ; when all spaces are filled, force the cursor onto the ED tile, + ; and keep the last underscore raised call EraseMenuCursor ld a, $11 ; "ED" x coord ld [wTopMenuItemX], a @@ -408,11 +411,10 @@ PrintNicknameAndUnderscores: ld [wCurrentMenuItem], a ld a, [wNamingScreenType] cp NAME_MON_SCREEN - ld a, 9 ; keep the last underscore raised - jr nc, .pokemon3 - ld a, 6 ; keep the last underscore raised -.pokemon3 -.emptySpacesRemaining + ld a, NAME_LENGTH - 2 + jr nc, .placeRaisedUnderscore + ld a, PLAYER_NAME_LENGTH - 2 +.placeRaisedUnderscore ld c, a ld b, $0 hlcoord 10, 3 diff --git a/engine/menus/party_menu.asm b/engine/menus/party_menu.asm index f2688b52..15fd62be 100644 --- a/engine/menus/party_menu.asm +++ b/engine/menus/party_menu.asm @@ -90,7 +90,7 @@ RedrawPartyMenu_:: jr nz, .placeMoveLearnabilityString ld de, .notAbleToLearnMoveText .placeMoveLearnabilityString - ld bc, 20 + 9 ; down 1 row and right 9 columns + ld bc, SCREEN_WIDTH + 9 ; 1 row down and 9 columns right push hl add hl, bc call PlaceString @@ -102,7 +102,7 @@ RedrawPartyMenu_:: pop hl pop de inc de - ld bc, 2 * 20 + ld bc, 2 * SCREEN_WIDTH add hl, bc pop bc inc c diff --git a/engine/menus/pokedex.asm b/engine/menus/pokedex.asm index 3e4096bc..3d2fcbca 100644 --- a/engine/menus/pokedex.asm +++ b/engine/menus/pokedex.asm @@ -105,7 +105,7 @@ HandlePokedexSideMenu: jr z, .choseCry dec a jr z, .choseArea -.choseQuit +; chose Quit ld b, 1 .exitSideMenu pop af @@ -286,7 +286,7 @@ HandlePokedexListMenu: call HandleMenuInput bit B_PAD_B, a jp nz, .buttonBPressed -.checkIfUpPressed +; check if Up pressed bit B_PAD_UP, a jr z, .checkIfDownPressed .upPressed ; scroll up one row @@ -299,7 +299,7 @@ HandlePokedexListMenu: .checkIfDownPressed bit B_PAD_DOWN, a jr z, .checkIfRightPressed -.downPressed ; scroll down one row +; Down pressed, scroll down one row ld a, [wDexMaxSeenMon] cp 7 jp c, .loop ; can't if the list is shorter than 7 @@ -314,7 +314,7 @@ HandlePokedexListMenu: .checkIfRightPressed bit B_PAD_RIGHT, a jr z, .checkIfLeftPressed -.rightPressed ; scroll down 7 rows +; Right pressed, scroll down 7 rows ld a, [wDexMaxSeenMon] cp 7 jp c, .loop ; can't if the list is shorter than 7 @@ -332,7 +332,7 @@ HandlePokedexListMenu: .checkIfLeftPressed ; scroll up 7 rows bit B_PAD_LEFT, a jr z, .buttonAPressed -.leftPressed +; Left pressed ld a, [wListScrollOffset] sub 7 ld [wListScrollOffset], a @@ -593,8 +593,8 @@ HeightWeightText: db "HT ?′??″" next "WT ???lb@" -; XXX does anything point to this? -PokeText: +; leftover from JPN Pokedex, where species have the suffix "Pokemon" +PokeText: ; unreferenced db "#@" ; horizontal line that divides the pokedex text description from the rest of the data diff --git a/engine/menus/start_sub_menus.asm b/engine/menus/start_sub_menus.asm index ec10dd11..817dceb8 100644 --- a/engine/menus/start_sub_menus.asm +++ b/engine/menus/start_sub_menus.asm @@ -340,7 +340,7 @@ StartMenu_Item:: ld a, [wCurItem] cp BICYCLE jp z, .useOrTossItem -.notBicycle1 +; not Bicycle ld a, USE_TOSS_MENU_TEMPLATE ld [wTextBoxID], a call DisplayTextBoxID @@ -370,14 +370,14 @@ StartMenu_Item:: call CopyToStringBuffer ld a, [wCurItem] cp BICYCLE - jr nz, .notBicycle2 + jr nz, .notBicycle ld a, [wStatusFlags6] bit BIT_ALWAYS_ON_BIKE, a jr z, .useItem_closeMenu ld hl, CannotGetOffHereText call PrintText jp ItemMenuLoop -.notBicycle2 +.notBicycle ld a, [wCurrentMenuItem] and a jr nz, .tossItem diff --git a/engine/menus/swap_items.asm b/engine/menus/swap_items.asm index 2d506ce2..dc54b645 100644 --- a/engine/menus/swap_items.asm +++ b/engine/menus/swap_items.asm @@ -76,7 +76,7 @@ HandleItemListSwapping:: ld a, [hli] cp b jr z, .swapSameItemType -.swapDifferentItems +; swap different items ldh [hSwapItemID], a ; save second item ID ld a, [hld] ldh [hSwapItemQuantity], a ; save second item quantity diff --git a/engine/movie/credits.asm b/engine/movie/credits.asm index b1ca7c91..77484a80 100644 --- a/engine/movie/credits.asm +++ b/engine/movie/credits.asm @@ -6,10 +6,10 @@ HallOfFamePC: call DisableLCD ld hl, vFont ld bc, ($80 tiles) / 2 - call ZeroMemory + call ShiftFontColorIndex ld hl, vChars2 tile $60 ld bc, ($20 tiles) / 2 - call ZeroMemory + call ShiftFontColorIndex ld hl, vChars2 tile $7e ld bc, TILE_SIZE ld a, $ff ; solid black @@ -33,7 +33,7 @@ HallOfFamePC: ld [wNumCreditsMonsDisplayed], a jp Credits -FadeInCreditsText: +FadeInCredits: ld hl, HoFGBPalettes ld b, 4 .loop @@ -145,15 +145,18 @@ CreditsCopyTileMapToVRAM: ldh [hAutoBGTransferEnabled], a jp Delay3 -ZeroMemory: -; zero bc bytes at hl +ShiftFontColorIndex: +; Zero every second byte at hl, writing a total of bc bytes. +; When used on VRAM font characters that contain only black and white shades, +; it shifts the color index: black -> light gray, allowing palette-controlled +; text fade-in during the Credits roll, while the black bars remain solid. ld [hl], 0 inc hl inc hl dec bc ld a, b or c - jr nz, ZeroMemory + jr nz, ShiftFontColorIndex ret FillFourRowsWithBlack: @@ -215,7 +218,7 @@ Credits: pop de jr .nextCreditsCommand .fadeInTextAndShowMon - call FadeInCreditsText + call FadeInCredits ld c, 90 jr .next1 .showTextAndShowMon @@ -225,7 +228,7 @@ Credits: call DisplayCreditsMon jr .nextCreditsScreen .fadeInText - call FadeInCreditsText + call FadeInCredits ld c, 120 jr .next2 .showText @@ -254,7 +257,7 @@ Credits: hlcoord 4, 9 inc de call PlaceString - jp FadeInCreditsText + jp FadeInCredits TheEndTextString: ; "T H E E N D" diff --git a/engine/overworld/auto_movement.asm b/engine/overworld/auto_movement.asm index bed2ffb9..13d30cca 100644 --- a/engine/overworld/auto_movement.asm +++ b/engine/overworld/auto_movement.asm @@ -1,6 +1,6 @@ PlayerStepOutFromDoor:: - ld hl, wStatusFlags5 ; should this be wMovementFlags? - res BIT_EXITING_DOOR, [hl] + ld hl, wStatusFlags5 + res BIT_UNKNOWN_5_1, [hl] call IsPlayerStandingOnDoorTile jr nc, .notStandingOnDoor ld a, PAD_SELECT | PAD_START | PAD_CTRL_PAD diff --git a/engine/overworld/missable_objects.asm b/engine/overworld/missable_objects.asm index 1660a894..8ea79980 100644 --- a/engine/overworld/missable_objects.asm +++ b/engine/overworld/missable_objects.asm @@ -178,10 +178,10 @@ MissableObjectFlagAction: ld a, b and a jr z, .reset - cp 2 + cp FLAG_TEST jr z, .read -.set +; set ld a, [hl] ld b, a ld a, d diff --git a/engine/overworld/movement.asm b/engine/overworld/movement.asm index 8d02f0fe..a353c4f1 100644 --- a/engine/overworld/movement.asm +++ b/engine/overworld/movement.asm @@ -140,7 +140,7 @@ UpdateNPCSprite: ld b, a ld a, [wFontLoaded] bit BIT_FONT_LOADED, a - jp nz, notYetMoving + jp nz, NotYetMoving ld a, b cp $2 jp z, UpdateSpriteMovementDelay ; [x#SPRITESTATEDATA1_MOVEMENTSTATUS] == 2 @@ -389,14 +389,15 @@ UpdateSpriteMovementDelay: jr .moving .tickMoveCounter dec [hl] ; x#SPRITESTATEDATA2_MOVEMENTDELAY - jr nz, notYetMoving + jr nz, NotYetMoving .moving dec h ldh a, [hCurrentSpriteOffset] inc a ld l, a ld [hl], $1 ; [x#SPRITESTATEDATA1_MOVEMENTSTATUS] = 1 (mark as ready to move) -notYetMoving: + ; fallthrough +NotYetMoving: ld h, HIGH(wSpriteStateData1) ldh a, [hCurrentSpriteOffset] add SPRITESTATEDATA1_ANIMFRAMECOUNTER @@ -411,7 +412,7 @@ MakeNPCFacePlayer: ; disabled. This is only done when rubbing the S.S. Anne captain's back. ld a, [wStatusFlags3] bit BIT_NO_NPC_FACE_PLAYER, a - jr nz, notYetMoving + jr nz, NotYetMoving res BIT_FACE_PLAYER, [hl] ld a, [wPlayerDirection] bit PLAYER_DIR_BIT_UP, a @@ -435,7 +436,7 @@ MakeNPCFacePlayer: add $9 ld l, a ld [hl], c ; [x#SPRITESTATEDATA1_FACINGDIRECTION]: set facing direction - jr notYetMoving + jr NotYetMoving InitializeSpriteStatus: ld [hl], $1 ; [x#SPRITESTATEDATA1_MOVEMENTSTATUS] = ready diff --git a/engine/overworld/pathfinding.asm b/engine/overworld/pathfinding.asm index 878ca07d..d6e0d009 100644 --- a/engine/overworld/pathfinding.asm +++ b/engine/overworld/pathfinding.asm @@ -94,7 +94,7 @@ CalcPositionOfPlayerRelativeToNPC: ld a, [hli] ; NPC sprite screen Y position in pixels call CalcDifference jr nc, .NPCSouthOfOrAlignedWithPlayer -.NPCNorthOfPlayer +; NPC north of player push hl ld hl, hNPCPlayerRelativePosFlags bit BIT_PLAYER_LOWER_Y, [hl] @@ -122,7 +122,7 @@ CalcPositionOfPlayerRelativeToNPC: ld a, [hl] ; NPC sprite screen X position in pixels call CalcDifference jr nc, .NPCEastOfOrAlignedWithPlayer -.NPCWestOfPlayer +; NPC west of player push hl ld hl, hNPCPlayerRelativePosFlags bit BIT_PLAYER_LOWER_X, [hl] diff --git a/engine/overworld/push_boulder.asm b/engine/overworld/push_boulder.asm index 2328b07a..5e7393d2 100644 --- a/engine/overworld/push_boulder.asm +++ b/engine/overworld/push_boulder.asm @@ -43,7 +43,7 @@ TryPushingBoulder:: jr z, .pushBoulderLeft cp SPRITE_FACING_RIGHT jr z, .pushBoulderRight -.pushBoulderDown +; push boulder down bit B_PAD_DOWN, b ret z ld de, PushBoulderDownMovementData diff --git a/engine/pokemon/add_mon.asm b/engine/pokemon/add_mon.asm index 455221ce..c92acfcb 100644 --- a/engine/pokemon/add_mon.asm +++ b/engine/pokemon/add_mon.asm @@ -375,7 +375,7 @@ _MoveMon:: .copySpecies ld [hli], a ; write new mon ID ld [hl], $ff ; write new sentinel -.findMonDataDest +; find mon data dest ld a, [wMoveMonType] dec a ld hl, wPartyMons @@ -457,7 +457,7 @@ _MoveMon:: ld bc, NAME_LENGTH call CopyData ld a, [wMoveMonType] -.findNickDest +; find nick dest cp PARTY_TO_DAYCARE ld de, wDayCareMonName jr z, .findNickSrc diff --git a/engine/pokemon/load_mon_data.asm b/engine/pokemon/load_mon_data.asm index d90b9cd8..87a2be8b 100644 --- a/engine/pokemon/load_mon_data.asm +++ b/engine/pokemon/load_mon_data.asm @@ -31,7 +31,7 @@ LoadMonData_:: ld hl, wEnemyMons jr z, .getMonEntry - cp 2 + cp BOX_DATA ld hl, wBoxMons ld bc, BOXMON_STRUCT_LENGTH jr z, .getMonEntry diff --git a/home/joypad2.asm b/home/joypad2.asm index a07b9ee4..11ef9a99 100644 --- a/home/joypad2.asm +++ b/home/joypad2.asm @@ -25,7 +25,7 @@ JoypadLowSensitivity:: ldh a, [hJoyPressed] ; newly pressed buttons and a ; have any buttons been newly pressed since last check? jr z, .noNewlyPressedButtons -.newlyPressedButtons +; newly pressed buttons ld a, 30 ; half a second delay ldh [hFrameCounter], a ret @@ -33,7 +33,7 @@ JoypadLowSensitivity:: ldh a, [hFrameCounter] and a ; is the delay over? jr z, .delayOver -.delayNotOver +; delay not over xor a ldh [hJoy5], a ; report no buttons as pressed ret diff --git a/home/list_menu.asm b/home/list_menu.asm index d0d3f732..bd1197bb 100644 --- a/home/list_menu.asm +++ b/home/list_menu.asm @@ -65,7 +65,7 @@ DisplayListMenuIDLoop:: ld a, [wBattleType] and a ; is it the Old Man battle? jr z, .notOldManBattle -.oldManBattle +; Old Man battle ld a, '▶' ldcoord_a 5, 4 ; place menu cursor in front of first menu entry ld c, 80 @@ -178,7 +178,7 @@ DisplayListMenuIDLoop:: bit B_PAD_DOWN, b ld hl, wListScrollOffset jr z, .upPressed -.downPressed +; Down pressed ld a, [hl] add 3 ld b, a @@ -380,7 +380,7 @@ PrintListMenuEntries:: jr z, .pokemonPCMenu cp MOVESLISTMENU jr z, .movesMenu -.itemMenu +; item menu call GetItemName jr .placeNameString .pokemonPCMenu @@ -411,7 +411,7 @@ PrintListMenuEntries:: ld a, [wPrintItemPrices] and a ; should prices be printed? jr z, .skipPrintingItemPrice -.printItemPrice +; print item price push hl ld a, [de] ld de, ItemPrices @@ -426,7 +426,7 @@ PrintListMenuEntries:: ld a, [wListMenuID] and a ; PCPOKEMONLISTMENU? jr nz, .skipPrintingPokemonLevel -.printPokemonLevel +; print Pokemon level ld a, [wNamedObjectIndex] push af push hl @@ -451,7 +451,7 @@ PrintListMenuEntries:: ld a, [wMonDataLocation] and a ; is it a list of party pokemon or box pokemon? jr z, .skipCopyingLevel -.copyLevel +; copy level ld a, [wLoadedMonBoxLevel] ld [wLoadedMonLevel], a .skipCopyingLevel @@ -468,7 +468,7 @@ PrintListMenuEntries:: ld a, [wListMenuID] cp ITEMLISTMENU jr nz, .nextListEntry -.printItemQuantity +; print item quantity ld a, [wNamedObjectIndex] ld [wCurItem], a call IsKeyItem ; check if item is unsellable diff --git a/home/load_font.asm b/home/load_font.asm index 47ad60f1..e6e04113 100644 --- a/home/load_font.asm +++ b/home/load_font.asm @@ -2,7 +2,7 @@ LoadFontTilePatterns:: ldh a, [rLCDC] bit B_LCDC_ENABLE, a jr nz, .on -.off +; off ld hl, FontGraphics ld de, vFont ld bc, FontGraphicsEnd - FontGraphics @@ -18,7 +18,7 @@ LoadTextBoxTilePatterns:: ldh a, [rLCDC] bit B_LCDC_ENABLE, a jr nz, .on -.off +; off ld hl, TextBoxGraphics ld de, vChars2 tile $60 ld bc, TextBoxGraphicsEnd - TextBoxGraphics @@ -34,7 +34,7 @@ LoadHpBarAndStatusTilePatterns:: ldh a, [rLCDC] bit B_LCDC_ENABLE, a jr nz, .on -.off +; off ld hl, HpBarAndStatusGraphics ld de, vChars2 tile $62 ld bc, HpBarAndStatusGraphicsEnd - HpBarAndStatusGraphics diff --git a/home/map_objects.asm b/home/map_objects.asm index 44b012e6..57364518 100644 --- a/home/map_objects.asm +++ b/home/map_objects.asm @@ -115,7 +115,7 @@ CheckCoords:: ld hl, wCoordIndex inc [hl] pop hl -.compareYCoord +; compare Y coord cp b jr z, .compareXCoord inc hl @@ -124,7 +124,7 @@ CheckCoords:: ld a, [hli] cp c jr nz, .loop -.inArray +; in array scf ret .notInArray diff --git a/home/move_mon.asm b/home/move_mon.asm index cb19d0e3..def60bc1 100644 --- a/home/move_mon.asm +++ b/home/move_mon.asm @@ -106,7 +106,7 @@ CalcStat:: jr z, .getSpeedIV cp $5 jr z, .getSpecialIV -.getHpIV +; get HP IV push bc ld a, [hl] ; Atk IV swap a diff --git a/home/overworld.asm b/home/overworld.asm index f837815b..e994f694 100644 --- a/home/overworld.asm +++ b/home/overworld.asm @@ -546,7 +546,7 @@ ContinueCheckWarpsNoCollisionLoop:: ; if no matching warp was found CheckMapConnections:: -.checkWestMap +; check west map ld a, [wXCoord] cp $ff jr nz, .checkEastMap @@ -1097,8 +1097,7 @@ IsSpriteOrSignInFrontOfPlayer:: ld a, [hli] ; sign X cp e jr nz, .retry -.xCoordMatched -; found sign +; X coord matched: found sign push hl push bc ld hl, wSignTextIDs @@ -2047,7 +2046,7 @@ LoadMapHeader:: ; copy connection data (if any) to WRAM ld a, [wCurMapConnections] ld b, a -.checkNorth +; check north bit NORTH_F, b jr z, .checkSouth ld de, wNorthConnectionHeader @@ -2080,7 +2079,7 @@ LoadMapHeader:: ld de, wMapBackgroundTile ld a, [hli] ld [de], a -.loadWarpData +; load warp data ld a, [hli] ld [wNumberOfWarps], a and a diff --git a/home/print_bcd.asm b/home/print_bcd.asm index 2e501be5..cac6aba3 100644 --- a/home/print_bcd.asm +++ b/home/print_bcd.asm @@ -31,9 +31,9 @@ PrintBCDNumber:: inc de dec c jr nz, .loop - bit BIT_LEADING_ZEROES, b + bit BIT_LEADING_ZEROES, b ; were any non-zero digits printed? jr z, .done ; if so, we are done -.numberEqualsZero ; if every digit of the BCD number is zero +; if every digit of the BCD number is zero, print the last 0 bit BIT_LEFT_ALIGN, b jr nz, .skipRightAlignmentAdjustment dec hl ; if the string is right-aligned, it needs to be moved back one space diff --git a/home/print_num.asm b/home/print_num.asm index 32fae363..8027a764 100644 --- a/home/print_num.asm +++ b/home/print_num.asm @@ -82,11 +82,16 @@ MACRO print_digit call .NextDigit ENDM -.millions print_digit 1000000 -.hundred_thousands print_digit 100000 -.ten_thousands print_digit 10000 -.thousands print_digit 1000 -.hundreds print_digit 100 +; millions + print_digit 1000000 +.hundred_thousands + print_digit 100000 +.ten_thousands + print_digit 10000 +.thousands + print_digit 1000 +.hundreds + print_digit 100 .tens ld c, 0 @@ -113,7 +118,7 @@ ENDM .next call .NextDigit -.ones +; ones ld a, '0' add b ld [hli], a diff --git a/home/print_text.asm b/home/print_text.asm index fe784350..8e351ba3 100644 --- a/home/print_text.asm +++ b/home/print_text.asm @@ -24,7 +24,7 @@ PrintLetterDelay:: .checkButtons call Joypad ldh a, [hJoyHeld] -.checkAButton +; check A button bit B_PAD_A, a jr z, .checkBButton jr .endWait diff --git a/home/start_menu.asm b/home/start_menu.asm index 6de15182..9504d536 100644 --- a/home/start_menu.asm +++ b/home/start_menu.asm @@ -14,7 +14,7 @@ RedisplayStartMenu:: .loop call HandleMenuInput ld b, a -.checkIfUpPressed +; check if Up pressed bit B_PAD_UP, a jr z, .checkIfDownPressed ld a, [wCurrentMenuItem] ; menu selection diff --git a/home/trainers.asm b/home/trainers.asm index f00c4df9..8d2cceaf 100644 --- a/home/trainers.asm +++ b/home/trainers.asm @@ -19,7 +19,7 @@ ExecuteCurMapScriptInTable:: ld hl, wStatusFlags7 bit BIT_USE_CUR_MAP_SCRIPT, [hl] res BIT_USE_CUR_MAP_SCRIPT, [hl] - jr z, .useProvidedIndex ; test if map script index was overridden manually + jr z, .useProvidedIndex ; test if map script index was overridden manually ld a, [wCurMapScript] .useProvidedIndex pop hl @@ -32,11 +32,11 @@ LoadGymLeaderAndCityName:: push de ld de, wGymCityName ld bc, GYM_CITY_LENGTH - call CopyData ; load city name + call CopyData ; load city name pop hl ld de, wGymLeaderName ld bc, NAME_LENGTH - jp CopyData ; load gym leader name + jp CopyData ; load gym leader name ; reads specific information from trainer header (pointed to at wTrainerHeaderPtr) ; a: offset in header data @@ -155,7 +155,7 @@ ENDC ldh [hJoyHeld], a call TrainerWalkUpToPlayer_Bank0 ld hl, wCurMapScript - inc [hl] ; increment map script index (next script function is usually DisplayEnemyTrainerTextAndStartBattle) + inc [hl] ; increment map script index (next script function is usually DisplayEnemyTrainerTextAndStartBattle) ret ; display the before battle text after the enemy trainer has walked up to the player's sprite @@ -179,7 +179,7 @@ StartTrainerBattle:: ld hl, wStatusFlags4 set BIT_UNKNOWN_4_1, [hl] ld hl, wCurMapScript - inc [hl] ; increment map script index (next script function is usually EndTrainerBattle) + inc [hl] ; increment map script index (next script function is usually EndTrainerBattle) ret EndTrainerBattle:: @@ -201,14 +201,14 @@ EndTrainerBattle:: call TrainerFlagAction ; flag trainer as fought ld a, [wEnemyMonOrTrainerClass] cp OPP_ID_OFFSET - jr nc, .skipRemoveSprite ; test if trainer was fought (in that case skip removing the corresponding sprite) + jr nc, .skipRemoveSprite ; test if trainer was fought (in that case skip removing the corresponding sprite) ld hl, wMissableObjectList ld de, $2 ld a, [wSpriteIndex] - call IsInArray ; search for sprite ID + call IsInArray ; search for sprite ID inc hl ld a, [hl] - ld [wMissableObjectIndex], a ; load corresponding missable object index and remove it + ld [wMissableObjectIndex], a ; load corresponding missable object index and remove it predef HideObject .skipRemoveSprite ld hl, wStatusFlags5 @@ -269,7 +269,7 @@ CheckForEngagingTrainers:: .trainerLoop call StoreTrainerHeaderPointer ; set trainer header pointer to current trainer ld a, [de] - ld [wSpriteIndex], a ; store trainer flag's bit + ld [wSpriteIndex], a ; store trainer flag's bit ld [wTrainerHeaderFlagBit], a cp -1 ret z @@ -278,7 +278,7 @@ CheckForEngagingTrainers:: ld b, FLAG_TEST ld a, [wTrainerHeaderFlagBit] ld c, a - call TrainerFlagAction ; read trainer flag + call TrainerFlagAction ; read trainer flag ld a, c and a ; has the trainer already been defeated? jr nz, .continue @@ -299,7 +299,7 @@ CheckForEngagingTrainers:: pop hl ld a, [wTrainerSpriteOffset] and a - ret nz ; break if the trainer is engaging + ret nz ; break if the trainer is engaging .continue ld hl, $c add hl, de @@ -364,8 +364,8 @@ PrintEndBattleText:: GetSavedEndBattleTextPointer:: ld a, [wBattleResult] and a -; won battle jr nz, .lostBattle +; won battle ld a, [wEndBattleWinTextPointer] ld h, a ld a, [wEndBattleWinTextPointer + 1] diff --git a/home/window.asm b/home/window.asm index 6885a138..2f2609d7 100644 --- a/home/window.asm +++ b/home/window.asm @@ -52,11 +52,11 @@ HandleMenuInput_:: ld b, a bit B_PAD_UP, a jr z, .checkIfDownPressed -.upPressed +; Up pressed ld a, [wCurrentMenuItem] ; selected menu item and a ; already at the top of the menu? jr z, .alreadyAtTop -.notAtTop +; not at top dec a ld [wCurrentMenuItem], a ; move selected menu item up one space jr .checkOtherKeys @@ -70,14 +70,14 @@ HandleMenuInput_:: .checkIfDownPressed bit B_PAD_DOWN, a jr z, .checkOtherKeys -.downPressed +; Down pressed ld a, [wCurrentMenuItem] inc a ld c, a ld a, [wMaxMenuItem] cp c jr nc, .notAtBottom -.alreadyAtBottom +; already at bottom ld a, [wMenuWrappingEnabled] and a ; is wrapping around enabled? jr z, .noWrappingAround @@ -93,7 +93,7 @@ HandleMenuInput_:: ldh a, [hJoy5] and PAD_A | PAD_B jr z, .skipPlayingSound -.AButtonOrBButtonPressed +; A or B pressed push hl ld hl, wMiscFlags bit BIT_NO_MENU_BUTTON_SOUND, [hl] @@ -153,7 +153,7 @@ PlaceMenuCursor:: ld a, [hl] cp '▶' ; was an arrow next to the previously selected menu item? jr nz, .skipClearingArrow -.clearArrow +; clear arrow ld a, [wTileBehindCursor] ld [hl], a .skipClearingArrow diff --git a/macros/scripts/events.asm b/macros/scripts/events.asm index b07a38f3..740184dd 100644 --- a/macros/scripts/events.asm +++ b/macros/scripts/events.asm @@ -343,7 +343,7 @@ MACRO ResetEventRange IF event_fill_count > 1 ld hl, wEventFlags + event_fill_start - ; force xor a if we just to wrote to it above + ; force xor a if we just wrote to it above IF (_NARG < 3) || (((\1) % 8) != 0) xor a ENDC diff --git a/scripts/BillsHouse.asm b/scripts/BillsHouse.asm index 6b65aa38..d43ae546 100644 --- a/scripts/BillsHouse.asm +++ b/scripts/BillsHouse.asm @@ -82,13 +82,13 @@ BillsHouseBillExitsMachineScript: call DelayFrames ld a, BILLSHOUSE_BILL1 ldh [hSpriteIndex], a - ld de, BillExitMachineMovement + ld de, .BillExitMachineMovement call MoveSprite ld a, SCRIPT_BILLSHOUSE_CLEANUP ld [wBillsHouseCurScript], a ret -BillExitMachineMovement: +.BillExitMachineMovement: db NPC_MOVEMENT_DOWN db NPC_MOVEMENT_RIGHT db NPC_MOVEMENT_RIGHT diff --git a/scripts/Colosseum.asm b/scripts/Colosseum.asm index 4aaa4236..1489fd2c 100644 --- a/scripts/Colosseum.asm +++ b/scripts/Colosseum.asm @@ -1,4 +1,5 @@ Colosseum_Script: + ASSERT TRADECENTER_OPPONENT == COLOSSEUM_OPPONENT jp TradeCenter_Script Colosseum_TextPointers: -- cgit v1.3.1-sl0p From d79c578abd993f7eee4e85462a8cd5b7c4e14646 Mon Sep 17 00:00:00 2001 From: Rangi <35663410+Rangi42@users.noreply.github.com> Date: Mon, 15 Dec 2025 15:16:40 -0500 Subject: Specify a max item length for `list_start` (#552) --- constants/text_constants.asm | 14 ++++++++------ data/battle/stat_mod_names.asm | 2 +- data/battle/stat_names.asm | 2 +- data/items/names.asm | 2 +- data/moves/names.asm | 3 ++- data/player/names_list.asm | 4 ++-- data/trainers/move_choices.asm | 8 +++++--- data/trainers/names.asm | 2 +- engine/battle/effects.asm | 2 +- engine/battle/get_trainer_name.asm | 2 +- engine/items/item_effects.asm | 2 +- macros/asserts.asm | 18 ++++++++++++++---- 12 files changed, 38 insertions(+), 23 deletions(-) (limited to 'engine') diff --git a/constants/text_constants.asm b/constants/text_constants.asm index 88a42bbe..f4587736 100644 --- a/constants/text_constants.asm +++ b/constants/text_constants.asm @@ -1,9 +1,11 @@ -DEF PLAYER_NAME_LENGTH EQU 8 -DEF NAME_LENGTH EQU 11 -DEF ITEM_NAME_LENGTH EQU 13 -DEF MOVE_NAME_LENGTH EQU 14 -DEF NAME_BUFFER_LENGTH EQU 20 -DEF GYM_CITY_LENGTH EQU 17 +DEF PLAYER_NAME_LENGTH EQU 8 +DEF STAT_NAME_LENGTH EQU 10 +DEF NAME_LENGTH EQU 11 +DEF ITEM_NAME_LENGTH EQU 13 +DEF TRAINER_NAME_LENGTH EQU 13 +DEF MOVE_NAME_LENGTH EQU 14 +DEF GYM_CITY_LENGTH EQU 17 +DEF NAME_BUFFER_LENGTH EQU 20 ; PrintNumber, PrintBCDNumber const_def 5 diff --git a/data/battle/stat_mod_names.asm b/data/battle/stat_mod_names.asm index 63c956d7..6c68db4e 100644 --- a/data/battle/stat_mod_names.asm +++ b/data/battle/stat_mod_names.asm @@ -2,7 +2,7 @@ ; The relevant move effect IDs correspond to the stats StatModTextStrings: - list_start + list_start STAT_NAME_LENGTH - 1 li "ATTACK" li "DEFENSE" li "SPEED" diff --git a/data/battle/stat_names.asm b/data/battle/stat_names.asm index 30401a99..08685e83 100644 --- a/data/battle/stat_names.asm +++ b/data/battle/stat_names.asm @@ -1,7 +1,7 @@ ; Stats that vitamins can raise or lower VitaminStats: - list_start + list_start STAT_NAME_LENGTH - 1 li "HEALTH" li "ATTACK" li "DEFENSE" diff --git a/data/items/names.asm b/data/items/names.asm index bab26efc..f5c0f27e 100644 --- a/data/items/names.asm +++ b/data/items/names.asm @@ -1,5 +1,5 @@ ItemNames:: - list_start + list_start ITEM_NAME_LENGTH - 1 li "MASTER BALL" li "ULTRA BALL" li "GREAT BALL" diff --git a/data/moves/names.asm b/data/moves/names.asm index 025172d5..caecc06c 100644 --- a/data/moves/names.asm +++ b/data/moves/names.asm @@ -1,5 +1,6 @@ MoveNames:: - list_start + ; in-battle "used !" text can only fit 12 (MOVE_NAME_LENGTH - 2) characters + list_start MOVE_NAME_LENGTH - 2 li "POUND" li "KARATE CHOP" li "DOUBLESLAP" diff --git a/data/player/names_list.asm b/data/player/names_list.asm index 786c1229..44f3c7f1 100644 --- a/data/player/names_list.asm +++ b/data/player/names_list.asm @@ -2,7 +2,7 @@ DefaultNamesPlayerList: db "NEW NAME@" - list_start + list_start PLAYER_NAME_LENGTH - 1 FOR n, 1, NUM_PLAYER_NAMES + 1 li #PLAYERNAME{d:n} ENDR @@ -10,7 +10,7 @@ ENDR DefaultNamesRivalList: db "NEW NAME@" - list_start + list_start PLAYER_NAME_LENGTH - 1 FOR n, 1, NUM_PLAYER_NAMES + 1 li #RIVALNAME{d:n} ENDR diff --git a/data/trainers/move_choices.asm b/data/trainers/move_choices.asm index 1624b326..98c068a1 100644 --- a/data/trainers/move_choices.asm +++ b/data/trainers/move_choices.asm @@ -1,14 +1,15 @@ +DEF __move_choices__ = 0 + MACRO move_choices IF _NARG db \# ; all args ENDC db 0 ; end - DEF list_index += 1 + DEF __move_choices__ += 1 ENDM ; move choice modification methods that are applied for each trainer class TrainerClassMoveChoiceModifications: - list_start move_choices ; YOUNGSTER move_choices 1 ; BUG CATCHER move_choices 1 ; LASS @@ -56,4 +57,5 @@ TrainerClassMoveChoiceModifications: move_choices 1 ; CHANNELER move_choices 1 ; AGATHA move_choices 1, 3 ; LANCE - assert_list_length NUM_TRAINERS + assert __move_choices__ == NUM_TRAINERS, \ + "TrainerClassMoveChoiceModifications: expected {d:NUM_TRAINERS} entries, got {d:__move_choices__}" diff --git a/data/trainers/names.asm b/data/trainers/names.asm index d7c5677c..1b6f2382 100644 --- a/data/trainers/names.asm +++ b/data/trainers/names.asm @@ -1,5 +1,5 @@ TrainerNames:: - list_start + list_start TRAINER_NAME_LENGTH - 1 li "YOUNGSTER" li "BUG CATCHER" li "LASS" diff --git a/engine/battle/effects.asm b/engine/battle/effects.asm index 22765140..394e07e5 100644 --- a/engine/battle/effects.asm +++ b/engine/battle/effects.asm @@ -754,7 +754,7 @@ PrintStatText: jr .findStatName_inner .foundStatName ld de, wStringBuffer - ld bc, NAME_LENGTH - 1 ; all StatModTextStrings are at most 10 bytes + ld bc, STAT_NAME_LENGTH jp CopyData INCLUDE "data/battle/stat_mod_names.asm" diff --git a/engine/battle/get_trainer_name.asm b/engine/battle/get_trainer_name.asm index a0e869fc..1983b08a 100644 --- a/engine/battle/get_trainer_name.asm +++ b/engine/battle/get_trainer_name.asm @@ -20,5 +20,5 @@ GetTrainerName_:: ld hl, wNameBuffer .foundName ld de, wTrainerName - ld bc, ITEM_NAME_LENGTH + ld bc, TRAINER_NAME_LENGTH jp CopyData diff --git a/engine/items/item_effects.asm b/engine/items/item_effects.asm index 12b5bd00..c4ce13de 100644 --- a/engine/items/item_effects.asm +++ b/engine/items/item_effects.asm @@ -1308,7 +1308,7 @@ ItemUseMedicine: jr .statNameLoop .gotStatName ld de, wStringBuffer - ld bc, NAME_LENGTH - 1 ; all VitaminStats are at most 10 bytes + ld bc, STAT_NAME_LENGTH call CopyData ; copy the stat's name to wStringBuffer ld a, SFX_HEAL_AILMENT call PlaySound diff --git a/macros/asserts.asm b/macros/asserts.asm index e2de1505..11e0ee99 100644 --- a/macros/asserts.asm +++ b/macros/asserts.asm @@ -4,8 +4,8 @@ MACRO? _redef_current_label IF DEF(\1) PURGE \1 ENDC - IF _NARG == 3 + (\3) - DEF \1 EQUS "\<_NARG>" + IF _NARG > 2 + DEF \1 EQUS "\3" ELIF STRLEN(#__SCOPE__) IF {{__SCOPE__}} - @ == 0 DEF \1 EQUS #{__SCOPE__} @@ -19,7 +19,8 @@ ENDM MACRO? table_width DEF CURRENT_TABLE_WIDTH = \1 - _redef_current_label CURRENT_TABLE_START, "._table_width\@", 2, \# + SHIFT + _redef_current_label CURRENT_TABLE_START, "._table_width\@", \# ENDM MACRO? assert_table_length @@ -40,11 +41,20 @@ ENDM MACRO? list_start DEF list_index = 0 - _redef_current_label CURRENT_LIST_START, "._list_start\@", 1, \# + DEF list_item_length = 0 + IF _NARG > 0 + DEF list_item_length = \1 + SHIFT + ENDC + _redef_current_label CURRENT_LIST_START, "._list_start\@", \# ENDM MACRO? li ASSERT STRFIND(\1, "@") == -1, "String terminator \"@\" in list entry: \1" + IF list_item_length + ASSERT CHARLEN(\1) <= list_item_length, \ + "List entry longer than {d:list_item_length} characters: \1" + ENDC db \1, "@" DEF list_index += 1 ENDM -- cgit v1.3.1-sl0p From 0555b42dc0ceffaae613e97cc0cf2e8c0b45013c Mon Sep 17 00:00:00 2001 From: Jordan Moore <46928924+jordanmoore753@users.noreply.github.com> Date: Fri, 26 Dec 2025 12:20:49 -0500 Subject: Replace magic number `$7` with `SLP_MASK` constant (#555) --- engine/battle/effects.asm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engine') diff --git a/engine/battle/effects.asm b/engine/battle/effects.asm index 394e07e5..20e792d8 100644 --- a/engine/battle/effects.asm +++ b/engine/battle/effects.asm @@ -41,7 +41,7 @@ SleepEffect: ; including the event where the target already has another status ld a, [de] ld b, a - and $7 + and SLP_MASK jr z, .notAlreadySleeping ; can't affect a mon that is already asleep ld hl, AlreadyAsleepText jp PrintText @@ -58,7 +58,7 @@ SleepEffect: .setSleepCounter ; set target's sleep counter to a random number between 1 and 7 call BattleRandom - and $7 + and SLP_MASK jr z, .setSleepCounter ld [de], a call PlayCurrentMoveAnimation2 -- cgit v1.3.1-sl0p From fe1e76466b293c83e6cd3a7d4639fb3c49da26ad Mon Sep 17 00:00:00 2001 From: Rangi <35663410+Rangi42@users.noreply.github.com> Date: Wed, 7 Jan 2026 22:05:20 -0500 Subject: Use macros to enforce "missable/hide/show object" constraints, and rename them to "toggleable objects" (#557) --- constants/hide_show_constants.asm | 240 ----------- constants/map_constants.asm | 2 +- constants/toggle_constants.asm | 393 ++++++++++++++++++ data/maps/hide_show_data.asm | 568 --------------------------- data/maps/objects/SilphCo7F.asm | 2 +- data/maps/toggleable_objects.asm | 423 ++++++++++++++++++++ data/predef_pointers.asm | 4 +- engine/events/pick_up_item.asm | 16 +- engine/movie/oak_speech/init_player_data.asm | 2 +- engine/overworld/auto_movement.asm | 4 +- engine/overworld/missable_objects.asm | 212 ---------- engine/overworld/movement.asm | 2 +- engine/overworld/toggleable_objects.asm | 213 ++++++++++ home/overworld.asm | 2 +- home/trainers.asm | 4 +- includes.asm | 2 +- main.asm | 4 +- ram/hram.asm | 4 +- ram/wram.asm | 14 +- scripts/BillsHouse.asm | 16 +- scripts/BluesHouse.asm | 4 +- scripts/CeladonMansionRoofHouse.asm | 4 +- scripts/CeruleanCity.asm | 12 +- scripts/CeruleanCity_2.asm | 12 +- scripts/ChampionsRoom.asm | 8 +- scripts/FightingDojo.asm | 8 +- scripts/GameCorner.asm | 4 +- scripts/HallOfFame.asm | 4 +- scripts/MtMoonB2F.asm | 14 +- scripts/Museum1F.asm | 4 +- scripts/OaksLab.asm | 66 ++-- scripts/PalletTown.asm | 12 +- scripts/PewterCity.asm | 16 +- scripts/PewterGym.asm | 8 +- scripts/PokemonTower2F.asm | 4 +- scripts/PokemonTower7F.asm | 26 +- scripts/RocketHideoutB4F.asm | 12 +- scripts/Route12.asm | 4 +- scripts/Route16.asm | 4 +- scripts/Route20.asm | 38 +- scripts/Route22.asm | 8 +- scripts/Route23.asm | 8 +- scripts/Route25.asm | 20 +- scripts/SSAnne2F.asm | 8 +- scripts/SeafoamIslands1F.asm | 12 +- scripts/SeafoamIslandsB1F.asm | 12 +- scripts/SeafoamIslandsB2F.asm | 12 +- scripts/SeafoamIslandsB3F.asm | 12 +- scripts/SilphCo11F.asm | 104 ++--- scripts/SilphCo1F.asm | 4 +- scripts/SilphCo7F.asm | 4 +- scripts/VictoryRoad3F.asm | 8 +- scripts/ViridianGym.asm | 8 +- 53 files changed, 1310 insertions(+), 1301 deletions(-) delete mode 100644 constants/hide_show_constants.asm create mode 100644 constants/toggle_constants.asm delete mode 100644 data/maps/hide_show_data.asm create mode 100644 data/maps/toggleable_objects.asm delete mode 100644 engine/overworld/missable_objects.asm create mode 100644 engine/overworld/toggleable_objects.asm (limited to 'engine') diff --git a/constants/hide_show_constants.asm b/constants/hide_show_constants.asm deleted file mode 100644 index b73271e8..00000000 --- a/constants/hide_show_constants.asm +++ /dev/null @@ -1,240 +0,0 @@ -DEF HIDE EQU $11 -DEF SHOW EQU $15 - -; MissableObjects indexes (see data/maps/hide_show_data.asm) -; this is a list of the sprites that can be enabled/disabled during the game -; sprites marked with an X are constants that are never used -; because those sprites are not (de)activated in a map's script -; (they are either items or sprites that deactivate after battle -; and are detected in wMissableObjectList) - - const_def - const HS_PALLET_TOWN_OAK ; 00 - const HS_LYING_OLD_MAN ; 01 - const HS_OLD_MAN ; 02 - const HS_MUSEUM_GUY ; 03 - const HS_GYM_GUY ; 04 - const HS_CERULEAN_RIVAL ; 05 - const HS_CERULEAN_ROCKET ; 06 - const HS_CERULEAN_GUARD_1 ; 07 - const HS_CERULEAN_CAVE_GUY ; 08 - const HS_CERULEAN_GUARD_2 ; 09 - const HS_SAFFRON_CITY_1 ; 0A - const HS_SAFFRON_CITY_2 ; 0B - const HS_SAFFRON_CITY_3 ; 0C - const HS_SAFFRON_CITY_4 ; 0D - const HS_SAFFRON_CITY_5 ; 0E - const HS_SAFFRON_CITY_6 ; 0F - const HS_SAFFRON_CITY_7 ; 10 - const HS_SAFFRON_CITY_8 ; 11 - const HS_SAFFRON_CITY_9 ; 12 - const HS_SAFFRON_CITY_A ; 13 - const HS_SAFFRON_CITY_B ; 14 - const HS_SAFFRON_CITY_C ; 15 - const HS_SAFFRON_CITY_D ; 16 - const HS_SAFFRON_CITY_E ; 17 - const HS_SAFFRON_CITY_F ; 18 - const HS_ROUTE_2_ITEM_1 ; 19 X - const HS_ROUTE_2_ITEM_2 ; 1A X - const HS_ROUTE_4_ITEM ; 1B X - const HS_ROUTE_9_ITEM ; 1C X - const HS_ROUTE_12_SNORLAX ; 1D - const HS_ROUTE_12_ITEM_1 ; 1E X - const HS_ROUTE_12_ITEM_2 ; 1F X - const HS_ROUTE_15_ITEM ; 20 X - const HS_ROUTE_16_SNORLAX ; 21 - const HS_ROUTE_22_RIVAL_1 ; 22 - const HS_ROUTE_22_RIVAL_2 ; 23 - const HS_NUGGET_BRIDGE_GUY ; 24 - const HS_ROUTE_24_ITEM ; 25 X - const HS_ROUTE_25_ITEM ; 26 X - const HS_DAISY_SITTING ; 27 - const HS_DAISY_WALKING ; 28 - const HS_TOWN_MAP ; 29 - const HS_OAKS_LAB_RIVAL ; 2A - const HS_STARTER_BALL_1 ; 2B - const HS_STARTER_BALL_2 ; 2C - const HS_STARTER_BALL_3 ; 2D - const HS_OAKS_LAB_OAK_1 ; 2E - const HS_POKEDEX_1 ; 2F - const HS_POKEDEX_2 ; 30 - const HS_OAKS_LAB_OAK_2 ; 31 - const HS_VIRIDIAN_GYM_GIOVANNI ; 32 - const HS_VIRIDIAN_GYM_ITEM ; 33 X - const HS_OLD_AMBER ; 34 - const HS_CERULEAN_CAVE_1F_ITEM_1 ; 35 X - const HS_CERULEAN_CAVE_1F_ITEM_2 ; 36 X - const HS_CERULEAN_CAVE_1F_ITEM_3 ; 37 X - const HS_POKEMON_TOWER_2F_RIVAL ; 38 - const HS_POKEMON_TOWER_3F_ITEM ; 39 X - const HS_POKEMON_TOWER_4F_ITEM_1 ; 3A X - const HS_POKEMON_TOWER_4F_ITEM_2 ; 3B X - const HS_POKEMON_TOWER_4F_ITEM_3 ; 3C X - const HS_POKEMON_TOWER_5F_ITEM ; 3D X - const HS_POKEMON_TOWER_6F_ITEM_1 ; 3E X - const HS_POKEMON_TOWER_6F_ITEM_2 ; 3F X - const HS_POKEMON_TOWER_7F_ROCKET_1 ; 40 X - const HS_POKEMON_TOWER_7F_ROCKET_2 ; 41 X - const HS_POKEMON_TOWER_7F_ROCKET_3 ; 42 X - const HS_POKEMON_TOWER_7F_MR_FUJI ; 43 - const HS_MR_FUJIS_HOUSE_MR_FUJI ; 44 - const HS_CELADON_MANSION_EEVEE_GIFT ; 45 - const HS_GAME_CORNER_ROCKET ; 46 - const HS_WARDENS_HOUSE_ITEM ; 47 X - const HS_POKEMON_MANSION_1F_ITEM_1 ; 48 X - const HS_POKEMON_MANSION_1F_ITEM_2 ; 49 X - const HS_FIGHTING_DOJO_GIFT_1 ; 4A - const HS_FIGHTING_DOJO_GIFT_2 ; 4B - const HS_SILPH_CO_1F_RECEPTIONIST ; 4C - const HS_VOLTORB_1 ; 4D X - const HS_VOLTORB_2 ; 4E X - const HS_VOLTORB_3 ; 4F X - const HS_ELECTRODE_1 ; 50 X - const HS_VOLTORB_4 ; 51 X - const HS_VOLTORB_5 ; 52 X - const HS_ELECTRODE_2 ; 53 X - const HS_VOLTORB_6 ; 54 X - const HS_ZAPDOS ; 55 X - const HS_POWER_PLANT_ITEM_1 ; 56 X - const HS_POWER_PLANT_ITEM_2 ; 57 X - const HS_POWER_PLANT_ITEM_3 ; 58 X - const HS_POWER_PLANT_ITEM_4 ; 59 X - const HS_POWER_PLANT_ITEM_5 ; 5A X - const HS_MOLTRES ; 5B X - const HS_VICTORY_ROAD_2F_ITEM_1 ; 5C X - const HS_VICTORY_ROAD_2F_ITEM_2 ; 5D X - const HS_VICTORY_ROAD_2F_ITEM_3 ; 5E X - const HS_VICTORY_ROAD_2F_ITEM_4 ; 5F X - const HS_VICTORY_ROAD_2F_BOULDER ; 60 - const HS_BILL_POKEMON ; 61 - const HS_BILL_1 ; 62 - const HS_BILL_2 ; 63 - const HS_VIRIDIAN_FOREST_ITEM_1 ; 64 X - const HS_VIRIDIAN_FOREST_ITEM_2 ; 65 X - const HS_VIRIDIAN_FOREST_ITEM_3 ; 66 X - const HS_MT_MOON_1F_ITEM_1 ; 67 X - const HS_MT_MOON_1F_ITEM_2 ; 68 X - const HS_MT_MOON_1F_ITEM_3 ; 69 X - const HS_MT_MOON_1F_ITEM_4 ; 6A X - const HS_MT_MOON_1F_ITEM_5 ; 6B X - const HS_MT_MOON_1F_ITEM_6 ; 6C X - const HS_MT_MOON_B2F_FOSSIL_1 ; 6D - const HS_MT_MOON_B2F_FOSSIL_2 ; 6E - const HS_MT_MOON_B2F_ITEM_1 ; 6F X - const HS_MT_MOON_B2F_ITEM_2 ; 70 X - const HS_SS_ANNE_2F_RIVAL ; 71 - const HS_SS_ANNE_1F_ROOMS_ITEM ; 72 X - const HS_SS_ANNE_2F_ROOMS_ITEM_1 ; 73 X - const HS_SS_ANNE_2F_ROOMS_ITEM_2 ; 74 X - const HS_SS_ANNE_B1F_ROOMS_ITEM_1 ; 75 X - const HS_SS_ANNE_B1F_ROOMS_ITEM_2 ; 76 X - const HS_SS_ANNE_B1F_ROOMS_ITEM_3 ; 77 X - const HS_VICTORY_ROAD_3F_ITEM_1 ; 78 X - const HS_VICTORY_ROAD_3F_ITEM_2 ; 79 X - const HS_VICTORY_ROAD_3F_BOULDER ; 7A - const HS_ROCKET_HIDEOUT_B1F_ITEM_1 ; 7B X - const HS_ROCKET_HIDEOUT_B1F_ITEM_2 ; 7C X - const HS_ROCKET_HIDEOUT_B2F_ITEM_1 ; 7D X - const HS_ROCKET_HIDEOUT_B2F_ITEM_2 ; 7E X - const HS_ROCKET_HIDEOUT_B2F_ITEM_3 ; 7F X - const HS_ROCKET_HIDEOUT_B2F_ITEM_4 ; 80 X - const HS_ROCKET_HIDEOUT_B3F_ITEM_1 ; 81 X - const HS_ROCKET_HIDEOUT_B3F_ITEM_2 ; 82 X - const HS_ROCKET_HIDEOUT_B4F_GIOVANNI ; 83 - const HS_ROCKET_HIDEOUT_B4F_ITEM_1 ; 84 X - const HS_ROCKET_HIDEOUT_B4F_ITEM_2 ; 85 X - const HS_ROCKET_HIDEOUT_B4F_ITEM_3 ; 86 X - const HS_ROCKET_HIDEOUT_B4F_ITEM_4 ; 87 - const HS_ROCKET_HIDEOUT_B4F_ITEM_5 ; 88 - const HS_SILPH_CO_2F_1 ; 89 XXX never (de)activated? - const HS_SILPH_CO_2F_2 ; 8A - const HS_SILPH_CO_2F_3 ; 8B - const HS_SILPH_CO_2F_4 ; 8C - const HS_SILPH_CO_2F_5 ; 8D - const HS_SILPH_CO_3F_1 ; 8E - const HS_SILPH_CO_3F_2 ; 8F - const HS_SILPH_CO_3F_ITEM ; 90 X - const HS_SILPH_CO_4F_1 ; 91 - const HS_SILPH_CO_4F_2 ; 92 - const HS_SILPH_CO_4F_3 ; 93 - const HS_SILPH_CO_4F_ITEM_1 ; 94 X - const HS_SILPH_CO_4F_ITEM_2 ; 95 X - const HS_SILPH_CO_4F_ITEM_3 ; 96 X - const HS_SILPH_CO_5F_1 ; 97 - const HS_SILPH_CO_5F_2 ; 98 - const HS_SILPH_CO_5F_3 ; 99 - const HS_SILPH_CO_5F_4 ; 9A - const HS_SILPH_CO_5F_ITEM_1 ; 9B X - const HS_SILPH_CO_5F_ITEM_2 ; 9C X - const HS_SILPH_CO_5F_ITEM_3 ; 9D X - const HS_SILPH_CO_6F_1 ; 9E - const HS_SILPH_CO_6F_2 ; 9F - const HS_SILPH_CO_6F_3 ; A0 - const HS_SILPH_CO_6F_ITEM_1 ; A1 X - const HS_SILPH_CO_6F_ITEM_2 ; A2 X - const HS_SILPH_CO_7F_1 ; A3 - const HS_SILPH_CO_7F_2 ; A4 - const HS_SILPH_CO_7F_3 ; A5 - const HS_SILPH_CO_7F_4 ; A6 - const HS_SILPH_CO_7F_RIVAL ; A7 - const HS_SILPH_CO_7F_ITEM_1 ; A8 X - const HS_SILPH_CO_7F_ITEM_2 ; A9 X - const HS_SILPH_CO_7F_8 ; AA XXX sprite doesn't exist - const HS_SILPH_CO_8F_1 ; AB - const HS_SILPH_CO_8F_2 ; AC - const HS_SILPH_CO_8F_3 ; AD - const HS_SILPH_CO_9F_1 ; AE - const HS_SILPH_CO_9F_2 ; AF - const HS_SILPH_CO_9F_3 ; B0 - const HS_SILPH_CO_10F_1 ; B1 - const HS_SILPH_CO_10F_2 ; B2 - const HS_SILPH_CO_10F_3 ; B3 XXX never (de)activated? - const HS_SILPH_CO_10F_ITEM_1 ; B4 X - const HS_SILPH_CO_10F_ITEM_2 ; B5 X - const HS_SILPH_CO_10F_ITEM_3 ; B6 X - const HS_SILPH_CO_11F_1 ; B7 - const HS_SILPH_CO_11F_2 ; B8 - const HS_SILPH_CO_11F_3 ; B9 - const HS_UNUSED_MAP_F4_1 ; BA XXX sprite doesn't exist - const HS_POKEMON_MANSION_2F_ITEM ; BB X - const HS_POKEMON_MANSION_3F_ITEM_1 ; BC X - const HS_POKEMON_MANSION_3F_ITEM_2 ; BD X - const HS_POKEMON_MANSION_B1F_ITEM_1 ; BE X - const HS_POKEMON_MANSION_B1F_ITEM_2 ; BF X - const HS_POKEMON_MANSION_B1F_ITEM_3 ; C0 X - const HS_POKEMON_MANSION_B1F_ITEM_4 ; C1 X - const HS_POKEMON_MANSION_B1F_ITEM_5 ; C2 X - const HS_SAFARI_ZONE_EAST_ITEM_1 ; C3 X - const HS_SAFARI_ZONE_EAST_ITEM_2 ; C4 X - const HS_SAFARI_ZONE_EAST_ITEM_3 ; C5 X - const HS_SAFARI_ZONE_EAST_ITEM_4 ; C6 X - const HS_SAFARI_ZONE_NORTH_ITEM_1 ; C7 X - const HS_SAFARI_ZONE_NORTH_ITEM_2 ; C8 X - const HS_SAFARI_ZONE_WEST_ITEM_1 ; C9 X - const HS_SAFARI_ZONE_WEST_ITEM_2 ; CA X - const HS_SAFARI_ZONE_WEST_ITEM_3 ; CB X - const HS_SAFARI_ZONE_WEST_ITEM_4 ; CC X - const HS_SAFARI_ZONE_CENTER_ITEM ; CD X - const HS_CERULEAN_CAVE_2F_ITEM_1 ; CE X - const HS_CERULEAN_CAVE_2F_ITEM_2 ; CF X - const HS_CERULEAN_CAVE_2F_ITEM_3 ; D0 X - const HS_MEWTWO ; D1 X - const HS_CERULEAN_CAVE_B1F_ITEM_1 ; D2 X - const HS_CERULEAN_CAVE_B1F_ITEM_2 ; D3 X - const HS_VICTORY_ROAD_1F_ITEM_1 ; D4 X - const HS_VICTORY_ROAD_1F_ITEM_2 ; D5 X - const HS_CHAMPIONS_ROOM_OAK ; D6 - const HS_SEAFOAM_ISLANDS_1F_BOULDER_1 ; D7 - const HS_SEAFOAM_ISLANDS_1F_BOULDER_2 ; D8 - const HS_SEAFOAM_ISLANDS_B1F_BOULDER_1 ; D9 - const HS_SEAFOAM_ISLANDS_B1F_BOULDER_2 ; DA - const HS_SEAFOAM_ISLANDS_B2F_BOULDER_1 ; DB - const HS_SEAFOAM_ISLANDS_B2F_BOULDER_2 ; DC - const HS_SEAFOAM_ISLANDS_B3F_BOULDER_1 ; DD - const HS_SEAFOAM_ISLANDS_B3F_BOULDER_2 ; DE - const HS_SEAFOAM_ISLANDS_B3F_BOULDER_3 ; DF - const HS_SEAFOAM_ISLANDS_B3F_BOULDER_4 ; E0 - const HS_SEAFOAM_ISLANDS_B4F_BOULDER_1 ; E1 - const HS_SEAFOAM_ISLANDS_B4F_BOULDER_2 ; E2 - const HS_ARTICUNO ; E3 X -DEF NUM_HS_OBJECTS EQU const_value diff --git a/constants/map_constants.asm b/constants/map_constants.asm index 7ae4af44..fe0bd9f5 100644 --- a/constants/map_constants.asm +++ b/constants/map_constants.asm @@ -16,7 +16,7 @@ ENDM ; - MapHeaderBanks (see data/maps/map_header_banks.asm) ; - MapHeaderPointers (see data/maps/map_header_pointers.asm) ; - MapSongBanks (see data/maps/songs.asm) -; - MapHSPointers (see data/maps/hide_show_data.asm) +; - ToggleableObjectMapPointers (see data/maps/toggleable_objects.asm) ; - MapSpriteSets (see data/maps/sprite_sets.asm) ; - ExternalMapEntries (see data/maps/town_map_entries.asm) ; - WildDataPointers (see data/wild/grass_water.asm) diff --git a/constants/toggle_constants.asm b/constants/toggle_constants.asm new file mode 100644 index 00000000..701bc2b4 --- /dev/null +++ b/constants/toggle_constants.asm @@ -0,0 +1,393 @@ +DEF OFF EQU $11 +DEF ON EQU $15 + +MACRO toggle_consts_for + DEF TOGGLEMAP{\1} EQU const_value +ENDM + +; ToggleableObjectStates indexes (see data/maps/toggleable_objects.asm) +; This lists the object_events that can be toggled by ShowObject/HideObject. +; The constants marked with an X are never used, because those object_events +; are not toggled on/off in any map's script. +; (The X-ed ones are either items or static Pokemon encounters that deactivate +; after battle and are detected in wToggleableObjectList.) + + const_def + + toggle_consts_for PALLET_TOWN + const TOGGLE_PALLET_TOWN_OAK ; 00 + + toggle_consts_for VIRIDIAN_CITY + const TOGGLE_LYING_OLD_MAN ; 01 + const TOGGLE_OLD_MAN ; 02 + + toggle_consts_for PEWTER_CITY + const TOGGLE_MUSEUM_GUY ; 03 + const TOGGLE_GYM_GUY ; 04 + + toggle_consts_for CERULEAN_CITY + const TOGGLE_CERULEAN_RIVAL ; 05 + const TOGGLE_CERULEAN_ROCKET ; 06 + const TOGGLE_CERULEAN_GUARD_1 ; 07 + const TOGGLE_CERULEAN_CAVE_GUY ; 08 + const TOGGLE_CERULEAN_GUARD_2 ; 09 + + toggle_consts_for SAFFRON_CITY + const TOGGLE_SAFFRON_CITY_1 ; 0A + const TOGGLE_SAFFRON_CITY_2 ; 0B + const TOGGLE_SAFFRON_CITY_3 ; 0C + const TOGGLE_SAFFRON_CITY_4 ; 0D + const TOGGLE_SAFFRON_CITY_5 ; 0E + const TOGGLE_SAFFRON_CITY_6 ; 0F + const TOGGLE_SAFFRON_CITY_7 ; 10 + const TOGGLE_SAFFRON_CITY_8 ; 11 + const TOGGLE_SAFFRON_CITY_9 ; 12 + const TOGGLE_SAFFRON_CITY_A ; 13 + const TOGGLE_SAFFRON_CITY_B ; 14 + const TOGGLE_SAFFRON_CITY_C ; 15 + const TOGGLE_SAFFRON_CITY_D ; 16 + const TOGGLE_SAFFRON_CITY_E ; 17 + const TOGGLE_SAFFRON_CITY_F ; 18 + + toggle_consts_for ROUTE_2 + const TOGGLE_ROUTE_2_ITEM_1 ; 19 X + const TOGGLE_ROUTE_2_ITEM_2 ; 1A X + + toggle_consts_for ROUTE_4 + const TOGGLE_ROUTE_4_ITEM ; 1B X + + toggle_consts_for ROUTE_9 + const TOGGLE_ROUTE_9_ITEM ; 1C X + + toggle_consts_for ROUTE_12 + const TOGGLE_ROUTE_12_SNORLAX ; 1D + const TOGGLE_ROUTE_12_ITEM_1 ; 1E X + const TOGGLE_ROUTE_12_ITEM_2 ; 1F X + + toggle_consts_for ROUTE_15 + const TOGGLE_ROUTE_15_ITEM ; 20 X + + toggle_consts_for ROUTE_16 + const TOGGLE_ROUTE_16_SNORLAX ; 21 + + toggle_consts_for ROUTE_22 + const TOGGLE_ROUTE_22_RIVAL_1 ; 22 + const TOGGLE_ROUTE_22_RIVAL_2 ; 23 + + toggle_consts_for ROUTE_24 + const TOGGLE_NUGGET_BRIDGE_GUY ; 24 + const TOGGLE_ROUTE_24_ITEM ; 25 X + + toggle_consts_for ROUTE_25 + const TOGGLE_ROUTE_25_ITEM ; 26 X + + toggle_consts_for BLUES_HOUSE + const TOGGLE_DAISY_SITTING ; 27 + const TOGGLE_DAISY_WALKING ; 28 + const TOGGLE_TOWN_MAP ; 29 + + toggle_consts_for OAKS_LAB + const TOGGLE_OAKS_LAB_RIVAL ; 2A + const TOGGLE_STARTER_BALL_1 ; 2B + const TOGGLE_STARTER_BALL_2 ; 2C + const TOGGLE_STARTER_BALL_3 ; 2D + const TOGGLE_OAKS_LAB_OAK_1 ; 2E + const TOGGLE_POKEDEX_1 ; 2F + const TOGGLE_POKEDEX_2 ; 30 + const TOGGLE_OAKS_LAB_OAK_2 ; 31 + + toggle_consts_for VIRIDIAN_GYM + const TOGGLE_VIRIDIAN_GYM_GIOVANNI ; 32 + const TOGGLE_VIRIDIAN_GYM_ITEM ; 33 X + + toggle_consts_for MUSEUM_1F + const TOGGLE_OLD_AMBER ; 34 + + toggle_consts_for CERULEAN_CAVE_1F + const TOGGLE_CERULEAN_CAVE_1F_ITEM_1 ; 35 X + const TOGGLE_CERULEAN_CAVE_1F_ITEM_2 ; 36 X + const TOGGLE_CERULEAN_CAVE_1F_ITEM_3 ; 37 X + + toggle_consts_for POKEMON_TOWER_2F + const TOGGLE_POKEMON_TOWER_2F_RIVAL ; 38 + + toggle_consts_for POKEMON_TOWER_3F + const TOGGLE_POKEMON_TOWER_3F_ITEM ; 39 X + + toggle_consts_for POKEMON_TOWER_4F + const TOGGLE_POKEMON_TOWER_4F_ITEM_1 ; 3A X + const TOGGLE_POKEMON_TOWER_4F_ITEM_2 ; 3B X + const TOGGLE_POKEMON_TOWER_4F_ITEM_3 ; 3C X + + toggle_consts_for POKEMON_TOWER_5F + const TOGGLE_POKEMON_TOWER_5F_ITEM ; 3D X + + toggle_consts_for POKEMON_TOWER_6F + const TOGGLE_POKEMON_TOWER_6F_ITEM_1 ; 3E X + const TOGGLE_POKEMON_TOWER_6F_ITEM_2 ; 3F X + + toggle_consts_for POKEMON_TOWER_7F + const TOGGLE_POKEMON_TOWER_7F_ROCKET_1 ; 40 X + const TOGGLE_POKEMON_TOWER_7F_ROCKET_2 ; 41 X + const TOGGLE_POKEMON_TOWER_7F_ROCKET_3 ; 42 X + const TOGGLE_POKEMON_TOWER_7F_MR_FUJI ; 43 + + toggle_consts_for MR_FUJIS_HOUSE + const TOGGLE_MR_FUJIS_HOUSE_MR_FUJI ; 44 + + toggle_consts_for CELADON_MANSION_ROOF_HOUSE + const TOGGLE_CELADON_MANSION_EEVEE_GIFT ; 45 + + toggle_consts_for GAME_CORNER + const TOGGLE_GAME_CORNER_ROCKET ; 46 + + toggle_consts_for WARDENS_HOUSE + const TOGGLE_WARDENS_HOUSE_ITEM ; 47 X + + toggle_consts_for POKEMON_MANSION_1F + const TOGGLE_POKEMON_MANSION_1F_ITEM_1 ; 48 X + const TOGGLE_POKEMON_MANSION_1F_ITEM_2 ; 49 X + + toggle_consts_for FIGHTING_DOJO + const TOGGLE_FIGHTING_DOJO_GIFT_1 ; 4A + const TOGGLE_FIGHTING_DOJO_GIFT_2 ; 4B + + toggle_consts_for SILPH_CO_1F + const TOGGLE_SILPH_CO_1F_RECEPTIONIST ; 4C + + toggle_consts_for POWER_PLANT + const TOGGLE_VOLTORB_1 ; 4D X + const TOGGLE_VOLTORB_2 ; 4E X + const TOGGLE_VOLTORB_3 ; 4F X + const TOGGLE_ELECTRODE_1 ; 50 X + const TOGGLE_VOLTORB_4 ; 51 X + const TOGGLE_VOLTORB_5 ; 52 X + const TOGGLE_ELECTRODE_2 ; 53 X + const TOGGLE_VOLTORB_6 ; 54 X + const TOGGLE_ZAPDOS ; 55 X + const TOGGLE_POWER_PLANT_ITEM_1 ; 56 X + const TOGGLE_POWER_PLANT_ITEM_2 ; 57 X + const TOGGLE_POWER_PLANT_ITEM_3 ; 58 X + const TOGGLE_POWER_PLANT_ITEM_4 ; 59 X + const TOGGLE_POWER_PLANT_ITEM_5 ; 5A X + + toggle_consts_for VICTORY_ROAD_2F + const TOGGLE_MOLTRES ; 5B X + const TOGGLE_VICTORY_ROAD_2F_ITEM_1 ; 5C X + const TOGGLE_VICTORY_ROAD_2F_ITEM_2 ; 5D X + const TOGGLE_VICTORY_ROAD_2F_ITEM_3 ; 5E X + const TOGGLE_VICTORY_ROAD_2F_ITEM_4 ; 5F X + const TOGGLE_VICTORY_ROAD_2F_BOULDER ; 60 + + toggle_consts_for BILLS_HOUSE + const TOGGLE_BILL_POKEMON ; 61 + const TOGGLE_BILL_1 ; 62 + const TOGGLE_BILL_2 ; 63 + + toggle_consts_for VIRIDIAN_FOREST + const TOGGLE_VIRIDIAN_FOREST_ITEM_1 ; 64 X + const TOGGLE_VIRIDIAN_FOREST_ITEM_2 ; 65 X + const TOGGLE_VIRIDIAN_FOREST_ITEM_3 ; 66 X + + toggle_consts_for MT_MOON_1F + const TOGGLE_MT_MOON_1F_ITEM_1 ; 67 X + const TOGGLE_MT_MOON_1F_ITEM_2 ; 68 X + const TOGGLE_MT_MOON_1F_ITEM_3 ; 69 X + const TOGGLE_MT_MOON_1F_ITEM_4 ; 6A X + const TOGGLE_MT_MOON_1F_ITEM_5 ; 6B X + const TOGGLE_MT_MOON_1F_ITEM_6 ; 6C X + + toggle_consts_for MT_MOON_B2F + const TOGGLE_MT_MOON_B2F_FOSSIL_1 ; 6D + const TOGGLE_MT_MOON_B2F_FOSSIL_2 ; 6E + const TOGGLE_MT_MOON_B2F_ITEM_1 ; 6F X + const TOGGLE_MT_MOON_B2F_ITEM_2 ; 70 X + + toggle_consts_for SS_ANNE_2F + const TOGGLE_SS_ANNE_2F_RIVAL ; 71 + + toggle_consts_for SS_ANNE_1F_ROOMS + const TOGGLE_SS_ANNE_1F_ROOMS_ITEM ; 72 X + + toggle_consts_for SS_ANNE_2F_ROOMS + const TOGGLE_SS_ANNE_2F_ROOMS_ITEM_1 ; 73 X + const TOGGLE_SS_ANNE_2F_ROOMS_ITEM_2 ; 74 X + + toggle_consts_for SS_ANNE_B1F_ROOMS + const TOGGLE_SS_ANNE_B1F_ROOMS_ITEM_1 ; 75 X + const TOGGLE_SS_ANNE_B1F_ROOMS_ITEM_2 ; 76 X + const TOGGLE_SS_ANNE_B1F_ROOMS_ITEM_3 ; 77 X + + toggle_consts_for VICTORY_ROAD_3F + const TOGGLE_VICTORY_ROAD_3F_ITEM_1 ; 78 X + const TOGGLE_VICTORY_ROAD_3F_ITEM_2 ; 79 X + const TOGGLE_VICTORY_ROAD_3F_BOULDER ; 7A + + toggle_consts_for ROCKET_HIDEOUT_B1F + const TOGGLE_ROCKET_HIDEOUT_B1F_ITEM_1 ; 7B X + const TOGGLE_ROCKET_HIDEOUT_B1F_ITEM_2 ; 7C X + + toggle_consts_for ROCKET_HIDEOUT_B2F + const TOGGLE_ROCKET_HIDEOUT_B2F_ITEM_1 ; 7D X + const TOGGLE_ROCKET_HIDEOUT_B2F_ITEM_2 ; 7E X + const TOGGLE_ROCKET_HIDEOUT_B2F_ITEM_3 ; 7F X + const TOGGLE_ROCKET_HIDEOUT_B2F_ITEM_4 ; 80 X + + toggle_consts_for ROCKET_HIDEOUT_B3F + const TOGGLE_ROCKET_HIDEOUT_B3F_ITEM_1 ; 81 X + const TOGGLE_ROCKET_HIDEOUT_B3F_ITEM_2 ; 82 X + + toggle_consts_for ROCKET_HIDEOUT_B4F + const TOGGLE_ROCKET_HIDEOUT_B4F_GIOVANNI ; 83 + const TOGGLE_ROCKET_HIDEOUT_B4F_ITEM_1 ; 84 X + const TOGGLE_ROCKET_HIDEOUT_B4F_ITEM_2 ; 85 X + const TOGGLE_ROCKET_HIDEOUT_B4F_ITEM_3 ; 86 X + const TOGGLE_ROCKET_HIDEOUT_B4F_ITEM_4 ; 87 + const TOGGLE_ROCKET_HIDEOUT_B4F_ITEM_5 ; 88 + + toggle_consts_for SILPH_CO_2F + const TOGGLE_SILPH_CO_2F_1 ; 89 XXX never (de)activated? + const TOGGLE_SILPH_CO_2F_2 ; 8A + const TOGGLE_SILPH_CO_2F_3 ; 8B + const TOGGLE_SILPH_CO_2F_4 ; 8C + const TOGGLE_SILPH_CO_2F_5 ; 8D + + toggle_consts_for SILPH_CO_3F + const TOGGLE_SILPH_CO_3F_1 ; 8E + const TOGGLE_SILPH_CO_3F_2 ; 8F + const TOGGLE_SILPH_CO_3F_ITEM ; 90 X + + toggle_consts_for SILPH_CO_4F + const TOGGLE_SILPH_CO_4F_1 ; 91 + const TOGGLE_SILPH_CO_4F_2 ; 92 + const TOGGLE_SILPH_CO_4F_3 ; 93 + const TOGGLE_SILPH_CO_4F_ITEM_1 ; 94 X + const TOGGLE_SILPH_CO_4F_ITEM_2 ; 95 X + const TOGGLE_SILPH_CO_4F_ITEM_3 ; 96 X + + toggle_consts_for SILPH_CO_5F + const TOGGLE_SILPH_CO_5F_1 ; 97 + const TOGGLE_SILPH_CO_5F_2 ; 98 + const TOGGLE_SILPH_CO_5F_3 ; 99 + const TOGGLE_SILPH_CO_5F_4 ; 9A + const TOGGLE_SILPH_CO_5F_ITEM_1 ; 9B X + const TOGGLE_SILPH_CO_5F_ITEM_2 ; 9C X + const TOGGLE_SILPH_CO_5F_ITEM_3 ; 9D X + + toggle_consts_for SILPH_CO_6F + const TOGGLE_SILPH_CO_6F_1 ; 9E + const TOGGLE_SILPH_CO_6F_2 ; 9F + const TOGGLE_SILPH_CO_6F_3 ; A0 + const TOGGLE_SILPH_CO_6F_ITEM_1 ; A1 X + const TOGGLE_SILPH_CO_6F_ITEM_2 ; A2 X + + toggle_consts_for SILPH_CO_7F + const TOGGLE_SILPH_CO_7F_1 ; A3 + const TOGGLE_SILPH_CO_7F_2 ; A4 + const TOGGLE_SILPH_CO_7F_3 ; A5 + const TOGGLE_SILPH_CO_7F_4 ; A6 + const TOGGLE_SILPH_CO_7F_RIVAL ; A7 + const TOGGLE_SILPH_CO_7F_ITEM_1 ; A8 X + const TOGGLE_SILPH_CO_7F_ITEM_2 ; A9 X + const TOGGLE_SILPH_CO_7F_8 ; AA XXX sprite doesn't exist + + toggle_consts_for SILPH_CO_8F + const TOGGLE_SILPH_CO_8F_1 ; AB + const TOGGLE_SILPH_CO_8F_2 ; AC + const TOGGLE_SILPH_CO_8F_3 ; AD + + toggle_consts_for SILPH_CO_9F + const TOGGLE_SILPH_CO_9F_1 ; AE + const TOGGLE_SILPH_CO_9F_2 ; AF + const TOGGLE_SILPH_CO_9F_3 ; B0 + + toggle_consts_for SILPH_CO_10F + const TOGGLE_SILPH_CO_10F_1 ; B1 + const TOGGLE_SILPH_CO_10F_2 ; B2 + const TOGGLE_SILPH_CO_10F_3 ; B3 XXX never (de)activated? + const TOGGLE_SILPH_CO_10F_ITEM_1 ; B4 X + const TOGGLE_SILPH_CO_10F_ITEM_2 ; B5 X + const TOGGLE_SILPH_CO_10F_ITEM_3 ; B6 X + + toggle_consts_for SILPH_CO_11F + const TOGGLE_SILPH_CO_11F_1 ; B7 + const TOGGLE_SILPH_CO_11F_2 ; B8 + const TOGGLE_SILPH_CO_11F_3 ; B9 + + toggle_consts_for UNUSED_MAP_F4 + const TOGGLE_UNUSED_MAP_F4_1 ; BA XXX sprite doesn't exist + + toggle_consts_for POKEMON_MANSION_2F + const TOGGLE_POKEMON_MANSION_2F_ITEM ; BB X + + toggle_consts_for POKEMON_MANSION_3F + const TOGGLE_POKEMON_MANSION_3F_ITEM_1 ; BC X + const TOGGLE_POKEMON_MANSION_3F_ITEM_2 ; BD X + + toggle_consts_for POKEMON_MANSION_B1F + const TOGGLE_POKEMON_MANSION_B1F_ITEM_1 ; BE X + const TOGGLE_POKEMON_MANSION_B1F_ITEM_2 ; BF X + const TOGGLE_POKEMON_MANSION_B1F_ITEM_3 ; C0 X + const TOGGLE_POKEMON_MANSION_B1F_ITEM_4 ; C1 X + const TOGGLE_POKEMON_MANSION_B1F_ITEM_5 ; C2 X + + toggle_consts_for SAFARI_ZONE_EAST + const TOGGLE_SAFARI_ZONE_EAST_ITEM_1 ; C3 X + const TOGGLE_SAFARI_ZONE_EAST_ITEM_2 ; C4 X + const TOGGLE_SAFARI_ZONE_EAST_ITEM_3 ; C5 X + const TOGGLE_SAFARI_ZONE_EAST_ITEM_4 ; C6 X + + toggle_consts_for SAFARI_ZONE_NORTH + const TOGGLE_SAFARI_ZONE_NORTH_ITEM_1 ; C7 X + const TOGGLE_SAFARI_ZONE_NORTH_ITEM_2 ; C8 X + + toggle_consts_for SAFARI_ZONE_WEST + const TOGGLE_SAFARI_ZONE_WEST_ITEM_1 ; C9 X + const TOGGLE_SAFARI_ZONE_WEST_ITEM_2 ; CA X + const TOGGLE_SAFARI_ZONE_WEST_ITEM_3 ; CB X + const TOGGLE_SAFARI_ZONE_WEST_ITEM_4 ; CC X + + toggle_consts_for SAFARI_ZONE_CENTER + const TOGGLE_SAFARI_ZONE_CENTER_ITEM ; CD X + + toggle_consts_for CERULEAN_CAVE_2F + const TOGGLE_CERULEAN_CAVE_2F_ITEM_1 ; CE X + const TOGGLE_CERULEAN_CAVE_2F_ITEM_2 ; CF X + const TOGGLE_CERULEAN_CAVE_2F_ITEM_3 ; D0 X + + toggle_consts_for CERULEAN_CAVE_B1F + const TOGGLE_MEWTWO ; D1 X + const TOGGLE_CERULEAN_CAVE_B1F_ITEM_1 ; D2 X + const TOGGLE_CERULEAN_CAVE_B1F_ITEM_2 ; D3 X + + toggle_consts_for VICTORY_ROAD_1F + const TOGGLE_VICTORY_ROAD_1F_ITEM_1 ; D4 X + const TOGGLE_VICTORY_ROAD_1F_ITEM_2 ; D5 X + + toggle_consts_for CHAMPIONS_ROOM + const TOGGLE_CHAMPIONS_ROOM_OAK ; D6 + + toggle_consts_for SEAFOAM_ISLANDS_1F + const TOGGLE_SEAFOAM_ISLANDS_1F_BOULDER_1 ; D7 + const TOGGLE_SEAFOAM_ISLANDS_1F_BOULDER_2 ; D8 + + toggle_consts_for SEAFOAM_ISLANDS_B1F + const TOGGLE_SEAFOAM_ISLANDS_B1F_BOULDER_1 ; D9 + const TOGGLE_SEAFOAM_ISLANDS_B1F_BOULDER_2 ; DA + + toggle_consts_for SEAFOAM_ISLANDS_B2F + const TOGGLE_SEAFOAM_ISLANDS_B2F_BOULDER_1 ; DB + const TOGGLE_SEAFOAM_ISLANDS_B2F_BOULDER_2 ; DC + + toggle_consts_for SEAFOAM_ISLANDS_B3F + const TOGGLE_SEAFOAM_ISLANDS_B3F_BOULDER_1 ; DD + const TOGGLE_SEAFOAM_ISLANDS_B3F_BOULDER_2 ; DE + const TOGGLE_SEAFOAM_ISLANDS_B3F_BOULDER_3 ; DF + const TOGGLE_SEAFOAM_ISLANDS_B3F_BOULDER_4 ; E0 + + toggle_consts_for SEAFOAM_ISLANDS_B4F + const TOGGLE_SEAFOAM_ISLANDS_B4F_BOULDER_1 ; E1 + const TOGGLE_SEAFOAM_ISLANDS_B4F_BOULDER_2 ; E2 + const TOGGLE_ARTICUNO ; E3 X + +DEF NUM_TOGGLEABLE_OBJECTS EQU const_value diff --git a/data/maps/hide_show_data.asm b/data/maps/hide_show_data.asm deleted file mode 100644 index bc68c90f..00000000 --- a/data/maps/hide_show_data.asm +++ /dev/null @@ -1,568 +0,0 @@ -; default hidden/shown objects for each map - -MapHSPointers: -; entries correspond to map ids - table_width 2 - dw PalletTownHS - dw ViridianCityHS - dw PewterCityHS - dw CeruleanCityHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw SaffronCityHS - dw NoHS - dw NoHS - dw Route2HS - dw NoHS - dw Route4HS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw Route9HS - dw NoHS - dw NoHS - dw Route12HS - dw NoHS - dw NoHS - dw Route15HS - dw Route16HS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw Route22HS - dw NoHS - dw Route24HS - dw Route25HS - dw NoHS - dw NoHS - dw BluesHouseHS - dw OaksLabHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw ViridianGymHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw ViridianForestHS - dw Museum1FHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw MtMoon1FHS - dw NoHS - dw MtMoonB2FHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw PowerPlantHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw BillsHouseHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw SSAnne2FHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw SSAnne1FRoomsHS - dw SSAnne2FRoomsHS - dw SSAnneB1FRoomsHS - dw NoHS - dw NoHS - dw NoHS - dw VictoryRoad1FHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw ChampionsRoomHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw CeladonMansionRoofHouseHS - dw NoHS - dw NoHS - dw GameCornerHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw PokemonTower2FHS - dw PokemonTower3FHS - dw PokemonTower4FHS - dw PokemonTower5FHS - dw PokemonTower6FHS - dw PokemonTower7FHS - dw MrFujisHouseHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw WardensHouseHS - dw NoHS - dw NoHS - dw NoHS - dw SeafoamIslandsB1FHS - dw SeafoamIslandsB2FHS - dw SeafoamIslandsB3FHS - dw SeafoamIslandsB4FHS - dw NoHS - dw NoHS - dw PokemonMansion1FHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw FightingDojoHS - dw NoHS - dw NoHS - dw NoHS - dw SilphCo1FHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw SeafoamIslands1FHS - dw NoHS - dw VictoryRoad2FHS - dw NoHS - dw NoHS - dw NoHS - dw VictoryRoad3FHS - dw RocketHideoutB1FHS - dw RocketHideoutB2FHS - dw RocketHideoutB3FHS - dw RocketHideoutB4FHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw SilphCo2FHS - dw SilphCo3FHS - dw SilphCo4FHS - dw SilphCo5FHS - dw SilphCo6FHS - dw SilphCo7FHS - dw SilphCo8FHS - dw PokemonMansion2FHS - dw PokemonMansion3FHS - dw PokemonMansionB1FHS - dw SafariZoneEastHS - dw SafariZoneNorthHS - dw SafariZoneWestHS - dw SafariZoneCenterHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw CeruleanCave2FHS - dw CeruleanCaveB1FHS - dw CeruleanCaveHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw SilphCo9FHS - dw SilphCo10FHS - dw SilphCo11FHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw UnusedMapF4HS - dw NoHS - dw NoHS - dw NoHS - assert_table_length NUM_MAPS - dw -1 ; end - -NoHS: - db -1, -1, -1 ; end - -MissableObjects: -; entries correspond to HS_* constants (see constants/hide_show_constants) - table_width 3 -; format: map id, object id, HIDE/SHOW - -PalletTownHS: - db PALLET_TOWN, PALLETTOWN_OAK, HIDE -ViridianCityHS: - db VIRIDIAN_CITY, VIRIDIANCITY_OLD_MAN_SLEEPY, SHOW - db VIRIDIAN_CITY, VIRIDIANCITY_OLD_MAN, HIDE -PewterCityHS: - db PEWTER_CITY, PEWTERCITY_SUPER_NERD1, SHOW - db PEWTER_CITY, PEWTERCITY_YOUNGSTER, SHOW -CeruleanCityHS: - db CERULEAN_CITY, CERULEANCITY_RIVAL, HIDE - db CERULEAN_CITY, CERULEANCITY_ROCKET, SHOW - db CERULEAN_CITY, CERULEANCITY_GUARD1, HIDE - db CERULEAN_CITY, CERULEANCITY_SUPER_NERD3, SHOW - db CERULEAN_CITY, CERULEANCITY_GUARD2, SHOW -SaffronCityHS: - db SAFFRON_CITY, SAFFRONCITY_ROCKET1, SHOW - db SAFFRON_CITY, SAFFRONCITY_ROCKET2, SHOW - db SAFFRON_CITY, SAFFRONCITY_ROCKET3, SHOW - db SAFFRON_CITY, SAFFRONCITY_ROCKET4, SHOW - db SAFFRON_CITY, SAFFRONCITY_ROCKET5, SHOW - db SAFFRON_CITY, SAFFRONCITY_ROCKET6, SHOW - db SAFFRON_CITY, SAFFRONCITY_ROCKET7, SHOW - db SAFFRON_CITY, SAFFRONCITY_SCIENTIST, HIDE - db SAFFRON_CITY, SAFFRONCITY_SILPH_WORKER_M, HIDE - db SAFFRON_CITY, SAFFRONCITY_SILPH_WORKER_F, HIDE - db SAFFRON_CITY, SAFFRONCITY_GENTLEMAN, HIDE - db SAFFRON_CITY, SAFFRONCITY_PIDGEOT, HIDE - db SAFFRON_CITY, SAFFRONCITY_ROCKER, HIDE - db SAFFRON_CITY, SAFFRONCITY_ROCKET8, SHOW - db SAFFRON_CITY, SAFFRONCITY_ROCKET9, HIDE -Route2HS: - db ROUTE_2, ROUTE2_MOON_STONE, SHOW - db ROUTE_2, ROUTE2_HP_UP, SHOW -Route4HS: - db ROUTE_4, ROUTE4_TM_WHIRLWIND, SHOW -Route9HS: - db ROUTE_9, ROUTE9_TM_TELEPORT, SHOW -Route12HS: - db ROUTE_12, ROUTE12_SNORLAX, SHOW - db ROUTE_12, ROUTE12_TM_PAY_DAY, SHOW - db ROUTE_12, ROUTE12_IRON, SHOW -Route15HS: - db ROUTE_15, ROUTE15_TM_RAGE, SHOW -Route16HS: - db ROUTE_16, ROUTE16_SNORLAX, SHOW -Route22HS: - db ROUTE_22, ROUTE22_RIVAL1, HIDE - db ROUTE_22, ROUTE22_RIVAL2, HIDE -Route24HS: - db ROUTE_24, ROUTE24_COOLTRAINER_M1, SHOW - db ROUTE_24, ROUTE24_TM_THUNDER_WAVE, SHOW -Route25HS: - db ROUTE_25, ROUTE25_TM_SEISMIC_TOSS, SHOW -BluesHouseHS: - db BLUES_HOUSE, BLUESHOUSE_DAISY1, SHOW - db BLUES_HOUSE, BLUESHOUSE_DAISY2, HIDE - db BLUES_HOUSE, BLUESHOUSE_TOWN_MAP, SHOW -OaksLabHS: - db OAKS_LAB, OAKSLAB_RIVAL, SHOW - db OAKS_LAB, OAKSLAB_CHARMANDER_POKE_BALL, SHOW - db OAKS_LAB, OAKSLAB_SQUIRTLE_POKE_BALL, SHOW - db OAKS_LAB, OAKSLAB_BULBASAUR_POKE_BALL, SHOW - db OAKS_LAB, OAKSLAB_OAK1, HIDE - db OAKS_LAB, OAKSLAB_POKEDEX1, SHOW - db OAKS_LAB, OAKSLAB_POKEDEX2, SHOW - db OAKS_LAB, OAKSLAB_OAK2, HIDE -ViridianGymHS: - db VIRIDIAN_GYM, VIRIDIANGYM_GIOVANNI, SHOW - db VIRIDIAN_GYM, VIRIDIANGYM_REVIVE, SHOW -Museum1FHS: - db MUSEUM_1F, MUSEUM1F_OLD_AMBER, SHOW -CeruleanCaveHS: - db CERULEAN_CAVE_1F, CERULEANCAVE1F_FULL_RESTORE, SHOW - db CERULEAN_CAVE_1F, CERULEANCAVE1F_MAX_ELIXER, SHOW - db CERULEAN_CAVE_1F, CERULEANCAVE1F_NUGGET, SHOW -PokemonTower2FHS: - db POKEMON_TOWER_2F, POKEMONTOWER2F_RIVAL, SHOW -PokemonTower3FHS: - db POKEMON_TOWER_3F, POKEMONTOWER3F_ESCAPE_ROPE, SHOW -PokemonTower4FHS: - db POKEMON_TOWER_4F, POKEMONTOWER4F_ELIXER, SHOW - db POKEMON_TOWER_4F, POKEMONTOWER4F_AWAKENING, SHOW - db POKEMON_TOWER_4F, POKEMONTOWER4F_HP_UP, SHOW -PokemonTower5FHS: - db POKEMON_TOWER_5F, POKEMONTOWER5F_NUGGET, SHOW -PokemonTower6FHS: - db POKEMON_TOWER_6F, POKEMONTOWER6F_RARE_CANDY, SHOW - db POKEMON_TOWER_6F, POKEMONTOWER6F_X_ACCURACY, SHOW -PokemonTower7FHS: - db POKEMON_TOWER_7F, POKEMONTOWER7F_ROCKET1, SHOW - db POKEMON_TOWER_7F, POKEMONTOWER7F_ROCKET2, SHOW - db POKEMON_TOWER_7F, POKEMONTOWER7F_ROCKET3, SHOW - db POKEMON_TOWER_7F, POKEMONTOWER7F_MR_FUJI, SHOW -MrFujisHouseHS: - db MR_FUJIS_HOUSE, MRFUJISHOUSE_MR_FUJI, HIDE -CeladonMansionRoofHouseHS: - db CELADON_MANSION_ROOF_HOUSE, CELADONMANSION_ROOF_HOUSE_EEVEE_POKEBALL, SHOW -GameCornerHS: - db GAME_CORNER, GAMECORNER_ROCKET, SHOW -WardensHouseHS: - db WARDENS_HOUSE, WARDENSHOUSE_RARE_CANDY, SHOW -PokemonMansion1FHS: - db POKEMON_MANSION_1F, POKEMONMANSION1F_ESCAPE_ROPE, SHOW - db POKEMON_MANSION_1F, POKEMONMANSION1F_CARBOS, SHOW -FightingDojoHS: - db FIGHTING_DOJO, FIGHTINGDOJO_HITMONLEE_POKE_BALL, SHOW - db FIGHTING_DOJO, FIGHTINGDOJO_HITMONCHAN_POKE_BALL, SHOW -SilphCo1FHS: - db SILPH_CO_1F, SILPHCO1F_LINK_RECEPTIONIST, HIDE -PowerPlantHS: - db POWER_PLANT, POWERPLANT_VOLTORB1, SHOW - db POWER_PLANT, POWERPLANT_VOLTORB2, SHOW - db POWER_PLANT, POWERPLANT_VOLTORB3, SHOW - db POWER_PLANT, POWERPLANT_ELECTRODE1, SHOW - db POWER_PLANT, POWERPLANT_VOLTORB4, SHOW - db POWER_PLANT, POWERPLANT_VOLTORB5, SHOW - db POWER_PLANT, POWERPLANT_ELECTRODE2, SHOW - db POWER_PLANT, POWERPLANT_VOLTORB6, SHOW - db POWER_PLANT, POWERPLANT_ZAPDOS, SHOW - db POWER_PLANT, POWERPLANT_CARBOS, SHOW - db POWER_PLANT, POWERPLANT_HP_UP, SHOW - db POWER_PLANT, POWERPLANT_RARE_CANDY, SHOW - db POWER_PLANT, POWERPLANT_TM_THUNDER, SHOW - db POWER_PLANT, POWERPLANT_TM_REFLECT, SHOW -VictoryRoad2FHS: - db VICTORY_ROAD_2F, VICTORYROAD2F_MOLTRES, SHOW - db VICTORY_ROAD_2F, VICTORYROAD2F_TM_SUBMISSION, SHOW - db VICTORY_ROAD_2F, VICTORYROAD2F_FULL_HEAL, SHOW - db VICTORY_ROAD_2F, VICTORYROAD2F_TM_MEGA_KICK, SHOW - db VICTORY_ROAD_2F, VICTORYROAD2F_GUARD_SPEC, SHOW - db VICTORY_ROAD_2F, VICTORYROAD2F_BOULDER3, SHOW -BillsHouseHS: - db BILLS_HOUSE, BILLSHOUSE_BILL_POKEMON, SHOW - db BILLS_HOUSE, BILLSHOUSE_BILL1, HIDE - db BILLS_HOUSE, BILLSHOUSE_BILL2, HIDE -ViridianForestHS: - db VIRIDIAN_FOREST, VIRIDIANFOREST_ANTIDOTE, SHOW - db VIRIDIAN_FOREST, VIRIDIANFOREST_POTION, SHOW - db VIRIDIAN_FOREST, VIRIDIANFOREST_POKE_BALL, SHOW -MtMoon1FHS: - db MT_MOON_1F, MTMOON1F_POTION1, SHOW - db MT_MOON_1F, MTMOON1F_MOON_STONE, SHOW - db MT_MOON_1F, MTMOON1F_RARE_CANDY, SHOW - db MT_MOON_1F, MTMOON1F_ESCAPE_ROPE, SHOW - db MT_MOON_1F, MTMOON1F_POTION2, SHOW - db MT_MOON_1F, MTMOON1F_TM_WATER_GUN, SHOW -MtMoonB2FHS: - db MT_MOON_B2F, MTMOONB2F_DOME_FOSSIL, SHOW - db MT_MOON_B2F, MTMOONB2F_HELIX_FOSSIL, SHOW - db MT_MOON_B2F, MTMOONB2F_HP_UP, SHOW - db MT_MOON_B2F, MTMOONB2F_TM_MEGA_PUNCH, SHOW -SSAnne2FHS: - db SS_ANNE_2F, SSANNE2F_RIVAL, HIDE -SSAnne1FRoomsHS: - db SS_ANNE_1F_ROOMS, SSANNE1FROOMS_TM_BODY_SLAM, SHOW -SSAnne2FRoomsHS: - db SS_ANNE_2F_ROOMS, SSANNE2FROOMS_MAX_ETHER, SHOW - db SS_ANNE_2F_ROOMS, SSANNE2FROOMS_RARE_CANDY, SHOW -SSAnneB1FRoomsHS: - db SS_ANNE_B1F_ROOMS, SSANNEB1FROOMS_ETHER, SHOW - db SS_ANNE_B1F_ROOMS, SSANNEB1FROOMS_TM_REST, SHOW - db SS_ANNE_B1F_ROOMS, SSANNEB1FROOMS_MAX_POTION, SHOW -VictoryRoad3FHS: - db VICTORY_ROAD_3F, VICTORYROAD3F_MAX_REVIVE, SHOW - db VICTORY_ROAD_3F, VICTORYROAD3F_TM_EXPLOSION, SHOW - db VICTORY_ROAD_3F, VICTORYROAD3F_BOULDER4, SHOW -RocketHideoutB1FHS: - db ROCKET_HIDEOUT_B1F, ROCKETHIDEOUTB1F_ESCAPE_ROPE, SHOW - db ROCKET_HIDEOUT_B1F, ROCKETHIDEOUTB1F_HYPER_POTION, SHOW -RocketHideoutB2FHS: - db ROCKET_HIDEOUT_B2F, ROCKETHIDEOUTB2F_MOON_STONE, SHOW - db ROCKET_HIDEOUT_B2F, ROCKETHIDEOUTB2F_NUGGET, SHOW - db ROCKET_HIDEOUT_B2F, ROCKETHIDEOUTB2F_TM_HORN_DRILL, SHOW - db ROCKET_HIDEOUT_B2F, ROCKETHIDEOUTB2F_SUPER_POTION, SHOW -RocketHideoutB3FHS: - db ROCKET_HIDEOUT_B3F, ROCKETHIDEOUTB3F_TM_DOUBLE_EDGE, SHOW - db ROCKET_HIDEOUT_B3F, ROCKETHIDEOUTB3F_RARE_CANDY, SHOW -RocketHideoutB4FHS: - db ROCKET_HIDEOUT_B4F, ROCKETHIDEOUTB4F_GIOVANNI, SHOW - db ROCKET_HIDEOUT_B4F, ROCKETHIDEOUTB4F_HP_UP, SHOW - db ROCKET_HIDEOUT_B4F, ROCKETHIDEOUTB4F_TM_RAZOR_WIND, SHOW - db ROCKET_HIDEOUT_B4F, ROCKETHIDEOUTB4F_IRON, SHOW - db ROCKET_HIDEOUT_B4F, ROCKETHIDEOUTB4F_SILPH_SCOPE, HIDE - db ROCKET_HIDEOUT_B4F, ROCKETHIDEOUTB4F_LIFT_KEY, HIDE -SilphCo2FHS: - db SILPH_CO_2F, SILPHCO2F_SILPH_WORKER_F, SHOW - db SILPH_CO_2F, SILPHCO2F_SCIENTIST1, SHOW - db SILPH_CO_2F, SILPHCO2F_SCIENTIST2, SHOW - db SILPH_CO_2F, SILPHCO2F_ROCKET1, SHOW - db SILPH_CO_2F, SILPHCO2F_ROCKET2, SHOW -SilphCo3FHS: - db SILPH_CO_3F, SILPHCO3F_ROCKET, SHOW - db SILPH_CO_3F, SILPHCO3F_SCIENTIST, SHOW - db SILPH_CO_3F, SILPHCO3F_HYPER_POTION, SHOW -SilphCo4FHS: - db SILPH_CO_4F, SILPHCO4F_ROCKET1, SHOW - db SILPH_CO_4F, SILPHCO4F_SCIENTIST, SHOW - db SILPH_CO_4F, SILPHCO4F_ROCKET2, SHOW - db SILPH_CO_4F, SILPHCO4F_FULL_HEAL, SHOW - db SILPH_CO_4F, SILPHCO4F_MAX_REVIVE, SHOW - db SILPH_CO_4F, SILPHCO4F_ESCAPE_ROPE, SHOW -SilphCo5FHS: - db SILPH_CO_5F, SILPHCO5F_ROCKET1, SHOW - db SILPH_CO_5F, SILPHCO5F_SCIENTIST, SHOW - db SILPH_CO_5F, SILPHCO5F_ROCKER, SHOW - db SILPH_CO_5F, SILPHCO5F_ROCKET2, SHOW - db SILPH_CO_5F, SILPHCO5F_TM_TAKE_DOWN, SHOW - db SILPH_CO_5F, SILPHCO5F_PROTEIN, SHOW - db SILPH_CO_5F, SILPHCO5F_CARD_KEY, SHOW -SilphCo6FHS: - db SILPH_CO_6F, SILPHCO6F_ROCKET1, SHOW - db SILPH_CO_6F, SILPHCO6F_SCIENTIST, SHOW - db SILPH_CO_6F, SILPHCO6F_ROCKET2, SHOW - db SILPH_CO_6F, SILPHCO6F_HP_UP, SHOW - db SILPH_CO_6F, SILPHCO6F_X_ACCURACY, SHOW -SilphCo7FHS: - db SILPH_CO_7F, SILPHCO7F_ROCKET1, SHOW - db SILPH_CO_7F, SILPHCO7F_SCIENTIST, SHOW - db SILPH_CO_7F, SILPHCO7F_ROCKET2, SHOW - db SILPH_CO_7F, SILPHCO7F_ROCKET3, SHOW - db SILPH_CO_7F, SILPHCO7F_RIVAL, SHOW - db SILPH_CO_7F, SILPHCO7F_CALCIUM, SHOW - db SILPH_CO_7F, SILPHCO7F_TM_SWORDS_DANCE, SHOW - db SILPH_CO_7F, SILPHCO7F_UNUSED, SHOW -SilphCo8FHS: - db SILPH_CO_8F, SILPHCO8F_ROCKET1, SHOW - db SILPH_CO_8F, SILPHCO8F_SCIENTIST, SHOW - db SILPH_CO_8F, SILPHCO8F_ROCKET2, SHOW -SilphCo9FHS: - db SILPH_CO_9F, SILPHCO9F_ROCKET1, SHOW - db SILPH_CO_9F, SILPHCO9F_SCIENTIST, SHOW - db SILPH_CO_9F, SILPHCO9F_ROCKET2, SHOW -SilphCo10FHS: - db SILPH_CO_10F, SILPHCO10F_ROCKET, SHOW - db SILPH_CO_10F, SILPHCO10F_SCIENTIST, SHOW - db SILPH_CO_10F, SILPHCO10F_SILPH_WORKER_F, SHOW - db SILPH_CO_10F, SILPHCO10F_TM_EARTHQUAKE, SHOW - db SILPH_CO_10F, SILPHCO10F_RARE_CANDY, SHOW - db SILPH_CO_10F, SILPHCO10F_CARBOS, SHOW -SilphCo11FHS: - db SILPH_CO_11F, SILPHCO11F_GIOVANNI, SHOW - db SILPH_CO_11F, SILPHCO11F_ROCKET1, SHOW - db SILPH_CO_11F, SILPHCO11F_ROCKET2, SHOW -UnusedMapF4HS: - db UNUSED_MAP_F4, $02, SHOW ; unused -PokemonMansion2FHS: - db POKEMON_MANSION_2F, POKEMONMANSION2F_CALCIUM, SHOW -PokemonMansion3FHS: - db POKEMON_MANSION_3F, POKEMONMANSION3F_MAX_POTION, SHOW - db POKEMON_MANSION_3F, POKEMONMANSION3F_IRON, SHOW -PokemonMansionB1FHS: - db POKEMON_MANSION_B1F, POKEMONMANSIONB1F_RARE_CANDY, SHOW - db POKEMON_MANSION_B1F, POKEMONMANSIONB1F_FULL_RESTORE, SHOW - db POKEMON_MANSION_B1F, POKEMONMANSIONB1F_TM_BLIZZARD, SHOW - db POKEMON_MANSION_B1F, POKEMONMANSIONB1F_TM_SOLARBEAM, SHOW - db POKEMON_MANSION_B1F, POKEMONMANSIONB1F_SECRET_KEY, SHOW -SafariZoneEastHS: - db SAFARI_ZONE_EAST, SAFARIZONEEAST_FULL_RESTORE, SHOW - db SAFARI_ZONE_EAST, SAFARIZONEEAST_MAX_RESTORE, SHOW - db SAFARI_ZONE_EAST, SAFARIZONEEAST_CARBOS, SHOW - db SAFARI_ZONE_EAST, SAFARIZONEEAST_TM_EGG_BOMB, SHOW -SafariZoneNorthHS: - db SAFARI_ZONE_NORTH, SAFARIZONENORTH_PROTEIN, SHOW - db SAFARI_ZONE_NORTH, SAFARIZONENORTH_TM_SKULL_BASH, SHOW -SafariZoneWestHS: - db SAFARI_ZONE_WEST, SAFARIZONEWEST_MAX_POTION, SHOW - db SAFARI_ZONE_WEST, SAFARIZONEWEST_TM_DOUBLE_TEAM, SHOW - db SAFARI_ZONE_WEST, SAFARIZONEWEST_MAX_REVIVE, SHOW - db SAFARI_ZONE_WEST, SAFARIZONEWEST_GOLD_TEETH, SHOW -SafariZoneCenterHS: - db SAFARI_ZONE_CENTER, SAFARIZONECENTER_NUGGET, SHOW -CeruleanCave2FHS: - db CERULEAN_CAVE_2F, CERULEANCAVE2F_PP_UP, SHOW - db CERULEAN_CAVE_2F, CERULEANCAVE2F_ULTRA_BALL, SHOW - db CERULEAN_CAVE_2F, CERULEANCAVE2F_FULL_RESTORE, SHOW -CeruleanCaveB1FHS: - db CERULEAN_CAVE_B1F, CERULEANCAVEB1F_MEWTWO, SHOW - db CERULEAN_CAVE_B1F, CERULEANCAVEB1F_ULTRA_BALL, SHOW - db CERULEAN_CAVE_B1F, CERULEANCAVEB1F_MAX_REVIVE, SHOW -VictoryRoad1FHS: - db VICTORY_ROAD_1F, VICTORYROAD1F_TM_SKY_ATTACK, SHOW - db VICTORY_ROAD_1F, VICTORYROAD1F_RARE_CANDY, SHOW -ChampionsRoomHS: - db CHAMPIONS_ROOM, CHAMPIONSROOM_OAK, HIDE -SeafoamIslands1FHS: - db SEAFOAM_ISLANDS_1F, SEAFOAMISLANDS1F_BOULDER1, SHOW - db SEAFOAM_ISLANDS_1F, SEAFOAMISLANDS1F_BOULDER2, SHOW -SeafoamIslandsB1FHS: - db SEAFOAM_ISLANDS_B1F, SEAFOAMISLANDSB1F_BOULDER1, HIDE - db SEAFOAM_ISLANDS_B1F, SEAFOAMISLANDSB1F_BOULDER2, HIDE -SeafoamIslandsB2FHS: - db SEAFOAM_ISLANDS_B2F, SEAFOAMISLANDSB2F_BOULDER1, HIDE - db SEAFOAM_ISLANDS_B2F, SEAFOAMISLANDSB2F_BOULDER2, HIDE -SeafoamIslandsB3FHS: - db SEAFOAM_ISLANDS_B3F, SEAFOAMISLANDSB3F_BOULDER2, SHOW - db SEAFOAM_ISLANDS_B3F, SEAFOAMISLANDSB3F_BOULDER3, SHOW - db SEAFOAM_ISLANDS_B3F, SEAFOAMISLANDSB3F_BOULDER5, HIDE - db SEAFOAM_ISLANDS_B3F, SEAFOAMISLANDSB3F_BOULDER6, HIDE -SeafoamIslandsB4FHS: - db SEAFOAM_ISLANDS_B4F, SEAFOAMISLANDSB4F_BOULDER1, HIDE - db SEAFOAM_ISLANDS_B4F, SEAFOAMISLANDSB4F_BOULDER2, HIDE - db SEAFOAM_ISLANDS_B4F, SEAFOAMISLANDSB4F_ARTICUNO, SHOW - assert_table_length NUM_HS_OBJECTS - db -1, 1, SHOW ; end diff --git a/data/maps/objects/SilphCo7F.asm b/data/maps/objects/SilphCo7F.asm index 6f2ca90d..0dbe2c7f 100644 --- a/data/maps/objects/SilphCo7F.asm +++ b/data/maps/objects/SilphCo7F.asm @@ -10,7 +10,7 @@ const_export SILPHCO7F_RIVAL const_export SILPHCO7F_CALCIUM const_export SILPHCO7F_TM_SWORDS_DANCE - const_export SILPHCO7F_UNUSED ; referenced in data/maps/hide_show_data.asm, no corresponding object_event + const_export SILPHCO7F_UNUSED ; referenced in data/maps/toggleable_objects.asm, no corresponding object_event SilphCo7F_Object: db $2e ; border block diff --git a/data/maps/toggleable_objects.asm b/data/maps/toggleable_objects.asm new file mode 100644 index 00000000..d94002d9 --- /dev/null +++ b/data/maps/toggleable_objects.asm @@ -0,0 +1,423 @@ +; toggleable objects for each map + +ToggleableObjectMapPointers: +; entries correspond to map ids + table_width 2 +FOR n, NUM_MAPS + IF DEF(TOGGLEMAP{n}) ; defined by `toggle_consts_for` + dw ToggleData{n} + ELSE + dw NoToggleData + ENDC +ENDR + assert_table_length NUM_MAPS + dw -1 ; end + +NoToggleData: + db -1, -1, -1 ; end + +DEF toggles_ok = 1 + +MACRO? toggleable_objects_for + DEF toggle_map_id = \1 ; map id + ToggleData{toggle_map_id}: + IF toggles_ok + ASSERT DEF(TOGGLEMAP{toggle_map_id}), \ + "`toggleable_objects_for \1` is not defined" + DEF toggles_ok &= DEF(TOGGLEMAP{toggle_map_id}) + IF toggles_ok + assert_table_length TOGGLEMAP{toggle_map_id} + DEF toggles_ok &= TOGGLEMAP{toggle_map_id} * 3 == @ - ToggleableObjectStates + ENDC + ENDC +ENDM + +MACRO toggle_object_state + db toggle_map_id ; from previous `toggleable_objects_for` + db \1 ; object id + db \2 ; OFF/ON +ENDM + +ToggleableObjectStates: +; entries correspond to TOGGLE_* constants (see constants/toggle_constants.asm) + table_width 3 + + toggleable_objects_for PALLET_TOWN + toggle_object_state PALLETTOWN_OAK, OFF + + toggleable_objects_for VIRIDIAN_CITY + toggle_object_state VIRIDIANCITY_OLD_MAN_SLEEPY, ON + toggle_object_state VIRIDIANCITY_OLD_MAN, OFF + + toggleable_objects_for PEWTER_CITY + toggle_object_state PEWTERCITY_SUPER_NERD1, ON + toggle_object_state PEWTERCITY_YOUNGSTER, ON + + toggleable_objects_for CERULEAN_CITY + toggle_object_state CERULEANCITY_RIVAL, OFF + toggle_object_state CERULEANCITY_ROCKET, ON + toggle_object_state CERULEANCITY_GUARD1, OFF + toggle_object_state CERULEANCITY_SUPER_NERD3, ON + toggle_object_state CERULEANCITY_GUARD2, ON + + toggleable_objects_for SAFFRON_CITY + toggle_object_state SAFFRONCITY_ROCKET1, ON + toggle_object_state SAFFRONCITY_ROCKET2, ON + toggle_object_state SAFFRONCITY_ROCKET3, ON + toggle_object_state SAFFRONCITY_ROCKET4, ON + toggle_object_state SAFFRONCITY_ROCKET5, ON + toggle_object_state SAFFRONCITY_ROCKET6, ON + toggle_object_state SAFFRONCITY_ROCKET7, ON + toggle_object_state SAFFRONCITY_SCIENTIST, OFF + toggle_object_state SAFFRONCITY_SILPH_WORKER_M, OFF + toggle_object_state SAFFRONCITY_SILPH_WORKER_F, OFF + toggle_object_state SAFFRONCITY_GENTLEMAN, OFF + toggle_object_state SAFFRONCITY_PIDGEOT, OFF + toggle_object_state SAFFRONCITY_ROCKER, OFF + toggle_object_state SAFFRONCITY_ROCKET8, ON + toggle_object_state SAFFRONCITY_ROCKET9, OFF + + toggleable_objects_for ROUTE_2 + toggle_object_state ROUTE2_MOON_STONE, ON + toggle_object_state ROUTE2_HP_UP, ON + + toggleable_objects_for ROUTE_4 + toggle_object_state ROUTE4_TM_WHIRLWIND, ON + + toggleable_objects_for ROUTE_9 + toggle_object_state ROUTE9_TM_TELEPORT, ON + + toggleable_objects_for ROUTE_12 + toggle_object_state ROUTE12_SNORLAX, ON + toggle_object_state ROUTE12_TM_PAY_DAY, ON + toggle_object_state ROUTE12_IRON, ON + + toggleable_objects_for ROUTE_15 + toggle_object_state ROUTE15_TM_RAGE, ON + + toggleable_objects_for ROUTE_16 + toggle_object_state ROUTE16_SNORLAX, ON + + toggleable_objects_for ROUTE_22 + toggle_object_state ROUTE22_RIVAL1, OFF + toggle_object_state ROUTE22_RIVAL2, OFF + + toggleable_objects_for ROUTE_24 + toggle_object_state ROUTE24_COOLTRAINER_M1, ON + toggle_object_state ROUTE24_TM_THUNDER_WAVE, ON + + toggleable_objects_for ROUTE_25 + toggle_object_state ROUTE25_TM_SEISMIC_TOSS, ON + + toggleable_objects_for BLUES_HOUSE + toggle_object_state BLUESHOUSE_DAISY1, ON + toggle_object_state BLUESHOUSE_DAISY2, OFF + toggle_object_state BLUESHOUSE_TOWN_MAP, ON + + toggleable_objects_for OAKS_LAB + toggle_object_state OAKSLAB_RIVAL, ON + toggle_object_state OAKSLAB_CHARMANDER_POKE_BALL, ON + toggle_object_state OAKSLAB_SQUIRTLE_POKE_BALL, ON + toggle_object_state OAKSLAB_BULBASAUR_POKE_BALL, ON + toggle_object_state OAKSLAB_OAK1, OFF + toggle_object_state OAKSLAB_POKEDEX1, ON + toggle_object_state OAKSLAB_POKEDEX2, ON + toggle_object_state OAKSLAB_OAK2, OFF + + toggleable_objects_for VIRIDIAN_GYM + toggle_object_state VIRIDIANGYM_GIOVANNI, ON + toggle_object_state VIRIDIANGYM_REVIVE, ON + + toggleable_objects_for MUSEUM_1F + toggle_object_state MUSEUM1F_OLD_AMBER, ON + + toggleable_objects_for CERULEAN_CAVE_1F + toggle_object_state CERULEANCAVE1F_FULL_RESTORE, ON + toggle_object_state CERULEANCAVE1F_MAX_ELIXER, ON + toggle_object_state CERULEANCAVE1F_NUGGET, ON + + toggleable_objects_for POKEMON_TOWER_2F + toggle_object_state POKEMONTOWER2F_RIVAL, ON + + toggleable_objects_for POKEMON_TOWER_3F + toggle_object_state POKEMONTOWER3F_ESCAPE_ROPE, ON + + toggleable_objects_for POKEMON_TOWER_4F + toggle_object_state POKEMONTOWER4F_ELIXER, ON + toggle_object_state POKEMONTOWER4F_AWAKENING, ON + toggle_object_state POKEMONTOWER4F_HP_UP, ON + + toggleable_objects_for POKEMON_TOWER_5F + toggle_object_state POKEMONTOWER5F_NUGGET, ON + + toggleable_objects_for POKEMON_TOWER_6F + toggle_object_state POKEMONTOWER6F_RARE_CANDY, ON + toggle_object_state POKEMONTOWER6F_X_ACCURACY, ON + + toggleable_objects_for POKEMON_TOWER_7F + toggle_object_state POKEMONTOWER7F_ROCKET1, ON + toggle_object_state POKEMONTOWER7F_ROCKET2, ON + toggle_object_state POKEMONTOWER7F_ROCKET3, ON + toggle_object_state POKEMONTOWER7F_MR_FUJI, ON + + toggleable_objects_for MR_FUJIS_HOUSE + toggle_object_state MRFUJISHOUSE_MR_FUJI, OFF + + toggleable_objects_for CELADON_MANSION_ROOF_HOUSE + toggle_object_state CELADONMANSION_ROOF_HOUSE_EEVEE_POKEBALL, ON + + toggleable_objects_for GAME_CORNER + toggle_object_state GAMECORNER_ROCKET, ON + + toggleable_objects_for WARDENS_HOUSE + toggle_object_state WARDENSHOUSE_RARE_CANDY, ON + + toggleable_objects_for POKEMON_MANSION_1F + toggle_object_state POKEMONMANSION1F_ESCAPE_ROPE, ON + toggle_object_state POKEMONMANSION1F_CARBOS, ON + + toggleable_objects_for FIGHTING_DOJO + toggle_object_state FIGHTINGDOJO_HITMONLEE_POKE_BALL, ON + toggle_object_state FIGHTINGDOJO_HITMONCHAN_POKE_BALL, ON + + toggleable_objects_for SILPH_CO_1F + toggle_object_state SILPHCO1F_LINK_RECEPTIONIST, OFF + + toggleable_objects_for POWER_PLANT + toggle_object_state POWERPLANT_VOLTORB1, ON + toggle_object_state POWERPLANT_VOLTORB2, ON + toggle_object_state POWERPLANT_VOLTORB3, ON + toggle_object_state POWERPLANT_ELECTRODE1, ON + toggle_object_state POWERPLANT_VOLTORB4, ON + toggle_object_state POWERPLANT_VOLTORB5, ON + toggle_object_state POWERPLANT_ELECTRODE2, ON + toggle_object_state POWERPLANT_VOLTORB6, ON + toggle_object_state POWERPLANT_ZAPDOS, ON + toggle_object_state POWERPLANT_CARBOS, ON + toggle_object_state POWERPLANT_HP_UP, ON + toggle_object_state POWERPLANT_RARE_CANDY, ON + toggle_object_state POWERPLANT_TM_THUNDER, ON + toggle_object_state POWERPLANT_TM_REFLECT, ON + + toggleable_objects_for VICTORY_ROAD_2F + toggle_object_state VICTORYROAD2F_MOLTRES, ON + toggle_object_state VICTORYROAD2F_TM_SUBMISSION, ON + toggle_object_state VICTORYROAD2F_FULL_HEAL, ON + toggle_object_state VICTORYROAD2F_TM_MEGA_KICK, ON + toggle_object_state VICTORYROAD2F_GUARD_SPEC, ON + toggle_object_state VICTORYROAD2F_BOULDER3, ON + + toggleable_objects_for BILLS_HOUSE + toggle_object_state BILLSHOUSE_BILL_POKEMON, ON + toggle_object_state BILLSHOUSE_BILL1, OFF + toggle_object_state BILLSHOUSE_BILL2, OFF + + toggleable_objects_for VIRIDIAN_FOREST + toggle_object_state VIRIDIANFOREST_ANTIDOTE, ON + toggle_object_state VIRIDIANFOREST_POTION, ON + toggle_object_state VIRIDIANFOREST_POKE_BALL, ON + + toggleable_objects_for MT_MOON_1F + toggle_object_state MTMOON1F_POTION1, ON + toggle_object_state MTMOON1F_MOON_STONE, ON + toggle_object_state MTMOON1F_RARE_CANDY, ON + toggle_object_state MTMOON1F_ESCAPE_ROPE, ON + toggle_object_state MTMOON1F_POTION2, ON + toggle_object_state MTMOON1F_TM_WATER_GUN, ON + + toggleable_objects_for MT_MOON_B2F + toggle_object_state MTMOONB2F_DOME_FOSSIL, ON + toggle_object_state MTMOONB2F_HELIX_FOSSIL, ON + toggle_object_state MTMOONB2F_HP_UP, ON + toggle_object_state MTMOONB2F_TM_MEGA_PUNCH, ON + + toggleable_objects_for SS_ANNE_2F + toggle_object_state SSANNE2F_RIVAL, OFF + + toggleable_objects_for SS_ANNE_1F_ROOMS + toggle_object_state SSANNE1FROOMS_TM_BODY_SLAM, ON + + toggleable_objects_for SS_ANNE_2F_ROOMS + toggle_object_state SSANNE2FROOMS_MAX_ETHER, ON + toggle_object_state SSANNE2FROOMS_RARE_CANDY, ON + + toggleable_objects_for SS_ANNE_B1F_ROOMS + toggle_object_state SSANNEB1FROOMS_ETHER, ON + toggle_object_state SSANNEB1FROOMS_TM_REST, ON + toggle_object_state SSANNEB1FROOMS_MAX_POTION, ON + + toggleable_objects_for VICTORY_ROAD_3F + toggle_object_state VICTORYROAD3F_MAX_REVIVE, ON + toggle_object_state VICTORYROAD3F_TM_EXPLOSION, ON + toggle_object_state VICTORYROAD3F_BOULDER4, ON + + toggleable_objects_for ROCKET_HIDEOUT_B1F + toggle_object_state ROCKETHIDEOUTB1F_ESCAPE_ROPE, ON + toggle_object_state ROCKETHIDEOUTB1F_HYPER_POTION, ON + + toggleable_objects_for ROCKET_HIDEOUT_B2F + toggle_object_state ROCKETHIDEOUTB2F_MOON_STONE, ON + toggle_object_state ROCKETHIDEOUTB2F_NUGGET, ON + toggle_object_state ROCKETHIDEOUTB2F_TM_HORN_DRILL, ON + toggle_object_state ROCKETHIDEOUTB2F_SUPER_POTION, ON + + toggleable_objects_for ROCKET_HIDEOUT_B3F + toggle_object_state ROCKETHIDEOUTB3F_TM_DOUBLE_EDGE, ON + toggle_object_state ROCKETHIDEOUTB3F_RARE_CANDY, ON + + toggleable_objects_for ROCKET_HIDEOUT_B4F + toggle_object_state ROCKETHIDEOUTB4F_GIOVANNI, ON + toggle_object_state ROCKETHIDEOUTB4F_HP_UP, ON + toggle_object_state ROCKETHIDEOUTB4F_TM_RAZOR_WIND, ON + toggle_object_state ROCKETHIDEOUTB4F_IRON, ON + toggle_object_state ROCKETHIDEOUTB4F_SILPH_SCOPE, OFF + toggle_object_state ROCKETHIDEOUTB4F_LIFT_KEY, OFF + + toggleable_objects_for SILPH_CO_2F + toggle_object_state SILPHCO2F_SILPH_WORKER_F, ON + toggle_object_state SILPHCO2F_SCIENTIST1, ON + toggle_object_state SILPHCO2F_SCIENTIST2, ON + toggle_object_state SILPHCO2F_ROCKET1, ON + toggle_object_state SILPHCO2F_ROCKET2, ON + + toggleable_objects_for SILPH_CO_3F + toggle_object_state SILPHCO3F_ROCKET, ON + toggle_object_state SILPHCO3F_SCIENTIST, ON + toggle_object_state SILPHCO3F_HYPER_POTION, ON + + toggleable_objects_for SILPH_CO_4F + toggle_object_state SILPHCO4F_ROCKET1, ON + toggle_object_state SILPHCO4F_SCIENTIST, ON + toggle_object_state SILPHCO4F_ROCKET2, ON + toggle_object_state SILPHCO4F_FULL_HEAL, ON + toggle_object_state SILPHCO4F_MAX_REVIVE, ON + toggle_object_state SILPHCO4F_ESCAPE_ROPE, ON + + toggleable_objects_for SILPH_CO_5F + toggle_object_state SILPHCO5F_ROCKET1, ON + toggle_object_state SILPHCO5F_SCIENTIST, ON + toggle_object_state SILPHCO5F_ROCKER, ON + toggle_object_state SILPHCO5F_ROCKET2, ON + toggle_object_state SILPHCO5F_TM_TAKE_DOWN, ON + toggle_object_state SILPHCO5F_PROTEIN, ON + toggle_object_state SILPHCO5F_CARD_KEY, ON + + toggleable_objects_for SILPH_CO_6F + toggle_object_state SILPHCO6F_ROCKET1, ON + toggle_object_state SILPHCO6F_SCIENTIST, ON + toggle_object_state SILPHCO6F_ROCKET2, ON + toggle_object_state SILPHCO6F_HP_UP, ON + toggle_object_state SILPHCO6F_X_ACCURACY, ON + + toggleable_objects_for SILPH_CO_7F + toggle_object_state SILPHCO7F_ROCKET1, ON + toggle_object_state SILPHCO7F_SCIENTIST, ON + toggle_object_state SILPHCO7F_ROCKET2, ON + toggle_object_state SILPHCO7F_ROCKET3, ON + toggle_object_state SILPHCO7F_RIVAL, ON + toggle_object_state SILPHCO7F_CALCIUM, ON + toggle_object_state SILPHCO7F_TM_SWORDS_DANCE, ON + toggle_object_state SILPHCO7F_UNUSED, ON + + toggleable_objects_for SILPH_CO_8F + toggle_object_state SILPHCO8F_ROCKET1, ON + toggle_object_state SILPHCO8F_SCIENTIST, ON + toggle_object_state SILPHCO8F_ROCKET2, ON + + toggleable_objects_for SILPH_CO_9F + toggle_object_state SILPHCO9F_ROCKET1, ON + toggle_object_state SILPHCO9F_SCIENTIST, ON + toggle_object_state SILPHCO9F_ROCKET2, ON + + toggleable_objects_for SILPH_CO_10F + toggle_object_state SILPHCO10F_ROCKET, ON + toggle_object_state SILPHCO10F_SCIENTIST, ON + toggle_object_state SILPHCO10F_SILPH_WORKER_F, ON + toggle_object_state SILPHCO10F_TM_EARTHQUAKE, ON + toggle_object_state SILPHCO10F_RARE_CANDY, ON + toggle_object_state SILPHCO10F_CARBOS, ON + + toggleable_objects_for SILPH_CO_11F + toggle_object_state SILPHCO11F_GIOVANNI, ON + toggle_object_state SILPHCO11F_ROCKET1, ON + toggle_object_state SILPHCO11F_ROCKET2, ON + + toggleable_objects_for UNUSED_MAP_F4 + toggle_object_state $02, ON ; unused + + toggleable_objects_for POKEMON_MANSION_2F + toggle_object_state POKEMONMANSION2F_CALCIUM, ON + + toggleable_objects_for POKEMON_MANSION_3F + toggle_object_state POKEMONMANSION3F_MAX_POTION, ON + toggle_object_state POKEMONMANSION3F_IRON, ON + + toggleable_objects_for POKEMON_MANSION_B1F + toggle_object_state POKEMONMANSIONB1F_RARE_CANDY, ON + toggle_object_state POKEMONMANSIONB1F_FULL_RESTORE, ON + toggle_object_state POKEMONMANSIONB1F_TM_BLIZZARD, ON + toggle_object_state POKEMONMANSIONB1F_TM_SOLARBEAM, ON + toggle_object_state POKEMONMANSIONB1F_SECRET_KEY, ON + + toggleable_objects_for SAFARI_ZONE_EAST + toggle_object_state SAFARIZONEEAST_FULL_RESTORE, ON + toggle_object_state SAFARIZONEEAST_MAX_RESTORE, ON + toggle_object_state SAFARIZONEEAST_CARBOS, ON + toggle_object_state SAFARIZONEEAST_TM_EGG_BOMB, ON + + toggleable_objects_for SAFARI_ZONE_NORTH + toggle_object_state SAFARIZONENORTH_PROTEIN, ON + toggle_object_state SAFARIZONENORTH_TM_SKULL_BASH, ON + + toggleable_objects_for SAFARI_ZONE_WEST + toggle_object_state SAFARIZONEWEST_MAX_POTION, ON + toggle_object_state SAFARIZONEWEST_TM_DOUBLE_TEAM, ON + toggle_object_state SAFARIZONEWEST_MAX_REVIVE, ON + toggle_object_state SAFARIZONEWEST_GOLD_TEETH, ON + + toggleable_objects_for SAFARI_ZONE_CENTER + toggle_object_state SAFARIZONECENTER_NUGGET, ON + + toggleable_objects_for CERULEAN_CAVE_2F + toggle_object_state CERULEANCAVE2F_PP_UP, ON + toggle_object_state CERULEANCAVE2F_ULTRA_BALL, ON + toggle_object_state CERULEANCAVE2F_FULL_RESTORE, ON + + toggleable_objects_for CERULEAN_CAVE_B1F + toggle_object_state CERULEANCAVEB1F_MEWTWO, ON + toggle_object_state CERULEANCAVEB1F_ULTRA_BALL, ON + toggle_object_state CERULEANCAVEB1F_MAX_REVIVE, ON + + toggleable_objects_for VICTORY_ROAD_1F + toggle_object_state VICTORYROAD1F_TM_SKY_ATTACK, ON + toggle_object_state VICTORYROAD1F_RARE_CANDY, ON + + toggleable_objects_for CHAMPIONS_ROOM + toggle_object_state CHAMPIONSROOM_OAK, OFF + + toggleable_objects_for SEAFOAM_ISLANDS_1F + toggle_object_state SEAFOAMISLANDS1F_BOULDER1, ON + toggle_object_state SEAFOAMISLANDS1F_BOULDER2, ON + + toggleable_objects_for SEAFOAM_ISLANDS_B1F + toggle_object_state SEAFOAMISLANDSB1F_BOULDER1, OFF + toggle_object_state SEAFOAMISLANDSB1F_BOULDER2, OFF + + toggleable_objects_for SEAFOAM_ISLANDS_B2F + toggle_object_state SEAFOAMISLANDSB2F_BOULDER1, OFF + toggle_object_state SEAFOAMISLANDSB2F_BOULDER2, OFF + + toggleable_objects_for SEAFOAM_ISLANDS_B3F + toggle_object_state SEAFOAMISLANDSB3F_BOULDER2, ON + toggle_object_state SEAFOAMISLANDSB3F_BOULDER3, ON + toggle_object_state SEAFOAMISLANDSB3F_BOULDER5, OFF + toggle_object_state SEAFOAMISLANDSB3F_BOULDER6, OFF + + toggleable_objects_for SEAFOAM_ISLANDS_B4F + toggle_object_state SEAFOAMISLANDSB4F_BOULDER1, OFF + toggle_object_state SEAFOAMISLANDSB4F_BOULDER2, OFF + toggle_object_state SEAFOAMISLANDSB4F_ARTICUNO, ON + + assert_table_length NUM_TOGGLEABLE_OBJECTS + + db -1, 1, ON ; end diff --git a/data/predef_pointers.asm b/data/predef_pointers.asm index e6968c46..19c3ea8f 100644 --- a/data/predef_pointers.asm +++ b/data/predef_pointers.asm @@ -32,7 +32,7 @@ PredefPointers:: add_predef ApplyOutOfBattlePoisonDamage add_predef AnyPartyAlive add_predef ShowObject - add_predef ShowObject2 + add_predef ShowObject2 ; identical to ShowObject add_predef ReplaceTileBlock add_predef InitPlayerData2 add_predef LoadTilesetHeader @@ -75,7 +75,7 @@ PredefPointers:: add_predef WriteMonMoves add_predef SaveMenu add_predef LoadSGB - add_predef MarkTownVisitedAndLoadMissableObjects + add_predef MarkTownVisitedAndLoadToggleableObjects add_predef SetPartyMonTypes add_predef CanLearnTM add_predef TMToMove diff --git a/engine/events/pick_up_item.asm b/engine/events/pick_up_item.asm index 8fbdcfa2..a55c604a 100644 --- a/engine/events/pick_up_item.asm +++ b/engine/events/pick_up_item.asm @@ -3,19 +3,19 @@ PickUpItem: ldh a, [hSpriteIndex] ld b, a - ld hl, wMissableObjectList -.missableObjectsListLoop + ld hl, wToggleableObjectList +.toggleableObjectsListLoop ld a, [hli] cp $ff ret z cp b - jr z, .isMissable + jr z, .isToggleable inc hl - jr .missableObjectsListLoop + jr .toggleableObjectsListLoop -.isMissable +.isToggleable ld a, [hl] - ldh [hMissableObjectIndex], a + ldh [hToggleableObjectIndex], a ld hl, wMapSpriteExtraData ldh a, [hSpriteIndex] @@ -30,8 +30,8 @@ PickUpItem: call GiveItem jr nc, .BagFull - ldh a, [hMissableObjectIndex] - ld [wMissableObjectIndex], a + ldh a, [hToggleableObjectIndex] + ld [wToggleableObjectIndex], a predef HideObject ld a, 1 ld [wDoNotWaitForButtonPressAfterDisplayingText], a diff --git a/engine/movie/oak_speech/init_player_data.asm b/engine/movie/oak_speech/init_player_data.asm index 843eb96e..bd4f86a4 100644 --- a/engine/movie/oak_speech/init_player_data.asm +++ b/engine/movie/oak_speech/init_player_data.asm @@ -45,7 +45,7 @@ DEF START_MONEY EQU $3000 ld bc, wGameProgressFlagsEnd - wGameProgressFlags call FillMemory ; clear all game progress flags - jp InitializeMissableObjectsFlags + jp InitializeToggleableObjectsFlags InitializeEmptyList: xor a ; count diff --git a/engine/overworld/auto_movement.asm b/engine/overworld/auto_movement.asm index 13d30cca..dc5fc385 100644 --- a/engine/overworld/auto_movement.asm +++ b/engine/overworld/auto_movement.asm @@ -148,8 +148,8 @@ PalletMovementScript_Done: ld a, [wSimulatedJoypadStatesIndex] and a ret nz - ld a, HS_PALLET_TOWN_OAK - ld [wMissableObjectIndex], a + ld a, TOGGLE_PALLET_TOWN_OAK + ld [wToggleableObjectIndex], a predef HideObject ld hl, wStatusFlags5 res BIT_SCRIPTED_MOVEMENT_STATE, [hl] diff --git a/engine/overworld/missable_objects.asm b/engine/overworld/missable_objects.asm deleted file mode 100644 index 8ea79980..00000000 --- a/engine/overworld/missable_objects.asm +++ /dev/null @@ -1,212 +0,0 @@ -MarkTownVisitedAndLoadMissableObjects:: - ld a, [wCurMap] - cp FIRST_ROUTE_MAP - jr nc, .notInTown - ld c, a - ld b, FLAG_SET - ld hl, wTownVisitedFlag ; mark town as visited (for flying) - predef FlagActionPredef -.notInTown - ld hl, MapHSPointers - ld a, [wCurMap] - ld b, $0 - ld c, a - add hl, bc - add hl, bc - ld a, [hli] ; load missable objects pointer in hl - ld h, [hl] - ld l, a - push hl - ld de, MissableObjects ; calculate difference between out pointer and the base pointer - ld a, l - sub e - jr nc, .noCarry - dec h -.noCarry - ld l, a - ld a, h - sub d - ld h, a - ld a, h - ldh [hDividend], a - ld a, l - ldh [hDividend+1], a - xor a - ldh [hDividend+2], a - ldh [hDividend+3], a - ld a, $3 - ldh [hDivisor], a - ld b, $2 - call Divide ; divide difference by 3, resulting in the global offset (number of missable items before ours) - ld a, [wCurMap] - ld b, a - ldh a, [hDividend+3] - ld c, a ; store global offset in c - ld de, wMissableObjectList - pop hl -.writeMissableObjectsListLoop - ld a, [hli] - cp -1 - jr z, .done ; end of list - cp b - jr nz, .done ; not for current map anymore - ld a, [hli] - inc hl - ld [de], a ; write (map-local) sprite ID - inc de - ld a, c - inc c - ld [de], a ; write (global) missable object index - inc de - jr .writeMissableObjectsListLoop -.done - ld a, -1 - ld [de], a ; write sentinel - ret - -InitializeMissableObjectsFlags: - ld hl, wMissableObjectFlags - ld bc, wMissableObjectFlagsEnd - wMissableObjectFlags - xor a - call FillMemory ; clear missable objects flags - ld hl, MissableObjects - xor a - ld [wMissableObjectCounter], a -.missableObjectsLoop - ld a, [hli] - cp -1 ; end of list - ret z - push hl - inc hl - ld a, [hl] - cp HIDE - jr nz, .skip - ld hl, wMissableObjectFlags - ld a, [wMissableObjectCounter] - ld c, a - ld b, FLAG_SET - call MissableObjectFlagAction ; set flag if Item is hidden -.skip - ld hl, wMissableObjectCounter - inc [hl] - pop hl - inc hl - inc hl - jr .missableObjectsLoop - -; tests if current sprite is a missable object that is hidden/has been removed -IsObjectHidden: - ldh a, [hCurrentSpriteOffset] - swap a - ld b, a - ld hl, wMissableObjectList -.loop - ld a, [hli] - cp -1 - jr z, .notHidden ; not missable -> not hidden - cp b - ld a, [hli] - jr nz, .loop - ld c, a - ld b, FLAG_TEST - ld hl, wMissableObjectFlags - call MissableObjectFlagAction - ld a, c - and a - jr nz, .hidden -.notHidden - xor a -.hidden - ldh [hIsHiddenMissableObject], a - ret - -; adds missable object (items, leg. pokemon, etc.) to the map -; [wMissableObjectIndex]: index of the missable object to be added (global index) -ShowObject: -ShowObject2: - ld hl, wMissableObjectFlags - ld a, [wMissableObjectIndex] - ld c, a - ld b, FLAG_RESET - call MissableObjectFlagAction ; reset "removed" flag - jp UpdateSprites - -; removes missable object (items, leg. pokemon, etc.) from the map -; [wMissableObjectIndex]: index of the missable object to be removed (global index) -HideObject: - ld hl, wMissableObjectFlags - ld a, [wMissableObjectIndex] - ld c, a - ld b, FLAG_SET - call MissableObjectFlagAction ; set "removed" flag - jp UpdateSprites - -MissableObjectFlagAction: -; identical to FlagAction - - push hl - push de - push bc - - ; bit - ld a, c - ld d, a - and 7 - ld e, a - - ; byte - ld a, d - srl a - srl a - srl a - add l - ld l, a - jr nc, .ok - inc h -.ok - - ; d = 1 << e (bitmask) - inc e - ld d, 1 -.shift - dec e - jr z, .shifted - sla d - jr .shift -.shifted - - ld a, b - and a - jr z, .reset - cp FLAG_TEST - jr z, .read - -; set - ld a, [hl] - ld b, a - ld a, d - or b - ld [hl], a - jr .done - -.reset - ld a, [hl] - ld b, a - ld a, d - xor $ff - and b - ld [hl], a - jr .done - -.read - ld a, [hl] - ld b, a - ld a, d - and b - -.done - pop bc - pop de - pop hl - ld c, a - ret diff --git a/engine/overworld/movement.asm b/engine/overworld/movement.asm index a353c4f1..be8d6f62 100644 --- a/engine/overworld/movement.asm +++ b/engine/overworld/movement.asm @@ -478,7 +478,7 @@ InitializeSpriteScreenPosition: ; tests if sprite is off screen or otherwise unable to do anything CheckSpriteAvailability: predef IsObjectHidden - ldh a, [hIsHiddenMissableObject] + ldh a, [hIsToggleableObjectOff] and a jp nz, .spriteInvisible ld h, HIGH(wSpriteStateData2) diff --git a/engine/overworld/toggleable_objects.asm b/engine/overworld/toggleable_objects.asm new file mode 100644 index 00000000..bfb3576c --- /dev/null +++ b/engine/overworld/toggleable_objects.asm @@ -0,0 +1,213 @@ +MarkTownVisitedAndLoadToggleableObjects:: + ld a, [wCurMap] + cp FIRST_ROUTE_MAP + jr nc, .notInTown + ld c, a + ld b, FLAG_SET + ld hl, wTownVisitedFlag ; mark town as visited (for flying) + predef FlagActionPredef +.notInTown + ld hl, ToggleableObjectMapPointers + ld a, [wCurMap] + ld b, $0 + ld c, a + add hl, bc + add hl, bc + ld a, [hli] ; load toggleable objects pointer in hl + ld h, [hl] + ld l, a + push hl + ld de, ToggleableObjectStates ; calculate difference between out pointer and the base pointer + ld a, l + sub e + jr nc, .noCarry + dec h +.noCarry + ld l, a + ld a, h + sub d + ld h, a + ; divide difference by 3, resulting in the global offset (number of toggleable items before ours) + ld a, h + ldh [hDividend], a + ld a, l + ldh [hDividend+1], a + xor a + ldh [hDividend+2], a + ldh [hDividend+3], a + ld a, $3 + ldh [hDivisor], a + ld b, $2 + call Divide + ld a, [wCurMap] + ld b, a + ldh a, [hDividend+3] + ld c, a ; store global offset in c + ld de, wToggleableObjectList + pop hl +.writeToggleableObjectsListLoop + ld a, [hli] + cp -1 + jr z, .done ; end of list + cp b + jr nz, .done ; not for current map anymore + ld a, [hli] + inc hl + ld [de], a ; write (map-local) sprite ID + inc de + ld a, c + inc c + ld [de], a ; write (global) toggleable object index + inc de + jr .writeToggleableObjectsListLoop +.done + ld a, -1 + ld [de], a ; write sentinel + ret + +InitializeToggleableObjectsFlags: + ld hl, wToggleableObjectFlags + ld bc, wToggleableObjectFlagsEnd - wToggleableObjectFlags + xor a + call FillMemory ; clear toggleable objects flags + ld hl, ToggleableObjectStates + xor a + ld [wToggleableObjectCounter], a +.toggleableObjectsLoop + ld a, [hli] + cp -1 ; end of list + ret z + push hl + inc hl + ld a, [hl] + cp OFF + jr nz, .skip + ld hl, wToggleableObjectFlags + ld a, [wToggleableObjectCounter] + ld c, a + ld b, FLAG_SET + call ToggleableObjectFlagAction ; set flag if object is toggled off +.skip + ld hl, wToggleableObjectCounter + inc [hl] + pop hl + inc hl + inc hl + jr .toggleableObjectsLoop + +; tests if current object is toggled off/has been hidden +IsObjectHidden: + ldh a, [hCurrentSpriteOffset] + swap a + ld b, a + ld hl, wToggleableObjectList +.loop + ld a, [hli] + cp -1 + jr z, .notHidden ; not toggleable -> not hidden + cp b + ld a, [hli] + jr nz, .loop + ld c, a + ld b, FLAG_TEST + ld hl, wToggleableObjectFlags + call ToggleableObjectFlagAction + ld a, c + and a + jr nz, .hidden +.notHidden + xor a +.hidden + ldh [hIsToggleableObjectOff], a + ret + +; adds toggleable object (items, leg. pokemon, etc.) to the map +; [wToggleableObjectIndex]: index of the toggleable object to be added (global index) +ShowObject: +ShowObject2: + ld hl, wToggleableObjectFlags + ld a, [wToggleableObjectIndex] + ld c, a + ld b, FLAG_RESET + call ToggleableObjectFlagAction ; reset "removed" flag + jp UpdateSprites + +; removes toggleable object (items, leg. pokemon, etc.) from the map +; [wToggleableObjectIndex]: index of the toggleable object to be removed (global index) +HideObject: + ld hl, wToggleableObjectFlags + ld a, [wToggleableObjectIndex] + ld c, a + ld b, FLAG_SET + call ToggleableObjectFlagAction ; set "removed" flag + jp UpdateSprites + +ToggleableObjectFlagAction: +; identical to FlagAction + + push hl + push de + push bc + + ; bit + ld a, c + ld d, a + and 7 + ld e, a + + ; byte + ld a, d + srl a + srl a + srl a + add l + ld l, a + jr nc, .ok + inc h +.ok + + ; d = 1 << e (bitmask) + inc e + ld d, 1 +.shift + dec e + jr z, .shifted + sla d + jr .shift +.shifted + + ld a, b + and a + jr z, .reset + cp FLAG_TEST + jr z, .read + +; set + ld a, [hl] + ld b, a + ld a, d + or b + ld [hl], a + jr .done + +.reset + ld a, [hl] + ld b, a + ld a, d + xor $ff + and b + ld [hl], a + jr .done + +.read + ld a, [hl] + ld b, a + ld a, d + and b + +.done + pop bc + pop de + pop hl + ld c, a + ret diff --git a/home/overworld.asm b/home/overworld.asm index e994f694..58550167 100644 --- a/home/overworld.asm +++ b/home/overworld.asm @@ -2003,7 +2003,7 @@ LoadPlayerSpriteGraphicsCommon:: ; function to load data from the map header LoadMapHeader:: - farcall MarkTownVisitedAndLoadMissableObjects + farcall MarkTownVisitedAndLoadToggleableObjects ld a, [wCurMapTileset] ld [wUnusedCurMapTilesetCopy], a ld a, [wCurMap] diff --git a/home/trainers.asm b/home/trainers.asm index 8d2cceaf..87bc7d69 100644 --- a/home/trainers.asm +++ b/home/trainers.asm @@ -202,13 +202,13 @@ EndTrainerBattle:: ld a, [wEnemyMonOrTrainerClass] cp OPP_ID_OFFSET jr nc, .skipRemoveSprite ; test if trainer was fought (in that case skip removing the corresponding sprite) - ld hl, wMissableObjectList + ld hl, wToggleableObjectList ld de, $2 ld a, [wSpriteIndex] call IsInArray ; search for sprite ID inc hl ld a, [hl] - ld [wMissableObjectIndex], a ; load corresponding missable object index and remove it + ld [wToggleableObjectIndex], a ; load corresponding toggleable object index and remove it predef HideObject .skipRemoveSprite ld hl, wStatusFlags5 diff --git a/includes.asm b/includes.asm index 781bb0b1..ea6f1a8e 100644 --- a/includes.asm +++ b/includes.asm @@ -41,7 +41,7 @@ INCLUDE "constants/list_constants.asm" INCLUDE "constants/map_constants.asm" INCLUDE "constants/map_data_constants.asm" INCLUDE "constants/map_object_constants.asm" -INCLUDE "constants/hide_show_constants.asm" +INCLUDE "constants/toggle_constants.asm" INCLUDE "constants/sprite_set_constants.asm" INCLUDE "constants/credits_constants.asm" INCLUDE "constants/audio_constants.asm" diff --git a/main.asm b/main.asm index 11ee2fa9..313bd448 100644 --- a/main.asm +++ b/main.asm @@ -49,7 +49,7 @@ INCLUDE "engine/overworld/player_state.asm" INCLUDE "engine/events/poison.asm" INCLUDE "engine/overworld/tilesets.asm" INCLUDE "engine/overworld/daycare_exp.asm" -INCLUDE "data/maps/hide_show_data.asm" +INCLUDE "data/maps/toggleable_objects.asm" INCLUDE "engine/overworld/field_move_messages.asm" INCLUDE "engine/items/inventory.asm" INCLUDE "engine/overworld/wild_mons.asm" @@ -57,7 +57,7 @@ INCLUDE "engine/items/item_effects.asm" INCLUDE "engine/menus/draw_badges.asm" INCLUDE "engine/overworld/update_map.asm" INCLUDE "engine/overworld/cut.asm" -INCLUDE "engine/overworld/missable_objects.asm" +INCLUDE "engine/overworld/toggleable_objects.asm" INCLUDE "engine/overworld/push_boulder.asm" INCLUDE "engine/pokemon/add_mon.asm" INCLUDE "engine/flag_action.asm" diff --git a/ram/hram.asm b/ram/hram.asm index 1be1dab6..9cfb5327 100644 --- a/ram/hram.asm +++ b/ram/hram.asm @@ -325,7 +325,7 @@ hItemToRemoveIndex:: db NEXTU hItemCounter:: hSavedCoordIndex:: -hMissableObjectIndex:: +hToggleableObjectIndex:: hGymTrashCanRandNumMask:: hInteractedWithBookshelf:: db @@ -350,7 +350,7 @@ hDivisor2:: db hQuotient2:: db NEXTU -hIsHiddenMissableObject:: db +hIsToggleableObjectOff:: db ENDU hMapROMBank:: db diff --git a/ram/wram.asm b/ram/wram.asm index fff7f703..5eefaf06 100644 --- a/ram/wram.asm +++ b/ram/wram.asm @@ -324,7 +324,7 @@ wCheckFor180DegreeTurn:: db ds 1 -wMissableObjectIndex:: db +wToggleableObjectIndex:: db wPredefID:: db wPredefHL:: dw @@ -1224,7 +1224,7 @@ ENDU ; money received after battle = base money × level of last enemy mon wTrainerBaseMoney:: dw ; BCD -wMissableObjectCounter:: db +wToggleableObjectCounter:: db ds 1 @@ -1909,9 +1909,9 @@ wUnusedMapVariable:: db wPlayerCoins:: dw ; BCD -; bit array of missable objects. set = removed -wMissableObjectFlags:: flag_array $100 -wMissableObjectFlagsEnd:: +; bit array of toggleable objects; bit set = toggled off +wToggleableObjectFlags:: flag_array $100 +wToggleableObjectFlagsEnd:: ds 7 @@ -1920,9 +1920,9 @@ wSavedSpriteImageIndex:: db ; each entry consists of 2 bytes ; * the sprite ID (depending on the current map) -; * the missable object index (global, used for wMissableObjectFlags) +; * the toggleable object index (global, used for wToggleableObjectFlags) ; terminated with $FF -wMissableObjectList:: ds 16 * 2 + 1 +wToggleableObjectList:: ds 16 * 2 + 1 ds 1 diff --git a/scripts/BillsHouse.asm b/scripts/BillsHouse.asm index d43ae546..8ecebd20 100644 --- a/scripts/BillsHouse.asm +++ b/scripts/BillsHouse.asm @@ -49,8 +49,8 @@ BillsHousePokemonEntersMachineScript: ld a, [wStatusFlags5] bit BIT_SCRIPTED_NPC_MOVEMENT, a ret nz - ld a, HS_BILL_POKEMON - ld [wMissableObjectIndex], a + ld a, TOGGLE_BILL_POKEMON + ld [wToggleableObjectIndex], a predef HideObject SetEvent EVENT_BILL_SAID_USE_CELL_SEPARATOR xor a @@ -75,8 +75,8 @@ BillsHouseBillExitsMachineScript: ld a, 5 ldh [hSpriteMapXCoord], a call SetSpritePosition1 - ld a, HS_BILL_1 - ld [wMissableObjectIndex], a + ld a, TOGGLE_BILL_1 + ld [wToggleableObjectIndex], a predef ShowObject ld c, 8 call DelayFrames @@ -171,11 +171,11 @@ BillsHouseBillSSTicketText: ld hl, .SSTicketReceivedText call PrintText SetEvent EVENT_GOT_SS_TICKET - ld a, HS_CERULEAN_GUARD_1 - ld [wMissableObjectIndex], a + ld a, TOGGLE_CERULEAN_GUARD_1 + ld [wToggleableObjectIndex], a predef ShowObject - ld a, HS_CERULEAN_GUARD_2 - ld [wMissableObjectIndex], a + ld a, TOGGLE_CERULEAN_GUARD_2 + ld [wToggleableObjectIndex], a predef HideObject .got_ss_ticket ld hl, .WhyDontYouGoInsteadOfMeText diff --git a/scripts/BluesHouse.asm b/scripts/BluesHouse.asm index 0a16abbf..b85b6d21 100644 --- a/scripts/BluesHouse.asm +++ b/scripts/BluesHouse.asm @@ -40,8 +40,8 @@ BluesHouseDaisySittingText: lb bc, TOWN_MAP, 1 call GiveItem jr nc, .bag_full - ld a, HS_TOWN_MAP - ld [wMissableObjectIndex], a + ld a, TOGGLE_TOWN_MAP + ld [wToggleableObjectIndex], a predef HideObject ld hl, GotMapText call PrintText diff --git a/scripts/CeladonMansionRoofHouse.asm b/scripts/CeladonMansionRoofHouse.asm index d3c03290..12eff10c 100644 --- a/scripts/CeladonMansionRoofHouse.asm +++ b/scripts/CeladonMansionRoofHouse.asm @@ -15,8 +15,8 @@ CeladonMansionRoofHouseEeveePokeballText: lb bc, EEVEE, 25 call GivePokemon jr nc, .party_full - ld a, HS_CELADON_MANSION_EEVEE_GIFT - ld [wMissableObjectIndex], a + ld a, TOGGLE_CELADON_MANSION_EEVEE_GIFT + ld [wToggleableObjectIndex], a predef HideObject .party_full jp TextScriptEnd diff --git a/scripts/CeruleanCity.asm b/scripts/CeruleanCity.asm index 4412b49c..cbd60936 100644 --- a/scripts/CeruleanCity.asm +++ b/scripts/CeruleanCity.asm @@ -8,8 +8,8 @@ CeruleanCityClearScripts: xor a ; SCRIPT_CERULEANCITY_DEFAULT ld [wJoyIgnore], a ld [wCeruleanCityCurScript], a - ld a, HS_CERULEAN_RIVAL - ld [wMissableObjectIndex], a + ld a, TOGGLE_CERULEAN_RIVAL + ld [wToggleableObjectIndex], a predef_jump HideObject CeruleanCity_ScriptPointers: @@ -90,8 +90,8 @@ ENDC call GetPointerWithinSpriteStateData2 ld [hl], 25 .playerOnRightSideOfBridge - ld a, HS_CERULEAN_RIVAL - ld [wMissableObjectIndex], a + ld a, TOGGLE_CERULEAN_RIVAL + ld [wToggleableObjectIndex], a predef ShowObject ld de, CeruleanCityMovement1 ld a, CERULEANCITY_RIVAL @@ -222,8 +222,8 @@ CeruleanCityRivalCleanupScript: ld a, [wStatusFlags5] bit BIT_SCRIPTED_NPC_MOVEMENT, a ret nz - ld a, HS_CERULEAN_RIVAL - ld [wMissableObjectIndex], a + ld a, TOGGLE_CERULEAN_RIVAL + ld [wToggleableObjectIndex], a predef HideObject xor a ld [wJoyIgnore], a diff --git a/scripts/CeruleanCity_2.asm b/scripts/CeruleanCity_2.asm index 53ace5c8..85986a7a 100644 --- a/scripts/CeruleanCity_2.asm +++ b/scripts/CeruleanCity_2.asm @@ -3,14 +3,14 @@ CeruleanHideRocket: ; one is called after you beat the Rocket that gives you TM28 DIG. ; the screen then fades out, he disappears, and fades back in call GBFadeOutToBlack - ld a, HS_CERULEAN_GUARD_1 - ld [wMissableObjectIndex], a + ld a, TOGGLE_CERULEAN_GUARD_1 + ld [wToggleableObjectIndex], a predef ShowObject - ld a, HS_CERULEAN_GUARD_2 - ld [wMissableObjectIndex], a + ld a, TOGGLE_CERULEAN_GUARD_2 + ld [wToggleableObjectIndex], a predef HideObject - ld a, HS_CERULEAN_ROCKET - ld [wMissableObjectIndex], a + ld a, TOGGLE_CERULEAN_ROCKET + ld [wToggleableObjectIndex], a predef HideObject call GBFadeInFromBlack ret diff --git a/scripts/ChampionsRoom.asm b/scripts/ChampionsRoom.asm index 68448b3d..752a0a31 100644 --- a/scripts/ChampionsRoom.asm +++ b/scripts/ChampionsRoom.asm @@ -120,8 +120,8 @@ ChampionsRoomOakArrivesScript: ld a, CHAMPIONSROOM_OAK ldh [hSpriteIndex], a call MoveSprite - ld a, HS_CHAMPIONS_ROOM_OAK - ld [wMissableObjectIndex], a + ld a, TOGGLE_CHAMPIONS_ROOM_OAK + ld [wToggleableObjectIndex], a predef ShowObject ld a, SCRIPT_CHAMPIONSROOM_OAK_CONGRATULATES_PLAYER ld [wChampionsRoomCurScript], a @@ -197,8 +197,8 @@ ChampionsRoomOakExitsScript: ld a, [wStatusFlags5] bit BIT_SCRIPTED_NPC_MOVEMENT, a ret nz - ld a, HS_CHAMPIONS_ROOM_OAK - ld [wMissableObjectIndex], a + ld a, TOGGLE_CHAMPIONS_ROOM_OAK + ld [wToggleableObjectIndex], a predef HideObject ld a, SCRIPT_CHAMPIONSROOM_PLAYER_FOLLOWS_OAK ld [wChampionsRoomCurScript], a diff --git a/scripts/FightingDojo.asm b/scripts/FightingDojo.asm index 04b35e82..cf822d1f 100644 --- a/scripts/FightingDojo.asm +++ b/scripts/FightingDojo.asm @@ -246,8 +246,8 @@ FightingDojoHitmonleePokeBallText: jr nc, .done ; once Poké Ball is taken, hide sprite - ld a, HS_FIGHTING_DOJO_GIFT_1 - ld [wMissableObjectIndex], a + ld a, TOGGLE_FIGHTING_DOJO_GIFT_1 + ld [wToggleableObjectIndex], a predef HideObject SetEvents EVENT_GOT_HITMONLEE, EVENT_DEFEATED_FIGHTING_DOJO .done @@ -281,8 +281,8 @@ FightingDojoHitmonchanPokeBallText: SetEvents EVENT_GOT_HITMONCHAN, EVENT_DEFEATED_FIGHTING_DOJO ; once Poké Ball is taken, hide sprite - ld a, HS_FIGHTING_DOJO_GIFT_2 - ld [wMissableObjectIndex], a + ld a, TOGGLE_FIGHTING_DOJO_GIFT_2 + ld [wToggleableObjectIndex], a predef HideObject .done jp TextScriptEnd diff --git a/scripts/GameCorner.asm b/scripts/GameCorner.asm index 028b5c88..0ead1947 100644 --- a/scripts/GameCorner.asm +++ b/scripts/GameCorner.asm @@ -107,8 +107,8 @@ GameCornerRocketExitScript: ret nz xor a ld [wJoyIgnore], a - ld a, HS_GAME_CORNER_ROCKET - ld [wMissableObjectIndex], a + ld a, TOGGLE_GAME_CORNER_ROCKET + ld [wToggleableObjectIndex], a predef HideObject ld hl, wCurrentMapScriptFlags set BIT_CUR_MAP_LOADED_1, [hl] diff --git a/scripts/HallOfFame.asm b/scripts/HallOfFame.asm index 31d56022..8e4f1275 100644 --- a/scripts/HallOfFame.asm +++ b/scripts/HallOfFame.asm @@ -96,8 +96,8 @@ HallOfFameOakCongratulationsScript: call DisplayTextID ld a, PAD_BUTTONS | PAD_CTRL_PAD ld [wJoyIgnore], a - ld a, HS_CERULEAN_CAVE_GUY - ld [wMissableObjectIndex], a + ld a, TOGGLE_CERULEAN_CAVE_GUY + ld [wToggleableObjectIndex], a predef HideObject ld a, SCRIPT_HALLOFFAME_RESET_EVENTS_AND_SAVE ld [wHallOfFameCurScript], a diff --git a/scripts/MtMoonB2F.asm b/scripts/MtMoonB2F.asm index 34f11d99..d3c7e57a 100644 --- a/scripts/MtMoonB2F.asm +++ b/scripts/MtMoonB2F.asm @@ -141,12 +141,12 @@ MtMoonB2FSuperNerdTakesOtherFossilScript: call DisplayTextID CheckEvent EVENT_GOT_DOME_FOSSIL jr z, .got_dome_fossil - ld a, HS_MT_MOON_B2F_FOSSIL_2 + ld a, TOGGLE_MT_MOON_B2F_FOSSIL_2 jr .continue .got_dome_fossil - ld a, HS_MT_MOON_B2F_FOSSIL_1 + ld a, TOGGLE_MT_MOON_B2F_FOSSIL_1 .continue - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef HideObject xor a ld [wJoyIgnore], a @@ -250,8 +250,8 @@ MtMoonB2FDomeFossilText: call GiveItem jp nc, MtMoonB2FYouHaveNoRoomText call MtMoonB2FReceivedFossilText - ld a, HS_MT_MOON_B2F_FOSSIL_1 - ld [wMissableObjectIndex], a + ld a, TOGGLE_MT_MOON_B2F_FOSSIL_1 + ld [wToggleableObjectIndex], a predef HideObject SetEvent EVENT_GOT_DOME_FOSSIL ld a, SCRIPT_MTMOONB2F_MOVE_SUPER_NERD @@ -278,8 +278,8 @@ MtMoonB2FHelixFossilText: call GiveItem jp nc, MtMoonB2FYouHaveNoRoomText call MtMoonB2FReceivedFossilText - ld a, HS_MT_MOON_B2F_FOSSIL_2 - ld [wMissableObjectIndex], a + ld a, TOGGLE_MT_MOON_B2F_FOSSIL_2 + ld [wToggleableObjectIndex], a predef HideObject SetEvent EVENT_GOT_HELIX_FOSSIL ld a, SCRIPT_MTMOONB2F_MOVE_SUPER_NERD diff --git a/scripts/Museum1F.asm b/scripts/Museum1F.asm index 6cb6889a..e56a5c11 100644 --- a/scripts/Museum1F.asm +++ b/scripts/Museum1F.asm @@ -197,8 +197,8 @@ Museum1FScientist2Text: call GiveItem jr nc, .bag_full SetEvent EVENT_GOT_OLD_AMBER - ld a, HS_OLD_AMBER - ld [wMissableObjectIndex], a + ld a, TOGGLE_OLD_AMBER + ld [wToggleableObjectIndex], a predef HideObject ld hl, .ReceivedOldAmberText jr .done diff --git a/scripts/OaksLab.asm b/scripts/OaksLab.asm index 9695b99e..12b58c3f 100644 --- a/scripts/OaksLab.asm +++ b/scripts/OaksLab.asm @@ -13,7 +13,7 @@ OaksLab_ScriptPointers: def_script_pointers dw_const OaksLabDefaultScript, SCRIPT_OAKSLAB_DEFAULT dw_const OaksLabOakEntersLabScript, SCRIPT_OAKSLAB_OAK_ENTERS_LAB - dw_const OaksLabHideShowOaksScript, SCRIPT_OAKSLAB_HIDE_SHOW_OAKS + dw_const OaksLabToggleOaksScript, SCRIPT_OAKSLAB_TOGGLE_OAKS dw_const OaksLabPlayerEntersLabScript, SCRIPT_OAKSLAB_PLAYER_ENTERS_LAB dw_const OaksLabFollowedOakScript, SCRIPT_OAKSLAB_FOLLOWED_OAK dw_const OaksLabOakChooseMonSpeechScript, SCRIPT_OAKSLAB_OAK_CHOOSE_MON_SPEECH @@ -37,8 +37,8 @@ OaksLabDefaultScript: ld a, [wNPCMovementScriptFunctionNum] and a ret nz - ld a, HS_OAKS_LAB_OAK_2 - ld [wMissableObjectIndex], a + ld a, TOGGLE_OAKS_LAB_OAK_2 + ld [wToggleableObjectIndex], a predef ShowObject ld hl, wStatusFlags4 res BIT_NO_BATTLES, [hl] @@ -53,7 +53,7 @@ OaksLabOakEntersLabScript: ld de, OakEntryMovement call MoveSprite - ld a, SCRIPT_OAKSLAB_HIDE_SHOW_OAKS + ld a, SCRIPT_OAKSLAB_TOGGLE_OAKS ld [wOaksLabCurScript], a ret @@ -63,15 +63,15 @@ OakEntryMovement: db NPC_MOVEMENT_UP db -1 ; end -OaksLabHideShowOaksScript: +OaksLabToggleOaksScript: ld a, [wStatusFlags5] bit BIT_SCRIPTED_NPC_MOVEMENT, a ret nz - ld a, HS_OAKS_LAB_OAK_2 - ld [wMissableObjectIndex], a + ld a, TOGGLE_OAKS_LAB_OAK_2 + ld [wToggleableObjectIndex], a predef HideObject - ld a, HS_OAKS_LAB_OAK_1 - ld [wMissableObjectIndex], a + ld a, TOGGLE_OAKS_LAB_OAK_1 + ld [wToggleableObjectIndex], a predef ShowObject ld a, SCRIPT_OAKSLAB_PLAYER_ENTERS_LAB @@ -306,17 +306,17 @@ OaksLabRivalChoosesStarterScript: ld a, [wRivalStarterBallSpriteIndex] cp OAKSLAB_CHARMANDER_POKE_BALL jr nz, .not_charmander - ld a, HS_STARTER_BALL_1 + ld a, TOGGLE_STARTER_BALL_1 jr .hideBallAndContinue .not_charmander cp OAKSLAB_SQUIRTLE_POKE_BALL jr nz, .not_squirtle - ld a, HS_STARTER_BALL_2 + ld a, TOGGLE_STARTER_BALL_2 jr .hideBallAndContinue .not_squirtle - ld a, HS_STARTER_BALL_3 + ld a, TOGGLE_STARTER_BALL_3 .hideBallAndContinue - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef HideObject call Delay3 ld a, [wRivalStarterTemp] @@ -475,8 +475,8 @@ OaksLabPlayerWatchRivalExitScript: ld a, [wStatusFlags5] bit BIT_SCRIPTED_NPC_MOVEMENT, a jr nz, .checkRivalPosition - ld a, HS_OAKS_LAB_RIVAL - ld [wMissableObjectIndex], a + ld a, TOGGLE_OAKS_LAB_RIVAL + ld [wToggleableObjectIndex], a predef HideObject xor a ld [wJoyIgnore], a @@ -519,8 +519,8 @@ OaksLabRivalArrivesAtOaksRequestScript: ldh [hTextID], a call DisplayTextID call OaksLabCalcRivalMovementScript - ld a, HS_OAKS_LAB_RIVAL - ld [wMissableObjectIndex], a + ld a, TOGGLE_OAKS_LAB_RIVAL + ld [wToggleableObjectIndex], a predef ShowObject ld a, [wNPCMovementDirections2Index] ld [wSavedNPCMovementDirections2Index], a @@ -578,11 +578,11 @@ OaksLabOakGivesPokedexScript: ldh [hTextID], a call DisplayTextID call Delay3 - ld a, HS_POKEDEX_1 - ld [wMissableObjectIndex], a + ld a, TOGGLE_POKEDEX_1 + ld [wToggleableObjectIndex], a predef HideObject - ld a, HS_POKEDEX_2 - ld [wMissableObjectIndex], a + ld a, TOGGLE_POKEDEX_2 + ld [wToggleableObjectIndex], a predef HideObject call OaksLabRivalFaceUpOakFaceDownScript ld a, TEXT_OAKSLAB_OAK_THAT_WAS_MY_DREAM @@ -599,11 +599,11 @@ OaksLabOakGivesPokedexScript: call DisplayTextID SetEvent EVENT_GOT_POKEDEX SetEvent EVENT_OAK_GOT_PARCEL - ld a, HS_LYING_OLD_MAN - ld [wMissableObjectIndex], a + ld a, TOGGLE_LYING_OLD_MAN + ld [wToggleableObjectIndex], a predef HideObject - ld a, HS_OLD_MAN - ld [wMissableObjectIndex], a + ld a, TOGGLE_OLD_MAN + ld [wToggleableObjectIndex], a predef ShowObject ld a, [wSavedNPCMovementDirections2Index] ld b, 0 @@ -630,14 +630,14 @@ OaksLabRivalLeavesWithPokedexScript: bit BIT_SCRIPTED_NPC_MOVEMENT, a ret nz call PlayDefaultMusic - ld a, HS_OAKS_LAB_RIVAL - ld [wMissableObjectIndex], a + ld a, TOGGLE_OAKS_LAB_RIVAL + ld [wToggleableObjectIndex], a predef HideObject SetEvent EVENT_1ST_ROUTE22_RIVAL_BATTLE ResetEventReuseHL EVENT_2ND_ROUTE22_RIVAL_BATTLE SetEventReuseHL EVENT_ROUTE22_RIVAL_WANTS_BATTLE - ld a, HS_ROUTE_22_RIVAL_1 - ld [wMissableObjectIndex], a + ld a, TOGGLE_ROUTE_22_RIVAL_1 + ld [wToggleableObjectIndex], a predef ShowObject ld a, SCRIPT_PALLETTOWN_DAISY ld [wPalletTownCurScript], a @@ -904,17 +904,17 @@ OaksLabMonChoiceMenu: ld a, [wSpriteIndex] cp OAKSLAB_CHARMANDER_POKE_BALL jr nz, .not_charmander - ld a, HS_STARTER_BALL_1 + ld a, TOGGLE_STARTER_BALL_1 jr .continue .not_charmander cp OAKSLAB_SQUIRTLE_POKE_BALL jr nz, .not_squirtle - ld a, HS_STARTER_BALL_2 + ld a, TOGGLE_STARTER_BALL_2 jr .continue .not_squirtle - ld a, HS_STARTER_BALL_3 + ld a, TOGGLE_STARTER_BALL_3 .continue - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef HideObject ld a, $1 ld [wDoNotWaitForButtonPressAfterDisplayingText], a diff --git a/scripts/PalletTown.asm b/scripts/PalletTown.asm index 57c231fa..de88945f 100644 --- a/scripts/PalletTown.asm +++ b/scripts/PalletTown.asm @@ -51,8 +51,8 @@ PalletTownOakHeyWaitScript: call DisplayTextID ld a, PAD_BUTTONS | PAD_CTRL_PAD ld [wJoyIgnore], a - ld a, HS_PALLET_TOWN_OAK - ld [wMissableObjectIndex], a + ld a, TOGGLE_PALLET_TOWN_OAK + ld [wToggleableObjectIndex], a predef ShowObject ; trigger the next script @@ -136,11 +136,11 @@ PalletTownDaisyScript: CheckBothEventsSet EVENT_GOT_TOWN_MAP, EVENT_ENTERED_BLUES_HOUSE, 1 jr nz, .next SetEvent EVENT_DAISY_WALKING - ld a, HS_DAISY_SITTING - ld [wMissableObjectIndex], a + ld a, TOGGLE_DAISY_SITTING + ld [wToggleableObjectIndex], a predef HideObject - ld a, HS_DAISY_WALKING - ld [wMissableObjectIndex], a + ld a, TOGGLE_DAISY_WALKING + ld [wToggleableObjectIndex], a predef_jump ShowObject .next CheckEvent EVENT_GOT_POKEBALLS_FROM_OAK diff --git a/scripts/PewterCity.asm b/scripts/PewterCity.asm index 9693b88f..549a1cad 100644 --- a/scripts/PewterCity.asm +++ b/scripts/PewterCity.asm @@ -92,8 +92,8 @@ PewterCityHideSuperNerd1Script: ld a, [wStatusFlags5] bit BIT_SCRIPTED_NPC_MOVEMENT, a ret nz - ld a, HS_MUSEUM_GUY - ld [wMissableObjectIndex], a + ld a, TOGGLE_MUSEUM_GUY + ld [wToggleableObjectIndex], a predef HideObject ld a, SCRIPT_PEWTERCITY_RESET_SUPER_NERD1 ld [wPewterCityCurScript], a @@ -103,8 +103,8 @@ PewterCityResetSuperNerd1Script: ld a, PEWTERCITY_SUPER_NERD1 ld [wSpriteIndex], a call SetSpritePosition2 - ld a, HS_MUSEUM_GUY - ld [wMissableObjectIndex], a + ld a, TOGGLE_MUSEUM_GUY + ld [wToggleableObjectIndex], a predef ShowObject xor a ld [wJoyIgnore], a @@ -161,8 +161,8 @@ PewterCityHideYoungsterScript: ld a, [wStatusFlags5] bit BIT_SCRIPTED_NPC_MOVEMENT, a ret nz - ld a, HS_GYM_GUY - ld [wMissableObjectIndex], a + ld a, TOGGLE_GYM_GUY + ld [wToggleableObjectIndex], a predef HideObject ld a, SCRIPT_PEWTERCITY_RESET_YOUNGSTER ld [wPewterCityCurScript], a @@ -172,8 +172,8 @@ PewterCityResetYoungsterScript: ld a, PEWTERCITY_YOUNGSTER ld [wSpriteIndex], a call SetSpritePosition2 - ld a, HS_GYM_GUY - ld [wMissableObjectIndex], a + ld a, TOGGLE_GYM_GUY + ld [wToggleableObjectIndex], a predef ShowObject xor a ld [wJoyIgnore], a diff --git a/scripts/PewterGym.asm b/scripts/PewterGym.asm index 0f4b9ebe..40a04d73 100644 --- a/scripts/PewterGym.asm +++ b/scripts/PewterGym.asm @@ -66,11 +66,11 @@ PewterGymScriptReceiveTM34: ld hl, wBeatGymFlags set BIT_BOULDERBADGE, [hl] - ld a, HS_GYM_GUY - ld [wMissableObjectIndex], a + ld a, TOGGLE_GYM_GUY + ld [wToggleableObjectIndex], a predef HideObject - ld a, HS_ROUTE_22_RIVAL_1 - ld [wMissableObjectIndex], a + ld a, TOGGLE_ROUTE_22_RIVAL_1 + ld [wToggleableObjectIndex], a predef HideObject ResetEvents EVENT_1ST_ROUTE22_RIVAL_BATTLE, EVENT_ROUTE22_RIVAL_WANTS_BATTLE diff --git a/scripts/PokemonTower2F.asm b/scripts/PokemonTower2F.asm index d3b6c9a4..1888e511 100644 --- a/scripts/PokemonTower2F.asm +++ b/scripts/PokemonTower2F.asm @@ -116,8 +116,8 @@ PokemonTower2FRivalExitsScript: ld a, [wStatusFlags5] bit BIT_SCRIPTED_NPC_MOVEMENT, a ret nz - ld a, HS_POKEMON_TOWER_2F_RIVAL - ld [wMissableObjectIndex], a + ld a, TOGGLE_POKEMON_TOWER_2F_RIVAL + ld [wToggleableObjectIndex], a predef HideObject xor a ld [wJoyIgnore], a diff --git a/scripts/PokemonTower7F.asm b/scripts/PokemonTower7F.asm index 3d8cd636..908e089e 100644 --- a/scripts/PokemonTower7F.asm +++ b/scripts/PokemonTower7F.asm @@ -44,15 +44,15 @@ PokemonTower7FHideNPCScript: ld a, [wStatusFlags5] bit BIT_SCRIPTED_NPC_MOVEMENT, a ret nz - ld hl, wMissableObjectList + ld hl, wToggleableObjectList ld a, [wSpriteIndex] ld b, a -.missableObjectsListLoop +.toggleableObjectsListLoop ld a, [hli] - cp b ; search for sprite ID in missing objects list + cp b ; search for sprite ID in toggleable objects list ld a, [hli] - jr nz, .missableObjectsListLoop - ld [wMissableObjectIndex], a ; remove missable object + jr nz, .toggleableObjectsListLoop + ld [wToggleableObjectIndex], a ; remove toggleable object predef HideObject xor a ld [wJoyIgnore], a @@ -67,8 +67,8 @@ PokemonTower7FHideNPCScript: PokemonTower7FWarpToMrFujiHouseScript: ld a, PAD_BUTTONS | PAD_CTRL_PAD ld [wJoyIgnore], a - ld a, HS_POKEMON_TOWER_7F_MR_FUJI - ld [wMissableObjectIndex], a + ld a, TOGGLE_POKEMON_TOWER_7F_MR_FUJI + ld [wToggleableObjectIndex], a predef HideObject ld a, SPRITE_FACING_UP ld [wSpritePlayerStateData1FacingDirection], a @@ -228,14 +228,14 @@ PokemonTower7FMrFujiText: call PrintText SetEvent EVENT_RESCUED_MR_FUJI SetEvent EVENT_RESCUED_MR_FUJI_2 - ld a, HS_MR_FUJIS_HOUSE_MR_FUJI - ld [wMissableObjectIndex], a + ld a, TOGGLE_MR_FUJIS_HOUSE_MR_FUJI + ld [wToggleableObjectIndex], a predef ShowObject - ld a, HS_SAFFRON_CITY_E - ld [wMissableObjectIndex], a + ld a, TOGGLE_SAFFRON_CITY_E + ld [wToggleableObjectIndex], a predef HideObject - ld a, HS_SAFFRON_CITY_F - ld [wMissableObjectIndex], a + ld a, TOGGLE_SAFFRON_CITY_F + ld [wToggleableObjectIndex], a predef ShowObject ld a, SCRIPT_POKEMONTOWER7F_WARP_TO_MR_FUJI_HOUSE ld [wPokemonTower7FCurScript], a diff --git a/scripts/RocketHideoutB4F.asm b/scripts/RocketHideoutB4F.asm index edc51351..7bc3ec31 100644 --- a/scripts/RocketHideoutB4F.asm +++ b/scripts/RocketHideoutB4F.asm @@ -56,11 +56,11 @@ RocketHideoutB4FBeatGiovanniScript: ldh [hTextID], a call DisplayTextID call GBFadeOutToBlack - ld a, HS_ROCKET_HIDEOUT_B4F_GIOVANNI - ld [wMissableObjectIndex], a + ld a, TOGGLE_ROCKET_HIDEOUT_B4F_GIOVANNI + ld [wToggleableObjectIndex], a predef HideObject - ld a, HS_ROCKET_HIDEOUT_B4F_ITEM_4 - ld [wMissableObjectIndex], a + ld a, TOGGLE_ROCKET_HIDEOUT_B4F_ITEM_4 + ld [wToggleableObjectIndex], a predef ShowObject call UpdateSprites call GBFadeInFromBlack @@ -192,8 +192,8 @@ RocketHideoutB4FRocket3AfterBattleText: call PrintText CheckAndSetEvent EVENT_ROCKET_DROPPED_LIFT_KEY jr nz, .done - ld a, HS_ROCKET_HIDEOUT_B4F_ITEM_5 - ld [wMissableObjectIndex], a + ld a, TOGGLE_ROCKET_HIDEOUT_B4F_ITEM_5 + ld [wToggleableObjectIndex], a predef ShowObject .done jp TextScriptEnd diff --git a/scripts/Route12.asm b/scripts/Route12.asm index ea9fc567..a6984f87 100644 --- a/scripts/Route12.asm +++ b/scripts/Route12.asm @@ -34,8 +34,8 @@ Route12DefaultScript: ld [wCurOpponent], a ld a, 30 ld [wCurEnemyLevel], a - ld a, HS_ROUTE_12_SNORLAX - ld [wMissableObjectIndex], a + ld a, TOGGLE_ROUTE_12_SNORLAX + ld [wToggleableObjectIndex], a predef HideObject ld a, SCRIPT_ROUTE12_SNORLAX_POST_BATTLE ld [wRoute12CurScript], a diff --git a/scripts/Route16.asm b/scripts/Route16.asm index 6e3da97c..a1eb6e85 100644 --- a/scripts/Route16.asm +++ b/scripts/Route16.asm @@ -34,8 +34,8 @@ Route16DefaultScript: ld [wCurOpponent], a ld a, 30 ld [wCurEnemyLevel], a - ld a, HS_ROUTE_16_SNORLAX - ld [wMissableObjectIndex], a + ld a, TOGGLE_ROUTE_16_SNORLAX + ld [wToggleableObjectIndex], a predef HideObject call UpdateSprites ld a, SCRIPT_ROUTE16_SNORLAX_POST_BATTLE diff --git a/scripts/Route20.asm b/scripts/Route20.asm index 5230858e..3c528b09 100644 --- a/scripts/Route20.asm +++ b/scripts/Route20.asm @@ -12,48 +12,48 @@ Route20_Script: Route20BoulderScript: CheckBothEventsSet EVENT_SEAFOAM3_BOULDER1_DOWN_HOLE, EVENT_SEAFOAM3_BOULDER2_DOWN_HOLE jr z, .next_boulder_check - ld a, HS_SEAFOAM_ISLANDS_1F_BOULDER_1 + ld a, TOGGLE_SEAFOAM_ISLANDS_1F_BOULDER_1 call Route20ShowObjectScript - ld a, HS_SEAFOAM_ISLANDS_1F_BOULDER_2 + ld a, TOGGLE_SEAFOAM_ISLANDS_1F_BOULDER_2 call Route20ShowObjectScript - ld hl, .MissableObjectIDs -.hide_missable_objects + ld hl, .ToggleableObjectIDs +.hide_toggleable_objects ld a, [hli] cp $ff jr z, .next_boulder_check push hl call Route20HideObjectScript pop hl - jr .hide_missable_objects - -.MissableObjectIDs: - db HS_SEAFOAM_ISLANDS_B1F_BOULDER_1 - db HS_SEAFOAM_ISLANDS_B1F_BOULDER_2 - db HS_SEAFOAM_ISLANDS_B2F_BOULDER_1 - db HS_SEAFOAM_ISLANDS_B2F_BOULDER_2 - db HS_SEAFOAM_ISLANDS_B3F_BOULDER_3 - db HS_SEAFOAM_ISLANDS_B3F_BOULDER_4 + jr .hide_toggleable_objects + +.ToggleableObjectIDs: + db TOGGLE_SEAFOAM_ISLANDS_B1F_BOULDER_1 + db TOGGLE_SEAFOAM_ISLANDS_B1F_BOULDER_2 + db TOGGLE_SEAFOAM_ISLANDS_B2F_BOULDER_1 + db TOGGLE_SEAFOAM_ISLANDS_B2F_BOULDER_2 + db TOGGLE_SEAFOAM_ISLANDS_B3F_BOULDER_3 + db TOGGLE_SEAFOAM_ISLANDS_B3F_BOULDER_4 db -1 ; end .next_boulder_check CheckBothEventsSet EVENT_SEAFOAM4_BOULDER1_DOWN_HOLE, EVENT_SEAFOAM4_BOULDER2_DOWN_HOLE ret z - ld a, HS_SEAFOAM_ISLANDS_B3F_BOULDER_1 + ld a, TOGGLE_SEAFOAM_ISLANDS_B3F_BOULDER_1 call Route20ShowObjectScript - ld a, HS_SEAFOAM_ISLANDS_B3F_BOULDER_2 + ld a, TOGGLE_SEAFOAM_ISLANDS_B3F_BOULDER_2 call Route20ShowObjectScript - ld a, HS_SEAFOAM_ISLANDS_B4F_BOULDER_1 + ld a, TOGGLE_SEAFOAM_ISLANDS_B4F_BOULDER_1 call Route20HideObjectScript - ld a, HS_SEAFOAM_ISLANDS_B4F_BOULDER_2 + ld a, TOGGLE_SEAFOAM_ISLANDS_B4F_BOULDER_2 call Route20HideObjectScript ret Route20ShowObjectScript: - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef_jump ShowObject Route20HideObjectScript: - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef_jump HideObject Route20_ScriptPointers: diff --git a/scripts/Route22.asm b/scripts/Route22.asm index 80f54290..bef22665 100644 --- a/scripts/Route22.asm +++ b/scripts/Route22.asm @@ -224,8 +224,8 @@ Route22Rival1ExitScript: ret nz xor a ld [wJoyIgnore], a - ld a, HS_ROUTE_22_RIVAL_1 - ld [wMissableObjectIndex], a + ld a, TOGGLE_ROUTE_22_RIVAL_1 + ld [wToggleableObjectIndex], a predef HideObject call PlayDefaultMusic ResetEvents EVENT_1ST_ROUTE22_RIVAL_BATTLE, EVENT_ROUTE22_RIVAL_WANTS_BATTLE @@ -368,8 +368,8 @@ Route22Rival2ExitScript: ret nz xor a ld [wJoyIgnore], a - ld a, HS_ROUTE_22_RIVAL_2 - ld [wMissableObjectIndex], a + ld a, TOGGLE_ROUTE_22_RIVAL_2 + ld [wToggleableObjectIndex], a predef HideObject call PlayDefaultMusic ResetEvents EVENT_2ND_ROUTE22_RIVAL_BATTLE, EVENT_ROUTE22_RIVAL_WANTS_BATTLE diff --git a/scripts/Route23.asm b/scripts/Route23.asm index 911a2ef3..07558996 100644 --- a/scripts/Route23.asm +++ b/scripts/Route23.asm @@ -12,11 +12,11 @@ Route23SetVictoryRoadBoulders: ret z ResetEvents EVENT_VICTORY_ROAD_2_BOULDER_ON_SWITCH1, EVENT_VICTORY_ROAD_2_BOULDER_ON_SWITCH2 ResetEvents EVENT_VICTORY_ROAD_3_BOULDER_ON_SWITCH1, EVENT_VICTORY_ROAD_3_BOULDER_ON_SWITCH2 - ld a, HS_VICTORY_ROAD_3F_BOULDER - ld [wMissableObjectIndex], a + ld a, TOGGLE_VICTORY_ROAD_3F_BOULDER + ld [wToggleableObjectIndex], a predef ShowObject - ld a, HS_VICTORY_ROAD_2F_BOULDER - ld [wMissableObjectIndex], a + ld a, TOGGLE_VICTORY_ROAD_2F_BOULDER + ld [wToggleableObjectIndex], a predef_jump HideObject Route23_ScriptPointers: diff --git a/scripts/Route25.asm b/scripts/Route25.asm index a85144a8..a4210cc5 100644 --- a/scripts/Route25.asm +++ b/scripts/Route25.asm @@ -1,5 +1,5 @@ Route25_Script: - call Route25ShowHideBillScript + call Route25ToggleBillsScript call EnableAutoTextBoxDrawing ld hl, Route25TrainerHeaders ld de, Route25_ScriptPointers @@ -8,7 +8,7 @@ Route25_Script: ld [wRoute25CurScript], a ret -Route25ShowHideBillScript: +Route25ToggleBillsScript: ld hl, wCurrentMapScriptFlags bit BIT_CUR_MAP_LOADED_2, [hl] res BIT_CUR_MAP_LOADED_2, [hl] @@ -18,21 +18,21 @@ Route25ShowHideBillScript: CheckEventReuseHL EVENT_MET_BILL_2 jr nz, .met_bill ResetEventReuseHL EVENT_BILL_SAID_USE_CELL_SEPARATOR - ld a, HS_BILL_POKEMON - ld [wMissableObjectIndex], a + ld a, TOGGLE_BILL_POKEMON + ld [wToggleableObjectIndex], a predef_jump ShowObject .met_bill CheckEventAfterBranchReuseHL EVENT_GOT_SS_TICKET, EVENT_MET_BILL_2 ret z SetEventReuseHL EVENT_LEFT_BILLS_HOUSE_AFTER_HELPING - ld a, HS_NUGGET_BRIDGE_GUY - ld [wMissableObjectIndex], a + ld a, TOGGLE_NUGGET_BRIDGE_GUY + ld [wToggleableObjectIndex], a predef HideObject - ld a, HS_BILL_1 - ld [wMissableObjectIndex], a + ld a, TOGGLE_BILL_1 + ld [wToggleableObjectIndex], a predef HideObject - ld a, HS_BILL_2 - ld [wMissableObjectIndex], a + ld a, TOGGLE_BILL_2 + ld [wToggleableObjectIndex], a predef_jump ShowObject Route25_ScriptPointers: diff --git a/scripts/SSAnne2F.asm b/scripts/SSAnne2F.asm index ee860fd9..32ea70d1 100644 --- a/scripts/SSAnne2F.asm +++ b/scripts/SSAnne2F.asm @@ -33,8 +33,8 @@ SSAnne2FDefaultScript: call PlayMusic ld a, [wCoordIndex] ldh [hSavedCoordIndex], a - ld a, HS_SS_ANNE_2F_RIVAL - ld [wMissableObjectIndex], a + ld a, TOGGLE_SS_ANNE_2F_RIVAL + ld [wToggleableObjectIndex], a predef ShowObject call Delay3 ld a, SSANNE2F_RIVAL @@ -169,8 +169,8 @@ SSAnne2FRivalExitScript: ret nz xor a ld [wJoyIgnore], a - ld a, HS_SS_ANNE_2F_RIVAL - ld [wMissableObjectIndex], a + ld a, TOGGLE_SS_ANNE_2F_RIVAL + ld [wToggleableObjectIndex], a predef HideObject call PlayDefaultMusic ld a, SCRIPT_SSANNE2F_NOOP diff --git a/scripts/SeafoamIslands1F.asm b/scripts/SeafoamIslands1F.asm index a3ec3c99..1e099f76 100644 --- a/scripts/SeafoamIslands1F.asm +++ b/scripts/SeafoamIslands1F.asm @@ -13,23 +13,23 @@ SeafoamIslands1F_Script: cp $1 jr nz, .boulder2FellDownHole SetEventReuseHL EVENT_SEAFOAM1_BOULDER1_DOWN_HOLE - ld a, HS_SEAFOAM_ISLANDS_1F_BOULDER_1 + ld a, TOGGLE_SEAFOAM_ISLANDS_1F_BOULDER_1 ld [wObjectToHide], a - ld a, HS_SEAFOAM_ISLANDS_B1F_BOULDER_1 + ld a, TOGGLE_SEAFOAM_ISLANDS_B1F_BOULDER_1 ld [wObjectToShow], a jr .hideAndShowBoulderObjects .boulder2FellDownHole SetEventAfterBranchReuseHL EVENT_SEAFOAM1_BOULDER2_DOWN_HOLE, EVENT_SEAFOAM1_BOULDER1_DOWN_HOLE - ld a, HS_SEAFOAM_ISLANDS_1F_BOULDER_2 + ld a, TOGGLE_SEAFOAM_ISLANDS_1F_BOULDER_2 ld [wObjectToHide], a - ld a, HS_SEAFOAM_ISLANDS_B1F_BOULDER_2 + ld a, TOGGLE_SEAFOAM_ISLANDS_B1F_BOULDER_2 ld [wObjectToShow], a .hideAndShowBoulderObjects ld a, [wObjectToHide] - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef HideObject ld a, [wObjectToShow] - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef_jump ShowObject .noBoulderWasPushed ld a, SEAFOAM_ISLANDS_B1F diff --git a/scripts/SeafoamIslandsB1F.asm b/scripts/SeafoamIslandsB1F.asm index 0bc2ee18..7558e95b 100644 --- a/scripts/SeafoamIslandsB1F.asm +++ b/scripts/SeafoamIslandsB1F.asm @@ -12,23 +12,23 @@ SeafoamIslandsB1F_Script: cp $1 jr nz, .boulder2FellDownHole SetEventReuseHL EVENT_SEAFOAM2_BOULDER1_DOWN_HOLE - ld a, HS_SEAFOAM_ISLANDS_B1F_BOULDER_1 + ld a, TOGGLE_SEAFOAM_ISLANDS_B1F_BOULDER_1 ld [wObjectToHide], a - ld a, HS_SEAFOAM_ISLANDS_B2F_BOULDER_1 + ld a, TOGGLE_SEAFOAM_ISLANDS_B2F_BOULDER_1 ld [wObjectToShow], a jr .hideAndShowBoulderObjects .boulder2FellDownHole SetEventAfterBranchReuseHL EVENT_SEAFOAM2_BOULDER2_DOWN_HOLE, EVENT_SEAFOAM2_BOULDER1_DOWN_HOLE - ld a, HS_SEAFOAM_ISLANDS_B1F_BOULDER_2 + ld a, TOGGLE_SEAFOAM_ISLANDS_B1F_BOULDER_2 ld [wObjectToHide], a - ld a, HS_SEAFOAM_ISLANDS_B2F_BOULDER_2 + ld a, TOGGLE_SEAFOAM_ISLANDS_B2F_BOULDER_2 ld [wObjectToShow], a .hideAndShowBoulderObjects ld a, [wObjectToHide] - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef HideObject ld a, [wObjectToShow] - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef_jump ShowObject .noBoulderWasPushed ld a, SEAFOAM_ISLANDS_B2F diff --git a/scripts/SeafoamIslandsB2F.asm b/scripts/SeafoamIslandsB2F.asm index 48b7979d..2cdb705e 100644 --- a/scripts/SeafoamIslandsB2F.asm +++ b/scripts/SeafoamIslandsB2F.asm @@ -12,23 +12,23 @@ SeafoamIslandsB2F_Script: cp $1 jr nz, .boulder2FellDownHole SetEventReuseHL EVENT_SEAFOAM3_BOULDER1_DOWN_HOLE - ld a, HS_SEAFOAM_ISLANDS_B2F_BOULDER_1 + ld a, TOGGLE_SEAFOAM_ISLANDS_B2F_BOULDER_1 ld [wObjectToHide], a - ld a, HS_SEAFOAM_ISLANDS_B3F_BOULDER_3 + ld a, TOGGLE_SEAFOAM_ISLANDS_B3F_BOULDER_3 ld [wObjectToShow], a jr .hideAndShowBoulderObjects .boulder2FellDownHole SetEventAfterBranchReuseHL EVENT_SEAFOAM3_BOULDER2_DOWN_HOLE, EVENT_SEAFOAM3_BOULDER1_DOWN_HOLE - ld a, HS_SEAFOAM_ISLANDS_B2F_BOULDER_2 + ld a, TOGGLE_SEAFOAM_ISLANDS_B2F_BOULDER_2 ld [wObjectToHide], a - ld a, HS_SEAFOAM_ISLANDS_B3F_BOULDER_4 + ld a, TOGGLE_SEAFOAM_ISLANDS_B3F_BOULDER_4 ld [wObjectToShow], a .hideAndShowBoulderObjects ld a, [wObjectToHide] - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef HideObject ld a, [wObjectToShow] - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef_jump ShowObject .noBoulderWasPushed ld a, SEAFOAM_ISLANDS_B3F diff --git a/scripts/SeafoamIslandsB3F.asm b/scripts/SeafoamIslandsB3F.asm index 671d7719..d8e253b6 100644 --- a/scripts/SeafoamIslandsB3F.asm +++ b/scripts/SeafoamIslandsB3F.asm @@ -12,23 +12,23 @@ SeafoamIslandsB3F_Script: cp $1 jr nz, .boulder2FellDownHole SetEventReuseHL EVENT_SEAFOAM4_BOULDER1_DOWN_HOLE - ld a, HS_SEAFOAM_ISLANDS_B3F_BOULDER_1 + ld a, TOGGLE_SEAFOAM_ISLANDS_B3F_BOULDER_1 ld [wObjectToHide], a - ld a, HS_SEAFOAM_ISLANDS_B4F_BOULDER_1 + ld a, TOGGLE_SEAFOAM_ISLANDS_B4F_BOULDER_1 ld [wObjectToShow], a jr .hideAndShowBoulderObjects .boulder2FellDownHole SetEventAfterBranchReuseHL EVENT_SEAFOAM4_BOULDER2_DOWN_HOLE, EVENT_SEAFOAM4_BOULDER1_DOWN_HOLE - ld a, HS_SEAFOAM_ISLANDS_B3F_BOULDER_2 + ld a, TOGGLE_SEAFOAM_ISLANDS_B3F_BOULDER_2 ld [wObjectToHide], a - ld a, HS_SEAFOAM_ISLANDS_B4F_BOULDER_2 + ld a, TOGGLE_SEAFOAM_ISLANDS_B4F_BOULDER_2 ld [wObjectToShow], a .hideAndShowBoulderObjects ld a, [wObjectToHide] - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef HideObject ld a, [wObjectToShow] - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef ShowObject jr .runCurrentMapScript .noBoulderWasPushed diff --git a/scripts/SilphCo11F.asm b/scripts/SilphCo11F.asm index 75c545e3..a804ce6d 100644 --- a/scripts/SilphCo11F.asm +++ b/scripts/SilphCo11F.asm @@ -71,78 +71,78 @@ SilphCo11FSetUnlockedDoorEventScript: ret SilphCo11FTeamRocketLeavesScript: - ld hl, .HideMissableObjectIDs + ld hl, .HideToggleableObjectIDs .hide_loop ld a, [hli] cp $ff jr z, .done_hiding push hl - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef HideObject pop hl jr .hide_loop .done_hiding - ld hl, .ShowMissableObjectIDs + ld hl, .ShowToggleableObjectIDs .show_loop ld a, [hli] cp -1 ret z push hl - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef ShowObject pop hl jr .show_loop -.ShowMissableObjectIDs: - db HS_SAFFRON_CITY_8 - db HS_SAFFRON_CITY_9 - db HS_SAFFRON_CITY_A - db HS_SAFFRON_CITY_B - db HS_SAFFRON_CITY_C - db HS_SAFFRON_CITY_D +.ShowToggleableObjectIDs: + db TOGGLE_SAFFRON_CITY_8 + db TOGGLE_SAFFRON_CITY_9 + db TOGGLE_SAFFRON_CITY_A + db TOGGLE_SAFFRON_CITY_B + db TOGGLE_SAFFRON_CITY_C + db TOGGLE_SAFFRON_CITY_D db -1 ; end -.HideMissableObjectIDs: - db HS_SAFFRON_CITY_1 - db HS_SAFFRON_CITY_2 - db HS_SAFFRON_CITY_3 - db HS_SAFFRON_CITY_4 - db HS_SAFFRON_CITY_5 - db HS_SAFFRON_CITY_6 - db HS_SAFFRON_CITY_7 - db HS_SAFFRON_CITY_E - db HS_SAFFRON_CITY_F - db HS_SILPH_CO_2F_2 - db HS_SILPH_CO_2F_3 - db HS_SILPH_CO_2F_4 - db HS_SILPH_CO_2F_5 - db HS_SILPH_CO_3F_1 - db HS_SILPH_CO_3F_2 - db HS_SILPH_CO_4F_1 - db HS_SILPH_CO_4F_2 - db HS_SILPH_CO_4F_3 - db HS_SILPH_CO_5F_1 - db HS_SILPH_CO_5F_2 - db HS_SILPH_CO_5F_3 - db HS_SILPH_CO_5F_4 - db HS_SILPH_CO_6F_1 - db HS_SILPH_CO_6F_2 - db HS_SILPH_CO_6F_3 - db HS_SILPH_CO_7F_1 - db HS_SILPH_CO_7F_2 - db HS_SILPH_CO_7F_3 - db HS_SILPH_CO_7F_4 - db HS_SILPH_CO_8F_1 - db HS_SILPH_CO_8F_2 - db HS_SILPH_CO_8F_3 - db HS_SILPH_CO_9F_1 - db HS_SILPH_CO_9F_2 - db HS_SILPH_CO_9F_3 - db HS_SILPH_CO_10F_1 - db HS_SILPH_CO_10F_2 - db HS_SILPH_CO_11F_1 - db HS_SILPH_CO_11F_2 - db HS_SILPH_CO_11F_3 +.HideToggleableObjectIDs: + db TOGGLE_SAFFRON_CITY_1 + db TOGGLE_SAFFRON_CITY_2 + db TOGGLE_SAFFRON_CITY_3 + db TOGGLE_SAFFRON_CITY_4 + db TOGGLE_SAFFRON_CITY_5 + db TOGGLE_SAFFRON_CITY_6 + db TOGGLE_SAFFRON_CITY_7 + db TOGGLE_SAFFRON_CITY_E + db TOGGLE_SAFFRON_CITY_F + db TOGGLE_SILPH_CO_2F_2 + db TOGGLE_SILPH_CO_2F_3 + db TOGGLE_SILPH_CO_2F_4 + db TOGGLE_SILPH_CO_2F_5 + db TOGGLE_SILPH_CO_3F_1 + db TOGGLE_SILPH_CO_3F_2 + db TOGGLE_SILPH_CO_4F_1 + db TOGGLE_SILPH_CO_4F_2 + db TOGGLE_SILPH_CO_4F_3 + db TOGGLE_SILPH_CO_5F_1 + db TOGGLE_SILPH_CO_5F_2 + db TOGGLE_SILPH_CO_5F_3 + db TOGGLE_SILPH_CO_5F_4 + db TOGGLE_SILPH_CO_6F_1 + db TOGGLE_SILPH_CO_6F_2 + db TOGGLE_SILPH_CO_6F_3 + db TOGGLE_SILPH_CO_7F_1 + db TOGGLE_SILPH_CO_7F_2 + db TOGGLE_SILPH_CO_7F_3 + db TOGGLE_SILPH_CO_7F_4 + db TOGGLE_SILPH_CO_8F_1 + db TOGGLE_SILPH_CO_8F_2 + db TOGGLE_SILPH_CO_8F_3 + db TOGGLE_SILPH_CO_9F_1 + db TOGGLE_SILPH_CO_9F_2 + db TOGGLE_SILPH_CO_9F_3 + db TOGGLE_SILPH_CO_10F_1 + db TOGGLE_SILPH_CO_10F_2 + db TOGGLE_SILPH_CO_11F_1 + db TOGGLE_SILPH_CO_11F_2 + db TOGGLE_SILPH_CO_11F_3 db -1 ; end SilphCo11FResetCurScript: diff --git a/scripts/SilphCo1F.asm b/scripts/SilphCo1F.asm index fbc70d77..acb506fc 100644 --- a/scripts/SilphCo1F.asm +++ b/scripts/SilphCo1F.asm @@ -4,8 +4,8 @@ SilphCo1F_Script: ret z CheckAndSetEvent EVENT_SILPH_CO_RECEPTIONIST_AT_DESK ret nz - ld a, HS_SILPH_CO_1F_RECEPTIONIST - ld [wMissableObjectIndex], a + ld a, TOGGLE_SILPH_CO_1F_RECEPTIONIST + ld [wToggleableObjectIndex], a predef_jump ShowObject SilphCo1F_TextPointers: diff --git a/scripts/SilphCo7F.asm b/scripts/SilphCo7F.asm index 29e5fdd3..6b640fd4 100644 --- a/scripts/SilphCo7F.asm +++ b/scripts/SilphCo7F.asm @@ -255,8 +255,8 @@ SilphCo7FRivalExitScript: ld a, [wStatusFlags5] bit BIT_SCRIPTED_NPC_MOVEMENT, a ret nz - ld a, HS_SILPH_CO_7F_RIVAL - ld [wMissableObjectIndex], a + ld a, TOGGLE_SILPH_CO_7F_RIVAL + ld [wToggleableObjectIndex], a predef HideObject call PlayDefaultMusic xor a diff --git a/scripts/VictoryRoad3F.asm b/scripts/VictoryRoad3F.asm index 2b1b11c0..4a082be5 100644 --- a/scripts/VictoryRoad3F.asm +++ b/scripts/VictoryRoad3F.asm @@ -44,11 +44,11 @@ VictoryRoad3FDefaultScript: .handle_hole CheckAndSetEvent EVENT_VICTORY_ROAD_3_BOULDER_ON_SWITCH2 jr nz, .check_switch_hole - ld a, HS_VICTORY_ROAD_3F_BOULDER - ld [wMissableObjectIndex], a + ld a, TOGGLE_VICTORY_ROAD_3F_BOULDER + ld [wToggleableObjectIndex], a predef HideObject - ld a, HS_VICTORY_ROAD_2F_BOULDER - ld [wMissableObjectIndex], a + ld a, TOGGLE_VICTORY_ROAD_2F_BOULDER + ld [wToggleableObjectIndex], a predef_jump ShowObject .SwitchOrHoleCoords: diff --git a/scripts/ViridianGym.asm b/scripts/ViridianGym.asm index 6f195037..c2b8c362 100644 --- a/scripts/ViridianGym.asm +++ b/scripts/ViridianGym.asm @@ -161,8 +161,8 @@ ViridianGymReceiveTM27: ; deactivate gym trainers SetEventRange EVENT_BEAT_VIRIDIAN_GYM_TRAINER_0, EVENT_BEAT_VIRIDIAN_GYM_TRAINER_7 - ld a, HS_ROUTE_22_RIVAL_2 - ld [wMissableObjectIndex], a + ld a, TOGGLE_ROUTE_22_RIVAL_2 + ld [wToggleableObjectIndex], a predef ShowObject SetEvents EVENT_2ND_ROUTE22_RIVAL_BATTLE, EVENT_ROUTE22_RIVAL_WANTS_BATTLE jp ViridianGymResetScripts @@ -219,8 +219,8 @@ ViridianGymGiovanniText: ld hl, .PostBattleAdviceText call PrintText call GBFadeOutToBlack - ld a, HS_VIRIDIAN_GYM_GIOVANNI - ld [wMissableObjectIndex], a + ld a, TOGGLE_VIRIDIAN_GYM_GIOVANNI + ld [wToggleableObjectIndex], a predef HideObject call UpdateSprites call Delay3 -- cgit v1.3.1-sl0p From 0e49aef88ef94b9d3e80d89e4eb718e9425045df Mon Sep 17 00:00:00 2001 From: Rangi <35663410+Rangi42@users.noreply.github.com> Date: Wed, 7 Jan 2026 22:05:37 -0500 Subject: Use macros to enforce "hidden object" constraints, and rename them to "hidden events" (#559) --- data/events/hidden_events.asm | 599 ++++++++++++++++++ data/events/hidden_objects.asm | 668 --------------------- data/predef_pointers.asm | 2 +- engine/events/hidden_events/bench_guys.asm | 107 ++++ engine/events/hidden_events/bills_house_pc.asm | 134 +++++ engine/events/hidden_events/blues_room.asm | 13 + engine/events/hidden_events/book_or_sculpture.asm | 21 + engine/events/hidden_events/bookshelves.asm | 39 ++ engine/events/hidden_events/cinnabar_gym_quiz.asm | 200 ++++++ engine/events/hidden_events/elevator.asm | 3 + engine/events/hidden_events/fighting_dojo.asm | 23 + engine/events/hidden_events/gym_statues.asm | 39 ++ engine/events/hidden_events/indigo_plateau_hq.asm | 10 + .../hidden_events/indigo_plateau_statues.asm | 24 + engine/events/hidden_events/magazines.asm | 8 + engine/events/hidden_events/museum_fossils.asm | 51 ++ engine/events/hidden_events/new_bike.asm | 7 + engine/events/hidden_events/oaks_lab_email.asm | 10 + engine/events/hidden_events/oaks_lab_posters.asm | 29 + engine/events/hidden_events/pokecenter_pc.asm | 11 + engine/events/hidden_events/pokemon_stuff.asm | 3 + engine/events/hidden_events/reds_room.asm | 14 + .../events/hidden_events/route_15_binoculars.asm | 14 + engine/events/hidden_events/safari_game.asm | 83 +++ engine/events/hidden_events/school_blackboard.asm | 224 +++++++ engine/events/hidden_events/school_notebooks.asm | 65 ++ engine/events/hidden_events/town_map.asm | 22 + .../events/hidden_events/vermilion_gym_trash.asm | 169 ++++++ engine/events/hidden_items.asm | 10 +- engine/events/hidden_objects/bench_guys.asm | 107 ---- engine/events/hidden_objects/bills_house_pc.asm | 134 ----- engine/events/hidden_objects/blues_room.asm | 13 - engine/events/hidden_objects/book_or_sculpture.asm | 21 - engine/events/hidden_objects/bookshelves.asm | 39 -- engine/events/hidden_objects/cinnabar_gym_quiz.asm | 200 ------ engine/events/hidden_objects/elevator.asm | 3 - engine/events/hidden_objects/fighting_dojo.asm | 23 - engine/events/hidden_objects/gym_statues.asm | 39 -- engine/events/hidden_objects/indigo_plateau_hq.asm | 10 - .../hidden_objects/indigo_plateau_statues.asm | 24 - engine/events/hidden_objects/magazines.asm | 8 - engine/events/hidden_objects/museum_fossils.asm | 51 -- engine/events/hidden_objects/new_bike.asm | 7 - engine/events/hidden_objects/oaks_lab_email.asm | 10 - engine/events/hidden_objects/oaks_lab_posters.asm | 29 - engine/events/hidden_objects/pokecenter_pc.asm | 11 - engine/events/hidden_objects/pokemon_stuff.asm | 3 - engine/events/hidden_objects/reds_room.asm | 14 - .../events/hidden_objects/route_15_binoculars.asm | 14 - engine/events/hidden_objects/safari_game.asm | 83 --- engine/events/hidden_objects/school_blackboard.asm | 224 ------- engine/events/hidden_objects/school_notebooks.asm | 65 -- engine/events/hidden_objects/town_map.asm | 22 - .../events/hidden_objects/vermilion_gym_trash.asm | 169 ------ engine/overworld/hidden_events.asm | 133 ++++ engine/overworld/hidden_objects.asm | 133 ---- engine/slots/game_corner_slots.asm | 6 +- home.asm | 2 +- home/hidden_events.asm | 39 ++ home/hidden_objects.asm | 39 -- home/overworld.asm | 4 +- layout.link | 10 +- main.asm | 62 +- ram/hram.asm | 2 +- ram/wram.asm | 12 +- scripts/GameCorner.asm | 2 +- scripts/SafariZoneGate.asm | 2 +- 67 files changed, 2151 insertions(+), 2220 deletions(-) create mode 100644 data/events/hidden_events.asm delete mode 100644 data/events/hidden_objects.asm create mode 100644 engine/events/hidden_events/bench_guys.asm create mode 100644 engine/events/hidden_events/bills_house_pc.asm create mode 100644 engine/events/hidden_events/blues_room.asm create mode 100644 engine/events/hidden_events/book_or_sculpture.asm create mode 100644 engine/events/hidden_events/bookshelves.asm create mode 100644 engine/events/hidden_events/cinnabar_gym_quiz.asm create mode 100644 engine/events/hidden_events/elevator.asm create mode 100644 engine/events/hidden_events/fighting_dojo.asm create mode 100644 engine/events/hidden_events/gym_statues.asm create mode 100644 engine/events/hidden_events/indigo_plateau_hq.asm create mode 100644 engine/events/hidden_events/indigo_plateau_statues.asm create mode 100644 engine/events/hidden_events/magazines.asm create mode 100644 engine/events/hidden_events/museum_fossils.asm create mode 100644 engine/events/hidden_events/new_bike.asm create mode 100644 engine/events/hidden_events/oaks_lab_email.asm create mode 100644 engine/events/hidden_events/oaks_lab_posters.asm create mode 100644 engine/events/hidden_events/pokecenter_pc.asm create mode 100644 engine/events/hidden_events/pokemon_stuff.asm create mode 100644 engine/events/hidden_events/reds_room.asm create mode 100644 engine/events/hidden_events/route_15_binoculars.asm create mode 100644 engine/events/hidden_events/safari_game.asm create mode 100644 engine/events/hidden_events/school_blackboard.asm create mode 100644 engine/events/hidden_events/school_notebooks.asm create mode 100644 engine/events/hidden_events/town_map.asm create mode 100644 engine/events/hidden_events/vermilion_gym_trash.asm delete mode 100644 engine/events/hidden_objects/bench_guys.asm delete mode 100644 engine/events/hidden_objects/bills_house_pc.asm delete mode 100644 engine/events/hidden_objects/blues_room.asm delete mode 100644 engine/events/hidden_objects/book_or_sculpture.asm delete mode 100644 engine/events/hidden_objects/bookshelves.asm delete mode 100644 engine/events/hidden_objects/cinnabar_gym_quiz.asm delete mode 100644 engine/events/hidden_objects/elevator.asm delete mode 100644 engine/events/hidden_objects/fighting_dojo.asm delete mode 100644 engine/events/hidden_objects/gym_statues.asm delete mode 100644 engine/events/hidden_objects/indigo_plateau_hq.asm delete mode 100644 engine/events/hidden_objects/indigo_plateau_statues.asm delete mode 100644 engine/events/hidden_objects/magazines.asm delete mode 100644 engine/events/hidden_objects/museum_fossils.asm delete mode 100644 engine/events/hidden_objects/new_bike.asm delete mode 100644 engine/events/hidden_objects/oaks_lab_email.asm delete mode 100644 engine/events/hidden_objects/oaks_lab_posters.asm delete mode 100644 engine/events/hidden_objects/pokecenter_pc.asm delete mode 100644 engine/events/hidden_objects/pokemon_stuff.asm delete mode 100644 engine/events/hidden_objects/reds_room.asm delete mode 100644 engine/events/hidden_objects/route_15_binoculars.asm delete mode 100644 engine/events/hidden_objects/safari_game.asm delete mode 100644 engine/events/hidden_objects/school_blackboard.asm delete mode 100644 engine/events/hidden_objects/school_notebooks.asm delete mode 100644 engine/events/hidden_objects/town_map.asm delete mode 100644 engine/events/hidden_objects/vermilion_gym_trash.asm create mode 100644 engine/overworld/hidden_events.asm delete mode 100644 engine/overworld/hidden_objects.asm create mode 100644 home/hidden_events.asm delete mode 100644 home/hidden_objects.asm (limited to 'engine') diff --git a/data/events/hidden_events.asm b/data/events/hidden_events.asm new file mode 100644 index 00000000..89c74923 --- /dev/null +++ b/data/events/hidden_events.asm @@ -0,0 +1,599 @@ +DEF num_hidden_event_maps = 0 + +MACRO hidden_event_map + db \1 ; map id + DEF HIDDENEVENTMAP{num_hidden_event_maps} EQUS "\1" + DEF num_hidden_event_maps += 1 +ENDM + +HiddenEventMaps: + hidden_event_map REDS_HOUSE_2F + hidden_event_map BLUES_HOUSE + hidden_event_map OAKS_LAB + hidden_event_map VIRIDIAN_POKECENTER + hidden_event_map VIRIDIAN_MART + hidden_event_map VIRIDIAN_SCHOOL_HOUSE + hidden_event_map VIRIDIAN_GYM + hidden_event_map MUSEUM_1F + hidden_event_map PEWTER_GYM + hidden_event_map PEWTER_MART + hidden_event_map PEWTER_POKECENTER + hidden_event_map CERULEAN_POKECENTER + hidden_event_map CERULEAN_GYM + hidden_event_map CERULEAN_MART + hidden_event_map LAVENDER_POKECENTER + hidden_event_map VERMILION_POKECENTER + hidden_event_map VERMILION_GYM + hidden_event_map CELADON_MANSION_2F + hidden_event_map CELADON_POKECENTER + hidden_event_map CELADON_GYM + hidden_event_map GAME_CORNER + hidden_event_map CELADON_HOTEL + hidden_event_map FUCHSIA_POKECENTER + hidden_event_map FUCHSIA_GYM + hidden_event_map CINNABAR_GYM + hidden_event_map CINNABAR_POKECENTER + hidden_event_map SAFFRON_GYM + hidden_event_map MT_MOON_POKECENTER + hidden_event_map ROCK_TUNNEL_POKECENTER + hidden_event_map TRADE_CENTER + hidden_event_map COLOSSEUM + hidden_event_map VIRIDIAN_FOREST + hidden_event_map MT_MOON_B2F + hidden_event_map INDIGO_PLATEAU + hidden_event_map ROUTE_25 + hidden_event_map ROUTE_9 + hidden_event_map SS_ANNE_KITCHEN + hidden_event_map SS_ANNE_B1F_ROOMS + hidden_event_map ROCKET_HIDEOUT_B1F + hidden_event_map ROCKET_HIDEOUT_B3F + hidden_event_map ROCKET_HIDEOUT_B4F + hidden_event_map SAFFRON_POKECENTER + hidden_event_map POKEMON_TOWER_5F + hidden_event_map ROUTE_13 + hidden_event_map SAFARI_ZONE_GATE + hidden_event_map SAFARI_ZONE_WEST + hidden_event_map SILPH_CO_5F + hidden_event_map SILPH_CO_9F + hidden_event_map COPYCATS_HOUSE_2F + hidden_event_map CERULEAN_CAVE_1F + hidden_event_map CERULEAN_CAVE_B1F + hidden_event_map POWER_PLANT + hidden_event_map SEAFOAM_ISLANDS_B2F + hidden_event_map SEAFOAM_ISLANDS_B4F + hidden_event_map POKEMON_MANSION_1F + hidden_event_map POKEMON_MANSION_3F + hidden_event_map ROUTE_23 + hidden_event_map VICTORY_ROAD_2F + hidden_event_map UNUSED_MAP_6F + hidden_event_map BILLS_HOUSE + hidden_event_map VIRIDIAN_CITY + hidden_event_map SAFARI_ZONE_WEST_REST_HOUSE + hidden_event_map SAFARI_ZONE_EAST_REST_HOUSE + hidden_event_map SAFARI_ZONE_NORTH_REST_HOUSE + hidden_event_map ROUTE_15_GATE_2F + hidden_event_map MR_FUJIS_HOUSE + hidden_event_map CELADON_MANSION_ROOF_HOUSE + hidden_event_map FIGHTING_DOJO + hidden_event_map ROUTE_10 + hidden_event_map INDIGO_PLATEAU_LOBBY + hidden_event_map CINNABAR_LAB_FOSSIL_ROOM + hidden_event_map BIKE_SHOP + hidden_event_map ROUTE_11 + hidden_event_map ROUTE_12 + hidden_event_map POKEMON_MANSION_2F + hidden_event_map POKEMON_MANSION_B1F + hidden_event_map SILPH_CO_11F + hidden_event_map ROUTE_17 + hidden_event_map UNDERGROUND_PATH_NORTH_SOUTH + hidden_event_map UNDERGROUND_PATH_WEST_EAST + hidden_event_map CELADON_CITY + hidden_event_map SEAFOAM_ISLANDS_B3F + hidden_event_map VERMILION_CITY + hidden_event_map CERULEAN_CITY + hidden_event_map ROUTE_4 + db -1 ; end + +HiddenEventPointers: +; each of these pointers is for the corresponding map in HiddenEventMaps +FOR n, num_hidden_event_maps + dw HiddenEventsFor_{HIDDENEVENTMAP{n}} +ENDR + +MACRO hidden_events_for + HiddenEventsFor_\1: +ENDM + +MACRO hidden_event + db \2 ; y coord + db \1 ; x coord + db \4 ; function argument + dba \3 ; event function +ENDM + +MACRO hidden_text_predef + db \2 ; y coord + db \1 ; x coord + db_tx_pre \4 ; text id + dba \3 ; event function +ENDM + +; Some hidden events use SPRITE_FACING_* values, +; but these do not actually prevent the player +; from interacting with them in any direction. +DEF ANY_FACING EQU $d0 + + hidden_events_for TRADE_CENTER + hidden_event 5, 4, CableClubRightGameboy, ANY_FACING + hidden_event 4, 4, CableClubLeftGameboy, ANY_FACING + db -1 ; end + + hidden_events_for COLOSSEUM + hidden_event 5, 4, CableClubRightGameboy, ANY_FACING + hidden_event 4, 4, CableClubLeftGameboy, ANY_FACING + db -1 ; end + + hidden_events_for REDS_HOUSE_2F + hidden_event 0, 1, OpenRedsPC, SPRITE_FACING_UP + hidden_event 3, 5, PrintRedSNESText, ANY_FACING + db -1 ; end + + hidden_events_for BLUES_HOUSE + hidden_event 0, 1, PrintBookcaseText, SPRITE_FACING_UP + hidden_event 1, 1, PrintBookcaseText, SPRITE_FACING_UP + hidden_event 7, 1, PrintBookcaseText, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for OAKS_LAB + hidden_event 4, 0, DisplayOakLabLeftPoster, SPRITE_FACING_UP + hidden_event 5, 0, DisplayOakLabRightPoster, SPRITE_FACING_UP + hidden_event 0, 1, DisplayOakLabEmailText, SPRITE_FACING_UP + hidden_event 1, 1, DisplayOakLabEmailText, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for VIRIDIAN_POKECENTER + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_LEFT + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for VIRIDIAN_MART + db -1 ; end + + hidden_events_for VIRIDIAN_SCHOOL_HOUSE + hidden_text_predef 3, 4, PrintNotebookText, ViridianSchoolNotebook + hidden_text_predef 3, 0, PrintBlackboardLinkCableText, ViridianSchoolBlackboard + db -1 ; end + + hidden_events_for VIRIDIAN_GYM + hidden_event 15, 15, GymStatues, SPRITE_FACING_UP + hidden_event 18, 15, GymStatues, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for MUSEUM_1F + hidden_event 2, 3, AerodactylFossil, SPRITE_FACING_UP + hidden_event 2, 6, KabutopsFossil, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for PEWTER_GYM + hidden_event 3, 10, GymStatues, SPRITE_FACING_UP + hidden_event 6, 10, GymStatues, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for PEWTER_MART + db -1 ; end + + hidden_events_for PEWTER_POKECENTER + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_LEFT + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for CERULEAN_POKECENTER + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_LEFT + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for CERULEAN_GYM + hidden_event 3, 11, GymStatues, SPRITE_FACING_UP + hidden_event 6, 11, GymStatues, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for CERULEAN_MART + db -1 ; end + + hidden_events_for LAVENDER_POKECENTER + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_LEFT + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for VERMILION_POKECENTER + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for VERMILION_GYM + hidden_event 3, 14, GymStatues, SPRITE_FACING_UP + hidden_event 6, 14, GymStatues, SPRITE_FACING_UP + hidden_event 6, 1, PrintTrashText, SPRITE_FACING_DOWN + ; GymTrashScript argument: [wGymTrashCanIndex] + hidden_event 1, 7, GymTrashScript, 0 + hidden_event 1, 9, GymTrashScript, 1 + hidden_event 1, 11, GymTrashScript, 2 + hidden_event 3, 7, GymTrashScript, 3 + hidden_event 3, 9, GymTrashScript, 4 + hidden_event 3, 11, GymTrashScript, 5 + hidden_event 5, 7, GymTrashScript, 6 + hidden_event 5, 9, GymTrashScript, 7 + hidden_event 5, 11, GymTrashScript, 8 + hidden_event 7, 7, GymTrashScript, 9 + hidden_event 7, 9, GymTrashScript, 10 + hidden_event 7, 11, GymTrashScript, 11 + hidden_event 9, 7, GymTrashScript, 12 + hidden_event 9, 9, GymTrashScript, 13 + hidden_event 9, 11, GymTrashScript, 14 + db -1 ; end + + hidden_events_for CELADON_MANSION_2F + hidden_event 0, 5, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for CELADON_POKECENTER + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_LEFT + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for CELADON_GYM + hidden_event 3, 15, GymStatues, SPRITE_FACING_UP + hidden_event 6, 15, GymStatues, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for GAME_CORNER + hidden_event 18, 15, StartSlotMachine, ANY_FACING + hidden_event 18, 14, StartSlotMachine, ANY_FACING + hidden_event 18, 13, StartSlotMachine, ANY_FACING + hidden_event 18, 12, StartSlotMachine, ANY_FACING + hidden_event 18, 11, StartSlotMachine, ANY_FACING + hidden_event 18, 10, StartSlotMachine, SLOTS_SOMEONESKEYS + hidden_event 13, 10, StartSlotMachine, ANY_FACING + hidden_event 13, 11, StartSlotMachine, ANY_FACING + hidden_event 13, 12, StartSlotMachine, SLOTS_OUTTOLUNCH + hidden_event 13, 13, StartSlotMachine, ANY_FACING + hidden_event 13, 14, StartSlotMachine, ANY_FACING + hidden_event 13, 15, StartSlotMachine, ANY_FACING + hidden_event 12, 15, StartSlotMachine, ANY_FACING + hidden_event 12, 14, StartSlotMachine, ANY_FACING + hidden_event 12, 13, StartSlotMachine, ANY_FACING + hidden_event 12, 12, StartSlotMachine, ANY_FACING + hidden_event 12, 11, StartSlotMachine, ANY_FACING + hidden_event 12, 10, StartSlotMachine, ANY_FACING + hidden_event 7, 10, StartSlotMachine, ANY_FACING + hidden_event 7, 11, StartSlotMachine, ANY_FACING + hidden_event 7, 12, StartSlotMachine, ANY_FACING + hidden_event 7, 13, StartSlotMachine, ANY_FACING + hidden_event 7, 14, StartSlotMachine, ANY_FACING + hidden_event 7, 15, StartSlotMachine, ANY_FACING + hidden_event 6, 15, StartSlotMachine, ANY_FACING + hidden_event 6, 14, StartSlotMachine, ANY_FACING + hidden_event 6, 13, StartSlotMachine, ANY_FACING + hidden_event 6, 12, StartSlotMachine, SLOTS_OUTOFORDER + hidden_event 6, 11, StartSlotMachine, ANY_FACING + hidden_event 6, 10, StartSlotMachine, ANY_FACING + hidden_event 1, 10, StartSlotMachine, ANY_FACING + hidden_event 1, 11, StartSlotMachine, ANY_FACING + hidden_event 1, 12, StartSlotMachine, ANY_FACING + hidden_event 1, 13, StartSlotMachine, ANY_FACING + hidden_event 1, 14, StartSlotMachine, ANY_FACING + hidden_event 1, 15, StartSlotMachine, ANY_FACING + ; HiddenCoins argument: COIN + + hidden_event 0, 8, HiddenCoins, COIN + 10 + hidden_event 1, 16, HiddenCoins, COIN + 10 + hidden_event 3, 11, HiddenCoins, COIN + 20 + hidden_event 3, 14, HiddenCoins, COIN + 10 + hidden_event 4, 12, HiddenCoins, COIN + 10 + hidden_event 9, 12, HiddenCoins, COIN + 20 + hidden_event 9, 15, HiddenCoins, COIN + 10 + hidden_event 16, 14, HiddenCoins, COIN + 10 + hidden_event 10, 16, HiddenCoins, COIN + 10 + hidden_event 11, 7, HiddenCoins, COIN + 40 + hidden_event 15, 8, HiddenCoins, COIN + 100 + hidden_event 12, 15, HiddenCoins, COIN + 10 + db -1 ; end + + hidden_events_for CELADON_HOTEL + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_LEFT + db -1 ; end + + hidden_events_for FUCHSIA_POKECENTER + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for FUCHSIA_GYM + hidden_event 3, 15, GymStatues, SPRITE_FACING_UP + hidden_event 6, 15, GymStatues, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for CINNABAR_GYM + hidden_event 17, 13, GymStatues, SPRITE_FACING_UP + ; PrintCinnabarQuiz argument: ([hGymGateAnswer] << 4) | [hGymGateIndex] + hidden_event 15, 7, PrintCinnabarQuiz, (FALSE << 4) | 1 + hidden_event 10, 1, PrintCinnabarQuiz, (TRUE << 4) | 2 + hidden_event 9, 7, PrintCinnabarQuiz, (TRUE << 4) | 3 + hidden_event 9, 13, PrintCinnabarQuiz, (TRUE << 4) | 4 + hidden_event 1, 13, PrintCinnabarQuiz, (FALSE << 4) | 5 + hidden_event 1, 7, PrintCinnabarQuiz, (TRUE << 4) | 6 + db -1 ; end + + hidden_events_for CINNABAR_POKECENTER + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_UP + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for SAFFRON_GYM + hidden_event 9, 15, GymStatues, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for MT_MOON_POKECENTER + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_LEFT + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for ROCK_TUNNEL_POKECENTER + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_LEFT + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for VIRIDIAN_FOREST + hidden_event 1, 18, HiddenItems, POTION + hidden_event 16, 42, HiddenItems, ANTIDOTE + db -1 ; end + + hidden_events_for MT_MOON_B2F + hidden_event 18, 12, HiddenItems, MOON_STONE + hidden_event 33, 9, HiddenItems, ETHER + db -1 ; end + + hidden_events_for INDIGO_PLATEAU + hidden_event 8, 13, PrintIndigoPlateauHQText, $ff ; inaccessible + hidden_event 11, 13, PrintIndigoPlateauHQText, SPRITE_FACING_DOWN ; inaccessible + db -1 ; end + + hidden_events_for ROUTE_25 + hidden_event 38, 3, HiddenItems, ETHER + hidden_event 10, 1, HiddenItems, ELIXER + db -1 ; end + + hidden_events_for ROUTE_9 + hidden_event 14, 7, HiddenItems, ETHER + db -1 ; end + + hidden_events_for SS_ANNE_KITCHEN + hidden_event 13, 5, PrintTrashText, SPRITE_FACING_DOWN + hidden_event 13, 7, PrintTrashText, SPRITE_FACING_DOWN + hidden_event 13, 9, HiddenItems, GREAT_BALL + db -1 ; end + + hidden_events_for SS_ANNE_B1F_ROOMS + hidden_event 3, 1, HiddenItems, HYPER_POTION + db -1 ; end + + hidden_events_for ROUTE_10 + hidden_event 9, 17, HiddenItems, SUPER_POTION + hidden_event 16, 53, HiddenItems, MAX_ETHER + db -1 ; end + + hidden_events_for ROCKET_HIDEOUT_B1F + hidden_event 21, 15, HiddenItems, PP_UP + db -1 ; end + + hidden_events_for ROCKET_HIDEOUT_B3F + hidden_event 27, 17, HiddenItems, NUGGET + db -1 ; end + + hidden_events_for ROCKET_HIDEOUT_B4F + hidden_event 25, 1, HiddenItems, SUPER_POTION + db -1 ; end + + hidden_events_for SAFFRON_POKECENTER + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_UP + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for POKEMON_TOWER_5F + hidden_event 4, 12, HiddenItems, ELIXER + db -1 ; end + + hidden_events_for ROUTE_13 + hidden_event 1, 14, HiddenItems, PP_UP + hidden_event 16, 13, HiddenItems, CALCIUM + db -1 ; end + + hidden_events_for SAFARI_ZONE_GATE + hidden_event 10, 1, HiddenItems, NUGGET ; inaccessible + db -1 ; end + + hidden_events_for SAFARI_ZONE_WEST + hidden_event 6, 5, HiddenItems, REVIVE + db -1 ; end + + hidden_events_for SILPH_CO_5F + hidden_event 12, 3, HiddenItems, ELIXER + db -1 ; end + + hidden_events_for SILPH_CO_9F + hidden_event 2, 15, HiddenItems, MAX_POTION + db -1 ; end + + hidden_events_for COPYCATS_HOUSE_2F + hidden_event 1, 1, HiddenItems, NUGGET + db -1 ; end + + hidden_events_for CERULEAN_CAVE_1F + hidden_event 14, 11, HiddenItems, RARE_CANDY + db -1 ; end + + hidden_events_for CERULEAN_CAVE_B1F + hidden_event 27, 3, HiddenItems, ULTRA_BALL + db -1 ; end + + hidden_events_for POWER_PLANT + hidden_event 17, 16, HiddenItems, MAX_ELIXER + hidden_event 12, 1, HiddenItems, PP_UP + db -1 ; end + + hidden_events_for SEAFOAM_ISLANDS_B2F + hidden_event 15, 15, HiddenItems, NUGGET + db -1 ; end + + hidden_events_for SEAFOAM_ISLANDS_B4F + hidden_event 25, 17, HiddenItems, ULTRA_BALL + db -1 ; end + + hidden_events_for POKEMON_MANSION_1F + hidden_event 8, 16, HiddenItems, MOON_STONE + hidden_event 2, 5, Mansion1Script_Switches, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for POKEMON_MANSION_2F + hidden_event 2, 11, Mansion2Script_Switches, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for POKEMON_MANSION_3F + hidden_event 1, 9, HiddenItems, MAX_REVIVE + hidden_event 10, 5, Mansion3Script_Switches, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for POKEMON_MANSION_B1F + hidden_event 1, 9, HiddenItems, RARE_CANDY + hidden_event 20, 3, Mansion4Script_Switches, SPRITE_FACING_UP + hidden_event 18, 25, Mansion4Script_Switches, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for ROUTE_23 + hidden_event 9, 44, HiddenItems, FULL_RESTORE + hidden_event 19, 70, HiddenItems, ULTRA_BALL + hidden_event 8, 90, HiddenItems, MAX_ETHER + db -1 ; end + + hidden_events_for VICTORY_ROAD_2F + hidden_event 5, 2, HiddenItems, ULTRA_BALL + hidden_event 26, 7, HiddenItems, FULL_RESTORE + db -1 ; end + + hidden_events_for UNUSED_MAP_6F + hidden_event 14, 11, HiddenItems, MAX_ELIXER + db -1 ; end + + hidden_events_for BILLS_HOUSE + hidden_event 1, 4, BillsHousePC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for VIRIDIAN_CITY + hidden_event 14, 4, HiddenItems, POTION + db -1 ; end + + hidden_events_for SAFARI_ZONE_WEST_REST_HOUSE + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_LEFT + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for SAFARI_ZONE_EAST_REST_HOUSE + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_LEFT + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for SAFARI_ZONE_NORTH_REST_HOUSE + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_LEFT + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for ROUTE_15_GATE_2F + hidden_event 1, 2, Route15GateLeftBinoculars, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for MR_FUJIS_HOUSE + hidden_event 0, 1, PrintMagazinesText, SPRITE_FACING_DOWN + hidden_event 1, 1, PrintMagazinesText, SPRITE_FACING_DOWN + hidden_event 7, 1, PrintMagazinesText, SPRITE_FACING_DOWN + db -1 ; end + + hidden_events_for CELADON_MANSION_ROOF_HOUSE + hidden_text_predef 3, 0, PrintBlackboardLinkCableText, LinkCableHelp + hidden_text_predef 4, 0, PrintBlackboardLinkCableText, LinkCableHelp + hidden_text_predef 3, 4, PrintNotebookText, TMNotebook + db -1 ; end + + hidden_events_for FIGHTING_DOJO + hidden_event 3, 9, PrintFightingDojoText, SPRITE_FACING_UP + hidden_event 6, 9, PrintFightingDojoText, SPRITE_FACING_UP + hidden_event 4, 0, PrintFightingDojoText2, SPRITE_FACING_UP + hidden_event 5, 0, PrintFightingDojoText3, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for INDIGO_PLATEAU_LOBBY + hidden_event 15, 7, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for CINNABAR_LAB_FOSSIL_ROOM + hidden_event 0, 4, OpenPokemonCenterPC, SPRITE_FACING_UP + hidden_event 2, 4, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for BIKE_SHOP + hidden_event 1, 0, PrintNewBikeText, ANY_FACING + hidden_event 2, 1, PrintNewBikeText, ANY_FACING + hidden_event 1, 2, PrintNewBikeText, ANY_FACING + hidden_event 3, 2, PrintNewBikeText, ANY_FACING + hidden_event 0, 4, PrintNewBikeText, ANY_FACING + hidden_event 1, 5, PrintNewBikeText, ANY_FACING + db -1 ; end + + hidden_events_for ROUTE_11 + hidden_event 48, 5, HiddenItems, ESCAPE_ROPE + db -1 ; end + + hidden_events_for ROUTE_12 + hidden_event 2, 63, HiddenItems, HYPER_POTION + db -1 ; end + + hidden_events_for SILPH_CO_11F + hidden_event 10, 12, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for ROUTE_17 + hidden_event 15, 14, HiddenItems, RARE_CANDY + hidden_event 8, 45, HiddenItems, FULL_RESTORE + hidden_event 17, 72, HiddenItems, PP_UP + hidden_event 4, 91, HiddenItems, MAX_REVIVE + hidden_event 8, 121, HiddenItems, MAX_ELIXER + db -1 ; end + + hidden_events_for UNDERGROUND_PATH_NORTH_SOUTH + hidden_event 3, 4, HiddenItems, FULL_RESTORE + hidden_event 4, 34, HiddenItems, X_SPECIAL + db -1 ; end + + hidden_events_for UNDERGROUND_PATH_WEST_EAST + hidden_event 12, 2, HiddenItems, NUGGET + hidden_event 21, 5, HiddenItems, ELIXER + db -1 ; end + + hidden_events_for CELADON_CITY + hidden_event 48, 15, HiddenItems, PP_UP + db -1 ; end + + hidden_events_for SEAFOAM_ISLANDS_B3F + hidden_event 9, 16, HiddenItems, MAX_ELIXER + db -1 ; end + + hidden_events_for VERMILION_CITY + hidden_event 14, 11, HiddenItems, MAX_ETHER + db -1 ; end + + hidden_events_for CERULEAN_CITY + hidden_event 15, 8, HiddenItems, RARE_CANDY + db -1 ; end + + hidden_events_for ROUTE_4 + hidden_event 40, 3, HiddenItems, GREAT_BALL + db -1 ; end diff --git a/data/events/hidden_objects.asm b/data/events/hidden_objects.asm deleted file mode 100644 index 55e33731..00000000 --- a/data/events/hidden_objects.asm +++ /dev/null @@ -1,668 +0,0 @@ -HiddenObjectMaps: - db REDS_HOUSE_2F - db BLUES_HOUSE - db OAKS_LAB - db VIRIDIAN_POKECENTER - db VIRIDIAN_MART - db VIRIDIAN_SCHOOL_HOUSE - db VIRIDIAN_GYM - db MUSEUM_1F - db PEWTER_GYM - db PEWTER_MART - db PEWTER_POKECENTER - db CERULEAN_POKECENTER - db CERULEAN_GYM - db CERULEAN_MART - db LAVENDER_POKECENTER - db VERMILION_POKECENTER - db VERMILION_GYM - db CELADON_MANSION_2F - db CELADON_POKECENTER - db CELADON_GYM - db GAME_CORNER - db CELADON_HOTEL - db FUCHSIA_POKECENTER - db FUCHSIA_GYM - db CINNABAR_GYM - db CINNABAR_POKECENTER - db SAFFRON_GYM - db MT_MOON_POKECENTER - db ROCK_TUNNEL_POKECENTER - db TRADE_CENTER - db COLOSSEUM - db VIRIDIAN_FOREST - db MT_MOON_B2F - db INDIGO_PLATEAU - db ROUTE_25 - db ROUTE_9 - db SS_ANNE_KITCHEN - db SS_ANNE_B1F_ROOMS - db ROCKET_HIDEOUT_B1F - db ROCKET_HIDEOUT_B3F - db ROCKET_HIDEOUT_B4F - db SAFFRON_POKECENTER - db POKEMON_TOWER_5F - db ROUTE_13 - db SAFARI_ZONE_GATE - db SAFARI_ZONE_WEST - db SILPH_CO_5F - db SILPH_CO_9F - db COPYCATS_HOUSE_2F - db CERULEAN_CAVE_1F - db CERULEAN_CAVE_B1F - db POWER_PLANT - db SEAFOAM_ISLANDS_B2F - db SEAFOAM_ISLANDS_B4F - db POKEMON_MANSION_1F - db POKEMON_MANSION_3F - db ROUTE_23 - db VICTORY_ROAD_2F - db UNUSED_MAP_6F - db BILLS_HOUSE - db VIRIDIAN_CITY - db SAFARI_ZONE_WEST_REST_HOUSE - db SAFARI_ZONE_EAST_REST_HOUSE - db SAFARI_ZONE_NORTH_REST_HOUSE - db ROUTE_15_GATE_2F - db MR_FUJIS_HOUSE - db CELADON_MANSION_ROOF_HOUSE - db FIGHTING_DOJO - db ROUTE_10 - db INDIGO_PLATEAU_LOBBY - db CINNABAR_LAB_FOSSIL_ROOM - db BIKE_SHOP - db ROUTE_11 - db ROUTE_12 - db POKEMON_MANSION_2F - db POKEMON_MANSION_B1F - db SILPH_CO_11F - db ROUTE_17 - db UNDERGROUND_PATH_NORTH_SOUTH - db UNDERGROUND_PATH_WEST_EAST - db CELADON_CITY - db SEAFOAM_ISLANDS_B3F - db VERMILION_CITY - db CERULEAN_CITY - db ROUTE_4 - db -1 ; end - -HiddenObjectPointers: -; each of these pointers is for the corresponding map in HiddenObjectMaps - dw RedsHouse2FHiddenObjects - dw BluesHouseHiddenObjects - dw OaksLabHiddenObjects - dw ViridianPokecenterHiddenObjects - dw ViridianMartHiddenObjects - dw ViridianSchoolHiddenObjects - dw ViridianGymHiddenObjects - dw Museum1FHiddenObjects - dw PewterGymHiddenObjects - dw PewterMartHiddenObjects - dw PewterPokecenterHiddenObjects - dw CeruleanPokecenterHiddenObjects - dw CeruleanGymHiddenObjects - dw CeruleanMartHiddenObjects - dw LavenderPokecenterHiddenObjects - dw VermilionPokecenterHiddenObjects - dw VermilionGymHiddenObjects - dw CeladonMansion2HiddenObjects - dw CeladonPokecenterHiddenObjects - dw CeladonGymHiddenObjects - dw GameCornerHiddenObjects - dw CeladonHotelHiddenObjects - dw FuchsiaPokecenterHiddenObjects - dw FuchsiaGymHiddenObjects - dw CinnabarGymHiddenObjects - dw CinnabarPokecenterHiddenObjects - dw SaffronGymHiddenObjects - dw MtMoonPokecenterHiddenObjects - dw RockTunnelPokecenterHiddenObjects - dw TradeCenterHiddenObjects - dw ColosseumHiddenObjects - dw ViridianForestHiddenObjects - dw MtMoon3HiddenObjects - dw IndigoPlateauHiddenObjects - dw Route25HiddenObjects - dw Route9HiddenObjects - dw SSAnne6HiddenObjects - dw SSAnne10HiddenObjects - dw RocketHideout1HiddenObjects - dw RocketHideout3HiddenObjects - dw RocketHideout4HiddenObjects - dw SaffronPokecenterHiddenObjects - dw PokemonTower5HiddenObjects - dw Route13HiddenObjects - dw SafariZoneEntranceHiddenObjects - dw SafariZoneWestHiddenObjects - dw SilphCo5FHiddenObjects - dw SilphCo9FHiddenObjects - dw CopycatsHouse2FHiddenObjects - dw CeruleanCave1HiddenObjects - dw CeruleanCave3HiddenObjects - dw PowerPlantHiddenObjects - dw SeafoamIslands3HiddenObjects - dw SeafoamIslands5HiddenObjects - dw Mansion1HiddenObjects - dw Mansion3HiddenObjects - dw Route23HiddenObjects - dw VictoryRoad2HiddenObjects - dw Unused6FHiddenObjects - dw BillsHouseHiddenObjects - dw ViridianCityHiddenObjects - dw SafariZoneRestHouse2HiddenObjects - dw SafariZoneRestHouse3HiddenObjects - dw SafariZoneRestHouse4HiddenObjects - dw Route15GateUpstairsHiddenObjects - dw LavenderHouse1HiddenObjects - dw CeladonMansion5HiddenObjects - dw FightingDojoHiddenObjects - dw Route10HiddenObjects - dw IndigoPlateauLobbyHiddenObjects - dw CinnabarLab4HiddenObjects - dw BikeShopHiddenObjects - dw Route11HiddenObjects - dw Route12HiddenObjects - dw Mansion2HiddenObjects - dw Mansion4HiddenObjects - dw SilphCo11FHiddenObjects - dw Route17HiddenObjects - dw UndergroundPathNsHiddenObjects - dw UndergroundPathWeHiddenObjects - dw CeladonCityHiddenObjects - dw SeafoamIslands4HiddenObjects - dw VermilionCityHiddenObjects - dw CeruleanCityHiddenObjects - dw Route4HiddenObjects - -MACRO hidden_object - db \2 ; y coord - db \1 ; x coord - db \3 ; item id - dba \4 ; object routine -ENDM - -MACRO hidden_text_predef - db \2 ; y coord - db \1 ; x coord - db_tx_pre \3 ; text id - dba \4 ; object routine -ENDM - -; Some hidden objects use SPRITE_FACING_* values, -; but these do not actually prevent the player -; from interacting with them in any direction. -DEF ANY_FACING EQU $d0 - -TradeCenterHiddenObjects: - hidden_object 5, 4, ANY_FACING, CableClubRightGameboy - hidden_object 4, 4, ANY_FACING, CableClubLeftGameboy - db -1 ; end - -ColosseumHiddenObjects: - hidden_object 5, 4, ANY_FACING, CableClubRightGameboy - hidden_object 4, 4, ANY_FACING, CableClubLeftGameboy - db -1 ; end - -RedsHouse2FHiddenObjects: - hidden_object 0, 1, SPRITE_FACING_UP, OpenRedsPC - hidden_object 3, 5, ANY_FACING, PrintRedSNESText - db -1 ; end - -BluesHouseHiddenObjects: - hidden_object 0, 1, SPRITE_FACING_UP, PrintBookcaseText - hidden_object 1, 1, SPRITE_FACING_UP, PrintBookcaseText - hidden_object 7, 1, SPRITE_FACING_UP, PrintBookcaseText - db -1 ; end - -OaksLabHiddenObjects: - hidden_object 4, 0, SPRITE_FACING_UP, DisplayOakLabLeftPoster - hidden_object 5, 0, SPRITE_FACING_UP, DisplayOakLabRightPoster - hidden_object 0, 1, SPRITE_FACING_UP, DisplayOakLabEmailText - hidden_object 1, 1, SPRITE_FACING_UP, DisplayOakLabEmailText - db -1 ; end - -ViridianPokecenterHiddenObjects: - hidden_object 0, 4, SPRITE_FACING_LEFT, PrintBenchGuyText - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -ViridianMartHiddenObjects: - db -1 ; end - -ViridianSchoolHiddenObjects: - hidden_text_predef 3, 4, ViridianSchoolNotebook, PrintNotebookText - hidden_text_predef 3, 0, ViridianSchoolBlackboard, PrintBlackboardLinkCableText - db -1 ; end - -ViridianGymHiddenObjects: - hidden_object 15, 15, SPRITE_FACING_UP, GymStatues - hidden_object 18, 15, SPRITE_FACING_UP, GymStatues - db -1 ; end - -Museum1FHiddenObjects: - hidden_object 2, 3, SPRITE_FACING_UP, AerodactylFossil - hidden_object 2, 6, SPRITE_FACING_UP, KabutopsFossil - db -1 ; end - -PewterGymHiddenObjects: - hidden_object 3, 10, SPRITE_FACING_UP, GymStatues - hidden_object 6, 10, SPRITE_FACING_UP, GymStatues - db -1 ; end - -PewterMartHiddenObjects: - db -1 ; end - -PewterPokecenterHiddenObjects: - hidden_object 0, 4, SPRITE_FACING_LEFT, PrintBenchGuyText - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -CeruleanPokecenterHiddenObjects: - hidden_object 0, 4, SPRITE_FACING_LEFT, PrintBenchGuyText - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -CeruleanGymHiddenObjects: - hidden_object 3, 11, SPRITE_FACING_UP, GymStatues - hidden_object 6, 11, SPRITE_FACING_UP, GymStatues - db -1 ; end - -CeruleanMartHiddenObjects: - db -1 ; end - -LavenderPokecenterHiddenObjects: - hidden_object 0, 4, SPRITE_FACING_LEFT, PrintBenchGuyText - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -VermilionPokecenterHiddenObjects: - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - hidden_object 0, 4, SPRITE_FACING_UP, PrintBenchGuyText - db -1 ; end - -VermilionGymHiddenObjects: - hidden_object 3, 14, SPRITE_FACING_UP, GymStatues - hidden_object 6, 14, SPRITE_FACING_UP, GymStatues - hidden_object 6, 1, SPRITE_FACING_DOWN, PrintTrashText - ; third param: [wGymTrashCanIndex] - hidden_object 1, 7, 0, GymTrashScript - hidden_object 1, 9, 1, GymTrashScript - hidden_object 1, 11, 2, GymTrashScript - hidden_object 3, 7, 3, GymTrashScript - hidden_object 3, 9, 4, GymTrashScript - hidden_object 3, 11, 5, GymTrashScript - hidden_object 5, 7, 6, GymTrashScript - hidden_object 5, 9, 7, GymTrashScript - hidden_object 5, 11, 8, GymTrashScript - hidden_object 7, 7, 9, GymTrashScript - hidden_object 7, 9, 10, GymTrashScript - hidden_object 7, 11, 11, GymTrashScript - hidden_object 9, 7, 12, GymTrashScript - hidden_object 9, 9, 13, GymTrashScript - hidden_object 9, 11, 14, GymTrashScript - db -1 ; end - -CeladonMansion2HiddenObjects: - hidden_object 0, 5, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -CeladonPokecenterHiddenObjects: - hidden_object 0, 4, SPRITE_FACING_LEFT, PrintBenchGuyText - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -CeladonGymHiddenObjects: - hidden_object 3, 15, SPRITE_FACING_UP, GymStatues - hidden_object 6, 15, SPRITE_FACING_UP, GymStatues - db -1 ; end - -GameCornerHiddenObjects: - hidden_object 18, 15, ANY_FACING, StartSlotMachine - hidden_object 18, 14, ANY_FACING, StartSlotMachine - hidden_object 18, 13, ANY_FACING, StartSlotMachine - hidden_object 18, 12, ANY_FACING, StartSlotMachine - hidden_object 18, 11, ANY_FACING, StartSlotMachine - hidden_object 18, 10, SLOTS_SOMEONESKEYS, StartSlotMachine - hidden_object 13, 10, ANY_FACING, StartSlotMachine - hidden_object 13, 11, ANY_FACING, StartSlotMachine - hidden_object 13, 12, SLOTS_OUTTOLUNCH, StartSlotMachine - hidden_object 13, 13, ANY_FACING, StartSlotMachine - hidden_object 13, 14, ANY_FACING, StartSlotMachine - hidden_object 13, 15, ANY_FACING, StartSlotMachine - hidden_object 12, 15, ANY_FACING, StartSlotMachine - hidden_object 12, 14, ANY_FACING, StartSlotMachine - hidden_object 12, 13, ANY_FACING, StartSlotMachine - hidden_object 12, 12, ANY_FACING, StartSlotMachine - hidden_object 12, 11, ANY_FACING, StartSlotMachine - hidden_object 12, 10, ANY_FACING, StartSlotMachine - hidden_object 7, 10, ANY_FACING, StartSlotMachine - hidden_object 7, 11, ANY_FACING, StartSlotMachine - hidden_object 7, 12, ANY_FACING, StartSlotMachine - hidden_object 7, 13, ANY_FACING, StartSlotMachine - hidden_object 7, 14, ANY_FACING, StartSlotMachine - hidden_object 7, 15, ANY_FACING, StartSlotMachine - hidden_object 6, 15, ANY_FACING, StartSlotMachine - hidden_object 6, 14, ANY_FACING, StartSlotMachine - hidden_object 6, 13, ANY_FACING, StartSlotMachine - hidden_object 6, 12, SLOTS_OUTOFORDER, StartSlotMachine - hidden_object 6, 11, ANY_FACING, StartSlotMachine - hidden_object 6, 10, ANY_FACING, StartSlotMachine - hidden_object 1, 10, ANY_FACING, StartSlotMachine - hidden_object 1, 11, ANY_FACING, StartSlotMachine - hidden_object 1, 12, ANY_FACING, StartSlotMachine - hidden_object 1, 13, ANY_FACING, StartSlotMachine - hidden_object 1, 14, ANY_FACING, StartSlotMachine - hidden_object 1, 15, ANY_FACING, StartSlotMachine - hidden_object 0, 8, COIN+10, HiddenCoins - hidden_object 1, 16, COIN+10, HiddenCoins - hidden_object 3, 11, COIN+20, HiddenCoins - hidden_object 3, 14, COIN+10, HiddenCoins - hidden_object 4, 12, COIN+10, HiddenCoins - hidden_object 9, 12, COIN+20, HiddenCoins - hidden_object 9, 15, COIN+10, HiddenCoins - hidden_object 16, 14, COIN+10, HiddenCoins - hidden_object 10, 16, COIN+10, HiddenCoins - hidden_object 11, 7, COIN+40, HiddenCoins - hidden_object 15, 8, COIN+100, HiddenCoins - hidden_object 12, 15, COIN+10, HiddenCoins - db -1 ; end - -CeladonHotelHiddenObjects: - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - hidden_object 0, 4, SPRITE_FACING_LEFT, PrintBenchGuyText - db -1 ; end - -FuchsiaPokecenterHiddenObjects: - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - hidden_object 0, 4, SPRITE_FACING_UP, PrintBenchGuyText - db -1 ; end - -FuchsiaGymHiddenObjects: - hidden_object 3, 15, SPRITE_FACING_UP, GymStatues - hidden_object 6, 15, SPRITE_FACING_UP, GymStatues - db -1 ; end - -CinnabarGymHiddenObjects: - hidden_object 17, 13, SPRITE_FACING_UP, GymStatues - ; third param: ([hGymGateAnswer] << 4) | [hGymGateIndex] - hidden_object 15, 7, (FALSE << 4) | 1, PrintCinnabarQuiz - hidden_object 10, 1, (TRUE << 4) | 2, PrintCinnabarQuiz - hidden_object 9, 7, (TRUE << 4) | 3, PrintCinnabarQuiz - hidden_object 9, 13, (TRUE << 4) | 4, PrintCinnabarQuiz - hidden_object 1, 13, (FALSE << 4) | 5, PrintCinnabarQuiz - hidden_object 1, 7, (TRUE << 4) | 6, PrintCinnabarQuiz - db -1 ; end - -CinnabarPokecenterHiddenObjects: - hidden_object 0, 4, SPRITE_FACING_UP, PrintBenchGuyText - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -SaffronGymHiddenObjects: - hidden_object 9, 15, SPRITE_FACING_UP, GymStatues - db -1 ; end - -MtMoonPokecenterHiddenObjects: - hidden_object 0, 4, SPRITE_FACING_LEFT, PrintBenchGuyText - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -RockTunnelPokecenterHiddenObjects: - hidden_object 0, 4, SPRITE_FACING_LEFT, PrintBenchGuyText - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -ViridianForestHiddenObjects: - hidden_object 1, 18, POTION, HiddenItems - hidden_object 16, 42, ANTIDOTE, HiddenItems - db -1 ; end - -MtMoon3HiddenObjects: - hidden_object 18, 12, MOON_STONE, HiddenItems - hidden_object 33, 9, ETHER, HiddenItems - db -1 ; end - -IndigoPlateauHiddenObjects: - hidden_object 8, 13, $ff, PrintIndigoPlateauHQText ; inaccessible - hidden_object 11, 13, SPRITE_FACING_DOWN, PrintIndigoPlateauHQText ; inaccessible - db -1 ; end - -Route25HiddenObjects: - hidden_object 38, 3, ETHER, HiddenItems - hidden_object 10, 1, ELIXER, HiddenItems - db -1 ; end - -Route9HiddenObjects: - hidden_object 14, 7, ETHER, HiddenItems - db -1 ; end - -SSAnne6HiddenObjects: - hidden_object 13, 5, SPRITE_FACING_DOWN, PrintTrashText - hidden_object 13, 7, SPRITE_FACING_DOWN, PrintTrashText - hidden_object 13, 9, GREAT_BALL, HiddenItems - db -1 ; end - -SSAnne10HiddenObjects: - hidden_object 3, 1, HYPER_POTION, HiddenItems - db -1 ; end - -Route10HiddenObjects: - hidden_object 9, 17, SUPER_POTION, HiddenItems - hidden_object 16, 53, MAX_ETHER, HiddenItems - db -1 ; end - -RocketHideout1HiddenObjects: - hidden_object 21, 15, PP_UP, HiddenItems - db -1 ; end - -RocketHideout3HiddenObjects: - hidden_object 27, 17, NUGGET, HiddenItems - db -1 ; end - -RocketHideout4HiddenObjects: - hidden_object 25, 1, SUPER_POTION, HiddenItems - db -1 ; end - -SaffronPokecenterHiddenObjects: - hidden_object 0, 4, SPRITE_FACING_UP, PrintBenchGuyText - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -PokemonTower5HiddenObjects: - hidden_object 4, 12, ELIXER, HiddenItems - db -1 ; end - -Route13HiddenObjects: - hidden_object 1, 14, PP_UP, HiddenItems - hidden_object 16, 13, CALCIUM, HiddenItems - db -1 ; end - -SafariZoneEntranceHiddenObjects: - hidden_object 10, 1, NUGGET, HiddenItems ; inaccessible - db -1 ; end - -SafariZoneWestHiddenObjects: - hidden_object 6, 5, REVIVE, HiddenItems - db -1 ; end - -SilphCo5FHiddenObjects: - hidden_object 12, 3, ELIXER, HiddenItems - db -1 ; end - -SilphCo9FHiddenObjects: - hidden_object 2, 15, MAX_POTION, HiddenItems - db -1 ; end - -CopycatsHouse2FHiddenObjects: - hidden_object 1, 1, NUGGET, HiddenItems - db -1 ; end - -CeruleanCave1HiddenObjects: - hidden_object 14, 11, RARE_CANDY, HiddenItems - db -1 ; end - -CeruleanCave3HiddenObjects: - hidden_object 27, 3, ULTRA_BALL, HiddenItems - db -1 ; end - -PowerPlantHiddenObjects: - hidden_object 17, 16, MAX_ELIXER, HiddenItems - hidden_object 12, 1, PP_UP, HiddenItems - db -1 ; end - -SeafoamIslands3HiddenObjects: - hidden_object 15, 15, NUGGET, HiddenItems - db -1 ; end - -SeafoamIslands5HiddenObjects: - hidden_object 25, 17, ULTRA_BALL, HiddenItems - db -1 ; end - -Mansion1HiddenObjects: - hidden_object 8, 16, MOON_STONE, HiddenItems - hidden_object 2, 5, SPRITE_FACING_UP, Mansion1Script_Switches - db -1 ; end - -Mansion2HiddenObjects: - hidden_object 2, 11, SPRITE_FACING_UP, Mansion2Script_Switches - db -1 ; end - -Mansion3HiddenObjects: - hidden_object 1, 9, MAX_REVIVE, HiddenItems - hidden_object 10, 5, SPRITE_FACING_UP, Mansion3Script_Switches - db -1 ; end - -Mansion4HiddenObjects: - hidden_object 1, 9, RARE_CANDY, HiddenItems - hidden_object 20, 3, SPRITE_FACING_UP, Mansion4Script_Switches - hidden_object 18, 25, SPRITE_FACING_UP, Mansion4Script_Switches - db -1 ; end - -Route23HiddenObjects: - hidden_object 9, 44, FULL_RESTORE, HiddenItems - hidden_object 19, 70, ULTRA_BALL, HiddenItems - hidden_object 8, 90, MAX_ETHER, HiddenItems - db -1 ; end - -VictoryRoad2HiddenObjects: - hidden_object 5, 2, ULTRA_BALL, HiddenItems - hidden_object 26, 7, FULL_RESTORE, HiddenItems - db -1 ; end - -Unused6FHiddenObjects: - hidden_object 14, 11, MAX_ELIXER, HiddenItems - db -1 ; end - -BillsHouseHiddenObjects: - hidden_object 1, 4, SPRITE_FACING_UP, BillsHousePC - db -1 ; end - -ViridianCityHiddenObjects: - hidden_object 14, 4, POTION, HiddenItems - db -1 ; end - -SafariZoneRestHouse2HiddenObjects: - hidden_object 0, 4, SPRITE_FACING_LEFT, PrintBenchGuyText - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -SafariZoneRestHouse3HiddenObjects: - hidden_object 0, 4, SPRITE_FACING_LEFT, PrintBenchGuyText - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -SafariZoneRestHouse4HiddenObjects: - hidden_object 0, 4, SPRITE_FACING_LEFT, PrintBenchGuyText - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -Route15GateUpstairsHiddenObjects: - hidden_object 1, 2, SPRITE_FACING_UP, Route15GateLeftBinoculars - db -1 ; end - -LavenderHouse1HiddenObjects: - hidden_object 0, 1, SPRITE_FACING_DOWN, PrintMagazinesText - hidden_object 1, 1, SPRITE_FACING_DOWN, PrintMagazinesText - hidden_object 7, 1, SPRITE_FACING_DOWN, PrintMagazinesText - db -1 ; end - -CeladonMansion5HiddenObjects: - hidden_text_predef 3, 0, LinkCableHelp, PrintBlackboardLinkCableText - hidden_text_predef 4, 0, LinkCableHelp, PrintBlackboardLinkCableText - hidden_text_predef 3, 4, TMNotebook, PrintNotebookText - db -1 ; end - -FightingDojoHiddenObjects: - hidden_object 3, 9, SPRITE_FACING_UP, PrintFightingDojoText - hidden_object 6, 9, SPRITE_FACING_UP, PrintFightingDojoText - hidden_object 4, 0, SPRITE_FACING_UP, PrintFightingDojoText2 - hidden_object 5, 0, SPRITE_FACING_UP, PrintFightingDojoText3 - db -1 ; end - -IndigoPlateauLobbyHiddenObjects: - hidden_object 15, 7, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -CinnabarLab4HiddenObjects: - hidden_object 0, 4, SPRITE_FACING_UP, OpenPokemonCenterPC - hidden_object 2, 4, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -BikeShopHiddenObjects: - hidden_object 1, 0, ANY_FACING, PrintNewBikeText - hidden_object 2, 1, ANY_FACING, PrintNewBikeText - hidden_object 1, 2, ANY_FACING, PrintNewBikeText - hidden_object 3, 2, ANY_FACING, PrintNewBikeText - hidden_object 0, 4, ANY_FACING, PrintNewBikeText - hidden_object 1, 5, ANY_FACING, PrintNewBikeText - db -1 ; end - -Route11HiddenObjects: - hidden_object 48, 5, ESCAPE_ROPE, HiddenItems - db -1 ; end - -Route12HiddenObjects: - hidden_object 2, 63, HYPER_POTION, HiddenItems - db -1 ; end - -SilphCo11FHiddenObjects: - hidden_object 10, 12, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -Route17HiddenObjects: - hidden_object 15, 14, RARE_CANDY, HiddenItems - hidden_object 8, 45, FULL_RESTORE, HiddenItems - hidden_object 17, 72, PP_UP, HiddenItems - hidden_object 4, 91, MAX_REVIVE, HiddenItems - hidden_object 8, 121, MAX_ELIXER, HiddenItems - db -1 ; end - -UndergroundPathNsHiddenObjects: - hidden_object 3, 4, FULL_RESTORE, HiddenItems - hidden_object 4, 34, X_SPECIAL, HiddenItems - db -1 ; end - -UndergroundPathWeHiddenObjects: - hidden_object 12, 2, NUGGET, HiddenItems - hidden_object 21, 5, ELIXER, HiddenItems - db -1 ; end - -CeladonCityHiddenObjects: - hidden_object 48, 15, PP_UP, HiddenItems - db -1 ; end - -SeafoamIslands4HiddenObjects: - hidden_object 9, 16, MAX_ELIXER, HiddenItems - db -1 ; end - -VermilionCityHiddenObjects: - hidden_object 14, 11, MAX_ETHER, HiddenItems - db -1 ; end - -CeruleanCityHiddenObjects: - hidden_object 15, 8, RARE_CANDY, HiddenItems - db -1 ; end - -Route4HiddenObjects: - hidden_object 40, 3, GREAT_BALL, HiddenItems - db -1 ; end diff --git a/data/predef_pointers.asm b/data/predef_pointers.asm index 19c3ea8f..b3bb1643 100644 --- a/data/predef_pointers.asm +++ b/data/predef_pointers.asm @@ -39,7 +39,7 @@ PredefPointers:: add_predef LearnMoveFromLevelUp add_predef LearnMove add_predef GetQuantityOfItemInBag - add_predef CheckForHiddenObjectOrBookshelfOrCardKeyDoor, $03 ; home bank + add_predef CheckForHiddenEventOrBookshelfOrCardKeyDoor, $03 ; home bank add_predef GiveItem, $03 ; home bank add_predef ChangeBGPalColor0_4Frames add_predef FindPathToPlayer diff --git a/engine/events/hidden_events/bench_guys.asm b/engine/events/hidden_events/bench_guys.asm new file mode 100644 index 00000000..e5a2a724 --- /dev/null +++ b/engine/events/hidden_events/bench_guys.asm @@ -0,0 +1,107 @@ +PrintBenchGuyText: + call EnableAutoTextBoxDrawing + ld hl, BenchGuyTextPointers + ld a, [wCurMap] + ld b, a +.loop + ld a, [hli] + cp -1 + ret z + cp b + jr z, .match + inc hl + inc hl + jr .loop +.match + ld a, [hli] + ld b, a + ld a, [wSpritePlayerStateData1FacingDirection] + cp b + + ; bug: an 'inc hl' instruction is needed before looping back. When trying to + ; talk to a bench guy from above, this Sprite Facing test will fail, and the + ; next loop iteration will be misaligned within BenchGuyTextPointers table. + ; As a result, the routine will miss the terminator byte, and continue to + ; process data beyond the table boundary. + ; It seems that it will only return after starting to read data from VRAM + ; (According to Pan Docs, during PPU mode 3, reads return garbage value, + ; usually $FF). + jr nz, .loop ; player isn't facing the bench guy + ld a, [hl] + jp PrintPredefTextID + +INCLUDE "data/events/bench_guys.asm" + +ViridianCityPokecenterBenchGuyText:: + text_far _ViridianCityPokecenterGuyText + text_end + +PewterCityPokecenterBenchGuyText:: + text_far _PewterCityPokecenterGuyText + text_end + +CeruleanCityPokecenterBenchGuyText:: + text_far _CeruleanPokecenterGuyText + text_end + +LavenderCityPokecenterBenchGuyText:: + text_far _LavenderPokecenterGuyText + text_end + +MtMoonPokecenterBenchGuyText:: + text_far _MtMoonPokecenterBenchGuyText + text_end + +RockTunnelPokecenterBenchGuyText:: + text_far _RockTunnelPokecenterGuyText + text_end + +UnusedBenchGuyText1:: + text_far _UnusedBenchGuyText1 + text_end + +UnusedBenchGuyText2:: + text_far _UnusedBenchGuyText2 + text_end + +UnusedBenchGuyText3:: + text_far _UnusedBenchGuyText3 + text_end + +VermilionCityPokecenterBenchGuyText:: + text_far _VermilionPokecenterGuyText + text_end + +CeladonCityPokecenterBenchGuyText:: + text_far _CeladonCityPokecenterGuyText + text_end + +FuchsiaCityPokecenterBenchGuyText:: + text_far _FuchsiaCityPokecenterGuyText + text_end + +CinnabarIslandPokecenterBenchGuyText:: + text_far _CinnabarPokecenterGuyText + text_end + +SaffronCityPokecenterBenchGuyText:: + text_asm + CheckEvent EVENT_BEAT_SILPH_CO_GIOVANNI + ld hl, SaffronCityPokecenterBenchGuyText2 + jr nz, .printText + ld hl, SaffronCityPokecenterBenchGuyText1 +.printText + call PrintText + jp TextScriptEnd + +SaffronCityPokecenterBenchGuyText1: + text_far _SaffronCityPokecenterGuyText1 + text_end + +SaffronCityPokecenterBenchGuyText2: + text_far _SaffronCityPokecenterGuyText2 + text_end + +CeladonCityHotelText:: + text_far _CeladonCityHotelText + text_end diff --git a/engine/events/hidden_events/bills_house_pc.asm b/engine/events/hidden_events/bills_house_pc.asm new file mode 100644 index 00000000..3972e20c --- /dev/null +++ b/engine/events/hidden_events/bills_house_pc.asm @@ -0,0 +1,134 @@ +BillsHousePC: + call EnableAutoTextBoxDrawing + ld a, [wSpritePlayerStateData1FacingDirection] + cp SPRITE_FACING_UP + ret nz + CheckEvent EVENT_LEFT_BILLS_HOUSE_AFTER_HELPING + jr nz, .displayBillsHousePokemonList + CheckEventReuseA EVENT_USED_CELL_SEPARATOR_ON_BILL + jr nz, .displayBillsHouseMonitorText + CheckEventReuseA EVENT_BILL_SAID_USE_CELL_SEPARATOR + jr nz, .doCellSeparator +.displayBillsHouseMonitorText + tx_pre_jump BillsHouseMonitorText +.doCellSeparator + ld a, $1 + ld [wDoNotWaitForButtonPressAfterDisplayingText], a + tx_pre BillsHouseInitiatedText + ld c, 32 + call DelayFrames + ld a, SFX_TINK + call PlaySound + call WaitForSoundToFinish + ld c, 80 + call DelayFrames + ld a, SFX_SHRINK + call PlaySound + call WaitForSoundToFinish + ld c, 48 + call DelayFrames + ld a, SFX_TINK + call PlaySound + call WaitForSoundToFinish + ld c, 32 + call DelayFrames + ld a, SFX_GET_ITEM_1 + call PlaySound + call WaitForSoundToFinish + call PlayDefaultMusic + SetEvent EVENT_USED_CELL_SEPARATOR_ON_BILL + ret +.displayBillsHousePokemonList + ld a, $1 + ld [wDoNotWaitForButtonPressAfterDisplayingText], a + tx_pre BillsHousePokemonList + ret + +BillsHouseMonitorText:: + text_far _BillsHouseMonitorText + text_end + +BillsHouseInitiatedText:: + text_far _BillsHouseInitiatedText + text_promptbutton + text_asm + ld a, SFX_STOP_ALL_MUSIC + ld [wNewSoundID], a + call PlaySound + ld c, 16 + call DelayFrames + ld a, SFX_SWITCH + call PlaySound + call WaitForSoundToFinish + ld c, 60 + call DelayFrames + jp TextScriptEnd + +BillsHousePokemonList:: + text_asm + call SaveScreenTilesToBuffer1 + ld hl, BillsHousePokemonListText1 + call PrintText + xor a + ld [wMenuItemOffset], a ; not used + ld [wCurrentMenuItem], a + ld [wLastMenuItem], a + ld a, PAD_A | PAD_B + ld [wMenuWatchedKeys], a + ld a, 4 + ld [wMaxMenuItem], a + ld a, 2 + ld [wTopMenuItemY], a + ld a, 1 + ld [wTopMenuItemX], a +.billsPokemonLoop + ld hl, wStatusFlags5 + set BIT_NO_TEXT_DELAY, [hl] + hlcoord 0, 0 + ld b, 10 + ld c, 9 + call TextBoxBorder + hlcoord 2, 2 + ld de, BillsMonListText + call PlaceString + ld hl, BillsHousePokemonListText2 + call PrintText + call SaveScreenTilesToBuffer2 + call HandleMenuInput + bit B_PAD_B, a + jr nz, .cancel + ld a, [wCurrentMenuItem] + add EEVEE + cp EEVEE + jr z, .displayPokedex + cp FLAREON + jr z, .displayPokedex + cp JOLTEON + jr z, .displayPokedex + cp VAPOREON + jr z, .displayPokedex + jr .cancel +.displayPokedex + call DisplayPokedex + call LoadScreenTilesFromBuffer2 + jr .billsPokemonLoop +.cancel + ld hl, wStatusFlags5 + res BIT_NO_TEXT_DELAY, [hl] + call LoadScreenTilesFromBuffer2 + jp TextScriptEnd + +BillsHousePokemonListText1: + text_far _BillsHousePokemonListText1 + text_end + +BillsMonListText: + db "EEVEE" + next "FLAREON" + next "JOLTEON" + next "VAPOREON" + next "CANCEL@" + +BillsHousePokemonListText2: + text_far _BillsHousePokemonListText2 + text_end diff --git a/engine/events/hidden_events/blues_room.asm b/engine/events/hidden_events/blues_room.asm new file mode 100644 index 00000000..bcbad556 --- /dev/null +++ b/engine/events/hidden_events/blues_room.asm @@ -0,0 +1,13 @@ + + ret ; unused + +UnusedPredefText:: + db "@" + +PrintBookcaseText: + call EnableAutoTextBoxDrawing + tx_pre_jump BookcaseText + +BookcaseText:: + text_far _BookcaseText + text_end diff --git a/engine/events/hidden_events/book_or_sculpture.asm b/engine/events/hidden_events/book_or_sculpture.asm new file mode 100644 index 00000000..e04f4047 --- /dev/null +++ b/engine/events/hidden_events/book_or_sculpture.asm @@ -0,0 +1,21 @@ +BookOrSculptureText:: + text_asm + ld hl, PokemonBooksText + ld a, [wCurMapTileset] + cp MANSION ; Celadon Mansion tileset + jr nz, .ok + lda_coord 8, 6 + cp $38 + jr nz, .ok + ld hl, DiglettSculptureText +.ok + call PrintText + jp TextScriptEnd + +PokemonBooksText: + text_far _PokemonBooksText + text_end + +DiglettSculptureText: + text_far _DiglettSculptureText + text_end diff --git a/engine/events/hidden_events/bookshelves.asm b/engine/events/hidden_events/bookshelves.asm new file mode 100644 index 00000000..813cfc49 --- /dev/null +++ b/engine/events/hidden_events/bookshelves.asm @@ -0,0 +1,39 @@ +; prints text for bookshelves in buildings without sign events +PrintBookshelfText:: + ld a, [wSpritePlayerStateData1FacingDirection] + cp SPRITE_FACING_UP + jr nz, .noMatch +; facing up + ld a, [wCurMapTileset] + ld b, a + lda_coord 8, 7 + ld c, a + ld hl, BookshelfTileIDs +.loop + ld a, [hli] + cp $ff + jr z, .noMatch + cp b + jr nz, .nextBookshelfEntry1 + ld a, [hli] + cp c + jr nz, .nextBookshelfEntry2 + ld a, [hl] + push af + call EnableAutoTextBoxDrawing + pop af + call PrintPredefTextID + xor a + ldh [hInteractedWithBookshelf], a + ret +.nextBookshelfEntry1 + inc hl +.nextBookshelfEntry2 + inc hl + jr .loop +.noMatch + ld a, $ff + ldh [hInteractedWithBookshelf], a + farjp PrintCardKeyText + +INCLUDE "data/tilesets/bookshelf_tile_ids.asm" diff --git a/engine/events/hidden_events/cinnabar_gym_quiz.asm b/engine/events/hidden_events/cinnabar_gym_quiz.asm new file mode 100644 index 00000000..9762c214 --- /dev/null +++ b/engine/events/hidden_events/cinnabar_gym_quiz.asm @@ -0,0 +1,200 @@ +PrintCinnabarQuiz: + ld a, [wSpritePlayerStateData1FacingDirection] + cp SPRITE_FACING_UP + ret nz + call EnableAutoTextBoxDrawing + tx_pre_jump CinnabarGymQuiz + +CinnabarGymQuiz:: + text_asm + xor a + ld [wOpponentAfterWrongAnswer], a + ld a, [wHiddenEventFunctionArgument] + push af + and $f + ldh [hGymGateIndex], a + pop af + and $f0 + swap a + ldh [hGymGateAnswer], a + ld hl, CinnabarGymQuizIntroText + call PrintText + ldh a, [hGymGateIndex] + dec a + add a + ld d, 0 + ld e, a + ld hl, CinnabarQuizQuestions + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + call PrintText + ld a, 1 + ld [wDoNotWaitForButtonPressAfterDisplayingText], a + call CinnabarGymQuiz_AskQuestion + jp TextScriptEnd + +CinnabarGymQuizIntroText: + text_far _CinnabarGymQuizIntroText + text_end + +CinnabarQuizQuestions: + dw CinnabarQuizQuestionsText1 + dw CinnabarQuizQuestionsText2 + dw CinnabarQuizQuestionsText3 + dw CinnabarQuizQuestionsText4 + dw CinnabarQuizQuestionsText5 + dw CinnabarQuizQuestionsText6 + +CinnabarQuizQuestionsText1: + text_far _CinnabarQuizQuestionsText1 + text_end + +CinnabarQuizQuestionsText2: + text_far _CinnabarQuizQuestionsText2 + text_end + +CinnabarQuizQuestionsText3: + text_far _CinnabarQuizQuestionsText3 + text_end + +CinnabarQuizQuestionsText4: + text_far _CinnabarQuizQuestionsText4 + text_end + +CinnabarQuizQuestionsText5: + text_far _CinnabarQuizQuestionsText5 + text_end + +CinnabarQuizQuestionsText6: + text_far _CinnabarQuizQuestionsText6 + text_end + +CinnabarGymGateFlagAction: + EventFlagAddress hl, EVENT_CINNABAR_GYM_GATE0_UNLOCKED + predef_jump FlagActionPredef + +CinnabarGymQuiz_AskQuestion: + call YesNoChoice + ldh a, [hGymGateAnswer] + ld c, a + ld a, [wCurrentMenuItem] + cp c + jr nz, .wrongAnswer + ld hl, wCurrentMapScriptFlags + set BIT_CUR_MAP_LOADED_1, [hl] + ldh a, [hGymGateIndex] + ldh [hBackupGymGateIndex], a + ld hl, CinnabarGymQuizCorrectText + call PrintText + ldh a, [hBackupGymGateIndex] + AdjustEventBit EVENT_CINNABAR_GYM_GATE0_UNLOCKED, 0 + ld c, a + ld b, FLAG_SET + call CinnabarGymGateFlagAction + jp UpdateCinnabarGymGateTileBlocks_ +.wrongAnswer + call WaitForSoundToFinish + ld a, SFX_DENIED + call PlaySound + call WaitForSoundToFinish + ld hl, CinnabarGymQuizIncorrectText + call PrintText + ldh a, [hGymGateIndex] + add $2 + AdjustEventBit EVENT_BEAT_CINNABAR_GYM_TRAINER_0, 2 + ld c, a + ld b, FLAG_TEST + EventFlagAddress hl, EVENT_BEAT_CINNABAR_GYM_TRAINER_0 + predef FlagActionPredef + ld a, c + and a + ret nz + ldh a, [hGymGateIndex] + add $2 + ld [wOpponentAfterWrongAnswer], a + ret + +CinnabarGymQuizCorrectText: + sound_get_item_1 + text_far _CinnabarGymQuizCorrectText + text_promptbutton + text_asm + + ldh a, [hBackupGymGateIndex] + AdjustEventBit EVENT_CINNABAR_GYM_GATE0_UNLOCKED, 0 + ld c, a + ld b, FLAG_TEST + call CinnabarGymGateFlagAction + ld a, c + and a + jp nz, TextScriptEnd + call WaitForSoundToFinish + ld a, SFX_GO_INSIDE + call PlaySound + call WaitForSoundToFinish + jp TextScriptEnd + +CinnabarGymQuizIncorrectText: + text_far _CinnabarGymQuizIncorrectText + text_end + +UpdateCinnabarGymGateTileBlocks_:: +; Update the overworld map with open floor blocks or locked gate blocks +; depending on event flags. + ld a, 6 + ldh [hGymGateIndex], a +.loop + ldh a, [hGymGateIndex] + dec a + add a + add a + ld d, 0 + ld e, a + ld hl, CinnabarGymGateCoords + add hl, de + ld a, [hli] + ld b, [hl] + ld c, a + inc hl + ld a, [hl] + ld [wGymGateTileBlock], a + push bc + ldh a, [hGymGateIndex] + ldh [hBackupGymGateIndex], a + AdjustEventBit EVENT_CINNABAR_GYM_GATE0_UNLOCKED, 0 + ld c, a + ld b, FLAG_TEST + call CinnabarGymGateFlagAction + ld a, c + and a + jr nz, .unlocked + ld a, [wGymGateTileBlock] + jr .next +.unlocked + ld a, $e +.next + pop bc + ld [wNewTileBlockID], a + predef ReplaceTileBlock + ld hl, hGymGateIndex + dec [hl] + jr nz, .loop + ret + +MACRO gym_gate_coord + db \1, \2, \3, 0 +ENDM + +DEF HORIZONTAL_GATE_BLOCK EQU $54 +DEF VERTICAL_GATE_BLOCK EQU $5f + +CinnabarGymGateCoords: + ; x coord, y coord, block id + gym_gate_coord 9, 3, HORIZONTAL_GATE_BLOCK + gym_gate_coord 6, 3, HORIZONTAL_GATE_BLOCK + gym_gate_coord 6, 6, HORIZONTAL_GATE_BLOCK + gym_gate_coord 3, 8, VERTICAL_GATE_BLOCK + gym_gate_coord 2, 6, HORIZONTAL_GATE_BLOCK + gym_gate_coord 2, 3, HORIZONTAL_GATE_BLOCK diff --git a/engine/events/hidden_events/elevator.asm b/engine/events/hidden_events/elevator.asm new file mode 100644 index 00000000..ab0f731f --- /dev/null +++ b/engine/events/hidden_events/elevator.asm @@ -0,0 +1,3 @@ +ElevatorText:: + text_far _ElevatorText + text_end diff --git a/engine/events/hidden_events/fighting_dojo.asm b/engine/events/hidden_events/fighting_dojo.asm new file mode 100644 index 00000000..b4f89985 --- /dev/null +++ b/engine/events/hidden_events/fighting_dojo.asm @@ -0,0 +1,23 @@ +PrintFightingDojoText2: + call EnableAutoTextBoxDrawing + tx_pre_jump EnemiesOnEverySideText + +EnemiesOnEverySideText:: + text_far _EnemiesOnEverySideText + text_end + +PrintFightingDojoText3: + call EnableAutoTextBoxDrawing + tx_pre_jump WhatGoesAroundComesAroundText + +WhatGoesAroundComesAroundText:: + text_far _WhatGoesAroundComesAroundText + text_end + +PrintFightingDojoText: + call EnableAutoTextBoxDrawing + tx_pre_jump FightingDojoText + +FightingDojoText:: + text_far _FightingDojoText + text_end diff --git a/engine/events/hidden_events/gym_statues.asm b/engine/events/hidden_events/gym_statues.asm new file mode 100644 index 00000000..1c7eb970 --- /dev/null +++ b/engine/events/hidden_events/gym_statues.asm @@ -0,0 +1,39 @@ +GymStatues: +; if in a gym and have the corresponding badge, a = GymStatueText2_id and jp PrintPredefTextID +; if in a gym and don't have the corresponding badge, a = GymStatueText1_id and jp PrintPredefTextID +; else ret + call EnableAutoTextBoxDrawing + ld a, [wSpritePlayerStateData1FacingDirection] + cp SPRITE_FACING_UP + ret nz + ld hl, MapBadgeFlags + ld a, [wCurMap] + ld b, a +.loop + ld a, [hli] + cp $ff + ret z + cp b + jr z, .match + inc hl + jr .loop +.match + ld b, [hl] + ld a, [wBeatGymFlags] + and b + cp b + tx_pre_id GymStatueText2 + jr z, .haveBadge + tx_pre_id GymStatueText1 +.haveBadge + jp PrintPredefTextID + +INCLUDE "data/maps/badge_maps.asm" + +GymStatueText1:: + text_far _GymStatueText1 + text_end + +GymStatueText2:: + text_far _GymStatueText2 + text_end diff --git a/engine/events/hidden_events/indigo_plateau_hq.asm b/engine/events/hidden_events/indigo_plateau_hq.asm new file mode 100644 index 00000000..e8fd0220 --- /dev/null +++ b/engine/events/hidden_events/indigo_plateau_hq.asm @@ -0,0 +1,10 @@ +PrintIndigoPlateauHQText: + ld a, [wSpritePlayerStateData1FacingDirection] + cp SPRITE_FACING_UP + ret nz + call EnableAutoTextBoxDrawing + tx_pre_jump IndigoPlateauHQText + +IndigoPlateauHQText:: + text_far _IndigoPlateauHQText + text_end diff --git a/engine/events/hidden_events/indigo_plateau_statues.asm b/engine/events/hidden_events/indigo_plateau_statues.asm new file mode 100644 index 00000000..f78a5a72 --- /dev/null +++ b/engine/events/hidden_events/indigo_plateau_statues.asm @@ -0,0 +1,24 @@ +IndigoPlateauStatues:: + text_asm + ld hl, IndigoPlateauStatuesText1 + call PrintText + ld a, [wXCoord] + bit 0, a ; even or odd? + ld hl, IndigoPlateauStatuesText2 + jr nz, .ok + ld hl, IndigoPlateauStatuesText3 +.ok + call PrintText + jp TextScriptEnd + +IndigoPlateauStatuesText1: + text_far _IndigoPlateauStatuesText1 + text_end + +IndigoPlateauStatuesText2: + text_far _IndigoPlateauStatuesText2 + text_end + +IndigoPlateauStatuesText3: + text_far _IndigoPlateauStatuesText3 + text_end diff --git a/engine/events/hidden_events/magazines.asm b/engine/events/hidden_events/magazines.asm new file mode 100644 index 00000000..b58636ff --- /dev/null +++ b/engine/events/hidden_events/magazines.asm @@ -0,0 +1,8 @@ +PrintMagazinesText: + call EnableAutoTextBoxDrawing + tx_pre MagazinesText + ret + +MagazinesText:: + text_far _MagazinesText + text_end diff --git a/engine/events/hidden_events/museum_fossils.asm b/engine/events/hidden_events/museum_fossils.asm new file mode 100644 index 00000000..df74293f --- /dev/null +++ b/engine/events/hidden_events/museum_fossils.asm @@ -0,0 +1,51 @@ +AerodactylFossil: + ld a, FOSSIL_AERODACTYL + ld [wCurPartySpecies], a + call DisplayMonFrontSpriteInBox + call EnableAutoTextBoxDrawing + tx_pre AerodactylFossilText + ret + +AerodactylFossilText:: + text_far _AerodactylFossilText + text_end + +KabutopsFossil: + ld a, FOSSIL_KABUTOPS + ld [wCurPartySpecies], a + call DisplayMonFrontSpriteInBox + call EnableAutoTextBoxDrawing + tx_pre KabutopsFossilText + ret + +KabutopsFossilText:: + text_far _KabutopsFossilText + text_end + +DisplayMonFrontSpriteInBox: +; Displays a pokemon's front sprite in a pop-up window. + ld a, 1 + ldh [hAutoBGTransferEnabled], a + call Delay3 + xor a + ldh [hWY], a + call SaveScreenTilesToBuffer1 + ld a, MON_SPRITE_POPUP + ld [wTextBoxID], a + call DisplayTextBoxID + call UpdateSprites + ld a, [wCurPartySpecies] + ld [wCurSpecies], a + call GetMonHeader + ld de, vChars1 tile $31 + call LoadMonFrontSprite + ld a, $80 + ldh [hStartTileID], a + hlcoord 10, 11 + predef AnimateSendingOutMon + call WaitForTextScrollButtonPress + call LoadScreenTilesFromBuffer1 + call Delay3 + ld a, $90 + ldh [hWY], a + ret diff --git a/engine/events/hidden_events/new_bike.asm b/engine/events/hidden_events/new_bike.asm new file mode 100644 index 00000000..5bce5937 --- /dev/null +++ b/engine/events/hidden_events/new_bike.asm @@ -0,0 +1,7 @@ +PrintNewBikeText: + call EnableAutoTextBoxDrawing + tx_pre_jump NewBicycleText + +NewBicycleText:: + text_far _NewBicycleText + text_end diff --git a/engine/events/hidden_events/oaks_lab_email.asm b/engine/events/hidden_events/oaks_lab_email.asm new file mode 100644 index 00000000..b66babe0 --- /dev/null +++ b/engine/events/hidden_events/oaks_lab_email.asm @@ -0,0 +1,10 @@ +DisplayOakLabEmailText: + ld a, [wSpritePlayerStateData1FacingDirection] + cp SPRITE_FACING_UP + ret nz + call EnableAutoTextBoxDrawing + tx_pre_jump OakLabEmailText + +OakLabEmailText:: + text_far _OakLabEmailText + text_end diff --git a/engine/events/hidden_events/oaks_lab_posters.asm b/engine/events/hidden_events/oaks_lab_posters.asm new file mode 100644 index 00000000..502cf951 --- /dev/null +++ b/engine/events/hidden_events/oaks_lab_posters.asm @@ -0,0 +1,29 @@ +DisplayOakLabLeftPoster: + call EnableAutoTextBoxDrawing + tx_pre_jump PushStartText + +PushStartText:: + text_far _PushStartText + text_end + +DisplayOakLabRightPoster: + call EnableAutoTextBoxDrawing + ld hl, wPokedexOwned + ld b, wPokedexOwnedEnd - wPokedexOwned + call CountSetBits + ld a, [wNumSetBits] + cp 2 + tx_pre_id SaveOptionText + jr c, .ownLessThanTwo + ; own two or more mon + tx_pre_id StrengthsAndWeaknessesText +.ownLessThanTwo + jp PrintPredefTextID + +SaveOptionText:: + text_far _SaveOptionText + text_end + +StrengthsAndWeaknessesText:: + text_far _StrengthsAndWeaknessesText + text_end diff --git a/engine/events/hidden_events/pokecenter_pc.asm b/engine/events/hidden_events/pokecenter_pc.asm new file mode 100644 index 00000000..59867d1a --- /dev/null +++ b/engine/events/hidden_events/pokecenter_pc.asm @@ -0,0 +1,11 @@ +OpenPokemonCenterPC: + ld a, [wSpritePlayerStateData1FacingDirection] + cp SPRITE_FACING_UP + ret nz + call EnableAutoTextBoxDrawing + ld a, 1 << BIT_NO_AUTO_TEXT_BOX + ld [wAutoTextBoxDrawingControl], a + tx_pre_jump PokemonCenterPCText + +PokemonCenterPCText:: + script_pokecenter_pc diff --git a/engine/events/hidden_events/pokemon_stuff.asm b/engine/events/hidden_events/pokemon_stuff.asm new file mode 100644 index 00000000..267a191a --- /dev/null +++ b/engine/events/hidden_events/pokemon_stuff.asm @@ -0,0 +1,3 @@ +PokemonStuffText:: + text_far _PokemonStuffText + text_end diff --git a/engine/events/hidden_events/reds_room.asm b/engine/events/hidden_events/reds_room.asm new file mode 100644 index 00000000..7b8d51a0 --- /dev/null +++ b/engine/events/hidden_events/reds_room.asm @@ -0,0 +1,14 @@ +PrintRedSNESText: + call EnableAutoTextBoxDrawing + tx_pre_jump RedBedroomSNESText + +RedBedroomSNESText:: + text_far _RedBedroomSNESText + text_end + +OpenRedsPC: + call EnableAutoTextBoxDrawing + tx_pre_jump RedBedroomPCText + +RedBedroomPCText:: + script_players_pc diff --git a/engine/events/hidden_events/route_15_binoculars.asm b/engine/events/hidden_events/route_15_binoculars.asm new file mode 100644 index 00000000..733ab73e --- /dev/null +++ b/engine/events/hidden_events/route_15_binoculars.asm @@ -0,0 +1,14 @@ +Route15GateLeftBinoculars: + ld a, [wSpritePlayerStateData1FacingDirection] + cp SPRITE_FACING_UP + ret nz + call EnableAutoTextBoxDrawing + tx_pre Route15UpstairsBinocularsText + ld a, ARTICUNO + ld [wCurPartySpecies], a + call PlayCry + jp DisplayMonFrontSpriteInBox + +Route15UpstairsBinocularsText:: + text_far _Route15UpstairsBinocularsText + text_end diff --git a/engine/events/hidden_events/safari_game.asm b/engine/events/hidden_events/safari_game.asm new file mode 100644 index 00000000..fc014ce0 --- /dev/null +++ b/engine/events/hidden_events/safari_game.asm @@ -0,0 +1,83 @@ +SafariZoneCheck:: + CheckEventHL EVENT_IN_SAFARI_ZONE ; if we are not in the Safari Zone, + jr z, SafariZoneGameStillGoing ; don't bother printing game over text + ld a, [wNumSafariBalls] + and a + jr z, SafariZoneGameOver + jr SafariZoneGameStillGoing + +SafariZoneCheckSteps:: +IF DEF(_DEBUG) + call DebugPressedOrHeldB + ret nz +ENDC + ld a, [wSafariSteps] + ld b, a + ld a, [wSafariSteps + 1] + ld c, a + or b + jr z, SafariZoneGameOver + dec bc + ld a, b + ld [wSafariSteps], a + ld a, c + ld [wSafariSteps + 1], a +SafariZoneGameStillGoing: + xor a + ld [wSafariZoneGameOver], a + ret + +SafariZoneGameOver: + call EnableAutoTextBoxDrawing + xor a + ld [wAudioFadeOutControl], a + dec a ; SFX_STOP_ALL_MUSIC + call PlaySound + ld c, BANK(SFX_Safari_Zone_PA) + ld a, SFX_SAFARI_ZONE_PA + call PlayMusic +.waitForMusicToPlay + ld a, [wChannelSoundIDs + CHAN5] + cp SFX_SAFARI_ZONE_PA + jr nz, .waitForMusicToPlay + ld a, TEXT_SAFARI_GAME_OVER + ldh [hTextID], a + call DisplayTextID + xor a + ld [wPlayerMovingDirection], a + ld a, SAFARI_ZONE_GATE + ldh [hWarpDestinationMap], a + ld a, $3 + ld [wDestinationWarpID], a + ld a, SCRIPT_SAFARIZONEGATE_LEAVING_SAFARI + ld [wSafariZoneGateCurScript], a + SetEvent EVENT_SAFARI_GAME_OVER + ld a, 1 + ld [wSafariZoneGameOver], a + ret + +PrintSafariGameOverText:: + xor a + ld [wJoyIgnore], a + ld hl, SafariGameOverText + jp PrintText + +SafariGameOverText: + text_asm + ld a, [wNumSafariBalls] + and a + jr z, .noMoreSafariBalls + ld hl, TimesUpText + call PrintText +.noMoreSafariBalls + ld hl, GameOverText + call PrintText + jp TextScriptEnd + +TimesUpText: + text_far _TimesUpText + text_end + +GameOverText: + text_far _GameOverText + text_end diff --git a/engine/events/hidden_events/school_blackboard.asm b/engine/events/hidden_events/school_blackboard.asm new file mode 100644 index 00000000..71e24ed0 --- /dev/null +++ b/engine/events/hidden_events/school_blackboard.asm @@ -0,0 +1,224 @@ +PrintBlackboardLinkCableText: + call EnableAutoTextBoxDrawing + ld a, $1 + ld [wDoNotWaitForButtonPressAfterDisplayingText], a + ld a, [wHiddenEventFunctionArgument] + call PrintPredefTextID + ret + +LinkCableHelp:: + text_asm + call SaveScreenTilesToBuffer1 + ld hl, LinkCableHelpText1 + call PrintText + xor a + ld [wMenuItemOffset], a ; not used + ld [wCurrentMenuItem], a + ld [wLastMenuItem], a + ld a, PAD_A | PAD_B + ld [wMenuWatchedKeys], a + ld a, 3 + ld [wMaxMenuItem], a + ld a, 2 + ld [wTopMenuItemY], a + ld a, 1 + ld [wTopMenuItemX], a +.linkHelpLoop + ld hl, wStatusFlags5 + set BIT_NO_TEXT_DELAY, [hl] + hlcoord 0, 0 + ld b, 8 + ld c, 13 + call TextBoxBorder + hlcoord 2, 2 + ld de, HowToLinkText + call PlaceString + ld hl, LinkCableHelpText2 + call PrintText + call HandleMenuInput + bit B_PAD_B, a + jr nz, .exit + ld a, [wCurrentMenuItem] + cp 3 ; pressed a on "STOP READING" + jr z, .exit + ld hl, wStatusFlags5 + res BIT_NO_TEXT_DELAY, [hl] + ld hl, LinkCableInfoTexts + add a + ld d, 0 + ld e, a + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + call PrintText + jp .linkHelpLoop +.exit + ld hl, wStatusFlags5 + res BIT_NO_TEXT_DELAY, [hl] + call LoadScreenTilesFromBuffer1 + jp TextScriptEnd + +LinkCableHelpText1: + text_far _LinkCableHelpText1 + text_end + +LinkCableHelpText2: + text_far _LinkCableHelpText2 + text_end + +HowToLinkText: + db "HOW TO LINK" + next "COLOSSEUM" + next "TRADE CENTER" + next "STOP READING@" + +LinkCableInfoTexts: + dw LinkCableInfoText1 + dw LinkCableInfoText2 + dw LinkCableInfoText3 + +LinkCableInfoText1: + text_far _LinkCableInfoText1 + text_end + +LinkCableInfoText2: + text_far _LinkCableInfoText2 + text_end + +LinkCableInfoText3: + text_far _LinkCableInfoText3 + text_end + +ViridianSchoolBlackboard:: + text_asm + call SaveScreenTilesToBuffer1 + ld hl, ViridianSchoolBlackboardText1 + call PrintText + xor a + ld [wMenuItemOffset], a + ld [wCurrentMenuItem], a + ld [wLastMenuItem], a + ld a, PAD_LEFT | PAD_RIGHT | PAD_A | PAD_B + ld [wMenuWatchedKeys], a + ld a, 2 + ld [wMaxMenuItem], a + ld a, 2 + ld [wTopMenuItemY], a + ld a, 1 + ld [wTopMenuItemX], a +.blackboardLoop + ld hl, wStatusFlags5 + set BIT_NO_TEXT_DELAY, [hl] + hlcoord 0, 0 + lb bc, 6, 10 + call TextBoxBorder + hlcoord 1, 2 + ld de, StatusAilmentText1 + call PlaceString + hlcoord 6, 2 + ld de, StatusAilmentText2 + call PlaceString + ld hl, ViridianSchoolBlackboardText2 + call PrintText + call HandleMenuInput ; pressing up and down is handled in here + bit B_PAD_B, a ; pressed b + jr nz, .exitBlackboard + bit B_PAD_RIGHT, a + jr z, .didNotPressRight + ; move cursor to right column + ld a, 2 + ld [wMaxMenuItem], a + ld a, 2 + ld [wTopMenuItemY], a + ld a, 6 + ld [wTopMenuItemX], a + ld a, 3 ; in the the right column, use an offset to prevent overlap + ld [wMenuItemOffset], a + jr .blackboardLoop +.didNotPressRight + bit B_PAD_LEFT, a + jr z, .didNotPressLeftOrRight + ; move cursor to left column + ld a, 2 + ld [wMaxMenuItem], a + ld a, 2 + ld [wTopMenuItemY], a + ld a, 1 + ld [wTopMenuItemX], a + xor a + ld [wMenuItemOffset], a + jr .blackboardLoop +.didNotPressLeftOrRight + ld a, [wCurrentMenuItem] + ld b, a + ld a, [wMenuItemOffset] + add b + cp 5 ; cursor is pointing to "QUIT" + jr z, .exitBlackboard + ; we must have pressed a on a status condition + ; so print the text + ld hl, wStatusFlags5 + res BIT_NO_TEXT_DELAY, [hl] + ld hl, ViridianBlackboardStatusPointers + add a + ld d, 0 + ld e, a + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + call PrintText + jp .blackboardLoop +.exitBlackboard + ld hl, wStatusFlags5 + res BIT_NO_TEXT_DELAY, [hl] + call LoadScreenTilesFromBuffer1 + jp TextScriptEnd + +ViridianSchoolBlackboardText1: + text_far _ViridianSchoolBlackboardText1 + text_end + +ViridianSchoolBlackboardText2: + text_far _ViridianSchoolBlackboardText2 + text_end + +StatusAilmentText1: + db " SLP" + next " PSN" + next " PAR@" + +StatusAilmentText2: + db " BRN" + next " FRZ" + next " QUIT@" + + db "@" ; unused + +ViridianBlackboardStatusPointers: + dw ViridianBlackboardSleepText + dw ViridianBlackboardPoisonText + dw ViridianBlackboardPrlzText + dw ViridianBlackboardBurnText + dw ViridianBlackboardFrozenText + +ViridianBlackboardSleepText: + text_far _ViridianBlackboardSleepText + text_end + +ViridianBlackboardPoisonText: + text_far _ViridianBlackboardPoisonText + text_end + +ViridianBlackboardPrlzText: + text_far _ViridianBlackboardPrlzText + text_end + +ViridianBlackboardBurnText: + text_far _ViridianBlackboardBurnText + text_end + +ViridianBlackboardFrozenText: + text_far _ViridianBlackboardFrozenText + text_end diff --git a/engine/events/hidden_events/school_notebooks.asm b/engine/events/hidden_events/school_notebooks.asm new file mode 100644 index 00000000..2387c089 --- /dev/null +++ b/engine/events/hidden_events/school_notebooks.asm @@ -0,0 +1,65 @@ +PrintNotebookText: + call EnableAutoTextBoxDrawing + ld a, $1 + ld [wDoNotWaitForButtonPressAfterDisplayingText], a + ld a, [wHiddenEventFunctionArgument] + jp PrintPredefTextID + +TMNotebook:: + text_far TMNotebookText + text_waitbutton + text_end + +ViridianSchoolNotebook:: + text_asm + ld hl, ViridianSchoolNotebookText1 + call PrintText + call TurnPageSchoolNotebook + jr nz, .doneReading + ld hl, ViridianSchoolNotebookText2 + call PrintText + call TurnPageSchoolNotebook + jr nz, .doneReading + ld hl, ViridianSchoolNotebookText3 + call PrintText + call TurnPageSchoolNotebook + jr nz, .doneReading + ld hl, ViridianSchoolNotebookText4 + call PrintText + ld hl, ViridianSchoolNotebookText5 + call PrintText +.doneReading + jp TextScriptEnd + +TurnPageSchoolNotebook: + ld hl, TurnPageText + call PrintText + call YesNoChoice + ld a, [wCurrentMenuItem] + and a + ret + +TurnPageText: + text_far _TurnPageText + text_end + +ViridianSchoolNotebookText5: + text_far _ViridianSchoolNotebookText5 + text_waitbutton + text_end + +ViridianSchoolNotebookText1: + text_far _ViridianSchoolNotebookText1 + text_end + +ViridianSchoolNotebookText2: + text_far _ViridianSchoolNotebookText2 + text_end + +ViridianSchoolNotebookText3: + text_far _ViridianSchoolNotebookText3 + text_end + +ViridianSchoolNotebookText4: + text_far _ViridianSchoolNotebookText4 + text_end diff --git a/engine/events/hidden_events/town_map.asm b/engine/events/hidden_events/town_map.asm new file mode 100644 index 00000000..11f7cbc7 --- /dev/null +++ b/engine/events/hidden_events/town_map.asm @@ -0,0 +1,22 @@ +TownMapText:: + text_far _TownMapText + text_promptbutton + text_asm + ld a, $1 + ld [wDoNotWaitForButtonPressAfterDisplayingText], a + ld hl, wStatusFlags5 + set BIT_NO_TEXT_DELAY, [hl] + call GBPalWhiteOutWithDelay3 + xor a + ldh [hWY], a + inc a + ldh [hAutoBGTransferEnabled], a + call LoadFontTilePatterns + farcall DisplayTownMap + ld hl, wStatusFlags5 + res BIT_NO_TEXT_DELAY, [hl] + ld de, TextScriptEnd + push de + ldh a, [hLoadedROMBank] + push af + jp CloseTextDisplay diff --git a/engine/events/hidden_events/vermilion_gym_trash.asm b/engine/events/hidden_events/vermilion_gym_trash.asm new file mode 100644 index 00000000..40e200d6 --- /dev/null +++ b/engine/events/hidden_events/vermilion_gym_trash.asm @@ -0,0 +1,169 @@ +PrintTrashText: + call EnableAutoTextBoxDrawing + tx_pre_jump VermilionGymTrashText + +VermilionGymTrashText:: + text_far _VermilionGymTrashText + text_end + +GymTrashScript: + call EnableAutoTextBoxDrawing + ld a, [wHiddenEventFunctionArgument] + ld [wGymTrashCanIndex], a + +; Don't do the trash can puzzle if it's already been done. + CheckEvent EVENT_2ND_LOCK_OPENED + jr z, .ok + + tx_pre_jump VermilionGymTrashText + +.ok + CheckEventReuseA EVENT_1ST_LOCK_OPENED + jr nz, .trySecondLock + + ld a, [wFirstLockTrashCanIndex] + ld b, a + ld a, [wGymTrashCanIndex] + cp b + jr z, .openFirstLock + + tx_pre_id VermilionGymTrashText + jr .done + +.openFirstLock +; Next can is trying for the second switch. + SetEvent EVENT_1ST_LOCK_OPENED + + ld hl, GymTrashCans + ld a, [wGymTrashCanIndex] + ; * 5 + ld b, a + add a + add a + add b + + ld d, 0 + ld e, a + add hl, de + ld a, [hli] + +; Bug: This code should calculate a value in the range [0, 3], +; but if the mask and random number don't have any 1 bits in common, then +; the result of the AND will be 0. When 1 is subtracted from that, the value +; will become $ff. This will result in 255 being added to hl, which will cause +; hl to point to one of the zero bytes that pad the end of the ROM bank. +; Trash can 0 was intended to be able to have the second lock only when the +; first lock was in trash can 1 or 3. However, due to this bug, trash can 0 can +; have the second lock regardless of which trash can had the first lock. + + ldh [hGymTrashCanRandNumMask], a + push hl + call Random + swap a + ld b, a + ldh a, [hGymTrashCanRandNumMask] + and b + dec a + pop hl + + ld d, 0 + ld e, a + add hl, de + ld a, [hl] + and $f + ld [wSecondLockTrashCanIndex], a + + tx_pre_id VermilionGymTrashSuccessText1 + jr .done + +.trySecondLock + ld a, [wSecondLockTrashCanIndex] + ld b, a + ld a, [wGymTrashCanIndex] + cp b + jr z, .openSecondLock + +; Reset the cans. + ResetEvent EVENT_1ST_LOCK_OPENED + call Random + + and $e + ld [wFirstLockTrashCanIndex], a + + tx_pre_id VermilionGymTrashFailText + jr .done + +.openSecondLock +; Completed the trash can puzzle. + SetEvent EVENT_2ND_LOCK_OPENED + ld hl, wCurrentMapScriptFlags + set BIT_CUR_MAP_LOADED_2, [hl] + + tx_pre_id VermilionGymTrashSuccessText3 + +.done + jp PrintPredefTextID + +GymTrashCans: +; byte 0: mask for random number +; bytes 1-4: indices of the trash cans that can have the second lock +; (but see the comment above explaining a bug regarding this) +; Note that the mask is simply the number of valid trash can indices that +; follow. The remaining bytes are filled with 0 to pad the length of each entry +; to 5 bytes. + db 2, 1, 3, 0, 0 ; 0 + db 3, 0, 2, 4, 0 ; 1 + db 2, 1, 5, 0, 0 ; 2 + db 3, 0, 4, 6, 0 ; 3 + db 4, 1, 3, 5, 7 ; 4 + db 3, 2, 4, 8, 0 ; 5 + db 3, 3, 7, 9, 0 ; 6 + db 4, 4, 6, 8, 10 ; 7 + db 3, 5, 7, 11, 0 ; 8 + db 3, 6, 10, 12, 0 ; 9 + db 4, 7, 9, 11, 13 ; 10 + db 3, 8, 10, 14, 0 ; 11 + db 2, 9, 13, 0, 0 ; 12 + db 3, 10, 12, 14, 0 ; 13 + db 2, 11, 13, 0, 0 ; 14 + +VermilionGymTrashSuccessText1:: + text_far _VermilionGymTrashSuccessText1 + text_asm + call WaitForSoundToFinish + ld a, SFX_SWITCH + call PlaySound + call WaitForSoundToFinish + jp TextScriptEnd + +; unused +VermilionGymTrashSuccessText2:: + text_far _VermilionGymTrashSuccessText2 + text_end + +; unused +VermilionGymTrashSuccessPlaySfx: + text_asm + call WaitForSoundToFinish + ld a, SFX_SWITCH + call PlaySound + call WaitForSoundToFinish + jp TextScriptEnd + +VermilionGymTrashSuccessText3:: + text_far _VermilionGymTrashSuccessText3 + text_asm + call WaitForSoundToFinish + ld a, SFX_GO_INSIDE + call PlaySound + call WaitForSoundToFinish + jp TextScriptEnd + +VermilionGymTrashFailText:: + text_far _VermilionGymTrashFailText + text_asm + call WaitForSoundToFinish + ld a, SFX_DENIED + call PlaySound + call WaitForSoundToFinish + jp TextScriptEnd diff --git a/engine/events/hidden_items.asm b/engine/events/hidden_items.asm index e42f60f9..065c2d5e 100644 --- a/engine/events/hidden_items.asm +++ b/engine/events/hidden_items.asm @@ -13,7 +13,7 @@ HiddenItems: call EnableAutoTextBoxDrawing ld a, 1 ld [wDoNotWaitForButtonPressAfterDisplayingText], a - ld a, [wHiddenObjectFunctionArgument] ; item ID + ld a, [wHiddenEventFunctionArgument] ; item ID ld [wNamedObjectIndex], a call GetItemName tx_pre_jump FoundHiddenItemText @@ -23,7 +23,7 @@ INCLUDE "data/events/hidden_item_coords.asm" FoundHiddenItemText:: text_far _FoundHiddenItemText text_asm - ld a, [wHiddenObjectFunctionArgument] ; item ID + ld a, [wHiddenEventFunctionArgument] ; item ID ld b, a ld c, 1 call GiveItem @@ -70,7 +70,7 @@ HiddenCoins: ldh [hUnusedCoinsByte], a ldh [hCoins], a ldh [hCoins + 1], a - ld a, [wHiddenObjectFunctionArgument] + ld a, [wHiddenEventFunctionArgument] sub COIN cp 10 jr z, .bcd10 @@ -132,9 +132,9 @@ DroppedHiddenCoinsText:: text_end FindHiddenItemOrCoinsIndex: - ld a, [wHiddenObjectY] + ld a, [wHiddenEventY] ld d, a - ld a, [wHiddenObjectX] + ld a, [wHiddenEventX] ld e, a ld a, [wCurMap] ld b, a diff --git a/engine/events/hidden_objects/bench_guys.asm b/engine/events/hidden_objects/bench_guys.asm deleted file mode 100644 index e5a2a724..00000000 --- a/engine/events/hidden_objects/bench_guys.asm +++ /dev/null @@ -1,107 +0,0 @@ -PrintBenchGuyText: - call EnableAutoTextBoxDrawing - ld hl, BenchGuyTextPointers - ld a, [wCurMap] - ld b, a -.loop - ld a, [hli] - cp -1 - ret z - cp b - jr z, .match - inc hl - inc hl - jr .loop -.match - ld a, [hli] - ld b, a - ld a, [wSpritePlayerStateData1FacingDirection] - cp b - - ; bug: an 'inc hl' instruction is needed before looping back. When trying to - ; talk to a bench guy from above, this Sprite Facing test will fail, and the - ; next loop iteration will be misaligned within BenchGuyTextPointers table. - ; As a result, the routine will miss the terminator byte, and continue to - ; process data beyond the table boundary. - ; It seems that it will only return after starting to read data from VRAM - ; (According to Pan Docs, during PPU mode 3, reads return garbage value, - ; usually $FF). - jr nz, .loop ; player isn't facing the bench guy - ld a, [hl] - jp PrintPredefTextID - -INCLUDE "data/events/bench_guys.asm" - -ViridianCityPokecenterBenchGuyText:: - text_far _ViridianCityPokecenterGuyText - text_end - -PewterCityPokecenterBenchGuyText:: - text_far _PewterCityPokecenterGuyText - text_end - -CeruleanCityPokecenterBenchGuyText:: - text_far _CeruleanPokecenterGuyText - text_end - -LavenderCityPokecenterBenchGuyText:: - text_far _LavenderPokecenterGuyText - text_end - -MtMoonPokecenterBenchGuyText:: - text_far _MtMoonPokecenterBenchGuyText - text_end - -RockTunnelPokecenterBenchGuyText:: - text_far _RockTunnelPokecenterGuyText - text_end - -UnusedBenchGuyText1:: - text_far _UnusedBenchGuyText1 - text_end - -UnusedBenchGuyText2:: - text_far _UnusedBenchGuyText2 - text_end - -UnusedBenchGuyText3:: - text_far _UnusedBenchGuyText3 - text_end - -VermilionCityPokecenterBenchGuyText:: - text_far _VermilionPokecenterGuyText - text_end - -CeladonCityPokecenterBenchGuyText:: - text_far _CeladonCityPokecenterGuyText - text_end - -FuchsiaCityPokecenterBenchGuyText:: - text_far _FuchsiaCityPokecenterGuyText - text_end - -CinnabarIslandPokecenterBenchGuyText:: - text_far _CinnabarPokecenterGuyText - text_end - -SaffronCityPokecenterBenchGuyText:: - text_asm - CheckEvent EVENT_BEAT_SILPH_CO_GIOVANNI - ld hl, SaffronCityPokecenterBenchGuyText2 - jr nz, .printText - ld hl, SaffronCityPokecenterBenchGuyText1 -.printText - call PrintText - jp TextScriptEnd - -SaffronCityPokecenterBenchGuyText1: - text_far _SaffronCityPokecenterGuyText1 - text_end - -SaffronCityPokecenterBenchGuyText2: - text_far _SaffronCityPokecenterGuyText2 - text_end - -CeladonCityHotelText:: - text_far _CeladonCityHotelText - text_end diff --git a/engine/events/hidden_objects/bills_house_pc.asm b/engine/events/hidden_objects/bills_house_pc.asm deleted file mode 100644 index 3972e20c..00000000 --- a/engine/events/hidden_objects/bills_house_pc.asm +++ /dev/null @@ -1,134 +0,0 @@ -BillsHousePC: - call EnableAutoTextBoxDrawing - ld a, [wSpritePlayerStateData1FacingDirection] - cp SPRITE_FACING_UP - ret nz - CheckEvent EVENT_LEFT_BILLS_HOUSE_AFTER_HELPING - jr nz, .displayBillsHousePokemonList - CheckEventReuseA EVENT_USED_CELL_SEPARATOR_ON_BILL - jr nz, .displayBillsHouseMonitorText - CheckEventReuseA EVENT_BILL_SAID_USE_CELL_SEPARATOR - jr nz, .doCellSeparator -.displayBillsHouseMonitorText - tx_pre_jump BillsHouseMonitorText -.doCellSeparator - ld a, $1 - ld [wDoNotWaitForButtonPressAfterDisplayingText], a - tx_pre BillsHouseInitiatedText - ld c, 32 - call DelayFrames - ld a, SFX_TINK - call PlaySound - call WaitForSoundToFinish - ld c, 80 - call DelayFrames - ld a, SFX_SHRINK - call PlaySound - call WaitForSoundToFinish - ld c, 48 - call DelayFrames - ld a, SFX_TINK - call PlaySound - call WaitForSoundToFinish - ld c, 32 - call DelayFrames - ld a, SFX_GET_ITEM_1 - call PlaySound - call WaitForSoundToFinish - call PlayDefaultMusic - SetEvent EVENT_USED_CELL_SEPARATOR_ON_BILL - ret -.displayBillsHousePokemonList - ld a, $1 - ld [wDoNotWaitForButtonPressAfterDisplayingText], a - tx_pre BillsHousePokemonList - ret - -BillsHouseMonitorText:: - text_far _BillsHouseMonitorText - text_end - -BillsHouseInitiatedText:: - text_far _BillsHouseInitiatedText - text_promptbutton - text_asm - ld a, SFX_STOP_ALL_MUSIC - ld [wNewSoundID], a - call PlaySound - ld c, 16 - call DelayFrames - ld a, SFX_SWITCH - call PlaySound - call WaitForSoundToFinish - ld c, 60 - call DelayFrames - jp TextScriptEnd - -BillsHousePokemonList:: - text_asm - call SaveScreenTilesToBuffer1 - ld hl, BillsHousePokemonListText1 - call PrintText - xor a - ld [wMenuItemOffset], a ; not used - ld [wCurrentMenuItem], a - ld [wLastMenuItem], a - ld a, PAD_A | PAD_B - ld [wMenuWatchedKeys], a - ld a, 4 - ld [wMaxMenuItem], a - ld a, 2 - ld [wTopMenuItemY], a - ld a, 1 - ld [wTopMenuItemX], a -.billsPokemonLoop - ld hl, wStatusFlags5 - set BIT_NO_TEXT_DELAY, [hl] - hlcoord 0, 0 - ld b, 10 - ld c, 9 - call TextBoxBorder - hlcoord 2, 2 - ld de, BillsMonListText - call PlaceString - ld hl, BillsHousePokemonListText2 - call PrintText - call SaveScreenTilesToBuffer2 - call HandleMenuInput - bit B_PAD_B, a - jr nz, .cancel - ld a, [wCurrentMenuItem] - add EEVEE - cp EEVEE - jr z, .displayPokedex - cp FLAREON - jr z, .displayPokedex - cp JOLTEON - jr z, .displayPokedex - cp VAPOREON - jr z, .displayPokedex - jr .cancel -.displayPokedex - call DisplayPokedex - call LoadScreenTilesFromBuffer2 - jr .billsPokemonLoop -.cancel - ld hl, wStatusFlags5 - res BIT_NO_TEXT_DELAY, [hl] - call LoadScreenTilesFromBuffer2 - jp TextScriptEnd - -BillsHousePokemonListText1: - text_far _BillsHousePokemonListText1 - text_end - -BillsMonListText: - db "EEVEE" - next "FLAREON" - next "JOLTEON" - next "VAPOREON" - next "CANCEL@" - -BillsHousePokemonListText2: - text_far _BillsHousePokemonListText2 - text_end diff --git a/engine/events/hidden_objects/blues_room.asm b/engine/events/hidden_objects/blues_room.asm deleted file mode 100644 index bcbad556..00000000 --- a/engine/events/hidden_objects/blues_room.asm +++ /dev/null @@ -1,13 +0,0 @@ - - ret ; unused - -UnusedPredefText:: - db "@" - -PrintBookcaseText: - call EnableAutoTextBoxDrawing - tx_pre_jump BookcaseText - -BookcaseText:: - text_far _BookcaseText - text_end diff --git a/engine/events/hidden_objects/book_or_sculpture.asm b/engine/events/hidden_objects/book_or_sculpture.asm deleted file mode 100644 index e04f4047..00000000 --- a/engine/events/hidden_objects/book_or_sculpture.asm +++ /dev/null @@ -1,21 +0,0 @@ -BookOrSculptureText:: - text_asm - ld hl, PokemonBooksText - ld a, [wCurMapTileset] - cp MANSION ; Celadon Mansion tileset - jr nz, .ok - lda_coord 8, 6 - cp $38 - jr nz, .ok - ld hl, DiglettSculptureText -.ok - call PrintText - jp TextScriptEnd - -PokemonBooksText: - text_far _PokemonBooksText - text_end - -DiglettSculptureText: - text_far _DiglettSculptureText - text_end diff --git a/engine/events/hidden_objects/bookshelves.asm b/engine/events/hidden_objects/bookshelves.asm deleted file mode 100644 index 813cfc49..00000000 --- a/engine/events/hidden_objects/bookshelves.asm +++ /dev/null @@ -1,39 +0,0 @@ -; prints text for bookshelves in buildings without sign events -PrintBookshelfText:: - ld a, [wSpritePlayerStateData1FacingDirection] - cp SPRITE_FACING_UP - jr nz, .noMatch -; facing up - ld a, [wCurMapTileset] - ld b, a - lda_coord 8, 7 - ld c, a - ld hl, BookshelfTileIDs -.loop - ld a, [hli] - cp $ff - jr z, .noMatch - cp b - jr nz, .nextBookshelfEntry1 - ld a, [hli] - cp c - jr nz, .nextBookshelfEntry2 - ld a, [hl] - push af - call EnableAutoTextBoxDrawing - pop af - call PrintPredefTextID - xor a - ldh [hInteractedWithBookshelf], a - ret -.nextBookshelfEntry1 - inc hl -.nextBookshelfEntry2 - inc hl - jr .loop -.noMatch - ld a, $ff - ldh [hInteractedWithBookshelf], a - farjp PrintCardKeyText - -INCLUDE "data/tilesets/bookshelf_tile_ids.asm" diff --git a/engine/events/hidden_objects/cinnabar_gym_quiz.asm b/engine/events/hidden_objects/cinnabar_gym_quiz.asm deleted file mode 100644 index a14bd198..00000000 --- a/engine/events/hidden_objects/cinnabar_gym_quiz.asm +++ /dev/null @@ -1,200 +0,0 @@ -PrintCinnabarQuiz: - ld a, [wSpritePlayerStateData1FacingDirection] - cp SPRITE_FACING_UP - ret nz - call EnableAutoTextBoxDrawing - tx_pre_jump CinnabarGymQuiz - -CinnabarGymQuiz:: - text_asm - xor a - ld [wOpponentAfterWrongAnswer], a - ld a, [wHiddenObjectFunctionArgument] - push af - and $f - ldh [hGymGateIndex], a - pop af - and $f0 - swap a - ldh [hGymGateAnswer], a - ld hl, CinnabarGymQuizIntroText - call PrintText - ldh a, [hGymGateIndex] - dec a - add a - ld d, 0 - ld e, a - ld hl, CinnabarQuizQuestions - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - call PrintText - ld a, 1 - ld [wDoNotWaitForButtonPressAfterDisplayingText], a - call CinnabarGymQuiz_AskQuestion - jp TextScriptEnd - -CinnabarGymQuizIntroText: - text_far _CinnabarGymQuizIntroText - text_end - -CinnabarQuizQuestions: - dw CinnabarQuizQuestionsText1 - dw CinnabarQuizQuestionsText2 - dw CinnabarQuizQuestionsText3 - dw CinnabarQuizQuestionsText4 - dw CinnabarQuizQuestionsText5 - dw CinnabarQuizQuestionsText6 - -CinnabarQuizQuestionsText1: - text_far _CinnabarQuizQuestionsText1 - text_end - -CinnabarQuizQuestionsText2: - text_far _CinnabarQuizQuestionsText2 - text_end - -CinnabarQuizQuestionsText3: - text_far _CinnabarQuizQuestionsText3 - text_end - -CinnabarQuizQuestionsText4: - text_far _CinnabarQuizQuestionsText4 - text_end - -CinnabarQuizQuestionsText5: - text_far _CinnabarQuizQuestionsText5 - text_end - -CinnabarQuizQuestionsText6: - text_far _CinnabarQuizQuestionsText6 - text_end - -CinnabarGymGateFlagAction: - EventFlagAddress hl, EVENT_CINNABAR_GYM_GATE0_UNLOCKED - predef_jump FlagActionPredef - -CinnabarGymQuiz_AskQuestion: - call YesNoChoice - ldh a, [hGymGateAnswer] - ld c, a - ld a, [wCurrentMenuItem] - cp c - jr nz, .wrongAnswer - ld hl, wCurrentMapScriptFlags - set BIT_CUR_MAP_LOADED_1, [hl] - ldh a, [hGymGateIndex] - ldh [hBackupGymGateIndex], a - ld hl, CinnabarGymQuizCorrectText - call PrintText - ldh a, [hBackupGymGateIndex] - AdjustEventBit EVENT_CINNABAR_GYM_GATE0_UNLOCKED, 0 - ld c, a - ld b, FLAG_SET - call CinnabarGymGateFlagAction - jp UpdateCinnabarGymGateTileBlocks_ -.wrongAnswer - call WaitForSoundToFinish - ld a, SFX_DENIED - call PlaySound - call WaitForSoundToFinish - ld hl, CinnabarGymQuizIncorrectText - call PrintText - ldh a, [hGymGateIndex] - add $2 - AdjustEventBit EVENT_BEAT_CINNABAR_GYM_TRAINER_0, 2 - ld c, a - ld b, FLAG_TEST - EventFlagAddress hl, EVENT_BEAT_CINNABAR_GYM_TRAINER_0 - predef FlagActionPredef - ld a, c - and a - ret nz - ldh a, [hGymGateIndex] - add $2 - ld [wOpponentAfterWrongAnswer], a - ret - -CinnabarGymQuizCorrectText: - sound_get_item_1 - text_far _CinnabarGymQuizCorrectText - text_promptbutton - text_asm - - ldh a, [hBackupGymGateIndex] - AdjustEventBit EVENT_CINNABAR_GYM_GATE0_UNLOCKED, 0 - ld c, a - ld b, FLAG_TEST - call CinnabarGymGateFlagAction - ld a, c - and a - jp nz, TextScriptEnd - call WaitForSoundToFinish - ld a, SFX_GO_INSIDE - call PlaySound - call WaitForSoundToFinish - jp TextScriptEnd - -CinnabarGymQuizIncorrectText: - text_far _CinnabarGymQuizIncorrectText - text_end - -UpdateCinnabarGymGateTileBlocks_:: -; Update the overworld map with open floor blocks or locked gate blocks -; depending on event flags. - ld a, 6 - ldh [hGymGateIndex], a -.loop - ldh a, [hGymGateIndex] - dec a - add a - add a - ld d, 0 - ld e, a - ld hl, CinnabarGymGateCoords - add hl, de - ld a, [hli] - ld b, [hl] - ld c, a - inc hl - ld a, [hl] - ld [wGymGateTileBlock], a - push bc - ldh a, [hGymGateIndex] - ldh [hBackupGymGateIndex], a - AdjustEventBit EVENT_CINNABAR_GYM_GATE0_UNLOCKED, 0 - ld c, a - ld b, FLAG_TEST - call CinnabarGymGateFlagAction - ld a, c - and a - jr nz, .unlocked - ld a, [wGymGateTileBlock] - jr .next -.unlocked - ld a, $e -.next - pop bc - ld [wNewTileBlockID], a - predef ReplaceTileBlock - ld hl, hGymGateIndex - dec [hl] - jr nz, .loop - ret - -MACRO gym_gate_coord - db \1, \2, \3, 0 -ENDM - -DEF HORIZONTAL_GATE_BLOCK EQU $54 -DEF VERTICAL_GATE_BLOCK EQU $5f - -CinnabarGymGateCoords: - ; x coord, y coord, block id - gym_gate_coord 9, 3, HORIZONTAL_GATE_BLOCK - gym_gate_coord 6, 3, HORIZONTAL_GATE_BLOCK - gym_gate_coord 6, 6, HORIZONTAL_GATE_BLOCK - gym_gate_coord 3, 8, VERTICAL_GATE_BLOCK - gym_gate_coord 2, 6, HORIZONTAL_GATE_BLOCK - gym_gate_coord 2, 3, HORIZONTAL_GATE_BLOCK diff --git a/engine/events/hidden_objects/elevator.asm b/engine/events/hidden_objects/elevator.asm deleted file mode 100644 index ab0f731f..00000000 --- a/engine/events/hidden_objects/elevator.asm +++ /dev/null @@ -1,3 +0,0 @@ -ElevatorText:: - text_far _ElevatorText - text_end diff --git a/engine/events/hidden_objects/fighting_dojo.asm b/engine/events/hidden_objects/fighting_dojo.asm deleted file mode 100644 index b4f89985..00000000 --- a/engine/events/hidden_objects/fighting_dojo.asm +++ /dev/null @@ -1,23 +0,0 @@ -PrintFightingDojoText2: - call EnableAutoTextBoxDrawing - tx_pre_jump EnemiesOnEverySideText - -EnemiesOnEverySideText:: - text_far _EnemiesOnEverySideText - text_end - -PrintFightingDojoText3: - call EnableAutoTextBoxDrawing - tx_pre_jump WhatGoesAroundComesAroundText - -WhatGoesAroundComesAroundText:: - text_far _WhatGoesAroundComesAroundText - text_end - -PrintFightingDojoText: - call EnableAutoTextBoxDrawing - tx_pre_jump FightingDojoText - -FightingDojoText:: - text_far _FightingDojoText - text_end diff --git a/engine/events/hidden_objects/gym_statues.asm b/engine/events/hidden_objects/gym_statues.asm deleted file mode 100644 index 1c7eb970..00000000 --- a/engine/events/hidden_objects/gym_statues.asm +++ /dev/null @@ -1,39 +0,0 @@ -GymStatues: -; if in a gym and have the corresponding badge, a = GymStatueText2_id and jp PrintPredefTextID -; if in a gym and don't have the corresponding badge, a = GymStatueText1_id and jp PrintPredefTextID -; else ret - call EnableAutoTextBoxDrawing - ld a, [wSpritePlayerStateData1FacingDirection] - cp SPRITE_FACING_UP - ret nz - ld hl, MapBadgeFlags - ld a, [wCurMap] - ld b, a -.loop - ld a, [hli] - cp $ff - ret z - cp b - jr z, .match - inc hl - jr .loop -.match - ld b, [hl] - ld a, [wBeatGymFlags] - and b - cp b - tx_pre_id GymStatueText2 - jr z, .haveBadge - tx_pre_id GymStatueText1 -.haveBadge - jp PrintPredefTextID - -INCLUDE "data/maps/badge_maps.asm" - -GymStatueText1:: - text_far _GymStatueText1 - text_end - -GymStatueText2:: - text_far _GymStatueText2 - text_end diff --git a/engine/events/hidden_objects/indigo_plateau_hq.asm b/engine/events/hidden_objects/indigo_plateau_hq.asm deleted file mode 100644 index e8fd0220..00000000 --- a/engine/events/hidden_objects/indigo_plateau_hq.asm +++ /dev/null @@ -1,10 +0,0 @@ -PrintIndigoPlateauHQText: - ld a, [wSpritePlayerStateData1FacingDirection] - cp SPRITE_FACING_UP - ret nz - call EnableAutoTextBoxDrawing - tx_pre_jump IndigoPlateauHQText - -IndigoPlateauHQText:: - text_far _IndigoPlateauHQText - text_end diff --git a/engine/events/hidden_objects/indigo_plateau_statues.asm b/engine/events/hidden_objects/indigo_plateau_statues.asm deleted file mode 100644 index f78a5a72..00000000 --- a/engine/events/hidden_objects/indigo_plateau_statues.asm +++ /dev/null @@ -1,24 +0,0 @@ -IndigoPlateauStatues:: - text_asm - ld hl, IndigoPlateauStatuesText1 - call PrintText - ld a, [wXCoord] - bit 0, a ; even or odd? - ld hl, IndigoPlateauStatuesText2 - jr nz, .ok - ld hl, IndigoPlateauStatuesText3 -.ok - call PrintText - jp TextScriptEnd - -IndigoPlateauStatuesText1: - text_far _IndigoPlateauStatuesText1 - text_end - -IndigoPlateauStatuesText2: - text_far _IndigoPlateauStatuesText2 - text_end - -IndigoPlateauStatuesText3: - text_far _IndigoPlateauStatuesText3 - text_end diff --git a/engine/events/hidden_objects/magazines.asm b/engine/events/hidden_objects/magazines.asm deleted file mode 100644 index b58636ff..00000000 --- a/engine/events/hidden_objects/magazines.asm +++ /dev/null @@ -1,8 +0,0 @@ -PrintMagazinesText: - call EnableAutoTextBoxDrawing - tx_pre MagazinesText - ret - -MagazinesText:: - text_far _MagazinesText - text_end diff --git a/engine/events/hidden_objects/museum_fossils.asm b/engine/events/hidden_objects/museum_fossils.asm deleted file mode 100644 index df74293f..00000000 --- a/engine/events/hidden_objects/museum_fossils.asm +++ /dev/null @@ -1,51 +0,0 @@ -AerodactylFossil: - ld a, FOSSIL_AERODACTYL - ld [wCurPartySpecies], a - call DisplayMonFrontSpriteInBox - call EnableAutoTextBoxDrawing - tx_pre AerodactylFossilText - ret - -AerodactylFossilText:: - text_far _AerodactylFossilText - text_end - -KabutopsFossil: - ld a, FOSSIL_KABUTOPS - ld [wCurPartySpecies], a - call DisplayMonFrontSpriteInBox - call EnableAutoTextBoxDrawing - tx_pre KabutopsFossilText - ret - -KabutopsFossilText:: - text_far _KabutopsFossilText - text_end - -DisplayMonFrontSpriteInBox: -; Displays a pokemon's front sprite in a pop-up window. - ld a, 1 - ldh [hAutoBGTransferEnabled], a - call Delay3 - xor a - ldh [hWY], a - call SaveScreenTilesToBuffer1 - ld a, MON_SPRITE_POPUP - ld [wTextBoxID], a - call DisplayTextBoxID - call UpdateSprites - ld a, [wCurPartySpecies] - ld [wCurSpecies], a - call GetMonHeader - ld de, vChars1 tile $31 - call LoadMonFrontSprite - ld a, $80 - ldh [hStartTileID], a - hlcoord 10, 11 - predef AnimateSendingOutMon - call WaitForTextScrollButtonPress - call LoadScreenTilesFromBuffer1 - call Delay3 - ld a, $90 - ldh [hWY], a - ret diff --git a/engine/events/hidden_objects/new_bike.asm b/engine/events/hidden_objects/new_bike.asm deleted file mode 100644 index 5bce5937..00000000 --- a/engine/events/hidden_objects/new_bike.asm +++ /dev/null @@ -1,7 +0,0 @@ -PrintNewBikeText: - call EnableAutoTextBoxDrawing - tx_pre_jump NewBicycleText - -NewBicycleText:: - text_far _NewBicycleText - text_end diff --git a/engine/events/hidden_objects/oaks_lab_email.asm b/engine/events/hidden_objects/oaks_lab_email.asm deleted file mode 100644 index b66babe0..00000000 --- a/engine/events/hidden_objects/oaks_lab_email.asm +++ /dev/null @@ -1,10 +0,0 @@ -DisplayOakLabEmailText: - ld a, [wSpritePlayerStateData1FacingDirection] - cp SPRITE_FACING_UP - ret nz - call EnableAutoTextBoxDrawing - tx_pre_jump OakLabEmailText - -OakLabEmailText:: - text_far _OakLabEmailText - text_end diff --git a/engine/events/hidden_objects/oaks_lab_posters.asm b/engine/events/hidden_objects/oaks_lab_posters.asm deleted file mode 100644 index 502cf951..00000000 --- a/engine/events/hidden_objects/oaks_lab_posters.asm +++ /dev/null @@ -1,29 +0,0 @@ -DisplayOakLabLeftPoster: - call EnableAutoTextBoxDrawing - tx_pre_jump PushStartText - -PushStartText:: - text_far _PushStartText - text_end - -DisplayOakLabRightPoster: - call EnableAutoTextBoxDrawing - ld hl, wPokedexOwned - ld b, wPokedexOwnedEnd - wPokedexOwned - call CountSetBits - ld a, [wNumSetBits] - cp 2 - tx_pre_id SaveOptionText - jr c, .ownLessThanTwo - ; own two or more mon - tx_pre_id StrengthsAndWeaknessesText -.ownLessThanTwo - jp PrintPredefTextID - -SaveOptionText:: - text_far _SaveOptionText - text_end - -StrengthsAndWeaknessesText:: - text_far _StrengthsAndWeaknessesText - text_end diff --git a/engine/events/hidden_objects/pokecenter_pc.asm b/engine/events/hidden_objects/pokecenter_pc.asm deleted file mode 100644 index 59867d1a..00000000 --- a/engine/events/hidden_objects/pokecenter_pc.asm +++ /dev/null @@ -1,11 +0,0 @@ -OpenPokemonCenterPC: - ld a, [wSpritePlayerStateData1FacingDirection] - cp SPRITE_FACING_UP - ret nz - call EnableAutoTextBoxDrawing - ld a, 1 << BIT_NO_AUTO_TEXT_BOX - ld [wAutoTextBoxDrawingControl], a - tx_pre_jump PokemonCenterPCText - -PokemonCenterPCText:: - script_pokecenter_pc diff --git a/engine/events/hidden_objects/pokemon_stuff.asm b/engine/events/hidden_objects/pokemon_stuff.asm deleted file mode 100644 index 267a191a..00000000 --- a/engine/events/hidden_objects/pokemon_stuff.asm +++ /dev/null @@ -1,3 +0,0 @@ -PokemonStuffText:: - text_far _PokemonStuffText - text_end diff --git a/engine/events/hidden_objects/reds_room.asm b/engine/events/hidden_objects/reds_room.asm deleted file mode 100644 index 7b8d51a0..00000000 --- a/engine/events/hidden_objects/reds_room.asm +++ /dev/null @@ -1,14 +0,0 @@ -PrintRedSNESText: - call EnableAutoTextBoxDrawing - tx_pre_jump RedBedroomSNESText - -RedBedroomSNESText:: - text_far _RedBedroomSNESText - text_end - -OpenRedsPC: - call EnableAutoTextBoxDrawing - tx_pre_jump RedBedroomPCText - -RedBedroomPCText:: - script_players_pc diff --git a/engine/events/hidden_objects/route_15_binoculars.asm b/engine/events/hidden_objects/route_15_binoculars.asm deleted file mode 100644 index 733ab73e..00000000 --- a/engine/events/hidden_objects/route_15_binoculars.asm +++ /dev/null @@ -1,14 +0,0 @@ -Route15GateLeftBinoculars: - ld a, [wSpritePlayerStateData1FacingDirection] - cp SPRITE_FACING_UP - ret nz - call EnableAutoTextBoxDrawing - tx_pre Route15UpstairsBinocularsText - ld a, ARTICUNO - ld [wCurPartySpecies], a - call PlayCry - jp DisplayMonFrontSpriteInBox - -Route15UpstairsBinocularsText:: - text_far _Route15UpstairsBinocularsText - text_end diff --git a/engine/events/hidden_objects/safari_game.asm b/engine/events/hidden_objects/safari_game.asm deleted file mode 100644 index fc014ce0..00000000 --- a/engine/events/hidden_objects/safari_game.asm +++ /dev/null @@ -1,83 +0,0 @@ -SafariZoneCheck:: - CheckEventHL EVENT_IN_SAFARI_ZONE ; if we are not in the Safari Zone, - jr z, SafariZoneGameStillGoing ; don't bother printing game over text - ld a, [wNumSafariBalls] - and a - jr z, SafariZoneGameOver - jr SafariZoneGameStillGoing - -SafariZoneCheckSteps:: -IF DEF(_DEBUG) - call DebugPressedOrHeldB - ret nz -ENDC - ld a, [wSafariSteps] - ld b, a - ld a, [wSafariSteps + 1] - ld c, a - or b - jr z, SafariZoneGameOver - dec bc - ld a, b - ld [wSafariSteps], a - ld a, c - ld [wSafariSteps + 1], a -SafariZoneGameStillGoing: - xor a - ld [wSafariZoneGameOver], a - ret - -SafariZoneGameOver: - call EnableAutoTextBoxDrawing - xor a - ld [wAudioFadeOutControl], a - dec a ; SFX_STOP_ALL_MUSIC - call PlaySound - ld c, BANK(SFX_Safari_Zone_PA) - ld a, SFX_SAFARI_ZONE_PA - call PlayMusic -.waitForMusicToPlay - ld a, [wChannelSoundIDs + CHAN5] - cp SFX_SAFARI_ZONE_PA - jr nz, .waitForMusicToPlay - ld a, TEXT_SAFARI_GAME_OVER - ldh [hTextID], a - call DisplayTextID - xor a - ld [wPlayerMovingDirection], a - ld a, SAFARI_ZONE_GATE - ldh [hWarpDestinationMap], a - ld a, $3 - ld [wDestinationWarpID], a - ld a, SCRIPT_SAFARIZONEGATE_LEAVING_SAFARI - ld [wSafariZoneGateCurScript], a - SetEvent EVENT_SAFARI_GAME_OVER - ld a, 1 - ld [wSafariZoneGameOver], a - ret - -PrintSafariGameOverText:: - xor a - ld [wJoyIgnore], a - ld hl, SafariGameOverText - jp PrintText - -SafariGameOverText: - text_asm - ld a, [wNumSafariBalls] - and a - jr z, .noMoreSafariBalls - ld hl, TimesUpText - call PrintText -.noMoreSafariBalls - ld hl, GameOverText - call PrintText - jp TextScriptEnd - -TimesUpText: - text_far _TimesUpText - text_end - -GameOverText: - text_far _GameOverText - text_end diff --git a/engine/events/hidden_objects/school_blackboard.asm b/engine/events/hidden_objects/school_blackboard.asm deleted file mode 100644 index 4ac83953..00000000 --- a/engine/events/hidden_objects/school_blackboard.asm +++ /dev/null @@ -1,224 +0,0 @@ -PrintBlackboardLinkCableText: - call EnableAutoTextBoxDrawing - ld a, $1 - ld [wDoNotWaitForButtonPressAfterDisplayingText], a - ld a, [wHiddenObjectFunctionArgument] - call PrintPredefTextID - ret - -LinkCableHelp:: - text_asm - call SaveScreenTilesToBuffer1 - ld hl, LinkCableHelpText1 - call PrintText - xor a - ld [wMenuItemOffset], a ; not used - ld [wCurrentMenuItem], a - ld [wLastMenuItem], a - ld a, PAD_A | PAD_B - ld [wMenuWatchedKeys], a - ld a, 3 - ld [wMaxMenuItem], a - ld a, 2 - ld [wTopMenuItemY], a - ld a, 1 - ld [wTopMenuItemX], a -.linkHelpLoop - ld hl, wStatusFlags5 - set BIT_NO_TEXT_DELAY, [hl] - hlcoord 0, 0 - ld b, 8 - ld c, 13 - call TextBoxBorder - hlcoord 2, 2 - ld de, HowToLinkText - call PlaceString - ld hl, LinkCableHelpText2 - call PrintText - call HandleMenuInput - bit B_PAD_B, a - jr nz, .exit - ld a, [wCurrentMenuItem] - cp 3 ; pressed a on "STOP READING" - jr z, .exit - ld hl, wStatusFlags5 - res BIT_NO_TEXT_DELAY, [hl] - ld hl, LinkCableInfoTexts - add a - ld d, 0 - ld e, a - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - call PrintText - jp .linkHelpLoop -.exit - ld hl, wStatusFlags5 - res BIT_NO_TEXT_DELAY, [hl] - call LoadScreenTilesFromBuffer1 - jp TextScriptEnd - -LinkCableHelpText1: - text_far _LinkCableHelpText1 - text_end - -LinkCableHelpText2: - text_far _LinkCableHelpText2 - text_end - -HowToLinkText: - db "HOW TO LINK" - next "COLOSSEUM" - next "TRADE CENTER" - next "STOP READING@" - -LinkCableInfoTexts: - dw LinkCableInfoText1 - dw LinkCableInfoText2 - dw LinkCableInfoText3 - -LinkCableInfoText1: - text_far _LinkCableInfoText1 - text_end - -LinkCableInfoText2: - text_far _LinkCableInfoText2 - text_end - -LinkCableInfoText3: - text_far _LinkCableInfoText3 - text_end - -ViridianSchoolBlackboard:: - text_asm - call SaveScreenTilesToBuffer1 - ld hl, ViridianSchoolBlackboardText1 - call PrintText - xor a - ld [wMenuItemOffset], a - ld [wCurrentMenuItem], a - ld [wLastMenuItem], a - ld a, PAD_LEFT | PAD_RIGHT | PAD_A | PAD_B - ld [wMenuWatchedKeys], a - ld a, 2 - ld [wMaxMenuItem], a - ld a, 2 - ld [wTopMenuItemY], a - ld a, 1 - ld [wTopMenuItemX], a -.blackboardLoop - ld hl, wStatusFlags5 - set BIT_NO_TEXT_DELAY, [hl] - hlcoord 0, 0 - lb bc, 6, 10 - call TextBoxBorder - hlcoord 1, 2 - ld de, StatusAilmentText1 - call PlaceString - hlcoord 6, 2 - ld de, StatusAilmentText2 - call PlaceString - ld hl, ViridianSchoolBlackboardText2 - call PrintText - call HandleMenuInput ; pressing up and down is handled in here - bit B_PAD_B, a ; pressed b - jr nz, .exitBlackboard - bit B_PAD_RIGHT, a - jr z, .didNotPressRight - ; move cursor to right column - ld a, 2 - ld [wMaxMenuItem], a - ld a, 2 - ld [wTopMenuItemY], a - ld a, 6 - ld [wTopMenuItemX], a - ld a, 3 ; in the the right column, use an offset to prevent overlap - ld [wMenuItemOffset], a - jr .blackboardLoop -.didNotPressRight - bit B_PAD_LEFT, a - jr z, .didNotPressLeftOrRight - ; move cursor to left column - ld a, 2 - ld [wMaxMenuItem], a - ld a, 2 - ld [wTopMenuItemY], a - ld a, 1 - ld [wTopMenuItemX], a - xor a - ld [wMenuItemOffset], a - jr .blackboardLoop -.didNotPressLeftOrRight - ld a, [wCurrentMenuItem] - ld b, a - ld a, [wMenuItemOffset] - add b - cp 5 ; cursor is pointing to "QUIT" - jr z, .exitBlackboard - ; we must have pressed a on a status condition - ; so print the text - ld hl, wStatusFlags5 - res BIT_NO_TEXT_DELAY, [hl] - ld hl, ViridianBlackboardStatusPointers - add a - ld d, 0 - ld e, a - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - call PrintText - jp .blackboardLoop -.exitBlackboard - ld hl, wStatusFlags5 - res BIT_NO_TEXT_DELAY, [hl] - call LoadScreenTilesFromBuffer1 - jp TextScriptEnd - -ViridianSchoolBlackboardText1: - text_far _ViridianSchoolBlackboardText1 - text_end - -ViridianSchoolBlackboardText2: - text_far _ViridianSchoolBlackboardText2 - text_end - -StatusAilmentText1: - db " SLP" - next " PSN" - next " PAR@" - -StatusAilmentText2: - db " BRN" - next " FRZ" - next " QUIT@" - - db "@" ; unused - -ViridianBlackboardStatusPointers: - dw ViridianBlackboardSleepText - dw ViridianBlackboardPoisonText - dw ViridianBlackboardPrlzText - dw ViridianBlackboardBurnText - dw ViridianBlackboardFrozenText - -ViridianBlackboardSleepText: - text_far _ViridianBlackboardSleepText - text_end - -ViridianBlackboardPoisonText: - text_far _ViridianBlackboardPoisonText - text_end - -ViridianBlackboardPrlzText: - text_far _ViridianBlackboardPrlzText - text_end - -ViridianBlackboardBurnText: - text_far _ViridianBlackboardBurnText - text_end - -ViridianBlackboardFrozenText: - text_far _ViridianBlackboardFrozenText - text_end diff --git a/engine/events/hidden_objects/school_notebooks.asm b/engine/events/hidden_objects/school_notebooks.asm deleted file mode 100644 index 96a44ab5..00000000 --- a/engine/events/hidden_objects/school_notebooks.asm +++ /dev/null @@ -1,65 +0,0 @@ -PrintNotebookText: - call EnableAutoTextBoxDrawing - ld a, $1 - ld [wDoNotWaitForButtonPressAfterDisplayingText], a - ld a, [wHiddenObjectFunctionArgument] - jp PrintPredefTextID - -TMNotebook:: - text_far TMNotebookText - text_waitbutton - text_end - -ViridianSchoolNotebook:: - text_asm - ld hl, ViridianSchoolNotebookText1 - call PrintText - call TurnPageSchoolNotebook - jr nz, .doneReading - ld hl, ViridianSchoolNotebookText2 - call PrintText - call TurnPageSchoolNotebook - jr nz, .doneReading - ld hl, ViridianSchoolNotebookText3 - call PrintText - call TurnPageSchoolNotebook - jr nz, .doneReading - ld hl, ViridianSchoolNotebookText4 - call PrintText - ld hl, ViridianSchoolNotebookText5 - call PrintText -.doneReading - jp TextScriptEnd - -TurnPageSchoolNotebook: - ld hl, TurnPageText - call PrintText - call YesNoChoice - ld a, [wCurrentMenuItem] - and a - ret - -TurnPageText: - text_far _TurnPageText - text_end - -ViridianSchoolNotebookText5: - text_far _ViridianSchoolNotebookText5 - text_waitbutton - text_end - -ViridianSchoolNotebookText1: - text_far _ViridianSchoolNotebookText1 - text_end - -ViridianSchoolNotebookText2: - text_far _ViridianSchoolNotebookText2 - text_end - -ViridianSchoolNotebookText3: - text_far _ViridianSchoolNotebookText3 - text_end - -ViridianSchoolNotebookText4: - text_far _ViridianSchoolNotebookText4 - text_end diff --git a/engine/events/hidden_objects/town_map.asm b/engine/events/hidden_objects/town_map.asm deleted file mode 100644 index 11f7cbc7..00000000 --- a/engine/events/hidden_objects/town_map.asm +++ /dev/null @@ -1,22 +0,0 @@ -TownMapText:: - text_far _TownMapText - text_promptbutton - text_asm - ld a, $1 - ld [wDoNotWaitForButtonPressAfterDisplayingText], a - ld hl, wStatusFlags5 - set BIT_NO_TEXT_DELAY, [hl] - call GBPalWhiteOutWithDelay3 - xor a - ldh [hWY], a - inc a - ldh [hAutoBGTransferEnabled], a - call LoadFontTilePatterns - farcall DisplayTownMap - ld hl, wStatusFlags5 - res BIT_NO_TEXT_DELAY, [hl] - ld de, TextScriptEnd - push de - ldh a, [hLoadedROMBank] - push af - jp CloseTextDisplay diff --git a/engine/events/hidden_objects/vermilion_gym_trash.asm b/engine/events/hidden_objects/vermilion_gym_trash.asm deleted file mode 100644 index 73e50cca..00000000 --- a/engine/events/hidden_objects/vermilion_gym_trash.asm +++ /dev/null @@ -1,169 +0,0 @@ -PrintTrashText: - call EnableAutoTextBoxDrawing - tx_pre_jump VermilionGymTrashText - -VermilionGymTrashText:: - text_far _VermilionGymTrashText - text_end - -GymTrashScript: - call EnableAutoTextBoxDrawing - ld a, [wHiddenObjectFunctionArgument] - ld [wGymTrashCanIndex], a - -; Don't do the trash can puzzle if it's already been done. - CheckEvent EVENT_2ND_LOCK_OPENED - jr z, .ok - - tx_pre_jump VermilionGymTrashText - -.ok - CheckEventReuseA EVENT_1ST_LOCK_OPENED - jr nz, .trySecondLock - - ld a, [wFirstLockTrashCanIndex] - ld b, a - ld a, [wGymTrashCanIndex] - cp b - jr z, .openFirstLock - - tx_pre_id VermilionGymTrashText - jr .done - -.openFirstLock -; Next can is trying for the second switch. - SetEvent EVENT_1ST_LOCK_OPENED - - ld hl, GymTrashCans - ld a, [wGymTrashCanIndex] - ; * 5 - ld b, a - add a - add a - add b - - ld d, 0 - ld e, a - add hl, de - ld a, [hli] - -; Bug: This code should calculate a value in the range [0, 3], -; but if the mask and random number don't have any 1 bits in common, then -; the result of the AND will be 0. When 1 is subtracted from that, the value -; will become $ff. This will result in 255 being added to hl, which will cause -; hl to point to one of the zero bytes that pad the end of the ROM bank. -; Trash can 0 was intended to be able to have the second lock only when the -; first lock was in trash can 1 or 3. However, due to this bug, trash can 0 can -; have the second lock regardless of which trash can had the first lock. - - ldh [hGymTrashCanRandNumMask], a - push hl - call Random - swap a - ld b, a - ldh a, [hGymTrashCanRandNumMask] - and b - dec a - pop hl - - ld d, 0 - ld e, a - add hl, de - ld a, [hl] - and $f - ld [wSecondLockTrashCanIndex], a - - tx_pre_id VermilionGymTrashSuccessText1 - jr .done - -.trySecondLock - ld a, [wSecondLockTrashCanIndex] - ld b, a - ld a, [wGymTrashCanIndex] - cp b - jr z, .openSecondLock - -; Reset the cans. - ResetEvent EVENT_1ST_LOCK_OPENED - call Random - - and $e - ld [wFirstLockTrashCanIndex], a - - tx_pre_id VermilionGymTrashFailText - jr .done - -.openSecondLock -; Completed the trash can puzzle. - SetEvent EVENT_2ND_LOCK_OPENED - ld hl, wCurrentMapScriptFlags - set BIT_CUR_MAP_LOADED_2, [hl] - - tx_pre_id VermilionGymTrashSuccessText3 - -.done - jp PrintPredefTextID - -GymTrashCans: -; byte 0: mask for random number -; bytes 1-4: indices of the trash cans that can have the second lock -; (but see the comment above explaining a bug regarding this) -; Note that the mask is simply the number of valid trash can indices that -; follow. The remaining bytes are filled with 0 to pad the length of each entry -; to 5 bytes. - db 2, 1, 3, 0, 0 ; 0 - db 3, 0, 2, 4, 0 ; 1 - db 2, 1, 5, 0, 0 ; 2 - db 3, 0, 4, 6, 0 ; 3 - db 4, 1, 3, 5, 7 ; 4 - db 3, 2, 4, 8, 0 ; 5 - db 3, 3, 7, 9, 0 ; 6 - db 4, 4, 6, 8, 10 ; 7 - db 3, 5, 7, 11, 0 ; 8 - db 3, 6, 10, 12, 0 ; 9 - db 4, 7, 9, 11, 13 ; 10 - db 3, 8, 10, 14, 0 ; 11 - db 2, 9, 13, 0, 0 ; 12 - db 3, 10, 12, 14, 0 ; 13 - db 2, 11, 13, 0, 0 ; 14 - -VermilionGymTrashSuccessText1:: - text_far _VermilionGymTrashSuccessText1 - text_asm - call WaitForSoundToFinish - ld a, SFX_SWITCH - call PlaySound - call WaitForSoundToFinish - jp TextScriptEnd - -; unused -VermilionGymTrashSuccessText2:: - text_far _VermilionGymTrashSuccessText2 - text_end - -; unused -VermilionGymTrashSuccessPlaySfx: - text_asm - call WaitForSoundToFinish - ld a, SFX_SWITCH - call PlaySound - call WaitForSoundToFinish - jp TextScriptEnd - -VermilionGymTrashSuccessText3:: - text_far _VermilionGymTrashSuccessText3 - text_asm - call WaitForSoundToFinish - ld a, SFX_GO_INSIDE - call PlaySound - call WaitForSoundToFinish - jp TextScriptEnd - -VermilionGymTrashFailText:: - text_far _VermilionGymTrashFailText - text_asm - call WaitForSoundToFinish - ld a, SFX_DENIED - call PlaySound - call WaitForSoundToFinish - jp TextScriptEnd diff --git a/engine/overworld/hidden_events.asm b/engine/overworld/hidden_events.asm new file mode 100644 index 00000000..8369e533 --- /dev/null +++ b/engine/overworld/hidden_events.asm @@ -0,0 +1,133 @@ +IsPlayerOnDungeonWarp:: + xor a + ld [wWhichDungeonWarp], a + ld a, [wStatusFlags3] + bit BIT_ON_DUNGEON_WARP, a + ret nz + call ArePlayerCoordsInArray + ret nc + ld a, [wCoordIndex] + ld [wWhichDungeonWarp], a + ld hl, wStatusFlags3 + set BIT_ON_DUNGEON_WARP, [hl] + ld hl, wStatusFlags6 + set BIT_DUNGEON_WARP, [hl] + ret + +; if a hidden event was found, stores $00 in [hDidntFindAnyHiddenEvent], else stores $ff +CheckForHiddenEvent:: + ld hl, hItemAlreadyFound + xor a + ld [hli], a ; [hItemAlreadyFound] + ld [hli], a ; [hSavedMapTextPtr] + ld [hli], a ; [hSavedMapTextPtr + 1] + ld [hl], a ; [hDidntFindAnyHiddenEvent] + ld de, $0 + ld hl, HiddenEventMaps +.hiddenMapLoop + ld a, [hli] + ld b, a + cp $ff + jr z, .noMatch + ld a, [wCurMap] + cp b + jr z, .foundMatchingMap + inc de + inc de + jr .hiddenMapLoop +.foundMatchingMap + ld hl, HiddenEventPointers + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + push hl + ld hl, wHiddenEventFunctionArgument + xor a + ld [hli], a + ld [hli], a + ld [hl], a + pop hl +.hiddenEventLoop + ld a, [hli] + cp $ff + jr z, .noMatch + ld [wHiddenEventY], a + ld b, a + ld a, [hli] + ld [wHiddenEventX], a + ld c, a + call CheckIfCoordsInFrontOfPlayerMatch + ldh a, [hCoordsInFrontOfPlayerMatch] + and a + jr z, .foundMatchingEvent + inc hl + inc hl + inc hl + inc hl + push hl + ld hl, wHiddenEventIndex + inc [hl] + pop hl + jr .hiddenEventLoop +.foundMatchingEvent + ld a, [hli] + ld [wHiddenEventFunctionArgument], a + ld a, [hli] + ld [wHiddenEventFunctionRomBank], a + ld a, [hli] + ld h, [hl] + ld l, a + ret +.noMatch + ld a, $ff + ldh [hDidntFindAnyHiddenEvent], a + ret + +; checks if the coordinates in front of the player's sprite match Y in b and X in c +; [hCoordsInFrontOfPlayerMatch] = $00 if they match, $ff if they don't match +CheckIfCoordsInFrontOfPlayerMatch: + ld a, [wSpritePlayerStateData1FacingDirection] + cp SPRITE_FACING_UP + jr z, .facingUp + cp SPRITE_FACING_LEFT + jr z, .facingLeft + cp SPRITE_FACING_RIGHT + jr z, .facingRight +; facing down + ld a, [wYCoord] + inc a + jr .upDownCommon +.facingUp + ld a, [wYCoord] + dec a +.upDownCommon + cp b + jr nz, .didNotMatch + ld a, [wXCoord] + cp c + jr nz, .didNotMatch + jr .matched +.facingLeft + ld a, [wXCoord] + dec a + jr .leftRightCommon +.facingRight + ld a, [wXCoord] + inc a +.leftRightCommon + cp c + jr nz, .didNotMatch + ld a, [wYCoord] + cp b + jr nz, .didNotMatch +.matched + xor a + jr .done +.didNotMatch + ld a, $ff +.done + ldh [hCoordsInFrontOfPlayerMatch], a + ret + +INCLUDE "data/events/hidden_events.asm" diff --git a/engine/overworld/hidden_objects.asm b/engine/overworld/hidden_objects.asm deleted file mode 100644 index 2798864a..00000000 --- a/engine/overworld/hidden_objects.asm +++ /dev/null @@ -1,133 +0,0 @@ -IsPlayerOnDungeonWarp:: - xor a - ld [wWhichDungeonWarp], a - ld a, [wStatusFlags3] - bit BIT_ON_DUNGEON_WARP, a - ret nz - call ArePlayerCoordsInArray - ret nc - ld a, [wCoordIndex] - ld [wWhichDungeonWarp], a - ld hl, wStatusFlags3 - set BIT_ON_DUNGEON_WARP, [hl] - ld hl, wStatusFlags6 - set BIT_DUNGEON_WARP, [hl] - ret - -; if a hidden object was found, stores $00 in [hDidntFindAnyHiddenObject], else stores $ff -CheckForHiddenObject:: - ld hl, hItemAlreadyFound - xor a - ld [hli], a ; [hItemAlreadyFound] - ld [hli], a ; [hSavedMapTextPtr] - ld [hli], a ; [hSavedMapTextPtr + 1] - ld [hl], a ; [hDidntFindAnyHiddenObject] - ld de, $0 - ld hl, HiddenObjectMaps -.hiddenMapLoop - ld a, [hli] - ld b, a - cp $ff - jr z, .noMatch - ld a, [wCurMap] - cp b - jr z, .foundMatchingMap - inc de - inc de - jr .hiddenMapLoop -.foundMatchingMap - ld hl, HiddenObjectPointers - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - push hl - ld hl, wHiddenObjectFunctionArgument - xor a - ld [hli], a - ld [hli], a - ld [hl], a - pop hl -.hiddenObjectLoop - ld a, [hli] - cp $ff - jr z, .noMatch - ld [wHiddenObjectY], a - ld b, a - ld a, [hli] - ld [wHiddenObjectX], a - ld c, a - call CheckIfCoordsInFrontOfPlayerMatch - ldh a, [hCoordsInFrontOfPlayerMatch] - and a - jr z, .foundMatchingObject - inc hl - inc hl - inc hl - inc hl - push hl - ld hl, wHiddenObjectIndex - inc [hl] - pop hl - jr .hiddenObjectLoop -.foundMatchingObject - ld a, [hli] - ld [wHiddenObjectFunctionArgument], a - ld a, [hli] - ld [wHiddenObjectFunctionRomBank], a - ld a, [hli] - ld h, [hl] - ld l, a - ret -.noMatch - ld a, $ff - ldh [hDidntFindAnyHiddenObject], a - ret - -; checks if the coordinates in front of the player's sprite match Y in b and X in c -; [hCoordsInFrontOfPlayerMatch] = $00 if they match, $ff if they don't match -CheckIfCoordsInFrontOfPlayerMatch: - ld a, [wSpritePlayerStateData1FacingDirection] - cp SPRITE_FACING_UP - jr z, .facingUp - cp SPRITE_FACING_LEFT - jr z, .facingLeft - cp SPRITE_FACING_RIGHT - jr z, .facingRight -; facing down - ld a, [wYCoord] - inc a - jr .upDownCommon -.facingUp - ld a, [wYCoord] - dec a -.upDownCommon - cp b - jr nz, .didNotMatch - ld a, [wXCoord] - cp c - jr nz, .didNotMatch - jr .matched -.facingLeft - ld a, [wXCoord] - dec a - jr .leftRightCommon -.facingRight - ld a, [wXCoord] - inc a -.leftRightCommon - cp c - jr nz, .didNotMatch - ld a, [wYCoord] - cp b - jr nz, .didNotMatch -.matched - xor a - jr .done -.didNotMatch - ld a, $ff -.done - ldh [hCoordsInFrontOfPlayerMatch], a - ret - -INCLUDE "data/events/hidden_objects.asm" diff --git a/engine/slots/game_corner_slots.asm b/engine/slots/game_corner_slots.asm index 48321974..d83d9d6a 100644 --- a/engine/slots/game_corner_slots.asm +++ b/engine/slots/game_corner_slots.asm @@ -1,5 +1,5 @@ StartSlotMachine: - ld a, [wHiddenObjectFunctionArgument] + ld a, [wHiddenEventFunctionArgument] cp SLOTS_OUTOFORDER jr z, .printOutOfOrder cp SLOTS_OUTTOLUNCH @@ -10,9 +10,9 @@ StartSlotMachine: ld a, [wCanPlaySlots] and a ret z - ld a, [wLuckySlotHiddenObjectIndex] + ld a, [wLuckySlotHiddenEventIndex] ld b, a - ld a, [wHiddenObjectIndex] + ld a, [wHiddenEventIndex] inc a cp b jr z, .match diff --git a/home.asm b/home.asm index 4090a274..201a0a22 100644 --- a/home.asm +++ b/home.asm @@ -80,5 +80,5 @@ INCLUDE "home/reload_sprites.asm" INCLUDE "home/give.asm" INCLUDE "home/random.asm" INCLUDE "home/predef.asm" -INCLUDE "home/hidden_objects.asm" +INCLUDE "home/hidden_events.asm" INCLUDE "home/predef_text.asm" diff --git a/home/hidden_events.asm b/home/hidden_events.asm new file mode 100644 index 00000000..5acc95d9 --- /dev/null +++ b/home/hidden_events.asm @@ -0,0 +1,39 @@ +UpdateCinnabarGymGateTileBlocks:: + farjp UpdateCinnabarGymGateTileBlocks_ + +CheckForHiddenEventOrBookshelfOrCardKeyDoor:: + ldh a, [hLoadedROMBank] + push af + ldh a, [hJoyHeld] + bit B_PAD_A, a + jr z, .nothingFound +; A button is pressed + ld a, BANK(CheckForHiddenEvent) + ld [rROMB], a + ldh [hLoadedROMBank], a + call CheckForHiddenEvent + ldh a, [hDidntFindAnyHiddenEvent] + and a + jr nz, .hiddenEventNotFound + ld a, [wHiddenEventFunctionRomBank] + ld [rROMB], a + ldh [hLoadedROMBank], a + ld de, .returnAddress + push de + jp hl +.returnAddress + xor a + jr .done +.hiddenEventNotFound + farcall PrintBookshelfText + ldh a, [hInteractedWithBookshelf] + and a + jr z, .done +.nothingFound + ld a, $ff +.done + ldh [hItemAlreadyFound], a + pop af + ld [rROMB], a + ldh [hLoadedROMBank], a + ret diff --git a/home/hidden_objects.asm b/home/hidden_objects.asm deleted file mode 100644 index bb513b9d..00000000 --- a/home/hidden_objects.asm +++ /dev/null @@ -1,39 +0,0 @@ -UpdateCinnabarGymGateTileBlocks:: - farjp UpdateCinnabarGymGateTileBlocks_ - -CheckForHiddenObjectOrBookshelfOrCardKeyDoor:: - ldh a, [hLoadedROMBank] - push af - ldh a, [hJoyHeld] - bit B_PAD_A, a - jr z, .nothingFound -; A button is pressed - ld a, BANK(CheckForHiddenObject) - ld [rROMB], a - ldh [hLoadedROMBank], a - call CheckForHiddenObject - ldh a, [hDidntFindAnyHiddenObject] - and a - jr nz, .hiddenObjectNotFound - ld a, [wHiddenObjectFunctionRomBank] - ld [rROMB], a - ldh [hLoadedROMBank], a - ld de, .returnAddress - push de - jp hl -.returnAddress - xor a - jr .done -.hiddenObjectNotFound - farcall PrintBookshelfText - ldh a, [hInteractedWithBookshelf] - and a - jr z, .done -.nothingFound - ld a, $ff -.done - ldh [hItemAlreadyFound], a - pop af - ld [rROMB], a - ldh [hLoadedROMBank], a - ret diff --git a/home/overworld.asm b/home/overworld.asm index 58550167..a06a32da 100644 --- a/home/overworld.asm +++ b/home/overworld.asm @@ -87,10 +87,10 @@ OverworldLoopLessDelay:: jp nz, .noDirectionButtonsPressed call IsPlayerCharacterBeingControlledByGame jr nz, .checkForOpponent - call CheckForHiddenObjectOrBookshelfOrCardKeyDoor + call CheckForHiddenEventOrBookshelfOrCardKeyDoor ldh a, [hItemAlreadyFound] and a - jp z, OverworldLoop ; jump if a hidden object or bookshelf was found, but not if a card key door was found + jp z, OverworldLoop ; jump if a hidden event or bookshelf was found, but not if a card key door was found call IsSpriteOrSignInFrontOfPlayer ldh a, [hTextID] and a diff --git a/layout.link b/layout.link index 454b3bec..1b454a58 100644 --- a/layout.link +++ b/layout.link @@ -59,7 +59,7 @@ ROMX $7 "Maps 3" "Pokémon Names" "Maps 4" - "Hidden Objects 1" + "Hidden Events 1" ROMX $8 "Sound Effect Headers 2" "Music Headers 2" @@ -93,7 +93,7 @@ ROMX $11 "Maps 5" "Pokédex Rating" "Maps 6" - "Hidden Objects Core" + "Hidden Events Core" ROMX $12 "Maps 7" "Screen Effects" @@ -105,7 +105,7 @@ ROMX $13 ROMX $14 "Maps 10" "Battle Engine 8" - "Hidden Objects 2" + "Hidden Events 2" ROMX $15 "Maps 11" "Battle Engine 9" @@ -121,12 +121,12 @@ ROMX $17 "Maps 15" "Starter Dex" "Maps 16" - "Hidden Objects 3" + "Hidden Events 3" ROMX $18 "Maps 17" "Cinnabar Lab Fossils" "Maps 18" - "Hidden Objects 4" + "Hidden Events 4" ROMX $19 "Tilesets 1" ROMX $1A diff --git a/main.asm b/main.asm index 313bd448..951afdc2 100644 --- a/main.asm +++ b/main.asm @@ -67,12 +67,12 @@ INCLUDE "engine/movie/oak_speech/init_player_data.asm" INCLUDE "engine/items/get_bag_item_quantity.asm" INCLUDE "engine/overworld/pathfinding.asm" INCLUDE "engine/gfx/hp_bar.asm" -INCLUDE "engine/events/hidden_objects/bookshelves.asm" -INCLUDE "engine/events/hidden_objects/indigo_plateau_statues.asm" -INCLUDE "engine/events/hidden_objects/book_or_sculpture.asm" -INCLUDE "engine/events/hidden_objects/elevator.asm" -INCLUDE "engine/events/hidden_objects/town_map.asm" -INCLUDE "engine/events/hidden_objects/pokemon_stuff.asm" +INCLUDE "engine/events/hidden_events/bookshelves.asm" +INCLUDE "engine/events/hidden_events/indigo_plateau_statues.asm" +INCLUDE "engine/events/hidden_events/book_or_sculpture.asm" +INCLUDE "engine/events/hidden_events/elevator.asm" +INCLUDE "engine/events/hidden_events/town_map.asm" +INCLUDE "engine/events/hidden_events/pokemon_stuff.asm" SECTION "Font Graphics", ROMX @@ -127,16 +127,16 @@ INCLUDE "engine/movie/oak_speech/clear_save.asm" INCLUDE "engine/events/elevator.asm" -SECTION "Hidden Objects 1", ROMX +SECTION "Hidden Events 1", ROMX INCLUDE "engine/menus/oaks_pc.asm" -INCLUDE "engine/events/hidden_objects/new_bike.asm" -INCLUDE "engine/events/hidden_objects/oaks_lab_posters.asm" -INCLUDE "engine/events/hidden_objects/safari_game.asm" -INCLUDE "engine/events/hidden_objects/cinnabar_gym_quiz.asm" -INCLUDE "engine/events/hidden_objects/magazines.asm" -INCLUDE "engine/events/hidden_objects/bills_house_pc.asm" -INCLUDE "engine/events/hidden_objects/oaks_lab_email.asm" +INCLUDE "engine/events/hidden_events/new_bike.asm" +INCLUDE "engine/events/hidden_events/oaks_lab_posters.asm" +INCLUDE "engine/events/hidden_events/safari_game.asm" +INCLUDE "engine/events/hidden_events/cinnabar_gym_quiz.asm" +INCLUDE "engine/events/hidden_events/magazines.asm" +INCLUDE "engine/events/hidden_events/bills_house_pc.asm" +INCLUDE "engine/events/hidden_events/oaks_lab_email.asm" SECTION "Bill's PC", ROMX @@ -217,9 +217,9 @@ SECTION "Pokédex Rating", ROMX INCLUDE "engine/events/pokedex_rating.asm" -SECTION "Hidden Objects Core", ROMX +SECTION "Hidden Events Core", ROMX -INCLUDE "engine/overworld/hidden_objects.asm" +INCLUDE "engine/overworld/hidden_events.asm" SECTION "Screen Effects", ROMX @@ -239,13 +239,13 @@ INCLUDE "engine/battle/init_battle_variables.asm" INCLUDE "engine/battle/move_effects/paralyze.asm" -SECTION "Hidden Objects 2", ROMX +SECTION "Hidden Events 2", ROMX INCLUDE "engine/events/card_key.asm" INCLUDE "engine/events/prize_menu.asm" -INCLUDE "engine/events/hidden_objects/school_notebooks.asm" -INCLUDE "engine/events/hidden_objects/fighting_dojo.asm" -INCLUDE "engine/events/hidden_objects/indigo_plateau_hq.asm" +INCLUDE "engine/events/hidden_events/school_notebooks.asm" +INCLUDE "engine/events/hidden_events/fighting_dojo.asm" +INCLUDE "engine/events/hidden_events/indigo_plateau_hq.asm" SECTION "Battle Engine 9", ROMX @@ -280,14 +280,14 @@ SECTION "Starter Dex", ROMX INCLUDE "engine/events/starter_dex.asm" -SECTION "Hidden Objects 3", ROMX +SECTION "Hidden Events 3", ROMX INCLUDE "engine/pokemon/set_types.asm" -INCLUDE "engine/events/hidden_objects/reds_room.asm" -INCLUDE "engine/events/hidden_objects/route_15_binoculars.asm" -INCLUDE "engine/events/hidden_objects/museum_fossils.asm" -INCLUDE "engine/events/hidden_objects/school_blackboard.asm" -INCLUDE "engine/events/hidden_objects/vermilion_gym_trash.asm" +INCLUDE "engine/events/hidden_events/reds_room.asm" +INCLUDE "engine/events/hidden_events/route_15_binoculars.asm" +INCLUDE "engine/events/hidden_events/museum_fossils.asm" +INCLUDE "engine/events/hidden_events/school_blackboard.asm" +INCLUDE "engine/events/hidden_events/vermilion_gym_trash.asm" SECTION "Cinnabar Lab Fossils", ROMX @@ -295,12 +295,12 @@ SECTION "Cinnabar Lab Fossils", ROMX INCLUDE "engine/events/cinnabar_lab.asm" -SECTION "Hidden Objects 4", ROMX +SECTION "Hidden Events 4", ROMX -INCLUDE "engine/events/hidden_objects/gym_statues.asm" -INCLUDE "engine/events/hidden_objects/bench_guys.asm" -INCLUDE "engine/events/hidden_objects/blues_room.asm" -INCLUDE "engine/events/hidden_objects/pokecenter_pc.asm" +INCLUDE "engine/events/hidden_events/gym_statues.asm" +INCLUDE "engine/events/hidden_events/bench_guys.asm" +INCLUDE "engine/events/hidden_events/blues_room.asm" +INCLUDE "engine/events/hidden_events/pokecenter_pc.asm" SECTION "Battle Engine 11", ROMX diff --git a/ram/hram.asm b/ram/hram.asm index 9cfb5327..24260b80 100644 --- a/ram/hram.asm +++ b/ram/hram.asm @@ -370,7 +370,7 @@ hSpriteMapXCoord:: db NEXTU hItemAlreadyFound:: db ds 2 -hDidntFindAnyHiddenObject:: db +hDidntFindAnyHiddenEvent:: db NEXTU ds 1 diff --git a/ram/wram.asm b/ram/wram.asm index 5eefaf06..44775192 100644 --- a/ram/wram.asm +++ b/ram/wram.asm @@ -390,7 +390,7 @@ wSlotMachineSevenAndBarModeChance:: db ; ROM back to return to when the player is done with the slot machine wSlotMachineSavedROMBank:: db ds 166 -wLuckySlotHiddenObjectIndex:: db +wLuckySlotHiddenEventIndex:: db NEXTU ; values between 0-6. Shake screen horizontally, shake screen vertically, blink Pokemon... @@ -744,12 +744,12 @@ wTempCoins1:: dw wTempCoins2:: dw NEXTU -wHiddenObjectFunctionArgument:: db -wHiddenObjectFunctionRomBank:: db -wHiddenObjectIndex:: db -wHiddenObjectY:: db +wHiddenEventFunctionArgument:: db +wHiddenEventFunctionRomBank:: db +wHiddenEventIndex:: db +wHiddenEventY:: db wHiddenItemOrCoinsIndex:: -wHiddenObjectX:: db +wHiddenEventX:: db NEXTU wPlayerSpinInPlaceAnimFrameDelay:: db diff --git a/scripts/GameCorner.asm b/scripts/GameCorner.asm index 0ead1947..94625d2a 100644 --- a/scripts/GameCorner.asm +++ b/scripts/GameCorner.asm @@ -20,7 +20,7 @@ GameCornerSelectLuckySlotMachine: srl a srl a srl a - ld [wLuckySlotHiddenObjectIndex], a + ld [wLuckySlotHiddenEventIndex], a ret GameCornerSetRocketHideoutDoorTile: diff --git a/scripts/SafariZoneGate.asm b/scripts/SafariZoneGate.asm index 3052cac9..21f72066 100644 --- a/scripts/SafariZoneGate.asm +++ b/scripts/SafariZoneGate.asm @@ -13,7 +13,7 @@ SafariZoneGate_ScriptPointers: dw_const SafariZoneGatePlayerMovingDownScript, SCRIPT_SAFARIZONEGATE_PLAYER_MOVING_DOWN dw_const SafariZoneGateLeavingSafariScript, SCRIPT_SAFARIZONEGATE_LEAVING_SAFARI dw_const SafariZoneGateSetScriptAfterMoveScript, SCRIPT_SAFARIZONEGATE_SET_SCRIPT_AFTER_MOVE - EXPORT SCRIPT_SAFARIZONEGATE_LEAVING_SAFARI ; used by engine/events/hidden_objects/safari_game.asm + EXPORT SCRIPT_SAFARIZONEGATE_LEAVING_SAFARI ; used by engine/events/hidden_events/safari_game.asm SafariZoneGateDefaultScript: ld hl, .PlayerNextToSafariZoneWorker1CoordsArray -- cgit v1.3.1-sl0p From 85b9d866c8392b9ca56c1c17f82dc99a37e1011c Mon Sep 17 00:00:00 2001 From: SnorlaxMonster <7100450+SnorlaxMonster@users.noreply.github.com> Date: Sun, 18 Jan 2026 08:11:37 +1030 Subject: Align move grammar with pokecrystal (#565) Add comments explaining the redundant move grammar categories inherited from the Japanese version. --- data/moves/grammar.asm | 16 +++-- data/text/text_2.asm | 18 ++--- engine/battle/core.asm | 138 +------------------------------------- engine/battle/used_move_text.asm | 139 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 162 insertions(+), 149 deletions(-) create mode 100644 engine/battle/used_move_text.asm (limited to 'engine') diff --git a/data/moves/grammar.asm b/data/moves/grammar.asm index bc3d1dc6..e3e87387 100644 --- a/data/moves/grammar.asm +++ b/data/moves/grammar.asm @@ -1,17 +1,21 @@ -ExclamationPointMoveSets: -; set 0 +; Used by GetMoveGrammar (see engine/battle/core.asm) +; Each move is given an identifier for what usedmovetext to use (0-4). +; Made redundant in English localization, where all are just "[mon]used [move]!" + +MoveGrammar: +; 0: originally "[mon]は[move]を つかった!" ("[mon]used [move]!") db SWORDS_DANCE db GROWTH db 0 ; end set -; set 1 +; 1: originally "[mon]は[move]を した!" ("[mon]did [move]!") db RECOVER db BIDE db SELFDESTRUCT db AMNESIA db 0 ; end set -; set 2 +; 2: originally "[mon]は[move]した!" ("[mon]did [move]!") db MEDITATE db AGILITY db TELEPORT @@ -20,7 +24,7 @@ ExclamationPointMoveSets: db BARRAGE db 0 ; end set -; set 3 +; 3: originally "[mon]の[move] こうげき!" ("[mon]'s[move] attack!") db POUND db SCRATCH db VICEGRIP @@ -69,4 +73,6 @@ ExclamationPointMoveSets: db SUBSTITUTE db 0 ; end set +; 4: originally "[mon]の[move]!" ("[mon]'s[move]!") +; Any move not listed above uses this grammar. db -1 ; end diff --git a/data/text/text_2.asm b/data/text/text_2.asm index df28740d..d62e0929 100644 --- a/data/text/text_2.asm +++ b/data/text/text_2.asm @@ -1075,21 +1075,21 @@ _MoveIsDisabledText:: cont "disabled!" prompt -_MonName1Text:: +_ActorNameText:: text "@" text_end -_Used1Text:: +_UsedMove1Text:: text_start line "used @" text_end -_Used2Text:: +_UsedMove2Text:: text_start line "used @" text_end -_InsteadText:: +_UsedInsteadText:: text "instead," cont "@" text_end @@ -1098,23 +1098,23 @@ _MoveNameText:: text_ram wStringBuffer text "@" -_ExclamationPoint1Text:: +_EndUsedMove1Text:: text "!" done -_ExclamationPoint2Text:: +_EndUsedMove2Text:: text "!" done -_ExclamationPoint3Text:: +_EndUsedMove3Text:: text "!" done -_ExclamationPoint4Text:: +_EndUsedMove4Text:: text "!" done -_ExclamationPoint5Text:: +_EndUsedMove5Text:: text "!" done diff --git a/engine/battle/core.asm b/engine/battle/core.asm index dd9fbc71..fc17ec44 100644 --- a/engine/battle/core.asm +++ b/engine/battle/core.asm @@ -3115,7 +3115,7 @@ PlayerCanExecuteChargingMove: ; resulting in the Pokemon being invulnerable for the whole battle res INVULNERABLE, [hl] PlayerCanExecuteMove: - call PrintMonName1Text + call DisplayUsedMoveText ld hl, DecrementPP ld de, wPlayerSelectedMove ; pointer to the move just used ld b, BANK(DecrementPP) @@ -3713,139 +3713,7 @@ HandleSelfConfusionDamage: ldh [hWhoseTurn], a jp ApplyDamageToPlayerPokemon -PrintMonName1Text: - ld hl, MonName1Text - jp PrintText - -; this function wastes time calling DetermineExclamationPointTextNum -; and choosing between Used1Text and Used2Text, even though -; those text strings are identical and both continue at PrintInsteadText -; this likely had to do with Japanese grammar that got translated, -; but the functionality didn't get removed -MonName1Text: - text_far _MonName1Text - text_asm - ldh a, [hWhoseTurn] - and a - ld a, [wPlayerMoveNum] - ld hl, wPlayerUsedMove - jr z, .playerTurn - ld a, [wEnemyMoveNum] - ld hl, wEnemyUsedMove -.playerTurn - ld [hl], a - ld [wMoveGrammar], a - call DetermineExclamationPointTextNum - ld a, [wMonIsDisobedient] - and a - ld hl, Used2Text - ret nz - ld a, [wMoveGrammar] - cp 3 - ld hl, Used2Text - ret c - ld hl, Used1Text - ret - -Used1Text: - text_far _Used1Text - text_asm - jr PrintInsteadText - -Used2Text: - text_far _Used2Text - text_asm - ; fall through - -PrintInsteadText: - ld a, [wMonIsDisobedient] - and a - jr z, PrintMoveName - ld hl, InsteadText - ret - -InsteadText: - text_far _InsteadText - text_asm - ; fall through - -PrintMoveName: - ld hl, _PrintMoveName - ret - -_PrintMoveName: - text_far _MoveNameText - text_asm - ld hl, ExclamationPointPointerTable - ld a, [wMoveGrammar] - add a - push bc - ld b, $0 - ld c, a - add hl, bc - pop bc - ld a, [hli] - ld h, [hl] - ld l, a - ret - -ExclamationPointPointerTable: - dw ExclamationPoint1Text - dw ExclamationPoint2Text - dw ExclamationPoint3Text - dw ExclamationPoint4Text - dw ExclamationPoint5Text - -ExclamationPoint1Text: - text_far _ExclamationPoint1Text - text_end - -ExclamationPoint2Text: - text_far _ExclamationPoint2Text - text_end - -ExclamationPoint3Text: - text_far _ExclamationPoint3Text - text_end - -ExclamationPoint4Text: - text_far _ExclamationPoint4Text - text_end - -ExclamationPoint5Text: - text_far _ExclamationPoint5Text - text_end - -; this function does nothing useful -; if the move being used is in set [1-4] from ExclamationPointMoveSets, -; use ExclamationPoint[1-4]Text -; otherwise, use ExclamationPoint5Text -; but all five text strings are identical -; this likely had to do with Japanese grammar that got translated, -; but the functionality didn't get removed -DetermineExclamationPointTextNum: - push bc - ld a, [wMoveGrammar] ; move ID - ld c, a - ld b, $0 - ld hl, ExclamationPointMoveSets -.loop - ld a, [hli] - cp $ff - jr z, .done - cp c - jr z, .done - and a - jr nz, .loop - inc b - jr .loop -.done - ld a, b - ld [wMoveGrammar], a - pop bc - ret - -INCLUDE "data/moves/grammar.asm" +INCLUDE "engine/battle/used_move_text.asm" PrintMoveFailureText: ld de, wPlayerMoveEffect @@ -5642,7 +5510,7 @@ EnemyCanExecuteChargingMove: EnemyCanExecuteMove: xor a ld [wMonIsDisobedient], a - call PrintMonName1Text + call DisplayUsedMoveText ld a, [wEnemyMoveEffect] ld hl, ResidualEffects1 ld de, $1 diff --git a/engine/battle/used_move_text.asm b/engine/battle/used_move_text.asm new file mode 100644 index 00000000..abb35e67 --- /dev/null +++ b/engine/battle/used_move_text.asm @@ -0,0 +1,139 @@ +DisplayUsedMoveText: + ld hl, UsedMoveText + jp PrintText + +UsedMoveText: + text_far _ActorNameText + text_asm + + ldh a, [hWhoseTurn] + and a + ld a, [wPlayerMoveNum] + ld hl, wPlayerUsedMove + jr z, .playerTurn + + ld a, [wEnemyMoveNum] + ld hl, wEnemyUsedMove + +.playerTurn + ld [hl], a + ld [wMoveGrammar], a + call GetMoveGrammar + ld a, [wMonIsDisobedient] + and a + ld hl, UsedMove2Text + ret nz + + ; check move grammar + ld a, [wMoveGrammar] + cp $3 + ld hl, UsedMove2Text + ret c + ld hl, UsedMove1Text + ret + +UsedMove1Text: + text_far _UsedMove1Text + text_asm + jr UsedMoveText_CheckObedience + +UsedMove2Text: + text_far _UsedMove2Text + text_asm + ; fall through + +UsedMoveText_CheckObedience: +; check obedience + ld a, [wMonIsDisobedient] + and a + jr z, .GetMoveNameText +; print "instead," + ld hl, .UsedInsteadText + ret + +.UsedInsteadText: + text_far _UsedInsteadText + text_asm + ; fall through + +.GetMoveNameText: + ld hl, MoveNameText + ret + +MoveNameText: + text_far _MoveNameText + text_asm + ld hl, .endusedmovetexts + ld a, [wMoveGrammar] + add a + push bc + ld b, $0 + ld c, a + add hl, bc + pop bc + ld a, [hli] + ld h, [hl] + ld l, a + ret + +.endusedmovetexts: +; entries correspond to MoveGrammar sets + dw EndUsedMove1Text + dw EndUsedMove2Text + dw EndUsedMove3Text + dw EndUsedMove4Text + dw EndUsedMove5Text + +EndUsedMove1Text: + text_far _EndUsedMove1Text + text_end + +EndUsedMove2Text: + text_far _EndUsedMove2Text + text_end + +EndUsedMove3Text: + text_far _EndUsedMove3Text + text_end + +EndUsedMove4Text: + text_far _EndUsedMove4Text + text_end + +EndUsedMove5Text: + text_far _EndUsedMove5Text + text_end + +; This function is redundant in the English localization. +; In Japanese, it selects one of 5 distinct sentence structures. +; In English, all of these sentences have the exact same structure, +; so this serves no purpose. +GetMoveGrammar: + push bc + ld a, [wMoveGrammar] ; move ID + ld c, a + ld b, $0 + ld hl, MoveGrammar +.loop + ld a, [hli] +; end of table? + cp -1 + jr z, .end +; match? + cp c + jr z, .end +; advance grammar type at 0 + and a + jr nz, .loop +; next grammar type + inc b + jr .loop + +.end +; wMoveGrammar now contains move grammar + ld a, b + ld [wMoveGrammar], a + pop bc + ret + +INCLUDE "data/moves/grammar.asm" -- cgit v1.3.1-sl0p From 4e22af12bcf73205fb3bfbd535a90eeeba8a3dcb Mon Sep 17 00:00:00 2001 From: DrNyk Date: Sat, 17 Jan 2026 16:42:12 -0500 Subject: Replace hard-coded numbers with constants in haze.asm (#564) --- engine/battle/move_effects/haze.asm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engine') diff --git a/engine/battle/move_effects/haze.asm b/engine/battle/move_effects/haze.asm index 76722d0e..0f89ad19 100644 --- a/engine/battle/move_effects/haze.asm +++ b/engine/battle/move_effects/haze.asm @@ -59,7 +59,7 @@ CureVolatileStatuses: ret ResetStatMods: - ld b, $8 + ld b, NUM_STAT_MODS .loop ld [hli], a dec b @@ -67,7 +67,7 @@ ResetStatMods: ret ResetStats: - ld b, $8 + ld b, (NUM_STATS - 1) * 2 ; doesn't reset STAT_HEALTH .loop ld a, [hli] ld [de], a -- cgit v1.3.1-sl0p