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