summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKEKW555 <152369890+KEKW555@users.noreply.github.com>2023-12-04 03:36:21 +0530
committerGitHub <noreply@github.com>2023-12-03 14:06:21 -0800
commita8d19c09fc37335b73b24cb5eac0c27a403762a9 (patch)
tree76c2e13317dd6ced07dcc61c54c624dd4e626a23
parentd0a8433e2cede945fccace6f169b48865817f808 (diff)
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
-rw-r--r--asm/non_matching/common/sub_0801E49C.inc211
-rw-r--r--src/common.c57
-rw-r--r--src/object/whiteTriangleEffect.c2
3 files changed, 57 insertions, 213 deletions
diff --git a/asm/non_matching/common/sub_0801E49C.inc b/asm/non_matching/common/sub_0801E49C.inc
deleted file mode 100644
index 345c5ed7..00000000
--- a/asm/non_matching/common/sub_0801E49C.inc
+++ /dev/null
@@ -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
diff --git a/src/common.c b/src/common.c
index 3b661be7..60461523 100644
--- a/src/common.c
+++ b/src/common.c
@@ -84,6 +84,7 @@ bool32 IsRoomVisited(TileEntity* tileEntity, u32 bank);
u32 sub_0801DF60(u32 a1, u8* p);
u32 sub_0801DF78(u32 a1, u32 a2);
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);
@@ -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_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) {
s32 sVar1;
diff --git a/src/object/whiteTriangleEffect.c b/src/object/whiteTriangleEffect.c
index 16ba562c..ec70dab3 100644
--- a/src/object/whiteTriangleEffect.c
+++ b/src/object/whiteTriangleEffect.c
@@ -35,7 +35,7 @@ typedef struct {
u16 unk_9;
} 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;
void sub_0808C6D4(WhiteTriangleEffectEntity*);