-
Notifications
You must be signed in to change notification settings - Fork 1k
/
PokemonTower2F.asm
194 lines (177 loc) · 4.46 KB
/
PokemonTower2F.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
PokemonTower2F_Script:
call EnableAutoTextBoxDrawing
ld hl, PokemonTower2F_ScriptPointers
ld a, [wPokemonTower2FCurScript]
jp CallFunctionInTable
PokemonTower2FResetRivalEncounter:
xor a ; SCRIPT_POKEMONTOWER2F_DEFAULT
ld [wJoyIgnore], a
ld [wPokemonTower2FCurScript], a
ld [wCurMapScript], a
ret
PokemonTower2F_ScriptPointers:
def_script_pointers
dw_const PokemonTower2FDefaultScript, SCRIPT_POKEMONTOWER2F_DEFAULT
dw_const PokemonTower2FDefeatedRivalScript, SCRIPT_POKEMONTOWER2F_DEFEATED_RIVAL
dw_const PokemonTower2FRivalExitsScript, SCRIPT_POKEMONTOWER2F_RIVAL_EXITS
PokemonTower2FDefaultScript:
IF DEF(_DEBUG)
call DebugPressedOrHeldB
ret nz
ENDC
CheckEvent EVENT_BEAT_POKEMON_TOWER_RIVAL
ret nz
ld hl, PokemonTower2FRivalEncounterEventCoords
call ArePlayerCoordsInArray
ret nc
ld a, SFX_STOP_ALL_MUSIC
ld [wNewSoundID], a
call PlaySound
ld c, BANK(Music_MeetRival)
ld a, MUSIC_MEET_RIVAL
call PlayMusic
ResetEvent EVENT_POKEMON_TOWER_RIVAL_ON_LEFT
ld a, [wCoordIndex]
cp $1
ld a, PLAYER_DIR_UP
ld b, SPRITE_FACING_DOWN
jr nz, .player_below_rival
; the rival is on the left side and the player is on the right side
SetEvent EVENT_POKEMON_TOWER_RIVAL_ON_LEFT
ld a, PLAYER_DIR_LEFT
ld b, SPRITE_FACING_RIGHT
.player_below_rival
ld [wPlayerMovingDirection], a
ld a, POKEMONTOWER2F_RIVAL
ldh [hSpriteIndex], a
ld a, b
ldh [hSpriteFacingDirection], a
call SetSpriteFacingDirectionAndDelay
ld a, TEXT_POKEMONTOWER2F_RIVAL
ldh [hTextID], a
call DisplayTextID
xor a
ldh [hJoyHeld], a
ldh [hJoyPressed], a
ret
PokemonTower2FRivalEncounterEventCoords:
dbmapcoord 15, 5
dbmapcoord 14, 6
db $0F ; end? (should be $ff?)
PokemonTower2FDefeatedRivalScript:
ld a, [wIsInBattle]
cp $ff
jp z, PokemonTower2FResetRivalEncounter
ld a, D_RIGHT | D_LEFT | D_UP | D_DOWN
ld [wJoyIgnore], a
SetEvent EVENT_BEAT_POKEMON_TOWER_RIVAL
ld a, TEXT_POKEMONTOWER2F_RIVAL
ldh [hTextID], a
call DisplayTextID
ld de, PokemonTower2FRivalDownThenRightMovement
CheckEvent EVENT_POKEMON_TOWER_RIVAL_ON_LEFT
jr nz, .got_movement
ld de, PokemonTower2FRivalRightThenDownMovement
.got_movement
ld a, POKEMONTOWER2F_RIVAL
ldh [hSpriteIndex], a
call MoveSprite
ld a, SFX_STOP_ALL_MUSIC
ld [wNewSoundID], a
call PlaySound
farcall Music_RivalAlternateStart
ld a, SCRIPT_POKEMONTOWER2F_RIVAL_EXITS
ld [wPokemonTower2FCurScript], a
ld [wCurMapScript], a
ret
PokemonTower2FRivalRightThenDownMovement:
db NPC_MOVEMENT_RIGHT
db NPC_MOVEMENT_DOWN
db NPC_MOVEMENT_DOWN
db NPC_MOVEMENT_RIGHT
db NPC_MOVEMENT_DOWN
db NPC_MOVEMENT_DOWN
db NPC_MOVEMENT_RIGHT
db NPC_MOVEMENT_RIGHT
db -1 ; end
PokemonTower2FRivalDownThenRightMovement:
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_DOWN
db NPC_MOVEMENT_DOWN
db -1 ; end
PokemonTower2FRivalExitsScript:
ld a, [wStatusFlags5]
bit BIT_SCRIPTED_NPC_MOVEMENT, a
ret nz
ld a, HS_POKEMON_TOWER_2F_RIVAL
ld [wMissableObjectIndex], a
predef HideObject
xor a
ld [wJoyIgnore], a
call PlayDefaultMusic
ld a, SCRIPT_POKEMONTOWER2F_DEFAULT
ld [wPokemonTower2FCurScript], a
ld [wCurMapScript], a
ret
PokemonTower2F_TextPointers:
def_text_pointers
dw_const PokemonTower2FRivalText, TEXT_POKEMONTOWER2F_RIVAL
dw_const PokemonTower2FChannelerText, TEXT_POKEMONTOWER2F_CHANNELER
PokemonTower2FRivalText:
text_asm
CheckEvent EVENT_BEAT_POKEMON_TOWER_RIVAL
jr z, .do_battle
ld hl, .HowsYourDexText
call PrintText
jr .text_script_end
.do_battle
ld hl, .WhatBringsYouHereText
call PrintText
ld hl, wStatusFlags3
set BIT_TALKED_TO_TRAINER, [hl]
set BIT_PRINT_END_BATTLE_TEXT, [hl]
ld hl, .DefeatedText
ld de, .VictoryText
call SaveEndBattleTextPointers
ld a, OPP_RIVAL2
ld [wCurOpponent], a
; select which team to use during the encounter
ld a, [wRivalStarter]
cp STARTER2
jr nz, .NotSquirtle
ld a, $4
jr .done
.NotSquirtle
cp STARTER3
jr nz, .Charmander
ld a, $5
jr .done
.Charmander
ld a, $6
.done
ld [wTrainerNo], a
ld a, SCRIPT_POKEMONTOWER2F_DEFEATED_RIVAL
ld [wPokemonTower2FCurScript], a
ld [wCurMapScript], a
.text_script_end
jp TextScriptEnd
.WhatBringsYouHereText:
text_far _PokemonTower2FRivalWhatBringsYouHereText
text_end
.DefeatedText:
text_far _PokemonTower2FRivalDefeatedText
text_end
.VictoryText:
text_far _PokemonTower2FRivalVictoryText
text_end
.HowsYourDexText:
text_far _PokemonTower2FRivalHowsYourDexText
text_end
PokemonTower2FChannelerText:
text_far _PokemonTower2FChannelerText
text_end