summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortheo3 <arisstephenson2@gmail.com>2021-11-06 21:42:53 -0700
committertheo3 <arisstephenson2@gmail.com>2021-11-06 21:42:53 -0700
commite6eeeefc50d5e7e4578443ea1f976de694fdb852 (patch)
tree0d6c4bc01a628fa11bb3330327b48604321af35b /src
parent3592e47cd6167082e866b1a391781995df253c3b (diff)
merge entity.c
Diffstat (limited to 'src')
-rw-r--r--src/arm_proxy.c6
-rw-r--r--src/code_0804AA84.c2
-rw-r--r--src/code_0808091C.c6
-rw-r--r--src/entity.c260
-rw-r--r--src/fileScreen.c2
-rw-r--r--src/intro.c2
-rw-r--r--src/manager/managerC.c4
-rw-r--r--src/object/objectA.c4
-rw-r--r--src/room.c6
-rw-r--r--src/sub_08055E08.c4
-rw-r--r--src/sub_0805E374.c16
-rw-r--r--src/sub_0805E3A0.c9
-rw-r--r--src/sub_080A3B84.c2
13 files changed, 262 insertions, 61 deletions
diff --git a/src/arm_proxy.c b/src/arm_proxy.c
index d8efb2a0..62d49afb 100644
--- a/src/arm_proxy.c
+++ b/src/arm_proxy.c
@@ -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);
diff --git a/src/code_0804AA84.c b/src/code_0804AA84.c
index ec885d7b..e3839d74 100644
--- a/src/code_0804AA84.c
+++ b/src/code_0804AA84.c
@@ -45,7 +45,7 @@ void sub_0804AAD4(void) {
}
void sub_0804AB04(void) {
- sub_0805E5C0();
+ UpdateEntities();
if (gArea.field_0x10 != 0) {
FlushSprites();
sub_080AD9B0();
diff --git a/src/code_0808091C.c b/src/code_0808091C.c
index 9fc8718f..49c654d7 100644
--- a/src/code_0808091C.c
+++ b/src/code_0808091C.c
@@ -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;
}
diff --git a/src/entity.c b/src/entity.c
index cd9361f4..e05c64d1 100644
--- a/src/entity.c
+++ b/src/entity.c
@@ -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--;
}
diff --git a/src/fileScreen.c b/src/fileScreen.c
index 0c8d4e6c..46f01c41 100644
--- a/src/fileScreen.c
+++ b/src/fileScreen.c
@@ -175,7 +175,7 @@ void HandleChooseFileScreen(void) {
sFileScreenSubHandlers[gUnk_02032EC0.lastState]();
gUnk_02019EE0.isTransitioning = FALSE;
- sub_0805E5C0();
+ UpdateEntities();
sub_0805066C();
sub_0801C1D4();
sub_0801C208();
diff --git a/src/intro.c b/src/intro.c
index 04783e12..871caa64 100644
--- a/src/intro.c
+++ b/src/intro.c
@@ -245,7 +245,7 @@ static void HandleTitlescreen(void) {
LoadGfxGroup(3);
}
UpdateLightRays();
- sub_0805E5C0();
+ UpdateEntities();
sub_080AD9B0();
}
diff --git a/src/manager/managerC.c b/src/manager/managerC.c
index 20202345..e66185f7 100644
--- a/src/manager/managerC.c
+++ b/src/manager/managerC.c
@@ -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);
}
diff --git a/src/object/objectA.c b/src/object/objectA.c
index 0e63b26f..c6ed5309 100644
--- a/src/object/objectA.c
+++ b/src/object/objectA.c
@@ -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 {
diff --git a/src/room.c b/src/room.c
index d136e2f4..c4fa73d2 100644
--- a/src/room.c
+++ b/src/room.c
@@ -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);
}
diff --git a/src/sub_08055E08.c b/src/sub_08055E08.c
index 1b97f26f..e564244f 100644
--- a/src/sub_08055E08.c
+++ b/src/sub_08055E08.c
@@ -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);
diff --git a/src/sub_0805E374.c b/src/sub_0805E374.c
deleted file mode 100644
index 3ec3e287..00000000
--- a/src/sub_0805E374.c
+++ /dev/null
@@ -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]);
-}
diff --git a/src/sub_0805E3A0.c b/src/sub_0805E3A0.c
deleted file mode 100644
index 809d4b54..00000000
--- a/src/sub_0805E3A0.c
+++ /dev/null
@@ -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;
-}
diff --git a/src/sub_080A3B84.c b/src/sub_080A3B84.c
index 2012ae1d..193dd12f 100644
--- a/src/sub_080A3B84.c
+++ b/src/sub_080A3B84.c
@@ -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;