diff options
Diffstat (limited to 'engine/menu/text_entry.asm')
-rw-r--r-- | engine/menu/text_entry.asm | 1050 |
1 files changed, 1050 insertions, 0 deletions
diff --git a/engine/menu/text_entry.asm b/engine/menu/text_entry.asm new file mode 100644 index 0000000..b0eccb1 --- /dev/null +++ b/engine/menu/text_entry.asm @@ -0,0 +1,1050 @@ +INCLUDE "constants.asm" + +SECTION "engine/menu/text_entry.asm@naming", ROMX + +NAMINGSCREEN_UNDERSCORE EQU $F5 +NAMINGSCREEN_HYPHEN EQU $EF +NAMINGSCREEN_END EQU $F0 + +NamingScreen: ; 04:53F4 + ld hl, wNamingScreenDestinationPointer + ld [hl], e + inc hl + ld [hl], d + ld hl, wNamingScreenType + ld [hl], b + ld hl, wce5f + ld a, [hl] + push af + set 4, [hl] + ldh a, [hMapAnims] + push af + xor a + ldh [hMapAnims], a + ldh a, [hJoyDebounceSrc] + push af + ld a, $01 + ldh [hJoyDebounceSrc], a + call .SetUpNamingScreen + call DelayFrame +.loop + call NamingScreenJoypadLoop + jr nc, .loop + + pop af + ldh [hJoyDebounceSrc], a + pop af + ldh [hMapAnims], a + pop af + ld [wce5f], a + call ClearJoypad + ret + +.SetUpNamingScreen: ; 04:542B + call ClearBGPalettes + ld b, SGB_DIPLOMA + call GetSGBLayout + call DisableLCD + call LoadNamingScreenGFX + call NamingScreen_InitText + ld a, $E3 + ldh [rLCDC], a + call GetNamingScreenSetup + call WaitBGMap + call WaitForAutoBgMapTransfer + ld a, $90 + ldh [rBGP], a + ld a, $D0 + ldh [rOBP0], a + call NamingScreenInitNameEntry + ret + +GetNamingScreenSetup: ; 04:5455 +; wNamingScreenType selects which entry in the table below to jump to + ld a, [wNamingScreenType] + and $07 + ld e, a + ld d, 0 + ld hl, .Jumptable + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp hl + +.Jumptable: ; 04:5466 + dw .Pokemon + dw .Player + dw .Rival + dw .Mom + dw .Box + dw .Pokemon + dw .Pokemon + dw .Pokemon + +.Pokemon: ; 04:5476 + ld hl, Function8f0e3 + ld a, BANK(Function8f0e3) + ld e, 1 + call FarCall_hl + call GetPokemonName + hlcoord 5, 2 + call PlaceString + ld l, c + ld h, b + ld de, .NicknameText + call PlaceString + call .StoreSpriteIconParams + ret + +.NicknameText ; 04:5495 + db "のニックネームは?@" + +.Player: ; 04:549F + ld de, GoldSpriteGFX + call .LoadSprite + hlcoord 5, 2 + ld de, .NameText + call PlaceString + call .StoreSpriteIconParams + ret + +.NameText: ; 04:54B2 + db "あなた の なまえは?@" + +.Rival: ; 04:54BE + ld de, SilverSpriteGFX + call .LoadSprite + hlcoord 5, 2 + ld de, .RivalText + call PlaceString + call .StoreSpriteIconParams + ret + +.RivalText: ; 04:54D1 +; the ret just preceeding this would make the first word Rival. + db "ライバル の なまえは?@" + +.Mom: ; 04:54DE + ld de, MomSpriteGFX + call .LoadSprite + hlcoord 5, 2 + ld de, .MomText + call PlaceString + call .StoreSpriteIconParams + ret + +.MomText: ; 04:54F1 + db "ははおや の なまえは?@" + +.Box: ; 04:54FE + ld de, PokeBallSpriteGFX + ld hl, vChars0 + lb bc, BANK(PokeBallSpriteGFX), $04 + call Request2bpp + ld a, $08 + ld hl, wTileMapBackup + ld [hl+], a + ld [hl], $00 + ld de, $2420 + ld a, $41 + call InitSpriteAnimStruct + ld hl, $0001 + add hl, bc + ld [hl], $00 + hlcoord 5, 2 + ld de, .BoxText + call PlaceString + call .StoreBoxIconParams + ret + +.BoxText: ; 04:552D + db "バンク の なまえは?@" + +.LoadSprite: ; 04:5539 +; copies the sprite at de into the top of VRAM, as well as the sprite $C0 after de + push de + ld hl, vChars0 + lb bc, BANK(GoldSpriteGFX), $04 + call Request2bpp + pop de + ld hl, $00C0 + add hl, de + ld e, l + ld d, h + ld hl, vChars0 tile 4 + lb bc, BANK(GoldSpriteGFX), $04 + call Request2bpp + ld a, $08 + ld hl, wTileMapBackup + ld [hli], a + ld [hl], $00 + ld de, $2420 + ld a, $41 + call InitSpriteAnimStruct + ret + +.StoreSpriteIconParams: ; 04:5564 + ld a, $05 + ld [wNamingScreenMaxNameLength], a + hlcoord 6, 5 + ld a, l + ld [wNamingScreenStringEntryCoordY], a + ld a, h + ld [wNamingScreenStringEntryCoordX], a + ret + +.StoreBoxIconParams: ; 04:5575 + ld a, $08 + ld [wNamingScreenMaxNameLength], a + hlcoord 5, 5 + ld a, l + ld [wNamingScreenStringEntryCoordY], a + ld a, h + ld [wNamingScreenStringEntryCoordX], a + ret + +NamingScreen_InitText: ; 04:5586 +; fills the tilemap with ■, then clears a 12x17 box at 1,1 +; next it places the tiles at 04:58B3 onto the screen at 2,9 (tiles form an 11x8 box) + call WaitForAutoBgMapTransfer + hlcoord 0, 0 + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + ld a, "■" + call ByteFill + hlcoord 1, 1 + lb bc, $07, $12 + call ClearBox + hlcoord 1, 9 + lb bc, $08, $12 + call ClearBox + hlcoord 2, 9 + ld de, TextEntryChars + ld b, $08 + +.outerloop + ld c, $11 + +.innerloop + ld a, [de] + ld [hl+], a + inc de + dec c + jr nz, .innerloop + + inc hl + inc hl + inc hl + dec b + jr nz, .outerloop + ret + + +NamingScreenJoypadLoop: ; 04:55BD + call GetJoypadDebounced + ld a, [wJumptableIndex] + bit 7, a + jr nz, .leap + call .RunJumpTable + callba PlaySpriteAnimationsAndDelayFrame + call .UpdateStringEntry + call DelayFrame + and a + ret + +.leap ; 04:55DA +; kills sprites and resets screen position + callab InitEffectObject + call ClearSprites + xor a + ldh [hSCX], a + ldh [hSCY], a + scf + ret + +.UpdateStringEntry: ; 04:55EC +; sets BGMapMode to 0, then loads a string and coords out of a buffer and displays it. +; BGMapMode is then set to 1. + xor a + ldh [hBGMapMode], a + hlcoord 1, 3 + lb bc, $05, $12 + call ClearBox + ld hl, wNamingScreenDestinationPointer + ld e, [hl] + inc hl + ld d, [hl] + ld hl, wNamingScreenStringEntryCoordY + ld a, [hli] + ld h, [hl] + ld l, a + call PlaceString + ld a, $01 + ldh [hBGMapMode], a + ret + +.RunJumpTable: ; 04:560C + ld a, [wJumptableIndex] + ld e, a + ld d, $00 + ld hl, .JumpTable + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp hl + +.JumpTable: ; 04:561B + dw .InitCursor + dw .ReadButtons + +.InitCursor: ; 04:561F + ld de, $5818 + ld a, $39 + call InitSpriteAnimStruct + ld a, c + ld [wNamingScreenCursorObjectPointer], a + ld a, b + ld [wNamingScreenCursorObjectPointer + 1], a + ld hl, wJumptableIndex + inc [hl] + ret + +.ReadButtons: ; 04:5634 +; if A or B were pressed, clear hJoypadSum after calling functions; if start, set 7 in the jumptable?? + ld hl, hJoypadSum + ld a, [hl] + and A_BUTTON + jr nz, .jumpa + ld a, [hl] + and B_BUTTON + jr nz, .jumpb + ld a, [hl] + and START + jr nz, .jumpstart + ret + +.jumpa ; 04:5647 + call NamingScreenGetLastCharacter + cp NAMINGSCREEN_END + jr z, .jumpstart + call NamingScreenTryAddCharacter + xor a + ldh [hJoypadSum], a + ret + +.jumpb ; 04:5655 + call NamingScreenDeleteCharacter + xor a + ldh [hJoypadSum], a + ret + +.jumpstart ; 04:565C + call NamingScreenStoreEntry + ld hl, wJumptableIndex + set 7, [hl] + ret + +.GetDPad: ; 04:5665 + ld hl, hJoySum + ld a, [hl] + and D_UP + jr nz, .upjump + ld a, [hl] + and D_DOWN + jr nz, .downjump + ld a, [hl] + and D_LEFT + jr nz, .leftjump + ld a, [hl] + and D_RIGHT + jr nz, .rightjump + ret + +.rightjump ; 04:567D + ld hl, $000C + add hl, bc + ld a, [hl] + cp $0E + jr nc, .skip1 + inc [hl] + jr .escape + +.skip1 + ld [hl], $00 + jr .escape + +.leftjump + ld hl, $000C + add hl, bc + ld a, [hl] + and a + jr z, .skip2 + dec [hl] + jr .escape +.skip2 + ld [hl], $0E + jr .escape + +.downjump + ld hl, $000D + add hl, bc + ld a, [hl] + cp $07 + jr nc, .skip3 + inc [hl] + jr .escape +.skip3 + ld [hl], $00 + jr .escape + +.upjump ; 04:56AC :24 + ld hl, $000D + add hl, bc + ld a, [hl] + and a + jr z, .skip4 + dec [hl] + jr .escape +.skip4 + ld [hl], $07 + jr .escape +.escape + ld hl, $000C + add hl, bc + ld e, [hl] + ld d, $00 + ld hl, LetterOffsetsTable1 + add hl, de + ld a, [hl] + ld hl, $0006 + add hl, bc + ld [hl], a + ld hl, $000D + add hl, bc + ld e, [hl] + ld d, $00 + ld hl, LetterOffsetsTable2 + add hl, de + ld a, [hl] + ld hl, $0007 + add hl, bc + ld [hl], a + ret + +LetterOffsetsTable1: ; 04:56DE + db $00, $08, $10, $18, $20, $30, $38, $40, $48, $50, $60, $68, $70, $78, $80 + +LetterOffsetsTable2:; 04:56ED + db $00, $08, $10, $18, $20, $28, $30, $38 + +NamingScreenTryAddCharacter: ; 04:56F5 + ld a, [wNamingScreenLastCharacter] + ld hl, Dakutens + cp "゙" + jr z, .jump + ld hl, Handakutens + cp "゚" + jr z, .jump + ld a, [wNamingScreenMaxNameLength] + ld c, a + ld a, [wNamingScreenCurNameLength] + cp c + ret nc + ld a, [wNamingScreenLastCharacter] + call NamingScreenGetTextCursorPosition + ld [hl], a + ld hl, wNamingScreenCurNameLength + inc [hl] + call NamingScreenGetTextCursorPosition + ld a, [hl] + cp "@" + ret z + ld [hl], NAMINGSCREEN_UNDERSCORE + ret + +.jump ; 04:5724 + ld a, [wNamingScreenCurNameLength] + and a + ret z + push hl + ld hl, wNamingScreenCurNameLength + dec [hl] + call NamingScreenGetTextCursorPosition + ld c, [hl] + pop hl +.loop + ld a, [hli] + cp $FF + jr z, .notherjump + cp c + jr z, .skip + inc hl + jr .loop +.skip + ld a, [hl] + call NamingScreenGetTextCursorPosition + ld [hl], a +.notherjump + ld hl, wNamingScreenCurNameLength + inc [hl] + ret + +Dakutens: ; 04:5748 + db "かがきぎくぐけげこご" + db "さざしじすずせぜそぞ" + db "ただちぢつづてでとど" + db "はばひびふぶへべほぼ" + db "カガキギクグケゲコゴ" + db "サザシジスズセゼソゾ" + db "タダチヂツヅテデトド" + db "ハバヒビフブへべホボ" + db $FF + +Handakutens: ; 04:5799 + db "はぱひぴふぷへぺほぽ" + db "ハパヒピフプへぺホポ" + db $FF + +NamingScreenDeleteCharacter: ; 04:57AE + ld hl, wNamingScreenCurNameLength + ld a, [hl] + and a + ret z + dec [hl] + call NamingScreenGetTextCursorPosition + ld [hl], NAMINGSCREEN_UNDERSCORE + inc hl + ld a, [hl] + cp NAMINGSCREEN_UNDERSCORE + ret nz + ld [hl], NAMINGSCREEN_HYPHEN + ret + +NamingScreenGetTextCursorPosition: ; 04:57C2 + push af + ld hl, wNamingScreenDestinationPointer + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [wNamingScreenCurNameLength] + ld e, a + ld d, $00 + add hl, de + pop af + ret + +NamingScreenInitNameEntry: ; 04:57D2 + ld hl, wNamingScreenDestinationPointer + ld a, [hli] + ld h, [hl] + ld l, a + ld [hl], NAMINGSCREEN_UNDERSCORE + inc hl + ld a, [wNamingScreenMaxNameLength] + dec a + ld c, a + ld a, NAMINGSCREEN_HYPHEN +.loop + ld [hli], a + dec c + jr nz, .loop + ld [hl], "@" + ret + +NamingScreenStoreEntry: ; 04:57E9 + ld hl, wNamingScreenDestinationPointer + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [wNamingScreenMaxNameLength] + ld c, a +.loop + ld a, [hl] + cp NAMINGSCREEN_HYPHEN + jr z, .terminator + cp NAMINGSCREEN_UNDERSCORE + jr nz, .notterminator +.terminator + ld [hl], "@" +.notterminator + inc hl + dec c + jr nz, .loop + ret + +NamingScreenGetLastCharacter: ; 04:5803 + ld hl, wNamingScreenCursorObjectPointer + ld c, [hl] + inc hl + ld b, [hl] + ld hl, $0006 + add hl, bc + ld a, [hl] + ld hl, $0004 + add hl, bc + add a, [hl] + sub $08 + srl a + srl a + srl a + ld e, a + ld hl, $0007 + add hl, bc + ld a, [hl] + ld hl, $0005 + add hl, bc + add a, [hl] + sub $10 + srl a + srl a + srl a + ld d, a + hlcoord 0, 0 + ld bc, $0014 +.loop + ld a, d + and a + jr z, .done + add hl, bc + dec d + jr .loop + +.done + add hl, de + ld a, [hl] + ld [wNamingScreenLastCharacter], a + ret + +LoadNamingScreenGFX: ; 04:5843 + call ClearSprites + callab InitEffectObject + call LoadFont + + ld de, TextScreenGFX_End + ld hl, vChars1 tile $70 + lb bc, BANK(TextScreenGFX_End), 1 + call Get1bpp + + ld de, TextScreenGFX_Hyphen + ld hl, vChars1 tile $6F + lb bc, BANK(TextScreenGFX_Hyphen), 1 + call Get1bpp + + ld de, TextScreenGFX_Underscore + ld hl, vChars1 tile $75 + lb bc, BANK(TextScreenGFX_Underscore), 1 + call Get1bpp + + ld de, vChars2 tile $60 + ld hl, TrainerCardGFX + ld bc, $10 + ld a, BANK(TrainerCardGFX) + call FarCopyData + + ld de, vChars0 tile $7f + ld hl, PokedexBorderGFX + ld bc, $10 + ld a, BANK(PokedexBorderGFX) + call FarCopyData + + ld a, $26 + ld hl, wc41a + ld [hli], a + ld [hl], $7F + xor a + ldh [hSCY], a + ld [wc4c7], a + ldh [hSCX], a + ld [wc4c8], a + ld [wJumptableIndex], a + ldh [hBGMapMode], a + ld [wNamingScreenCurNameLength], a + ldh [hJoypadSum], a + ld a, $07 + ldh [hWX], a + ret + +SECTION "engine/menu/text_entry.asm@mail", ROMX + +ComposeMailMessage: ; 04:59EB + ld hl, wNamingScreenDestinationPointer + ld [hl], e + inc hl + ld [hl], d + ldh a, [hMapAnims] + push af + xor a + ldh [hMapAnims], a + ldh a, [hJoyDebounceSrc] + push af + ld a, 1 + ldh [hJoyDebounceSrc], a + xor a + ld [wFlyDestination], a +.outerloop + call .firstruncheck + call DelayFrame +.innerloop + call DoMailEntry + jr nc, .innerloop + + ld a, [wFlyDestination] + bit 7, a + jr nz, .outerloop + + pop af + ldh [hJoyDebounceSrc], a + pop af + ldh [hMapAnims], a + ret + +.firstruncheck; 04:5A1B + ld hl, wFlyDestination + ld a, [hl] + and 1 + ld [hl], a + jr z, .skip + call SetupMail + ret +.skip + call .InitBlankMail + ret + +.InitBlankMail: ; 04:5A2C + call ClearBGPalettes + ld b, 8 ;diploma? + call GetSGBLayout + call DisableLCD + call LoadNamingScreenGFX + ld de, vChars0 + ld hl, MailIconGFX + ld bc, $0080 + ld a, BANK(MailIconGFX) + call FarCopyData + ld a, 8 + ld hl, wTileMapBackup + ld [hli], a + ld [hl], 0 + ld de, $2420 + ld a, 8 + call InitSpriteAnimStruct + ld hl, $0002 + add hl, bc + ld [hl], 0 + ld de, $5818 + ld a, $39 + call InitSpriteAnimStruct + ld a, c + ld [wNamingScreenCursorObjectPointer], a + ld a, b + ld [wNamingScreenCursorObjectPointer + 1], a + call InitCharSet + ld a, $E3 + ldh [rLCDC], a + call InitMailText + call WaitBGMap + call WaitForAutoBgMapTransfer + ld a, $90 + ldh [rBGP], a + ld a, $E4 + ldh [rOBP0], a + call NamingScreenInitNameEntry + ld hl, wNamingScreenDestinationPointer + ld e, [hl] + inc hl + ld d, [hl] + ld hl, $0010 + add hl, de + ld [hl], "<NEXT>" + ret + +InitMailText: ; 04:5A96 + hlcoord 5, 2 + ld de, MailPromptText + call PlaceString + ld a, $21 + ld [wNamingScreenMaxNameLength], a + ret + +MailPromptText: ; 04:5AA5 + db "メールを かいてね@" + +InitCharSet: ; 04:5AAF + call WaitForAutoBgMapTransfer + ld hl, wTileMap + lb bc, $01, $68 + ld a, $60 + call ByteFill + hlcoord 1, 1 + lb bc, $07, $12 + call ClearBox + hlcoord 1, 9 + lb bc, $08, $12 + call ClearBox + hlcoord 2, 9 + ld de, TextEntryChars + ld b, $8 +.outerloop + ld c, $11 +.innerloop + ld a, [de] + ld [hli], a + inc de + dec c + jr nz, .innerloop + inc hl + inc hl + inc hl + dec b + jr nz, .outerloop + ret + +DoMailEntry: ; 04:5AE6 + call GetJoypadDebounced + ld a, [wJumptableIndex] + bit 7, a + jr nz, .exit_mail + ld a, [wFlyDestination] + bit 7, a + jr nz, .exit_mail + call .DoJumpTable + callba PlaySpriteAnimationsAndDelayFrame + call .Update + call DelayFrame + and a + ret + +.exit_mail ; 04:5B0A + callab InitEffectObject + call ClearSprites + xor a + ldh [hSCX], a + ldh [hSCY], a + scf + ret + +.Update: ; 04:5B1C + xor a + ldh [hBGMapMode], a + hlcoord 1, 3 + lb bc, $04, $12 + call ClearBox + ld hl, wNamingScreenDestinationPointer + ld e, [hl] + inc hl + ld d, [hl] + hlcoord 2, 4 + call PlaceString + ld a, 1 + ldh [hBGMapMode], a + ret + +.DoJumpTable: ; 04:5B39 + ld a, [wJumptableIndex] + ld e, a + ld d, 0 + ld hl, .Jumptable + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp hl + +.Jumptable: ; 04:5B48 + dw .blinkcursor + dw .processjoypad + +.blinkcursor ; 04:5B4C + ld hl, wJumptableIndex + inc [hl] + ret + +.processjoypad; 04:5B51 + ld hl, hJoypadSum + ld a, [hl] + and A_BUTTON + jr nz, .ajump + ld a, [hl] + and B_BUTTON + jr nz, .bjump + ld a, [hl] + and START + jr nz, .startjump + ld a, [hl] + and SELECT + jr nz, .selectjump + ret + +.ajump ; 04:5B69 + call NamingScreenGetLastCharacter + cp "円" + jr z, .startjump + call NamingScreenTryAddCharacter + xor a + ldh [hJoypadSum], a + ld hl, wNamingScreenCurNameLength + ld a, [hl] + cp $10 ; mail line length? + ret nz + inc [hl] + call NamingScreenGetTextCursorPosition + ld [hl], "♀" + dec hl + ld [hl], "<NEXT>" + ret +.bjump + call NamingScreenDeleteCharacter + xor a + ldh [hJoypadSum], a + ld hl, wNamingScreenCurNameLength + ld a, [hl] + cp $10 + ret nz + dec [hl] + call NamingScreenGetTextCursorPosition + ld [hl], "♀" + inc hl + ld [hl], "<NEXT>" + ret +.startjump + call NamingScreenStoreEntry + ld hl, wJumptableIndex + set 7, [hl] + ret +.selectjump + ld hl, wFlyDestination + ld a, [hl] + xor 01 + ld [hl], a + set 7, [hl] + ret + +SECTION "engine/menu/text_entry.asm@mail2", ROMX + +SetupMail: ; 04:5C31 + call ClearBGPalettes + ld b, 8 + call GetSGBLayout + call DisableLCD + call LoadNamingScreenGFX + ld de, vChars1 + ld hl, BoldAlphabetGFX + ld bc, $2e tiles + ld a, BANK(BoldAlphabetGFX) + call FarCopyDataDouble + ld de, vChars0 + ld hl, MailIconGFX + lb bc, $00, $80 + ld a, BANK(MailIconGFX) + call FarCopyData + ld a, 8 + ld hl, wTileMapBackup + ld [hli], a + ld [hl], 0 + ld de, $2420 + ld a, 8 + call InitSpriteAnimStruct + ld hl, $0002 + add hl, bc + ld [hl], 0 + ld de, $6018 + ld a, $40 + call InitSpriteAnimStruct + ld a, c + ld [wNamingScreenCursorObjectPointer], a + ld a, b + ld [wNamingScreenCursorObjectPointer + 1], a + call DrawMail + ld a, $E3 + ldh [rLCDC], a + call DrawMailLoadedText + call WaitBGMap + call WaitForAutoBgMapTransfer + ld a, $90 + ldh [rBGP], a + ld a, $E4 + ldh [rOBP0], a + call NamingScreenInitNameEntry + ld hl, wNamingScreenDestinationPointer + ld e, [hl] + inc hl + ld d, [hl] + ld hl, $0010 + add hl, de + ld [hl], "<NEXT>" + ret + +DrawMailLoadedText: ; 04:5CA9 + hlcoord 5, 2 + ld de, MailLoadedText + call PlaceString + ld a, $21 + ld [wNamingScreenMaxNameLength], a + ret + +MailLoadedText: ; 04:5CB8 + db "スアケシ!!!@" ; should be "MAIL!!!" since the bold english font is loaded into vChars1 + +DrawMail: ; 04:5CC0 + call WaitForAutoBgMapTransfer + hlcoord 0, 0 + lb bc, $01, $68 + ld a, "■" + call ByteFill + hlcoord 1, 1 + lb bc, $07, $12 + call ClearBox + hlcoord 1, 9 + lb bc, $08, $12 + call ClearBox + hlcoord 2, 10 + ld a, $80 + call DrawMailRow + hlcoord 2, 13 + ld a, $A0 + call DrawMailRow + hlcoord 2, 16 + ld de, MailTextExtra + ld c, $10 + call DrawMailTextExtra + ret + +DrawMailRow: ; 04:5CFC + ld c, $07 + call .loop + inc hl + inc hl + ld c, $07 + call .loop + inc hl + inc hl + inc hl + inc hl + ld c, $07 + call .loop + inc hl + inc hl + ld c, $05 + +.loop ; 04:5D15 + ld [hli], a + inc a + dec c + jr nz, .loop + ret + +DrawMailTextExtra: ; 04:5D1B + ld a, [de] + inc de + ld [hli], a + dec c + jr nz, DrawMailTextExtra + ret + +MailTextExtra: ; 04:5D22 + db "?!12345 67890ー円" +
\ No newline at end of file |