add missing inlines and fix a nonmatching function

This commit is contained in:
Rémi Calixte
2021-09-10 19:47:10 +02:00
parent 1a63367f68
commit bf18d30b4e
4 changed files with 146 additions and 528 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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)
{