summaryrefslogtreecommitdiff
path: root/arm9/src
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/src')
-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
4 files changed, 73 insertions, 24 deletions
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;