summaryrefslogtreecommitdiff
path: root/arm9/src
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/src')
-rw-r--r--arm9/src/unk_02006D98_c.c575
1 files changed, 573 insertions, 2 deletions
diff --git a/arm9/src/unk_02006D98_c.c b/arm9/src/unk_02006D98_c.c
index 0e39671b..7a5b48f5 100644
--- a/arm9/src/unk_02006D98_c.c
+++ b/arm9/src/unk_02006D98_c.c
@@ -5,6 +5,7 @@
#include "heap.h"
#include "poketool/pokegra/otherpoke.naix"
#include "registers.h"
+#include "mod63_021DB450.h"
struct UnkStruct3 {
u32 unk00[8];
@@ -152,7 +153,7 @@ struct UnkStruct2 {
u8 unk59;
u8 unk5A;
u8 unk5B;
- u8 unk5C[0xC];
+ u8 unk5C[10];
void (*unk68)(struct UnkStruct2 *, void *);
u16 unk6C_0:2;
u16 unk6C_2:1;
@@ -165,7 +166,11 @@ struct UnkStruct2 {
s16 unk72;
s16 unk74;
s16 unk76;
- u8 unk78[0x20];
+ u8 unk78[0xc];
+ struct UnkStruct2_sub {
+ s8 unk0;
+ u8 unk1;
+ } unk84[10];
};
@@ -267,7 +272,9 @@ extern void FUN_02007F48(struct UnkStruct2 *);
extern void NNS_G2dDrawSpriteFast(s16 param0, s16 param1, int param2, int param3, int param4, int param5, int param6, int param7, int param8);
+#ifdef NONMATCHING
+// mostly matching, only 2 register writes messed up
THUMB_FUNC void FUN_02006ED4(struct UnkStruct1 *param0) {
s32 arg3;
s32 arg4;
@@ -279,6 +286,7 @@ THUMB_FUNC void FUN_02006ED4(struct UnkStruct1 *param0) {
reg_G3_MTX_PUSH = 0;
+ // this is all shuffled however I try
reg_G3_TEXIMAGE_PARAM = (param0->unk29C >> 3) | (param0->unk274 << 26) | (1 << 30) | (param0->unk26C << 20) | (param0->unk270 << 23) | (param0->unk27C << 29);
for (int st18 = 0; st18 < 4; st18++) {
@@ -342,7 +350,9 @@ THUMB_FUNC void FUN_02006ED4(struct UnkStruct1 *param0) {
reg_G3_SPE_EMI = 0x4210;
+
{
+ // shuffled there as well
u32 r1 = param0->unk000[st18].unk00_1;
u32 r0 = param0->unk000[st18].unk54_2;
reg_G3_POLYGON_ATTR = 0xc0 | (r1<<24) | (r0<<16);
@@ -438,3 +448,564 @@ THUMB_FUNC void FUN_02006ED4(struct UnkStruct1 *param0) {
reg_G3_MTX_POP = 1;
}
+#else
+asm void FUN_02006ED4(struct UnkStruct1 *param0) {
+ // clang-format off
+ push {r3-r7, lr}
+ sub sp, #0x20
+ add r5, r0, #0x0
+ bl FUN_020082A8
+ add r0, r5, #0x0
+ bl FUN_020086F4
+ bl NNS_G3dGeFlushBuffer
+ mov r6, #0x9f
+ mov r0, #0x0
+ ldr r4, =0x04000444
+ lsl r6, r6, #0x2
+ str r0, [r4, #0x0]
+ str r0, [sp, #0x18]
+ add r0, r6, #0x0
+ sub r0, #0xc
+ ldr r1, [r5, r0]
+ add r3, r6, #0x0
+ ldr r2, [r5, r6]
+ add r0, r6, #0x0
+ sub r3, #0x8
+ add r6, #0x20
+ ldr r3, [r5, r3]
+ ldr r6, [r5, r6]
+ sub r0, #0x10
+ ldr r0, [r5, r0]
+ lsr r6, r6, #0x3
+ lsl r3, r3, #0x1a
+ orr r6, r3
+ mov r3, #0x1
+ lsl r3, r3, #0x1e
+ lsl r0, r0, #0x14
+ orr r3, r6
+ lsl r1, r1, #0x17
+ orr r0, r3
+ lsl r2, r2, #0x1d
+ orr r0, r1
+ orr r0, r2
+ str r0, [r4, #0x64]
+ ldr r0, [sp, #0x18]
+ add r4, r5, #0x0
+ str r0, [sp, #0x14]
+ ldr r0, =UNK_020ECD4C
+ str r0, [sp, #0x1c]
+_02006F30:
+ ldr r0, [r4, #0x0]
+ lsl r0, r0, #0x1f
+ lsr r0, r0, #0x1f
+ beq _02006F46
+ ldr r0, [r4, #0x54]
+ lsl r1, r0, #0x1f
+ lsr r1, r1, #0x1f
+ bne _02006F46
+ lsl r0, r0, #0x14
+ lsr r0, r0, #0x1f
+ beq _02006F48
+_02006F46:
+ b _020072BC
+_02006F48:
+ ldr r2, [r4, #0x68]
+ cmp r2, #0x0
+ beq _02006F56
+ add r1, r4, #0x0
+ add r0, r4, #0x0
+ add r1, #0x24
+ blx r2
+_02006F56:
+ bl NNS_G3dGeFlushBuffer
+ ldr r0, =0x000002E3
+ ldrb r0, [r5, r0]
+ cmp r0, #0x1
+ beq _02006F68
+ ldr r0, =0x04000454
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+_02006F68:
+ add r0, r4, #0x0
+ bl FUN_02007F48
+ mov r0, #0x9d
+ lsl r0, r0, #0x2
+ ldr r0, [r5, r0]
+ cmp r0, #0x2
+ bne _02006F7C
+ mov r0, #0x1
+ b _02006F7E
+_02006F7C:
+ mov r0, #0x0
+_02006F7E:
+ mov r1, #0xa9
+ lsl r1, r1, #0x2
+ ldr r2, [r5, r1]
+ ldr r1, [sp, #0x14]
+ add r2, r2, r1
+ mov r1, #0x4
+ sub r0, r1, r0
+ add r1, r2, #0x0
+ lsr r1, r0
+ ldr r0, =0x040004AC
+ str r1, [r0, #0x0]
+ ldr r0, [r4, #0x28]
+ lsl r1, r0, #0xc
+ mov r0, #0x26
+ ldrsh r2, [r4, r0]
+ mov r0, #0x42
+ ldrsh r0, [r4, r0]
+ add r0, r2, r0
+ mov r2, #0x24
+ ldrsh r3, [r4, r2]
+ mov r2, #0x40
+ ldrsh r2, [r4, r2]
+ lsl r0, r0, #0xc
+ add r2, r3, r2
+ lsl r3, r2, #0xc
+ ldr r2, =0x04000470
+ str r3, [r2, #0x0]
+ str r0, [r2, #0x0]
+ add r0, r2, #0x0
+ str r1, [r0, #0x0]
+ ldrh r0, [r4, #0x38]
+ asr r0, r0, #0x4
+ lsl r1, r0, #0x2
+ ldr r0, =FX_SinCosTable_
+ add r2, r0, r1
+ ldrsh r0, [r0, r1]
+ mov r1, #0x2
+ ldrsh r1, [r2, r1]
+ bl G3_RotX
+ ldrh r0, [r4, #0x3a]
+ asr r0, r0, #0x4
+ lsl r1, r0, #0x2
+ ldr r0, =FX_SinCosTable_
+ add r2, r0, r1
+ ldrsh r0, [r0, r1]
+ mov r1, #0x2
+ ldrsh r1, [r2, r1]
+ bl G3_RotY
+ ldrh r0, [r4, #0x3c]
+ asr r0, r0, #0x4
+ lsl r1, r0, #0x2
+ ldr r0, =FX_SinCosTable_
+ add r2, r0, r1
+ ldrsh r0, [r0, r1]
+ mov r1, #0x2
+ ldrsh r1, [r2, r1]
+ bl G3_RotZ
+ ldr r0, [r4, #0x28]
+ lsl r0, r0, #0xc
+ neg r1, r0
+ mov r0, #0x26
+ ldrsh r2, [r4, r0]
+ mov r0, #0x42
+ ldrsh r0, [r4, r0]
+ add r0, r2, r0
+ mov r2, #0x24
+ ldrsh r3, [r4, r2]
+ mov r2, #0x40
+ ldrsh r2, [r4, r2]
+ lsl r0, r0, #0xc
+ neg r0, r0
+ add r2, r3, r2
+ lsl r2, r2, #0xc
+ neg r3, r2
+ ldr r2, =0x04000470
+ str r3, [r2, #0x0]
+ str r0, [r2, #0x0]
+ add r0, r2, #0x0
+ str r1, [r0, #0x0]
+ ldr r3, [r4, #0x50]
+ lsl r0, r3, #0x11
+ lsr r0, r0, #0x1b
+ lsl r2, r3, #0x16
+ lsl r1, r0, #0xa
+ lsl r0, r3, #0x1b
+ lsr r2, r2, #0x1b
+ lsr r0, r0, #0x1b
+ lsl r2, r2, #0x5
+ orr r0, r2
+ orr r0, r1
+ lsl r0, r0, #0x10
+ lsr r2, r0, #0x10
+ lsl r0, r3, #0x2
+ lsr r0, r0, #0x1b
+ lsl r1, r0, #0xa
+ lsl r0, r3, #0xc
+ lsl r3, r3, #0x7
+ lsr r3, r3, #0x1b
+ lsr r0, r0, #0x1b
+ lsl r3, r3, #0x5
+ orr r0, r3
+ orr r0, r1
+ lsl r0, r0, #0x10
+ lsr r0, r0, #0x10
+ lsl r0, r0, #0x10
+ add r1, r2, #0x0
+ orr r1, r0
+ mov r0, #0x2
+ lsl r0, r0, #0xe
+ orr r1, r0
+ ldr r0, =0x040004C0
+ str r1, [r0, #0x0]
+ ldr r1, =0x00004210
+ add r0, r0, #0x4
+ str r1, [r0, #0x0]
+ ldr r1, [r4, #0x0]
+ ldr r0, [r4, #0x54]
+ lsl r1, r1, #0x19
+ lsl r0, r0, #0x19
+ lsr r1, r1, #0x1a
+ lsr r0, r0, #0x1b
+ lsl r2, r1, #0x18
+ mov r1, #0xc0
+ lsl r0, r0, #0x10
+ orr r1, r2
+ orr r1, r0
+ ldr r0, =0x040004A4
+ str r1, [r0, #0x0]
+ ldr r0, [r4, #0x54]
+ lsl r0, r0, #0x1e
+ lsr r0, r0, #0x1f
+ beq _02007104
+ add r0, r4, #0x0
+ add r0, #0x5b
+ ldrb r0, [r0, #0x0]
+ add r2, r4, #0x0
+ add r2, #0x44
+ lsl r1, r0, #0x4
+ ldr r0, [sp, #0x1c]
+ ldrb r3, [r2, #0x0]
+ add r0, r0, r1
+ ldr r2, [sp, #0x1c]
+ ldr r0, [r0, #0x4]
+ ldr r1, [r2, r1]
+ add r6, r3, r1
+ add r1, r4, #0x0
+ add r1, #0x46
+ ldrb r1, [r1, #0x0]
+ mov r12, r1
+ add r1, r4, #0x0
+ add r1, #0x45
+ ldrb r2, [r1, #0x0]
+ add r1, r2, r0
+ add r0, r4, #0x0
+ add r0, #0x47
+ ldrb r7, [r0, #0x0]
+ mov r0, r12
+ add r0, r0, r6
+ str r7, [sp, #0x0]
+ str r6, [sp, #0x4]
+ str r1, [sp, #0x8]
+ str r0, [sp, #0xc]
+ add r0, r7, r1
+ str r0, [sp, #0x10]
+ mov r1, #0x24
+ ldrsh r1, [r4, r1]
+ mov r0, #0x2c
+ ldrsh r0, [r4, r0]
+ sub r1, #0x28
+ add r1, r1, r3
+ add r0, r0, r1
+ mov r3, #0x26
+ ldrsh r3, [r4, r3]
+ mov r1, #0x2e
+ lsl r0, r0, #0x10
+ sub r3, #0x28
+ add r2, r3, r2
+ ldrsh r1, [r4, r1]
+ ldr r3, [r4, #0x28]
+ asr r0, r0, #0x10
+ add r2, r1, r2
+ mov r1, #0x6e
+ ldrsb r1, [r4, r1]
+ sub r1, r2, r1
+ ldr r2, [r4, #0x30]
+ lsl r1, r1, #0x10
+ add r2, r3, r2
+ asr r1, r1, #0x10
+ mov r3, r12
+ bl NNS_G2dDrawSpriteFast
+ b _02007174
+_02007104:
+ mov r0, #0x34
+ ldrsh r1, [r4, r0]
+ mov r0, #0x50
+ ldr r2, [sp, #0x1c]
+ mul r0, r1
+ asr r3, r0, #0x8
+ mov r0, #0x36
+ ldrsh r1, [r4, r0]
+ mov r0, #0x50
+ ldr r6, [sp, #0x1c]
+ mul r0, r1
+ asr r1, r0, #0x8
+ add r0, r4, #0x0
+ add r0, #0x5b
+ ldrb r0, [r0, #0x0]
+ lsl r0, r0, #0x4
+ str r1, [sp, #0x0]
+ add r2, r2, r0
+ ldr r0, [r6, r0]
+ lsr r6, r1, #0x1f
+ str r0, [sp, #0x4]
+ ldr r0, [r2, #0x4]
+ add r6, r1, r6
+ str r0, [sp, #0x8]
+ ldr r0, [r2, #0x8]
+ asr r1, r6, #0x1
+ str r0, [sp, #0xc]
+ ldr r0, [r2, #0xc]
+ str r0, [sp, #0x10]
+ mov r0, #0x24
+ ldrsh r2, [r4, r0]
+ lsr r0, r3, #0x1f
+ add r0, r3, r0
+ asr r0, r0, #0x1
+ sub r2, r2, r0
+ mov r0, #0x2c
+ ldrsh r0, [r4, r0]
+ ldr r6, [r4, #0x28]
+ add r0, r2, r0
+ mov r2, #0x26
+ ldrsh r2, [r4, r2]
+ lsl r0, r0, #0x10
+ asr r0, r0, #0x10
+ sub r2, r2, r1
+ mov r1, #0x2e
+ ldrsh r1, [r4, r1]
+ add r2, r2, r1
+ mov r1, #0x6e
+ ldrsb r1, [r4, r1]
+ sub r1, r2, r1
+ ldr r2, [r4, #0x30]
+ lsl r1, r1, #0x10
+ asr r1, r1, #0x10
+ add r2, r6, r2
+ bl NNS_G2dDrawSpriteFast
+_02007174:
+ add r0, r4, #0x0
+ add r0, #0x6c
+ ldrh r0, [r0, #0x0]
+ lsl r1, r0, #0x1e
+ lsr r1, r1, #0x1e
+ beq _0200719A
+ lsl r0, r0, #0x19
+ lsr r0, r0, #0x1e
+ beq _0200719A
+ ldr r0, [r4, #0x54]
+ lsl r0, r0, #0x1e
+ lsr r0, r0, #0x1f
+ bne _0200719A
+ mov r0, #0xb9
+ lsl r0, r0, #0x2
+ ldr r1, [r5, r0]
+ mov r0, #0x1
+ tst r0, r1
+ beq _0200719C
+_0200719A:
+ b _020072BC
+_0200719C:
+ ldr r0, =0x000002E3
+ ldrb r0, [r5, r0]
+ cmp r0, #0x1
+ beq _020071AA
+ ldr r0, =0x04000454
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+_020071AA:
+ mov r0, #0x9d
+ lsl r0, r0, #0x2
+ ldr r0, [r5, r0]
+ cmp r0, #0x2
+ bne _020071B8
+ mov r1, #0x1
+ b _020071BA
+_020071B8:
+ mov r1, #0x0
+_020071BA:
+ add r2, r4, #0x0
+ add r2, #0x6c
+ ldrh r2, [r2, #0x0]
+ mov r0, #0xa9
+ lsl r0, r0, #0x2
+ lsl r2, r2, #0x1e
+ lsr r2, r2, #0x1e
+ add r2, r2, #0x3
+ ldr r0, [r5, r0]
+ lsl r2, r2, #0x5
+ add r2, r0, r2
+ mov r0, #0x4
+ sub r0, r0, r1
+ add r1, r2, #0x0
+ lsr r1, r0
+ ldr r0, =0x040004AC
+ str r1, [r0, #0x0]
+ add r0, r4, #0x0
+ add r0, #0x6c
+ ldrh r0, [r0, #0x0]
+ lsl r0, r0, #0x1b
+ lsr r0, r0, #0x1f
+ beq _020071FA
+ mov r0, #0x34
+ ldrsh r0, [r4, r0]
+ lsl r0, r0, #0x6
+ asr r3, r0, #0x8
+ mov r0, #0x36
+ ldrsh r0, [r4, r0]
+ lsl r0, r0, #0x4
+ asr r1, r0, #0x8
+ b _020071FE
+_020071FA:
+ mov r3, #0x40
+ mov r1, #0x10
+_020071FE:
+ add r0, r4, #0x0
+ add r0, #0x6c
+ ldrh r0, [r0, #0x0]
+ lsl r0, r0, #0x1d
+ lsr r0, r0, #0x1f
+ beq _02007220
+ mov r0, #0x74
+ ldrsh r2, [r4, r0]
+ mov r0, #0x24
+ mov r6, #0x2c
+ ldrsh r0, [r4, r0]
+ ldrsh r6, [r4, r6]
+ add r0, r0, r6
+ add r2, r2, r0
+ add r0, r4, #0x0
+ add r0, #0x70
+ strh r2, [r0, #0x0]
+_02007220:
+ add r0, r4, #0x0
+ add r0, #0x6c
+ ldrh r0, [r0, #0x0]
+ lsl r0, r0, #0x1c
+ lsr r0, r0, #0x1f
+ beq _02007242
+ mov r0, #0x76
+ ldrsh r2, [r4, r0]
+ mov r0, #0x26
+ mov r6, #0x2e
+ ldrsh r0, [r4, r0]
+ ldrsh r6, [r4, r6]
+ add r0, r0, r6
+ add r2, r2, r0
+ add r0, r4, #0x0
+ add r0, #0x72
+ strh r2, [r0, #0x0]
+_02007242:
+ add r0, r4, #0x0
+ add r0, #0x6c
+ ldrh r0, [r0, #0x0]
+ ldr r2, =UNK_020ECBD0
+ ldr r6, =UNK_020ECBD0
+ lsl r0, r0, #0x19
+ lsr r0, r0, #0x1e
+ lsl r0, r0, #0x4
+ str r1, [sp, #0x0]
+ add r2, r2, r0
+ ldr r0, [r6, r0]
+ lsr r6, r1, #0x1f
+ str r0, [sp, #0x4]
+ ldr r0, [r2, #0x4]
+ add r6, r1, r6
+ str r0, [sp, #0x8]
+ ldr r0, [r2, #0x8]
+ asr r1, r6, #0x1
+ str r0, [sp, #0xc]
+ ldr r0, [r2, #0xc]
+ str r0, [sp, #0x10]
+ mov r0, #0x70
+ ldrsh r2, [r4, r0]
+ lsr r0, r3, #0x1f
+ add r0, r3, r0
+ asr r0, r0, #0x1
+ sub r0, r2, r0
+ mov r2, #0x72
+ ldrsh r2, [r4, r2]
+ lsl r0, r0, #0x10
+ asr r0, r0, #0x10
+ sub r1, r2, r1
+ lsl r1, r1, #0x10
+ ldr r2, =0xFFFFFC18
+ asr r1, r1, #0x10
+ bl NNS_G2dDrawSpriteFast
+_020072BC:
+ ldr r0, [sp, #0x14]
+ add r4, #0x98
+ add r0, #0x20
+ str r0, [sp, #0x14]
+ ldr r0, [sp, #0x1c]
+ add r0, #0x20
+ str r0, [sp, #0x1c]
+ ldr r0, [sp, #0x18]
+ add r0, r0, #0x1
+ str r0, [sp, #0x18]
+ cmp r0, #0x4
+ bge _020072D6
+ b _02006F30
+_020072D6:
+ ldr r0, =0x04000448
+ mov r1, #0x1
+ str r1, [r0, #0x0]
+ add sp, #0x20
+ pop {r3-r7, pc}
+ // clang-format on
+}
+#endif
+
+
+
+THUMB_FUNC void FUN_020072E8(struct UnkStruct1 *param0) {
+ FreeToHeap(param0->unk2AC);
+ FreeToHeap(param0->unk2B0);
+ FreeToHeap(param0->unk2B4);
+ FreeToHeap(param0);
+}
+
+
+THUMB_FUNC void FUN_02007314(struct UnkStruct2 *param0) {
+ param0->unk59 = 0;
+ for (s32 i = 0; i < 10; i++) {
+ param0->unk5C[i] = 0;
+ }
+ if (param0->unk84[param0->unk59].unk0 == -1) {
+ param0->unk5B = 0;
+ return;
+ }
+
+ param0->unk58 = 1;
+ param0->unk5B = param0->unk84[param0->unk59].unk0;
+ param0->unk5A = param0->unk84[param0->unk59].unk1;
+
+}
+
+
+THUMB_FUNC void FUN_0200737C(struct UnkStruct2 *param0, struct UnkStruct2_sub *param1) {
+ MI_CpuCopy8(param1, param0->unk84, sizeof(struct UnkStruct2_sub)*10);
+}
+
+THUMB_FUNC BOOL FUN_02007390(struct UnkStruct2 *param0) {
+ if (param0->unk58 != 0) {
+ return TRUE;
+ }
+ return FALSE;
+}
+
+extern u32 FUN_020073E8(struct UnkStruct1 *param0, struct UnkStruct63_021DB49C *param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 param6, u32 param7, u32 param8);
+
+THUMB_FUNC u32 FUN_020073A0(struct UnkStruct1 *param0, struct UnkStruct63_021DB49C *param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 param6, u32 param7) {
+ s32 i;
+ for (i = 0; i < 4; i++) {
+ if (param0->unk000[i].unk00_0 == 0) {
+ break;
+ }
+ }
+ GF_ASSERT(i != 4);
+
+ return FUN_020073E8(param0, param1, param2, param3, param4, param5, i, param6, param7);
+}