diff options
author | xCrystal <rgr.crystal@gmail.com> | 2019-06-30 18:10:42 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-06-30 18:10:42 +0200 |
commit | 880d8b42d8013dd2fc1f4a7424f9621c137cee6b (patch) | |
tree | 5b9990d43df4387e67ac5fed7f93e7d6022bdeef /src | |
parent | b82a3d3d0fd0cfa8d378883dca582cbee1d0b1f8 (diff) | |
parent | a6329757914a3137a5d71b83d522aaeadaf227e6 (diff) |
Merge pull request #51 from jidoc01/master
Disassemble bank 6
Diffstat (limited to 'src')
-rw-r--r-- | src/constants.asm | 3 | ||||
-rw-r--r-- | src/constants/name_constants.asm | 6 | ||||
-rw-r--r-- | src/engine/bank01.asm | 9 | ||||
-rw-r--r-- | src/engine/bank02.asm | 31 | ||||
-rw-r--r-- | src/engine/bank04.asm | 51 | ||||
-rw-r--r-- | src/engine/bank06.asm | 2688 | ||||
-rw-r--r-- | src/engine/home.asm | 4 | ||||
-rw-r--r-- | src/macros/data.asm | 2 | ||||
-rw-r--r-- | src/sram.asm | 8 | ||||
-rw-r--r-- | src/text/text2.asm | 6 | ||||
-rw-r--r-- | src/text/text_offsets.asm | 6 | ||||
-rw-r--r-- | src/wram.asm | 70 |
12 files changed, 2807 insertions, 77 deletions
diff --git a/src/constants.asm b/src/constants.asm index 926f8d6..cad6cae 100644 --- a/src/constants.asm +++ b/src/constants.asm @@ -13,4 +13,5 @@ INCLUDE "constants/npc_constants.asm" INCLUDE "constants/sgb_constants.asm" INCLUDE "constants/sprite_constants.asm" INCLUDE "constants/text_constants.asm" -INCLUDE "constants/charmaps.asm" +INCLUDE "constants/name_constants.asm" +INCLUDE "constants/charmaps.asm"
\ No newline at end of file diff --git a/src/constants/name_constants.asm b/src/constants/name_constants.asm new file mode 100644 index 0000000..7d4370c --- /dev/null +++ b/src/constants/name_constants.asm @@ -0,0 +1,6 @@ +NAME_BUFFER_LENGTH EQU 16 + +MAX_PLAYER_NAME_LENGTH EQU 6 * 2 +MAX_DECK_NAME_LENGTH EQU 20 * 1 ; note that its unit is byte! + +NAMING_SCREEN_BUFFER_LENGTH EQU 24
\ No newline at end of file diff --git a/src/engine/bank01.asm b/src/engine/bank01.asm index 368e578..3c6e3f1 100644 --- a/src/engine/bank01.asm +++ b/src/engine/bank01.asm @@ -3695,6 +3695,7 @@ DisplayCardPageOnLeftOrRightPressed: ; 57cd (1:57cd) ret ; 0x57df +Func_57df: INCROM $57df, $5892 ; display the previous valid card page @@ -6111,7 +6112,7 @@ DuelDataToSave: ; 6729 (1:6729) ; dw address, number_of_bytes_to_copy dw wPlayerDuelVariables, wOpponentDuelVariables - wPlayerDuelVariables dw wOpponentDuelVariables, wPlayerDeck - wOpponentDuelVariables - dw wPlayerDeck, wc500 + $10 - wPlayerDeck + dw wPlayerDeck, wNameBuffer + $10 - wPlayerDeck dw wWhoseTurn, wDuelTheme + $1 - wWhoseTurn dw hWhoseTurn, $1 dw wRNG1, wRNGCounter + $1 - wRNG1 @@ -7748,7 +7749,7 @@ Func_7494: ; 7494 (1:7494) ld a, $02 ld [wLoadedMoveAnimation], a .asm_74d1 - farcall $6, $4f9c + farcall Func_006_4f9c pop bc pop de pop hl @@ -7773,12 +7774,12 @@ Func_758f: ; 758f (1:758f) INCROM $758f, $7594 Func_7594: ; 7594 (1:7594) - farcall $6, $661f + farcall Func_1a61f ret ; 0x7599 Func_7599: ; 7599 (1:7599) - farcall $6, $668d + farcall Func_006_668d ret ; 0x759e diff --git a/src/engine/bank02.asm b/src/engine/bank02.asm index 509a1e9..232fa98 100644 --- a/src/engine/bank02.asm +++ b/src/engine/bank02.asm @@ -254,25 +254,26 @@ Func_8f05: ; 8f05 (2:4f05) ld a, [wceb1] or a jr nz, .asm_8f10 - ld hl, Unknown_a763 + ; it refers to a data in the other bank without any bank desc. + ld hl, Deck1Data jr .asm_8f23 .asm_8f10 dec a jr nz, .asm_8f18 - ld hl, Unknown_a76c + ld hl, Deck2Data jr .asm_8f23 .asm_8f18 dec a jr nz, .asm_8f20 - ld hl, Unknown_a775 + ld hl, Deck3Data jr .asm_8f23 .asm_8f20 - ld hl, Unknown_a77e + ld hl, Deck4Data .asm_8f23 - ld a, $14 - ld bc, $0401 + ld a, MAX_DECK_NAME_LENGTH + lb bc, 4, 1 ld de, wcfb9 - farcall Func_1ad89 + farcall InputDeckName ld a, [wcfb9] or a ret nz @@ -789,19 +790,7 @@ Func_9e41: ; 9e41 (2:5e41) INCROM $9e41, $a288 Func_a288: ; a288 (2:6288) - INCROM $a288, $a763 - -Unknown_a763: ; a763 (2:6763) - INCROM $a763, $a76c - -Unknown_a76c: ; a76c (2:676c) - INCROM $a76c, $a775 - -Unknown_a775: ; a775 (2:6775) - INCROM $a775, $a77e - -Unknown_a77e: ; a77e (2:677e) - INCROM $a77e, $b177 + INCROM $a288, $b177 Func_b177: ; b177 (2:7177) INCROM $b177, $b19d @@ -935,7 +924,7 @@ Func_ba04: ; ba04 (2:7a04) ldtx hl, PleaseSelectDeckText call DrawWideTextBox_PrintText ld a, $5 - ld [wcea9], a + ld [wNamingScreenKeyboardHeight], a ld hl, $73fe ld d, h ld a, l diff --git a/src/engine/bank04.asm b/src/engine/bank04.asm index 6d29486..ffbef50 100644 --- a/src/engine/bank04.asm +++ b/src/engine/bank04.asm @@ -160,7 +160,7 @@ BoosterPack_1031b: ; 1031b (4:431b) ld [wVBlankOAMCopyToggle], a ld a, $4 ld [wTextBoxFrameType], a - farcall $1, $7599 + farcall Func_7599 farcall Func_c1a4 call DoFrameIfLCDEnabled pop af @@ -1110,7 +1110,7 @@ MainMenuFunctionTable: MainMenu_NewGame: ; 12704 (4:6704) farcall Func_c1b1 - call Func_128a9 + call DisplayPlayerNamingScreen farcall Func_1996e call EnableSRAM ld a, [s0a007] @@ -1180,8 +1180,51 @@ Func_12871: ; 12871 (4:6871) Func_1288c: ; 1288c (4:688c) INCROM $1288c, $128a9 -Func_128a9: ; 128a9 (4:68a9) - INCROM $128a9, $1296e +DisplayPlayerNamingScreen:: ; 128a9 (4:68a9) + ; clear the name buffer. + ld hl, wNameBuffer ; c500: name buffer. + ld bc, NAME_BUFFER_LENGTH + ld a, TX_END + call FillMemoryWithA + + ; get player's name + ; from the user into hl. + ld hl, wNameBuffer + farcall InputPlayerName + + farcall Func_c1a4 + call DoFrameIfLCDEnabled + call DisableLCD + ld hl, wNameBuffer + ; get the first byte of the name buffer. + ld a, [hl] + or a + ; check if anything typed. + jr nz, .no_name + ld hl, .data +.no_name + ; set the default name. + ld de, sPlayerName + ld bc, NAME_BUFFER_LENGTH + call EnableSRAM + call CopyDataHLtoDE_SaveRegisters + ; it seems for integrity checking. + call UpdateRNGSources + ld [sPlayerName+$e], a + call UpdateRNGSources + ld [sPlayerName+$f], a + call DisableSRAM + ret +.data + ; "MARK": default player name. + ; last two bytes are reserved for RNG. + textfw3 "M", "A", "R", "K" +rept 6 + done +endr + db $10, $12 +Unknown_128fb: ; 128fb + INCROM $128fb, $1296e Func_1296e: ; 1296e (4:696e) INCROM $1296e, $1299f diff --git a/src/engine/bank06.asm b/src/engine/bank06.asm index 9cda475..5c61c8d 100644 --- a/src/engine/bank06.asm +++ b/src/engine/bank06.asm @@ -148,11 +148,1033 @@ Func_18086: ; 18086 (6:4086) ; 0x180d5 Func_180d5: ; 180d5 (6:40d5) - INCROM $180d5, $186f7 + ld a, $05 + ld [$ce52], a +.asm_006_40da + xor a + ld [wcea3], a + farcall $2, $42ce + call EnableLCD + call IsClairvoyanceActive + jr c, .asm_006_40ef + ld de, $42db + jr .asm_006_40f2 +.asm_006_40ef + ld de, $434b +.asm_006_40f2 + ld hl, $ce53 + ld [hl], e + inc hl + ld [hl], d + ld a, [$ce52] + call .asm_006_4171 +.asm_006_40fe + ld a, $01 + ld [wVBlankOAMCopyToggle], a + call DoFrame + ldh a, [hDPadHeld] + and $08 + jr nz, .asm_006_4153 + ld a, [wce60] + or a + jr z, .asm_006_4118 + ldh a, [hDPadHeld] + and $04 + jr nz, .asm_006_4148 +.asm_006_4118 + ld a, [$ce52] + ld [$ce58], a + call Func_006_43bb + jr c, .asm_006_4139 + ld a, [$ce52] + cp $10 + jp z, .asm_006_41f8 + cp $11 + jp z, .asm_006_4210 + ld hl, $ce58 + cp [hl] + call nz, .asm_006_4171 + jr .asm_006_40fe +.asm_006_4139 + cp $ff + jr nz, .asm_006_4153 + call Func_006_44bf + lb de, $38, $9f + call SetupText + scf + ret +.asm_006_4148 + call Func_006_44bf + lb de, $38, $9f + call SetupText + or a + ret +.asm_006_4153 + call Func_006_44bf + lb de, $38, $9f + call SetupText + ld a, [$ce52] + ld [$ce57], a + ld hl, .jump_table + call JumpToFunctionInTable + ld a, [$ce57] + ld [$ce52], a + jp .asm_006_40da +.asm_006_4171 ; 18171 (6:4171) + push af + lb de, 1, 17 + call InitTextPrinting + ldtx hl, Text0251 + call ProcessTextFromID + ld hl, hffb0 + ld [hl], $01 + ldtx hl, Text024e + call ProcessTextFromID + ld hl, hffb0 + ld [hl], $00 + lb de, 1, 17 + call InitTextPrinting + pop af + ld hl, Data_006_42bb + ld b, 0 + sla a + ld c, a + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld a, h + or a + jr nz, .asm_006_41e3 + ld a, l + cp $06 + jr nc, .asm_006_41e3 + ld a, [$ce52] + cp $06 + jr nc, .asm_006_41c2 + ld a, l + add DUELVARS_ARENA_CARD + call GetTurnDuelistVariable + cp -1 + ret z + call GetCardIDFromDeckIndex + call LoadCardDataToBuffer1_FromCardID + jr .asm_006_41d7 +.asm_006_41c2 + ld a, l + add DUELVARS_ARENA_CARD + call GetNonTurnDuelistVariable + cp -1 + ret z + call SwapTurn + call GetCardIDFromDeckIndex + call LoadCardDataToBuffer1_FromCardID + call SwapTurn +.asm_006_41d7 + ld a, 18 + call CopyCardNameAndLevel + ld hl, wDefaultText + call ProcessText + ret +.asm_006_41e3 + ld a, [$ce52] + cp $08 + jr nc, .asm_006_41ee + call PrintTextNoDelay + ret +.asm_006_41ee + call SwapTurn + call PrintTextNoDelay + call SwapTurn + ret +.asm_006_41f8 + lb de, $38, $9f + call SetupText + ldh a, [hWhoseTurn] + push af + bank1call OpenPlayAreaScreen + pop af + ldh [hWhoseTurn], a + ld a, [$ce57] + ld [$ce52], a + jp .asm_006_40da +.asm_006_4210 + lb de, $38, $9f + call SetupText + ldh a, [hWhoseTurn] + push af + bank1call OpenOpponentPlayAreaScreen + pop af + ldh [hWhoseTurn], a + ld a, [$ce57] + ld [$ce52], a + jp .asm_006_40da +.jump_table ; (6:4228) + dw Func_006_4248 + dw Func_006_4248 + dw Func_006_4248 + dw Func_006_4248 + dw Func_006_4248 + dw Func_006_4248 + dw Func_006_4293 + dw Func_006_42a7 + dw Func_006_426a + dw Func_006_429d + dw Func_006_42b1 + dw Func_006_426a + dw Func_006_426a + dw Func_006_426a + dw Func_006_426a + dw Func_006_426a + +Func_006_4248: + ld a, [$ce52] + inc a + cp $06 + jr nz, .asm_006_4251 + xor a +.asm_006_4251 + ld [wHUDEnergyAndHPBarsX], a + add DUELVARS_ARENA_CARD + call GetTurnDuelistVariable + cp -1 + ret z + call GetCardIDFromDeckIndex + call LoadCardDataToBuffer1_FromCardID + xor a + ld [wCurPlayAreaY], a + bank1call OpenCardPage_FromCheckPlayArea + ret + +Func_006_426a: + ld a, [$ce52] + sub $08 + or a + jr z, .asm_006_4274 + sub $02 +.asm_006_4274 + ld [wHUDEnergyAndHPBarsX], a + add DUELVARS_ARENA_CARD + call GetNonTurnDuelistVariable + cp -1 + ret z + call SwapTurn + call GetCardIDFromDeckIndex + call LoadCardDataToBuffer1_FromCardID + xor a + ld [wCurPlayAreaY], a + bank1call OpenCardPage_FromCheckPlayArea + call SwapTurn + ret + +Func_006_4293: + ldh a, [hWhoseTurn] + push af + bank1call Func_434e + pop af + ldh [hWhoseTurn], a + ret + +Func_006_429d: + ldh a, [hWhoseTurn] + push af + bank1call Func_4345 + pop af + ldh [hWhoseTurn], a + ret + +Func_006_42a7: + ldh a, [hWhoseTurn] + push af + bank1call OpenPlayerDiscardPileScreen + pop af + ldh [hWhoseTurn], a + ret + +Func_006_42b1: + ldh a, [hWhoseTurn] + push af + bank1call OpenOpponentDiscardPileScreen + pop af + ldh [hWhoseTurn], a + ret + +Data_006_42bb: + INCROM $182bb, $183bb + +Func_006_43bb: ; 183bb (6:43bb) + xor a + ld [wcfe3], a + ld hl, $ce53 +.asm_006_43c2 + ld e, [hl] + inc hl + ld d, [hl] + ld a, [$ce52] + ld l, a +.asm_006_43c9 + ld h, $07 + call HtimesL + add hl, de + ldh a, [hDPadHeld] + or a + jp z, .asm_006_446b + inc hl + inc hl + inc hl + bit D_UP_F, a + jr z, .asm_006_43df +.asm_006_43dc + ld a, [hl] + jr .asm_006_43f5 +.asm_006_43df + inc hl + bit D_DOWN_F, a + jr z, .asm_006_43e7 + ld a, [hl] + jr .asm_006_43f5 +.asm_006_43e7 + inc hl + bit D_RIGHT_F, a + jr z, .asm_006_43ef + ld a, [hl] + jr .asm_006_43f5 +.asm_006_43ef + inc hl + bit D_LEFT_F, a + jr z, .asm_006_446b + ld a, [hl] +.asm_006_43f5 + push af + ld a, [$ce52] + ld [$ce57], a + pop af + ld [$ce52], a + cp $05 + jr c, .asm_006_440e + cp $0b + jr c, .asm_006_4462 + cp $10 + jr c, .asm_006_4437 + jr .asm_006_4462 +.asm_006_440e + ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA + call GetTurnDuelistVariable + dec a + jr nz, .asm_006_441d + ld a, $10 + ld [$ce52], a + jr .asm_006_4462 +.asm_006_441d + ld b, a + ld a, [$ce52] + cp b + jr c, .asm_006_4462 + ldh a, [hDPadHeld] + bit D_RIGHT_F, a + jr z, .asm_006_4430 + xor a + ld [$ce52], a + jr .asm_006_4462 +.asm_006_4430: + ld a, b + dec a + ld [$ce52], a + jr .asm_006_4462 +.asm_006_4437: + ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA + call GetNonTurnDuelistVariable + dec a + jr nz, .asm_006_4446 + ld a, $11 + ld [$ce52], a + jr .asm_006_4462 +.asm_006_4446 + ld b, a + ld a, [$ce52] + sub $0b + cp b + jr c, .asm_006_4462 + ldh a, [hDPadHeld] + bit D_LEFT_F, a + jr z, .asm_006_445c + ld a, $0b + ld [$ce52], a + jr .asm_006_4462 +.asm_006_445c + ld a, b + add $0a + ld [$ce52], a +.asm_006_4462 + ld a, $01 + ld [wcfe3], a + xor a + ld [wcea3], a +.asm_006_446b + ldh a, [hKeysPressed] + and $03 + jr z, .asm_006_448b + and $01 + jr nz, .asm_006_447d + ld a, $ff + farcall Func_90fb + scf + ret +.asm_006_447d + call Func_006_44a0 + ld a, $01 + farcall Func_90fb + ld a, [$ce52] + scf + ret +.asm_006_448b + ld a, [wcfe3] + or a + jr z, .asm_006_4494 + call PlaySFX +.asm_006_4494 + ld hl, wcea3 + ld a, [hl] + inc [hl] + and $0f + ret nz + bit D_RIGHT_F, [hl] + jr nz, Func_006_44bf +Func_006_44a0: ; 184a0 (6:44a0) + call ZeroObjectPositions + ld hl, $ce53 + ld e, [hl] + inc hl + ld d, [hl] + ld a, [$ce52] + ld l, a + ld h, $07 + call HtimesL + add hl, de + ld d, [hl] + inc hl + ld e, [hl] + inc hl + ld b, [hl] + ld c, $00 + call SetOneObjectAttributes + or a + ret + +Func_006_44bf: ; 184bf (6:44bf) + call ZeroObjectPositions + ld a, $01 + ld [wVBlankOAMCopyToggle], a + ret + + xor a + ld [wGlossaryPageNo], a + call Func_006_452b + xor a + ld [$ce52], a + ld de, $4c8e + ld hl, $ce53 + ld [hl], e + inc hl + ld [hl], d + ld a, $ff + ld [$ce55], a + xor a + ld [wcea3], a +.asm_006_44e5 + ld a, $01 + ld [wVBlankOAMCopyToggle], a + call DoFrame + ldh a, [hKeysPressed] + and $04 + jr nz, .asm_006_4518 + farcall $2, $49ae + jr nc, .asm_006_44e5 + cp $ff + jr nz, .asm_006_4502 + farcall $2, $4aa1 + ret +.asm_006_4502 + push af + farcall $2, $4aa1 + pop af + cp $09 + jr z, .asm_006_451e + call Func_006_4598 + call Func_006_452b + xor a + ld [wcea3], a + jr .asm_006_44e5 +.asm_006_4518 + ld a, $01 + farcall Func_90fb +.asm_006_451e + ld a, [wGlossaryPageNo] + xor $01 + ld [wGlossaryPageNo], a + call Func_006_455a + jr .asm_006_44e5 + +Func_006_452b: ; 1852b (6:452b) + xor a + ld [wTileMapFill], a + call ZeroObjectPositions + ld a, $01 + ld [wVBlankOAMCopyToggle], a + call DoFrame + call EmptyScreen + call Set_OBJ_8x8 + farcall $2, $4992 + lb de, 5, 0 + call InitTextPrinting + ldtx hl, Text02f6 + call ProcessTextFromID + call Func_006_455a + ldtx hl, Text02f9 + call DrawWideTextBox_PrintText + ret + +; print glossary +Func_006_455a: ; 1855a (6:455a) + ld hl, wDefaultText + ld a, TX_SYMBOL + ld [hli], a + ld a, [wGlossaryPageNo] + add SYM_1 + ld [hli], a + ld a, TX_SYMBOL + ld [hli], a + ld a, SYM_SLASH + ld [hli], a + ld a, TX_SYMBOL + ld [hli], a + ld a, SYM_2 + ld [hli], a + ld [hl], TX_END + + lb de, 16, 1 + call InitTextPrinting + ld hl, wDefaultText + call ProcessText + + lb de, 1, 3 + call InitTextPrinting + ld a, [wGlossaryPageNo] + or a + + jr nz, .page_two + ldtx hl, Text02f7 + jr .page_one +.page_two + ldtx hl, Text02f8 +.page_one + call ProcessTextFromID + ret + +Func_006_4598: ; 18598 (6:4598) + push af + xor a + ld [wTileMapFill], a + call EmptyScreen + lb de, 5, 0 + call InitTextPrinting + ldtx hl, Text02f6 + call ProcessTextFromID + ld de, $0004 + ld bc, $140e + call DrawRegularTextBox + ld a, [wGlossaryPageNo] + or a + jr nz, .back_page + ld hl, GlossaryData1 + jr .front_page +.back_page + ld hl, GlossaryData2 +.front_page + pop af + ; hl += (a + (a << 2)). + ; that is, + ; hl += (5 * a). + ld c, a + ld b, 0 + add hl, bc + sla a + sla a + ld c, a + add hl, bc + ld a, [hli] + push hl + ld d, a + ld e, $02 + call InitTextPrinting + ld a, [hli] + ld h, [hl] + ld l, a + call ProcessTextFromID + pop hl + lb de, 1, 5 + call InitTextPrinting + inc hl + inc hl + ld a, [hli] + ld h, [hl] + ld l, a + ld a, $01 + ld [wLineSeparation], a + call ProcessTextFromID + xor a + ld [wLineSeparation], a + call EnableLCD +.asm_006_45f7 + call DoFrame + ldh a, [hKeysPressed] + and B_BUTTON + jr z, .asm_006_45f7 + ld a, $ff + farcall Func_90fb + ret + +; unit: 5 bytes. +; [structure] +; horizonal align (1) / text id 1 (2) / text id 2 (2) +glossary_entry: MACRO + db \1 + tx \2 + tx \3 +ENDM +GlossaryData1: + glossary_entry 7, Text02fa, Text030c + glossary_entry 5, Text02fb, Text030d + glossary_entry 7, Text02fc, Text030e + glossary_entry 6, Text02fd, Text030f + glossary_entry 6, Text02fe, Text0310 + glossary_entry 4, Text02ff, Text0311 + glossary_entry 5, Text0300, Text0312 + glossary_entry 7, Text0301, Text0313 + glossary_entry 5, Text0302, Text0314 +GlossaryData2: + glossary_entry 5, Text0303, Text0315 + glossary_entry 5, Text0304, Text0316 + glossary_entry 5, Text0305, Text0317 + glossary_entry 5, Text0306, Text0318 + glossary_entry 6, Text0307, Text0319 + glossary_entry 5, Text0308, Text031a + glossary_entry 6, Text0309, Text031b + glossary_entry 6, Text030a, Text031c + glossary_entry 6, Text030b, Text031d + +; (6:4661) + xor a + ld [wcfe3], a + ld a, [wceaf] + ld d, a + ld a, [wceb0] + ld e, a + ldh a, [hDPadHeld] + or a + jr z, .asm_006_46a2 + bit D_LEFT_F, a + jr nz, .asm_006_467a + bit D_RIGHT_F, a + jr z, .asm_006_4680 +.asm_006_467a + ld a, d + xor $01 + ld d, a + jr .asm_006_468c +.asm_006_4680 + bit D_UP_F, a + jr nz, .asm_006_4688 + bit D_DOWN_F, a + jr z, .asm_006_46a2 +.asm_006_4688 + ld a, e + xor $01 + ld e, a +.asm_006_468c + ld a, $01 + ld [wcfe3], a + push de + call .asm_006_46d4 + pop de + ld a, d + ld [wceaf], a + ld a, e + ld [wceb0], a + xor a + ld [wcea3], a +.asm_006_46a2 + ldh a, [hKeysPressed] + and $03 + jr z, .asm_006_46bd + and $01 + jr nz, .asm_006_46b3 + ld a, $ff + call Func_006_50fb + scf + ret +.asm_006_46b3 + call .asm_006_46f3 + ld a, $01 + call Func_006_50fb + scf + ret +.asm_006_46bd + ld a, [wcfe3] + or a + jr z, .asm_006_46c6 + call PlaySFX +.asm_006_46c6 + ld hl, wcea3 + ld a, [hl] + inc [hl] + and $0f + ret nz + ld a, $0f + bit D_RIGHT_F, [hl] + jr z, .asm_006_46d6 +.asm_006_46d4 ; 186d4 (6:46d4) + ld a, $00 +.asm_006_46d6 + ld e, a + ld a, $0a + ld l, a + ld a, [wceaf] + ld h, a + call HtimesL + ld a, l + add $01 + ld b, a + ld a, [wceb0] + sla a + add $0e + ld c, a + ld a, e + call WriteByteToBGMap0 + or a + ret +.asm_006_46f3: ; 186f3 (6:46f3) + ld a, $0f + jr .asm_006_46d6 + +; (6:46f7) INCLUDE "data/effect_commands.asm" - INCROM $18f9c, $1996e +Func_006_4f9c: ; 18f9c (6:4f9c) + ld a, [wLoadedMoveAnimation] + or a + ret z + ld l, a + ld h, 0 + add hl, hl + ld de, $51a4 +.asm_006_4fa8 + add hl, de + ld e, [hl] + inc hl + ld d, [hl] + push de + ld hl, wce7e + ld a, [hl] + or a + jr nz, .asm_006_4fd3 + ld [hl], $01 + call Func_3b21 + pop de + push de + ld a, $00 + ld [wd4ae], a + ld a, $01 + ld [$d4b3], a + xor a + ld [wd4b0], a + ld a, [de] + cp $04 + jr z, .asm_006_4fd3 + ld a, $96 + call Func_3b6a +.asm_006_4fd3 + pop de +.asm_006_4fd4 + ld a, [de] + inc de + ld hl, PointerTable_006_508f + jp JumpToFunctionInTable + +Func_006_4fdc: + ret + +Func_006_4fdd: + ldh a, [hWhoseTurn] + ld [wd4af], a + ld a, [wDuelType] + cp $00 + jr nz, Func_006_5014 + ld a, $c2 + ld [wd4af], a + jr Func_006_5014 + +Func_006_4ff0: + call SwapTurn + ldh a, [hWhoseTurn] + ld [wd4af], a + call SwapTurn + ld a, [wDuelType] + cp $00 + jr nz, Func_006_5014 + ld a, $c3 + ld [wd4af], a + jr Func_006_5014 + +Func_006_5009: + ld a, [wce82] + and $7f + ld [wd4b0], a + jr Func_006_5014 + +Func_006_5013: + ret + +Func_006_5014: + ld a, [de] + inc de + cp $09 + jr z, .asm_006_502b + cp $fa + jr z, .asm_006_5057 + cp $fb + jr z, .asm_006_505d + cp $fc + jr z, .asm_006_5063 +.asm_006_5026 + call Func_3b6a + jr Func_006_4f9c.asm_006_4fd4 +.asm_006_502b + ld a, $97 + call Func_3b6a + ld a, [wce81] + ld [$d4b3], a + push de + ld hl, wce7f + ld de, $d4b1 + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + pop de + ld a, $8c + call Func_3b6a + ld a, [wDuelDisplayedScreen] + cp $01 + jr nz, .asm_006_5054 + ld a, $98 + call Func_3b6a +.asm_006_5054 + jp Func_006_4f9c.asm_006_4fd4 +.asm_006_5057 + ld c, $61 + ld b, $63 + jr .asm_006_5067 +.asm_006_505d + ld c, $62 + ld b, $64 + jr .asm_006_5067 +.asm_006_5063 + ld c, $63 + ld b, $61 +.asm_006_5067 + ldh a, [hWhoseTurn] + cp $c2 + ld a, c + jr z, .asm_006_5026 + ld a, [wDuelType] + cp $00 + ld a, c + jr z, .asm_006_5026 + ld a, b + jr .asm_006_5026 + +Func_006_5079: + ld a, [de] + inc de + ld [$d4b3], a + ld a, [wce82] + ld [wd4b0], a + call Func_006_509d + ld a, $96 + call Func_3b6a + jp Func_006_4f9c.asm_006_4fd4 + +PointerTable_006_508f: ; (6:508f) + dw Func_006_4fdc + dw Func_006_5014 + dw Func_006_4fdd + dw Func_006_4ff0 + dw Func_006_5079 + dw Func_006_5009 + dw Func_006_5013 + +Func_006_509d: ; 1909d (6:509d) + ld a, [$d4b3] + cp $04 + jr z, .asm_006_50ad + cp $01 + ret nz + ld a, $00 + ld [wd4ae], a + ret +.asm_006_50ad + ld a, [wd4b0] + ld l, a + ld a, [wWhoseTurn] + ld h, a + cp $c2 + jr z, .asm_006_50cc + ld a, [wDuelType] + cp $00 + jr z, .asm_006_50c6 + bit 7, l + jr z, .asm_006_50e2 + jr .asm_006_50d2 +.asm_006_50c6 + bit 7, l + jr z, .asm_006_50da + jr .asm_006_50ea +.asm_006_50cc + bit 7, l + jr z, .asm_006_50d2 + jr .asm_006_50e2 +.asm_006_50d2 + ld l, $04 + ld h, $c2 + ld a, $01 + jr .asm_006_50f0 +.asm_006_50da + ld l, $04 + ld h, $c3 + ld a, $01 + jr .asm_006_50f0 +.asm_006_50e2 + ld l, $05 + ld h, $c3 + ld a, $02 + jr .asm_006_50f0 +.asm_006_50ea + ld l, $05 + ld h, $c2 + ld a, $02 +.asm_006_50f0: + ld [wd4ae], a + ret + +; this part is not perfectly analyzed. +; needs some fix. + ld a, [$d4b3] + cp $04 + jr z, Func_006_50fb.asm_006_510f +Func_006_50fb: ; 190fb (6:50fb) + cp $01 + jr nz, .asm_006_510e + ld a, $00 + ld [wd4ae], a + ld a, [wDuelDisplayedScreen] + cp $01 + jr z, .asm_006_510e + bank1call DrawDuelMainScene +.asm_006_510e + ret +.asm_006_510f + call Func_006_509d + ld a, [wDuelDisplayedScreen] + cp l + jr z, .asm_006_512e + ld a, l + push af + ld l, $c2 + ld a, [wDuelType] + cp $00 + jr nz, .asm_006_5127 + ld a, [wWhoseTurn] + ld l, a +.asm_006_5127 + call Func_30bc + pop af + ld [wDuelDisplayedScreen], a +.asm_006_512e + call DrawWideTextBox + ret + +; needs analyze. + push hl + push bc + push de + ld a, [wLoadedMoveAnimation] + cp $79 + jr z, .asm_006_5164 + cp $86 + jr z, .asm_006_5164 + ld a, [wTempNonTurnDuelistCardID] + ld e, a + ld d, $00 + call LoadCardDataToBuffer1_FromCardID + ld a, $12 + call CopyCardNameAndLevel + ld [hl], $00 + ld hl, wTxRam2 + xor a + ld [hli], a + ld [hl], a + ld hl, wce7f + ld a, [hli] + ld h, [hl] + ld l, a + call Func_006_5168 + ld a, l + or h + call nz, DrawWideTextBox_PrintText +.asm_006_5164 + pop de + pop bc + pop hl + ret + +Func_006_5168: ; 19168 (6:5168) + ld a, l + or h + jr z, .asm_006_5188 + call LoadTxRam3 + ld a, [wce81] + ld hl, $003a + and $06 + ret z + ld hl, $0038 + cp $06 + ret z + and $02 + ld hl, $0037 + ret nz + ld hl, $0036 + ret +.asm_006_5188 + call CheckNoDamageOrEffect + ret c + ld hl, $003b + ld a, [wce81] + and $04 + ret z + ld hl, $0039 + ret + +; needs analyze. + ld a, [wDuelDisplayedScreen] + cp $01 + ret nz + bank1call DrawDuelHUDs + ret + + INCROM $191a3, $1996e Func_1996e: ; 1996e (6:596e) call EnableSRAM @@ -183,7 +1205,7 @@ Func_1996e: ; 1996e (6:596e) ld [hl], a inc l jr nz, .asm_199a2 - ld hl, $bc00 + ld hl, sCurrentDuel xor a ld [hli], a ld [hli], a @@ -266,32 +1288,33 @@ Func_1a61f: ; 1a61f (6:661f) call SetupText pop af or a - jr nz, .asm_1a640 + jr nz, .else ld a, $40 - call $663b + call .legendary_card_text ld a, $5f - call $663b + call .legendary_card_text ld a, $76 - call $663b + call .legendary_card_text ld a, $c1 +.legendary_card_text ldtx hl, ReceivedLegendaryCardText - jr .asm_1a660 -.asm_1a640 + jr .print_text +.else ldtx hl, ReceivedCardText cp $1e - jr z, .asm_1a660 + jr z, .print_text cp $43 - jr z, .asm_1a660 + jr z, .print_text ldtx hl, ReceivedPromotionalFlyingPikachuText cp $64 - jr z, .asm_1a660 + jr z, .print_text ldtx hl, ReceivedPromotionalSurfingPikachuText cp $65 - jr z, .asm_1a660 + jr z, .print_text cp $66 - jr z, .asm_1a660 + jr z, .print_text ldtx hl, ReceivedPromotionalCardText -.asm_1a660 +.print_text push hl ld e, a ld d, $0 @@ -307,23 +1330,1640 @@ Func_1a61f: ; 1a61f (6:661f) ld a, PLAYER_TURN ldh [hWhoseTurn], a pop hl - bank1call $5e5f -.asm_1a680 + bank1call _DisplayCardDetailScreen +.loop call AssertSongFinished or a - jr nz, .asm_1a680 + jr nz, .loop + call ResumeSong - bank1call $5773 + bank1call OpenCardPage_FromHand ret ; 0x1a68d - INCROM $1a68d, $1a6cc +Func_006_668d: + ld a, $c2 ; player's turn + ldh [hWhoseTurn], a + ld h, a + ld l, $00 +.asm_006_6694 + xor a + ld [hli], a + ld a, l + cp $3c + jr c, .asm_006_6694 + xor a + ld hl, wBoosterCardsDrawn + ld de, wDuelTempList + ld c, $00 +.asm_006_66a4 + ld a, [hli] + or a + jr z, .asm_006_66ae + ld a, c + ld [de], a + inc de + inc c + jr .asm_006_66a4 +.asm_006_66ae + ld a, $ff + ld [de], a + lb de, $38, $9f + call SetupText + bank1call InitAndDrawCardListScreenLayout + ld hl, $0056 + ld de, $0196 + bank1call SetCardListHeaderText + ld a, A_BUTTON | START + ld [wNoItemSelectionMenuKeys], a + bank1call DisplayCardList + ret CommentedOut_1a6cc: ; 1a6cc (6:66cc) ret -; 0x1a6cd - INCROM $1a6cd, $1ad89 +Func_006_66cd: ; (6:66cd) + ldh a, [hBankSRAM] + or a + ret nz + push hl + push de + push bc + ld hl, sCardCollection + ld bc, $0250 + ld a, [s0a000 + $b] + ld e, a +.asm_006_66de + ld a, [hli] + xor e + ld e, a + dec bc + ld a, c + or b + jr nz, .asm_006_66de + ld a, e + pop bc + pop de + pop hl + or a + ret z + xor a + ld [wTileMapFill], a + ld hl, wDoFrameFunction + ld [hli], a + ld [hl], a + ldh [hSCX], a + ldh [hSCY], a + bank1call ZeroObjectPositionsAndToggleOAMCopy + call EmptyScreen + call LoadSymbolsFont + bank1call SetDefaultPalettes + ld a, [wConsole] + cp $01 + jr nz, .asm_006_6719 + ld a, $e4 + ld [wOBP0], a + ld [wBGP], a + ld a, $01 + ld [wFlushPaletteFlags], a +.asm_006_6719 + lb de, $38, $9f + call SetupText + ld hl, $00a3 + bank1call Func_57df + ld a, $0a + ld [$0000], a + xor a + ldh [hBankSRAM], a + ld [$4000], a + ld [$a000], a + ld [$0000], a + jp Reset + ret + +Func_006_673a: ; (6:673a) + ldh a, [hBankSRAM] + or a + ret nz + push hl + push de + push bc + ld hl, sCardCollection + ld bc, $0250 + ld e, $00 +.asm_006_6749 + ld a, [hli] + xor e + ld e, a + dec bc + ld a, c + or b + jr nz, .asm_006_6749 + ld a, $0a + ld [$0000], a + ld a, e + ld [s0a00b], a + pop bc + pop de + pop hl + ret + +WhatIsYourNameData: ; (6:675e) + textitem 1, 1, WhatIsYourNameText + db $ff +; [Deck1Data ~ Deck4Data] +; These are directed from around (2:4f05), +; without any bank description. +; That is, the developers hard-coded it. -_-;; +Deck1Data: ; (6:6763) + textitem 2, 1, Text022b + textitem 14, 1, Text0219 + db $ff +Deck2Data: ; (6:676c) + textitem 2, 1, Text022c + textitem 14, 1, Text0219 + db $ff +Deck3Data: ; (6:6775) + textitem 2, 1, Text022d + textitem 14, 1, Text0219 + db $ff +Deck4Data: ; (6:677e) + textitem 2, 1, Text022e + textitem 14, 1, Text0219 + db $ff + +; set each byte zero from hl for b bytes. +ClearMemory: ; (6:6787) + push af + push bc + push hl + ld b, a + xor a +.loop + ld [hli], a + dec b + jr nz, .loop + pop hl + pop bc + pop af + ret + +; play different sfx by a. +; if a is 0xff play sfx with 0x03, +; else with 0x02. +PlaySFXByA: ; (6:6794) + push af + inc a + jr z, .on_three + ld a, $02 + jr .on_two +.on_three + ld a, $03 +.on_two + call PlaySFX + pop af + ret + +; get player name from the user +; into hl +InputPlayerName: ; (6:67a3) + ld e, l + ld d, h + ld a, MAX_PLAYER_NAME_LENGTH + ld hl, WhatIsYourNameData + lb bc, 12, 1 + call InitializeInputName + call Set_OBJ_8x8 + xor a + ld [wTileMapFill], a + call EmptyScreen + call ZeroObjectPositions + ld a, $01 + ld [wVBlankOAMCopyToggle], a + call LoadSymbolsFont + lb de, $38, $bf + call SetupText + call SetVram0xFF + ld a, $02 + ld [wd009], a + call DrawNamingScreenBG + xor a + ld [wNamingScreenCursorX], a + ld [wNamingScreenCursorY], a + ld a, $09 + ld [wd005], a + ld a, $06 + ld [wNamingScreenKeyboardHeight], a + ld a, $0f + ld [wceaa], a + ld a, $00 + ld [wceab], a +.loop + ld a, $01 + ld [wVBlankOAMCopyToggle], a + call DoFrame + call UpdateRNGSources + ldh a, [hDPadHeld] + and START + jr z, .else + ; if pressed start button. + ld a, $01 + call PlaySFXByA + call Func_006_6a07 + ld a, 6 + ld [wNamingScreenCursorX], a + ld a, 5 + ld [wNamingScreenCursorY], a + call Func_006_6a23 + jr .loop +.else + call NamingScreen_CheckButtonState + jr nc, .loop ; if not pressed, go back to the loop. + cp $ff + jr z, .on_b_button + ; on A button. + call NamingScreen_ProcessInput + jr nc, .loop + ; if the player selected the end button, + ; end its naming. + call FinalizeInputName + ret +.on_b_button + ld a, [wNamingScreenBufferLength] + or a + jr z, .loop ; empty string? + ; erase one character. + ld e, a + ld d, 0 + ld hl, wNamingScreenBuffer + add hl, de + dec hl + dec hl + ld [hl], TX_END + ld hl, wNamingScreenBufferLength ; note that its unit is byte, not word. + dec [hl] + dec [hl] + call PrintPlayerNameFromInput + jr .loop + +; it's called when naming(either player's or deck's) starts. +; a: maximum length of name(depending on whether player's or deck's). +; bc: position of name. +; de: dest. pointer. +; hl: pointer to text item of the question. +InitializeInputName: + ld [wNamingScreenBufferMaxLength], a + push hl + ld hl, wNamingScreenNamePosition + ld [hl], b + inc hl + ld [hl], c + pop hl + ld b, h + ld c, l + ; set the question string. + ld hl, wNamingScreenQuestionPointer + ld [hl], c + inc hl + ld [hl], b + ; set the destination buffer. + ld hl, wNamingScreenDestPointer + ld [hl], e + inc hl + ld [hl], d + ; clear the name buffer. + ld a, NAMING_SCREEN_BUFFER_LENGTH + ld hl, wNamingScreenBuffer + call ClearMemory + ld hl, wNamingScreenBuffer + ld a, [wNamingScreenBufferMaxLength] + ld b, a + inc b +.loop + ; copy data from de to hl + ; for b bytes. + ld a, [de] + inc de + ld [hli], a + dec b + jr nz, .loop + ld hl, wNamingScreenBuffer + call GetTextSizeInTiles + ld a, c + ld [wNamingScreenBufferLength], a + ret + +FinalizeInputName: + ld hl, wNamingScreenDestPointer + ld e, [hl] + inc hl + ld d, [hl] + ld l, e + ld h, d + ld de, wNamingScreenBuffer + ld a, [wNamingScreenBufferMaxLength] + ld b, a + inc b + jr InitializeInputName.loop + +; draws the keyboard frame +; and the question if it exists. +DrawNamingScreenBG: + call DrawTextboxForKeyboard + call PrintPlayerNameFromInput + ld hl, wNamingScreenQuestionPointer + ld c, [hl] + inc hl + ld a, [hl] + ld h, a + or c + jr z, .put_text_end + ; print the question string. + ; ex) "What is your name?" + ld l, c + call PlaceTextItems +.put_text_end + ; print "End". + ld hl, .data + call PlaceTextItems + ldtx hl, Text0221 + lb de, 2, 4 + call InitTextPrinting + call ProcessTextFromID + call EnableLCD + ret +.data + textitem $0f, $10, EndText ; "End" + db $ff + +DrawTextboxForKeyboard: + lb de, 0, 3 ; x, y + lb bc, 20, 15 ; w, h + call DrawRegularTextBox + ret + +PrintPlayerNameFromInput: + ld hl, wNamingScreenNamePosition + ld d, [hl] + inc hl + ld e, [hl] + push de + call InitTextPrinting + ld a, [wNamingScreenBufferMaxLength] + ld e, a + ld a, $14 + sub e + inc a + ld e, a + ld d, $00 + ; print the underbars + ; before print the input. + ld hl, .char_underbar + add hl, de + call ProcessText + pop de + call InitTextPrinting + ; print the input from the user. + ld hl, wNamingScreenBuffer + call ProcessText + ret +.char_underbar + db $56 +rept 10 + textfw3 "_" +endr + done + +; check if button pressed. +; if pressed, set the carry bit on. +NamingScreen_CheckButtonState: + xor a + ld [wcfe3], a + ldh a, [hDPadHeld] + or a + jp z, .no_press + ; detected any button press. + ld b, a + ld a, [wNamingScreenKeyboardHeight] + ld c, a + ld a, [wNamingScreenCursorX] + ld h, a + ld a, [wNamingScreenCursorY] + ld l, a + bit D_UP_F, b + jr z, .asm_006_692c + ; up + dec a + bit D_DOWN_F, a + jr z, .asm_006_69a7 + ld a, c + dec a + jr .asm_006_69a7 +.asm_006_692c + bit D_DOWN_F, b + jr z, .asm_006_6937 + ; down + inc a + cp c + jr c, .asm_006_69a7 + xor a + jr .asm_006_69a7 +.asm_006_6937 + ld a, [wd005] + ld c, a + ld a, h + bit D_LEFT_F, b + jr z, .asm_006_6974 + ; left + ld d, a + ld a, $06 + cp l + ld a, d + jr nz, .asm_006_696b + push hl + push bc + push af + call GetCharInfoFromPos_Player + inc hl + inc hl + inc hl + inc hl + inc hl + ld a, [hl] + dec a + ld d, a + pop af + pop bc + pop hl + sub d + cp $ff + jr nz, .asm_006_6962 + ld a, c + sub $02 + jr .asm_006_69aa +.asm_006_6962 + cp $fe + jr nz, .asm_006_696b + ld a, c + sub $03 + jr .asm_006_69aa +.asm_006_696b + dec a + bit D_DOWN_F, a + jr z, .asm_006_69aa + ld a, c + dec a + jr .asm_006_69aa +.asm_006_6974 + bit D_RIGHT_F, b + jr z, .no_press + ld d, a + ld a, $06 + cp l + ld a, d + jr nz, .asm_006_6990 + push hl + push bc + push af + call GetCharInfoFromPos_Player + inc hl + inc hl + inc hl + inc hl + ld a, [hl] + dec a + ld d, a + pop af + pop bc + pop hl + add d +.asm_006_6990 + inc a + cp c + jr c, .asm_006_69aa + inc c + cp c + jr c, .asm_006_69a4 + inc c + cp c + jr c, .asm_006_69a0 + ld a, $02 + jr .asm_006_69aa +.asm_006_69a0 + ld a, $01 + jr .asm_006_69aa +.asm_006_69a4 + xor a + jr .asm_006_69aa +.asm_006_69a7 + ld l, a + jr .asm_006_69ab +.asm_006_69aa + ld h, a +.asm_006_69ab + push hl + call GetCharInfoFromPos_Player + inc hl + inc hl + inc hl + ld a, [wd009] + cp $02 + jr nz, .asm_006_69bb + inc hl + inc hl +.asm_006_69bb + ld d, [hl] + push de + call Func_006_6a07 + pop de + pop hl + ld a, l + ld [wNamingScreenCursorY], a + ld a, h + ld [wNamingScreenCursorX], a + xor a + ld [wcea3], a + ld a, $06 + cp d + jp z, NamingScreen_CheckButtonState + ld a, $01 + ld [wcfe3], a +.no_press + ldh a, [hKeysPressed] + and A_BUTTON | B_BUTTON + jr z, .asm_006_69ef + and A_BUTTON + jr nz, .asm_006_69e5 + ld a, $ff +.asm_006_69e5 + call PlaySFXByA + push af + call Func_006_6a23 + pop af + scf + ret +.asm_006_69ef + ld a, [wcfe3] + or a + jr z, .asm_006_69f8 + call PlaySFX +.asm_006_69f8 + ld hl, wcea3 + ld a, [hl] + inc [hl] + and $0f + ret nz + ld a, [wceaa] + bit 4, [hl] + jr z, Func_006_6a07.asm_006_6a0a + +Func_006_6a07: + ld a, [wceab] +.asm_006_6a0a + ld e, a + ld a, [wNamingScreenCursorX] + ld h, a + ld a, [wNamingScreenCursorY] + ld l, a + call GetCharInfoFromPos_Player + ld a, [hli] + ld c, a + ld b, [hl] + dec b + ld a, e + call Func_006_6a28 + call WriteByteToBGMap0 + or a + ret + +Func_006_6a23: + ld a, [wceaa] + jr Func_006_6a07.asm_006_6a0a + +Func_006_6a28: + push af + push bc + push de + push hl + push af + call ZeroObjectPositions + pop af + ld b, a + ld a, [wceab] + cp b + jr z, .asm_006_6a60 + ld a, [wNamingScreenBufferLength] + srl a + ld d, a + ld a, [wNamingScreenBufferMaxLength] + srl a + ld e, a + ld a, d + cp e + jr nz, .asm_006_6a49 + dec a +.asm_006_6a49 + ld hl, wNamingScreenNamePosition + add [hl] + ld d, a + ld h, $08 + ld l, d + call HtimesL + ld a, l + add $08 + ld d, a + ld e, $18 + ld bc, $0000 + call SetOneObjectAttributes +.asm_006_6a60 + pop hl + pop de + pop bc + pop af + ret + +SetVram0xFF: + ld hl, v0Tiles0 + ld de, .data + ld b, 0 +.loop + ; copy data from de to hl + ; for 0x10 bytes. + ; and de has all of 0xff data, + ; which means that it puts only 0xff. + ld a, $10 + cp b + ret z + inc b + ld a, [de] + inc de + ld [hli], a + jr .loop +.data +rept $10 + db $ff +endr + +; set the carry bit on, +; if "End" was selected. +NamingScreen_ProcessInput: + ld a, [wNamingScreenCursorX] + ld h, a + ld a, [wNamingScreenCursorY] + ld l, a + call GetCharInfoFromPos_Player + inc hl + inc hl + ; load types into de. + ld e, [hl] + inc hl + ld a, [hli] + ld d, a + cp $09 + jp z, .on_end + cp $07 + jr nz, .asm_006_6ab8 + ld a, [wd009] + or a + jr nz, .asm_006_6aac + ld a, $01 + jp .asm_006_6ace +.asm_006_6aac + dec a + jr nz, .asm_006_6ab4 + ld a, $02 + jp .asm_006_6ace +.asm_006_6ab4 + xor a + jp .asm_006_6ace +.asm_006_6ab8 + cp $08 + jr nz, .asm_006_6ad6 + ld a, [wd009] + or a + jr nz, .asm_006_6ac6 + ld a, $02 + jr .asm_006_6ace +.asm_006_6ac6 + dec a + jr nz, .asm_006_6acc + xor a + jr .asm_006_6ace +.asm_006_6acc + ld a, $01 +.asm_006_6ace + ld [wd009], a + call DrawNamingScreenBG + or a + ret +.asm_006_6ad6 + ld a, [wd009] + cp $02 + jr z, .read_char + ld bc, $0359 ; “ + ld a, d + cp b + jr nz, .asm_006_6af4 + ld a, e + cp c + jr nz, .asm_006_6af4 + push hl + ld hl, TransitionTable1 ; from 55th. + call TransformCharacter + pop hl + jr c, .nothing + jr .asm_006_6b09 +.asm_006_6af4 + ld bc, $035b ; º + ld a, d + cp b + jr nz, .asm_006_6b1d + ld a, e + cp c + jr nz, .asm_006_6b1d + push hl + ld hl, TransitionTable2 ; from 72th. + call TransformCharacter + pop hl + jr c, .nothing +.asm_006_6b09 + ld a, [wNamingScreenBufferLength] + dec a + dec a + ld [wNamingScreenBufferLength], a + ld hl, wNamingScreenBuffer + push de + ld d, 0 + ld e, a + add hl, de + pop de + ld a, [hl] + jr .asm_006_6b37 +.asm_006_6b1d + ld a, d + or a + jr nz, .asm_006_6b37 + ld a, [wd009] + or a + jr nz, .asm_006_6b2b + ld a, TX_HIRAGANA + jr .asm_006_6b37 +.asm_006_6b2b + ld a, TX_KATAKANA + jr .asm_006_6b37 +; read character code from info. to register. +; hl: pointer. +.read_char + ld e, [hl] + inc hl + ld a, [hl] ; a: first byte of the code. + or a + ; if 2 bytes code, jump. + jr nz, .asm_006_6b37 + ; if 1 byte code(ascii), + ; set first byte to $0e. + ld a, $0e +; on 2 bytes code. +.asm_006_6b37 + ld d, a ; de: character code. + ld hl, wNamingScreenBufferLength + ld a, [hl] + ld c, a + push hl + ld hl, wNamingScreenBufferMaxLength + cp [hl] + pop hl + jr nz, .asm_006_6b4c + ; if the buffer is full + ; just change the last character of it. + ld hl, wNamingScreenBuffer + dec hl + dec hl + jr .asm_006_6b51 +; increase name length before add the character. +.asm_006_6b4c + inc [hl] + inc [hl] + ld hl, wNamingScreenBuffer +; write 2 bytes character codes to the name buffer. +; de: 2 bytes character codes. +; hl: dest. +.asm_006_6b51 + ld b, 0 + add hl, bc + ld [hl], d + inc hl + ld [hl], e + inc hl + ld [hl], TX_END ; null terminator. + call PrintPlayerNameFromInput +.nothing + or a + ret +.on_end + scf + ret + +; this transforms the last japanese character +; in the name buffer into its dakuon shape or something. +; it seems to have been deprecated as the game was translated into english. +; but it can still be applied to english, such as upper-lower case transition. +; hl: info. pointer. +TransformCharacter: + ld a, [wNamingScreenBufferLength] + or a + jr z, .return ; if the length is zero, just return. + dec a + dec a + push hl + ld hl, wNamingScreenBuffer + ld d, 0 + ld e, a + add hl, de + ld e, [hl] + inc hl + ld d, [hl] + ; de: last character in the buffer, + ; but byte-wise swapped. + ld a, TX_KATAKANA + cp e + jr nz, .hiragana + ; if it's katakana, + ; make it hiragana by decreasing its high byte. + dec e +.hiragana + pop hl +.loop + ld a, [hli] + or a + jr z, .return + cp d + jr nz, .next + ld a, [hl] + cp e + jr nz, .next + inc hl + ld e, [hl] + inc hl + ld d, [hl] + or a + ret +.next + inc hl + inc hl + inc hl + jr .loop +.return + scf + ret + +; given the position of the current cursor, +; it returns the pointer to the proper information. +; h: position x. +; l: position y. +GetCharInfoFromPos_Player: + push de + ; (information index) = (x) * (height) + (y) + ; (height) = 0x05(Deck) or 0x06(Player) + ld e, l + ld d, h + ld a, [wNamingScreenKeyboardHeight] + ld l, a + call HtimesL + ld a, l + add e + ld hl, KeyboardData_Player + pop de + or a + ret z +.loop + inc hl + inc hl + inc hl + inc hl + inc hl + inc hl + dec a + jr nz, .loop + ret + +; a set of keyboard datum. +; unit: 6 bytes. +; structure: +; abs. y pos. (1) / abs. x pos. (1) / type 1 (1) / type 2 (1) / char. code (2) +; - unused data contains its character code as zero. +kbitem: MACRO + db \1, \2, \3, \4 + dw \5 +ENDM +KeyboardData_Player: ; (6:6baf) + kbitem $04, $02, $11, $00, $0330 + kbitem $06, $02, $12, $00, $0339 + kbitem $08, $02, $13, $00, $0342 + kbitem $0a, $02, $14, $00, $006f + kbitem $0c, $02, $15, $00, $0064 + kbitem $10, $0f, $01, $09, $0000 + kbitem $04, $04, $16, $00, $0331 + kbitem $06, $04, $17, $00, $033a + kbitem $08, $04, $18, $00, $0343 + kbitem $0a, $04, $19, $00, $035d + kbitem $0c, $04, $1a, $00, $0065 + kbitem $10, $0f, $01, $09, $0000 + kbitem $04, $06, $1b, $00, $0332 + kbitem $06, $06, $1c, $00, $033b + kbitem $08, $06, $1d, $00, $0344 + kbitem $0a, $06, $1e, $00, $006a + kbitem $0c, $06, $1f, $00, $0066 + kbitem $10, $0f, $01, $09, $0000 + kbitem $04, $08, $20, $00, $0333 + kbitem $06, $08, $21, $00, $033c + kbitem $08, $08, $22, $00, $0345 + kbitem $0a, $08, $23, $00, $006b + kbitem $0c, $08, $24, $00, $0067 + kbitem $10, $0f, $01, $09, $0000 + kbitem $04, $0a, $25, $00, $0334 + kbitem $06, $0a, $26, $00, $033d + kbitem $08, $0a, $27, $00, $0346 + kbitem $0a, $0a, $28, $00, $0077 + kbitem $0c, $0a, $29, $00, $0068 + kbitem $10, $0f, $01, $09, $0000 + kbitem $04, $0c, $2a, $00, $0335 + kbitem $06, $0c, $2b, $00, $033e + kbitem $08, $0c, $2c, $00, $0347 + kbitem $0a, $0c, $2d, $00, $0060 + kbitem $0c, $0c, $2e, $00, $0069 + kbitem $10, $0f, $01, $09, $0000 + kbitem $04, $0e, $2f, $00, $0336 + kbitem $06, $0e, $30, $00, $033f + kbitem $08, $0e, $31, $00, $0348 + kbitem $0a, $0e, $32, $00, $0061 + kbitem $0c, $0e, $33, $00, $0513 + kbitem $10, $0f, $01, $09, $0000 + kbitem $04, $10, $34, $00, $0337 + kbitem $06, $10, $35, $00, $0340 + kbitem $08, $10, $36, $00, $0349 + kbitem $0a, $10, $3c, $00, $0062 + kbitem $0c, $10, $3d, $00, $0511 + kbitem $10, $0f, $01, $09, $0000 + kbitem $04, $12, $37, $00, $0338 + kbitem $06, $12, $38, $00, $0341 + kbitem $08, $12, $39, $00, $006e + kbitem $0a, $12, $3a, $00, $0063 + kbitem $0c, $12, $3b, $00, $0070 + kbitem $10, $0f, $01, $09, $0000 + kbitem $00, $00, $00, $00, $0000 +; a set of transition datum. +; unit: 4 bytes. +; structure: +; previous char. code (2) / translated char. code (2) +; - the former char. code contains 0x0e in high byte. +; - the latter char. code contains only low byte. +TransitionTable1: + dw $0e16, $003e + dw $0e17, $003f + dw $0e18, $0040 + dw $0e19, $0041 + dw $0e1a, $0042 + dw $0e1b, $0043 + dw $0e1c, $0044 + dw $0e1d, $0045 + dw $0e1e, $0046 + dw $0e1f, $0047 + dw $0e20, $0048 + dw $0e21, $0049 + dw $0e22, $004a + dw $0e23, $004b + dw $0e24, $004c + dw $0e2a, $004d + dw $0e2b, $004e + dw $0e2c, $004f + dw $0e2d, $0050 + dw $0e2e, $0051 + dw $0e52, $004d + dw $0e53, $004e + dw $0e54, $004f + dw $0e55, $0050 + dw $0e56, $0051 + dw $0000 +TransitionTable2: + dw $0e2a, $0052 + dw $0e2b, $0053 + dw $0e2c, $0054 + dw $0e2d, $0055 + dw $0e2e, $0056 + dw $0e4d, $0052 + dw $0e4e, $0053 + dw $0e4f, $0054 + dw $0e50, $0055 + dw $0e51, $0056 + dw $0000 + +; get deck name from the user into de. +; function description is similar to the player's. +; refer to 'InputPlayerName'. +InputDeckName: ; 1ad89 (6:6d89) + push af + ; check if the buffer is empty. + ld a, [de] + or a + jr nz, .not_empty + ; this buffer will contain half-width chars. + ld a, TX_HALFWIDTH + ld [de], a +.not_empty + pop af + inc a + call InitializeInputName + call Set_OBJ_8x8 + + xor a + ld [wTileMapFill], a + call EmptyScreen + call ZeroObjectPositions + + ld a, $01 + ld [wVBlankOAMCopyToggle], a + call LoadSymbolsFont + + lb de, $38, $bf + call SetupText + call FillVramWith0xF0 + + xor a + ld [wd009], a + call Func_006_6e99 + + xor a + ld [wNamingScreenCursorX], a + ld [wNamingScreenCursorY], a + + ld a, $09 + ld [wd005], a + ld a, $07 + ld [wNamingScreenKeyboardHeight], a + ld a, $0f + ld [wceaa], a + ld a, $00 + ld [wceab], a +.loop + ld a, $01 + ld [wVBlankOAMCopyToggle], a + call DoFrame + + call UpdateRNGSources + + ldh a, [hDPadHeld] + and START + jr z, .on_start + + ld a, $01 + call PlaySFXByA + call Func_006_6fa1 + + ld a, 6 + ld [wNamingScreenCursorX], a + ld [wNamingScreenCursorY], a + call Func_006_6fbd + + jr .loop +.on_start + call Func_006_6efb + jr nc, .loop + + cp $ff + jr z, .asm_006_6e1c + + call Func_006_6ec3 + jr nc, .loop + + call FinalizeInputName + + ld hl, wNamingScreenDestPointer + ld a, [hli] + ld h, [hl] + ld l, a + inc hl + + ld a, [hl] + or a + jr nz, .return + + dec hl + ld [hl], TX_END +.return + ret +.asm_006_6e1c + ld a, [wNamingScreenBufferLength] + cp $02 + jr c, .loop + + ld e, a + ld d, 0 + ld hl, wNamingScreenBuffer + add hl, de + dec hl + ld [hl], TX_END + + ld hl, wNamingScreenBufferLength + dec [hl] + call ProcessTextWithUnderbar + + jp .loop + +; fill v0Tiles0 for 0x10 tiles +; with 0xF0. +FillVramWith0xF0: + ld hl, v0Tiles0 + ld de, .data + ld b, 0 +.asm_006_6e3f + ld a, $10 + cp b + ret z + inc b + ld a, [de] + inc de + ld [hli], a + jr .asm_006_6e3f +.data +rept $10 + db $f0 +endr + +; it's only for naming the deck. +ProcessTextWithUnderbar: + ld hl, wNamingScreenNamePosition + ld d, [hl] + inc hl + ld e, [hl] + call InitTextPrinting + ld hl, .underbar_data + ld de, wDefaultText +.loop ; copy the underbar string. + ld a, [hli] + ld [de], a + inc de + or a + jr nz, .loop + + ld hl, wNamingScreenBuffer + ld de, wDefaultText +.loop2 ; copy the input from the user. + ld a, [hli] + or a + jr z, .print_name + ld [de], a + inc de + jr .loop2 +.print_name + ld hl, wDefaultText + call ProcessText + ret +.underbar_data + db TX_HALFWIDTH +rept MAX_DECK_NAME_LENGTH + db "_" +endr + db TX_END + +Func_006_6e99: + call DrawTextboxForKeyboard + call ProcessTextWithUnderbar + ld hl, wNamingScreenQuestionPointer + ld c, [hl] + inc hl + ld a, [hl] + ld h, a + or c + jr z, .print + ; print the question string. + ld l, c + call PlaceTextItems +.print + ; print "End" + ld hl, DrawNamingScreenBG.data + call PlaceTextItems + ; print the keyboard characters. + ldtx hl, NamingScreenKeyboardText ; "A B C D..." + lb de, 2, 4 + call InitTextPrinting + call ProcessTextFromID + call EnableLCD + ret + +Func_006_6ec3: + ld a, [wNamingScreenCursorX] + ld h, a + ld a, [wNamingScreenCursorY] + ld l, a + call GetCharInfoFromPos_Deck + inc hl + inc hl + ld a, [hl] + cp $01 + jr nz, .asm_006_6ed7 + scf + ret +.asm_006_6ed7 + ld d, a + ld hl, wNamingScreenBufferLength + ld a, [hl] + ld c, a + push hl + ld hl, wNamingScreenBufferMaxLength + cp [hl] + pop hl + jr nz, .asm_006_6eeb + ld hl, wNamingScreenBuffer + dec hl + jr .asm_006_6eef +.asm_006_6eeb + inc [hl] + ld hl, wNamingScreenBuffer +.asm_006_6eef + ld b, 0 + add hl, bc + ld [hl], d + inc hl + ld [hl], TX_END + call ProcessTextWithUnderbar + or a + ret + +Func_006_6efb: + xor a + ld [wcfe3], a + ldh a, [hDPadHeld] + or a + jp z, .asm_006_6f73 + ld b, a + ld a, [wNamingScreenKeyboardHeight] + ld c, a + ld a, [wNamingScreenCursorX] + ld h, a + ld a, [wNamingScreenCursorY] + ld l, a + bit 6, b + jr z, .asm_006_6f1f + dec a + bit 7, a + jr z, .asm_006_6f4b + ld a, c + dec a + jr .asm_006_6f4b +.asm_006_6f1f + bit 7, b + jr z, .asm_006_6f2a + inc a + cp c + jr c, .asm_006_6f4b + xor a + jr .asm_006_6f4b +.asm_006_6f2a + cp $06 + jr z, .asm_006_6f73 + ld a, [wd005] + ld c, a + ld a, h + bit 5, b + jr z, .asm_006_6f40 + dec a + bit 7, a + jr z, .asm_006_6f4e + ld a, c + dec a + jr .asm_006_6f4e +.asm_006_6f40 + bit 4, b + jr z, .asm_006_6f73 + inc a + cp c + jr c, .asm_006_6f4e + xor a + jr .asm_006_6f4e +.asm_006_6f4b + ld l, a + jr .asm_006_6f4f +.asm_006_6f4e + ld h, a +.asm_006_6f4f + push hl + call GetCharInfoFromPos_Deck + inc hl + inc hl + ld d, [hl] + push de + call Func_006_6fa1 + pop de + pop hl + ld a, l + ld [wNamingScreenCursorY], a + ld a, h + ld [wNamingScreenCursorX], a + xor a + ld [wcea3], a + ld a, $02 + cp d + jp z, Func_006_6efb + ld a, $01 + ld [wcfe3], a +.asm_006_6f73 + ldh a, [hKeysPressed] + and $03 + jr z, .asm_006_6f89 + and $01 + jr nz, .asm_006_6f7f + ld a, $ff +.asm_006_6f7f + call PlaySFXByA + push af + call Func_006_6fbd + pop af + scf + ret +.asm_006_6f89 + ld a, [wcfe3] + or a + jr z, .asm_006_6f92 + call PlaySFX +.asm_006_6f92 + ld hl, wcea3 + ld a, [hl] + inc [hl] + and $0f + ret nz + ld a, [wceaa] + bit 4, [hl] + jr z, Func_006_6fa1.asm_006_6fa4 + +Func_006_6fa1: + ld a, [wceab] +.asm_006_6fa4 + ld e, a + ld a, [wNamingScreenCursorX] + ld h, a + ld a, [wNamingScreenCursorY] + ld l, a + call GetCharInfoFromPos_Deck + ld a, [hli] + ld c, a + ld b, [hl] + dec b + ld a, e + call Func_006_6fc2 + call WriteByteToBGMap0 + or a + ret + +Func_006_6fbd: + ld a, [wceaa] + jr Func_006_6fa1.asm_006_6fa4 + +Func_006_6fc2: + push af + push bc + push de + push hl + push af + call ZeroObjectPositions + pop af + ld b, a + ld a, [wceab] + cp b + jr z, .asm_006_6ffb + ld a, [wNamingScreenBufferLength] + ld d, a + ld a, [wNamingScreenBufferMaxLength] + ld e, a + ld a, d + cp e + jr nz, .asm_006_6fdf + dec a +.asm_006_6fdf + dec a + ld d, a + ld hl, wNamingScreenNamePosition + ld a, [hl] + sla a + add d + ld d, a + ld h, $04 + ld l, d + call HtimesL + ld a, l + add $08 + ld d, a + ld e, $18 + ld bc, $0000 + call SetOneObjectAttributes +.asm_006_6ffb + pop hl + pop de + pop bc + pop af + ret + +; given the cursor position, +; returns the character information which the cursor directs. +; it's similar to "GetCharInfoFromPos_Player", +; but the data structure is different in its unit size. +; its unit size is 3, and player's is 6. +; h: x +; l: y +GetCharInfoFromPos_Deck: + push de + ld e, l + ld d, h + ld a, [wNamingScreenKeyboardHeight] + ld l, a + call HtimesL + ld a, l + add e + ; x * h + y + ld hl, KeyboardData_Deck + pop de + or a + ret z +.loop + inc hl + inc hl + inc hl + dec a + jr nz, .loop + ret + +; a bunch of data +KeyboardData_Deck: ; (6:7019) + INCROM $1b019, $1b8e8 + INCROM $1b8e8, $1ba12 + +Func_006_7a12: ; (6:7a12) + push af + ld [bc], a + call EnableSRAM + ld a, [wd0a9] + ld l, a + ld h, $1e + call HtimesL + ld bc, $78e8 + add hl, bc + ld b, $00 +.asm_006_7a26 + call Func_006_7a4c + call Func_006_7a5b + call Func_006_7a7d + push hl + ld de, wd0aa + ld h, b + ld l, $02 + call HtimesL + add hl, de + ld d, h + ld e, l + pop hl + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc b + ld a, b + cp $05 + jr nz, .asm_006_7a26 + call DisableSRAM + ret + +Func_006_7a4c: + push hl + ld l, b + ld h, $54 + call HtimesL + ld de, s0a350 + add hl, de + ld d, h + ld e, l + pop hl + ret + +Func_006_7a5b: + push hl + push bc + push de + push de + ld e, [hl] + inc hl + ld d, [hl] + pop hl + ld bc, $0018 + add hl, bc +.asm_006_7a67 + ld a, [de] + inc de + ld b, a + or a + jr z, .asm_006_7a77 + ld a, [de] + inc de + ld c, a +.asm_006_7a70 + ld [hl], c + inc hl + dec b + jr nz, .asm_006_7a70 + jr .asm_006_7a67 +.asm_006_7a77 + pop de + pop bc + pop hl + inc hl + inc hl + ret + +Func_006_7a7d: + push hl + push bc + push de + ld a, [hli] + ld h, [hl] + ld l, a + ld de, wd089 + call CopyText + pop hl + ld de, wd089 +.asm_006_7a8d + ld a, [de] + ld [hli], a + or a + jr z, .asm_006_7a95 + inc de + jr .asm_006_7a8d +.asm_006_7a95 + pop bc + pop hl + inc hl + inc hl + ret + +; farcall from 0xb87e(2:787d): [EF|06|9A|7A] +Func_006_7a9a: ; (6:7a9a) + xor a + ld [wd0a6], a + ld a, $01 +.asm_006_7aa0 + call Func_006_7ae4 + ret nc + sla a + cp $10 + jr z, .asm_006_7aac + jr .asm_006_7aa0 +.asm_006_7aac + ld a, $03 + call Func_006_7ae4 + ret nc + ld a, $05 + call Func_006_7ae4 + ret nc + ld a, $09 + call Func_006_7ae4 + ret nc + ld a, $06 + call Func_006_7ae4 + ret nc + ld a, $0a + call Func_006_7ae4 + ret nc + ld a, $0c + call Func_006_7ae4 + ret nc + ld a, $f7 +.asm_006_7ad2 + call Func_006_7ae4 + ret nc + sra a + cp $ff + jr z, .asm_006_7ade + jr .asm_006_7ad2 +.asm_006_7ade + call Func_006_7ae4 + ret nc + scf + ret + +Func_006_7ae4: + push af + ld hl, wd088 + ld b, [hl] + farcall $2, $7625 + jr c, .asm_006_7af5 + pop af + ld [wd0a6], a + or a + ret +.asm_006_7af5 + pop af + scf + ret -Func_1ad89: ; 1ad89 (6:6d89) - INCROM $1ad89, $1c000 +rept $508 + db $ff +endr
\ No newline at end of file diff --git a/src/engine/home.asm b/src/engine/home.asm index 0046286..cab683d 100644 --- a/src/engine/home.asm +++ b/src/engine/home.asm @@ -1704,7 +1704,7 @@ SetManyObjectsAttributes: ; 950 (0:950) ; for the sprite at wOAM + [wOAMOffset] / 4, set its attributes from registers e, d, c, b ; return carry if [wOAMOffset] > 40 * 4 (beyond the end of wOAM) -SetOneObjectAttributes: ; 97f (0:97f) +SetOneObjectAttributes: ; 097f (0:097f) push hl ld a, [wOAMOffset] ld l, a @@ -5351,7 +5351,7 @@ CopyOpponentName: ; 1c8e (0:1c8e) ld h, a jp CopyText .special_name - ld hl, wc500 + ld hl, wNameBuffer ld a, [hl] or a jr z, .print_player2 diff --git a/src/macros/data.asm b/src/macros/data.asm index 53926da..a7ac93d 100644 --- a/src/macros/data.asm +++ b/src/macros/data.asm @@ -88,4 +88,4 @@ ENDM textitem: MACRO db \1, \2 tx \3 -ENDM +ENDM
\ No newline at end of file diff --git a/src/sram.asm b/src/sram.asm index fa58d07..272fbfd 100644 --- a/src/sram.asm +++ b/src/sram.asm @@ -19,11 +19,13 @@ s0a009:: ; a009 ds $1 s0a00a:: ; a00a ds $1 - - ds $5 +s0a00b:: ; a00b + ds $1 +s0a00c:: ; a00c + ds $4 sPlayerName:: ; a010 - ds $10 + ds NAME_BUFFER_LENGTH ds $e0 diff --git a/src/text/text2.asm b/src/text/text2.asm index 6a37642..27ccff9 100644 --- a/src/text/text2.asm +++ b/src/text/text2.asm @@ -1523,11 +1523,11 @@ Text021c: ; 3b7f9 (e:77f9) textfw3 "A", "B", "C" done -Text021d: ; 3b800 (e:7800) +EndText: ; 3b800 (e:7800) text "End" done -Text021e: ; 3b805 (e:7805) +WhatIsYourNameText: ; 3b805 (e:7805) text "What is your name?" done @@ -1580,7 +1580,7 @@ Text0221: ; 3b8f2 (e:78f2) textfw0 " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " " done -Text0222: ; 3b97b (e:797b) +NamingScreenKeyboardText: ; 3b97b (e:797b) textfw3 "A", " ", "B", " ", "C", " ", "D", " ", "E", " ", "F", " ", "G", " ", "H", " ", "I" line "" textfw3 "J", " ", "K", " ", "L", " ", "M", " ", "N", " ", "O", " ", "P", " ", "Q", " ", "R" diff --git a/src/text/text_offsets.asm b/src/text/text_offsets.asm index bd1da35..65dab94 100644 --- a/src/text/text_offsets.asm +++ b/src/text/text_offsets.asm @@ -542,12 +542,12 @@ TextOffsets:: ; 34000 (d:4000) textpointer Text021a ; 0x021a textpointer Text021b ; 0x021b textpointer Text021c ; 0x021c - textpointer Text021d ; 0x021d - textpointer Text021e ; 0x021e + textpointer EndText ; 0x021d + textpointer WhatIsYourNameText ; 0x021e textpointer Text021f ; 0x021f textpointer Text0220 ; 0x0220 textpointer Text0221 ; 0x0221 - textpointer Text0222 ; 0x0222 + textpointer NamingScreenKeyboardText ; 0x0222 textpointer NewDeckText ; 0x0223 textpointer PleaseSelectDeckText ; 0x0224 textpointer Text0225 ; 0x0225 diff --git a/src/wram.asm b/src/wram.asm index 5d22c69..3af5361 100644 --- a/src/wram.asm +++ b/src/wram.asm @@ -363,8 +363,9 @@ ENDU wOpponentDeck:: ; c480 ds $80 -wc500:: ; c500 - ds $10 +; this holds names like player's or opponent's. +wNameBuffer:: ; c500 + ds NAME_BUFFER_LENGTH ; this holds an $ff-terminated list of card deck indexes (e.g. cards in hand or in bench) ; or (less often) the attack list of a Pokemon card @@ -1303,7 +1304,11 @@ wce5e:: ; ce5e wce60:: ; ce60 ds $1 - ds $2 +wce61:: ; ce61 + ds $1 + +wGlossaryPageNo:: ; ce62 + ds $1 wce63:: ; ce63 ds $1 @@ -1386,12 +1391,20 @@ wcea1:: ; cea1 wcea3:: ; cea3 ds $1 - ds $5 +wNamingScreenCursorY:: ; cea4 + ds $1 -wcea9:: ; cea9 +wcea5:: ; cea5 + ds $4 + +wNamingScreenKeyboardHeight:: ; cea9 ds $1 - ds $5 +wceaa:: ; ceaa + ds $1 + +wceab:: ; ceab + ds $4 wceaf:: ; ceaf ds $1 @@ -1459,13 +1472,40 @@ wcfda:: ; cfda ds $7 wcfe3:: ; cfe3 - ds $1 + ds $4 - ds $1c +; a name buffer in the naming screen. +wNamingScreenBuffer:: ; cfe7 + ds NAMING_SCREEN_BUFFER_LENGTH + +; current name length in the naming screen. +wNamingScreenBufferLength:: ; cfff + ds $1 SECTION "WRAM1", WRAMX +wNamingScreenDestPointer:: ; d000 + ds $2 - ds $d +wNamingScreenQuestionPointer:: ; d002 + ds $2 + +; max length of name buffer. +; it's given for limiting the player's input. +wNamingScreenBufferMaxLength:: ; d004 + ds $1 + +wd005:: ; d005 + ds $1 + +wNamingScreenCursorX:: ; d006 + ds $1 + +; the position to display the input on. +wNamingScreenNamePosition:: ; d007 + ds $2 + +wd009:: ; d009 + ds $4 wd00d:: ; d00d ds $1 @@ -1481,7 +1521,11 @@ wd087:: ; d087 wd088:: ; d088 ds $1 - ds $19 +wd089:: ; d089 + ds $1 + +wd08a:: ; d08a + ds $18 wd0a2:: ; d0a2 ds $2 @@ -1492,7 +1536,11 @@ wd0a4:: ; d0a4 wd0a5:: ; d0a5 ds $1 - ds $3 +wd0a6:: ; d0a6 + ds $1 + +dw0a7:: ; d0a7 + ds $2 wd0a9:: ; d0a9 ds $1 |