summaryrefslogtreecommitdiff
path: root/engine/bank3c/main.asm
blob: 468a64123d712683789022226573e060dcc6faf9 (plain)
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
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
PlayPikachuSoundClip:: ; f0000 (3c:4000)
	ld a, e
	ld e, a
	ld d, $0
	ld hl, PikachuCriesPointerTable
	add hl, de
	add hl, de
	add hl, de
	ld b, [hl] ; bank of pikachu cry data
	inc hl
	ld a, [hli] ; cry data pointer
	ld h, [hl]
	ld l, a
	ld c, $4
.loop
	dec c
	jr z, .asm_f0019
	call DelayFrame
	jr .loop
.asm_f0019
	di
	push bc
	push hl
	ld a, $80
	ld [rNR52], a
	ld a, $77
	ld [rNR50], a
	xor a
	ld [rNR30], a
	ld hl, $ff30 ; wave data
	ld de, wRedrawRowOrColumnSrcTiles
.saveWaveDataLoop
	ld a, [hl]
	ld [de], a
	inc de
	ld a, $ff
	ld [hli], a
	ld a, l
	cp $40 ; end of wave data
	jr nz, .saveWaveDataLoop
	ld a, $80
	ld [rNR30], a
	ld a, [rNR51]
	or $44
	ld [rNR51], a
	ld a, $ff
	ld [rNR31], a
	ld a, $20
	ld [rNR32], a
	ld a, $ff
	ld [rNR33], a
	ld a, $87
	ld [rNR34], a
	pop hl
	pop bc
	call PlayPikachuPCM
	xor a
	ld [wc0f3], a
	ld [wc0f4], a
	ld a, $80
	ld [rNR52], a
	xor a
	ld [rNR30], a
	ld hl, $ff30
	ld de, wRedrawRowOrColumnSrcTiles
.reloadWaveDataLoop
	ld a, [de]
	inc de
	ld [hli], a
	ld a, l
	cp $40 ; end of wave data
	jr nz, .reloadWaveDataLoop
	ld a, $80
	ld [rNR30], a
	ld a, [rNR51]
	and $bb
	ld [rNR51], a
	xor a
	ld [wChannelSoundIDs+CH4], a
	ld [wChannelSoundIDs+CH5], a
	ld [wChannelSoundIDs+CH6], a
	ld [wChannelSoundIDs+CH7], a
	ld a, [H_LOADEDROMBANK]
	ei
	ret

PikachuCriesPointerTable: ; f008e (3c:408e)
; format:
; db bank
; dw pointer to cry

; bank 21
	dbw BANK(PikachuCry1), PikachuCry1 ; 21:4000
	dbw BANK(PikachuCry2), PikachuCry2 ; 21:491a
	dbw BANK(PikachuCry3), PikachuCry3 ; 21:4fdc
	dbw BANK(PikachuCry4), PikachuCry4 ; 21:59ee
	
; bank 22
	dbw BANK(PikachuCry5), PikachuCry5 ; 22:4000
	dbw BANK(PikachuCry6), PikachuCry6 ; 22:5042
	dbw BANK(PikachuCry7), PikachuCry7 ; 22:6254
	
; bank 23
	dbw BANK(PikachuCry8), PikachuCry8 ; 23:4000
	dbw BANK(PikachuCry9), PikachuCry9 ; 23:50ca
	dbw BANK(PikachuCry10), PikachuCry10 ; 23:5e0c

; bank 24
	dbw BANK(PikachuCry11), PikachuCry11 ; 24:4000
	dbw BANK(PikachuCry12), PikachuCry12 ; 24:4722
	dbw BANK(PikachuCry13), PikachuCry13 ; 24:54a4
	
; bank 25
	dbw BANK(PikachuCry14), PikachuCry14 ; 25:4000
	dbw BANK(PikachuCry15), PikachuCry15 ; 25:589a
	
; banks 31-34, in no particular order

	dbw BANK(PikachuCry16), PikachuCry16 ; 31:4000
	dbw BANK(PikachuCry17), PikachuCry17 ; 34:4000
	dbw BANK(PikachuCry18), PikachuCry18 ; 31:549a
	dbw BANK(PikachuCry19), PikachuCry19 ; 33:4000
	dbw BANK(PikachuCry20), PikachuCry20 ; 32:4000
	dbw BANK(PikachuCry21), PikachuCry21 ; 32:6002
	dbw BANK(PikachuCry22), PikachuCry22 ; 31:63a4
	dbw BANK(PikachuCry23), PikachuCry23 ; 34:4862
	dbw BANK(PikachuCry24), PikachuCry24 ; 33:5632
	dbw BANK(PikachuCry25), PikachuCry25 ; 34:573c
	dbw BANK(PikachuCry26), PikachuCry26 ; 33:725c
	
; bank 35
	dbw BANK(PikachuCry27), PikachuCry27 ; 35:4000
	dbw BANK(PikachuCry28), PikachuCry28 ; 35:4b5a
	dbw BANK(PikachuCry29), PikachuCry29 ; 35:5da4
	dbw BANK(PikachuCry30), PikachuCry30 ; 35:69ce
	dbw BANK(PikachuCry31), PikachuCry31 ; 35:6e80
	
