summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2021-05-24 09:31:37 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2021-05-24 09:31:37 -0400
commiteb511d34eab6bdbb157a998b9aa5617b7679c242 (patch)
tree4dc10ee87beb4bb7e5d4ba761089c373fdde0d7c
parentd9808a376ee20a2e6dd57d1f272886f2ad192302 (diff)
Finish decomping sav_chatot
-rw-r--r--arm9/arm9.lsf1
-rw-r--r--arm9/asm/scrcmd_3.s2
-rw-r--r--arm9/asm/unk_02005CFC.s12
-rw-r--r--arm9/asm/unk_02029EC4.s92
-rw-r--r--arm9/asm/unk_020476CC.s12
-rw-r--r--arm9/asm/unk_0206BF90.s2
-rw-r--r--arm9/asm/unk_02080C38.s6
-rw-r--r--arm9/asm/unk_020834D0.s4
-rw-r--r--arm9/global.inc20
-rw-r--r--arm9/modules/05/asm/module_05.s4
-rw-r--r--arm9/modules/14/asm/module_14.s4
-rw-r--r--arm9/modules/71/asm/module_71.s8
-rw-r--r--arm9/modules/80/asm/module_80.s4
-rw-r--r--arm9/src/main.c4
-rw-r--r--arm9/src/sav_chatot.c81
-rw-r--r--arm9/src/save_arrays.c6
-rw-r--r--arm9/src/scrcmd_sound.c6
-rw-r--r--include/sav_chatot.h24
18 files changed, 136 insertions, 156 deletions
diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf
index b89ac7ce..7a8f19f1 100644
--- a/arm9/arm9.lsf
+++ b/arm9/arm9.lsf
@@ -112,7 +112,6 @@ Static arm9
Object unk_02029CEC.o
Object igt.o
Object sav_chatot.o
- Object unk_02029EC4.o
Object unk_02029FB0.o
Object unk_0202A1E0.o
Object unk_0202A8F4.o
diff --git a/arm9/asm/scrcmd_3.s b/arm9/asm/scrcmd_3.s
index 28df2444..4568c590 100644
--- a/arm9/asm/scrcmd_3.s
+++ b/arm9/asm/scrcmd_3.s
@@ -173,7 +173,7 @@ FUN_0203FF10: ; 0x0203FF10
str r0, [sp, #0x30]
ldr r0, [r5, #0x0]
ldr r0, [r0, #0xc]
- bl FUN_02029EF8
+ bl Sav2_Chatot_get
str r0, [sp, #0x34]
add r0, sp, #0x14
bl FUN_02081214
diff --git a/arm9/asm/unk_02005CFC.s b/arm9/asm/unk_02005CFC.s
index 6a601c58..7a7010b0 100644
--- a/arm9/asm/unk_02005CFC.s
+++ b/arm9/asm/unk_02005CFC.s
@@ -30,7 +30,7 @@ FUN_02005D20: ; 0x02005D20
bl FUN_02003D38
add r4, r0, #0x0
add r0, r5, #0x0
- bl FUN_02029F04
+ bl Chatot_exists
cmp r0, #0x0
bne _02005D3A
mov r0, #0x0
@@ -80,10 +80,10 @@ _02005D70:
lsl r0, r0, #0x10
lsr r4, r0, #0x10
add r0, r6, #0x0
- bl FUN_02029F10
+ bl Chatot_GetData
add r1, r0, #0x0
ldr r0, [sp, #0x0]
- bl FUN_02029F14
+ bl Chatot_Decode
mov r0, #0xe
bl FUN_02004930
str r0, [sp, #0x8]
@@ -192,7 +192,7 @@ FUN_02005E6C: ; 0x02005E6C
bl FUN_02004DB4
add r1, r0, #0x0
add r0, r4, #0x0
- bl FUN_02029F4C
+ bl Chatot_Encode
pop {r4, pc}
.balign 4
@@ -250,14 +250,14 @@ _02005EDC: .word 0x000001B9
FUN_02005EE0: ; 0x02005EE0
push {r4, lr}
add r4, r0, #0x0
- bl FUN_02029F04
+ bl Chatot_exists
cmp r0, #0x0
bne _02005EF0
mov r0, #0x0
pop {r4, pc}
_02005EF0:
add r0, r4, #0x0
- bl FUN_02029F10
+ bl Chatot_GetData
mov r1, #0xf
ldrsb r0, [r0, r1]
sub r1, #0x2d
diff --git a/arm9/asm/unk_02029EC4.s b/arm9/asm/unk_02029EC4.s
deleted file mode 100644
index 2c4bdd91..00000000
--- a/arm9/asm/unk_02029EC4.s
+++ /dev/null
@@ -1,92 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
-
- .text
-
- thumb_func_start FUN_02029F14
-FUN_02029F14: ; 0x02029F14
- push {r4-r7}
- mov r5, #0x0
- mov r2, #0xfa
- add r4, r5, #0x0
- mov r6, #0xf
- lsl r2, r2, #0x2
-_02029F20:
- ldrsb r7, [r1, r4]
- add r3, r0, r5
- and r7, r6
- lsl r7, r7, #0x18
- lsr r7, r7, #0x18
- sub r7, #0x8
- lsl r7, r7, #0x18
- asr r7, r7, #0x14
- strb r7, [r0, r5]
- ldrsb r7, [r1, r4]
- add r4, r4, #0x1
- add r5, r5, #0x2
- lsl r7, r7, #0x14
- lsr r7, r7, #0x18
- sub r7, #0x8
- lsl r7, r7, #0x18
- asr r7, r7, #0x14
- strb r7, [r3, #0x1]
- cmp r4, r2
- blt _02029F20
- pop {r4-r7}
- bx lr
-
- thumb_func_start FUN_02029F4C
-FUN_02029F4C: ; 0x02029F4C
- push {r4-r7}
- add r3, r0, #0x0
- add r2, r1, #0x0
- mov r0, #0x1
- mov r1, #0x0
- str r0, [r3, #0x0]
- add r0, r1, #0x0
-_02029F5A:
- ldrsb r4, [r2, r0]
- add r6, r3, r1
- add r7, r2, r0
- asr r5, r4, #0x3
- lsr r5, r5, #0x1c
- add r5, r4, r5
- lsl r4, r5, #0x14
- asr r4, r4, #0x18
- add r4, #0x8
- strb r4, [r6, #0x4]
- mov r4, #0x4
- ldrsb r5, [r6, r4]
- mov r4, #0x1
- ldrsb r4, [r7, r4]
- add r0, r0, #0x2
- add r1, r1, #0x1
- asr r7, r4, #0x3
- lsr r7, r7, #0x1c
- add r7, r4, r7
- lsl r4, r7, #0x14
- asr r4, r4, #0x18
- add r4, #0x8
- lsl r4, r4, #0x18
- lsr r4, r4, #0x14
- orr r4, r5
- strb r4, [r6, #0x4]
- mov r4, #0x7d
- lsl r4, r4, #0x4
- cmp r0, r4
- blt _02029F5A
- pop {r4-r7}
- bx lr
- .balign 4
-
- thumb_func_start FUN_02029F9C
-FUN_02029F9C: ; 0x02029F9C
- add r2, r0, #0x0
- add r0, r1, #0x0
- add r1, r2, #0x0
- mov r2, #0xfb
- ldr r3, _02029FAC ; =MIi_CpuCopyFast
- lsl r2, r2, #0x2
- bx r3
- nop
-_02029FAC: .word MIi_CpuCopyFast
diff --git a/arm9/asm/unk_020476CC.s b/arm9/asm/unk_020476CC.s
index 7e25689f..54679259 100644
--- a/arm9/asm/unk_020476CC.s
+++ b/arm9/asm/unk_020476CC.s
@@ -97,7 +97,7 @@ _0204775C:
add r4, r7, #0x0
_02047774:
add r0, r5, #0x0
- bl FUN_02029EE4
+ bl Chatot_new
mov r1, #0x46
lsl r1, r1, #0x2
str r0, [r4, r1]
@@ -455,11 +455,11 @@ FUN_02047A64: ; 0x02047A64
add r2, r0, r2
mov r0, #0x46
lsl r0, r0, #0x2
- ldr r3, _02047A74 ; =FUN_02029F9C
+ ldr r3, _02047A74 ; =Chatot_copy
ldr r0, [r2, r0]
bx r3
nop
-_02047A74: .word FUN_02029F9C
+_02047A74: .word Chatot_copy
thumb_func_start FUN_02047A78
FUN_02047A78: ; 0x02047A78
@@ -480,7 +480,7 @@ FUN_02047A78: ; 0x02047A78
bl Sav2_Pokedex_get
str r0, [sp, #0x4]
ldr r0, [r4, #0xc]
- bl FUN_02029EF8
+ bl Sav2_Chatot_get
str r0, [sp, #0x8]
ldr r0, [r4, #0xc]
bl Sav2_PlayerData_GetOptionsAddr
@@ -628,7 +628,7 @@ FUN_02047BC0: ; 0x02047BC0
str r0, [sp, #0xc]
ldr r0, [sp, #0x0]
ldr r0, [r0, #0xc]
- bl FUN_02029EF8
+ bl Sav2_Chatot_get
str r0, [sp, #0x8]
ldr r0, [sp, #0x0]
ldr r0, [r0, #0xc]
@@ -795,7 +795,7 @@ FUN_02047D48: ; 0x02047D48
str r0, [sp, #0x18]
ldr r0, [sp, #0x0]
ldr r0, [r0, #0xc]
- bl FUN_02029EF8
+ bl Sav2_Chatot_get
str r0, [sp, #0x14]
ldr r0, [sp, #0x0]
ldr r0, [r0, #0xc]
diff --git a/arm9/asm/unk_0206BF90.s b/arm9/asm/unk_0206BF90.s
index d672d875..acf84738 100644
--- a/arm9/asm/unk_0206BF90.s
+++ b/arm9/asm/unk_0206BF90.s
@@ -572,7 +572,7 @@ _0206C350:
add r0, r4, #0x0
ldr r1, [r2, r1]
add r0, #0x20
- bl FUN_02029F9C
+ bl Chatot_copy
mov r0, #0x1
pop {r4, pc}
.balign 4
diff --git a/arm9/asm/unk_02080C38.s b/arm9/asm/unk_02080C38.s
index 0f1630ed..36539633 100644
--- a/arm9/asm/unk_02080C38.s
+++ b/arm9/asm/unk_02080C38.s
@@ -916,7 +916,7 @@ _020812F2:
add r5, r4, #0x0
_02081304:
mov r0, #0x14
- bl FUN_02029EE4
+ bl Chatot_new
mov r1, #0x57
lsl r1, r1, #0x2
str r0, [r5, r1]
@@ -927,7 +927,7 @@ _02081304:
add r0, r1, #0x0
ldr r0, [r4, r0]
ldr r1, [r6, #0x20]
- bl FUN_02029F9C
+ bl Chatot_copy
ldr r0, [r6, #0x8]
ldr r1, [r4, #0x0]
bl CopyPokemonToPokemon
@@ -1900,7 +1900,7 @@ _02081A7C:
strb r0, [r4, r2]
pop {r3-r7, pc}
_02081A8A:
- bl FUN_02029EC4
+ bl Sav2_Chatot_sizeof
add r2, r0, #0x0
mov r0, #0x57
lsl r0, r0, #0x2
diff --git a/arm9/asm/unk_020834D0.s b/arm9/asm/unk_020834D0.s
index e86c6f2d..39062a81 100644
--- a/arm9/asm/unk_020834D0.s
+++ b/arm9/asm/unk_020834D0.s
@@ -830,7 +830,7 @@ FUN_02083AA8: ; 0x02083AA8
push {r3-r5, lr}
add r5, r2, #0x0
add r4, r3, #0x0
- bl FUN_02029EC4
+ bl Sav2_Chatot_sizeof
add r2, r0, #0x0
ldrb r1, [r5, r2]
add r0, r5, #0x0
@@ -854,7 +854,7 @@ FUN_02083AD4: ; 0x02083AD4
add r4, r0, #0x0
add r7, r1, #0x0
add r6, r2, #0x0
- bl FUN_02029EC4
+ bl Sav2_Chatot_sizeof
add r5, r0, #0x0
ldr r0, _02083B0C ; =0x00000585
add r4, r4, r0
diff --git a/arm9/global.inc b/arm9/global.inc
index 6a3b9a32..e4c26196 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -1977,16 +1977,16 @@
.extern AddIGTSeconds
.extern GetIGTHours
.extern GetIGTMinutes
-.extern FUN_02029EC4
-.extern FUN_02029ECC
-.extern FUN_02029EE4
-.extern FUN_02029EF8
-.extern FUN_02029F04
-.extern FUN_02029F08
-.extern FUN_02029F10
-.extern FUN_02029F14
-.extern FUN_02029F4C
-.extern FUN_02029F9C
+.extern Sav2_Chatot_sizeof
+.extern Sav2_Chatot_init
+.extern Chatot_new
+.extern Sav2_Chatot_get
+.extern Chatot_exists
+.extern Chatot_invalidate
+.extern Chatot_GetData
+.extern Chatot_Decode
+.extern Chatot_Encode
+.extern Chatot_copy
.extern FUN_02029FB0
.extern FUN_02029FB8
.extern FUN_02029FC8
diff --git a/arm9/modules/05/asm/module_05.s b/arm9/modules/05/asm/module_05.s
index ebf46a48..ffb9dbe2 100644
--- a/arm9/modules/05/asm/module_05.s
+++ b/arm9/modules/05/asm/module_05.s
@@ -7747,8 +7747,8 @@ _021EC544:
cmp r0, #0
bne _021EC572
add r0, r7, #0
- bl FUN_02029EF8
- bl FUN_02029F08
+ bl Sav2_Chatot_get
+ bl Chatot_invalidate
_021EC572:
add sp, #0x24
pop {r4, r5, r6, r7, pc}
diff --git a/arm9/modules/14/asm/module_14.s b/arm9/modules/14/asm/module_14.s
index b95ab0d6..65c14608 100644
--- a/arm9/modules/14/asm/module_14.s
+++ b/arm9/modules/14/asm/module_14.s
@@ -122,8 +122,8 @@ StoragePC_Overlay_Teardown: ; 0x021D75B8
mov r0, #0x47
lsl r0, r0, #2
ldr r0, [r4, r0]
- bl FUN_02029EF8
- bl FUN_02029F08
+ bl Sav2_Chatot_get
+ bl Chatot_invalidate
_021D75DE:
mov r0, #0x45
lsl r0, r0, #2
diff --git a/arm9/modules/71/asm/module_71.s b/arm9/modules/71/asm/module_71.s
index b9d99cf4..4b488741 100644
--- a/arm9/modules/71/asm/module_71.s
+++ b/arm9/modules/71/asm/module_71.s
@@ -1161,7 +1161,7 @@ _0222DF74:
b _0222E0E8
_0222DF80:
ldr r0, [r4, #4]
- bl FUN_02029EF8
+ bl Sav2_Chatot_get
bl MOD71_0222F528
ldr r0, [r4, #0x4c]
add r0, r0, #1
@@ -3446,7 +3446,7 @@ MOD71_0222F264: ; 0x0222F264
cmp r0, r1
bne _0222F2AE
ldr r0, [r4, #4]
- bl FUN_02029EF8
+ bl Sav2_Chatot_get
mov r1, #0
mov r2, #0x64
add r3, r1, #0
@@ -6379,8 +6379,8 @@ _02230A40:
cmp r0, #0
bne _02230A98
ldr r0, [r5, #0x10]
- bl FUN_02029EF8
- bl FUN_02029F08
+ bl Sav2_Chatot_get
+ bl Chatot_invalidate
_02230A98:
ldr r0, [r5, #0x10]
add r1, r4, #0
diff --git a/arm9/modules/80/asm/module_80.s b/arm9/modules/80/asm/module_80.s
index 9abe50f0..512cdc80 100644
--- a/arm9/modules/80/asm/module_80.s
+++ b/arm9/modules/80/asm/module_80.s
@@ -16126,8 +16126,8 @@ _02235590:
bne _022355DC
ldr r0, [r5]
ldr r0, [r0, #0x20]
- bl FUN_02029EF8
- bl FUN_02029F08
+ bl Sav2_Chatot_get
+ bl Chatot_invalidate
_022355DC:
cmp r6, #0
beq _022355EA
diff --git a/arm9/src/main.c b/arm9/src/main.c
index c05fa1f3..863cb654 100644
--- a/arm9/src/main.c
+++ b/arm9/src/main.c
@@ -33,7 +33,7 @@ extern void GF_InitRTCWork(void);
extern void FUN_02002C14(void);
extern void FUN_02002C50(int, int);
extern struct SaveBlock2 * SaveBlock2_new(void);
-extern void * FUN_02029EF8(struct SaveBlock2 *);
+extern void * Sav2_Chatot_get(struct SaveBlock2 *);
extern int FUN_020337E8(int);
extern void FUN_02034188(int, int);
extern int FUN_020227FC(struct SaveBlock2 *);
@@ -73,7 +73,7 @@ THUMB_FUNC void NitroMain(void)
FUN_02002C50(3, 3);
UNK_02016FA8.unk10 = -1;
UNK_02016FA8.unk18 = SaveBlock2_new();
- InitSoundData(FUN_02029EF8(UNK_02016FA8.unk18), Sav2_PlayerData_GetOptionsAddr(UNK_02016FA8.unk18));
+ InitSoundData(Sav2_Chatot_get(UNK_02016FA8.unk18), Sav2_PlayerData_GetOptionsAddr(UNK_02016FA8.unk18));
Init_Timer3();
if (FUN_020337E8(3) == 3)
FUN_02034188(3, 0);
diff --git a/arm9/src/sav_chatot.c b/arm9/src/sav_chatot.c
index f2707821..7b240a99 100644
--- a/arm9/src/sav_chatot.c
+++ b/arm9/src/sav_chatot.c
@@ -1,49 +1,98 @@
#include "global.h"
#include "MI_memory.h"
#include "heap.h"
-#include "save_block_2.h"
+#include "sav_chatot.h"
-struct SaveChatotSoundClip
-{
- // TODO: Fill this in
- BOOL exists;
- s8 data[1000];
-};
-
-THUMB_FUNC u32 FUN_02029EC4(void)
+THUMB_FUNC u32 Sav2_Chatot_sizeof(void)
{
return sizeof(struct SaveChatotSoundClip);
}
-THUMB_FUNC void FUN_02029ECC(struct SaveChatotSoundClip * chatot)
+THUMB_FUNC void Sav2_Chatot_init(struct SaveChatotSoundClip * chatot)
{
MIi_CpuClear32(0, chatot, sizeof(struct SaveChatotSoundClip));
chatot->exists = FALSE;
}
-THUMB_FUNC struct SaveChatotSoundClip * FUN_02029EE4(u32 heap_id)
+THUMB_FUNC struct SaveChatotSoundClip * Chatot_new(u32 heap_id)
{
struct SaveChatotSoundClip * ret = (struct SaveChatotSoundClip *)AllocFromHeap(heap_id, sizeof(struct SaveChatotSoundClip));
- FUN_02029ECC(ret);
+ Sav2_Chatot_init(ret);
return ret;
}
-THUMB_FUNC struct SaveChatotSoundClip * FUN_02029EF8(struct SaveBlock2 * sav2)
+THUMB_FUNC struct SaveChatotSoundClip * Sav2_Chatot_get(struct SaveBlock2 * sav2)
{
return (struct SaveChatotSoundClip *) SavArray_get(sav2, 22);
}
-THUMB_FUNC u32 FUN_02029F04(struct SaveChatotSoundClip * chatot)
+THUMB_FUNC BOOL Chatot_exists(struct SaveChatotSoundClip * chatot)
{
return chatot->exists;
}
-THUMB_FUNC void FUN_02029F08(struct SaveChatotSoundClip * chatot)
+THUMB_FUNC void Chatot_invalidate(struct SaveChatotSoundClip * chatot)
{
chatot->exists = FALSE;
}
-THUMB_FUNC s8 * FUN_02029F10(struct SaveChatotSoundClip * chatot)
+THUMB_FUNC s8 * Chatot_GetData(struct SaveChatotSoundClip * chatot)
{
return chatot->data;
}
+
+static inline s8 transform(u8 value)
+{
+ return (s8)(value - 8);
+}
+
+THUMB_FUNC void Chatot_Decode(s8 * dest, const s8 * data)
+{
+ s32 i;
+ s32 dest_i;
+ u8 val;
+ s8 val2;
+
+ for (dest_i = 0, i = 0; i < 1000; i++, dest_i += 2)
+ {
+ val = (u8)(data[i] & 0xF);
+ val2 = transform(val);
+ dest[dest_i + 0] = (s8)(val2 << 4);
+ val = (u8)(data[i] >> 4);
+ val2 = transform(val);
+ dest[dest_i + 1] = (s8)(val2 << 4);
+ }
+}
+
+static inline u8 untransform(s8 val)
+{
+ val /= 16;
+ return (u8)(val + 8);
+}
+
+THUMB_FUNC void Chatot_Encode(struct SaveChatotSoundClip * chatot, const s8 * data)
+{
+ s32 src_i;
+ s32 i = 0;
+ u8 val2;
+ s8 val;
+ chatot->exists = TRUE;
+
+ for (src_i = 0; src_i < 2000; src_i += 2)
+ {
+ val = data[src_i + 0];
+ val2 = untransform(val);
+ chatot->data[i] = (s8)val2;
+
+ val = data[src_i + 1];
+ val2 = untransform(val);
+ chatot->data[i] |= val2 << 4;
+
+ i++;
+ }
+}
+
+THUMB_FUNC void Chatot_copy(struct SaveChatotSoundClip * dest, const struct SaveChatotSoundClip * src)
+{
+ MIi_CpuCopyFast(src, dest, sizeof(struct SaveChatotSoundClip));
+}
diff --git a/arm9/src/save_arrays.c b/arm9/src/save_arrays.c
index 8520f2c1..f4b18b86 100644
--- a/arm9/src/save_arrays.c
+++ b/arm9/src/save_arrays.c
@@ -15,6 +15,7 @@
#include "seal.h"
#include "unk_020139D8.h"
#include "unk_02024E64.h"
+#include "sav_chatot.h"
extern u32 FUN_0202AC20(void);
extern u32 FUN_02034D7C(void);
@@ -26,7 +27,7 @@ extern u32 FUN_02028054(void);
extern u32 FUN_02028980(void);
extern u32 FUN_02029A84(void);
extern u32 FUN_02029FB0(void);
-extern u32 FUN_02029EC4(void);
+extern u32 Sav2_Chatot_sizeof(void);
extern u32 FUN_0202A89C(void);
extern u32 FUN_0202A8F4(void);
extern u32 FUN_0202A924(void);
@@ -47,7 +48,6 @@ extern void FUN_0202805C(void *);
extern void FUN_02028994(void *);
extern void FUN_02029A8C(void *);
extern void FUN_02029FB8(void *);
-extern void FUN_02029ECC(void *);
extern void FUN_0202A8A4(void *);
extern void FUN_0202A8F8(void *);
extern void FUN_0202A92C(void *);
@@ -87,7 +87,7 @@ const struct SaveChunkHeader UNK_020EE700[] = {
{ 19, 0, (SAVSIZEFN)FUN_02029A84, (SAVINITFN)FUN_02029A8C },
{ 20, 0, (SAVSIZEFN)FUN_02029FB0, (SAVINITFN)FUN_02029FB8 },
{ 21, 0, (SAVSIZEFN)Sav2_SealCase_sizeof, (SAVINITFN)Sav2_SealCase_init },
- { 22, 0, (SAVSIZEFN)FUN_02029EC4, (SAVINITFN)FUN_02029ECC },
+ { 22, 0, (SAVSIZEFN)Sav2_Chatot_sizeof, (SAVINITFN)Sav2_Chatot_init },
{ 23, 0, (SAVSIZEFN)FUN_0202A89C, (SAVINITFN)FUN_0202A8A4 },
{ 24, 0, (SAVSIZEFN)FUN_0202A8F4, (SAVINITFN)FUN_0202A8F8 },
{ 25, 0, (SAVSIZEFN)FUN_0202A924, (SAVINITFN)FUN_0202A92C },
diff --git a/arm9/src/scrcmd_sound.c b/arm9/src/scrcmd_sound.c
index 5acaae1e..df611ec7 100644
--- a/arm9/src/scrcmd_sound.c
+++ b/arm9/src/scrcmd_sound.c
@@ -1,6 +1,6 @@
#include "scrcmd.h"
-extern void* FUN_02029EF8(struct SaveBlock2* sav2);
+extern void* Sav2_Chatot_get(struct SaveBlock2* sav2);
extern u32 FUN_02005D20(void *);
extern void FUN_02005E6C(void *);
extern void FUN_0200433C(u32, u32, u32);
@@ -203,7 +203,7 @@ THUMB_FUNC BOOL ScrCmd_Unk0059(struct ScriptContext* ctx)
{
u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
- void* unk = FUN_02029EF8(ctx->unk80->saveBlock2);
+ void* unk = Sav2_Chatot_get(ctx->unk80->saveBlock2);
if (FUN_02005D20(unk) == 1)
{
*ret_ptr = 1;
@@ -241,7 +241,7 @@ THUMB_FUNC BOOL ScrCmd_Unk005B(struct ScriptContext* ctx)
THUMB_FUNC BOOL ScrCmd_Unk005C(struct ScriptContext* ctx)
{
- void* unk = FUN_02029EF8(ctx->unk80->saveBlock2);
+ void* unk = Sav2_Chatot_get(ctx->unk80->saveBlock2);
FUN_02005E6C(unk);
return TRUE;
diff --git a/include/sav_chatot.h b/include/sav_chatot.h
new file mode 100644
index 00000000..858423c5
--- /dev/null
+++ b/include/sav_chatot.h
@@ -0,0 +1,24 @@
+#ifndef POKEDIAMOND_SAV_CHATOT_H
+#define POKEDIAMOND_SAV_CHATOT_H
+
+#include "save_block_2.h"
+
+struct SaveChatotSoundClip
+{
+ // TODO: Fill this in
+ BOOL exists;
+ s8 data[1000];
+};
+
+u32 Sav2_Chatot_sizeof(void);
+void Sav2_Chatot_init(struct SaveChatotSoundClip * chatot);
+struct SaveChatotSoundClip * Chatot_new(u32 heap_id);
+struct SaveChatotSoundClip * Sav2_Chatot_get(struct SaveBlock2 * sav2);
+BOOL Chatot_exists(struct SaveChatotSoundClip * chatot);
+void Chatot_invalidate(struct SaveChatotSoundClip * chatot);
+s8 * Chatot_GetData(struct SaveChatotSoundClip * chatot);
+void Chatot_Decode(s8 * dest, const s8 * data);
+void Chatot_Encode(struct SaveChatotSoundClip * chatot, const s8 * data);
+void Chatot_copy(struct SaveChatotSoundClip * dest, const struct SaveChatotSoundClip * src);
+
+#endif //POKEDIAMOND_SAV_CHATOT_H