diff options
author | Akira Akashi <rubenru09@aol.com> | 2021-05-24 15:01:06 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-24 15:01:06 +0100 |
commit | febbf5dc3d673ae40df7b6c545a40e945e6eda17 (patch) | |
tree | 6dee393a1ec73282ca34a0a1f0526359630c2855 /arm9/src/sav_chatot.c | |
parent | a978faa0d8c222c5fce4db4f0dad19ed235eecfc (diff) | |
parent | 3188237ddaf9aefcbea90967a15df7b78fe8e336 (diff) |
Merge pull request #386 from PikalaxALT/pikalax_work
Decompile code related to Chatot's data in the save block
Diffstat (limited to 'arm9/src/sav_chatot.c')
-rw-r--r-- | arm9/src/sav_chatot.c | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/arm9/src/sav_chatot.c b/arm9/src/sav_chatot.c new file mode 100644 index 00000000..7b240a99 --- /dev/null +++ b/arm9/src/sav_chatot.c @@ -0,0 +1,98 @@ +#include "global.h"
+#include "MI_memory.h"
+#include "heap.h"
+#include "sav_chatot.h"
+
+THUMB_FUNC u32 Sav2_Chatot_sizeof(void)
+{
+ return sizeof(struct SaveChatotSoundClip);
+}
+
+THUMB_FUNC void Sav2_Chatot_init(struct SaveChatotSoundClip * chatot)
+{
+ MIi_CpuClear32(0, chatot, sizeof(struct SaveChatotSoundClip));
+ chatot->exists = FALSE;
+}
+
+THUMB_FUNC struct SaveChatotSoundClip * Chatot_new(u32 heap_id)
+{
+ struct SaveChatotSoundClip * ret = (struct SaveChatotSoundClip *)AllocFromHeap(heap_id, sizeof(struct SaveChatotSoundClip));
+ Sav2_Chatot_init(ret);
+ return ret;
+}
+
+THUMB_FUNC struct SaveChatotSoundClip * Sav2_Chatot_get(struct SaveBlock2 * sav2)
+{
+ return (struct SaveChatotSoundClip *) SavArray_get(sav2, 22);
+}
+
+THUMB_FUNC BOOL Chatot_exists(struct SaveChatotSoundClip * chatot)
+{
+ return chatot->exists;
+}
+
+THUMB_FUNC void Chatot_invalidate(struct SaveChatotSoundClip * chatot)
+{
+ chatot->exists = FALSE;
+}
+
+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));
+}
|