Ghidra decompilation of all inner functions called by transformMatrix4x4, plus the full 2263-line main function decompilation.
2264 lines
110 KiB
C
2264 lines
110 KiB
C
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
void __thiscall
|
|
transformMatrix4x4(SceneObject *this,Matrix4x4 *param_2,Matrix4x4 *param_3,Matrix4x4 *param_4,
|
|
Matrix4x4 *param_5)
|
|
|
|
{
|
|
AnimationData *animationData;
|
|
float *pfVar1;
|
|
float *pfVar2;
|
|
float fVar3;
|
|
float fVar4;
|
|
float fVar5;
|
|
float fVar6;
|
|
float fVar7;
|
|
short sVar8;
|
|
uint uVar9;
|
|
Matrix4x4 *pMVar10;
|
|
int iVar11;
|
|
float *pfVar12;
|
|
undefined2 *puVar13;
|
|
undefined *puVar14;
|
|
int iVar15;
|
|
char cVar16;
|
|
uint uVar17;
|
|
uint uVar18;
|
|
Matrix4x4 *pMVar19;
|
|
uint *puVar20;
|
|
uint *puVar21;
|
|
int iVar22;
|
|
Matrix4x4 *pMVar23;
|
|
AnimationData *pAVar24;
|
|
float10 fVar25;
|
|
longlong lVar26;
|
|
Matrix4x4 local_1a0;
|
|
undefined4 local_160;
|
|
undefined4 local_15c;
|
|
undefined4 local_158;
|
|
undefined4 local_154;
|
|
undefined4 local_150;
|
|
undefined4 local_14c;
|
|
float local_148;
|
|
float local_144;
|
|
float local_140;
|
|
undefined4 local_13c;
|
|
undefined4 local_138;
|
|
undefined4 local_134;
|
|
float local_130;
|
|
float local_12c;
|
|
undefined4 local_128;
|
|
float local_124;
|
|
float local_120;
|
|
float local_11c;
|
|
float local_118;
|
|
float local_114;
|
|
undefined4 local_110;
|
|
float local_10c;
|
|
float local_108;
|
|
float local_104;
|
|
float local_100;
|
|
float local_fc;
|
|
float local_f8;
|
|
float local_f4;
|
|
float local_f0;
|
|
float local_ec;
|
|
float local_e8;
|
|
float local_e4;
|
|
float local_e0;
|
|
undefined4 local_dc;
|
|
float local_d8;
|
|
float local_d4;
|
|
float local_d0;
|
|
undefined4 local_cc;
|
|
float local_c8;
|
|
float local_c4;
|
|
float local_c0;
|
|
undefined4 local_bc;
|
|
float local_b8;
|
|
float local_b4;
|
|
float local_b0;
|
|
undefined4 local_ac;
|
|
float local_a8;
|
|
float local_a4;
|
|
float local_a0;
|
|
float local_9c;
|
|
float local_98;
|
|
float local_94;
|
|
float local_90;
|
|
float local_8c;
|
|
float local_88;
|
|
float local_84;
|
|
float local_80;
|
|
float local_7c;
|
|
float local_78;
|
|
Matrix4x4 local_74;
|
|
float local_34;
|
|
float local_30;
|
|
float local_2c;
|
|
uint *local_28;
|
|
uint *local_24;
|
|
int local_20;
|
|
float local_1c;
|
|
int local_18;
|
|
float *local_14;
|
|
uint *local_10;
|
|
AnimationData *local_c;
|
|
AnimationData *local_8;
|
|
|
|
if ((this->model_data_ptr != (void *)0x0) &&
|
|
(this->transform_sync_value != *(int *)((int)this->animation_context_ptr + 0x10))) {
|
|
iVar11 = *(int *)&this->field_0x1cc;
|
|
iVar22 = *(int *)((int)this->ptr_at_2c + 0x130);
|
|
if (iVar11 != 0) {
|
|
if ((*(int *)(iVar11 + 0x50) == 0) || (this->field_0x188 == 0.0)) {
|
|
uVar17 = 0;
|
|
}
|
|
else {
|
|
uVar17 = 1;
|
|
}
|
|
this->emitter_enable_flag = uVar17;
|
|
*(undefined4 *)&this->field_0x17c = *(undefined4 *)(iVar11 + 0x17c);
|
|
}
|
|
fVar3 = param_3->m01;
|
|
fVar4 = param_3->m02;
|
|
this->world_position_x = param_3->m00 * *(float *)&this->field_0x184;
|
|
this->world_position_y = (float)this->current_animation_data * fVar3;
|
|
this->rendering_offset_base = (uint)(this->global_scale_factor * fVar4);
|
|
local_34 = param_4->m00 + (float)this->field_0x17c;
|
|
local_30 = this->render_scale_x + param_4->m01;
|
|
local_2c = this->render_scale_y + param_4->m02;
|
|
this->render_priority = local_34;
|
|
this->world_position_z = local_30;
|
|
this->field_0x180 = local_2c;
|
|
uVar17 = 0;
|
|
this->render_scale_z = (float)param_5 * *(float *)&this->field_0x180;
|
|
if (*(int *)(iVar22 + 0x14) != 0) {
|
|
do {
|
|
uVar18 = *(uint *)(*(int *)(iVar22 + 0x18) + uVar17 * 4);
|
|
if (uVar18 == 0) {
|
|
uVar18 = 0;
|
|
}
|
|
else {
|
|
uVar18 = (uint)(*(int *)((int)this->animation_context_ptr + 0xc) - (int)this->position_x)
|
|
% uVar18;
|
|
}
|
|
*(uint *)(this->search_data_count + uVar17 * 4) = uVar18;
|
|
uVar17 = uVar17 + 1;
|
|
} while (uVar17 < *(uint *)(iVar22 + 0x14));
|
|
}
|
|
local_18 = iVar22;
|
|
initParticlePixelShaderGeneration();
|
|
iVar11 = *(int *)&this->field_0x1cc;
|
|
if ((iVar11 == 0) || ((*(byte *)(iVar11 + 4) & 1) != 0)) {
|
|
this->child_objects_padding =
|
|
(uint)(this->world_transform_matrix[10] * this->world_transform_matrix[10] +
|
|
this->world_transform_matrix[9] * this->world_transform_matrix[9] +
|
|
this->world_transform_matrix[8] * this->world_transform_matrix[8]);
|
|
}
|
|
else {
|
|
this->child_objects_padding = *(uint *)(iVar11 + 0x84);
|
|
}
|
|
local_74.m00 = 1.0;
|
|
local_74.m01 = 0.0;
|
|
local_74.m02 = 0.0;
|
|
local_74.m03 = 0.0;
|
|
local_74.m10 = 0.0;
|
|
local_74.m11 = 1.0;
|
|
local_74.m12 = 0.0;
|
|
local_74.m13 = 0.0;
|
|
local_74.m20 = 0.0;
|
|
local_74.m21 = 0.0;
|
|
local_74.m22 = 1.0;
|
|
local_74.m23 = 0.0;
|
|
local_74.m30 = 0.0;
|
|
local_74.m31 = 0.0;
|
|
local_74.m32 = 0.0;
|
|
local_74.m33 = 1.0;
|
|
local_e8 = 1.0;
|
|
local_e4 = 0.0;
|
|
local_e0 = 0.0;
|
|
local_dc = 0;
|
|
local_d8 = 0.0;
|
|
local_d4 = 1.0;
|
|
local_d0 = 0.0;
|
|
local_cc = 0;
|
|
local_c8 = 0.0;
|
|
local_c4 = 0.0;
|
|
local_c0 = 1.0;
|
|
local_bc = 0;
|
|
local_b8 = 0.0;
|
|
local_b4 = 0.0;
|
|
local_b0 = 0.0;
|
|
local_ac = 0x3f800000;
|
|
local_8 = (AnimationData *)0x0;
|
|
if ((this->search_data_base_ptr != 0) &&
|
|
(uVar17 = *(uint *)((int)this->animation_context_ptr + 0xc), uVar17 != 0)) {
|
|
local_8 = (AnimationData *)(uVar17 - this->search_data_base_ptr);
|
|
this->search_data_base_ptr = uVar17;
|
|
}
|
|
param_5 = *(Matrix4x4 **)(iVar22 + 0x34);
|
|
param_3 = (Matrix4x4 *)0x0;
|
|
if (param_5 != (Matrix4x4 *)0x0) {
|
|
do {
|
|
pMVar23 = (Matrix4x4 *)((int)param_3 * 0x6c + *(int *)(local_18 + 0x38));
|
|
uVar17 = this->unknown_0x80;
|
|
iVar11 = *(int *)((int)param_3 * 0x118 + 0xa4 + uVar17);
|
|
puVar20 = (uint *)((int)param_3 * 0x118 + uVar17);
|
|
param_4 = pMVar23;
|
|
if (iVar11 == -1) {
|
|
if ((Matrix4x4 *)(uint)*(ushort *)&pMVar23->m02 < param_5) {
|
|
iVar11 = (int)(uint)*(ushort *)&pMVar23->m02 * 0x118 + uVar17;
|
|
puVar20[0x26] = *(uint *)(iVar11 + 0x98);
|
|
puVar20[0x27] = *(uint *)(iVar11 + 0x9c);
|
|
puVar20[0x28] = *(uint *)(iVar11 + 0xa0);
|
|
}
|
|
else if (param_3 != (Matrix4x4 *)0x0) {
|
|
puVar20[0x26] = *(uint *)(uVar17 + 0x98);
|
|
puVar20[0x27] = *(uint *)(uVar17 + 0x9c);
|
|
puVar20[0x28] = *(uint *)(uVar17 + 0xa0);
|
|
}
|
|
}
|
|
else {
|
|
if (this->search_data_base_ptr != 0) {
|
|
puVar20[0x2a] = (int)&local_8->interpolationModeAndTimeIndex + puVar20[0x2a];
|
|
puVar20[0x2b] = (int)&local_8->interpolationModeAndTimeIndex + puVar20[0x2b];
|
|
}
|
|
pMVar10 = (Matrix4x4 *)(iVar11 * 0x44 + *(int *)(local_18 + 0x20));
|
|
uVar17 = *(uint *)((int)this->animation_context_ptr + 0xc);
|
|
if (((uint)pMVar10->m10 & 1) == 0) {
|
|
LAB_007145f1:
|
|
param_5 = (Matrix4x4 *)pMVar10->m02;
|
|
param_2 = (Matrix4x4 *)pMVar10->m01;
|
|
if ((int)param_2 < (int)param_5) {
|
|
local_1c = (float)(uVar17 - puVar20[0x2a]);
|
|
lVar26 = __ftol();
|
|
param_2 = (Matrix4x4 *)
|
|
((int)¶m_2->m00 +
|
|
((int)lVar26 + puVar20[0x2e]) % (uint)((int)param_5 - (int)param_2));
|
|
}
|
|
}
|
|
else {
|
|
uVar18 = puVar20[0x2b];
|
|
uVar9 = puVar20[0x2a];
|
|
if (uVar18 != uVar17 && -1 < (int)(uVar18 - uVar17)) {
|
|
if (uVar9 != uVar17 && -1 < (int)(uVar9 - uVar17)) {
|
|
uVar17 = puVar20[0x2a];
|
|
}
|
|
goto LAB_007145f1;
|
|
}
|
|
param_2 = (Matrix4x4 *)(uVar18 - uVar9);
|
|
param_5 = pMVar10;
|
|
lVar26 = __ftol();
|
|
iVar11 = (int)lVar26 + puVar20[0x2e];
|
|
if (iVar11 < 0) {
|
|
param_2 = (Matrix4x4 *)param_5->m01;
|
|
}
|
|
else {
|
|
param_2 = (Matrix4x4 *)param_5->m02;
|
|
if (iVar11 <= (int)param_2 - (int)param_5->m01) {
|
|
param_2 = (Matrix4x4 *)(iVar11 + (int)param_5->m01);
|
|
}
|
|
}
|
|
}
|
|
puVar20[0x27] = puVar20[0x29];
|
|
puVar20[0x26] = (uint)param_2;
|
|
puVar20[0x28] = (uint)param_3;
|
|
}
|
|
if (puVar20[0x34] == 0xffffffff) {
|
|
if ((uint)*(ushort *)&pMVar23->m02 < *(uint *)(local_18 + 0x34)) {
|
|
uVar17 = (uint)*(ushort *)&pMVar23->m02 * 0x118 + this->unknown_0x80;
|
|
LAB_007147df:
|
|
puVar20[0x31] = *(uint *)(uVar17 + 0xc4);
|
|
puVar20[0x32] = *(uint *)(uVar17 + 200);
|
|
}
|
|
else {
|
|
if (param_3 != (Matrix4x4 *)0x0) {
|
|
uVar17 = this->unknown_0x80;
|
|
goto LAB_007147df;
|
|
}
|
|
puVar20[0x31] = puVar20[0x26];
|
|
puVar20[0x32] = puVar20[0x27];
|
|
}
|
|
}
|
|
else {
|
|
if (this->search_data_base_ptr != 0) {
|
|
puVar20[0x35] = (int)&local_8->interpolationModeAndTimeIndex + puVar20[0x35];
|
|
puVar20[0x36] = (int)&local_8->interpolationModeAndTimeIndex + puVar20[0x36];
|
|
}
|
|
iVar11 = puVar20[0x34] * 0x44;
|
|
pMVar10 = (Matrix4x4 *)(iVar11 + *(int *)(local_18 + 0x20));
|
|
uVar17 = *(uint *)((int)this->animation_context_ptr + 0xc);
|
|
if ((*(byte *)(iVar11 + 0x10 + *(int *)(local_18 + 0x20)) & 1) == 0) {
|
|
LAB_00714757:
|
|
param_5 = (Matrix4x4 *)pMVar10->m02;
|
|
param_2 = (Matrix4x4 *)pMVar10->m01;
|
|
if ((int)param_2 < (int)param_5) {
|
|
local_1c = (float)(uVar17 - puVar20[0x35]);
|
|
lVar26 = __ftol();
|
|
param_2 = (Matrix4x4 *)
|
|
((int)¶m_2->m00 +
|
|
((int)lVar26 + puVar20[0x39]) % (uint)((int)param_5 - (int)param_2));
|
|
}
|
|
}
|
|
else {
|
|
uVar18 = puVar20[0x36];
|
|
uVar9 = puVar20[0x35];
|
|
if (uVar18 != uVar17 && -1 < (int)(uVar18 - uVar17)) {
|
|
if (uVar9 != uVar17 && -1 < (int)(uVar9 - uVar17)) {
|
|
uVar17 = puVar20[0x35];
|
|
}
|
|
goto LAB_00714757;
|
|
}
|
|
param_2 = (Matrix4x4 *)(uVar18 - uVar9);
|
|
param_5 = pMVar10;
|
|
lVar26 = __ftol();
|
|
iVar11 = (int)lVar26 + puVar20[0x39];
|
|
if (iVar11 < 0) {
|
|
param_2 = (Matrix4x4 *)param_5->m01;
|
|
}
|
|
else {
|
|
param_2 = (Matrix4x4 *)param_5->m02;
|
|
if (iVar11 <= (int)param_2 - (int)param_5->m01) {
|
|
param_2 = (Matrix4x4 *)(iVar11 + (int)param_5->m01);
|
|
}
|
|
}
|
|
}
|
|
puVar20[0x32] = puVar20[0x34];
|
|
puVar20[0x31] = (uint)param_2;
|
|
if (-1 < (int)(*(int *)((int)this->animation_context_ptr + 0xc) - puVar20[0x40])) {
|
|
puVar20[0x34] = 0xffffffff;
|
|
}
|
|
}
|
|
if ((puVar20[0x29] == 0xffffffff) && (puVar20[0x34] == 0xffffffff)) {
|
|
if ((uint)*(ushort *)&pMVar23->m02 < *(uint *)(local_18 + 0x34)) {
|
|
puVar20[0x43] =
|
|
*(uint *)((uint)*(ushort *)&pMVar23->m02 * 0x118 + 0x10c + this->unknown_0x80);
|
|
}
|
|
else {
|
|
if (param_3 == (Matrix4x4 *)0x0) goto LAB_00714923;
|
|
puVar20[0x43] = *(uint *)(this->unknown_0x80 + 0x10c);
|
|
}
|
|
}
|
|
else {
|
|
iVar11 = puVar20[0x40] - *(int *)((int)this->animation_context_ptr + 0xc);
|
|
if ((iVar11 < 1) || ((puVar20[0x26] == puVar20[0x31] && (puVar20[0x27] == puVar20[0x32])))
|
|
) {
|
|
LAB_00714923:
|
|
puVar20[0x43] = 0;
|
|
}
|
|
else {
|
|
fVar3 = (float)iVar11 * (float)puVar20[0x41];
|
|
if ((float)COLLISION_PLANE_ZERO_THRESHOLD <= fVar3) {
|
|
if (fVar3 <= StaticFloat1_0) {
|
|
puVar20[0x43] =
|
|
(uint)((_DAT_0080297c - (fVar3 + fVar3)) * fVar3 * fVar3 * (float)puVar20[0x42]
|
|
);
|
|
}
|
|
else {
|
|
puVar20[0x43] = (uint)(StaticFloat1_0 * (float)puVar20[0x42]);
|
|
}
|
|
}
|
|
else {
|
|
puVar20[0x43] = (uint)((float)COLLISION_PLANE_ZERO_THRESHOLD * (float)puVar20[0x42]);
|
|
}
|
|
}
|
|
}
|
|
param_5 = (Matrix4x4 *)(puVar20[0x3d] | (uint)pMVar23->m01);
|
|
if (*(ushort *)&pMVar23->m02 == 0xffff) {
|
|
param_2 = (Matrix4x4 *)&this->model_attachment_list1;
|
|
}
|
|
else {
|
|
pMVar10 = (Matrix4x4 *)
|
|
((uint)*(ushort *)&pMVar23->m02 * 0x40 + (int)this->transform_vec2_x);
|
|
param_2 = pMVar10;
|
|
if (((uint)param_5 & 7) != 0) {
|
|
iVar11 = (int)&local_74 - (int)pMVar10;
|
|
param_2 = (Matrix4x4 *)&DAT_00000008;
|
|
do {
|
|
*(float *)((int)pMVar10 + iVar11) = pMVar10->m00;
|
|
*(float *)((int)pMVar10 + iVar11 + 4) = pMVar10->m01;
|
|
pMVar10 = (Matrix4x4 *)&pMVar10->m02;
|
|
param_2 = (Matrix4x4 *)((int)¶m_2[-1].m33 + 3);
|
|
} while (param_2 != (Matrix4x4 *)0x0);
|
|
param_2 = &local_74;
|
|
uVar17 = (uint)param_5 & 6;
|
|
local_a8 = local_74.m20 * pMVar23[1].m22 +
|
|
local_74.m00 * pMVar23[1].m20 + local_74.m10 * pMVar23[1].m21 + local_74.m30;
|
|
local_a4 = local_74.m21 * pMVar23[1].m22 +
|
|
local_74.m11 * pMVar23[1].m21 + local_74.m01 * pMVar23[1].m20 + local_74.m31;
|
|
local_a0 = local_74.m22 * pMVar23[1].m22 +
|
|
local_74.m12 * pMVar23[1].m21 + local_74.m02 * pMVar23[1].m20 + local_74.m32;
|
|
if (uVar17 == 2) {
|
|
fVar25 = (float10)emptyFunction();
|
|
if ((float10)_DAT_008029d4 <= ABS(SQRT(fVar25))) {
|
|
fVar25 = (float10)StaticFloat1_0 / SQRT(fVar25);
|
|
local_74.m00 = (float)((float10)local_74.m00 * fVar25);
|
|
local_74.m01 = (float)((float10)local_74.m01 * fVar25);
|
|
local_74.m02 = (float)(fVar25 * (float10)local_74.m02);
|
|
}
|
|
fVar25 = (float10)emptyFunction();
|
|
if ((float10)_DAT_008029d4 <= ABS(SQRT(fVar25))) {
|
|
fVar25 = (float10)StaticFloat1_0 / SQRT(fVar25);
|
|
local_74.m10 = (float)((float10)local_74.m10 * fVar25);
|
|
local_74.m11 = (float)((float10)local_74.m11 * fVar25);
|
|
local_74.m12 = (float)((float10)local_74.m12 * fVar25);
|
|
}
|
|
fVar25 = (float10)emptyFunction();
|
|
if ((float10)_DAT_008029d4 <= ABS(SQRT(fVar25))) {
|
|
fVar25 = (float10)StaticFloat1_0 / SQRT(fVar25);
|
|
local_74.m20 = (float)((float10)local_74.m20 * fVar25);
|
|
local_74.m21 = (float)((float10)local_74.m21 * fVar25);
|
|
local_74.m22 = (float)(fVar25 * (float10)local_74.m22);
|
|
}
|
|
}
|
|
else if (uVar17 == 4) {
|
|
fVar3 = (float)this->attachment_list1 * (float)this->attachment_list1 +
|
|
(float)this->unknown_0xe4 * (float)this->unknown_0xe4 +
|
|
(float)this->model_attachment_list1 * (float)this->model_attachment_list1;
|
|
fVar4 = StaticFloat1_0;
|
|
if (_DAT_0080c5c8 < fVar3) {
|
|
fVar4 = SQRT((local_74.m01 * local_74.m01 +
|
|
local_74.m02 * local_74.m02 + local_74.m00 * local_74.m00) / fVar3);
|
|
}
|
|
local_74.m00 = fVar4 * (float)this->model_attachment_list1;
|
|
local_74.m01 = fVar4 * (float)this->unknown_0xe4;
|
|
local_74.m02 = fVar4 * (float)this->attachment_list1;
|
|
fVar3 = this->world_transform_matrix[2] * this->world_transform_matrix[2] +
|
|
this->world_transform_matrix[1] * this->world_transform_matrix[1] +
|
|
this->world_transform_matrix[0] * this->world_transform_matrix[0];
|
|
fVar4 = StaticFloat1_0;
|
|
if (_DAT_0080c5c8 < fVar3) {
|
|
fVar4 = SQRT((local_74.m10 * local_74.m10 +
|
|
local_74.m11 * local_74.m11 + local_74.m12 * local_74.m12) / fVar3);
|
|
}
|
|
local_74.m10 = fVar4 * this->world_transform_matrix[0];
|
|
local_74.m11 = fVar4 * this->world_transform_matrix[1];
|
|
local_74.m12 = fVar4 * this->world_transform_matrix[2];
|
|
fVar3 = this->world_transform_matrix[4] * this->world_transform_matrix[4] +
|
|
this->world_transform_matrix[6] * this->world_transform_matrix[6] +
|
|
this->world_transform_matrix[5] * this->world_transform_matrix[5];
|
|
fVar4 = StaticFloat1_0;
|
|
if (_DAT_0080c5c8 < fVar3) {
|
|
fVar4 = SQRT((local_74.m20 * local_74.m20 +
|
|
local_74.m21 * local_74.m21 + local_74.m22 * local_74.m22) / fVar3);
|
|
}
|
|
local_74.m20 = fVar4 * this->world_transform_matrix[4];
|
|
local_74.m21 = fVar4 * this->world_transform_matrix[5];
|
|
local_74.m22 = fVar4 * this->world_transform_matrix[6];
|
|
}
|
|
else if (uVar17 == 6) {
|
|
local_74.m00 = (float)this->model_attachment_list1;
|
|
local_74.m01 = (float)this->unknown_0xe4;
|
|
local_74.m02 = (float)this->attachment_list1;
|
|
local_74.m10 = this->world_transform_matrix[0];
|
|
local_74.m11 = this->world_transform_matrix[1];
|
|
local_74.m12 = this->world_transform_matrix[2];
|
|
local_74.m20 = this->world_transform_matrix[4];
|
|
local_74.m21 = this->world_transform_matrix[5];
|
|
local_74.m22 = this->world_transform_matrix[6];
|
|
}
|
|
if (((uint)param_5 & 1) == 0) {
|
|
local_74.m30 = local_a8 -
|
|
(local_74.m20 * pMVar23[1].m22 +
|
|
local_74.m00 * pMVar23[1].m20 + local_74.m10 * pMVar23[1].m21);
|
|
local_74.m31 = local_a4 -
|
|
(local_74.m21 * pMVar23[1].m22 +
|
|
local_74.m11 * pMVar23[1].m21 + local_74.m01 * pMVar23[1].m20);
|
|
local_74.m32 = local_a0 -
|
|
(local_74.m22 * pMVar23[1].m22 +
|
|
local_74.m12 * pMVar23[1].m21 + local_74.m02 * pMVar23[1].m20);
|
|
}
|
|
else {
|
|
local_74.m30 = this->world_transform_matrix[8];
|
|
local_74.m31 = this->world_transform_matrix[9];
|
|
local_74.m32 = this->world_transform_matrix[10];
|
|
}
|
|
}
|
|
}
|
|
local_1c = (float)((uint)param_5 & 0x280);
|
|
if (local_1c == 0.0) {
|
|
pMVar19 = (Matrix4x4 *)((int)param_3 * 0x40);
|
|
pfVar12 = (float *)((int)&pMVar19->m00 + (int)this->transform_vec2_x);
|
|
param_4 = (Matrix4x4 *)&DAT_00000008;
|
|
pMVar10 = param_2;
|
|
do {
|
|
*pfVar12 = pMVar10->m00;
|
|
pfVar12[1] = pMVar10->m01;
|
|
pfVar12 = pfVar12 + 2;
|
|
pMVar10 = (Matrix4x4 *)&pMVar10->m02;
|
|
param_4 = (Matrix4x4 *)((int)¶m_4[-1].m33 + 3);
|
|
} while (param_4 != (Matrix4x4 *)0x0);
|
|
}
|
|
else {
|
|
if (pMVar23->m31 == 0.0) {
|
|
local_b0 = 0.0;
|
|
local_b4 = 0.0;
|
|
local_b8 = 0.0;
|
|
local_bc = 0;
|
|
local_c4 = 0.0;
|
|
local_c8 = 0.0;
|
|
local_cc = 0;
|
|
local_d0 = 0.0;
|
|
local_d8 = 0.0;
|
|
local_dc = 0;
|
|
local_e0 = 0.0;
|
|
local_e4 = 0.0;
|
|
local_ac = 0x3f800000;
|
|
local_c0 = 1.0;
|
|
local_d4 = 1.0;
|
|
local_e8 = 1.0;
|
|
}
|
|
else {
|
|
if (this->animation_frame_counter < (uint)pMVar23->m31) {
|
|
interpolateAnimationKeyframes
|
|
(this,(uint)puVar20,(AnimationData *)&pMVar23->m22,
|
|
(InterpolationOutputBuffer *)(puVar20 + 0xc));
|
|
}
|
|
initPixelShaderDispatcher5();
|
|
}
|
|
cVar16 = (char)param_5;
|
|
if (pMVar23[1].m10 != 0.0) {
|
|
if (this->animation_frame_counter < (uint)pMVar23[1].m10) {
|
|
puVar21 = puVar20 + 0x1a;
|
|
findInterpolationIndices
|
|
(this,puVar20[0x26],puVar20[0x27],(AnimationData *)¶m_4[1].m01,puVar21);
|
|
if (*(short *)¶m_4[1].m01 == 0) {
|
|
puVar21 = (uint *)((int)param_4[1].m13 + *puVar21 * 0xc);
|
|
puVar20[0x1d] = *puVar21;
|
|
puVar20[0x1e] = puVar21[1];
|
|
puVar20[0x1f] = puVar21[2];
|
|
}
|
|
else {
|
|
fVar3 = (float)puVar20[0x1c];
|
|
fVar4 = param_4[1].m13;
|
|
iVar11 = (int)fVar4 + puVar20[0x1b] * 0xc;
|
|
pfVar12 = (float *)((int)fVar4 + *puVar21 * 0xc);
|
|
puVar20[0x1d] =
|
|
(uint)((*(float *)((int)fVar4 + puVar20[0x1b] * 0xc) -
|
|
*(float *)((int)fVar4 + *puVar21 * 0xc)) * fVar3 + *pfVar12);
|
|
puVar20[0x1e] = (uint)((*(float *)(iVar11 + 4) - pfVar12[1]) * fVar3 + pfVar12[1]);
|
|
puVar20[0x1f] = (uint)((*(float *)(iVar11 + 8) - pfVar12[2]) * fVar3 + pfVar12[2]);
|
|
if (((float)COLLISION_PLANE_ZERO_THRESHOLD != (float)puVar20[0x43]) &&
|
|
(*(short *)((int)¶m_4[1].m01 + 2) == -1)) {
|
|
findInterpolationIndices
|
|
(this,puVar20[0x31],puVar20[0x32],(AnimationData *)¶m_4[1].m01,
|
|
puVar20 + 0x20);
|
|
fVar3 = (float)puVar20[0x22];
|
|
fVar4 = param_4[1].m13;
|
|
iVar11 = (int)fVar4 + puVar20[0x21] * 0xc;
|
|
pfVar12 = (float *)((int)fVar4 + puVar20[0x20] * 0xc);
|
|
puVar20[0x23] =
|
|
(uint)((*(float *)((int)fVar4 + puVar20[0x21] * 0xc) -
|
|
*(float *)((int)fVar4 + puVar20[0x20] * 0xc)) * fVar3 + *pfVar12);
|
|
puVar20[0x24] = (uint)((*(float *)(iVar11 + 4) - pfVar12[1]) * fVar3 + pfVar12[1])
|
|
;
|
|
puVar20[0x25] = (uint)((*(float *)(iVar11 + 8) - pfVar12[2]) * fVar3 + pfVar12[2])
|
|
;
|
|
fVar3 = (float)puVar20[0x43];
|
|
puVar20[0x1d] =
|
|
(uint)(((float)puVar20[0x23] - (float)puVar20[0x1d]) * fVar3 +
|
|
(float)puVar20[0x1d]);
|
|
puVar20[0x1e] =
|
|
(uint)(((float)puVar20[0x24] - (float)puVar20[0x1e]) * fVar3 +
|
|
(float)puVar20[0x1e]);
|
|
puVar20[0x1f] =
|
|
(uint)(((float)puVar20[0x25] - (float)puVar20[0x1f]) * fVar3 +
|
|
(float)puVar20[0x1f]);
|
|
}
|
|
}
|
|
}
|
|
scaleMatrix3x3ByVector(&local_e8,(float *)(puVar20 + 0x1d));
|
|
cVar16 = (char)param_5;
|
|
pMVar23 = param_4;
|
|
}
|
|
if ((cVar16 < '\0') && (puVar20[0x3c] != 0)) {
|
|
initParticlePixelShaderGeneration();
|
|
}
|
|
local_34 = pMVar23[1].m20;
|
|
local_30 = pMVar23[1].m21;
|
|
fVar3 = pMVar23[1].m22;
|
|
local_2c = fVar3;
|
|
if (pMVar23->m12 != 0.0) {
|
|
if (this->animation_frame_counter < (uint)pMVar23->m12) {
|
|
findInterpolationIndices
|
|
(this,puVar20[0x26],puVar20[0x27],(AnimationData *)&pMVar23->m03,puVar20);
|
|
if (*(short *)&pMVar23->m03 == 0) {
|
|
puVar21 = (uint *)((int)pMVar23->m21 + *puVar20 * 0xc);
|
|
puVar20[3] = *puVar21;
|
|
puVar20[4] = puVar21[1];
|
|
puVar20[5] = puVar21[2];
|
|
}
|
|
else {
|
|
fVar3 = (float)puVar20[2];
|
|
fVar4 = pMVar23->m21;
|
|
iVar11 = (int)fVar4 + puVar20[1] * 0xc;
|
|
pfVar12 = (float *)((int)fVar4 + *puVar20 * 0xc);
|
|
puVar20[3] = (uint)((*(float *)((int)fVar4 + puVar20[1] * 0xc) -
|
|
*(float *)((int)fVar4 + *puVar20 * 0xc)) * fVar3 + *pfVar12);
|
|
puVar20[4] = (uint)((*(float *)(iVar11 + 4) - pfVar12[1]) * fVar3 + pfVar12[1]);
|
|
puVar20[5] = (uint)((*(float *)(iVar11 + 8) - pfVar12[2]) * fVar3 + pfVar12[2]);
|
|
if (((float)COLLISION_PLANE_ZERO_THRESHOLD != (float)puVar20[0x43]) &&
|
|
(*(short *)((int)&pMVar23->m03 + 2) == -1)) {
|
|
findInterpolationIndices
|
|
(this,puVar20[0x31],puVar20[0x32],(AnimationData *)&pMVar23->m03,
|
|
puVar20 + 6);
|
|
fVar3 = (float)puVar20[8];
|
|
fVar4 = pMVar23->m21;
|
|
iVar11 = (int)fVar4 + puVar20[7] * 0xc;
|
|
pfVar12 = (float *)((int)fVar4 + puVar20[6] * 0xc);
|
|
puVar20[9] = (uint)((*(float *)((int)fVar4 + puVar20[7] * 0xc) -
|
|
*(float *)((int)fVar4 + puVar20[6] * 0xc)) * fVar3 + *pfVar12)
|
|
;
|
|
puVar20[10] = (uint)((*(float *)(iVar11 + 4) - pfVar12[1]) * fVar3 + pfVar12[1]);
|
|
puVar20[0xb] = (uint)((*(float *)(iVar11 + 8) - pfVar12[2]) * fVar3 + pfVar12[2]);
|
|
fVar3 = (float)puVar20[0x43];
|
|
puVar20[3] = (uint)(((float)puVar20[9] - (float)puVar20[3]) * fVar3 +
|
|
(float)puVar20[3]);
|
|
puVar20[4] = (uint)(((float)puVar20[10] - (float)puVar20[4]) * fVar3 +
|
|
(float)puVar20[4]);
|
|
puVar20[5] = (uint)(((float)puVar20[0xb] - (float)puVar20[5]) * fVar3 +
|
|
(float)puVar20[5]);
|
|
}
|
|
}
|
|
}
|
|
local_34 = local_34 + (float)puVar20[3];
|
|
local_30 = local_30 + (float)puVar20[4];
|
|
fVar3 = local_2c + (float)puVar20[5];
|
|
}
|
|
param_4 = (Matrix4x4 *)((int)param_3 * 0x40);
|
|
local_b8 = local_34 -
|
|
(local_e8 * pMVar23[1].m20 +
|
|
local_d8 * pMVar23[1].m21 + local_c8 * pMVar23[1].m22);
|
|
local_b4 = local_30 -
|
|
(local_e4 * pMVar23[1].m20 +
|
|
local_d4 * pMVar23[1].m21 + local_c4 * pMVar23[1].m22);
|
|
local_b0 = fVar3 - (local_e0 * pMVar23[1].m20 +
|
|
local_d0 * pMVar23[1].m21 + local_c0 * pMVar23[1].m22);
|
|
initParticlePixelShaderGeneration();
|
|
pMVar19 = param_4;
|
|
}
|
|
if (((uint)param_5 & 0x78) != 0) {
|
|
fVar3 = *(float *)((int)&pMVar19->m02 + (int)this->transform_vec2_x);
|
|
pfVar12 = (float *)((int)&pMVar19->m00 + (int)this->transform_vec2_x);
|
|
local_9c = SQRT(fVar3 * fVar3 + pfVar12[1] * pfVar12[1] + *pfVar12 * *pfVar12);
|
|
local_98 = SQRT(pfVar12[6] * pfVar12[6] +
|
|
pfVar12[5] * pfVar12[5] + pfVar12[4] * pfVar12[4]);
|
|
local_94 = SQRT(pfVar12[10] * pfVar12[10] +
|
|
pfVar12[9] * pfVar12[9] + pfVar12[8] * pfVar12[8]);
|
|
local_a8 = pMVar23[1].m20 * *pfVar12 +
|
|
pfVar12[4] * pMVar23[1].m21 + pMVar23[1].m22 * pfVar12[8] + pfVar12[0xc];
|
|
local_a4 = pfVar12[5] * pMVar23[1].m21 +
|
|
pfVar12[9] * pMVar23[1].m22 + pMVar23[1].m20 * pfVar12[1] + pfVar12[0xd];
|
|
local_a0 = pfVar12[6] * pMVar23[1].m21 +
|
|
pfVar12[10] * pMVar23[1].m22 + pMVar23[1].m20 * pfVar12[2] + pfVar12[0xe];
|
|
switch((uint)param_5 & 0x78) {
|
|
case 8:
|
|
if (local_1c == 0.0) {
|
|
local_13c = 0;
|
|
*pfVar12 = 0.0;
|
|
local_138 = 0;
|
|
pfVar12[1] = 0.0;
|
|
local_134 = 0xbf800000;
|
|
pfVar12[2] = -1.0;
|
|
local_154 = 0x3f800000;
|
|
pfVar12[4] = 1.0;
|
|
local_150 = 0;
|
|
pfVar12[5] = 0.0;
|
|
local_14c = 0;
|
|
pfVar12[6] = 0.0;
|
|
local_160 = 0;
|
|
pfVar12[8] = 0.0;
|
|
local_15c = 0x3f800000;
|
|
local_158 = 0;
|
|
pfVar12[9] = 1.0;
|
|
pfVar12[10] = 0.0;
|
|
}
|
|
else {
|
|
local_f4 = local_e4;
|
|
local_f0 = local_e0;
|
|
local_ec = -local_e8;
|
|
*pfVar12 = local_e4;
|
|
pfVar12[1] = local_e0;
|
|
pfVar12[2] = local_ec;
|
|
fVar25 = (float10)emptyFunction();
|
|
if ((float10)_DAT_008029d4 <= ABS(SQRT(fVar25))) {
|
|
fVar25 = (float10)StaticFloat1_0 / SQRT(fVar25);
|
|
*pfVar12 = (float)(fVar25 * (float10)*pfVar12);
|
|
pfVar12[1] = (float)(fVar25 * (float10)pfVar12[1]);
|
|
pfVar12[2] = (float)(fVar25 * (float10)pfVar12[2]);
|
|
}
|
|
local_10c = local_d4;
|
|
local_108 = local_d0;
|
|
pfVar12[4] = local_d4;
|
|
local_104 = -local_d8;
|
|
pfVar12[5] = local_d0;
|
|
pfVar12[6] = local_104;
|
|
fVar25 = (float10)emptyFunction();
|
|
if ((float10)_DAT_008029d4 <= ABS(SQRT(fVar25))) {
|
|
fVar25 = (float10)StaticFloat1_0 / SQRT(fVar25);
|
|
pfVar12[4] = (float)(fVar25 * (float10)pfVar12[4]);
|
|
pfVar12[5] = (float)(fVar25 * (float10)pfVar12[5]);
|
|
pfVar12[6] = (float)(fVar25 * (float10)pfVar12[6]);
|
|
}
|
|
local_124 = local_c4;
|
|
local_120 = local_c0;
|
|
pfVar12[8] = local_c4;
|
|
local_11c = -local_c8;
|
|
pfVar12[9] = local_c0;
|
|
pfVar12[10] = local_11c;
|
|
fVar25 = (float10)emptyFunction();
|
|
if ((float10)_DAT_008029d4 <= ABS(SQRT(fVar25))) {
|
|
fVar25 = (float10)StaticFloat1_0 / SQRT(fVar25);
|
|
pfVar12[8] = (float)(fVar25 * (float10)pfVar12[8]);
|
|
pfVar12[9] = (float)(fVar25 * (float10)pfVar12[9]);
|
|
pfVar12[10] = (float)(fVar25 * (float10)pfVar12[10]);
|
|
}
|
|
}
|
|
break;
|
|
case 0x10:
|
|
fVar25 = (float10)emptyFunction();
|
|
if ((float10)_DAT_008029d4 <= ABS(SQRT(fVar25))) {
|
|
fVar25 = (float10)StaticFloat1_0 / SQRT(fVar25);
|
|
*pfVar12 = (float)(fVar25 * (float10)*pfVar12);
|
|
pfVar12[1] = (float)(fVar25 * (float10)pfVar12[1]);
|
|
pfVar12[2] = (float)(fVar25 * (float10)pfVar12[2]);
|
|
}
|
|
local_118 = pfVar12[1];
|
|
local_114 = -*pfVar12;
|
|
pfVar12[4] = local_118;
|
|
pfVar12[5] = local_114;
|
|
local_110 = 0;
|
|
pfVar12[6] = 0.0;
|
|
fVar25 = (float10)emptyFunction();
|
|
if ((float10)_DAT_008029d4 <= ABS(SQRT(fVar25))) {
|
|
fVar25 = (float10)StaticFloat1_0 / SQRT(fVar25);
|
|
pfVar12[4] = (float)(fVar25 * (float10)pfVar12[4]);
|
|
pfVar12[5] = (float)(fVar25 * (float10)pfVar12[5]);
|
|
pfVar12[6] = (float)(fVar25 * (float10)pfVar12[6]);
|
|
}
|
|
local_148 = pfVar12[2] * pfVar12[5] - pfVar12[1] * pfVar12[6];
|
|
local_144 = *pfVar12 * pfVar12[6] - pfVar12[2] * pfVar12[4];
|
|
pfVar12[8] = local_148;
|
|
pfVar12[9] = local_144;
|
|
local_140 = pfVar12[1] * pfVar12[4] - *pfVar12 * pfVar12[5];
|
|
pfVar12[10] = local_140;
|
|
break;
|
|
case 0x20:
|
|
fVar25 = (float10)emptyFunction();
|
|
if ((float10)_DAT_008029d4 <= ABS(SQRT(fVar25))) {
|
|
fVar25 = (float10)StaticFloat1_0 / SQRT(fVar25);
|
|
pfVar12[4] = (float)(fVar25 * (float10)pfVar12[4]);
|
|
pfVar12[5] = (float)(fVar25 * (float10)pfVar12[5]);
|
|
pfVar12[6] = (float)(fVar25 * (float10)pfVar12[6]);
|
|
}
|
|
local_130 = -pfVar12[5];
|
|
local_128 = 0;
|
|
local_12c = pfVar12[4];
|
|
*pfVar12 = local_130;
|
|
pfVar12[1] = local_12c;
|
|
pfVar12[2] = 0.0;
|
|
fVar25 = (float10)emptyFunction();
|
|
if ((float10)_DAT_008029d4 <= ABS(SQRT(fVar25))) {
|
|
fVar25 = (float10)StaticFloat1_0 / SQRT(fVar25);
|
|
*pfVar12 = (float)(fVar25 * (float10)*pfVar12);
|
|
pfVar12[1] = (float)(fVar25 * (float10)pfVar12[1]);
|
|
pfVar12[2] = (float)(fVar25 * (float10)pfVar12[2]);
|
|
}
|
|
local_100 = pfVar12[2] * pfVar12[5] - pfVar12[1] * pfVar12[6];
|
|
local_fc = *pfVar12 * pfVar12[6] - pfVar12[2] * pfVar12[4];
|
|
pfVar12[8] = local_100;
|
|
pfVar12[9] = local_fc;
|
|
local_f8 = pfVar12[1] * pfVar12[4] - *pfVar12 * pfVar12[5];
|
|
pfVar12[10] = local_f8;
|
|
break;
|
|
case 0x40:
|
|
fVar3 = SQRT(pfVar12[8] * pfVar12[8] +
|
|
pfVar12[9] * pfVar12[9] + pfVar12[10] * pfVar12[10]);
|
|
if (_DAT_008029d4 <= ABS(fVar3)) {
|
|
fVar3 = StaticFloat1_0 / fVar3;
|
|
pfVar12[8] = fVar3 * pfVar12[8];
|
|
pfVar12[9] = fVar3 * pfVar12[9];
|
|
pfVar12[10] = fVar3 * pfVar12[10];
|
|
}
|
|
local_84 = pfVar12[9];
|
|
pfVar1 = pfVar12 + 4;
|
|
local_80 = -pfVar12[8];
|
|
*pfVar1 = local_84;
|
|
pfVar12[5] = local_80;
|
|
local_7c = 0.0;
|
|
pfVar12[6] = 0.0;
|
|
fVar3 = SQRT(*pfVar1 * *pfVar1 + pfVar12[5] * pfVar12[5] + pfVar12[6] * pfVar12[6]);
|
|
if (_DAT_008029d4 <= ABS(fVar3)) {
|
|
fVar3 = StaticFloat1_0 / fVar3;
|
|
*pfVar1 = fVar3 * *pfVar1;
|
|
pfVar12[5] = fVar3 * pfVar12[5];
|
|
pfVar12[6] = fVar3 * pfVar12[6];
|
|
}
|
|
local_90 = pfVar12[9] * pfVar12[6] - pfVar12[10] * pfVar12[5];
|
|
local_8c = pfVar12[10] * *pfVar1 - pfVar12[8] * pfVar12[6];
|
|
*pfVar12 = local_90;
|
|
pfVar12[1] = local_8c;
|
|
local_88 = pfVar12[8] * pfVar12[5] - pfVar12[9] * *pfVar1;
|
|
pfVar12[2] = local_88;
|
|
}
|
|
fVar3 = *pfVar12;
|
|
pfVar12[3] = 0.0;
|
|
pfVar12[7] = 0.0;
|
|
pfVar12[0xb] = 0.0;
|
|
*pfVar12 = local_9c * fVar3;
|
|
fVar4 = pfVar12[1];
|
|
pfVar12[1] = local_9c * fVar4;
|
|
local_10 = (uint *)(local_9c * pfVar12[2]);
|
|
pfVar12[2] = (float)local_10;
|
|
fVar5 = pfVar12[4];
|
|
pfVar12[4] = local_98 * fVar5;
|
|
param_4 = (Matrix4x4 *)(local_98 * pfVar12[5]);
|
|
pfVar12[5] = (float)param_4;
|
|
param_2 = (Matrix4x4 *)(local_98 * pfVar12[6]);
|
|
pfVar12[6] = (float)param_2;
|
|
fVar6 = pfVar12[8];
|
|
pfVar12[8] = local_94 * fVar6;
|
|
fVar7 = pfVar12[9];
|
|
pfVar12[9] = local_94 * fVar7;
|
|
local_1c = local_94 * pfVar12[10];
|
|
pfVar12[10] = local_1c;
|
|
pfVar12[0xc] = local_a8 -
|
|
(local_9c * fVar3 * pMVar23[1].m20 +
|
|
local_94 * fVar6 * pMVar23[1].m22 + local_98 * fVar5 * pMVar23[1].m21);
|
|
pfVar12[0xd] = local_a4 -
|
|
(local_9c * fVar4 * pMVar23[1].m20 +
|
|
local_94 * fVar7 * pMVar23[1].m22 + (float)param_4 * pMVar23[1].m21);
|
|
fVar3 = pMVar23[1].m21;
|
|
fVar4 = pMVar23[1].m22;
|
|
fVar5 = pMVar23[1].m20;
|
|
pfVar12[0xf] = 1.0;
|
|
pfVar12[0xe] = local_a0 -
|
|
((float)local_10 * fVar5 + local_1c * fVar4 + (float)param_2 * fVar3);
|
|
}
|
|
param_5 = *(Matrix4x4 **)(local_18 + 0x34);
|
|
param_3 = (Matrix4x4 *)((int)¶m_3->m00 + 1);
|
|
} while (param_3 < param_5);
|
|
}
|
|
local_10 = (uint *)0x0;
|
|
if (*(int *)(local_18 + 0x54) != 0) {
|
|
local_24 = (uint *)0x0;
|
|
local_20 = 0;
|
|
do {
|
|
pAVar24 = (AnimationData *)(*(int *)(local_18 + 0x58) + local_20);
|
|
puVar20 = (uint *)((int)this->transform_vec2_y + (int)local_24);
|
|
if (this->animation_frame_counter < *(uint *)(*(int *)(local_18 + 0x58) + 0xc + local_20)) {
|
|
local_8 = (AnimationData *)this->unknown_0x80;
|
|
findInterpolationIndices
|
|
(this,*(uint *)&local_8[2].field_0x28,*(uint *)&local_8[2].field_0x2c,pAVar24,
|
|
puVar20);
|
|
if ((short)pAVar24->interpolationModeAndTimeIndex == 0) {
|
|
puVar21 = (uint *)(pAVar24->keyframe_base_ptr + *puVar20 * 0xc);
|
|
puVar20[3] = *puVar21;
|
|
puVar20[4] = puVar21[1];
|
|
puVar20[5] = puVar21[2];
|
|
}
|
|
else {
|
|
fVar3 = (float)puVar20[2];
|
|
uVar17 = pAVar24->keyframe_base_ptr;
|
|
iVar11 = uVar17 + puVar20[1] * 0xc;
|
|
pfVar12 = (float *)(uVar17 + *puVar20 * 0xc);
|
|
puVar20[3] = (uint)((*(float *)(uVar17 + puVar20[1] * 0xc) -
|
|
*(float *)(uVar17 + *puVar20 * 0xc)) * fVar3 + *pfVar12);
|
|
puVar20[4] = (uint)((*(float *)(iVar11 + 4) - pfVar12[1]) * fVar3 + pfVar12[1]);
|
|
puVar20[5] = (uint)((*(float *)(iVar11 + 8) - pfVar12[2]) * fVar3 + pfVar12[2]);
|
|
if (((float)COLLISION_PLANE_ZERO_THRESHOLD != *(float *)&local_8[4].field_0x2c) &&
|
|
(*(short *)((int)&pAVar24->interpolationModeAndTimeIndex + 2) == -1)) {
|
|
findInterpolationIndices
|
|
(this,*(uint *)&local_8[3].field_0x1c,*(uint *)&local_8[3].field_0x20,
|
|
pAVar24,puVar20 + 6);
|
|
fVar3 = (float)puVar20[8];
|
|
uVar17 = pAVar24->keyframe_base_ptr;
|
|
iVar11 = uVar17 + puVar20[7] * 0xc;
|
|
pfVar12 = (float *)(uVar17 + puVar20[6] * 0xc);
|
|
puVar20[9] = (uint)((*(float *)(uVar17 + puVar20[7] * 0xc) -
|
|
*(float *)(uVar17 + puVar20[6] * 0xc)) * fVar3 + *pfVar12);
|
|
puVar20[10] = (uint)((*(float *)(iVar11 + 4) - pfVar12[1]) * fVar3 + pfVar12[1]);
|
|
puVar20[0xb] = (uint)((*(float *)(iVar11 + 8) - pfVar12[2]) * fVar3 + pfVar12[2]);
|
|
fVar3 = *(float *)&local_8[4].field_0x2c;
|
|
puVar20[3] = (uint)(((float)puVar20[9] - (float)puVar20[3]) * fVar3 +
|
|
(float)puVar20[3]);
|
|
puVar20[4] = (uint)(((float)puVar20[10] - (float)puVar20[4]) * fVar3 +
|
|
(float)puVar20[4]);
|
|
puVar20[5] = (uint)(((float)puVar20[0xb] - (float)puVar20[5]) * fVar3 +
|
|
(float)puVar20[5]);
|
|
}
|
|
}
|
|
}
|
|
if (this->animation_frame_counter < *(uint *)&pAVar24->field_0x28) {
|
|
local_c = (AnimationData *)&pAVar24->field_0x1c;
|
|
uVar17 = this->unknown_0x80;
|
|
puVar21 = puVar20 + 0xc;
|
|
findInterpolationIndices
|
|
(this,*(uint *)(uVar17 + 0x98),*(uint *)(uVar17 + 0x9c),local_c,puVar21);
|
|
if ((short)local_c->interpolationModeAndTimeIndex == 0) {
|
|
local_1c = (float)(int)*(short *)(local_c->keyframe_base_ptr + *puVar21 * 2);
|
|
puVar20[0xf] = (uint)((float)(int)local_1c * _DAT_00811610);
|
|
}
|
|
else {
|
|
local_78 = (float)puVar20[0xe];
|
|
local_8 = (AnimationData *)&local_c->_padding;
|
|
puVar13 = (undefined2 *)getIndexOffset(local_8,puVar20[0xd]);
|
|
setShortValue((void *)((int)¶m_4 + 2),puVar13);
|
|
puVar13 = (undefined2 *)getIndexOffset(local_8,*puVar21);
|
|
setShortValue((void *)((int)¶m_3 + 2),puVar13);
|
|
local_1c = (float)(int)param_4._2_2_;
|
|
puVar20[0xf] = (uint)(((float)(int)local_1c * _DAT_00811610 -
|
|
(float)(int)param_3._2_2_ * _DAT_00811610) * local_78 +
|
|
(float)(int)param_3._2_2_ * _DAT_00811610);
|
|
if (((float)COLLISION_PLANE_ZERO_THRESHOLD != *(float *)(uVar17 + 0x10c)) &&
|
|
(*(short *)((int)&local_c->interpolationModeAndTimeIndex + 2) == -1)) {
|
|
findInterpolationIndices
|
|
(this,*(uint *)(uVar17 + 0xc4),*(uint *)(uVar17 + 200),local_c,
|
|
puVar20 + 0x10);
|
|
local_14 = (float *)puVar20[0x12];
|
|
puVar13 = (undefined2 *)getIndexOffset(local_8,puVar20[0x11]);
|
|
setShortValue((void *)((int)¶m_2 + 2),puVar13);
|
|
puVar13 = (undefined2 *)getIndexOffset(local_8,puVar20[0x10]);
|
|
setShortValue((void *)((int)¶m_5 + 2),puVar13);
|
|
local_1c = (float)(int)param_2._2_2_;
|
|
fVar3 = ((float)(int)local_1c * _DAT_00811610 -
|
|
(float)(int)param_5._2_2_ * _DAT_00811610) * (float)local_14 +
|
|
(float)(int)param_5._2_2_ * _DAT_00811610;
|
|
puVar20[0x13] = (uint)fVar3;
|
|
puVar20[0xf] = (uint)((fVar3 - (float)puVar20[0xf]) * *(float *)(uVar17 + 0x10c) +
|
|
(float)puVar20[0xf]);
|
|
}
|
|
}
|
|
}
|
|
local_10 = (uint *)((int)local_10 + 1);
|
|
local_20 = local_20 + 0x38;
|
|
local_24 = local_24 + 0x14;
|
|
} while (local_10 < *(undefined1 **)(local_18 + 0x54));
|
|
}
|
|
local_c = (AnimationData *)0x0;
|
|
if (*(int *)(local_18 + 100) != 0) {
|
|
local_8 = (AnimationData *)0x0;
|
|
local_20 = 0;
|
|
do {
|
|
pAVar24 = (AnimationData *)(*(int *)(local_18 + 0x68) + local_20);
|
|
puVar20 = (uint *)((int)local_8 + (int)this->transform_vec2_z);
|
|
if (this->animation_frame_counter < pAVar24->keyframe_count) {
|
|
local_24 = (uint *)this->unknown_0x80;
|
|
findInterpolationIndices(this,local_24[0x26],local_24[0x27],pAVar24,puVar20);
|
|
if ((short)pAVar24->interpolationModeAndTimeIndex == 0) {
|
|
local_14 = (float *)(int)*(short *)(pAVar24->keyframe_base_ptr + *puVar20 * 2);
|
|
puVar20[3] = (uint)((float)(int)local_14 * _DAT_00811610);
|
|
}
|
|
else {
|
|
local_78 = (float)puVar20[2];
|
|
local_10 = &pAVar24->_padding;
|
|
puVar13 = (undefined2 *)getIndexOffset(local_10,puVar20[1]);
|
|
setShortValue((void *)((int)¶m_4 + 2),puVar13);
|
|
puVar13 = (undefined2 *)getIndexOffset(local_10,*puVar20);
|
|
setShortValue((void *)((int)¶m_3 + 2),puVar13);
|
|
local_14 = (float *)(int)param_4._2_2_;
|
|
puVar20[3] = (uint)(((float)(int)local_14 * _DAT_00811610 -
|
|
(float)(int)param_3._2_2_ * _DAT_00811610) * local_78 +
|
|
(float)(int)param_3._2_2_ * _DAT_00811610);
|
|
if (((float)COLLISION_PLANE_ZERO_THRESHOLD != (float)local_24[0x43]) &&
|
|
(*(short *)((int)&pAVar24->interpolationModeAndTimeIndex + 2) == -1)) {
|
|
findInterpolationIndices(this,local_24[0x31],local_24[0x32],pAVar24,puVar20 + 4);
|
|
puVar21 = local_10;
|
|
local_1c = (float)puVar20[6];
|
|
puVar13 = (undefined2 *)getIndexOffset(local_10,puVar20[5]);
|
|
setShortValue((void *)((int)¶m_2 + 2),puVar13);
|
|
puVar13 = (undefined2 *)getIndexOffset(puVar21,puVar20[4]);
|
|
setShortValue((void *)((int)¶m_5 + 2),puVar13);
|
|
local_14 = (float *)(int)param_2._2_2_;
|
|
fVar3 = ((float)(int)local_14 * _DAT_00811610 -
|
|
(float)(int)param_5._2_2_ * _DAT_00811610) * local_1c +
|
|
(float)(int)param_5._2_2_ * _DAT_00811610;
|
|
puVar20[7] = (uint)fVar3;
|
|
puVar20[3] = (uint)((fVar3 - (float)puVar20[3]) * (float)local_24[0x43] +
|
|
(float)puVar20[3]);
|
|
}
|
|
}
|
|
}
|
|
local_c = (AnimationData *)((int)local_c + 1);
|
|
local_20 = local_20 + 0x1c;
|
|
local_8 = (AnimationData *)((int)local_8 + 0x20);
|
|
} while (local_c < *(uint *)(local_18 + 100));
|
|
}
|
|
param_2 = (Matrix4x4 *)0x0;
|
|
if (*(int *)(local_18 + 0x6c) != 0) {
|
|
param_4 = (Matrix4x4 *)0x0;
|
|
param_3 = (Matrix4x4 *)0x0;
|
|
do {
|
|
pAVar24 = (AnimationData *)((int)¶m_3->m00 + *(int *)(local_18 + 0x70));
|
|
puVar20 = (uint *)((int)¶m_4->m00 + (int)this->scale_factor_1);
|
|
if (this->animation_frame_counter < pAVar24->keyframe_count) {
|
|
param_5 = (Matrix4x4 *)this->unknown_0x80;
|
|
findInterpolationIndices(this,(uint)param_5[2].m12,(uint)param_5[2].m13,pAVar24,puVar20);
|
|
uVar17 = pAVar24->interpolationModeAndTimeIndex;
|
|
*(undefined2 *)(puVar20 + 3) = *(undefined2 *)(pAVar24->keyframe_base_ptr + *puVar20 * 2);
|
|
if ((((short)uVar17 != 0) && ((float)COLLISION_PLANE_ZERO_THRESHOLD != param_5[4].m03)) &&
|
|
(*(short *)((int)&pAVar24->interpolationModeAndTimeIndex + 2) == -1)) {
|
|
findInterpolationIndices
|
|
(this,(uint)param_5[3].m01,(uint)param_5[3].m02,pAVar24,puVar20 + 4);
|
|
*(undefined2 *)(puVar20 + 7) =
|
|
*(undefined2 *)(pAVar24->keyframe_base_ptr + puVar20[4] * 2);
|
|
}
|
|
}
|
|
param_2 = (Matrix4x4 *)((int)¶m_2->m00 + 1);
|
|
param_3 = (Matrix4x4 *)¶m_3->m13;
|
|
param_4 = (Matrix4x4 *)¶m_4->m20;
|
|
} while (param_2 < *(Matrix4x4 **)(local_18 + 0x6c));
|
|
}
|
|
local_10 = (uint *)0x0;
|
|
if (*(int *)(local_18 + 0x74) != 0) {
|
|
local_20 = 0;
|
|
local_24 = (uint *)0x0;
|
|
param_2 = (Matrix4x4 *)0x0;
|
|
do {
|
|
if ((DAT_00cf04c4 & 1) == 0) {
|
|
DAT_00cf04c4 = DAT_00cf04c4 | 1;
|
|
_DAT_00cf043c = 0.5;
|
|
_DAT_00cf0440 = 0.5;
|
|
_DAT_00cf0444 = 0.0;
|
|
validateMemoryOperation((int *)&DAT_007187e0);
|
|
}
|
|
fVar3 = this->scale_factor_2;
|
|
param_3 = (Matrix4x4 *)((int)¶m_2->m00 + *(int *)(local_18 + 0x78));
|
|
pMVar23 = (Matrix4x4 *)((int)this->scale_factor_3 + local_20);
|
|
pMVar23->m33 = 1.0;
|
|
pMVar23->m22 = 1.0;
|
|
pMVar23->m11 = 1.0;
|
|
pMVar23->m00 = 1.0;
|
|
puVar20 = (uint *)((int)fVar3 + (int)local_24);
|
|
pMVar23->m32 = 0.0;
|
|
pMVar23->m31 = 0.0;
|
|
pMVar23->m30 = 0.0;
|
|
pMVar23->m23 = 0.0;
|
|
pMVar23->m21 = 0.0;
|
|
pMVar23->m20 = 0.0;
|
|
pMVar23->m13 = 0.0;
|
|
pMVar23->m12 = 0.0;
|
|
pMVar23->m10 = 0.0;
|
|
pMVar23->m03 = 0.0;
|
|
pMVar23->m02 = 0.0;
|
|
pMVar23->m01 = 0.0;
|
|
param_5 = pMVar23;
|
|
if (param_3->m22 != 0.0) {
|
|
interpolateAnimationKeyframes
|
|
(this,this->unknown_0x80,(AnimationData *)¶m_3->m13,
|
|
(InterpolationOutputBuffer *)(puVar20 + 0xc));
|
|
ApplyTranslationMatrix(pMVar23,(float *)&DAT_00cf043c);
|
|
rotateMatrixByQuaternion(pMVar23,(float *)(puVar20 + 0xf));
|
|
local_90 = -_DAT_00cf043c;
|
|
local_8c = -_DAT_00cf0440;
|
|
local_88 = -_DAT_00cf0444;
|
|
ApplyTranslationMatrix(pMVar23,&local_90);
|
|
}
|
|
if (param_3[1].m01 != 0.0) {
|
|
param_4 = (Matrix4x4 *)this->unknown_0x80;
|
|
puVar21 = puVar20 + 0x1a;
|
|
findInterpolationIndices
|
|
(this,(uint)param_4[2].m12,(uint)param_4[2].m13,(AnimationData *)¶m_3->m32,
|
|
puVar21);
|
|
if (*(short *)¶m_3->m32 == 0) {
|
|
puVar21 = (uint *)((int)param_3[1].m10 + *puVar21 * 0xc);
|
|
puVar20[0x1d] = *puVar21;
|
|
puVar20[0x1e] = puVar21[1];
|
|
puVar20[0x1f] = puVar21[2];
|
|
}
|
|
else {
|
|
fVar3 = (float)puVar20[0x1c];
|
|
local_14 = ¶m_3->m32;
|
|
fVar4 = param_3[1].m10;
|
|
iVar11 = (int)fVar4 + puVar20[0x1b] * 0xc;
|
|
pfVar12 = (float *)((int)fVar4 + *puVar21 * 0xc);
|
|
puVar20[0x1d] =
|
|
(uint)((*(float *)((int)fVar4 + puVar20[0x1b] * 0xc) -
|
|
*(float *)((int)fVar4 + *puVar21 * 0xc)) * fVar3 + *pfVar12);
|
|
puVar20[0x1e] = (uint)((*(float *)(iVar11 + 4) - pfVar12[1]) * fVar3 + pfVar12[1]);
|
|
puVar20[0x1f] = (uint)((*(float *)(iVar11 + 8) - pfVar12[2]) * fVar3 + pfVar12[2]);
|
|
if (((float)COLLISION_PLANE_ZERO_THRESHOLD != param_4[4].m03) &&
|
|
(*(short *)((int)¶m_3->m32 + 2) == -1)) {
|
|
findInterpolationIndices
|
|
(this,(uint)param_4[3].m01,(uint)param_4[3].m02,
|
|
(AnimationData *)¶m_3->m32,puVar20 + 0x20);
|
|
fVar3 = (float)puVar20[0x22];
|
|
fVar4 = param_3[1].m10;
|
|
iVar11 = (int)fVar4 + puVar20[0x21] * 0xc;
|
|
pfVar12 = (float *)((int)fVar4 + puVar20[0x20] * 0xc);
|
|
puVar20[0x23] =
|
|
(uint)((*(float *)((int)fVar4 + puVar20[0x21] * 0xc) -
|
|
*(float *)((int)fVar4 + puVar20[0x20] * 0xc)) * fVar3 + *pfVar12);
|
|
puVar20[0x24] = (uint)((*(float *)(iVar11 + 4) - pfVar12[1]) * fVar3 + pfVar12[1]);
|
|
puVar20[0x25] = (uint)((*(float *)(iVar11 + 8) - pfVar12[2]) * fVar3 + pfVar12[2]);
|
|
fVar3 = param_4[4].m03;
|
|
puVar20[0x1d] =
|
|
(uint)(((float)puVar20[0x23] - (float)puVar20[0x1d]) * fVar3 +
|
|
(float)puVar20[0x1d]);
|
|
puVar20[0x1e] =
|
|
(uint)(((float)puVar20[0x24] - (float)puVar20[0x1e]) * fVar3 +
|
|
(float)puVar20[0x1e]);
|
|
puVar20[0x1f] =
|
|
(uint)(((float)puVar20[0x25] - (float)puVar20[0x1f]) * fVar3 +
|
|
(float)puVar20[0x1f]);
|
|
}
|
|
}
|
|
pMVar23 = param_5;
|
|
ApplyTranslationMatrix(param_5,(float *)&DAT_00cf043c);
|
|
scaleMatrix3x3ByVector(pMVar23,(float *)(puVar20 + 0x1d));
|
|
local_84 = -_DAT_00cf043c;
|
|
local_80 = -_DAT_00cf0440;
|
|
local_7c = -_DAT_00cf0444;
|
|
ApplyTranslationMatrix(pMVar23,&local_84);
|
|
}
|
|
if (param_3->m03 != 0.0) {
|
|
param_4 = (Matrix4x4 *)this->unknown_0x80;
|
|
findInterpolationIndices
|
|
(this,(uint)param_4[2].m12,(uint)param_4[2].m13,(AnimationData *)param_3,puVar20
|
|
);
|
|
if (*(short *)¶m_3->m00 == 0) {
|
|
param_5 = (Matrix4x4 *)(puVar20 + 3);
|
|
pfVar12 = (float *)((int)param_3->m12 + *puVar20 * 0xc);
|
|
param_5->m00 = *pfVar12;
|
|
puVar20[4] = (uint)pfVar12[1];
|
|
puVar20[5] = (uint)pfVar12[2];
|
|
}
|
|
else {
|
|
fVar3 = (float)puVar20[2];
|
|
fVar4 = param_3->m12;
|
|
iVar11 = (int)fVar4 + puVar20[1] * 0xc;
|
|
pfVar12 = (float *)((int)fVar4 + *puVar20 * 0xc);
|
|
param_5 = (Matrix4x4 *)(puVar20 + 3);
|
|
param_5->m00 = (*(float *)((int)fVar4 + puVar20[1] * 0xc) -
|
|
*(float *)((int)fVar4 + *puVar20 * 0xc)) * fVar3 + *pfVar12;
|
|
puVar20[4] = (uint)((*(float *)(iVar11 + 4) - pfVar12[1]) * fVar3 + pfVar12[1]);
|
|
puVar20[5] = (uint)((*(float *)(iVar11 + 8) - pfVar12[2]) * fVar3 + pfVar12[2]);
|
|
if (((float)COLLISION_PLANE_ZERO_THRESHOLD != param_4[4].m03) &&
|
|
(*(short *)((int)¶m_3->m00 + 2) == -1)) {
|
|
findInterpolationIndices
|
|
(this,(uint)param_4[3].m01,(uint)param_4[3].m02,(AnimationData *)param_3,
|
|
puVar20 + 6);
|
|
fVar3 = (float)puVar20[8];
|
|
fVar4 = param_3->m12;
|
|
iVar11 = (int)fVar4 + puVar20[7] * 0xc;
|
|
pfVar12 = (float *)((int)fVar4 + puVar20[6] * 0xc);
|
|
puVar20[9] = (uint)((*(float *)((int)fVar4 + puVar20[7] * 0xc) -
|
|
*(float *)((int)fVar4 + puVar20[6] * 0xc)) * fVar3 + *pfVar12);
|
|
puVar20[10] = (uint)((*(float *)(iVar11 + 4) - pfVar12[1]) * fVar3 + pfVar12[1]);
|
|
puVar20[0xb] = (uint)((*(float *)(iVar11 + 8) - pfVar12[2]) * fVar3 + pfVar12[2]);
|
|
fVar3 = param_4[4].m03;
|
|
param_5->m00 = ((float)puVar20[9] - param_5->m00) * fVar3 + param_5->m00;
|
|
param_5->m01 = ((float)puVar20[10] - param_5->m01) * fVar3 + param_5->m01;
|
|
param_5->m02 = ((float)puVar20[0xb] - param_5->m02) * fVar3 + param_5->m02;
|
|
}
|
|
}
|
|
ApplyTranslationMatrix(pMVar23,¶m_5->m00);
|
|
}
|
|
local_20 = local_20 + 0x40;
|
|
local_10 = (uint *)((int)local_10 + 1);
|
|
param_2 = (Matrix4x4 *)¶m_2[1].m11;
|
|
local_24 = local_24 + 0x26;
|
|
} while (local_10 < *(uint *)(local_18 + 0x74));
|
|
}
|
|
local_10 = (uint *)0x0;
|
|
if (*(int *)(local_18 + 0x11c) != 0) {
|
|
param_2 = (Matrix4x4 *)0x0;
|
|
param_5 = (Matrix4x4 *)0x0;
|
|
do {
|
|
param_3 = (Matrix4x4 *)((int)¶m_5->m00 + *(int *)(local_18 + 0x120));
|
|
puVar20 = (uint *)((int)¶m_2->m00 + (int)this->field_0x1a4);
|
|
if (puVar20[0x40] == 0) {
|
|
LAB_00716506:
|
|
if (this->animation_frame_counter == 0) goto LAB_00716514;
|
|
}
|
|
else {
|
|
if (param_3[3].m01 != 0.0) {
|
|
iVar11 = (uint)*(ushort *)((int)¶m_3->m00 + 2) * 0x118;
|
|
iVar22 = iVar11 + this->unknown_0x80;
|
|
findInterpolationIndices
|
|
(this,*(uint *)(iVar22 + 0x98),*(uint *)(iVar11 + 0x9c + this->unknown_0x80),
|
|
(AnimationData *)¶m_3[2].m32,puVar20 + 0x38);
|
|
puVar14 = COLLISION_PLANE_ZERO_THRESHOLD;
|
|
if (*(short *)¶m_3[2].m32 == 0) {
|
|
*(undefined1 *)(puVar20 + 0x3b) = *(undefined1 *)((int)param_3[3].m10 + puVar20[0x38])
|
|
;
|
|
}
|
|
else {
|
|
*(undefined1 *)(puVar20 + 0x3b) = *(undefined1 *)(puVar20[0x38] + (int)param_3[3].m10)
|
|
;
|
|
if (((float)puVar14 != *(float *)(iVar22 + 0x10c)) &&
|
|
(*(short *)((int)¶m_3[2].m32 + 2) == -1)) {
|
|
param_4 = (Matrix4x4 *)(puVar20 + 0x3c);
|
|
findInterpolationIndices
|
|
(this,*(uint *)(iVar22 + 0xc4),*(uint *)(iVar22 + 200),
|
|
(AnimationData *)¶m_3[2].m32,(uint *)param_4);
|
|
*(undefined1 *)(puVar20 + 0x3f) =
|
|
*(undefined1 *)((int)param_4->m00 + (int)param_3[3].m10);
|
|
}
|
|
}
|
|
}
|
|
if ((puVar20[0x40] == 0) || ((char)puVar20[0x3b] == '\0')) goto LAB_00716506;
|
|
LAB_00716514:
|
|
if (this->animation_frame_counter < (uint)param_3->m32) {
|
|
iVar11 = (uint)*(ushort *)((int)¶m_3->m00 + 2) * 0x118;
|
|
iVar22 = iVar11 + this->unknown_0x80;
|
|
findInterpolationIndices
|
|
(this,*(uint *)(iVar22 + 0x98),*(uint *)(iVar11 + 0x9c + this->unknown_0x80),
|
|
(AnimationData *)¶m_3->m23,puVar20 + 0xc);
|
|
if (*(short *)¶m_3->m23 == 0) {
|
|
puVar20[0xf] = *(uint *)((int)param_3[1].m01 + puVar20[0xc] * 4);
|
|
}
|
|
else {
|
|
fVar3 = *(float *)((int)param_3[1].m01 + puVar20[0xc] * 4);
|
|
puVar20[0xf] = (uint)((*(float *)((int)param_3[1].m01 + puVar20[0xd] * 4) - fVar3) *
|
|
(float)puVar20[0xe] + fVar3);
|
|
if (((float)COLLISION_PLANE_ZERO_THRESHOLD != *(float *)(iVar22 + 0x10c)) &&
|
|
(*(short *)((int)¶m_3->m23 + 2) == -1)) {
|
|
param_4 = (Matrix4x4 *)(puVar20 + 0x10);
|
|
findInterpolationIndices
|
|
(this,*(uint *)(iVar22 + 0xc4),*(uint *)(iVar22 + 200),
|
|
(AnimationData *)¶m_3->m23,(uint *)param_4);
|
|
fVar3 = *(float *)((int)param_3[1].m01 + (int)param_4->m00 * 4);
|
|
fVar3 = (*(float *)((int)param_3[1].m01 + puVar20[0x11] * 4) - fVar3) *
|
|
(float)puVar20[0x12] + fVar3;
|
|
puVar20[0x13] = (uint)fVar3;
|
|
puVar20[0xf] = (uint)((fVar3 - (float)puVar20[0xf]) * *(float *)(iVar22 + 0x10c) +
|
|
(float)puVar20[0xf]);
|
|
}
|
|
}
|
|
}
|
|
if (this->animation_frame_counter < (uint)param_3->m13) {
|
|
pfVar12 = ¶m_3->m10;
|
|
iVar11 = (uint)*(ushort *)((int)¶m_3->m00 + 2) * 0x118;
|
|
param_4 = (Matrix4x4 *)(iVar11 + this->unknown_0x80);
|
|
findInterpolationIndices
|
|
(this,*(uint *)(iVar11 + 0x98 + this->unknown_0x80),(uint)param_4[2].m13,
|
|
(AnimationData *)pfVar12,puVar20);
|
|
if (*(short *)pfVar12 == 0) {
|
|
puVar21 = (uint *)((int)param_3->m22 + *puVar20 * 0xc);
|
|
puVar20[3] = *puVar21;
|
|
puVar20[4] = puVar21[1];
|
|
puVar20[5] = puVar21[2];
|
|
}
|
|
else {
|
|
fVar3 = (float)puVar20[2];
|
|
fVar4 = param_3->m22;
|
|
iVar11 = (int)fVar4 + puVar20[1] * 0xc;
|
|
pfVar1 = (float *)((int)fVar4 + *puVar20 * 0xc);
|
|
pfVar12 = (float *)(puVar20 + 3);
|
|
*pfVar12 = (*(float *)((int)fVar4 + puVar20[1] * 0xc) -
|
|
*(float *)((int)fVar4 + *puVar20 * 0xc)) * fVar3 + *pfVar1;
|
|
puVar20[4] = (uint)((*(float *)(iVar11 + 4) - pfVar1[1]) * fVar3 + pfVar1[1]);
|
|
puVar20[5] = (uint)((*(float *)(iVar11 + 8) - pfVar1[2]) * fVar3 + pfVar1[2]);
|
|
if (((float)COLLISION_PLANE_ZERO_THRESHOLD != param_4[4].m03) &&
|
|
(*(short *)((int)¶m_3->m10 + 2) == -1)) {
|
|
findInterpolationIndices
|
|
(this,(uint)param_4[3].m01,(uint)param_4[3].m02,
|
|
(AnimationData *)¶m_3->m10,puVar20 + 6);
|
|
fVar3 = (float)puVar20[8];
|
|
fVar4 = param_3->m22;
|
|
iVar11 = (int)fVar4 + puVar20[7] * 0xc;
|
|
pfVar1 = (float *)((int)fVar4 + puVar20[6] * 0xc);
|
|
puVar20[9] = (uint)((*(float *)((int)fVar4 + puVar20[7] * 0xc) -
|
|
*(float *)((int)fVar4 + puVar20[6] * 0xc)) * fVar3 + *pfVar1);
|
|
puVar20[10] = (uint)((*(float *)(iVar11 + 4) - pfVar1[1]) * fVar3 + pfVar1[1]);
|
|
puVar20[0xb] = (uint)((*(float *)(iVar11 + 8) - pfVar1[2]) * fVar3 + pfVar1[2]);
|
|
fVar3 = param_4[4].m03;
|
|
*pfVar12 = ((float)puVar20[9] - *pfVar12) * fVar3 + *pfVar12;
|
|
puVar20[4] = (uint)(((float)puVar20[10] - (float)puVar20[4]) * fVar3 +
|
|
(float)puVar20[4]);
|
|
puVar20[5] = (uint)(((float)puVar20[0xb] - (float)puVar20[5]) * fVar3 +
|
|
(float)puVar20[5]);
|
|
}
|
|
}
|
|
local_88 = (float)puVar20[0xf] * this->render_scale_z;
|
|
local_90 = local_88 * (float)puVar20[3];
|
|
local_8c = local_88 * (float)puVar20[4];
|
|
local_88 = local_88 * (float)puVar20[5];
|
|
puVar20[0x4d] = (uint)local_90;
|
|
puVar20[0x4e] = (uint)local_8c;
|
|
puVar20[0x4f] = (uint)local_88;
|
|
}
|
|
if (this->animation_frame_counter < (uint)param_3[1].m30) {
|
|
iVar11 = (uint)*(ushort *)((int)¶m_3->m00 + 2) * 0x118;
|
|
iVar22 = iVar11 + this->unknown_0x80;
|
|
findInterpolationIndices
|
|
(this,*(uint *)(iVar11 + 0x98 + this->unknown_0x80),*(uint *)(iVar22 + 0x9c),
|
|
(AnimationData *)¶m_3[1].m21,puVar20 + 0x20);
|
|
if (*(short *)¶m_3[1].m21 == 0) {
|
|
puVar20[0x23] = *(uint *)((int)param_3[1].m33 + puVar20[0x20] * 4);
|
|
}
|
|
else {
|
|
fVar3 = *(float *)((int)param_3[1].m33 + puVar20[0x20] * 4);
|
|
puVar20[0x23] =
|
|
(uint)((*(float *)((int)param_3[1].m33 + puVar20[0x21] * 4) - fVar3) *
|
|
(float)puVar20[0x22] + fVar3);
|
|
if (((float)COLLISION_PLANE_ZERO_THRESHOLD != *(float *)(iVar22 + 0x10c)) &&
|
|
(*(short *)((int)¶m_3[1].m21 + 2) == -1)) {
|
|
param_4 = (Matrix4x4 *)(puVar20 + 0x24);
|
|
findInterpolationIndices
|
|
(this,*(uint *)(iVar22 + 0xc4),*(uint *)(iVar22 + 200),
|
|
(AnimationData *)¶m_3[1].m21,(uint *)param_4);
|
|
fVar3 = *(float *)((int)param_3[1].m33 + (int)param_4->m00 * 4);
|
|
fVar3 = (*(float *)((int)param_3[1].m33 + puVar20[0x25] * 4) - fVar3) *
|
|
(float)puVar20[0x26] + fVar3;
|
|
puVar20[0x27] = (uint)fVar3;
|
|
puVar20[0x23] =
|
|
(uint)((fVar3 - (float)puVar20[0x23]) * *(float *)(iVar22 + 0x10c) +
|
|
(float)puVar20[0x23]);
|
|
}
|
|
}
|
|
}
|
|
if (this->animation_frame_counter < (uint)param_3[1].m11) {
|
|
pMVar23 = param_3 + 1;
|
|
puVar21 = puVar20 + 0x14;
|
|
param_4 = (Matrix4x4 *)
|
|
((uint)*(ushort *)((int)¶m_3->m00 + 2) * 0x118 + this->unknown_0x80);
|
|
param_3 = (Matrix4x4 *)&pMVar23->m02;
|
|
findInterpolationIndices
|
|
(this,(uint)param_4[2].m12,(uint)param_4[2].m13,(AnimationData *)&pMVar23->m02
|
|
,puVar21);
|
|
if (*(short *)¶m_3->m00 == 0) {
|
|
puVar21 = (uint *)((int)param_3->m12 + *puVar21 * 0xc);
|
|
puVar20[0x17] = *puVar21;
|
|
puVar20[0x18] = puVar21[1];
|
|
puVar20[0x19] = puVar21[2];
|
|
}
|
|
else {
|
|
fVar4 = param_3->m12;
|
|
fVar3 = (float)puVar20[0x16];
|
|
iVar11 = (int)fVar4 + puVar20[0x15] * 0xc;
|
|
pfVar12 = (float *)((int)fVar4 + *puVar21 * 0xc);
|
|
puVar20[0x17] =
|
|
(uint)((*(float *)((int)fVar4 + puVar20[0x15] * 0xc) -
|
|
*(float *)((int)fVar4 + *puVar21 * 0xc)) * fVar3 + *pfVar12);
|
|
puVar20[0x18] = (uint)((*(float *)(iVar11 + 4) - pfVar12[1]) * fVar3 + pfVar12[1]);
|
|
puVar20[0x19] = (uint)((*(float *)(iVar11 + 8) - pfVar12[2]) * fVar3 + pfVar12[2]);
|
|
if (((float)COLLISION_PLANE_ZERO_THRESHOLD != param_4[4].m03) &&
|
|
(*(short *)((int)¶m_3->m00 + 2) == -1)) {
|
|
findInterpolationIndices
|
|
(this,(uint)param_4[3].m01,(uint)param_4[3].m02,(AnimationData *)param_3,
|
|
puVar20 + 0x1a);
|
|
fVar3 = (float)puVar20[0x1c];
|
|
fVar4 = param_3->m12;
|
|
iVar11 = (int)fVar4 + puVar20[0x1b] * 0xc;
|
|
pfVar12 = (float *)((int)fVar4 + puVar20[0x1a] * 0xc);
|
|
puVar20[0x1d] =
|
|
(uint)((*(float *)((int)fVar4 + puVar20[0x1b] * 0xc) -
|
|
*(float *)((int)fVar4 + puVar20[0x1a] * 0xc)) * fVar3 + *pfVar12);
|
|
puVar20[0x1e] = (uint)((*(float *)(iVar11 + 4) - pfVar12[1]) * fVar3 + pfVar12[1]);
|
|
puVar20[0x1f] = (uint)((*(float *)(iVar11 + 8) - pfVar12[2]) * fVar3 + pfVar12[2]);
|
|
fVar3 = param_4[4].m03;
|
|
puVar20[0x17] =
|
|
(uint)(((float)puVar20[0x1d] - (float)puVar20[0x17]) * fVar3 +
|
|
(float)puVar20[0x17]);
|
|
puVar20[0x18] =
|
|
(uint)(((float)puVar20[0x1e] - (float)puVar20[0x18]) * fVar3 +
|
|
(float)puVar20[0x18]);
|
|
puVar20[0x19] =
|
|
(uint)(((float)puVar20[0x1f] - (float)puVar20[0x19]) * fVar3 +
|
|
(float)puVar20[0x19]);
|
|
}
|
|
}
|
|
local_7c = (float)puVar20[0x23] * this->render_scale_z;
|
|
local_84 = local_7c * (float)puVar20[0x17];
|
|
local_80 = local_7c * (float)puVar20[0x18];
|
|
local_7c = local_7c * (float)puVar20[0x19];
|
|
puVar20[0x50] = (uint)local_84;
|
|
puVar20[0x51] = (uint)local_80;
|
|
puVar20[0x52] = (uint)local_7c;
|
|
}
|
|
}
|
|
local_10 = (uint *)((int)local_10 + 1);
|
|
param_5 = (Matrix4x4 *)¶m_5[3].m11;
|
|
param_2 = (Matrix4x4 *)¶m_2[5].m30;
|
|
} while (local_10 < (uint)*(float *)(local_18 + 0x11c));
|
|
}
|
|
local_c = (AnimationData *)0x0;
|
|
if (*(int *)(local_18 + 0x124) != 0) {
|
|
local_20 = 0;
|
|
local_24 = (uint *)0x0;
|
|
do {
|
|
pMVar23 = (Matrix4x4 *)(*(int *)(local_18 + 0x128) + (int)local_24);
|
|
puVar20 = (uint *)(this->particle_data_array3 + local_20);
|
|
param_3 = pMVar23;
|
|
if (this->animation_frame_counter < (uint)pMVar23->m13) {
|
|
param_2 = (Matrix4x4 *)this->unknown_0x80;
|
|
pfVar12 = &pMVar23->m10;
|
|
findInterpolationIndices
|
|
(this,(uint)param_2[2].m12,(uint)param_2[2].m13,(AnimationData *)pfVar12,puVar20
|
|
);
|
|
fVar3 = pMVar23->m22;
|
|
if (*(short *)pfVar12 == 0) {
|
|
puVar21 = (uint *)((int)fVar3 + *puVar20 * 0x24);
|
|
puVar20[3] = *puVar21;
|
|
puVar20[4] = puVar21[1];
|
|
puVar20[5] = puVar21[2];
|
|
}
|
|
else {
|
|
pfVar1 = (float *)((int)fVar3 + *puVar20 * 0x24);
|
|
pfVar2 = (float *)((int)fVar3 + puVar20[1] * 0x24);
|
|
sVar8 = *(short *)pfVar12;
|
|
if (sVar8 == 1) {
|
|
fVar3 = (float)puVar20[2];
|
|
puVar20[3] = (uint)((*pfVar2 - *pfVar1) * fVar3 + *pfVar1);
|
|
puVar20[4] = (uint)((pfVar2[1] - pfVar1[1]) * fVar3 + pfVar1[1]);
|
|
puVar20[5] = (uint)((pfVar2[2] - pfVar1[2]) * fVar3 + pfVar1[2]);
|
|
}
|
|
else if (sVar8 == 2) {
|
|
fVar3 = (float)puVar20[2];
|
|
fVar4 = fVar3 * fVar3;
|
|
param_4 = (Matrix4x4 *)(fVar4 * fVar3);
|
|
local_10 = (uint *)(_DAT_0080297c * fVar4);
|
|
param_5 = (Matrix4x4 *)
|
|
((((float)local_10 - (float)param_4) - fVar3 * _DAT_0080297c) +
|
|
StaticFloat1_0);
|
|
local_8 = (AnimationData *)((float)param_4 * _DAT_0080297c);
|
|
fVar3 = ((float)local_8 - fVar4 * _DAT_00802990) + fVar3 * _DAT_0080297c;
|
|
fVar4 = (float)local_10 - (float)local_8;
|
|
puVar20[3] = (uint)(fVar4 * pfVar2[3] +
|
|
fVar3 * pfVar1[6] +
|
|
(float)param_4 * *pfVar2 + (float)param_5 * *pfVar1);
|
|
puVar20[4] = (uint)((float)param_4 * pfVar2[1] +
|
|
(float)param_5 * pfVar1[1] + fVar3 * pfVar1[7] + fVar4 * pfVar2[4])
|
|
;
|
|
puVar20[5] = (uint)((float)param_4 * pfVar2[2] +
|
|
(float)param_5 * pfVar1[2] + fVar3 * pfVar1[8] + fVar4 * pfVar2[5])
|
|
;
|
|
}
|
|
else if (sVar8 == 3) {
|
|
fVar3 = (float)puVar20[2];
|
|
fVar4 = fVar3 * fVar3;
|
|
fVar5 = fVar4 * fVar3;
|
|
local_8 = (AnimationData *)(fVar5 + fVar5);
|
|
local_10 = (uint *)(fVar4 * _DAT_0080297c);
|
|
param_5 = (Matrix4x4 *)(((float)local_8 - (float)local_10) + StaticFloat1_0);
|
|
param_4 = (Matrix4x4 *)((fVar5 - (fVar4 + fVar4)) + fVar3);
|
|
fVar5 = fVar5 - fVar4;
|
|
fVar3 = (float)local_10 - (float)local_8;
|
|
puVar20[3] = (uint)((float)param_4 * pfVar1[6] +
|
|
fVar3 * *pfVar2 + (float)param_5 * *pfVar1 + fVar5 * pfVar2[3]);
|
|
puVar20[4] = (uint)((float)param_5 * pfVar1[1] +
|
|
fVar3 * pfVar2[1] + (float)param_4 * pfVar1[7] + fVar5 * pfVar2[4])
|
|
;
|
|
puVar20[5] = (uint)((float)param_5 * pfVar1[2] +
|
|
fVar3 * pfVar2[2] + (float)param_4 * pfVar1[8] + fVar5 * pfVar2[5])
|
|
;
|
|
}
|
|
if (((float)COLLISION_PLANE_ZERO_THRESHOLD != param_2[4].m03) &&
|
|
(*(short *)((int)&pMVar23->m10 + 2) == -1)) {
|
|
findInterpolationIndices
|
|
(this,(uint)param_2[3].m01,(uint)param_2[3].m02,(AnimationData *)pfVar12,
|
|
puVar20 + 6);
|
|
pfVar1 = (float *)((int)pMVar23->m22 + puVar20[6] * 0x24);
|
|
pfVar2 = (float *)((int)pMVar23->m22 + puVar20[7] * 0x24);
|
|
sVar8 = *(short *)pfVar12;
|
|
if (sVar8 == 1) {
|
|
fVar3 = (float)puVar20[8];
|
|
puVar20[9] = (uint)((*pfVar2 - *pfVar1) * fVar3 + *pfVar1);
|
|
puVar20[10] = (uint)((pfVar2[1] - pfVar1[1]) * fVar3 + pfVar1[1]);
|
|
puVar20[0xb] = (uint)((pfVar2[2] - pfVar1[2]) * fVar3 + pfVar1[2]);
|
|
}
|
|
else if (sVar8 == 2) {
|
|
fVar3 = (float)puVar20[8];
|
|
fVar4 = fVar3 * fVar3;
|
|
param_4 = (Matrix4x4 *)(fVar4 * fVar3);
|
|
local_10 = (uint *)(_DAT_0080297c * fVar4);
|
|
param_5 = (Matrix4x4 *)
|
|
((((float)local_10 - (float)param_4) - fVar3 * _DAT_0080297c) +
|
|
StaticFloat1_0);
|
|
local_8 = (AnimationData *)((float)param_4 * _DAT_0080297c);
|
|
fVar3 = ((float)local_8 - fVar4 * _DAT_00802990) + fVar3 * _DAT_0080297c;
|
|
fVar4 = (float)local_10 - (float)local_8;
|
|
puVar20[9] = (uint)(fVar3 * pfVar1[6] +
|
|
(float)param_4 * *pfVar2 +
|
|
(float)param_5 * *pfVar1 + fVar4 * pfVar2[3]);
|
|
puVar20[10] = (uint)((float)param_4 * pfVar2[1] +
|
|
(float)param_5 * pfVar1[1] +
|
|
fVar3 * pfVar1[7] + fVar4 * pfVar2[4]);
|
|
puVar20[0xb] = (uint)((float)param_4 * pfVar2[2] +
|
|
(float)param_5 * pfVar1[2] +
|
|
fVar3 * pfVar1[8] + fVar4 * pfVar2[5]);
|
|
}
|
|
else if (sVar8 == 3) {
|
|
fVar3 = (float)puVar20[8];
|
|
fVar4 = fVar3 * fVar3;
|
|
fVar5 = fVar4 * fVar3;
|
|
local_8 = (AnimationData *)(fVar5 + fVar5);
|
|
local_10 = (uint *)(fVar4 * _DAT_0080297c);
|
|
param_5 = (Matrix4x4 *)(((float)local_8 - (float)local_10) + StaticFloat1_0);
|
|
param_4 = (Matrix4x4 *)((fVar5 - (fVar4 + fVar4)) + fVar3);
|
|
fVar5 = fVar5 - fVar4;
|
|
fVar3 = (float)local_10 - (float)local_8;
|
|
puVar20[9] = (uint)(fVar5 * pfVar2[3] +
|
|
fVar3 * *pfVar2 +
|
|
(float)param_4 * pfVar1[6] + (float)param_5 * *pfVar1);
|
|
puVar20[10] = (uint)((float)param_5 * pfVar1[1] +
|
|
fVar3 * pfVar2[1] +
|
|
(float)param_4 * pfVar1[7] + fVar5 * pfVar2[4]);
|
|
puVar20[0xb] = (uint)((float)param_5 * pfVar1[2] +
|
|
fVar3 * pfVar2[2] +
|
|
(float)param_4 * pfVar1[8] + fVar5 * pfVar2[5]);
|
|
}
|
|
fVar3 = param_2[4].m03;
|
|
puVar20[3] = (uint)(((float)puVar20[9] - (float)puVar20[3]) * fVar3 +
|
|
(float)puVar20[3]);
|
|
puVar20[4] = (uint)(((float)puVar20[10] - (float)puVar20[4]) * fVar3 +
|
|
(float)puVar20[4]);
|
|
puVar20[5] = (uint)(((float)puVar20[0xb] - (float)puVar20[5]) * fVar3 +
|
|
(float)puVar20[5]);
|
|
}
|
|
}
|
|
}
|
|
if (this->animation_frame_counter < (uint)param_3[1].m01) {
|
|
param_2 = (Matrix4x4 *)this->unknown_0x80;
|
|
findInterpolationIndices
|
|
(this,(uint)param_2[2].m12,(uint)param_2[2].m13,(AnimationData *)¶m_3->m32,
|
|
puVar20 + 0xc);
|
|
param_4 = (Matrix4x4 *)(uint)*(ushort *)¶m_3->m32;
|
|
uVar17 = puVar20[0xc];
|
|
if (*(ushort *)¶m_3->m32 == 0) {
|
|
puVar21 = (uint *)((int)param_3[1].m10 + uVar17 * 0x24);
|
|
puVar20[0xf] = *puVar21;
|
|
puVar20[0x10] = puVar21[1];
|
|
puVar20[0x11] = puVar21[2];
|
|
}
|
|
else {
|
|
pfVar12 = (float *)((int)param_3[1].m10 + uVar17 * 0x24);
|
|
pfVar1 = (float *)((int)param_3[1].m10 + puVar20[0xd] * 0x24);
|
|
if (param_4 == (Matrix4x4 *)0x1) {
|
|
fVar3 = (float)puVar20[0xe];
|
|
puVar20[0xf] = (uint)((*pfVar1 - *pfVar12) * fVar3 + *pfVar12);
|
|
puVar20[0x10] = (uint)((pfVar1[1] - pfVar12[1]) * fVar3 + pfVar12[1]);
|
|
puVar20[0x11] = (uint)((pfVar1[2] - pfVar12[2]) * fVar3 + pfVar12[2]);
|
|
}
|
|
else if (param_4 == (Matrix4x4 *)0x2) {
|
|
fVar3 = (float)puVar20[0xe];
|
|
fVar4 = fVar3 * fVar3;
|
|
param_4 = (Matrix4x4 *)(fVar4 * fVar3);
|
|
local_10 = (uint *)(_DAT_0080297c * fVar4);
|
|
param_5 = (Matrix4x4 *)
|
|
((((float)local_10 - (float)param_4) - fVar3 * _DAT_0080297c) +
|
|
StaticFloat1_0);
|
|
local_8 = (AnimationData *)((float)param_4 * _DAT_0080297c);
|
|
fVar3 = ((float)local_8 - fVar4 * _DAT_00802990) + fVar3 * _DAT_0080297c;
|
|
fVar4 = (float)local_10 - (float)local_8;
|
|
puVar20[0xf] = (uint)((float)param_5 * *pfVar12 +
|
|
(float)param_4 * *pfVar1 + fVar4 * pfVar1[3] + fVar3 * pfVar12[6]
|
|
);
|
|
puVar20[0x10] =
|
|
(uint)((float)param_4 * pfVar1[1] +
|
|
(float)param_5 * pfVar12[1] + fVar3 * pfVar12[7] + fVar4 * pfVar1[4]);
|
|
puVar20[0x11] =
|
|
(uint)((float)param_4 * pfVar1[2] +
|
|
(float)param_5 * pfVar12[2] + fVar3 * pfVar12[8] + fVar4 * pfVar1[5]);
|
|
}
|
|
else if (param_4 == (Matrix4x4 *)0x3) {
|
|
fVar3 = (float)puVar20[0xe];
|
|
fVar4 = fVar3 * fVar3;
|
|
fVar5 = fVar4 * fVar3;
|
|
local_8 = (AnimationData *)(fVar5 + fVar5);
|
|
local_10 = (uint *)(fVar4 * _DAT_0080297c);
|
|
param_5 = (Matrix4x4 *)(((float)local_8 - (float)local_10) + StaticFloat1_0);
|
|
param_4 = (Matrix4x4 *)((fVar5 - (fVar4 + fVar4)) + fVar3);
|
|
fVar5 = fVar5 - fVar4;
|
|
fVar3 = (float)local_10 - (float)local_8;
|
|
puVar20[0xf] = (uint)((float)param_5 * *pfVar12 +
|
|
fVar5 * pfVar1[3] + (float)param_4 * pfVar12[6] + fVar3 * *pfVar1
|
|
);
|
|
puVar20[0x10] =
|
|
(uint)((float)param_5 * pfVar12[1] +
|
|
fVar3 * pfVar1[1] + (float)param_4 * pfVar12[7] + fVar5 * pfVar1[4]);
|
|
puVar20[0x11] =
|
|
(uint)((float)param_5 * pfVar12[2] +
|
|
fVar3 * pfVar1[2] + (float)param_4 * pfVar12[8] + fVar5 * pfVar1[5]);
|
|
}
|
|
if (((float)COLLISION_PLANE_ZERO_THRESHOLD != param_2[4].m03) &&
|
|
(*(short *)((int)¶m_3->m32 + 2) == -1)) {
|
|
findInterpolationIndices
|
|
(this,(uint)param_2[3].m01,(uint)param_2[3].m02,
|
|
(AnimationData *)¶m_3->m32,puVar20 + 0x12);
|
|
param_4 = (Matrix4x4 *)¶m_3->m32;
|
|
pfVar12 = (float *)((int)param_3[1].m10 + puVar20[0x12] * 0x24);
|
|
pfVar1 = (float *)((int)param_3[1].m10 + puVar20[0x13] * 0x24);
|
|
sVar8 = *(short *)param_4;
|
|
if (sVar8 == 1) {
|
|
fVar3 = (float)puVar20[0x14];
|
|
puVar20[0x15] = (uint)((*pfVar1 - *pfVar12) * fVar3 + *pfVar12);
|
|
puVar20[0x16] = (uint)((pfVar1[1] - pfVar12[1]) * fVar3 + pfVar12[1]);
|
|
puVar20[0x17] = (uint)((pfVar1[2] - pfVar12[2]) * fVar3 + pfVar12[2]);
|
|
}
|
|
else if (sVar8 == 2) {
|
|
fVar3 = (float)puVar20[0x14];
|
|
fVar4 = fVar3 * fVar3;
|
|
param_4 = (Matrix4x4 *)(fVar4 * fVar3);
|
|
local_10 = (uint *)(_DAT_0080297c * fVar4);
|
|
param_5 = (Matrix4x4 *)
|
|
((((float)local_10 - (float)param_4) - fVar3 * _DAT_0080297c) +
|
|
StaticFloat1_0);
|
|
local_8 = (AnimationData *)((float)param_4 * _DAT_0080297c);
|
|
fVar3 = ((float)local_8 - fVar4 * _DAT_00802990) + fVar3 * _DAT_0080297c;
|
|
fVar4 = (float)local_10 - (float)local_8;
|
|
puVar20[0x15] =
|
|
(uint)((float)param_5 * *pfVar12 +
|
|
(float)param_4 * *pfVar1 + fVar3 * pfVar12[6] + fVar4 * pfVar1[3]);
|
|
puVar20[0x16] =
|
|
(uint)((float)param_4 * pfVar1[1] +
|
|
(float)param_5 * pfVar12[1] + fVar3 * pfVar12[7] + fVar4 * pfVar1[4]);
|
|
puVar20[0x17] =
|
|
(uint)((float)param_4 * pfVar1[2] +
|
|
(float)param_5 * pfVar12[2] + fVar3 * pfVar12[8] + fVar4 * pfVar1[5]);
|
|
}
|
|
else if (sVar8 == 3) {
|
|
fVar3 = (float)puVar20[0x14];
|
|
fVar4 = fVar3 * fVar3;
|
|
fVar5 = fVar4 * fVar3;
|
|
local_8 = (AnimationData *)(fVar5 + fVar5);
|
|
local_10 = (uint *)(fVar4 * _DAT_0080297c);
|
|
param_5 = (Matrix4x4 *)(((float)local_8 - (float)local_10) + StaticFloat1_0);
|
|
param_4 = (Matrix4x4 *)((fVar5 - (fVar4 + fVar4)) + fVar3);
|
|
fVar5 = fVar5 - fVar4;
|
|
fVar3 = (float)local_10 - (float)local_8;
|
|
puVar20[0x15] =
|
|
(uint)((float)param_4 * pfVar12[6] +
|
|
(float)param_5 * *pfVar12 + fVar3 * *pfVar1 + fVar5 * pfVar1[3]);
|
|
puVar20[0x16] =
|
|
(uint)((float)param_5 * pfVar12[1] +
|
|
fVar3 * pfVar1[1] + (float)param_4 * pfVar12[7] + fVar5 * pfVar1[4]);
|
|
puVar20[0x17] =
|
|
(uint)((float)param_5 * pfVar12[2] +
|
|
fVar3 * pfVar1[2] + (float)param_4 * pfVar12[8] + fVar5 * pfVar1[5]);
|
|
}
|
|
fVar3 = param_2[4].m03;
|
|
puVar20[0xf] = (uint)(((float)puVar20[0x15] - (float)puVar20[0xf]) * fVar3 +
|
|
(float)puVar20[0xf]);
|
|
puVar20[0x10] =
|
|
(uint)(((float)puVar20[0x16] - (float)puVar20[0x10]) * fVar3 +
|
|
(float)puVar20[0x10]);
|
|
puVar20[0x11] =
|
|
(uint)(((float)puVar20[0x17] - (float)puVar20[0x11]) * fVar3 +
|
|
(float)puVar20[0x11]);
|
|
}
|
|
}
|
|
}
|
|
pMVar23 = param_3;
|
|
if (this->animation_frame_counter < (uint)param_3[1].m23) {
|
|
puVar21 = puVar20 + 0x18;
|
|
pfVar12 = ¶m_3[1].m20;
|
|
param_5 = (Matrix4x4 *)this->unknown_0x80;
|
|
findInterpolationIndices
|
|
(this,(uint)param_5[2].m12,(uint)param_5[2].m13,(AnimationData *)pfVar12,puVar21
|
|
);
|
|
sVar8 = *(short *)pfVar12;
|
|
if (sVar8 == 0) {
|
|
puVar20[0x1b] = *(uint *)((int)pMVar23[1].m32 + *puVar21 * 0xc);
|
|
}
|
|
else {
|
|
param_3 = (Matrix4x4 *)((int)pMVar23[1].m32 + *puVar21 * 0xc);
|
|
pfVar1 = (float *)((int)pMVar23[1].m32 + puVar20[0x19] * 0xc);
|
|
if (sVar8 == 1) {
|
|
puVar20[0x1b] = (uint)((*pfVar1 - param_3->m00) * (float)puVar20[0x1a] + param_3->m00)
|
|
;
|
|
}
|
|
else if (sVar8 == 2) {
|
|
fVar3 = (float)puVar20[0x1a];
|
|
fVar4 = fVar3 * fVar3;
|
|
fVar5 = fVar4 * fVar3;
|
|
param_4 = (Matrix4x4 *)(fVar4 * _DAT_0080297c);
|
|
puVar20[0x1b] =
|
|
(uint)(((((float)param_4 - fVar5) - fVar3 * _DAT_0080297c) + StaticFloat1_0) *
|
|
param_3->m00 +
|
|
((float)param_4 - _DAT_0080297c * fVar5) * pfVar1[1] +
|
|
((_DAT_0080297c * fVar5 - fVar4 * _DAT_00802990) + fVar3 * _DAT_0080297c)
|
|
* param_3->m02 + *pfVar1 * fVar5);
|
|
}
|
|
else if (sVar8 == 3) {
|
|
fVar3 = (float)puVar20[0x1a];
|
|
fVar4 = fVar3 * fVar3;
|
|
fVar5 = fVar4 * fVar3;
|
|
puVar20[0x1b] =
|
|
(uint)((fVar4 * _DAT_0080297c - (fVar5 + fVar5)) * *pfVar1 +
|
|
(((fVar5 + fVar5) - fVar4 * _DAT_0080297c) + StaticFloat1_0) * param_3->m00
|
|
+ (fVar5 - fVar4) * pfVar1[1] +
|
|
((fVar5 - (fVar4 + fVar4)) + fVar3) * param_3->m02);
|
|
}
|
|
if (((float)COLLISION_PLANE_ZERO_THRESHOLD != param_5[4].m03) &&
|
|
(*(short *)((int)&pMVar23[1].m20 + 2) == -1)) {
|
|
findInterpolationIndices
|
|
(this,(uint)param_5[3].m01,(uint)param_5[3].m02,(AnimationData *)pfVar12,
|
|
puVar20 + 0x1c);
|
|
pfVar1 = (float *)((int)pMVar23[1].m32 + puVar20[0x1c] * 0xc);
|
|
pfVar2 = (float *)((int)pMVar23[1].m32 + puVar20[0x1d] * 0xc);
|
|
sVar8 = *(short *)pfVar12;
|
|
if (sVar8 == 1) {
|
|
puVar20[0x1f] = (uint)((*pfVar2 - *pfVar1) * (float)puVar20[0x1e] + *pfVar1);
|
|
}
|
|
else if (sVar8 == 2) {
|
|
fVar3 = (float)puVar20[0x1e];
|
|
fVar4 = fVar3 * fVar3;
|
|
fVar5 = fVar4 * fVar3;
|
|
param_3 = (Matrix4x4 *)(fVar4 * _DAT_0080297c);
|
|
puVar20[0x1f] =
|
|
(uint)(((((float)param_3 - fVar5) - fVar3 * _DAT_0080297c) + StaticFloat1_0) *
|
|
*pfVar1 + ((float)param_3 - _DAT_0080297c * fVar5) * pfVar2[1] +
|
|
((_DAT_0080297c * fVar5 - fVar4 * _DAT_00802990) +
|
|
fVar3 * _DAT_0080297c) * pfVar1[2] + *pfVar2 * fVar5);
|
|
}
|
|
else if (sVar8 == 3) {
|
|
fVar3 = (float)puVar20[0x1e];
|
|
fVar4 = fVar3 * fVar3;
|
|
fVar5 = fVar4 * fVar3;
|
|
puVar20[0x1f] =
|
|
(uint)((fVar4 * _DAT_0080297c - (fVar5 + fVar5)) * *pfVar2 +
|
|
(((fVar5 + fVar5) - fVar4 * _DAT_0080297c) + StaticFloat1_0) * *pfVar1 +
|
|
(fVar5 - fVar4) * pfVar2[1] +
|
|
((fVar5 - (fVar4 + fVar4)) + fVar3) * pfVar1[2]);
|
|
}
|
|
puVar20[0x1b] =
|
|
(uint)(((float)puVar20[0x1f] - (float)puVar20[0x1b]) * param_5[4].m03 +
|
|
(float)puVar20[0x1b]);
|
|
}
|
|
}
|
|
}
|
|
local_c = (AnimationData *)((int)local_c + 1);
|
|
local_24 = local_24 + 0x1f;
|
|
local_20 = local_20 + 0x84;
|
|
} while (local_c < *(uint *)(local_18 + 0x124));
|
|
}
|
|
local_1c = 0.0;
|
|
if (*(int *)(local_18 + 0x134) != 0) {
|
|
local_10 = (uint *)0x0;
|
|
local_20 = 0;
|
|
do {
|
|
local_c = (AnimationData *)(*(int *)(local_18 + 0x138) + local_20);
|
|
puVar20 = (uint *)(this->particle_data_array4 + (int)local_10);
|
|
if (this->animation_frame_counter < *(uint *)((int)local_c + 0xcc)) {
|
|
iVar11 = (uint)*(ushort *)((int)local_c + 4) * 0x118;
|
|
iVar22 = iVar11 + this->unknown_0x80;
|
|
findInterpolationIndices
|
|
(this,*(uint *)(iVar11 + 0x98 + this->unknown_0x80),*(uint *)(iVar22 + 0x9c),
|
|
(AnimationData *)((int)local_c + 0xc0),puVar20 + 0x2c);
|
|
puVar14 = COLLISION_PLANE_ZERO_THRESHOLD;
|
|
if (*(short *)((int)local_c + 0xc0) == 0) {
|
|
*(undefined1 *)(puVar20 + 0x2f) =
|
|
*(undefined1 *)(*(int *)((int)local_c + 0xd8) + puVar20[0x2c]);
|
|
}
|
|
else {
|
|
*(undefined1 *)(puVar20 + 0x2f) =
|
|
*(undefined1 *)(puVar20[0x2c] + *(int *)((int)local_c + 0xd8));
|
|
if (((float)puVar14 != *(float *)(iVar22 + 0x10c)) &&
|
|
(*(short *)((int)local_c + 0xc2) == -1)) {
|
|
local_14 = (float *)(puVar20 + 0x30);
|
|
findInterpolationIndices
|
|
(this,*(uint *)(iVar22 + 0xc4),*(uint *)(iVar22 + 200),
|
|
(AnimationData *)((int)local_c + 0xc0),(uint *)local_14);
|
|
*(undefined1 *)(puVar20 + 0x33) =
|
|
*(undefined1 *)((int)*local_14 + *(int *)((int)local_c + 0xd8));
|
|
}
|
|
}
|
|
}
|
|
if (this->animation_frame_counter < *(uint *)((int)local_c + 0x30)) {
|
|
iVar11 = (uint)*(ushort *)((int)local_c + 4) * 0x118;
|
|
iVar22 = iVar11 + this->unknown_0x80;
|
|
findInterpolationIndices
|
|
(this,*(uint *)(iVar22 + 0x98),*(uint *)(iVar11 + 0x9c + this->unknown_0x80),
|
|
(AnimationData *)((int)local_c + 0x24),puVar20);
|
|
if (*(short *)((int)local_c + 0x24) == 0) {
|
|
puVar21 = (uint *)(*(int *)((int)local_c + 0x3c) + *puVar20 * 0xc);
|
|
puVar20[3] = *puVar21;
|
|
puVar20[4] = puVar21[1];
|
|
puVar20[5] = puVar21[2];
|
|
}
|
|
else {
|
|
fVar3 = (float)puVar20[2];
|
|
iVar15 = *(int *)((int)local_c + 0x3c);
|
|
iVar11 = iVar15 + puVar20[1] * 0xc;
|
|
pfVar12 = (float *)(iVar15 + *puVar20 * 0xc);
|
|
puVar20[3] = (uint)((*(float *)(iVar15 + puVar20[1] * 0xc) -
|
|
*(float *)(iVar15 + *puVar20 * 0xc)) * fVar3 + *pfVar12);
|
|
puVar20[4] = (uint)((*(float *)(iVar11 + 4) - pfVar12[1]) * fVar3 + pfVar12[1]);
|
|
puVar20[5] = (uint)((*(float *)(iVar11 + 8) - pfVar12[2]) * fVar3 + pfVar12[2]);
|
|
if (((float)COLLISION_PLANE_ZERO_THRESHOLD != *(float *)(iVar22 + 0x10c)) &&
|
|
(*(short *)((int)local_c + 0x26) == -1)) {
|
|
findInterpolationIndices
|
|
(this,*(uint *)(iVar22 + 0xc4),*(uint *)(iVar22 + 200),
|
|
(AnimationData *)((int)local_c + 0x24),puVar20 + 6);
|
|
fVar3 = (float)puVar20[8];
|
|
iVar15 = *(int *)((int)local_c + 0x3c);
|
|
iVar11 = iVar15 + puVar20[7] * 0xc;
|
|
pfVar12 = (float *)(iVar15 + puVar20[6] * 0xc);
|
|
puVar20[9] = (uint)((*(float *)(iVar15 + puVar20[7] * 0xc) -
|
|
*(float *)(iVar15 + puVar20[6] * 0xc)) * fVar3 + *pfVar12);
|
|
puVar20[10] = (uint)((*(float *)(iVar11 + 4) - pfVar12[1]) * fVar3 + pfVar12[1]);
|
|
puVar20[0xb] = (uint)((*(float *)(iVar11 + 8) - pfVar12[2]) * fVar3 + pfVar12[2]);
|
|
fVar3 = *(float *)(iVar22 + 0x10c);
|
|
puVar20[3] = (uint)(((float)puVar20[9] - (float)puVar20[3]) * fVar3 +
|
|
(float)puVar20[3]);
|
|
puVar20[4] = (uint)(((float)puVar20[10] - (float)puVar20[4]) * fVar3 +
|
|
(float)puVar20[4]);
|
|
puVar20[5] = (uint)(((float)puVar20[0xb] - (float)puVar20[5]) * fVar3 +
|
|
(float)puVar20[5]);
|
|
}
|
|
}
|
|
}
|
|
if (this->animation_frame_counter < *(uint *)((int)local_c + 0x4c)) {
|
|
local_8 = (AnimationData *)((int)local_c + 0x40);
|
|
iVar11 = (uint)*(ushort *)((int)local_c + 4) * 0x118 + this->unknown_0x80;
|
|
findInterpolationIndices
|
|
(this,*(uint *)(iVar11 + 0x98),*(uint *)(iVar11 + 0x9c),local_8,puVar20 + 0xc);
|
|
if ((short)local_8->interpolationModeAndTimeIndex == 0) {
|
|
local_14 = (float *)(int)*(short *)(local_8->keyframe_base_ptr + puVar20[0xc] * 2);
|
|
puVar20[0xf] = (uint)((float)(int)local_14 * _DAT_00811610);
|
|
}
|
|
else {
|
|
local_78 = (float)puVar20[0xe];
|
|
local_24 = &local_8->_padding;
|
|
puVar13 = (undefined2 *)getIndexOffset(local_24,puVar20[0xd]);
|
|
setShortValue((void *)((int)¶m_4 + 2),puVar13);
|
|
puVar13 = (undefined2 *)getIndexOffset(local_24,puVar20[0xc]);
|
|
setShortValue((void *)((int)¶m_3 + 2),puVar13);
|
|
local_14 = (float *)(int)param_4._2_2_;
|
|
puVar20[0xf] = (uint)(((float)(int)local_14 * _DAT_00811610 -
|
|
(float)(int)param_3._2_2_ * _DAT_00811610) * local_78 +
|
|
(float)(int)param_3._2_2_ * _DAT_00811610);
|
|
if (((float)COLLISION_PLANE_ZERO_THRESHOLD != *(float *)(iVar11 + 0x10c)) &&
|
|
(*(short *)((int)&local_8->interpolationModeAndTimeIndex + 2) == -1)) {
|
|
local_14 = (float *)(puVar20 + 0x10);
|
|
findInterpolationIndices
|
|
(this,*(uint *)(iVar11 + 0xc4),*(uint *)(iVar11 + 200),local_8,
|
|
(uint *)local_14);
|
|
local_28 = (uint *)puVar20[0x12];
|
|
puVar13 = (undefined2 *)getIndexOffset(local_24,puVar20[0x11]);
|
|
setShortValue((void *)((int)¶m_2 + 2),puVar13);
|
|
puVar13 = (undefined2 *)getIndexOffset(local_24,(int)*local_14);
|
|
setShortValue((void *)((int)¶m_5 + 2),puVar13);
|
|
local_14 = (float *)(int)param_2._2_2_;
|
|
fVar3 = ((float)(int)local_14 * _DAT_00811610 -
|
|
(float)(int)param_5._2_2_ * _DAT_00811610) * (float)local_28 +
|
|
(float)(int)param_5._2_2_ * _DAT_00811610;
|
|
puVar20[0x13] = (uint)fVar3;
|
|
puVar20[0xf] = (uint)((fVar3 - (float)puVar20[0xf]) * *(float *)(iVar11 + 0x10c) +
|
|
(float)puVar20[0xf]);
|
|
}
|
|
}
|
|
}
|
|
if (this->animation_frame_counter < *(uint *)((int)local_c + 0x68)) {
|
|
iVar11 = (uint)*(ushort *)((int)local_c + 4) * 0x118;
|
|
iVar22 = iVar11 + this->unknown_0x80;
|
|
findInterpolationIndices
|
|
(this,*(uint *)(iVar22 + 0x98),*(uint *)(iVar11 + 0x9c + this->unknown_0x80),
|
|
(AnimationData *)((int)local_c + 0x5c),puVar20 + 0x14);
|
|
if (*(short *)((int)local_c + 0x5c) == 0) {
|
|
puVar20[0x17] = *(uint *)(*(int *)((int)local_c + 0x74) + puVar20[0x14] * 4);
|
|
}
|
|
else {
|
|
fVar3 = *(float *)(*(int *)((int)local_c + 0x74) + puVar20[0x14] * 4);
|
|
puVar20[0x17] =
|
|
(uint)((*(float *)(*(int *)((int)local_c + 0x74) + puVar20[0x15] * 4) - fVar3) *
|
|
(float)puVar20[0x16] + fVar3);
|
|
if (((float)COLLISION_PLANE_ZERO_THRESHOLD != *(float *)(iVar22 + 0x10c)) &&
|
|
(*(short *)((int)local_c + 0x5e) == -1)) {
|
|
local_14 = (float *)(puVar20 + 0x18);
|
|
findInterpolationIndices
|
|
(this,*(uint *)(iVar22 + 0xc4),*(uint *)(iVar22 + 200),
|
|
(AnimationData *)((int)local_c + 0x5c),(uint *)local_14);
|
|
fVar3 = *(float *)(*(int *)((int)local_c + 0x74) + (int)*local_14 * 4);
|
|
fVar3 = (*(float *)(*(int *)((int)local_c + 0x74) + puVar20[0x19] * 4) - fVar3) *
|
|
(float)puVar20[0x1a] + fVar3;
|
|
puVar20[0x1b] = (uint)fVar3;
|
|
puVar20[0x17] =
|
|
(uint)((fVar3 - (float)puVar20[0x17]) * *(float *)(iVar22 + 0x10c) +
|
|
(float)puVar20[0x17]);
|
|
}
|
|
}
|
|
}
|
|
if (this->animation_frame_counter < *(uint *)((int)local_c + 0x84)) {
|
|
iVar11 = (uint)*(ushort *)((int)local_c + 4) * 0x118;
|
|
iVar22 = iVar11 + this->unknown_0x80;
|
|
findInterpolationIndices
|
|
(this,*(uint *)(iVar22 + 0x98),*(uint *)(iVar11 + 0x9c + this->unknown_0x80),
|
|
(AnimationData *)((int)local_c + 0x78),puVar20 + 0x1c);
|
|
if (*(short *)((int)local_c + 0x78) == 0) {
|
|
puVar20[0x1f] = *(uint *)(*(int *)((int)local_c + 0x90) + puVar20[0x1c] * 4);
|
|
}
|
|
else {
|
|
fVar3 = *(float *)(*(int *)((int)local_c + 0x90) + puVar20[0x1c] * 4);
|
|
puVar20[0x1f] =
|
|
(uint)((*(float *)(*(int *)((int)local_c + 0x90) + puVar20[0x1d] * 4) - fVar3) *
|
|
(float)puVar20[0x1e] + fVar3);
|
|
if (((float)COLLISION_PLANE_ZERO_THRESHOLD != *(float *)(iVar22 + 0x10c)) &&
|
|
(*(short *)((int)local_c + 0x7a) == -1)) {
|
|
local_14 = (float *)(puVar20 + 0x20);
|
|
findInterpolationIndices
|
|
(this,*(uint *)(iVar22 + 0xc4),*(uint *)(iVar22 + 200),
|
|
(AnimationData *)((int)local_c + 0x78),(uint *)local_14);
|
|
fVar3 = *(float *)(*(int *)((int)local_c + 0x90) + (int)*local_14 * 4);
|
|
fVar3 = (*(float *)(*(int *)((int)local_c + 0x90) + puVar20[0x21] * 4) - fVar3) *
|
|
(float)puVar20[0x22] + fVar3;
|
|
puVar20[0x23] = (uint)fVar3;
|
|
puVar20[0x1f] =
|
|
(uint)((fVar3 - (float)puVar20[0x1f]) * *(float *)(iVar22 + 0x10c) +
|
|
(float)puVar20[0x1f]);
|
|
}
|
|
}
|
|
}
|
|
pAVar24 = local_c;
|
|
if (this->animation_frame_counter < *(uint *)((int)local_c + 0xb0)) {
|
|
iVar11 = (uint)*(ushort *)((int)local_c + 4) * 0x118;
|
|
local_8 = (AnimationData *)(puVar20 + 0x24);
|
|
animationData = (AnimationData *)((int)local_c + 0xa4);
|
|
iVar22 = iVar11 + this->unknown_0x80;
|
|
findInterpolationIndices
|
|
(this,*(uint *)(iVar22 + 0x98),*(uint *)(iVar11 + 0x9c + this->unknown_0x80),
|
|
animationData,(uint *)local_8);
|
|
puVar14 = COLLISION_PLANE_ZERO_THRESHOLD;
|
|
if ((short)animationData->interpolationModeAndTimeIndex == 0) {
|
|
*(undefined2 *)&local_8->keyframe_count =
|
|
*(undefined2 *)
|
|
(*(int *)((int)pAVar24 + 0xbc) + local_8->interpolationModeAndTimeIndex * 2);
|
|
}
|
|
else {
|
|
*(undefined2 *)&local_8->keyframe_count =
|
|
*(undefined2 *)
|
|
(*(int *)((int)pAVar24 + 0xbc) + local_8->interpolationModeAndTimeIndex * 2);
|
|
if (((float)puVar14 != *(float *)(iVar22 + 0x10c)) &&
|
|
(*(short *)((int)pAVar24 + 0xa6) == -1)) {
|
|
findInterpolationIndices
|
|
(this,*(uint *)(iVar22 + 0xc4),*(uint *)(iVar22 + 200),animationData,
|
|
&local_8->timestamps_ptr);
|
|
*(undefined2 *)&local_8->field_0x1c =
|
|
*(undefined2 *)(*(int *)((int)pAVar24 + 0xbc) + local_8->timestamps_ptr * 2);
|
|
}
|
|
}
|
|
}
|
|
local_1c = (float)((int)local_1c + 1);
|
|
local_20 = local_20 + 0xdc;
|
|
local_10 = (uint *)((int)local_10 + 0xd0);
|
|
} while ((uint)local_1c < *(uint *)(local_18 + 0x134));
|
|
}
|
|
this->additional_remaining_data[0] = 0;
|
|
param_4 = (Matrix4x4 *)0x0;
|
|
if (*(int *)(local_18 + 0x13c) != 0) {
|
|
param_2 = (Matrix4x4 *)0x0;
|
|
param_5 = (Matrix4x4 *)0x0;
|
|
do {
|
|
pMVar23 = param_5;
|
|
iVar11 = *(int *)(local_18 + 0x140);
|
|
puVar20 = (uint *)((int)¶m_2->m00 + this->particle_data_array6);
|
|
local_14 = *(float **)(this->particle_data_array7 + (int)param_4 * 4);
|
|
if (this->animation_frame_counter < *(uint *)((int)¶m_5[7].m22 + iVar11)) {
|
|
param_3 = (Matrix4x4 *)
|
|
((uint)*(ushort *)((int)¶m_5->m11 + iVar11) * 0x118 + this->unknown_0x80);
|
|
findInterpolationIndices
|
|
(this,(uint)param_3[2].m12,(uint)param_3[2].m13,
|
|
(AnimationData *)((int)¶m_5[7].m13 + iVar11),puVar20 + 0x50);
|
|
puVar14 = COLLISION_PLANE_ZERO_THRESHOLD;
|
|
if (*(short *)((int)&pMVar23[7].m13 + iVar11) == 0) {
|
|
*(undefined1 *)(puVar20 + 0x53) =
|
|
*(undefined1 *)(*(int *)((int)&pMVar23[7].m31 + iVar11) + puVar20[0x50]);
|
|
}
|
|
else {
|
|
*(undefined1 *)(puVar20 + 0x53) =
|
|
*(undefined1 *)(puVar20[0x50] + *(int *)((int)&pMVar23[7].m31 + iVar11));
|
|
if (((float)puVar14 != param_3[4].m03) &&
|
|
(*(short *)((int)&pMVar23[7].m13 + iVar11 + 2) == -1)) {
|
|
local_28 = puVar20 + 0x54;
|
|
findInterpolationIndices
|
|
(this,(uint)param_3[3].m01,(uint)param_3[3].m02,
|
|
(AnimationData *)((int)&pMVar23[7].m13 + iVar11),local_28);
|
|
*(undefined1 *)(puVar20 + 0x57) =
|
|
*(undefined1 *)(*(int *)((int)&pMVar23[7].m31 + iVar11) + *local_28);
|
|
}
|
|
}
|
|
}
|
|
if (((char)puVar20[0x53] == '\0') || (this->emitter_enable_flag == 0)) {
|
|
uVar17 = 0;
|
|
}
|
|
else {
|
|
uVar17 = 1;
|
|
}
|
|
puVar20[0x58] = uVar17;
|
|
if ((uVar17 != 0) ||
|
|
(puVar14 = IsParticleBufferEmpty((int)local_14), puVar14 != (undefined *)0x0)) {
|
|
puVar14 = (undefined *)0x1;
|
|
}
|
|
puVar20[0x59] = (uint)puVar14;
|
|
this->additional_remaining_data[0] = this->additional_remaining_data[0] | (uint)puVar14;
|
|
if (((char)puVar20[0x53] != '\0') || (this->animation_frame_counter == 0)) {
|
|
if (this->animation_frame_counter < *(uint *)((int)&pMVar23[1].m00 + iVar11)) {
|
|
param_3 = (Matrix4x4 *)
|
|
((uint)*(ushort *)((int)&pMVar23->m11 + iVar11) * 0x118 + this->unknown_0x80);
|
|
findInterpolationIndices
|
|
(this,(uint)param_3[2].m12,(uint)param_3[2].m13,
|
|
(AnimationData *)((int)&pMVar23->m31 + iVar11),puVar20);
|
|
if (*(short *)((int)&pMVar23->m31 + iVar11) == 0) {
|
|
puVar20[3] = *(uint *)(*(int *)((int)&pMVar23[1].m03 + iVar11) + *puVar20 * 4);
|
|
}
|
|
else {
|
|
iVar22 = *(int *)((int)&pMVar23[1].m03 + iVar11);
|
|
fVar3 = *(float *)(iVar22 + *puVar20 * 4);
|
|
puVar20[3] = (uint)((*(float *)(iVar22 + puVar20[1] * 4) - fVar3) * (float)puVar20[2]
|
|
+ fVar3);
|
|
if (((float)COLLISION_PLANE_ZERO_THRESHOLD != param_3[4].m03) &&
|
|
(*(short *)((int)&pMVar23->m31 + iVar11 + 2) == -1)) {
|
|
findInterpolationIndices
|
|
(this,(uint)param_3[3].m01,(uint)param_3[3].m02,
|
|
(AnimationData *)((int)&pMVar23->m31 + iVar11),puVar20 + 4);
|
|
iVar22 = *(int *)((int)&pMVar23[1].m03 + iVar11);
|
|
fVar3 = *(float *)(iVar22 + puVar20[4] * 4);
|
|
fVar3 = (*(float *)(iVar22 + puVar20[5] * 4) - fVar3) * (float)puVar20[6] + fVar3;
|
|
puVar20[7] = (uint)fVar3;
|
|
puVar20[3] = (uint)((fVar3 - (float)puVar20[3]) * param_3[4].m03 + (float)puVar20[3]
|
|
);
|
|
}
|
|
}
|
|
}
|
|
if (this->animation_frame_counter < *(uint *)((int)&pMVar23[1].m13 + iVar11)) {
|
|
param_3 = (Matrix4x4 *)
|
|
((uint)*(ushort *)((int)&pMVar23->m11 + iVar11) * 0x118 + this->unknown_0x80);
|
|
findInterpolationIndices
|
|
(this,(uint)param_3[2].m12,(uint)param_3[2].m13,
|
|
(AnimationData *)((int)&pMVar23[1].m10 + iVar11),puVar20 + 8);
|
|
if (*(short *)((int)&pMVar23[1].m10 + iVar11) == 0) {
|
|
puVar20[0xb] = *(uint *)(*(int *)((int)&pMVar23[1].m22 + iVar11) + puVar20[8] * 4);
|
|
}
|
|
else {
|
|
iVar22 = *(int *)((int)&pMVar23[1].m22 + iVar11);
|
|
fVar3 = *(float *)(iVar22 + puVar20[8] * 4);
|
|
puVar20[0xb] = (uint)((*(float *)(iVar22 + puVar20[9] * 4) - fVar3) *
|
|
(float)puVar20[10] + fVar3);
|
|
if (((float)COLLISION_PLANE_ZERO_THRESHOLD != param_3[4].m03) &&
|
|
(*(short *)((int)&pMVar23[1].m10 + iVar11 + 2) == -1)) {
|
|
local_28 = puVar20 + 0xc;
|
|
findInterpolationIndices
|
|
(this,(uint)param_3[3].m01,(uint)param_3[3].m02,
|
|
(AnimationData *)((int)&pMVar23[1].m10 + iVar11),local_28);
|
|
iVar22 = *(int *)((int)&pMVar23[1].m22 + iVar11);
|
|
fVar3 = *(float *)(iVar22 + *local_28 * 4);
|
|
fVar3 = (*(float *)(iVar22 + puVar20[0xd] * 4) - fVar3) * (float)puVar20[0xe] +
|
|
fVar3;
|
|
puVar20[0xf] = (uint)fVar3;
|
|
puVar20[0xb] = (uint)((fVar3 - (float)puVar20[0xb]) * param_3[4].m03 +
|
|
(float)puVar20[0xb]);
|
|
}
|
|
}
|
|
}
|
|
if (this->animation_frame_counter < *(uint *)((int)&pMVar23[1].m32 + iVar11)) {
|
|
param_3 = (Matrix4x4 *)
|
|
((uint)*(ushort *)((int)&pMVar23->m11 + iVar11) * 0x118 + this->unknown_0x80);
|
|
findInterpolationIndices
|
|
(this,(uint)param_3[2].m12,(uint)param_3[2].m13,
|
|
(AnimationData *)((int)&pMVar23[1].m23 + iVar11),puVar20 + 0x10);
|
|
if (*(short *)((int)&pMVar23[1].m23 + iVar11) == 0) {
|
|
puVar20[0x13] = *(uint *)(*(int *)((int)&pMVar23[2].m01 + iVar11) + puVar20[0x10] * 4)
|
|
;
|
|
}
|
|
else {
|
|
iVar22 = *(int *)((int)&pMVar23[2].m01 + iVar11);
|
|
fVar3 = *(float *)(iVar22 + puVar20[0x10] * 4);
|
|
puVar20[0x13] =
|
|
(uint)((*(float *)(iVar22 + puVar20[0x11] * 4) - fVar3) * (float)puVar20[0x12] +
|
|
fVar3);
|
|
if (((float)COLLISION_PLANE_ZERO_THRESHOLD != param_3[4].m03) &&
|
|
(*(short *)((int)&pMVar23[1].m23 + iVar11 + 2) == -1)) {
|
|
local_28 = puVar20 + 0x14;
|
|
findInterpolationIndices
|
|
(this,(uint)param_3[3].m01,(uint)param_3[3].m02,
|
|
(AnimationData *)((int)&pMVar23[1].m23 + iVar11),local_28);
|
|
iVar22 = *(int *)((int)&pMVar23[2].m01 + iVar11);
|
|
fVar3 = *(float *)(iVar22 + *local_28 * 4);
|
|
fVar3 = (*(float *)(iVar22 + puVar20[0x15] * 4) - fVar3) * (float)puVar20[0x16] +
|
|
fVar3;
|
|
puVar20[0x17] = (uint)fVar3;
|
|
puVar20[0x13] =
|
|
(uint)((fVar3 - (float)puVar20[0x13]) * param_3[4].m03 + (float)puVar20[0x13]);
|
|
}
|
|
}
|
|
}
|
|
if (this->animation_frame_counter < *(uint *)((int)&pMVar23[2].m11 + iVar11)) {
|
|
param_3 = (Matrix4x4 *)
|
|
((uint)*(ushort *)((int)&pMVar23->m11 + iVar11) * 0x118 + this->unknown_0x80);
|
|
findInterpolationIndices
|
|
(this,(uint)param_3[2].m12,(uint)param_3[2].m13,
|
|
(AnimationData *)((int)&pMVar23[2].m02 + iVar11),puVar20 + 0x18);
|
|
if (*(short *)((int)&pMVar23[2].m02 + iVar11) == 0) {
|
|
puVar20[0x1b] = *(uint *)(*(int *)((int)&pMVar23[2].m20 + iVar11) + puVar20[0x18] * 4)
|
|
;
|
|
}
|
|
else {
|
|
iVar22 = *(int *)((int)&pMVar23[2].m20 + iVar11);
|
|
fVar3 = *(float *)(iVar22 + puVar20[0x18] * 4);
|
|
puVar20[0x1b] =
|
|
(uint)((*(float *)(iVar22 + puVar20[0x19] * 4) - fVar3) * (float)puVar20[0x1a] +
|
|
fVar3);
|
|
if (((float)COLLISION_PLANE_ZERO_THRESHOLD != param_3[4].m03) &&
|
|
(*(short *)((int)&pMVar23[2].m02 + iVar11 + 2) == -1)) {
|
|
local_28 = puVar20 + 0x1c;
|
|
findInterpolationIndices
|
|
(this,(uint)param_3[3].m01,(uint)param_3[3].m02,
|
|
(AnimationData *)((int)&pMVar23[2].m02 + iVar11),local_28);
|
|
iVar22 = *(int *)((int)&pMVar23[2].m20 + iVar11);
|
|
fVar3 = *(float *)(iVar22 + *local_28 * 4);
|
|
fVar3 = (*(float *)(iVar22 + puVar20[0x1d] * 4) - fVar3) * (float)puVar20[0x1e] +
|
|
fVar3;
|
|
puVar20[0x1f] = (uint)fVar3;
|
|
puVar20[0x1b] =
|
|
(uint)((fVar3 - (float)puVar20[0x1b]) * param_3[4].m03 + (float)puVar20[0x1b]);
|
|
}
|
|
}
|
|
}
|
|
if (this->animation_frame_counter < *(uint *)((int)&pMVar23[2].m30 + iVar11)) {
|
|
param_3 = (Matrix4x4 *)
|
|
((uint)*(ushort *)((int)&pMVar23->m11 + iVar11) * 0x118 + this->unknown_0x80);
|
|
findInterpolationIndices
|
|
(this,(uint)param_3[2].m12,(uint)param_3[2].m13,
|
|
(AnimationData *)((int)&pMVar23[2].m21 + iVar11),puVar20 + 0x20);
|
|
if (*(short *)((int)&pMVar23[2].m21 + iVar11) == 0) {
|
|
puVar20[0x23] = *(uint *)(*(int *)((int)&pMVar23[2].m33 + iVar11) + puVar20[0x20] * 4)
|
|
;
|
|
}
|
|
else {
|
|
iVar22 = *(int *)((int)&pMVar23[2].m33 + iVar11);
|
|
fVar3 = *(float *)(iVar22 + puVar20[0x20] * 4);
|
|
puVar20[0x23] =
|
|
(uint)((*(float *)(iVar22 + puVar20[0x21] * 4) - fVar3) * (float)puVar20[0x22] +
|
|
fVar3);
|
|
if (((float)COLLISION_PLANE_ZERO_THRESHOLD != param_3[4].m03) &&
|
|
(*(short *)((int)&pMVar23[2].m21 + iVar11 + 2) == -1)) {
|
|
local_28 = puVar20 + 0x24;
|
|
findInterpolationIndices
|
|
(this,(uint)param_3[3].m01,(uint)param_3[3].m02,
|
|
(AnimationData *)((int)&pMVar23[2].m21 + iVar11),local_28);
|
|
iVar22 = *(int *)((int)&pMVar23[2].m33 + iVar11);
|
|
fVar3 = *(float *)(iVar22 + *local_28 * 4);
|
|
fVar3 = (*(float *)(iVar22 + puVar20[0x25] * 4) - fVar3) * (float)puVar20[0x26] +
|
|
fVar3;
|
|
puVar20[0x27] = (uint)fVar3;
|
|
puVar20[0x23] =
|
|
(uint)((fVar3 - (float)puVar20[0x23]) * param_3[4].m03 + (float)puVar20[0x23]);
|
|
}
|
|
}
|
|
}
|
|
if (this->animation_frame_counter < *(uint *)((int)&pMVar23[3].m03 + iVar11)) {
|
|
param_3 = (Matrix4x4 *)
|
|
((uint)*(ushort *)((int)&pMVar23->m11 + iVar11) * 0x118 + this->unknown_0x80);
|
|
findInterpolationIndices
|
|
(this,(uint)param_3[2].m12,(uint)param_3[2].m13,
|
|
(AnimationData *)((int)&pMVar23[3].m00 + iVar11),puVar20 + 0x28);
|
|
if (*(short *)((int)&pMVar23[3].m00 + iVar11) == 0) {
|
|
puVar20[0x2b] = *(uint *)(*(int *)((int)&pMVar23[3].m12 + iVar11) + puVar20[0x28] * 4)
|
|
;
|
|
}
|
|
else {
|
|
iVar22 = *(int *)((int)&pMVar23[3].m12 + iVar11);
|
|
fVar3 = *(float *)(iVar22 + puVar20[0x28] * 4);
|
|
puVar20[0x2b] =
|
|
(uint)((*(float *)(iVar22 + puVar20[0x29] * 4) - fVar3) * (float)puVar20[0x2a] +
|
|
fVar3);
|
|
if (((float)COLLISION_PLANE_ZERO_THRESHOLD != param_3[4].m03) &&
|
|
(*(short *)((int)&pMVar23[3].m00 + iVar11 + 2) == -1)) {
|
|
local_28 = puVar20 + 0x2c;
|
|
findInterpolationIndices
|
|
(this,(uint)param_3[3].m01,(uint)param_3[3].m02,
|
|
(AnimationData *)((int)&pMVar23[3].m00 + iVar11),local_28);
|
|
iVar22 = *(int *)((int)&pMVar23[3].m12 + iVar11);
|
|
fVar3 = *(float *)(iVar22 + *local_28 * 4);
|
|
fVar3 = (*(float *)(iVar22 + puVar20[0x2d] * 4) - fVar3) * (float)puVar20[0x2e] +
|
|
fVar3;
|
|
puVar20[0x2f] = (uint)fVar3;
|
|
puVar20[0x2b] =
|
|
(uint)((fVar3 - (float)puVar20[0x2b]) * param_3[4].m03 + (float)puVar20[0x2b]);
|
|
}
|
|
}
|
|
}
|
|
if (this->animation_frame_counter < *(uint *)((int)&pMVar23[3].m22 + iVar11)) {
|
|
getInterpolatedFloat
|
|
(this,(uint)*(ushort *)((int)&pMVar23->m11 + iVar11) * 0x118 +
|
|
this->unknown_0x80,(short *)((int)&pMVar23[3].m13 + iVar11),
|
|
puVar20 + 0x30);
|
|
}
|
|
if (this->animation_frame_counter < *(uint *)((int)&pMVar23[4].m01 + iVar11)) {
|
|
getInterpolatedFloat
|
|
(this,(uint)*(ushort *)((int)&pMVar23->m11 + iVar11) * 0x118 +
|
|
this->unknown_0x80,(short *)((int)&pMVar23[3].m32 + iVar11),
|
|
puVar20 + 0x38);
|
|
}
|
|
if (this->animation_frame_counter < *(uint *)((int)&pMVar23[4].m20 + iVar11)) {
|
|
getInterpolatedFloat
|
|
(this,(uint)*(ushort *)((int)&pMVar23->m11 + iVar11) * 0x118 +
|
|
this->unknown_0x80,(short *)((int)&pMVar23[4].m11 + iVar11),
|
|
puVar20 + 0x40);
|
|
}
|
|
if (this->animation_frame_counter < *(uint *)((int)&pMVar23[4].m33 + iVar11)) {
|
|
getInterpolatedFloat
|
|
(this,(uint)*(ushort *)((int)&pMVar23->m11 + iVar11) * 0x118 +
|
|
this->unknown_0x80,(short *)((int)&pMVar23[4].m30 + iVar11),
|
|
puVar20 + 0x48);
|
|
}
|
|
}
|
|
param_2 = (Matrix4x4 *)¶m_2[5].m23;
|
|
param_4 = (Matrix4x4 *)((int)¶m_4->m00 + 1);
|
|
param_5 = (Matrix4x4 *)¶m_5[7].m32;
|
|
} while (param_4 < *(Matrix4x4 **)(local_18 + 0x13c));
|
|
}
|
|
iVar11 = 0;
|
|
if (this->final_world_pos_z != 0.0) {
|
|
uVar17 = 0;
|
|
if (*(int *)(local_18 + 0x104) != 0) {
|
|
param_3 = (Matrix4x4 *)0x0;
|
|
iVar22 = local_18;
|
|
do {
|
|
iVar15 = *(int *)(iVar22 + 0x108) + iVar11;
|
|
if (this->animation_frame_counter < *(uint *)(*(int *)(iVar22 + 0x108) + 0x20 + iVar11)) {
|
|
extractAnimationByteFromKeyframes
|
|
(this,(AnimationState *)
|
|
((uint)*(ushort *)(iVar15 + 4) * 0x118 + this->unknown_0x80),
|
|
(AnimationData *)(iVar15 + 0x14),
|
|
(InterpolationOutputBuffer *)
|
|
((int)¶m_3->m00 + (int)this->final_world_pos_z));
|
|
iVar22 = local_18;
|
|
}
|
|
uVar17 = uVar17 + 1;
|
|
param_3 = (Matrix4x4 *)¶m_3->m20;
|
|
iVar11 = iVar11 + 0x30;
|
|
} while (uVar17 < *(uint *)(iVar22 + 0x104));
|
|
}
|
|
for (param_3 = (Matrix4x4 *)this->hierarchy_index;
|
|
(SceneObject *)param_3 != (SceneObject *)0x0;
|
|
param_3 = (Matrix4x4 *)((SceneObject *)param_3)->field_0x190) {
|
|
fVar3 = ((SceneObject *)param_3)->field_0x184;
|
|
if ((fVar3 != 9.18341e-41) &&
|
|
(*(char *)((int)fVar3 * 0x20 + 0xc + (int)this->final_world_pos_z) != '\0')) {
|
|
iVar11 = (int)fVar3 * 0x30 + *(int *)(local_18 + 0x108);
|
|
pfVar12 = (float *)((uint)*(ushort *)(iVar11 + 4) * 0x40 + (int)this->transform_vec2_x);
|
|
pMVar23 = &local_1a0;
|
|
for (iVar22 = 0x10; iVar22 != 0; iVar22 = iVar22 + -1) {
|
|
pMVar23->m00 = *pfVar12;
|
|
pfVar12 = pfVar12 + 1;
|
|
pMVar23 = (Matrix4x4 *)&pMVar23->m01;
|
|
}
|
|
local_1a0.m30 =
|
|
local_1a0.m00 * *(float *)(iVar11 + 8) +
|
|
local_1a0.m10 * *(float *)(iVar11 + 0xc) + local_1a0.m20 * *(float *)(iVar11 + 0x10)
|
|
+ local_1a0.m30;
|
|
local_1a0.m31 =
|
|
local_1a0.m01 * *(float *)(iVar11 + 8) +
|
|
local_1a0.m11 * *(float *)(iVar11 + 0xc) + local_1a0.m21 * *(float *)(iVar11 + 0x10)
|
|
+ local_1a0.m31;
|
|
local_1a0.m32 =
|
|
local_1a0.m02 * *(float *)(iVar11 + 8) +
|
|
local_1a0.m12 * *(float *)(iVar11 + 0xc) + local_1a0.m22 * *(float *)(iVar11 + 0x10)
|
|
+ local_1a0.m32;
|
|
transformMatrix4x4((SceneObject *)param_3,&local_1a0,(Matrix4x4 *)&this->world_position_x,
|
|
(Matrix4x4 *)&this->render_priority,(Matrix4x4 *)this->render_scale_z);
|
|
}
|
|
}
|
|
}
|
|
this->transform_sync_value = *(int *)((int)this->animation_context_ptr + 0x10);
|
|
}
|
|
return;
|
|
}
|
|
|