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

195 lines
5.8 KiB
C++

#include "TFlagSpinner.h"
//----- (01015F34) --------------------------------------------------------
void __stdcall TFlagSpinner::SpinTimer(int a1, void *a2)
{
*(_DWORD *)((char *)a2 + 102) = 0;
TFlagSpinner::NextFrame((TFlagSpinner *)a2);
}
//----- (01015F4E) --------------------------------------------------------
void __thiscall TFlagSpinner::NextFrame(TFlagSpinner *this)
{
TFlagSpinner *v1; // esi
int v2; // eax
int v3; // edx
int v4; // ecx
int v5; // edi
double v6; // st7
int v7; // et1
char v9; // c0
float v10; // ST0C_4
v1 = this;
*(_DWORD *)((char *)v1 + 98) += *(_DWORD *)((char *)this + 94);
v2 = *(_DWORD *)((char *)this + 34);
v3 = *(_DWORD *)((char *)this + 98);
v4 = *(_DWORD *)(*(_DWORD *)(v2 + 4) + 4);
if ( v3 < v4 )
{
if ( v3 < 0 )
*(_DWORD *)((char *)v1 + 98) = v4 - 1;
}
else
{
*(_DWORD *)((char *)v1 + 98) = 0;
}
v5 = *(_DWORD *)(*(_DWORD *)(v2 + 4) + 4 * *(_DWORD *)((char *)v1 + 98) + 8);
if ( !*(_DWORD *)(*(_DWORD *)((char *)v1 + 30) + 370) )
{
control_handler(63, v1);
if ( *(_DWORD *)((char *)v1 + 70) )
loader_play_sound(*(_DWORD *)((char *)v1 + 70));
if ( !*(_DWORD *)((char *)v1 + 98) )
control_handler(62, v1);
}
render_sprite_set(
*(_DWORD **)((char *)v1 + 26),
v5,
*(_DWORD *)(*(_DWORD *)(*(_DWORD *)((char *)v1 + 38) + 4) + 4 * *(_DWORD *)((char *)v1 + 98) + 8),
*(_DWORD *)(v5 + 29) - *(_DWORD *)(*(_DWORD *)((char *)v1 + 30) + 234),
*(_DWORD *)(v5 + 33) - *(_DWORD *)(*(_DWORD *)((char *)v1 + 30) + 238));
v6 = *(float *)((char *)v1 + 90) * *(float *)((char *)v1 + 78);
v7 = *(_DWORD *)((char *)v1 + 86);
*(float *)((char *)v1 + 78) = v6;
if ( !v9 )
{
v10 = 1.0 / v6;
timer_set(v10, (int)v1, (int)TFlagSpinner::SpinTimer);
}
}
//----- (01016014) --------------------------------------------------------
int __thiscall TFlagSpinner::Message(TFlagSpinner *this, int a2, float a3)
{
TFlagSpinner *v3; // esi
int v4; // eax
v3 = this;
if ( a2 == 1024 )
{
if ( *(_DWORD *)((char *)this + 102) )
{
timer_kill(*(_DWORD *)((char *)this + 102));
*(_DWORD *)((char *)v3 + 102) = 0;
}
*(_DWORD *)((char *)v3 + 98) = 0;
v4 = *(_DWORD *)(*(_DWORD *)(*(_DWORD *)((char *)v3 + 34) + 4) + 8);
render_sprite_set(
*(_DWORD **)((char *)v3 + 26),
*(_DWORD *)(*(_DWORD *)(*(_DWORD *)((char *)v3 + 34) + 4) + 8),
*(_DWORD *)(*(_DWORD *)(*(_DWORD *)((char *)v3 + 38) + 4) + 8),
*(_DWORD *)(v4 + 29) - *(_DWORD *)(*(_DWORD *)((char *)v3 + 30) + 234),
*(_DWORD *)(v4 + 33) - *(_DWORD *)(*(_DWORD *)((char *)v3 + 30) + 238));
}
return 0;
}
//----- (01016078) --------------------------------------------------------
int __thiscall TFlagSpinner::get_scoring(TFlagSpinner *this, int a2)
{
int result; // eax
if ( a2 >= 2 )
result = 0;
else
result = *(_DWORD *)((char *)this + 4 * a2 + 110);
return result;
}
//----- (01016096) --------------------------------------------------------
void __thiscall TFlagSpinner::put_scoring(TFlagSpinner *this, int a2, int a3)
{
if ( a2 < 2 )
*(_DWORD *)((char *)this + 4 * a2 + 110) = a3;
}
//----- (01018150) --------------------------------------------------------
void __thiscall TFlagSpinner::Collision(TFlagSpinner *this, struct TBall *a2, struct vector_type *a3, struct vector_type *a4, float a5, struct TEdgeSegment *a6)
{
int v6; // eax
TFlagSpinner *v7; // edi
*(float *)((char *)a2 + 42) = *(float *)a3;
v6 = *((_DWORD *)a3 + 1);
v7 = this;
*(float *)((char *)a2 + 70) = *(float *)((char *)a2 + 70) - a5;
*(_DWORD *)((char *)a2 + 46) = v6;
TBall::not_again(a2, a6);
*(_DWORD *)((char *)v7 + 94) = 2 * (*(_DWORD *)((char *)v7 + 106) != (_DWORD)a6) - 1;
if ( *(float *)((char *)a2 + 66) == 0.0 )
*(_DWORD *)((char *)v7 + 78) = *(_DWORD *)((char *)v7 + 86);
else
*(float *)((char *)v7 + 78) = *(float *)((char *)a2 + 66) * 20.0;
if ( *(float *)((char *)v7 + 78) < (double)*(float *)((char *)v7 + 86) )
*(_DWORD *)((char *)v7 + 78) = *(_DWORD *)((char *)v7 + 86);
if ( *(float *)((char *)v7 + 78) > (double)*(float *)((char *)v7 + 82) )
*(_DWORD *)((char *)v7 + 78) = *(_DWORD *)((char *)v7 + 82);
TFlagSpinner::NextFrame(v7);
}
//----- (010194B0) --------------------------------------------------------
TFlagSpinner *__thiscall TFlagSpinner::TFlagSpinner(TFlagSpinner *this, struct TPinballTable *a2, int a3)
{
TFlagSpinner *v3; // esi
TLine *v4; // eax
TLine *v5; // edi
TLine *v6; // eax
TLine *v7; // eax
_DWORD *v8; // eax
_DWORD *v9; // eax
_DWORD *v10; // eax
char v12; // [esp+Ch] [ebp-60h]
int *v13; // [esp+18h] [ebp-54h]
unsigned int v14; // [esp+40h] [ebp-2Ch]
int v15; // [esp+54h] [ebp-18h]
int v16; // [esp+58h] [ebp-14h]
int v17; // [esp+60h] [ebp-Ch]
int v18; // [esp+64h] [ebp-8h]
v3 = this;
TCollisionComponent::TCollisionComponent(this, a2, a3, 0);
*(_DWORD *)v3 = &TFlagSpinner::vftable;
*(_DWORD *)((char *)v3 + 102) = 0;
loader_query_visual(a3, 0, &v12);
v15 = *v13;
v16 = v13[1];
v17 = v13[2];
v18 = v13[3];
v4 = (TLine *)operator new(0x55u);
if ( v4 )
v5 = TLine::TLine(v4, v3, (char *)v3 + 5, v14, (struct vector_type *)&v17, (struct vector_type *)&v15);
else
v5 = 0;
if ( v5 )
{
(*(void (__thiscall **)(TLine *))(*(_DWORD *)v5 + 8))(v5);
objlist_class::Add((TFlagSpinner *)((char *)v3 + 42), (void *)v5);
}
v6 = (TLine *)operator new(0x55u);
if ( v6 )
v7 = TLine::TLine(v6, v3, (char *)v3 + 5, v14, (struct vector_type *)&v15, (struct vector_type *)&v17);
else
v7 = 0;
*(_DWORD *)((char *)v3 + 106) = v7;
if ( v7 )
{
(*(void (__thiscall **)(TLine *))(*(_DWORD *)v7 + 8))(v7);
objlist_class::Add((TFlagSpinner *)((char *)v3 + 42), *(void **)((char *)v3 + 106));
}
*(_DWORD *)((char *)v3 + 90) = 1059481190;
*(_DWORD *)((char *)v3 + 82) = 1195593728;
*(_DWORD *)((char *)v3 + 86) = 1084227584;
v8 = (_DWORD *)loader_query_float_attribute(a3, 0, 1202);
if ( v8 )
*(_DWORD *)((char *)v3 + 90) = *v8;
v9 = (_DWORD *)loader_query_float_attribute(a3, 0, 1200);
if ( v9 )
*(_DWORD *)((char *)v3 + 82) = *v9;
v10 = (_DWORD *)loader_query_float_attribute(a3, 0, 1201);
if ( v10 )
*(_DWORD *)((char *)v3 + 86) = *v10;
return v3;
}
// 1002588: using guessed type void *TFlagSpinner::vftable;