This commit is contained in:
theo
2020-06-13 14:54:58 -07:00
8 changed files with 519 additions and 947 deletions
+33
View File
@@ -0,0 +1,33 @@
#include "global.h"
#include "entity.h"
#include "entityData.h"
extern void sub_080A2CC0();
extern void sub_0806F69C();
extern void sub_08004488();
extern Entity * sub_0804B128();
void sub_08032358(Entity *ent)
{
u16 uVar1;
Entity *pEVar2;
u16 *puVar3;
if (ent->action == 0) {
ent->action = 1;
pEVar2 = sub_0804B128((u8)(ent->entityType).parameter1);
ent->attachedEntity = pEVar2;
sub_080A2CC0((EntityData *)ent,&ent->attachedEntity,&ent->heldObjectPtr);
}
if ((ent->direction & 0x80) == 0) {
sub_0806F69C(ent);
}
(u32)puVar3 = &(ent->heldObjectPtr);
uVar1 = *puVar3;
*puVar3 = uVar1 - 1;
if ((u16)(*puVar3) == 0) {
if ((ent->direction & 0x80) == 0) {
sub_08004488(0x74);
}
sub_080A2CC0((EntityData *)ent,&ent->attachedEntity,puVar3);
}
}
+235
View File
@@ -0,0 +1,235 @@
#include "global.h"
#include "entity.h"
#include "link.h"
extern void sub_0806ED78(Entity*);
extern void sub_0806920C(Entity*);
extern void sub_080042B8(Entity*);
extern u32 sub_0805ACC0(Entity*);
extern u32 sub_0801E99C(Entity*);
extern void sub_0806924C(Entity*);
extern void sub_080AEF88(Entity*);
extern void sub_0806F1AC(Entity*, u32*);
extern void sub_08078778(Entity*);
extern void sub_080787A8(Entity*, u32);
extern void sub_0806F118(Entity*);
extern void sub_080791D0();
extern void (*gUnk_08111914[])(Entity*);
extern void (*gUnk_08111928[])(Entity*);
extern u32 gUnk_08111938[];
extern void LoadAnimation();
extern void PlaySFX(u32);
extern u32 Random();
extern u32 UpdateFuseInteraction(Entity*);
extern LinkState gLinkState;
void sub_08068F98(Entity* ent) {
gUnk_08111914[ent->action](ent);
sub_0806ED78(ent);
sub_0806920C(ent);
}
void sub_08068FC0(Entity* ent) {
u32 r2;
ent->action = 1;
ent->animationState = ent->entityType.parameter2;
ent->nonPlanarMovement = 0x40;
ent->field_0x6d = 0xFF;
r2 = sub_0805ACC0(ent);
if (r2 == 0) {
u16 x, y;
x = ent->x.HALF.HI;
*(u16*)&ent->field_0x68 = x;
y = ent->y.HALF.HI;
ent->field_0x6a = y;
} else {
u32 var1 = r2 >> 16;
//0x68+0x69 probably a SplitWord
*(u16*)&ent->field_0x68 = var1;
ent->field_0x6a = r2;
}
ent->field_0x6c = sub_0801E99C(ent);
LoadAnimation(ent, ent->animationState + 4);
}
void sub_08069018(Entity* ent) {
s32 var0;
if (ent->previousActionFlag == 0) {
ent->previousActionFlag++;
ent->field_0xf = (Random() & 0x3F) + 0x3C;
LoadAnimation(ent, ent->animationState);
}
sub_080042B8(ent);
var0 = --ent->field_0xf;
if (var0 == 0) {
if (ent->parameter3 == 0) {
ent->action = 2;
} else {
ent->action = 3;
}
ent->previousActionFlag = var0;
}
sub_0806924C(ent);
}
void sub_08069068(Entity *ent) {
s32 var0;
if (ent->previousActionFlag == 0) {
u32 anim;
ent->previousActionFlag++;
anim = (Random() & 2) - 1;
anim = (anim + ent->animationState) & 3;
ent->animationState = anim;
ent->direction = anim <<= 3;
ent->field_0xf = (Random() & 0x3F) + 0x3C;
LoadAnimation(ent, ent->animationState + 4);
}
sub_080AEF88(ent);
sub_080042B8(ent);
{
s32 x = ent->x.HALF.HI;
s16 *x2 = (s16 *)&ent->field_0x68;
x -= *x2;
if (x > 16) {
ent->x.HALF.HI = *x2 + 16;
ent->field_0xf = 1;
}
if (x < -16) {
ent->x.HALF.HI = *x2 - 16;
ent->field_0xf = 1;
}
}
{
s32 y = ent->y.HALF.HI;
s16 *y2 = &ent->field_0x6a;
y -= *y2;
if (y > 16) {
ent->y.HALF.HI = *y2 + 16;
ent->field_0xf = 1;
}
if (y < -16) {
ent->y.HALF.HI = *y2 - 16;
ent->field_0xf = 1;
}
}
var0 = --ent->field_0xf;
if (var0 == 0) {
ent->action = 3;
ent->previousActionFlag = var0;
}
sub_0806924C(ent);
}
void sub_08069124(Entity* ent) {
sub_080042B8(ent);
gUnk_08111928[ent->previousActionFlag](ent);
sub_0806924C(ent);
}
void sub_08069148(Entity* ent) {
u32 var0 = Random() & 3;
var0 += 3;
ent->field_0xf = var0;
ent->previousActionFlag = 1;
LoadAnimation(ent, ent->animationState + 8);
}
void sub_08069168(Entity* ent) {
if ((s8)ent->frames.all < 0) {
ent->previousActionFlag = 2;
LoadAnimation(ent, ent->animationState + 12);
}
}
void sub_08069188(Entity* ent) {
if (ent->frames.f2 == 0) return;
ent->frames.all = 0;
if (((s8) --ent->field_0xf) != 0) return;
ent->previousActionFlag = 3;
LoadAnimation(ent, ent->animationState + 16);
}
void sub_080691BC(Entity* ent) {
if ((s8)ent->frames.all < 0) {
ent->action = 1;
ent->previousActionFlag = 0;
LoadAnimation(ent, ent->animationState + 4);
}
}
void sub_080691E0(Entity* ent) {
if (UpdateFuseInteraction(ent) != 0) {
ent->action = 1;
ent->previousActionFlag = 0;
}
}
void sub_080691F8(Entity* ent) {
u32 var0 = ent->entityType.parameter1;
u32* var1 = gUnk_08111938 + (var0 * 2);
sub_0806F1AC(ent, var1);
}
void sub_0806920C(Entity* ent) {
//TODO: figure out what bitfield flag this is
u32 var0 = gLinkState.flags.all & 0x80;
u32 var1 = -var0 >> 0x1F;
if (var1 != ent->field_0x6d) {
if (var1 == 0) {
sub_08078778(ent);
} else {
sub_080787A8(ent, ent->field_0x6c);
}
}
ent->field_0x6d = var1;
}
void sub_0806924C(Entity* ent) {
s8 itype = ent->interactType;
if (itype != 0) {
//TODO: figure out what bitfield flag this is
if ((gLinkState.flags.all & 0x80) != 0) {
if (itype == 2) {
ent->action = 4;
sub_0806F118(ent);
} else {
sub_080691F8(ent);
}
} else {
sub_080691F8(ent);
sub_080791D0();
}
PlaySFX(212);
ent->interactType = 0;
}
}
void sub_080692A0(Entity* ent) {
if (ent->action == 0) {
ent->action++;
ent->spriteSettings.b.ss0 = 1;
LoadAnimation(ent, 15);
} else {
sub_080042B8(ent);
}
}
+237
View File
@@ -0,0 +1,237 @@
#include "global.h"
#include "entity.h"
#include "room.h"
extern void sub_0805EA78(Entity*, u32);
extern void sub_0805E3A0(Entity*, u32);
extern void sub_0807DD50(Entity*);
extern void sub_0807DD94(Entity*, u32);
extern Entity* sub_0805EB9C(u32, u32);
void CopyPosition(Entity*, Entity*);
void sub_08068680(Entity*, Entity*);
void sub_08068694(Entity*, Entity*);
extern void SetGlobalFlag(u32);
extern Entity* CreateNPC(u32 subtype,u32 parameter1,u32 parameter2);
u32 sub_0806EDC4(Entity* ent);
void DeleteThisEntity(void);
extern Entity* GetEntityByType(u32, u32);
extern void sub_080686C4(Entity*, Entity*);
extern void LoadAnimation(Entity*, u32);
extern void sub_080042B8(Entity*);
extern void sub_0806F62C(Entity*, u32, u32);
extern u32 sub_08003FC4(Entity*, u32);
extern void PlaySFX(u32);
extern void SetTileType(u32, u32, u32);
extern void sub_0807BA8C(u16, u32);
extern Entity gLinkEntity;
extern RoomControls gRoomControls;
extern void (*gUnk_08110BD8[])(Entity* ent);
extern u8 gUnk_02033280[];
extern u16 gUnk_08110BE0[];
void sub_08066CB4(Entity* ent)
{
gUnk_08110BD8[ent->action](ent);
}
void sub_08066CCC(Entity *ent)
{
ent->action = 1;
ent->spriteSettings.b.ss0 = 1;
sub_0805EA78(ent, 7);
sub_0805E3A0(ent, 2);
sub_0807DD50(ent);
}
void sub_08066CF8(Entity* ent)
{
sub_0807DD94(ent, 0);
}
void sub_08066D04(Entity* ent)
{
ent->parent = sub_0805EB9C(7, 0x2E);
}
void sub_08066D14(Entity* ent, u32* param_2)
{
Entity* parent;
parent = ent->parent;
if (parent != NULL)
{
ent->animationState = parent->animationState;
ent->spriteSettings.b.ss0 = 1;
CopyPosition(parent, ent);
sub_08068680(ent, ent->parent);
param_2[5] = 1;
}
else
{
param_2[5] = 0;
}
}
void sub_08066D4C(Entity* ent, u32* param_2)
{
Entity* parent;
parent = ent->parent;
if (ent->parent != NULL)
{
CopyPosition(ent, parent);
ent->parent->spriteSettings.b.ss0 = 1;
ent->parent->animationState = ent->animationState;
ent->spriteSettings.b.ss0 = 0;
ent->field_0x17 &= 0xFE;
sub_08068694(ent, ent->parent);
param_2[5] = 1;
}
else
{
param_2[5] = 0;
}
}
void sub_08066D94(Entity* ent)
{
u32 roomID;
Entity* npc;
SetGlobalFlag(0x1C);
npc = CreateNPC(0x2E, 0, 0);
if (npc != NULL)
{
npc->animationState = gLinkEntity.animationState;
npc->flags |= 0x20;
npc->animationState = sub_0806EDC4(ent);
roomID = gRoomControls.roomID;
*(u16*)&npc->heldObjectPtr = roomID;
CopyPosition(ent, npc);
}
DeleteThisEntity();
}
void sub_08066DE4(Entity* ent)
{
Entity* pEVar1;
pEVar1 = sub_0805EB9C(7, 0x2E);
if (pEVar1 != NULL)
{
CopyPosition(ent, pEVar1);
sub_080686C4(ent, pEVar1);
}
}
void sub_08066E08(Entity* ent)
{
LoadAnimation(ent, 0x50);
ent->field_0x80 = ent->field_0x58;
}
void sub_08066E20(Entity* ent)
{
LoadAnimation(ent, 0x44);
ent->field_0x80 = ent->field_0x58;
}
void sub_08066E38(Entity* ent)
{
LoadAnimation(ent, 0x48);
ent->field_0x80 = ent->field_0x58;
}
void sub_08066E50(Entity* ent)
{
LoadAnimation(ent, 0x4C);
ent->field_0x80 = ent->field_0x58;
}
void sub_08066E68(Entity* ent)
{
LoadAnimation(ent, 0x54);
ent->field_0x80 = ent->field_0x58;
}
void sub_08066E80(Entity* ent, u8* param_2)
{
switch(param_2[0x18])
{
case 0:
param_2[0x18]++;
LoadAnimation(ent, 0x16);
break;
case 1:
sub_080042B8(ent);
if (ent->frames.all & 1)
{
param_2[0x18]++;
ent->field_0x20 = 0x20000;
ent->frames.all &= 0xFE;
PlaySFX(0x7C);
}
break;
case 2:
sub_0806F62C(ent, 0x100, 0x80);
sub_08003FC4(ent, 0x2000);
if (!(ent->frames.all & 1))
{
sub_080042B8(ent);
}
if (ent->field_0x20 < 0)
{
param_2[0x18]++;
}
break;
case 3:
sub_0806F62C(ent, 0x100, 0x80);
sub_080042B8(ent);
if (sub_08003FC4(ent, 0x2000) == 0)
{
param_2[0x18]++;
LoadAnimation(ent, 0x1E);
}
break;
case 4:
sub_080042B8(ent);
if (ent->frames.b.f3)
{
gUnk_02033280[7] |= 1;
return;
}
}
ent->field_0x80 = ent->field_0x58;
gUnk_02033280[6] = 0;
}
void sub_08066F94(void)
{
u16 uVar1;
u16* puVar2;
puVar2 = gUnk_08110BE0;
while (*puVar2 != 0)
{
uVar1 = *puVar2;
puVar2++;
SetTileType(16498, uVar1, 1);
}
}
void sub_08066FB8(void)
{
u16 uVar1;
u16* puVar2;
puVar2 = gUnk_08110BE0;
while (*puVar2 != 0)
{
uVar1 = *puVar2;
puVar2++;
sub_0807BA8C(uVar1, 1);
}
}