mirror of
https://github.com/zeldaret/tmc
synced 2026-08-22 06:44:55 -04:00
decomp more textbox stuff
This commit is contained in:
-1262
File diff suppressed because it is too large
Load Diff
+2
-2
@@ -1241,7 +1241,7 @@ sub_0807F970: @ 0x0807F970
|
||||
push {lr}
|
||||
adds r2, r1, #0
|
||||
movs r3, #0
|
||||
ldr r1, _0807F988 @ =gUnk_02022780
|
||||
ldr r1, _0807F988 @ =gCurrentTextBox
|
||||
ldr r0, [r2, #4]
|
||||
ldrh r1, [r1, #0x28]
|
||||
cmp r0, r1
|
||||
@@ -1251,7 +1251,7 @@ _0807F982:
|
||||
str r3, [r2, #0x14]
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0807F988: .4byte gUnk_02022780
|
||||
_0807F988: .4byte gCurrentTextBox
|
||||
|
||||
thumb_func_start sub_0807F98C
|
||||
sub_0807F98C: @ 0x0807F98C
|
||||
|
||||
+2
-2
@@ -618,7 +618,7 @@ sub_08059368: @ 0x08059368
|
||||
adds r2, r0, #0
|
||||
movs r0, #1
|
||||
strb r0, [r2, #0xc]
|
||||
ldr r1, _08059388 @ =gUnk_02022780
|
||||
ldr r1, _08059388 @ =gCurrentTextBox
|
||||
ldrh r0, [r2, #0x3c]
|
||||
ldrh r1, [r1, #0x28]
|
||||
cmp r0, r1
|
||||
@@ -629,7 +629,7 @@ sub_08059368: @ 0x08059368
|
||||
_08059384:
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_08059388: .4byte gUnk_02022780
|
||||
_08059388: .4byte gCurrentTextBox
|
||||
|
||||
thumb_func_start sub_0805938C
|
||||
sub_0805938C: @ 0x0805938C
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
|
||||
.section .text
|
||||
|
||||
.syntax unified
|
||||
|
||||
push {r4, r5, r6, lr}
|
||||
ldr r5, _08056CB8 @ =gCurrentWindow
|
||||
ldrb r0, [r5, #1]
|
||||
cmp r0, #0
|
||||
beq _08056CB4
|
||||
movs r0, #0
|
||||
strb r0, [r5, #1]
|
||||
ldrb r0, [r5, #5]
|
||||
lsls r0, r0, #5
|
||||
ldrb r1, [r5, #4]
|
||||
adds r0, r0, r1
|
||||
lsls r0, r0, #1
|
||||
ldr r1, _08056CBC @ =gBG0Buffer
|
||||
adds r1, r0, r1
|
||||
ldrb r0, [r5, #7]
|
||||
adds r0, #2
|
||||
movs r6, #0
|
||||
_08056C8A:
|
||||
movs r2, #0
|
||||
adds r4, r1, #0
|
||||
adds r4, #0x40
|
||||
subs r3, r0, #1
|
||||
_08056C92:
|
||||
strh r6, [r1]
|
||||
adds r1, #2
|
||||
adds r2, #1
|
||||
ldrb r0, [r5, #6]
|
||||
adds r0, #2
|
||||
cmp r2, r0
|
||||
blt _08056C92
|
||||
adds r1, r4, #0
|
||||
adds r0, r3, #0
|
||||
cmp r0, #0
|
||||
bgt _08056C8A
|
||||
ldrb r0, [r5, #5]
|
||||
ldrb r1, [r5, #7]
|
||||
bl sub_0801C4A0
|
||||
bl sub_0801C494
|
||||
_08056CB4:
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_08056CB8: .4byte gCurrentWindow
|
||||
_08056CBC: .4byte gBG0Buffer
|
||||
|
||||
.syntax divided
|
||||
@@ -0,0 +1,135 @@
|
||||
|
||||
.syntax unified
|
||||
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, sb
|
||||
mov r6, r8
|
||||
push {r6, r7}
|
||||
adds r7, r0, #0
|
||||
adds r4, r1, #0
|
||||
adds r6, r2, #0
|
||||
mov r8, r3
|
||||
adds r3, r7, #0
|
||||
lsls r0, r6, #6
|
||||
adds r0, #0x40
|
||||
adds r2, r3, r0
|
||||
mov r0, r8
|
||||
strh r0, [r3]
|
||||
adds r3, #2
|
||||
movs r1, #0x80
|
||||
lsls r1, r1, #4
|
||||
mov sb, r1
|
||||
mov r0, r8
|
||||
mov r5, sb
|
||||
orrs r0, r5
|
||||
strh r0, [r2]
|
||||
adds r2, #2
|
||||
cmp r4, #0
|
||||
ble _08056E4C
|
||||
mov r0, r8
|
||||
adds r0, #1
|
||||
strh r0, [r3]
|
||||
adds r3, #2
|
||||
adds r1, r0, #0
|
||||
orrs r1, r5
|
||||
strh r1, [r2]
|
||||
adds r2, #2
|
||||
subs r4, #2
|
||||
adds r1, r4, #0
|
||||
subs r4, #1
|
||||
mov ip, r0
|
||||
cmp r1, #0
|
||||
ble _08056E30
|
||||
mov r5, r8
|
||||
adds r5, #2
|
||||
adds r1, r5, #0
|
||||
mov r0, sb
|
||||
orrs r1, r0
|
||||
_08056E20:
|
||||
strh r5, [r3]
|
||||
adds r3, #2
|
||||
strh r1, [r2]
|
||||
adds r2, #2
|
||||
adds r0, r4, #0
|
||||
subs r4, #1
|
||||
cmp r0, #0
|
||||
bgt _08056E20
|
||||
_08056E30:
|
||||
movs r1, #0x80
|
||||
lsls r1, r1, #3
|
||||
adds r0, r1, #0
|
||||
mov r1, ip
|
||||
orrs r1, r0
|
||||
strh r1, [r3]
|
||||
adds r3, #2
|
||||
movs r5, #0xc0
|
||||
lsls r5, r5, #4
|
||||
adds r0, r5, #0
|
||||
mov r1, ip
|
||||
orrs r1, r0
|
||||
strh r1, [r2]
|
||||
adds r2, #2
|
||||
_08056E4C:
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #3
|
||||
adds r5, r0, #0
|
||||
mov r0, r8
|
||||
orrs r0, r5
|
||||
strh r0, [r3]
|
||||
movs r0, #0xc0
|
||||
lsls r0, r0, #4
|
||||
adds r1, r0, #0
|
||||
mov r0, r8
|
||||
orrs r0, r1
|
||||
strh r0, [r2]
|
||||
adds r7, #0x40
|
||||
adds r3, #0x40
|
||||
cmp r6, #0
|
||||
ble _08056EB6
|
||||
mov r0, r8
|
||||
adds r0, #3
|
||||
strh r0, [r7]
|
||||
adds r1, r0, #0
|
||||
orrs r1, r5
|
||||
strh r1, [r3]
|
||||
adds r7, #0x40
|
||||
adds r3, #0x40
|
||||
subs r6, #2
|
||||
adds r1, r6, #0
|
||||
subs r6, #1
|
||||
adds r2, r0, #0
|
||||
cmp r1, #0
|
||||
ble _08056EA0
|
||||
mov r4, r8
|
||||
adds r4, #4
|
||||
adds r1, r4, #0
|
||||
orrs r1, r5
|
||||
_08056E90:
|
||||
strh r4, [r7]
|
||||
strh r1, [r3]
|
||||
adds r7, #0x40
|
||||
adds r3, #0x40
|
||||
adds r0, r6, #0
|
||||
subs r6, #1
|
||||
cmp r0, #0
|
||||
bgt _08056E90
|
||||
_08056EA0:
|
||||
movs r1, #0x80
|
||||
lsls r1, r1, #4
|
||||
adds r0, r1, #0
|
||||
adds r1, r2, #0
|
||||
orrs r1, r0
|
||||
strh r1, [r7]
|
||||
movs r5, #0xc0
|
||||
lsls r5, r5, #4
|
||||
adds r0, r5, #0
|
||||
orrs r2, r0
|
||||
strh r2, [r3]
|
||||
_08056EB6:
|
||||
pop {r3, r4}
|
||||
mov r8, r3
|
||||
mov sb, r4
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
|
||||
.syntax divided
|
||||
@@ -0,0 +1,52 @@
|
||||
|
||||
.syntax unified
|
||||
|
||||
push {r4, r5, r6, r7, lr}
|
||||
ldr r6, _08056F10 @ =gNewWindow
|
||||
ldrb r0, [r6, #6]
|
||||
cmp r0, #0
|
||||
beq _08056F0E
|
||||
ldrb r0, [r6, #7]
|
||||
cmp r0, #0
|
||||
beq _08056F0E
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r6, #5]
|
||||
lsls r0, r0, #5
|
||||
ldrb r1, [r6, #4]
|
||||
adds r0, r0, r1
|
||||
lsls r0, r0, #1
|
||||
ldr r1, _08056F14 @ =gUnk_02034CB2
|
||||
adds r5, r0, r1
|
||||
movs r0, #4
|
||||
subs r0, r0, r4
|
||||
lsrs r1, r0, #0x1f
|
||||
adds r0, r0, r1
|
||||
asrs r1, r0, #1
|
||||
ldr r7, _08056F18 @ =gUnk_0202281E
|
||||
_08056EEC:
|
||||
ldrb r3, [r6, #6]
|
||||
lsls r0, r1, #1
|
||||
adds r0, r0, r7
|
||||
ldrh r2, [r0]
|
||||
adds r5, #0x40
|
||||
adds r0, r1, #1
|
||||
subs r4, #1
|
||||
adds r1, r5, #0
|
||||
_08056EFC:
|
||||
strh r2, [r1]
|
||||
adds r1, #2
|
||||
adds r2, #2
|
||||
subs r3, #1
|
||||
cmp r3, #0
|
||||
bgt _08056EFC
|
||||
adds r1, r0, #0
|
||||
cmp r4, #0
|
||||
bne _08056EEC
|
||||
_08056F0E:
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_08056F10: .4byte gNewWindow
|
||||
_08056F14: .4byte gUnk_02034CB2
|
||||
_08056F18: .4byte gUnk_0202281E
|
||||
|
||||
.syntax divided
|
||||
@@ -1,12 +1,12 @@
|
||||
.syntax unified
|
||||
push {r4, lr}
|
||||
ldr r0, _08056598 @ =gUnk_02036A40
|
||||
ldr r0, _08056598 @ =gNewWindow
|
||||
movs r1, #8
|
||||
bl MemClear
|
||||
ldr r0, _0805659C @ =gUnk_02024030
|
||||
movs r1, #0x18
|
||||
bl MemClear
|
||||
ldr r4, _080565A0 @ =gUnk_02022780
|
||||
ldr r4, _080565A0 @ =gCurrentTextBox
|
||||
adds r0, r4, #0
|
||||
movs r1, #0xa8
|
||||
bl MemClear
|
||||
@@ -61,7 +61,7 @@ _08056560:
|
||||
strb r0, [r3, #1]
|
||||
movs r0, #0
|
||||
strb r0, [r3, #2]
|
||||
ldr r4, _080565A0 @ =gUnk_02022780
|
||||
ldr r4, _080565A0 @ =gCurrentTextBox
|
||||
adds r0, r4, #0
|
||||
bl sub_08056FBC
|
||||
ldr r0, _080565AC @ =gUnk_08107BE0
|
||||
@@ -80,9 +80,9 @@ _08056560:
|
||||
movs r0, #1
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_08056598: .4byte gUnk_02036A40
|
||||
_08056598: .4byte gNewWindow
|
||||
_0805659C: .4byte gUnk_02024030
|
||||
_080565A0: .4byte gUnk_02022780
|
||||
_080565A0: .4byte gCurrentTextBox
|
||||
_080565A4: .4byte gTextBox
|
||||
_080565A8: .4byte gSave
|
||||
_080565AC: .4byte gUnk_08107BE0
|
||||
|
||||
@@ -0,0 +1,319 @@
|
||||
|
||||
.section .text
|
||||
|
||||
.syntax unified
|
||||
|
||||
push {r4, r5, r6, r7, lr}
|
||||
adds r5, r0, #0
|
||||
ldrh r7, [r5, #0x24]
|
||||
cmp r7, #0
|
||||
beq _0805675C
|
||||
b _0805694C
|
||||
_0805675C:
|
||||
adds r4, r5, #0
|
||||
adds r4, #0x20
|
||||
adds r0, r4, #0
|
||||
bl sub_0805EFE8
|
||||
adds r7, r0, #0
|
||||
cmp r7, #0xe
|
||||
bls _0805676E
|
||||
b _08056942
|
||||
_0805676E:
|
||||
lsls r0, r7, #2
|
||||
ldr r1, _08056778 @ =_0805677C
|
||||
adds r0, r0, r1
|
||||
ldr r0, [r0]
|
||||
mov pc, r0
|
||||
.align 2, 0
|
||||
_08056778: .4byte _0805677C
|
||||
_0805677C: @ jump table
|
||||
.4byte _080567B8 @ case 0
|
||||
.4byte _080567DE @ case 1
|
||||
.4byte _08056802 @ case 2
|
||||
.4byte _0805680A @ case 3
|
||||
.4byte _08056812 @ case 4
|
||||
.4byte _08056838 @ case 5
|
||||
.4byte _08056844 @ case 6
|
||||
.4byte _08056858 @ case 7
|
||||
.4byte _0805688C @ case 8
|
||||
.4byte _08056894 @ case 9
|
||||
.4byte _080568AC @ case 10
|
||||
.4byte _08056942 @ case 11
|
||||
.4byte _080568B2 @ case 12
|
||||
.4byte _08056914 @ case 13
|
||||
.4byte _0805693A @ case 14
|
||||
_080567B8:
|
||||
ldr r0, _080567D4 @ =gUnk_02000040
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #1
|
||||
bne _080567D8
|
||||
adds r1, r5, #0
|
||||
adds r1, #0x89
|
||||
movs r0, #5
|
||||
strb r0, [r1]
|
||||
movs r0, #0
|
||||
movs r1, #0
|
||||
bl sub_08056ABC
|
||||
b _08056942
|
||||
.align 2, 0
|
||||
_080567D4: .4byte gUnk_02000040
|
||||
_080567D8:
|
||||
adds r1, r5, #0
|
||||
adds r1, #0x89
|
||||
b _0805692C
|
||||
_080567DE:
|
||||
adds r1, r5, #0
|
||||
adds r1, #0x8a
|
||||
movs r0, #2
|
||||
strb r0, [r1]
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x98
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0
|
||||
bne _080567F8
|
||||
movs r0, #1
|
||||
bl sub_08056BDC
|
||||
b _08056942
|
||||
_080567F8:
|
||||
adds r1, r5, #0
|
||||
adds r1, #0x89
|
||||
movs r0, #3
|
||||
strb r0, [r1]
|
||||
b _08056942
|
||||
_08056802:
|
||||
movs r0, #3
|
||||
bl sub_080564C8
|
||||
b _08056942
|
||||
_0805680A:
|
||||
movs r0, #4
|
||||
bl sub_080564C8
|
||||
b _08056942
|
||||
_08056812:
|
||||
adds r0, r4, #0
|
||||
movs r1, #0
|
||||
bl sub_GetFontStrWidth
|
||||
adds r3, r0, #0
|
||||
adds r4, r5, #0
|
||||
adds r4, #0x56
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x54
|
||||
ldrh r0, [r0]
|
||||
ldrh r2, [r4]
|
||||
subs r0, r0, r2
|
||||
subs r0, r0, r3
|
||||
lsrs r1, r0, #0x1f
|
||||
adds r0, r0, r1
|
||||
asrs r0, r0, #1
|
||||
adds r2, r2, r0
|
||||
strh r2, [r4]
|
||||
b _08056942
|
||||
_08056838:
|
||||
ldr r1, _08056840 @ =gTextBox
|
||||
ldrh r0, [r5, #0x22]
|
||||
strb r0, [r1, #1]
|
||||
b _08056942
|
||||
.align 2, 0
|
||||
_08056840: .4byte gTextBox
|
||||
_08056844:
|
||||
ldr r0, _08056854 @ =gUnk_0200005C
|
||||
ldrh r1, [r5, #0x22]
|
||||
movs r2, #0x1f
|
||||
ands r1, r2
|
||||
bl WriteBit
|
||||
b _08056942
|
||||
.align 2, 0
|
||||
_08056854: .4byte gUnk_0200005C
|
||||
_08056858:
|
||||
ldrh r3, [r5, #0x22]
|
||||
cmp r3, #0xe
|
||||
beq _08056864
|
||||
cmp r3, #0xf
|
||||
beq _08056874
|
||||
b _0805687A
|
||||
_08056864:
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x8f
|
||||
ldrb r0, [r0]
|
||||
adds r1, r5, #0
|
||||
adds r1, #0x91
|
||||
strb r0, [r1]
|
||||
movs r3, #2
|
||||
b _0805687A
|
||||
_08056874:
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x91
|
||||
ldrb r3, [r0]
|
||||
_0805687A:
|
||||
adds r1, r5, #0
|
||||
adds r1, #0x90
|
||||
movs r0, #0
|
||||
strb r0, [r1]
|
||||
adds r0, r5, #0
|
||||
adds r1, r3, #0
|
||||
bl sub_080569C4
|
||||
b _08056942
|
||||
_0805688C:
|
||||
ldrh r0, [r5, #0x22]
|
||||
bl SoundReq
|
||||
b _08056942
|
||||
_08056894:
|
||||
ldr r1, _080568A8 @ =gCurrentTextBox
|
||||
ldrh r0, [r5, #0x22]
|
||||
strb r0, [r1, #3]
|
||||
ldrh r0, [r5, #0x22]
|
||||
adds r1, r5, #0
|
||||
adds r1, #0x53
|
||||
ldrb r1, [r1]
|
||||
bl sub_08056F88
|
||||
b _08056942
|
||||
.align 2, 0
|
||||
_080568A8: .4byte gCurrentTextBox
|
||||
_080568AC:
|
||||
ldrh r0, [r5, #0x22]
|
||||
strb r0, [r5, #7]
|
||||
b _08056942
|
||||
_080568B2:
|
||||
ldr r6, _0805690C @ =gUnk_02000040
|
||||
ldrb r0, [r6]
|
||||
cmp r0, #1
|
||||
beq _080568D2
|
||||
adds r0, r6, #0
|
||||
movs r1, #4
|
||||
bl MemClear
|
||||
ldr r4, _08056910 @ =gUnk_02024030
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x18
|
||||
bl MemClear
|
||||
movs r0, #1
|
||||
strb r0, [r4]
|
||||
strb r0, [r6]
|
||||
_080568D2:
|
||||
ldr r2, _08056910 @ =gUnk_02024030
|
||||
movs r0, #2
|
||||
ldrsb r0, [r2, r0]
|
||||
cmp r0, #3
|
||||
bgt _08056942
|
||||
lsls r0, r0, #1
|
||||
adds r1, r2, #0
|
||||
adds r1, #0x10
|
||||
adds r0, r0, r1
|
||||
ldrh r1, [r5, #0x26]
|
||||
strh r1, [r0]
|
||||
movs r0, #2
|
||||
ldrsb r0, [r2, r0]
|
||||
lsls r0, r0, #1
|
||||
adds r1, r2, #0
|
||||
adds r1, #8
|
||||
adds r0, r0, r1
|
||||
adds r3, r5, #0
|
||||
adds r3, #0x56
|
||||
ldrh r1, [r3]
|
||||
strh r1, [r0]
|
||||
ldrb r0, [r2, #2]
|
||||
adds r0, #1
|
||||
strb r0, [r2, #2]
|
||||
ldrh r0, [r3]
|
||||
adds r0, #8
|
||||
strh r0, [r3]
|
||||
b _08056942
|
||||
.align 2, 0
|
||||
_0805690C: .4byte gUnk_02000040
|
||||
_08056910: .4byte gUnk_02024030
|
||||
_08056914:
|
||||
ldrh r3, [r5, #0x22]
|
||||
cmp r3, #0xfe
|
||||
beq _08056928
|
||||
cmp r3, #0xff
|
||||
bne _08056932
|
||||
adds r1, r5, #0
|
||||
adds r1, #0x8e
|
||||
movs r0, #1
|
||||
strb r0, [r1]
|
||||
b _08056942
|
||||
_08056928:
|
||||
adds r1, r5, #0
|
||||
adds r1, #0x8e
|
||||
_0805692C:
|
||||
movs r0, #2
|
||||
strb r0, [r1]
|
||||
b _08056942
|
||||
_08056932:
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x95
|
||||
strb r3, [r0]
|
||||
b _08056942
|
||||
_0805693A:
|
||||
ldrh r1, [r5, #0x22]
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x94
|
||||
strb r1, [r0]
|
||||
_08056942:
|
||||
lsrs r0, r7, #8
|
||||
cmp r0, #0
|
||||
bne _0805694C
|
||||
movs r0, #0
|
||||
b _080569C2
|
||||
_0805694C:
|
||||
ldr r0, _08056960 @ =gCurrentTextBox
|
||||
adds r0, #0x99
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #2
|
||||
beq _08056964
|
||||
movs r0, #3
|
||||
bl sub_080564C8
|
||||
movs r0, #0
|
||||
b _080569C2
|
||||
.align 2, 0
|
||||
_08056960: .4byte gCurrentTextBox
|
||||
_08056964:
|
||||
ldr r1, _08056994 @ =gTextBox
|
||||
ldrb r0, [r1, #1]
|
||||
cmp r0, #0
|
||||
bne _08056970
|
||||
movs r0, #0x80
|
||||
strb r0, [r1, #1]
|
||||
_08056970:
|
||||
movs r0, #0
|
||||
strh r0, [r5, #0x24]
|
||||
lsrs r0, r7, #8
|
||||
cmp r0, #7
|
||||
bne _08056998
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x8f
|
||||
ldrb r0, [r0]
|
||||
movs r1, #0x80
|
||||
adds r2, r5, #0
|
||||
adds r2, #0x90
|
||||
orrs r1, r0
|
||||
strb r1, [r2]
|
||||
adds r0, r5, #0
|
||||
movs r1, #0
|
||||
bl sub_080569C4
|
||||
b _080569B4
|
||||
.align 2, 0
|
||||
_08056994: .4byte gTextBox
|
||||
_08056998:
|
||||
adds r2, r5, #0
|
||||
adds r2, #0x90
|
||||
ldrb r1, [r2]
|
||||
movs r0, #0x80
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _080569B4
|
||||
ldrb r3, [r2]
|
||||
movs r0, #0
|
||||
strb r0, [r2]
|
||||
adds r0, r5, #0
|
||||
adds r1, r3, #0
|
||||
bl sub_080569C4
|
||||
_080569B4:
|
||||
adds r1, r5, #0
|
||||
adds r1, #0x50
|
||||
adds r0, r7, #0
|
||||
bl sub_0805F7DC
|
||||
lsls r0, r0, #0x10
|
||||
lsrs r0, r0, #0x10
|
||||
_080569C2:
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
|
||||
.syntax divided
|
||||
@@ -0,0 +1,50 @@
|
||||
|
||||
.syntax unified
|
||||
|
||||
push {r4, r5, r6, r7, lr}
|
||||
sub sp, #8
|
||||
adds r2, r0, #0
|
||||
adds r5, r1, #0
|
||||
bl sub_0801D51C
|
||||
adds r2, r0, #0
|
||||
ldr r0, _08057040 @ =0x0FFFFFFF
|
||||
ands r2, r0
|
||||
movs r4, #0
|
||||
movs r3, #0xf
|
||||
_08057002:
|
||||
mov r0, sp
|
||||
adds r1, r0, r4
|
||||
adds r0, r2, #0
|
||||
ands r0, r3
|
||||
strb r0, [r1]
|
||||
adds r4, #1
|
||||
lsrs r2, r2, #4
|
||||
cmp r2, #0
|
||||
bne _08057002
|
||||
movs r3, #0
|
||||
subs r2, r4, #1
|
||||
cmp r2, #0
|
||||
blt _08057032
|
||||
movs r6, #0x30
|
||||
_0805701E:
|
||||
adds r1, r5, r3
|
||||
mov r7, sp
|
||||
adds r0, r7, r2
|
||||
ldrb r0, [r0]
|
||||
orrs r0, r6
|
||||
strb r0, [r1]
|
||||
adds r3, #1
|
||||
subs r2, #1
|
||||
cmp r2, #0
|
||||
bge _0805701E
|
||||
_08057032:
|
||||
adds r1, r5, r3
|
||||
movs r0, #0
|
||||
strb r0, [r1]
|
||||
adds r0, r4, #0
|
||||
add sp, #8
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_08057040: .4byte 0x0FFFFFFF
|
||||
|
||||
.syntax divided
|
||||
+2
-2
@@ -267,10 +267,10 @@ extern void sub_080564C8(u32);
|
||||
extern void sub_08056F70(void);
|
||||
extern void DeleteWindow(void);
|
||||
extern void CreateWindow(void);
|
||||
extern void sub_0805EEB4(u8*, u32, u32);
|
||||
extern void sub_08056FBC(void*);
|
||||
extern void sub_0805EEB4(u8*, u32);
|
||||
extern void sub_08056C54(u32);
|
||||
extern void sub_08056BDC(u32);
|
||||
extern void sub_08056F88(u32, u32);
|
||||
extern u32 sub_08056CC0(u32);
|
||||
extern void sub_0805F8E4(u32 r0, WStruct* r1);
|
||||
#endif
|
||||
|
||||
@@ -185,4 +185,14 @@ extern EntityHandler gUnk_03003DC0;
|
||||
extern u8 gUnk_02022740[];
|
||||
extern u8 gUnk_02034490[];
|
||||
|
||||
typedef struct {
|
||||
u8 unk0;
|
||||
u8 unk1;
|
||||
u8 unk2;
|
||||
u8 unk3;
|
||||
u16 unk4;
|
||||
u16 unk6;
|
||||
void* unk8;
|
||||
} WStruct;
|
||||
|
||||
#endif
|
||||
|
||||
+41
-20
@@ -3,6 +3,7 @@
|
||||
|
||||
#include "global.h"
|
||||
#include "entity.h"
|
||||
#include "structures.h"
|
||||
|
||||
typedef struct {
|
||||
u8 doTextBox;
|
||||
@@ -18,25 +19,23 @@ typedef struct {
|
||||
u16 field_0xc;
|
||||
u16 field_0xe;
|
||||
u32 field_0x10;
|
||||
u32 field_0x14;
|
||||
u32 field_0x18;
|
||||
u32 field_0x1c;
|
||||
} TextBox;
|
||||
extern TextBox gTextBox;
|
||||
|
||||
typedef struct {
|
||||
u8 _0;
|
||||
u8 _1;
|
||||
u8 _2;
|
||||
u8 _3[5];
|
||||
u16 _8;
|
||||
u8 _b[0x16];
|
||||
TextBox textBox;
|
||||
u8 _20;
|
||||
u8 _21;
|
||||
u8 _22[0xa];
|
||||
u16 _22;
|
||||
u16 _24;
|
||||
u16 _26;
|
||||
u8 _28[0x4];
|
||||
void* _2c;
|
||||
u8 _30[0x23];
|
||||
u8 _53;
|
||||
u16 _54;
|
||||
u8 _56[0x2];
|
||||
void* _58;
|
||||
u8 _30[0x20];
|
||||
WStruct _50;
|
||||
u8 _5c;
|
||||
u8 _5d;
|
||||
u8 _5e[24];
|
||||
@@ -45,16 +44,38 @@ typedef struct {
|
||||
u8 _88;
|
||||
u8 _89;
|
||||
u8 _8a;
|
||||
u8 _8b[0xe];
|
||||
u8 _99;
|
||||
u8 _9a;
|
||||
u8 _9b;
|
||||
u8 _8b;
|
||||
u8 _8c;
|
||||
u8 _8d;
|
||||
u8 _8e;
|
||||
u8 _8f;
|
||||
u8 _90;
|
||||
u8 _91;
|
||||
s8 _92;
|
||||
u8 _93;
|
||||
u8 _94;
|
||||
u8 _95;
|
||||
u8 _96;
|
||||
u8 _97;
|
||||
union {
|
||||
u32 word;
|
||||
struct {
|
||||
u8 b0;
|
||||
u8 b1;
|
||||
u8 b2;
|
||||
s8 b3;
|
||||
} bytes;
|
||||
} _98;
|
||||
u8 _9c;
|
||||
u8 _9d;
|
||||
u8 _9e[0xa];
|
||||
} struct_02022780;
|
||||
extern struct_02022780 gUnk_02022780;
|
||||
static_assert(sizeof(struct_02022780) == 0xa8);
|
||||
u16 _9e;
|
||||
u16 _a0;
|
||||
u16 _a2;
|
||||
u16 _a4;
|
||||
u16 _a6;
|
||||
} CurrentTextBox;
|
||||
extern CurrentTextBox gCurrentTextBox;
|
||||
static_assert(sizeof(CurrentTextBox) == 0xa8);
|
||||
|
||||
/**
|
||||
* @brief Initialize the message system.
|
||||
|
||||
@@ -85,7 +85,7 @@ SECTIONS {
|
||||
. = 0x00022730; gUnk_02022730 = .;
|
||||
. = 0x00022740; gUnk_02022740 = .;
|
||||
. = 0x00022750; gPlayerScriptExecutionContext = .;
|
||||
. = 0x00022780; gUnk_02022780 = .;
|
||||
. = 0x00022780; gCurrentTextBox = .;
|
||||
. = 0x000227DC; gUnk_020227DC = .;
|
||||
. = 0x000227E8; gUnk_020227E8 = .;
|
||||
. = 0x000227F0; gUnk_020227F0 = .;
|
||||
@@ -146,8 +146,8 @@ SECTIONS {
|
||||
. = 0x00036540; gUnk_02036540 = .;
|
||||
. = 0x00036570; gScriptExecutionContextArray = .;
|
||||
. = 0x000369F0; gUnk_020369F0 = .;
|
||||
. = 0x00036A38; gUnk_02036A38 = .;
|
||||
. = 0x00036A40; gUnk_02036A40 = .;
|
||||
. = 0x00036A38; gCurrentWindow = .;
|
||||
. = 0x00036A40; gNewWindow = .;
|
||||
. = 0x00036A50; gEEPROMConfig = .;
|
||||
. = 0x00036A58; gUnk_02036A58 = .;
|
||||
. = 0x00036AD8; gUnk_02036AD8 = .;
|
||||
|
||||
@@ -21,16 +21,6 @@ typedef struct {
|
||||
u8 unk1;
|
||||
} UStruct;
|
||||
|
||||
typedef struct {
|
||||
u8 unk0;
|
||||
u8 unk1;
|
||||
u8 unk2;
|
||||
u8 unk3;
|
||||
u16 unk4;
|
||||
u16 unk6;
|
||||
void* unk8;
|
||||
} WStruct;
|
||||
|
||||
void sub_0805F820(WStruct* r0, u32* r1);
|
||||
|
||||
u32 sub_0805F7DC(u32 r0, WStruct* r1) {
|
||||
|
||||
+589
-54
@@ -8,12 +8,28 @@
|
||||
#include "structures.h"
|
||||
#include "save.h"
|
||||
|
||||
extern void WriteBit(u32*, u32);
|
||||
extern void sub_0805EF40(u8*, u8*);
|
||||
extern void sub_0801C4A0(u32, u32);
|
||||
extern void sub_0801C494(void);
|
||||
extern void sub_0805F918(u32, u32, u32);
|
||||
extern u32 sub_0801D51C(u32, u8*, u32);
|
||||
|
||||
u32 sub_08056FEC(u32, u8*);
|
||||
|
||||
u32 sub_080564DC(void);
|
||||
u32 sub_080564EC(void);
|
||||
u32 sub_08056654(void);
|
||||
u32 sub_080565B4(void);
|
||||
u32 sub_080565F8(void);
|
||||
u32 sub_08056640(void);
|
||||
u16 sub_08056750(CurrentTextBox*);
|
||||
u32 sub_0805EFE8(u8*);
|
||||
void sub_08056ABC(u32, u32);
|
||||
void sub_080569C4(CurrentTextBox*, u32);
|
||||
u16 sub_0805F7DC(u32, u8*);
|
||||
u32 sub_GetFontStrWidth(u8*, u32);
|
||||
void sub_08056FBC(CurrentTextBox*);
|
||||
|
||||
u32 (*const gUnk_08107BC8[])(void) = {
|
||||
sub_080564DC, sub_080564EC, sub_08056654, sub_080565B4, sub_080565F8, sub_08056640,
|
||||
@@ -24,23 +40,47 @@ u8* const gUnk_08107BE0[] = {
|
||||
&gUnk_020227DC, &gUnk_020227E8, &gUnk_020227F0, &gUnk_020227F8, &gUnk_02022800,
|
||||
};
|
||||
|
||||
void sub_08056684(struct_02022780*);
|
||||
void sub_080566B8(struct_02022780*);
|
||||
void sub_08056BA0(struct_02022780*);
|
||||
void sub_08056B1C(struct_02022780*);
|
||||
void sub_08056B7C(struct_02022780*);
|
||||
void sub_080569D4(struct_02022780*);
|
||||
void sub_08056684(CurrentTextBox*);
|
||||
void sub_080566B8(CurrentTextBox*);
|
||||
void sub_08056BA0(CurrentTextBox*);
|
||||
void sub_08056B1C(CurrentTextBox*);
|
||||
void sub_08056B7C(CurrentTextBox*);
|
||||
void sub_080569D4(CurrentTextBox*);
|
||||
|
||||
void (*const gUnk_08107BF4[])(struct_02022780*) = {
|
||||
void (*const gUnk_08107BF4[])(CurrentTextBox*) = {
|
||||
sub_08056684, sub_080566B8, sub_08056BA0, sub_08056B1C, sub_08056B7C, sub_080569D4,
|
||||
};
|
||||
|
||||
extern u32 gUnk_02036A40;
|
||||
extern u32 gUnk_02036A38;
|
||||
extern u8 gUnk_02024030;
|
||||
typedef struct Window {
|
||||
u8 unk0;
|
||||
u8 unk1;
|
||||
u8 unk2;
|
||||
u8 unk3;
|
||||
u8 unk4;
|
||||
u8 unk5;
|
||||
u8 unk6;
|
||||
u8 unk7;
|
||||
} Window;
|
||||
extern Window gCurrentWindow;
|
||||
extern Window gNewWindow;
|
||||
|
||||
extern struct {
|
||||
u8 unk_00;
|
||||
u8 unk_01[1];
|
||||
s8 unk_02;
|
||||
s8 unk_03;
|
||||
u8 unk_04[4];
|
||||
u16 unk_08[4];
|
||||
u16 unk_10[4];
|
||||
} gUnk_02024030;
|
||||
|
||||
extern u32 gUnk_0200005C;
|
||||
|
||||
extern u8 gUnk_020227A0;
|
||||
extern u8 gUnk_02000D00;
|
||||
|
||||
extern const u8 gUnk_08107C0C[];
|
||||
|
||||
s32 sub_08056338(void) {
|
||||
s32 result;
|
||||
|
||||
@@ -78,8 +118,8 @@ void TextboxNoOverlap(u32 index, Entity* ent) {
|
||||
}
|
||||
}
|
||||
|
||||
void sub_080563C8(u32 param_1, u32 param_2) {
|
||||
TextboxAtPosition(param_1, 1, param_2);
|
||||
void sub_080563C8(u32 index, u32 y) {
|
||||
TextboxAtPosition(index, 1, y);
|
||||
}
|
||||
|
||||
void TextboxAtPosition(u32 index, u32 x, u32 y) {
|
||||
@@ -89,7 +129,7 @@ void TextboxAtPosition(u32 index, u32 x, u32 y) {
|
||||
}
|
||||
|
||||
void ShowTextbox(u32 index) {
|
||||
MemClear(&gTextBox, 32);
|
||||
MemClear(&gTextBox, sizeof(gTextBox));
|
||||
gTextBox.textIndex = index;
|
||||
gTextBox.textSpeed = 99;
|
||||
gTextBox.textWindowWidth = 26;
|
||||
@@ -100,10 +140,10 @@ void ShowTextbox(u32 index) {
|
||||
}
|
||||
|
||||
void MessageInitialize(void) {
|
||||
MemClear(&gTextBox, 32);
|
||||
MemClear(&gUnk_02022780, 168);
|
||||
MemClear(&gUnk_02036A40, 8);
|
||||
MemClear(&gUnk_02036A38, 8);
|
||||
MemClear(&gTextBox, sizeof(gTextBox));
|
||||
MemClear(&gCurrentTextBox, sizeof(gCurrentTextBox));
|
||||
MemClear(&gNewWindow, sizeof(gNewWindow));
|
||||
MemClear(&gCurrentWindow, sizeof(gCurrentWindow));
|
||||
MemClear(&gUnk_02000040, 4);
|
||||
}
|
||||
|
||||
@@ -111,19 +151,19 @@ void MessageUpdate(void) {
|
||||
int iVar1;
|
||||
|
||||
if (gTextBox.doTextBox == 1) {
|
||||
MemClear((u32*)&gUnk_02022780, sizeof(gUnk_02022780));
|
||||
MemClear((u32*)&gCurrentTextBox, sizeof(gCurrentTextBox));
|
||||
sub_080564C8(1);
|
||||
}
|
||||
|
||||
if (gUnk_02022780._8a != 0) {
|
||||
gUnk_02022780._8a--;
|
||||
if (gCurrentTextBox._8a != 0) {
|
||||
gCurrentTextBox._8a--;
|
||||
} else {
|
||||
do {
|
||||
iVar1 = gUnk_08107BC8[gUnk_02022780._88]();
|
||||
iVar1 = gUnk_08107BC8[gCurrentTextBox._88]();
|
||||
} while (iVar1 != 0);
|
||||
}
|
||||
if (gUnk_02022780._9d != 0) {
|
||||
gUnk_02022780._9d = 0;
|
||||
if (gCurrentTextBox._9d != 0) {
|
||||
gCurrentTextBox._9d = 0;
|
||||
sub_08056F70();
|
||||
}
|
||||
DeleteWindow();
|
||||
@@ -131,12 +171,12 @@ void MessageUpdate(void) {
|
||||
}
|
||||
|
||||
void sub_080564C8(u32 a1) {
|
||||
gUnk_02022780._88 = a1;
|
||||
gUnk_02022780._89 = 0;
|
||||
gCurrentTextBox._88 = a1;
|
||||
gCurrentTextBox._89 = 0;
|
||||
}
|
||||
|
||||
u32 sub_080564DC(void) {
|
||||
gUnk_02022780._99 = 0;
|
||||
gCurrentTextBox._98.bytes.b1 = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -147,18 +187,18 @@ NONMATCH("asm/non_matching/textbox/sub_080564EC.inc", u32 sub_080564EC(void)) {
|
||||
u32 i;
|
||||
char c;
|
||||
|
||||
MemClear((void*)&gUnk_02036A40, 8);
|
||||
MemClear((void*)&gNewWindow, 8);
|
||||
MemClear((void*)&gUnk_02024030, 0x18);
|
||||
MemClear((void*)&gUnk_02022780, 0xa8);
|
||||
MemCopy(&gTextBox, &gUnk_02022780, 32);
|
||||
if (gUnk_02022780._2 == 0x63) {
|
||||
gUnk_02022780._2 = gUnk_02000000->messageSpeed;
|
||||
MemClear((void*)&gCurrentTextBox, sizeof(gCurrentTextBox));
|
||||
MemCopy(&gTextBox, &gCurrentTextBox, sizeof(gTextBox));
|
||||
if (gCurrentTextBox.textBox.textSpeed == 0x63) {
|
||||
gCurrentTextBox.textBox.textSpeed = gUnk_02000000->messageSpeed;
|
||||
}
|
||||
gUnk_02022780._9c = 0xff;
|
||||
sub_0805EEB4(&gUnk_02022780._20, gUnk_02022780._8, 32);
|
||||
gUnk_02022780._5c = 2;
|
||||
gUnk_02022780._5d = 0xe;
|
||||
dest = gUnk_02022780._5e;
|
||||
gCurrentTextBox._9c = 0xff;
|
||||
sub_0805EEB4(&gCurrentTextBox._20, gCurrentTextBox.textBox.textIndex /*, 32*/);
|
||||
gCurrentTextBox._5c = 2;
|
||||
gCurrentTextBox._5d = 0xe;
|
||||
dest = gCurrentTextBox._5e;
|
||||
|
||||
for (i = 0; i < 6; ++i) {
|
||||
c = gSave.playerName[i];
|
||||
@@ -170,10 +210,10 @@ NONMATCH("asm/non_matching/textbox/sub_080564EC.inc", u32 sub_080564EC(void)) {
|
||||
dest[0] = 2;
|
||||
dest[1] = 15;
|
||||
dest[2] = 0;
|
||||
sub_08056FBC(&gUnk_02022780);
|
||||
gUnk_02022780._2c = &gUnk_08107BE0;
|
||||
gUnk_02022780._58 = &gUnk_02000D00;
|
||||
gUnk_02022780._54 = 0xd0;
|
||||
sub_08056FBC(&gCurrentTextBox);
|
||||
gCurrentTextBox._2c = &gUnk_08107BE0;
|
||||
gCurrentTextBox._50.unk8 = &gUnk_02000D00;
|
||||
gCurrentTextBox._50.unk4 = 0xd0;
|
||||
sub_08056C54(2);
|
||||
sub_08056BDC(0);
|
||||
sub_080564C8(2);
|
||||
@@ -182,36 +222,36 @@ NONMATCH("asm/non_matching/textbox/sub_080564EC.inc", u32 sub_080564EC(void)) {
|
||||
END_NONMATCH
|
||||
|
||||
u32 sub_080565B4(void) {
|
||||
if (gUnk_02022780._89 == 0) {
|
||||
gUnk_02022780._89 = 1;
|
||||
gUnk_02022780._99 = 1;
|
||||
sub_08056F88(gUnk_02022780._3[0], gUnk_02022780._53);
|
||||
if (gCurrentTextBox._89 == 0) {
|
||||
gCurrentTextBox._89 = 1;
|
||||
gCurrentTextBox._98.bytes.b1 = 1;
|
||||
sub_08056F88(gCurrentTextBox.textBox.unk3, gCurrentTextBox._50.unk3);
|
||||
SoundReq(SFX_TEXTBOX_OPEN);
|
||||
}
|
||||
|
||||
if (sub_08056CC0(1)) {
|
||||
gUnk_02022780._99 = 2;
|
||||
gCurrentTextBox._98.bytes.b1 = 2;
|
||||
sub_080564C8(2);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 sub_080565F8(void) {
|
||||
if (gUnk_02022780._89 == 0) {
|
||||
gUnk_02022780._89 = 1;
|
||||
gUnk_02022780._99 = 3;
|
||||
if (gCurrentTextBox._89 == 0) {
|
||||
gCurrentTextBox._89 = 1;
|
||||
gCurrentTextBox._98.bytes.b1 = 3;
|
||||
sub_08056BDC(0);
|
||||
SoundReq(SFX_TEXTBOX_CLOSE);
|
||||
}
|
||||
|
||||
if (sub_08056CC0(-1)) {
|
||||
gUnk_02022780._99 = 0;
|
||||
gCurrentTextBox._98.bytes.b1 = 0;
|
||||
sub_080564C8(2);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 sub_08056640() {
|
||||
u32 sub_08056640(void) {
|
||||
sub_08056C54(0);
|
||||
sub_080564C8(0);
|
||||
return 0;
|
||||
@@ -219,17 +259,512 @@ u32 sub_08056640() {
|
||||
|
||||
u32 sub_08056654(void) {
|
||||
sub_08056C54(4);
|
||||
gUnk_08107BF4[gUnk_02022780._89](&gUnk_02022780);
|
||||
gUnk_08107BF4[gCurrentTextBox._89](&gCurrentTextBox);
|
||||
sub_08056CC0(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void sub_08056684(struct_02022780* this) {
|
||||
if ((gUnk_02022780._20 & 1) == 0) {
|
||||
if (gUnk_02022780._99 == '\0') {
|
||||
void sub_08056684(CurrentTextBox* this) {
|
||||
if ((gCurrentTextBox._20 & 1) == 0) {
|
||||
if (gCurrentTextBox._98.bytes.b1 == '\0') {
|
||||
sub_080564C8(5);
|
||||
}
|
||||
} else {
|
||||
this->_89 = 1;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_080566B8(CurrentTextBox* param_1) {
|
||||
u32 uVar3;
|
||||
s32 iVar4;
|
||||
int iVar5;
|
||||
int iVar6;
|
||||
|
||||
if (param_1->_95 != 0) {
|
||||
param_1->_95--;
|
||||
} else {
|
||||
if ((gInput.heldKeys & B_BUTTON) != 0) {
|
||||
iVar4 = 8;
|
||||
} else {
|
||||
iVar4 = 1;
|
||||
}
|
||||
param_1->_92 -= iVar4;
|
||||
if (param_1->_92 < 1) {
|
||||
iVar5 = 0;
|
||||
do {
|
||||
iVar5++;
|
||||
param_1->_92 += gUnk_08107C0C[param_1->textBox.textSpeed];
|
||||
} while (param_1->_92 < 1);
|
||||
iVar6 = 0;
|
||||
do {
|
||||
uVar3 = sub_08056750(param_1);
|
||||
if (((uVar3 == 0) || (param_1->_95 != 0)) || (param_1->_8a != 0))
|
||||
break;
|
||||
iVar6 += uVar3;
|
||||
iVar5--;
|
||||
} while (0 < iVar5);
|
||||
if (iVar6 != 0) {
|
||||
gCurrentTextBox._9d = 1;
|
||||
} else {
|
||||
param_1->_92 = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
NONMATCH("asm/non_matching/textbox/sub_08056750.inc", u16 sub_08056750(CurrentTextBox* param_1)) {
|
||||
s32 r0, r1, r2, r3;
|
||||
u32 r7;
|
||||
s32 tmp;
|
||||
u32 t;
|
||||
u32* t2;
|
||||
|
||||
r7 = param_1->_24;
|
||||
|
||||
if (r7 == 0) {
|
||||
r7 = sub_0805EFE8(¶m_1->_20);
|
||||
switch (r7) {
|
||||
case 0:
|
||||
if (gUnk_02000040.unk_00 == 1) {
|
||||
param_1->_89 = 5;
|
||||
sub_08056ABC(0, 0);
|
||||
} else {
|
||||
param_1->_89 = 2;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
param_1->_8a = 2;
|
||||
if (param_1->_98.bytes.b0 == 0) {
|
||||
sub_08056BDC(1);
|
||||
} else {
|
||||
param_1->_89 = 3;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
sub_080564C8(3);
|
||||
break;
|
||||
case 3:
|
||||
sub_080564C8(4);
|
||||
break;
|
||||
case 4:
|
||||
param_1->_50.unk6 +=
|
||||
(param_1->_50.unk4 - param_1->_50.unk6 - sub_GetFontStrWidth(¶m_1->_20, 0)) / 2;
|
||||
break;
|
||||
case 5:
|
||||
gTextBox.unk = param_1->_22;
|
||||
break;
|
||||
case 6:
|
||||
t2 = &gUnk_0200005C;
|
||||
t = param_1->_22;
|
||||
WriteBit(t2, 0x1f & t);
|
||||
break;
|
||||
case 7:
|
||||
switch (param_1->_22) {
|
||||
case 0xe:
|
||||
param_1->_91 = param_1->_8f;
|
||||
r3 = 2;
|
||||
break;
|
||||
case 0xf:
|
||||
r3 = param_1->_91;
|
||||
break;
|
||||
default:
|
||||
r3 = param_1->_22;
|
||||
break;
|
||||
}
|
||||
param_1->_90 = 0;
|
||||
sub_080569C4(param_1, r3);
|
||||
break;
|
||||
case 8:
|
||||
SoundReq(param_1->_22);
|
||||
break;
|
||||
case 9:
|
||||
gCurrentTextBox.textBox.unk3 = param_1->_22;
|
||||
sub_08056F88(param_1->_22, param_1->_50.unk3);
|
||||
break;
|
||||
case 10:
|
||||
param_1->textBox.textWindowPosY = param_1->_22;
|
||||
break;
|
||||
case 12:
|
||||
if (gUnk_02000040.unk_00 != 1) {
|
||||
MemClear(&gUnk_02000040, 4);
|
||||
MemClear(&gUnk_02024030, sizeof(gUnk_02024030));
|
||||
gUnk_02024030.unk_00 = 1;
|
||||
gUnk_02000040.unk_00 = 1;
|
||||
}
|
||||
if (gUnk_02024030.unk_02 > 3)
|
||||
break;
|
||||
|
||||
gUnk_02024030.unk_10[gUnk_02024030.unk_02] = param_1->_26;
|
||||
gUnk_02024030.unk_08[gUnk_02024030.unk_02] = param_1->_50.unk6;
|
||||
gUnk_02024030.unk_02++;
|
||||
param_1->_50.unk6 += 8;
|
||||
break;
|
||||
case 13:
|
||||
switch (param_1->_22) {
|
||||
case 0xff:
|
||||
param_1->_8e = 1;
|
||||
break;
|
||||
case 0xfe:
|
||||
param_1->_8e = 2;
|
||||
break;
|
||||
default:
|
||||
param_1->_95 = param_1->_22;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 14:
|
||||
r1 = param_1->_22;
|
||||
param_1->_94 = r1;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (r7 >> 8 == 0)
|
||||
return 0;
|
||||
}
|
||||
if (gCurrentTextBox._98.bytes.b1 != 2) {
|
||||
sub_080564C8(3);
|
||||
return 0;
|
||||
}
|
||||
if (gTextBox.unk == 0) {
|
||||
gTextBox.unk = 0x80;
|
||||
}
|
||||
param_1->_24 = 0;
|
||||
if (r7 >> 8 == 7) {
|
||||
param_1->_90 = param_1->_8f | 0x80;
|
||||
sub_080569C4(param_1, 0);
|
||||
} else {
|
||||
if ((param_1->_90 & 0x80) != 0) {
|
||||
r3 = param_1->_90;
|
||||
param_1->_90 = 0;
|
||||
sub_080569C4(param_1, r3);
|
||||
}
|
||||
}
|
||||
return sub_0805F7DC(r7, ¶m_1->_30[0x20]);
|
||||
}
|
||||
END_NONMATCH
|
||||
|
||||
void sub_080569C4(CurrentTextBox* ctb, u32 unk) {
|
||||
u32 temp = unk & 0x7;
|
||||
ctb->_8f = temp;
|
||||
ctb->_50.unk2 = temp;
|
||||
}
|
||||
|
||||
extern u8 gUnk_08107C14;
|
||||
extern u8 gUnk_08107C0F;
|
||||
void sub_080569D4(CurrentTextBox* ctb) {
|
||||
s32 r1, r5, r6;
|
||||
u32 error;
|
||||
u8* ptr1;
|
||||
u8* ptr2;
|
||||
|
||||
r5 = gUnk_02024030.unk_03;
|
||||
switch (gInput.newKeys) {
|
||||
case START_BUTTON:
|
||||
case A_BUTTON:
|
||||
r1 = gUnk_02024030.unk_10[r5];
|
||||
if (r1 == 0) {
|
||||
ptr2 = &gUnk_08107C14;
|
||||
ptr1 = &ctb->_20;
|
||||
} else {
|
||||
ctb->textBox.textIndex = r1;
|
||||
sub_0805EEB4(&ctb->_20, r1);
|
||||
ptr2 = &gUnk_08107C0F;
|
||||
ptr1 = &ctb->_20;
|
||||
}
|
||||
sub_0805EF40(ptr1, ptr2);
|
||||
gUnk_02000040.unk_01 = gUnk_02024030.unk_03;
|
||||
gUnk_02000040.unk_00 = 3;
|
||||
MemClear(&gUnk_02024030, sizeof(gUnk_02024030));
|
||||
SoundReq(0x6a); // SFX_TEXTBOX_SELECT
|
||||
ctb->_89 = 1;
|
||||
break;
|
||||
case DPAD_LEFT:
|
||||
r5--;
|
||||
break;
|
||||
case DPAD_RIGHT:
|
||||
r5++;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
r5 = (r5 + gUnk_02024030.unk_02) % gUnk_02024030.unk_02;
|
||||
r6 = gUnk_02024030.unk_03;
|
||||
if (r5 != r6) {
|
||||
gUnk_02024030.unk_03 = r5;
|
||||
SoundReq(0x69); // SFX_TEXTBOX_CHOICE
|
||||
error = 1;
|
||||
} else {
|
||||
error = 0;
|
||||
}
|
||||
if (gUnk_02000040.unk_00 == 1) {
|
||||
gUnk_02024030.unk_00 = gUnk_02000040.unk_00 = 2;
|
||||
error = 1;
|
||||
}
|
||||
if (error != 0) {
|
||||
sub_08056ABC(r5, r6);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08056ABC(u32 unk_0, u32 unk_1) {
|
||||
u16 t;
|
||||
t = gCurrentTextBox._50.unk6;
|
||||
gCurrentTextBox._50.unk6 = gUnk_02024030.unk_08[unk_1];
|
||||
sub_0805F8E4(0, &gCurrentTextBox._50);
|
||||
gCurrentTextBox._50.unk6 = gUnk_02024030.unk_08[unk_0];
|
||||
sub_0805F8E4(1, &gCurrentTextBox._50);
|
||||
gCurrentTextBox._50.unk6 = t;
|
||||
gCurrentTextBox._9d = 1;
|
||||
}
|
||||
|
||||
void sub_08056B1C(CurrentTextBox* ctb) {
|
||||
u32 t;
|
||||
u8* ptr;
|
||||
gTextBox.unk = 0;
|
||||
if (ctb->_94 != 0) {
|
||||
ctb->_94--;
|
||||
if (ctb->_94 != 0)
|
||||
return;
|
||||
ptr = &ctb->_89;
|
||||
t = 4;
|
||||
} else {
|
||||
if ((gInput.newKeys & 0x1f3) != 0) {
|
||||
SoundReq(0x68); // SFX_TEXTBOX_SWAP
|
||||
ctb->_98.bytes.b2 = 0;
|
||||
ptr = &ctb->_89;
|
||||
t = 4;
|
||||
} else {
|
||||
ptr = &ctb->_98.bytes.b2;
|
||||
t = *ptr + 1;
|
||||
}
|
||||
}
|
||||
*ptr = t;
|
||||
}
|
||||
|
||||
void sub_08056B7C(CurrentTextBox* ctb) {
|
||||
sub_08056BDC(0);
|
||||
sub_080569C4(ctb, ctb->_8f | 0x40);
|
||||
ctb->_89 = 1;
|
||||
}
|
||||
|
||||
void sub_08056BA0(CurrentTextBox* ctb) {
|
||||
gTextBox.unk = 0;
|
||||
sub_08056C54(7);
|
||||
if ((ctb->_8e != 1) && ((ctb->_8e == 2 || ((gInput.newKeys & 0x1f3) != 0)))) {
|
||||
sub_080564C8(4);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08056BDC(u32 unk) {
|
||||
gCurrentTextBox._98.bytes.b0 = unk;
|
||||
if (unk == 0) {
|
||||
MemFill32(-1, &gUnk_02000D00, 0xd00);
|
||||
sub_08056F70();
|
||||
gCurrentTextBox._9e = 0xf082;
|
||||
gCurrentTextBox._a0 = 0xf083;
|
||||
gCurrentTextBox._a2 = 0xf0b6;
|
||||
gCurrentTextBox._a4 = 0xf0b7;
|
||||
gCurrentTextBox._50.unk6 = 0;
|
||||
gCurrentTextBox._50.unk4 = 0xd0;
|
||||
} else {
|
||||
gCurrentTextBox._50.unk6 = 0xd0;
|
||||
gCurrentTextBox._50.unk4 = 0x1a0;
|
||||
}
|
||||
sub_080569C4(&gCurrentTextBox, gCurrentTextBox._8f | 0x40);
|
||||
}
|
||||
|
||||
void sub_08056C54(u32 unk) {
|
||||
gTextBox.doTextBox = gCurrentTextBox.textBox.doTextBox = unk;
|
||||
}
|
||||
|
||||
void DeleteWindow(void) {
|
||||
u32 r0;
|
||||
u16* ptr;
|
||||
u16* ptr2;
|
||||
int i, j;
|
||||
|
||||
Window* tp = &gCurrentWindow;
|
||||
|
||||
if (tp->unk1 != 0) {
|
||||
tp->unk1 = 0;
|
||||
r0 = tp->unk5 << 5;
|
||||
r0 += tp->unk4;
|
||||
ptr = &((u16*)(&gBG0Buffer.filler0))[r0];
|
||||
i = tp->unk7 + 2;
|
||||
do {
|
||||
j = 0;
|
||||
do {
|
||||
ptr[j] = 0;
|
||||
} while (j++, j < tp->unk6 + 2);
|
||||
ptr += 0x20;
|
||||
i--;
|
||||
} while (i > 0);
|
||||
sub_0801C4A0(tp->unk5, tp->unk7);
|
||||
sub_0801C494();
|
||||
}
|
||||
}
|
||||
|
||||
u32 sub_08056CC0(u32 unk) {
|
||||
u32 iVar1;
|
||||
u32 uVar2;
|
||||
u32 uVar3;
|
||||
Window* ptr;
|
||||
|
||||
uVar3 = 0;
|
||||
|
||||
// inline function?
|
||||
gCurrentTextBox._98.bytes.b3 += unk;
|
||||
if (gCurrentTextBox._98.bytes.b3 < 1) {
|
||||
gCurrentTextBox._98.bytes.b3 = 0;
|
||||
} else {
|
||||
if (gCurrentTextBox._98.bytes.b3 < 8)
|
||||
goto LAB_08056cee;
|
||||
gCurrentTextBox._98.bytes.b3 = 8;
|
||||
}
|
||||
uVar3 = 1;
|
||||
LAB_08056cee:
|
||||
ptr = &gNewWindow;
|
||||
if (gCurrentTextBox._98.bytes.b3 != 0) {
|
||||
iVar1 = gCurrentTextBox._98.bytes.b3;
|
||||
uVar2 = (iVar1 * (gCurrentTextBox.textBox.textWindowWidth << 1)) / 16;
|
||||
ptr->unk6 = uVar2;
|
||||
if ((uVar2 & 1) != 0) {
|
||||
ptr->unk6++;
|
||||
}
|
||||
ptr->unk4 =
|
||||
((gCurrentTextBox.textBox.textWindowWidth / 2) + gCurrentTextBox.textBox.textWindowPosX) - (ptr->unk6 / 2);
|
||||
uVar2 = (iVar1 * (gCurrentTextBox.textBox.textWindowHeight << 1)) / 16;
|
||||
ptr->unk7 = uVar2;
|
||||
if ((uVar2 & 1) != 0) {
|
||||
ptr->unk7++;
|
||||
}
|
||||
ptr->unk5 =
|
||||
((gCurrentTextBox.textBox.textWindowHeight / 2) + gCurrentTextBox.textBox.textWindowPosY) - (ptr->unk7 / 2);
|
||||
} else {
|
||||
ptr->unk5 = 0xff;
|
||||
ptr->unk4 = -1;
|
||||
ptr->unk7 = -1;
|
||||
ptr->unk6 = -1;
|
||||
}
|
||||
ptr->unk1 = 1;
|
||||
return uVar3;
|
||||
}
|
||||
|
||||
void DispMessageFrame(u16*, u32, u32, u32);
|
||||
extern void DispString(void);
|
||||
extern void DispCursor(void);
|
||||
|
||||
void CreateWindow(void) {
|
||||
s32 r0, r3;
|
||||
u16* ptr;
|
||||
|
||||
r0 = gCurrentTextBox._98.bytes.b3;
|
||||
if (r0 <= 0)
|
||||
return;
|
||||
r0 = ((gNewWindow.unk5 << 5) + gNewWindow.unk4);
|
||||
ptr = &((u16*)(&gBG0Buffer.filler0))[r0];
|
||||
r3 = 0xf07b;
|
||||
DispMessageFrame(ptr, gNewWindow.unk6, gNewWindow.unk7, r3);
|
||||
DispString();
|
||||
DispCursor();
|
||||
gCurrentWindow = gNewWindow;
|
||||
sub_0801C494();
|
||||
}
|
||||
|
||||
NONMATCH("asm/non_matching/textbox/DispMessageFrame.inc",
|
||||
void DispMessageFrame(u16* buffer, u32 width_, u32 height_, u32 flags_)) {
|
||||
}
|
||||
END_NONMATCH
|
||||
|
||||
extern u16 gUnk_02034CB2[];
|
||||
extern u16 gUnk_0202281E[];
|
||||
|
||||
void DispString(void) {
|
||||
u32 r0, r2, r4;
|
||||
u16 *r5, *ptr2;
|
||||
s32 i, j;
|
||||
|
||||
Window* window = &gNewWindow;
|
||||
|
||||
if (window->unk6 != 0) {
|
||||
if (window->unk7 != 0) {
|
||||
r4 = window->unk7;
|
||||
r5 = &gUnk_02034CB2[(window->unk5 << 5) + window->unk4];
|
||||
i = (s32)(4 - r4) / 2;
|
||||
do {
|
||||
j = window->unk6;
|
||||
r2 = gUnk_0202281E[i];
|
||||
r5 += 0x20;
|
||||
r0 = i + 1;
|
||||
r4--;
|
||||
ptr2 = r5;
|
||||
do {
|
||||
*ptr2 = r2;
|
||||
ptr2++;
|
||||
r2 += 2;
|
||||
j--;
|
||||
} while (j > 0);
|
||||
i = r0;
|
||||
} while (r4 != 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DispCursor(void) {
|
||||
u32 r0;
|
||||
u16* ptr;
|
||||
|
||||
if ((gCurrentTextBox._98.word & 0x10ff00) == 0x100200) {
|
||||
ptr = &((u16*)(gBG0Buffer.filler0))[(gNewWindow.unk5 << 5) + gNewWindow.unk4];
|
||||
r0 = (((gNewWindow.unk7 + 1) << 5) - 2);
|
||||
r0 += gNewWindow.unk6;
|
||||
ptr += r0;
|
||||
*ptr = 0xf080;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08056F70(void) {
|
||||
LoadResourceAsync(&gUnk_02000D00, 0x0600D040, 0xd00);
|
||||
}
|
||||
|
||||
void sub_08056F88(u32 unk_1, u32 unk_2) {
|
||||
u32 uVar1;
|
||||
|
||||
if (0xf < unk_1) {
|
||||
unk_1 = 0;
|
||||
}
|
||||
uVar1 = unk_1 << 4 | unk_2;
|
||||
if (gCurrentTextBox._9c != uVar1) {
|
||||
gCurrentTextBox._9c = uVar1;
|
||||
sub_0805F918(unk_1, unk_2, 0x0600CF60);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08056FBC(CurrentTextBox* ctb) {
|
||||
sub_08056FEC(ctb->textBox.field_0x10, &ctb->_5e[0xa]);
|
||||
sub_08056FEC(ctb->textBox.field_0x14, &ctb->_5e[0x12]);
|
||||
sub_08056FEC(ctb->textBox.field_0x18, &ctb->_77[0x1]);
|
||||
sub_08056FEC(ctb->textBox.field_0x1c, &ctb->_77[0x9]);
|
||||
}
|
||||
|
||||
NONMATCH("asm/non_matching/textbox/sub_08056FEC.inc", u32 sub_08056FEC(u32 param_1, u8* param_2)) {
|
||||
u32 uVar1;
|
||||
int iVar2;
|
||||
int iVar3;
|
||||
int iVar4;
|
||||
u8 local_1c[8];
|
||||
|
||||
uVar1 = sub_0801D51C(param_1, param_2, param_1);
|
||||
uVar1 = uVar1 & 0xfffffff;
|
||||
iVar4 = 0;
|
||||
do {
|
||||
local_1c[iVar4++] = uVar1 & 0xf;
|
||||
uVar1 = uVar1 / 16;
|
||||
} while (uVar1 != 0);
|
||||
for (iVar3 = 0; --iVar4 >= 0; iVar3++) {
|
||||
param_2[iVar3] = local_1c[iVar4] | 0x30;
|
||||
}
|
||||
param_2[iVar3] = 0;
|
||||
return iVar4;
|
||||
}
|
||||
END_NONMATCH
|
||||
|
||||
Reference in New Issue
Block a user