summaryrefslogtreecommitdiff
path: root/scripts/Route22.asm
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/Route22.asm')
-rwxr-xr-xscripts/Route22.asm445
1 files changed, 445 insertions, 0 deletions
diff --git a/scripts/Route22.asm b/scripts/Route22.asm
new file mode 100755
index 00000000..7226e509
--- /dev/null
+++ b/scripts/Route22.asm
@@ -0,0 +1,445 @@
+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
+ ld [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
+ ld [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, $ff
+ ld [wNewSoundID], a
+ call PlaySound
+.asm_50f4e
+ ld c, BANK(Music_MeetRival)
+ ld a, MUSIC_MEET_RIVAL
+ call PlayMusic
+ ld a, $1
+ ld [H_SPRITEINDEX], 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
+ ld [hSpriteFacingDirection], a
+ ld a, $1
+ ld [H_SPRITEINDEX], a
+ call SetSpriteFacingDirectionAndDelay
+ xor a
+ ld [wJoyIgnore], a
+ ld a, $1
+ ld [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, [wSpriteStateData1 + 9]
+ and a ; cp SPRITE_FACING_DOWN
+ jr nz, .notDown
+ ld a, SPRITE_FACING_UP
+ jr .done
+.notDown
+ ld a, SPRITE_FACING_RIGHT
+.done
+ ld [hSpriteFacingDirection], a
+ ld a, $1
+ ld [H_SPRITEINDEX], a
+ call SetSpriteFacingDirectionAndDelay
+ ld a, $f0
+ ld [wJoyIgnore], a
+ SetEvent EVENT_BEAT_ROUTE22_RIVAL_1ST_BATTLE
+ ld a, $1
+ ld [hSpriteIndexOrTextID], a
+ call DisplayTextID
+ ld a, $ff
+ ld [wNewSoundID], a
+ call PlaySound
+ callba 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
+ ld [H_SPRITEINDEX], 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, $ff
+ ld [wNewSoundID], a
+ call PlaySound
+.skipYVisibilityTesta
+ ld a, $ff
+ ld [wNewSoundID], a
+ call PlaySound
+ callba Music_RivalAlternateTempo
+ ld a, $2
+ ld [H_SPRITEINDEX], a
+ call Route22MoveRivalSprite
+ ld a, $4
+ ld [wRoute22CurScript], a
+ ret
+
+Route22Script4:
+ ld a, [wd730]
+ bit 0, a
+ ret nz
+ ld a, $2
+ ld [H_SPRITEINDEX], 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
+ ld [hSpriteFacingDirection], a
+ call SetSpriteFacingDirectionAndDelay
+ xor a
+ ld [wJoyIgnore], a
+ ld a, $2
+ ld [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
+ ld [H_SPRITEINDEX], 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
+ ld [hSpriteFacingDirection], a
+ call SetSpriteFacingDirectionAndDelay
+ ld a, $f0
+ ld [wJoyIgnore], a
+ SetEvent EVENT_BEAT_ROUTE22_RIVAL_2ND_BATTLE
+ ld a, $2
+ ld [hSpriteIndexOrTextID], a
+ call DisplayTextID
+ ld a, $ff
+ ld [wNewSoundID], a
+ call PlaySound
+ callba 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
+ ld [H_SPRITEINDEX], 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:
+ TX_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:
+ TX_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:
+ TX_FAR _Route22RivalBeforeBattleText1
+ db "@"
+
+Route22RivalAfterBattleText1:
+ TX_FAR _Route22RivalAfterBattleText1
+ db "@"
+
+Route22RivalDefeatedText1:
+ TX_FAR _Route22RivalDefeatedText1
+ db "@"
+
+Route22Text_511bc:
+ TX_FAR _Route22Text_511bc
+ db "@"
+
+Route22RivalBeforeBattleText2:
+ TX_FAR _Route22RivalBeforeBattleText2
+ db "@"
+
+Route22RivalAfterBattleText2:
+ TX_FAR _Route22RivalAfterBattleText2
+ db "@"
+
+Route22RivalDefeatedText2:
+ TX_FAR _Route22RivalDefeatedText2
+ db "@"
+
+Route22Text_511d0:
+ TX_FAR _Route22Text_511d0
+ db "@"
+
+Route22FrontGateText:
+ TX_FAR _Route22FrontGateText
+ db "@"