mirror of
https://github.com/pret/pokered.git
synced 2024-10-23 06:58:24 +00:00
d51dcc263e
For unknown reasons, the text pointer list for Oak's Lab is duplicated. This is currently implemented by treating the two text pointer lists as one large list. This leads to duplicate labels and some confusing logic. Refactor the code to treat the two text pointer lists separately. This lets us remove several labels. It also makes the code which sets the text pointer list self-documenting.
1233 lines
21 KiB
NASM
Executable file
1233 lines
21 KiB
NASM
Executable file
OaksLabScript:
|
|
CheckEvent EVENT_PALLET_AFTER_GETTING_POKEBALLS_2
|
|
call nz, OaksLabScript_1d076
|
|
ld a, $1
|
|
ld [wAutoTextBoxDrawingControl], a
|
|
xor a
|
|
ld [wDoNotWaitForButtonPressAfterDisplayingText], a
|
|
ld hl, OaksLabScriptPointers
|
|
ld a, [wOaksLabCurScript]
|
|
jp CallFunctionInTable
|
|
|
|
OaksLabScriptPointers:
|
|
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, OaksLabTextPointers2
|
|
ld a, l
|
|
ld [wMapTextPtr], a
|
|
ld a, h
|
|
ld [wMapTextPtr+1], a
|
|
ret
|
|
|
|
OaksLabTextPointers:
|
|
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
|
|
|
|
OaksLabTextPointers2:
|
|
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 "@"
|