From 1a6d14cd36f803607b66a6e5688fcce219caeaa3 Mon Sep 17 00:00:00 2001 From: Elliptic Ellipsis Date: Sat, 19 Mar 2022 04:02:46 +0000 Subject: [PATCH 01/11] New RoomMemory struct --- include/room.h | 10 ++++++++++ src/code_08049CD4.c | 20 ++++++++++---------- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/include/room.h b/include/room.h index f39f8d4c..3ab02772 100644 --- a/include/room.h +++ b/include/room.h @@ -83,6 +83,16 @@ typedef struct { static_assert(sizeof(RoomVars) == 0xCC); extern RoomVars gRoomVars; +typedef struct { + u8 area; + u8 room; + u16 unk_02; + u32 unk_04; +} RoomMemory; + +extern RoomMemory* gUnk_020354B0; +extern RoomMemory gRoomMemory[]; + // Packets used to store which entities to load in a room typedef struct { u8 kind; diff --git a/src/code_08049CD4.c b/src/code_08049CD4.c index a773306d..5f030d8e 100644 --- a/src/code_08049CD4.c +++ b/src/code_08049CD4.c @@ -1,25 +1,25 @@ +#define NENT_DEPRECATED #include "global.h" - -extern u32* gUnk_020354B0; -extern u32 gRoomMemory; +#include "entity.h" +#include "room.h" extern void MemFill32(u32, void*, u32); void ClearRoomMemory(void) { - MemFill32(0xFFFFFFFF, &gRoomMemory, 0x40); - gUnk_020354B0 = &gRoomMemory; + MemFill32(0xFFFFFFFF, gRoomMemory, 0x40); + gUnk_020354B0 = gRoomMemory; } -void sub_08049CF4(u8* arg0) { - u8 field_0x6c = *(arg0 + 0x6c); +void sub_08049CF4(GenericEntity* ent) { + u8 field_0x6c = ent->field_0x6c.HALF.LO; if (field_0x6c & 0x80) { - *(gUnk_020354B0 + 1) |= 1 << (field_0x6c & 0x1f); + gUnk_020354B0->unk_04 |= 1 << (field_0x6c & 0x1f); } } u32 sub_08049D1C(u32 arg0) { - u32 bitmask = *(gUnk_020354B0 + 1) >> arg0; + u32 bitmask = gUnk_020354B0->unk_04 >> arg0; u32 output = 1; output &= ~bitmask; return output; -} +} \ No newline at end of file From a0f7b73e6620db7a49fe55a3ee2765b1ce8074ff Mon Sep 17 00:00:00 2001 From: Elliptic Ellipsis Date: Sat, 19 Mar 2022 05:50:41 +0000 Subject: [PATCH 02/11] Misc prototype cleanup --- include/functions.h | 13 +++++++------ src/enemy/armos.c | 4 ++-- src/enemy/darkNut.c | 2 -- src/enemy/flyingPot.c | 20 ++++++++++++-------- src/enemy/gibdo.c | 3 --- src/enemy/octorokGolden.c | 3 --- src/enemy/peahat.c | 3 --- src/enemy/rockChuchu.c | 2 -- src/enemy/rope.c | 1 - src/enemy/ropeGolden.c | 3 --- src/enemy/slime.c | 2 -- src/enemy/sluggula.c | 6 +----- src/enemy/spinyChuchu.c | 5 ----- 13 files changed, 22 insertions(+), 45 deletions(-) diff --git a/include/functions.h b/include/functions.h index ea3d6ce3..59505428 100644 --- a/include/functions.h +++ b/include/functions.h @@ -52,7 +52,7 @@ extern void LoadResources(void); extern bool32 LoadSwapGFX(Entity*, u16, u32); extern void MenuFadeIn(u32, u32); extern void ModBombs(s32); -extern u32 PlayerInRange(Entity*, u32, u32); +extern bool32 PlayerInRange(Entity*, u32, s32); extern bool32 ProcessMovement1(Entity*); extern bool32 ProcessMovement12(Entity*); extern bool32 ProcessMovement2(Entity*); @@ -130,15 +130,16 @@ extern void sub_0803C0AC(Entity*); extern void sub_08049CF4(Entity*); extern Entity* sub_08049DF4(u32); extern u32 sub_08049EE4(Entity*); -extern u32 sub_08049F1C(Entity*, Entity*, u32); -extern u32 sub_08049F84(Entity*, u32); -extern u32 sub_08049FA0(Entity*); -extern u32 sub_08049FDC(Entity*, u32); +extern bool32 sub_08049F1C(Entity*, Entity*, s32); +extern bool32 sub_08049F84(Entity*, s32); +extern bool32 sub_08049FA0(Entity*); +extern bool32 sub_08049FDC(Entity*, u32); extern u32 sub_0804A024(Entity*, u32, u32); extern u32 sub_0804A044(Entity*, Entity*, u32); +extern void sub_0804A4E4(Entity*, Entity*); extern void sub_0804A720(Entity*); extern void sub_0804AA1C(Entity*); -extern void sub_0804C128(); +extern void sub_0804C128(void); extern u32 sub_080542AC(u32); extern void sub_08054564(); extern void sub_08054570(void); diff --git a/src/enemy/armos.c b/src/enemy/armos.c index 0fd596a2..09c732e7 100644 --- a/src/enemy/armos.c +++ b/src/enemy/armos.c @@ -306,12 +306,12 @@ bool32 sub_08030650(ArmosEntity* this) { return 1; } } else if (this->unk_80 != 2) { - if ((sub_08049FDC(super, 1) == 0) || (0x20 < (gUnk_020000B0->x.HALF.HI - super->x.HALF.HI) + 0x10U)) { + if (!sub_08049FDC(super, 1) || (0x20 < (gUnk_020000B0->x.HALF.HI - super->x.HALF.HI) + 0x10U)) { return FALSE; } return TRUE; } else { - if (sub_08049FDC(super, 1) == 0) { + if (!sub_08049FDC(super, 1)) { return FALSE; } if (gUnk_020000B0->x.HALF.HI >= (s32)(gRoomControls.origin_x + 0xa8)) { diff --git a/src/enemy/darkNut.c b/src/enemy/darkNut.c index 7fae4b0b..c3e84e19 100644 --- a/src/enemy/darkNut.c +++ b/src/enemy/darkNut.c @@ -610,8 +610,6 @@ void sub_08021644(Entity* this) { } } -extern u32 sub_08049F1C(Entity*, Entity*, u32); - u32 sub_08021664(Entity* this, Entity* ent) { switch (this->animationState) { case 0: diff --git a/src/enemy/flyingPot.c b/src/enemy/flyingPot.c index d516fe98..93f87543 100644 --- a/src/enemy/flyingPot.c +++ b/src/enemy/flyingPot.c @@ -34,14 +34,14 @@ enum FlyingPotSubActions { /* 1 */ FLYING_POT_SUBACTION_1, /* 2 */ FLYING_POT_SUBACTION_2, /* 3 */ FLYING_POT_SUBACTION_3, - /* 4 */ FLYING_POT_SUBACTION_4, + /* 4 */ FLYING_POT_SUBACTION_DO_NOTHING, /* 5 */ FLYING_POT_SUBACTION_5, }; // Functions -void FlyingPot_OnTick(FlyingPotEntity*); // 0803708C -void sub_080370A4(FlyingPotEntity*); // 080370A4 -void sub_0803712C(FlyingPotEntity*); // 0803712C +void FlyingPot_OnTick(FlyingPotEntity*); // 0803708C +void FlyingPot_OnCollision(FlyingPotEntity*); // 080370A4 +void FlyingPot_OnGrabbed(FlyingPotEntity*); // 0803712C // Subactions void FlyingPot_SubAction0(FlyingPotEntity*); // 08037144 @@ -64,8 +64,12 @@ void sub_08037408(FlyingPotEntity*); void sub_08037418(FlyingPotEntity*); void (*const FlyingPot_Functions[])(Entity*) = { - (EntityActionPtr)FlyingPot_OnTick, (EntityActionPtr)sub_080370A4, GenericKnockback, GenericDeath, GenericConfused, - (EntityActionPtr)sub_0803712C, + (EntityActionPtr)FlyingPot_OnTick, + (EntityActionPtr)FlyingPot_OnCollision, + GenericKnockback, + GenericDeath, + GenericConfused, + (EntityActionPtr)FlyingPot_OnGrabbed, }; void FlyingPot(Entity* thisx) { @@ -87,7 +91,7 @@ void FlyingPot_OnTick(FlyingPotEntity* this) { FlyingPot_Actions[super->action](this); } -void sub_080370A4(FlyingPotEntity* this) { +void FlyingPot_OnCollision(FlyingPotEntity* this) { sub_08037418(this); if (super->bitfield == 0x9D) { @@ -104,7 +108,7 @@ void sub_080370A4(FlyingPotEntity* this) { EnemyFunctionHandlerAfterCollision(super, FlyingPot_Functions); } -void sub_0803712C(FlyingPotEntity* this) { +void FlyingPot_OnGrabbed(FlyingPotEntity* this) { static void (*const FlyingPot_SubActions[])(FlyingPotEntity*) = { FlyingPot_SubAction0, FlyingPot_SubAction1, FlyingPot_SubAction2, FlyingPot_SubAction3, FlyingPot_SubActionDoNothing, FlyingPot_SubAction5, diff --git a/src/enemy/gibdo.c b/src/enemy/gibdo.c index 4e18f26e..611e2fcc 100644 --- a/src/enemy/gibdo.c +++ b/src/enemy/gibdo.c @@ -42,9 +42,6 @@ void sub_08037ACC(GibdoEntity*); void Gibdo_CreateObjects(GibdoEntity*); void sub_08037A14(GibdoEntity*); -extern void sub_0804A4E4(Entity*, Entity*); -u32 sub_0804A044(Entity*, Entity*, u32); - void (*const Gibdo_Functions[6])(Entity*); void (*const gUnk_080CF2AC[9])(GibdoEntity*); extern Entity* gUnk_020000B0; diff --git a/src/enemy/octorokGolden.c b/src/enemy/octorokGolden.c index 4bdac449..a2fcfab6 100644 --- a/src/enemy/octorokGolden.c +++ b/src/enemy/octorokGolden.c @@ -8,9 +8,6 @@ extern void (*const gUnk_080012C8[])(Entity*); const s8 gUnk_080CF490[]; const u8 gUnk_080CF498[]; -extern s32 sub_080012DC(Entity*); -extern u32 sub_0804A044(Entity*, Entity*, u32); - void sub_08037E14(Entity* this); bool32 sub_08037E90(Entity* this); diff --git a/src/enemy/peahat.c b/src/enemy/peahat.c index c6051ba0..dc15dbb6 100644 --- a/src/enemy/peahat.c +++ b/src/enemy/peahat.c @@ -19,9 +19,6 @@ extern const s8 gUnk_080CA5D4[]; void sub_080205F8(Entity*); void sub_08020604(Entity*); -extern u32 sub_08049F1C(Entity*, Entity*, u32); -extern void sub_0804AA1C(Entity*); - extern Entity* gUnk_020000B0; enum { diff --git a/src/enemy/rockChuchu.c b/src/enemy/rockChuchu.c index f1d8bad4..22746a16 100644 --- a/src/enemy/rockChuchu.c +++ b/src/enemy/rockChuchu.c @@ -8,8 +8,6 @@ #include "enemy.h" #include "functions.h" -extern void sub_0804A4E4(Entity*, Entity*); - extern void (*const RockChuchu_Functions[])(Entity*); extern void (*const gUnk_080CB960[])(Entity*); diff --git a/src/enemy/rope.c b/src/enemy/rope.c index 61f36bc5..37c63337 100644 --- a/src/enemy/rope.c +++ b/src/enemy/rope.c @@ -12,7 +12,6 @@ extern void (*const Rope_Functions[6])(Entity*); extern void (*const gUnk_080CE460[4])(Entity*); extern void (*const gUnk_080CE470[3])(Entity*); extern Entity* gUnk_020000B0; -extern u32 sub_0804A044(Entity*, Entity*, u32); void sub_08031600(Entity*); u32 sub_0803163C(Entity*); diff --git a/src/enemy/ropeGolden.c b/src/enemy/ropeGolden.c index ca3a57c7..a4a6fc99 100644 --- a/src/enemy/ropeGolden.c +++ b/src/enemy/ropeGolden.c @@ -14,9 +14,6 @@ extern void (*const gUnk_080012C8[])(Entity*); extern void (*const RopeGolden_Functions[6])(Entity*); extern void (*const gUnk_080CF4E0[4])(Entity*); -extern s32 sub_080012DC(Entity*); -extern u32 sub_0804A044(Entity*, Entity*, u32); - void sub_080383AC(Entity*); void sub_080383E4(Entity*); diff --git a/src/enemy/slime.c b/src/enemy/slime.c index 3c88ae1c..1cf982a0 100644 --- a/src/enemy/slime.c +++ b/src/enemy/slime.c @@ -15,8 +15,6 @@ typedef struct { void sub_08044FF8(Entity*); void sub_08045178(Entity*, Entity*, int, int); -extern void sub_0804A4E4(Entity*, Entity*); - extern void (*const gUnk_080D16BC[])(Entity*); extern void (*const Slime_Functions[])(Entity*); extern u8 gUnk_080D16D0[4]; // Entity count per form diff --git a/src/enemy/sluggula.c b/src/enemy/sluggula.c index 5405cf71..06d27af1 100644 --- a/src/enemy/sluggula.c +++ b/src/enemy/sluggula.c @@ -8,13 +8,9 @@ #include "enemy.h" #include "functions.h" -extern s32 sub_080012DC(Entity*); -bool32 PlayerInRange(Entity*, u32, u32); - void sub_08023E10(Entity*); void sub_08023E54(Entity*); void sub_08023E9C(Entity*); -void sub_0804A4E4(Entity*, Entity*); extern void (*const gUnk_080012C8[])(Entity*); @@ -178,7 +174,7 @@ extern Entity* gUnk_020000B0; void sub_08023E9C(Entity* this) { u32 uVar3 = Random(); - if (sub_08049FA0(this) == 0 && (uVar3 & 1)) { + if (!sub_08049FA0(this) && (uVar3 & 1)) { this->direction = DirectionRoundUp(sub_08049EE4(this)); } else if (sub_08049FDC(this, 1) && (uVar3 & 6)) { u32 uVar3 = GetFacingDirection(this, gUnk_020000B0) - this->direction; diff --git a/src/enemy/spinyChuchu.c b/src/enemy/spinyChuchu.c index 7d49e0d2..7499234b 100644 --- a/src/enemy/spinyChuchu.c +++ b/src/enemy/spinyChuchu.c @@ -9,11 +9,6 @@ #include "functions.h" #include "hitbox.h" -extern void sub_08001318(Entity*); -extern u32 PlayerInRange(Entity*, u32, u32); -extern void sub_0804A4E4(Entity*, Entity*); -extern void sub_0804AA1C(Entity*); - u32 sub_080228CC(Entity*); u32 sub_080228F0(Entity*); From d5c34a023d93099d411c3070f36df3b3fcd7ed9e Mon Sep 17 00:00:00 2001 From: Elliptic Ellipsis Date: Sat, 19 Mar 2022 06:30:17 +0000 Subject: [PATCH 03/11] code_08049D30, 17/20 functions matched Split other functions into separate files. --- asm/non_matching/code_08048D30/sub_0804A044.s | 155 ++++++++++++ asm/non_matching/code_08048D30/sub_0804A168.s | 217 +++++++++++++++++ asm/non_matching/code_08048D30/sub_0804A318.s | 211 ++++++++++++++++ linker.ld | 2 +- src/code_08049D30.c | 227 ++++++++++++++++++ 5 files changed, 811 insertions(+), 1 deletion(-) create mode 100644 asm/non_matching/code_08048D30/sub_0804A044.s create mode 100644 asm/non_matching/code_08048D30/sub_0804A168.s create mode 100644 asm/non_matching/code_08048D30/sub_0804A318.s create mode 100644 src/code_08049D30.c diff --git a/asm/non_matching/code_08048D30/sub_0804A044.s b/asm/non_matching/code_08048D30/sub_0804A044.s new file mode 100644 index 00000000..1cba338e --- /dev/null +++ b/asm/non_matching/code_08048D30/sub_0804A044.s @@ -0,0 +1,155 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #4 + adds r7, r0, #0 + mov r8, r1 + mov r0, r8 + adds r0, #0x38 + movs r1, #0x38 + adds r1, r1, r7 + mov sl, r1 + ldrb r1, [r0] + mov r3, sl + ldrb r0, [r3] + ands r0, r1 + cmp r0, #0 + beq _0804A15A + movs r5, #0 + mov r0, r8 + movs r3, #0x2e + ldrsh r1, [r0, r3] + ldr r0, [r0, #0x48] + mov ip, r0 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + adds r1, r1, r0 + movs r3, #0x2e + ldrsh r0, [r7, r3] + subs r1, r1, r0 + ldr r4, [r7, #0x48] + movs r0, #0 + ldrsb r0, [r4, r0] + subs r6, r1, r0 + lsrs r3, r2, #1 + adds r0, r6, r3 + cmp r2, r0 + blo _0804A096 + movs r5, #1 +_0804A096: + lsls r0, r2, #1 + mov sb, r0 + adds r0, r6, r2 + cmp sb, r0 + blo _0804A0A4 + movs r0, #2 + orrs r5, r0 +_0804A0A4: + mov r1, r8 + movs r0, #0x32 + ldrsh r1, [r1, r0] + str r1, [sp] + mov r1, ip + ldrb r1, [r1, #1] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + mov ip, r1 + ldr r0, [sp] + add r0, ip + str r0, [sp] + movs r0, #0x32 + ldrsh r1, [r7, r0] + ldr r0, [sp] + subs r0, r0, r1 + movs r1, #1 + ldrsb r1, [r4, r1] + subs r4, r0, r1 + adds r0, r4, r3 + cmp r2, r0 + blo _0804A0D4 + movs r0, #4 + orrs r5, r0 +_0804A0D4: + adds r0, r4, r2 + cmp sb, r0 + blo _0804A0DE + movs r0, #8 + orrs r5, r0 +_0804A0DE: + cmp r5, #0 + beq _0804A15A + movs r0, #5 + ands r0, r5 + cmp r0, #0xa + beq _0804A15A + mov r1, sl + ldrb r0, [r1] + bl GetLayerByIndex + mov sb, r0 + cmp r6, #0 + bge _0804A0FA + rsbs r6, r6, #0 +_0804A0FA: + cmp r4, #0 + bge _0804A100 + rsbs r4, r4, #0 +_0804A100: + cmp r6, r4 + bge _0804A12E + movs r0, #1 + ands r0, r5 + cmp r0, #0 + beq _0804A11A + adds r0, r7, #0 + mov r1, r8 + mov r2, sb + bl sub_0804A168 + cmp r0, #0xff + bne _0804A15C +_0804A11A: + movs r0, #4 + ands r5, r0 + cmp r5, #0 + beq _0804A15A + adds r0, r7, #0 + mov r1, r8 + mov r2, sb + bl sub_0804A318 + b _0804A156 +_0804A12E: + movs r0, #4 + ands r0, r5 + cmp r0, #0 + beq _0804A144 + adds r0, r7, #0 + mov r1, r8 + mov r2, sb + bl sub_0804A318 + cmp r0, #0xff + bne _0804A15C +_0804A144: + movs r0, #1 + ands r5, r0 + cmp r5, #0 + beq _0804A15A + adds r0, r7, #0 + mov r1, r8 + mov r2, sb + bl sub_0804A168 +_0804A156: + cmp r0, #0xff + bne _0804A15C +_0804A15A: + movs r0, #0xff +_0804A15C: + add sp, #4 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7, pc} + .syntax divided diff --git a/asm/non_matching/code_08048D30/sub_0804A168.s b/asm/non_matching/code_08048D30/sub_0804A168.s new file mode 100644 index 00000000..dfe450f3 --- /dev/null +++ b/asm/non_matching/code_08048D30/sub_0804A168.s @@ -0,0 +1,217 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #4 + adds r4, r0, #0 + mov sb, r1 + adds r5, r2, #0 + movs r0, #0x32 + ldrsh r1, [r1, r0] + movs r2, #0x32 + ldrsh r0, [r4, r2] + cmp r1, r0 + ble _0804A248 + movs r3, #0x2e + ldrsh r0, [r4, r3] + subs r2, r0, #4 + movs r0, #0xf + mov sl, r0 + adds r0, r2, #0 + mov r1, sl + ands r0, r1 + movs r7, #5 + cmp r0, #7 + bhi _0804A19E + movs r7, #0xa +_0804A19E: + ldr r3, _0804A240 @ =gRoomControls + mov r8, r3 + ldrh r1, [r3, #6] + subs r1, r2, r1 + lsrs r1, r1, #4 + movs r6, #0x3f + ands r1, r6 + movs r2, #0x32 + ldrsh r0, [r4, r2] + ldrh r3, [r3, #8] + mov ip, r3 + mov r2, ip + subs r2, #0xa + subs r0, r0, r2 + asrs r0, r0, #4 + ands r0, r6 + lsls r0, r0, #6 + orrs r0, r1 + mov r2, sb + movs r3, #0x32 + ldrsh r2, [r2, r3] + mov r3, ip + subs r2, r2, r3 + asrs r2, r2, #4 + ands r2, r6 + lsls r2, r2, #6 + orrs r1, r2 + ldr r2, _0804A244 @ =0x00002004 + adds r0, r0, r2 + adds r0, r5, r0 + adds r1, r1, r2 + adds r1, r5, r1 + movs r2, #0x40 + adds r3, r7, #0 + bl sub_0804A4BC + cmp r0, #0 + bne _0804A1EC + b _0804A308 +_0804A1EC: + movs r1, #0x2e + ldrsh r0, [r4, r1] + adds r2, r0, #4 + mov r3, sl + eors r7, r3 + mov r0, r8 + ldrh r1, [r0, #6] + subs r1, r2, r1 + lsrs r1, r1, #4 + ands r1, r6 + movs r2, #0x32 + ldrsh r0, [r4, r2] + mov r4, r8 + ldrh r3, [r4, #8] + adds r2, r3, #0 + subs r2, #0xa + subs r0, r0, r2 + asrs r0, r0, #4 + ands r0, r6 + lsls r0, r0, #6 + orrs r0, r1 + mov r2, sb + movs r4, #0x32 + ldrsh r2, [r2, r4] + subs r2, r2, r3 + asrs r2, r2, #4 + ands r2, r6 + lsls r2, r2, #6 + orrs r1, r2 + ldr r2, _0804A244 @ =0x00002004 + adds r0, r0, r2 + adds r0, r5, r0 + adds r1, r1, r2 + adds r1, r5, r1 + movs r2, #0x40 + adds r3, r7, #0 + bl sub_0804A4BC + cmp r0, #0 + beq _0804A308 + movs r0, #0x10 + b _0804A30A + .align 2, 0 +_0804A240: .4byte gRoomControls +_0804A244: .4byte 0x00002004 +_0804A248: + movs r3, #0x2e + ldrsh r0, [r4, r3] + subs r2, r0, #4 + adds r0, r2, #0 + movs r1, #0xf + ands r0, r1 + movs r7, #5 + cmp r0, #7 + bhi _0804A25C + movs r7, #0xa +_0804A25C: + ldr r3, _0804A300 @ =gRoomControls + mov r8, r3 + ldrh r1, [r3, #6] + subs r1, r2, r1 + lsrs r1, r1, #4 + movs r6, #0x3f + ands r1, r6 + movs r2, #0x32 + ldrsh r0, [r4, r2] + ldrh r3, [r3, #8] + mov sl, r3 + mov r2, sl + adds r2, #0xa + subs r0, r0, r2 + asrs r0, r0, #4 + ands r0, r6 + lsls r0, r0, #6 + orrs r0, r1 + mov r2, sb + movs r3, #0x32 + ldrsh r2, [r2, r3] + mov r3, sl + subs r2, r2, r3 + asrs r2, r2, #4 + ands r2, r6 + lsls r2, r2, #6 + orrs r1, r2 + ldr r2, _0804A304 @ =0x00002004 + adds r0, r0, r2 + adds r0, r5, r0 + adds r1, r1, r2 + adds r1, r5, r1 + movs r2, #0x40 + rsbs r2, r2, #0 + mov sl, r2 + adds r3, r7, #0 + bl sub_0804A4BC + cmp r0, #0 + beq _0804A308 + movs r3, #0x2e + ldrsh r0, [r4, r3] + adds r2, r0, #4 + movs r0, #0xf + eors r7, r0 + mov r3, r8 + ldrh r1, [r3, #6] + subs r1, r2, r1 + lsrs r1, r1, #4 + ands r1, r6 + movs r2, #0x32 + ldrsh r0, [r4, r2] + ldrh r3, [r3, #8] + adds r2, r3, #0 + adds r2, #0xa + subs r0, r0, r2 + asrs r0, r0, #4 + ands r0, r6 + lsls r0, r0, #6 + orrs r0, r1 + mov r4, sb + movs r2, #0x32 + ldrsh r4, [r4, r2] + subs r2, r4, r3 + asrs r2, r2, #4 + ands r2, r6 + lsls r2, r2, #6 + orrs r1, r2 + ldr r3, _0804A304 @ =0x00002004 + adds r0, r0, r3 + adds r0, r5, r0 + adds r1, r1, r3 + adds r1, r5, r1 + mov r2, sl + adds r3, r7, #0 + bl sub_0804A4BC + cmp r0, #0 + beq _0804A308 + movs r0, #0 + b _0804A30A + .align 2, 0 +_0804A300: .4byte gRoomControls +_0804A304: .4byte 0x00002004 +_0804A308: + movs r0, #0xff +_0804A30A: + add sp, #4 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/code_08048D30/sub_0804A318.s b/asm/non_matching/code_08048D30/sub_0804A318.s new file mode 100644 index 00000000..9f64fbb9 --- /dev/null +++ b/asm/non_matching/code_08048D30/sub_0804A318.s @@ -0,0 +1,211 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + adds r5, r0, #0 + mov sl, r1 + adds r6, r2, #0 + movs r0, #0x2e + ldrsh r1, [r1, r0] + movs r2, #0x2e + ldrsh r0, [r5, r2] + cmp r1, r0 + ble _0804A3F0 + movs r4, #0x32 + ldrsh r0, [r5, r4] + subs r4, r0, #4 + adds r0, r4, #0 + movs r1, #0xf + ands r0, r1 + movs r2, #3 + mov r8, r2 + cmp r0, #7 + bhi _0804A34C + movs r0, #0xc + mov r8, r0 +_0804A34C: + movs r1, #0x2e + ldrsh r0, [r5, r1] + ldr r2, _0804A3E8 @ =gRoomControls + mov sb, r2 + ldrh r3, [r2, #6] + adds r1, r3, #0 + subs r1, #0xa + subs r0, r0, r1 + asrs r0, r0, #4 + movs r7, #0x3f + ands r0, r7 + ldrh r2, [r2, #8] + subs r2, r4, r2 + lsrs r2, r2, #4 + ands r2, r7 + lsls r2, r2, #6 + orrs r0, r2 + mov r4, sl + movs r1, #0x2e + ldrsh r4, [r4, r1] + subs r1, r4, r3 + asrs r1, r1, #4 + ands r1, r7 + orrs r1, r2 + ldr r2, _0804A3EC @ =0x00002004 + adds r0, r0, r2 + adds r0, r6, r0 + adds r1, r1, r2 + adds r1, r6, r1 + movs r2, #1 + mov r3, r8 + bl sub_0804A4BC + cmp r0, #0 + bne _0804A394 + b _0804A4B0 +_0804A394: + movs r2, #0x32 + ldrsh r0, [r5, r2] + adds r4, r0, #4 + mov r0, r8 + movs r1, #0xf + eors r0, r1 + mov r8, r0 + movs r2, #0x2e + ldrsh r0, [r5, r2] + mov r5, sb + ldrh r3, [r5, #6] + adds r1, r3, #0 + subs r1, #0xa + subs r0, r0, r1 + asrs r0, r0, #4 + ands r0, r7 + ldrh r2, [r5, #8] + subs r2, r4, r2 + lsrs r2, r2, #4 + ands r2, r7 + lsls r2, r2, #6 + orrs r0, r2 + mov r4, sl + movs r5, #0x2e + ldrsh r1, [r4, r5] + subs r1, r1, r3 + asrs r1, r1, #4 + ands r1, r7 + orrs r1, r2 + ldr r2, _0804A3EC @ =0x00002004 + adds r0, r0, r2 + adds r0, r6, r0 + adds r1, r1, r2 + adds r1, r6, r1 + movs r2, #1 + mov r3, r8 + bl sub_0804A4BC + cmp r0, #0 + beq _0804A4B0 + movs r0, #8 + b _0804A4B2 + .align 2, 0 +_0804A3E8: .4byte gRoomControls +_0804A3EC: .4byte 0x00002004 +_0804A3F0: + movs r4, #0x32 + ldrsh r0, [r5, r4] + subs r4, r0, #4 + adds r0, r4, #0 + movs r1, #0xf + ands r0, r1 + movs r2, #3 + mov r8, r2 + cmp r0, #7 + bhi _0804A408 + movs r0, #0xc + mov r8, r0 +_0804A408: + movs r1, #0x2e + ldrsh r0, [r5, r1] + ldr r2, _0804A4A8 @ =gRoomControls + mov sb, r2 + ldrh r3, [r2, #6] + adds r1, r3, #0 + adds r1, #0xa + subs r0, r0, r1 + asrs r0, r0, #4 + movs r7, #0x3f + ands r0, r7 + ldrh r2, [r2, #8] + subs r2, r4, r2 + lsrs r2, r2, #4 + ands r2, r7 + lsls r2, r2, #6 + orrs r0, r2 + mov r4, sl + movs r1, #0x2e + ldrsh r4, [r4, r1] + subs r1, r4, r3 + asrs r1, r1, #4 + ands r1, r7 + orrs r1, r2 + ldr r2, _0804A4AC @ =0x00002004 + adds r0, r0, r2 + adds r0, r6, r0 + adds r1, r1, r2 + adds r1, r6, r1 + movs r2, #1 + rsbs r2, r2, #0 + mov r3, r8 + bl sub_0804A4BC + cmp r0, #0 + beq _0804A4B0 + movs r2, #0x32 + ldrsh r0, [r5, r2] + adds r4, r0, #4 + mov r0, r8 + movs r1, #0xf + eors r0, r1 + mov r8, r0 + movs r2, #0x2e + ldrsh r0, [r5, r2] + mov r5, sb + ldrh r3, [r5, #6] + adds r1, r3, #0 + adds r1, #0xa + subs r0, r0, r1 + asrs r0, r0, #4 + ands r0, r7 + ldrh r2, [r5, #8] + subs r2, r4, r2 + lsrs r2, r2, #4 + ands r2, r7 + lsls r2, r2, #6 + orrs r0, r2 + mov r4, sl + movs r5, #0x2e + ldrsh r1, [r4, r5] + subs r1, r1, r3 + asrs r1, r1, #4 + ands r1, r7 + orrs r1, r2 + ldr r2, _0804A4AC @ =0x00002004 + adds r0, r0, r2 + adds r0, r6, r0 + adds r1, r1, r2 + adds r1, r6, r1 + movs r2, #1 + rsbs r2, r2, #0 + mov r3, r8 + bl sub_0804A4BC + cmp r0, #0 + beq _0804A4B0 + movs r0, #0x18 + b _0804A4B2 + .align 2, 0 +_0804A4A8: .4byte gRoomControls +_0804A4AC: .4byte 0x00002004 +_0804A4B0: + movs r0, #0xff +_0804A4B2: + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7, pc} + .syntax divided diff --git a/linker.ld b/linker.ld index 49fa4f9a..81cb59d2 100644 --- a/linker.ld +++ b/linker.ld @@ -428,7 +428,7 @@ SECTIONS { src/enemy/enemy66.o(.text); /* END enemies */ src/code_08049CD4.o(.text); /* enemyUtils.c */ - asm/code_08049D30.o(.text); + src/code_08049D30.o(.text); src/enemyUtils.o(.text); src/createEnemy.o(.text); src/enterPortalSubtask.o(.text); diff --git a/src/code_08049D30.c b/src/code_08049D30.c new file mode 100644 index 00000000..12c8ea31 --- /dev/null +++ b/src/code_08049D30.c @@ -0,0 +1,227 @@ +#define NENT_DEPRECATED +#include "asm.h" +#include "entity.h" +#include "functions.h" +#include "player.h" +#include "room.h" + +extern Entity* gUnk_020000B0; +extern Entity* (*const gUnk_080D3BE8[])(void); + +extern void ReplaceMonitoredEntity(Entity*, Entity*); + +void sub_08049DCC(RoomMemory*); +RoomMemory* sub_08049D88(void); + +void UpdateRoomTracker(void) { + gUnk_020354B0 = gRoomMemory; + + do { + if (gUnk_020354B0->area == gRoomControls.area && gUnk_020354B0->room == gRoomControls.room) { + sub_08049DCC(gUnk_020354B0); + return; + } + gUnk_020354B0++; + + } while (gUnk_020354B0 < gRoomMemory + 8); + gUnk_020354B0 = sub_08049D88(); +} + +RoomMemory* sub_08049D88(void) { + RoomMemory* r4 = gRoomMemory; + RoomMemory* r1 = r4 + 1; + + do { + if (r1->unk_02 > r4->unk_02) { + r4 = r1; + } + r1++; + } while (r1 < gRoomMemory + 8); + + r4->area = gRoomControls.area; + r4->room = gRoomControls.room; + + r4->unk_02 = 0xFFFF; + r4->unk_04 = 0; + + sub_08049DCC(r4); + + return r4; +} + +void sub_08049DCC(RoomMemory* rm) { + RoomMemory* r1 = gRoomMemory; + + do { + if (r1->unk_02 < rm->unk_02) { + r1->unk_02++; + } + r1++; + } while (r1 < gRoomMemory + 8); + + rm->unk_02 = 0; +} + +Entity* sub_08049DF4(u32 arg0) { + if (gUnk_020000B0 != NULL) { + return gUnk_020000B0; + } + return gUnk_080D3BE8[arg0](); +} + +Entity* sub_08049E18(void) { + if ((gPlayerState.field_0x3c[0] == 0) && !(gPlayerState.flags & 0x22189b75)) { + gUnk_020000B0 = &gPlayerEntity; + return &gPlayerEntity; + } + return NULL; +} + +Entity* sub_08049E4C(void) { + if ((gPlayerState.field_0x3c[0] == 0) && !(gPlayerState.flags & 0x22189bf5)) { + gUnk_020000B0 = &gPlayerEntity; + return &gPlayerEntity; + } + return NULL; +} + +Entity* sub_08049E80(void) { + if ((gPlayerState.field_0x3c[0] != 0) || !(gPlayerState.flags & 0x80)) { + return NULL; + } + gUnk_020000B0 = &gPlayerEntity; + return &gPlayerEntity; +} + +Entity* sub_08049EB0(void) { + if ((gPlayerState.field_0x3c[0] == 0) && !(gPlayerState.flags & 0x80190)) { + gUnk_020000B0 = &gPlayerEntity; + return &gPlayerEntity; + } + return NULL; +} + +u32 sub_08049EE4(Entity* ent) { + GenericEntity* genEnt = (GenericEntity*)ent; + + u16 tempLO = genEnt->field_0x70.HALF.LO + 4 * genEnt->field_0x6e.HALF.LO; + u16 tempHI = genEnt->field_0x70.HALF.HI + 4 * genEnt->field_0x6e.HALF.HI; + + return CalculateDirectionTo(genEnt->base.x.HALF.HI, genEnt->base.y.HALF.HI, tempLO, tempHI); +} + +bool32 sub_08049F1C(Entity* entA, Entity* entB, s32 maxDist) { + if ((entA->collisionLayer & entB->collisionLayer) != 0) { + s32 xDiff = entB->x.HALF.HI - entA->x.HALF.HI; + s32 yDiff = entB->y.HALF.HI - entA->y.HALF.HI; + s32 maxDistSq = maxDist * maxDist; + s32 distSq = xDiff * xDiff + yDiff * yDiff; + + if (maxDistSq >= distSq) { + return TRUE; + } + } + return FALSE; +} + +bool32 PlayerInRange(Entity* ent, u32 arg1, s32 maxDist) { + Entity* tempEnt = sub_08049DF4(arg1); + if (tempEnt == NULL) { + return FALSE; + } else { + return sub_08049F1C(ent, tempEnt, maxDist); + } +} + +u32 sub_08049F84(Entity* ent, s32 arg2) { + Entity* target = sub_08049DF4(arg2); + + if (target == NULL) { + return 0xFF; + } else { + return GetFacingDirection(ent, target); + } +} + +bool32 sub_08049FA0(Entity* ent) { + GenericEntity* genEnt = (GenericEntity*)ent; + u32 temp = 8 * genEnt->field_0x6e.HALF.LO; + + if (temp >= genEnt->base.x.HALF.HI - genEnt->field_0x70.HALF_U.LO) { + temp = 8 * genEnt->field_0x6e.HALF.HI; + if (temp >= genEnt->base.y.HALF.HI - genEnt->field_0x70.HALF_U.HI) { + return TRUE; + } + } + return FALSE; +} + +bool32 sub_08049FDC(Entity* ent, u32 arg1) { + u32 temp; + GenericEntity* genEnt = (GenericEntity*)ent; + GenericEntity* tempEnt = (GenericEntity*)sub_08049DF4(arg1); + + if (tempEnt != NULL) { + temp = 8 * genEnt->field_0x6e.HALF.LO; + if (temp >= tempEnt->base.x.HALF.HI - genEnt->field_0x70.HALF_U.LO) { + temp = 8 * genEnt->field_0x6e.HALF.HI; + if (temp >= tempEnt->base.y.HALF.HI - genEnt->field_0x70.HALF_U.HI) { + return TRUE; + } + } + } + return FALSE; +} + +u32 sub_0804A024(Entity* ent, u32 arg1, u32 arg2) { + Entity* tempEnt = sub_08049DF4(arg1); + if (tempEnt == NULL) { + return 0xFF; + } else { + return sub_0804A044(ent, tempEnt, arg2); + } +} + +ASM_FUNC("asm/non_matching/code_08048D30/sub_0804A044.s", u32 sub_0804A044(Entity* entA, Entity* entB, u32 arg2)); + +ASM_FUNC("asm/non_matching/code_08048D30/sub_0804A168.s", void sub_0804A168(void)); // ? + +ASM_FUNC("asm/non_matching/code_08048D30/sub_0804A318.s", void sub_0804A318(void)); // ? + +bool32 sub_0804A4BC(u8* arg0, u8* arg1, s32 arg2, u32 arg3) { + while (arg0 != arg1) { + u8 r0 = *arg0; + + if (r0 != 0) { + if (r0 > 0xF) { + return 0; + } + + r0 &= arg3; + if (r0 != 0) { + return FALSE; + } + } + arg0 += arg2; + } + + return TRUE; +} + +void sub_0804A4E4(Entity* entA, Entity* entB) { + GenericEntity* r5 = (GenericEntity*)entA; + GenericEntity* r6 = (GenericEntity*)entB; + + r6->field_0x6c.HALF.HI = (r5->field_0x6c.HALF.HI & 0x40) | 4; + r6->field_0x6c.HALF.LO = r5->field_0x6c.HALF.LO; + r6->field_0x70.HALF.LO = r5->field_0x70.HALF.LO; + r6->field_0x70.HALF.HI = r5->field_0x70.HALF.HI; + r6->field_0x6e.HALF.LO = r5->field_0x6e.HALF.LO; + r6->field_0x6e.HALF.HI = r5->field_0x6e.HALF.HI; + + CopyPositionAndSpriteOffset(&r5->base, &r6->base); + + if (r5->field_0x6c.HALF.HI & 0x40) { + ReplaceMonitoredEntity(&r5->base, &r6->base); + } +} From a320d42431d7dfdcad4ac77f416415001ecf854d Mon Sep 17 00:00:00 2001 From: Elliptic Ellipsis Date: Sat, 19 Mar 2022 06:35:05 +0000 Subject: [PATCH 04/11] Format --- src/code_08049CD4.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/code_08049CD4.c b/src/code_08049CD4.c index 5f030d8e..8fb02487 100644 --- a/src/code_08049CD4.c +++ b/src/code_08049CD4.c @@ -22,4 +22,4 @@ u32 sub_08049D1C(u32 arg0) { u32 output = 1; output &= ~bitmask; return output; -} \ No newline at end of file +} From 1c7c210fa8d285d1508ac030c1665d0d1be03b0f Mon Sep 17 00:00:00 2001 From: Elliptic Ellipsis Date: Sun, 20 Mar 2022 15:32:33 +0000 Subject: [PATCH 05/11] OK --- src/code_08049D30.c | 155 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 151 insertions(+), 4 deletions(-) diff --git a/src/code_08049D30.c b/src/code_08049D30.c index 12c8ea31..f91477f2 100644 --- a/src/code_08049D30.c +++ b/src/code_08049D30.c @@ -182,11 +182,158 @@ u32 sub_0804A024(Entity* ent, u32 arg1, u32 arg2) { } } -ASM_FUNC("asm/non_matching/code_08048D30/sub_0804A044.s", u32 sub_0804A044(Entity* entA, Entity* entB, u32 arg2)); +u32 sub_0804A168(Entity*, Entity*, LayerStruct*); +u32 sub_0804A318(Entity*, Entity*, LayerStruct*); -ASM_FUNC("asm/non_matching/code_08048D30/sub_0804A168.s", void sub_0804A168(void)); // ? +u32 sub_0804A044(Entity* entA, Entity* entB, u32 arg2) { + LayerStruct* layer; + s32 ret; + s32 yDiff; + s32 xDiff; + s32 flags; -ASM_FUNC("asm/non_matching/code_08048D30/sub_0804A318.s", void sub_0804A318(void)); // ? + if ((entB->collisionLayer & entA->collisionLayer) != 0) { + flags = 0; + xDiff = entB->x.HALF.HI + entB->hitbox->offset_x - entA->x.HALF.HI - entA->hitbox->offset_x; + + if (arg2 >= xDiff + (arg2 >> 1)) { + flags |= 1; + } + if (arg2 << 1 >= xDiff + arg2) { + flags |= 2; + } + + yDiff = entB->y.HALF.HI + entB->hitbox->offset_y - entA->y.HALF.HI - entA->hitbox->offset_y; + if (arg2 >= yDiff + (arg2 >> 1)) { + flags |= 4; + } + if (arg2 << 1 >= yDiff + arg2) { + flags |= 8; + } + + if (flags && ((flags & 5) != 0xA)) { + layer = GetLayerByIndex(entA->collisionLayer); + if (xDiff < 0) { + xDiff = -xDiff; + } + if (yDiff < 0) { + yDiff = -yDiff; + } + if (xDiff < yDiff) { + if (flags & 1) { + ret = sub_0804A168(entA, entB, layer); + if (ret != 0xFF) { + return ret; + } + } + if (!(flags & 4)) { + return 0xFF; + } + ret = sub_0804A318(entA, entB, layer); + } else { + if (flags & 4) { + ret = sub_0804A318(entA, entB, layer); + if (ret != 0xFF) { + return ret; + } + } + if (!(flags & 1)) { + return 0xFF; + } + ret = sub_0804A168(entA, entB, layer); + } + if (ret != 0xFF) { + return ret; + } + } + } + return 0xFF; +} + +bool32 sub_0804A4BC(u8* arg0, u8* arg1, s32 arg2, u32 arg3); + +u32 sub_0804A168(Entity* entA, Entity* entB, LayerStruct* layer) { + u32 uVar2; + u32 uVar3; + u32 tile1; + u32 tile2; + + if (entB->y.HALF.HI > entA->y.HALF.HI) { + uVar2 = entA->x.HALF.HI - 4; + uVar3 = ((uVar2 & 0xF) < 8) ? 10 : 5; + tile1 = TILE(uVar2, entA->y.HALF.HI + 10); + tile2 = TILE(uVar2, entB->y.HALF.HI); + + if (sub_0804A4BC(layer->collisionData + tile1, layer->collisionData + tile2, 0x40, uVar3)) { + uVar2 = entA->x.HALF.HI + 4; + uVar3 ^= 0xF; + tile1 = TILE(uVar2, entA->y.HALF.HI + 10); + tile2 = TILE(uVar2, entB->y.HALF.HI); + + if (sub_0804A4BC(layer->collisionData + tile1, layer->collisionData + tile2, 0x40, uVar3)) { + return 0x10; + } + } + } else { + uVar2 = entA->x.HALF.HI - 4; + uVar3 = ((uVar2 & 0xF) < 8) ? 10 : 5; + tile1 = TILE(uVar2, entA->y.HALF.HI - 10); + tile2 = TILE(uVar2, entB->y.HALF.HI); + + if (sub_0804A4BC(layer->collisionData + tile1, layer->collisionData + tile2, -0x40, uVar3)) { + uVar2 = entA->x.HALF.HI + 4; + uVar3 ^= 0xF; + tile1 = TILE(uVar2, entA->y.HALF.HI - 10); + tile2 = TILE(uVar2, entB->y.HALF.HI); + + if (sub_0804A4BC(layer->collisionData + tile1, layer->collisionData + tile2, -0x40, uVar3)) { + return 0; + } + } + } + return 0xFF; +} + +u32 sub_0804A318(Entity* entA, Entity* entB, LayerStruct* layer) { + u32 uVar2; + u32 uVar3; + u32 tile1; + u32 tile2; + + if (entB->x.HALF.HI > entA->x.HALF.HI) { + uVar2 = entA->y.HALF.HI - 4; + uVar3 = ((uVar2 & 0xF) < 8) ? 0xC : 3; + tile1 = TILE(entA->x.HALF.HI + 10, uVar2); + tile2 = TILE(entB->x.HALF.HI, uVar2); + + if (sub_0804A4BC(layer->collisionData + tile1, layer->collisionData + tile2, 1, uVar3)) { + uVar2 = entA->y.HALF.HI + 4; + uVar3 ^= 0xF; + tile1 = TILE(entA->x.HALF.HI + 10, uVar2); + tile2 = TILE(entB->x.HALF.HI, uVar2); + + if (sub_0804A4BC(layer->collisionData + tile1, layer->collisionData + tile2, 1, uVar3)) { + return 8; + } + } + } else { + uVar2 = entA->y.HALF.HI - 4; + uVar3 = ((uVar2 & 0xF) < 8) ? 0xC : 3; + tile1 = TILE(entA->x.HALF.HI - 10, uVar2); + tile2 = TILE(entB->x.HALF.HI, uVar2); + + if (sub_0804A4BC(layer->collisionData + tile1, layer->collisionData + tile2, -1, uVar3)) { + uVar2 = entA->y.HALF.HI + 4; + uVar3 ^= 0xF; + tile1 = TILE(entA->x.HALF.HI - 10, uVar2); + tile2 = TILE(entB->x.HALF.HI, uVar2); + if (sub_0804A4BC(layer->collisionData + tile1, layer->collisionData + tile2, -1, uVar3)) { + return 0x18; + } + } + } + return 0xFF; +} bool32 sub_0804A4BC(u8* arg0, u8* arg1, s32 arg2, u32 arg3) { while (arg0 != arg1) { @@ -194,7 +341,7 @@ bool32 sub_0804A4BC(u8* arg0, u8* arg1, s32 arg2, u32 arg3) { if (r0 != 0) { if (r0 > 0xF) { - return 0; + return FALSE; } r0 &= arg3; From d20ff8794838bc5442e9a5d82cba34816a6758e9 Mon Sep 17 00:00:00 2001 From: Elliptic Ellipsis Date: Sun, 20 Mar 2022 15:35:09 +0000 Subject: [PATCH 06/11] Delete asm --- asm/code_08049D30.s | 1120 ----------------- asm/non_matching/code_08048D30/sub_0804A044.s | 155 --- asm/non_matching/code_08048D30/sub_0804A168.s | 217 ---- asm/non_matching/code_08048D30/sub_0804A318.s | 211 ---- 4 files changed, 1703 deletions(-) delete mode 100644 asm/code_08049D30.s delete mode 100644 asm/non_matching/code_08048D30/sub_0804A044.s delete mode 100644 asm/non_matching/code_08048D30/sub_0804A168.s delete mode 100644 asm/non_matching/code_08048D30/sub_0804A318.s diff --git a/asm/code_08049D30.s b/asm/code_08049D30.s deleted file mode 100644 index a68192f5..00000000 --- a/asm/code_08049D30.s +++ /dev/null @@ -1,1120 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start UpdateRoomTracker -UpdateRoomTracker: @ 0x08049D30 - push {r4, r5, r6, lr} - ldr r1, _08049D58 @ =gUnk_020354B0 - ldr r0, _08049D5C @ =gRoomMemory - str r0, [r1] - adds r5, r1, #0 - ldr r6, _08049D60 @ =gRoomControls - ldr r4, _08049D64 @ =0x0000FFFF -_08049D3E: - ldr r3, [r5] - ldrh r0, [r3] - ldrh r2, [r6, #4] - adds r1, r4, #0 - ands r1, r0 - adds r0, r4, #0 - ands r0, r2 - cmp r1, r0 - bne _08049D68 - adds r0, r3, #0 - bl sub_08049DCC - b _08049D7C - .align 2, 0 -_08049D58: .4byte gUnk_020354B0 -_08049D5C: .4byte gRoomMemory -_08049D60: .4byte gRoomControls -_08049D64: .4byte 0x0000FFFF -_08049D68: - adds r1, r3, #0 - adds r1, #8 - str r1, [r5] - ldr r0, _08049D80 @ =gUnk_02024090 - cmp r1, r0 - blo _08049D3E - bl sub_08049D88 - ldr r1, _08049D84 @ =gUnk_020354B0 - str r0, [r1] -_08049D7C: - pop {r4, r5, r6, pc} - .align 2, 0 -_08049D80: .4byte gUnk_02024090 -_08049D84: .4byte gUnk_020354B0 - - thumb_func_start sub_08049D88 -sub_08049D88: @ 0x08049D88 - push {r4, r5, lr} - ldr r4, _08049DC0 @ =gRoomMemory - adds r1, r4, #0 - adds r1, #8 - ldr r3, _08049DC4 @ =gRoomControls - adds r2, r4, #0 - adds r2, #0x40 -_08049D96: - ldrh r0, [r1, #2] - ldrh r5, [r4, #2] - cmp r0, r5 - bls _08049DA0 - adds r4, r1, #0 -_08049DA0: - adds r1, #8 - cmp r1, r2 - blo _08049D96 - ldrb r0, [r3, #4] - movs r1, #0 - strb r0, [r4] - ldrb r0, [r3, #5] - strb r0, [r4, #1] - ldr r0, _08049DC8 @ =0x0000FFFF - strh r0, [r4, #2] - str r1, [r4, #4] - adds r0, r4, #0 - bl sub_08049DCC - adds r0, r4, #0 - pop {r4, r5, pc} - .align 2, 0 -_08049DC0: .4byte gRoomMemory -_08049DC4: .4byte gRoomControls -_08049DC8: .4byte 0x0000FFFF - - thumb_func_start sub_08049DCC -sub_08049DCC: @ 0x08049DCC - push {r4, lr} - adds r2, r0, #0 - ldr r1, _08049DF0 @ =gRoomMemory - adds r3, r1, #0 - adds r3, #0x40 -_08049DD6: - ldrh r0, [r1, #2] - ldrh r4, [r2, #2] - cmp r0, r4 - bhs _08049DE2 - adds r0, #1 - strh r0, [r1, #2] -_08049DE2: - adds r1, #8 - cmp r1, r3 - blo _08049DD6 - movs r0, #0 - strh r0, [r2, #2] - pop {r4, pc} - .align 2, 0 -_08049DF0: .4byte gRoomMemory - - thumb_func_start sub_08049DF4 -sub_08049DF4: @ 0x08049DF4 - push {lr} - adds r2, r0, #0 - ldr r0, _08049E10 @ =gUnk_020000B0 - ldr r0, [r0] - cmp r0, #0 - bne _08049E0C - ldr r1, _08049E14 @ =gUnk_080D3BE8 - lsls r0, r2, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 -_08049E0C: - pop {pc} - .align 2, 0 -_08049E10: .4byte gUnk_020000B0 -_08049E14: .4byte gUnk_080D3BE8 - - thumb_func_start sub_08049E18 -sub_08049E18: @ 0x08049E18 - push {lr} - ldr r1, _08049E38 @ =gPlayerState - adds r0, r1, #0 - adds r0, #0x3c - ldrb r0, [r0] - cmp r0, #0 - bne _08049E48 - ldr r0, [r1, #0x30] - ldr r1, _08049E3C @ =0x22189B75 - ands r0, r1 - cmp r0, #0 - bne _08049E48 - ldr r1, _08049E40 @ =gUnk_020000B0 - ldr r0, _08049E44 @ =gPlayerEntity - str r0, [r1] - b _08049E4A - .align 2, 0 -_08049E38: .4byte gPlayerState -_08049E3C: .4byte 0x22189B75 -_08049E40: .4byte gUnk_020000B0 -_08049E44: .4byte gPlayerEntity -_08049E48: - movs r0, #0 -_08049E4A: - pop {pc} - - thumb_func_start sub_08049E4C -sub_08049E4C: @ 0x08049E4C - push {lr} - ldr r1, _08049E6C @ =gPlayerState - adds r0, r1, #0 - adds r0, #0x3c - ldrb r0, [r0] - cmp r0, #0 - bne _08049E7C - ldr r0, [r1, #0x30] - ldr r1, _08049E70 @ =0x22189BF5 - ands r0, r1 - cmp r0, #0 - bne _08049E7C - ldr r1, _08049E74 @ =gUnk_020000B0 - ldr r0, _08049E78 @ =gPlayerEntity - str r0, [r1] - b _08049E7E - .align 2, 0 -_08049E6C: .4byte gPlayerState -_08049E70: .4byte 0x22189BF5 -_08049E74: .4byte gUnk_020000B0 -_08049E78: .4byte gPlayerEntity -_08049E7C: - movs r0, #0 -_08049E7E: - pop {pc} - - thumb_func_start sub_08049E80 -sub_08049E80: @ 0x08049E80 - push {lr} - ldr r1, _08049E9C @ =gPlayerState - adds r0, r1, #0 - adds r0, #0x3c - ldrb r0, [r0] - cmp r0, #0 - bne _08049E98 - ldr r0, [r1, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - bne _08049EA0 -_08049E98: - movs r0, #0 - b _08049EA6 - .align 2, 0 -_08049E9C: .4byte gPlayerState -_08049EA0: - ldr r1, _08049EA8 @ =gUnk_020000B0 - ldr r0, _08049EAC @ =gPlayerEntity - str r0, [r1] -_08049EA6: - pop {pc} - .align 2, 0 -_08049EA8: .4byte gUnk_020000B0 -_08049EAC: .4byte gPlayerEntity - - thumb_func_start sub_08049EB0 -sub_08049EB0: @ 0x08049EB0 - push {lr} - ldr r1, _08049ED0 @ =gPlayerState - adds r0, r1, #0 - adds r0, #0x3c - ldrb r0, [r0] - cmp r0, #0 - bne _08049EE0 - ldr r0, [r1, #0x30] - ldr r1, _08049ED4 @ =0x00080190 - ands r0, r1 - cmp r0, #0 - bne _08049EE0 - ldr r1, _08049ED8 @ =gUnk_020000B0 - ldr r0, _08049EDC @ =gPlayerEntity - str r0, [r1] - b _08049EE2 - .align 2, 0 -_08049ED0: .4byte gPlayerState -_08049ED4: .4byte 0x00080190 -_08049ED8: .4byte gUnk_020000B0 -_08049EDC: .4byte gPlayerEntity -_08049EE0: - movs r0, #0 -_08049EE2: - pop {pc} - - thumb_func_start sub_08049EE4 -sub_08049EE4: @ 0x08049EE4 - push {r4, r5, lr} - mov ip, r0 - adds r0, #0x70 - mov r1, ip - adds r1, #0x6e - ldrb r2, [r1] - lsls r2, r2, #2 - ldrh r0, [r0] - adds r2, r2, r0 - lsls r2, r2, #0x10 - lsrs r2, r2, #0x10 - adds r1, #4 - mov r0, ip - adds r0, #0x6f - ldrb r3, [r0] - lsls r3, r3, #2 - ldrh r1, [r1] - adds r3, r3, r1 - lsls r3, r3, #0x10 - lsrs r3, r3, #0x10 - mov r1, ip - movs r4, #0x2e - ldrsh r0, [r1, r4] - movs r5, #0x32 - ldrsh r1, [r1, r5] - bl CalculateDirectionTo - pop {r4, r5, pc} - - thumb_func_start sub_08049F1C -sub_08049F1C: @ 0x08049F1C - push {r4, r5, lr} - adds r4, r0, #0 - adds r3, r1, #0 - adds r5, r2, #0 - adds r0, #0x38 - adds r1, #0x38 - ldrb r2, [r0] - ldrb r0, [r1] - ands r0, r2 - cmp r0, #0 - beq _08049F5E - movs r0, #0x2e - ldrsh r2, [r3, r0] - movs r1, #0x2e - ldrsh r0, [r4, r1] - subs r2, r2, r0 - movs r0, #0x32 - ldrsh r1, [r3, r0] - movs r3, #0x32 - ldrsh r0, [r4, r3] - subs r1, r1, r0 - adds r3, r5, #0 - muls r3, r5, r3 - adds r0, r2, #0 - muls r0, r2, r0 - adds r2, r1, #0 - muls r2, r1, r2 - adds r1, r2, #0 - adds r0, r0, r1 - cmp r3, r0 - blt _08049F5E - movs r0, #1 - b _08049F60 -_08049F5E: - movs r0, #0 -_08049F60: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start PlayerInRange -PlayerInRange: @ 0x08049F64 - push {r4, r5, lr} - adds r4, r0, #0 - adds r0, r1, #0 - adds r5, r2, #0 - bl sub_08049DF4 - adds r1, r0, #0 - cmp r1, #0 - beq _08049F80 - adds r0, r4, #0 - adds r2, r5, #0 - bl sub_08049F1C - b _08049F82 -_08049F80: - movs r0, #0 -_08049F82: - pop {r4, r5, pc} - - thumb_func_start sub_08049F84 -sub_08049F84: @ 0x08049F84 - push {r4, lr} - adds r4, r0, #0 - adds r0, r1, #0 - bl sub_08049DF4 - adds r1, r0, #0 - cmp r1, #0 - beq _08049F9C - adds r0, r4, #0 - bl GetFacingDirection - b _08049F9E -_08049F9C: - movs r0, #0xff -_08049F9E: - pop {r4, pc} - - thumb_func_start sub_08049FA0 -sub_08049FA0: @ 0x08049FA0 - push {lr} - adds r3, r0, #0 - adds r0, #0x6e - ldrb r2, [r0] - lsls r2, r2, #3 - movs r1, #0x2e - ldrsh r0, [r3, r1] - adds r1, r3, #0 - adds r1, #0x70 - ldrh r1, [r1] - subs r0, r0, r1 - cmp r2, r0 - blo _08049FD6 - adds r0, r3, #0 - adds r0, #0x6f - ldrb r2, [r0] - lsls r2, r2, #3 - movs r1, #0x32 - ldrsh r0, [r3, r1] - adds r1, r3, #0 - adds r1, #0x72 - ldrh r1, [r1] - subs r0, r0, r1 - cmp r2, r0 - blo _08049FD6 - movs r0, #1 - b _08049FD8 -_08049FD6: - movs r0, #0 -_08049FD8: - pop {pc} - .align 2, 0 - - thumb_func_start sub_08049FDC -sub_08049FDC: @ 0x08049FDC - push {r4, lr} - adds r4, r0, #0 - adds r0, r1, #0 - bl sub_08049DF4 - adds r3, r0, #0 - cmp r3, #0 - beq _0804A020 - adds r0, r4, #0 - adds r0, #0x6e - ldrb r2, [r0] - lsls r2, r2, #3 - movs r1, #0x2e - ldrsh r0, [r3, r1] - adds r1, r4, #0 - adds r1, #0x70 - ldrh r1, [r1] - subs r0, r0, r1 - cmp r2, r0 - blo _0804A020 - adds r0, r4, #0 - adds r0, #0x6f - ldrb r2, [r0] - lsls r2, r2, #3 - movs r1, #0x32 - ldrsh r0, [r3, r1] - adds r1, r4, #0 - adds r1, #0x72 - ldrh r1, [r1] - subs r0, r0, r1 - cmp r2, r0 - blo _0804A020 - movs r0, #1 - b _0804A022 -_0804A020: - movs r0, #0 -_0804A022: - pop {r4, pc} - - thumb_func_start sub_0804A024 -sub_0804A024: @ 0x0804A024 - push {r4, r5, lr} - adds r4, r0, #0 - adds r0, r1, #0 - adds r5, r2, #0 - bl sub_08049DF4 - adds r1, r0, #0 - cmp r1, #0 - beq _0804A040 - adds r0, r4, #0 - adds r2, r5, #0 - bl sub_0804A044 - b _0804A042 -_0804A040: - movs r0, #0xff -_0804A042: - pop {r4, r5, pc} - - thumb_func_start sub_0804A044 -sub_0804A044: @ 0x0804A044 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - sub sp, #4 - adds r7, r0, #0 - mov r8, r1 - mov r0, r8 - adds r0, #0x38 - movs r1, #0x38 - adds r1, r1, r7 - mov sl, r1 - ldrb r1, [r0] - mov r3, sl - ldrb r0, [r3] - ands r0, r1 - cmp r0, #0 - beq _0804A15A - movs r5, #0 - mov r0, r8 - movs r3, #0x2e - ldrsh r1, [r0, r3] - ldr r0, [r0, #0x48] - mov ip, r0 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r1, r1, r0 - movs r3, #0x2e - ldrsh r0, [r7, r3] - subs r1, r1, r0 - ldr r4, [r7, #0x48] - movs r0, #0 - ldrsb r0, [r4, r0] - subs r6, r1, r0 - lsrs r3, r2, #1 - adds r0, r6, r3 - cmp r2, r0 - blo _0804A096 - movs r5, #1 -_0804A096: - lsls r0, r2, #1 - mov sb, r0 - adds r0, r6, r2 - cmp sb, r0 - blo _0804A0A4 - movs r0, #2 - orrs r5, r0 -_0804A0A4: - mov r1, r8 - movs r0, #0x32 - ldrsh r1, [r1, r0] - str r1, [sp] - mov r1, ip - ldrb r1, [r1, #1] - lsls r1, r1, #0x18 - asrs r1, r1, #0x18 - mov ip, r1 - ldr r0, [sp] - add r0, ip - str r0, [sp] - movs r0, #0x32 - ldrsh r1, [r7, r0] - ldr r0, [sp] - subs r0, r0, r1 - movs r1, #1 - ldrsb r1, [r4, r1] - subs r4, r0, r1 - adds r0, r4, r3 - cmp r2, r0 - blo _0804A0D4 - movs r0, #4 - orrs r5, r0 -_0804A0D4: - adds r0, r4, r2 - cmp sb, r0 - blo _0804A0DE - movs r0, #8 - orrs r5, r0 -_0804A0DE: - cmp r5, #0 - beq _0804A15A - movs r0, #5 - ands r0, r5 - cmp r0, #0xa - beq _0804A15A - mov r1, sl - ldrb r0, [r1] - bl GetLayerByIndex - mov sb, r0 - cmp r6, #0 - bge _0804A0FA - rsbs r6, r6, #0 -_0804A0FA: - cmp r4, #0 - bge _0804A100 - rsbs r4, r4, #0 -_0804A100: - cmp r6, r4 - bge _0804A12E - movs r0, #1 - ands r0, r5 - cmp r0, #0 - beq _0804A11A - adds r0, r7, #0 - mov r1, r8 - mov r2, sb - bl sub_0804A168 - cmp r0, #0xff - bne _0804A15C -_0804A11A: - movs r0, #4 - ands r5, r0 - cmp r5, #0 - beq _0804A15A - adds r0, r7, #0 - mov r1, r8 - mov r2, sb - bl sub_0804A318 - b _0804A156 -_0804A12E: - movs r0, #4 - ands r0, r5 - cmp r0, #0 - beq _0804A144 - adds r0, r7, #0 - mov r1, r8 - mov r2, sb - bl sub_0804A318 - cmp r0, #0xff - bne _0804A15C -_0804A144: - movs r0, #1 - ands r5, r0 - cmp r5, #0 - beq _0804A15A - adds r0, r7, #0 - mov r1, r8 - mov r2, sb - bl sub_0804A168 -_0804A156: - cmp r0, #0xff - bne _0804A15C -_0804A15A: - movs r0, #0xff -_0804A15C: - add sp, #4 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_0804A168 -sub_0804A168: @ 0x0804A168 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - sub sp, #4 - adds r4, r0, #0 - mov sb, r1 - adds r5, r2, #0 - movs r0, #0x32 - ldrsh r1, [r1, r0] - movs r2, #0x32 - ldrsh r0, [r4, r2] - cmp r1, r0 - ble _0804A248 - movs r3, #0x2e - ldrsh r0, [r4, r3] - subs r2, r0, #4 - movs r0, #0xf - mov sl, r0 - adds r0, r2, #0 - mov r1, sl - ands r0, r1 - movs r7, #5 - cmp r0, #7 - bhi _0804A19E - movs r7, #0xa -_0804A19E: - ldr r3, _0804A240 @ =gRoomControls - mov r8, r3 - ldrh r1, [r3, #6] - subs r1, r2, r1 - lsrs r1, r1, #4 - movs r6, #0x3f - ands r1, r6 - movs r2, #0x32 - ldrsh r0, [r4, r2] - ldrh r3, [r3, #8] - mov ip, r3 - mov r2, ip - subs r2, #0xa - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r6 - lsls r0, r0, #6 - orrs r0, r1 - mov r2, sb - movs r3, #0x32 - ldrsh r2, [r2, r3] - mov r3, ip - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r6 - lsls r2, r2, #6 - orrs r1, r2 - ldr r2, _0804A244 @ =0x00002004 - adds r0, r0, r2 - adds r0, r5, r0 - adds r1, r1, r2 - adds r1, r5, r1 - movs r2, #0x40 - adds r3, r7, #0 - bl sub_0804A4BC - cmp r0, #0 - bne _0804A1EC - b _0804A308 -_0804A1EC: - movs r1, #0x2e - ldrsh r0, [r4, r1] - adds r2, r0, #4 - mov r3, sl - eors r7, r3 - mov r0, r8 - ldrh r1, [r0, #6] - subs r1, r2, r1 - lsrs r1, r1, #4 - ands r1, r6 - movs r2, #0x32 - ldrsh r0, [r4, r2] - mov r4, r8 - ldrh r3, [r4, #8] - adds r2, r3, #0 - subs r2, #0xa - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r6 - lsls r0, r0, #6 - orrs r0, r1 - mov r2, sb - movs r4, #0x32 - ldrsh r2, [r2, r4] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r6 - lsls r2, r2, #6 - orrs r1, r2 - ldr r2, _0804A244 @ =0x00002004 - adds r0, r0, r2 - adds r0, r5, r0 - adds r1, r1, r2 - adds r1, r5, r1 - movs r2, #0x40 - adds r3, r7, #0 - bl sub_0804A4BC - cmp r0, #0 - beq _0804A308 - movs r0, #0x10 - b _0804A30A - .align 2, 0 -_0804A240: .4byte gRoomControls -_0804A244: .4byte 0x00002004 -_0804A248: - movs r3, #0x2e - ldrsh r0, [r4, r3] - subs r2, r0, #4 - adds r0, r2, #0 - movs r1, #0xf - ands r0, r1 - movs r7, #5 - cmp r0, #7 - bhi _0804A25C - movs r7, #0xa -_0804A25C: - ldr r3, _0804A300 @ =gRoomControls - mov r8, r3 - ldrh r1, [r3, #6] - subs r1, r2, r1 - lsrs r1, r1, #4 - movs r6, #0x3f - ands r1, r6 - movs r2, #0x32 - ldrsh r0, [r4, r2] - ldrh r3, [r3, #8] - mov sl, r3 - mov r2, sl - adds r2, #0xa - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r6 - lsls r0, r0, #6 - orrs r0, r1 - mov r2, sb - movs r3, #0x32 - ldrsh r2, [r2, r3] - mov r3, sl - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r6 - lsls r2, r2, #6 - orrs r1, r2 - ldr r2, _0804A304 @ =0x00002004 - adds r0, r0, r2 - adds r0, r5, r0 - adds r1, r1, r2 - adds r1, r5, r1 - movs r2, #0x40 - rsbs r2, r2, #0 - mov sl, r2 - adds r3, r7, #0 - bl sub_0804A4BC - cmp r0, #0 - beq _0804A308 - movs r3, #0x2e - ldrsh r0, [r4, r3] - adds r2, r0, #4 - movs r0, #0xf - eors r7, r0 - mov r3, r8 - ldrh r1, [r3, #6] - subs r1, r2, r1 - lsrs r1, r1, #4 - ands r1, r6 - movs r2, #0x32 - ldrsh r0, [r4, r2] - ldrh r3, [r3, #8] - adds r2, r3, #0 - adds r2, #0xa - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r6 - lsls r0, r0, #6 - orrs r0, r1 - mov r4, sb - movs r2, #0x32 - ldrsh r4, [r4, r2] - subs r2, r4, r3 - asrs r2, r2, #4 - ands r2, r6 - lsls r2, r2, #6 - orrs r1, r2 - ldr r3, _0804A304 @ =0x00002004 - adds r0, r0, r3 - adds r0, r5, r0 - adds r1, r1, r3 - adds r1, r5, r1 - mov r2, sl - adds r3, r7, #0 - bl sub_0804A4BC - cmp r0, #0 - beq _0804A308 - movs r0, #0 - b _0804A30A - .align 2, 0 -_0804A300: .4byte gRoomControls -_0804A304: .4byte 0x00002004 -_0804A308: - movs r0, #0xff -_0804A30A: - add sp, #4 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_0804A318 -sub_0804A318: @ 0x0804A318 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - adds r5, r0, #0 - mov sl, r1 - adds r6, r2, #0 - movs r0, #0x2e - ldrsh r1, [r1, r0] - movs r2, #0x2e - ldrsh r0, [r5, r2] - cmp r1, r0 - ble _0804A3F0 - movs r4, #0x32 - ldrsh r0, [r5, r4] - subs r4, r0, #4 - adds r0, r4, #0 - movs r1, #0xf - ands r0, r1 - movs r2, #3 - mov r8, r2 - cmp r0, #7 - bhi _0804A34C - movs r0, #0xc - mov r8, r0 -_0804A34C: - movs r1, #0x2e - ldrsh r0, [r5, r1] - ldr r2, _0804A3E8 @ =gRoomControls - mov sb, r2 - ldrh r3, [r2, #6] - adds r1, r3, #0 - subs r1, #0xa - subs r0, r0, r1 - asrs r0, r0, #4 - movs r7, #0x3f - ands r0, r7 - ldrh r2, [r2, #8] - subs r2, r4, r2 - lsrs r2, r2, #4 - ands r2, r7 - lsls r2, r2, #6 - orrs r0, r2 - mov r4, sl - movs r1, #0x2e - ldrsh r4, [r4, r1] - subs r1, r4, r3 - asrs r1, r1, #4 - ands r1, r7 - orrs r1, r2 - ldr r2, _0804A3EC @ =0x00002004 - adds r0, r0, r2 - adds r0, r6, r0 - adds r1, r1, r2 - adds r1, r6, r1 - movs r2, #1 - mov r3, r8 - bl sub_0804A4BC - cmp r0, #0 - bne _0804A394 - b _0804A4B0 -_0804A394: - movs r2, #0x32 - ldrsh r0, [r5, r2] - adds r4, r0, #4 - mov r0, r8 - movs r1, #0xf - eors r0, r1 - mov r8, r0 - movs r2, #0x2e - ldrsh r0, [r5, r2] - mov r5, sb - ldrh r3, [r5, #6] - adds r1, r3, #0 - subs r1, #0xa - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r7 - ldrh r2, [r5, #8] - subs r2, r4, r2 - lsrs r2, r2, #4 - ands r2, r7 - lsls r2, r2, #6 - orrs r0, r2 - mov r4, sl - movs r5, #0x2e - ldrsh r1, [r4, r5] - subs r1, r1, r3 - asrs r1, r1, #4 - ands r1, r7 - orrs r1, r2 - ldr r2, _0804A3EC @ =0x00002004 - adds r0, r0, r2 - adds r0, r6, r0 - adds r1, r1, r2 - adds r1, r6, r1 - movs r2, #1 - mov r3, r8 - bl sub_0804A4BC - cmp r0, #0 - beq _0804A4B0 - movs r0, #8 - b _0804A4B2 - .align 2, 0 -_0804A3E8: .4byte gRoomControls -_0804A3EC: .4byte 0x00002004 -_0804A3F0: - movs r4, #0x32 - ldrsh r0, [r5, r4] - subs r4, r0, #4 - adds r0, r4, #0 - movs r1, #0xf - ands r0, r1 - movs r2, #3 - mov r8, r2 - cmp r0, #7 - bhi _0804A408 - movs r0, #0xc - mov r8, r0 -_0804A408: - movs r1, #0x2e - ldrsh r0, [r5, r1] - ldr r2, _0804A4A8 @ =gRoomControls - mov sb, r2 - ldrh r3, [r2, #6] - adds r1, r3, #0 - adds r1, #0xa - subs r0, r0, r1 - asrs r0, r0, #4 - movs r7, #0x3f - ands r0, r7 - ldrh r2, [r2, #8] - subs r2, r4, r2 - lsrs r2, r2, #4 - ands r2, r7 - lsls r2, r2, #6 - orrs r0, r2 - mov r4, sl - movs r1, #0x2e - ldrsh r4, [r4, r1] - subs r1, r4, r3 - asrs r1, r1, #4 - ands r1, r7 - orrs r1, r2 - ldr r2, _0804A4AC @ =0x00002004 - adds r0, r0, r2 - adds r0, r6, r0 - adds r1, r1, r2 - adds r1, r6, r1 - movs r2, #1 - rsbs r2, r2, #0 - mov r3, r8 - bl sub_0804A4BC - cmp r0, #0 - beq _0804A4B0 - movs r2, #0x32 - ldrsh r0, [r5, r2] - adds r4, r0, #4 - mov r0, r8 - movs r1, #0xf - eors r0, r1 - mov r8, r0 - movs r2, #0x2e - ldrsh r0, [r5, r2] - mov r5, sb - ldrh r3, [r5, #6] - adds r1, r3, #0 - adds r1, #0xa - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r7 - ldrh r2, [r5, #8] - subs r2, r4, r2 - lsrs r2, r2, #4 - ands r2, r7 - lsls r2, r2, #6 - orrs r0, r2 - mov r4, sl - movs r5, #0x2e - ldrsh r1, [r4, r5] - subs r1, r1, r3 - asrs r1, r1, #4 - ands r1, r7 - orrs r1, r2 - ldr r2, _0804A4AC @ =0x00002004 - adds r0, r0, r2 - adds r0, r6, r0 - adds r1, r1, r2 - adds r1, r6, r1 - movs r2, #1 - rsbs r2, r2, #0 - mov r3, r8 - bl sub_0804A4BC - cmp r0, #0 - beq _0804A4B0 - movs r0, #0x18 - b _0804A4B2 - .align 2, 0 -_0804A4A8: .4byte gRoomControls -_0804A4AC: .4byte 0x00002004 -_0804A4B0: - movs r0, #0xff -_0804A4B2: - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_0804A4BC -sub_0804A4BC: @ 0x0804A4BC - push {r4, lr} - adds r4, r0, #0 - cmp r4, r1 - beq _0804A4DE -_0804A4C4: - ldrb r0, [r4] - cmp r0, #0 - beq _0804A4D8 - cmp r0, #0xf - bhi _0804A4D4 - ands r0, r3 - cmp r0, #0 - beq _0804A4D8 -_0804A4D4: - movs r0, #0 - b _0804A4E0 -_0804A4D8: - adds r4, r4, r2 - cmp r4, r1 - bne _0804A4C4 -_0804A4DE: - movs r0, #1 -_0804A4E0: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0804A4E4 -sub_0804A4E4: @ 0x0804A4E4 - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - adds r6, r1, #0 - adds r7, r5, #0 - adds r7, #0x6d - ldrb r1, [r7] - movs r4, #0x40 - adds r0, r4, #0 - ands r0, r1 - movs r1, #4 - adds r2, r6, #0 - adds r2, #0x6d - orrs r0, r1 - strb r0, [r2] - adds r0, r5, #0 - adds r0, #0x6c - ldrb r1, [r0] - adds r0, r6, #0 - adds r0, #0x6c - strb r1, [r0] - adds r0, r5, #0 - adds r0, #0x70 - ldrh r1, [r0] - adds r0, r6, #0 - adds r0, #0x70 - strh r1, [r0] - adds r0, r5, #0 - adds r0, #0x72 - ldrh r0, [r0] - adds r1, r6, #0 - adds r1, #0x72 - strh r0, [r1] - adds r0, r5, #0 - adds r0, #0x6e - ldrb r0, [r0] - subs r1, #4 - strb r0, [r1] - adds r0, r5, #0 - adds r0, #0x6f - ldrb r0, [r0] - adds r1, #1 - strb r0, [r1] - adds r0, r5, #0 - adds r1, r6, #0 - bl CopyPositionAndSpriteOffset - ldrb r0, [r7] - ands r4, r0 - cmp r4, #0 - beq _0804A550 - adds r0, r5, #0 - adds r1, r6, #0 - bl ReplaceMonitoredEntity -_0804A550: - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - - - - diff --git a/asm/non_matching/code_08048D30/sub_0804A044.s b/asm/non_matching/code_08048D30/sub_0804A044.s deleted file mode 100644 index 1cba338e..00000000 --- a/asm/non_matching/code_08048D30/sub_0804A044.s +++ /dev/null @@ -1,155 +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, #4 - adds r7, r0, #0 - mov r8, r1 - mov r0, r8 - adds r0, #0x38 - movs r1, #0x38 - adds r1, r1, r7 - mov sl, r1 - ldrb r1, [r0] - mov r3, sl - ldrb r0, [r3] - ands r0, r1 - cmp r0, #0 - beq _0804A15A - movs r5, #0 - mov r0, r8 - movs r3, #0x2e - ldrsh r1, [r0, r3] - ldr r0, [r0, #0x48] - mov ip, r0 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r1, r1, r0 - movs r3, #0x2e - ldrsh r0, [r7, r3] - subs r1, r1, r0 - ldr r4, [r7, #0x48] - movs r0, #0 - ldrsb r0, [r4, r0] - subs r6, r1, r0 - lsrs r3, r2, #1 - adds r0, r6, r3 - cmp r2, r0 - blo _0804A096 - movs r5, #1 -_0804A096: - lsls r0, r2, #1 - mov sb, r0 - adds r0, r6, r2 - cmp sb, r0 - blo _0804A0A4 - movs r0, #2 - orrs r5, r0 -_0804A0A4: - mov r1, r8 - movs r0, #0x32 - ldrsh r1, [r1, r0] - str r1, [sp] - mov r1, ip - ldrb r1, [r1, #1] - lsls r1, r1, #0x18 - asrs r1, r1, #0x18 - mov ip, r1 - ldr r0, [sp] - add r0, ip - str r0, [sp] - movs r0, #0x32 - ldrsh r1, [r7, r0] - ldr r0, [sp] - subs r0, r0, r1 - movs r1, #1 - ldrsb r1, [r4, r1] - subs r4, r0, r1 - adds r0, r4, r3 - cmp r2, r0 - blo _0804A0D4 - movs r0, #4 - orrs r5, r0 -_0804A0D4: - adds r0, r4, r2 - cmp sb, r0 - blo _0804A0DE - movs r0, #8 - orrs r5, r0 -_0804A0DE: - cmp r5, #0 - beq _0804A15A - movs r0, #5 - ands r0, r5 - cmp r0, #0xa - beq _0804A15A - mov r1, sl - ldrb r0, [r1] - bl GetLayerByIndex - mov sb, r0 - cmp r6, #0 - bge _0804A0FA - rsbs r6, r6, #0 -_0804A0FA: - cmp r4, #0 - bge _0804A100 - rsbs r4, r4, #0 -_0804A100: - cmp r6, r4 - bge _0804A12E - movs r0, #1 - ands r0, r5 - cmp r0, #0 - beq _0804A11A - adds r0, r7, #0 - mov r1, r8 - mov r2, sb - bl sub_0804A168 - cmp r0, #0xff - bne _0804A15C -_0804A11A: - movs r0, #4 - ands r5, r0 - cmp r5, #0 - beq _0804A15A - adds r0, r7, #0 - mov r1, r8 - mov r2, sb - bl sub_0804A318 - b _0804A156 -_0804A12E: - movs r0, #4 - ands r0, r5 - cmp r0, #0 - beq _0804A144 - adds r0, r7, #0 - mov r1, r8 - mov r2, sb - bl sub_0804A318 - cmp r0, #0xff - bne _0804A15C -_0804A144: - movs r0, #1 - ands r5, r0 - cmp r5, #0 - beq _0804A15A - adds r0, r7, #0 - mov r1, r8 - mov r2, sb - bl sub_0804A168 -_0804A156: - cmp r0, #0xff - bne _0804A15C -_0804A15A: - movs r0, #0xff -_0804A15C: - add sp, #4 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .syntax divided diff --git a/asm/non_matching/code_08048D30/sub_0804A168.s b/asm/non_matching/code_08048D30/sub_0804A168.s deleted file mode 100644 index dfe450f3..00000000 --- a/asm/non_matching/code_08048D30/sub_0804A168.s +++ /dev/null @@ -1,217 +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, #4 - adds r4, r0, #0 - mov sb, r1 - adds r5, r2, #0 - movs r0, #0x32 - ldrsh r1, [r1, r0] - movs r2, #0x32 - ldrsh r0, [r4, r2] - cmp r1, r0 - ble _0804A248 - movs r3, #0x2e - ldrsh r0, [r4, r3] - subs r2, r0, #4 - movs r0, #0xf - mov sl, r0 - adds r0, r2, #0 - mov r1, sl - ands r0, r1 - movs r7, #5 - cmp r0, #7 - bhi _0804A19E - movs r7, #0xa -_0804A19E: - ldr r3, _0804A240 @ =gRoomControls - mov r8, r3 - ldrh r1, [r3, #6] - subs r1, r2, r1 - lsrs r1, r1, #4 - movs r6, #0x3f - ands r1, r6 - movs r2, #0x32 - ldrsh r0, [r4, r2] - ldrh r3, [r3, #8] - mov ip, r3 - mov r2, ip - subs r2, #0xa - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r6 - lsls r0, r0, #6 - orrs r0, r1 - mov r2, sb - movs r3, #0x32 - ldrsh r2, [r2, r3] - mov r3, ip - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r6 - lsls r2, r2, #6 - orrs r1, r2 - ldr r2, _0804A244 @ =0x00002004 - adds r0, r0, r2 - adds r0, r5, r0 - adds r1, r1, r2 - adds r1, r5, r1 - movs r2, #0x40 - adds r3, r7, #0 - bl sub_0804A4BC - cmp r0, #0 - bne _0804A1EC - b _0804A308 -_0804A1EC: - movs r1, #0x2e - ldrsh r0, [r4, r1] - adds r2, r0, #4 - mov r3, sl - eors r7, r3 - mov r0, r8 - ldrh r1, [r0, #6] - subs r1, r2, r1 - lsrs r1, r1, #4 - ands r1, r6 - movs r2, #0x32 - ldrsh r0, [r4, r2] - mov r4, r8 - ldrh r3, [r4, #8] - adds r2, r3, #0 - subs r2, #0xa - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r6 - lsls r0, r0, #6 - orrs r0, r1 - mov r2, sb - movs r4, #0x32 - ldrsh r2, [r2, r4] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r6 - lsls r2, r2, #6 - orrs r1, r2 - ldr r2, _0804A244 @ =0x00002004 - adds r0, r0, r2 - adds r0, r5, r0 - adds r1, r1, r2 - adds r1, r5, r1 - movs r2, #0x40 - adds r3, r7, #0 - bl sub_0804A4BC - cmp r0, #0 - beq _0804A308 - movs r0, #0x10 - b _0804A30A - .align 2, 0 -_0804A240: .4byte gRoomControls -_0804A244: .4byte 0x00002004 -_0804A248: - movs r3, #0x2e - ldrsh r0, [r4, r3] - subs r2, r0, #4 - adds r0, r2, #0 - movs r1, #0xf - ands r0, r1 - movs r7, #5 - cmp r0, #7 - bhi _0804A25C - movs r7, #0xa -_0804A25C: - ldr r3, _0804A300 @ =gRoomControls - mov r8, r3 - ldrh r1, [r3, #6] - subs r1, r2, r1 - lsrs r1, r1, #4 - movs r6, #0x3f - ands r1, r6 - movs r2, #0x32 - ldrsh r0, [r4, r2] - ldrh r3, [r3, #8] - mov sl, r3 - mov r2, sl - adds r2, #0xa - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r6 - lsls r0, r0, #6 - orrs r0, r1 - mov r2, sb - movs r3, #0x32 - ldrsh r2, [r2, r3] - mov r3, sl - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r6 - lsls r2, r2, #6 - orrs r1, r2 - ldr r2, _0804A304 @ =0x00002004 - adds r0, r0, r2 - adds r0, r5, r0 - adds r1, r1, r2 - adds r1, r5, r1 - movs r2, #0x40 - rsbs r2, r2, #0 - mov sl, r2 - adds r3, r7, #0 - bl sub_0804A4BC - cmp r0, #0 - beq _0804A308 - movs r3, #0x2e - ldrsh r0, [r4, r3] - adds r2, r0, #4 - movs r0, #0xf - eors r7, r0 - mov r3, r8 - ldrh r1, [r3, #6] - subs r1, r2, r1 - lsrs r1, r1, #4 - ands r1, r6 - movs r2, #0x32 - ldrsh r0, [r4, r2] - ldrh r3, [r3, #8] - adds r2, r3, #0 - adds r2, #0xa - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r6 - lsls r0, r0, #6 - orrs r0, r1 - mov r4, sb - movs r2, #0x32 - ldrsh r4, [r4, r2] - subs r2, r4, r3 - asrs r2, r2, #4 - ands r2, r6 - lsls r2, r2, #6 - orrs r1, r2 - ldr r3, _0804A304 @ =0x00002004 - adds r0, r0, r3 - adds r0, r5, r0 - adds r1, r1, r3 - adds r1, r5, r1 - mov r2, sl - adds r3, r7, #0 - bl sub_0804A4BC - cmp r0, #0 - beq _0804A308 - movs r0, #0 - b _0804A30A - .align 2, 0 -_0804A300: .4byte gRoomControls -_0804A304: .4byte 0x00002004 -_0804A308: - movs r0, #0xff -_0804A30A: - add sp, #4 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/code_08048D30/sub_0804A318.s b/asm/non_matching/code_08048D30/sub_0804A318.s deleted file mode 100644 index 9f64fbb9..00000000 --- a/asm/non_matching/code_08048D30/sub_0804A318.s +++ /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} - adds r5, r0, #0 - mov sl, r1 - adds r6, r2, #0 - movs r0, #0x2e - ldrsh r1, [r1, r0] - movs r2, #0x2e - ldrsh r0, [r5, r2] - cmp r1, r0 - ble _0804A3F0 - movs r4, #0x32 - ldrsh r0, [r5, r4] - subs r4, r0, #4 - adds r0, r4, #0 - movs r1, #0xf - ands r0, r1 - movs r2, #3 - mov r8, r2 - cmp r0, #7 - bhi _0804A34C - movs r0, #0xc - mov r8, r0 -_0804A34C: - movs r1, #0x2e - ldrsh r0, [r5, r1] - ldr r2, _0804A3E8 @ =gRoomControls - mov sb, r2 - ldrh r3, [r2, #6] - adds r1, r3, #0 - subs r1, #0xa - subs r0, r0, r1 - asrs r0, r0, #4 - movs r7, #0x3f - ands r0, r7 - ldrh r2, [r2, #8] - subs r2, r4, r2 - lsrs r2, r2, #4 - ands r2, r7 - lsls r2, r2, #6 - orrs r0, r2 - mov r4, sl - movs r1, #0x2e - ldrsh r4, [r4, r1] - subs r1, r4, r3 - asrs r1, r1, #4 - ands r1, r7 - orrs r1, r2 - ldr r2, _0804A3EC @ =0x00002004 - adds r0, r0, r2 - adds r0, r6, r0 - adds r1, r1, r2 - adds r1, r6, r1 - movs r2, #1 - mov r3, r8 - bl sub_0804A4BC - cmp r0, #0 - bne _0804A394 - b _0804A4B0 -_0804A394: - movs r2, #0x32 - ldrsh r0, [r5, r2] - adds r4, r0, #4 - mov r0, r8 - movs r1, #0xf - eors r0, r1 - mov r8, r0 - movs r2, #0x2e - ldrsh r0, [r5, r2] - mov r5, sb - ldrh r3, [r5, #6] - adds r1, r3, #0 - subs r1, #0xa - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r7 - ldrh r2, [r5, #8] - subs r2, r4, r2 - lsrs r2, r2, #4 - ands r2, r7 - lsls r2, r2, #6 - orrs r0, r2 - mov r4, sl - movs r5, #0x2e - ldrsh r1, [r4, r5] - subs r1, r1, r3 - asrs r1, r1, #4 - ands r1, r7 - orrs r1, r2 - ldr r2, _0804A3EC @ =0x00002004 - adds r0, r0, r2 - adds r0, r6, r0 - adds r1, r1, r2 - adds r1, r6, r1 - movs r2, #1 - mov r3, r8 - bl sub_0804A4BC - cmp r0, #0 - beq _0804A4B0 - movs r0, #8 - b _0804A4B2 - .align 2, 0 -_0804A3E8: .4byte gRoomControls -_0804A3EC: .4byte 0x00002004 -_0804A3F0: - movs r4, #0x32 - ldrsh r0, [r5, r4] - subs r4, r0, #4 - adds r0, r4, #0 - movs r1, #0xf - ands r0, r1 - movs r2, #3 - mov r8, r2 - cmp r0, #7 - bhi _0804A408 - movs r0, #0xc - mov r8, r0 -_0804A408: - movs r1, #0x2e - ldrsh r0, [r5, r1] - ldr r2, _0804A4A8 @ =gRoomControls - mov sb, r2 - ldrh r3, [r2, #6] - adds r1, r3, #0 - adds r1, #0xa - subs r0, r0, r1 - asrs r0, r0, #4 - movs r7, #0x3f - ands r0, r7 - ldrh r2, [r2, #8] - subs r2, r4, r2 - lsrs r2, r2, #4 - ands r2, r7 - lsls r2, r2, #6 - orrs r0, r2 - mov r4, sl - movs r1, #0x2e - ldrsh r4, [r4, r1] - subs r1, r4, r3 - asrs r1, r1, #4 - ands r1, r7 - orrs r1, r2 - ldr r2, _0804A4AC @ =0x00002004 - adds r0, r0, r2 - adds r0, r6, r0 - adds r1, r1, r2 - adds r1, r6, r1 - movs r2, #1 - rsbs r2, r2, #0 - mov r3, r8 - bl sub_0804A4BC - cmp r0, #0 - beq _0804A4B0 - movs r2, #0x32 - ldrsh r0, [r5, r2] - adds r4, r0, #4 - mov r0, r8 - movs r1, #0xf - eors r0, r1 - mov r8, r0 - movs r2, #0x2e - ldrsh r0, [r5, r2] - mov r5, sb - ldrh r3, [r5, #6] - adds r1, r3, #0 - adds r1, #0xa - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r7 - ldrh r2, [r5, #8] - subs r2, r4, r2 - lsrs r2, r2, #4 - ands r2, r7 - lsls r2, r2, #6 - orrs r0, r2 - mov r4, sl - movs r5, #0x2e - ldrsh r1, [r4, r5] - subs r1, r1, r3 - asrs r1, r1, #4 - ands r1, r7 - orrs r1, r2 - ldr r2, _0804A4AC @ =0x00002004 - adds r0, r0, r2 - adds r0, r6, r0 - adds r1, r1, r2 - adds r1, r6, r1 - movs r2, #1 - rsbs r2, r2, #0 - mov r3, r8 - bl sub_0804A4BC - cmp r0, #0 - beq _0804A4B0 - movs r0, #0x18 - b _0804A4B2 - .align 2, 0 -_0804A4A8: .4byte gRoomControls -_0804A4AC: .4byte 0x00002004 -_0804A4B0: - movs r0, #0xff -_0804A4B2: - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .syntax divided From 4a01f2f7d71c1f896fedc24932daddf625eb04e5 Mon Sep 17 00:00:00 2001 From: Elliptic Ellipsis Date: Sun, 20 Mar 2022 15:39:13 +0000 Subject: [PATCH 07/11] Move top three functions of D30 to CD4 and rename --- linker.ld | 2 +- src/code_08049CD4.c | 53 ++++++++++++++++++++++++ src/{code_08049D30.c => code_08049DF4.c} | 52 ----------------------- 3 files changed, 54 insertions(+), 53 deletions(-) rename src/{code_08049D30.c => code_08049DF4.c} (90%) diff --git a/linker.ld b/linker.ld index 81cb59d2..fa025fc3 100644 --- a/linker.ld +++ b/linker.ld @@ -428,7 +428,7 @@ SECTIONS { src/enemy/enemy66.o(.text); /* END enemies */ src/code_08049CD4.o(.text); /* enemyUtils.c */ - src/code_08049D30.o(.text); + src/code_08049DF4.o(.text); src/enemyUtils.o(.text); src/createEnemy.o(.text); src/enterPortalSubtask.o(.text); diff --git a/src/code_08049CD4.c b/src/code_08049CD4.c index 8fb02487..c79effa8 100644 --- a/src/code_08049CD4.c +++ b/src/code_08049CD4.c @@ -5,6 +5,9 @@ extern void MemFill32(u32, void*, u32); +void sub_08049DCC(RoomMemory*); +RoomMemory* sub_08049D88(void); + void ClearRoomMemory(void) { MemFill32(0xFFFFFFFF, gRoomMemory, 0x40); gUnk_020354B0 = gRoomMemory; @@ -23,3 +26,53 @@ u32 sub_08049D1C(u32 arg0) { output &= ~bitmask; return output; } + + +void UpdateRoomTracker(void) { + gUnk_020354B0 = gRoomMemory; + + do { + if (gUnk_020354B0->area == gRoomControls.area && gUnk_020354B0->room == gRoomControls.room) { + sub_08049DCC(gUnk_020354B0); + return; + } + gUnk_020354B0++; + + } while (gUnk_020354B0 < gRoomMemory + 8); + gUnk_020354B0 = sub_08049D88(); +} + +RoomMemory* sub_08049D88(void) { + RoomMemory* r4 = gRoomMemory; + RoomMemory* r1 = r4 + 1; + + do { + if (r1->unk_02 > r4->unk_02) { + r4 = r1; + } + r1++; + } while (r1 < gRoomMemory + 8); + + r4->area = gRoomControls.area; + r4->room = gRoomControls.room; + + r4->unk_02 = 0xFFFF; + r4->unk_04 = 0; + + sub_08049DCC(r4); + + return r4; +} + +void sub_08049DCC(RoomMemory* rm) { + RoomMemory* r1 = gRoomMemory; + + do { + if (r1->unk_02 < rm->unk_02) { + r1->unk_02++; + } + r1++; + } while (r1 < gRoomMemory + 8); + + rm->unk_02 = 0; +} \ No newline at end of file diff --git a/src/code_08049D30.c b/src/code_08049DF4.c similarity index 90% rename from src/code_08049D30.c rename to src/code_08049DF4.c index f91477f2..f8b4ca89 100644 --- a/src/code_08049D30.c +++ b/src/code_08049DF4.c @@ -10,58 +10,6 @@ extern Entity* (*const gUnk_080D3BE8[])(void); extern void ReplaceMonitoredEntity(Entity*, Entity*); -void sub_08049DCC(RoomMemory*); -RoomMemory* sub_08049D88(void); - -void UpdateRoomTracker(void) { - gUnk_020354B0 = gRoomMemory; - - do { - if (gUnk_020354B0->area == gRoomControls.area && gUnk_020354B0->room == gRoomControls.room) { - sub_08049DCC(gUnk_020354B0); - return; - } - gUnk_020354B0++; - - } while (gUnk_020354B0 < gRoomMemory + 8); - gUnk_020354B0 = sub_08049D88(); -} - -RoomMemory* sub_08049D88(void) { - RoomMemory* r4 = gRoomMemory; - RoomMemory* r1 = r4 + 1; - - do { - if (r1->unk_02 > r4->unk_02) { - r4 = r1; - } - r1++; - } while (r1 < gRoomMemory + 8); - - r4->area = gRoomControls.area; - r4->room = gRoomControls.room; - - r4->unk_02 = 0xFFFF; - r4->unk_04 = 0; - - sub_08049DCC(r4); - - return r4; -} - -void sub_08049DCC(RoomMemory* rm) { - RoomMemory* r1 = gRoomMemory; - - do { - if (r1->unk_02 < rm->unk_02) { - r1->unk_02++; - } - r1++; - } while (r1 < gRoomMemory + 8); - - rm->unk_02 = 0; -} - Entity* sub_08049DF4(u32 arg0) { if (gUnk_020000B0 != NULL) { return gUnk_020000B0; From cbb3beaa4527e4b54db2300bbbf699b9b6e4dc48 Mon Sep 17 00:00:00 2001 From: Elliptic Ellipsis Date: Sun, 20 Mar 2022 15:47:11 +0000 Subject: [PATCH 08/11] Tidy includes --- src/code_08049CD4.c | 1 - src/code_08049DF4.c | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/code_08049CD4.c b/src/code_08049CD4.c index c79effa8..8d8e7f7c 100644 --- a/src/code_08049CD4.c +++ b/src/code_08049CD4.c @@ -1,6 +1,5 @@ #define NENT_DEPRECATED #include "global.h" -#include "entity.h" #include "room.h" extern void MemFill32(u32, void*, u32); diff --git a/src/code_08049DF4.c b/src/code_08049DF4.c index f8b4ca89..38f0fcb9 100644 --- a/src/code_08049DF4.c +++ b/src/code_08049DF4.c @@ -1,7 +1,7 @@ #define NENT_DEPRECATED -#include "asm.h" +#include "global.h" #include "entity.h" -#include "functions.h" +#include "map.h" #include "player.h" #include "room.h" From 09e88b512c814656c7b95b16c6b0d388f57c5d9d Mon Sep 17 00:00:00 2001 From: Elliptic Ellipsis Date: Sun, 20 Mar 2022 15:51:31 +0000 Subject: [PATCH 09/11] Mark bug --- src/code_08049DF4.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/code_08049DF4.c b/src/code_08049DF4.c index 38f0fcb9..bea42f79 100644 --- a/src/code_08049DF4.c +++ b/src/code_08049DF4.c @@ -159,6 +159,7 @@ u32 sub_0804A044(Entity* entA, Entity* entB, u32 arg2) { flags |= 8; } + //! @bug flags & 5 can never equal 0xA if (flags && ((flags & 5) != 0xA)) { layer = GetLayerByIndex(entA->collisionLayer); if (xDiff < 0) { From 417fc62e75ee504ec11f2bd7e656f9887b431b79 Mon Sep 17 00:00:00 2001 From: Elliptic Ellipsis Date: Sun, 20 Mar 2022 16:03:38 +0000 Subject: [PATCH 10/11] Fix includes, change layer->collisionData accesses --- src/code_08049DF4.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/code_08049DF4.c b/src/code_08049DF4.c index bea42f79..cf3c7fa9 100644 --- a/src/code_08049DF4.c +++ b/src/code_08049DF4.c @@ -1,6 +1,8 @@ #define NENT_DEPRECATED +#include "asm.h" #include "global.h" #include "entity.h" +#include "functions.h" #include "map.h" #include "player.h" #include "room.h" @@ -213,13 +215,13 @@ u32 sub_0804A168(Entity* entA, Entity* entB, LayerStruct* layer) { tile1 = TILE(uVar2, entA->y.HALF.HI + 10); tile2 = TILE(uVar2, entB->y.HALF.HI); - if (sub_0804A4BC(layer->collisionData + tile1, layer->collisionData + tile2, 0x40, uVar3)) { + if (sub_0804A4BC(&layer->collisionData[tile1], &layer->collisionData[tile2], 0x40, uVar3)) { uVar2 = entA->x.HALF.HI + 4; uVar3 ^= 0xF; tile1 = TILE(uVar2, entA->y.HALF.HI + 10); tile2 = TILE(uVar2, entB->y.HALF.HI); - if (sub_0804A4BC(layer->collisionData + tile1, layer->collisionData + tile2, 0x40, uVar3)) { + if (sub_0804A4BC(&layer->collisionData[tile1], &layer->collisionData[tile2], 0x40, uVar3)) { return 0x10; } } @@ -229,13 +231,13 @@ u32 sub_0804A168(Entity* entA, Entity* entB, LayerStruct* layer) { tile1 = TILE(uVar2, entA->y.HALF.HI - 10); tile2 = TILE(uVar2, entB->y.HALF.HI); - if (sub_0804A4BC(layer->collisionData + tile1, layer->collisionData + tile2, -0x40, uVar3)) { + if (sub_0804A4BC(&layer->collisionData[tile1], &layer->collisionData[tile2], -0x40, uVar3)) { uVar2 = entA->x.HALF.HI + 4; uVar3 ^= 0xF; tile1 = TILE(uVar2, entA->y.HALF.HI - 10); tile2 = TILE(uVar2, entB->y.HALF.HI); - if (sub_0804A4BC(layer->collisionData + tile1, layer->collisionData + tile2, -0x40, uVar3)) { + if (sub_0804A4BC(&layer->collisionData[tile1], &layer->collisionData[tile2], -0x40, uVar3)) { return 0; } } @@ -255,13 +257,13 @@ u32 sub_0804A318(Entity* entA, Entity* entB, LayerStruct* layer) { tile1 = TILE(entA->x.HALF.HI + 10, uVar2); tile2 = TILE(entB->x.HALF.HI, uVar2); - if (sub_0804A4BC(layer->collisionData + tile1, layer->collisionData + tile2, 1, uVar3)) { + if (sub_0804A4BC(&layer->collisionData[tile1], &layer->collisionData[tile2], 1, uVar3)) { uVar2 = entA->y.HALF.HI + 4; uVar3 ^= 0xF; tile1 = TILE(entA->x.HALF.HI + 10, uVar2); tile2 = TILE(entB->x.HALF.HI, uVar2); - if (sub_0804A4BC(layer->collisionData + tile1, layer->collisionData + tile2, 1, uVar3)) { + if (sub_0804A4BC(&layer->collisionData[tile1], &layer->collisionData[tile2], 1, uVar3)) { return 8; } } @@ -271,12 +273,12 @@ u32 sub_0804A318(Entity* entA, Entity* entB, LayerStruct* layer) { tile1 = TILE(entA->x.HALF.HI - 10, uVar2); tile2 = TILE(entB->x.HALF.HI, uVar2); - if (sub_0804A4BC(layer->collisionData + tile1, layer->collisionData + tile2, -1, uVar3)) { + if (sub_0804A4BC(&layer->collisionData[tile1], &layer->collisionData[tile2], -1, uVar3)) { uVar2 = entA->y.HALF.HI + 4; uVar3 ^= 0xF; tile1 = TILE(entA->x.HALF.HI - 10, uVar2); tile2 = TILE(entB->x.HALF.HI, uVar2); - if (sub_0804A4BC(layer->collisionData + tile1, layer->collisionData + tile2, -1, uVar3)) { + if (sub_0804A4BC(&layer->collisionData[tile1], &layer->collisionData[tile2], -1, uVar3)) { return 0x18; } } From 9143b1f4c79b7a54eb440173acf51031999f0542 Mon Sep 17 00:00:00 2001 From: Elliptic Ellipsis Date: Sun, 20 Mar 2022 18:23:09 +0000 Subject: [PATCH 11/11] Last formatting --- src/code_08049CD4.c | 23 +++++++++++------------ src/code_08049DF4.c | 1 - 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/code_08049CD4.c b/src/code_08049CD4.c index 8d8e7f7c..c98323d1 100644 --- a/src/code_08049CD4.c +++ b/src/code_08049CD4.c @@ -26,7 +26,6 @@ u32 sub_08049D1C(u32 arg0) { return output; } - void UpdateRoomTracker(void) { gUnk_020354B0 = gRoomMemory; @@ -42,25 +41,25 @@ void UpdateRoomTracker(void) { } RoomMemory* sub_08049D88(void) { - RoomMemory* r4 = gRoomMemory; - RoomMemory* r1 = r4 + 1; + RoomMemory* rm = gRoomMemory; + RoomMemory* r1 = rm + 1; do { - if (r1->unk_02 > r4->unk_02) { - r4 = r1; + if (r1->unk_02 > rm->unk_02) { + rm = r1; } r1++; } while (r1 < gRoomMemory + 8); - r4->area = gRoomControls.area; - r4->room = gRoomControls.room; + rm->area = gRoomControls.area; + rm->room = gRoomControls.room; - r4->unk_02 = 0xFFFF; - r4->unk_04 = 0; + rm->unk_02 = 0xFFFF; + rm->unk_04 = 0; - sub_08049DCC(r4); + sub_08049DCC(rm); - return r4; + return rm; } void sub_08049DCC(RoomMemory* rm) { @@ -74,4 +73,4 @@ void sub_08049DCC(RoomMemory* rm) { } while (r1 < gRoomMemory + 8); rm->unk_02 = 0; -} \ No newline at end of file +} diff --git a/src/code_08049DF4.c b/src/code_08049DF4.c index cf3c7fa9..06b77524 100644 --- a/src/code_08049DF4.c +++ b/src/code_08049DF4.c @@ -53,7 +53,6 @@ Entity* sub_08049EB0(void) { u32 sub_08049EE4(Entity* ent) { GenericEntity* genEnt = (GenericEntity*)ent; - u16 tempLO = genEnt->field_0x70.HALF.LO + 4 * genEnt->field_0x6e.HALF.LO; u16 tempHI = genEnt->field_0x70.HALF.HI + 4 * genEnt->field_0x6e.HALF.HI;