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::`scalar deleting destructor`(edge_manager, 1);
return TCollisionComponent::~TCollisionComponent(v1);
}
// 100276C: using guessed type void *TTableLayer::vftable;
//----- (0101AACD) --------------------------------------------------------
TTableLayer *__thiscall TTableLayer::`scalar deleting destructor`(TTableLayer *this, char a2)
{
TTableLayer *v2; // esi
v2 = this;
TTableLayer::~TTableLayer(this);
if ( a2 & 1 )
operator delete((void *)v2);
return v2;
}