summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2020-06-19 16:57:44 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2020-06-19 16:57:44 -0400
commit06a7bf4c8c36af699b9882623d2642baf0269bf3 (patch)
tree26a68c3112fe55f8cbb48f4749e5d0635925024b
parent1c13e2f57b53b3e4e5f9daac42ec4baadbb4c60b (diff)
msgdata.c through DecryptMessageDirect
-rw-r--r--Makefile2
-rw-r--r--arm9/Makefile2
-rw-r--r--arm9/arm9.lcf1
-rw-r--r--arm9/asm/unk_0200A384.s84
-rw-r--r--arm9/src/msgdata.c59
-rw-r--r--files/wazaeffect/we.arcbin254028 -> 0 bytes
-rw-r--r--include/msg_data.h13
-rw-r--r--tools/csv2bin/.gitignore1
8 files changed, 79 insertions, 83 deletions
diff --git a/Makefile b/Makefile
index 63a5a1a7..e82738fd 100644
--- a/Makefile
+++ b/Makefile
@@ -175,7 +175,7 @@ SBINFILES = $(BINFILES:%.bin=%.sbin)
##################### Compiler Options #######################
-MWCCVERSION = 2.0/base
+MWCCVERSION = 2.0/sp1
CROSS := arm-none-eabi-
diff --git a/arm9/Makefile b/arm9/Makefile
index cb8eba06..17033200 100644
--- a/arm9/Makefile
+++ b/arm9/Makefile
@@ -158,7 +158,7 @@ OVERLAYS := \
##################### Compiler Options #######################
-MWCCVERSION = 2.0/base
+MWCCVERSION = 2.0/sp1
TOOLS_DIR = ../tools
CROSS := arm-none-eabi-
diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf
index 8150b54e..594783bf 100644
--- a/arm9/arm9.lcf
+++ b/arm9/arm9.lcf
@@ -144,6 +144,7 @@ SECTIONS {
unk_02008AA4.o (.text)
unk_02008DEC.o (.text)
unk_02009EAC.o (.text)
+ msgdata.o (.text)
unk_0200A384.o (.text)
unk_0200AA80.o (.text)
unk_0200BA78.o (.text)
diff --git a/arm9/asm/unk_0200A384.s b/arm9/asm/unk_0200A384.s
index 0584dfbf..26e615af 100644
--- a/arm9/asm/unk_0200A384.s
+++ b/arm9/asm/unk_0200A384.s
@@ -3,87 +3,9 @@
.text
- thumb_func_start LoadSingleElementFromNarc
-LoadSingleElementFromNarc: ; 0x0200A384
- ldr r3, _0200A388 ; =AllocAndReadWholeNarcMemberByIdPair
- bx r3
- .balign 4
-_0200A388: .word AllocAndReadWholeNarcMemberByIdPair
-
- thumb_func_start FreeMsgDataRawData
-FreeMsgDataRawData: ; 0x0200A38C
- ldr r3, _0200A390 ; =FreeToHeap
- bx r3
- .balign 4
-_0200A390: .word FreeToHeap
-
- thumb_func_start DecryptMessageDirect
-DecryptMessageDirect: ; 0x0200A394
- push {r3-r7, lr}
- sub sp, #0x8
- add r3, r0, #0x0
- ldrh r0, [r3, #0x0]
- add r5, r1, #0x0
- add r4, r2, #0x0
- cmp r5, r0
- bhs _0200A404
- lsl r0, r5, #0x3
- add r0, r3, r0
- ldr r2, [r0, #0x4]
- ldr r1, [r0, #0x8]
- ldr r6, _0200A40C ; =0x000002FD
- str r2, [sp, #0x0]
- str r1, [sp, #0x4]
- ldrh r0, [r3, #0x2]
- add r7, r5, #0x1
- mul r6, r0
- add r0, r7, #0x0
- mul r0, r6
- lsl r0, r0, #0x10
- lsr r6, r0, #0x10
- lsl r0, r6, #0x10
- orr r0, r6
- eor r2, r0
- eor r0, r1
- str r0, [sp, #0x4]
- str r2, [sp, #0x0]
- add r1, r3, r2
- add r0, r4, #0x0
- add r2, sp, #0x0
- bl CopyEncryptedMessage16
- ldr r2, [sp, #0x4]
- ldr r0, _0200A410 ; =0x00091BD3
- add r1, r7, #0x0
- mul r0, r1
- lsl r0, r0, #0x10
- lsr r5, r0, #0x10
- sub r3, r2, #0x1
- cmp r2, #0x0
- beq _0200A408
- ldr r0, _0200A414 ; =0x0000493D
-_0200A3EA:
- ldrh r1, [r4, #0x0]
- eor r1, r5
- strh r1, [r4, #0x0]
- add r1, r5, r0
- lsl r1, r1, #0x10
- lsr r5, r1, #0x10
- add r1, r3, #0x0
- add r4, r4, #0x2
- sub r3, r3, #0x1
- cmp r1, #0x0
- bne _0200A3EA
- add sp, #0x8
- pop {r3-r7, pc}
-_0200A404:
- bl ErrorHandling
-_0200A408:
- add sp, #0x8
- pop {r3-r7, pc}
- .balign 4
-_0200A40C: .word 0x000002FD
-_0200A410: .word 0x00091BD3
-_0200A414: .word 0x0000493D
+.extern LoadSingleElementFromNarc
+.extern FreeMsgDataRawData
+.extern DecryptMessageDirect
thumb_func_start DecryptMessageViaNewNarcHandle
DecryptMessageViaNewNarcHandle: ; 0x0200A418
diff --git a/arm9/src/msgdata.c b/arm9/src/msgdata.c
new file mode 100644
index 00000000..b3a1c027
--- /dev/null
+++ b/arm9/src/msgdata.c
@@ -0,0 +1,59 @@
+#include "global.h"
+#include "filesystem.h"
+#include "msg_data.h"
+#include "heap.h"
+
+#pragma thumb on
+
+void * LoadSingleElementFromNarc(NarcId narc_id, s32 file_id, u32 heap_id);
+void FreeMsgDataRawData(void * data);
+void CopyEncryptedMessage16(u16 * dest, const u16 * src, struct UnkStruct_200A394_4 * param);
+void DecryptMessageDirect(struct UnkStruct_200A394 * r3, u32 r5, u16 * r4);
+
+void * LoadSingleElementFromNarc(NarcId narc_id, s32 file_id, u32 heap_id)
+{
+ return AllocAndReadWholeNarcMemberByIdPair(narc_id, file_id, heap_id);
+}
+
+void FreeMsgDataRawData(void * data)
+{
+ FreeToHeap(data);
+}
+
+inline static void Decrypt1(struct UnkStruct_200A394_4 * arg0, u32 arg1, u32 seed)
+{
+ seed = seed * 765 * (arg1 + 1) & 0xffff;
+ seed |= seed << 16;
+ arg0->unk0 ^= seed;
+ arg0->unk4 ^= seed;
+}
+
+inline static void Decrypt2(u16 * arg0, u32 count, u32 arg2)
+{
+ u16 seed = (arg2 + 1) * 596947;
+
+ while (count-- > 0)
+ {
+ *arg0 ^= seed;
+ seed += 18749;
+ arg0++;
+ }
+}
+
+void DecryptMessageDirect(struct UnkStruct_200A394 * r3, u32 r5, u16 * r4)
+{
+ struct UnkStruct_200A394_4 sp0;
+
+ if (r5 < r3->unk0)
+ {
+ sp0 = r3->unk4[r5];
+ Decrypt1(&sp0, r5, r3->unk2);
+
+ CopyEncryptedMessage16(r4, (const u16 *)((u8 *)r3 + sp0.unk0), &sp0);
+ Decrypt2(r4, sp0.unk4, r5);
+ }
+ else
+ {
+ GF_ASSERT(0);
+ }
+}
diff --git a/files/wazaeffect/we.arc b/files/wazaeffect/we.arc
deleted file mode 100644
index 6642630a..00000000
--- a/files/wazaeffect/we.arc
+++ /dev/null
Binary files differ
diff --git a/include/msg_data.h b/include/msg_data.h
index debacc79..b03fcdb6 100644
--- a/include/msg_data.h
+++ b/include/msg_data.h
@@ -13,6 +13,19 @@ struct MsgData
} data;
};
+struct UnkStruct_200A394_4
+{
+ u32 unk0;
+ u32 unk4;
+};
+
+struct UnkStruct_200A394
+{
+ u16 unk0;
+ u16 unk2;
+ struct UnkStruct_200A394_4 unk4[1];
+};
+
struct MsgData * NewMsgDataFromNarc(u32 type, u32 narcId, u32 msgId, u32 heapno);
u16 * FUN_0200A914(struct MsgData *, u32);
void DestroyMsgData(struct MsgData *);
diff --git a/tools/csv2bin/.gitignore b/tools/csv2bin/.gitignore
new file mode 100644
index 00000000..acf9f588
--- /dev/null
+++ b/tools/csv2bin/.gitignore
@@ -0,0 +1 @@
+csv2bin