code_08049D30, 17/20 functions matched

Split other functions into separate files.
This commit is contained in:
Elliptic Ellipsis 2022-03-19 06:30:17 +00:00
parent a0f7b73e66
commit d5c34a023d
5 changed files with 811 additions and 1 deletions

View File

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

View File

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

View File

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

View File

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

227
src/code_08049D30.c Normal file
View File

@ -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);
}
}