diff options
author | jidoc01 <jidoc01@naver.com> | 2019-06-30 23:44:12 +0900 |
---|---|---|
committer | jidoc01 <jidoc01@naver.com> | 2019-06-30 23:44:12 +0900 |
commit | a6329757914a3137a5d71b83d522aaeadaf227e6 (patch) | |
tree | b706abbe2d4dfcacbafc3d265154541f37aaa508 | |
parent | fe2ed2123b186d3bb2868fd6be4ad2a877aca314 (diff) |
[Bank 6] Analyze character transition table
-rw-r--r-- | src/engine/bank04.asm | 2 | ||||
-rw-r--r-- | src/engine/bank06.asm | 241 |
2 files changed, 150 insertions, 93 deletions
diff --git a/src/engine/bank04.asm b/src/engine/bank04.asm index 96a3c4b..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 diff --git a/src/engine/bank06.asm b/src/engine/bank06.asm index 987958f..5c61c8d 100644 --- a/src/engine/bank06.asm +++ b/src/engine/bank06.asm @@ -236,7 +236,7 @@ Func_180d5: ; 180d5 (6:40d5) call InitTextPrinting pop af ld hl, Data_006_42bb - ld b, $00 + ld b, 0 sla a ld c, a add hl, bc @@ -309,7 +309,6 @@ Func_180d5: ; 180d5 (6:40d5) ld a, [$ce57] ld [$ce52], a jp .asm_006_40da - .jump_table ; (6:4228) dw Func_006_4248 dw Func_006_4248 @@ -583,7 +582,6 @@ Func_006_44bf: ; 184bf (6:44bf) ld [$ce55], a xor a ld [wcea3], a - .asm_006_44e5 ld a, $01 ld [wVBlankOAMCopyToggle], a @@ -699,7 +697,7 @@ Func_006_4598: ; 18598 (6:4598) ; that is, ; hl += (5 * a). ld c, a - ld b, $00 + ld b, 0 add hl, bc sla a sla a @@ -755,7 +753,6 @@ GlossaryData1: 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 @@ -869,7 +866,7 @@ Func_006_4f9c: ; 18f9c (6:4f9c) or a ret z ld l, a - ld h, $00 + ld h, 0 add hl, hl ld de, $51a4 .asm_006_4fa8 @@ -1102,7 +1099,7 @@ Func_006_50fb: ; 190fb (6:50fb) ld a, [wWhoseTurn] ld l, a .asm_006_5127 - call $30bc + call Func_30bc pop af ld [wDuelDisplayedScreen], a .asm_006_512e @@ -1786,7 +1783,7 @@ NamingScreen_CheckButtonState: push hl push bc push af - call GetCharacterInfoFromCursorPos + call GetCharInfoFromPos_Player inc hl inc hl inc hl @@ -1828,7 +1825,7 @@ NamingScreen_CheckButtonState: push hl push bc push af - call GetCharacterInfoFromCursorPos + call GetCharInfoFromPos_Player inc hl inc hl inc hl @@ -1865,7 +1862,7 @@ NamingScreen_CheckButtonState: ld h, a .asm_006_69ab push hl - call GetCharacterInfoFromCursorPos + call GetCharInfoFromPos_Player inc hl inc hl inc hl @@ -1928,7 +1925,7 @@ Func_006_6a07: ld h, a ld a, [wNamingScreenCursorY] ld l, a - call GetCharacterInfoFromCursorPos + call GetCharInfoFromPos_Player ld a, [hli] ld c, a ld b, [hl] @@ -1988,7 +1985,7 @@ Func_006_6a28: SetVram0xFF: ld hl, v0Tiles0 ld de, .data - ld b, $00 + ld b, 0 .loop ; copy data from de to hl ; for 0x10 bytes. @@ -2003,19 +2000,21 @@ SetVram0xFF: ld [hli], a jr .loop .data -rept $6a87-$6a77 +rept $10 db $ff endr -; set the carry bit on if "End" was selected. +; set the carry bit on, +; if "End" was selected. NamingScreen_ProcessInput: ld a, [wNamingScreenCursorX] ld h, a ld a, [wNamingScreenCursorY] ld l, a - call GetCharacterInfoFromCursorPos + call GetCharInfoFromPos_Player inc hl inc hl + ; load types into de. ld e, [hl] inc hl ld a, [hli] @@ -2061,7 +2060,7 @@ NamingScreen_ProcessInput: ld a, [wd009] cp $02 jr z, .read_char - ld bc, $0359 + ld bc, $0359 ; “ ld a, d cp b jr nz, .asm_006_6af4 @@ -2069,13 +2068,13 @@ NamingScreen_ProcessInput: cp c jr nz, .asm_006_6af4 push hl - ld hl, KeyboardData + ($6cf9 - $6baf) - call Func_006_6b61 + ld hl, TransitionTable1 ; from 55th. + call TransformCharacter pop hl - jr c, .asm_006_6b5d + jr c, .nothing jr .asm_006_6b09 .asm_006_6af4 - ld bc, $035b + ld bc, $035b ; º ld a, d cp b jr nz, .asm_006_6b1d @@ -2083,10 +2082,10 @@ NamingScreen_ProcessInput: cp c jr nz, .asm_006_6b1d push hl - ld hl, KeyboardData + ($6d5f - $6baf) - call Func_006_6b61 + ld hl, TransitionTable2 ; from 72th. + call TransformCharacter pop hl - jr c, .asm_006_6b5d + jr c, .nothing .asm_006_6b09 ld a, [wNamingScreenBufferLength] dec a @@ -2094,7 +2093,7 @@ NamingScreen_ProcessInput: ld [wNamingScreenBufferLength], a ld hl, wNamingScreenBuffer push de - ld d, $00 + ld d, 0 ld e, a add hl, de pop de @@ -2107,10 +2106,10 @@ NamingScreen_ProcessInput: ld a, [wd009] or a jr nz, .asm_006_6b2b - ld a, $0e + ld a, TX_HIRAGANA jr .asm_006_6b37 .asm_006_6b2b - ld a, $0f + ld a, TX_KATAKANA jr .asm_006_6b37 ; read character code from info. to register. ; hl: pointer. @@ -2150,62 +2149,71 @@ NamingScreen_ProcessInput: ; de: 2 bytes character codes. ; hl: dest. .asm_006_6b51 - ld b, $00 + ld b, 0 add hl, bc ld [hl], d inc hl ld [hl], e inc hl - ld [hl], $00 ; null terminator. + ld [hl], TX_END ; null terminator. call PrintPlayerNameFromInput -.asm_006_6b5d +.nothing or a ret .on_end scf ret -Func_006_6b61: +; 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, .asm_006_6b91 + jr z, .return ; if the length is zero, just return. dec a dec a push hl ld hl, wNamingScreenBuffer - ld d, $00 + ld d, 0 ld e, a add hl, de ld e, [hl] inc hl ld d, [hl] - ld a, $0f + ; de: last character in the buffer, + ; but byte-wise swapped. + ld a, TX_KATAKANA cp e - jr nz, .asm_006_6b7a + jr nz, .hiragana + ; if it's katakana, + ; make it hiragana by decreasing its high byte. dec e -.asm_006_6b7a +.hiragana pop hl -.asm_006_6b7b +.loop ld a, [hli] or a - jr z, .asm_006_6b91 + jr z, .return cp d - jr nz, .asm_006_6b8c + jr nz, .next ld a, [hl] cp e - jr nz, .asm_006_6b8c + jr nz, .next inc hl ld e, [hl] inc hl ld d, [hl] or a ret -.asm_006_6b8c +.next inc hl inc hl inc hl - jr .asm_006_6b7b -.asm_006_6b91 + jr .loop +.return scf ret @@ -2213,7 +2221,7 @@ Func_006_6b61: ; it returns the pointer to the proper information. ; h: position x. ; l: position y. -GetCharacterInfoFromCursorPos: +GetCharInfoFromPos_Player: push de ; (information index) = (x) * (height) + (y) ; (height) = 0x05(Deck) or 0x06(Player) @@ -2224,7 +2232,7 @@ GetCharacterInfoFromCursorPos: call HtimesL ld a, l add e - ld hl, KeyboardData + ld hl, KeyboardData_Player pop de or a ret z @@ -2243,13 +2251,12 @@ GetCharacterInfoFromCursorPos: ; unit: 6 bytes. ; structure: ; abs. y pos. (1) / abs. x pos. (1) / type 1 (1) / type 2 (1) / char. code (2) -; - some of one byte characters may have 0x0e in their high byte. ; - unused data contains its character code as zero. kbitem: MACRO db \1, \2, \3, \4 dw \5 ENDM -KeyboardData: ; (6:6baf) +KeyboardData_Player: ; (6:6baf) kbitem $04, $02, $11, $00, $0330 kbitem $06, $02, $12, $00, $0339 kbitem $08, $02, $13, $00, $0342 @@ -2305,30 +2312,51 @@ KeyboardData: ; (6:6baf) kbitem $0c, $12, $3b, $00, $0070 kbitem $10, $0f, $01, $09, $0000 kbitem $00, $00, $00, $00, $0000 - kbitem $16, $0e, $3e, $00, $0e17 - kbitem $3f, $00, $18, $0e, $0040 - kbitem $19, $0e, $41, $00, $0e1a - kbitem $42, $00, $1b, $0e, $0043 - kbitem $1c, $0e, $44, $00, $0e1d - kbitem $45, $00, $1e, $0e, $0046 - kbitem $1f, $0e, $47, $00, $0e20 - kbitem $48, $00, $21, $0e, $0049 - kbitem $22, $0e, $4a, $00, $0e23 - kbitem $4b, $00, $24, $0e, $004c - kbitem $2a, $0e, $4d, $00, $0e2b - kbitem $4e, $00, $2c, $0e, $004f - kbitem $2d, $0e, $50, $00, $0e2e - kbitem $51, $00, $52, $0e, $004d - kbitem $53, $0e, $4e, $00, $0e54 - kbitem $4f, $00, $55, $0e, $0050 - kbitem $56, $0e, $51, $00, $0000 - kbitem $2a, $0e, $52, $00, $0e2b - kbitem $53, $00, $2c, $0e, $0054 - kbitem $2d, $0e, $55, $00, $0e2e - kbitem $56, $00, $4d, $0e, $0052 - kbitem $4e, $0e, $53, $00, $0e4f - kbitem $54, $00, $50, $0e, $0055 - kbitem $51, $0e, $56, $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. @@ -2352,18 +2380,23 @@ InputDeckName: ; 1ad89 (6:6d89) 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 @@ -2376,51 +2409,65 @@ InputDeckName: ; 1ad89 (6:6d89) 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, .asm_006_6e1b + jr nz, .return + dec hl ld [hl], TX_END -.asm_006_6e1b +.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 @@ -2428,7 +2475,7 @@ InputDeckName: ; 1ad89 (6:6d89) FillVramWith0xF0: ld hl, v0Tiles0 ld de, .data - ld b, $00 + ld b, 0 .asm_006_6e3f ld a, $10 cp b @@ -2443,6 +2490,7 @@ rept $10 db $f0 endr +; it's only for naming the deck. ProcessTextWithUnderbar: ld hl, wNamingScreenNamePosition ld d, [hl] @@ -2451,31 +2499,32 @@ ProcessTextWithUnderbar: call InitTextPrinting ld hl, .underbar_data ld de, wDefaultText -.asm_006_6e68 +.loop ; copy the underbar string. ld a, [hli] ld [de], a inc de or a - jr nz, .asm_006_6e68 + jr nz, .loop + ld hl, wNamingScreenBuffer ld de, wDefaultText -.asm_006_6e74 +.loop2 ; copy the input from the user. ld a, [hli] or a - jr z, .asm_006_6e7c + jr z, .print_name ld [de], a inc de - jr .asm_006_6e74 -.asm_006_6e7c + jr .loop2 +.print_name ld hl, wDefaultText call ProcessText ret .underbar_data - db $06 -rept $14 + db TX_HALFWIDTH +rept MAX_DECK_NAME_LENGTH db "_" endr - db $00 + db TX_END Func_006_6e99: call DrawTextboxForKeyboard @@ -2507,7 +2556,7 @@ Func_006_6ec3: ld h, a ld a, [wNamingScreenCursorY] ld l, a - call Func_006_7000 + call GetCharInfoFromPos_Deck inc hl inc hl ld a, [hl] @@ -2532,11 +2581,11 @@ Func_006_6ec3: inc [hl] ld hl, wNamingScreenBuffer .asm_006_6eef - ld b, $00 + ld b, 0 add hl, bc ld [hl], d inc hl - ld [hl], $00 + ld [hl], TX_END call ProcessTextWithUnderbar or a ret @@ -2599,7 +2648,7 @@ Func_006_6efb: ld h, a .asm_006_6f4f push hl - call Func_006_7000 + call GetCharInfoFromPos_Deck inc hl inc hl ld d, [hl] @@ -2655,7 +2704,7 @@ Func_006_6fa1: ld h, a ld a, [wNamingScreenCursorY] ld l, a - call Func_006_7000 + call GetCharInfoFromPos_Deck ld a, [hli] ld c, a ld b, [hl] @@ -2714,7 +2763,14 @@ Func_006_6fc2: pop af ret -Func_006_7000: +; 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 @@ -2723,20 +2779,21 @@ Func_006_7000: call HtimesL ld a, l add e - ld hl, Unknown_006_7019 + ; x * h + y + ld hl, KeyboardData_Deck pop de or a ret z -.asm_006_7012 +.loop inc hl inc hl inc hl dec a - jr nz, .asm_006_7012 + jr nz, .loop ret ; a bunch of data -Unknown_006_7019: ; (6:7019) +KeyboardData_Deck: ; (6:7019) INCROM $1b019, $1b8e8 INCROM $1b8e8, $1ba12 |