mirror of https://github.com/zeldaret/tmc.git
Match sub_0801876C
This commit is contained in:
parent
aad92e4341
commit
dba74f4c92
312
asm/kinstone.s
312
asm/kinstone.s
|
@ -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
|
||||
|
|
|
@ -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*);
|
||||
|
|
142
src/kinstone.c
142
src/kinstone.c
|
@ -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;
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
#include "entity.h"
|
||||
#include "room.h"
|
||||
|
||||
extern Entity* LoadRoomEntity(EntityData*);
|
||||
|
||||
void sub_0805E0C0(Entity*);
|
||||
void sub_0805E0F4(Entity*);
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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[];
|
||||
|
|
14
src/room.c
14
src/room.c
|
@ -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;
|
||||
|
|
|
@ -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[];
|
||||
|
|
Loading…
Reference in New Issue