pokered/scripts/Route22.asm

445 lines
8.3 KiB
NASM
Executable file

Route22_Script:
call EnableAutoTextBoxDrawing
ld hl, Route22_ScriptPointers
ld a, [wRoute22CurScript]
jp CallFunctionInTable
Route22_ScriptPointers:
dw Route22Script0
dw Route22Script1
dw Route22Script2
dw Route22Script3
dw Route22Script4
dw Route22Script5
dw Route22Script6
dw Route22Script7
Route22Script_50ece:
xor a
ld [wJoyIgnore], a
ld [wRoute22CurScript], a
Route22Script7:
ret
Route22Script_50ed6:
ld a, [wRivalStarter]
ld b, a
.asm_50eda
ld a, [hli]
cp b
jr z, .asm_50ee1
inc hl
jr .asm_50eda
.asm_50ee1
ld a, [hl]
ld [wTrainerNo], a
ret
Route22MoveRivalSprite:
ld de, Route22RivalMovementData
ld a, [wcf0d]
cp $1
jr z, .asm_50ef1
inc de
.asm_50ef1
call MoveSprite
ld a, SPRITE_FACING_RIGHT
ldh [hSpriteFacingDirection], a
jp SetSpriteFacingDirectionAndDelay
Route22RivalMovementData:
db NPC_MOVEMENT_RIGHT
db NPC_MOVEMENT_RIGHT
db NPC_MOVEMENT_RIGHT
db NPC_MOVEMENT_RIGHT
db $FF
Route22Script0:
CheckEvent EVENT_ROUTE22_RIVAL_WANTS_BATTLE
ret z
ld hl, .Route22RivalBattleCoords
call ArePlayerCoordsInArray
ret nc
ld a, [wCoordIndex]
ld [wcf0d], a
xor a
ldh [hJoyHeld], a
ld a, $f0
ld [wJoyIgnore], a
ld a, PLAYER_DIR_LEFT
ld [wPlayerMovingDirection], a
CheckEvent EVENT_1ST_ROUTE22_RIVAL_BATTLE
jr nz, .firstRivalBattle
CheckEventReuseA EVENT_2ND_ROUTE22_RIVAL_BATTLE ; is this the rival at the end of the game?
jp nz, Route22Script_5104e
ret
.Route22RivalBattleCoords
db $04, $1D
db $05, $1D
db $FF
.firstRivalBattle
ld a, $1
ld [wEmotionBubbleSpriteIndex], a
xor a ; EXCLAMATION_BUBBLE
ld [wWhichEmotionBubble], a
predef EmotionBubble
ld a, [wWalkBikeSurfState]
and a
jr z, .asm_50f4e
ld a, SFX_STOP_ALL_MUSIC
ld [wNewSoundID], a
call PlaySound
.asm_50f4e
ld c, BANK(Music_MeetRival)
ld a, MUSIC_MEET_RIVAL
call PlayMusic
ld a, $1
ldh [hSpriteIndex], a
call Route22MoveRivalSprite
ld a, $1
ld [wRoute22CurScript], a
ret
Route22Script1:
ld a, [wd730]
bit 0, a
ret nz
ld a, [wcf0d]
cp $1
jr nz, .asm_50f78
ld a, PLAYER_DIR_DOWN
ld [wPlayerMovingDirection], a
ld a, SPRITE_FACING_UP
jr .asm_50f7a
.asm_50f78
ld a, SPRITE_FACING_RIGHT
.asm_50f7a
ldh [hSpriteFacingDirection], a
ld a, $1
ldh [hSpriteIndex], a
call SetSpriteFacingDirectionAndDelay
xor a
ld [wJoyIgnore], a
ld a, $1
ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ld hl, wd72d
set 6, [hl]
set 7, [hl]
ld hl, Route22RivalDefeatedText1
ld de, Route22Text_511bc
call SaveEndBattleTextPointers
ld a, OPP_SONY1
ld [wCurOpponent], a
ld hl, StarterMons_50faf
call Route22Script_50ed6
ld a, $2
ld [wRoute22CurScript], a
ret
StarterMons_50faf:
; starter the rival picked, rival trainer number
db STARTER2,$04
db STARTER3,$05
db STARTER1,$06
Route22Script2:
ld a, [wIsInBattle]
cp $ff
jp z, Route22Script_50ece
ld a, [wSpritePlayerStateData1FacingDirection]
and a ; cp SPRITE_FACING_DOWN
jr nz, .notDown
ld a, SPRITE_FACING_UP
jr .done
.notDown
ld a, SPRITE_FACING_RIGHT
.done
ldh [hSpriteFacingDirection], a
ld a, $1
ldh [hSpriteIndex], a
call SetSpriteFacingDirectionAndDelay
ld a, $f0
ld [wJoyIgnore], a
SetEvent EVENT_BEAT_ROUTE22_RIVAL_1ST_BATTLE
ld a, $1
ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ld a, SFX_STOP_ALL_MUSIC
ld [wNewSoundID], a
call PlaySound
farcall Music_RivalAlternateStart
ld a, [wcf0d]
cp $1
jr nz, .asm_50fff
call Route22Script_51008
jr .asm_51002
.asm_50fff
call Route22Script_5100d
.asm_51002
ld a, $3
ld [wRoute22CurScript], a
ret
Route22Script_51008:
ld de, Route22RivalExitMovementData1
jr Route22MoveRival1
Route22Script_5100d:
ld de, Route22RivalExitMovementData2
Route22MoveRival1:
ld a, $1
ldh [hSpriteIndex], a
jp MoveSprite
Route22RivalExitMovementData1:
db NPC_MOVEMENT_RIGHT
db NPC_MOVEMENT_RIGHT
db NPC_MOVEMENT_DOWN
db NPC_MOVEMENT_DOWN
db NPC_MOVEMENT_DOWN
db NPC_MOVEMENT_DOWN
db NPC_MOVEMENT_DOWN
db $FF
Route22RivalExitMovementData2:
db NPC_MOVEMENT_UP
db NPC_MOVEMENT_RIGHT
db NPC_MOVEMENT_RIGHT
db NPC_MOVEMENT_RIGHT
db NPC_MOVEMENT_DOWN
db NPC_MOVEMENT_DOWN
db NPC_MOVEMENT_DOWN
db NPC_MOVEMENT_DOWN
db NPC_MOVEMENT_DOWN
db NPC_MOVEMENT_DOWN
db $FF
Route22Script3:
ld a, [wd730]
bit 0, a
ret nz
xor a
ld [wJoyIgnore], a
ld a, HS_ROUTE_22_RIVAL_1
ld [wMissableObjectIndex], a
predef HideObject
call PlayDefaultMusic
ResetEvents EVENT_1ST_ROUTE22_RIVAL_BATTLE, EVENT_ROUTE22_RIVAL_WANTS_BATTLE
ld a, $0
ld [wRoute22CurScript], a
ret
Route22Script_5104e:
ld a, $2
ld [wEmotionBubbleSpriteIndex], a
xor a ; EXCLAMATION_BUBBLE
ld [wWhichEmotionBubble], a
predef EmotionBubble
ld a, [wWalkBikeSurfState]
and a
jr z, .skipYVisibilityTesta
ld a, SFX_STOP_ALL_MUSIC
ld [wNewSoundID], a
call PlaySound
.skipYVisibilityTesta
ld a, SFX_STOP_ALL_MUSIC
ld [wNewSoundID], a
call PlaySound
farcall Music_RivalAlternateTempo
ld a, $2
ldh [hSpriteIndex], a
call Route22MoveRivalSprite
ld a, $4
ld [wRoute22CurScript], a
ret
Route22Script4:
ld a, [wd730]
bit 0, a
ret nz
ld a, $2
ldh [hSpriteIndex], a
ld a, [wcf0d]
cp $1
jr nz, .asm_510a1
ld a, PLAYER_DIR_DOWN
ld [wPlayerMovingDirection], a
ld a, SPRITE_FACING_UP
jr .asm_510a8
.asm_510a1
ld a, PLAYER_DIR_LEFT
ld [wPlayerMovingDirection], a
ld a, SPRITE_FACING_RIGHT
.asm_510a8
ldh [hSpriteFacingDirection], a
call SetSpriteFacingDirectionAndDelay
xor a
ld [wJoyIgnore], a
ld a, $2
ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ld hl, wd72d
set 6, [hl]
set 7, [hl]
ld hl, Route22RivalDefeatedText2
ld de, Route22Text_511d0
call SaveEndBattleTextPointers
ld a, OPP_SONY2
ld [wCurOpponent], a
ld hl, StarterMons_510d9
call Route22Script_50ed6
ld a, $5
ld [wRoute22CurScript], a
ret
StarterMons_510d9:
db STARTER2,$0a
db STARTER3,$0b
db STARTER1,$0c
Route22Script5:
ld a, [wIsInBattle]
cp $ff
jp z, Route22Script_50ece
ld a, $2
ldh [hSpriteIndex], a
ld a, [wcf0d]
cp $1
jr nz, .asm_510fb
ld a, PLAYER_DIR_DOWN
ld [wPlayerMovingDirection], a
ld a, SPRITE_FACING_UP
jr .asm_51102
.asm_510fb
ld a, PLAYER_DIR_LEFT
ld [wPlayerMovingDirection], a
ld a, SPRITE_FACING_RIGHT
.asm_51102
ldh [hSpriteFacingDirection], a
call SetSpriteFacingDirectionAndDelay
ld a, $f0
ld [wJoyIgnore], a
SetEvent EVENT_BEAT_ROUTE22_RIVAL_2ND_BATTLE
ld a, $2
ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ld a, SFX_STOP_ALL_MUSIC
ld [wNewSoundID], a
call PlaySound
farcall Music_RivalAlternateStartAndTempo
ld a, [wcf0d]
cp $1
jr nz, .asm_51134
call Route22Script_5113d
jr .asm_51137
.asm_51134
call Route22Script_51142
.asm_51137
ld a, $6
ld [wRoute22CurScript], a
ret
Route22Script_5113d:
ld de, MovementData_5114c
jr Route22MoveRival2
Route22Script_51142:
ld de, MovementData_5114d
Route22MoveRival2:
ld a, $2
ldh [hSpriteIndex], a
jp MoveSprite
MovementData_5114c:
db NPC_MOVEMENT_LEFT
MovementData_5114d:
db NPC_MOVEMENT_LEFT
db NPC_MOVEMENT_LEFT
db NPC_MOVEMENT_LEFT
db $FF
Route22Script6:
ld a, [wd730]
bit 0, a
ret nz
xor a
ld [wJoyIgnore], a
ld a, HS_ROUTE_22_RIVAL_2
ld [wMissableObjectIndex], a
predef HideObject
call PlayDefaultMusic
ResetEvents EVENT_2ND_ROUTE22_RIVAL_BATTLE, EVENT_ROUTE22_RIVAL_WANTS_BATTLE
ld a, $7
ld [wRoute22CurScript], a
ret
Route22_TextPointers:
dw Route22Text1
dw Route22Text2
dw Route22FrontGateText
Route22Text1:
text_asm
CheckEvent EVENT_BEAT_ROUTE22_RIVAL_1ST_BATTLE
jr z, .asm_5118b
ld hl, Route22RivalAfterBattleText1
call PrintText
jr .asm_51191
.asm_5118b
ld hl, Route22RivalBeforeBattleText1
call PrintText
.asm_51191
jp TextScriptEnd
Route22Text2:
text_asm
CheckEvent EVENT_BEAT_ROUTE22_RIVAL_2ND_BATTLE
jr z, .asm_511a4
ld hl, Route22RivalAfterBattleText2
call PrintText
jr .asm_511aa
.asm_511a4
ld hl, Route22RivalBeforeBattleText2
call PrintText
.asm_511aa
jp TextScriptEnd
Route22RivalBeforeBattleText1:
text_far _Route22RivalBeforeBattleText1
text_end
Route22RivalAfterBattleText1:
text_far _Route22RivalAfterBattleText1
text_end
Route22RivalDefeatedText1:
text_far _Route22RivalDefeatedText1
text_end
Route22Text_511bc:
text_far _Route22Text_511bc
text_end
Route22RivalBeforeBattleText2:
text_far _Route22RivalBeforeBattleText2
text_end
Route22RivalAfterBattleText2:
text_far _Route22RivalAfterBattleText2
text_end
Route22RivalDefeatedText2:
text_far _Route22RivalDefeatedText2
text_end
Route22Text_511d0:
text_far _Route22Text_511d0
text_end
Route22FrontGateText:
text_far _Route22FrontGateText
text_end