diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2020-06-19 16:57:44 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2020-06-19 16:57:44 -0400 |
commit | 06a7bf4c8c36af699b9882623d2642baf0269bf3 (patch) | |
tree | 26a68c3112fe55f8cbb48f4749e5d0635925024b | |
parent | 1c13e2f57b53b3e4e5f9daac42ec4baadbb4c60b (diff) |
msgdata.c through DecryptMessageDirect
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | arm9/Makefile | 2 | ||||
-rw-r--r-- | arm9/arm9.lcf | 1 | ||||
-rw-r--r-- | arm9/asm/unk_0200A384.s | 84 | ||||
-rw-r--r-- | arm9/src/msgdata.c | 59 | ||||
-rw-r--r-- | files/wazaeffect/we.arc | bin | 254028 -> 0 bytes | |||
-rw-r--r-- | include/msg_data.h | 13 | ||||
-rw-r--r-- | tools/csv2bin/.gitignore | 1 |
8 files changed, 79 insertions, 83 deletions
@@ -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 Binary files differdeleted file mode 100644 index 6642630a..00000000 --- a/files/wazaeffect/we.arc +++ /dev/null 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 |