diff --git a/asm/sio_tactician.s b/asm/sio_tactician.s deleted file mode 100644 index 55258228..00000000 --- a/asm/sio_tactician.s +++ /dev/null @@ -1,737 +0,0 @@ - .INCLUDE "macro.inc" - - .SYNTAX UNIFIED - - THUMB_FUNC_START sub_8044C54 -sub_8044C54: @ 0x08044C54 - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - adds r6, r1, #0 - ldr r4, _08044CD4 @ gKeyStatusPtr - ldr r0, [r4] - ldrh r1, [r0, #6] - movs r0, #0x40 - ands r0, r1 - cmp r0, #0 - beq _08044C72 - adds r0, r5, #0 - movs r1, #0 - adds r2, r6, #0 - bl sub_80449E8 -_08044C72: - ldr r0, [r4] - ldrh r1, [r0, #6] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08044C88 - adds r0, r5, #0 - movs r1, #1 - adds r2, r6, #0 - bl sub_80449E8 -_08044C88: - ldr r0, [r4] - ldrh r1, [r0, #6] - movs r0, #0x20 - ands r0, r1 - cmp r0, #0 - beq _08044C9E - adds r0, r5, #0 - movs r1, #2 - adds r2, r6, #0 - bl sub_80449E8 -_08044C9E: - ldr r0, [r4] - ldrh r1, [r0, #6] - movs r0, #0x10 - ands r0, r1 - cmp r0, #0 - beq _08044CB4 - adds r0, r5, #0 - movs r1, #3 - adds r2, r6, #0 - bl sub_80449E8 -_08044CB4: - ldr r0, [r4] - ldrh r1, [r0, #8] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _08044DAA - adds r0, r6, #0 - adds r0, #0x3e - ldrb r0, [r0] - cmp r0, #7 - bhi _08044DAA - lsls r0, r0, #2 - ldr r1, _08044CD8 @ _08044CDC - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08044CD4: .4byte gKeyStatusPtr -_08044CD8: .4byte _08044CDC -_08044CDC: @ jump table - .4byte _08044CFC @ case 0 - .4byte _08044D30 @ case 1 - .4byte _08044D4C @ case 2 - .4byte _08044D72 @ case 3 - .4byte _08044D06 @ case 4 - .4byte _08044D10 @ case 5 - .4byte _08044D1A @ case 6 - .4byte _08044D22 @ case 7 -_08044CFC: - adds r0, r5, #0 - adds r1, r6, #0 - bl TacticianTryAppendChar - b _08044DAA -_08044D06: - adds r0, r5, #0 - adds r1, r6, #0 - bl TacticianTryDeleteChar - b _08044DAA -_08044D10: - adds r0, r5, #0 - adds r1, r6, #0 - bl SaveTactician - b _08044DAA -_08044D1A: - adds r0, r5, #0 - adds r1, r6, #0 - movs r2, #1 - b _08044D28 -_08044D22: - adds r0, r5, #0 - adds r1, r6, #0 - movs r2, #2 -_08044D28: - movs r3, #0 - bl sub_8044B78 - b _08044DAA -_08044D30: - adds r4, r5, #0 - adds r4, #0x30 - ldrb r0, [r4] - cmp r0, #0 - beq _08044D6A - movs r0, #2 - bl SioPlaySoundEffect - movs r0, #0 - strb r0, [r4] - adds r1, r5, #0 - adds r1, #0x39 - strb r0, [r1] - b _08044E88 -_08044D4C: - adds r4, r5, #0 - adds r4, #0x30 - ldrb r0, [r4] - cmp r0, #1 - beq _08044D6A - movs r0, #2 - bl SioPlaySoundEffect - movs r1, #0 - movs r0, #1 - strb r0, [r4] - adds r0, r5, #0 - adds r0, #0x39 - strb r1, [r0] - b _08044E88 -_08044D6A: - movs r0, #0 - bl SioPlaySoundEffect - b _08044DAA -_08044D72: - adds r4, r5, #0 - adds r4, #0x30 - ldrb r0, [r4] - subs r0, #2 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #1 - bls _08044DA4 - movs r0, #2 - bl SioPlaySoundEffect - movs r0, #2 - strb r0, [r4] - adds r0, r5, #0 - adds r0, #0x32 - ldrb r0, [r0] - cmp r0, #0 - beq _08044D9A - movs r0, #3 - strb r0, [r4] -_08044D9A: - adds r1, r5, #0 - adds r1, #0x39 - movs r0, #0 - strb r0, [r1] - b _08044E88 -_08044DA4: - movs r0, #0 - bl SioPlaySoundEffect -_08044DAA: - ldr r0, _08044DC4 @ gKeyStatusPtr - ldr r0, [r0] - ldrh r1, [r0, #8] - movs r0, #0x80 - lsls r0, r0, #1 - ands r0, r1 - cmp r0, #0 - beq _08044DF2 - adds r0, r5, #0 - adds r0, #0x39 - ldrb r7, [r0] - adds r4, r0, #0 - b _08044DDA - .align 2, 0 -_08044DC4: .4byte gKeyStatusPtr -_08044DC8: - ldrb r2, [r4] - adds r0, r5, #0 - adds r1, r6, #0 - movs r3, #1 - bl sub_8044B78 - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08044DF2 -_08044DDA: - ldrb r0, [r4] - adds r0, #1 - strb r0, [r4] - ldrb r0, [r4] - movs r1, #3 - bl __umodsi3 - strb r0, [r4] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r7, r0 - bne _08044DC8 -_08044DF2: - ldr r4, _08044E94 @ gKeyStatusPtr - ldr r0, [r4] - ldrh r1, [r0, #8] - movs r0, #0x80 - lsls r0, r0, #2 - ands r0, r1 - cmp r0, #0 - beq _08044E0A - adds r0, r5, #0 - adds r1, r6, #0 - bl TacticianTryDeleteChar -_08044E0A: - ldr r0, [r4] - ldrh r1, [r0, #8] - movs r0, #8 - ands r0, r1 - cmp r0, #0 - beq _08044E20 - movs r0, #3 - bl SioPlaySoundEffect - movs r0, #5 - strh r0, [r5, #0x34] -_08044E20: - ldr r0, [r4] - ldrh r1, [r0, #8] - movs r0, #4 - ands r0, r1 - cmp r0, #0 - beq _08044E9C - movs r0, #2 - bl SioPlaySoundEffect - adds r1, r5, #0 - adds r1, #0x30 - ldrb r0, [r1] - adds r2, r0, #1 - strb r2, [r1] - lsls r0, r2, #0x18 - lsrs r0, r0, #0x18 - adds r3, r1, #0 - cmp r0, #2 - bne _08044E54 - adds r0, r5, #0 - adds r0, #0x32 - ldrb r0, [r0] - cmp r0, #0 - beq _08044E54 - adds r0, r2, #1 - strb r0, [r3] -_08044E54: - adds r2, r3, #0 - ldrb r0, [r2] - movs r1, #3 - ands r0, r1 - strb r0, [r2] - ldr r0, [r5, #0x30] - ldr r1, _08044E98 @ 0x00FF00FF - ands r0, r1 - cmp r0, #3 - bne _08044E6C - movs r0, #0 - strb r0, [r2] -_08044E6C: - ldrb r1, [r3] - lsls r0, r1, #1 - adds r0, r0, r1 - lsls r0, r0, #2 - adds r0, r6, r0 - ldr r0, [r0] - ldrb r0, [r0] - cmp r0, #0 - bne _08044E88 - adds r0, r5, #0 - movs r1, #2 - adds r2, r6, #0 - bl sub_80449E8 -_08044E88: - adds r0, r5, #0 - movs r1, #1 - bl Proc_Goto - b _08044ED0 - .align 2, 0 -_08044E94: .4byte gKeyStatusPtr -_08044E98: .4byte 0x00FF00FF -_08044E9C: - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _08044ED0 - adds r0, r5, #0 - adds r0, #0x38 - ldrb r0, [r0] - cmp r0, #0 - beq _08044EB8 - adds r0, r5, #0 - adds r1, r6, #0 - bl TacticianTryDeleteChar - b _08044ED0 -_08044EB8: - bl CheckInLinkArena - lsls r0, r0, #0x18 - cmp r0, #0 - beq _08044ED0 - movs r0, #1 - bl SioPlaySoundEffect - adds r0, r5, #0 - movs r1, #3 - bl Proc_Goto -_08044ED0: - pop {r4, r5, r6, r7} - pop {r0} - bx r0 - - THUMB_FUNC_END sub_8044C54 - - THUMB_FUNC_START Tactician_Loop -Tactician_Loop: @ 0x08044ED8 - push {r4, r5, r6, r7, lr} - mov r7, r9 - mov r6, r8 - push {r6, r7} - sub sp, #8 - add r7, sp, #8 - adds r4, r0, #0 - mov r8, sp - movs r0, #0x3c - adds r0, r0, r4 - mov r9, r0 - ldrb r0, [r0] - adds r0, #4 - lsrs r0, r0, #2 - lsls r0, r0, #2 - mov r1, sp - subs r1, r1, r0 - mov sp, r1 - add r6, sp, #8 - movs r2, #0x34 - ldrsh r0, [r4, r2] - bl GetTacticianTextConf - adds r5, r0, #0 - ldrh r0, [r4, #0x34] - strh r0, [r4, #0x36] - adds r0, r4, #0 - adds r1, r5, #0 - bl sub_8044C54 - movs r0, #0x36 - ldrsh r1, [r4, r0] - movs r2, #0x34 - ldrsh r0, [r4, r2] - cmp r1, r0 - beq _08044F26 - movs r0, #3 - bl SioPlaySoundEffect -_08044F26: - movs r1, #0x34 - ldrsh r0, [r4, r1] - bl GetTacticianTextConf - adds r5, r0, #0 - adds r0, r4, #0 - adds r0, #0x3d - adds r1, r6, #0 - bl SioStrCpy - mov r2, r9 - ldrb r0, [r2] - subs r0, #1 - adds r0, r6, r0 - movs r1, #0 - strb r1, [r0] - adds r0, r6, #0 - bl StrLen - lsls r1, r0, #3 - subs r3, r1, r0 - ldr r6, [r4, #0x2c] - ldrh r0, [r5, #0x30] - subs r1, r0, #4 - ldrh r0, [r5, #0x32] - adds r2, r0, #1 - adds r0, r5, #0 - adds r0, #0x34 - ldrb r0, [r0] - str r0, [sp] - adds r4, #0x30 - ldrb r0, [r4] - cmp r0, #1 - bls _08044F6C - movs r0, #2 -_08044F6C: - str r0, [sp, #4] - adds r0, r6, #0 - bl sub_804CDD0 - mov sp, r8 - add sp, #8 - pop {r3, r4} - mov r8, r3 - mov r9, r4 - pop {r4, r5, r6, r7} - pop {r0} - bx r0 - - THUMB_FUNC_END Tactician_Loop - - THUMB_FUNC_START sub_8044F84 -sub_8044F84: @ 0x08044F84 - push {lr} - ldr r0, _08044FAC @ 0x04000006 - ldrh r0, [r0] - adds r0, #1 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - cmp r0, #0xa0 - bhi _08044FD0 - cmp r0, #0x27 - bhi _08044FB8 - ldr r1, _08044FB0 @ 0x04000050 - movs r2, #0x84 - lsls r2, r2, #4 - adds r0, r2, #0 - strh r0, [r1] - adds r1, #2 - ldr r2, _08044FB4 @ 0x00000F08 - adds r0, r2, #0 - strh r0, [r1] - b _08044FD0 - .align 2, 0 -_08044FAC: .4byte 0x04000006 -_08044FB0: .4byte 0x04000050 -_08044FB4: .4byte 0x00000F08 -_08044FB8: - ldr r1, _08044FD4 @ 0x04000050 - ldr r2, _08044FD8 @ 0x00000442 - adds r0, r2, #0 - strh r0, [r1] - ldr r2, _08044FDC @ 0x04000052 - ldr r0, _08044FE0 @ gUnknown_03001810 - ldrb r1, [r0] - movs r0, #0xf - subs r0, r0, r1 - lsls r0, r0, #8 - adds r1, r1, r0 - strh r1, [r2] -_08044FD0: - pop {r0} - bx r0 - .align 2, 0 -_08044FD4: .4byte 0x04000050 -_08044FD8: .4byte 0x00000442 -_08044FDC: .4byte 0x04000052 -_08044FE0: .4byte gUnknown_03001810 - - THUMB_FUNC_END sub_8044F84 - - THUMB_FUNC_START sub_8044FE4 -sub_8044FE4: @ 0x08044FE4 - push {lr} - adds r0, #0x3a - movs r1, #0 - strb r1, [r0] - ldr r0, _08044FF8 @ sub_8044F84 - bl SetPrimaryHBlankHandler - pop {r0} - bx r0 - .align 2, 0 -_08044FF8: .4byte sub_8044F84 - - THUMB_FUNC_END sub_8044FE4 - - THUMB_FUNC_START sub_8044FFC -sub_8044FFC: @ 0x08044FFC - push {r4, r5, r6, lr} - sub sp, #4 - adds r6, r0, #0 - ldr r4, _08045038 @ gUnknown_03001810 - adds r5, r6, #0 - adds r5, #0x3a - ldrb r3, [r5] - movs r0, #8 - str r0, [sp] - movs r0, #0 - movs r1, #0xf - movs r2, #0 - bl Interpolate - strb r0, [r4] - ldrb r0, [r5] - adds r0, #1 - strb r0, [r5] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #8 - bls _0804502E - adds r0, r6, #0 - bl Proc_Break -_0804502E: - add sp, #4 - pop {r4, r5, r6} - pop {r0} - bx r0 - .align 2, 0 -_08045038: .4byte gUnknown_03001810 - - THUMB_FUNC_END sub_8044FFC - - THUMB_FUNC_START sub_804503C -sub_804503C: @ 0x0804503C - push {r4, r5, lr} - adds r4, r0, #0 - adds r2, r4, #0 - adds r2, #0x31 - ldrb r0, [r2] - adds r0, #1 - movs r5, #0 - movs r1, #1 - ands r0, r1 - strb r0, [r2] - adds r0, r4, #0 - bl sub_8044614 - movs r0, #2 - bl BG_EnableSyncByMask - adds r4, #0x3a - strb r5, [r4] - pop {r4, r5} - pop {r0} - bx r0 - - THUMB_FUNC_END sub_804503C - - THUMB_FUNC_START sub_8045068 -sub_8045068: @ 0x08045068 - push {r4, r5, r6, lr} - sub sp, #4 - adds r6, r0, #0 - ldr r4, _080450A8 @ gUnknown_03001810 - adds r5, r6, #0 - adds r5, #0x3a - ldrb r3, [r5] - movs r0, #8 - str r0, [sp] - movs r0, #0 - movs r1, #0 - movs r2, #0xf - bl Interpolate - strb r0, [r4] - ldrb r0, [r5] - adds r0, #1 - strb r0, [r5] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #8 - bls _080450A0 - movs r0, #0 - bl SetPrimaryHBlankHandler - adds r0, r6, #0 - bl Proc_Break -_080450A0: - add sp, #4 - pop {r4, r5, r6} - pop {r0} - bx r0 - .align 2, 0 -_080450A8: .4byte gUnknown_03001810 - - THUMB_FUNC_END sub_8045068 - - THUMB_FUNC_START NameSelect_DrawName -NameSelect_DrawName: @ 0x080450AC - push {r4, lr} - adds r0, #0x3b - movs r1, #1 - strb r1, [r0] - bl sub_804D80C - ldr r4, _080450FC @ Texts_0203DAB0 - adds r0, r4, #0 - bl ClearText - ldr r0, _08045100 @ 0x00000141 - bl GetStringFromIndex - adds r1, r0, #0 - adds r0, r4, #0 - bl Text_DrawString - adds r0, r4, #0 - movs r1, #0x26 - bl Text_SetCursor - movs r0, #0xa3 - lsls r0, r0, #1 - bl GetStringFromIndex - adds r1, r0, #0 - adds r0, r4, #0 - bl Text_DrawString - ldr r1, _08045104 @ gBG0TilemapBuffer+0x316 - adds r0, r4, #0 - bl PutText - movs r0, #1 - bl BG_EnableSyncByMask - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080450FC: .4byte Texts_0203DAB0 -_08045100: .4byte 0x00000141 -_08045104: .4byte gBG0TilemapBuffer+0x316 - - THUMB_FUNC_END NameSelect_DrawName - - THUMB_FUNC_START sub_8045108 -sub_8045108: @ 0x08045108 - push {r4, r5, lr} - adds r5, r0, #0 - movs r0, #0x40 - movs r1, #0x58 - bl sub_804D834 - ldr r0, _08045198 @ gKeyStatusPtr - ldr r0, [r0] - ldrh r1, [r0, #8] - movs r0, #0x20 - ands r0, r1 - cmp r0, #0 - beq _08045136 - adds r1, r5, #0 - adds r1, #0x3b - ldrb r0, [r1] - cmp r0, #1 - bne _08045136 - movs r0, #0 - strb r0, [r1] - movs r0, #3 - bl SioPlaySoundEffect -_08045136: - ldr r0, _08045198 @ gKeyStatusPtr - ldr r0, [r0] - ldrh r1, [r0, #8] - movs r0, #0x10 - ands r0, r1 - adds r4, r5, #0 - adds r4, #0x3b - cmp r0, #0 - beq _08045158 - ldrb r0, [r4] - cmp r0, #0 - bne _08045158 - movs r0, #1 - strb r0, [r4] - movs r0, #3 - bl SioPlaySoundEffect -_08045158: - ldrb r1, [r4] - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #3 - adds r0, #0x50 - movs r1, #0x60 - bl DisplayUiHand - ldr r0, _08045198 @ gKeyStatusPtr - ldr r0, [r0] - ldrh r1, [r0, #8] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _080451A0 - movs r0, #1 - bl SioPlaySoundEffect - ldr r0, _0804519C @ gBG0TilemapBuffer+0x316 - movs r1, #0xc - movs r2, #2 - movs r3, #0 - bl TileMap_FillRect - movs r0, #1 - bl BG_EnableSyncByMask - adds r0, r5, #0 - bl Proc_Break - b _080451E6 - .align 2, 0 -_08045198: .4byte gKeyStatusPtr -_0804519C: .4byte gBG0TilemapBuffer+0x316 -_080451A0: - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _080451E6 - ldrb r0, [r4] - cmp r0, #0 - bne _080451C8 - movs r0, #2 - bl SioPlaySoundEffect - ldr r1, _080451C4 @ gUnk_Sio_0203DD24 - movs r0, #1 - strb r0, [r1] - adds r0, r5, #0 - movs r1, #2 - bl Proc_Goto - b _080451CE - .align 2, 0 -_080451C4: .4byte gUnk_Sio_0203DD24 -_080451C8: - movs r0, #1 - bl SioPlaySoundEffect -_080451CE: - ldr r0, _080451EC @ gBG0TilemapBuffer+0x316 - movs r1, #0xc - movs r2, #2 - movs r3, #0 - bl TileMap_FillRect - movs r0, #1 - bl BG_EnableSyncByMask - adds r0, r5, #0 - bl Proc_Break -_080451E6: - pop {r4, r5} - pop {r0} - bx r0 - .align 2, 0 -_080451EC: .4byte gBG0TilemapBuffer+0x316 - - THUMB_FUNC_END sub_8045108 - - THUMB_FUNC_START sub_80451F0 -sub_80451F0: @ 0x080451F0 - push {lr} - bl EndMuralBackground - bl CheckInLinkArena - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08045204 - bl nullsub_13 -_08045204: - pop {r0} - bx r0 - - THUMB_FUNC_END sub_80451F0 - -.align 2, 0 diff --git a/include/sio.h b/include/sio.h index b12a0a83..fee9d31f 100644 --- a/include/sio.h +++ b/include/sio.h @@ -18,11 +18,12 @@ struct ProcTactician { /* 31 */ u8 text_idx; /* 32 */ u8 unk32; /* 33 */ u8 unk33; - /* 34 */ u16 conf_idx; - /* 36 */ STRUCT_PAD(0x36, 0x38); + /* 34 */ s16 conf_idx; + /* 36 */ s16 unk36; /* 38 */ u8 cur_len; /* used tactician name string length */ /* 39 */ u8 unk39; - /* 3A */ u16 unk3A; + /* 3A */ u8 unk3A; + /* 3A */ u8 unk3B; /* 3C */ u8 max_len; /* pre-configured max string length */ /* 3D */ char str[0x4C - 0x3D]; /* 4C */ u16 unk4C[0x10]; @@ -32,8 +33,10 @@ struct TacticianTextConf { /* 00 */ u8 * str[0xC]; /* 30 */ u16 xpos; /* 32 */ u16 unk32; - /* 34 */ STRUCT_PAD(0x34, 0x36); - /* 36 */ s16 unk36[5]; + /* 34 */ u8 unk34; + /* 35 */ STRUCT_PAD(0x35, 0x36); + /* 36 */ s16 unk36[4]; + /* 3E */ u8 unk3E; }; extern const struct TacticianTextConf gTacticianTextConf[]; @@ -387,7 +390,7 @@ void sub_8049788(void); void InitSioBG(void); // ??? sub_804C3A0(???); // ??? sub_804C3A4(???); -// ??? nullsub_13(???); +void nullsub_13(void); // ??? sub_804C3AC(???); // ??? sub_804C3EC(???); // ??? sub_804C47C(???); @@ -411,7 +414,7 @@ void sub_804C508(void); // ??? sub_804CC78(???); // ??? sub_804CCCC(???); ProcPtr NewProc_085AAAC4(ProcPtr parent, int a, int b); -// ??? sub_804CDD0(???); +void sub_804CDD0(void *, int, int, int, int, int); // ??? sub_804CDE8(???); // ??? sub_804CE5C(???); // ??? sub_804CE8C(???); @@ -439,8 +442,8 @@ ProcPtr NewProc_085AAAC4(ProcPtr parent, int a, int b); // ??? sub_804D778(???); // ??? sub_804D7B0(???); // ??? sub_804D7DC(???); -// ??? sub_804D80C(???); -// ??? sub_804D834(???); +void sub_804D80C(void); +void sub_804D834(int, int); // ??? sub_804D858(???); // ??? sub_804D8A4(???); // ??? sub_804D8C8(???); diff --git a/ldscript.txt b/ldscript.txt index 8e2dbcf9..5d420a87 100644 --- a/ldscript.txt +++ b/ldscript.txt @@ -399,7 +399,6 @@ SECTIONS src/sio_main2.o(.text); asm/code_sio_8042DC8.o(.text); src/sio_tactician.o(.text); - asm/sio_tactician.o(.text); asm/code_sio.o(.text); src/uiutils.o(.text); src/uimenu.o(.text); diff --git a/src/sio_tactician.c b/src/sio_tactician.c index 5d630d9a..3fed9d02 100644 --- a/src/sio_tactician.c +++ b/src/sio_tactician.c @@ -8,6 +8,7 @@ #include "bmlib.h" #include "bmsave.h" #include "prepscreen.h" +#include "uiutils.h" #include "constants/characters.h" void sub_8044614(struct ProcTactician * proc) @@ -308,3 +309,361 @@ bool sub_8044B78(struct ProcTactician * proc, const struct TacticianTextConf * c return false; } + +//! FE8U = 0x08044C54 +void sub_8044C54(struct ProcTactician * proc, const struct TacticianTextConf * conf) +{ + char var; + + if ((gKeyStatusPtr->repeatedKeys & DPAD_UP) != 0) + { + sub_80449E8(proc, 0, conf); + } + + if ((gKeyStatusPtr->repeatedKeys & DPAD_DOWN) != 0) + { + sub_80449E8(proc, 1, conf); + } + + if ((gKeyStatusPtr->repeatedKeys & DPAD_LEFT) != 0) + { + sub_80449E8(proc, 2, conf); + } + + if ((gKeyStatusPtr->repeatedKeys & DPAD_RIGHT) != 0) + { + sub_80449E8(proc, 3, conf); + } + + if ((gKeyStatusPtr->newKeys & A_BUTTON) != 0) + { + switch (conf->unk3E) + { + case 0: + TacticianTryAppendChar(proc, conf); + break; + + case 4: + TacticianTryDeleteChar(proc, conf); + break; + + case 5: + SaveTactician(proc, conf); + break; + + case 6: + sub_8044B78(proc, conf, 1, 0); + + break; + + case 7: + sub_8044B78(proc, conf, 2, 0); + + break; + + case 1: + if (proc->line_idx != 0) + { + SioPlaySoundEffect(2); + proc->line_idx = 0; + proc->unk39 = 0; + + Proc_Goto(proc, 1); + return; + } + + SioPlaySoundEffect(0); + break; + + case 2: + if (proc->line_idx != 1) + { + SioPlaySoundEffect(2); + + proc->line_idx = 1; + proc->unk39 = 0; + + Proc_Goto(proc, 1); + return; + } + + SioPlaySoundEffect(0); + break; + + case 3: + if (proc->line_idx < 2 || proc->line_idx > 3) + { + SioPlaySoundEffect(2); + + proc->line_idx = 2; + + if (proc->unk32 != 0) + { + proc->line_idx = 3; + } + + proc->unk39 = 0; + + Proc_Goto(proc, 1); + return; + } + + SioPlaySoundEffect(0); + + break; + } + } + + if ((gKeyStatusPtr->newKeys & R_BUTTON) != 0) + { + var = proc->unk39; + + do + { + proc->unk39++; + proc->unk39 = (proc->unk39 % 3); + + if (var == proc->unk39) + break; + + } while (sub_8044B78(proc, conf, proc->unk39, 1) == 0); + } + + if ((gKeyStatusPtr->newKeys & L_BUTTON) != 0) + { + TacticianTryDeleteChar(proc, conf); + } + + if ((gKeyStatusPtr->newKeys & START_BUTTON) != 0) + { + SioPlaySoundEffect(3); + proc->conf_idx = 5; + } + + if ((gKeyStatusPtr->newKeys & SELECT_BUTTON) != 0) + { + SioPlaySoundEffect(2); + + proc->line_idx++; + + if ((proc->line_idx == 2) && (proc->unk32 != 0)) + { + proc->line_idx++; + } + + proc->line_idx %= 4; + + if (proc->line_idx == 3 && proc->unk32 == 0) + { + proc->line_idx = 0; + } + + if (*conf->str[proc->line_idx * 3] == 0) + { + sub_80449E8(proc, 2, conf); + } + + Proc_Goto(proc, 1); + return; + } + + if ((gKeyStatusPtr->newKeys & B_BUTTON) != 0) + { + if (proc->cur_len != 0) + { + TacticianTryDeleteChar(proc, conf); + return; + } + + if (CheckInLinkArena() != 0) + { + SioPlaySoundEffect(1); + Proc_Goto(proc, 3); + } + } + + return; +} + +//! FE8U = 0x08044ED8 +void Tactician_Loop(struct ProcTactician * proc) +{ + char _cbuf[proc->max_len + 1]; + struct TacticianTextConf * conf = GetTacticianTextConf(proc->conf_idx); + proc->unk36 = proc->conf_idx; + + sub_8044C54(proc, conf); + if (proc->unk36 != proc->conf_idx) + { + SioPlaySoundEffect(3); + } + + conf = GetTacticianTextConf(proc->conf_idx); + SioStrCpy(proc->str, _cbuf); + + _cbuf[proc->max_len - 1] = 0; + + sub_804CDD0(proc->child1, conf->xpos - 4, conf->unk32 + 1, StrLen(_cbuf) * 7, conf->unk34, (proc->line_idx <= 1) ? proc->line_idx : 2); +} + +extern u8 gUnknown_03001810; + +//! FE8U = 0x08044F84 +void sub_8044F84(void) +{ + u16 vcount = REG_VCOUNT + 1; + + if (vcount > DISPLAY_HEIGHT) + { + return; + } + + if (vcount < 40) + { + REG_BLDCNT = 0x840; + REG_BLDALPHA = 0xF08; + } + else + { + REG_BLDCNT = 0x442; + REG_BLDALPHA = ((15 - gUnknown_03001810) << 8) + gUnknown_03001810; + } + + return; +} + +void sub_8044FE4(struct ProcTactician * proc) +{ + proc->unk3A = 0; + SetPrimaryHBlankHandler(sub_8044F84); + return; +} + +//! FE8U = 0x08044FFC +void sub_8044FFC(struct ProcTactician * proc) +{ + gUnknown_03001810 = Interpolate(INTERPOLATE_LINEAR, 15, 0, proc->unk3A, 8); + proc->unk3A++; + + if (proc->unk3A > 8) + { + Proc_Break(proc); + } + + return; +} + +//! FE8U = 0x0804503C +void sub_804503C(struct ProcTactician * proc) +{ + proc->text_idx++; + proc->text_idx &= 1; + + sub_8044614(proc); + BG_EnableSyncByMask(BG1_SYNC_BIT); + + proc->unk3A = 0; + + return; +} + +//! FE8U = 0x08045068 +void sub_8045068(struct ProcTactician * proc) +{ + gUnknown_03001810 = Interpolate(INTERPOLATE_LINEAR, 0, 15, proc->unk3A, 8); + proc->unk3A++; + + if (proc->unk3A > 8) + { + SetPrimaryHBlankHandler(NULL); + Proc_Break(proc); + } + + return; +} + +//! FE8U = 0x080450AC +void NameSelect_DrawName(struct ProcTactician * proc) +{ + proc->unk3B = 1; + + sub_804D80C(); + + ClearText(&Texts_0203DAB0); + + Text_DrawString(&Texts_0203DAB0, GetStringFromIndex(0x141)); // TODO: msgid "Back" + Text_SetCursor(&Texts_0203DAB0, 38); + + Text_DrawString(&Texts_0203DAB0, GetStringFromIndex(0x146)); // TODO: msgid "Entry" + PutText(&Texts_0203DAB0, TILEMAP_LOCATED(gBG0TilemapBuffer, 11, 12)); + + BG_EnableSyncByMask(BG0_SYNC_BIT); + + return; +} + +//! FE8U = 0x08045108 +void sub_8045108(struct ProcTactician * proc) +{ + sub_804D834(0x40, 0x58); + + if (((gKeyStatusPtr->newKeys & DPAD_LEFT) != 0) && (proc->unk3B == 1)) + { + proc->unk3B = 0; + SioPlaySoundEffect(3); + } + + if (((gKeyStatusPtr->newKeys & DPAD_RIGHT) != 0) && (proc->unk3B == 0)) + { + proc->unk3B = 1; + SioPlaySoundEffect(3); + } + + DisplayUiHand(proc->unk3B * 40 + 80, 96); + + if ((gKeyStatusPtr->newKeys & B_BUTTON) != 0) + { + SioPlaySoundEffect(1); + + TileMap_FillRect(TILEMAP_LOCATED(gBG0TilemapBuffer, 11, 12), 12, 2, 0); + BG_EnableSyncByMask(BG0_SYNC_BIT); + + Proc_Break(proc); + + return; + } + + if ((gKeyStatusPtr->newKeys & A_BUTTON) != 0) + { + if (proc->unk3B == 0) + { + SioPlaySoundEffect(2); + gUnk_Sio_0203DD24 = 1; + Proc_Goto(proc, 2); + } + else + { + SioPlaySoundEffect(1); + } + + TileMap_FillRect(TILEMAP_LOCATED(gBG0TilemapBuffer, 11, 12), 12, 2, 0); + BG_EnableSyncByMask(BG0_SYNC_BIT); + + Proc_Break(proc); + } + + return; +} + +//! FE8U = 0x080451F0 +void sub_80451F0(void) +{ + EndMuralBackground(); + + if (!CheckInLinkArena()) + { + nullsub_13(); + } + + return; +}