diff options
| author | theo3 <arisstephenson2@gmail.com> | 2021-11-06 21:42:53 -0700 |
|---|---|---|
| committer | theo3 <arisstephenson2@gmail.com> | 2021-11-06 21:42:53 -0700 |
| commit | e6eeeefc50d5e7e4578443ea1f976de694fdb852 (patch) | |
| tree | 0d6c4bc01a628fa11bb3330327b48604321af35b /src | |
| parent | 3592e47cd6167082e866b1a391781995df253c3b (diff) | |
merge entity.c
Diffstat (limited to 'src')
| -rw-r--r-- | src/arm_proxy.c | 6 | ||||
| -rw-r--r-- | src/code_0804AA84.c | 2 | ||||
| -rw-r--r-- | src/code_0808091C.c | 6 | ||||
| -rw-r--r-- | src/entity.c | 260 | ||||
| -rw-r--r-- | src/fileScreen.c | 2 | ||||
| -rw-r--r-- | src/intro.c | 2 | ||||
| -rw-r--r-- | src/manager/managerC.c | 4 | ||||
| -rw-r--r-- | src/object/objectA.c | 4 | ||||
| -rw-r--r-- | src/room.c | 6 | ||||
| -rw-r--r-- | src/sub_08055E08.c | 4 | ||||
| -rw-r--r-- | src/sub_0805E374.c | 16 | ||||
| -rw-r--r-- | src/sub_0805E3A0.c | 9 | ||||
| -rw-r--r-- | src/sub_080A3B84.c | 2 |
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 { @@ -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; |
