mirror of
https://github.com/zeldaret/tmc
synced 2026-06-27 10:43:05 -04:00
merge entity.c
This commit is contained in:
+3
-3
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -245,7 +245,7 @@ static void HandleTitlescreen(void) {
|
||||
LoadGfxGroup(3);
|
||||
}
|
||||
UpdateLightRays();
|
||||
sub_0805E5C0();
|
||||
UpdateEntities();
|
||||
sub_080AD9B0();
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
@@ -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
@@ -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);
|
||||
|
||||
@@ -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]);
|
||||
}
|
||||
@@ -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
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user