Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pret
GitHub Repository: pret/pokered
Path: blob/master/engine/overworld/auto_movement.asm
1271 views
1
PlayerStepOutFromDoor::
2
ld hl, wStatusFlags5 ; should this be wMovementFlags?
3
res BIT_EXITING_DOOR, [hl]
4
call IsPlayerStandingOnDoorTile
5
jr nc, .notStandingOnDoor
6
ld a, PAD_SELECT | PAD_START | PAD_CTRL_PAD
7
ld [wJoyIgnore], a
8
ld hl, wMovementFlags
9
set BIT_EXITING_DOOR, [hl]
10
ld a, $1
11
ld [wSimulatedJoypadStatesIndex], a
12
ld a, PAD_DOWN
13
ld [wSimulatedJoypadStatesEnd], a
14
xor a
15
ld [wSpritePlayerStateData1ImageIndex], a
16
call StartSimulatingJoypadStates
17
ret
18
.notStandingOnDoor
19
xor a
20
ld [wUnusedOverrideSimulatedJoypadStatesIndex], a
21
ld [wSimulatedJoypadStatesIndex], a
22
ld [wSimulatedJoypadStatesEnd], a
23
ld hl, wMovementFlags
24
res BIT_STANDING_ON_DOOR, [hl]
25
res BIT_EXITING_DOOR, [hl]
26
ld hl, wStatusFlags5
27
res BIT_SCRIPTED_MOVEMENT_STATE, [hl]
28
ret
29
30
_EndNPCMovementScript::
31
ld hl, wStatusFlags5
32
res BIT_SCRIPTED_MOVEMENT_STATE, [hl]
33
ld hl, wStatusFlags4
34
res BIT_INIT_SCRIPTED_MOVEMENT, [hl]
35
ld hl, wMovementFlags
36
res BIT_STANDING_ON_DOOR, [hl]
37
res BIT_EXITING_DOOR, [hl]
38
xor a
39
ld [wNPCMovementScriptSpriteOffset], a
40
ld [wNPCMovementScriptPointerTableNum], a
41
ld [wNPCMovementScriptFunctionNum], a
42
ld [wUnusedOverrideSimulatedJoypadStatesIndex], a
43
ld [wSimulatedJoypadStatesIndex], a
44
ld [wSimulatedJoypadStatesEnd], a
45
ret
46
47
PalletMovementScriptPointerTable::
48
dw PalletMovementScript_OakMoveLeft
49
dw PalletMovementScript_PlayerMoveLeft
50
dw PalletMovementScript_WaitAndWalkToLab
51
dw PalletMovementScript_WalkToLab
52
dw PalletMovementScript_Done
53
54
PalletMovementScript_OakMoveLeft:
55
ld a, [wXCoord]
56
sub $a
57
ld [wNumStepsToTake], a
58
jr z, .playerOnLeftTile
59
; The player is on the right tile of the northern path out of Pallet Town and
60
; Prof. Oak is below.
61
; Make Prof. Oak step to the left.
62
ld b, 0
63
ld c, a
64
ld hl, wNPCMovementDirections2
65
ld a, NPC_MOVEMENT_LEFT
66
call FillMemory
67
ld [hl], $ff
68
ld a, [wSpriteIndex]
69
ldh [hSpriteIndex], a
70
ld de, wNPCMovementDirections2
71
call MoveSprite
72
ld a, $1
73
ld [wNPCMovementScriptFunctionNum], a
74
jr .done
75
; The player is on the left tile of the northern path out of Pallet Town and
76
; Prof. Oak is below.
77
; Prof. Oak is already where he needs to be.
78
.playerOnLeftTile
79
ld a, $3
80
ld [wNPCMovementScriptFunctionNum], a
81
.done
82
ld hl, wStatusFlags7
83
set BIT_NO_MAP_MUSIC, [hl]
84
ld a, PAD_SELECT | PAD_START | PAD_CTRL_PAD
85
ld [wJoyIgnore], a
86
ret
87
88
PalletMovementScript_PlayerMoveLeft:
89
ld a, [wStatusFlags5]
90
bit BIT_SCRIPTED_NPC_MOVEMENT, a
91
ret nz ; return if Oak is still moving
92
ld a, [wNumStepsToTake]
93
ld [wSimulatedJoypadStatesIndex], a
94
ldh [hNPCMovementDirections2Index], a
95
predef ConvertNPCMovementDirectionsToJoypadMasks
96
call StartSimulatingJoypadStates
97
ld a, $2
98
ld [wNPCMovementScriptFunctionNum], a
99
ret
100
101
PalletMovementScript_WaitAndWalkToLab:
102
ld a, [wSimulatedJoypadStatesIndex]
103
and a ; is the player done moving left yet?
104
ret nz
105
106
PalletMovementScript_WalkToLab:
107
xor a
108
ld [wOverrideSimulatedJoypadStatesMask], a
109
ld a, [wSpriteIndex]
110
swap a
111
ld [wNPCMovementScriptSpriteOffset], a
112
xor a
113
ld [wSpritePlayerStateData2MovementByte1], a
114
ld hl, wSimulatedJoypadStatesEnd
115
ld de, RLEList_PlayerWalkToLab
116
call DecodeRLEList
117
dec a
118
ld [wSimulatedJoypadStatesIndex], a
119
ld hl, wNPCMovementDirections2
120
ld de, RLEList_ProfOakWalkToLab
121
call DecodeRLEList
122
ld hl, wStatusFlags4
123
res BIT_INIT_SCRIPTED_MOVEMENT, [hl]
124
ld hl, wStatusFlags5
125
set BIT_SCRIPTED_MOVEMENT_STATE, [hl]
126
ld a, $4
127
ld [wNPCMovementScriptFunctionNum], a
128
ret
129
130
RLEList_ProfOakWalkToLab:
131
db NPC_MOVEMENT_DOWN, 5
132
db NPC_MOVEMENT_LEFT, 1
133
db NPC_MOVEMENT_DOWN, 5
134
db NPC_MOVEMENT_RIGHT, 3
135
db NPC_MOVEMENT_UP, 1
136
db NPC_CHANGE_FACING, 1
137
db -1 ; end
138
139
RLEList_PlayerWalkToLab:
140
db PAD_UP, 2
141
db PAD_RIGHT, 3
142
db PAD_DOWN, 5
143
db PAD_LEFT, 1
144
db PAD_DOWN, 6
145
db -1 ; end
146
147
PalletMovementScript_Done:
148
ld a, [wSimulatedJoypadStatesIndex]
149
and a
150
ret nz
151
ld a, HS_PALLET_TOWN_OAK
152
ld [wMissableObjectIndex], a
153
predef HideObject
154
ld hl, wStatusFlags5
155
res BIT_SCRIPTED_MOVEMENT_STATE, [hl]
156
ld hl, wStatusFlags4
157
res BIT_INIT_SCRIPTED_MOVEMENT, [hl]
158
jp EndNPCMovementScript
159
160
PewterMuseumGuyMovementScriptPointerTable::
161
dw PewterMovementScript_WalkToMuseum
162
dw PewterMovementScript_Done
163
164
PewterMovementScript_WalkToMuseum:
165
ld a, BANK(Music_MuseumGuy)
166
ld [wAudioROMBank], a
167
ld [wAudioSavedROMBank], a
168
ld a, MUSIC_MUSEUM_GUY
169
ld [wNewSoundID], a
170
call PlaySound
171
ld a, [wSpriteIndex]
172
swap a
173
ld [wNPCMovementScriptSpriteOffset], a
174
call StartSimulatingJoypadStates
175
ld hl, wSimulatedJoypadStatesEnd
176
ld de, RLEList_PewterMuseumPlayer
177
call DecodeRLEList
178
dec a
179
ld [wSimulatedJoypadStatesIndex], a
180
xor a
181
ld [wWhichPewterGuy], a
182
predef PewterGuys
183
ld hl, wNPCMovementDirections2
184
ld de, RLEList_PewterMuseumGuy
185
call DecodeRLEList
186
ld hl, wStatusFlags4
187
res BIT_INIT_SCRIPTED_MOVEMENT, [hl]
188
ld a, $1
189
ld [wNPCMovementScriptFunctionNum], a
190
ret
191
192
RLEList_PewterMuseumPlayer:
193
db NO_INPUT, 1
194
db PAD_UP, 3
195
db PAD_LEFT, 13
196
db PAD_UP, 6
197
db -1 ; end
198
199
RLEList_PewterMuseumGuy:
200
db NPC_MOVEMENT_UP, 6
201
db NPC_MOVEMENT_LEFT, 13
202
db NPC_MOVEMENT_UP, 3
203
db NPC_MOVEMENT_LEFT, 1
204
db -1 ; end
205
206
PewterMovementScript_Done:
207
ld a, [wSimulatedJoypadStatesIndex]
208
and a
209
ret nz
210
ld hl, wStatusFlags5
211
res BIT_SCRIPTED_MOVEMENT_STATE, [hl]
212
ld hl, wStatusFlags4
213
res BIT_INIT_SCRIPTED_MOVEMENT, [hl]
214
jp EndNPCMovementScript
215
216
PewterGymGuyMovementScriptPointerTable::
217
dw PewterMovementScript_WalkToGym
218
dw PewterMovementScript_Done
219
220
PewterMovementScript_WalkToGym:
221
ld a, BANK(Music_MuseumGuy)
222
ld [wAudioROMBank], a
223
ld [wAudioSavedROMBank], a
224
ld a, MUSIC_MUSEUM_GUY
225
ld [wNewSoundID], a
226
call PlaySound
227
ld a, [wSpriteIndex]
228
swap a
229
ld [wNPCMovementScriptSpriteOffset], a
230
xor a
231
ld [wSpritePlayerStateData2MovementByte1], a
232
ld hl, wSimulatedJoypadStatesEnd
233
ld de, RLEList_PewterGymPlayer
234
call DecodeRLEList
235
dec a
236
ld [wSimulatedJoypadStatesIndex], a
237
ld a, 1
238
ld [wWhichPewterGuy], a
239
predef PewterGuys
240
ld hl, wNPCMovementDirections2
241
ld de, RLEList_PewterGymGuy
242
call DecodeRLEList
243
ld hl, wStatusFlags4
244
res BIT_INIT_SCRIPTED_MOVEMENT, [hl]
245
ld hl, wStatusFlags5
246
set BIT_SCRIPTED_MOVEMENT_STATE, [hl]
247
ld a, $1
248
ld [wNPCMovementScriptFunctionNum], a
249
ret
250
251
RLEList_PewterGymPlayer:
252
db NO_INPUT, 1
253
db PAD_RIGHT, 2
254
db PAD_DOWN, 5
255
db PAD_LEFT, 11
256
db PAD_UP, 5
257
db PAD_LEFT, 15
258
db -1 ; end
259
260
RLEList_PewterGymGuy:
261
db NPC_MOVEMENT_DOWN, 2
262
db NPC_MOVEMENT_LEFT, 15
263
db NPC_MOVEMENT_UP, 5
264
db NPC_MOVEMENT_LEFT, 11
265
db NPC_MOVEMENT_DOWN, 5
266
db NPC_MOVEMENT_RIGHT, 3
267
db -1 ; end
268
269
SetEnemyTrainerToStayAndFaceAnyDirection::
270
ld a, [wCurMap]
271
cp POKEMON_TOWER_7F
272
ret z ; the Rockets on Pokemon Tower 7F leave after battling, so don't set them
273
ld hl, RivalIDs
274
ld a, [wEngagedTrainerClass]
275
ld b, a
276
.loop
277
ld a, [hli]
278
cp -1
279
jr z, .notRival
280
cp b
281
ret z ; the rival leaves after battling, so don't set him
282
jr .loop
283
.notRival
284
ld a, [wSpriteIndex]
285
ldh [hSpriteIndex], a
286
jp SetSpriteMovementBytesToFF
287
288
RivalIDs:
289
db OPP_RIVAL1
290
db OPP_RIVAL2
291
db OPP_RIVAL3
292
db -1 ; end
293
294