summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRémi Calixte <remicalixte.rmc@gmail.com>2021-09-10 19:47:10 +0200
committerRémi Calixte <remicalixte.rmc@gmail.com>2021-09-10 19:47:10 +0200
commitbf18d30b4e21da4ac6c06d8b506c20cff9fce586 (patch)
treec7bae4960ab55070352b1028cd25ba2bda54b452
parent1a63367f68ef1576162f97155ce426d091cb4395 (diff)
add missing inlines and fix a nonmatching function
-rw-r--r--arm9/lib/NitroSDK/include/GX_g3.h23
-rw-r--r--arm9/lib/NitroSDK/include/GX_g3imm.h18
-rw-r--r--arm9/lib/NitroSDK/include/registers.h88
-rw-r--r--arm9/src/unk_02006D98.c545
4 files changed, 146 insertions, 528 deletions
diff --git a/arm9/lib/NitroSDK/include/GX_g3.h b/arm9/lib/NitroSDK/include/GX_g3.h
index 765ecc64..7f11c55e 100644
--- a/arm9/lib/NitroSDK/include/GX_g3.h
+++ b/arm9/lib/NitroSDK/include/GX_g3.h
@@ -181,4 +181,27 @@ typedef union
}
GXBoxTestParam;
+
+
+
+#define GX_PACK_TEXIMAGE_PARAM(texFmt, texGen, s, t, repeat, flip, pltt0, addr) \
+ ((u32)(((addr) >> 3) | \
+ ((texFmt) << REG_G3_TEXIMAGE_PARAM_TEXFMT_SHIFT) | \
+ ((texGen) << REG_G3_TEXIMAGE_PARAM_TGEN_SHIFT) | \
+ ((s) << REG_G3_TEXIMAGE_PARAM_V_SIZE_SHIFT) | \
+ ((t) << REG_G3_TEXIMAGE_PARAM_T_SIZE_SHIFT) | \
+ ((repeat) << REG_G3_TEXIMAGE_PARAM_RS_SHIFT) | \
+ ((flip) << REG_G3_TEXIMAGE_PARAM_FS_SHIFT) | \
+ ((pltt0) << REG_G3_TEXIMAGE_PARAM_TR_SHIFT)))
+
+#define GX_PACK_POLYGONATTR_PARAM(light, polyMode, cullMode, polygonID, alpha, misc) \
+ ((u32)(((light) << REG_G3_POLYGON_ATTR_LE_SHIFT) | \
+ ((polyMode) << REG_G3_POLYGON_ATTR_PM_SHIFT) | \
+ ((cullMode) << REG_G3_POLYGON_ATTR_BK_SHIFT) | \
+ (misc) | \
+ ((polygonID) << REG_G3_POLYGON_ATTR_ID_SHIFT) | \
+ ((alpha) << REG_G3_POLYGON_ATTR_ALPHA_SHIFT)))
+
+
+
#endif //GUARD_GX_G3_H
diff --git a/arm9/lib/NitroSDK/include/GX_g3imm.h b/arm9/lib/NitroSDK/include/GX_g3imm.h
index f811dc68..49a9f13b 100644
--- a/arm9/lib/NitroSDK/include/GX_g3imm.h
+++ b/arm9/lib/NitroSDK/include/GX_g3imm.h
@@ -1,10 +1,26 @@
#ifndef GUARD_GX_G3IMM_H
#define GUARD_GX_G3IMM_H
+#include "GX_g3.h"
#include "fx.h"
void G3_LoadMtx43(struct Mtx43 *mtx);
void G3_MultMtx43(struct Mtx43 *mtx);
void G3_MultMtx33(struct Mtx33 *mtx);
-#endif //GUARD_GX_G3IMM_H
+static inline void G3_PolygonAttr(int light, GXPolygonMode polyMode, GXCull cullMode, int polygonID, int alpha, int misc) {
+ reg_G3_POLYGON_ATTR = GX_PACK_POLYGONATTR_PARAM(light,
+ polyMode, cullMode, polygonID, alpha, misc);
+}
+
+static inline void G3_TexImageParam(GXTexFmt texFmt,
+ GXTexGen texGen,
+ GXTexSizeS s,
+ GXTexSizeT t,
+ GXTexRepeat repeat,
+ GXTexFlip flip, GXTexPlttColor0 pltt0, u32 addr) {
+ reg_G3_TEXIMAGE_PARAM = GX_PACK_TEXIMAGE_PARAM(texFmt, texGen, s, t, repeat, flip, pltt0, addr);
+}
+
+
+#endif //GUARD_GX_G3IMM_H
diff --git a/arm9/lib/NitroSDK/include/registers.h b/arm9/lib/NitroSDK/include/registers.h
index b4fd8ce7..83b06ba0 100644
--- a/arm9/lib/NitroSDK/include/registers.h
+++ b/arm9/lib/NitroSDK/include/registers.h
@@ -1066,4 +1066,92 @@
#define REG_OS_TM3CNT_H_PS_SIZE 2
#define REG_OS_TM3CNT_H_PS_MASK 0x0003
+// POLYGON_ATTR
+
+#define REG_G3_POLYGON_ATTR_ID_SHIFT 24
+#define REG_G3_POLYGON_ATTR_ID_SIZE 6
+#define REG_G3_POLYGON_ATTR_ID_MASK 0x3f000000
+
+#define REG_G3_POLYGON_ATTR_ALPHA_SHIFT 16
+#define REG_G3_POLYGON_ATTR_ALPHA_SIZE 5
+#define REG_G3_POLYGON_ATTR_ALPHA_MASK 0x001f0000
+
+#define REG_G3_POLYGON_ATTR_FE_SHIFT 15
+#define REG_G3_POLYGON_ATTR_FE_SIZE 1
+#define REG_G3_POLYGON_ATTR_FE_MASK 0x00008000
+
+#define REG_G3_POLYGON_ATTR_DT_SHIFT 14
+#define REG_G3_POLYGON_ATTR_DT_SIZE 1
+#define REG_G3_POLYGON_ATTR_DT_MASK 0x00004000
+
+#define REG_G3_POLYGON_ATTR_D1_SHIFT 13
+#define REG_G3_POLYGON_ATTR_D1_SIZE 1
+#define REG_G3_POLYGON_ATTR_D1_MASK 0x00002000
+
+#define REG_G3_POLYGON_ATTR_FC_SHIFT 12
+#define REG_G3_POLYGON_ATTR_FC_SIZE 1
+#define REG_G3_POLYGON_ATTR_FC_MASK 0x00001000
+
+#define REG_G3_POLYGON_ATTR_XL_SHIFT 11
+#define REG_G3_POLYGON_ATTR_XL_SIZE 1
+#define REG_G3_POLYGON_ATTR_XL_MASK 0x00000800
+
+#define REG_G3_POLYGON_ATTR_FR_SHIFT 7
+#define REG_G3_POLYGON_ATTR_FR_SIZE 1
+#define REG_G3_POLYGON_ATTR_FR_MASK 0x00000080
+
+#define REG_G3_POLYGON_ATTR_BK_SHIFT 6
+#define REG_G3_POLYGON_ATTR_BK_SIZE 1
+#define REG_G3_POLYGON_ATTR_BK_MASK 0x00000040
+
+#define REG_G3_POLYGON_ATTR_PM_SHIFT 4
+#define REG_G3_POLYGON_ATTR_PM_SIZE 2
+#define REG_G3_POLYGON_ATTR_PM_MASK 0x00000030
+
+#define REG_G3_POLYGON_ATTR_LE_SHIFT 0
+#define REG_G3_POLYGON_ATTR_LE_SIZE 4
+#define REG_G3_POLYGON_ATTR_LE_MASK 0x0000000f
+
+// TEXIMAGE_PARAM
+
+#define REG_G3_TEXIMAGE_PARAM_TGEN_SHIFT 30
+#define REG_G3_TEXIMAGE_PARAM_TGEN_SIZE 2
+#define REG_G3_TEXIMAGE_PARAM_TGEN_MASK 0xc0000000
+
+#define REG_G3_TEXIMAGE_PARAM_TR_SHIFT 29
+#define REG_G3_TEXIMAGE_PARAM_TR_SIZE 1
+#define REG_G3_TEXIMAGE_PARAM_TR_MASK 0x20000000
+
+#define REG_G3_TEXIMAGE_PARAM_TEXFMT_SHIFT 26
+#define REG_G3_TEXIMAGE_PARAM_TEXFMT_SIZE 3
+#define REG_G3_TEXIMAGE_PARAM_TEXFMT_MASK 0x1c000000
+
+#define REG_G3_TEXIMAGE_PARAM_T_SIZE_SHIFT 23
+#define REG_G3_TEXIMAGE_PARAM_T_SIZE_SIZE 3
+#define REG_G3_TEXIMAGE_PARAM_T_SIZE_MASK 0x03800000
+
+#define REG_G3_TEXIMAGE_PARAM_V_SIZE_SHIFT 20
+#define REG_G3_TEXIMAGE_PARAM_V_SIZE_SIZE 3
+#define REG_G3_TEXIMAGE_PARAM_V_SIZE_MASK 0x00700000
+
+#define REG_G3_TEXIMAGE_PARAM_FT_SHIFT 19
+#define REG_G3_TEXIMAGE_PARAM_FT_SIZE 1
+#define REG_G3_TEXIMAGE_PARAM_FT_MASK 0x00080000
+
+#define REG_G3_TEXIMAGE_PARAM_FS_SHIFT 18
+#define REG_G3_TEXIMAGE_PARAM_FS_SIZE 1
+#define REG_G3_TEXIMAGE_PARAM_FS_MASK 0x00040000
+
+#define REG_G3_TEXIMAGE_PARAM_RT_SHIFT 17
+#define REG_G3_TEXIMAGE_PARAM_RT_SIZE 1
+#define REG_G3_TEXIMAGE_PARAM_RT_MASK 0x00020000
+
+#define REG_G3_TEXIMAGE_PARAM_RS_SHIFT 16
+#define REG_G3_TEXIMAGE_PARAM_RS_SIZE 1
+#define REG_G3_TEXIMAGE_PARAM_RS_MASK 0x00010000
+
+#define REG_G3_TEXIMAGE_PARAM_TEX_ADDR_SHIFT 0
+#define REG_G3_TEXIMAGE_PARAM_TEX_ADDR_SIZE 16
+#define REG_G3_TEXIMAGE_PARAM_TEX_ADDR_MASK 0x0000ffff
+
#endif //POKEDIAMOND_ARM9_REGISTERS_H
diff --git a/arm9/src/unk_02006D98.c b/arm9/src/unk_02006D98.c
index 83fea2f1..f829154a 100644
--- a/arm9/src/unk_02006D98.c
+++ b/arm9/src/unk_02006D98.c
@@ -276,7 +276,7 @@ const int UNK_020ECD4C[4][2][4] = { { { 0, 0, 0x50, 0x50 }, { 0x50, 0, 0xA0, 0x5
} };
-struct UnkStruct_02006D98_3 *UNK_02105AE8[] = {
+const struct UnkStruct_02006D98_3 *UNK_02105AE8[] = {
UNK_020ECCE2,
UNK_020ECC78,
UNK_020ECC10,
@@ -350,9 +350,6 @@ THUMB_FUNC struct UnkStruct_02006D98 *FUN_02006D98(u32 heap_id)
return ptr;
}
-#ifdef NONMATCHING
-
-// mostly matching, only 2 register writes messed up
THUMB_FUNC void FUN_02006ED4(struct UnkStruct_02006D98 *param0)
{
s32 arg3;
@@ -365,10 +362,14 @@ THUMB_FUNC void FUN_02006ED4(struct UnkStruct_02006D98 *param0)
reg_G3_MTX_PUSH = 0;
- // this is all shuffled however I try
- reg_G3_TEXIMAGE_PARAM = (param0->unk29C >> 3) | (param0->unk260.attr.fmt << 26) | (1 << 30) |
- (param0->unk260.attr.sizeS << 20) | (param0->unk260.attr.sizeT << 23) |
- (param0->unk260.attr.plttUse << 29);
+ G3_TexImageParam(param0->unk260.attr.fmt,
+ GX_TEXGEN_TEXCOORD,
+ param0->unk260.attr.sizeS,
+ param0->unk260.attr.sizeT,
+ GX_TEXREPEAT_NONE,
+ GX_TEXFLIP_NONE,
+ param0->unk260.attr.plttUse,
+ param0->unk29C);
for (int st18 = 0; st18 < 4; st18++)
{
@@ -405,8 +406,8 @@ THUMB_FUNC void FUN_02006ED4(struct UnkStruct_02006D98 *param0)
reg_G3_TEXPLTT_BASE = (param0->unk2A4 + st18 * 0x20) >> (4 - shift);
u32 r1 = param0->unk000[st18].unk28 << 0xc;
- u32 r0 = (param0->unk000[st18].unk26 + param0->unk000[st18].unk42) << 0xc;
- u32 r3 = (param0->unk000[st18].unk24 + param0->unk000[st18].unk40) << 0xc;
+ u32 r0 = (u32)((param0->unk000[st18].unk26 + param0->unk000[st18].unk42) << 0xc);
+ u32 r3 = (u32)((param0->unk000[st18].unk24 + param0->unk000[st18].unk40) << 0xc);
reg_G3_MTX_TRANS = r3;
reg_G3_MTX_TRANS = r0;
@@ -439,12 +440,12 @@ THUMB_FUNC void FUN_02006ED4(struct UnkStruct_02006D98 *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);
- }
+ G3_PolygonAttr(GX_LIGHTMASK_NONE,
+ GX_POLYGONMODE_MODULATE,
+ GX_CULL_NONE,
+ param0->unk000[st18].unk00_1,
+ param0->unk000[st18].unk54_2,
+ 0);
if (param0->unk000[st18].unk54_1 != 0)
{
@@ -533,7 +534,7 @@ THUMB_FUNC void FUN_02006ED4(struct UnkStruct_02006D98 *param0)
}
NNS_G2dDrawSpriteFast(param0->unk000[st18].unk6C.unk4 - (arg3 / 2),
- param0->unk000[st18].unk6C.unk4 - (arg4 / 2),
+ param0->unk000[st18].unk6C.unk6 - (arg4 / 2),
0xFFFFFC18,
arg3,
arg4,
@@ -545,516 +546,6 @@ THUMB_FUNC void FUN_02006ED4(struct UnkStruct_02006D98 *param0)
reg_G3_MTX_POP = 1;
}
-#else
-asm void FUN_02006ED4(struct UnkStruct_02006D98 *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 UnkStruct_02006D98 *param0)
{