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