Match sub_0801876C

This commit is contained in:
Tal Hayon 2022-05-09 16:42:22 +03:00
parent aad92e4341
commit dba74f4c92
8 changed files with 151 additions and 326 deletions

View File

@ -343,315 +343,3 @@ _08018760:
.align 2, 0
_08018764: .4byte gUnk_080FE320
_08018768: .4byte gRoomControls
thumb_func_start sub_0801876C
sub_0801876C: @ 0x0801876C
push {r4, r5, lr}
adds r2, r0, #0
adds r4, r1, #0
lsls r0, r2, #2
adds r0, r0, r2
lsls r0, r0, #2
ldr r1, _08018790 @ =gUnk_080FE320
adds r5, r0, r1
ldrb r0, [r5]
cmp r0, #0x1c
bls _08018784
b _080189E4
_08018784:
lsls r0, r0, #2
ldr r1, _08018794 @ =_08018798
adds r0, r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08018790: .4byte gUnk_080FE320
_08018794: .4byte _08018798
_08018798: @ jump table
.4byte _080189E4 @ case 0
.4byte _08018838 @ case 1
.4byte _0801882A @ case 2
.4byte _08018858 @ case 3
.4byte _08018878 @ case 4
.4byte _08018886 @ case 5
.4byte _0801880C @ case 6
.4byte _08018894 @ case 7
.4byte _080188E0 @ case 8
.4byte _08018930 @ case 9
.4byte _080189E4 @ case 10
.4byte _080188FE @ case 11
.4byte _080189E4 @ case 12
.4byte _080189E4 @ case 13
.4byte _080189E4 @ case 14
.4byte _080189B4 @ case 15
.4byte _080189E4 @ case 16
.4byte _080189D0 @ case 17
.4byte _080189E4 @ case 18
.4byte _080189E4 @ case 19
.4byte _080189E4 @ case 20
.4byte _080189E4 @ case 21
.4byte _080189E4 @ case 22
.4byte _080189E4 @ case 23
.4byte _080189A4 @ case 24
.4byte _080188B8 @ case 25
.4byte _080189E4 @ case 26
.4byte _080189E4 @ case 27
.4byte _080189E4 @ case 28
_0801880C:
cmp r4, #0
beq _08018812
b _080189E4
_08018812:
ldrh r0, [r5, #8]
lsrs r0, r0, #4
movs r2, #0x3f
ands r0, r2
ldrh r1, [r5, #0xa]
lsrs r1, r1, #4
ands r1, r2
lsls r1, r1, #6
orrs r0, r1
bl sub_08018AB4
b _080189E4
_0801882A:
cmp r4, #0
bne _08018830
b _080189E4
_08018830:
adds r0, r2, #0
bl sub_08018BB4
b _080189E4
_08018838:
cmp r4, #0
bne _0801883E
b _080189E4
_0801883E:
ldrh r0, [r5, #0x12]
bl CheckGlobalFlag
cmp r0, #0
beq _0801884A
b _080189E4
_0801884A:
ldrb r0, [r5, #1]
lsls r0, r0, #4
ldr r1, _08018854 @ =gUnk_080FEC28
b _080188A4
.align 2, 0
_08018854: .4byte gUnk_080FEC28
_08018858:
cmp r4, #0
bne _0801885E
b _080189E4
_0801885E:
ldrh r0, [r5, #0x12]
bl GetInventoryValue
cmp r0, #0
beq _0801886A
b _080189E4
_0801886A:
ldrb r0, [r5, #1]
lsls r0, r0, #4
ldr r1, _08018874 @ =gUnk_080FEBE8
b _080188A4
.align 2, 0
_08018874: .4byte gUnk_080FEBE8
_08018878:
cmp r4, #0
beq _0801887E
b _080189E4
_0801887E:
adds r0, r2, #0
bl sub_08018A58
b _080189E4
_08018886:
cmp r4, #0
bne _0801888C
b _080189E4
_0801888C:
adds r0, r2, #0
bl sub_08018B50
b _080189E4
_08018894:
cmp r4, #0
beq _0801889A
b _080189E4
_0801889A:
ldrb r0, [r5, #1]
cmp r0, #0x80
beq _080188B0
lsls r0, r0, #4
ldr r1, _080188AC @ =gUnk_080FECC8
_080188A4:
adds r0, r0, r1
bl LoadRoomEntity
b _080189E4
.align 2, 0
_080188AC: .4byte gUnk_080FECC8
_080188B0:
adds r0, r2, #0
bl sub_080189EC
b _080189E4
_080188B8:
ldrb r0, [r5, #1]
lsls r0, r0, #4
ldr r1, _080188DC @ =gUnk_080FED18
adds r0, r0, r1
bl LoadRoomEntity
adds r2, r0, #0
cmp r2, #0
bne _080188CC
b _080189E4
_080188CC:
rsbs r0, r4, #0
orrs r0, r4
asrs r0, r0, #0x1f
movs r1, #2
ands r0, r1
strb r0, [r2, #0xa]
b _080189E4
.align 2, 0
_080188DC: .4byte gUnk_080FED18
_080188E0:
cmp r4, #0
bne _080188E6
b _080189E4
_080188E6:
movs r0, #0xb4
lsls r0, r0, #1
ldrh r1, [r5, #8]
lsrs r1, r1, #4
movs r3, #0x3f
ands r1, r3
ldrh r2, [r5, #0xa]
lsrs r2, r2, #4
ands r2, r3
lsls r2, r2, #6
orrs r1, r2
b _0801899C
_080188FE:
cmp r4, #0
beq _080189E4
ldrb r0, [r5, #1]
lsls r0, r0, #4
ldr r1, _08018924 @ =gUnk_080FED58
adds r0, r0, r1
bl LoadRoomEntity
ldr r2, _08018928 @ =gRoomVars
ldrb r0, [r5, #1]
lsls r0, r0, #2
adds r2, #0x8c
adds r2, r0, r2
ldr r1, _0801892C @ =gUnk_080FED98
adds r0, r0, r1
ldr r0, [r0]
str r0, [r2]
b _080189E4
.align 2, 0
_08018924: .4byte gUnk_080FED58
_08018928: .4byte gRoomVars
_0801892C: .4byte gUnk_080FED98
_08018930:
cmp r4, #0
beq _080189E4
ldrb r0, [r5, #1]
lsls r0, r0, #4
ldr r1, _08018974 @ =gUnk_080FEE78
adds r0, r0, r1
bl LoadRoomEntity
adds r2, r0, #0
cmp r2, #0
beq _08018958
ldr r0, _08018978 @ =gRoomControls
ldrh r1, [r0, #6]
ldrh r3, [r5, #8]
adds r1, r1, r3
strh r1, [r2, #0x38]
ldrh r0, [r0, #8]
ldrh r1, [r5, #0xa]
adds r0, r0, r1
strh r0, [r2, #0x3a]
_08018958:
ldrb r0, [r5, #1]
cmp r0, #0
bne _0801897C
ldrh r1, [r5, #8]
lsrs r1, r1, #4
movs r2, #0x3f
ands r1, r2
ldrh r0, [r5, #0xa]
lsrs r0, r0, #4
ands r0, r2
lsls r0, r0, #6
orrs r1, r0
movs r0, #0x8d
b _0801899C
.align 2, 0
_08018974: .4byte gUnk_080FEE78
_08018978: .4byte gRoomControls
_0801897C:
ldrh r4, [r5, #8]
lsrs r4, r4, #4
movs r1, #0x3f
ands r4, r1
ldrh r0, [r5, #0xa]
lsrs r0, r0, #4
ands r0, r1
lsls r0, r0, #6
orrs r4, r0
subs r1, r4, #1
movs r0, #0x8c
movs r2, #1
bl SetTileType
movs r0, #0x8e
adds r1, r4, #0
_0801899C:
movs r2, #1
bl SetTileType
b _080189E4
_080189A4:
cmp r4, #0
beq _080189E4
ldr r0, _080189B0 @ =gUnk_080FEE18
bl LoadRoomEntityList
b _080189E4
.align 2, 0
_080189B0: .4byte gUnk_080FEE18
_080189B4:
cmp r4, #0
beq _080189C4
ldr r0, _080189C0 @ =gUnk_080FEE58
bl LoadRoomEntity
b _080189E4
.align 2, 0
_080189C0: .4byte gUnk_080FEE58
_080189C4:
ldr r0, _080189CC @ =gUnk_080FEE48
bl LoadRoomEntity
b _080189E4
.align 2, 0
_080189CC: .4byte gUnk_080FEE48
_080189D0:
cmp r4, #0
beq _080189E4
movs r0, #0x80
lsls r0, r0, #1
.ifdef JP
movs r1, #0x77
.else
.ifdef EU
movs r1, #0x77
.else
.ifdef DEMO_JP
movs r1, #0x77 @ TODO deduplicate
.else
movs r1, #0x79
.endif
.endif
.endif
bl SetLocalFlagByBank
ldr r0, _080189E8 @ =gUnk_080FEE38
bl LoadRoomEntityList
_080189E4:
pop {r4, r5, pc}
.align 2, 0
_080189E8: .4byte gUnk_080FEE38

View File

@ -228,7 +228,8 @@ void LoadRoom(void);
void SetCurrentRoomPropertyList(u32 area, u32 room);
void* GetCurrentRoomProperty(u32);
void LoadRoomTileEntities();
void LoadRoomEntityList(EntityData* listPtr);
Entity* LoadRoomEntity(const EntityData*);
void LoadRoomEntityList(const EntityData* listPtr);
bool32 LoadFixedGFX(Entity*, u32);
void UnloadGFXSlots(Entity*);

View File

@ -3,6 +3,148 @@
#include "subtask.h"
#include "common.h"
#include "flags.h"
#include "player.h"
extern EntityData gUnk_080FEC28[];
extern EntityData gUnk_080FEBE8[];
extern EntityData gUnk_080FECC8[];
extern EntityData gUnk_080FEE78[];
extern EntityData gUnk_080FED58[];
extern const EntityData gUnk_080FED18[];
extern const EntityData gUnk_080FEE38[];
extern const EntityData gUnk_080FEE18[];
extern const EntityData gUnk_080FEE48[];
extern const EntityData gUnk_080FEE58[];
extern const void* gUnk_080FED98[];
void sub_08018AB4(int);
void sub_08018BB4(int);
void sub_08018A58(int);
void sub_08018B50(int);
void sub_080189EC(int);
void sub_0801876C(int param_1, int param_2) {
Entity* roomEnt;
Entity* ent;
u32 uVar3;
u32 tmp;
u8* puVar4;
u32 uVar5;
struct_080FE320* ptr;
ptr = &gUnk_080FE320[param_1];
switch (ptr->evt_type) {
case 6:
if (param_2 == 0) {
sub_08018AB4((ptr->x >> 4 & 0x3f) | (ptr->y >> 4 & 0x3f) << 6);
}
break;
case 0:
break;
case 2:
if (param_2 != 0) {
sub_08018BB4(param_1);
}
break;
case 1:
if (param_2 == 0) {
return;
}
if (CheckGlobalFlag(ptr->flag)) {
return;
}
LoadRoomEntity(gUnk_080FEC28 + ptr->entity_idx);
break;
case 3:
if (param_2 == 0) {
return;
}
if (GetInventoryValue(ptr->flag)) {
return;
}
LoadRoomEntity(gUnk_080FEBE8 + ptr->entity_idx);
break;
case 4:
if (param_2 == 0) {
sub_08018A58(param_1);
}
break;
case 5:
if (param_2 != 0) {
sub_08018B50(param_1);
}
break;
case 7:
if (param_2 != 0) {
return;
}
if (ptr->entity_idx != 0x80) {
LoadRoomEntity(gUnk_080FECC8 + ptr->entity_idx);
} else {
sub_080189EC(param_1);
}
break;
case 0x19:
roomEnt = LoadRoomEntity(&gUnk_080FED18[ptr->entity_idx]);
if (roomEnt != 0) {
roomEnt->type = param_2 ? 2 : 0;
}
break;
case 8:
if (param_2 == 0) {
return;
}
SetTileType(0x168, (ptr->x >> 4 & 0x3f) | (ptr->y >> 4 & 0x3f) << 6, 1);
break;
case 0xb:
if (param_2 != 0) {
LoadRoomEntity(&gUnk_080FED58[ptr->entity_idx]);
gRoomVars.field_0x8c[ptr->entity_idx] = (void*)gUnk_080FED98[ptr->entity_idx];
}
break;
case 9:
if (param_2 == 0) {
return;
}
ent = LoadRoomEntity(&gUnk_080FEE78[ptr->entity_idx]);
if (ent != 0) {
*(u16*)&ent->collisionLayer = ptr->x + gRoomControls.origin_x;
*(u16*)&ent->gustJarState = ptr->y + gRoomControls.origin_y;
}
if (ptr->entity_idx == 0) {
SetTileType(0x8d, (ptr->x >> 4 & 0x3f) | (ptr->y >> 4 & 0x3f) << 6, 1);
} else {
uVar5 = (ptr->x >> 4 & 0x3f) | (ptr->y >> 4 & 0x3f) << 6;
SetTileType(0x8c, uVar5 - 1, 1);
uVar3 = 0x8e;
SetTileType(uVar3, uVar5, 1);
}
break;
case 0x18:
if (param_2 != 0) {
LoadRoomEntityList(gUnk_080FEE18);
}
break;
case 0xf:
if (param_2 != 0) {
LoadRoomEntity(gUnk_080FEE58);
} else {
LoadRoomEntity(gUnk_080FEE48);
}
break;
case 0x11:
if (param_2 != 0) {
SetLocalFlagByBank(FLAG_BANK_1, SOUGEN_05_BOMB_00);
LoadRoomEntityList(gUnk_080FEE38);
}
break;
case 0x1a:
case 0x1b:
case 0x1c:
break;
}
}
void sub_080189EC(int param_1) {
u32 i;

View File

@ -1,8 +1,6 @@
#include "entity.h"
#include "room.h"
extern Entity* LoadRoomEntity(EntityData*);
void sub_0805E0C0(Entity*);
void sub_0805E0F4(Entity*);

View File

@ -81,8 +81,6 @@ void ManagerB_WaitForDone(ManagerB* this) {
ManagerBHelper* CreateHelper(Manager*);
void ManagerBHelper_Monitor(ManagerBHelper*, Entity*, u32);
extern Entity* LoadRoomEntity(EntityData*);
void ManagerB_LoadFight(Manager* this) {
ManagerBHelper* monitor;
EntityData* prop;

View File

@ -5,7 +5,6 @@
#include "object.h"
extern u32 sub_080B1AE0(u16, u8);
extern Entity* LoadRoomEntity(EntityData*);
extern void (*const RemovableDust_Functions[])(Entity*);
extern const u16 gUnk_08129FD0[];

View File

@ -10,7 +10,7 @@
static void sub_0804B058(EntityData* dat);
extern void sub_0801AC98(void);
extern u32 sub_08049D1C(u32);
extern Entity* LoadRoomEntity(EntityData*);
extern Entity* LoadRoomEntity(const EntityData*);
extern void* GetRoomProperty(u32, u32, u32);
extern void** gCurrentRoomProperties;
@ -22,8 +22,8 @@ extern void sub_0804B16C(void);
extern void ClearSmallChests(void);
extern Entity* GetEmptyEntityByKind(u32 kind);
void RegisterRoomEntity(Entity*, EntityData*);
void sub_0804AF0C(Entity*, EntityData*);
void RegisterRoomEntity(Entity*, const EntityData*);
void sub_0804AF0C(Entity*, const EntityData*);
void sub_0804AFB0(void** properties);
void sub_08054524(void);
@ -39,7 +39,7 @@ static void LoadDestructibleTile(TileEntity*);
static void LoadGrassDropTile(TileEntity*);
static void LoadLocationTile(TileEntity*);
void LoadRoomEntityList(EntityData* listPtr) {
void LoadRoomEntityList(const EntityData* listPtr) {
if (listPtr != NULL) {
while (listPtr->kind != 0xFF) {
LoadRoomEntity(listPtr++);
@ -47,7 +47,7 @@ void LoadRoomEntityList(EntityData* listPtr) {
}
}
NONMATCH("asm/non_matching/LoadRoomEntity.inc", Entity* LoadRoomEntity(EntityData* dat)) {
NONMATCH("asm/non_matching/LoadRoomEntity.inc", Entity* LoadRoomEntity(const EntityData* dat)) {
int kind;
Entity* v4;
Entity* v5;
@ -86,7 +86,7 @@ NONMATCH("asm/non_matching/LoadRoomEntity.inc", Entity* LoadRoomEntity(EntityDat
}
END_NONMATCH
void RegisterRoomEntity(Entity* ent, EntityData* dat) {
void RegisterRoomEntity(Entity* ent, const EntityData* dat) {
u32 list;
u32 kind;
void* offset;
@ -108,7 +108,7 @@ void RegisterRoomEntity(Entity* ent, EntityData* dat) {
MemCopy(dat, offset, sizeof(EntityData));
}
void sub_0804AF0C(Entity* ent, EntityData* dat) {
void sub_0804AF0C(Entity* ent, const EntityData* dat) {
switch (dat->flags & 0xf0) {
case 0x0:
ent->x.HALF.HI = dat->xPos + gRoomControls.origin_x;

View File

@ -69,7 +69,6 @@ extern const EntityData gUnk_080FF264[];
extern void (*const gUnk_080FF28C[])(void);
extern Entity* LoadRoomEntity(EntityData*);
extern void sub_08054A14(u32);
extern const EntityData gUnk_080FEE48[];