Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pret
GitHub Repository: pret/pokered
Path: blob/master/engine/menus/naming_screen.asm
1271 views
1
AskName:
2
call SaveScreenTilesToBuffer1
3
call GetPredefRegisters
4
push hl
5
ld a, [wIsInBattle]
6
dec a
7
hlcoord 0, 0
8
ld b, 4
9
ld c, 11
10
call z, ClearScreenArea ; only if in wild battle
11
ld a, [wCurPartySpecies]
12
ld [wNamedObjectIndex], a
13
call GetMonName
14
ld hl, DoYouWantToNicknameText
15
call PrintText
16
hlcoord 14, 7
17
lb bc, 8, 15
18
ld a, TWO_OPTION_MENU
19
ld [wTextBoxID], a
20
call DisplayTextBoxID
21
pop hl
22
ld a, [wCurrentMenuItem]
23
and a
24
jr nz, .declinedNickname
25
ld a, [wUpdateSpritesEnabled]
26
push af
27
xor a
28
ld [wUpdateSpritesEnabled], a
29
push hl
30
ld a, NAME_MON_SCREEN
31
ld [wNamingScreenType], a
32
call DisplayNamingScreen
33
ld a, [wIsInBattle]
34
and a
35
jr nz, .inBattle
36
call ReloadMapSpriteTilePatterns
37
.inBattle
38
call LoadScreenTilesFromBuffer1
39
pop hl
40
pop af
41
ld [wUpdateSpritesEnabled], a
42
ld a, [wStringBuffer]
43
cp "@"
44
ret nz
45
.declinedNickname
46
ld d, h
47
ld e, l
48
ld hl, wNameBuffer
49
ld bc, NAME_LENGTH
50
jp CopyData
51
52
DoYouWantToNicknameText:
53
text_far _DoYouWantToNicknameText
54
text_end
55
56
DisplayNameRaterScreen::
57
ld hl, wBuffer
58
xor a
59
ld [wUpdateSpritesEnabled], a
60
ld a, NAME_MON_SCREEN
61
ld [wNamingScreenType], a
62
call DisplayNamingScreen
63
call GBPalWhiteOutWithDelay3
64
call RestoreScreenTilesAndReloadTilePatterns
65
call LoadGBPal
66
ld a, [wStringBuffer]
67
cp "@"
68
jr z, .playerCancelled
69
ld hl, wPartyMonNicks
70
ld bc, NAME_LENGTH
71
ld a, [wWhichPokemon]
72
call AddNTimes
73
ld e, l
74
ld d, h
75
ld hl, wBuffer
76
ld bc, NAME_LENGTH
77
call CopyData
78
and a
79
ret
80
.playerCancelled
81
scf
82
ret
83
84
DisplayNamingScreen:
85
push hl
86
ld hl, wStatusFlags5
87
set BIT_NO_TEXT_DELAY, [hl]
88
call GBPalWhiteOutWithDelay3
89
call ClearScreen
90
call UpdateSprites
91
ld b, SET_PAL_GENERIC
92
call RunPaletteCommand
93
call LoadHpBarAndStatusTilePatterns
94
call LoadEDTile
95
farcall LoadMonPartySpriteGfx
96
hlcoord 0, 4
97
ld b, 9
98
ld c, 18
99
call TextBoxBorder
100
call PrintNamingText
101
ld a, 3
102
ld [wTopMenuItemY], a
103
ld a, 1
104
ld [wTopMenuItemX], a
105
ld [wLastMenuItem], a
106
ld [wCurrentMenuItem], a
107
ld a, $ff
108
ld [wMenuWatchedKeys], a
109
ld a, 7
110
ld [wMaxMenuItem], a
111
ld a, "@"
112
ld [wStringBuffer], a
113
xor a
114
ld hl, wNamingScreenSubmitName
115
ld [hli], a
116
ld [hli], a
117
ld [wAnimCounter], a
118
.selectReturnPoint
119
call PrintAlphabet
120
call GBPalNormal
121
.ABStartReturnPoint
122
ld a, [wNamingScreenSubmitName]
123
and a
124
jr nz, .submitNickname
125
call PrintNicknameAndUnderscores
126
.dPadReturnPoint
127
call PlaceMenuCursor
128
.inputLoop
129
ld a, [wCurrentMenuItem]
130
push af
131
farcall AnimatePartyMon_ForceSpeed1
132
pop af
133
ld [wCurrentMenuItem], a
134
call JoypadLowSensitivity
135
ldh a, [hJoyPressed]
136
and a
137
jr z, .inputLoop
138
ld hl, .namingScreenButtonFunctions
139
.checkForPressedButton
140
sla a
141
jr c, .foundPressedButton
142
inc hl
143
inc hl
144
inc hl
145
inc hl
146
jr .checkForPressedButton
147
.foundPressedButton
148
ld a, [hli]
149
ld e, a
150
ld a, [hli]
151
ld d, a
152
ld a, [hli]
153
ld h, [hl]
154
ld l, a
155
push de
156
jp hl
157
158
.submitNickname
159
pop de
160
ld hl, wStringBuffer
161
ld bc, NAME_LENGTH
162
call CopyData
163
call GBPalWhiteOutWithDelay3
164
call ClearScreen
165
call ClearSprites
166
call RunDefaultPaletteCommand
167
call GBPalNormal
168
xor a
169
ld [wAnimCounter], a
170
ld hl, wStatusFlags5
171
res BIT_NO_TEXT_DELAY, [hl]
172
ld a, [wIsInBattle]
173
and a
174
jp z, LoadTextBoxTilePatterns
175
jpfar LoadHudTilePatterns
176
177
.namingScreenButtonFunctions
178
dw .dPadReturnPoint
179
dw .pressedDown
180
dw .dPadReturnPoint
181
dw .pressedUp
182
dw .dPadReturnPoint
183
dw .pressedLeft
184
dw .dPadReturnPoint
185
dw .pressedRight
186
dw .ABStartReturnPoint
187
dw .pressedStart
188
dw .selectReturnPoint
189
dw .pressedSelect
190
dw .ABStartReturnPoint
191
dw .pressedB
192
dw .ABStartReturnPoint
193
dw .pressedA
194
195
.pressedA_changedCase
196
pop de
197
ld de, .selectReturnPoint
198
push de
199
.pressedSelect
200
ld a, [wAlphabetCase]
201
xor $1
202
ld [wAlphabetCase], a
203
ret
204
205
.pressedStart
206
ld a, 1
207
ld [wNamingScreenSubmitName], a
208
ret
209
210
.pressedA
211
ld a, [wCurrentMenuItem]
212
cp $5 ; "ED" row
213
jr nz, .didNotPressED
214
ld a, [wTopMenuItemX]
215
cp $11 ; "ED" column
216
jr z, .pressedStart
217
.didNotPressED
218
ld a, [wCurrentMenuItem]
219
cp $6 ; case switch row
220
jr nz, .didNotPressCaseSwitch
221
ld a, [wTopMenuItemX]
222
cp $1 ; case switch column
223
jr z, .pressedA_changedCase
224
.didNotPressCaseSwitch
225
ld hl, wMenuCursorLocation
226
ld a, [hli]
227
ld h, [hl]
228
ld l, a
229
inc hl
230
ld a, [hl]
231
ld [wNamingScreenLetter], a
232
call CalcStringLength
233
ld a, [wNamingScreenLetter]
234
cp "゙"
235
ld de, Dakutens
236
jr z, .dakutensAndHandakutens
237
cp "゚"
238
ld de, Handakutens
239
jr z, .dakutensAndHandakutens
240
ld a, [wNamingScreenType]
241
cp NAME_MON_SCREEN
242
jr nc, .checkMonNameLength
243
ld a, [wNamingScreenNameLength]
244
cp $7 ; max length of player/rival names
245
jr .checkNameLength
246
.checkMonNameLength
247
ld a, [wNamingScreenNameLength]
248
cp $a ; max length of pokemon nicknames
249
.checkNameLength
250
jr c, .addLetter
251
ret
252
253
.dakutensAndHandakutens
254
push hl
255
call DakutensAndHandakutens
256
pop hl
257
ret nc
258
dec hl
259
.addLetter
260
ld a, [wNamingScreenLetter]
261
ld [hli], a
262
ld [hl], "@"
263
ld a, SFX_PRESS_AB
264
call PlaySound
265
ret
266
.pressedB
267
ld a, [wNamingScreenNameLength]
268
and a
269
ret z
270
call CalcStringLength
271
dec hl
272
ld [hl], "@"
273
ret
274
.pressedRight
275
ld a, [wCurrentMenuItem]
276
cp $6
277
ret z ; can't scroll right on bottom row
278
ld a, [wTopMenuItemX]
279
cp $11 ; max
280
jp z, .wrapToFirstColumn
281
inc a
282
inc a
283
jr .done
284
.wrapToFirstColumn
285
ld a, $1
286
jr .done
287
.pressedLeft
288
ld a, [wCurrentMenuItem]
289
cp $6
290
ret z ; can't scroll right on bottom row
291
ld a, [wTopMenuItemX]
292
dec a
293
jp z, .wrapToLastColumn
294
dec a
295
jr .done
296
.wrapToLastColumn
297
ld a, $11 ; max
298
jr .done
299
.pressedUp
300
ld a, [wCurrentMenuItem]
301
dec a
302
ld [wCurrentMenuItem], a
303
and a
304
ret nz
305
ld a, $6 ; wrap to bottom row
306
ld [wCurrentMenuItem], a
307
ld a, $1 ; force left column
308
jr .done
309
.pressedDown
310
ld a, [wCurrentMenuItem]
311
inc a
312
ld [wCurrentMenuItem], a
313
cp $7
314
jr nz, .wrapToTopRow
315
ld a, $1
316
ld [wCurrentMenuItem], a
317
jr .done
318
.wrapToTopRow
319
cp $6
320
ret nz
321
ld a, $1
322
.done
323
ld [wTopMenuItemX], a
324
jp EraseMenuCursor
325
326
LoadEDTile:
327
ld de, ED_Tile
328
ld hl, vFont tile $70
329
; BUG: BANK("Home") should be BANK(ED_Tile), although it coincidentally works as-is
330
lb bc, BANK("Home"), (ED_TileEnd - ED_Tile) / $8
331
jp CopyVideoDataDouble
332
333
ED_Tile:
334
INCBIN "gfx/font/ED.1bpp"
335
ED_TileEnd:
336
337
PrintAlphabet:
338
xor a
339
ldh [hAutoBGTransferEnabled], a
340
ld a, [wAlphabetCase]
341
and a
342
ld de, LowerCaseAlphabet
343
jr nz, .lowercase
344
ld de, UpperCaseAlphabet
345
.lowercase
346
hlcoord 2, 5
347
lb bc, 5, 9 ; 5 rows, 9 columns
348
.outerLoop
349
push bc
350
.innerLoop
351
ld a, [de]
352
ld [hli], a
353
inc hl
354
inc de
355
dec c
356
jr nz, .innerLoop
357
ld bc, SCREEN_WIDTH + 2
358
add hl, bc
359
pop bc
360
dec b
361
jr nz, .outerLoop
362
call PlaceString
363
ld a, $1
364
ldh [hAutoBGTransferEnabled], a
365
jp Delay3
366
367
INCLUDE "data/text/alphabets.asm"
368
369
PrintNicknameAndUnderscores:
370
call CalcStringLength
371
ld a, c
372
ld [wNamingScreenNameLength], a
373
hlcoord 10, 2
374
lb bc, 1, 10
375
call ClearScreenArea
376
hlcoord 10, 2
377
ld de, wStringBuffer
378
call PlaceString
379
hlcoord 10, 3
380
ld a, [wNamingScreenType]
381
cp NAME_MON_SCREEN
382
jr nc, .pokemon1
383
ld b, 7 ; player or rival max name length
384
jr .playerOrRival1
385
.pokemon1
386
ld b, 10 ; pokemon max name length
387
.playerOrRival1
388
ld a, $76 ; underscore tile id
389
.placeUnderscoreLoop
390
ld [hli], a
391
dec b
392
jr nz, .placeUnderscoreLoop
393
ld a, [wNamingScreenType]
394
cp NAME_MON_SCREEN
395
ld a, [wNamingScreenNameLength]
396
jr nc, .pokemon2
397
cp 7 ; player or rival max name length
398
jr .playerOrRival2
399
.pokemon2
400
cp 10 ; pokemon max name length
401
.playerOrRival2
402
jr nz, .emptySpacesRemaining
403
; when all spaces are filled, force the cursor onto the ED tile
404
call EraseMenuCursor
405
ld a, $11 ; "ED" x coord
406
ld [wTopMenuItemX], a
407
ld a, $5 ; "ED" y coord
408
ld [wCurrentMenuItem], a
409
ld a, [wNamingScreenType]
410
cp NAME_MON_SCREEN
411
ld a, 9 ; keep the last underscore raised
412
jr nc, .pokemon3
413
ld a, 6 ; keep the last underscore raised
414
.pokemon3
415
.emptySpacesRemaining
416
ld c, a
417
ld b, $0
418
hlcoord 10, 3
419
add hl, bc
420
ld [hl], $77 ; raised underscore tile id
421
ret
422
423
DakutensAndHandakutens:
424
push de
425
call CalcStringLength
426
dec hl
427
ld a, [hl]
428
pop hl
429
ld de, $2
430
call IsInArray
431
ret nc
432
inc hl
433
ld a, [hl]
434
ld [wNamingScreenLetter], a
435
ret
436
437
INCLUDE "data/text/dakutens.asm"
438
439
; calculates the length of the string at wStringBuffer and stores it in c
440
CalcStringLength:
441
ld hl, wStringBuffer
442
ld c, $0
443
.loop
444
ld a, [hl]
445
cp "@"
446
ret z
447
inc hl
448
inc c
449
jr .loop
450
451
PrintNamingText:
452
hlcoord 0, 1
453
ld a, [wNamingScreenType]
454
ld de, YourTextString
455
and a
456
jr z, .notNickname
457
ld de, RivalsTextString
458
dec a
459
jr z, .notNickname
460
ld a, [wCurPartySpecies]
461
ld [wMonPartySpriteSpecies], a
462
push af
463
farcall WriteMonPartySpriteOAMBySpecies
464
pop af
465
ld [wNamedObjectIndex], a
466
call GetMonName
467
hlcoord 4, 1
468
call PlaceString
469
ld hl, $1
470
add hl, bc
471
ld [hl], "の" ; leftover from Japanese version; blank tile $c9 in English
472
hlcoord 1, 3
473
ld de, NicknameTextString
474
jr .placeString
475
.notNickname
476
call PlaceString
477
ld l, c
478
ld h, b
479
ld de, NameTextString
480
.placeString
481
jp PlaceString
482
483
YourTextString:
484
db "YOUR @"
485
486
RivalsTextString:
487
db "RIVAL's @"
488
489
NameTextString:
490
db "NAME?@"
491
492
NicknameTextString:
493
db "NICKNAME?@"
494
495