merge entity.c

This commit is contained in:
theo3
2021-11-06 21:42:53 -07:00
parent 3592e47cd6
commit e6eeeefc50
34 changed files with 397 additions and 740 deletions
+3 -3
View File
@@ -17,7 +17,7 @@ extern u8 gUnk_03000C30;
extern u16* gUnk_02025EB0;
extern u16* gUnk_0200B650;
extern u8 gUnk_02000070;
extern u8 gUpdateVisibleTiles;
extern u8 gUnk_03003DF0[];
extern u8 gUnk_03003BE0;
extern Entity* gUnk_03004040[3];
@@ -116,8 +116,8 @@ void PrepNextFrame(void) {
UpdateDisplayControls();
LoadResources();
if (gUnk_02000070) {
gUnk_02000070 = 0;
if (gUpdateVisibleTiles) {
gUpdateVisibleTiles = 0;
if (gUnk_02025EB0 != NULL)
// sizeof(BGBuffer) = 0x800, what are we omitting?
DmaCopy32(3, &gBG1Buffer, VRAM + (*gUnk_02025EB0 & 0x1f00) * 8, 0x5C0);
+1 -1
View File
@@ -45,7 +45,7 @@ void sub_0804AAD4(void) {
}
void sub_0804AB04(void) {
sub_0805E5C0();
UpdateEntities();
if (gArea.field_0x10 != 0) {
FlushSprites();
sub_080AD9B0();
+3 -3
View File
@@ -8,7 +8,7 @@ extern void sub_08080BC4(void);
extern u32 gUnk_0200B650;
extern u32 gUnk_02025EB0;
extern u8 gUnk_02000070;
extern u8 gUpdateVisibleTiles;
void sub_080808D8(void) {
gScreenTransition.transitionType = 0;
@@ -89,7 +89,7 @@ void sub_08080974(u32 arg0, u32 arg1) {
}
sub_080809D4();
gUnk_02000070 = 1;
gUpdateVisibleTiles = 1;
}
void sub_080809D4(void) {
@@ -128,5 +128,5 @@ void sub_080809D4(void) {
}
sub_08080BC4();
gUnk_02000070 = 1;
gUpdateVisibleTiles = 1;
}
+243 -17
View File
@@ -1,15 +1,234 @@
#include "global.h"
#include "area.h"
#include "entity.h"
#include "utils.h"
#include "functions.h"
#include "entity.h"
#include "area.h"
#include "room.h"
#include "script.h"
#include "textbox.h"
typedef struct OtherEntity {
struct OtherEntity* prev;
struct OtherEntity* next;
Entity* field_0x8;
u8 field_0xC[0x34];
} OtherEntity;
extern void sub_0805E3A0(void*, u32);
extern u8 gUnk_081091F8[];
extern u8 gUnk_081091EE[];
extern u8 gUpdateVisibleTiles;
extern u8 gEntCount;
extern u8 gManagerCount;
extern Manager gUnk_02033290;
void sub_0805E524(void);
void sub_0805E510(u32);
void sub_0805ED30(void);
void ClearHitboxList(void);
void sub_0806F0A4(void);
void UpdateEntities_arm(u32);
void sub_0805EE88(void);
void ClearAllDeletedEntities(void);
void DeleteAllEntities(void);
void sub_0805E98C(void);
void sub_0805E248(void) {
s32 v0;
v0 = gUnk_03004030.unk_00->unk_06;
if (gRoomControls.areaID == 10 || gRoomControls.areaID == 22) {
SetTileType(636, v0 - 65, 1);
SetTileType(643, v0 - 65, 2);
SetTileType(637, v0 - 64, 1);
SetTileType(644, v0 - 64, 2);
SetTileType(638, v0 - 63, 1);
SetTileType(645, v0 - 63, 2);
SetTileType(639, v0 - 1, 1);
SetTileType(640, v0, 1);
SetTileType(642, v0 + 1, 1);
} else {
SetTileType(620, v0 - 65, 1);
SetTileType(627, v0 - 65, 2);
SetTileType(621, v0 - 64, 1);
SetTileType(628, v0 - 64, 2);
SetTileType(622, v0 - 63, 1);
SetTileType(629, v0 - 63, 2);
SetTileType(623, v0 - 1, 1);
SetTileType(624, v0, 1);
SetTileType(626, v0 + 1, 1);
}
gUpdateVisibleTiles = 0;
}
void sub_0805E374(Entity* param_1) {
u8 r3 = gScreenTransition.field_0x24[8];
u8* array = gUnk_081091F8;
if (r3 != 2) {
array = gUnk_081091EE;
}
sub_0805E3A0(param_1, array[param_1->kind]);
}
void sub_0805E3A0(void* ent, u32 param) {
Entity* e = (Entity*)ent;
e->scriptedScene2 = param;
e->scriptedScene = param;
}
bool32 sub_0805E3B0(Entity* this) {
u32 value;
if (this->flags & 0x10)
return TRUE;
if (this->action == 0)
return FALSE;
if (gUnk_03003DC0.unk0 > gUnk_03003DC0.unk1)
value = gUnk_03003DC0.unk0;
else
value = gUnk_03003DC0.unk1;
if (gMessage.doTextBox & 0x7F)
value = value < 2 ? 2 : value;
return value > this->scriptedScene;
}
bool32 sub_0805E40C(void) {
u32 v0 = gUnk_03003DC0.unk0;
if (gUnk_03003DC0.unk0 <= gUnk_03003DC0.unk1)
v0 = gUnk_03003DC0.unk1;
return v0 != 0;
}
s32 sub_0805E428() {
s32 result;
sub_0805E524();
if (gUnk_03003DC0.unk2) {
result = 0;
gUnk_03003DC0.unk1 = gUnk_03003DC0.unk2;
gUnk_03003DC0.unk2 = 0;
} else {
result = gUnk_03003DC0.unk3;
if (gUnk_03003DC0.unk3) {
gUnk_03003DC0.unk1 = gUnk_03003DC0.unk3 = 0;
}
}
return result;
}
s32 sub_0805E450(u32 a1) {
if (a1 < gUnk_03003DC0.unk2 || a1 < gUnk_03003DC0.unk1)
return 0;
gUnk_03003DC0.unk2 = a1;
return 1;
}
void sub_0805E470(void) {
gUnk_03003DC0.unk3 = 1;
}
void sub_0805E47C(Entity* this) {
this->scriptedScene2 = this->scriptedScene;
this->scriptedScene = 2;
if (sub_0805E450(2))
gUnk_03003DC0.unk4 = this;
}
void sub_0805E4A0(Entity* this) {
sub_08078A90(1);
this->scriptedScene2 = this->scriptedScene;
this->scriptedScene = 3;
if (sub_0805E450(1))
gUnk_03003DC0.unk4 = this;
}
void sub_0805E4CC(Entity* this) {
sub_08078A90(0);
sub_0805E584(this);
}
void sub_0805E4E0(Entity* a1, u32 a2) {
if (a1 != NULL) {
a1->scriptedScene2 = a1->scriptedScene;
a1->scriptedScene = 3;
}
if (sub_0805E450(1u))
gUnk_03003DC0.unk4 = a1;
sub_0805E510(a2);
}
void sub_0805E510(u32 a1) {
if (gUnk_03003DC0.unk_0xc < a1)
gUnk_03003DC0.unk_0xc = a1;
}
void sub_0805E524(void) {
if (gUnk_03003DC0.unk_0xc != 0) {
if (--gUnk_03003DC0.unk_0xc << 16 == 0)
sub_0805E470();
}
}
void sub_0805E544(void) {
gUnk_03003DC0.unk0 = 6;
gPlayerEntity.scriptedScene = 6;
}
void UnfreezeTime() {
gUnk_03003DC0.unk0 = 0;
gPlayerEntity.scriptedScene = 1;
}
void sub_0805E584(Entity* e) {
e->scriptedScene = e->scriptedScene2;
sub_0805E470();
}
void sub_0805E59C() {
gUnk_03003DC0.unk0 = 6;
}
void sub_0805E5A8() {
gUnk_03003DC0.unk0 = 7;
}
void sub_0805E5B4() {
gUnk_03003DC0.unk0 = 0;
}
void UpdateEntities() {
void (*f)(u32);
gRoomVars.filler1[0] = gRoomVars.field_0x4;
gRoomVars.field_0x4 = 0;
sub_0805ED30();
sub_0805E428();
ClearHitboxList();
sub_0806F0A4();
f = UpdateEntities_arm;
f(0);
ClearAllDeletedEntities();
sub_0805EE88();
}
void UpdateManagers() {
void (*f)(u32);
f = UpdateEntities_arm;
f(1);
ClearAllDeletedEntities();
}
void EraseAllEntities() {
extern u8 gUnk_03000000[];
DeleteAllEntities();
MemClear(&gUnk_03003DC0, 12);
MemClear(&gPlayerEntity, 10880);
MemClear(&gUnk_02033290, 2048);
sub_0805E98C();
gEntCount = 0;
gManagerCount = 0;
gUnk_03000000[0x427] = 1;
gUnk_03000000[0x426] = 1;
gUnk_03000000[0x42e] = 1;
}
ASM_FUNC("./asm/getEmptyEntity.s", Entity* GetEmptyEntity());
extern Entity gUnk_030011E8[7];
@@ -25,7 +244,7 @@ Entity* sub_0805E744(void) {
return NULL;
}
OtherEntity* GetEmptyManager(void);
Manager* GetEmptyManager(void);
typedef void* (*Getter)(void);
@@ -55,7 +274,7 @@ void DeleteThisEntity(void) {
_call_via_r0((u32*)&_ClearAndUpdateEntities);
}
void DeleteManager(OtherEntity*);
void DeleteManager(Manager*);
typedef void (*Deleter)(void*);
@@ -146,13 +365,20 @@ void DeleteAllEntities(void) {
}
}
extern OtherEntity gUnk_02033290;
extern Manager gUnk_02033290;
OtherEntity* GetEmptyManager(void) {
OtherEntity* it;
for (it = &gUnk_02033290; it < (&gUnk_02033290 + 32); it++) {
typedef struct Temp {
void* prev;
void* next;
u8 _0[0x38];
} Temp;
// fix this
Manager* GetEmptyManager(void) {
Temp* it;
for (it = (Temp*)&gUnk_02033290; it < ((Temp*)&gUnk_02033290 + 32); it++) {
if (it->prev == 0) {
return it;
return (Manager*)it;
}
}
return NULL;
@@ -160,13 +386,13 @@ OtherEntity* GetEmptyManager(void) {
extern u8 gManagerCount;
void DeleteManager(OtherEntity* ent) {
void DeleteManager(Manager* ent) {
if (!ent->next)
return;
sub_0805E92C(ent);
UnlinkEntity(ent);
MemClear(ent, sizeof(OtherEntity));
MemClear(ent, sizeof(Temp));
gManagerCount--;
}
+1 -1
View File
@@ -175,7 +175,7 @@ void HandleChooseFileScreen(void) {
sFileScreenSubHandlers[gUnk_02032EC0.lastState]();
gUnk_02019EE0.isTransitioning = FALSE;
sub_0805E5C0();
UpdateEntities();
sub_0805066C();
sub_0801C1D4();
sub_0801C208();
+1 -1
View File
@@ -245,7 +245,7 @@ static void HandleTitlescreen(void) {
LoadGfxGroup(3);
}
UpdateLightRays();
sub_0805E5C0();
UpdateEntities();
sub_080AD9B0();
}
+2 -2
View File
@@ -51,7 +51,7 @@ extern u8 gUnk_03003DE4[0xC];
extern struct BgAffineDstData gUnk_02017AA0[];
extern struct BgAffineDstData gUnk_02017BA0[];
extern u8 gUnk_02017700[];
extern u8 gUnk_02000070;
extern u8 gUpdateVisibleTiles;
extern u32 gUsedPalettes;
void sub_08058894(ManagerC*);
@@ -294,7 +294,7 @@ void sub_08058D34() {
gScreen.controls.layerFXControl = 0x3456;
gScreen.controls.alphaBlend = 0x909;
gArea.musicIndex = gArea.pMusicIndex;
gUnk_02000070 = 0;
gUpdateVisibleTiles = 0;
if (CheckGlobalFlag(LV1TARU_OPEN)) {
LoadGfxGroup(0x4A);
}
+2 -2
View File
@@ -7,7 +7,7 @@
extern Hitbox gUnk_080FD170;
extern u8 gUnk_02000070;
extern u8 gUpdateVisibleTiles;
void ObjectA(Entity* this) {
u32 uVar2;
@@ -24,7 +24,7 @@ void ObjectA(Entity* this) {
if (CheckFlags(this->field_0x86.HWORD) != 0) {
SetTileType(*(u16*)&this->field_0x70.HALF.LO, COORD_TO_TILE(this), this->collisionLayer);
if ((gRoomControls.unk2 & 1) != 0) {
gUnk_02000070 = 0;
gUpdateVisibleTiles = 0;
}
DeleteThisEntity();
} else {
+3 -3
View File
@@ -2305,7 +2305,7 @@ u32 sub_0804CD44() {
extern EntityData gUnk_080DF94C;
extern u8 gUnk_02000070;
extern u8 gUpdateVisibleTiles;
extern u32 gUsedPalettes;
void sub_0804CD48(void) {
@@ -2313,7 +2313,7 @@ void sub_0804CD48(void) {
if (!CheckLocalFlag(0x48)) {
SetLocalFlag(0x48);
MenuFadeIn(5, 0);
gUnk_02000070 = 0;
gUpdateVisibleTiles = 0;
gFadeControl.active = 0;
gUsedPalettes = 0;
*(u16*)0x5000000 = 0x7fff;
@@ -4888,7 +4888,7 @@ void sub_0804E7DC(void) {
if (!CheckGlobalFlag(START) && !CheckLocalFlag(0x46)) {
sub_080A71C4(5, 1, 4, 4);
gUnk_02000070 = 0;
gUpdateVisibleTiles = 0;
DoFade(5, 0x100);
sub_080751E8(0, 6, &script_08009B30);
}
+2 -2
View File
@@ -14,7 +14,7 @@ struct {
/*0x1d*/ u8 unk1D;
/*0x1e*/ u8 unk1E;
/*0x1f*/ u8 unk1F;
} gUnk_02000070 = {};
} gUpdateVisibleTiles = {};
extern EntityData gUnk_080FF400;
@@ -24,7 +24,7 @@ void sub_08055E08(void) {
void sub_08055E24(void) {
gMenu.overlayType++;
gUnk_02000070.unk0 = 1;
gUpdateVisibleTiles.unk0 = 1;
sub_0804B0B0(gMenu.field_0xc[2], gMenu.field_0xc[3]);
LoadRoomEntityList(&gUnk_080FF400);
sub_08055B70(gMenu.field_0x4, 0, 0, 0);
-16
View File
@@ -1,16 +0,0 @@
#include "entity.h"
#include "structures.h"
extern Entity* sub_0805E3A0(Entity*, u32);
extern u8 gUnk_081091F8[];
extern u8 gUnk_081091EE[];
Entity* sub_0805E374(Entity* param_1) {
u8 r3 = gScreenTransition.field_0x24[8];
u8* array = gUnk_081091F8;
if (r3 != 2) {
array = gUnk_081091EE;
}
return sub_0805E3A0(param_1, array[param_1->kind]);
}
-9
View File
@@ -1,9 +0,0 @@
#include "global.h"
#include "entity.h"
Entity* sub_0805E3A0(Entity* ent, u32 param) {
// these are bitfields
ent->scriptedScene2 = param;
ent->scriptedScene = param;
return ent;
}
+1 -1
View File
@@ -15,7 +15,7 @@ void DrawKinstoneMenu(void) {
sub_080A4054();
sub_0801C1D4();
sub_0801C208();
sub_0805E5C0();
UpdateEntities();
sub_080AD9B0();
sub_080AD918();
gScreenTransition.field_0x24[8] = 0;