Match sub_0801E49C (#638)

* Nuke sub_0801E49C.inc

* Match sub_0801E49C

* Fix data types

* Match signature

* Add typecast and referring function signature

* Fix lint issue
This commit is contained in:
KEKW555 2023-12-04 03:36:21 +05:30 committed by GitHub
parent d0a8433e2c
commit a8d19c09fc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 57 additions and 213 deletions

View File

@ -1,211 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #8
mov r8, r0
str r1, [sp, #4]
mov sb, r2
adds r5, r3, #0
ldr r0, _0801E5E4 @ =0x0000FFFF
movs r2, #0xf0
lsls r2, r2, #3
ldr r1, _0801E5E8 @ =gUnk_02018EE0
bl MemFill16
adds r3, r5, #0
subs r3, #0x40
movs r2, #0xff
ands r3, r2
ldr r1, _0801E5EC @ =gSineTable
adds r0, r3, #0
adds r0, #0x40
lsls r0, r0, #1
adds r0, r0, r1
movs r4, #0
ldrsh r0, [r0, r4]
mov r4, sb
muls r4, r0, r4
adds r0, r4, #0
asrs r0, r0, #8
mov r4, r8
adds r7, r4, r0
lsls r0, r3, #1
adds r0, r0, r1
movs r3, #0
ldrsh r0, [r0, r3]
mov r4, sb
muls r4, r0, r4
adds r0, r4, #0
asrs r0, r0, #8
ldr r3, [sp, #4]
adds r3, r3, r0
mov sl, r3
adds r3, r5, #0
adds r3, #0x68
ands r3, r2
adds r0, r3, #0
adds r0, #0x40
lsls r0, r0, #1
adds r0, r0, r1
movs r4, #0
ldrsh r0, [r0, r4]
mov r4, sb
muls r4, r0, r4
adds r0, r4, #0
asrs r0, r0, #8
mov r4, r8
adds r6, r4, r0
lsls r0, r3, #1
adds r0, r0, r1
movs r3, #0
ldrsh r0, [r0, r3]
mov r4, sb
muls r4, r0, r4
adds r0, r4, #0
asrs r0, r0, #8
ldr r3, [sp, #4]
adds r4, r3, r0
adds r3, r5, #0
subs r3, #0xe8
ands r3, r2
adds r0, r3, #0
adds r0, #0x40
lsls r0, r0, #1
adds r0, r0, r1
movs r2, #0
ldrsh r0, [r0, r2]
mov r2, sb
muls r2, r0, r2
adds r0, r2, #0
asrs r0, r0, #8
mov r2, r8
adds r5, r2, r0
lsls r0, r3, #1
adds r0, r0, r1
movs r3, #0
ldrsh r0, [r0, r3]
mov r1, sb
muls r1, r0, r1
adds r0, r1, #0
asrs r0, r0, #8
ldr r2, [sp, #4]
adds r2, r2, r0
mov r8, r2
movs r0, #0
str r0, [sp]
adds r0, r7, #0
mov r1, sl
adds r2, r6, #0
adds r3, r4, #0
bl sub_0801E64C
movs r0, #1
str r0, [sp]
adds r0, r7, #0
mov r1, sl
adds r2, r5, #0
mov r3, r8
bl sub_0801E64C
movs r0, #2
str r0, [sp]
adds r0, r6, #0
adds r1, r4, #0
adds r2, r5, #0
mov r3, r8
bl sub_0801E64C
ldr r5, _0801E5F0 @ =gUnk_03003DE4
ldrb r1, [r5]
lsls r0, r1, #2
adds r0, r0, r1
lsls r0, r0, #9
ldr r6, _0801E5F4 @ =gUnk_02017AA0
adds r0, r0, r6
movs r1, #0xa0
lsls r1, r1, #4
bl MemClear
ldr r2, _0801E5E8 @ =gUnk_02018EE0
ldrb r1, [r5]
lsls r0, r1, #2
adds r0, r0, r1
lsls r0, r0, #9
adds r1, r0, r6
movs r3, #0xa0
mov sl, r3
_0801E5B0:
ldr r7, [r2]
ldr r6, [r2, #4]
ldr r5, [r2, #8]
adds r2, #0xc
cmp r7, r6
ble _0801E5C2
adds r4, r7, #0
adds r7, r6, #0
adds r6, r4, #0
_0801E5C2:
cmp r7, r5
ble _0801E5CC
adds r4, r7, #0
adds r7, r5, #0
adds r5, r4, #0
_0801E5CC:
cmp r6, r5
ble _0801E5D6
adds r4, r6, #0
adds r6, r5, #0
adds r5, r4, #0
_0801E5D6:
movs r0, #1
rsbs r0, r0, #0
cmp r7, r0
beq _0801E5F8
strb r5, [r1]
strb r7, [r1, #1]
b _0801E60A
.align 2, 0
_0801E5E4: .4byte 0x0000FFFF
_0801E5E8: .4byte gUnk_02018EE0
_0801E5EC: .4byte gSineTable
_0801E5F0: .4byte gUnk_03003DE4
_0801E5F4: .4byte gUnk_02017AA0
_0801E5F8:
cmp r6, r7
beq _0801E602
strb r5, [r1]
strb r6, [r1, #1]
b _0801E60A
_0801E602:
cmp r5, r7
beq _0801E60A
strb r7, [r1, #1]
strb r7, [r1]
_0801E60A:
movs r4, #1
rsbs r4, r4, #0
add sl, r4
adds r1, #2
mov r0, sl
cmp r0, #0
bgt _0801E5B0
ldr r0, _0801E63C @ =gUnk_03003DE4
ldrb r1, [r0]
lsls r0, r1, #2
adds r0, r0, r1
lsls r0, r0, #9
ldr r1, _0801E640 @ =gUnk_02017AA0
adds r0, r0, r1
ldr r1, _0801E644 @ =0x04000040
ldr r2, _0801E648 @ =0xA2600001
bl SetVBlankDMA
add sp, #8
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7, pc}
.align 2, 0
_0801E63C: .4byte gUnk_03003DE4
_0801E640: .4byte gUnk_02017AA0
_0801E644: .4byte 0x04000040
_0801E648: .4byte 0xA2600001
.syntax divided

View File

@ -84,6 +84,7 @@ bool32 IsRoomVisited(TileEntity* tileEntity, u32 bank);
u32 sub_0801DF60(u32 a1, u8* p); u32 sub_0801DF60(u32 a1, u8* p);
u32 sub_0801DF78(u32 a1, u32 a2); u32 sub_0801DF78(u32 a1, u32 a2);
void sub_0801DF28(u32 x, u32 y, s32 color); void sub_0801DF28(u32 x, u32 y, s32 color);
void sub_0801E64C(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5);
extern void* GetRoomProperty(u32, u32, u32); extern void* GetRoomProperty(u32, u32, u32);
@ -794,7 +795,61 @@ void sub_0801E290(u32 param_1, u32 param_2, u32 count) {
ASM_FUNC("asm/non_matching/common/sub_0801E31C.inc", void sub_0801E31C(u32 a1, u32 a2, u32 a3, u32 a4)); ASM_FUNC("asm/non_matching/common/sub_0801E31C.inc", void sub_0801E31C(u32 a1, u32 a2, u32 a3, u32 a4));
ASM_FUNC("asm/non_matching/common/sub_0801E49C.inc", void sub_0801E49C(u32 a1, u32 a2, u32 a3, u32 a4)); void sub_0801E49C(s32 baseX, s32 baseY, s32 radius, u32 baseAngle) {
u8* ptr2;
u32* ptr1;
u32 angle;
s32 x1, x2, x3, y1, y2, y3;
MemFill16(0xffff, gUnk_02018EE0, 0x780);
angle = (baseAngle - 0x40) & 0xff;
x1 = baseX + (gSineTable[angle + 0x40] * radius >> 8);
y1 = baseY + (gSineTable[angle] * radius >> 8);
angle = (baseAngle + 0x68) & 0xff;
x2 = baseX + (gSineTable[angle + 0x40] * radius >> 8);
y2 = baseY + (gSineTable[angle] * radius >> 8);
angle = (baseAngle - 0xe8) & 0xff;
x3 = baseX + (gSineTable[angle + 0x40] * radius >> 8);
y3 = baseY + (gSineTable[angle] * radius >> 8);
sub_0801E64C(x1, y1, x2, y2, 0);
sub_0801E64C(x1, y1, x3, y3, 1);
sub_0801E64C(x2, y2, x3, y3, 2);
MemClear(gUnk_02017AA0[gUnk_03003DE4[0]].filler, 0xa00);
ptr1 = (u32*)gUnk_02018EE0;
ptr2 = gUnk_02017AA0[gUnk_03003DE4[0]].filler;
for (y1 = 0xa0; y1 > 0; y1--, ptr2 += 2) {
x1 = ptr1[0];
x2 = ptr1[1];
x3 = ptr1[2];
ptr1 += 3;
if (x1 > x2) {
SWAP(x1, x2, y2);
}
if (x1 > x3) {
SWAP(x1, x3, y2);
}
if (x2 > x3) {
SWAP(x2, x3, y2);
}
if (x1 != 0xffffffff) {
ptr2[0] = x3;
ptr2[1] = x1;
} else {
if (x2 != x1) {
ptr2[0] = x3;
ptr2[1] = x2;
} else {
if (x3 != x1) {
ptr2[1] = x1;
ptr2[0] = x1;
}
}
}
}
SetVBlankDMA((u16*)(gUnk_02017AA0[gUnk_03003DE4[0]].filler), (u16*)REG_ADDR_WIN0H,
((DMA_ENABLE | DMA_START_HBLANK | DMA_16BIT | DMA_REPEAT | DMA_SRC_INC | DMA_DEST_RELOAD) << 16) +
0x1);
}
void sub_0801E64C(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5) { void sub_0801E64C(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5) {
s32 sVar1; s32 sVar1;

View File

@ -35,7 +35,7 @@ typedef struct {
u16 unk_9; u16 unk_9;
} struct_081215E8; } struct_081215E8;
extern void sub_0801E49C(u32, u32, u32, u32); extern void sub_0801E49C(s32 baseX, s32 baseY, s32 radius, u32 baseAngle);
extern bool32 gUnk_02036BB8; extern bool32 gUnk_02036BB8;
void sub_0808C6D4(WhiteTriangleEffectEntity*); void sub_0808C6D4(WhiteTriangleEffectEntity*);