Files
3d-pinball-space-cadet/Classes/TTableLayer/TTableLayer.cpp
T

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;
}