Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pret
GitHub Repository: pret/pokered
Path: blob/master/engine/pokemon/status_screen.asm
2019 views
1
DrawHP:
2
; Draws the HP bar in the stats screen
3
call GetPredefRegisters
4
ld a, $1
5
jr DrawHP_
6
7
DrawHP2:
8
; Draws the HP bar in the party screen
9
call GetPredefRegisters
10
ld a, $2
11
12
DrawHP_:
13
ld [wHPBarType], a
14
push hl
15
ld a, [wLoadedMonHP]
16
ld b, a
17
ld a, [wLoadedMonHP + 1]
18
ld c, a
19
or b
20
jr nz, .nonzeroHP
21
xor a
22
ld c, a
23
ld e, a
24
ld a, $6
25
ld d, a
26
jp .drawHPBarAndPrintFraction
27
.nonzeroHP
28
ld a, [wLoadedMonMaxHP]
29
ld d, a
30
ld a, [wLoadedMonMaxHP + 1]
31
ld e, a
32
predef HPBarLength
33
ld a, $6
34
ld d, a
35
ld c, a
36
.drawHPBarAndPrintFraction
37
pop hl
38
push de
39
push hl
40
push hl
41
call DrawHPBar
42
pop hl
43
ldh a, [hUILayoutFlags]
44
bit BIT_PARTY_MENU_HP_BAR, a
45
jr z, .printFractionBelowBar
46
ld bc, $9 ; right of bar
47
jr .printFraction
48
.printFractionBelowBar
49
ld bc, SCREEN_WIDTH + 1 ; below bar
50
.printFraction
51
add hl, bc
52
ld de, wLoadedMonHP
53
lb bc, 2, 3
54
call PrintNumber
55
ld a, '/'
56
ld [hli], a
57
ld de, wLoadedMonMaxHP
58
lb bc, 2, 3
59
call PrintNumber
60
pop hl
61
pop de
62
ret
63
64
StatusScreen:
65
call LoadMonData
66
ld a, [wMonDataLocation]
67
cp BOX_DATA
68
jr c, .DontRecalculate
69
; mon is in a box or daycare
70
ld a, [wLoadedMonBoxLevel]
71
ld [wLoadedMonLevel], a
72
ld [wCurEnemyLevel], a
73
ld hl, wLoadedMonHPExp - 1
74
ld de, wLoadedMonStats
75
ld b, $1
76
call CalcStats
77
.DontRecalculate
78
ld hl, wStatusFlags2
79
set BIT_NO_AUDIO_FADE_OUT, [hl]
80
ld a, $33
81
ldh [rAUDVOL], a ; Reduce the volume
82
call GBPalWhiteOutWithDelay3
83
call ClearScreen
84
call UpdateSprites
85
call LoadHpBarAndStatusTilePatterns
86
ld de, BattleHudTiles1 ; source
87
ld hl, vChars2 tile $6d ; dest
88
lb bc, BANK(BattleHudTiles1), 3
89
call CopyVideoDataDouble ; · :L and halfarrow line end
90
ld de, BattleHudTiles2
91
ld hl, vChars2 tile $78
92
lb bc, BANK(BattleHudTiles2), 1
93
call CopyVideoDataDouble ;
94
ld de, BattleHudTiles3
95
ld hl, vChars2 tile $76
96
lb bc, BANK(BattleHudTiles3), 2
97
call CopyVideoDataDouble ;
98
ld de, PTile
99
ld hl, vChars2 tile $72
100
lb bc, BANK(PTile), 1
101
call CopyVideoDataDouble ; bold P (for PP)
102
ldh a, [hTileAnimations]
103
push af
104
xor a
105
ldh [hTileAnimations], a
106
hlcoord 19, 1
107
lb bc, 6, 10
108
call DrawLineBox ; Draws the box around name, HP and status
109
ld de, -6
110
add hl, de
111
ld [hl], '<DOT>'
112
dec hl
113
ld [hl], ''
114
hlcoord 19, 9
115
lb bc, 8, 6
116
call DrawLineBox ; Draws the box around types, ID No. and OT
117
hlcoord 10, 9
118
ld de, TypesIDNoOTText
119
call PlaceString
120
hlcoord 11, 3
121
predef DrawHP
122
ld hl, wStatusScreenHPBarColor
123
call GetHealthBarColor
124
ld b, SET_PAL_STATUS_SCREEN
125
call RunPaletteCommand
126
hlcoord 16, 6
127
ld de, wLoadedMonStatus
128
call PrintStatusCondition
129
jr nz, .StatusWritten
130
hlcoord 16, 6
131
ld de, OKText
132
call PlaceString ; "OK"
133
.StatusWritten
134
hlcoord 9, 6
135
ld de, StatusText
136
call PlaceString ; "STATUS/"
137
hlcoord 14, 2
138
call PrintLevel
139
ld a, [wMonHIndex]
140
ld [wPokedexNum], a
141
ld [wCurSpecies], a
142
predef IndexToPokedex
143
hlcoord 3, 7
144
ld de, wPokedexNum
145
lb bc, LEADING_ZEROES | 1, 3
146
call PrintNumber ; Pokémon no.
147
hlcoord 11, 10
148
predef PrintMonType
149
ld hl, NamePointers2
150
call .GetStringPointer
151
ld d, h
152
ld e, l
153
hlcoord 9, 1
154
call PlaceString ; Pokémon name
155
ld hl, OTPointers
156
call .GetStringPointer
157
ld d, h
158
ld e, l
159
hlcoord 12, 16
160
call PlaceString ; OT
161
hlcoord 12, 14
162
ld de, wLoadedMonOTID
163
lb bc, LEADING_ZEROES | 2, 5
164
call PrintNumber ; ID Number
165
ld d, STATUS_SCREEN_STATS_BOX
166
call PrintStatsBox
167
call Delay3
168
call GBPalNormal
169
hlcoord 1, 0
170
call LoadFlippedFrontSpriteByMonIndex ; draw Pokémon picture
171
ld a, [wCurPartySpecies]
172
call PlayCry
173
call WaitForTextScrollButtonPress
174
pop af
175
ldh [hTileAnimations], a
176
ret
177
178
.GetStringPointer
179
ld a, [wMonDataLocation]
180
add a
181
ld c, a
182
ld b, 0
183
add hl, bc
184
ld a, [hli]
185
ld h, [hl]
186
ld l, a
187
ld a, [wMonDataLocation]
188
cp DAYCARE_DATA
189
ret z
190
ld a, [wWhichPokemon]
191
jp SkipFixedLengthTextEntries
192
193
OTPointers:
194
dw wPartyMonOT
195
dw wEnemyMonOT
196
dw wBoxMonOT
197
dw wDayCareMonOT
198
199
NamePointers2:
200
dw wPartyMonNicks
201
dw wEnemyMonNicks
202
dw wBoxMonNicks
203
dw wDayCareMonName
204
205
TypesIDNoOTText:
206
db "TYPE1/"
207
next "TYPE2/"
208
next "<ID>№/"
209
next "OT/"
210
next "@"
211
212
StatusText:
213
db "STATUS/@"
214
215
OKText:
216
db "OK@"
217
218
; Draws a line starting from hl high b and wide c
219
DrawLineBox:
220
ld de, SCREEN_WIDTH ; New line
221
.PrintVerticalLine
222
ld [hl], $78 ;
223
add hl, de
224
dec b
225
jr nz, .PrintVerticalLine
226
ld [hl], $77 ;
227
dec hl
228
.PrintHorizLine
229
ld [hl], $76 ;
230
dec hl
231
dec c
232
jr nz, .PrintHorizLine
233
ld [hl], $6f ; (halfarrow ending)
234
ret
235
236
PTile: INCBIN "gfx/font/P.1bpp"
237
238
PrintStatsBox:
239
ld a, d
240
ASSERT STATUS_SCREEN_STATS_BOX == 0
241
and a
242
jr nz, .LevelUpStatsBox ; battle or Rare Candy
243
hlcoord 0, 8
244
ld b, 8
245
ld c, 8
246
call TextBoxBorder
247
hlcoord 1, 9
248
ld bc, SCREEN_WIDTH + 5 ; one row down and 5 columns right
249
jr .PrintStats
250
.LevelUpStatsBox
251
hlcoord 9, 2
252
ld b, 8
253
ld c, 9
254
call TextBoxBorder
255
hlcoord 11, 3
256
ld bc, SCREEN_WIDTH + 4 ; one row down and 4 columns right
257
.PrintStats
258
push bc
259
push hl
260
ld de, .StatsText
261
call PlaceString
262
pop hl
263
pop bc
264
add hl, bc
265
ld de, wLoadedMonAttack
266
lb bc, 2, 3
267
call .PrintStat
268
ld de, wLoadedMonDefense
269
call .PrintStat
270
ld de, wLoadedMonSpeed
271
call .PrintStat
272
ld de, wLoadedMonSpecial
273
jp PrintNumber
274
275
.PrintStat:
276
push hl
277
call PrintNumber
278
pop hl
279
ld de, SCREEN_WIDTH * 2
280
add hl, de
281
ret
282
283
.StatsText:
284
db "ATTACK"
285
next "DEFENSE"
286
next "SPEED"
287
next "SPECIAL@"
288
289
StatusScreen2:
290
ldh a, [hTileAnimations]
291
push af
292
xor a
293
ldh [hTileAnimations], a
294
ldh [hAutoBGTransferEnabled], a
295
ld bc, NUM_MOVES + 1
296
ld hl, wMoves
297
call FillMemory
298
ld hl, wLoadedMonMoves
299
ld de, wMoves
300
ld bc, NUM_MOVES
301
call CopyData
302
callfar FormatMovesString
303
hlcoord 9, 2
304
lb bc, 5, 10
305
call ClearScreenArea ; Clear under name
306
hlcoord 19, 3
307
ld [hl], $78
308
hlcoord 0, 8
309
ld b, 8
310
ld c, 18
311
call TextBoxBorder ; Draw move container
312
hlcoord 2, 9
313
ld de, wMovesString
314
call PlaceString ; Print moves
315
ld a, [wNumMovesMinusOne]
316
inc a
317
ld c, a ; number of known moves
318
ld a, NUM_MOVES
319
sub c
320
ld b, a ; number of blank moves
321
hlcoord 11, 10
322
ld de, SCREEN_WIDTH * 2
323
ld a, '<BOLD_P>'
324
call StatusScreen_PrintPP ; Print "PP"
325
ld a, b
326
and a
327
jr z, .InitPP
328
ld c, a
329
ld a, '-'
330
call StatusScreen_PrintPP ; Fill the rest with --
331
.InitPP
332
ld hl, wLoadedMonMoves
333
decoord 14, 10
334
ld b, 0
335
.PrintPP
336
ld a, [hli]
337
and a
338
jr z, .PPDone
339
push bc
340
push hl
341
push de
342
ld hl, wCurrentMenuItem
343
ld a, [hl]
344
push af
345
ld a, b
346
ld [hl], a
347
push hl
348
callfar GetMaxPP
349
pop hl
350
pop af
351
ld [hl], a
352
pop de
353
pop hl
354
push hl
355
ld bc, MON_PP - MON_MOVES - 1
356
add hl, bc
357
ld a, [hl]
358
and PP_MASK
359
ld [wStatusScreenCurrentPP], a
360
ld h, d
361
ld l, e
362
push hl
363
ld de, wStatusScreenCurrentPP
364
lb bc, 1, 2
365
call PrintNumber
366
ld a, '/'
367
ld [hli], a
368
ld de, wMaxPP
369
lb bc, 1, 2
370
call PrintNumber
371
pop hl
372
ld de, SCREEN_WIDTH * 2
373
add hl, de
374
ld d, h
375
ld e, l
376
pop hl
377
pop bc
378
inc b
379
ld a, b
380
cp NUM_MOVES
381
jr nz, .PrintPP
382
.PPDone
383
hlcoord 9, 3
384
ld de, StatusScreenExpText
385
call PlaceString
386
ld a, [wLoadedMonLevel]
387
push af
388
cp MAX_LEVEL
389
jr z, .Level100
390
inc a
391
ld [wLoadedMonLevel], a ; Increase temporarily if not 100
392
.Level100
393
hlcoord 14, 6
394
ld [hl], '<to>'
395
inc hl
396
inc hl
397
call PrintLevel
398
pop af
399
ld [wLoadedMonLevel], a
400
ld de, wLoadedMonExp
401
hlcoord 12, 4
402
lb bc, 3, 7
403
call PrintNumber ; exp
404
call CalcExpToLevelUp
405
ld de, wLoadedMonExp
406
hlcoord 7, 6
407
lb bc, 3, 7
408
call PrintNumber ; exp needed to level up
409
410
; unneeded, this clears the diacritic characters in JPN versions
411
hlcoord 9, 0
412
call StatusScreen_ClearName
413
414
hlcoord 9, 1
415
call StatusScreen_ClearName
416
ld a, [wMonHIndex]
417
ld [wNamedObjectIndex], a
418
call GetMonName
419
hlcoord 9, 1
420
call PlaceString
421
ld a, $1
422
ldh [hAutoBGTransferEnabled], a
423
call Delay3
424
call WaitForTextScrollButtonPress
425
pop af
426
ldh [hTileAnimations], a
427
ld hl, wStatusFlags2
428
res BIT_NO_AUDIO_FADE_OUT, [hl]
429
ld a, $77
430
ldh [rAUDVOL], a
431
call GBPalWhiteOut
432
jp ClearScreen
433
434
CalcExpToLevelUp:
435
ld a, [wLoadedMonLevel]
436
cp MAX_LEVEL
437
jr z, .atMaxLevel
438
inc a
439
ld d, a
440
callfar CalcExperience
441
ld hl, wLoadedMonExp + 2
442
ldh a, [hExperience + 2]
443
sub [hl]
444
ld [hld], a
445
ldh a, [hExperience + 1]
446
sbc [hl]
447
ld [hld], a
448
ldh a, [hExperience]
449
sbc [hl]
450
ld [hld], a
451
ret
452
.atMaxLevel
453
ld hl, wLoadedMonExp
454
xor a
455
ld [hli], a
456
ld [hli], a
457
ld [hl], a
458
ret
459
460
StatusScreenExpText:
461
db "EXP POINTS"
462
next "LEVEL UP@"
463
464
StatusScreen_ClearName:
465
ld bc, NAME_LENGTH - 1
466
ld a, ' '
467
jp FillMemory
468
469
StatusScreen_PrintPP:
470
; print PP or -- c times, going down two rows each time
471
ld [hli], a
472
ld [hld], a
473
add hl, de
474
dec c
475
jr nz, StatusScreen_PrintPP
476
ret
477
478