; bank 36
	dbw BANK(PikachuCry32), PikachuCry32 ; 36:4000
	dbw BANK(PikachuCry33), PikachuCry33 ; 36:458a
	dbw BANK(PikachuCry34), PikachuCry34 ; 36:523c
	
; bank 37
	dbw BANK(PikachuCry35), PikachuCry35 ; 37:4000
	dbw BANK(PikachuCry36), PikachuCry36 ; 37:522a

; banks 36-38
	dbw BANK(PikachuCry37), PikachuCry37 ; 38:4000
	dbw BANK(PikachuCry38), PikachuCry38 ; 38:4dfa
	dbw BANK(PikachuCry39), PikachuCry39 ; 37:6e0c
	dbw BANK(PikachuCry40), PikachuCry40 ; 38:5a64
	dbw BANK(PikachuCry41), PikachuCry41 ; 36:6746
	dbw BANK(PikachuCry42), PikachuCry42 ; 38:6976

INCLUDE "engine/bank3c/overworld.asm"

ResetStatusAndHalveMoneyOnBlackout:: ; f0274 (3c:4274)
; Reset player status on blackout.
	xor a
	ld [wd435],a
	xor a ; gamefreak copypasting functions (double xor a)
	ld [wBattleResult], a
	ld [wWalkBikeSurfState], a
	ld [wIsInBattle], a
	ld [wMapPalOffset], a
	ld [wNPCMovementScriptFunctionNum], a
	ld [hJoyHeld], a
	ld [wNPCMovementScriptPointerTableNum], a
	ld [wFlags_0xcd60], a

	ld [$ff9f], a
	ld [$ff9f + 1], a
	ld [$ff9f + 2], a
	call HasEnoughMoney
	jr c, .lostmoney ; never happens

	; Halve the player's money.
	ld a, [wPlayerMoney]
	ld [$ff9f], a
	ld a, [wPlayerMoney + 1]
	ld [$ff9f + 1], a
	ld a, [wPlayerMoney + 2]
	ld [$ff9f + 2], a
	xor a
	ld [$ffa2], a
	ld [$ffa3], a
	ld a, 2
	ld [$ffa4], a
	predef DivideBCDPredef3
	ld a, [$ffa2]
	ld [wPlayerMoney], a
	ld a, [$ffa2 + 1]
	ld [wPlayerMoney + 1], a
	ld a, [$ffa2 + 2]
	ld [wPlayerMoney + 2], a

.lostmoney
	ld hl, wd732
	set 2, [hl]
	res 3, [hl]
	set 6, [hl]
	ld a, %11111111
	ld [wJoyIgnore], a
	predef_jump HealParty
	
Func_f02da:: ; f02da (3c:42da)
	ld a,[wCurMap]
	cp VERMILION_GYM ; ??? new thing about verm gym?
	jr z,.asm_f02ee
	ld c,a
	ld hl,Pointer_f02fa
.asm_f02e5
	ld a,[hli]
	cp c
	jr z,.asm_f02f4
	cp a,$ff
	jr nz,.asm_f02e5
	ret
.asm_f02ee
	ld hl,wd126
	set 6,[hl]
	ret
.asm_f02f4
	ld hl,wd126
	set 5,[hl]
	ret

Pointer_f02fa:: ; f02fa (3c:42fa)
	db $cf,$d0,$d1,$d2,$d3,$d4
	db $d5,$e9,$ea,$eb,$d6,$d7
	db $d8,$a5,$a6,$87,$c7,$ca
	db $c6,$6c,$c2,$71,$f5,$f6
	db $f7,$ff

BeachHouse_GFX:: ; f0314 (3c:4314)
	INCBIN "gfx/tilesets/beachhouse.2bpp"

BeachHouse_Block:: ; f0914 (3c:4914)
	INCBIN "gfx/blocksets/beachhouse.bst"

Func_f0a54:: ; f0a54 (3c:4a54)
	ret
	
Func_f0a55:: ; f0a55 (3c:4a55)
	ld hl,Pointer_f0a76 ; 3c:4a76
.loop
	ld a,[hli]
	cp a,$ff
	ret z
	ld b,a
	ld a,[wCurMap]
	cp b
	jr z,.asm_f0a68
	inc hl
	inc hl
	inc hl
	jr .loop

.asm_f0a68
	ld a,[hli]
	ld c,a
	ld b,$0
	ld a,[hli]
	ld h,[hl]
	ld l,a
	ld de,wMissableObjectList
	call CopyData
	ret

Pointer_f0a76:: ; f0a76 (3c:4a76)
	db $27,$07,$7b,$4a,$ff
	db $01,$ec,$02,$ed,$03,$ee,$ff

	dr $f0a82,$f220e
BeachHouse_h: ; f220e (3c:620e)
;INCLUDE "data/mapHeaders/beach_house.asm"
	dr $f220e,$f25f8
CheckForHiddenObject:: ; f25f8 (3c:65f8)
	dr $f25f8,$f4000