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