259 lines
6.5 KiB
C++
259 lines
6.5 KiB
C++
#include "TTableLayer.h"
|
|
|
|
//----- (010173E7) --------------------------------------------------------
|
|
int __thiscall TTableLayer::FieldEffect(TTableLayer* this, struct TBall* a2, struct vector_type* a3)
|
|
{
|
|
TTableLayer* v3; // esi
|
|
struct TBall* v4; // edi
|
|
double v5; // ST08_8
|
|
|
|
v3 = this;
|
|
v4 = a2;
|
|
v5 = *(float*)((char*)this + 98);
|
|
*(float*)a3 = v5
|
|
- (0.5 - (double)_rand() * 0.00003051850947599719 + *(float*)((char*)v4 + 54))
|
|
* *(float*)((char*)v4 + 66)
|
|
* *(float*)((char*)this + 110);
|
|
*((float*)a3 + 1) = *(float*)((char*)v3 + 102)
|
|
- *(float*)((char*)v4 + 58) * *(float*)((char*)v4 + 66) * *(float*)((char*)v3 + 110);
|
|
return 1;
|
|
}
|
|
|
|
//----- (0101A5AB) --------------------------------------------------------
|
|
TTableLayer* __thiscall TTableLayer::TTableLayer(TTableLayer* this, struct TPinballTable* a2)
|
|
{
|
|
struct TPinballTable* v2; // edi
|
|
TTableLayer* v3; // esi
|
|
float* v4; // eax
|
|
int v5; // eax
|
|
DWORD* v6; // eax
|
|
int v7; // eax
|
|
DWORD* v8; // eax
|
|
DWORD* v9; // eax
|
|
float* v10; // ecx
|
|
float* v11; // edi
|
|
double v12; // st7
|
|
double v13; // st7
|
|
double v14; // st7
|
|
double v15; // st7
|
|
double v16; // st7
|
|
double v17; // st7
|
|
double v18; // st7
|
|
double v19; // st7
|
|
TEdgeManager* v20; // eax
|
|
float v21; // ST18_4
|
|
float v22; // ST14_4
|
|
TLine* v23; // eax
|
|
TLine* v24; // edi
|
|
double v25; // st7
|
|
float v26; // ST10_4
|
|
double v27; // st7
|
|
float v28; // ST0C_4
|
|
char v30; // [esp+24h] [ebp-5Ch]
|
|
int v31; // [esp+2Ch] [ebp-54h]
|
|
float* v32; // [esp+30h] [ebp-50h]
|
|
int v33; // [esp+38h] [ebp-48h]
|
|
int v34; // [esp+54h] [ebp-2Ch]
|
|
unsigned int v35; // [esp+58h] [ebp-28h]
|
|
int v36; // [esp+5Ch] [ebp-24h]
|
|
int v37; // [esp+60h] [ebp-20h]
|
|
DWORD* v38; // [esp+64h] [ebp-1Ch]
|
|
struct zmap_header_type* v39; // [esp+68h] [ebp-18h]
|
|
int v40; // [esp+6Ch] [ebp-14h]
|
|
int v41; // [esp+70h] [ebp-10h]
|
|
int v42; // [esp+74h] [ebp-Ch]
|
|
int v43; // [esp+78h] [ebp-8h]
|
|
int v44; // [esp+7Ch] [ebp-4h]
|
|
struct TPinballTable* v45; // [esp+88h] [ebp+8h]
|
|
struct TPinballTable* v46; // [esp+88h] [ebp+8h]
|
|
|
|
v2 = a2;
|
|
v3 = this;
|
|
TCollisionComponent::TCollisionComponent(this, a2, -1, 0);
|
|
*(DWORD*)v3 = &TTableLayer::vftable;
|
|
v45 = (struct TPinballTable*)loader_query_handle("table");
|
|
loader_query_visual((int)v45, 0, &v30);
|
|
v4 = (float*)loader_query_float_attribute((int)v45, 0, 700);
|
|
proj_recenter(COERCE_INT(*v4), COERCE_INT(v4[1]));
|
|
render_set_background_zmap(v39, 0, 0);
|
|
v5 = (int)v38;
|
|
*(DWORD*)((char*)v3 + 78) = v38;
|
|
v40 = 0;
|
|
v41 = 0;
|
|
v42 = *(DWORD*)(v5 + 12);
|
|
v43 = *(DWORD*)(v5 + 16);
|
|
render_create_sprite(0, v5, (int)v39, 0, 0, &v40);
|
|
*(DWORD*)(*(DWORD*)((char*)v3 + 30) + 66) = v36;
|
|
*(DWORD*)(*(DWORD*)((char*)v3 + 30) + 70) = v37;
|
|
*(DWORD*)(*(DWORD*)((char*)v3 + 30) + 74) = v34;
|
|
v6 = (DWORD*)loader_query_float_attribute((int)v45, 0, 305);
|
|
if (v6)
|
|
{
|
|
*(DWORD*)(*(DWORD*)((char*)v3 + 30) + 270) = *v6;
|
|
*(DWORD*)(*(DWORD*)((char*)v3 + 30) + 274) = v6[1];
|
|
*(DWORD*)(*(DWORD*)((char*)v3 + 30) + 278) = v6[2];
|
|
}
|
|
else
|
|
{
|
|
*(DWORD*)(*(DWORD*)((char*)v3 + 30) + 270) = 1103626240;
|
|
*(DWORD*)(*(DWORD*)((char*)v3 + 30) + 274) = 1056964608;
|
|
*(DWORD*)(*(DWORD*)((char*)v3 + 30) + 278) = 1070141400;
|
|
}
|
|
v7 = *(DWORD*)((char*)v3 + 30);
|
|
*(float*)((char*)v3 + 98) = cos(*(float*)(v7 + 278)) * sin(*(float*)(v7 + 274)) * *(float*)(v7 + 270);
|
|
*(float*)((char*)v3 + 102) = sin(*(float*)(v7 + 278)) * sin(*(float*)(v7 + 274)) * *(float*)(v7 + 270);
|
|
v8 = (DWORD*)loader_query_float_attribute((int)v45, 0, 701);
|
|
if (v8)
|
|
* (DWORD*)((char*)v3 + 110) = *v8;
|
|
else
|
|
*(DWORD*)((char*)v3 + 110) = 1045220557;
|
|
v9 = v38;
|
|
*(DWORD*)((char*)v2 + 234) = *(DWORD*)((char*)v38 + 29);
|
|
*(DWORD*)((char*)v2 + 238) = *(DWORD*)((char*)v9 + 33);
|
|
*(DWORD*)((char*)v2 + 242) = v9[3];
|
|
v10 = v32;
|
|
*(DWORD*)((char*)v2 + 246) = v9[4];
|
|
v44 = v31;
|
|
*(DWORD*)((char*)v3 + 66) = v33;
|
|
*(DWORD*)((char*)v3 + 62) = 1097859072;
|
|
v11 = v10;
|
|
v46 = (struct TPinballTable*)v10;
|
|
if (v10[2] >= (double)v10[4])
|
|
v12 = v10[4];
|
|
else
|
|
v12 = v10[2];
|
|
if (v12 >= *v10)
|
|
{
|
|
v13 = *v10;
|
|
}
|
|
else if (v10[2] >= (double)v10[4])
|
|
{
|
|
v13 = v10[4];
|
|
}
|
|
else
|
|
{
|
|
v13 = v10[2];
|
|
}
|
|
*(float*)((char*)v3 + 82) = v13;
|
|
if (v10[2] <= (double)v10[4])
|
|
v14 = v10[4];
|
|
else
|
|
v14 = v10[2];
|
|
if (v14 <= *v10)
|
|
{
|
|
v15 = *v10;
|
|
}
|
|
else if (v10[2] <= (double)v10[4])
|
|
{
|
|
v15 = v10[4];
|
|
}
|
|
else
|
|
{
|
|
v15 = v10[2];
|
|
}
|
|
*(float*)((char*)v3 + 90) = v15;
|
|
if (v10[3] >= (double)v10[5])
|
|
v16 = v10[5];
|
|
else
|
|
v16 = v10[3];
|
|
if (v16 >= v10[1])
|
|
{
|
|
v17 = v10[1];
|
|
}
|
|
else if (v10[3] >= (double)v10[5])
|
|
{
|
|
v17 = v10[5];
|
|
}
|
|
else
|
|
{
|
|
v17 = v10[3];
|
|
}
|
|
*(float*)((char*)v3 + 86) = v17;
|
|
if (v10[3] <= (double)v10[5])
|
|
v18 = v10[5];
|
|
else
|
|
v18 = v10[3];
|
|
if (v18 <= v10[1])
|
|
{
|
|
v19 = v10[1];
|
|
}
|
|
else if (v10[3] <= (double)v10[5])
|
|
{
|
|
v19 = v10[5];
|
|
}
|
|
else
|
|
{
|
|
v19 = v10[3];
|
|
}
|
|
*(float*)((char*)v3 + 94) = v19;
|
|
v20 = (TEdgeManager*)operator new(0xFC4u);
|
|
if (v20)
|
|
{
|
|
v21 = *(float*)((char*)v3 + 94) - *(float*)((char*)v3 + 86);
|
|
v22 = *(float*)((char*)v3 + 90) - *(float*)((char*)v3 + 82);
|
|
edge_manager = TEdgeManager::TEdgeManager(v20, *(float*)((char*)v3 + 82), *(float*)((char*)v3 + 86), v22, v21);
|
|
}
|
|
else
|
|
{
|
|
edge_manager = 0;
|
|
}
|
|
if (v44 > 0)
|
|
{
|
|
while (1)
|
|
{
|
|
v23 = (TLine*)operator new(0x55u);
|
|
v24 = v23 ? TLine::TLine(v23, v3, (char*)v3 + 5, v35, v11[2], v11[3], *v11, v11[1]) : 0;
|
|
if (v24)
|
|
{
|
|
(*(void(__thiscall * *)(TLine*))(*(DWORD*)v24 + 8))(v24);
|
|
objlist_class::Add((TTableLayer*)((char*)v3 + 42), (void*)v24);
|
|
}
|
|
v46 = (struct TPinballTable*)((char*)v46 + 8);
|
|
if (!--v44)
|
|
break;
|
|
v11 = (float*)v46;
|
|
}
|
|
}
|
|
v25 = *(float*)((char*)v3 + 90);
|
|
*(DWORD*)((char*)v3 + 118) = -1;
|
|
v26 = v25;
|
|
v27 = *(float*)((char*)v3 + 94);
|
|
*(DWORD*)((char*)v3 + 114) = (char*)v3 + 5;
|
|
v28 = v27;
|
|
*(DWORD*)((char*)v3 + 122) = v3;
|
|
edges_insert_square(
|
|
*(float*)((char*)v3 + 86),
|
|
*(float*)((char*)v3 + 82),
|
|
v28,
|
|
v26,
|
|
0,
|
|
(TTableLayer*)((char*)v3 + 114));
|
|
return v3;
|
|
}
|
|
// 100276C: using guessed type void *TTableLayer::vftable;
|
|
|
|
//----- (0101A928) --------------------------------------------------------
|
|
TZmapList* __thiscall TTableLayer::~TTableLayer(TTableLayer* this)
|
|
{
|
|
TCollisionComponent* v1; // esi
|
|
|
|
v1 = this;
|
|
*(DWORD*)this = &TTableLayer::vftable;
|
|
if (edge_manager)
|
|
TEdgeManager::destroy(edge_manager, 1);
|
|
return TCollisionComponent::~TCollisionComponent(v1);
|
|
}
|
|
// 100276C: using guessed type void *TTableLayer::vftable;
|
|
|
|
//----- (0101AACD) --------------------------------------------------------
|
|
TTableLayer* __thiscall TTableLayer::destroy(TTableLayer* this, char a2)
|
|
{
|
|
TTableLayer* v2; // esi
|
|
|
|
v2 = this;
|
|
TTableLayer::~TTableLayer(this);
|
|
if (a2 & 1)
|
|
component_delete((void*)v2);
|
|
return v2;
|
|
}
|