From 139a28ff9906d728a6820fe678a2a616eb309421 Mon Sep 17 00:00:00 2001 From: Rangi Date: Sat, 4 Jul 2020 17:09:35 -0400 Subject: Port pokecrystal's formatting of text commands and special characters --- home/overworld.asm | 4 +- home/overworld_text.asm | 28 +-- home/pokemon.asm | 4 +- home/predef_text.asm | 237 ------------------------ home/text.asm | 471 ++++++++++++++++++++---------------------------- home/text_script.asm | 231 ++++++++++++++++++++++++ home/trainers.asm | 4 +- 7 files changed, 447 insertions(+), 532 deletions(-) delete mode 100644 home/predef_text.asm create mode 100644 home/text_script.asm (limited to 'home') diff --git a/home/overworld.asm b/home/overworld.asm index 79e4ea97..c16c121c 100644 --- a/home/overworld.asm +++ b/home/overworld.asm @@ -75,8 +75,8 @@ OverworldLoopLessDelay:: bit 3, a ; start button jr z, .startButtonNotPressed ; if START is pressed - xor a - ld [hSpriteIndexOrTextID], a ; start menu text ID + xor a ; TEXT_START_MENU + ld [hSpriteIndexOrTextID], a jp .displayDialogue .startButtonNotPressed bit 0, a ; A button diff --git a/home/overworld_text.asm b/home/overworld_text.asm index b32335f7..7ea23fe4 100644 --- a/home/overworld_text.asm +++ b/home/overworld_text.asm @@ -1,31 +1,31 @@ -TextScriptEndingChar:: - db "@" +TextScriptEndingText:: + text_end TextScriptEnd:: - ld hl, TextScriptEndingChar + ld hl, TextScriptEndingText ret ExclamationText:: - TX_FAR _ExclamationText - db "@" + text_far _ExclamationText + text_end GroundRoseText:: - TX_FAR _GroundRoseText - db "@" + text_far _GroundRoseText + text_end BoulderText:: - TX_FAR _BoulderText - db "@" + text_far _BoulderText + text_end MartSignText:: - TX_FAR _MartSignText - db "@" + text_far _MartSignText + text_end PokeCenterSignText:: - TX_FAR _PokeCenterSignText - db "@" + text_far _PokeCenterSignText + text_end PickUpItemText:: - TX_ASM + text_asm predef PickUpItem jp TextScriptEnd diff --git a/home/pokemon.asm b/home/pokemon.asm index 141baa65..539632d4 100644 --- a/home/pokemon.asm +++ b/home/pokemon.asm @@ -342,7 +342,7 @@ PrintStatusConditionNotFainted:: ; hl = destination address ; [wLoadedMonLevel] = level PrintLevel:: - ld a, $6e ; ":L" tile ID + ld a, "" ; ":L" tile ID ld [hli], a ld c, 2 ; number of digits ld a, [wLoadedMonLevel] ; level @@ -358,7 +358,7 @@ PrintLevel:: ; hl = destination address ; [wLoadedMonLevel] = level PrintLevelFull:: - ld a, $6e ; ":L" tile ID + ld a, "" ; ":L" tile ID ld [hli], a ld c, 3 ; number of digits ld a, [wLoadedMonLevel] ; level diff --git a/home/predef_text.asm b/home/predef_text.asm deleted file mode 100644 index 059e23ab..00000000 --- a/home/predef_text.asm +++ /dev/null @@ -1,237 +0,0 @@ -; this function is used to display sign messages, sprite dialog, etc. -; INPUT: [hSpriteIndexOrTextID] = sprite ID or text ID -DisplayTextID:: - ld a, [hLoadedROMBank] - push af - callba DisplayTextIDInit ; initialization - ld hl, wTextPredefFlag - bit 0, [hl] - res 0, [hl] - jr nz, .skipSwitchToMapBank - ld a, [wCurMap] - call SwitchToMapRomBank -.skipSwitchToMapBank - ld a, 30 ; half a second - ld [hFrameCounter], a ; used as joypad poll timer - ld hl, wMapTextPtr - ld a, [hli] - ld h, [hl] - ld l, a ; hl = map text pointer - ld d, $00 - ld a, [hSpriteIndexOrTextID] ; text ID - ld [wSpriteIndex], a - and a - jp z, DisplayStartMenu - cp TEXT_SAFARI_GAME_OVER - jp z, DisplaySafariGameOverText - cp TEXT_MON_FAINTED - jp z, DisplayPokemonFaintedText - cp TEXT_BLACKED_OUT - jp z, DisplayPlayerBlackedOutText - cp TEXT_REPEL_WORE_OFF - jp z, DisplayRepelWoreOffText - ld a, [wNumSprites] - ld e, a - ld a, [hSpriteIndexOrTextID] ; sprite ID - cp e - jr z, .spriteHandling - jr nc, .skipSpriteHandling -.spriteHandling -; get the text ID of the sprite - push hl - push de - push bc - callba UpdateSpriteFacingOffsetAndDelayMovement ; update the graphics of the sprite the player is talking to (to face the right direction) - pop bc - pop de - ld hl, wMapSpriteData ; NPC text entries - ld a, [hSpriteIndexOrTextID] - dec a - add a - add l - ld l, a - jr nc, .noCarry - inc h -.noCarry - inc hl - ld a, [hl] ; a = text ID of the sprite - pop hl -.skipSpriteHandling -; look up the address of the text in the map's text entries - dec a - ld e, a - sla e - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a ; hl = address of the text - ld a, [hl] ; a = first byte of text -; check first byte of text for special cases - cp $fe ; Pokemart NPC - jp z, DisplayPokemartDialogue - cp $ff ; Pokemon Center NPC - jp z, DisplayPokemonCenterDialogue - cp $fc ; Item Storage PC - jp z, FuncTX_ItemStoragePC - cp $fd ; Bill's PC - jp z, FuncTX_BillsPC - cp $f9 ; Pokemon Center PC - jp z, FuncTX_PokemonCenterPC - cp $f5 ; Vending Machine - jr nz, .notVendingMachine - callba VendingMachineMenu ; jump banks to vending machine routine - jr AfterDisplayingTextID -.notVendingMachine - cp $f7 ; prize menu - jp z, FuncTX_GameCornerPrizeMenu - cp $f6 ; cable connection NPC in Pokemon Center - jr nz, .notSpecialCase - callab CableClubNPC - jr AfterDisplayingTextID -.notSpecialCase - call PrintText_NoCreatingTextBox ; display the text - ld a, [wDoNotWaitForButtonPressAfterDisplayingText] - and a - jr nz, HoldTextDisplayOpen - -AfterDisplayingTextID:: - ld a, [wEnteringCableClub] - and a - jr nz, HoldTextDisplayOpen - call WaitForTextScrollButtonPress ; wait for a button press after displaying all the text - -; loop to hold the dialogue box open as long as the player keeps holding down the A button -HoldTextDisplayOpen:: - call Joypad - ld a, [hJoyHeld] - bit 0, a ; is the A button being pressed? - jr nz, HoldTextDisplayOpen - -CloseTextDisplay:: - ld a, [wCurMap] - call SwitchToMapRomBank - ld a, $90 - ld [hWY], a ; move the window off the screen - call DelayFrame - call LoadGBPal - xor a - ld [hAutoBGTransferEnabled], a ; disable continuous WRAM to VRAM transfer each V-blank -; loop to make sprites face the directions they originally faced before the dialogue - ld hl, wSpriteStateData2 + $19 - ld c, $0f - ld de, $10 -.restoreSpriteFacingDirectionLoop - ld a, [hl] - dec h - ld [hl], a - inc h - add hl, de - dec c - jr nz, .restoreSpriteFacingDirectionLoop - ld a, BANK(InitMapSprites) - ld [hLoadedROMBank], a - ld [MBC1RomBank], a - call InitMapSprites ; reload sprite tile pattern data (since it was partially overwritten by text tile patterns) - ld hl, wFontLoaded - res 0, [hl] - ld a, [wd732] - bit 3, a ; used fly warp - call z, LoadPlayerSpriteGraphics - call LoadCurrentMapView - pop af - ld [hLoadedROMBank], a - ld [MBC1RomBank], a - jp UpdateSprites - -DisplayPokemartDialogue:: - push hl - ld hl, PokemartGreetingText - call PrintText - pop hl - inc hl - call LoadItemList - ld a, PRICEDITEMLISTMENU - ld [wListMenuID], a - ld a, [hLoadedROMBank] - push af - ld a, BANK(DisplayPokemartDialogue_) - ld [hLoadedROMBank], a - ld [MBC1RomBank], a - call DisplayPokemartDialogue_ - pop af - ld [hLoadedROMBank], a - ld [MBC1RomBank], a - jp AfterDisplayingTextID - -PokemartGreetingText:: - TX_FAR _PokemartGreetingText - db "@" - -LoadItemList:: - ld a, 1 - ld [wUpdateSpritesEnabled], a - ld a, h - ld [wItemListPointer], a - ld a, l - ld [wItemListPointer + 1], a - ld de, wItemList -.loop - ld a, [hli] - ld [de], a - inc de - cp $ff - jr nz, .loop - ret - -DisplayPokemonCenterDialogue:: -; zeroing these doesn't appear to serve any purpose - xor a - ld [hItemPrice], a - ld [hItemPrice + 1], a - ld [hItemPrice + 2], a - - inc hl - ld a, [hLoadedROMBank] - push af - ld a, BANK(DisplayPokemonCenterDialogue_) - ld [hLoadedROMBank], a - ld [MBC1RomBank], a - call DisplayPokemonCenterDialogue_ - pop af - ld [hLoadedROMBank], a - ld [MBC1RomBank], a - jp AfterDisplayingTextID - -DisplaySafariGameOverText:: - callab PrintSafariGameOverText - jp AfterDisplayingTextID - -DisplayPokemonFaintedText:: - ld hl, PokemonFaintedText - call PrintText - jp AfterDisplayingTextID - -PokemonFaintedText:: - TX_FAR _PokemonFaintedText - db "@" - -DisplayPlayerBlackedOutText:: - ld hl, PlayerBlackedOutText - call PrintText - ld a, [wd732] - res 5, a ; reset forced to use bike bit - ld [wd732], a - jp HoldTextDisplayOpen - -PlayerBlackedOutText:: - TX_FAR _PlayerBlackedOutText - db "@" - -DisplayRepelWoreOffText:: - ld hl, RepelWoreOffText - call PrintText - jp AfterDisplayingTextID - -RepelWoreOffText:: - TX_FAR _RepelWoreOffText - db "@" diff --git a/home/text.asm b/home/text.asm index 0d2ed0a2..d0fc8042 100644 --- a/home/text.asm +++ b/home/text.asm @@ -5,9 +5,9 @@ TextBoxBorder:: push hl ld a, "┌" ld [hli], a - inc a ; ─ - call NPlaceChar - inc a ; ┐ + inc a ; "─" + call .PlaceChars + inc a ; "┐" ld [hl], a pop hl @@ -20,7 +20,7 @@ TextBoxBorder:: ld a, "│" ld [hli], a ld a, " " - call NPlaceChar + call .PlaceChars ld [hl], "│" pop hl @@ -33,11 +33,11 @@ TextBoxBorder:: ld a, "└" ld [hli], a ld a, "─" - call NPlaceChar + call .PlaceChars ld [hl], "┘" ret -NPlaceChar:: +.PlaceChars:: ; Place char a c times. ld d, c .loop @@ -48,19 +48,19 @@ NPlaceChar:: PlaceString:: push hl + PlaceNextChar:: ld a, [de] - cp "@" - jr nz, Char4ETest + jr nz, .NotTerminator ld b, h ld c, l pop hl ret -Char4ETest:: - cp $4E ; next - jr nz, .char4FTest +.NotTerminator + cp "" + jr nz, .NotNext ld bc, 2 * SCREEN_WIDTH ld a, [hFlagsFFF6] bit 2, a @@ -70,142 +70,101 @@ Char4ETest:: pop hl add hl, bc push hl - jp PlaceNextChar_inc + jp NextChar -.char4FTest - cp $4F ; line - jr nz, .next3 +.NotNext + cp "" + jr nz, .NotLine pop hl coord hl, 1, 16 push hl - jp PlaceNextChar_inc - -.next3 ; Check against a dictionary -dict: macro -if \1 == 0 - and a -else - cp \1 -endc - jp z, \2 -endm - - dict $00, Char00 ; error - dict $4C, Char4C ; autocont - dict $4B, Char4B ; cont_ - dict $51, Char51 ; para - dict $49, Char49 ; page - dict $52, Char52 ; player - dict $53, Char53 ; rival - dict $54, Char54 ; POKé - dict $5B, Char5B ; PC - dict $5E, Char5E ; ROCKET - dict $5C, Char5C ; TM - dict $5D, Char5D ; TRAINER - dict $55, Char55 ; cont - dict $56, Char56 ; 6 dots - dict $57, Char57 ; done - dict $58, Char58 ; prompt - dict $4A, Char4A ; PKMN - dict $5F, Char5F ; dex - dict $59, Char59 ; TARGET - dict $5A, Char5A ; USER + jp NextChar + +.NotLine + +; Check against a dictionary + dict "", NullChar + dict "", _ContTextNoPause + dict "<_CONT>", _ContText + dict "", Paragraph + dict "", PageChar + dict "", PrintPlayerName + dict "", PrintRivalName + dict "#", PlacePOKe + dict "", PCChar + dict "", RocketChar + dict "", TMChar + dict "", TrainerChar + dict "", ContText + dict "<……>", SixDotsChar + dict "", DoneText + dict "", PromptText + dict "", PlacePKMN + dict "", PlaceDexEnd + dict "", PlaceMoveTargetsName + dict "", PlaceMoveUsersName ld [hli], a call PrintLetterDelay -PlaceNextChar_inc:: + +NextChar:: inc de jp PlaceNextChar -Char00:: +NullChar:: ld b, h ld c, l pop hl - ld de, Char00Text + ld de, TextIDErrorText dec de ret -Char00Text:: ; “%d ERROR.” - TX_FAR _Char00Text - db "@" - -Char52:: ; player’s name - push de - ld de, wPlayerName - jr FinishDTE - -Char53:: ; rival’s name - push de - ld de, wRivalName - jr FinishDTE - -Char5D:: ; TRAINER - push de - ld de, Char5DText - jr FinishDTE - -Char5C:: ; TM - push de - ld de, Char5CText - jr FinishDTE - -Char5B:: ; PC - push de - ld de, Char5BText - jr FinishDTE - -Char5E:: ; ROCKET - push de - ld de, Char5EText - jr FinishDTE - -Char54:: ; POKé - push de - ld de, Char54Text - jr FinishDTE +TextIDErrorText:: ; "[hSpriteIndexOrTextID] ERROR." + text_far _TextIDErrorText + text_end -Char56:: ; …… +print_name: MACRO push de - ld de, Char56Text - jr FinishDTE - -Char4A:: ; PKMN - push de - ld de, Char4AText - jr FinishDTE - -Char59:: -; depending on whose turn it is, print -; enemy active monster’s name, prefixed with “Enemy ” -; or -; player active monster’s name -; (like Char5A but flipped) + ld de, \1 + jr PlaceCommandCharacter +ENDM + +PrintPlayerName:: print_name wPlayerName +PrintRivalName:: print_name wRivalName + +TrainerChar:: print_name TrainerCharText +TMChar:: print_name TMCharText +PCChar:: print_name PCCharText +RocketChar:: print_name RocketCharText +PlacePOKe:: print_name PlacePOKeText +SixDotsChar:: print_name SixDotsCharText +PlacePKMN:: print_name PlacePKMNText + +PlaceMoveTargetsName:: ld a, [hWhoseTurn] xor 1 - jr MonsterNameCharsCommon + jr PlaceMoveUsersName.place -Char5A:: -; depending on whose turn it is, print -; player active monster’s name -; or -; enemy active monster’s name, prefixed with “Enemy ” +PlaceMoveUsersName:: ld a, [hWhoseTurn] -MonsterNameCharsCommon:: + +.place: push de and a - jr nz, .Enemy - ld de, wBattleMonNick ; player active monster name - jr FinishDTE + jr nz, .enemy -.Enemy - ; print “Enemy ” - ld de, Char5AText + ld de, wBattleMonNick + jr PlaceCommandCharacter + +.enemy + ld de, EnemyText call PlaceString ld h, b ld l, c - ld de, wEnemyMonNick ; enemy active monster name + ld de, wEnemyMonNick + ; fallthrough -FinishDTE:: +PlaceCommandCharacter:: call PlaceString ld h, b ld l, c @@ -213,28 +172,20 @@ FinishDTE:: inc de jp PlaceNextChar -Char5CText:: - db "TM@" -Char5DText:: - db "TRAINER@" -Char5BText:: - db "PC@" -Char5EText:: - db "ROCKET@" -Char54Text:: - db "POKé@" -Char56Text:: - db "……@" -Char5AText:: - db "Enemy @" -Char4AText:: - db $E1,$E2,"@" ; PKMN - -Char55:: +TMCharText:: db "TM@" +TrainerCharText:: db "TRAINER@" +PCCharText:: db "PC@" +RocketCharText:: db "ROCKET@" +PlacePOKeText:: db "POKé@" +SixDotsCharText:: db "……@" +EnemyText:: db "Enemy @" +PlacePKMNText:: db "@" + +ContText:: push de ld b, h ld c, l - ld hl, Char55Text + ld hl, ContCharText call TextCommandProcessor ld h, b ld l, c @@ -242,18 +193,16 @@ Char55:: inc de jp PlaceNextChar -Char55Text:: -; equivalent to Char4B - TX_FAR _Char55Text - db "@" +ContCharText:: + text_far _ContCharText + text_end -Char5F:: -; ends a Pokédex entry +PlaceDexEnd:: ld [hl], "." pop hl ret -Char58:: ; prompt +PromptText:: ld a, [wLinkState] cp LINK_STATE_BATTLING jp z, .ok @@ -264,16 +213,17 @@ Char58:: ; prompt call ManualTextScroll ld a, " " Coorda 18, 16 -Char57:: ; done + +DoneText:: pop hl - ld de, Char58Text + ld de, .stop dec de ret -Char58Text:: - db "@" +.stop: + text_end -Char51:: ; para +Paragraph:: push de ld a, "▼" Coorda 18, 16 @@ -286,9 +236,9 @@ Char51:: ; para call DelayFrames pop de coord hl, 1, 14 - jp PlaceNextChar_inc + jp NextChar -Char49:: +PageChar:: push de ld a, "▼" Coorda 18, 16 @@ -303,9 +253,9 @@ Char49:: pop hl coord hl, 1, 11 push hl - jp PlaceNextChar_inc + jp NextChar -Char4B:: +_ContText:: ld a, "▼" Coorda 18, 16 call ProtectedDelay3 @@ -314,14 +264,13 @@ Char4B:: pop de ld a, " " Coorda 18, 16 - ;fall through -Char4C:: +_ContTextNoPause:: push de call ScrollTextUpOneLine call ScrollTextUpOneLine coord hl, 1, 16 pop de - jp PlaceNextChar_inc + jp NextChar ; move both rows of text in the normal text box up one row ; always called twice in a row @@ -345,7 +294,6 @@ ScrollTextUpOneLine:: dec b jr nz, .clearText - ; wait five frames ld b, 5 .WaitFrame call DelayFrame @@ -375,18 +323,18 @@ TextCommandProcessor:: NextTextCommand:: ld a, [hli] - cp "@" ; terminator - jr nz, .doTextCommand + cp TX_END + jr nz, .TextCommand pop af ld [wLetterPrintingDelayFlags], a ret -.doTextCommand + +.TextCommand: push hl - cp $17 - jp z, TextCommand17 - cp $0e - jp nc, TextCommand0B ; if a != 0x17 and a >= 0xE, go to command 0xB -; if a < 0xE, use a jump table + cp TX_FAR + jp z, TextCommand_FAR + cp TX_SOUND_POKEDEX_RATING + jp nc, TextCommand_SOUND ld hl, TextCommandJumpTable push bc add a @@ -399,12 +347,8 @@ NextTextCommand:: ld l, a jp hl -; draw box -; 04AAAABBCC -; AAAA = address of upper left corner -; BB = height -; CC = width -TextCommand04:: +TextCommand_BOX:: +; draw a box (height, width) pop hl ld a, [hli] ld e, a @@ -421,9 +365,8 @@ TextCommand04:: pop hl jr NextTextCommand -; place string inline -; 00{string} -TextCommand00:: +TextCommand_START:: +; write text until "@" pop hl ld d, h ld e, l @@ -435,10 +378,8 @@ TextCommand00:: inc hl jr NextTextCommand -; place string from RAM -; 01AAAA -; AAAA = address of string -TextCommand01:: +TextCommand_RAM:: +; write text from a ram address (little endian) pop hl ld a, [hli] ld e, a @@ -451,13 +392,8 @@ TextCommand01:: pop hl jr NextTextCommand -; print BCD number -; 02AAAABB -; AAAA = address of BCD number -; BB -; bits 0-4 = length in bytes -; bits 5-7 = unknown flags -TextCommand02:: +TextCommand_BCD:: +; write bcd from address, typically ram pop hl ld a, [hli] ld e, a @@ -474,10 +410,8 @@ TextCommand02:: pop hl jr NextTextCommand -; repoint destination address -; 03AAAA -; AAAA = new destination address -TextCommand03:: +TextCommand_MOVE:: +; move to a new tile pop hl ld a, [hli] ld [wTextDest], a @@ -487,21 +421,17 @@ TextCommand03:: ld b, a jp NextTextCommand -; repoint destination to second line of dialogue text box -; 05 -; (no arguments) -TextCommand05:: +TextCommand_LOW:: +; write text at (1,16) pop hl - coord bc, 1, 16 ; address of second line of dialogue text box + coord bc, 1, 16 ; second line of dialogue text box jp NextTextCommand -; blink arrow and wait for A or B to be pressed -; 06 -; (no arguments) -TextCommand06:: +TextCommand_PROMPT_BUTTON:: +; wait for button press; show arrow ld a, [wLinkState] cp LINK_STATE_BATTLING - jp z, TextCommand0D + jp z, TextCommand_LINK_PROMPT_BUTTON ld a, "▼" Coorda 18, 16 ; place down arrow in lower right corner of dialogue text box push bc @@ -512,33 +442,26 @@ TextCommand06:: pop hl jp NextTextCommand -; scroll text up one line -; 07 -; (no arguments) -TextCommand07:: +TextCommand_SCROLL:: +; pushes text up two lines and sets the BC cursor to the border tile +; below the first character column of the text box. ld a, " " Coorda 18, 16 ; place blank space in lower right corner of dialogue text box call ScrollTextUpOneLine call ScrollTextUpOneLine pop hl - coord bc, 1, 16 ; address of second line of dialogue text box + coord bc, 1, 16 ; second line of dialogue text box jp NextTextCommand -; execute asm inline -; 08{code} -TextCommand08:: +TextCommand_START_ASM:: +; run assembly code pop hl ld de, NextTextCommand - push de ; return address + push de jp hl -; print decimal number (converted from binary number) -; 09AAAABB -; AAAA = address of number -; BB -; bits 0-3 = how many digits to display -; bits 4-7 = how long the number is in bytes -TextCommand09:: +TextCommand_NUM:: +; print a number pop hl ld a, [hli] ld e, a @@ -554,7 +477,7 @@ TextCommand09:: ld a, b and $f0 swap a - set BIT_LEFT_ALIGN,a + set BIT_LEFT_ALIGN, a ld b, a call PrintNumber ld b, h @@ -562,45 +485,42 @@ TextCommand09:: pop hl jp NextTextCommand -; wait half a second if the user doesn't hold A or B -; 0A -; (no arguments) -TextCommand0A:: +TextCommand_PAUSE:: +; wait for button press or 30 frames push bc call Joypad ld a, [hJoyHeld] and A_BUTTON | B_BUTTON - jr nz, .skipDelay - ld c, 30 + jr nz, .done + ld c, 30 ; half a second call DelayFrames -.skipDelay +.done pop bc pop hl jp NextTextCommand -; plays sounds -; this actually handles various command ID's, not just 0B -; (no arguments) -TextCommand0B:: +TextCommand_SOUND:: +; play a sound effect from TextCommandSounds pop hl push bc dec hl ld a, [hli] - ld b, a ; b = command number that got us here + ld b, a ; b = text command number that got us here push hl ld hl, TextCommandSounds .loop ld a, [hli] cp b - jr z, .matchFound + jr z, .play inc hl jr .loop -.matchFound - cp $14 + +.play + cp TX_SOUND_CRY_NIDORINA jr z, .pokemonCry - cp $15 + cp TX_SOUND_CRY_PIDGEOT jr z, .pokemonCry - cp $16 + cp TX_SOUND_CRY_DEWGONG jr z, .pokemonCry ld a, [hl] call PlaySound @@ -608,6 +528,7 @@ TextCommand0B:: pop hl pop bc jp NextTextCommand + .pokemonCry push de ld a, [hl] @@ -617,29 +538,27 @@ TextCommand0B:: pop bc jp NextTextCommand -; format: text command ID, sound ID or cry ID TextCommandSounds:: - db $0B, SFX_GET_ITEM_1 ; actually plays SFX_LEVEL_UP when the battle music engine is loaded - db $12, SFX_CAUGHT_MON - db $0E, SFX_POKEDEX_RATING ; unused? - db $0F, SFX_GET_ITEM_1 ; unused? - db $10, SFX_GET_ITEM_2 - db $11, SFX_GET_KEY_ITEM - db $13, SFX_DEX_PAGE_ADDED - db $14, NIDORINA ; used in OakSpeech - db $15, PIDGEOT ; used in SaffronCityText12 - db $16, DEWGONG ; unused? - -; draw ellipses -; 0CAA -; AA = number of ellipses to draw -TextCommand0C:: + db TX_SOUND_GET_ITEM_1, SFX_GET_ITEM_1 ; actually plays SFX_LEVEL_UP when the battle music engine is loaded + db TX_SOUND_CAUGHT_MON, SFX_CAUGHT_MON + db TX_SOUND_POKEDEX_RATING, SFX_POKEDEX_RATING ; unused + db TX_SOUND_GET_ITEM_1_DUPLICATE, SFX_GET_ITEM_1 ; unused + db TX_SOUND_GET_ITEM_2, SFX_GET_ITEM_2 + db TX_SOUND_GET_KEY_ITEM, SFX_GET_KEY_ITEM + db TX_SOUND_DEX_PAGE_ADDED, SFX_DEX_PAGE_ADDED + db TX_SOUND_CRY_NIDORINA, NIDORINA ; used in OakSpeech + db TX_SOUND_CRY_PIDGEOT, PIDGEOT ; used in SaffronCityText12 + db TX_SOUND_CRY_DEWGONG, DEWGONG ; unused + +TextCommand_DOTS:: +; wait for button press or 30 frames while printing "…"s pop hl ld a, [hli] ld d, a push hl ld h, b ld l, c + .loop ld a, "…" ld [hli], a @@ -648,64 +567,66 @@ TextCommand0C:: pop de ld a, [hJoyHeld] ; joypad state and A_BUTTON | B_BUTTON - jr nz, .skipDelay ; if so, skip the delay + jr nz, .next ; if so, skip the delay ld c, 10 call DelayFrames -.skipDelay +.next dec d jr nz, .loop + ld b, h ld c, l pop hl jp NextTextCommand -; wait for A or B to be pressed -; 0D -; (no arguments) -TextCommand0D:: +TextCommand_LINK_PROMPT_BUTTON:: +; wait for button press; display arrow push bc - call ManualTextScroll ; wait for A or B to be pressed + call ManualTextScroll pop bc pop hl jp NextTextCommand -; process text commands in another ROM bank -; 17AAAABB -; AAAA = address of text commands -; BB = bank -TextCommand17:: +TextCommand_FAR:: +; write text from a different bank (little endian) pop hl ld a, [hLoadedROMBank] push af + ld a, [hli] ld e, a ld a, [hli] ld d, a ld a, [hli] + ld [hLoadedROMBank], a ld [MBC1RomBank], a + push hl ld l, e ld h, d call TextCommandProcessor pop hl + pop af ld [hLoadedROMBank], a ld [MBC1RomBank], a jp NextTextCommand TextCommandJumpTable:: - dw TextCommand00 - dw TextCommand01 - dw TextCommand02 - dw TextCommand03 - dw TextCommand04 - dw TextCommand05 - dw TextCommand06 - dw TextCommand07 - dw TextCommand08 - dw TextCommand09 - dw TextCommand0A - dw TextCommand0B - dw TextCommand0C - dw TextCommand0D +; entries correspond to TX_* constants (see macros/scripts/text.asm) + dw TextCommand_START ; TX_START + dw TextCommand_RAM ; TX_RAM + dw TextCommand_BCD ; TX_BCD + dw TextCommand_MOVE ; TX_MOVE + dw TextCommand_BOX ; TX_BOX + dw TextCommand_LOW ; TX_LOW + dw TextCommand_PROMPT_BUTTON ; TX_PROMPT_BUTTON + dw TextCommand_SCROLL ; TX_SCROLL + dw TextCommand_START_ASM ; TX_START_ASM + dw TextCommand_NUM ; TX_NUM + dw TextCommand_PAUSE ; TX_PAUSE + dw TextCommand_SOUND ; TX_SOUND_GET_ITEM_1 (also handles other TX_SOUND_* commands) + dw TextCommand_DOTS ; TX_DOTS + dw TextCommand_LINK_PROMPT_BUTTON ; TX_LINK_PROMPT_BUTTON + ; greater TX_* constants are handled directly by NextTextCommand diff --git a/home/text_script.asm b/home/text_script.asm new file mode 100644 index 00000000..8bfe0927 --- /dev/null +++ b/home/text_script.asm @@ -0,0 +1,231 @@ +; this function is used to display sign messages, sprite dialog, etc. +; INPUT: [hSpriteIndexOrTextID] = sprite ID or text ID +DisplayTextID:: + ld a, [hLoadedROMBank] + push af + callba DisplayTextIDInit ; initialization + ld hl, wTextPredefFlag + bit 0, [hl] + res 0, [hl] + jr nz, .skipSwitchToMapBank + ld a, [wCurMap] + call SwitchToMapRomBank +.skipSwitchToMapBank + ld a, 30 ; half a second + ld [hFrameCounter], a ; used as joypad poll timer + ld hl, wMapTextPtr + ld a, [hli] + ld h, [hl] + ld l, a ; hl = map text pointer + ld d, $00 + ld a, [hSpriteIndexOrTextID] ; text ID + ld [wSpriteIndex], a + + dict TEXT_START_MENU, DisplayStartMenu + dict TEXT_SAFARI_GAME_OVER, DisplaySafariGameOverText + dict TEXT_MON_FAINTED, DisplayPokemonFaintedText + dict TEXT_BLACKED_OUT, DisplayPlayerBlackedOutText + dict TEXT_REPEL_WORE_OFF, DisplayRepelWoreOffText + + ld a, [wNumSprites] + ld e, a + ld a, [hSpriteIndexOrTextID] ; sprite ID + cp e + jr z, .spriteHandling + jr nc, .skipSpriteHandling +.spriteHandling +; get the text ID of the sprite + push hl + push de + push bc + callba UpdateSpriteFacingOffsetAndDelayMovement ; update the graphics of the sprite the player is talking to (to face the right direction) + pop bc + pop de + ld hl, wMapSpriteData ; NPC text entries + ld a, [hSpriteIndexOrTextID] + dec a + add a + add l + ld l, a + jr nc, .noCarry + inc h +.noCarry + inc hl + ld a, [hl] ; a = text ID of the sprite + pop hl +.skipSpriteHandling +; look up the address of the text in the map's text entries + dec a + ld e, a + sla e + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a ; hl = address of the text + ld a, [hl] ; a = first byte of text + +; check first byte of text for special cases + +dict2: MACRO + cp \1 + jr nz, .not\@ + \2 + jr AfterDisplayingTextID +.not\@ +ENDM + + dict TX_SCRIPT_MART, DisplayPokemartDialogue + dict TX_SCRIPT_POKECENTER_NURSE, DisplayPokemonCenterDialogue + dict TX_SCRIPT_PLAYERS_PC, TextScript_ItemStoragePC + dict TX_SCRIPT_BILLS_PC, TextScript_BillsPC + dict TX_SCRIPT_POKECENTER_PC, TextScript_PokemonCenterPC + dict2 TX_SCRIPT_VENDING_MACHINE, callba VendingMachineMenu + dict TX_SCRIPT_PRIZE_VENDOR, TextScript_GameCornerPrizeMenu + dict2 TX_SCRIPT_CABLE_CLUB_RECEPTIONIST, callab CableClubNPC + + call PrintText_NoCreatingTextBox ; display the text + ld a, [wDoNotWaitForButtonPressAfterDisplayingText] + and a + jr nz, HoldTextDisplayOpen + +AfterDisplayingTextID:: + ld a, [wEnteringCableClub] + and a + jr nz, HoldTextDisplayOpen + call WaitForTextScrollButtonPress ; wait for a button press after displaying all the text + +; loop to hold the dialogue box open as long as the player keeps holding down the A button +HoldTextDisplayOpen:: + call Joypad + ld a, [hJoyHeld] + bit 0, a ; is the A button being pressed? + jr nz, HoldTextDisplayOpen + +CloseTextDisplay:: + ld a, [wCurMap] + call SwitchToMapRomBank + ld a, $90 + ld [hWY], a ; move the window off the screen + call DelayFrame + call LoadGBPal + xor a + ld [hAutoBGTransferEnabled], a ; disable continuous WRAM to VRAM transfer each V-blank +; loop to make sprites face the directions they originally faced before the dialogue + ld hl, wSpriteStateData2 + $19 + ld c, $0f + ld de, $10 +.restoreSpriteFacingDirectionLoop + ld a, [hl] + dec h + ld [hl], a + inc h + add hl, de + dec c + jr nz, .restoreSpriteFacingDirectionLoop + ld a, BANK(InitMapSprites) + ld [hLoadedROMBank], a + ld [MBC1RomBank], a + call InitMapSprites ; reload sprite tile pattern data (since it was partially overwritten by text tile patterns) + ld hl, wFontLoaded + res 0, [hl] + ld a, [wd732] + bit 3, a ; used fly warp + call z, LoadPlayerSpriteGraphics + call LoadCurrentMapView + pop af + ld [hLoadedROMBank], a + ld [MBC1RomBank], a + jp UpdateSprites + +DisplayPokemartDialogue:: + push hl + ld hl, PokemartGreetingText + call PrintText + pop hl + inc hl + call LoadItemList + ld a, PRICEDITEMLISTMENU + ld [wListMenuID], a + ld a, [hLoadedROMBank] + push af + ld a, BANK(DisplayPokemartDialogue_) + ld [hLoadedROMBank], a + ld [MBC1RomBank], a + call DisplayPokemartDialogue_ + pop af + ld [hLoadedROMBank], a + ld [MBC1RomBank], a + jp AfterDisplayingTextID + +PokemartGreetingText:: + text_far _PokemartGreetingText + text_end + +LoadItemList:: + ld a, 1 + ld [wUpdateSpritesEnabled], a + ld a, h + ld [wItemListPointer], a + ld a, l + ld [wItemListPointer + 1], a + ld de, wItemList +.loop + ld a, [hli] + ld [de], a + inc de + cp $ff + jr nz, .loop + ret + +DisplayPokemonCenterDialogue:: +; zeroing these doesn't appear to serve any purpose + xor a + ld [hItemPrice], a + ld [hItemPrice + 1], a + ld [hItemPrice + 2], a + + inc hl + ld a, [hLoadedROMBank] + push af + ld a, BANK(DisplayPokemonCenterDialogue_) + ld [hLoadedROMBank], a + ld [MBC1RomBank], a + call DisplayPokemonCenterDialogue_ + pop af + ld [hLoadedROMBank], a + ld [MBC1RomBank], a + jp AfterDisplayingTextID + +DisplaySafariGameOverText:: + callab PrintSafariGameOverText + jp AfterDisplayingTextID + +DisplayPokemonFaintedText:: + ld hl, PokemonFaintedText + call PrintText + jp AfterDisplayingTextID + +PokemonFaintedText:: + text_far _PokemonFaintedText + text_end + +DisplayPlayerBlackedOutText:: + ld hl, PlayerBlackedOutText + call PrintText + ld a, [wd732] + res 5, a ; reset forced to use bike bit + ld [wd732], a + jp HoldTextDisplayOpen + +PlayerBlackedOutText:: + text_far _PlayerBlackedOutText + text_end + +DisplayRepelWoreOffText:: + ld hl, RepelWoreOffText + call PrintText + jp AfterDisplayingTextID + +RepelWoreOffText:: + text_far _RepelWoreOffText + text_end diff --git a/home/trainers.asm b/home/trainers.asm index 9c3519a2..22601db8 100644 --- a/home/trainers.asm +++ b/home/trainers.asm @@ -371,8 +371,8 @@ GetSavedEndBattleTextPointer:: ret TrainerEndBattleText:: - TX_FAR _TrainerNameText - TX_ASM + text_far _TrainerNameText + text_asm call GetSavedEndBattleTextPointer call TextCommandProcessor jp TextScriptEnd -- cgit v1.3.1-sl0p From b0aa4cb14a602bc2acf15bc0f2591a94a30487a2 Mon Sep 17 00:00:00 2001 From: Rangi Date: Sun, 5 Jul 2020 16:35:06 -0400 Subject: Port two HRAM labels from pokeyellow --- engine/overworld/hidden_objects.asm | 10 +++++----- home.asm | 4 ++-- home/overworld.asm | 2 +- hram.asm | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) (limited to 'home') diff --git a/engine/overworld/hidden_objects.asm b/engine/overworld/hidden_objects.asm index a19694e0..d4a0a2bd 100755 --- a/engine/overworld/hidden_objects.asm +++ b/engine/overworld/hidden_objects.asm @@ -14,14 +14,14 @@ IsPlayerOnDungeonWarp:: set 4, [hl] ret -; if a hidden object was found, stores $00 in [hFoundHiddenObject], else stores $ff +; if a hidden object was found, stores $00 in [hDidntFindAnyHiddenObject], else stores $ff CheckForHiddenObject:: - ld hl, hFoundHiddenObjectOrBookshelf + ld hl, hItemAlreadyFound xor a - ld [hli], a ; [hFoundHiddenObjectOrBookshelf] + ld [hli], a ; [hItemAlreadyFound] ld [hli], a ; [hSavedMapTextPtr] ld [hli], a ; [hSavedMapTextPtr + 1] - ld [hl], a ; [hFoundHiddenObject] + ld [hl], a ; [hDidntFindAnyHiddenObject] ld de, $0 ld hl, HiddenObjectMaps .hiddenMapLoop @@ -81,7 +81,7 @@ CheckForHiddenObject:: ret .noMatch ld a, $ff - ld [hFoundHiddenObject], a + ld [hDidntFindAnyHiddenObject], a ret ; checks if the coordinates in front of the player's sprite match Y in b and X in c diff --git a/home.asm b/home.asm index 811c544f..0e977d11 100644 --- a/home.asm +++ b/home.asm @@ -1752,7 +1752,7 @@ CheckForHiddenObjectOrBookshelfOrCardKeyDoor:: ld [MBC1RomBank], a ld [hLoadedROMBank], a call CheckForHiddenObject - ld a, [hFoundHiddenObject] + ld a, [hDidntFindAnyHiddenObject] and a jr nz, .hiddenObjectNotFound ld a, [wHiddenObjectFunctionRomBank] @@ -1772,7 +1772,7 @@ CheckForHiddenObjectOrBookshelfOrCardKeyDoor:: .nothingFound ld a, $ff .done - ld [hFoundHiddenObjectOrBookshelf], a + ld [hItemAlreadyFound], a pop af ld [MBC1RomBank], a ld [hLoadedROMBank], a diff --git a/home/overworld.asm b/home/overworld.asm index c16c121c..b17208c7 100644 --- a/home/overworld.asm +++ b/home/overworld.asm @@ -88,7 +88,7 @@ OverworldLoopLessDelay:: call IsPlayerCharacterBeingControlledByGame jr nz, .checkForOpponent call CheckForHiddenObjectOrBookshelfOrCardKeyDoor - ld a, [hFoundHiddenObjectOrBookshelf] + ld 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 call IsSpriteOrSignInFrontOfPlayer diff --git a/hram.asm b/hram.asm index ab18b8c9..ee557050 100644 --- a/hram.asm +++ b/hram.asm @@ -350,8 +350,8 @@ hSpriteScreenXCoord EQU $FFEC hSpriteMapYCoord EQU $FFED hSpriteMapXCoord EQU $FFEE -hFoundHiddenObjectOrBookshelf EQU $FFEB -hFoundHiddenObject EQU $FFEE +hItemAlreadyFound EQU $FFEB +hDidntFindAnyHiddenObject EQU $FFEE hSavedMapTextPtr EQU $FFEC -- cgit v1.3.1-sl0p From 2b2ed54bbf017943ba2343cd6c1dbe88b8f34a4e Mon Sep 17 00:00:00 2001 From: Rangi Date: Sun, 5 Jul 2020 17:29:11 -0400 Subject: Identify wSpriteStateData1 and wSpriteStateData2 offsets, like pokeyellow --- engine/battle/battle_transitions.asm | 2 +- engine/events/card_key.asm | 2 +- engine/events/hidden_objects/bench_guys.asm | 2 +- engine/events/hidden_objects/bills_house_pc.asm | 2 +- engine/events/hidden_objects/bookshelves.asm | 2 +- engine/events/hidden_objects/cinnabar_gym_quiz.asm | 2 +- engine/events/hidden_objects/gym_statues.asm | 2 +- engine/events/hidden_objects/indigo_plateau_hq.asm | 2 +- engine/events/hidden_objects/oaks_lab_email.asm | 2 +- engine/events/hidden_objects/pokecenter_pc.asm | 4 +- .../events/hidden_objects/route_15_binoculars.asm | 2 +- engine/events/pokecenter.asm | 4 +- engine/menus/display_text_id_init.asm | 4 +- engine/movie/oak_speech/oak_speech.asm | 4 +- engine/overworld/auto_movement.asm | 6 +-- engine/overworld/cut.asm | 4 +- engine/overworld/dust_smoke.asm | 2 +- engine/overworld/emotion_bubbles.asm | 2 +- engine/overworld/hidden_objects.asm | 2 +- engine/overworld/ledges.asm | 2 +- engine/overworld/map_sprites.asm | 20 ++++----- engine/overworld/movement.asm | 50 +++++++++++----------- engine/overworld/pathfinding.asm | 6 +-- engine/overworld/player_animations.asm | 36 ++++++++-------- engine/overworld/player_state.asm | 12 +++--- engine/overworld/push_boulder.asm | 4 +- engine/overworld/sprite_collisions.asm | 6 +-- engine/overworld/trainer_sight.asm | 28 ++++++------ engine/pokemon/bills_pc.asm | 6 +-- engine/slots/game_corner_slots2.asm | 2 +- home.asm | 10 ++--- home/overworld.asm | 42 +++++++++--------- home/text_script.asm | 2 +- macros/wram.asm | 7 ++- scripts/BillsHouse.asm | 2 +- scripts/CeruleanCity.asm | 2 +- scripts/CinnabarIsland.asm | 2 +- scripts/CopycatsHouse2F.asm | 2 +- scripts/OaksLab.asm | 6 +-- scripts/PalletTown.asm | 2 +- scripts/PokemonMansion1F.asm | 2 +- scripts/PokemonMansion2F.asm | 2 +- scripts/PokemonMansion3F.asm | 2 +- scripts/PokemonMansionB1F.asm | 2 +- scripts/PokemonTower6F.asm | 2 +- scripts/PokemonTower7F.asm | 2 +- scripts/RedsHouse1F.asm | 2 +- scripts/RocketHideoutB2F.asm | 4 +- scripts/Route11Gate2F.asm | 2 +- scripts/Route12Gate2F.asm | 2 +- scripts/Route22.asm | 2 +- scripts/Route22Gate.asm | 2 +- scripts/Route23.asm | 2 +- scripts/Route6Gate.asm | 2 +- scripts/Route7Gate.asm | 2 +- scripts/Route8Gate.asm | 2 +- scripts/SafariZoneGate.asm | 6 +-- scripts/SeafoamIslandsB3F.asm | 2 +- scripts/TradeCenter.asm | 8 ++-- scripts/VermilionCity.asm | 4 +- scripts/VermilionDock.asm | 4 +- scripts/ViridianCity.asm | 2 +- 62 files changed, 182 insertions(+), 179 deletions(-) (limited to 'home') diff --git a/engine/battle/battle_transitions.asm b/engine/battle/battle_transitions.asm index 98e87dc0..548e85fb 100644 --- a/engine/battle/battle_transitions.asm +++ b/engine/battle/battle_transitions.asm @@ -10,7 +10,7 @@ BattleTransition: ; Determine which OAM block is being used by the enemy trainer sprite (if there ; is one). - ld hl, wSpriteStateData1 + 2 + ld hl, wSpritePlayerStateData1ImageIndex ld a, [hSpriteIndexOrTextID] ; enemy trainer sprite index (0 if wild battle) ld c, a ld b, 0 diff --git a/engine/events/card_key.asm b/engine/events/card_key.asm index cc641893..a37a1f27 100755 --- a/engine/events/card_key.asm +++ b/engine/events/card_key.asm @@ -88,7 +88,7 @@ GetCoordsInFrontOfPlayer: ld d, a ld a, [wXCoord] ld e, a - ld a, [wSpriteStateData1 + 9] ; player's sprite facing direction + ld a, [wSpritePlayerStateData1FacingDirection] and a jr nz, .notFacingDown ; facing down diff --git a/engine/events/hidden_objects/bench_guys.asm b/engine/events/hidden_objects/bench_guys.asm index a6db73b9..d5db99ec 100644 --- a/engine/events/hidden_objects/bench_guys.asm +++ b/engine/events/hidden_objects/bench_guys.asm @@ -15,7 +15,7 @@ PrintBenchGuyText: .match ld a, [hli] ld b, a - ld a, [wSpriteStateData1 + 9] + ld a, [wSpritePlayerStateData1FacingDirection] cp b jr nz, .loop ; player isn't facing left at the bench guy ld a, [hl] diff --git a/engine/events/hidden_objects/bills_house_pc.asm b/engine/events/hidden_objects/bills_house_pc.asm index d6e9c19a..92679d66 100644 --- a/engine/events/hidden_objects/bills_house_pc.asm +++ b/engine/events/hidden_objects/bills_house_pc.asm @@ -1,6 +1,6 @@ BillsHousePC: call EnableAutoTextBoxDrawing - ld a, [wSpriteStateData1 + 9] + ld a, [wSpritePlayerStateData1FacingDirection] cp SPRITE_FACING_UP ret nz CheckEvent EVENT_LEFT_BILLS_HOUSE_AFTER_HELPING diff --git a/engine/events/hidden_objects/bookshelves.asm b/engine/events/hidden_objects/bookshelves.asm index eaf744ff..9cdd037a 100644 --- a/engine/events/hidden_objects/bookshelves.asm +++ b/engine/events/hidden_objects/bookshelves.asm @@ -1,6 +1,6 @@ ; prints text for bookshelves in buildings without sign events PrintBookshelfText:: - ld a, [wSpriteStateData1 + 9] ; player's sprite facing direction + ld a, [wSpritePlayerStateData1FacingDirection] cp SPRITE_FACING_UP jr nz, .noMatch ; facing up diff --git a/engine/events/hidden_objects/cinnabar_gym_quiz.asm b/engine/events/hidden_objects/cinnabar_gym_quiz.asm index 9412ee45..da309f87 100644 --- a/engine/events/hidden_objects/cinnabar_gym_quiz.asm +++ b/engine/events/hidden_objects/cinnabar_gym_quiz.asm @@ -1,5 +1,5 @@ PrintCinnabarQuiz: - ld a, [wSpriteStateData1 + 9] + ld a, [wSpritePlayerStateData1FacingDirection] cp SPRITE_FACING_UP ret nz call EnableAutoTextBoxDrawing diff --git a/engine/events/hidden_objects/gym_statues.asm b/engine/events/hidden_objects/gym_statues.asm index 3a17557f..1f592f2f 100644 --- a/engine/events/hidden_objects/gym_statues.asm +++ b/engine/events/hidden_objects/gym_statues.asm @@ -3,7 +3,7 @@ GymStatues: ; if in a gym and don’t have the corresponding badge, a = GymStatueText1_id and jp PrintPredefTextID ; else ret call EnableAutoTextBoxDrawing - ld a, [wSpriteStateData1 + 9] + ld a, [wSpritePlayerStateData1FacingDirection] cp SPRITE_FACING_UP ret nz ld hl, .BadgeFlags diff --git a/engine/events/hidden_objects/indigo_plateau_hq.asm b/engine/events/hidden_objects/indigo_plateau_hq.asm index 840c114d..e8fd0220 100644 --- a/engine/events/hidden_objects/indigo_plateau_hq.asm +++ b/engine/events/hidden_objects/indigo_plateau_hq.asm @@ -1,5 +1,5 @@ PrintIndigoPlateauHQText: - ld a, [wSpriteStateData1 + 9] + ld a, [wSpritePlayerStateData1FacingDirection] cp SPRITE_FACING_UP ret nz call EnableAutoTextBoxDrawing diff --git a/engine/events/hidden_objects/oaks_lab_email.asm b/engine/events/hidden_objects/oaks_lab_email.asm index cf3b2c9e..b66babe0 100644 --- a/engine/events/hidden_objects/oaks_lab_email.asm +++ b/engine/events/hidden_objects/oaks_lab_email.asm @@ -1,5 +1,5 @@ DisplayOakLabEmailText: - ld a, [wSpriteStateData1 + 9] + ld a, [wSpritePlayerStateData1FacingDirection] cp SPRITE_FACING_UP ret nz call EnableAutoTextBoxDrawing diff --git a/engine/events/hidden_objects/pokecenter_pc.asm b/engine/events/hidden_objects/pokecenter_pc.asm index 9a2ab064..9ae7d41c 100644 --- a/engine/events/hidden_objects/pokecenter_pc.asm +++ b/engine/events/hidden_objects/pokecenter_pc.asm @@ -1,6 +1,6 @@ OpenPokemonCenterPC: - ld a, [wSpriteStateData1 + 9] - cp SPRITE_FACING_UP ; check to see if player is facing up + ld a, [wSpritePlayerStateData1FacingDirection] + cp SPRITE_FACING_UP ret nz call EnableAutoTextBoxDrawing ld a, $1 diff --git a/engine/events/hidden_objects/route_15_binoculars.asm b/engine/events/hidden_objects/route_15_binoculars.asm index 028ea30d..ce047c2f 100644 --- a/engine/events/hidden_objects/route_15_binoculars.asm +++ b/engine/events/hidden_objects/route_15_binoculars.asm @@ -1,5 +1,5 @@ Route15GateLeftBinoculars: - ld a, [wSpriteStateData1 + 9] + ld a, [wSpritePlayerStateData1FacingDirection] cp SPRITE_FACING_UP ret nz call EnableAutoTextBoxDrawing diff --git a/engine/events/pokecenter.asm b/engine/events/pokecenter.asm index f6ec6491..030c333f 100755 --- a/engine/events/pokecenter.asm +++ b/engine/events/pokecenter.asm @@ -19,7 +19,7 @@ DisplayPokemonCenterDialogue_:: ld hl, NeedYourPokemonText call PrintText ld a, $18 - ld [wSpriteStateData1 + $12], a ; make the nurse turn to face the machine + ld [wSprite01StateData1ImageIndex], a ; make the nurse turn to face the machine call Delay3 predef HealParty callba AnimateHealingMachine ; do the healing machine animation @@ -34,7 +34,7 @@ DisplayPokemonCenterDialogue_:: ld hl, PokemonFightingFitText call PrintText ld a, $14 - ld [wSpriteStateData1 + $12], a ; make the nurse bow + ld [wSprite01StateData1ImageIndex], a ; make the nurse bow ld c, a call DelayFrames jr .done diff --git a/engine/menus/display_text_id_init.asm b/engine/menus/display_text_id_init.asm index 45c76f9c..c02e5bbc 100644 --- a/engine/menus/display_text_id_init.asm +++ b/engine/menus/display_text_id_init.asm @@ -41,7 +41,7 @@ DisplayTextIDInit:: ; loop to copy C1X9 (direction the sprite is facing) to C2X9 for each sprite ; 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, wSpriteStateData1 + $19 + ld hl, wSprite01StateData1FacingDirection ld c, $0f ld de, $10 .spriteFacingDirectionCopyLoop @@ -54,7 +54,7 @@ DisplayTextIDInit:: jr nz, .spriteFacingDirectionCopyLoop ; 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, wSpriteStateData1 + 2 + ld hl, wSpritePlayerStateData1ImageIndex ld de, $10 ld c, e .spriteStandStillLoop diff --git a/engine/movie/oak_speech/oak_speech.asm b/engine/movie/oak_speech/oak_speech.asm index e6087012..0dd0c2dc 100755 --- a/engine/movie/oak_speech/oak_speech.asm +++ b/engine/movie/oak_speech/oak_speech.asm @@ -9,8 +9,8 @@ SetDefaultNames: ld bc, wBoxDataEnd - wPlayerName xor a call FillMemory - ld hl, wSpriteStateData1 - ld bc, $200 + ld hl, wSpriteDataStart + ld bc, wSpriteDataEnd - wSpriteDataStart xor a call FillMemory pop af diff --git a/engine/overworld/auto_movement.asm b/engine/overworld/auto_movement.asm index 421e3180..5e70ab8c 100755 --- a/engine/overworld/auto_movement.asm +++ b/engine/overworld/auto_movement.asm @@ -12,7 +12,7 @@ PlayerStepOutFromDoor:: ld a, D_DOWN ld [wSimulatedJoypadStatesEnd], a xor a - ld [wSpriteStateData1 + 2], a + ld [wSpritePlayerStateData1ImageIndex], a call StartSimulatingJoypadStates ret .notStandingOnDoor @@ -110,7 +110,7 @@ PalletMovementScript_WalkToLab: swap a ld [wNPCMovementScriptSpriteOffset], a xor a - ld [wSpriteStateData2 + $06], a + ld [wSpritePlayerStateData2MovementByte1], a ld hl, wSimulatedJoypadStatesEnd ld de, RLEList_PlayerWalkToLab call DecodeRLEList @@ -228,7 +228,7 @@ PewterMovementScript_WalkToGym: swap a ld [wNPCMovementScriptSpriteOffset], a xor a - ld [wSpriteStateData2 + $06], a + ld [wSpritePlayerStateData2MovementByte1], a ld hl, wSimulatedJoypadStatesEnd ld de, RLEList_PewterGymPlayer call DecodeRLEList diff --git a/engine/overworld/cut.asm b/engine/overworld/cut.asm index dd9b7c1a..f99bf323 100755 --- a/engine/overworld/cut.asm +++ b/engine/overworld/cut.asm @@ -127,7 +127,7 @@ CutOrBoulderDustAnimationTilesAndAttributes: db $FE,$10,$FF,$10 GetCutOrBoulderDustAnimationOffsets: - ld hl, wSpriteStateData1 + 4 + ld hl, wSpritePlayerStateData1YPixels ld a, [hli] ; player's sprite screen Y position ld b, a inc hl @@ -187,7 +187,7 @@ ReplaceTreeTileBlock: ld h, [hl] ld l, a add hl, bc - ld a, [wSpriteStateData1 + 9] ; player sprite's facing direction + ld a, [wSpritePlayerStateData1FacingDirection] and a jr z, .down cp SPRITE_FACING_UP diff --git a/engine/overworld/dust_smoke.asm b/engine/overworld/dust_smoke.asm index 6c26b712..2dc6882e 100755 --- a/engine/overworld/dust_smoke.asm +++ b/engine/overworld/dust_smoke.asm @@ -30,7 +30,7 @@ AnimateBoulderDust: jp LoadPlayerSpriteGraphics GetMoveBoulderDustFunctionPointer: - ld a, [wSpriteStateData1 + 9] ; player's sprite facing direction + ld a, [wSpritePlayerStateData1FacingDirection] ld hl, MoveBoulderDustFunctionPointerTable ld c, a ld b, $0 diff --git a/engine/overworld/emotion_bubbles.asm b/engine/overworld/emotion_bubbles.asm index 20309fc1..1ac07b80 100755 --- a/engine/overworld/emotion_bubbles.asm +++ b/engine/overworld/emotion_bubbles.asm @@ -38,7 +38,7 @@ EmotionBubble: jr nz, .loop ; get the screen coordinates of the sprite the bubble is to be displayed above - ld hl, wSpriteStateData1 + 4 + ld hl, wSpritePlayerStateData1YPixels ld a, [wEmotionBubbleSpriteIndex] swap a ld c, a diff --git a/engine/overworld/hidden_objects.asm b/engine/overworld/hidden_objects.asm index d4a0a2bd..5ce7f3cb 100755 --- a/engine/overworld/hidden_objects.asm +++ b/engine/overworld/hidden_objects.asm @@ -87,7 +87,7 @@ CheckForHiddenObject:: ; 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, [wSpriteStateData1 + 9] ; player's sprite facing direction + ld a, [wSpritePlayerStateData1FacingDirection] cp SPRITE_FACING_UP jr z, .facingUp cp SPRITE_FACING_LEFT diff --git a/engine/overworld/ledges.asm b/engine/overworld/ledges.asm index c56914f6..0f135fb6 100755 --- a/engine/overworld/ledges.asm +++ b/engine/overworld/ledges.asm @@ -6,7 +6,7 @@ HandleLedges:: and a ; OVERWORLD ret nz predef GetTileAndCoordsInFrontOfPlayer - ld a, [wSpriteStateData1 + 9] + ld a, [wSpritePlayerStateData1FacingDirection] ld b, a aCoord 8, 9 ld c, a diff --git a/engine/overworld/map_sprites.asm b/engine/overworld/map_sprites.asm index 00981b51..0de1befd 100755 --- a/engine/overworld/map_sprites.asm +++ b/engine/overworld/map_sprites.asm @@ -12,8 +12,8 @@ InitMapSprites:: call InitOutsideMapSprites ret c ; return if the map is an outside map (already handled by above call) ; if the map is an inside map (i.e. mapID >= $25) - ld hl, wSpriteStateData1 - ld de, wSpriteStateData2 + $0d + ld hl, wSpritePlayerStateData1PictureID + ld de, wSpritePlayerStateData2PictureID ; Loop to copy picture ID's from $C1X0 to $C2XD for LoadMapSpriteTilePatterns. .copyPictureIDLoop ld a, [hl] ; $C1X0 (picture ID) @@ -37,7 +37,7 @@ LoadMapSpriteTilePatterns: .spritesExist ld c, a ; c = [wNumSprites] ld b, $10 ; number of sprite slots - ld hl, wSpriteStateData2 + $0d + ld hl, wSpritePlayerStateData2PictureID xor a ld [hFourTileSpriteCount], a .copyPictureIDLoop ; loop to copy picture ID from $C2XD to $C2XE @@ -48,9 +48,9 @@ LoadMapSpriteTilePatterns: ld l, a dec b jr nz, .copyPictureIDLoop - ld hl, wSpriteStateData2 + $1e + ld hl, wSprite01StateData2ImageBaseOffset .loadTilePatternLoop - ld de, wSpriteStateData2 + $1d + ld de, wSprite01StateData2PictureID ; Check if the current picture ID has already had its tile patterns loaded. ; This done by looping through the previous sprite slots and seeing if any of ; their picture ID's match that of the current sprite slot. @@ -70,7 +70,7 @@ LoadMapSpriteTilePatterns: ld e, a jr .checkIfAlreadyLoadedLoop .notAlreadyLoaded - ld de, wSpriteStateData2 + $0e + ld de, wSpritePlayerStateData2ImageBaseOffset ld b, $01 ; loop to find the highest tile pattern VRAM slot (among the first 10 slots) used by a previous sprite slot ; this is done in order to find the first free VRAM slot available @@ -215,7 +215,7 @@ LoadMapSpriteTilePatterns: ld l, a dec c jp nz, .loadTilePatternLoop - ld hl, wSpriteStateData2 + $0d + ld hl, wSpritePlayerStateData2PictureID ld b, $10 ; the pictures ID's stored at $C2XD are no longer needed, so zero them .zeroStoredPictureIDLoop @@ -287,7 +287,7 @@ InitOutsideMapSprites: jr nc, .noCarry2 inc d .noCarry2 - ld hl, wSpriteStateData2 + $0d + ld hl, wSpritePlayerStateData2PictureID ld a, SPRITE_RED ld [hl], a ld bc, wSpriteSet @@ -323,7 +323,7 @@ InitOutsideMapSprites: call LoadMapSpriteTilePatterns pop af ld [wNumSprites], a ; restore number of sprites - ld hl, wSpriteStateData2 + $1e + ld hl, wSprite01StateData2ImageBaseOffset ld b, $0f ; The VRAM tile pattern slots that LoadMapSpriteTilePatterns set are in the ; order of the map's sprite set, not the order of the actual sprites loaded @@ -337,7 +337,7 @@ InitOutsideMapSprites: dec b jr nz, .zeroVRAMSlotsLoop .skipLoadingSpriteSet - ld hl, wSpriteStateData1 + $10 + ld hl, wSprite01StateData1 ; This loop stores the correct VRAM tile pattern slots according the sprite ; data from the map's header. Since the VRAM tile pattern slots are filled in ; the order of the sprite set, in order to find the VRAM tile pattern slot diff --git a/engine/overworld/movement.asm b/engine/overworld/movement.asm index 6c354779..d27ccb4b 100644 --- a/engine/overworld/movement.asm +++ b/engine/overworld/movement.asm @@ -1,13 +1,13 @@ MAP_TILESET_SIZE EQU $60 UpdatePlayerSprite: - ld a, [wSpriteStateData2] + ld a, [wSpritePlayerStateData2WalkAnimationCounter] and a jr z, .checkIfTextBoxInFrontOfSprite cp $ff jr z, .disableSprite dec a - ld [wSpriteStateData2], a + ld [wSpritePlayerStateData2WalkAnimationCounter], a jr .disableSprite ; check if a text box is in front of the sprite by checking if the lower left ; background tile the sprite is standing on is greater than $5F, which is @@ -19,7 +19,7 @@ UpdatePlayerSprite: jr c, .lowerLeftTileIsMapTile .disableSprite ld a, $ff - ld [wSpriteStateData1 + 2], a + ld [wSpritePlayerStateData1ImageIndex], a ret .lowerLeftTileIsMapTile call DetectCollisionBetweenSprites @@ -51,11 +51,11 @@ UpdatePlayerSprite: .notMoving ; zero the animation counters xor a - ld [wSpriteStateData1 + 7], a - ld [wSpriteStateData1 + 8], a + ld [wSpritePlayerStateData1IntraAnimFrameCounter], a + ld [wSpritePlayerStateData1AnimFrameCounter], a jr .calcImageIndex .next - ld [wSpriteStateData1 + 9], a ; facing direction + ld [wSpritePlayerStateData1FacingDirection], a ld a, [wFontLoaded] bit 0, a jr nz, .notMoving @@ -79,11 +79,11 @@ UpdatePlayerSprite: and $3 ld [hl], a .calcImageIndex - ld a, [wSpriteStateData1 + 8] + ld a, [wSpritePlayerStateData1AnimFrameCounter] ld b, a - ld a, [wSpriteStateData1 + 9] + ld a, [wSpritePlayerStateData1FacingDirection] add b - ld [wSpriteStateData1 + 2], a + ld [wSpritePlayerStateData1ImageIndex], a .skipSpriteAnim ; If the player is standing on a grass tile, make the player's sprite have ; lower priority than the background so that it's partially obscured by the @@ -97,7 +97,7 @@ UpdatePlayerSprite: jr nz, .next2 ld a, $80 .next2 - ld [wSpriteStateData2 + 7], a + ld [wSpritePlayerStateData2GrassPriority], a ret UnusedReadSpriteDataFunction: @@ -397,7 +397,7 @@ UpdateSpriteMovementDelay: notYetMoving: ld h, wSpriteStateData1 / $100 ld a, [hCurrentSpriteOffset] - add $8 + add wSpritePlayerStateData1AnimFrameCounter - wSpritePlayerStateData1 ld l, a ld [hl], $0 ; c1x8 = 0 (walk animation frame) jp UpdateSpriteImage @@ -452,7 +452,7 @@ InitializeSpriteStatus: InitializeSpriteScreenPosition: ld h, wSpriteStateData2 / $100 ld a, [hCurrentSpriteOffset] - add $4 + add wSpritePlayerStateData2MapY - wSpritePlayerStateData2 ld l, a ld a, [wYCoord] ld b, a @@ -480,13 +480,13 @@ CheckSpriteAvailability: jp nz, .spriteInvisible ld h, wSpriteStateData2 / $100 ld a, [hCurrentSpriteOffset] - add $6 + add wSpritePlayerStateData2MovementByte1 - wSpritePlayerStateData2 ld l, a ld a, [hl] ; c2x6: movement byte 1 cp $fe jr c, .skipXVisibilityTest ; movement byte 1 < $fe (i.e. the sprite's movement is scripted) ld a, [hCurrentSpriteOffset] - add $4 + add wSpritePlayerStateData2MapY - wSpritePlayerStateData2 ld l, a ld b, [hl] ; c2x4: Y pos (+4) ld a, [wYCoord] @@ -528,7 +528,7 @@ CheckSpriteAvailability: .spriteInvisible ld h, wSpriteStateData1 / $100 ld a, [hCurrentSpriteOffset] - add $2 + add wSpritePlayerStateData1ImageIndex - wSpritePlayerStateData1 ld l, a ld [hl], $ff ; c1x2 scf @@ -582,7 +582,7 @@ UpdateSpriteImage: CanWalkOntoTile: ld h, wSpriteStateData2 / $100 ld a, [hCurrentSpriteOffset] - add $6 + add wSpritePlayerStateData2MovementByte1 - wSpritePlayerStateData2 ld l, a ld a, [hl] ; c2x6 (movement byte 1) cp $fe @@ -610,7 +610,7 @@ CanWalkOntoTile: jr z, .impassable ; if $ff, no movement allowed (however, changing direction is) ld h, wSpriteStateData1 / $100 ld a, [hCurrentSpriteOffset] - add $4 + add wSpritePlayerStateData1YPixels - wSpritePlayerStateData1 ld l, a ld a, [hli] ; c1x4 (screen Y pos) add $4 ; align to blocks (Y pos is always 4 pixels off) @@ -636,7 +636,7 @@ CanWalkOntoTile: jr nz, .impassable ; collision between sprites, don't go there ld h, wSpriteStateData2 / $100 ld a, [hCurrentSpriteOffset] - add $2 + add wSpritePlayerStateData2YDisplacement - wSpritePlayerStateData2 ld l, a ld a, [hli] ; c2x2 (sprite Y displacement, initialized at $8, keep track of where a sprite did go) bit 7, d ; check if going upwards (d=$ff) @@ -665,7 +665,7 @@ CanWalkOntoTile: and a ; clear carry (marking success) ret .impassable - ld h, $c1 + ld h, wSpriteStateData1 / $100 ld a, [hCurrentSpriteOffset] inc a ld l, a @@ -693,7 +693,7 @@ CanWalkOntoTile: GetTileSpriteStandsOn: ld h, wSpriteStateData1 / $100 ld a, [hCurrentSpriteOffset] - add $4 + add wSpritePlayerStateData1YPixels - wSpritePlayerStateData1 ld l, a ld a, [hli] ; c1x4: screen Y position add $4 ; align to 2*2 tile blocks (Y position is always off 4 pixels to the top) @@ -807,12 +807,12 @@ InitScriptedNPCMovement: jp AnimScriptedNPCMovement GetSpriteScreenYPointer: - ld a, $4 + ld a, wSpritePlayerStateData1YPixels - wSpritePlayerStateData1 ld b, a jr GetSpriteScreenXYPointerCommon GetSpriteScreenXPointer: - ld a, $6 + ld a, wSpritePlayerStateData1XPixels - wSpritePlayerStateData1 ld b, a GetSpriteScreenXYPointerCommon: @@ -826,7 +826,7 @@ GetSpriteScreenXYPointerCommon: AnimScriptedNPCMovement: ld hl, wSpriteStateData2 ld a, [hCurrentSpriteOffset] - add $e + add wSpritePlayerStateData2ImageBaseOffset - wSpritePlayerStateData2 ld l, a ld a, [hl] ; VRAM slot dec a @@ -834,7 +834,7 @@ AnimScriptedNPCMovement: ld b, a ld hl, wSpriteStateData1 ld a, [hCurrentSpriteOffset] - add $9 + add wSpritePlayerStateData1FacingDirection - wSpritePlayerStateData1 ld l, a ld a, [hl] ; facing direction cp SPRITE_FACING_DOWN @@ -853,7 +853,7 @@ AnimScriptedNPCMovement: call AdvanceScriptedNPCAnimFrameCounter ld hl, wSpriteStateData1 ld a, [hCurrentSpriteOffset] - add $2 + add wSpritePlayerStateData1ImageIndex - wSpritePlayerStateData1 ld l, a ld a, [hSpriteVRAMSlotAndFacing] ld b, a diff --git a/engine/overworld/pathfinding.asm b/engine/overworld/pathfinding.asm index ba052d38..7251759c 100644 --- a/engine/overworld/pathfinding.asm +++ b/engine/overworld/pathfinding.asm @@ -77,14 +77,14 @@ FindPathToPlayer: CalcPositionOfPlayerRelativeToNPC: xor a ld [hNPCPlayerRelativePosFlags], a - ld a, [wSpriteStateData1 + 4] ; player's sprite screen Y position in pixels + ld a, [wSpritePlayerStateData1YPixels] ld d, a - ld a, [wSpriteStateData1 + 6] ; player's sprite screen X position in pixels + ld a, [wSpritePlayerStateData1XPixels] ld e, a ld hl, wSpriteStateData1 ld a, [hNPCSpriteOffset] add l - add $4 + add wSpritePlayerStateData1YPixels - wSpritePlayerStateData1 ld l, a jr nc, .noCarry inc h diff --git a/engine/overworld/player_animations.asm b/engine/overworld/player_animations.asm index c1c15ccf..cfd6cc8d 100755 --- a/engine/overworld/player_animations.asm +++ b/engine/overworld/player_animations.asm @@ -1,7 +1,7 @@ EnterMapAnim:: call InitFacingDirectionList ld a, $ec - ld [wSpriteStateData1 + 4], a ; player's sprite Y screen position + ld [wSpritePlayerStateData1YPixels], a call Delay3 push hl call GBFadeInFromWhite @@ -227,19 +227,19 @@ DoFlyAnimation: ld a, [wFlyAnimBirdSpriteImageIndex] xor $1 ; make the bird flap its wings ld [wFlyAnimBirdSpriteImageIndex], a - ld [wSpriteStateData1 + 2], a + ld [wSpritePlayerStateData1ImageIndex], a call Delay3 ld a, [wFlyAnimUsingCoordList] cp $ff jr z, .skipCopyingCoords ; if the bird is flapping its wings in place - ld hl, wSpriteStateData1 + 4 + ld hl, wSpritePlayerStateData1YPixels ld a, [de] inc de - ld [hli], a + ld [hli], a ; y inc hl ld a, [de] inc de - ld [hl], a + ld [hl], a ; x .skipCopyingCoords ld a, [wFlyAnimCounter] dec a @@ -258,15 +258,15 @@ LoadBirdSpriteGraphics: jp CopyVideoData InitFacingDirectionList: - ld a, [wSpriteStateData1 + 2] ; player's sprite facing direction (image index is locked to standing images) + ld a, [wSpritePlayerStateData1ImageIndex] ; (image index is locked to standing images) ld [wSavedPlayerFacingDirection], a - ld a, [wSpriteStateData1 + 4] ; player's sprite Y screen position + ld a, [wSpritePlayerStateData1YPixels] ld [wSavedPlayerScreenY], a ld hl, PlayerSpinningFacingOrder ld de, wFacingDirectionList ld bc, 4 call CopyData - ld a, [wSpriteStateData1 + 2] ; player's sprite facing direction (image index is locked to standing images) + ld a, [wSpritePlayerStateData1ImageIndex] ; (image index is locked to standing images) ld hl, wFacingDirectionList ; find the place in the list that matches the current facing direction .loop @@ -284,7 +284,7 @@ PlayerSpinningFacingOrder: SpinPlayerSprite: ; copy the current value from the list into the sprite data and rotate the list ld a, [hl] - ld [wSpriteStateData1 + 2], a ; player's sprite facing direction (image index is locked to standing images) + ld [wSpritePlayerStateData1ImageIndex], a ; (image index is locked to standing images) push hl ld hl, wFacingDirectionList ld de, wFacingDirectionList - 1 @@ -320,9 +320,9 @@ PlayerSpinWhileMovingUpOrDown: call SpinPlayerSprite ld a, [wPlayerSpinWhileMovingUpOrDownAnimDeltaY] ld c, a - ld a, [wSpriteStateData1 + 4] ; player's sprite Y screen position + ld a, [wSpritePlayerStateData1YPixels] add c - ld [wSpriteStateData1 + 4], a + ld [wSpritePlayerStateData1YPixels], a ld c, a ld a, [wPlayerSpinWhileMovingUpOrDownAnimMaxY] cp c @@ -334,9 +334,9 @@ PlayerSpinWhileMovingUpOrDown: RestoreFacingDirectionAndYScreenPos: ld a, [wSavedPlayerScreenY] - ld [wSpriteStateData1 + 4], a + ld [wSpritePlayerStateData1YPixels], a ld a, [wSavedPlayerFacingDirection] - ld [wSpriteStateData1 + 2], a + ld [wSpritePlayerStateData1ImageIndex], a ; (image index is locked to standing images) ret ; if SGB, 2 frames, else 3 frames @@ -387,7 +387,7 @@ FishingAnim: ld a, $4 ld hl, RedFishingTiles call LoadAnimSpriteGfx - ld a, [wSpriteStateData1 + 2] + ld a, [wSpritePlayerStateData1ImageIndex] ld c, a ld b, $0 ld hl, FishingRodOAM @@ -410,7 +410,7 @@ FishingAnim: ; shake the player's sprite vertically ld b, 10 .loop - ld hl, wSpriteStateData1 + 4 ; player's sprite Y screen position + ld hl, wSpritePlayerStateData1YPixels call .ShakePlayerSprite ld hl, wOAMBuffer + $9c call .ShakePlayerSprite @@ -420,7 +420,7 @@ FishingAnim: ; If the player is facing up, hide the fishing rod so it doesn't overlap with ; the exclamation bubble that will be shown next. - ld a, [wSpriteStateData1 + 2] ; player's sprite facing direction + ld a, [wSpritePlayerStateData1ImageIndex] ; (image index is locked to standing images) cp SPRITE_FACING_UP jr nz, .skipHidingFishingRod ld a, $a0 @@ -434,7 +434,7 @@ FishingAnim: predef EmotionBubble ; If the player is facing up, unhide the fishing rod. - ld a, [wSpriteStateData1 + 2] ; player's sprite facing direction + ld a, [wSpritePlayerStateData1ImageIndex] ; (image index is locked to standing images) cp SPRITE_FACING_UP jr nz, .skipUnhidingFishingRod ld a, $44 @@ -507,7 +507,7 @@ _HandleMidJump:: ld hl, PlayerJumpingYScreenCoords add hl, bc ld a, [hl] - ld [wSpriteStateData1 + 4], a ; player's sprite y coordinate + ld [wSpritePlayerStateData1YPixels], a ret .finishedJump ld a, [wWalkCounter] diff --git a/engine/overworld/player_state.asm b/engine/overworld/player_state.asm index ea24fdc1..9ff67df8 100644 --- a/engine/overworld/player_state.asm +++ b/engine/overworld/player_state.asm @@ -88,7 +88,7 @@ IsPlayerFacingEdgeOfMap:: push hl push de push bc - ld a, [wSpriteStateData1 + 9] ; player sprite's facing direction + ld a, [wSpritePlayerStateData1FacingDirection] srl a ld c, a ld b, $0 @@ -158,7 +158,7 @@ IsWarpTileInFrontOfPlayer:: ld a, [wCurMap] cp SS_ANNE_BOW jr z, IsSSAnneBowWarpTileInFrontOfPlayer - ld a, [wSpriteStateData1 + 9] ; player sprite's facing direction + ld a, [wSpritePlayerStateData1FacingDirection] srl a ld c, a ld b, 0 @@ -263,7 +263,7 @@ _GetTileAndCoordsInFrontOfPlayer: ld d, a ld a, [wXCoord] ld e, a - ld a, [wSpriteStateData1 + 9] ; player's sprite facing direction + ld a, [wSpritePlayerStateData1FacingDirection] and a ; cp SPRITE_FACING_DOWN jr nz, .notFacingDown ; facing down @@ -302,7 +302,7 @@ GetTileTwoStepsInFrontOfPlayer: ld a, [hli] ld d, a ld e, [hl] - ld a, [wSpriteStateData1 + 9] ; player's sprite facing direction + ld a, [wSpritePlayerStateData1FacingDirection] and a ; cp SPRITE_FACING_DOWN jr nz, .notFacingDown ; facing down @@ -375,7 +375,7 @@ CheckForBoulderCollisionWithSprites: swap a ld d, 0 ld e, a - ld hl, wSpriteStateData2 + $14 + ld hl, wSprite01StateData2MapY add hl, de ld a, [hli] ; map Y position ld [hPlayerYCoord], a @@ -384,7 +384,7 @@ CheckForBoulderCollisionWithSprites: ld a, [wNumSprites] ld c, a ld de, $f - ld hl, wSpriteStateData2 + $14 + ld hl, wSprite01StateData2MapY ld a, [hPlayerFacing] and $3 ; facing up or down? jr z, .pushingHorizontallyLoop diff --git a/engine/overworld/push_boulder.asm b/engine/overworld/push_boulder.asm index e4dd91cf..da1c6dee 100644 --- a/engine/overworld/push_boulder.asm +++ b/engine/overworld/push_boulder.asm @@ -12,7 +12,7 @@ TryPushingBoulder:: ld [wBoulderSpriteIndex], a and a jp z, ResetBoulderPushFlags - ld hl, wSpriteStateData1 + 1 + ld hl, wSpritePlayerStateData1MovementStatus ld d, $0 ld a, [hSpriteIndexOrTextID] swap a @@ -36,7 +36,7 @@ TryPushingBoulder:: jp nz, ResetBoulderPushFlags ld a, [hJoyHeld] ld b, a - ld a, [wSpriteStateData1 + 9] ; player's sprite facing direction + ld a, [wSpritePlayerStateData1FacingDirection] cp SPRITE_FACING_UP jr z, .pushBoulderUp cp SPRITE_FACING_LEFT diff --git a/engine/overworld/sprite_collisions.asm b/engine/overworld/sprite_collisions.asm index c5ff8ebb..48cd95b9 100644 --- a/engine/overworld/sprite_collisions.asm +++ b/engine/overworld/sprite_collisions.asm @@ -1,10 +1,10 @@ _UpdateSprites:: ld h, $c1 inc h - ld a, $e ; wSpriteStateData2 + $0e + ld a, wSpritePlayerStateData2ImageBaseOffset - wSpritePlayerStateData2 .spriteLoop ld l, a - sub $e + sub wSpritePlayerStateData2ImageBaseOffset - wSpritePlayerStateData2 ld c, a ld [hCurrentSpriteOffset], a ld a, [hl] @@ -20,7 +20,7 @@ _UpdateSprites:: .skipSprite ld a, l add $10 ; move to next sprite - cp $e ; test for overflow (back at $0e) + cp wSpritePlayerStateData2ImageBaseOffset - wSpritePlayerStateData2 ; test for overflow (back at beginning) jr nz, .spriteLoop ret .updateCurrentSprite diff --git a/engine/overworld/trainer_sight.asm b/engine/overworld/trainer_sight.asm index 81978c35..c12c064b 100755 --- a/engine/overworld/trainer_sight.asm +++ b/engine/overworld/trainer_sight.asm @@ -1,6 +1,6 @@ _GetSpritePosition1:: ld hl, wSpriteStateData1 - ld de, $4 + ld de, wSpritePlayerStateData1YPixels - wSpritePlayerStateData1 ld a, [wSpriteIndex] ld [hSpriteIndex], a call GetSpriteDataPointer @@ -9,7 +9,7 @@ _GetSpritePosition1:: inc hl ld a, [hl] ; c1x6 (screen X pos) ld [hSpriteScreenXCoord], a - ld de, (wSpriteStateData2 + $4) - (wSpriteStateData1 + $6) + ld de, wSpritePlayerStateData2MapY - wSpritePlayerStateData1XPixels add hl, de ld a, [hli] ; c2x4 (map Y pos) ld [hSpriteMapYCoord], a @@ -19,7 +19,7 @@ _GetSpritePosition1:: _GetSpritePosition2:: ld hl, wSpriteStateData1 - ld de, $4 + ld de, wSpritePlayerStateData1YPixels - wSpritePlayerStateData1 ld a, [wSpriteIndex] ld [hSpriteIndex], a call GetSpriteDataPointer @@ -28,7 +28,7 @@ _GetSpritePosition2:: inc hl ld a, [hl] ; c1x6 (screen X pos) ld [wSavedSpriteScreenX], a - ld de, (wSpriteStateData2 + $4) - (wSpriteStateData1 + $6) + ld de, wSpritePlayerStateData2MapY - wSpritePlayerStateData1XPixels add hl, de ld a, [hli] ; c2x4 (map Y pos) ld [wSavedSpriteMapY], a @@ -38,7 +38,7 @@ _GetSpritePosition2:: _SetSpritePosition1:: ld hl, wSpriteStateData1 - ld de, $4 + ld de, wSpritePlayerStateData1YPixels - wSpritePlayerStateData1 ld a, [wSpriteIndex] ld [hSpriteIndex], a call GetSpriteDataPointer @@ -47,7 +47,7 @@ _SetSpritePosition1:: inc hl ld a, [hSpriteScreenXCoord] ; c1x6 (screen X pos) ld [hl], a - ld de, (wSpriteStateData2 + $4) - (wSpriteStateData1 + $6) + ld de, wSpritePlayerStateData2MapY - wSpritePlayerStateData1XPixels add hl, de ld a, [hSpriteMapYCoord] ; c2x4 (map Y pos) ld [hli], a @@ -57,7 +57,7 @@ _SetSpritePosition1:: _SetSpritePosition2:: ld hl, wSpriteStateData1 - ld de, 4 + ld de, wSpritePlayerStateData1YPixels - wSpritePlayerStateData1 ld a, [wSpriteIndex] ld [hSpriteIndex], a call GetSpriteDataPointer @@ -66,7 +66,7 @@ _SetSpritePosition2:: inc hl ld a, [wSavedSpriteScreenX] ld [hl], a ; c1x6 (screen X pos) - ld de, (wSpriteStateData2 + $4) - (wSpriteStateData1 + $6) + ld de, wSpritePlayerStateData2MapY - wSpritePlayerStateData1XPixels add hl, de ld a, [wSavedSpriteMapY] ld [hli], a ; c2x4 (map Y pos) @@ -165,7 +165,7 @@ TrainerEngage: push hl push de ld a, [wTrainerSpriteOffset] - add $2 + add wSpritePlayerStateData1ImageIndex - wSpritePlayerStateData1 ld d, $0 ld e, a ld hl, wSpriteStateData1 @@ -176,7 +176,7 @@ TrainerEngage: jp .noEngage .spriteOnScreen ld a, [wTrainerSpriteOffset] - add $9 + add wSpritePlayerStateData1FacingDirection - wSpritePlayerStateData1 ld d, $0 ld e, a ld hl, wSpriteStateData1 @@ -234,7 +234,7 @@ TrainerEngage: ; reads trainer's Y position to wTrainerScreenY and X position to wTrainerScreenX ReadTrainerScreenPosition: ld a, [wTrainerSpriteOffset] - add $4 + add wSpritePlayerStateData1YPixels - wSpritePlayerStateData1 ld d, $0 ld e, a ld hl, wSpriteStateData1 @@ -242,7 +242,7 @@ ReadTrainerScreenPosition: ld a, [hl] ; c1x4 (sprite Y pos) ld [wTrainerScreenY], a ld a, [wTrainerSpriteOffset] - add $6 + add wSpritePlayerStateData1XPixels - wSpritePlayerStateData1 ld d, $0 ld e, a ld hl, wSpriteStateData1 @@ -295,7 +295,7 @@ CheckPlayerIsInFrontOfSprite: cp POWER_PLANT jp z, .engage ; bypass this for power plant to get voltorb fake items to work ld a, [wTrainerSpriteOffset] - add $4 + add wSpritePlayerStateData1YPixels - wSpritePlayerStateData1 ld d, $0 ld e, a ld hl, wSpriteStateData1 @@ -307,7 +307,7 @@ CheckPlayerIsInFrontOfSprite: .notOnTopmostTile ld [wTrainerScreenY], a ld a, [wTrainerSpriteOffset] - add $6 + add wSpritePlayerStateData1XPixels - wSpritePlayerStateData1 ld d, $0 ld e, a ld hl, wSpriteStateData1 diff --git a/engine/pokemon/bills_pc.asm b/engine/pokemon/bills_pc.asm index 05271e40..7877ada1 100644 --- a/engine/pokemon/bills_pc.asm +++ b/engine/pokemon/bills_pc.asm @@ -504,7 +504,7 @@ CableClubLeftGameboy:: ld a, [hSerialConnectionStatus] cp USING_EXTERNAL_CLOCK ret z - ld a, [wSpriteStateData1 + 9] ; player's sprite facing direction + ld a, [wSpritePlayerStateData1FacingDirection] cp SPRITE_FACING_RIGHT ret nz ld a, [wCurMap] @@ -521,7 +521,7 @@ CableClubRightGameboy:: ld a, [hSerialConnectionStatus] cp USING_INTERNAL_CLOCK ret z - ld a, [wSpriteStateData1 + 9] ; player's sprite facing direction + ld a, [wSpritePlayerStateData1FacingDirection] cp SPRITE_FACING_LEFT ret nz ld a, [wCurMap] @@ -538,7 +538,7 @@ JustAMomentText:: text_far _JustAMomentText text_end - ld a, [wSpriteStateData1 + 9] ; player's sprite facing direction + ld a, [wSpritePlayerStateData1FacingDirection] cp SPRITE_FACING_UP ret nz call EnableAutoTextBoxDrawing diff --git a/engine/slots/game_corner_slots2.asm b/engine/slots/game_corner_slots2.asm index f0fba746..a4ba4ec1 100755 --- a/engine/slots/game_corner_slots2.asm +++ b/engine/slots/game_corner_slots2.asm @@ -1,5 +1,5 @@ AbleToPlaySlotsCheck: - ld a, [wSpriteStateData1 + 2] + ld a, [wSpritePlayerStateData1ImageIndex] and $8 jr z, .done ; not able ld b, COIN_CASE diff --git a/home.asm b/home.asm index 0e977d11..c33ab449 100644 --- a/home.asm +++ b/home.asm @@ -111,9 +111,9 @@ ResetPlayerSpriteData:: ld hl, wSpriteStateData2 call ResetPlayerSpriteData_ClearSpriteData ld a, $1 - ld [wSpriteStateData1], a - ld [wSpriteStateData2 + $0e], a - ld hl, wSpriteStateData1 + 4 + ld [wSpritePlayerStateData1PictureID], a + ld [wSpritePlayerStateData2ImageBaseOffset], a + ld hl, wSpritePlayerStateData1YPixels ld [hl], $3c ; set Y screen pos inc hl inc hl @@ -485,7 +485,7 @@ TextScript_PokemonCenterPC:: StartSimulatingJoypadStates:: xor a ld [wOverrideSimulatedJoypadStatesMask], a - ld [wSpriteStateData2 + $06], a ; player's sprite movement byte 1 + ld [wSpritePlayerStateData2MovementByte1], a ld hl, wd730 set 7, [hl] ret @@ -572,7 +572,7 @@ CheckCoords:: ; sets carry if the coordinates are in the array, clears carry if not CheckBoulderCoords:: push hl - ld hl, wSpriteStateData2 + $04 + ld hl, wSpritePlayerStateData2MapY ld a, [hSpriteIndex] swap a ld d, $0 diff --git a/home/overworld.asm b/home/overworld.asm index b17208c7..be4af6ee 100644 --- a/home/overworld.asm +++ b/home/overworld.asm @@ -149,7 +149,7 @@ OverworldLoopLessDelay:: bit 7, a ; down button jr z, .checkIfUpButtonIsPressed ld a, 1 - ld [wSpriteStateData1 + 3], a ; delta Y + ld [wSpritePlayerStateData1YStepVector], a ld a, PLAYER_DIR_DOWN jr .handleDirectionButtonPress @@ -157,7 +157,7 @@ OverworldLoopLessDelay:: bit 6, a ; up button jr z, .checkIfLeftButtonIsPressed ld a, -1 - ld [wSpriteStateData1 + 3], a ; delta Y + ld [wSpritePlayerStateData1YStepVector], a ld a, PLAYER_DIR_UP jr .handleDirectionButtonPress @@ -165,7 +165,7 @@ OverworldLoopLessDelay:: bit 5, a ; left button jr z, .checkIfRightButtonIsPressed ld a, -1 - ld [wSpriteStateData1 + 5], a ; delta X + ld [wSpritePlayerStateData1XStepVector], a ld a, PLAYER_DIR_LEFT jr .handleDirectionButtonPress @@ -173,7 +173,7 @@ OverworldLoopLessDelay:: bit 4, a ; right button jr z, .noDirectionButtonsPressed ld a, 1 - ld [wSpriteStateData1 + 5], a ; delta X + ld [wSpritePlayerStateData1XStepVector], a .handleDirectionButtonPress @@ -1133,7 +1133,7 @@ IsSpriteInFrontOfPlayer:: ld d, $10 ; talking range in pixels (normal range) IsSpriteInFrontOfPlayer2:: lb bc, $3c, $40 ; Y and X position of player sprite - ld a, [wSpriteStateData1 + 9] ; direction the player is facing + ld a, [wSpritePlayerStateData1FacingDirection] .checkIfPlayerFacingUp cp SPRITE_FACING_UP jr nz, .checkIfPlayerFacingDown @@ -1176,7 +1176,7 @@ IsSpriteInFrontOfPlayer2:: and a ret z ; if there are sprites - ld hl, wSpriteStateData1 + $10 + ld hl, wSprite01StateData1 ld d, a ld e, $01 .spriteLoop @@ -1228,7 +1228,7 @@ CollisionCheckOnLand:: jr nz, .noCollision ; no collisions when the player's movements are being controlled by the game ld a, [wPlayerDirection] ; the direction that the player is trying to go in ld d, a - ld a, [wSpriteStateData1 + 12] ; the player sprite's collision data (bit field) (set in the sprite movement code) + ld a, [wSpritePlayerStateData1CollisionData] and d ; check if a sprite is in the direction the player is trying to go jr nz, .collision xor a @@ -1462,9 +1462,9 @@ LoadCurrentMapView:: ret AdvancePlayerSprite:: - ld a, [wSpriteStateData1 + 3] ; delta Y + ld a, [wSpritePlayerStateData1YStepVector] ld b, a - ld a, [wSpriteStateData1 + 5] ; delta X + ld a, [wSpritePlayerStateData1XStepVector] ld c, a ld hl, wWalkCounter ; walking animation counter dec [hl] @@ -1596,7 +1596,7 @@ AdvancePlayerSprite:: call MoveTileBlockMapPointerNorth .updateMapView call LoadCurrentMapView - ld a, [wSpriteStateData1 + 3] ; delta Y + ld a, [wSpritePlayerStateData1YStepVector] cp $01 jr nz, .checkIfMovingNorth2 ; if moving south @@ -1609,7 +1609,7 @@ AdvancePlayerSprite:: call ScheduleNorthRowRedraw jr .scrollBackgroundAndSprites .checkIfMovingEast2 - ld a, [wSpriteStateData1 + 5] ; delta X + ld a, [wSpritePlayerStateData1XStepVector] cp $01 jr nz, .checkIfMovingWest2 ; if moving east @@ -1621,9 +1621,9 @@ AdvancePlayerSprite:: ; if moving west call ScheduleWestColumnRedraw .scrollBackgroundAndSprites - ld a, [wSpriteStateData1 + 3] ; delta Y + ld a, [wSpritePlayerStateData1YStepVector] ld b, a - ld a, [wSpriteStateData1 + 5] ; delta X + ld a, [wSpritePlayerStateData1XStepVector] ld c, a sla b sla c @@ -1635,7 +1635,7 @@ AdvancePlayerSprite:: ld [hSCX], a ; update background scroll X ; shift all the sprites in the direction opposite of the player's motion ; so that the player appears to move relative to them - ld hl, wSpriteStateData1 + $14 + ld hl, wSprite01StateData1YPixels ld a, [wNumSprites] ; number of sprites and a ; are there any sprites? jr z, .done @@ -1845,8 +1845,8 @@ DrawTileBlock:: ; function to update joypad state and simulate button presses JoypadOverworld:: xor a - ld [wSpriteStateData1 + 3], a - ld [wSpriteStateData1 + 5], a + ld [wSpritePlayerStateData1YStepVector], a + ld [wSpritePlayerStateData1XStepVector], a call RunMapScript call Joypad ld a, [wFlags_D733] @@ -1920,7 +1920,7 @@ CollisionCheckOnWater:: jp nz, .noCollision ; return and clear carry if button presses are being simulated ld a, [wPlayerDirection] ; the direction that the player is trying to go in ld d, a - ld a, [wSpriteStateData1 + 12] ; the player sprite's collision data (bit field) (set in the sprite movement code) + ld a, [wSpritePlayerStateData1CollisionData] and d ; check if a sprite is in the direction the player is trying to go jr nz, .checkIfNextTileIsPassable ; bug? ld hl, TilePairCollisionsWater @@ -2168,8 +2168,8 @@ LoadMapHeader:: ld [wNumSprites], a ; save the number of sprites push hl ; zero C110-C1FF and C210-C2FF - ld hl, wSpriteStateData1 + $10 - ld de, wSpriteStateData2 + $10 + ld hl, wSprite01StateData1 + ld de, wSprite01StateData2 xor a ld b, $f0 .zeroSpriteDataLoop @@ -2179,7 +2179,7 @@ LoadMapHeader:: dec b jr nz, .zeroSpriteDataLoop ; initialize all C100-C1FF sprite entries to disabled (other than player's) - ld hl, wSpriteStateData1 + $12 + ld hl, wSprite01StateData1ImageIndex ld de, $10 ld c, $0f .disableSpriteEntriesLoop @@ -2188,7 +2188,7 @@ LoadMapHeader:: dec c jr nz, .disableSpriteEntriesLoop pop hl - ld de, wSpriteStateData1 + $10 + ld de, wSprite01StateData1 ld a, [wNumSprites] ; number of sprites and a ; are there any sprites? jp z, .finishUp ; if there are no sprites, skip the rest diff --git a/home/text_script.asm b/home/text_script.asm index 8bfe0927..2dd2dbde 100644 --- a/home/text_script.asm +++ b/home/text_script.asm @@ -111,7 +111,7 @@ CloseTextDisplay:: xor a ld [hAutoBGTransferEnabled], a ; disable continuous WRAM to VRAM transfer each V-blank ; loop to make sprites face the directions they originally faced before the dialogue - ld hl, wSpriteStateData2 + $19 + ld hl, wSprite01StateData2 + 9 ; should be wSprite01StateData1FacingDirection? ld c, $0f ld de, $10 .restoreSpriteFacingDirectionLoop diff --git a/macros/wram.asm b/macros/wram.asm index 7a9b4a6a..62464543 100644 --- a/macros/wram.asm +++ b/macros/wram.asm @@ -71,7 +71,9 @@ spritestatedata1: MACRO \1IntraAnimFrameCounter:: db \1AnimFrameCounter:: db \1FacingDirection:: db - ds 6 + ds 2 +\1CollisionData:: db + ds 3 \1End:: ENDM @@ -85,7 +87,8 @@ spritestatedata2: MACRO \1MovementByte1:: db \1GrassPriority:: db \1MovementDelay:: db - ds 5 + ds 4 +\1PictureID:: db \1ImageBaseOffset:: db ds 1 \1End:: diff --git a/scripts/BillsHouse.asm b/scripts/BillsHouse.asm index c1948ae4..3601c0b6 100755 --- a/scripts/BillsHouse.asm +++ b/scripts/BillsHouse.asm @@ -16,7 +16,7 @@ BillsHouseScript0: ret BillsHouseScript1: - ld a, [wSpriteStateData1 + 9] + ld a, [wSpritePlayerStateData1FacingDirection] and a ; cp SPRITE_FACING_DOWN ld de, MovementData_1e79c jr nz, .notDown diff --git a/scripts/CeruleanCity.asm b/scripts/CeruleanCity.asm index 410ed485..0c3e10cf 100755 --- a/scripts/CeruleanCity.asm +++ b/scripts/CeruleanCity.asm @@ -50,7 +50,7 @@ CeruleanCityScript0: .asm_194e6 ld [wPlayerMovingDirection], a ld a, b - ld [wSpriteStateData1 + 2 * $10 + $9], a + ld [wSprite02StateData1FacingDirection], a call Delay3 ld a, $2 ld [hSpriteIndexOrTextID], a diff --git a/scripts/CinnabarIsland.asm b/scripts/CinnabarIsland.asm index 9934d06f..54bbe1d8 100755 --- a/scripts/CinnabarIsland.asm +++ b/scripts/CinnabarIsland.asm @@ -35,7 +35,7 @@ CinnabarIslandScript0: ld [wSimulatedJoypadStatesEnd], a call StartSimulatingJoypadStates xor a - ld [wSpriteStateData1 + 9], a + ld [wSpritePlayerStateData1FacingDirection], a ld [wJoyIgnore], a ld a, $1 ld [wCinnabarIslandCurScript], a diff --git a/scripts/CopycatsHouse2F.asm b/scripts/CopycatsHouse2F.asm index 959aa249..9f28496a 100755 --- a/scripts/CopycatsHouse2F.asm +++ b/scripts/CopycatsHouse2F.asm @@ -84,7 +84,7 @@ CopycatsHouse2FText6: CopycatsHouse2FText7: text_asm - ld a, [wSpriteStateData1 + 9] + ld a, [wSpritePlayerStateData1FacingDirection] cp SPRITE_FACING_UP ld hl, CopycatsHouse2FText_5cd1c jr nz, .notUp diff --git a/scripts/OaksLab.asm b/scripts/OaksLab.asm index a890f44e..01196d7c 100755 --- a/scripts/OaksLab.asm +++ b/scripts/OaksLab.asm @@ -492,17 +492,17 @@ OaksLabScript14: cp $4 jr nz, .turnPlayerLeft ld a, SPRITE_FACING_RIGHT - ld [wSpriteStateData1 + 9], a + ld [wSpritePlayerStateData1FacingDirection], a jr .done .turnPlayerLeft ld a, SPRITE_FACING_LEFT - ld [wSpriteStateData1 + 9], a + ld [wSpritePlayerStateData1FacingDirection], a jr .done .turnPlayerDown cp $4 ret nz xor a ; ld a, SPRITE_FACING_DOWN - ld [wSpriteStateData1 + 9], a + ld [wSpritePlayerStateData1FacingDirection], a .done ret diff --git a/scripts/PalletTown.asm b/scripts/PalletTown.asm index 579e8cd8..e063e0c8 100755 --- a/scripts/PalletTown.asm +++ b/scripts/PalletTown.asm @@ -94,7 +94,7 @@ PalletTownScript3: bit 0, a ret nz xor a ; ld a, SPRITE_FACING_DOWN - ld [wSpriteStateData1 + 9], a + ld [wSpritePlayerStateData1FacingDirection], a ld a, 1 ld [wcf0d], a ld a, $FC diff --git a/scripts/PokemonMansion1F.asm b/scripts/PokemonMansion1F.asm index d369e992..d8f3728c 100755 --- a/scripts/PokemonMansion1F.asm +++ b/scripts/PokemonMansion1F.asm @@ -46,7 +46,7 @@ Mansion1ReplaceBlock: ret Mansion1Script_Switches:: - ld a, [wSpriteStateData1 + 9] + ld a, [wSpritePlayerStateData1FacingDirection] cp SPRITE_FACING_UP ret nz xor a diff --git a/scripts/PokemonMansion2F.asm b/scripts/PokemonMansion2F.asm index 3ddc28a5..e560d6bd 100755 --- a/scripts/PokemonMansion2F.asm +++ b/scripts/PokemonMansion2F.asm @@ -42,7 +42,7 @@ Mansion2Script_5202f: predef_jump ReplaceTileBlock Mansion2Script_Switches:: - ld a, [wSpriteStateData1 + 9] + ld a, [wSpritePlayerStateData1FacingDirection] cp SPRITE_FACING_UP ret nz xor a diff --git a/scripts/PokemonMansion3F.asm b/scripts/PokemonMansion3F.asm index a04c3b1f..ad346702 100755 --- a/scripts/PokemonMansion3F.asm +++ b/scripts/PokemonMansion3F.asm @@ -73,7 +73,7 @@ Mansion3Script_5225b: ret Mansion3Script_Switches:: - ld a, [wSpriteStateData1 + 9] + ld a, [wSpritePlayerStateData1FacingDirection] cp SPRITE_FACING_UP ret nz xor a diff --git a/scripts/PokemonMansionB1F.asm b/scripts/PokemonMansionB1F.asm index 99e866d8..aa7123f0 100755 --- a/scripts/PokemonMansionB1F.asm +++ b/scripts/PokemonMansionB1F.asm @@ -44,7 +44,7 @@ Mansion4Script_523cf: ret Mansion4Script_Switches:: - ld a, [wSpriteStateData1 + 9] + ld a, [wSpritePlayerStateData1FacingDirection] cp SPRITE_FACING_UP ret nz xor a diff --git a/scripts/PokemonTower6F.asm b/scripts/PokemonTower6F.asm index 2590e70f..a6ae22ec 100755 --- a/scripts/PokemonTower6F.asm +++ b/scripts/PokemonTower6F.asm @@ -75,7 +75,7 @@ PokemonTower6Script4: ld a, $10 ld [wSimulatedJoypadStatesEnd], a xor a - ld [wSpriteStateData2 + $06], a + ld [wSpritePlayerStateData2MovementByte1], a ld [wOverrideSimulatedJoypadStatesMask], a ld hl, wd730 set 7, [hl] diff --git a/scripts/PokemonTower7F.asm b/scripts/PokemonTower7F.asm index 498b8c8f..3f16ca92 100755 --- a/scripts/PokemonTower7F.asm +++ b/scripts/PokemonTower7F.asm @@ -70,7 +70,7 @@ PokemonTower7Script4: ld [wMissableObjectIndex], a predef HideObject ld a, SPRITE_FACING_UP - ld [wSpriteStateData1 + 9], a + ld [wSpritePlayerStateData1FacingDirection], a ld a, MR_FUJIS_HOUSE ld [hWarpDestinationMap], a ld a, $1 diff --git a/scripts/RedsHouse1F.asm b/scripts/RedsHouse1F.asm index cb071537..9f45a760 100755 --- a/scripts/RedsHouse1F.asm +++ b/scripts/RedsHouse1F.asm @@ -51,7 +51,7 @@ MomHealText2: RedsHouse1FText2: ; TV text_asm - ld a, [wSpriteStateData1 + 9] + ld a, [wSpritePlayerStateData1FacingDirection] cp SPRITE_FACING_UP ld hl, TVWrongSideText jr nz, .notUp diff --git a/scripts/RocketHideoutB2F.asm b/scripts/RocketHideoutB2F.asm index 23eca790..7a43e90e 100755 --- a/scripts/RocketHideoutB2F.asm +++ b/scripts/RocketHideoutB2F.asm @@ -314,7 +314,7 @@ RocketHideout2Script3: ret LoadSpinnerArrowTiles:: - ld a, [wSpriteStateData1 + 2] + ld a, [wSpritePlayerStateData1ImageIndex] srl a srl a ld hl, SpinnerPlayerFacingDirections @@ -322,7 +322,7 @@ LoadSpinnerArrowTiles:: ld b, $0 add hl, bc ld a, [hl] - ld [wSpriteStateData1 + 2], a + ld [wSpritePlayerStateData1ImageIndex], a ld a, [wCurMapTileset] cp FACILITY ld hl, FacilitySpinnerArrows diff --git a/scripts/Route11Gate2F.asm b/scripts/Route11Gate2F.asm index f888d72f..1fefc824 100755 --- a/scripts/Route11Gate2F.asm +++ b/scripts/Route11Gate2F.asm @@ -47,7 +47,7 @@ Route11GateUpstairsText_494a3: Route11GateUpstairsText3: text_asm - ld a, [wSpriteStateData1 + 9] + ld a, [wSpritePlayerStateData1FacingDirection] cp SPRITE_FACING_UP jp nz, GateUpstairsScript_PrintIfFacingUp CheckEvent EVENT_BEAT_ROUTE12_SNORLAX diff --git a/scripts/Route12Gate2F.asm b/scripts/Route12Gate2F.asm index 6409a24b..ff4bf2b2 100755 --- a/scripts/Route12Gate2F.asm +++ b/scripts/Route12Gate2F.asm @@ -65,7 +65,7 @@ Route12GateUpstairsText_495c4: text_end GateUpstairsScript_PrintIfFacingUp: - ld a, [wSpriteStateData1 + 9] + ld a, [wSpritePlayerStateData1FacingDirection] cp SPRITE_FACING_UP jr z, .up ld a, $1 diff --git a/scripts/Route22.asm b/scripts/Route22.asm index 8771ad0e..b6970ef0 100755 --- a/scripts/Route22.asm +++ b/scripts/Route22.asm @@ -149,7 +149,7 @@ Route22Script2: ld a, [wIsInBattle] cp $ff jp z, Route22Script_50ece - ld a, [wSpriteStateData1 + 9] + ld a, [wSpritePlayerStateData1FacingDirection] and a ; cp SPRITE_FACING_DOWN jr nz, .notDown ld a, SPRITE_FACING_UP diff --git a/scripts/Route22Gate.asm b/scripts/Route22Gate.asm index b7fcc8f5..e2311b95 100755 --- a/scripts/Route22Gate.asm +++ b/scripts/Route22Gate.asm @@ -37,7 +37,7 @@ Route22GateScript_1e6ba: ld [wSimulatedJoypadStatesIndex], a ld a, D_DOWN ld [wSimulatedJoypadStatesEnd], a - ld [wSpriteStateData1 + 9], a + ld [wSpritePlayerStateData1FacingDirection], a ld [wJoyIgnore], a jp StartSimulatingJoypadStates diff --git a/scripts/Route23.asm b/scripts/Route23.asm index e8bc5475..b617992b 100755 --- a/scripts/Route23.asm +++ b/scripts/Route23.asm @@ -118,7 +118,7 @@ Route23Script_512d8: ld a, D_DOWN ld [wSimulatedJoypadStatesEnd], a xor a - ld [wSpriteStateData1 + 9], a + ld [wSpritePlayerStateData1FacingDirection], a ld [wJoyIgnore], a jp StartSimulatingJoypadStates diff --git a/scripts/Route6Gate.asm b/scripts/Route6Gate.asm index 6b00eddb..6e9dd4b3 100755 --- a/scripts/Route6Gate.asm +++ b/scripts/Route6Gate.asm @@ -60,7 +60,7 @@ Route6GateScript_1e0a1: ld a, $1 ld [wSimulatedJoypadStatesIndex], a xor a - ld [wSpriteStateData2 + $06], a + ld [wSpritePlayerStateData2MovementByte1], a ld [wOverrideSimulatedJoypadStatesMask], a ret diff --git a/scripts/Route7Gate.asm b/scripts/Route7Gate.asm index 06c5c91b..00d7472f 100755 --- a/scripts/Route7Gate.asm +++ b/scripts/Route7Gate.asm @@ -17,7 +17,7 @@ Route7GateScript_1e111: ld a, $1 ld [wSimulatedJoypadStatesIndex], a xor a - ld [wSpriteStateData2 + $06], a + ld [wSpritePlayerStateData2MovementByte1], a ld [wOverrideSimulatedJoypadStatesMask], a ret diff --git a/scripts/Route8Gate.asm b/scripts/Route8Gate.asm index 80b8b9a4..d3003c4d 100755 --- a/scripts/Route8Gate.asm +++ b/scripts/Route8Gate.asm @@ -16,7 +16,7 @@ Route8GateScript_1e1d7: ld a, $1 ld [wSimulatedJoypadStatesIndex], a xor a - ld [wSpriteStateData2 + $06], a + ld [wSpritePlayerStateData2MovementByte1], a ld [wOverrideSimulatedJoypadStatesMask], a ret diff --git a/scripts/SafariZoneGate.asm b/scripts/SafariZoneGate.asm index 6f8299fc..76f4faa6 100755 --- a/scripts/SafariZoneGate.asm +++ b/scripts/SafariZoneGate.asm @@ -25,7 +25,7 @@ SafariZoneGate_ScriptPointers: xor a ld [hJoyHeld], a ld a, SPRITE_FACING_RIGHT - ld [wSpriteStateData1 + 9], a + ld [wSpritePlayerStateData1FacingDirection], a ld a, [wCoordIndex] cp $1 jr z, .asm_7520f @@ -231,7 +231,7 @@ SafariZoneGate_TextPointers: ld hl, .SafariZoneEntranceText_753bb call PrintText xor a - ld [wSpriteStateData1 + 9], a + ld [wSpritePlayerStateData1FacingDirection], a ld a, D_DOWN ld c, $3 call SafariZoneEntranceAutoWalk @@ -243,7 +243,7 @@ SafariZoneGate_TextPointers: ld hl, .SafariZoneEntranceText_753c0 call PrintText ld a, SPRITE_FACING_UP - ld [wSpriteStateData1 + 9], a + ld [wSpritePlayerStateData1FacingDirection], a ld a, D_UP ld c, $1 call SafariZoneEntranceAutoWalk diff --git a/scripts/SeafoamIslandsB3F.asm b/scripts/SeafoamIslandsB3F.asm index c8fec338..7d0e032b 100755 --- a/scripts/SeafoamIslandsB3F.asm +++ b/scripts/SeafoamIslandsB3F.asm @@ -109,7 +109,7 @@ SeafoamIslands4Script2: dec a ld [wSimulatedJoypadStatesIndex], a xor a - ld [wSpriteStateData2 + $06], a + ld [wSpritePlayerStateData2MovementByte1], a ld hl, wd730 set 7, [hl] ld hl, wFlags_D733 diff --git a/scripts/TradeCenter.asm b/scripts/TradeCenter.asm index 3a1a10f3..e7fa8ac8 100755 --- a/scripts/TradeCenter.asm +++ b/scripts/TradeCenter.asm @@ -14,20 +14,20 @@ TradeCenter_Script: bit 0, [hl] set 0, [hl] ret nz - ld hl, wSpriteStateData2 + $14 + ld hl, wSprite01StateData2MapY ld a, $8 ld [hli], a ld a, $a ld [hl], a ld a, SPRITE_FACING_LEFT - ld [wSpriteStateData1 + $19], a + ld [wSprite01StateData1FacingDirection], a ld a, [hSerialConnectionStatus] cp USING_INTERNAL_CLOCK ret z ld a, $7 - ld [wSpriteStateData2 + $15], a + ld [wSprite01StateData2MapX], a ld a, SPRITE_FACING_RIGHT - ld [wSpriteStateData1 + $19], a + ld [wSprite01StateData1FacingDirection], a ret TradeCenter_TextPointers: diff --git a/scripts/VermilionCity.asm b/scripts/VermilionCity.asm index 9f0e8139..127ee16a 100755 --- a/scripts/VermilionCity.asm +++ b/scripts/VermilionCity.asm @@ -38,7 +38,7 @@ VermilionCity_ScriptPointers: dw VermilionCityScript4 VermilionCityScript0: - ld a, [wSpriteStateData1 + 9] + ld a, [wSpritePlayerStateData1FacingDirection] and a ; cp SPRITE_FACING_DOWN ret nz ld hl, SSAnneTicketCheckCoords @@ -157,7 +157,7 @@ VermilionCityText3: text_asm CheckEvent EVENT_SS_ANNE_LEFT jr nz, .shipHasDeparted - ld a, [wSpriteStateData1 + 9] + ld a, [wSpritePlayerStateData1FacingDirection] cp SPRITE_FACING_RIGHT jr z, .greetPlayer ld hl, .inFrontOfOrBehindGuardCoords diff --git a/scripts/VermilionDock.asm b/scripts/VermilionDock.asm index 3f520cfb..2c39bdb8 100755 --- a/scripts/VermilionDock.asm +++ b/scripts/VermilionDock.asm @@ -21,7 +21,7 @@ VermilionDock_Script: ld a, $3 ld [wSimulatedJoypadStatesIndex], a xor a - ld [wSpriteStateData2 + $06], a + ld [wSpritePlayerStateData2MovementByte1], a ld [wOverrideSimulatedJoypadStatesMask], a dec a ld [wJoyIgnore], a @@ -47,7 +47,7 @@ VermilionDock_1db9b: call PlayMusic callba LoadSmokeTileFourTimes xor a - ld [wSpriteStateData1 + 2], a + ld [wSpritePlayerStateData1ImageIndex], a ld c, 120 call DelayFrames ld b, $9c diff --git a/scripts/ViridianCity.asm b/scripts/ViridianCity.asm index 7c4d9c97..20594974 100755 --- a/scripts/ViridianCity.asm +++ b/scripts/ViridianCity.asm @@ -120,7 +120,7 @@ ViridianCityScript_190cf: ld a, D_DOWN ld [wSimulatedJoypadStatesEnd], a xor a - ld [wSpriteStateData1 + 9], a + ld [wSpritePlayerStateData1FacingDirection], a ld [wJoyIgnore], a ret -- cgit v1.3.1-sl0p