Files
WeirdUtils/src/transform44/decompiled/decomp_UpdateEntityAndChunksPositions.c
T
MarcelineVQ 112246e687 perf: make all verified optimizations permanent, remove A/B toggles
- Glyph cache: unconditional (was A/B toggled)
- RenderParticleSprites SSE: unconditional (was A/B toggled)
- transform44 bone SSE: already permanent (teardown guard only)
- processLinkedListCollision: already permanent (JMP patch)
- frustumCullBoundingBox: already permanent (JMP patch)
- silicon functions (ftol, normalize, matmul, etc.): already permanent

Also adds decompilation of UpdateEntityAndChunksPositions — analyzed
but not optimizable (game function calls dominate, math is ~50 cycles
of the ~375 cycle total).
2026-03-24 00:44:18 -07:00

122 lines
4.6 KiB
C

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __fastcall UpdateEntityAndChunksPositions(int entityPtr)
{
float *pfVar1;
int iVar2;
float fVar3;
undefined *puVar4;
int *piVar5;
uint uVar6;
int iVar7;
undefined *local_38;
undefined *local_34;
undefined *local_30;
undefined *local_2c;
undefined *local_28;
undefined *local_24;
undefined *local_18;
undefined *local_14;
undefined *local_10;
undefined *local_c;
undefined *local_8;
*(float *)(entityPtr + 0x78) =
(_DAT_00c7bcb0 * *(float *)(entityPtr + 0x5c) +
_DAT_00c7bcb8 * *(float *)(entityPtr + 100) + _DAT_00c7bcb4 * *(float *)(entityPtr + 0x60) +
_DAT_00c7bcbc) - *(float *)(entityPtr + 0x68);
*(undefined **)(entityPtr + 0xb8) = PTR_00867964;
if ((((byte)g_renderFlags & 4) != 0) && (_DAT_00867960 < *(float *)(entityPtr + 0x78))) {
*(undefined **)(entityPtr + 0xb8) = PTR_00867968;
}
fVar3 = (float)PTR_00c62510 + *(float *)(entityPtr + 0xac);
*(float *)(entityPtr + 0xac) = fVar3;
if ((_DAT_0080a1e8 < fVar3) && (*(int *)(entityPtr + 0x14c) != 0)) {
recycleVertexBuffer((int *)(entityPtr + 0x14c),(undefined **)(entityPtr + 0x150));
}
if (*(int *)(entityPtr + 0xc0) != 0) {
if ((StaticFloat1_0 < *(float *)(entityPtr + 0xac)) &&
(puVar4 = check_instances_active(*(int *)(entityPtr + 0xc0)), puVar4 != (undefined *)0x0)) {
store_all_instance_buffers(*(int *)(entityPtr + 0xc0));
}
if (_DAT_0080a1e8 < *(float *)(entityPtr + 0xac)) {
return_object_to_pool(*(undefined ***)(entityPtr + 0xc0));
*(undefined4 *)(entityPtr + 0xc0) = 0;
}
}
piVar5 = (int *)(entityPtr + 0x118);
iVar7 = 4;
local_8 = (undefined *)piVar5;
do {
iVar2 = *piVar5;
if (iVar2 != 0) {
fVar3 = (float)PTR_00c62510 + *(float *)(iVar2 + 0x30);
*(float *)(iVar2 + 0x30) = fVar3;
if ((*(int *)(iVar2 + 0x400) != 0) && (_DAT_0080a1e8 < fVar3)) {
ReturnChunkBuffers((int *)(iVar2 + 0x400),(undefined **)(iVar2 + 0x404));
}
}
piVar5 = piVar5 + 1;
iVar7 = iVar7 + -1;
} while (iVar7 != 0);
if ((((*(float *)(entityPtr + 0x44) < _DAT_00c7cb68 !=
(*(float *)(entityPtr + 0x44) == _DAT_00c7cb68)) &&
(*(float *)(entityPtr + 0x48) < _DAT_00c7cb6c !=
(*(float *)(entityPtr + 0x48) == _DAT_00c7cb6c))) &&
(*(float *)(entityPtr + 0x4c) < _DAT_00c7cb70 !=
(*(float *)(entityPtr + 0x4c) == _DAT_00c7cb70))) &&
(puVar4 = IsPointInsideBounds((float *)(entityPtr + 0x50),(float *)&PTR_00c7cb5c),
(char)puVar4 != '\0')) {
pfVar1 = (float *)(entityPtr + 0x83c + *(int *)(&DAT_0086b580 + (int)PTR_00c7f294 * 4) * 0xc);
local_c = (undefined *)
(*(float *)(entityPtr + 0x844 + *(int *)(&DAT_0086b580 + (int)PTR_00c7f294 * 4) * 0xc)
+ *(float *)(entityPtr + 0x74));
local_10 = (undefined *)(pfVar1[1] + *(float *)(entityPtr + 0x70));
local_14 = (undefined *)(*pfVar1 + *(float *)(entityPtr + 0x6c));
AddObjectToSpatialList(entityPtr,(float *)&local_14);
uVar6 = *(uint *)(entityPtr + 0xe4);
if (((uVar6 & 1) != 0) || (uVar6 == 0)) {
uVar6 = 0;
}
for (; ((uVar6 & 1) == 0 && (uVar6 != 0));
uVar6 = *(uint *)(*(int *)(entityPtr + 0xdc) + uVar6 + 4)) {
iVar7 = *(int *)(uVar6 + 4);
if ((*(char *)(iVar7 + 0xc) < '\0') &&
((*(int *)(iVar7 + 0x88) != 0 || (*(int *)(iVar7 + 0x174) != 0)))) {
AddToSpatialGrid(iVar7);
}
}
}
uVar6 = 0;
piVar5 = (int *)local_8;
do {
if ((void *)*piVar5 != (void *)0x0) {
local_38 = (undefined *)0x0;
local_34 = (undefined *)0x0;
local_30 = (undefined *)0x0;
local_2c = (undefined *)0x0;
local_28 = (undefined *)0x0;
local_24 = (undefined *)0x0;
CopyChunkBounds((void *)*piVar5,&local_38);
local_18 = (undefined *)((float)local_30 + (float)local_24);
local_14 = (undefined *)(((float)local_2c + (float)local_38) * StaticFloat0_5);
local_10 = (undefined *)(((float)local_34 + (float)local_28) * StaticFloat0_5);
local_c = (undefined *)((float)local_18 * StaticFloat0_5);
if ((((((float)local_38 < _DAT_00c7cb68 != ((float)local_38 == _DAT_00c7cb68)) &&
((float)local_34 < _DAT_00c7cb6c != ((float)local_34 == _DAT_00c7cb6c))) &&
((float)local_30 < _DAT_00c7cb70 != ((float)local_30 == _DAT_00c7cb70))) &&
(((float)PTR_00c7cb5c <= (float)local_2c && (_DAT_00c7cb60 <= (float)local_28)))) &&
(_DAT_00c7cb64 <= (float)local_24)) {
AddToLayeredSpatialGrid(*piVar5,uVar6,(float *)&local_14);
}
}
uVar6 = uVar6 + 1;
piVar5 = piVar5 + 1;
} while (uVar6 < 4);
return;
}