mirror of
https://github.com/pret/pokered.git
synced 2024-11-27 16:10:41 +00:00
1234 lines
21 KiB
NASM
Executable File
1234 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 "@"
|