diff options
Diffstat (limited to 'scripts/OaksLab.asm')
-rwxr-xr-x | scripts/OaksLab.asm | 1233 |
1 files changed, 1233 insertions, 0 deletions
diff --git a/scripts/OaksLab.asm b/scripts/OaksLab.asm new file mode 100755 index 00000000..364b157b --- /dev/null +++ b/scripts/OaksLab.asm @@ -0,0 +1,1233 @@ +OaksLab_Script: + CheckEvent EVENT_PALLET_AFTER_GETTING_POKEBALLS_2 + call nz, OaksLabScript_1d076 + ld a, $1 + ld [wAutoTextBoxDrawingControl], a + xor a + ld [wDoNotWaitForButtonPressAfterDisplayingText], a + ld hl, OaksLab_ScriptPointers + ld a, [wOaksLabCurScript] + jp CallFunctionInTable + +OaksLab_ScriptPointers: + dw OaksLabScript0 + dw OaksLabScript1 + dw OaksLabScript2 + dw OaksLabScript3 + dw OaksLabScript4 + dw OaksLabScript5 + dw OaksLabScript6 + dw OaksLabScript7 + dw OaksLabScript8 + dw OaksLabScript9 + dw OaksLabScript10 + dw OaksLabScript11 + dw OaksLabScript12 + dw OaksLabScript13 + dw OaksLabScript14 + dw OaksLabScript15 + dw OaksLabScript16 + dw OaksLabScript17 + dw OaksLabScript18 + +OaksLabScript0: + CheckEvent EVENT_OAK_APPEARED_IN_PALLET + ret z + ld a, [wNPCMovementScriptFunctionNum] + and a + ret nz + ld a, HS_OAKS_LAB_OAK_2 + ld [wMissableObjectIndex], a + predef ShowObject + ld hl, wd72e + res 4, [hl] + + ld a, $1 + ld [wOaksLabCurScript], a + ret + +OaksLabScript1: + ld a, $8 + ld [H_SPRITEINDEX], a + ld de, OakEntryMovement + call MoveSprite + + ld a, $2 + ld [wOaksLabCurScript], a + ret + +OakEntryMovement: + db NPC_MOVEMENT_UP + db NPC_MOVEMENT_UP + db NPC_MOVEMENT_UP + db $FF + +OaksLabScript2: + ld a, [wd730] + bit 0, a + ret nz + ld a, HS_OAKS_LAB_OAK_2 + ld [wMissableObjectIndex], a + predef HideObject + ld a, HS_OAKS_LAB_OAK_1 + ld [wMissableObjectIndex], a + predef ShowObject + + ld a, $3 + ld [wOaksLabCurScript], a + ret + +OaksLabScript3: + call Delay3 + ld hl, wSimulatedJoypadStatesEnd + ld de, PlayerEntryMovementRLE + call DecodeRLEList + dec a + ld [wSimulatedJoypadStatesIndex], a + call StartSimulatingJoypadStates + ld a, $1 + ld [H_SPRITEINDEX], a + xor a + ld [hSpriteFacingDirection], a + call SetSpriteFacingDirectionAndDelay + ld a, $5 + ld [H_SPRITEINDEX], a + xor a + ld [hSpriteFacingDirection], a + call SetSpriteFacingDirectionAndDelay + + ld a, $4 + ld [wOaksLabCurScript], a + ret + +PlayerEntryMovementRLE: + db D_UP,$8 + db $ff + +OaksLabScript4: + ld a, [wSimulatedJoypadStatesIndex] + and a + ret nz + SetEvent EVENT_FOLLOWED_OAK_INTO_LAB + SetEvent EVENT_FOLLOWED_OAK_INTO_LAB_2 + ld a, $1 + ld [H_SPRITEINDEX], a + ld a, SPRITE_FACING_UP + ld [hSpriteFacingDirection], a + call SetSpriteFacingDirectionAndDelay + call UpdateSprites + ld hl, wFlags_D733 + res 1, [hl] + call PlayDefaultMusic + + ld a, $5 + ld [wOaksLabCurScript], a + ret + +OaksLabScript5: + ld a, $fc + ld [wJoyIgnore], a + ld a, $11 + ld [hSpriteIndexOrTextID], a + call DisplayTextID + call Delay3 + ld a, $12 + ld [hSpriteIndexOrTextID], a + call DisplayTextID + call Delay3 + ld a, $13 + ld [hSpriteIndexOrTextID], a + call DisplayTextID + call Delay3 + ld a, $14 + ld [hSpriteIndexOrTextID], a + call DisplayTextID + SetEvent EVENT_OAK_ASKED_TO_CHOOSE_MON + xor a + ld [wJoyIgnore], a + + ld a, $6 + ld [wOaksLabCurScript], a + ret + +OaksLabScript6: + ld a, [wYCoord] + cp $6 + ret nz + ld a, $5 + ld [H_SPRITEINDEX], a + xor a ; SPRITE_FACING_DOWN + ld [hSpriteFacingDirection], a + call SetSpriteFacingDirectionAndDelay + ld a, $1 + ld [H_SPRITEINDEX], a + xor a + ld [hSpriteFacingDirection], a + call SetSpriteFacingDirectionAndDelay + call UpdateSprites + ld a, $c + ld [hSpriteIndexOrTextID], a + call DisplayTextID + ld a, $1 + ld [wSimulatedJoypadStatesIndex], a + ld a, D_UP + ld [wSimulatedJoypadStatesEnd], a + call StartSimulatingJoypadStates + ld a, PLAYER_DIR_UP + ld [wPlayerMovingDirection], a + + ld a, $7 + ld [wOaksLabCurScript], a + ret + +OaksLabScript7: + ld a, [wSimulatedJoypadStatesIndex] + and a + ret nz + call Delay3 + + ld a, $6 + ld [wOaksLabCurScript], a + ret + +OaksLabScript8: + ld a, [wPlayerStarter] + cp STARTER1 + jr z, .Charmander + cp STARTER2 + jr z, .Squirtle + jr .Bulbasaur +.Charmander + ld de, .MiddleBallMovement1 + ld a, [wYCoord] + cp $4 ; is the player standing below the table? + jr z, .asm_1ccf3 + ld de, .MiddleBallMovement2 + jr .asm_1ccf3 + +.MiddleBallMovement1 + db NPC_MOVEMENT_DOWN + db NPC_MOVEMENT_DOWN + db NPC_MOVEMENT_RIGHT + db NPC_MOVEMENT_RIGHT + db NPC_MOVEMENT_RIGHT + db NPC_MOVEMENT_UP + db $FF + +.MiddleBallMovement2 + db NPC_MOVEMENT_DOWN + db NPC_MOVEMENT_RIGHT + db NPC_MOVEMENT_RIGHT + db NPC_MOVEMENT_RIGHT + db $FF + +.Squirtle + ld de, .RightBallMovement1 + ld a, [wYCoord] + cp $4 ; is the player standing below the table? + jr z, .asm_1ccf3 + ld de, .RightBallMovement2 + jr .asm_1ccf3 + +.RightBallMovement1 + db NPC_MOVEMENT_DOWN + db NPC_MOVEMENT_DOWN + db NPC_MOVEMENT_RIGHT + db NPC_MOVEMENT_RIGHT + db NPC_MOVEMENT_RIGHT + db NPC_MOVEMENT_RIGHT + db NPC_MOVEMENT_UP + db $FF + +.RightBallMovement2 + db NPC_MOVEMENT_DOWN + db NPC_MOVEMENT_RIGHT + db NPC_MOVEMENT_RIGHT + db NPC_MOVEMENT_RIGHT + db NPC_MOVEMENT_RIGHT + db $FF + +.Bulbasaur + ld de, .LeftBallMovement1 + ld a, [wXCoord] + cp $9 ; is the player standing to the right of the table? + jr nz, .asm_1ccf3 + push hl + ld a, $1 + ld [H_SPRITEINDEX], a + ld a, $4 + ld [H_SPRITEDATAOFFSET], a + call GetPointerWithinSpriteStateData1 + push hl + ld [hl], $4c + inc hl + inc hl + ld [hl], $0 + pop hl + inc h + ld [hl], $8 + inc hl + ld [hl], $9 + ld de, .LeftBallMovement2 ; the rival is not currently onscreen, so account for that + pop hl + jr .asm_1ccf3 + +.LeftBallMovement1 + db NPC_MOVEMENT_DOWN + db NPC_MOVEMENT_RIGHT ; not yet terminated! +.LeftBallMovement2 + db NPC_MOVEMENT_RIGHT + db $FF + +.asm_1ccf3 + ld a, $1 + ld [H_SPRITEINDEX], a + call MoveSprite + + ld a, $9 + ld [wOaksLabCurScript], a + ret + +OaksLabScript9: + ld a, [wd730] + bit 0, a + ret nz + ld a, $fc + ld [wJoyIgnore], a + ld a, $1 + ld [H_SPRITEINDEX], a + ld a, SPRITE_FACING_UP + ld [hSpriteFacingDirection], a + call SetSpriteFacingDirectionAndDelay + ld a, $d + ld [hSpriteIndexOrTextID], a + call DisplayTextID + ld a, [wRivalStarterBallSpriteIndex] + cp $2 + jr nz, .asm_1cd28 + ld a, HS_STARTER_BALL_1 + jr .asm_1cd32 +.asm_1cd28 + cp $3 + jr nz, .asm_1cd30 + ld a, HS_STARTER_BALL_2 + jr .asm_1cd32 +.asm_1cd30 + ld a, HS_STARTER_BALL_3 +.asm_1cd32 + ld [wMissableObjectIndex], a + predef HideObject + call Delay3 + ld a, [wRivalStarterTemp] + ld [wRivalStarter], a + ld [wcf91], a + ld [wd11e], a + call GetMonName + ld a, $1 + ld [H_SPRITEINDEX], a + ld a, SPRITE_FACING_UP + ld [hSpriteFacingDirection], a + call SetSpriteFacingDirectionAndDelay + ld a, $e + ld [hSpriteIndexOrTextID], a + call DisplayTextID + SetEvent EVENT_GOT_STARTER + xor a + ld [wJoyIgnore], a + + ld a, $a + ld [wOaksLabCurScript], a + ret + +OaksLabScript10: + ld a, [wYCoord] + cp $6 + ret nz + ld a, $1 + ld [H_SPRITEINDEX], a + xor a ; SPRITE_FACING_DOWN + ld [hSpriteFacingDirection], a + call SetSpriteFacingDirectionAndDelay + ld a, PLAYER_DIR_UP + ld [wPlayerMovingDirection], a + ld c, BANK(Music_MeetRival) + ld a, MUSIC_MEET_RIVAL + call PlayMusic + ld a, $f + ld [hSpriteIndexOrTextID], a + call DisplayTextID + ld a, $1 + ld [hNPCPlayerRelativePosPerspective], a + ld a, $1 + swap a + ld [hNPCSpriteOffset], a + predef CalcPositionOfPlayerRelativeToNPC + ld a, [hNPCPlayerYDistance] + dec a + ld [hNPCPlayerYDistance], a + predef FindPathToPlayer + ld de, wNPCMovementDirections2 + ld a, $1 + ld [H_SPRITEINDEX], a + call MoveSprite + + ld a, $b + ld [wOaksLabCurScript], a + ret + +OaksLabScript11: + ld a, [wd730] + bit 0, a + ret nz + + ; define which team rival uses, and fight it + ld a, OPP_SONY1 + ld [wCurOpponent], a + ld a, [wRivalStarter] + cp STARTER2 + jr nz, .NotSquirtle + ld a, $1 + jr .done +.NotSquirtle + cp STARTER3 + jr nz, .Charmander + ld a, $2 + jr .done +.Charmander + ld a, $3 +.done + ld [wTrainerNo], a + ld a, $1 + ld [wSpriteIndex], a + call GetSpritePosition1 + ld hl, OaksLabText_1d3be + ld de, OaksLabText_1d3c3 + call SaveEndBattleTextPointers + ld hl, wd72d + set 6, [hl] + set 7, [hl] + xor a + ld [wJoyIgnore], a + ld a, PLAYER_DIR_UP + ld [wPlayerMovingDirection], a + ld a, $c + ld [wOaksLabCurScript], a + ret + +OaksLabScript12: + ld a, $f0 + ld [wJoyIgnore], a + ld a, PLAYER_DIR_UP + ld [wPlayerMovingDirection], a + call UpdateSprites + ld a, $1 + ld [wSpriteIndex], a + call SetSpritePosition1 + ld a, $1 + ld [H_SPRITEINDEX], a + xor a ; SPRITE_FACING_DOWN + ld [hSpriteFacingDirection], a + call SetSpriteFacingDirectionAndDelay + predef HealParty + SetEvent EVENT_BATTLED_RIVAL_IN_OAKS_LAB + + ld a, $d + ld [wOaksLabCurScript], a + ret + +OaksLabScript13: + ld c, 20 + call DelayFrames + ld a, $10 + ld [hSpriteIndexOrTextID], a + call DisplayTextID + callba Music_RivalAlternateStart + ld a, $1 + ld [H_SPRITEINDEX], a + ld de, .RivalExitMovement + call MoveSprite + ld a, [wXCoord] + cp $4 + ; move left or right depending on where the player is standing + jr nz, .moveLeft + ld a, NPC_MOVEMENT_RIGHT + jr .next +.moveLeft + ld a, NPC_MOVEMENT_LEFT +.next + ld [wNPCMovementDirections], a + + ld a, $e + ld [wOaksLabCurScript], a + ret + +.RivalExitMovement + db $E0 ; change sprite facing direction + db NPC_MOVEMENT_DOWN + db NPC_MOVEMENT_DOWN + db NPC_MOVEMENT_DOWN + db NPC_MOVEMENT_DOWN + db NPC_MOVEMENT_DOWN + db $FF + +OaksLabScript14: + ld a, [wd730] + bit 0, a + jr nz, .asm_1ce8c + ld a, HS_OAKS_LAB_RIVAL + ld [wMissableObjectIndex], a + predef HideObject + xor a + ld [wJoyIgnore], a + call PlayDefaultMusic ; reset to map music + ld a, $12 + ld [wOaksLabCurScript], a + jr .done +; make the player keep facing the rival as he walks away +.asm_1ce8c + ld a, [wNPCNumScriptedSteps] + cp $5 + jr nz, .asm_1cea8 + ld a, [wXCoord] + cp $4 + jr nz, .asm_1cea1 + ld a, SPRITE_FACING_RIGHT + ld [wSpriteStateData1 + 9], a + jr .done +.asm_1cea1 + ld a, SPRITE_FACING_LEFT + ld [wSpriteStateData1 + 9], a + jr .done +.asm_1cea8 + cp $4 + ret nz + xor a ; ld a, SPRITE_FACING_DOWN + ld [wSpriteStateData1 + 9], a +.done + ret + +OaksLabScript15: + xor a + ld [hJoyHeld], a + call EnableAutoTextBoxDrawing + ld a, $ff + ld [wNewSoundID], a + call PlaySound + callba Music_RivalAlternateStart + ld a, $15 + ld [hSpriteIndexOrTextID], a + call DisplayTextID + call OaksLabScript_1d02b + ld a, HS_OAKS_LAB_RIVAL + ld [wMissableObjectIndex], a + predef ShowObject + ld a, [wNPCMovementDirections2Index] + ld [wSavedNPCMovementDirections2Index], a + ld b, 0 + ld c, a + ld hl, wNPCMovementDirections2 + ld a, NPC_MOVEMENT_UP + call FillMemory + ld [hl], $ff + ld a, $1 + ld [H_SPRITEINDEX], a + ld de, wNPCMovementDirections2 + call MoveSprite + + ld a, $10 + ld [wOaksLabCurScript], a + ret + +OaksLabScript_1cefd: + ld a, $1 + ld [H_SPRITEINDEX], a + ld a, SPRITE_FACING_UP + ld [hSpriteFacingDirection], a + call SetSpriteFacingDirectionAndDelay + ld a, $8 + ld [H_SPRITEINDEX], a + xor a ; SPRITE_FACING_DOWN + ld [hSpriteFacingDirection], a + jp SetSpriteFacingDirectionAndDelay + +OaksLabScript16: + ld a, [wd730] + bit 0, a + ret nz + call EnableAutoTextBoxDrawing + call PlayDefaultMusic + ld a, $fc + ld [wJoyIgnore], a + call OaksLabScript_1cefd + ld a, $16 + ld [hSpriteIndexOrTextID], a + call DisplayTextID + call DelayFrame + call OaksLabScript_1cefd + ld a, $17 + ld [hSpriteIndexOrTextID], a + call DisplayTextID + call DelayFrame + call OaksLabScript_1cefd + ld a, $18 + ld [hSpriteIndexOrTextID], a + call DisplayTextID + call DelayFrame + ld a, $19 + ld [hSpriteIndexOrTextID], a + call DisplayTextID + call Delay3 + ld a, HS_POKEDEX_1 + ld [wMissableObjectIndex], a + predef HideObject + ld a, HS_POKEDEX_2 + ld [wMissableObjectIndex], a + predef HideObject + call OaksLabScript_1cefd + ld a, $1a + ld [hSpriteIndexOrTextID], a + call DisplayTextID + ld a, $1 + ld [H_SPRITEINDEX], a + ld a, SPRITE_FACING_RIGHT + ld [hSpriteFacingDirection], a + call SetSpriteFacingDirectionAndDelay + call Delay3 + ld a, $1b + ld [hSpriteIndexOrTextID], a + call DisplayTextID + SetEvent EVENT_GOT_POKEDEX + SetEvent EVENT_OAK_GOT_PARCEL + ld a, HS_LYING_OLD_MAN + ld [wMissableObjectIndex], a + predef HideObject + ld a, HS_OLD_MAN + ld [wMissableObjectIndex], a + predef ShowObject + ld a, [wSavedNPCMovementDirections2Index] + ld b, 0 + ld c, a + ld hl, wNPCMovementDirections2 + xor a ; NPC_MOVEMENT_DOWN + call FillMemory + ld [hl], $ff + ld a, $ff + ld [wNewSoundID], a + call PlaySound + callba Music_RivalAlternateStart + ld a, $1 + ld [H_SPRITEINDEX], a + ld de, wNPCMovementDirections2 + call MoveSprite + + ld a, $11 + ld [wOaksLabCurScript], a + ret + +OaksLabScript17: + ld a, [wd730] + bit 0, a + ret nz + call PlayDefaultMusic + ld a, HS_OAKS_LAB_RIVAL + ld [wMissableObjectIndex], a + predef HideObject + SetEvent EVENT_1ST_ROUTE22_RIVAL_BATTLE + ResetEventReuseHL EVENT_2ND_ROUTE22_RIVAL_BATTLE + SetEventReuseHL EVENT_ROUTE22_RIVAL_WANTS_BATTLE + ld a, HS_ROUTE_22_RIVAL_1 + ld [wMissableObjectIndex], a + predef ShowObject + ld a, $5 + ld [wPalletTownCurScript], a + xor a + ld [wJoyIgnore], a + + ld a, $12 + ld [wOaksLabCurScript], a + ret + +OaksLabScript18: + ret + +OaksLabScript_RemoveParcel: + ld hl, wBagItems + ld bc, $0000 +.loop + ld a, [hli] + cp $ff + ret z + cp OAKS_PARCEL + jr z, .foundParcel + inc hl + inc c + jr .loop +.foundParcel + ld hl, wNumBagItems + ld a, c + ld [wWhichPokemon], a + ld a, $1 + ld [wItemQuantity], a + jp RemoveItemFromInventory + +OaksLabScript_1d02b: + ld a, $7c + ld [$ffeb], a + ld a, $8 + ld [$ffee], a + ld a, [wYCoord] + cp $3 + jr nz, .asm_1d045 + ld a, $4 + ld [wNPCMovementDirections2Index], a + ld a, $30 + ld b, $b + jr .asm_1d068 +.asm_1d045 + cp $1 + jr nz, .asm_1d054 + ld a, $2 + ld [wNPCMovementDirections2Index], a + ld a, $30 + ld b, $9 + jr .asm_1d068 +.asm_1d054 + ld a, $3 + ld [wNPCMovementDirections2Index], a + ld b, $a + ld a, [wXCoord] + cp $4 + jr nz, .asm_1d066 + ld a, $40 + jr .asm_1d068 +.asm_1d066 + ld a, $20 +.asm_1d068 + ld [$ffec], a + ld a, b + ld [$ffed], a + ld a, $1 + ld [wSpriteIndex], a + call SetSpritePosition1 + ret + +OaksLabScript_1d076: + ld hl, OaksLab_TextPointers2 + ld a, l + ld [wMapTextPtr], a + ld a, h + ld [wMapTextPtr+1], a + ret + +OaksLab_TextPointers: + dw OaksLabText1 + dw OaksLabText2 + dw OaksLabText3 + dw OaksLabText4 + dw OaksLabText5 + dw OaksLabText6 + dw OaksLabText7 + dw OaksLabText8 + dw OaksLabText9 + dw OaksLabText10 + dw OaksLabText11 + dw OaksLabText12 + dw OaksLabText13 + dw OaksLabText14 + dw OaksLabText15 + dw OaksLabText16 + dw OaksLabText17 + dw OaksLabText18 + dw OaksLabText19 + dw OaksLabText20 + dw OaksLabText21 + dw OaksLabText22 + dw OaksLabText23 + dw OaksLabText24 + dw OaksLabText25 + dw OaksLabText26 + dw OaksLabText27 + +OaksLab_TextPointers2: + dw OaksLabText1 + dw OaksLabText2 + dw OaksLabText3 + dw OaksLabText4 + dw OaksLabText5 + dw OaksLabText6 + dw OaksLabText7 + dw OaksLabText8 + dw OaksLabText9 + dw OaksLabText10 + dw OaksLabText11 + +OaksLabText1: + TX_ASM + CheckEvent EVENT_FOLLOWED_OAK_INTO_LAB_2 + jr nz, .asm_1d0de + ld hl, OaksLabGaryText1 + call PrintText + jr .asm_1d0f0 +.asm_1d0de + bit 2, a + jr nz, .asm_1d0ea + ld hl, OaksLabText40 + call PrintText + jr .asm_1d0f0 +.asm_1d0ea + ld hl, OaksLabText41 + call PrintText +.asm_1d0f0 + jp TextScriptEnd + +OaksLabGaryText1: + TX_FAR _OaksLabGaryText1 + db "@" + +OaksLabText40: + TX_FAR _OaksLabText40 + db "@" + +OaksLabText41: + TX_FAR _OaksLabText41 + db "@" + +OaksLabText2: + TX_ASM + ld a, STARTER2 + ld [wRivalStarterTemp], a + ld a, $3 + ld [wRivalStarterBallSpriteIndex], a + ld a, STARTER1 + ld b, $2 + jr OaksLabScript_1d133 + +OaksLabText3: + TX_ASM + ld a, STARTER3 + ld [wRivalStarterTemp], a + ld a, $4 + ld [wRivalStarterBallSpriteIndex], a + ld a, STARTER2 + ld b, $3 + jr OaksLabScript_1d133 + +OaksLabText4: + TX_ASM + ld a, STARTER1 + ld [wRivalStarterTemp], a + ld a, $2 + ld [wRivalStarterBallSpriteIndex], a + ld a, STARTER3 + ld b, $4 + +OaksLabScript_1d133: + ld [wcf91], a + ld [wd11e], a + ld a, b + ld [wSpriteIndex], a + CheckEvent EVENT_GOT_STARTER + jp nz, OaksLabScript_1d22d + CheckEventReuseA EVENT_OAK_ASKED_TO_CHOOSE_MON + jr nz, OaksLabScript_1d157 + ld hl, OaksLabText39 + call PrintText + jp TextScriptEnd + +OaksLabText39: + TX_FAR _OaksLabText39 + db "@" + +OaksLabScript_1d157: + ld a, $5 + ld [H_SPRITEINDEX], a + ld a, $9 + ld [H_SPRITEDATAOFFSET], a + call GetPointerWithinSpriteStateData1 + ld [hl], SPRITE_FACING_DOWN + ld a, $1 + ld [H_SPRITEINDEX], a + ld a, $9 + ld [H_SPRITEDATAOFFSET], a + call GetPointerWithinSpriteStateData1 + ld [hl], SPRITE_FACING_RIGHT + ld hl, wd730 + set 6, [hl] + predef StarterDex + ld hl, wd730 + res 6, [hl] + call ReloadMapData + ld c, 10 + call DelayFrames + ld a, [wSpriteIndex] + cp $2 + jr z, OaksLabLookAtCharmander + cp $3 + jr z, OaksLabLookAtSquirtle + jr OaksLabLookAtBulbasaur + +OaksLabLookAtCharmander: + ld hl, OaksLabCharmanderText + jr OaksLabMonChoiceMenu +OaksLabCharmanderText: + TX_FAR _OaksLabCharmanderText + db "@" + +OaksLabLookAtSquirtle: + ld hl, OaksLabSquirtleText + jr OaksLabMonChoiceMenu +OaksLabSquirtleText: + TX_FAR _OaksLabSquirtleText + db "@" + +OaksLabLookAtBulbasaur: + ld hl, OaksLabBulbasaurText + jr OaksLabMonChoiceMenu +OaksLabBulbasaurText: + TX_FAR _OaksLabBulbasaurText + db "@" + +OaksLabMonChoiceMenu: + call PrintText + ld a, $1 + ld [wDoNotWaitForButtonPressAfterDisplayingText], a + call YesNoChoice ; yes/no menu + ld a, [wCurrentMenuItem] + and a + jr nz, OaksLabMonChoiceEnd + ld a, [wcf91] + ld [wPlayerStarter], a + ld [wd11e], a + call GetMonName + ld a, [wSpriteIndex] + cp $2 + jr nz, .asm_1d1db + ld a, HS_STARTER_BALL_1 + jr .asm_1d1e5 +.asm_1d1db + cp $3 + jr nz, .asm_1d1e3 + ld a, HS_STARTER_BALL_2 + jr .asm_1d1e5 +.asm_1d1e3 + ld a, HS_STARTER_BALL_3 +.asm_1d1e5 + ld [wMissableObjectIndex], a + predef HideObject + ld a, $1 + ld [wDoNotWaitForButtonPressAfterDisplayingText], a + ld hl, OaksLabMonEnergeticText + call PrintText + ld hl, OaksLabReceivedMonText + call PrintText + xor a ; PLAYER_PARTY_DATA + ld [wMonDataLocation], a + ld a, 5 + ld [wCurEnemyLVL], a + ld a, [wcf91] + ld [wd11e], a + call AddPartyMon + ld hl, wd72e + set 3, [hl] + ld a, $fc + ld [wJoyIgnore], a + ld a, $8 + ld [wOaksLabCurScript], a +OaksLabMonChoiceEnd: + jp TextScriptEnd + +OaksLabMonEnergeticText: + TX_FAR _OaksLabMonEnergeticText + db "@" + +OaksLabReceivedMonText: + TX_FAR _OaksLabReceivedMonText + TX_SFX_KEY_ITEM + db "@" + +OaksLabScript_1d22d: + ld a, $5 + ld [H_SPRITEINDEX], a + ld a, $9 + ld [H_SPRITEDATAOFFSET], a + call GetPointerWithinSpriteStateData1 + ld [hl], $0 + ld hl, OaksLabLastMonText + call PrintText + jp TextScriptEnd + +OaksLabLastMonText: + TX_FAR _OaksLabLastMonText + db "@" + +OaksLabText32: +OaksLabText5: + TX_ASM + CheckEvent EVENT_PALLET_AFTER_GETTING_POKEBALLS + jr nz, .asm_1d266 + ld hl, wPokedexOwned + ld b, wPokedexOwnedEnd - wPokedexOwned + call CountSetBits + ld a, [wNumSetBits] + cp 2 + jr c, .asm_1d279 + CheckEvent EVENT_GOT_POKEDEX + jr z, .asm_1d279 +.asm_1d266 + ld hl, OaksLabText_1d31d + call PrintText + ld a, $1 + ld [wDoNotWaitForButtonPressAfterDisplayingText], a + predef DisplayDexRating + jp .asm_1d2ed +.asm_1d279 + ld b, POKE_BALL + call IsItemInBag + jr nz, .asm_1d2e7 + CheckEvent EVENT_BEAT_ROUTE22_RIVAL_1ST_BATTLE + jr nz, .asm_1d2d0 + CheckEvent EVENT_GOT_POKEDEX + jr nz, .asm_1d2c8 + CheckEventReuseA EVENT_BATTLED_RIVAL_IN_OAKS_LAB + jr nz, .asm_1d2a9 + ld a, [wd72e] + bit 3, a + jr nz, .asm_1d2a1 + ld hl, OaksLabText_1d2f0 + call PrintText + jr .asm_1d2ed +.asm_1d2a1 + ld hl, OaksLabText_1d2f5 + call PrintText + jr .asm_1d2ed +.asm_1d2a9 + ld b, OAKS_PARCEL + call IsItemInBag + jr nz, .asm_1d2b8 + ld hl, OaksLabText_1d2fa + call PrintText + jr .asm_1d2ed +.asm_1d2b8 + ld hl, OaksLabDeliverParcelText + call PrintText + call OaksLabScript_RemoveParcel + ld a, $f + ld [wOaksLabCurScript], a + jr .asm_1d2ed +.asm_1d2c8 + ld hl, OaksLabAroundWorldText + call PrintText + jr .asm_1d2ed +.asm_1d2d0 + CheckAndSetEvent EVENT_GOT_POKEBALLS_FROM_OAK + jr nz, .asm_1d2e7 + lb bc, POKE_BALL, 5 + call GiveItem + ld hl, OaksLabGivePokeballsText + call PrintText + jr .asm_1d2ed +.asm_1d2e7 + ld hl, OaksLabPleaseVisitText + call PrintText +.asm_1d2ed + jp TextScriptEnd + +OaksLabText_1d2f0: + TX_FAR _OaksLabText_1d2f0 + db "@" + +OaksLabText_1d2f5: + TX_FAR _OaksLabText_1d2f5 + db "@" + +OaksLabText_1d2fa: + TX_FAR _OaksLabText_1d2fa + db "@" + +OaksLabDeliverParcelText: + TX_FAR _OaksLabDeliverParcelText1 + TX_SFX_KEY_ITEM + TX_FAR _OaksLabDeliverParcelText2 + db "@" + +OaksLabAroundWorldText: + TX_FAR _OaksLabAroundWorldText + db "@" + +OaksLabGivePokeballsText: + TX_FAR _OaksLabGivePokeballsText1 + TX_SFX_KEY_ITEM + TX_FAR _OaksLabGivePokeballsText2 + db "@" + +OaksLabPleaseVisitText: + TX_FAR _OaksLabPleaseVisitText + db "@" + +OaksLabText_1d31d: + TX_FAR _OaksLabText_1d31d + db "@" + +OaksLabText7: +OaksLabText6: + TX_ASM + ld hl, OaksLabText_1d32c + call PrintText + jp TextScriptEnd + +OaksLabText_1d32c: + TX_FAR _OaksLabText_1d32c + db "@" + +OaksLabText8: + TX_FAR _OaksLabText8 + db "@" + +OaksLabText9: + TX_ASM + ld hl, OaksLabText_1d340 + call PrintText + jp TextScriptEnd + +OaksLabText_1d340: + TX_FAR _OaksLabText_1d340 + db "@" + +OaksLabText17: + TX_ASM + ld hl, OaksLabRivalWaitingText + call PrintText + jp TextScriptEnd + +OaksLabRivalWaitingText: + TX_FAR _OaksLabRivalWaitingText + db "@" + +OaksLabText18: + TX_ASM + ld hl, OaksLabChooseMonText + call PrintText + jp TextScriptEnd + +OaksLabChooseMonText: + TX_FAR _OaksLabChooseMonText + db "@" + +OaksLabText19: + TX_ASM + ld hl, OaksLabRivalInterjectionText + call PrintText + jp TextScriptEnd + +OaksLabRivalInterjectionText: + TX_FAR _OaksLabRivalInterjectionText + db "@" + +OaksLabText20: + TX_ASM + ld hl, OaksLabBePatientText + call PrintText + jp TextScriptEnd + +OaksLabBePatientText: + TX_FAR _OaksLabBePatientText + db "@" + +OaksLabText12: + TX_ASM + ld hl, OaksLabLeavingText + call PrintText + jp TextScriptEnd + +OaksLabLeavingText: + TX_FAR _OaksLabLeavingText + db "@" + +OaksLabText13: + TX_ASM + ld hl, OaksLabRivalPickingMonText + call PrintText + jp TextScriptEnd + +OaksLabRivalPickingMonText: + TX_FAR _OaksLabRivalPickingMonText + db "@" + +OaksLabText14: + TX_ASM + ld hl, OaksLabRivalReceivedMonText + call PrintText + jp TextScriptEnd + +OaksLabRivalReceivedMonText: + TX_FAR _OaksLabRivalReceivedMonText + TX_SFX_KEY_ITEM + db "@" + +OaksLabText15: + TX_ASM + ld hl, OaksLabRivalChallengeText + call PrintText + jp TextScriptEnd + +OaksLabRivalChallengeText: + TX_FAR _OaksLabRivalChallengeText + db "@" + +OaksLabText_1d3be: + TX_FAR _OaksLabText_1d3be + db "@" + +OaksLabText_1d3c3: + TX_FAR _OaksLabText_1d3c3 + db "@" + +OaksLabText16: + TX_ASM + ld hl, OaksLabRivalToughenUpText + call PrintText + jp TextScriptEnd + +OaksLabRivalToughenUpText: + TX_FAR _OaksLabRivalToughenUpText + db "@" + +OaksLabText21: + TX_FAR _OaksLabText21 + db "@" + +OaksLabText22: + TX_FAR _OaksLabText22 + db "@" + +OaksLabText23: + TX_FAR _OaksLabText23 + db "@" + +OaksLabText24: + TX_FAR _OaksLabText24 + db "@" + +OaksLabText25: + TX_FAR _OaksLabText25 + TX_SFX_KEY_ITEM + db "@" + +OaksLabText26: + TX_FAR _OaksLabText26 + db "@" + +OaksLabText27: + TX_FAR _OaksLabText27 + db "@" + +OaksLabText11: +OaksLabText10: + TX_ASM + ld hl, OaksLabText_1d405 + call PrintText + jp TextScriptEnd + +OaksLabText_1d405: + TX_FAR _OaksLabText_1d405 + db "@" |