diff options
Diffstat (limited to 'engine/hidden_object_functions17.asm')
-rwxr-xr-x | engine/hidden_object_functions17.asm | 317 |
1 files changed, 163 insertions, 154 deletions
diff --git a/engine/hidden_object_functions17.asm b/engine/hidden_object_functions17.asm index 9dbcbf98..1b571d35 100755 --- a/engine/hidden_object_functions17.asm +++ b/engine/hidden_object_functions17.asm @@ -1,67 +1,62 @@ -PrintRedsNESText: ; 5db79 (17:5b79) +PrintRedSNESText: call EnableAutoTextBoxDrawing - ld a, $4 ; RedBedroomSNESText - jp PrintPredefTextID + tx_pre_jump RedBedroomSNESText -RedBedroomSNESText: ; 5db81 (17:5b81) +RedBedroomSNESText: TX_FAR _RedBedroomSNESText db "@" -OpenRedsPC: ; 5db86 (17:5b86) +OpenRedsPC: call EnableAutoTextBoxDrawing - ld a, $3 - jp PrintPredefTextID + tx_pre_jump RedBedroomPCText -RedBedroomPC: ; 5db8e (17:5b8e) - db $fc ; FuncTX_ItemStoragePC +RedBedroomPCText: + TX_PLAYERS_PC -Route15GateLeftBinoculars: ; 5db8f (17:5b8f) +Route15GateLeftBinoculars: ld a, [wSpriteStateData1 + 9] - cp $4 ; i + cp SPRITE_FACING_UP ret nz call EnableAutoTextBoxDrawing - ld a, $a ; text id Route15UpstairsBinocularsText - call PrintPredefTextID + tx_pre Route15UpstairsBinocularsText ld a, ARTICUNO ld [wcf91], a call PlayCry jp DisplayMonFrontSpriteInBox -Route15UpstairsBinocularsText: ; 5dba8 (17:5ba8) +Route15UpstairsBinocularsText: TX_FAR _Route15UpstairsBinocularsText db "@" -AerodactylFossil: ; 5dbad (17:5bad) +AerodactylFossil: ld a, FOSSIL_AERODACTYL ld [wcf91], a call DisplayMonFrontSpriteInBox call EnableAutoTextBoxDrawing - ld a, $9 - call PrintPredefTextID + tx_pre AerodactylFossilText ret -AerodactylFossilText: ; 5dbbe (17:5bbe) +AerodactylFossilText: TX_FAR _AerodactylFossilText db "@" -KabutopsFossil: ; 5bdc3 (17:5bc3) +KabutopsFossil: ld a, FOSSIL_KABUTOPS ld [wcf91], a call DisplayMonFrontSpriteInBox call EnableAutoTextBoxDrawing - ld a, $b - call PrintPredefTextID + tx_pre KabutopsFossilText ret -KabutopsFossilText: ; 5dbd4 (17:5bd4) +KabutopsFossilText: TX_FAR _KabutopsFossilText db "@" -DisplayMonFrontSpriteInBox: ; 5dbd9 (17:5bd9) +DisplayMonFrontSpriteInBox: ; Displays a pokemon's front sprite in a pop-up window. ; [wcf91] = pokemon interal id number - ld a, $1 - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba + ld a, 1 + ld [H_AUTOBGTRANSFERENABLED], a call Delay3 xor a ld [hWY], a @@ -76,9 +71,9 @@ DisplayMonFrontSpriteInBox: ; 5dbd9 (17:5bd9) ld de, vChars1 + $310 call LoadMonFrontSprite ld a, $80 - ld [$ffe1], a - hlCoord 10, 11 - predef Func_3f073 + ld [hStartTileID], a + coord hl, 10, 11 + predef AnimateSendingOutMon call WaitForTextScrollButtonPress call LoadScreenTilesFromBuffer1 call Delay3 @@ -86,267 +81,267 @@ DisplayMonFrontSpriteInBox: ; 5dbd9 (17:5bd9) ld [hWY], a ret -PrintBlackboardLinkCableText: ; 5dc1a (17:5c1a) +PrintBlackboardLinkCableText: call EnableAutoTextBoxDrawing ld a, $1 ld [wDoNotWaitForButtonPressAfterDisplayingText], a - ld a, [wWhichTrade] + ld a, [wHiddenObjectFunctionArgument] call PrintPredefTextID ret -LinkCableHelp: ; 5dc29 (17:5c29) - db $08 ; asm +LinkCableHelp: + TX_ASM call SaveScreenTilesToBuffer1 ld hl, LinkCableHelpText1 call PrintText xor a - ld [W_ANIMATIONID], a + ld [wMenuItemOffset], a ; not used ld [wCurrentMenuItem], a ld [wLastMenuItem], a - ld a, $3 + ld a, A_BUTTON | B_BUTTON ld [wMenuWatchedKeys], a - ld a, $3 + ld a, 3 ld [wMaxMenuItem], a - ld a, $2 + ld a, 2 ld [wTopMenuItemY], a - ld a, $1 + ld a, 1 ld [wTopMenuItemX], a -.asm_5c51 +.linkHelpLoop ld hl, wd730 set 6, [hl] - ld hl, wTileMap - ld b, $8 - ld c, $d + coord hl, 0, 0 + ld b, 8 + ld c, 13 call TextBoxBorder - ld hl, wTileMap + $2a + coord hl, 2, 2 ld de, HowToLinkText call PlaceString ld hl, LinkCableHelpText2 call PrintText call HandleMenuInput - bit 1, a - jr nz, .asm_5dc93 ; 0x5dc74 $1d + bit 1, a ; pressed b + jr nz, .exit ld a, [wCurrentMenuItem] - cp $3 - jr z, .asm_5dc93 ; 0x5dc7b $16 + cp 3 ; pressed a on "STOP READING" + jr z, .exit ld hl, wd730 res 6, [hl] ld hl, LinkCableInfoTexts add a - ld d, $0 + ld d, 0 ld e, a add hl, de ld a, [hli] ld h, [hl] ld l, a call PrintText - jp .asm_5c51 -.asm_5dc93 + jp .linkHelpLoop +.exit ld hl, wd730 res 6, [hl] call LoadScreenTilesFromBuffer1 jp TextScriptEnd -LinkCableHelpText1: ; 5dc9e (17:5c9e) +LinkCableHelpText1: TX_FAR _LinkCableHelpText1 db "@" -LinkCableHelpText2: ; 5dca3 (17:5ca3) +LinkCableHelpText2: TX_FAR _LinkCableHelpText2 db "@" -HowToLinkText: ; 5dca8 (17:5ca8) +HowToLinkText: db "HOW TO LINK" next "COLOSSEUM" next "TRADE CENTER" next "STOP READING@" -LinkCableInfoTexts: ; 5dcd8 (17:5cd8) +LinkCableInfoTexts: dw LinkCableInfoText1 dw LinkCableInfoText2 dw LinkCableInfoText3 -LinkCableInfoText1: ; 5dcde (17:5cde) +LinkCableInfoText1: TX_FAR _LinkCableInfoText1 db "@" -LinkCableInfoText2: ; 5dce3 (17:5ce3) +LinkCableInfoText2: TX_FAR _LinkCableInfoText2 db "@" -LinkCableInfoText3: ; 5dce8 (17:5ce8) +LinkCableInfoText3: TX_FAR _LinkCableInfoText3 db "@" -ViridianSchoolBlackboard: ; 5dced (17:5ced) - db $08 ; asm +ViridianSchoolBlackboard: + TX_ASM call SaveScreenTilesToBuffer1 ld hl, ViridianSchoolBlackboardText1 call PrintText xor a - ld [W_ANIMATIONID], a + ld [wMenuItemOffset], a ld [wCurrentMenuItem], a ld [wLastMenuItem], a - ld a, $33 + ld a, D_LEFT | D_RIGHT | A_BUTTON | B_BUTTON ld [wMenuWatchedKeys], a - ld a, $2 + ld a, 2 ld [wMaxMenuItem], a - ld a, $2 + ld a, 2 ld [wTopMenuItemY], a - ld a, $1 + ld a, 1 ld [wTopMenuItemX], a -.asm_5dd15 +.blackboardLoop ld hl, wd730 set 6, [hl] - ld hl, wTileMap - ld bc, $060a + coord hl, 0, 0 + lb bc, 6, 10 call TextBoxBorder - ld hl, wTileMap + $29 + coord hl, 1, 2 ld de, StatusAilmentText1 call PlaceString - ld hl, wTileMap + $2e + coord hl, 6, 2 ld de, StatusAilmentText2 call PlaceString ld hl, ViridianSchoolBlackboardText2 call PrintText - call HandleMenuInput - bit 1, a + call HandleMenuInput ; pressing up and down is handled in here + bit 1, a ; pressed b jr nz, .exitBlackboard - bit 4, a - jr z, .asm_5dd5c - ld a, $2 + bit 4, a ; pressed right + jr z, .didNotPressRight + ; move cursor to right column + ld a, 2 ld [wMaxMenuItem], a - ld a, $2 + ld a, 2 ld [wTopMenuItemY], a - ld a, $6 + ld a, 6 ld [wTopMenuItemX], a - ld a, $3 - ld [W_ANIMATIONID], a - jr .asm_5dd15 -.asm_5dd5c - bit 5, a - jr z, .asm_5dd75 - ld a, $2 + ld a, 3 ; in the the right column, use an offset to prevent overlap + ld [wMenuItemOffset], a + jr .blackboardLoop +.didNotPressRight + bit 5, a ; pressed left + jr z, .didNotPressLeftOrRight + ; move cursor to left column + ld a, 2 ld [wMaxMenuItem], a - ld a, $2 + ld a, 2 ld [wTopMenuItemY], a - ld a, $1 + ld a, 1 ld [wTopMenuItemX], a xor a - ld [W_ANIMATIONID], a - jr .asm_5dd15 -.asm_5dd75 + ld [wMenuItemOffset], a + jr .blackboardLoop +.didNotPressLeftOrRight ld a, [wCurrentMenuItem] ld b, a - ld a, [W_ANIMATIONID] + ld a, [wMenuItemOffset] add b - cp $5 + 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, wd730 res 6, [hl] ld hl, ViridianBlackboardStatusPointers add a - ld d, $0 + ld d, 0 ld e, a add hl, de ld a, [hli] ld h, [hl] ld l, a call PrintText - jp .asm_5dd15 + jp .blackboardLoop .exitBlackboard ld hl, wd730 res 6, [hl] call LoadScreenTilesFromBuffer1 jp TextScriptEnd -ViridianSchoolBlackboardText1: ; 5dda2 (17:5da2) +ViridianSchoolBlackboardText1: TX_FAR _ViridianSchoolBlackboardText1 db "@" -ViridianSchoolBlackboardText2: ; 5dda7 (17:5da7) +ViridianSchoolBlackboardText2: TX_FAR _ViridianSchoolBlackboardText2 db "@" -StatusAilmentText1: ; 5ddac (17:5dac) +StatusAilmentText1: db " SLP" next " PSN" next " PAR@" -StatusAilmentText2: ; 5ddbb (17:5dbb) +StatusAilmentText2: db " BRN" next " FRZ" next " QUIT@@" -ViridianBlackboardStatusPointers: ; 5ddcc (17:5ddc) +ViridianBlackboardStatusPointers: dw ViridianBlackboardSleepText dw ViridianBlackboardPoisonText - dw ViridianBlackbaordPrlzText + dw ViridianBlackboardPrlzText dw ViridianBlackboardBurnText dw ViridianBlackboardFrozenText -ViridianBlackboardSleepText: ; 5ddd6 (17:5dd6) +ViridianBlackboardSleepText: TX_FAR _ViridianBlackboardSleepText db "@" -ViridianBlackboardPoisonText: ; 5dddb (17:5ddb) +ViridianBlackboardPoisonText: TX_FAR _ViridianBlackboardPoisonText db "@" -ViridianBlackbaordPrlzText: ; 5dde0 (17:5de0) - TX_FAR _ViridianBlackbaordPrlzText +ViridianBlackboardPrlzText: + TX_FAR _ViridianBlackboardPrlzText db "@" -ViridianBlackboardBurnText: ; 5dde5 (17:5de5) +ViridianBlackboardBurnText: TX_FAR _ViridianBlackboardBurnText db "@" -ViridianBlackboardFrozenText: ; 5ddea (17:5dea) +ViridianBlackboardFrozenText: TX_FAR _ViridianBlackboardFrozenText db "@" -PrintTrashText: ; 5ddef (17:5def) +PrintTrashText: call EnableAutoTextBoxDrawing - ld a, $26 - jp PrintPredefTextID + tx_pre_jump VermilionGymTrashText -VermilionGymTrashText: ; 5ddf7 (17:5df7) +VermilionGymTrashText: TX_FAR _VermilionGymTrashText db "@" -GymTrashScript: ; 5ddfc (17:5dfc) +GymTrashScript: call EnableAutoTextBoxDrawing - ld a, [wWhichTrade] ; wWhichTrade - ld [wcd5b], a + ld a, [wHiddenObjectFunctionArgument] + ld [wGymTrashCanIndex], a ; Don't do the trash can puzzle if it's already been done. - ld a, [wd773] - bit 0, a + CheckEvent EVENT_2ND_LOCK_OPENED jr z, .ok - ld a, $26 ; DisplayTextID $26 = VermilionGymTrashText (nothing in the trash) - jp PrintPredefTextID + tx_pre_jump VermilionGymTrashText .ok - bit 1, a + CheckEventReuseA EVENT_1ST_LOCK_OPENED jr nz, .trySecondLock - ld a, [wd743] + ld a, [wFirstLockTrashCanIndex] ld b, a - ld a, [wcd5b] + ld a, [wGymTrashCanIndex] cp b jr z, .openFirstLock - ld a, $26 ; DisplayTextID $26 = VermilionGymTrashText (nothing in the trash) + tx_pre_id VermilionGymTrashText jr .done .openFirstLock ; Next can is trying for the second switch. - ld hl, wd773 - set 1, [hl] + SetEvent EVENT_1ST_LOCK_OPENED - ld hl, GymTrashCans ; $5e7d - ld a, [wcd5b] + ld hl, GymTrashCans + ld a, [wGymTrashCanIndex] ; * 5 ld b, a add a @@ -358,12 +353,21 @@ GymTrashScript: ; 5ddfc (17:5dfc) add hl, de ld a, [hli] - ld [$ffdb], a +; There is a bug in this code. It 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. + + ld [hGymTrashCanRandNumMask], a push hl call Random swap a ld b, a - ld a, [$ffdb] + ld a, [hGymTrashCanRandNumMask] and b dec a pop hl @@ -373,42 +377,46 @@ GymTrashScript: ; 5ddfc (17:5dfc) add hl, de ld a, [hl] and $f - ld [wd744], a + ld [wSecondLockTrashCanIndex], a - ld a, $3b ; DisplayTextID $3b = VermilionGymTrashSuccesText1 (first lock opened!) + tx_pre_id VermilionGymTrashSuccessText1 jr .done .trySecondLock - ld a, [wd744] + ld a, [wSecondLockTrashCanIndex] ld b, a - ld a, [wcd5b] + ld a, [wGymTrashCanIndex] cp b jr z, .openSecondLock ; Reset the cans. - ld hl, wd773 - res 1, [hl] + ResetEvent EVENT_1ST_LOCK_OPENED call Random and $e - ld [wd743], a + ld [wFirstLockTrashCanIndex], a - ld a, $3e ; DisplayTextID $3e = VermilionGymTrashFailText (locks reset!) + tx_pre_id VermilionGymTrashFailText jr .done .openSecondLock ; Completed the trash can puzzle. - ld hl, wd773 - set 0, [hl] - ld hl, wd126 + SetEvent EVENT_2ND_LOCK_OPENED + ld hl, wCurrentMapScriptFlags set 6, [hl] - ld a, $3d ; DisplayTextID $3d = VermilionGymTrashSuccesText3 (2nd lock opened!) + tx_pre_id VermilionGymTrashSuccessText3 .done jp PrintPredefTextID -GymTrashCans: ; 5de7d (17:5e7d) +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 @@ -424,43 +432,44 @@ GymTrashCans: ; 5de7d (17:5e7d) db 2, 9, 13, 0, 0 ; 12 db 3, 10, 12, 14, 0 ; 13 db 2, 11, 13, 0, 0 ; 14 -; 5dec8 -VermilionGymTrashSuccesText1: ; 5dec8 (17:5ec8) - TX_FAR _VermilionGymTrashSuccesText1 - db $08 ; asm +VermilionGymTrashSuccessText1: + TX_FAR _VermilionGymTrashSuccessText1 + TX_ASM call WaitForSoundToFinish - ld a, (SFX_02_49 - SFX_Headers_02) / 3 + ld a, SFX_SWITCH call PlaySound call WaitForSoundToFinish jp TextScriptEnd -VermilionGymTrashSuccesText2: ; 5dedb (17:5edb) - TX_FAR _VermilionGymTrashSuccesText2 +; unused +VermilionGymTrashSuccessText2: + TX_FAR _VermilionGymTrashSuccessText2 db "@" -UnnamedText_5dee0: ; 5dee0 (17:5ee0) - db $08 ; asm +; unused +VermilionGymTrashSuccesPlaySfx: + TX_ASM call WaitForSoundToFinish - ld a, (SFX_02_49 - SFX_Headers_02) / 3 + ld a, SFX_SWITCH call PlaySound call WaitForSoundToFinish jp TextScriptEnd -VermilionGymTrashSuccesText3: ; 5deef (17:5eef) - TX_FAR _VermilionGymTrashSuccesText3 - db $08 ; asm +VermilionGymTrashSuccessText3: + TX_FAR _VermilionGymTrashSuccessText3 + TX_ASM call WaitForSoundToFinish - ld a, (SFX_02_57 - SFX_Headers_02) / 3 + ld a, SFX_GO_INSIDE call PlaySound call WaitForSoundToFinish jp TextScriptEnd -VermilionGymTrashFailText: ; 5df02 (17:5f02) +VermilionGymTrashFailText: TX_FAR _VermilionGymTrashFailText - db $08 ; asm + TX_ASM call WaitForSoundToFinish - ld a, (SFX_02_51 - SFX_Headers_02) / 3 + ld a, SFX_DENIED call PlaySound call WaitForSoundToFinish jp TextScriptEnd |