clean up extra decorators

This commit is contained in:
Sydney Biscuit committed 2019-08-18 16:44:11 -07:00
1 parent 531e638179
commit 3183e73860
95 files changed
+4629 -4631

No files matched your search

+12 -12
View File
@@ -1,7 +1,7 @@
#include "pinball.h"
//----- (01012E51) --------------------------------------------------------
int __stdcall objlist_add_object(_DWORD *a1, int a2)
int objlist_add_object(DWORD *a1, int a2)
{
int v2; // ecx
@@ -13,17 +13,17 @@ return ++a1[1];
}
//----- (01012E7A) --------------------------------------------------------
signed int __stdcall objlist_delete_object(int a1, int a2)
signed int objlist_delete_object(int a1, int a2)
{
int v2; // edx
int v3; // ecx
_DWORD *v4; // esi
DWORD *v4; // esi
v2 = *(_DWORD *)(a1 + 4);
v2 = *(DWORD *)(a1 + 4);
v3 = v2 - 1;
if ( v2 - 1 < 0 )
return 0;
v4 = (_DWORD *)(a1 + 4 * v3 + 8);
v4 = (DWORD *)(a1 + 4 * v3 + 8);
while ( *v4 != a2 )
{
--v3;
@@ -31,17 +31,17 @@ while ( *v4 != a2 )
if ( v3 < 0 )
return 0;
}
*(_DWORD *)(a1 + 4 * v3 + 8) = *(_DWORD *)(a1 + 4 * v2 + 4);
--*(_DWORD *)(a1 + 4);
*(DWORD *)(a1 + 4 * v3 + 8) = *(DWORD *)(a1 + 4 * v2 + 4);
--*(DWORD *)(a1 + 4);
return 1;
}
//----- (01012EBE) --------------------------------------------------------
_DWORD *__stdcall objlist_new(int a1)
DWORD *objlist_new(int a1)
{
_DWORD *result; // eax
DWORD *result; // eax
result = (_DWORD *)memoryallocate(4 * a1 + 12);
result = (DWORD *)memoryallocate(4 * a1 + 12);
if ( result )
{
result[1] = 0;
@@ -51,7 +51,7 @@ return result;
}
//----- (01012EE8) --------------------------------------------------------
int *__stdcall objlist_grow(int *a1, int a2)
int *objlist_grow(int *a1, int a2)
{
int *v2; // esi
int v3; // eax
@@ -75,7 +75,7 @@ return v2;
}
//----- (01013C6F) --------------------------------------------------------
void __stdcall objlist_destroy(int a1)
void objlist_destroy(int a1)
{
if ( a1 )
memoryfree(a1);
+5 -5
View File
@@ -10,15 +10,15 @@ objlist_class *__thiscall objlist_class::objlist_class(objlist_class *this, int
objlist_class *v3; // esi
v3 = this;
*((_DWORD *)this + 1) = objlist_new(a2);
*(_DWORD *)v3 = a3;
*((DWORD *)this + 1) = objlist_new(a2);
*(DWORD *)v3 = a3;
return v3;
}
//----- (010098F7) --------------------------------------------------------
void __thiscall objlist_class::Grow(objlist_class *this)
{
*((_DWORD *)this + 1) = objlist_grow(*((int **)this + 1), *(_DWORD *)this);
*((DWORD *)this + 1) = objlist_grow(*((int **)this + 1), *(DWORD *)this);
}
//----- (0100ACF3) --------------------------------------------------------
@@ -27,7 +27,7 @@ void __thiscall objlist_class::Add(objlist_class *this, void *a2)
objlist_class *v2; // esi
v2 = this;
if ( *(_DWORD *)(*((_DWORD *)this + 1) + 4) == **((_DWORD **)this + 1) )
if ( *(DWORD *)(*((DWORD *)this + 1) + 4) == **((DWORD **)this + 1) )
objlist_class::Grow(this);
objlist_add_object(*((_DWORD **)v2 + 1), (int)a2);
objlist_add_object(*((DWORD **)v2 + 1), (int)a2);
}
+32 -32
View File
@@ -10,7 +10,7 @@ bool __thiscall TBall::already_hit(TBall *this, struct TEdgeSegment *a2)
int v2; // esi
bool result; // al
v2 = *(_DWORD *)((char *)this + 134);
v2 = *(DWORD *)((char *)this + 134);
if ( !v2 )
return 0;
result = 1;
@@ -34,7 +34,7 @@ if ( *(struct TEdgeSegment **)((char *)this + 130) != a2 )
{
result = 0;
if ( v2 != 5 )
result = v2 == (_DWORD)a2;
result = v2 == (DWORD)a2;
}
}
return result;
@@ -45,11 +45,11 @@ void __thiscall TBall::not_again(TBall *this, struct TEdgeSegment *a2)
{
signed int v2; // edx
v2 = *(_DWORD *)((char *)this + 134);
v2 = *(DWORD *)((char *)this + 134);
if ( v2 < 5 )
{
*(_DWORD *)((char *)this + 4 * v2 + 114) = a2;
++*(_DWORD *)((char *)this + 134);
*(DWORD *)((char *)this + 4 * v2 + 114) = a2;
++*(DWORD *)((char *)this + 134);
}
}
@@ -62,16 +62,16 @@ int v4; // eax
v3 = this;
if ( a2 == 1024 )
{
render_ball_set(*(_DWORD *)((char *)this + 26), 0, 0.0, 0, 0);
v4 = *(_DWORD *)((char *)v3 + 154);
render_ball_set(*(DWORD *)((char *)this + 26), 0, 0.0, 0, 0);
v4 = *(DWORD *)((char *)v3 + 154);
*(float *)((char *)v3 + 42) = 0.0;
*(_DWORD *)((char *)v3 + 106) = 0;
*(DWORD *)((char *)v3 + 106) = 0;
*(float *)((char *)v3 + 46) = 0.0;
*((_BYTE *)v3 + 5) = 0;
*(_DWORD *)((char *)v3 + 150) = 0;
*(_DWORD *)((char *)v3 + 110) = 1;
*(DWORD *)((char *)v3 + 150) = 0;
*(DWORD *)((char *)v3 + 110) = 1;
*(float *)((char *)v3 + 58) = 0.0;
*(_DWORD *)((char *)v3 + 50) = v4;
*(DWORD *)((char *)v3 + 50) = v4;
*(float *)((char *)v3 + 54) = 0.0;
*(float *)((char *)v3 + 66) = 0.0;
*(float *)((char *)v3 + 70) = 0.0;
@@ -93,16 +93,16 @@ int v8; // [esp+14h] [ebp-8h]
int v9; // [esp+18h] [ebp-4h]
v1 = this;
if ( *(_DWORD *)((char *)this + 150) )
if ( *(DWORD *)((char *)this + 150) )
*(float *)((char *)this + 50) = *(float *)((char *)this + 142) * *(float *)((char *)this + 46)
+ *(float *)((char *)this + 138) * *(float *)((char *)this + 42)
+ *(float *)((char *)this + 154)
+ *(float *)((char *)this + 146);
proj_xform_to_2d((float *)((char *)this + 42), &v8);
v2 = proj_z_distance((char *)v1 + 42);
v3 = *(_DWORD *)(*(_DWORD *)((char *)v1 + 34) + 4);
v3 = *(DWORD *)(*(DWORD *)((char *)v1 + 34) + 4);
v4 = 0;
if ( *(_DWORD *)(v3 + 4) - 1 > 0 )
if ( *(DWORD *)(v3 + 4) - 1 > 0 )
{
v5 = (float *)((char *)v1 + 162);
do
@@ -112,15 +112,15 @@ break;
++v4;
++v5;
}
while ( v4 < *(_DWORD *)(v3 + 4) - 1 );
while ( v4 < *(DWORD *)(v3 + 4) - 1 );
}
v6 = *(_DWORD *)(v3 + 4 * v4 + 8);
v8 += *(_DWORD *)(v6 + 12) / -2;
v9 += *(_DWORD *)(v6 + 16) / -2;
v6 = *(DWORD *)(v3 + 4 * v4 + 8);
v8 += *(DWORD *)(v6 + 12) / -2;
v9 += *(DWORD *)(v6 + 16) / -2;
v7 = v2;
render_ball_set(*(_DWORD *)((char *)v1 + 26), v6, v7, v8, v9);
render_ball_set(*(DWORD *)((char *)v1 + 26), v6, v7, v8, v9);
}
// 1008ED8: using guessed type double __stdcall proj_z_distance(_DWORD);
// 1008ED8: using guessed type double proj_z_distance(DWORD);
//----- (01019309) --------------------------------------------------------
TBall *__thiscall TBall::TBall(TBall *this, struct TPinballTable *a2)
@@ -144,14 +144,14 @@ struct TPinballTable *v17; // [esp+64h] [ebp+8h]
v2 = this;
TPinballComponent::TPinballComponent(this, a2, -1, 0);
*(float *)((char *)v2 + 78) = 0.0;
*(_DWORD *)v2 = &TBall::vftable;
*(DWORD *)v2 = &TBall::vftable;
*(float *)((char *)v2 + 70) = 0.0;
*((_BYTE *)v2 + 5) = 1;
*(_DWORD *)((char *)v2 + 106) = 0;
*(_DWORD *)((char *)v2 + 134) = 0;
*(DWORD *)((char *)v2 + 106) = 0;
*(DWORD *)((char *)v2 + 134) = 0;
*(float *)((char *)v2 + 74) = 0.0;
*(_DWORD *)((char *)v2 + 110) = 1;
*(_DWORD *)((char *)v2 + 150) = 0;
*(DWORD *)((char *)v2 + 110) = 1;
*(DWORD *)((char *)v2 + 150) = 0;
*(float *)((char *)v2 + 66) = 0.0;
*(float *)((char *)v2 + 58) = 0.0;
*(float *)((char *)v2 + 54) = 0.0;
@@ -170,9 +170,9 @@ else
{
v5 = 0;
}
*(_DWORD *)((char *)v2 + 34) = v5;
*(DWORD *)((char *)v2 + 34) = v5;
v6 = loader_query_handle("ball");
*(_DWORD *)((char *)v2 + 154) = *(_DWORD *)loader_query_float_attribute(v6, 0, 500);
*(DWORD *)((char *)v2 + 154) = *(DWORD *)loader_query_float_attribute(v6, 0, 500);
v15 = loader_query_visual_states(v6);
v17 = 0;
if ( v15 > 0 )
@@ -193,11 +193,11 @@ v17 = (struct TPinballTable *)((char *)v17 + 1);
while ( (signed int)v17 < v15 );
}
v10 = render_create_sprite(2, 0, 0, 0, 0, 0);
v11 = *(_DWORD *)((char *)v2 + 154);
*(_DWORD *)((char *)v2 + 26) = v10;
*(_DWORD *)(*(_DWORD *)((char *)v2 + 30) + 282) = v11;
*(_DWORD *)((char *)v2 + 50) = *(_DWORD *)((char *)v2 + 154);
v11 = *(DWORD *)((char *)v2 + 154);
*(DWORD *)((char *)v2 + 26) = v10;
*(DWORD *)(*(DWORD *)((char *)v2 + 30) + 282) = v11;
*(DWORD *)((char *)v2 + 50) = *(DWORD *)((char *)v2 + 154);
return v2;
}
// 1002554: using guessed type void *TBall::vftable;
// 1008ED8: using guessed type double __stdcall proj_z_distance(_DWORD);
// 1008ED8: using guessed type double proj_z_distance(DWORD);
+25 -25
View File
@@ -4,7 +4,7 @@
int __thiscall TBlocker::Message(TBlocker *this, int a2, float a3)
{
TBlocker *v3; // esi
_DWORD *v4; // ST04_4
DWORD *v4; // ST04_4
int v6; // ST08_4
double v7; // st7
float v8; // ST00_4
@@ -14,25 +14,25 @@ switch ( a2 )
{
case 51:
LABEL_7:
if ( *(_DWORD *)((char *)this + 86) )
if ( *(DWORD *)((char *)this + 86) )
{
timer_kill(*(_DWORD *)((char *)this + 86));
*(_DWORD *)((char *)v3 + 86) = 0;
timer_kill(*(DWORD *)((char *)this + 86));
*(DWORD *)((char *)v3 + 86) = 0;
}
*(_DWORD *)((char *)v3 + 6) = 0;
v4 = *(_DWORD **)((char *)v3 + 26);
*(DWORD *)((char *)v3 + 6) = 0;
v4 = *(DWORD **)((char *)v3 + 26);
*((_BYTE *)v3 + 5) = 0;
render_sprite_set_bitmap(v4, 0);
if ( a2 == 51 )
loader_play_sound(*(_DWORD *)((char *)v3 + 94));
loader_play_sound(*(DWORD *)((char *)v3 + 94));
return 0;
case 52:
v6 = *(_DWORD *)((char *)this + 90);
v6 = *(DWORD *)((char *)this + 90);
*((_BYTE *)this + 5) = 1;
loader_play_sound(v6);
render_sprite_set_bitmap(
*(_DWORD **)((char *)v3 + 26),
*(_DWORD *)(*(_DWORD *)(*(_DWORD *)((char *)v3 + 34) + 4) + 8));
*(DWORD **)((char *)v3 + 26),
*(DWORD *)(*(DWORD *)(*(DWORD *)((char *)v3 + 34) + 4) + 8));
break;
case 59:
break;
@@ -43,21 +43,21 @@ goto LABEL_7;
default:
return 0;
}
if ( *(_DWORD *)((char *)v3 + 86) )
timer_kill(*(_DWORD *)((char *)v3 + 86));
if ( *(DWORD *)((char *)v3 + 86) )
timer_kill(*(DWORD *)((char *)v3 + 86));
if ( a3 <= 0.0 )
v7 = 0.0;
else
v7 = a3;
v8 = v7;
*(_DWORD *)((char *)v3 + 86) = timer_set(v8, (int)v3, (int)TBlocker::TimerExpired);
*(DWORD *)((char *)v3 + 86) = timer_set(v8, (int)v3, (int)TBlocker::TimerExpired);
return 0;
}
//----- (010162FF) --------------------------------------------------------
void __stdcall TBlocker::TimerExpired(int a1, struct TPinballComponent *a2)
void TBlocker::TimerExpired(int a1, struct TPinballComponent *a2)
{
*(_DWORD *)((char *)a2 + 86) = 0;
*(DWORD *)((char *)a2 + 86) = 0;
control_handler(60, a2);
}
@@ -65,23 +65,23 @@ control_handler(60, a2);
TBlocker *__thiscall TBlocker::TBlocker(TBlocker *this, struct TPinballTable *a2, int a3)
{
TBlocker *v3; // esi
_DWORD *v4; // ST04_4
DWORD *v4; // ST04_4
char v6; // [esp+8h] [ebp-48h]
int v7; // [esp+40h] [ebp-10h]
int v8; // [esp+44h] [ebp-Ch]
v3 = this;
TCollisionComponent::TCollisionComponent(this, a2, a3, 1);
*(_DWORD *)v3 = &TBlocker::vftable;
*(DWORD *)v3 = &TBlocker::vftable;
loader_query_visual(a3, 0, &v6);
v4 = *(_DWORD **)((char *)v3 + 26);
*(_DWORD *)((char *)v3 + 90) = v7;
*(_DWORD *)((char *)v3 + 94) = v8;
*(_DWORD *)((char *)v3 + 78) = 55;
*(_DWORD *)((char *)v3 + 82) = 5;
*(_DWORD *)((char *)v3 + 66) = 1315859240;
*(_DWORD *)((char *)v3 + 86) = 0;
*(_DWORD *)((char *)v3 + 6) = 0;
v4 = *(DWORD **)((char *)v3 + 26);
*(DWORD *)((char *)v3 + 90) = v7;
*(DWORD *)((char *)v3 + 94) = v8;
*(DWORD *)((char *)v3 + 78) = 55;
*(DWORD *)((char *)v3 + 82) = 5;
*(DWORD *)((char *)v3 + 66) = 1315859240;
*(DWORD *)((char *)v3 + 86) = 0;
*(DWORD *)((char *)v3 + 6) = 0;
*((_BYTE *)v3 + 5) = 0;
render_sprite_set_bitmap(v4, 0);
return v3;
+1 -1
View File
@@ -10,7 +10,7 @@
/* 130 */
struct TBlocker;
void __stdcall TBlocker::TimerExpired(int, struct TPinballComponent*); // idb
void TBlocker::TimerExpired(int, struct TPinballComponent*); // idb
int __thiscall TBlocker::Message(TBlocker* this, int, float); // idb
TBlocker* __thiscall TBlocker::TBlocker(TBlocker* this, struct TPinballTable* a2, int a3);
+54 -54
View File
@@ -1,23 +1,23 @@
#include "TBumper.h"
//----- (01015CB2) --------------------------------------------------------
void __stdcall TBumper::TimerExpired(int a1, void *a2)
void TBumper::TimerExpired(int a1, void *a2)
{
int v2; // edx
int v3; // ecx
int v4; // eax
v2 = *(_DWORD *)((char *)a2 + 30);
v3 = 8 * *(_DWORD *)((char *)a2 + 78) + 8;
v4 = *(_DWORD *)(v3 + *(_DWORD *)(*(_DWORD *)((char *)a2 + 34) + 4));
*(_DWORD *)((char *)a2 + 82) = 0;
v2 = *(DWORD *)((char *)a2 + 30);
v3 = 8 * *(DWORD *)((char *)a2 + 78) + 8;
v4 = *(DWORD *)(v3 + *(DWORD *)(*(DWORD *)((char *)a2 + 34) + 4));
*(DWORD *)((char *)a2 + 82) = 0;
render_sprite_set(
*(_DWORD **)((char *)a2 + 26),
*(DWORD **)((char *)a2 + 26),
v4,
*(_DWORD *)(*(_DWORD *)(*(_DWORD *)((char *)a2 + 38) + 4) + v3),
*(_DWORD *)(v4 + 29) - *(_DWORD *)(v2 + 234),
*(_DWORD *)(v4 + 33) - *(_DWORD *)(v2 + 238));
*(_DWORD *)((char *)a2 + 66) = *(_DWORD *)((char *)a2 + 90);
*(DWORD *)(*(DWORD *)(*(DWORD *)((char *)a2 + 38) + 4) + v3),
*(DWORD *)(v4 + 29) - *(DWORD *)(v2 + 234),
*(DWORD *)(v4 + 33) - *(DWORD *)(v2 + 238));
*(DWORD *)((char *)a2 + 66) = *(DWORD *)((char *)a2 + 90);
}
//----- (01015D0F) --------------------------------------------------------
@@ -30,18 +30,18 @@ int v4; // ecx
int v5; // eax
v1 = this;
v2 = *(_DWORD *)((char *)this + 30);
v3 = 2 * *(_DWORD *)((char *)this + 78) + 1;
*(_DWORD *)((char *)this + 66) = 1315859240;
v2 = *(DWORD *)((char *)this + 30);
v3 = 2 * *(DWORD *)((char *)this + 78) + 1;
*(DWORD *)((char *)this + 66) = 1315859240;
v4 = 4 * v3 + 8;
v5 = *(_DWORD *)(v4 + *(_DWORD *)(*(_DWORD *)((char *)v1 + 34) + 4));
v5 = *(DWORD *)(v4 + *(DWORD *)(*(DWORD *)((char *)v1 + 34) + 4));
render_sprite_set(
*(_DWORD **)((char *)v1 + 26),
*(_DWORD *)(v4 + *(_DWORD *)(*(_DWORD *)((char *)v1 + 34) + 4)),
*(_DWORD *)(*(_DWORD *)(*(_DWORD *)((char *)v1 + 38) + 4) + v4),
*(_DWORD *)(v5 + 29) - *(_DWORD *)(v2 + 234),
*(_DWORD *)(v5 + 33) - *(_DWORD *)(v2 + 238));
*(_DWORD *)((char *)v1 + 82) = timer_set(*(float *)((char *)v1 + 86), (int)v1, (int)TBumper::TimerExpired);
*(DWORD **)((char *)v1 + 26),
*(DWORD *)(v4 + *(DWORD *)(*(DWORD *)((char *)v1 + 34) + 4)),
*(DWORD *)(*(DWORD *)(*(DWORD *)((char *)v1 + 38) + 4) + v4),
*(DWORD *)(v5 + 29) - *(DWORD *)(v2 + 234),
*(DWORD *)(v5 + 33) - *(DWORD *)(v2 + 238));
*(DWORD *)((char *)v1 + 82) = timer_set(*(float *)((char *)v1 + 86), (int)v1, (int)TBumper::TimerExpired);
}
//----- (01015D79) --------------------------------------------------------
@@ -50,7 +50,7 @@ int __thiscall TBumper::Message(TBumper *this, int a2, float a3)
TBumper *v3; // esi
int v4; // eax
int v5; // ecx
_DWORD *v6; // eax
DWORD *v6; // eax
char *v7; // eax
char *v8; // eax
double v9; // st7
@@ -65,8 +65,8 @@ if ( a2 != 11 )
{
if ( a2 == 12 )
{
v15 = *(_DWORD *)((char *)this + 78) + 1;
v11 = *(_DWORD *)(*(_DWORD *)(*(_DWORD *)((char *)this + 34) + 4) + 4) - 1;
v15 = *(DWORD *)((char *)this + 78) + 1;
v11 = *(DWORD *)(*(DWORD *)(*(DWORD *)((char *)this + 34) + 4) + 4) - 1;
if ( 2 * v15 > v11 )
v15 = v11 / 2;
}
@@ -78,18 +78,18 @@ if ( a2 != 1020 )
{
if ( a2 == 1024 )
{
if ( *(_DWORD *)((char *)this + 82) )
if ( *(DWORD *)((char *)this + 82) )
{
timer_kill(*(_DWORD *)((char *)this + 82));
TBumper::TimerExpired(*(_DWORD *)((char *)v3 + 82), (void *)v3);
timer_kill(*(DWORD *)((char *)this + 82));
TBumper::TimerExpired(*(DWORD *)((char *)v3 + 82), (void *)v3);
}
v4 = *(_DWORD *)((char *)v3 + 30);
*(_DWORD *)((char *)v3 + 78) = 0;
*(_DWORD *)((char *)v3 + 6) = 0;
v4 = *(DWORD *)((char *)v3 + 30);
*(DWORD *)((char *)v3 + 78) = 0;
*(DWORD *)((char *)v3 + 6) = 0;
v5 = 0;
if ( *(_DWORD *)(v4 + 214) > 0 )
if ( *(DWORD *)(v4 + 214) > 0 )
{
v6 = (_DWORD *)((char *)v3 + 118);
v6 = (DWORD *)((char *)v3 + 118);
do
{
v6[1] = 0;
@@ -97,25 +97,25 @@ v6[1] = 0;
++v5;
v6 += 2;
}
while ( v5 < *(_DWORD *)(*(_DWORD *)((char *)v3 + 30) + 214) );
while ( v5 < *(DWORD *)(*(DWORD *)((char *)v3 + 30) + 214) );
}
TBumper::TimerExpired(0, (void *)v3);
}
return 0;
}
v7 = (char *)this + 8 * *(_DWORD *)(*(_DWORD *)((char *)this + 30) + 218);
*(_DWORD *)(v7 + 122) = *(_DWORD *)((char *)this + 78);
*(_DWORD *)(v7 + 118) = *(_DWORD *)((char *)this + 6);
v7 = (char *)this + 8 * *(DWORD *)(*(DWORD *)((char *)this + 30) + 218);
*(DWORD *)(v7 + 122) = *(DWORD *)((char *)this + 78);
*(DWORD *)(v7 + 118) = *(DWORD *)((char *)this + 6);
v8 = (char *)this + 8 * (unsigned __int64)(signed __int64)_floor(a3);
*(_DWORD *)((char *)v3 + 78) = *(_DWORD *)(v8 + 122);
*(DWORD *)((char *)v3 + 78) = *(DWORD *)(v8 + 122);
v9 = (double)*(signed int *)((char *)v3 + 78);
*(_DWORD *)((char *)v3 + 6) = *(_DWORD *)(v8 + 118);
*(DWORD *)((char *)v3 + 6) = *(DWORD *)(v8 + 118);
LABEL_16:
v10 = v9;
TBumper::Message(v3, 11, v10);
return 0;
}
v15 = *(_DWORD *)((char *)this + 78) - 1;
v15 = *(DWORD *)((char *)this + 78) - 1;
if ( v15 < 0 )
v15 = 0;
}
@@ -123,18 +123,18 @@ v9 = (double)v15;
goto LABEL_16;
}
v12 = (signed __int64)_floor(a3);
if ( 2 * v12 > *(_DWORD *)(*(_DWORD *)(*(_DWORD *)((char *)v3 + 34) + 4) + 4) - 1 )
v12 = (*(_DWORD *)(*(_DWORD *)(*(_DWORD *)((char *)v3 + 34) + 4) + 4) - 1) / 2;
if ( 2 * v12 > *(DWORD *)(*(DWORD *)(*(DWORD *)((char *)v3 + 34) + 4) + 4) - 1 )
v12 = (*(DWORD *)(*(DWORD *)(*(DWORD *)((char *)v3 + 34) + 4) + 4) - 1) / 2;
if ( v12 < 0 )
v12 = 0;
v13 = *(_DWORD *)((char *)v3 + 78);
v13 = *(DWORD *)((char *)v3 + 78);
if ( v12 != v13 )
{
if ( v12 >= v13 )
loader_play_sound(*(_DWORD *)((char *)v3 + 94));
if ( v12 < *(_DWORD *)((char *)v3 + 78) )
loader_play_sound(*(_DWORD *)((char *)v3 + 98));
*(_DWORD *)((char *)v3 + 78) = v12;
loader_play_sound(*(DWORD *)((char *)v3 + 94));
if ( v12 < *(DWORD *)((char *)v3 + 78) )
loader_play_sound(*(DWORD *)((char *)v3 + 98));
*(DWORD *)((char *)v3 + 78) = v12;
TBumper::Fire(v3);
control_handler(11, v3);
}
@@ -149,7 +149,7 @@ int result; // eax
if ( a2 >= 4 )
result = 0;
else
result = *(_DWORD *)((char *)this + 4 * a2 + 102);
result = *(DWORD *)((char *)this + 4 * a2 + 102);
return result;
}
@@ -157,7 +157,7 @@ return result;
void __thiscall TBumper::put_scoring(TBumper *this, int a2, int a3)
{
if ( a2 < 4 )
*(_DWORD *)((char *)this + 4 * a2 + 102) = a3;
*(DWORD *)((char *)this + 4 * a2 + 102) = a3;
}
//----- (0101811D) --------------------------------------------------------
@@ -183,14 +183,14 @@ int v7; // [esp+40h] [ebp-Ch]
v3 = this;
TCollisionComponent::TCollisionComponent(this, a2, a3, 1);
*(_DWORD *)((char *)v3 + 78) = 0;
*(_DWORD *)((char *)v3 + 82) = 0;
*(_DWORD *)v3 = &TBumper::vftable;
*(_DWORD *)((char *)v3 + 86) = *(_DWORD *)loader_query_float_attribute(a3, 0, 407);
*(DWORD *)((char *)v3 + 78) = 0;
*(DWORD *)((char *)v3 + 82) = 0;
*(DWORD *)v3 = &TBumper::vftable;
*(DWORD *)((char *)v3 + 86) = *(DWORD *)loader_query_float_attribute(a3, 0, 407);
loader_query_visual(a3, 0, &v5);
*(_DWORD *)((char *)v3 + 94) = v6;
*(_DWORD *)((char *)v3 + 98) = v7;
*(_DWORD *)((char *)v3 + 90) = *(_DWORD *)((char *)v3 + 66);
*(DWORD *)((char *)v3 + 94) = v6;
*(DWORD *)((char *)v3 + 98) = v7;
*(DWORD *)((char *)v3 + 90) = *(DWORD *)((char *)v3 + 66);
return v3;
}
// 100256C: using guessed type void *TBumper::vftable;
+1 -1
View File
@@ -10,7 +10,7 @@
/* 104 */
struct TBumper;
void __stdcall TBumper::TimerExpired(int, void*); // idb
void TBumper::TimerExpired(int, void*); // idb
void __thiscall TBumper::Fire(TBumper* this); // idb
int __thiscall TBumper::Message(TBumper* this, int, float); // idb
int __thiscall TBumper::get_scoring(TBumper* this, int); // idb
+5 -5
View File
@@ -7,11 +7,11 @@ TCircle *v6; // ebx
v6 = this;
TEdgeSegment::TEdgeSegment(this, a2, a3, a4);
*(_DWORD *)v6 = &TCircle::vftable;
*(DWORD *)v6 = &TCircle::vftable;
*(float *)((char *)v6 + 33) = a6 * a6;
*(_DWORD *)((char *)v6 + 21) = *(_DWORD *)a5;
*(_DWORD *)((char *)v6 + 25) = *((_DWORD *)a5 + 1);
*(_DWORD *)((char *)v6 + 29) = *((_DWORD *)a5 + 2);
*(DWORD *)((char *)v6 + 21) = *(DWORD *)a5;
*(DWORD *)((char *)v6 + 25) = *((DWORD *)a5 + 1);
*(DWORD *)((char *)v6 + 29) = *((DWORD *)a5 + 2);
return v6;
}
// 1002454: using guessed type void *TCircle::vftable;
@@ -44,7 +44,7 @@ v8 = a3 * *(float *)((char *)a2 + 58) + *(float *)((char *)a2 + 46);
v5 = v7 - *(float *)((char *)this + 21);
v6 = v8 - *(float *)((char *)this + 25);
normalize_2d(&v5);
(*(void (__stdcall **)(int, float *, float *, _DWORD, TCircle *))(**((_DWORD **)v3 + 1) + 20))(
(*(void (**)(int, float *, float *, DWORD, TCircle *))(**((DWORD **)v3 + 1) + 20))(
v4,
&v7,
&v5,
@@ -9,14 +9,14 @@ int v3; // esi
int v4; // ebx
v1 = this;
v2 = *(_DWORD *)(*(_DWORD *)((char *)this + 46) + 4) - 1;
v2 = *(DWORD *)(*(DWORD *)((char *)this + 46) + 4) - 1;
if ( v2 >= 0 )
{
v3 = 4 * v2 + 8;
v4 = *(_DWORD *)(*(_DWORD *)((char *)this + 46) + 4);
v4 = *(DWORD *)(*(DWORD *)((char *)this + 46) + 4);
do
{
(*(void (**)(void))(**(_DWORD **)(v3 + *(_DWORD *)((char *)v1 + 46)) + 4))();
(*(void (**)(void))(**(DWORD **)(v3 + *(DWORD *)((char *)v1 + 46)) + 4))();
v3 -= 4;
--v4;
}
@@ -25,7 +25,7 @@ while ( v4 );
}
//----- (01017883) --------------------------------------------------------
double __stdcall basic_collision(struct TBall *a1, struct vector_type *a2, struct vector_type *a3, float a4, float a5, float a6, float a7)
double basic_collision(struct TBall *a1, struct vector_type *a2, struct vector_type *a3, float a4, float a5, float a6, float a7)
{
int v7; // ST30_4
float *v8; // esi
@@ -45,10 +45,10 @@ float v23; // [esp+3Ch] [ebp+Ch]
float v24; // [esp+3Ch] [ebp+Ch]
*(float *)((char *)a1 + 42) = *(float *)a2;
*(_DWORD *)((char *)a1 + 46) = *((_DWORD *)a2 + 1);
*(DWORD *)((char *)a1 + 46) = *((DWORD *)a2 + 1);
v21 = *(float *)a3;
v22 = *((float *)a3 + 1);
v7 = *((_DWORD *)a3 + 2);
v7 = *((DWORD *)a3 + 2);
v8 = (float *)((char *)a1 + 54);
v9 = -(v22 * *(float *)((char *)a1 + 58) + *(float *)a3 * *(float *)((char *)a1 + 54));
v23 = v9;
@@ -81,7 +81,7 @@ return v24;
}
//----- (010179A9) --------------------------------------------------------
struct TEdgeSegment *__stdcall install_wall(float *a1, struct TCollisionComponent *a2, char *a3, unsigned int a4, float a5, void *a6)
struct TEdgeSegment *install_wall(float *a1, struct TCollisionComponent *a2, char *a3, unsigned int a4, float a5, void *a6)
{
signed __int64 v6; // rax
float *v7; // esi
@@ -130,7 +130,7 @@ v7 = a1 + 1;
v8 = a1 + 1;
v45 = v6;
v44 = a1 + 1;
if ( !(_DWORD)v6 )
if ( !(DWORD)v6 )
{
v41 = *(int *)v7;
v42 = a1[2];
@@ -148,19 +148,19 @@ v12 = 0;
v46 = v12;
if ( !v12 )
goto LABEL_14;
*(_DWORD *)((char *)v12 + 13) = a6;
*(DWORD *)((char *)v12 + 13) = a6;
LABEL_13:
(*(void (__thiscall **)(TCircle *))(*(_DWORD *)v12 + 8))(v12);
(*(void (__thiscall **)(TCircle *))(*(DWORD *)v12 + 8))(v12);
LABEL_14:
objlist_class::Add((struct TCollisionComponent *)((char *)v10 + 42), (void *)v12);
return v46;
}
if ( (_DWORD)v6 == 1 )
if ( (DWORD)v6 == 1 )
{
v37 = *(_DWORD *)v7;
v38 = *((_DWORD *)a1 + 2);
v39 = *((_DWORD *)a1 + 3);
v40 = *((_DWORD *)a1 + 4);
v37 = *(DWORD *)v7;
v38 = *((DWORD *)a1 + 2);
v39 = *((DWORD *)a1 + 3);
v40 = *((DWORD *)a1 + 4);
v13 = (TLine *)operator new(0x55u);
v10 = a2;
if ( v13 )
@@ -170,19 +170,19 @@ v12 = 0;
v46 = v12;
if ( v12 )
{
*(_DWORD *)((char *)v12 + 13) = a6;
*(DWORD *)((char *)v12 + 13) = a6;
TLine::Offset(v12, a5);
goto LABEL_13;
}
}
else
{
*((float *)&v6 + 1) = v7[2 * (_DWORD)v6 - 2];
*((float *)&v6 + 1) = v7[2 * (DWORD)v6 - 2];
v47 = 0;
v33 = 0.0;
v34 = *((float *)&v6 + 1);
v30 = 0.0;
v35 = v7[2 * (_DWORD)v6 - 1];
v35 = v7[2 * (DWORD)v6 - 1];
if ( (signed int)v6 > 0 )
{
while ( 1 )
@@ -225,17 +225,17 @@ v20 = 0;
}
if ( v20 )
{
*(_DWORD *)((char *)v20 + 13) = a6;
(*(void (__thiscall **)(TCircle *))(*(_DWORD *)v20 + 8))(v20);
*(DWORD *)((char *)v20 + 13) = a6;
(*(void (__thiscall **)(TCircle *))(*(DWORD *)v20 + 8))(v20);
objlist_class::Add((struct TCollisionComponent *)((char *)a2 + 42), (void *)v20);
}
}
}
v37 = *(_DWORD *)v7;
v38 = *((_DWORD *)v7 + 1);
v37 = *(DWORD *)v7;
v38 = *((DWORD *)v7 + 1);
v21 = (int)(v7 + 2);
v39 = *((_DWORD *)v7 + 2);
v40 = *((_DWORD *)v7 + 3);
v39 = *((DWORD *)v7 + 2);
v40 = *((DWORD *)v7 + 3);
v22 = (TLine *)operator new(0x55u);
if ( v22 )
v23 = TLine::TLine(v22, a2, a3, a4, (struct vector_type *)&v37, (struct vector_type *)&v39);
@@ -244,9 +244,9 @@ v23 = 0;
v46 = v23;
if ( v23 )
{
*(_DWORD *)((char *)v23 + 13) = a6;
*(DWORD *)((char *)v23 + 13) = a6;
TLine::Offset(v23, a5);
(*(void (__thiscall **)(TLine *))(*(_DWORD *)v23 + 8))(v23);
(*(void (__thiscall **)(TLine *))(*(DWORD *)v23 + 8))(v23);
objlist_class::Add((struct TCollisionComponent *)((char *)a2 + 42), (void *)v23);
}
v47 = (float *)((char *)v47 + 1);
@@ -272,7 +272,7 @@ double v7; // st7
int v8; // esi
v6 = this;
if ( *(_DWORD *)(*(_DWORD *)((char *)this + 30) + 370) )
if ( *(DWORD *)(*(DWORD *)((char *)this + 30) + 370) )
{
basic_collision(a2, a3, a4, *(float *)((char *)this + 54), *(float *)((char *)this + 58), 1000000000.0, 0.0);
return;
@@ -289,11 +289,11 @@ if ( v7 <= *(float *)((char *)v6 + 66) )
{
if ( v7 <= 0.2 )
return;
v8 = *(_DWORD *)((char *)v6 + 70);
v8 = *(DWORD *)((char *)v6 + 70);
}
else
{
v8 = *(_DWORD *)((char *)v6 + 74);
v8 = *(DWORD *)((char *)v6 + 74);
}
if ( v8 )
loader_play_sound(v8);
@@ -308,7 +308,7 @@ int v6; // esi
int v8; // esi
v4 = this;
if ( *(_DWORD *)(*(_DWORD *)((char *)this + 30) + 370) )
if ( *(DWORD *)(*(DWORD *)((char *)this + 30) + 370) )
{
basic_collision(a2, a3, a4, *(float *)((char *)this + 54), *(float *)((char *)this + 58), 1000000000.0, 0.0);
return 0;
@@ -325,13 +325,13 @@ if ( v5 <= *(float *)((char *)v4 + 66) )
{
if ( v5 > 0.2 )
{
v8 = *(_DWORD *)((char *)v4 + 70);
v8 = *(DWORD *)((char *)v4 + 70);
if ( v8 )
loader_play_sound(v8);
}
return 0;
}
v6 = *(_DWORD *)((char *)v4 + 74);
v6 = *(DWORD *)((char *)v4 + 74);
if ( v6 )
loader_play_sound(v6);
return 1;
@@ -355,9 +355,9 @@ unsigned int v16; // [esp+48h] [ebp-14h]
v4 = this;
TPinballComponent::TPinballComponent(this, a2, a3, 1);
*(_DWORD *)v4 = &TCollisionComponent::vftable;
*(DWORD *)v4 = &TCollisionComponent::vftable;
objlist_class::objlist_class((TCollisionComponent *)((char *)v4 + 42), 4, 4);
v5 = *(_DWORD *)((char *)v4 + 10) == 0;
v5 = *(DWORD *)((char *)v4 + 10) == 0;
*((_BYTE *)v4 + 5) = 1;
if ( !v5 )
*((_BYTE *)v4 + 4) = 1;
@@ -376,13 +376,13 @@ v8 = (float *)loader_query_float_attribute(a3, 0, 600);
install_wall(v8, v4, (char *)v4 + 5, v7, v6, 0);
}
}
*(_DWORD *)((char *)v4 + 66) = v13;
*(_DWORD *)((char *)v4 + 54) = v11;
*(_DWORD *)((char *)v4 + 58) = v10;
*(_DWORD *)((char *)v4 + 62) = v14;
*(_DWORD *)((char *)v4 + 74) = v15;
*(_DWORD *)((char *)v4 + 70) = v12;
*(_DWORD *)((char *)v4 + 22) = a3;
*(DWORD *)((char *)v4 + 66) = v13;
*(DWORD *)((char *)v4 + 54) = v11;
*(DWORD *)((char *)v4 + 58) = v10;
*(DWORD *)((char *)v4 + 62) = v14;
*(DWORD *)((char *)v4 + 74) = v15;
*(DWORD *)((char *)v4 + 70) = v12;
*(DWORD *)((char *)v4 + 22) = a3;
return v4;
}
// 10024EC: using guessed type void *TCollisionComponent::vftable;
@@ -396,20 +396,20 @@ int v3; // eax
void *v4; // edi
v1 = this;
v2 = *(_DWORD *)((char *)this + 46);
*(_DWORD *)this = &TCollisionComponent::vftable;
if ( *(_DWORD *)(v2 + 4) )
v2 = *(DWORD *)((char *)this + 46);
*(DWORD *)this = &TCollisionComponent::vftable;
if ( *(DWORD *)(v2 + 4) )
{
do
{
v3 = *(_DWORD *)((char *)v1 + 46);
v3 = *(DWORD *)((char *)v1 + 46);
v4 = *(void **)(v3 + 8);
objlist_delete_object(*(_DWORD *)((char *)v1 + 46), *(_DWORD *)(v3 + 8));
objlist_delete_object(*(DWORD *)((char *)v1 + 46), *(DWORD *)(v3 + 8));
operator delete(v4);
}
while ( *(_DWORD *)(*(_DWORD *)((char *)v1 + 46) + 4) );
while ( *(DWORD *)(*(DWORD *)((char *)v1 + 46) + 4) );
}
objlist_destroy(*(_DWORD *)((char *)v1 + 46));
objlist_destroy(*(DWORD *)((char *)v1 + 46));
return TPinballComponent::~TPinballComponent(v1);
}
// 10024EC: using guessed type void *TCollisionComponent::vftable;
+17 -17
View File
@@ -1,9 +1,9 @@
#include "TComponentGroup.h"
//----- (010159DC) --------------------------------------------------------
void __stdcall TComponentGroup::NotifyTimerExpired(int a1, struct TPinballComponent *a2)
void TComponentGroup::NotifyTimerExpired(int a1, struct TPinballComponent *a2)
{
*(_DWORD *)((char *)a2 + 50) = 0;
*(DWORD *)((char *)a2 + 50) = 0;
control_handler(61, a2);
}
@@ -18,24 +18,24 @@ int v6; // ebx
v3 = this;
if ( a2 == 48 )
{
if ( *(_DWORD *)((char *)this + 50) )
if ( *(DWORD *)((char *)this + 50) )
{
timer_kill(*(_DWORD *)((char *)this + 50));
*(_DWORD *)((char *)v3 + 50) = 0;
timer_kill(*(DWORD *)((char *)this + 50));
*(DWORD *)((char *)v3 + 50) = 0;
}
if ( a3 > 0.0 )
*(_DWORD *)((char *)v3 + 50) = timer_set(a3, (int)v3, (int)TComponentGroup::NotifyTimerExpired);
*(DWORD *)((char *)v3 + 50) = timer_set(a3, (int)v3, (int)TComponentGroup::NotifyTimerExpired);
}
else if ( a2 <= 1007 || a2 > 1011 && a2 != 1020 && a2 != 1022 )
{
v4 = *(_DWORD *)(*(_DWORD *)((char *)this + 46) + 4) - 1;
v4 = *(DWORD *)(*(DWORD *)((char *)this + 46) + 4) - 1;
if ( v4 >= 0 )
{
v5 = 4 * v4 + 8;
v6 = *(_DWORD *)(*(_DWORD *)((char *)this + 46) + 4);
v6 = *(DWORD *)(*(DWORD *)((char *)this + 46) + 4);
do
{
(***(void (__stdcall ****)(int, _DWORD))(v5 + *(_DWORD *)((char *)v3 + 46)))(a2, LODWORD(a3));
(***(void (****)(int, DWORD))(v5 + *(DWORD *)((char *)v3 + 46)))(a2, LODWORD(a3));
v5 -= 4;
--v6;
}
@@ -62,21 +62,21 @@ TComponentGroup* __thiscall TComponentGroup::TComponentGroup(TComponentGroup* th
{
TComponentGroup* v3; // esi
int v4; // eax
signed __int16* i; // edi
signed int* i; // edi
struct TPinballComponent* v6; // eax
int v8; // [esp+Ch] [ebp-4h]
int v9; // [esp+1Ch] [ebp+Ch]
v3 = this;
TPinballComponent::TPinballComponent(this, a2, a3, 0);
*(_DWORD*)v3 = &TComponentGroup::vftable;
*(DWORD*)v3 = &TComponentGroup::vftable;
objlist_class::objlist_class((TComponentGroup*)((char*)v3 + 42), 4, 4);
*(_DWORD*)((char*)v3 + 50) = 0;
*(DWORD*)((char*)v3 + 50) = 0;
if (a3 > 0)
{
v4 = loader_query_iattribute(a3, 1027, &v8);
v9 = 0;
for (i = (signed __int16*)v4; v9 < v8; ++i)
for (i = (signed int*)v4; v9 < v8; ++i)
{
v6 = TPinballTable::find_component(a2, *i);
if (v6)
@@ -95,14 +95,14 @@ TZmapList* __thiscall TComponentGroup::~TComponentGroup(TComponentGroup* this)
int v2; // eax
v1 = this;
v2 = *(_DWORD*)((char*)this + 50);
*(_DWORD*)this = &TComponentGroup::vftable;
v2 = *(DWORD*)((char*)this + 50);
*(DWORD*)this = &TComponentGroup::vftable;
if (v2)
{
timer_kill(v2);
*(_DWORD*)((char*)v1 + 50) = 0;
*(DWORD*)((char*)v1 + 50) = 0;
}
objlist_destroy(*(_DWORD*)((char*)v1 + 46));
objlist_destroy(*(DWORD*)((char*)v1 + 46));
return TPinballComponent::~TPinballComponent(v1);
}
// 10024D8: using guessed type void *TComponentGroup::vftable;
+74 -74
View File
@@ -1,50 +1,50 @@
#include "TDemo.h"
//----- (01016D62) --------------------------------------------------------
void __stdcall TDemo::PlungerRelease(int a1, void *a2)
void TDemo::PlungerRelease(int a1, void *a2)
{
void (__stdcall ***v2)(signed int, _DWORD); // ecx
void (***v2)(signed int, DWORD); // ecx
v2 = *(void (__stdcall ****)(signed int, _DWORD))((char *)a2 + 30);
*(_DWORD *)((char *)a2 + 110) = 0;
v2 = *(void (****)(signed int, DWORD))((char *)a2 + 30);
*(DWORD *)((char *)a2 + 110) = 0;
(**v2)(1005, LODWORD(time_next));
}
// 1025634: using guessed type float time_next;
//----- (01016D8D) --------------------------------------------------------
void __stdcall TDemo::UnFlipRight(int a1, void *a2)
void TDemo::UnFlipRight(int a1, void *a2)
{
if ( *(_DWORD *)((char *)a2 + 98) )
(***(void (__stdcall ****)(signed int, _DWORD))((char *)a2 + 30))(1003, LODWORD(time_next));
*(_DWORD *)((char *)a2 + 98) = 0;
if ( *(DWORD *)((char *)a2 + 98) )
(***(void (****)(signed int, DWORD))((char *)a2 + 30))(1003, LODWORD(time_next));
*(DWORD *)((char *)a2 + 98) = 0;
}
// 1025634: using guessed type float time_next;
//----- (01016DC0) --------------------------------------------------------
void __stdcall TDemo::UnFlipLeft(int a1, void *a2)
void TDemo::UnFlipLeft(int a1, void *a2)
{
if ( *(_DWORD *)((char *)a2 + 94) )
(***(void (__stdcall ****)(signed int, _DWORD))((char *)a2 + 30))(1001, LODWORD(time_next));
*(_DWORD *)((char *)a2 + 94) = 0;
if ( *(DWORD *)((char *)a2 + 94) )
(***(void (****)(signed int, DWORD))((char *)a2 + 30))(1001, LODWORD(time_next));
*(DWORD *)((char *)a2 + 94) = 0;
}
// 1025634: using guessed type float time_next;
//----- (01016DF3) --------------------------------------------------------
void __stdcall TDemo::FlipRight(int a1, void *a2)
void TDemo::FlipRight(int a1, void *a2)
{
double v2; // st7
float v3; // ST08_4
if ( !*(_DWORD *)((char *)a2 + 98) )
if ( !*(DWORD *)((char *)a2 + 98) )
{
if ( *(_DWORD *)((char *)a2 + 106) )
if ( *(DWORD *)((char *)a2 + 106) )
{
timer_kill(*(_DWORD *)((char *)a2 + 106));
*(_DWORD *)((char *)a2 + 106) = 0;
timer_kill(*(DWORD *)((char *)a2 + 106));
*(DWORD *)((char *)a2 + 106) = 0;
}
(***(void (__stdcall ****)(signed int, _DWORD))((char *)a2 + 30))(1002, LODWORD(time_next));
(***(void (****)(signed int, DWORD))((char *)a2 + 30))(1002, LODWORD(time_next));
v2 = *(float *)((char *)a2 + 86) + *(float *)((char *)a2 + 90);
*(_DWORD *)((char *)a2 + 98) = 1;
*(DWORD *)((char *)a2 + 98) = 1;
v3 = v2 - (double)_rand() * 0.00003051850947599719 * (*(float *)((char *)a2 + 90) + *(float *)((char *)a2 + 90));
timer_set(v3, (int)a2, (int)TDemo::UnFlipRight);
}
@@ -52,21 +52,21 @@ timer_set(v3, (int)a2, (int)TDemo::UnFlipRight);
// 1025634: using guessed type float time_next;
//----- (01016E70) --------------------------------------------------------
void __stdcall TDemo::FlipLeft(int a1, void *a2)
void TDemo::FlipLeft(int a1, void *a2)
{
double v2; // st7
float v3; // ST08_4
if ( !*(_DWORD *)((char *)a2 + 94) )
if ( !*(DWORD *)((char *)a2 + 94) )
{
if ( *(_DWORD *)((char *)a2 + 102) )
if ( *(DWORD *)((char *)a2 + 102) )
{
timer_kill(*(_DWORD *)((char *)a2 + 102));
*(_DWORD *)((char *)a2 + 102) = 0;
timer_kill(*(DWORD *)((char *)a2 + 102));
*(DWORD *)((char *)a2 + 102) = 0;
}
(***(void (__stdcall ****)(signed int, _DWORD))((char *)a2 + 30))(1000, LODWORD(time_next));
(***(void (****)(signed int, DWORD))((char *)a2 + 30))(1000, LODWORD(time_next));
v2 = *(float *)((char *)a2 + 86) + *(float *)((char *)a2 + 90);
*(_DWORD *)((char *)a2 + 94) = 1;
*(DWORD *)((char *)a2 + 94) = 1;
v3 = v2 - (double)_rand() * 0.00003051850947599719 * (*(float *)((char *)a2 + 90) + *(float *)((char *)a2 + 90));
timer_set(v3, (int)a2, (int)TDemo::UnFlipLeft);
}
@@ -74,16 +74,16 @@ timer_set(v3, (int)a2, (int)TDemo::UnFlipLeft);
// 1025634: using guessed type float time_next;
//----- (01016EED) --------------------------------------------------------
void __stdcall TDemo::NewGameRestartTimer(int a1, void *a2)
void TDemo::NewGameRestartTimer(int a1, void *a2)
{
int v2; // ecx
float v3; // ST04_4
pb_replay_level(1);
v2 = *(_DWORD *)((char *)a2 + 30);
v2 = *(DWORD *)((char *)a2 + 30);
v3 = (double)*(signed int *)(v2 + 214);
(**(void (__stdcall ***)(signed int, _DWORD))v2)(1014, LODWORD(v3));
*(_DWORD *)((char *)a2 + 114) = 0;
(**(void (***)(signed int, DWORD))v2)(1014, LODWORD(v3));
*(DWORD *)((char *)a2 + 114) = 0;
}
//----- (01016F21) --------------------------------------------------------
@@ -103,15 +103,15 @@ float v16; // ST08_4
double v17; // ST20_8
float v18; // ST08_4
v6 = *(_DWORD *)((char *)a6 + 13);
v6 = *(DWORD *)((char *)a6 + 13);
v7 = this;
TBall::not_again(a2, a6);
v8 = v6 - 1400;
v9 = *(float *)((char *)a2 + 70) - a5;
*(_DWORD *)((char *)a2 + 42) = *(_DWORD *)a3;
v10 = *((_DWORD *)a3 + 1);
*(DWORD *)((char *)a2 + 42) = *(DWORD *)a3;
v10 = *((DWORD *)a3 + 1);
*(float *)((char *)a2 + 70) = v9;
*(_DWORD *)((char *)a2 + 46) = v10;
*(DWORD *)((char *)a2 + 46) = v10;
if ( v8 )
{
v11 = v8 - 1;
@@ -123,11 +123,11 @@ if ( v12 )
v13 = v12 - 1;
if ( v13 )
{
if ( v13 == 1 && !*(_DWORD *)((char *)v7 + 110) )
if ( v13 == 1 && !*(DWORD *)((char *)v7 + 110) )
{
(***(void (__stdcall ****)(signed int, _DWORD))((char *)v7 + 30))(1004, *(float *)((char *)a2 + 78));
(***(void (****)(signed int, DWORD))((char *)v7 + 30))(1004, *(float *)((char *)a2 + 78));
v14 = (double)_rand() * 0.00003051850947599719 + 2.0;
*(_DWORD *)((char *)v7 + 110) = timer_set(v14, (int)v7, (int)TDemo::PlungerRelease);
*(DWORD *)((char *)v7 + 110) = timer_set(v14, (int)v7, (int)TDemo::PlungerRelease);
}
}
else
@@ -135,12 +135,12 @@ else
TDemo::FlipRight(0, (void *)v7);
}
}
else if ( !*(_DWORD *)((char *)v7 + 106) && !*(_DWORD *)((char *)v7 + 98) )
else if ( !*(DWORD *)((char *)v7 + 106) && !*(DWORD *)((char *)v7 + 98) )
{
v15 = *(float *)((char *)v7 + 78) + *(float *)((char *)v7 + 82);
v16 = v15
- (double)_rand() * 0.00003051850947599719 * (*(float *)((char *)v7 + 82) + *(float *)((char *)v7 + 82));
*(_DWORD *)((char *)v7 + 106) = timer_set(v16, (int)v7, (int)TDemo::FlipRight);
*(DWORD *)((char *)v7 + 106) = timer_set(v16, (int)v7, (int)TDemo::FlipRight);
}
}
else
@@ -148,11 +148,11 @@ else
TDemo::FlipLeft(0, (void *)v7);
}
}
else if ( !*(_DWORD *)((char *)v7 + 102) && !*(_DWORD *)((char *)v7 + 94) )
else if ( !*(DWORD *)((char *)v7 + 102) && !*(DWORD *)((char *)v7 + 94) )
{
v17 = *(float *)((char *)v7 + 78) + *(float *)((char *)v7 + 82);
v18 = v17 - (double)_rand() * 0.00003051850947599719 * (*(float *)((char *)v7 + 82) + *(float *)((char *)v7 + 82));
*(_DWORD *)((char *)v7 + 102) = timer_set(v18, (int)v7, (int)TDemo::FlipLeft);
*(DWORD *)((char *)v7 + 102) = timer_set(v18, (int)v7, (int)TDemo::FlipLeft);
}
}
@@ -167,32 +167,32 @@ v3 = this;
switch ( a2 )
{
case 1014:
if ( *(_DWORD *)((char *)this + 114) )
timer_kill(*(_DWORD *)((char *)this + 114));
*(_DWORD *)((char *)v3 + 114) = 0;
if ( *(DWORD *)((char *)this + 114) )
timer_kill(*(DWORD *)((char *)this + 114));
*(DWORD *)((char *)v3 + 114) = 0;
break;
case 1022:
if ( *(_DWORD *)((char *)this + 114) )
timer_kill(*(_DWORD *)((char *)this + 114));
if ( *(DWORD *)((char *)this + 114) )
timer_kill(*(DWORD *)((char *)this + 114));
v5 = *((_BYTE *)v3 + 5) == 0;
*(_DWORD *)((char *)v3 + 114) = 0;
*(DWORD *)((char *)v3 + 114) = 0;
if ( !v5 )
*(_DWORD *)((char *)v3 + 114) = timer_set(5.0, (int)v3, (int)TDemo::NewGameRestartTimer);
*(DWORD *)((char *)v3 + 114) = timer_set(5.0, (int)v3, (int)TDemo::NewGameRestartTimer);
break;
case 1024:
if ( *(_DWORD *)((char *)this + 102) )
timer_kill(*(_DWORD *)((char *)this + 102));
v4 = *(_DWORD *)((char *)v3 + 106);
*(_DWORD *)((char *)v3 + 102) = 0;
if ( *(DWORD *)((char *)this + 102) )
timer_kill(*(DWORD *)((char *)this + 102));
v4 = *(DWORD *)((char *)v3 + 106);
*(DWORD *)((char *)v3 + 102) = 0;
if ( v4 )
timer_kill(v4);
v5 = *(_DWORD *)((char *)v3 + 94) == 0;
*(_DWORD *)((char *)v3 + 106) = 0;
v5 = *(DWORD *)((char *)v3 + 94) == 0;
*(DWORD *)((char *)v3 + 106) = 0;
if ( !v5 )
TDemo::UnFlipLeft(0, (void *)v3);
if ( *(_DWORD *)((char *)v3 + 98) )
if ( *(DWORD *)((char *)v3 + 98) )
TDemo::UnFlipRight(0, (void *)v3);
if ( *(_DWORD *)((char *)v3 + 110) )
if ( *(DWORD *)((char *)v3 + 110) )
TDemo::PlungerRelease(0, (void *)v3);
break;
}
@@ -203,7 +203,7 @@ return 0;
TDemo *__thiscall TDemo::TDemo(TDemo *this, struct TPinballTable *a2, int a3)
{
TDemo *v3; // esi
_DWORD *v4; // eax
DWORD *v4; // eax
float *v5; // eax
float *v6; // eax
float *v7; // eax
@@ -214,24 +214,24 @@ unsigned int v12; // [esp+48h] [ebp-14h]
v3 = this;
TCollisionComponent::TCollisionComponent(this, a2, a3, 0);
*(_DWORD *)v3 = &TDemo::vftable;
*(_DWORD *)((char *)v3 + 114) = 0;
*(_DWORD *)((char *)v3 + 110) = 0;
*(_DWORD *)((char *)v3 + 102) = 0;
*(_DWORD *)((char *)v3 + 106) = 0;
*(_DWORD *)((char *)v3 + 6) = 0;
*(DWORD *)v3 = &TDemo::vftable;
*(DWORD *)((char *)v3 + 114) = 0;
*(DWORD *)((char *)v3 + 110) = 0;
*(DWORD *)((char *)v3 + 102) = 0;
*(DWORD *)((char *)v3 + 106) = 0;
*(DWORD *)((char *)v3 + 6) = 0;
*((_BYTE *)v3 + 4) = 0;
*((_BYTE *)v3 + 5) = 0;
*(_DWORD *)((char *)v3 + 98) = 0;
*(_DWORD *)((char *)v3 + 94) = 0;
*(_DWORD *)((char *)a2 + 230) = v3;
v4 = (_DWORD *)loader_query_float_attribute(a3, 0, 407);
*(DWORD *)((char *)v3 + 98) = 0;
*(DWORD *)((char *)v3 + 94) = 0;
*(DWORD *)((char *)a2 + 230) = v3;
v4 = (DWORD *)loader_query_float_attribute(a3, 0, 407);
if ( v4 )
{
*(_DWORD *)((char *)v3 + 78) = *v4;
*(_DWORD *)((char *)v3 + 82) = v4[1];
*(_DWORD *)((char *)v3 + 86) = v4[2];
*(_DWORD *)((char *)v3 + 90) = v4[3];
*(DWORD *)((char *)v3 + 78) = *v4;
*(DWORD *)((char *)v3 + 82) = v4[1];
*(DWORD *)((char *)v3 + 86) = v4[2];
*(DWORD *)((char *)v3 + 90) = v4[3];
}
else
{
@@ -242,15 +242,15 @@ else
}
loader_query_visual(a3, 0, &v11);
v5 = (float *)loader_query_float_attribute(a3, 0, 1400);
*(_DWORD *)((char *)v3 + 118) = install_wall(v5, v3, (char *)v3 + 5, v12, 0.0, (void *)0x578);
*(DWORD *)((char *)v3 + 118) = install_wall(v5, v3, (char *)v3 + 5, v12, 0.0, (void *)0x578);
v6 = (float *)loader_query_float_attribute(a3, 0, 1401);
install_wall(v6, v3, (char *)v3 + 5, v12, 0.0, (void *)0x579);
v7 = (float *)loader_query_float_attribute(a3, 0, 1402);
*(_DWORD *)((char *)v3 + 122) = install_wall(v7, v3, (char *)v3 + 5, v12, 0.0, (void *)0x57A);
*(DWORD *)((char *)v3 + 122) = install_wall(v7, v3, (char *)v3 + 5, v12, 0.0, (void *)0x57A);
v8 = (float *)loader_query_float_attribute(a3, 0, 1403);
install_wall(v8, v3, (char *)v3 + 5, v12, 0.0, (void *)0x57B);
v9 = (float *)loader_query_float_attribute(a3, 0, 1404);
*(_DWORD *)((char *)v3 + 126) = install_wall(v9, v3, (char *)v3 + 5, v12, *(float *)((char *)a2 + 282), (void *)0x57C);
*(DWORD *)((char *)v3 + 126) = install_wall(v9, v3, (char *)v3 + 5, v12, *(float *)((char *)a2 + 282), (void *)0x57C);
return v3;
}
// 10026E8: using guessed type void *TDemo::vftable;
+6 -6
View File
@@ -10,12 +10,12 @@
/* 128 */
struct TDemo;
void __stdcall TDemo::PlungerRelease(int, void*); // idb
void __stdcall TDemo::UnFlipRight(int, void*); // idb
void __stdcall TDemo::UnFlipLeft(int, void*); // idb
void __stdcall TDemo::FlipRight(int, void*); // idb
void __stdcall TDemo::FlipLeft(int, void*); // idb
void __stdcall TDemo::NewGameRestartTimer(int, void*); // idb
void TDemo::PlungerRelease(int, void*); // idb
void TDemo::UnFlipRight(int, void*); // idb
void TDemo::UnFlipLeft(int, void*); // idb
void TDemo::FlipRight(int, void*); // idb
void TDemo::FlipLeft(int, void*); // idb
void TDemo::NewGameRestartTimer(int, void*); // idb
void __thiscall TDemo::Collision(TDemo* this, struct TBall*, struct vector_type*, struct vector_type*, float, struct TEdgeSegment*); // idb
int __thiscall TDemo::Message(TDemo* this, int, float); // idb
TDemo* __thiscall TDemo::TDemo(TDemo* this, struct TPinballTable* a2, int a3);
+11 -11
View File
@@ -8,18 +8,18 @@ TDrain *v3; // esi
v3 = this;
if ( a2 == 1024 )
{
if ( *(_DWORD *)((char *)this + 86) )
if ( *(DWORD *)((char *)this + 86) )
{
timer_kill(*(_DWORD *)((char *)this + 86));
*(_DWORD *)((char *)v3 + 86) = 0;
timer_kill(*(DWORD *)((char *)this + 86));
*(DWORD *)((char *)v3 + 86) = 0;
}
*(_DWORD *)(*(_DWORD *)((char *)v3 + 30) + 78) = 0;
*(DWORD *)(*(DWORD *)((char *)v3 + 30) + 78) = 0;
}
return 0;
}
//----- (010172D8) --------------------------------------------------------
void __stdcall TDrain::TimerCallback(int a1, struct TPinballComponent *a2)
void TDrain::TimerCallback(int a1, struct TPinballComponent *a2)
{
control_handler(60, a2);
}
@@ -30,9 +30,9 @@ void __thiscall TDrain::Collision(TDrain *this, struct TBall *a2, struct vector_
TDrain *v6; // esi
v6 = this;
(**(void (__stdcall ***)(signed int, _DWORD))a2)(1024, 0.0);
*(_DWORD *)(*(_DWORD *)((char *)v6 + 30) + 78) = 1;
*(_DWORD *)((char *)v6 + 86) = timer_set(*(float *)((char *)v6 + 78), (int)v6, (int)TDrain::TimerCallback);
(**(void (***)(signed int, DWORD))a2)(1024, 0.0);
*(DWORD *)(*(DWORD *)((char *)v6 + 30) + 78) = 1;
*(DWORD *)((char *)v6 + 86) = timer_set(*(float *)((char *)v6 + 78), (int)v6, (int)TDrain::TimerCallback);
control_handler(63, v6);
}
@@ -43,9 +43,9 @@ TDrain *v3; // esi
v3 = this;
TCollisionComponent::TCollisionComponent(this, a2, a3, 1);
*(_DWORD *)((char *)v3 + 86) = 0;
*(_DWORD *)v3 = &TDrain::vftable;
*(_DWORD *)((char *)v3 + 78) = *(_DWORD *)loader_query_float_attribute(a3, 0, 407);
*(DWORD *)((char *)v3 + 86) = 0;
*(DWORD *)v3 = &TDrain::vftable;
*(DWORD *)((char *)v3 + 78) = *(DWORD *)loader_query_float_attribute(a3, 0, 407);
return v3;
}
// 1002720: using guessed type void *TDrain::vftable;
+1 -1
View File
@@ -11,7 +11,7 @@
struct TDrain
int __thiscall TDrain::Message(TDrain* this, int, float); // idb
void __stdcall TDrain::TimerCallback(int, struct TPinballComponent*); // idb
void TDrain::TimerCallback(int, struct TPinballComponent*); // idb
void __thiscall TDrain::Collision(TDrain* this, struct TBall*, struct vector_type*, struct vector_type*, float, struct TEdgeSegment*); // idb
TDrain* __thiscall TDrain::TDrain(TDrain* this, struct TPinballTable* a2, int a3);
+4 -4
View File
@@ -21,8 +21,8 @@ void __thiscall TEdgeBox::~TEdgeBox(TEdgeBox *this)
TEdgeBox *v1; // esi
v1 = this;
objlist_destroy(*((_DWORD *)this + 3));
objlist_destroy(*((_DWORD *)v1 + 1));
objlist_destroy(*((DWORD *)this + 3));
objlist_destroy(*((DWORD *)v1 + 1));
}
//----- (0100B90E) --------------------------------------------------------
@@ -34,10 +34,10 @@ TEdgeBox *result; // eax
v2 = this;
if ( a2 & 2 )
{
`vector destructor iterator'(
destroy(
(void *)this,
0x10u,
*((_DWORD *)this - 1),
*((DWORD *)this - 1),
(void (__thiscall *)(void *))TEdgeBox::~TEdgeBox);
if ( a2 & 1 )
operator delete((char *)v2 - 4);
+27 -27
View File
@@ -14,7 +14,7 @@ double v6; // [esp+Ch] [ebp-8h]
double v7; // [esp+Ch] [ebp-8h]
v2 = this;
v6 = (double)(*((_DWORD *)this + 4) - 1);
v6 = (double)(*((DWORD *)this + 4) - 1);
if ( _floor((a2 - *((float *)this + 6)) * *((float *)this + 2)) >= v6 )
v3 = v6;
else
@@ -25,7 +25,7 @@ v4 = 0.0;
}
else
{
v7 = (double)(*((_DWORD *)v2 + 4) - 1);
v7 = (double)(*((DWORD *)v2 + 4) - 1);
if ( _floor((a2 - *((float *)v2 + 6)) * *((float *)v2 + 2)) >= v7 )
v4 = v7;
else
@@ -44,7 +44,7 @@ double v6; // [esp+Ch] [ebp-8h]
double v7; // [esp+Ch] [ebp-8h]
v2 = this;
v6 = (double)(*((_DWORD *)this + 5) - 1);
v6 = (double)(*((DWORD *)this + 5) - 1);
if ( _floor((a2 - *((float *)this + 7)) * *((float *)this + 3)) >= v6 )
v3 = v6;
else
@@ -55,7 +55,7 @@ v4 = 0.0;
}
else
{
v7 = (double)(*((_DWORD *)v2 + 5) - 1);
v7 = (double)(*((DWORD *)v2 + 5) - 1);
if ( _floor((a2 - *((float *)v2 + 7)) * *((float *)v2 + 3)) >= v7 )
v4 = v7;
else
@@ -69,7 +69,7 @@ int __thiscall TEdgeManager::increment_box_x(TEdgeManager *this, int a2)
{
int result; // eax
result = *((_DWORD *)this + 4) - 1;
result = *((DWORD *)this + 4) - 1;
if ( a2 + 1 < result )
result = a2 + 1;
return result;
@@ -80,7 +80,7 @@ int __thiscall TEdgeManager::increment_box_y(TEdgeManager *this, int a2)
{
int result; // eax
result = *((_DWORD *)this + 5) - 1;
result = *((DWORD *)this + 5) - 1;
if ( a2 + 1 < result )
result = a2 + 1;
return result;
@@ -88,7 +88,7 @@ return result;
//----- (0100B2A0) --------------------------------------------------------
void __stdcall `vector constructor iterator`(void *a1, unsigned int a2, int a3, void *(__thiscall *a4)(void *))
void create(void *a1, unsigned int a2, int a3, void *(__thiscall *a4)(void *))
{
char *v4; // esi
int v5; // edi
@@ -108,7 +108,7 @@ while ( v5 );
}
//----- (0100B2E5) --------------------------------------------------------
void __stdcall `vector destructor iterator`(void *a1, unsigned int a2, int a3, void (__thiscall *a4)(void *))
void destroy(void *a1, unsigned int a2, int a3, void (__thiscall *a4)(void *))
{
char *v4; // edi
int v5; // esi
@@ -143,20 +143,20 @@ struct TBall *v11; // [esp+24h] [ebp+8h]
v3 = a2;
v4 = this;
v5 = TEdgeManager::box_x(this, *(float *)((char *)a2 + 42));
v6 = *((_DWORD *)v4 + 8)
+ 16 * (v5 + (unsigned __int64)TEdgeManager::box_y(v4, *(float *)((char *)a2 + 46)) * *((_DWORD *)v4 + 4));
v7 = *(_DWORD *)(*(_DWORD *)(v6 + 12) + 4) - 1;
v6 = *((DWORD *)v4 + 8)
+ 16 * (v5 + (unsigned __int64)TEdgeManager::box_y(v4, *(float *)((char *)a2 + 46)) * *((DWORD *)v4 + 4));
v7 = *(DWORD *)(*(DWORD *)(v6 + 12) + 4) - 1;
if ( v7 >= 0 )
{
v8 = 4 * v7 + 8;
v11 = *(struct TBall **)(*(_DWORD *)(v6 + 12) + 4);
v11 = *(struct TBall **)(*(DWORD *)(v6 + 12) + 4);
do
{
v9 = *(_DWORD *)(v8 + *(_DWORD *)(v6 + 12));
if ( **(_BYTE **)v9 && *(_DWORD *)((_BYTE *)v3 + 110) & *(_DWORD *)(v9 + 4) )
v9 = *(DWORD *)(v8 + *(DWORD *)(v6 + 12));
if ( **(_BYTE **)v9 && *(DWORD *)((_BYTE *)v3 + 110) & *(DWORD *)(v9 + 4) )
{
if ( (*(int (__thiscall **)(_DWORD, struct TBall *, char *))(**(_DWORD **)(v9 + 8) + 24))(
*(_DWORD *)(v9 + 8),
if ( (*(int (__thiscall **)(DWORD, struct TBall *, char *))(**(DWORD **)(v9 + 8) + 24))(
*(DWORD *)(v9 + 8),
v3,
&v10) )
{
@@ -171,7 +171,7 @@ while ( v11 );
}
//----- (0100B3AE) --------------------------------------------------------
int __userpurge TEdgeManager::TestGridBox@<eax>(TEdgeManager *this@<ecx>, double a2@<st0>, int a3, int a4, float *a5, struct TEdgeSegment **a6, struct ray_type *a7, struct TBall *a8, int a9)
int TEdgeManager::TestGridBox(TEdgeManager *this, double a2@<st0>, int a3, int a4, float *a5, struct TEdgeSegment **a6, struct ray_type *a7, struct TBall *a8, int a9)
{
int v9; // edi
int v10; // eax
@@ -184,21 +184,21 @@ int v17; // [esp+Ch] [ebp+Ch]
if ( a3 >= 0 && a3 < 10 && a4 >= 0 && a4 < 15 )
{
v9 = *((_DWORD *)this + 8) + 16 * (a3 + a4 * *((_DWORD *)this + 4));
v10 = *(_DWORD *)(*(_DWORD *)(v9 + 4) + 4) - 1;
v9 = *((DWORD *)this + 8) + 16 * (a3 + a4 * *((DWORD *)this + 4));
v10 = *(DWORD *)(*(DWORD *)(v9 + 4) + 4) - 1;
if ( v10 >= 0 )
{
v17 = 4 * v10 + 8;
v11 = (int **)((char *)this + 4 * a9 + 36);
v16 = *(_DWORD *)(*(_DWORD *)(v9 + 4) + 4);
v16 = *(DWORD *)(*(DWORD *)(v9 + 4) + 4);
do
{
v12 = *(int **)(v17 + *(_DWORD *)(v9 + 4));
v12 = *(int **)(v17 + *(DWORD *)(v9 + 4));
if ( !*((_BYTE *)v12 + 12) )
{
if ( *(_BYTE *)v12[2] )
{
if ( *(int *)((char *)v12 + 17) & *((_DWORD *)a7 + 10) )
if ( *(int *)((char *)v12 + 17) & *((DWORD *)a7 + 10) )
{
LOBYTE(v13) = TBall::already_hit(a8, (struct TEdgeSegment *)v12);
if ( !v13 )
@@ -499,7 +499,7 @@ TEdgeManager *__thiscall TEdgeManager::TEdgeManager(TEdgeManager *this, float a2
double v5; // st7
TEdgeManager *v6; // esi
double v7; // st6
_DWORD *v8; // eax
DWORD *v8; // eax
int v9; // edi
v5 = a4 * 0.1;
@@ -508,9 +508,9 @@ v6 = this;
*(float *)this = v5;
v7 = a5 * 0.06666667;
*((float *)this + 7) = a3;
*((_DWORD *)this + 4) = 10;
*((DWORD *)this + 4) = 10;
*((float *)this + 1) = v7;
*((_DWORD *)this + 5) = 15;
*((DWORD *)this + 5) = 15;
*((float *)this + 2) = 1.0 / v5;
*((float *)this + 3) = 1.0 / v7;
v8 = operator new(0x964u);
@@ -518,13 +518,13 @@ if ( v8 )
{
v9 = (int)(v8 + 1);
*v8 = 150;
`vector constructor iterator`(v8 + 1, 0x10u, 150, (void *(__thiscall *)(void *))TEdgeBox::TEdgeBox);
create(v8 + 1, 0x10u, 150, (void *(__thiscall *)(void *))TEdgeBox::TEdgeBox);
}
else
{
v9 = 0;
}
*((_DWORD *)v6 + 8) = v9;
*((DWORD *)v6 + 8) = v9;
return v6;
}
+1 -1
View File
@@ -15,7 +15,7 @@ signed __int64 __thiscall TEdgeManager::box_y(TEdgeManager* this, float a2);
int __thiscall TEdgeManager::increment_box_x(TEdgeManager* this, int); // idb
int __thiscall TEdgeManager::increment_box_y(TEdgeManager* this, int); // idb
void __thiscall TEdgeManager::FieldEffects(TEdgeManager* this, struct TBall*, struct vector_type*); // idb
// int __userpurge TEdgeManager::TestGridBox@<eax>(TEdgeManager *this@<ecx>, double a2@<st0>, int a3, int a4, float *a5, struct TEdgeSegment **a6, struct ray_type *a7, struct TBall *a8, int a9);
// int TEdgeManager::TestGridBox(TEdgeManager *this, double a2@<st0>, int a3, int a4, float *a5, struct TEdgeSegment **a6, struct ray_type *a7, struct TBall *a8, int a9);
double __thiscall TEdgeManager::FindCollisionDistance(TEdgeManager* this, struct ray_type* a2, struct TBall* a3, struct TEdgeSegment** a4);
TEdgeManager* __thiscall TEdgeManager::TEdgeManager(TEdgeManager* this, float a2, float a3, float a4, float a5);
void __thiscall TEdgeManager::add_edge_to_box(TEdgeManager* this, int, int, struct TEdgeSegment*); // idb
+4 -4
View File
@@ -6,10 +6,10 @@ TEdgeSegment *__thiscall TEdgeSegment::TEdgeSegment(TEdgeSegment *this, struct T
TEdgeSegment *result; // eax
result = this;
*((_DWORD *)this + 1) = a2;
*((_DWORD *)this + 2) = a3;
*(_DWORD *)this = &TEdgeSegment::vftable;
*(_DWORD *)((char *)this + 17) = a4;
*((DWORD *)this + 1) = a2;
*((DWORD *)this + 2) = a3;
*(DWORD *)this = &TEdgeSegment::vftable;
*(DWORD *)((char *)this + 17) = a4;
*((_BYTE *)this + 12) = 0;
return result;
}
+53 -53
View File
@@ -1,9 +1,9 @@
#include "TFlagSpinner.h"
//----- (01015F34) --------------------------------------------------------
void __stdcall TFlagSpinner::SpinTimer(int a1, void *a2)
void TFlagSpinner::SpinTimer(int a1, void *a2)
{
*(_DWORD *)((char *)a2 + 102) = 0;
*(DWORD *)((char *)a2 + 102) = 0;
TFlagSpinner::NextFrame((TFlagSpinner *)a2);
}
@@ -21,36 +21,36 @@ 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);
*(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;
*(DWORD *)((char *)v1 + 98) = v4 - 1;
}
else
{
*(_DWORD *)((char *)v1 + 98) = 0;
*(DWORD *)((char *)v1 + 98) = 0;
}
v5 = *(_DWORD *)(*(_DWORD *)(v2 + 4) + 4 * *(_DWORD *)((char *)v1 + 98) + 8);
if ( !*(_DWORD *)(*(_DWORD *)((char *)v1 + 30) + 370) )
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) )
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),
*(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));
*(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);
v7 = *(DWORD *)((char *)v1 + 86);
*(float *)((char *)v1 + 78) = v6;
if ( !v9 )
{
@@ -68,19 +68,19 @@ int v4; // eax
v3 = this;
if ( a2 == 1024 )
{
if ( *(_DWORD *)((char *)this + 102) )
if ( *(DWORD *)((char *)this + 102) )
{
timer_kill(*(_DWORD *)((char *)this + 102));
*(_DWORD *)((char *)v3 + 102) = 0;
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);
*(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));
*(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;
}
@@ -93,7 +93,7 @@ int result; // eax
if ( a2 >= 2 )
result = 0;
else
result = *(_DWORD *)((char *)this + 4 * a2 + 110);
result = *(DWORD *)((char *)this + 4 * a2 + 110);
return result;
}
@@ -101,7 +101,7 @@ return result;
void __thiscall TFlagSpinner::put_scoring(TFlagSpinner *this, int a2, int a3)
{
if ( a2 < 2 )
*(_DWORD *)((char *)this + 4 * a2 + 110) = a3;
*(DWORD *)((char *)this + 4 * a2 + 110) = a3;
}
//----- (01018150) --------------------------------------------------------
@@ -111,20 +111,20 @@ int v6; // eax
TFlagSpinner *v7; // edi
*(float *)((char *)a2 + 42) = *(float *)a3;
v6 = *((_DWORD *)a3 + 1);
v6 = *((DWORD *)a3 + 1);
v7 = this;
*(float *)((char *)a2 + 70) = *(float *)((char *)a2 + 70) - a5;
*(_DWORD *)((char *)a2 + 46) = v6;
*(DWORD *)((char *)a2 + 46) = v6;
TBall::not_again(a2, a6);
*(_DWORD *)((char *)v7 + 94) = 2 * (*(_DWORD *)((char *)v7 + 106) != (_DWORD)a6) - 1;
*(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);
*(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);
*(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);
*(DWORD *)((char *)v7 + 78) = *(DWORD *)((char *)v7 + 82);
TFlagSpinner::NextFrame(v7);
}
@@ -136,9 +136,9 @@ TLine *v4; // eax
TLine *v5; // edi
TLine *v6; // eax
TLine *v7; // eax
_DWORD *v8; // eax
_DWORD *v9; // eax
_DWORD *v10; // 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]
@@ -149,8 +149,8 @@ int v18; // [esp+64h] [ebp-8h]
v3 = this;
TCollisionComponent::TCollisionComponent(this, a2, a3, 0);
*(_DWORD *)v3 = &TFlagSpinner::vftable;
*(_DWORD *)((char *)v3 + 102) = 0;
*(DWORD *)v3 = &TFlagSpinner::vftable;
*(DWORD *)((char *)v3 + 102) = 0;
loader_query_visual(a3, 0, &v12);
v15 = *v13;
v16 = v13[1];
@@ -163,7 +163,7 @@ else
v5 = 0;
if ( v5 )
{
(*(void (__thiscall **)(TLine *))(*(_DWORD *)v5 + 8))(v5);
(*(void (__thiscall **)(TLine *))(*(DWORD *)v5 + 8))(v5);
objlist_class::Add((TFlagSpinner *)((char *)v3 + 42), (void *)v5);
}
v6 = (TLine *)operator new(0x55u);
@@ -171,24 +171,24 @@ 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;
*(DWORD *)((char *)v3 + 106) = v7;
if ( v7 )
{
(*(void (__thiscall **)(TLine *))(*(_DWORD *)v7 + 8))(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);
*(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);
*(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);
*(DWORD *)((char *)v3 + 82) = *v9;
v10 = (DWORD *)loader_query_float_attribute(a3, 0, 1201);
if ( v10 )
*(_DWORD *)((char *)v3 + 86) = *v10;
*(DWORD *)((char *)v3 + 86) = *v10;
return v3;
}
// 1002588: using guessed type void *TFlagSpinner::vftable;
+1 -1
View File
@@ -10,7 +10,7 @@
/* 105 */
struct TFlagSpinner;
void __stdcall TFlagSpinner::SpinTimer(int, void*); // idb
void TFlagSpinner::SpinTimer(int, void*); // idb
void __thiscall TFlagSpinner::NextFrame(TFlagSpinner* this); // idb
int __thiscall TFlagSpinner::Message(TFlagSpinner* this, int, float); // idb
int __thiscall TFlagSpinner::get_scoring(TFlagSpinner* this, int); // idb
+52 -52
View File
@@ -9,14 +9,14 @@ void *v2; // ST00_4
v1 = this;
v2 = *(void **)((char *)this + 82);
*(_DWORD *)this = &TFlipper::vftable;
*(DWORD *)this = &TFlipper::vftable;
operator delete(v2);
return TCollisionComponent::~TCollisionComponent(v1);
}
// 1002838: using guessed type void *TFlipper::vftable;
//----- (0101C070) --------------------------------------------------------
void __stdcall TFlipper::TimerExpired(int a1, void *a2)
void TFlipper::TimerExpired(int a1, void *a2)
{
char *v2; // esi
double v3; // st7
@@ -35,8 +35,8 @@ float v14; // [esp+24h] [ebp+Ch]
v2 = (char *)a2;
v13 = 0;
v3 = _floor((time_now - *(float *)((char *)a2 + 102)) / *(float *)((char *)a2 + 98) + 0.5);
v4 = *(_DWORD *)((char *)a2 + 34);
v14 = (double)*(signed int *)(*(_DWORD *)(v4 + 4) + 4);
v4 = *(DWORD *)((char *)a2 + 34);
v14 = (double)*(signed int *)(*(DWORD *)(v4 + 4) + 4);
if ( v3 > v14 )
v3 = v14;
if ( v3 < 0.0 )
@@ -44,24 +44,24 @@ v3 = 0.0;
v5 = (signed __int64)v3;
if ( !(unsigned int)(signed __int64)v3 )
LODWORD(v5) = 1;
v6 = *(_DWORD *)(v2 + 6);
v6 = *(DWORD *)(v2 + 6);
if ( v6 == 1 )
{
*(_DWORD *)(v2 + 78) += v5;
v7 = *(_DWORD *)(*(_DWORD *)(v4 + 4) + 4) - 1;
if ( *(_DWORD *)(v2 + 78) >= v7 )
*(DWORD *)(v2 + 78) += v5;
v7 = *(DWORD *)(*(DWORD *)(v4 + 4) + 4) - 1;
if ( *(DWORD *)(v2 + 78) >= v7 )
{
*(_DWORD *)(v2 + 78) = v7;
*(DWORD *)(v2 + 78) = v7;
v13 = 1;
}
}
if ( v6 == 2 )
{
*(_DWORD *)(v2 + 78) -= v5;
*(DWORD *)(v2 + 78) -= v5;
v8 = 0;
if ( *(_DWORD *)(v2 + 78) <= 0 )
if ( *(DWORD *)(v2 + 78) <= 0 )
{
*(_DWORD *)(v2 + 78) = 0;
*(DWORD *)(v2 + 78) = 0;
v13 = 1;
}
}
@@ -70,20 +70,20 @@ else
v8 = 0;
}
if ( v13 )
*(_DWORD *)(v2 + 6) = 0;
*(DWORD *)(v2 + 6) = 0;
else
v8 = timer_set(*(float *)(v2 + 98), (int)v2, (int)TFlipper::TimerExpired);
v9 = *(_DWORD *)(v2 + 78);
v10 = *(_DWORD *)(v2 + 30);
*(_DWORD *)(v2 + 86) = v8;
v9 = *(DWORD *)(v2 + 78);
v10 = *(DWORD *)(v2 + 30);
*(DWORD *)(v2 + 86) = v8;
v11 = 4 * v9 + 8;
v12 = *(_DWORD *)(v11 + *(_DWORD *)(*(_DWORD *)(v2 + 34) + 4));
v12 = *(DWORD *)(v11 + *(DWORD *)(*(DWORD *)(v2 + 34) + 4));
render_sprite_set(
*(_DWORD **)(v2 + 26),
*(_DWORD *)(v11 + *(_DWORD *)(*(_DWORD *)(v2 + 34) + 4)),
*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v2 + 38) + 4) + v11),
*(_DWORD *)(v12 + 29) - *(_DWORD *)(v10 + 234),
*(_DWORD *)(v12 + 33) - *(_DWORD *)(v10 + 238));
*(DWORD **)(v2 + 26),
*(DWORD *)(v11 + *(DWORD *)(*(DWORD *)(v2 + 34) + 4)),
*(DWORD *)(*(DWORD *)(*(DWORD *)(v2 + 38) + 4) + v11),
*(DWORD *)(v12 + 29) - *(DWORD *)(v10 + 234),
*(DWORD *)(v12 + 33) - *(DWORD *)(v10 + 238));
}
// 1025630: using guessed type float time_now;
@@ -103,8 +103,8 @@ v4 = this;
if ( a2 == 1 )
{
control_handler(1, this);
*(_DWORD *)((char *)v4 + 98) = *(_DWORD *)((char *)v4 + 90);
v6 = *(_DWORD *)((char *)v4 + 74);
*(DWORD *)((char *)v4 + 98) = *(DWORD *)((char *)v4 + 90);
v6 = *(DWORD *)((char *)v4 + 74);
LABEL_15:
if ( v6 )
loader_play_sound(v6);
@@ -112,8 +112,8 @@ goto LABEL_17;
}
if ( a2 == 2 )
{
*(_DWORD *)((char *)this + 98) = *(_DWORD *)((char *)this + 94);
v6 = *(_DWORD *)((char *)this + 70);
*(DWORD *)((char *)this + 98) = *(DWORD *)((char *)this + 94);
v6 = *(DWORD *)((char *)this + 70);
goto LABEL_15;
}
if ( a2 <= 1008 )
@@ -122,16 +122,16 @@ if ( a2 <= 1011 )
{
LABEL_12:
v3 = 2;
*(_DWORD *)((char *)this + 98) = *(_DWORD *)((char *)this + 94);
*(DWORD *)((char *)this + 98) = *(DWORD *)((char *)this + 94);
LABEL_17:
if ( *(_DWORD *)((char *)v4 + 86) )
if ( *(DWORD *)((char *)v4 + 86) )
{
timer_kill(*(_DWORD *)((char *)v4 + 86));
*(_DWORD *)((char *)v4 + 86) = 0;
timer_kill(*(DWORD *)((char *)v4 + 86));
*(DWORD *)((char *)v4 + 86) = 0;
}
if ( *(_DWORD *)((char *)v4 + 6) )
if ( *(DWORD *)((char *)v4 + 6) )
{
v8 = a3 - *(float *)(*(_DWORD *)((char *)v4 + 82) + 201);
v8 = a3 - *(float *)(*(DWORD *)((char *)v4 + 82) + 201);
v7 = v8 - _floor(v8 / *(float *)((char *)v4 + 98)) * *(float *)((char *)v4 + 98);
if ( v7 < 0.0 )
v7 = 0.0;
@@ -141,9 +141,9 @@ else
v7 = *(float *)((char *)v4 + 98);
}
v9 = v7;
*(_DWORD *)((char *)v4 + 6) = v3;
*(DWORD *)((char *)v4 + 6) = v3;
*(float *)((char *)v4 + 102) = a3;
*(_DWORD *)((char *)v4 + 86) = timer_set(v9, (int)v4, (int)TFlipper::TimerExpired);
*(DWORD *)((char *)v4 + 86) = timer_set(v9, (int)v4, (int)TFlipper::TimerExpired);
goto LABEL_24;
}
if ( a2 != 1020 )
@@ -157,13 +157,13 @@ goto LABEL_8;
goto LABEL_12;
}
LABEL_8:
if ( *(_DWORD *)((char *)this + 6) )
if ( *(DWORD *)((char *)this + 6) )
{
if ( *(_DWORD *)((char *)this + 86) )
timer_kill(*(_DWORD *)((char *)this + 86));
*(_DWORD *)((char *)v4 + 78) = -1;
v5 = *(_DWORD *)((char *)v4 + 86);
*(_DWORD *)((char *)v4 + 6) = 2;
if ( *(DWORD *)((char *)this + 86) )
timer_kill(*(DWORD *)((char *)this + 86));
*(DWORD *)((char *)v4 + 78) = -1;
v5 = *(DWORD *)((char *)v4 + 86);
*(DWORD *)((char *)v4 + 6) = 2;
TFlipper::TimerExpired(v5, (void *)v4);
LABEL_24:
TFlipperEdge::SetMotion(*(TFlipperEdge **)((char *)v4 + 82), v3, a3);
@@ -174,7 +174,7 @@ return 0;
//----- (0101C2AD) --------------------------------------------------------
void __thiscall TFlipper::port_draw(TFlipper *this)
{
(*(void (**)(void))(**(_DWORD **)((char *)this + 82) + 4))();
(*(void (**)(void))(**(DWORD **)((char *)this + 82) + 4))();
}
//----- (0101C59D) --------------------------------------------------------
@@ -206,14 +206,14 @@ float *v25; // [esp+7Ch] [ebp+Ch]
v3 = a3;
v4 = this;
TCollisionComponent::TCollisionComponent(this, a2, a3, 0);
*(_DWORD *)v4 = &TFlipper::vftable;
*(DWORD *)v4 = &TFlipper::vftable;
loader_query_visual(a3, 0, &v18);
*(_DWORD *)((char *)v4 + 74) = v21;
*(_DWORD *)((char *)v4 + 70) = v22;
*(_DWORD *)((char *)v4 + 54) = v19;
*(DWORD *)((char *)v4 + 74) = v21;
*(DWORD *)((char *)v4 + 70) = v22;
*(DWORD *)((char *)v4 + 54) = v19;
v5 = v18;
*(_DWORD *)((char *)v4 + 86) = 0;
*(_DWORD *)((char *)v4 + 58) = v5;
*(DWORD *)((char *)v4 + 86) = 0;
*(DWORD *)((char *)v4 + 58) = v5;
v23 = (TFlipperEdge *)operator new(0xE9u);
if ( v23 )
{
@@ -234,14 +234,14 @@ else
{
v15 = 0;
}
*(_DWORD *)((char *)v4 + 82) = v15;
*(DWORD *)((char *)v4 + 82) = v15;
if ( v15 )
{
v16 = *(_DWORD *)((char *)v4 + 34);
*(float *)((char *)v4 + 90) = *(float *)((char *)v15 + 213) / (double)(*(_DWORD *)(*(_DWORD *)(v16 + 4) + 4) - 1);
*(float *)((char *)v4 + 94) = *(float *)((char *)v15 + 217) / (double)(*(_DWORD *)(*(_DWORD *)(v16 + 4) + 4) - 1);
v16 = *(DWORD *)((char *)v4 + 34);
*(float *)((char *)v4 + 90) = *(float *)((char *)v15 + 213) / (double)(*(DWORD *)(*(DWORD *)(v16 + 4) + 4) - 1);
*(float *)((char *)v4 + 94) = *(float *)((char *)v15 + 217) / (double)(*(DWORD *)(*(DWORD *)(v16 + 4) + 4) - 1);
}
*(_DWORD *)((char *)v4 + 78) = 0;
*(DWORD *)((char *)v4 + 78) = 0;
*(float *)((char *)v4 + 102) = 0.0;
return v4;
}
+1 -1
View File
@@ -11,7 +11,7 @@
struct TFlipper;
TZmapList* __thiscall TFlipper::~TFlipper(TFlipper* this);
void __stdcall TFlipper::TimerExpired(int, void*); // idb
void TFlipper::TimerExpired(int, void*); // idb
int __thiscall TFlipper::Message(TFlipper* this, int, float); // idb
void __thiscall TFlipper::port_draw(TFlipper* __hidden this); // idb
TFlipper* __thiscall TFlipper::TFlipper(TFlipper* this, struct TPinballTable* a2, int a3);
+97 -97
View File
@@ -64,7 +64,7 @@ int v2; // edx
double v4; // st7
double v5; // st7
v2 = *(_DWORD *)((char *)this + 21);
v2 = *(DWORD *)((char *)this + 21);
if ( !v2 )
return *(float *)((char *)this + 77);
v4 = (*(float *)((char *)this + 77) - *(float *)((char *)this + 73))
@@ -93,10 +93,10 @@ TFlipperEdge *v1; // esi
v1 = this;
line_init((int)&lineA, A1, flt_1025718, A2, flt_10256B8);
line_init((int)&lineB, B1, flt_10256F4, B2, flt_1025700);
dword_102566C = *(_DWORD *)((char *)v1 + 53);
circlebase = *(_DWORD *)((char *)v1 + 33);
dword_1025664 = *(_DWORD *)((char *)v1 + 37);
dword_102567C = *(_DWORD *)((char *)v1 + 57);
dword_102566C = *(DWORD *)((char *)v1 + 53);
circlebase = *(DWORD *)((char *)v1 + 33);
dword_1025664 = *(DWORD *)((char *)v1 + 37);
dword_102567C = *(DWORD *)((char *)v1 + 57);
circleT1 = T1;
dword_1025674 = dword_102570C;
}
@@ -122,21 +122,21 @@ v2 = this;
v3 = TFlipperEdge::flipper_angle(this, a2);
SinCos(v3, &flipper_sin_angle, &flipper_cos_angle);
v4 = flipper_cos_angle;
A1 = *(_DWORD *)((char *)v2 + 101);
*((_DWORD *)&A1 + 1) = *(_DWORD *)((char *)v2 + 105);
*((_DWORD *)&A1 + 2) = *(_DWORD *)((char *)v2 + 109);
A2 = *(_DWORD *)((char *)v2 + 113);
*((_DWORD *)&A2 + 1) = *(_DWORD *)((char *)v2 + 117);
*((_DWORD *)&A2 + 2) = *(_DWORD *)((char *)v2 + 121);
B1 = *(_DWORD *)((char *)v2 + 125);
*((_DWORD *)&B1 + 1) = *(_DWORD *)((char *)v2 + 129);
*((_DWORD *)&B1 + 2) = *(_DWORD *)((char *)v2 + 133);
B2 = *(_DWORD *)((char *)v2 + 137);
*((_DWORD *)&B2 + 1) = *(_DWORD *)((char *)v2 + 141);
*((_DWORD *)&B2 + 2) = *(_DWORD *)((char *)v2 + 145);
T1 = *(_DWORD *)((char *)v2 + 153);
*((_DWORD *)&T1 + 1) = *(_DWORD *)((char *)v2 + 157);
*((_DWORD *)&T1 + 2) = *(_DWORD *)((char *)v2 + 161);
A1 = *(DWORD *)((char *)v2 + 101);
*((DWORD *)&A1 + 1) = *(DWORD *)((char *)v2 + 105);
*((DWORD *)&A1 + 2) = *(DWORD *)((char *)v2 + 109);
A2 = *(DWORD *)((char *)v2 + 113);
*((DWORD *)&A2 + 1) = *(DWORD *)((char *)v2 + 117);
*((DWORD *)&A2 + 2) = *(DWORD *)((char *)v2 + 121);
B1 = *(DWORD *)((char *)v2 + 125);
*((DWORD *)&B1 + 1) = *(DWORD *)((char *)v2 + 129);
*((DWORD *)&B1 + 2) = *(DWORD *)((char *)v2 + 133);
B2 = *(DWORD *)((char *)v2 + 137);
*((DWORD *)&B2 + 1) = *(DWORD *)((char *)v2 + 141);
*((DWORD *)&B2 + 2) = *(DWORD *)((char *)v2 + 145);
T1 = *(DWORD *)((char *)v2 + 153);
*((DWORD *)&T1 + 1) = *(DWORD *)((char *)v2 + 157);
*((DWORD *)&T1 + 2) = *(DWORD *)((char *)v2 + 161);
v5 = v4;
RotatePt((struct vector_type *)&A1, flipper_sin_angle, v5, (TFlipperEdge *)((char *)v2 + 33));
RotatePt((struct vector_type *)&A2, flipper_sin_angle, flipper_cos_angle, (TFlipperEdge *)((char *)v2 + 33));
@@ -181,7 +181,7 @@ v10 = *(float *)((char *)this + 37) - a3,
v10 * v10 + v9 * v9 <= *(float *)((char *)this + 53))
|| (*(float *)&dword_102570C - a3) * (*(float *)&dword_102570C - a3) + (T1 - a2) * (T1 - a2) < *(float *)((char *)this + 57) )
{
v11 = *(_DWORD *)((char *)this + 21);
v11 = *(DWORD *)((char *)this + 21);
if ( *(float *)((char *)this + 69) < 0.0 )
{
v19 = v11 - 1;
@@ -251,20 +251,20 @@ double __thiscall TFlipperEdge::FindCollisionDistance(TFlipperEdge *this, struct
{
struct ray_type *v2; // esi
TFlipperEdge *v3; // ebx
_DWORD *v4; // eax
DWORD *v4; // eax
double result; // st7
int v6; // eax
int v7; // ecx
float *v8; // esi
double v9; // st7
float *v10; // eax
_DWORD *v11; // edi
DWORD *v11; // edi
char *v12; // esi
float v13; // eax
char *v14; // esi
_DWORD *v15; // edi
_DWORD *v16; // edi
_DWORD *v17; // esi
DWORD *v15; // edi
DWORD *v16; // edi
DWORD *v17; // esi
double v18; // st7
float v19; // eax
double v20; // st7
@@ -272,12 +272,12 @@ int v21; // eax
int v22; // esi
int v23; // eax
int v24; // edx
_DWORD *v25; // esi
DWORD *v25; // esi
double v26; // st7
_DWORD *v27; // esi
DWORD *v27; // esi
double v28; // st7
_DWORD *v29; // edi
_DWORD *v30; // esi
DWORD *v29; // edi
DWORD *v30; // esi
double v31; // st7
double v32; // st7
float v33; // eax
@@ -285,7 +285,7 @@ double v34; // st7
double v35; // st6
double v36; // st5
double v37; // st4
__int16 v38; // fps
int v38; // fps
double v39; // st6
char v40; // ah
bool v41; // c0
@@ -315,14 +315,14 @@ float v63; // [esp+80h] [ebp-4h]
v2 = a2;
v3 = this;
if ( *((float *)a2 + 8) > (double)*(float *)((char *)this + 205) )
*(_DWORD *)((char *)this + 21) = 0;
v4 = (_DWORD *)((char *)this + 197);
if ( *(_DWORD *)((char *)this + 197) )
*(DWORD *)((char *)this + 21) = 0;
v4 = (DWORD *)((char *)this + 197);
if ( *(DWORD *)((char *)this + 197) )
{
*v4 = 0;
return 1000000000.0;
}
if ( *(_DWORD *)((char *)this + 21) )
if ( *(DWORD *)((char *)this + 21) )
{
v18 = *(float *)((char *)this + 181) * *((float *)a2 + 6);
v63 = *(float *)a2;
@@ -346,19 +346,19 @@ v22 = (int)v2 + 12;
v53 = *(float *)v22;
v22 += 4;
v54 = *(float *)v22;
v55 = *(_DWORD *)(v22 + 4);
v23 = *((_DWORD *)a2 + 7);
v55 = *(DWORD *)(v22 + 4);
v23 = *((DWORD *)a2 + 7);
v50 = *(float *)a2;
v51 = *((float *)a2 + 1);
v52 = *((_DWORD *)a2 + 2);
v52 = *((DWORD *)a2 + 2);
v57 = v23;
v56 = v60;
result = distance_to_flipper((struct ray_type *)&v50, (struct ray_type *)&v44);
if ( result < 1000000000.0 )
{
*(_DWORD *)((char *)v3 + 221) = *(_DWORD *)&v44;
*(_DWORD *)((char *)v3 + 225) = v45;
*(_DWORD *)((char *)v3 + 229) = v46;
*(DWORD *)((char *)v3 + 221) = *(DWORD *)&v44;
*(DWORD *)((char *)v3 + 225) = v45;
*(DWORD *)((char *)v3 + 229) = v46;
v35 = *(float *)((char *)v3 + 221) - v53 * 0.00001;
*(float *)((char *)v3 + 221) = v35;
v36 = *(float *)((char *)v3 + 225) - v54 * 0.00001;
@@ -383,15 +383,15 @@ goto LABEL_47;
LABEL_49:
v43 = 0;
}
v15 = (_DWORD *)((char *)v3 + 89);
if ( *(_DWORD *)((char *)v3 + 21) == 2 )
v15 = (DWORD *)((char *)v3 + 89);
if ( *(DWORD *)((char *)v3 + 21) == 2 )
{
v14 = (char *)&lineB;
*(_DWORD *)((char *)v3 + 81) = v43 == 0;
*(DWORD *)((char *)v3 + 81) = v43 == 0;
}
else
{
*(_DWORD *)((char *)v3 + 81) = v43;
*(DWORD *)((char *)v3 + 81) = v43;
v14 = (char *)&lineA;
}
goto LABEL_25;
@@ -403,14 +403,14 @@ if ( *((float *)a2 + 9) + *((float *)a2 + 8) <= v61 )
return 1000000000.0;
v2 = a2;
}
v24 = *(_DWORD *)((char *)v3 + 21);
v24 = *(DWORD *)((char *)v3 + 21);
if ( v24 != 1 || v21 == 5 )
{
if ( v24 != 2 || v21 == 4 )
{
v31 = *(float *)((char *)v3 + 33) - v63;
*(_DWORD *)((char *)v3 + 81) = 0;
*(_DWORD *)((char *)v3 + 85) = 1;
*(DWORD *)((char *)v3 + 81) = 0;
*(DWORD *)((char *)v3 + 85) = 1;
v53 = v31;
v54 = *(float *)((char *)v3 + 37) - v62;
normalize_2d(&v53);
@@ -439,27 +439,27 @@ v53 = -lineA;
v26 = flt_1025684;
}
v54 = -v26;
*(_DWORD *)((char *)v3 + 89) = *v25;
*(DWORD *)((char *)v3 + 89) = *v25;
v27 = v25 + 1;
*(_DWORD *)((char *)v3 + 93) = *v27;
*(_DWORD *)((char *)v3 + 97) = v27[1];
*(_DWORD *)((char *)v3 + 85) = 0;
*(_DWORD *)((char *)v3 + 81) = 1;
*(DWORD *)((char *)v3 + 93) = *v27;
*(DWORD *)((char *)v3 + 97) = v27[1];
*(DWORD *)((char *)v3 + 85) = 0;
*(DWORD *)((char *)v3 + 81) = 1;
v57 = 990057071;
v50 = *(float *)a2 - v53 * 5.0;
v51 = *((float *)a2 + 1) - v54 * 5.0;
v56 = *((float *)a2 + 6) + 10.0;
v28 = distance_to_flipper((struct ray_type *)&v50, (struct ray_type *)&v44);
*(_DWORD *)((char *)v3 + 185) = *(_DWORD *)&v47;
*(_DWORD *)((char *)v3 + 189) = v48;
*(_DWORD *)((char *)v3 + 193) = v49;
*(DWORD *)((char *)v3 + 185) = *(DWORD *)&v47;
*(DWORD *)((char *)v3 + 189) = v48;
*(DWORD *)((char *)v3 + 193) = v49;
if ( v28 >= 1000000000.0 )
return 1000000000.0;
v10 = (float *)((char *)v3 + 221);
v12 = &v44;
v11 = (_DWORD *)((char *)v3 + 221);
v11 = (DWORD *)((char *)v3 + 221);
LABEL_41:
*v11 = *(_DWORD *)v12;
*v11 = *(DWORD *)v12;
v30 = v12 + 4;
v29 = v11 + 1;
*v29 = *v30;
@@ -469,12 +469,12 @@ v29[1] = v30[1];
return 0.0;
}
*v4 = 0;
*(_DWORD *)((char *)this + 81) = 0;
*(_DWORD *)((char *)this + 85) = 0;
*(DWORD *)((char *)this + 81) = 0;
*(DWORD *)((char *)this + 85) = 0;
TFlipperEdge::set_control_points(this, *((float *)a2 + 8));
TFlipperEdge::build_edges_in_motion(v3);
*(float *)&v6 = COERCE_FLOAT(TFlipperEdge::is_ball_inside(v3, *(float *)a2, *((float *)a2 + 1)));
v7 = *((_DWORD *)a2 + 7);
v7 = *((DWORD *)a2 + 7);
v61 = *(float *)&v6;
v57 = v7;
if ( *(float *)&v6 != 0.0 )
@@ -482,18 +482,18 @@ if ( *(float *)&v6 != 0.0 )
if ( Distance_Squared(
*(float *)a2,
*((float *)a2 + 1),
*((_DWORD *)a2 + 2),
*((DWORD *)a2 + 2),
*(float *)((char *)v3 + 33),
*(float *)((char *)v3 + 37),
*(_DWORD *)((char *)v3 + 41)) >= *(float *)((char *)v3 + 61) )
*(DWORD *)((char *)v3 + 41)) >= *(float *)((char *)v3 + 61) )
{
if ( Distance_Squared(
*(float *)a2,
*((float *)a2 + 1),
*((_DWORD *)a2 + 2),
*((DWORD *)a2 + 2),
T1,
*((float *)&T1 + 1),
*((_DWORD *)&T1 + 2)) >= *(float *)((char *)v3 + 65) )
*((DWORD *)&T1 + 2)) >= *(float *)((char *)v3 + 65) )
{
if ( LODWORD(v61) == 4 )
{
@@ -537,44 +537,44 @@ return 1000000000.0;
}
LABEL_20:
v10 = (float *)((char *)v3 + 221);
*(_DWORD *)((char *)v3 + 221) = *(_DWORD *)&v44;
*(_DWORD *)((char *)v3 + 225) = v45;
*(_DWORD *)((char *)v3 + 229) = v46;
v11 = (_DWORD *)((char *)v3 + 185);
*(DWORD *)((char *)v3 + 221) = *(DWORD *)&v44;
*(DWORD *)((char *)v3 + 225) = v45;
*(DWORD *)((char *)v3 + 229) = v46;
v11 = (DWORD *)((char *)v3 + 185);
v12 = &v47;
goto LABEL_41;
}
v53 = *((float *)a2 + 3);
v54 = *((float *)a2 + 4);
v55 = *((_DWORD *)a2 + 5);
v55 = *((DWORD *)a2 + 5);
v13 = *((float *)a2 + 6);
v50 = *(float *)a2;
v51 = *((float *)a2 + 1);
v52 = *((_DWORD *)a2 + 2);
v52 = *((DWORD *)a2 + 2);
v56 = v13;
result = distance_to_flipper((struct ray_type *)&v50, (struct ray_type *)&v44);
v14 = &v44;
if ( result == 0.0 )
{
*(_DWORD *)((char *)v3 + 221) = *(_DWORD *)&v44;
*(_DWORD *)((char *)v3 + 225) = v45;
*(_DWORD *)((char *)v3 + 229) = v46;
*(DWORD *)((char *)v3 + 221) = *(DWORD *)&v44;
*(DWORD *)((char *)v3 + 225) = v45;
*(DWORD *)((char *)v3 + 229) = v46;
*(float *)((char *)v3 + 221) = *(float *)((char *)v3 + 221) - v53 * 0.00001;
*(float *)((char *)v3 + 225) = *(float *)((char *)v3 + 225) - v54 * 0.00001;
}
else
{
v15 = (_DWORD *)((char *)v3 + 221);
v15 = (DWORD *)((char *)v3 + 221);
LABEL_25:
*v15 = *(_DWORD *)v14;
*v15 = *(DWORD *)v14;
v17 = v14 + 4;
v16 = v15 + 1;
*v16 = *v17;
v16[1] = v17[1];
}
*(_DWORD *)((char *)v3 + 185) = *(_DWORD *)&v47;
*(_DWORD *)((char *)v3 + 189) = v48;
*(_DWORD *)((char *)v3 + 193) = v49;
*(DWORD *)((char *)v3 + 185) = *(DWORD *)&v47;
*(DWORD *)((char *)v3 + 189) = v48;
*(DWORD *)((char *)v3 + 193) = v49;
return result;
}
// 1025684: using guessed type float flt_1025684;
@@ -604,11 +604,11 @@ float v19; // ST14_4
float v20; // [esp+14h] [ebp-4h]
v3 = this;
v4 = *(_DWORD *)((char *)this + 21);
*(_DWORD *)((char *)this + 197) = 1;
v4 = *(DWORD *)((char *)this + 21);
*(DWORD *)((char *)this + 197) = 1;
if ( !v4 )
goto LABEL_4;
if ( *(_DWORD *)((char *)this + 81) )
if ( *(DWORD *)((char *)this + 81) )
{
v5 = *(float *)((char *)this + 221) - *(float *)((char *)this + 33);
v6 = *(float *)((char *)this + 225) - *(float *)((char *)this + 37);
@@ -645,7 +645,7 @@ v19,
v18);
return;
}
if ( !v4 || !*(_DWORD *)((char *)this + 85) )
if ( !v4 || !*(DWORD *)((char *)this + 85) )
goto LABEL_4;
v12 = (TFlipperEdge *)((char *)this + 221);
v13 = *(float *)((char *)v3 + 221) - *(float *)((char *)v3 + 33);
@@ -673,28 +673,28 @@ switch ( a2 )
{
case 1:
v5 = TFlipperEdge::flipper_angle(this, a3);
v6 = *(_DWORD *)((char *)this + 69);
v6 = *(DWORD *)((char *)this + 69);
*(float *)((char *)this + 73) = v5;
*(_DWORD *)((char *)this + 77) = v6;
v4 = *(_DWORD *)((char *)this + 213);
*(DWORD *)((char *)this + 77) = v6;
v4 = *(DWORD *)((char *)this + 213);
goto LABEL_7;
case 2:
v3 = TFlipperEdge::flipper_angle(this, a3);
v4 = *(_DWORD *)((char *)this + 217);
v4 = *(DWORD *)((char *)this + 217);
*(float *)((char *)this + 73) = v3;
*(float *)((char *)this + 77) = 0.0;
LABEL_7:
*(_DWORD *)((char *)this + 209) = v4;
*(DWORD *)((char *)this + 209) = v4;
break;
case 1024:
*(_DWORD *)((char *)this + 21) = 0;
*(DWORD *)((char *)this + 21) = 0;
*(float *)((char *)this + 77) = 0.0;
return;
}
if ( !*(_DWORD *)((char *)this + 21) )
if ( !*(DWORD *)((char *)this + 21) )
*(float *)((char *)this + 201) = a3;
v7 = *(float *)((char *)this + 209);
*(_DWORD *)((char *)this + 21) = a2;
*(DWORD *)((char *)this + 21) = a2;
*(float *)((char *)this + 205) = v7 + *(float *)((char *)this + 201);
}
@@ -758,7 +758,7 @@ v13 = this;
TEdgeSegment::TEdgeSegment(this, a2, a3, a4);
*(float *)((char *)v13 + 25) = a12;
*(float *)((char *)v13 + 29) = a13;
*(_DWORD *)v13 = &TFlipperEdge::vftable;
*(DWORD *)v13 = &TFlipperEdge::vftable;
v46 = *(float *)a6;
v47 = *((float *)a6 + 1);
v48 = *((float *)a6 + 2);
@@ -776,10 +776,10 @@ v15 = v48 + *(float *)((char *)a5 + 282);
v16 = v46;
*(float *)((char *)v13 + 153) = v49;
v52 = v15;
*(_DWORD *)((char *)v13 + 157) = LODWORD(v50);
*(DWORD *)((char *)v13 + 157) = LODWORD(v50);
*(float *)((char *)v13 + 45) = v15;
v17 = *(float *)((char *)v13 + 49) * 1.01;
*(_DWORD *)((char *)v13 + 161) = HIDWORD(v50);
*(DWORD *)((char *)v13 + 161) = HIDWORD(v50);
*(float *)((char *)v13 + 65) = v17 * v17;
*(float *)((char *)v13 + 165) = v36;
*(float *)((char *)v13 + 169) = v37;
@@ -807,7 +807,7 @@ v43 = 0.0;
cross(&v39, &v41, &v33);
if ( v35 < 0.0 )
*(float *)((char *)v13 + 69) = -*(float *)((char *)v13 + 69);
*(_DWORD *)((char *)v13 + 21) = 0;
*(DWORD *)((char *)v13 + 21) = 0;
*(float *)((char *)v13 + 77) = 0.0;
v44 = v53;
v45 = v51;
@@ -849,9 +849,9 @@ v50 = v30;
v31 = Distance((struct vector_type *)&v39, (struct vector_type *)&v33);
*(float *)((char *)v13 + 181) = v50 / (v31 / *(float *)((char *)v13 + 49) + v31 / *(float *)((char *)v13 + 49));
TFlipperEdge::place_in_grid(v13);
*(_DWORD *)((char *)v13 + 197) = 0;
*(DWORD *)((char *)v13 + 197) = 0;
*(float *)((char *)v13 + 201) = 0.0;
*(_DWORD *)((char *)v13 + 81) = 0;
*(DWORD *)((char *)v13 + 81) = 0;
*(float *)((char *)v13 + 205) = 0.0;
result = v13;
*(float *)((char *)v13 + 209) = 0.0;
+11 -11
View File
@@ -5,25 +5,25 @@ int __thiscall TGate::Message(TGate *this, int a2, float a3)
{
TGate *v3; // esi
int v4; // eax
_DWORD *v5; // ST00_4
DWORD *v5; // ST00_4
v3 = this;
if ( a2 != 1020 )
{
if ( a2 == 53 )
{
v5 = *(_DWORD **)((char *)this + 26);
v5 = *(DWORD **)((char *)this + 26);
*((_BYTE *)this + 5) = 0;
render_sprite_set_bitmap(v5, 0);
loader_play_sound(*(_DWORD *)((char *)v3 + 82));
loader_play_sound(*(DWORD *)((char *)v3 + 82));
}
else if ( a2 == 54 || a2 == 1024 )
{
v4 = *(_DWORD *)((char *)this + 34);
v4 = *(DWORD *)((char *)this + 34);
*((_BYTE *)this + 5) = 1;
render_sprite_set_bitmap(*(_DWORD **)((char *)this + 26), *(_DWORD *)(*(_DWORD *)(v4 + 4) + 8));
render_sprite_set_bitmap(*(DWORD **)((char *)this + 26), *(DWORD *)(*(DWORD *)(v4 + 4) + 8));
if ( a2 == 54 )
loader_play_sound(*(_DWORD *)((char *)v3 + 78));
loader_play_sound(*(DWORD *)((char *)v3 + 78));
}
control_handler(a2, v3);
}
@@ -41,13 +41,13 @@ int v8; // [esp+40h] [ebp-Ch]
v3 = this;
TCollisionComponent::TCollisionComponent(this, a2, a3, 1);
*(_DWORD *)v3 = &TGate::vftable;
*(DWORD *)v3 = &TGate::vftable;
loader_query_visual(a3, 0, &v6);
*(_DWORD *)((char *)v3 + 78) = v7;
*(_DWORD *)((char *)v3 + 82) = v8;
v4 = *(_DWORD *)((char *)v3 + 34);
*(DWORD *)((char *)v3 + 78) = v7;
*(DWORD *)((char *)v3 + 82) = v8;
v4 = *(DWORD *)((char *)v3 + 34);
*((_BYTE *)v3 + 5) = 1;
render_sprite_set_bitmap(*(_DWORD **)((char *)v3 + 26), *(_DWORD *)(*(_DWORD *)(v4 + 4) + 8));
render_sprite_set_bitmap(*(DWORD **)((char *)v3 + 26), *(DWORD *)(*(DWORD *)(v4 + 4) + 8));
control_handler(1024, v3);
return v3;
}
+58 -58
View File
@@ -1,10 +1,10 @@
#include "../../pinball.h"
//----- (010169A4) --------------------------------------------------------
void __stdcall THole::TimerExpired(int a1, void *a2)
void THole::TimerExpired(int a1, void *a2)
{
*(_DWORD *)((char *)a2 + 86) = 0;
*(_DWORD *)((char *)a2 + 82) = 1;
*(DWORD *)((char *)a2 + 86) = 0;
*(DWORD *)((char *)a2 + 82) = 1;
}
//----- (010169C0) --------------------------------------------------------
@@ -22,12 +22,12 @@ float v11; // [esp+4h] [ebp-Ch]
float v12; // [esp+8h] [ebp-8h]
v3 = this;
if ( *(_DWORD *)((char *)this + 78) )
if ( *(DWORD *)((char *)this + 78) )
{
if ( *(_DWORD *)((char *)this + 82) )
if ( *(DWORD *)((char *)this + 82) )
{
v4 = *(float *)((char *)a2 + 62)
- *(float *)(*(_DWORD *)((char *)this + 30) + 270)
- *(float *)(*(DWORD *)((char *)this + 30) + 270)
* *(float *)((char *)a2 + 74)
* *(float *)((char *)this + 98);
*(float *)((char *)a2 + 62) = v4;
@@ -35,18 +35,18 @@ v5 = v4 + *(float *)((char *)a2 + 50);
*(float *)((char *)a2 + 50) = v5;
if ( v5 <= *(float *)((char *)this + 102) )
{
v6 = *(_DWORD *)((char *)this + 102);
*(_DWORD *)((char *)this + 78) = 0;
*(_DWORD *)((char *)this + 82) = 0;
*(_DWORD *)((char *)a2 + 50) = v6;
v7 = *(_DWORD *)((char *)this + 106);
v6 = *(DWORD *)((char *)this + 102);
*(DWORD *)((char *)this + 78) = 0;
*(DWORD *)((char *)this + 82) = 0;
*(DWORD *)((char *)a2 + 50) = v6;
v7 = *(DWORD *)((char *)this + 106);
*(float *)((char *)a2 + 62) = 0.0;
*(_DWORD *)((char *)a2 + 110) = v7;
*(DWORD *)((char *)a2 + 110) = v7;
*(float *)((char *)a2 + 58) = 0.0;
*(_DWORD *)((char *)a2 + 106) = 0;
*(DWORD *)((char *)a2 + 106) = 0;
*(float *)((char *)a2 + 54) = 0.0;
*(float *)((char *)a2 + 66) = 0.0;
loader_play_sound(*(_DWORD *)((char *)this + 70));
loader_play_sound(*(DWORD *)((char *)this + 70));
control_handler(58, v3);
}
}
@@ -80,12 +80,12 @@ int __thiscall THole::Message(THole *this, int a2, float a3)
THole *v3; // esi
v3 = this;
if ( a2 == 1024 && *(_DWORD *)((char *)this + 78) )
if ( a2 == 1024 && *(DWORD *)((char *)this + 78) )
{
if ( *(_DWORD *)((char *)this + 86) )
timer_kill(*(_DWORD *)((char *)this + 86));
*(_DWORD *)((char *)v3 + 86) = 0;
*(_DWORD *)((char *)v3 + 82) = 1;
if ( *(DWORD *)((char *)this + 86) )
timer_kill(*(DWORD *)((char *)this + 86));
*(DWORD *)((char *)v3 + 86) = 0;
*(DWORD *)((char *)v3 + 82) = 1;
}
return 0;
}
@@ -97,20 +97,20 @@ THole *v6; // esi
int v7; // ecx
v6 = this;
if ( !*(_DWORD *)((char *)this + 78) )
if ( !*(DWORD *)((char *)this + 78) )
{
*(_DWORD *)((char *)this + 82) = 0;
*(_DWORD *)((char *)this + 66) = 1315859240;
*(_DWORD *)((char *)this + 78) = 1;
*(_DWORD *)((char *)a2 + 106) = this;
*(_DWORD *)((char *)a2 + 42) = *(_DWORD *)((char *)this + 114);
v7 = *(_DWORD *)((char *)this + 118);
*(DWORD *)((char *)this + 82) = 0;
*(DWORD *)((char *)this + 66) = 1315859240;
*(DWORD *)((char *)this + 78) = 1;
*(DWORD *)((char *)a2 + 106) = this;
*(DWORD *)((char *)a2 + 42) = *(DWORD *)((char *)this + 114);
v7 = *(DWORD *)((char *)this + 118);
*(float *)((char *)a2 + 62) = 0.0;
*(_DWORD *)((char *)a2 + 46) = v7;
*(_DWORD *)((char *)v6 + 86) = timer_set(0.5, (int)v6, (int)THole::TimerExpired);
if ( !*(_DWORD *)(*(_DWORD *)((char *)v6 + 30) + 370) )
*(DWORD *)((char *)a2 + 46) = v7;
*(DWORD *)((char *)v6 + 86) = timer_set(0.5, (int)v6, (int)THole::TimerExpired);
if ( !*(DWORD *)(*(DWORD *)((char *)v6 + 30) + 370) )
{
loader_play_sound(*(_DWORD *)((char *)v6 + 74));
loader_play_sound(*(DWORD *)((char *)v6 + 74));
control_handler(57, v6);
}
}
@@ -120,8 +120,8 @@ control_handler(57, v6);
THole *__thiscall THole::THole(THole *this, struct TPinballTable *a2, int a3)
{
THole *v3; // ebx
_DWORD *v4; // eax
_DWORD *v5; // eax
DWORD *v4; // eax
DWORD *v5; // eax
int v6; // eax
float *v7; // edi
double v8; // st7
@@ -129,7 +129,7 @@ TCircle *v9; // eax
float *v10; // eax
unsigned int v11; // ecx
char v13; // [esp+14h] [ebp-5Ch]
_DWORD *v14; // [esp+20h] [ebp-50h]
DWORD *v14; // [esp+20h] [ebp-50h]
unsigned int v15; // [esp+48h] [ebp-28h]
int v16; // [esp+5Ch] [ebp-14h]
int v17; // [esp+60h] [ebp-10h]
@@ -141,33 +141,33 @@ TCircle *v22; // [esp+78h] [ebp+8h]
v3 = this;
TCollisionComponent::TCollisionComponent(this, a2, a3, 0);
*(_DWORD *)v3 = &THole::vftable;
*(_DWORD *)((char *)v3 + 94) = 1028443341;
*(_DWORD *)((char *)v3 + 6) = 0;
*(_DWORD *)((char *)v3 + 86) = 0;
*(_DWORD *)((char *)v3 + 78) = 0;
v4 = (_DWORD *)loader_query_float_attribute(a3, 0, 407);
*(DWORD *)v3 = &THole::vftable;
*(DWORD *)((char *)v3 + 94) = 1028443341;
*(DWORD *)((char *)v3 + 6) = 0;
*(DWORD *)((char *)v3 + 86) = 0;
*(DWORD *)((char *)v3 + 78) = 0;
v4 = (DWORD *)loader_query_float_attribute(a3, 0, 407);
if ( v4 )
*(_DWORD *)((char *)v3 + 90) = *v4;
*(DWORD *)((char *)v3 + 90) = *v4;
else
*(_DWORD *)((char *)v3 + 90) = 1048576000;
v5 = (_DWORD *)loader_query_float_attribute(a3, 0, 701);
*(DWORD *)((char *)v3 + 90) = 1048576000;
v5 = (DWORD *)loader_query_float_attribute(a3, 0, 701);
if ( v5 )
*(_DWORD *)((char *)v3 + 98) = *v5;
*(DWORD *)((char *)v3 + 98) = *v5;
else
*(_DWORD *)((char *)v3 + 98) = 1056964608;
*(DWORD *)((char *)v3 + 98) = 1056964608;
v21 = *(float *)loader_query_float_attribute(a3, 0, 306);
*(_DWORD *)((char *)v3 + 110) = *(_DWORD *)loader_query_float_attribute(a3, 0, 305);
*(DWORD *)((char *)v3 + 110) = *(DWORD *)loader_query_float_attribute(a3, 0, 305);
loader_query_visual(a3, 0, &v13);
v6 = (int)v14;
*(_DWORD *)((char *)v3 + 114) = *v14;
*(DWORD *)((char *)v3 + 114) = *v14;
v7 = (float *)(v6 + 8);
*(_DWORD *)((char *)v3 + 118) = *(_DWORD *)(v6 + 4);
*(DWORD *)((char *)v3 + 118) = *(DWORD *)(v6 + 4);
v8 = v21 * *(float *)(v6 + 8);
v20 = (struct vector_type *)v6;
*(float *)((char *)v3 + 126) = v8;
if ( 0.0 == v8 )
*(_DWORD *)((char *)v3 + 126) = 981668463;
*(DWORD *)((char *)v3 + 126) = 981668463;
v9 = (TCircle *)operator new(0x25u);
if ( v9 )
v22 = TCircle::TCircle(v9, v3, (char *)v3 + 5, v15, v20, *(float *)((char *)v3 + 126));
@@ -175,21 +175,21 @@ else
v22 = 0;
if ( v22 )
{
(*(void (**)(void))(*(_DWORD *)v22 + 8))();
(*(void (**)(void))(*(DWORD *)v22 + 8))();
objlist_class::Add((THole *)((char *)v3 + 42), (void *)v22);
}
*(float *)((char *)v3 + 126) = *v7 * *v7;
*(_DWORD *)((char *)v3 + 102) = *(_DWORD *)(loader_query_float_attribute(a3, 0, 408) + 8);
*(DWORD *)((char *)v3 + 102) = *(DWORD *)(loader_query_float_attribute(a3, 0, 408) + 8);
v10 = (float *)loader_query_float_attribute(a3, 0, 1304);
*(_DWORD *)((char *)v3 + 106) = (signed __int64)_floor(*v10);
v19 = *(_DWORD *)((char *)v3 + 126);
v16 = *(_DWORD *)((char *)v3 + 114);
v17 = *(_DWORD *)((char *)v3 + 118);
*(_DWORD *)((char *)v3 + 130) = (char *)v3 + 5;
*(DWORD *)((char *)v3 + 106) = (signed __int64)_floor(*v10);
v19 = *(DWORD *)((char *)v3 + 126);
v16 = *(DWORD *)((char *)v3 + 114);
v17 = *(DWORD *)((char *)v3 + 118);
*(DWORD *)((char *)v3 + 130) = (char *)v3 + 5;
v11 = v15;
v18 = *(_DWORD *)((char *)v3 + 122);
*(_DWORD *)((char *)v3 + 138) = v3;
*(_DWORD *)((char *)v3 + 134) = v11;
v18 = *(DWORD *)((char *)v3 + 122);
*(DWORD *)((char *)v3 + 138) = v3;
*(DWORD *)((char *)v3 + 134) = v11;
edges_insert_circle((struct circle_type *)&v16, 0, (THole *)((char *)v3 + 130));
return v3;
}
+1 -1
View File
@@ -10,7 +10,7 @@
/* 112 */
struct THole;
void __stdcall THole::TimerExpired(int, void*); // idb
void THole::TimerExpired(int, void*); // idb
int __thiscall THole::FieldEffect(THole* this, struct TBall*, struct vector_type*); // idb
int __thiscall THole::Message(THole* this, int, float); // idb
void __thiscall THole::Collision(THole* this, struct TBall*, struct vector_type*, struct vector_type*, float, struct TEdgeSegment*); // idb
+37 -37
View File
@@ -1,40 +1,40 @@
#include "../../pinball.h"
//----- (0101663F) --------------------------------------------------------
void __stdcall TKickback::TimerExpired(int a1, struct TPinballComponent *a2)
void TKickback::TimerExpired(int a1, struct TPinballComponent *a2)
{
int v2; // eax
int v3; // ST10_4
int v4; // eax
int v5; // eax
if ( *(_DWORD *)((char *)a2 + 90) )
if ( *(DWORD *)((char *)a2 + 90) )
{
*(float *)((char *)a2 + 66) = 0.0;
v2 = timer_set(*(float *)((char *)a2 + 82), (int)a2, (int)TKickback::TimerExpired);
v3 = *(_DWORD *)((char *)a2 + 74);
*(_DWORD *)((char *)a2 + 86) = v2;
v3 = *(DWORD *)((char *)a2 + 74);
*(DWORD *)((char *)a2 + 86) = v2;
loader_play_sound(v3);
v4 = *(_DWORD *)((char *)a2 + 34);
v4 = *(DWORD *)((char *)a2 + 34);
if ( v4 )
render_sprite_set(
*(_DWORD **)((char *)a2 + 26),
*(_DWORD *)(*(_DWORD *)(v4 + 4) + 12),
*(_DWORD *)(*(_DWORD *)(*(_DWORD *)((char *)a2 + 38) + 4) + 12),
*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v4 + 4) + 12) + 29) - *(_DWORD *)(*(_DWORD *)((char *)a2 + 30) + 234),
*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v4 + 4) + 12) + 33) - *(_DWORD *)(*(_DWORD *)((char *)a2 + 30) + 238));
*(DWORD **)((char *)a2 + 26),
*(DWORD *)(*(DWORD *)(v4 + 4) + 12),
*(DWORD *)(*(DWORD *)(*(DWORD *)((char *)a2 + 38) + 4) + 12),
*(DWORD *)(*(DWORD *)(*(DWORD *)(v4 + 4) + 12) + 29) - *(DWORD *)(*(DWORD *)((char *)a2 + 30) + 234),
*(DWORD *)(*(DWORD *)(*(DWORD *)(v4 + 4) + 12) + 33) - *(DWORD *)(*(DWORD *)((char *)a2 + 30) + 238));
}
else
{
v5 = *(_DWORD *)((char *)a2 + 34);
v5 = *(DWORD *)((char *)a2 + 34);
if ( v5 )
render_sprite_set(
*(_DWORD **)((char *)a2 + 26),
*(_DWORD *)(*(_DWORD *)(v5 + 4) + 8),
*(_DWORD *)(*(_DWORD *)(*(_DWORD *)((char *)a2 + 38) + 4) + 8),
*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v5 + 4) + 8) + 29) - *(_DWORD *)(*(_DWORD *)((char *)a2 + 30) + 234),
*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v5 + 4) + 8) + 33) - *(_DWORD *)(*(_DWORD *)((char *)a2 + 30) + 238));
*(_DWORD *)((char *)a2 + 86) = 0;
*(DWORD **)((char *)a2 + 26),
*(DWORD *)(*(DWORD *)(v5 + 4) + 8),
*(DWORD *)(*(DWORD *)(*(DWORD *)((char *)a2 + 38) + 4) + 8),
*(DWORD *)(*(DWORD *)(*(DWORD *)(v5 + 4) + 8) + 29) - *(DWORD *)(*(DWORD *)((char *)a2 + 30) + 234),
*(DWORD *)(*(DWORD *)(*(DWORD *)(v5 + 4) + 8) + 33) - *(DWORD *)(*(DWORD *)((char *)a2 + 30) + 238));
*(DWORD *)((char *)a2 + 86) = 0;
control_handler(60, a2);
}
}
@@ -45,14 +45,14 @@ int __thiscall TKickback::Message(TKickback *this, int a2, float a3)
TKickback *v3; // esi
v3 = this;
if ( (a2 == 1011 || a2 == 1024) && *(_DWORD *)((char *)this + 86) )
if ( (a2 == 1011 || a2 == 1024) && *(DWORD *)((char *)this + 86) )
{
timer_kill(*(_DWORD *)((char *)this + 86));
if ( *(_DWORD *)((char *)v3 + 34) )
render_sprite_set_bitmap(*(_DWORD **)((char *)v3 + 26), 0);
*(_DWORD *)((char *)v3 + 86) = 0;
*(_DWORD *)((char *)v3 + 90) = 0;
*(_DWORD *)((char *)v3 + 66) = 1315859240;
timer_kill(*(DWORD *)((char *)this + 86));
if ( *(DWORD *)((char *)v3 + 34) )
render_sprite_set_bitmap(*(DWORD **)((char *)v3 + 26), 0);
*(DWORD *)((char *)v3 + 86) = 0;
*(DWORD *)((char *)v3 + 90) = 0;
*(DWORD *)((char *)v3 + 66) = 1315859240;
}
return 0;
}
@@ -64,7 +64,7 @@ TKickback *v6; // esi
float v7; // ST10_4
v6 = this;
if ( *(_DWORD *)(*(_DWORD *)((char *)this + 30) + 370) )
if ( *(DWORD *)(*(DWORD *)((char *)this + 30) + 370) )
{
basic_collision(
a2,
@@ -77,15 +77,15 @@ a4,
}
else
{
if ( !*(_DWORD *)((char *)this + 90) )
if ( !*(DWORD *)((char *)this + 90) )
{
v7 = *(float *)((char *)this + 78);
*(_DWORD *)((char *)this + 66) = 1315859240;
*(_DWORD *)((char *)this + 90) = 1;
*(_DWORD *)((char *)this + 86) = timer_set(v7, (int)this, (int)TKickback::TimerExpired);
*(DWORD *)((char *)this + 66) = 1315859240;
*(DWORD *)((char *)this + 90) = 1;
*(DWORD *)((char *)this + 86) = timer_set(v7, (int)this, (int)TKickback::TimerExpired);
}
if ( TCollisionComponent::DefaultCollision(v6, a2, a3, a4) )
*(_DWORD *)((char *)v6 + 90) = 0;
*(DWORD *)((char *)v6 + 90) = 0;
}
}
@@ -96,13 +96,13 @@ TKickback *v3; // esi
v3 = this;
TCollisionComponent::TCollisionComponent(this, a2, a3, 1);
*(_DWORD *)((char *)v3 + 6) = 0;
*(_DWORD *)((char *)v3 + 86) = 0;
*(_DWORD *)((char *)v3 + 90) = 0;
*(_DWORD *)v3 = &TKickback::vftable;
*(_DWORD *)((char *)v3 + 78) = 1060320051;
*(_DWORD *)((char *)v3 + 82) = 1036831949;
*(_DWORD *)((char *)v3 + 66) = 1315859240;
*(DWORD *)((char *)v3 + 6) = 0;
*(DWORD *)((char *)v3 + 86) = 0;
*(DWORD *)((char *)v3 + 90) = 0;
*(DWORD *)v3 = &TKickback::vftable;
*(DWORD *)((char *)v3 + 78) = 1060320051;
*(DWORD *)((char *)v3 + 82) = 1036831949;
*(DWORD *)((char *)v3 + 66) = 1315859240;
return v3;
}
// 1002668: using guessed type void *TKickback::vftable;
+1 -1
View File
@@ -10,7 +10,7 @@
/* 110 */
struct TKickback;
void __stdcall TKickback::TimerExpired(int, struct TPinballComponent*); // idb
void TKickback::TimerExpired(int, struct TPinballComponent*); // idb
int __thiscall TKickback::Message(TKickback* this, int, float); // idb
void __thiscall TKickback::Collision(TKickback* this, struct TBall*, struct vector_type*, struct vector_type*, float, struct TEdgeSegment*); // idb
TKickback* __thiscall TKickback::TKickback(TKickback* this, struct TPinballTable* a2, int a3);
+58 -58
View File
@@ -6,38 +6,38 @@ void __thiscall TKickout::Collision(TKickout *this, struct TBall *a2, struct vec
struct TPinballComponent *v6; // esi
v6 = this;
if ( !*(_DWORD *)((char *)this + 78) )
if ( !*(DWORD *)((char *)this + 78) )
{
*(_DWORD *)((char *)this + 102) = a2;
*(_DWORD *)((char *)this + 66) = 1315859240;
*(_DWORD *)((char *)this + 78) = 1;
*(_DWORD *)((char *)a2 + 106) = this;
*(_DWORD *)((char *)a2 + 42) = *(_DWORD *)((char *)this + 110);
*(_DWORD *)((char *)a2 + 46) = *(_DWORD *)((char *)this + 114);
*(_DWORD *)((char *)this + 126) = *(_DWORD *)((char *)a2 + 50);
*(_DWORD *)((char *)a2 + 50) = *(_DWORD *)((char *)this + 98);
if ( *(_DWORD *)(*(_DWORD *)((char *)this + 30) + 370) )
*(DWORD *)((char *)this + 102) = a2;
*(DWORD *)((char *)this + 66) = 1315859240;
*(DWORD *)((char *)this + 78) = 1;
*(DWORD *)((char *)a2 + 106) = this;
*(DWORD *)((char *)a2 + 42) = *(DWORD *)((char *)this + 110);
*(DWORD *)((char *)a2 + 46) = *(DWORD *)((char *)this + 114);
*(DWORD *)((char *)this + 126) = *(DWORD *)((char *)a2 + 50);
*(DWORD *)((char *)a2 + 50) = *(DWORD *)((char *)this + 98);
if ( *(DWORD *)(*(DWORD *)((char *)this + 30) + 370) )
{
(**(void (__thiscall ***)(TKickout *, signed int, _DWORD))this)(this, 55, 0.1);
(**(void (__thiscall ***)(TKickout *, signed int, DWORD))this)(this, 55, 0.1);
}
else
{
loader_play_sound(*(_DWORD *)((char *)this + 70));
loader_play_sound(*(DWORD *)((char *)this + 70));
control_handler(63, v6);
}
}
}
//----- (010167BE) --------------------------------------------------------
void __stdcall TKickout::ResetTimerExpired(int a1, void *a2)
void TKickout::ResetTimerExpired(int a1, void *a2)
{
if ( !*(_DWORD *)((char *)a2 + 82) )
if ( !*(DWORD *)((char *)a2 + 82) )
*((_BYTE *)a2 + 5) = 1;
*(_DWORD *)((char *)a2 + 86) = 0;
*(DWORD *)((char *)a2 + 86) = 0;
}
//----- (010167DD) --------------------------------------------------------
void __stdcall TKickout::TimerExpired(int a1, void *a2)
void TKickout::TimerExpired(int a1, void *a2)
{
double v2; // st7
float v3; // ST08_4
@@ -45,25 +45,25 @@ int v4; // eax
int v5; // ecx
int v6; // ST10_4
if ( *(_DWORD *)((char *)a2 + 78) )
if ( *(DWORD *)((char *)a2 + 78) )
{
v2 = *(float *)((char *)a2 + 94);
*(_DWORD *)((char *)a2 + 78) = 0;
*(DWORD *)((char *)a2 + 78) = 0;
v3 = v2;
*(_DWORD *)((char *)a2 + 86) = timer_set(v3, (int)a2, (int)TKickout::ResetTimerExpired);
v4 = *(_DWORD *)((char *)a2 + 102);
*(DWORD *)((char *)a2 + 86) = timer_set(v3, (int)a2, (int)TKickout::ResetTimerExpired);
v4 = *(DWORD *)((char *)a2 + 102);
if ( v4 )
{
v5 = *(_DWORD *)((char *)a2 + 126);
*(_DWORD *)((char *)a2 + 102) = 0;
*(_DWORD *)(v4 + 50) = v5;
v5 = *(DWORD *)((char *)a2 + 126);
*(DWORD *)((char *)a2 + 102) = 0;
*(DWORD *)(v4 + 50) = v5;
throw_ball(
(struct TBall *)v4,
(struct vector_type *)((char *)a2 + 130),
*(float *)((char *)a2 + 142),
*(float *)((char *)a2 + 146),
*(float *)((char *)a2 + 150));
v6 = *(_DWORD *)((char *)a2 + 74);
v6 = *(DWORD *)((char *)a2 + 74);
*((_BYTE *)a2 + 5) = 0;
loader_play_sound(v6);
}
@@ -80,7 +80,7 @@ float v7; // [esp+4h] [ebp-Ch]
float v8; // [esp+8h] [ebp-8h]
v3 = this;
if ( *(_DWORD *)((char *)this + 78) )
if ( *(DWORD *)((char *)this + 78) )
return 0;
v5 = *(float *)((char *)this + 110) - *(float *)((char *)a2 + 42);
v7 = v5;
@@ -102,11 +102,11 @@ TKickout *v3; // esi
v3 = this;
if ( a2 == 55 )
{
if ( *(_DWORD *)((char *)this + 78) )
if ( *(DWORD *)((char *)this + 78) )
{
if ( a3 < 0.0 )
a3 = *(float *)((char *)this + 90);
*(_DWORD *)((char *)this + 86) = timer_set(a3, (int)this, (int)TKickout::TimerExpired);
*(DWORD *)((char *)this + 86) = timer_set(a3, (int)this, (int)TKickout::TimerExpired);
}
}
else
@@ -115,14 +115,14 @@ if ( a2 != 1011 )
{
if ( a2 != 1024 )
return 0;
if ( *(_DWORD *)((char *)this + 78) )
if ( *(DWORD *)((char *)this + 78) )
{
if ( *(_DWORD *)((char *)this + 86) )
timer_kill(*(_DWORD *)((char *)this + 86));
if ( *(DWORD *)((char *)this + 86) )
timer_kill(*(DWORD *)((char *)this + 86));
TKickout::TimerExpired(0, (void *)v3);
}
}
if ( *(_DWORD *)((char *)v3 + 82) )
if ( *(DWORD *)((char *)v3 + 82) )
*((_BYTE *)v3 + 5) = 0;
}
return 0;
@@ -136,7 +136,7 @@ int result; // eax
if ( a2 >= 5 )
result = 0;
else
result = *(_DWORD *)((char *)this + 4 * a2 + 166);
result = *(DWORD *)((char *)this + 4 * a2 + 166);
return result;
}
@@ -144,7 +144,7 @@ return result;
void __thiscall TKickout::put_scoring(TKickout *this, int a2, int a3)
{
if ( a2 < 5 )
*(_DWORD *)((char *)this + 4 * a2 + 166) = a3;
*(DWORD *)((char *)this + 4 * a2 + 166) = a3;
}
//----- (01019884) --------------------------------------------------------
@@ -181,20 +181,20 @@ struct vector_type *v32; // [esp+78h] [ebp+10h]
v4 = this;
TCollisionComponent::TCollisionComponent(this, a2, a3, 0);
*(_DWORD *)v4 = &TKickout::vftable;
*(_DWORD *)((char *)v4 + 82) = a4 == 0;
*(DWORD *)v4 = &TKickout::vftable;
*(DWORD *)((char *)v4 + 82) = a4 == 0;
if ( !a4 )
*((_BYTE *)v4 + 5) = 0;
*(_DWORD *)((char *)v4 + 90) = 1069547520;
*(_DWORD *)((char *)v4 + 94) = 1028443341;
*(_DWORD *)((char *)v4 + 6) = 0;
*(_DWORD *)((char *)v4 + 86) = 0;
*(_DWORD *)((char *)v4 + 78) = 0;
*(DWORD *)((char *)v4 + 90) = 1069547520;
*(DWORD *)((char *)v4 + 94) = 1028443341;
*(DWORD *)((char *)v4 + 6) = 0;
*(DWORD *)((char *)v4 + 86) = 0;
*(DWORD *)((char *)v4 + 78) = 0;
v30 = *(float *)loader_query_float_attribute(a3, 0, 306);
*(_DWORD *)((char *)v4 + 106) = *(_DWORD *)loader_query_float_attribute(a3, 0, 305);
*(DWORD *)((char *)v4 + 106) = *(DWORD *)loader_query_float_attribute(a3, 0, 305);
loader_query_visual(a3, 0, &v15);
*(_DWORD *)((char *)v4 + 70) = v17;
*(_DWORD *)((char *)v4 + 74) = v24;
*(DWORD *)((char *)v4 + 70) = v17;
*(DWORD *)((char *)v4 + 74) = v24;
v5 = v16;
*(float *)((char *)v4 + 110) = *v16;
v6 = v5 + 2;
@@ -203,7 +203,7 @@ v7 = v30 * v5[2];
v32 = (struct vector_type *)v5;
*(float *)((char *)v4 + 122) = v7;
if ( 0.0 == v7 )
*(_DWORD *)((char *)v4 + 122) = 981668463;
*(DWORD *)((char *)v4 + 122) = 981668463;
v8 = (TCircle *)operator new(0x25u);
if ( v8 )
v31 = TCircle::TCircle(v8, v4, (char *)v4 + 5, v25, v32, *(float *)((char *)v4 + 122));
@@ -211,29 +211,29 @@ else
v31 = 0;
if ( v31 )
{
(*(void (**)(void))(*(_DWORD *)v31 + 8))();
(*(void (**)(void))(*(DWORD *)v31 + 8))();
objlist_class::Add((TKickout *)((char *)v4 + 42), (void *)v31);
}
*(float *)((char *)v4 + 122) = *v6 * *v6;
v9 = loader_query_float_attribute(a3, 0, 408);
v10 = v19 * 0.01;
*(_DWORD *)((char *)v4 + 98) = *(_DWORD *)(v9 + 8);
*(DWORD *)((char *)v4 + 98) = *(DWORD *)(v9 + 8);
v11 = v23;
*(float *)((char *)v4 + 150) = v10;
*(_DWORD *)((char *)v4 + 130) = v20;
*(_DWORD *)((char *)v4 + 134) = v21;
*(_DWORD *)((char *)v4 + 142) = v11;
*(DWORD *)((char *)v4 + 130) = v20;
*(DWORD *)((char *)v4 + 134) = v21;
*(DWORD *)((char *)v4 + 142) = v11;
v12 = v18;
*(_DWORD *)((char *)v4 + 138) = v22;
*(_DWORD *)((char *)v4 + 146) = v12;
v29 = *(_DWORD *)((char *)v4 + 122);
v26 = *(_DWORD *)((char *)v4 + 110);
v27 = *(_DWORD *)((char *)v4 + 114);
*(_DWORD *)((char *)v4 + 154) = (char *)v4 + 5;
*(DWORD *)((char *)v4 + 138) = v22;
*(DWORD *)((char *)v4 + 146) = v12;
v29 = *(DWORD *)((char *)v4 + 122);
v26 = *(DWORD *)((char *)v4 + 110);
v27 = *(DWORD *)((char *)v4 + 114);
*(DWORD *)((char *)v4 + 154) = (char *)v4 + 5;
v13 = v25;
v28 = *(_DWORD *)((char *)v4 + 118);
*(_DWORD *)((char *)v4 + 162) = v4;
*(_DWORD *)((char *)v4 + 158) = v13;
v28 = *(DWORD *)((char *)v4 + 118);
*(DWORD *)((char *)v4 + 162) = v4;
*(DWORD *)((char *)v4 + 158) = v13;
edges_insert_circle((struct circle_type *)&v26, 0, (TKickout *)((char *)v4 + 154));
return v4;
}
+2 -2
View File
@@ -11,8 +11,8 @@
struct TKickout;
void __thiscall TKickout::Collision(TKickout* this, struct TBall*, struct vector_type*, struct vector_type*, float, struct TEdgeSegment*); // idb
void __stdcall TKickout::ResetTimerExpired(int, void*); // idb
void __stdcall TKickout::TimerExpired(int, void*); // idb
void TKickout::ResetTimerExpired(int, void*); // idb
void TKickout::TimerExpired(int, void*); // idb
int __thiscall TKickout::FieldEffect(TKickout* this, struct TBall*, struct vector_type*); // idb
int __thiscall TKickout::Message(TKickout* this, int, float); // idb
int __thiscall TKickout::get_scoring(TKickout* this, int); // idb
+145 -145
View File
@@ -8,60 +8,60 @@
void __thiscall TLight::Reset(TLight *this)
{
TLight *v1; // esi
_DWORD *v2; // ST00_4
DWORD *v2; // ST00_4
int v3; // eax
v1 = this;
if ( *(_DWORD *)((char *)this + 110) )
timer_kill(*(_DWORD *)((char *)this + 110));
if ( *(_DWORD *)((char *)v1 + 114) )
timer_kill(*(_DWORD *)((char *)v1 + 114));
if ( *(_DWORD *)((char *)v1 + 82) )
if ( *(DWORD *)((char *)this + 110) )
timer_kill(*(DWORD *)((char *)this + 110));
if ( *(DWORD *)((char *)v1 + 114) )
timer_kill(*(DWORD *)((char *)v1 + 114));
if ( *(DWORD *)((char *)v1 + 82) )
flasher_stop((TLight *)((char *)v1 + 42), -1);
v2 = *(_DWORD **)((char *)v1 + 26);
v2 = *(DWORD **)((char *)v1 + 26);
*(float *)((char *)v1 + 122) = 1.0;
*(_DWORD *)((char *)v1 + 110) = 0;
*(_DWORD *)((char *)v1 + 114) = 0;
*(_DWORD *)((char *)v1 + 78) = 0;
*(_DWORD *)((char *)v1 + 98) = 0;
*(_DWORD *)((char *)v1 + 86) = 0;
*(_DWORD *)((char *)v1 + 90) = 0;
*(_DWORD *)((char *)v1 + 82) = 0;
*(_DWORD *)((char *)v1 + 94) = 0;
*(DWORD *)((char *)v1 + 110) = 0;
*(DWORD *)((char *)v1 + 114) = 0;
*(DWORD *)((char *)v1 + 78) = 0;
*(DWORD *)((char *)v1 + 98) = 0;
*(DWORD *)((char *)v1 + 86) = 0;
*(DWORD *)((char *)v1 + 90) = 0;
*(DWORD *)((char *)v1 + 82) = 0;
*(DWORD *)((char *)v1 + 94) = 0;
render_sprite_set_bitmap(v2, 0);
*(_DWORD *)((char *)v1 + 42) = *(_DWORD *)((char *)v1 + 26);
v3 = *(_DWORD *)((char *)v1 + 34);
*(_DWORD *)((char *)v1 + 46) = 0;
*(DWORD *)((char *)v1 + 42) = *(DWORD *)((char *)v1 + 26);
v3 = *(DWORD *)((char *)v1 + 34);
*(DWORD *)((char *)v1 + 46) = 0;
if ( v3 )
*(_DWORD *)((char *)v1 + 50) = *(_DWORD *)(*(_DWORD *)(v3 + 4) + 8);
*(_DWORD *)((char *)v1 + 58) = 0;
*(_DWORD *)((char *)v1 + 54) = 0;
*(_DWORD *)((char *)v1 + 6) = 0;
*(DWORD *)((char *)v1 + 50) = *(DWORD *)(*(DWORD *)(v3 + 4) + 8);
*(DWORD *)((char *)v1 + 58) = 0;
*(DWORD *)((char *)v1 + 54) = 0;
*(DWORD *)((char *)v1 + 6) = 0;
}
//----- (01009A2A) --------------------------------------------------------
void __stdcall TLight::TimerExpired(int a1, void *a2)
void TLight::TimerExpired(int a1, void *a2)
{
bool v2; // zf
void (__thiscall **v3)(void *, signed int, _DWORD); // eax
void (__thiscall **v3)(void *, signed int, DWORD); // eax
if ( *(_DWORD *)((char *)a2 + 82) )
if ( *(DWORD *)((char *)a2 + 82) )
flasher_stop((struct flasher_type *)((char *)a2 + 42), -1);
render_sprite_set_bitmap(
*(_DWORD **)((char *)a2 + 26),
*(_DWORD *)((char *)a2 + 4 * *(_DWORD *)((char *)a2 + 78) + 46));
v2 = *(_DWORD *)((char *)a2 + 94) == 0;
*(_DWORD *)((char *)a2 + 86) = 0;
*(_DWORD *)((char *)a2 + 90) = 0;
*(_DWORD *)((char *)a2 + 82) = 0;
*(_DWORD *)((char *)a2 + 110) = 0;
*(DWORD **)((char *)a2 + 26),
*(DWORD *)((char *)a2 + 4 * *(DWORD *)((char *)a2 + 78) + 46));
v2 = *(DWORD *)((char *)a2 + 94) == 0;
*(DWORD *)((char *)a2 + 86) = 0;
*(DWORD *)((char *)a2 + 90) = 0;
*(DWORD *)((char *)a2 + 82) = 0;
*(DWORD *)((char *)a2 + 110) = 0;
if ( !v2 )
{
v3 = *(void (__thiscall ***)(void *, signed int, _DWORD))a2;
*(_DWORD *)((char *)a2 + 94) = 0;
v3 = *(void (__thiscall ***)(void *, signed int, DWORD))a2;
*(DWORD *)((char *)a2 + 94) = 0;
(*v3)(a2, 20, 0.0);
}
if ( *(_DWORD *)((char *)a2 + 18) )
if ( *(DWORD *)((char *)a2 + 18) )
control_handler(60, (struct TPinballComponent *)a2);
}
@@ -71,13 +71,13 @@ void __thiscall TLight::schedule_timeout(TLight *this, float a2)
TLight *v2; // esi
v2 = this;
*(_DWORD *)((char *)this + 62) = *(_DWORD *)((char *)this + 102);
*(_DWORD *)((char *)this + 66) = *(_DWORD *)((char *)this + 106);
if ( *(_DWORD *)((char *)this + 110) )
timer_kill(*(_DWORD *)((char *)this + 110));
*(_DWORD *)((char *)v2 + 110) = 0;
*(DWORD *)((char *)this + 62) = *(DWORD *)((char *)this + 102);
*(DWORD *)((char *)this + 66) = *(DWORD *)((char *)this + 106);
if ( *(DWORD *)((char *)this + 110) )
timer_kill(*(DWORD *)((char *)this + 110));
*(DWORD *)((char *)v2 + 110) = 0;
if ( a2 > 0.0 )
*(_DWORD *)((char *)v2 + 110) = timer_set(a2, (int)v2, (int)TLight::TimerExpired);
*(DWORD *)((char *)v2 + 110) = timer_set(a2, (int)v2, (int)TLight::TimerExpired);
}
//----- (01009AE3) --------------------------------------------------------
@@ -101,7 +101,7 @@ char *v18; // eax
char *v19; // eax
float v20; // ST04_4
int v21; // ecx
_DWORD *v22; // eax
DWORD *v22; // eax
int v23; // [esp+1Ch] [ebp+Ch]
v3 = this;
@@ -109,45 +109,45 @@ if ( a2 > 1020 )
{
if ( a2 == 1024 )
{
(*(void (__thiscall **)(TLight *))(*(_DWORD *)this + 20))(this);
(*(void (__thiscall **)(TLight *))(*(DWORD *)this + 20))(this);
v21 = 0;
if ( *(_DWORD *)(*(_DWORD *)((char *)v3 + 30) + 214) > 0 )
if ( *(DWORD *)(*(DWORD *)((char *)v3 + 30) + 214) > 0 )
{
v22 = (_DWORD *)((char *)v3 + 146);
v22 = (DWORD *)((char *)v3 + 146);
do
{
*(v22 - 3) = *(_DWORD *)((char *)v3 + 82);
*v22 = *(_DWORD *)((char *)v3 + 98);
*(v22 - 4) = *(_DWORD *)((char *)v3 + 78);
*(v22 - 5) = *(_DWORD *)((char *)v3 + 6);
*(v22 - 3) = *(DWORD *)((char *)v3 + 82);
*v22 = *(DWORD *)((char *)v3 + 98);
*(v22 - 4) = *(DWORD *)((char *)v3 + 78);
*(v22 - 5) = *(DWORD *)((char *)v3 + 6);
++v21;
v22 += 6;
}
while ( v21 < *(_DWORD *)(*(_DWORD *)((char *)v3 + 30) + 214) );
while ( v21 < *(DWORD *)(*(DWORD *)((char *)v3 + 30) + 214) );
}
}
}
else if ( a2 == 1020 )
{
v18 = (char *)this + 24 * *(_DWORD *)(*(_DWORD *)((char *)this + 30) + 218);
*(_DWORD *)(v18 + 134) = *(_DWORD *)((char *)this + 82);
*(_DWORD *)(v18 + 146) = *(_DWORD *)((char *)this + 98);
*(_DWORD *)(v18 + 130) = *(_DWORD *)((char *)this + 78);
*(_DWORD *)(v18 + 126) = *(_DWORD *)((char *)this + 6);
(*(void (__thiscall **)(TLight *))(*(_DWORD *)this + 20))(this);
v18 = (char *)this + 24 * *(DWORD *)(*(DWORD *)((char *)this + 30) + 218);
*(DWORD *)(v18 + 134) = *(DWORD *)((char *)this + 82);
*(DWORD *)(v18 + 146) = *(DWORD *)((char *)this + 98);
*(DWORD *)(v18 + 130) = *(DWORD *)((char *)this + 78);
*(DWORD *)(v18 + 126) = *(DWORD *)((char *)this + 6);
(*(void (__thiscall **)(TLight *))(*(DWORD *)this + 20))(this);
v19 = (char *)v3 + 24 * (unsigned __int64)(signed __int64)_floor(a3);
*(_DWORD *)((char *)v3 + 82) = *(_DWORD *)(v19 + 134);
*(_DWORD *)((char *)v3 + 98) = *(_DWORD *)(v19 + 146);
*(_DWORD *)((char *)v3 + 78) = *(_DWORD *)(v19 + 130);
*(_DWORD *)((char *)v3 + 6) = *(_DWORD *)(v19 + 126);
if ( *(_DWORD *)((char *)v3 + 98) )
*(DWORD *)((char *)v3 + 82) = *(DWORD *)(v19 + 134);
*(DWORD *)((char *)v3 + 98) = *(DWORD *)(v19 + 146);
*(DWORD *)((char *)v3 + 78) = *(DWORD *)(v19 + 130);
*(DWORD *)((char *)v3 + 6) = *(DWORD *)(v19 + 126);
if ( *(DWORD *)((char *)v3 + 98) )
{
v20 = (double)*(signed int *)((char *)v3 + 98);
TLight::Message(v3, 11, v20);
}
if ( *(_DWORD *)((char *)v3 + 78) )
if ( *(DWORD *)((char *)v3 + 78) )
TLight::Message(v3, 1, 0.0);
if ( *(_DWORD *)((char *)v3 + 82) )
if ( *(DWORD *)((char *)v3 + 82) )
TLight::Message(v3, 4, 0.0);
}
else
@@ -155,30 +155,30 @@ else
switch ( a2 )
{
case 0:
v4 = *(_DWORD *)((char *)this + 82) == 0;
*(_DWORD *)((char *)this + 78) = 0;
if ( v4 && !*(_DWORD *)((char *)this + 86) && !*(_DWORD *)((char *)this + 90) )
render_sprite_set_bitmap(*(_DWORD **)((char *)this + 26), *(_DWORD *)((char *)this + 46));
v4 = *(DWORD *)((char *)this + 82) == 0;
*(DWORD *)((char *)this + 78) = 0;
if ( v4 && !*(DWORD *)((char *)this + 86) && !*(DWORD *)((char *)this + 90) )
render_sprite_set_bitmap(*(DWORD **)((char *)this + 26), *(DWORD *)((char *)this + 46));
return 0;
case 1:
v4 = *(_DWORD *)((char *)this + 82) == 0;
*(_DWORD *)((char *)this + 78) = 1;
if ( v4 && !*(_DWORD *)((char *)this + 86) && !*(_DWORD *)((char *)this + 90) )
render_sprite_set_bitmap(*(_DWORD **)((char *)this + 26), *(_DWORD *)((char *)this + 50));
v4 = *(DWORD *)((char *)this + 82) == 0;
*(DWORD *)((char *)this + 78) = 1;
if ( v4 && !*(DWORD *)((char *)this + 86) && !*(DWORD *)((char *)this + 90) )
render_sprite_set_bitmap(*(DWORD **)((char *)this + 26), *(DWORD *)((char *)this + 50));
return 0;
case 2:
return *(_DWORD *)((char *)v3 + 78);
return *(DWORD *)((char *)v3 + 78);
case 3:
return *(_DWORD *)((char *)this + 82);
return *(DWORD *)((char *)this + 82);
case 4:
TLight::schedule_timeout(this, 0.0);
if ( !*(_DWORD *)((char *)v3 + 82) || !*(_DWORD *)((char *)v3 + 70) )
if ( !*(DWORD *)((char *)v3 + 82) || !*(DWORD *)((char *)v3 + 70) )
{
v5 = *(_DWORD *)((char *)v3 + 78);
*(_DWORD *)((char *)v3 + 82) = 1;
*(_DWORD *)((char *)v3 + 90) = 0;
*(_DWORD *)((char *)v3 + 86) = 0;
*(_DWORD *)((char *)v3 + 94) = 0;
v5 = *(DWORD *)((char *)v3 + 78);
*(DWORD *)((char *)v3 + 82) = 1;
*(DWORD *)((char *)v3 + 90) = 0;
*(DWORD *)((char *)v3 + 86) = 0;
*(DWORD *)((char *)v3 + 94) = 0;
flasher_start((TLight *)((char *)v3 + 42), v5);
}
return 0;
@@ -187,88 +187,88 @@ case 5:
*(float *)((char *)this + 66) = a3 * *(float *)((char *)this + 106);
return 0;
case 6:
*(_DWORD *)((char *)this + 62) = *(_DWORD *)((char *)this + 102);
*(_DWORD *)((char *)this + 66) = *(_DWORD *)((char *)this + 106);
*(DWORD *)((char *)this + 62) = *(DWORD *)((char *)this + 102);
*(DWORD *)((char *)this + 66) = *(DWORD *)((char *)this + 106);
return 0;
case 7:
if ( !*(_DWORD *)((char *)this + 82) )
flasher_start((TLight *)((char *)this + 42), *(_DWORD *)((char *)this + 78));
*(_DWORD *)((char *)v3 + 82) = 1;
*(_DWORD *)((char *)v3 + 90) = 0;
*(_DWORD *)((char *)v3 + 94) = 0;
if ( !*(DWORD *)((char *)this + 82) )
flasher_start((TLight *)((char *)this + 42), *(DWORD *)((char *)this + 78));
*(DWORD *)((char *)v3 + 82) = 1;
*(DWORD *)((char *)v3 + 90) = 0;
*(DWORD *)((char *)v3 + 94) = 0;
goto LABEL_28;
case 8:
if ( !*(_DWORD *)((char *)this + 86) )
if ( !*(DWORD *)((char *)this + 86) )
{
if ( *(_DWORD *)((char *)this + 82) )
if ( *(DWORD *)((char *)this + 82) )
{
flasher_stop((TLight *)((char *)this + 42), 0);
*(_DWORD *)((char *)v3 + 82) = 0;
*(DWORD *)((char *)v3 + 82) = 0;
}
else
{
render_sprite_set_bitmap(*(_DWORD **)((char *)this + 26), *(_DWORD *)((char *)this + 46));
render_sprite_set_bitmap(*(DWORD **)((char *)this + 26), *(DWORD *)((char *)this + 46));
}
*(_DWORD *)((char *)v3 + 86) = 1;
*(_DWORD *)((char *)v3 + 90) = 0;
*(DWORD *)((char *)v3 + 86) = 1;
*(DWORD *)((char *)v3 + 90) = 0;
}
goto LABEL_29;
case 9:
if ( !*(_DWORD *)((char *)this + 90) )
if ( !*(DWORD *)((char *)this + 90) )
{
if ( *(_DWORD *)((char *)this + 82) )
if ( *(DWORD *)((char *)this + 82) )
{
flasher_stop((TLight *)((char *)this + 42), 1);
*(_DWORD *)((char *)v3 + 82) = 0;
*(DWORD *)((char *)v3 + 82) = 0;
}
else
{
render_sprite_set_bitmap(*(_DWORD **)((char *)this + 26), *(_DWORD *)((char *)this + 50));
render_sprite_set_bitmap(*(DWORD **)((char *)this + 26), *(DWORD *)((char *)this + 50));
}
*(_DWORD *)((char *)v3 + 90) = 1;
*(DWORD *)((char *)v3 + 90) = 1;
LABEL_28:
*(_DWORD *)((char *)v3 + 86) = 0;
*(DWORD *)((char *)v3 + 86) = 0;
}
LABEL_29:
TLight::schedule_timeout(v3, a3);
return 0;
case 11:
v7 = (signed __int64)_floor(a3);
v8 = *(_DWORD *)((char *)v3 + 34);
*(_DWORD *)((char *)v3 + 98) = v7;
v9 = *(_DWORD *)(*(_DWORD *)(v8 + 4) + 4);
v8 = *(DWORD *)((char *)v3 + 34);
*(DWORD *)((char *)v3 + 98) = v7;
v9 = *(DWORD *)(*(DWORD *)(v8 + 4) + 4);
if ( (signed int)v7 > v9 )
*(_DWORD *)((char *)v3 + 98) = v9;
*(DWORD *)((char *)v3 + 98) = v9;
v10 = 0;
if ( *(_DWORD *)((char *)v3 + 98) < 0 )
*(_DWORD *)((char *)v3 + 98) = 0;
v4 = *(_DWORD *)((char *)v3 + 82) == 0;
v11 = *(_DWORD *)((char *)v3 + 98);
*(_DWORD *)((char *)v3 + 46) = 0;
*(_DWORD *)((char *)v3 + 50) = *(_DWORD *)(*(_DWORD *)(v8 + 4) + 4 * v11 + 8);
if ( *(DWORD *)((char *)v3 + 98) < 0 )
*(DWORD *)((char *)v3 + 98) = 0;
v4 = *(DWORD *)((char *)v3 + 82) == 0;
v11 = *(DWORD *)((char *)v3 + 98);
*(DWORD *)((char *)v3 + 46) = 0;
*(DWORD *)((char *)v3 + 50) = *(DWORD *)(*(DWORD *)(v8 + 4) + 4 * v11 + 8);
if ( v4 )
{
if ( !*(_DWORD *)((char *)v3 + 86) )
if ( !*(DWORD *)((char *)v3 + 86) )
{
if ( *(_DWORD *)((char *)v3 + 90) )
if ( *(DWORD *)((char *)v3 + 90) )
v10 = 1;
else
v10 = *(_DWORD *)((char *)v3 + 78);
v10 = *(DWORD *)((char *)v3 + 78);
}
}
else
{
v10 = *(_DWORD *)((char *)v3 + 74);
v10 = *(DWORD *)((char *)v3 + 74);
}
render_sprite_set_bitmap(*(_DWORD **)((char *)v3 + 26), *(_DWORD *)((char *)v3 + 4 * v10 + 46));
render_sprite_set_bitmap(*(DWORD **)((char *)v3 + 26), *(DWORD *)((char *)v3 + 4 * v10 + 46));
return 0;
case 12:
v23 = *(_DWORD *)((char *)this + 98) + 1;
if ( v23 > *(_DWORD *)(*(_DWORD *)(*(_DWORD *)((char *)this + 34) + 4) + 4) )
v23 = *(_DWORD *)(*(_DWORD *)(*(_DWORD *)((char *)this + 34) + 4) + 4);
v23 = *(DWORD *)((char *)this + 98) + 1;
if ( v23 > *(DWORD *)(*(DWORD *)(*(DWORD *)((char *)this + 34) + 4) + 4) )
v23 = *(DWORD *)(*(DWORD *)(*(DWORD *)((char *)this + 34) + 4) + 4);
goto LABEL_32;
case 13:
v23 = *(_DWORD *)((char *)this + 98) - 1;
v23 = *(DWORD *)((char *)this + 98) - 1;
if ( v23 < 0 )
v23 = 0;
LABEL_32:
@@ -276,42 +276,42 @@ LABEL_32:
TLight::Message(this, 11, v6);
return 0;
case 14:
if ( *(_DWORD *)((char *)this + 110) )
timer_kill(*(_DWORD *)((char *)this + 110));
v4 = *(_DWORD *)((char *)v3 + 82) == 0;
*(_DWORD *)((char *)v3 + 110) = 0;
if ( *(DWORD *)((char *)this + 110) )
timer_kill(*(DWORD *)((char *)this + 110));
v4 = *(DWORD *)((char *)v3 + 82) == 0;
*(DWORD *)((char *)v3 + 110) = 0;
if ( !v4 )
flasher_stop((TLight *)((char *)v3 + 42), -1);
v12 = *(_DWORD *)((char *)v3 + 78);
*(_DWORD *)((char *)v3 + 82) = 0;
*(_DWORD *)((char *)v3 + 86) = 0;
*(_DWORD *)((char *)v3 + 90) = 0;
render_sprite_set_bitmap(*(_DWORD **)((char *)v3 + 26), *(_DWORD *)((char *)v3 + 4 * v12 + 46));
v12 = *(DWORD *)((char *)v3 + 78);
*(DWORD *)((char *)v3 + 82) = 0;
*(DWORD *)((char *)v3 + 86) = 0;
*(DWORD *)((char *)v3 + 90) = 0;
render_sprite_set_bitmap(*(DWORD **)((char *)v3 + 26), *(DWORD *)((char *)v3 + 4 * v12 + 46));
return 0;
case 15:
v13 = *(_DWORD *)((char *)this + 114);
*(_DWORD *)((char *)this + 94) = 0;
v13 = *(DWORD *)((char *)this + 114);
*(DWORD *)((char *)this + 94) = 0;
if ( v13 )
timer_kill(v13);
*(_DWORD *)((char *)v3 + 114) = 0;
*(DWORD *)((char *)v3 + 114) = 0;
TLight::Message(v3, 1, 0.0);
TLight::Message(v3, 7, a3);
return 0;
case 16:
if ( *(_DWORD *)((char *)this + 114) )
timer_kill(*(_DWORD *)((char *)this + 114));
*(_DWORD *)((char *)v3 + 114) = 0;
if ( *(DWORD *)((char *)this + 114) )
timer_kill(*(DWORD *)((char *)this + 114));
*(DWORD *)((char *)v3 + 114) = 0;
TLight::Message(v3, 7, a3);
*(_DWORD *)((char *)v3 + 94) = 1;
*(DWORD *)((char *)v3 + 94) = 1;
return 0;
case 17:
v17 = (signed __int64)_floor(a3);
TLight::Message(v3, v17 != 0, 0.0);
return *(_DWORD *)((char *)v3 + 78);
return *(DWORD *)((char *)v3 + 78);
case 18:
TLight::Message(this, 17, a3);
TLight::Message(v3, 14, 0.0);
return *(_DWORD *)((char *)v3 + 78);
return *(DWORD *)((char *)v3 + 78);
case 19:
TLight::Message(this, 1, 0.0);
goto LABEL_62;
@@ -321,15 +321,15 @@ LABEL_62:
TLight::Message(v3, 14, 0.0);
return 0;
case 21:
v15 = (double)(*(_DWORD *)((char *)this + 78) == 0);
v15 = (double)(*(DWORD *)((char *)this + 78) == 0);
TLight::Message(this, 17, v15);
return *(_DWORD *)((char *)v3 + 78);
return *(DWORD *)((char *)v3 + 78);
case 22:
v16 = (double)(*(_DWORD *)((char *)this + 78) == 0);
v16 = (double)(*(DWORD *)((char *)this + 78) == 0);
TLight::Message(this, 18, v16);
return *(_DWORD *)((char *)v3 + 78);
return *(DWORD *)((char *)v3 + 78);
case 23:
*(_DWORD *)((char *)this + 6) = (signed __int64)_floor(a3);
*(DWORD *)((char *)this + 6) = (signed __int64)_floor(a3);
break;
default:
return 0;
@@ -349,11 +349,11 @@ double v7; // st7
v3 = this;
TPinballComponent::TPinballComponent(this, a2, a3, 1);
*(_DWORD *)v3 = &TLight::vftable;
*(_DWORD *)((char *)v3 + 110) = 0;
*(_DWORD *)((char *)v3 + 82) = 0;
*(_DWORD *)((char *)v3 + 114) = 0;
*(_DWORD *)((char *)v3 + 70) = 0;
*(DWORD *)v3 = &TLight::vftable;
*(DWORD *)((char *)v3 + 110) = 0;
*(DWORD *)((char *)v3 + 82) = 0;
*(DWORD *)((char *)v3 + 114) = 0;
*(DWORD *)((char *)v3 + 70) = 0;
TLight::Reset(v3);
v4 = (float *)loader_query_float_attribute(a3, 0, 900);
v5 = *v4;
+1 -1
View File
@@ -11,7 +11,7 @@
struct TLight;
void __thiscall TLight::Reset(TLight* __hidden this); // idb
void __stdcall TLight::TimerExpired(int, void*); // idb
void TLight::TimerExpired(int, void*); // idb
void __thiscall TLight::schedule_timeout(TLight* this, float); // idb
int __thiscall TLight::Message(TLight* this, int, float); // idb
TLight* __thiscall TLight::TLight(TLight* this, struct TPinballTable* a2, int a3);
+42 -42
View File
@@ -10,8 +10,8 @@ TZmapList *__thiscall TLightBargraph::~TLightBargraph(TLightBargraph *this)
int v2; // eax
v1 = this;
v2 = *(_DWORD *)((char *)this + 138);
*(_DWORD *)this = &TLightBargraph::vftable;
v2 = *(DWORD *)((char *)this + 138);
*(DWORD *)this = &TLightBargraph::vftable;
if ( v2 )
memoryfree(v2);
return TLightGroup::~TLightGroup(v1);
@@ -22,36 +22,36 @@ TZmapList *__thiscall TLightBargraph::~TLightBargraph(TLightBargraph *this)
void __thiscall TLightBargraph::Reset(TLightBargraph *this)
{
TLightBargraph *v1; // edi
_DWORD *v2; // esi
DWORD *v2; // esi
v1 = this;
v2 = (_DWORD *)((char *)this + 142);
if ( *(_DWORD *)((char *)this + 142) )
v2 = (DWORD *)((char *)this + 142);
if ( *(DWORD *)((char *)this + 142) )
{
timer_kill(*(_DWORD *)((char *)this + 142));
timer_kill(*(DWORD *)((char *)this + 142));
*v2 = 0;
}
*(_DWORD *)((char *)v1 + 146) = 0;
*(DWORD *)((char *)v1 + 146) = 0;
TLightGroup::Reset(v1);
}
//----- (0100AAD9) --------------------------------------------------------
void __stdcall TLightBargraph::BargraphTimerExpired(int a1, void *a2)
void TLightBargraph::BargraphTimerExpired(int a1, void *a2)
{
int v2; // eax
float v3; // ST04_4
v2 = *(_DWORD *)((char *)a2 + 146);
*(_DWORD *)((char *)a2 + 142) = 0;
v2 = *(DWORD *)((char *)a2 + 146);
*(DWORD *)((char *)a2 + 142) = 0;
if ( v2 )
{
v3 = (double)(v2 - 1);
(**(void (__thiscall ***)(void *, signed int, _DWORD))a2)(a2, 45, LODWORD(v3));
(**(void (__thiscall ***)(void *, signed int, DWORD))a2)(a2, 45, LODWORD(v3));
control_handler(60, (struct TPinballComponent *)a2);
}
else
{
(**(void (__thiscall ***)(void *, signed int, _DWORD))a2)(a2, 20, 0.0);
(**(void (__thiscall ***)(void *, signed int, DWORD))a2)(a2, 20, 0.0);
control_handler(47, (struct TPinballComponent *)a2);
}
}
@@ -61,8 +61,8 @@ int __thiscall TLightBargraph::Message(TLightBargraph *this, int a2, float a3)
{
TLightBargraph *v3; // esi
int v4; // ecx
_DWORD *v5; // eax
_DWORD *v6; // edi
DWORD *v5; // eax
DWORD *v6; // edi
float v7; // ST0C_4
int v8; // ebx
int v9; // eax
@@ -74,15 +74,15 @@ v3 = this;
switch ( a2 )
{
case 37:
return *(_DWORD *)((char *)this + 146);
return *(DWORD *)((char *)this + 146);
case 45:
if ( *(_DWORD *)((char *)this + 142) )
if ( *(DWORD *)((char *)this + 142) )
{
timer_kill(*(_DWORD *)((char *)this + 142));
*(_DWORD *)((char *)v3 + 142) = 0;
timer_kill(*(DWORD *)((char *)this + 142));
*(DWORD *)((char *)v3 + 142) = 0;
}
v8 = (signed __int64)_floor(a3);
v9 = 2 * *(_DWORD *)(*(_DWORD *)((char *)v3 + 46) + 4);
v9 = 2 * *(DWORD *)(*(DWORD *)((char *)v3 + 46) + 4);
if ( v8 >= v9 )
v8 = v9 - 1;
if ( v8 >= 0 )
@@ -91,34 +91,34 @@ v10 = (double)(v8 / 2);
TLightGroup::Message(v3, 45, v10);
if ( !(v8 & 1) )
TLightGroup::Message(v3, 46, 0.0);
v11 = *(_DWORD *)((char *)v3 + 138);
v11 = *(DWORD *)((char *)v3 + 138);
if ( v11 )
*(_DWORD *)((char *)v3 + 142) = timer_set(
*(DWORD *)((char *)v3 + 142) = timer_set(
*(float *)(v11 + 4 * v8),
(int)v3,
(int)TLightBargraph::BargraphTimerExpired);
*(_DWORD *)((char *)v3 + 146) = v8;
*(DWORD *)((char *)v3 + 146) = v8;
}
else
{
TLightGroup::Message(v3, 20, 0.0);
*(_DWORD *)((char *)v3 + 146) = 0;
*(DWORD *)((char *)v3 + 146) = 0;
}
break;
case 1011:
(*(void (**)(void))(*(_DWORD *)this + 20))();
(*(void (**)(void))(*(DWORD *)this + 20))();
break;
case 1020:
v6 = (_DWORD *)((char *)this + 142);
if ( *(_DWORD *)((char *)this + 142) )
v6 = (DWORD *)((char *)this + 142);
if ( *(DWORD *)((char *)this + 142) )
{
timer_kill(*(_DWORD *)((char *)this + 142));
timer_kill(*(DWORD *)((char *)this + 142));
*v6 = 0;
}
*(_DWORD *)((char *)v3 + 4 * *(_DWORD *)(*(_DWORD *)((char *)v3 + 30) + 218) + 150) = *(_DWORD *)((char *)v3 + 146);
(*(void (__thiscall **)(TLightBargraph *))(*(_DWORD *)v3 + 20))(v3);
v13 = *(_DWORD *)((char *)v3 + 4 * (unsigned __int64)(signed __int64)_floor(a3) + 150);
*(_DWORD *)((char *)v3 + 146) = v13;
*(DWORD *)((char *)v3 + 4 * *(DWORD *)(*(DWORD *)((char *)v3 + 30) + 218) + 150) = *(DWORD *)((char *)v3 + 146);
(*(void (__thiscall **)(TLightBargraph *))(*(DWORD *)v3 + 20))(v3);
v13 = *(DWORD *)((char *)v3 + 4 * (unsigned __int64)(signed __int64)_floor(a3) + 150);
*(DWORD *)((char *)v3 + 146) = v13;
if ( v13 )
{
v7 = (double)v13;
@@ -126,18 +126,18 @@ TLightBargraph::Message(v3, 45, v7);
}
break;
case 1024:
(*(void (**)(void))(*(_DWORD *)this + 20))();
(*(void (**)(void))(*(DWORD *)this + 20))();
v4 = 0;
if ( *(_DWORD *)(*(_DWORD *)((char *)v3 + 30) + 214) > 0 )
if ( *(DWORD *)(*(DWORD *)((char *)v3 + 30) + 214) > 0 )
{
v5 = (_DWORD *)((char *)v3 + 150);
v5 = (DWORD *)((char *)v3 + 150);
do
{
*v5 = *(_DWORD *)((char *)v3 + 146);
*v5 = *(DWORD *)((char *)v3 + 146);
++v4;
++v5;
}
while ( v4 < *(_DWORD *)(*(_DWORD *)((char *)v3 + 30) + 214) );
while ( v4 < *(DWORD *)(*(DWORD *)((char *)v3 + 30) + 214) );
}
TLightGroup::Message(v3, 1024, a3);
break;
@@ -159,21 +159,21 @@ int i; // eax
v3 = this;
TLightGroup::TLightGroup(this, a2, a3);
*(_DWORD *)v3 = &TLightBargraph::vftable;
*(_DWORD *)((char *)v3 + 138) = 0;
*(DWORD *)v3 = &TLightBargraph::vftable;
*(DWORD *)((char *)v3 + 138) = 0;
TLightBargraph::Reset(v3);
if ( a3 > 0 )
{
v4 = (float *)loader_query_float_attribute(a3, 0, 904);
if ( v4 )
{
v5 = 2 * *(_DWORD *)(*(_DWORD *)((char *)v3 + 46) + 4);
v6 = memoryallocate(8 * *(_DWORD *)(*(_DWORD *)((char *)v3 + 46) + 4));
*(_DWORD *)((char *)v3 + 138) = v6;
v5 = 2 * *(DWORD *)(*(DWORD *)((char *)v3 + 46) + 4);
v6 = memoryallocate(8 * *(DWORD *)(*(DWORD *)((char *)v3 + 46) + 4));
*(DWORD *)((char *)v3 + 138) = v6;
if ( v6 )
{
for ( i = 0; i < v5; ++v4 )
*(float *)(*(_DWORD *)((char *)v3 + 138) + 4 * i++) = *v4;
*(float *)(*(DWORD *)((char *)v3 + 138) + 4 * i++) = *v4;
}
}
}
+1 -1
View File
@@ -12,7 +12,7 @@ struct TLightBargraph;
TZmapList* __thiscall TLightBargraph::~TLightBargraph(TLightBargraph* this);
void __thiscall TLightBargraph::Reset(TLightBargraph* this); // idb
void __stdcall TLightBargraph::BargraphTimerExpired(int, void*); // idb
void TLightBargraph::BargraphTimerExpired(int, void*); // idb
int __thiscall TLightBargraph::Message(TLightBargraph* this, int, float); // idb
TLightBargraph* __thiscall TLightBargraph::TLightBargraph(TLightBargraph* this, struct TPinballTable* a2, int a3);
TLightBargraph* __thiscall TLightBargraph::`vector deleting destructor'(TLightBargraph *this, char a2);
+19 -19
View File
@@ -1,10 +1,10 @@
#include "TLightRollover.h"
//----- (010164D1) --------------------------------------------------------
void __stdcall TLightRollover::delay_expired(int a1, void *a2)
void TLightRollover::delay_expired(int a1, void *a2)
{
render_sprite_set_bitmap(*(_DWORD **)((char *)a2 + 26), 0);
*(_DWORD *)((char *)a2 + 91) = 0;
render_sprite_set_bitmap(*(DWORD **)((char *)a2 + 26), 0);
*(DWORD *)((char *)a2 + 91) = 0;
}
//----- (010164F2) --------------------------------------------------------
@@ -19,10 +19,10 @@ int v10; // eax
v6 = this;
*(float *)((char *)a2 + 42) = *(float *)a3;
v7 = *(float *)((char *)a2 + 70);
*(_DWORD *)((char *)a2 + 46) = *((_DWORD *)a3 + 1);
*(DWORD *)((char *)a2 + 46) = *((DWORD *)a3 + 1);
*(float *)((char *)a2 + 70) = v7 - a5;
TBall::not_again(a2, a6);
if ( !*(_DWORD *)(*(_DWORD *)((char *)v6 + 30) + 370) )
if ( !*(DWORD *)(*(DWORD *)((char *)v6 + 30) + 370) )
{
if ( *((_BYTE *)v6 + 78) )
{
@@ -30,22 +30,22 @@ timer_set(0.1, (int)v6, (int)TRollover::TimerExpired);
v8 = *((_BYTE *)v6 + 78) == 0;
*((_BYTE *)v6 + 5) = 0;
v9 = v8;
v8 = *(_DWORD *)((char *)v6 + 91) == 0;
v8 = *(DWORD *)((char *)v6 + 91) == 0;
*((_BYTE *)v6 + 78) = v9;
if ( v8 )
*(_DWORD *)((char *)v6 + 91) = timer_set(
*(DWORD *)((char *)v6 + 91) = timer_set(
*(float *)((char *)v6 + 87),
(int)v6,
(int)TLightRollover::delay_expired);
}
else
{
loader_play_sound(*(_DWORD *)((char *)v6 + 70));
loader_play_sound(*(DWORD *)((char *)v6 + 70));
control_handler(63, v6);
*((_BYTE *)v6 + 78) = *((_BYTE *)v6 + 78) == 0;
v10 = *(_DWORD *)((char *)v6 + 34);
v10 = *(DWORD *)((char *)v6 + 34);
if ( v10 )
render_sprite_set_bitmap(*(_DWORD **)((char *)v6 + 26), *(_DWORD *)(*(_DWORD *)(v10 + 4) + 8));
render_sprite_set_bitmap(*(DWORD **)((char *)v6 + 26), *(DWORD *)(*(DWORD *)(v10 + 4) + 8));
}
}
}
@@ -59,14 +59,14 @@ int v4; // eax
v3 = this;
if ( a2 == 1024 )
{
v4 = *(_DWORD *)((char *)this + 91);
v4 = *(DWORD *)((char *)this + 91);
*((_BYTE *)this + 5) = 1;
*((_BYTE *)this + 78) = 0;
if ( v4 )
timer_kill(v4);
*(_DWORD *)((char *)v3 + 91) = 0;
if ( *(_DWORD *)((char *)v3 + 34) )
render_sprite_set_bitmap(*(_DWORD **)((char *)v3 + 26), 0);
*(DWORD *)((char *)v3 + 91) = 0;
if ( *(DWORD *)((char *)v3 + 34) )
render_sprite_set_bitmap(*(DWORD **)((char *)v3 + 26), 0);
}
return 0;
}
@@ -79,14 +79,14 @@ bool v4; // zf
v3 = this;
TRollover::TRollover(this, a2, a3, 0);
v4 = *(_DWORD *)((char *)v3 + 34) == 0;
*(_DWORD *)v3 = &TLightRollover::vftable;
v4 = *(DWORD *)((char *)v3 + 34) == 0;
*(DWORD *)v3 = &TLightRollover::vftable;
*((_BYTE *)v3 + 78) = 0;
*(_DWORD *)((char *)v3 + 91) = 0;
*(DWORD *)((char *)v3 + 91) = 0;
if ( !v4 )
render_sprite_set_bitmap(*(_DWORD **)((char *)v3 + 26), 0);
render_sprite_set_bitmap(*(DWORD **)((char *)v3 + 26), 0);
TRollover::build_walls(v3, a3);
*(_DWORD *)((char *)v3 + 87) = *(_DWORD *)loader_query_float_attribute(a3, 0, 407);
*(DWORD *)((char *)v3 + 87) = *(DWORD *)loader_query_float_attribute(a3, 0, 407);
return v3;
}
// 1002630: using guessed type void *TLightRollover::vftable;
+1 -1
View File
@@ -10,7 +10,7 @@
/* 109 */
struct TLightRollover;
void __stdcall TLightRollover::delay_expired(int, void*); // idb
void TLightRollover::delay_expired(int, void*); // idb
void __thiscall TLightRollover::Collision(TLightRollover* this, struct TBall*, struct vector_type*, struct vector_type*, float, struct TEdgeSegment*); // idb
int __thiscall TLightRollover::Message(TLightRollover* this, int, float); // idb
TLightRollover* __thiscall TLightRollover::TLightRollover(TLightRollover* this, struct TPinballTable* a2, int a3);
+6 -6
View File
@@ -11,7 +11,7 @@ TEdgeSegment::TEdgeSegment(this, a2, a3, a4);
*(float *)((char *)v8 + 73) = a6;
*(float *)((char *)v8 + 77) = a7;
*(float *)((char *)v8 + 81) = a8;
*(_DWORD *)v8 = &TLine::vftable;
*(DWORD *)v8 = &TLine::vftable;
line_init((int)v8 + 21, a5, a6, a7, a8);
return v8;
}
@@ -32,10 +32,10 @@ float v8; // ST10_4
v6 = this;
TEdgeSegment::TEdgeSegment(this, a2, a3, a4);
*(_DWORD *)v6 = &TLine::vftable;
*(_DWORD *)((char *)v6 + 69) = *(_DWORD *)a5;
*(_DWORD *)((char *)v6 + 73) = *((_DWORD *)a5 + 1);
*(_DWORD *)((char *)v6 + 77) = *(_DWORD *)a6;
*(DWORD *)v6 = &TLine::vftable;
*(DWORD *)((char *)v6 + 69) = *(DWORD *)a5;
*(DWORD *)((char *)v6 + 73) = *((DWORD *)a5 + 1);
*(DWORD *)((char *)v6 + 77) = *(DWORD *)a6;
v7 = *((float *)a6 + 1);
*(float *)((char *)v6 + 81) = *((float *)a6 + 1);
v8 = v7;
@@ -47,7 +47,7 @@ return v6;
//----- (0101C7E6) --------------------------------------------------------
void __thiscall TLine::EdgeCollision(TLine *this, struct TBall *a2, float a3)
{
(*(void (__stdcall **)(struct TBall *, char *, char *, _DWORD, TLine *))(**((_DWORD **)this + 1) + 20))(
(*(void (**)(struct TBall *, char *, char *, DWORD, TLine *))(**((DWORD **)this + 1) + 20))(
a2,
(char *)this + 57,
(char *)this + 21,
+14 -14
View File
@@ -8,7 +8,7 @@ int result; // eax
if ( a2 >= 6 )
result = 0;
else
result = *(_DWORD *)((char *)this + 4 * a2 + 86);
result = *(DWORD *)((char *)this + 4 * a2 + 86);
return result;
}
@@ -16,7 +16,7 @@ return result;
void __thiscall TOneway::put_scoring(TOneway *this, int a2, int a3)
{
if ( a2 < 6 )
*(_DWORD *)((char *)this + 4 * a2 + 86) = a3;
*(DWORD *)((char *)this + 4 * a2 + 86) = a3;
}
//----- (01018032) --------------------------------------------------------
@@ -32,18 +32,18 @@ if ( a6 == *(struct TEdgeSegment **)((char *)this + 82) )
{
TBall::not_again(a2, a6);
v8 = *(float *)((char *)a2 + 70) - a5;
*(_DWORD *)((char *)a2 + 42) = *(_DWORD *)a3;
v9 = *((_DWORD *)a3 + 1);
*(DWORD *)((char *)a2 + 42) = *(DWORD *)a3;
v9 = *((DWORD *)a3 + 1);
*(float *)((char *)a2 + 70) = v8;
*(_DWORD *)((char *)a2 + 46) = v9;
if ( !*(_DWORD *)(*(_DWORD *)((char *)v6 + 30) + 370) )
*(DWORD *)((char *)a2 + 46) = v9;
if ( !*(DWORD *)(*(DWORD *)((char *)v6 + 30) + 370) )
{
if ( *(_DWORD *)((char *)v6 + 74) )
loader_play_sound(*(_DWORD *)((char *)v6 + 74));
if ( *(DWORD *)((char *)v6 + 74) )
loader_play_sound(*(DWORD *)((char *)v6 + 74));
control_handler(63, v6);
}
}
else if ( *(_DWORD *)(*(_DWORD *)((char *)this + 30) + 370) )
else if ( *(DWORD *)(*(DWORD *)((char *)this + 30) + 370) )
{
basic_collision(a2, a3, a4, *(float *)((char *)this + 54), *(float *)((char *)this + 58), 1000000000.0, 0.0);
}
@@ -56,7 +56,7 @@ a4,
*(float *)((char *)this + 66),
*(float *)((char *)this + 62)) > 0.2 )
{
v7 = *(_DWORD *)((char *)v6 + 70);
v7 = *(DWORD *)((char *)v6 + 70);
if ( v7 )
loader_play_sound(v7);
}
@@ -83,7 +83,7 @@ int v17; // [esp+68h] [ebp-8h]
v3 = 0;
v4 = this;
TCollisionComponent::TCollisionComponent(this, a2, a3, 0);
*(_DWORD *)v4 = &TOneway::vftable;
*(DWORD *)v4 = &TOneway::vftable;
loader_query_visual(a3, 0, &v10);
if ( v11 == 2 )
{
@@ -97,7 +97,7 @@ v3 = TLine::TLine(v5, v4, (char *)v4 + 5, v13, (struct vector_type *)&v16, (stru
if ( v3 )
{
TLine::Offset(v3, *(float *)((char *)a2 + 282));
(*(void (__thiscall **)(TLine *))(*(_DWORD *)v3 + 8))(v3);
(*(void (__thiscall **)(TLine *))(*(DWORD *)v3 + 8))(v3);
objlist_class::Add((TOneway *)((char *)v4 + 42), (void *)v3);
}
v6 = (TLine *)operator new(0x55u);
@@ -105,12 +105,12 @@ if ( v6 )
v7 = TLine::TLine(v6, v4, (char *)v4 + 5, v13, (struct vector_type *)&v14, (struct vector_type *)&v16);
else
v7 = 0;
*(_DWORD *)((char *)v4 + 82) = v7;
*(DWORD *)((char *)v4 + 82) = v7;
if ( v7 )
{
v8 = -(*(float *)((char *)a2 + 282) * 0.8);
TLine::Offset(v7, v8);
(*(void (**)(void))(**(_DWORD **)((char *)v4 + 82) + 8))();
(*(void (**)(void))(**(DWORD **)((char *)v4 + 82) + 8))();
objlist_class::Add((TOneway *)((char *)v4 + 42), *(void **)((char *)v4 + 82));
}
}
@@ -7,7 +7,7 @@
//----- (010145F5) --------------------------------------------------------
void* TPinballComponent::operator new(size_t SizeOfElements)
{
return _calloc(1u, SizeOfElements);
return calloc(1u, SizeOfElements);
}
//----- (010159A9) --------------------------------------------------------
@@ -28,7 +28,7 @@ struct TPinballComponent {
void* operator new(size_t SizeOfElements); // idb
int Message(int, float); // idb
int __stdcall TPinballComponent::get_scoring(int a2);
int TPinballComponent::get_scoring(int a2);
TPinballComponent* TPinballComponent::TPinballComponent(TPinballTable* a2, int a3, int a4);
TZmapList* TPinballComponent::~TPinballComponent();
+231 -231
View File
@@ -1,42 +1,42 @@
#include "TPinballTable.h"
//----- (01017467) --------------------------------------------------------
void __stdcall TPinballTable::LightShow_timeout(int a1, void *a2)
void TPinballTable::LightShow_timeout(int a1, void *a2)
{
void (__stdcall **v2)(signed int, _DWORD); // eax
void (**v2)(signed int, DWORD); // eax
v2 = *(void (__stdcall ***)(signed int, _DWORD))a2;
*(_DWORD *)((char *)a2 + 90) = 0;
v2 = *(void (***)(signed int, DWORD))a2;
*(DWORD *)((char *)a2 + 90) = 0;
(*v2)(1013, 0.0);
}
//----- (0101748B) --------------------------------------------------------
void __stdcall TPinballTable::EndGame_timeout(int a1, void *a2)
void TPinballTable::EndGame_timeout(int a1, void *a2)
{
char *v2; // esi
int v3; // eax
int v4; // edi
void (__thiscall ***v5)(_DWORD, signed int, _DWORD); // esi
void (__thiscall ***v5)(DWORD, signed int, DWORD); // esi
char *v6; // eax
char *v7; // [esp+28h] [ebp+Ch]
v2 = (char *)a2;
*(_DWORD *)((char *)a2 + 94) = 0;
*(DWORD *)((char *)a2 + 94) = 0;
pb_end_game();
v3 = *(_DWORD *)(*(_DWORD *)((char *)a2 + 254) + 4) - 1;
v3 = *(DWORD *)(*(DWORD *)((char *)a2 + 254) + 4) - 1;
if ( v3 >= 0 )
{
v4 = 4 * v3 + 8;
v7 = *(char **)(*(_DWORD *)((char *)a2 + 254) + 4);
v7 = *(char **)(*(DWORD *)((char *)a2 + 254) + 4);
do
{
(***(void (__stdcall ****)(signed int, _DWORD))(v4 + *(_DWORD *)(v2 + 254)))(1022, 0.0);
(***(void (****)(signed int, DWORD))(v4 + *(DWORD *)(v2 + 254)))(1022, 0.0);
v4 -= 4;
--v7;
}
while ( v7 );
}
v5 = *(void (__thiscall ****)(_DWORD, signed int, _DWORD))(v2 + 230);
v5 = *(void (__thiscall ****)(DWORD, signed int, DWORD))(v2 + 230);
if ( v5 )
(**v5)(v5, 1022, 0.0);
control_handler(67, MissTextBox);
@@ -47,62 +47,62 @@ TTextBox::Display(InfoTextBox, 1022, v6, -1.0);
//----- (01017526) --------------------------------------------------------
int __thiscall TPinballTable::AddScore(TPinballTable *this, int a2)
{
_DWORD *v2; // eax
_DWORD *v3; // eax
DWORD *v2; // eax
DWORD *v3; // eax
int v4; // esi
int *v5; // eax
signed int v6; // edx
if ( *(_DWORD *)((char *)this + 318) )
if ( *(DWORD *)((char *)this + 318) )
{
v2 = (_DWORD *)((char *)this + 314);
v2 = (DWORD *)((char *)this + 314);
*v2 += a2;
if ( *(_DWORD *)((char *)this + 314) > 5000000 )
if ( *(DWORD *)((char *)this + 314) > 5000000 )
*v2 = 5000000;
}
if ( *(_DWORD *)((char *)this + 310) )
if ( *(DWORD *)((char *)this + 310) )
{
v3 = (_DWORD *)((char *)this + 306);
v3 = (DWORD *)((char *)this + 306);
*v3 += a2;
if ( *(_DWORD *)((char *)this + 306) > 5000000 )
if ( *(DWORD *)((char *)this + 306) > 5000000 )
*v3 = 5000000;
}
v4 = *(_DWORD *)((char *)this + 298) + a2 * dword_1024758[*(_DWORD *)((char *)this + 294)];
v4 = *(DWORD *)((char *)this + 298) + a2 * dword_1024758[*(DWORD *)((char *)this + 294)];
v5 = (int *)((char *)this + 82);
*v5 += v4;
v6 = *(_DWORD *)((char *)this + 82);
v6 = *(DWORD *)((char *)this + 82);
if ( v6 > 1000000000 )
{
++*(_DWORD *)((char *)this + 86);
++*(DWORD *)((char *)this + 86);
*v5 = v6 - 1000000000;
}
score_set(*(_DWORD **)((char *)this + 50), *v5);
score_set(*(DWORD **)((char *)this + 50), *v5);
return v4;
}
//----- (010175AA) --------------------------------------------------------
void __userpurge TPinballTable::ChangeBallCount(TPinballTable *this@<ecx>, int a2@<ebx>, int a3)
void TPinballTable::ChangeBallCount(TPinballTable *this, int a2, int a3)
{
TPinballTable *v3; // esi
v3 = this;
*(_DWORD *)((char *)this + 326) = a3;
*(DWORD *)((char *)this + 326) = a3;
if ( a3 <= 0 )
{
score_erase(a2, *(_DWORD **)((char *)this + 54), 1);
score_erase(a2, *(DWORD **)((char *)this + 54), 1);
}
else
{
score_set(*(_DWORD **)((char *)this + 54), *(_DWORD *)((char *)this + 330) - a3 + 1);
score_set(*(DWORD **)((char *)this + 54), *(DWORD *)((char *)this + 330) - a3 + 1);
score_update(a2, *(int **)((char *)v3 + 54));
}
}
//----- (010175EF) --------------------------------------------------------
void __stdcall TPinballTable::replay_timer_callback(int a1, void *a2)
void TPinballTable::replay_timer_callback(int a1, void *a2)
{
*(_DWORD *)((char *)a2 + 354) = 0;
*(_DWORD *)((char *)a2 + 358) = 0;
*(DWORD *)((char *)a2 + 354) = 0;
*(DWORD *)((char *)a2 + 358) = 0;
}
//----- (0101760E) --------------------------------------------------------
@@ -114,14 +114,14 @@ int v3; // esi
int v4; // ebx
v1 = this;
v2 = *(_DWORD *)(*(_DWORD *)((char *)this + 254) + 4) - 1;
v2 = *(DWORD *)(*(DWORD *)((char *)this + 254) + 4) - 1;
if ( v2 >= 0 )
{
v3 = 4 * v2 + 8;
v4 = *(_DWORD *)(*(_DWORD *)((char *)this + 254) + 4);
v4 = *(DWORD *)(*(DWORD *)((char *)this + 254) + 4);
do
{
(*(void (**)(void))(**(_DWORD **)(v3 + *(_DWORD *)((char *)v1 + 254)) + 4))();
(*(void (**)(void))(**(DWORD **)(v3 + *(DWORD *)((char *)v1 + 254)) + 4))();
v3 -= 4;
--v4;
}
@@ -142,8 +142,8 @@ int v8; // [esp+10h] [ebp-4h]
v8 = 0;
v2 = this;
v7 = *(_DWORD *)(*(_DWORD *)((char *)this + 254) + 4);
if ( *(_DWORD *)(*(_DWORD *)((char *)this + 254) + 4) <= 0 )
v7 = *(DWORD *)(*(DWORD *)((char *)this + 254) + 4);
if ( *(DWORD *)(*(DWORD *)((char *)this + 254) + 4) <= 0 )
{
LABEL_6:
MessageBoxA(0, "Table cant find:", lpString2, 0x2000u);
@@ -154,7 +154,7 @@ else
v3 = 8;
while ( 1 )
{
v4 = *(_DWORD *)(v3 + *(_DWORD *)((char *)v2 + 254));
v4 = *(DWORD *)(v3 + *(DWORD *)((char *)v2 + 254));
v5 = *(const CHAR **)(v4 + 10);
if ( v5 )
{
@@ -181,8 +181,8 @@ int v5; // edx
struct TPinballComponent *result; // eax
char DstBuf; // [esp+8h] [ebp-CCh]
v2 = *(_DWORD *)((char *)this + 254);
v3 = *(_DWORD *)(v2 + 4);
v2 = *(DWORD *)((char *)this + 254);
v3 = *(DWORD *)(v2 + 4);
v4 = 0;
if ( v3 <= 0 )
{
@@ -197,7 +197,7 @@ v5 = v2 + 8;
while ( 1 )
{
result = *(struct TPinballComponent **)v5;
if ( Val == *(_DWORD *)(*(_DWORD *)v5 + 22) )
if ( Val == *(DWORD *)(*(DWORD *)v5 + 22) )
break;
++v4;
v5 += 4;
@@ -209,24 +209,24 @@ return result;
}
//----- (01017738) --------------------------------------------------------
void __stdcall TPinballTable::tilt_timeout(int a1, void *a2)
void TPinballTable::tilt_timeout(int a1, void *a2)
{
int v2; // eax
_DWORD *v3; // edi
DWORD *v3; // edi
int v4; // ebx
char v5; // [esp+14h] [ebp-Ch]
*(_DWORD *)((char *)a2 + 98) = 0;
if ( *(_DWORD *)((char *)a2 + 370) )
*(DWORD *)((char *)a2 + 98) = 0;
if ( *(DWORD *)((char *)a2 + 370) )
{
v2 = *(_DWORD *)((char *)a2 + 262);
v3 = (_DWORD *)(v2 + 8);
if ( *(_DWORD *)(v2 + 4) > 0 )
v2 = *(DWORD *)((char *)a2 + 262);
v3 = (DWORD *)(v2 + 8);
if ( *(DWORD *)(v2 + 4) > 0 )
{
v4 = *(_DWORD *)(v2 + 4);
v4 = *(DWORD *)(v2 + 4);
do
{
(*(void (__stdcall **)(_DWORD, char *, char *, _DWORD, _DWORD))(**(_DWORD **)((char *)a2 + 226) + 20))(
(*(void (**)(DWORD, char *, char *, DWORD, DWORD))(**(DWORD **)((char *)a2 + 226) + 20))(
*v3,
&v5,
&v5,
@@ -241,7 +241,7 @@ while ( v4 );
}
//----- (01017791) --------------------------------------------------------
void __userpurge TPinballTable::tilt(TPinballTable *this@<ecx>, int a2@<ebx>, float a3)
void TPinballTable::tilt(TPinballTable *this, int a2, float a3)
{
TPinballTable *v3; // esi
int v4; // ST14_4
@@ -251,37 +251,37 @@ signed int v7; // ebx
int v8; // [esp+20h] [ebp-4h]
v3 = this;
if ( !*(_DWORD *)((char *)this + 370) && !*(_DWORD *)((char *)this + 78) )
if ( !*(DWORD *)((char *)this + 370) && !*(DWORD *)((char *)this + 78) )
{
v4 = a2;
TTextBox::Clear(InfoTextBox, a2);
TTextBox::Clear(MissTextBox, a2);
v5 = get_rc_string(35, 0);
TTextBox::Display(InfoTextBox, a2, v5, -1.0);
loader_play_sound(*(_DWORD *)((char *)v3 + 74));
*(_DWORD *)((char *)v3 + 98) = timer_set(30.0, (int)v3, (int)TPinballTable::tilt_timeout);
v6 = *(_DWORD *)(*(_DWORD *)((char *)v3 + 254) + 4);
v8 = *(_DWORD *)(*(_DWORD *)((char *)v3 + 254) + 4);
(**(void (__thiscall ***)(TPinballTable *, signed int, _DWORD, int))v3)(v3, 1011, -1.0, v4);
loader_play_sound(*(DWORD *)((char *)v3 + 74));
*(DWORD *)((char *)v3 + 98) = timer_set(30.0, (int)v3, (int)TPinballTable::tilt_timeout);
v6 = *(DWORD *)(*(DWORD *)((char *)v3 + 254) + 4);
v8 = *(DWORD *)(*(DWORD *)((char *)v3 + 254) + 4);
(**(void (__thiscall ***)(TPinballTable *, signed int, DWORD, int))v3)(v3, 1011, -1.0, v4);
if ( v6 > 0 )
{
v7 = 8;
do
{
(***(void (__stdcall ****)(signed int, _DWORD))(v7 + *(_DWORD *)((char *)v3 + 254)))(1011, LODWORD(a3));
(***(void (****)(signed int, DWORD))(v7 + *(DWORD *)((char *)v3 + 254)))(1011, LODWORD(a3));
v7 += 4;
--v8;
}
while ( v8 );
}
(***(void (__stdcall ****)(signed int))((char *)v3 + 266))(8);
*(_DWORD *)((char *)v3 + 370) = 1;
(***(void (****)(signed int))((char *)v3 + 266))(8);
*(DWORD *)((char *)v3 + 370) = 1;
table_control_handler(1011);
}
}
//----- (010187D6) --------------------------------------------------------
int __userpurge TPinballTable::Message@<eax>(TPinballTable *this@<ecx>, int a2@<ebx>, int a3, float a4)
int TPinballTable::Message(TPinballTable *this, int a2, int a3, float a4)
{
TPinballTable *v4; // esi
int v5; // eax
@@ -290,28 +290,28 @@ int v7; // ebx
int v8; // eax
int v9; // eax
signed __int64 v10; // rax
_DWORD *v11; // ST14_4
DWORD *v11; // ST14_4
bool v12; // zf
bool v13; // sf
unsigned __int8 v14; // of
_DWORD *v15; // edi
DWORD *v15; // edi
signed int v16; // eax
int v17; // edi
float v18; // ST10_4
char *v19; // eax
void (__thiscall ***v20)(_DWORD, signed int, _DWORD); // esi
void (__thiscall ***v20)(DWORD, signed int, DWORD); // esi
float v21; // ST10_4
signed int v22; // ebx
int v23; // ecx
int v24; // eax
int v25; // ST18_4
_DWORD *v26; // ST14_4
DWORD *v26; // ST14_4
int v27; // edi
float v28; // ST28_4
char *v29; // eax
char *v30; // eax
void (__thiscall ***v31)(_DWORD, signed int, _DWORD); // esi
void (__thiscall ***v32)(_DWORD, signed int, _DWORD); // esi
void (__thiscall ***v31)(DWORD, signed int, DWORD); // esi
void (__thiscall ***v32)(DWORD, signed int, DWORD); // esi
int v33; // eax
int v34; // edi
int v35; // ebx
@@ -319,60 +319,60 @@ char *v36; // eax
float v38; // [esp+18h] [ebp-18h]
int v39; // [esp+2Ch] [ebp-4h]
signed int v40; // [esp+3Ch] [ebp+Ch]
_DWORD **v41; // [esp+3Ch] [ebp+Ch]
DWORD **v41; // [esp+3Ch] [ebp+Ch]
signed int v42; // [esp+3Ch] [ebp+Ch]
v4 = this;
switch ( a3 )
{
case 1000:
if ( !*(_DWORD *)((char *)this + 370) )
if ( !*(DWORD *)((char *)this + 370) )
{
v32 = *(void (__thiscall ****)(_DWORD, signed int, _DWORD))((char *)this + 42);
v32 = *(void (__thiscall ****)(DWORD, signed int, DWORD))((char *)this + 42);
goto LABEL_73;
}
goto LABEL_81;
case 1001:
if ( !*(_DWORD *)((char *)this + 370) )
if ( !*(DWORD *)((char *)this + 370) )
{
v31 = *(void (__thiscall ****)(_DWORD, signed int, _DWORD))((char *)this + 42);
v31 = *(void (__thiscall ****)(DWORD, signed int, DWORD))((char *)this + 42);
goto LABEL_70;
}
goto LABEL_81;
case 1002:
if ( !*(_DWORD *)((char *)this + 370) )
if ( !*(DWORD *)((char *)this + 370) )
{
v32 = *(void (__thiscall ****)(_DWORD, signed int, _DWORD))((char *)this + 46);
v32 = *(void (__thiscall ****)(DWORD, signed int, DWORD))((char *)this + 46);
LABEL_73:
(**v32)(v32, 1, LODWORD(a4));
}
goto LABEL_81;
case 1003:
if ( !*(_DWORD *)((char *)this + 370) )
if ( !*(DWORD *)((char *)this + 370) )
{
v31 = *(void (__thiscall ****)(_DWORD, signed int, _DWORD))((char *)this + 46);
v31 = *(void (__thiscall ****)(DWORD, signed int, DWORD))((char *)this + 46);
LABEL_70:
(**v31)(v31, 2, LODWORD(a4));
}
goto LABEL_81;
case 1004:
case 1005:
(***(void (__thiscall ****)(_DWORD, int, _DWORD))((char *)this + 222))(
*(_DWORD *)((char *)this + 222),
(***(void (__thiscall ****)(DWORD, int, DWORD))((char *)this + 222))(
*(DWORD *)((char *)this + 222),
a3,
LODWORD(a4));
goto LABEL_81;
case 1008:
case 1009:
case 1010:
v33 = *(_DWORD *)(*(_DWORD *)((char *)this + 254) + 4) - 1;
v33 = *(DWORD *)(*(DWORD *)((char *)this + 254) + 4) - 1;
if ( v33 >= 0 )
{
v34 = 4 * v33 + 8;
v35 = *(_DWORD *)(*(_DWORD *)((char *)this + 254) + 4);
v35 = *(DWORD *)(*(DWORD *)((char *)this + 254) + 4);
do
{
(***(void (__stdcall ****)(int, _DWORD))(v34 + *(_DWORD *)((char *)v4 + 254)))(a3, LODWORD(a4));
(***(void (****)(int, DWORD))(v34 + *(DWORD *)((char *)v4 + 254)))(a3, LODWORD(a4));
v34 -= 4;
--v35;
}
@@ -380,97 +380,97 @@ while ( v35 );
}
goto LABEL_81;
case 1012:
(***(void (__stdcall ****)(signed int, _DWORD))((char *)this + 266))(14, 0.0);
if ( *(_DWORD *)((char *)v4 + 370) )
(***(void (****)(signed int, DWORD))((char *)this + 266))(14, 0.0);
if ( *(DWORD *)((char *)v4 + 370) )
{
*(_DWORD *)((char *)v4 + 370) = 0;
if ( *(_DWORD *)((char *)v4 + 98) )
timer_kill(*(_DWORD *)((char *)v4 + 98));
*(_DWORD *)((char *)v4 + 98) = 0;
*(DWORD *)((char *)v4 + 370) = 0;
if ( *(DWORD *)((char *)v4 + 98) )
timer_kill(*(DWORD *)((char *)v4 + 98));
*(DWORD *)((char *)v4 + 98) = 0;
}
goto LABEL_81;
case 1013:
(***(void (__stdcall ****)(signed int, _DWORD))((char *)this + 266))(34, 0.0);
(***(void (__stdcall ****)(signed int, _DWORD))((char *)v4 + 266))(20, 0.0);
(***(void (__stdcall ****)(signed int, _DWORD))((char *)v4 + 222))(1016, 0.0);
if ( *(_BYTE *)(*(_DWORD *)((char *)v4 + 230) + 5) )
(***(void (****)(signed int, DWORD))((char *)this + 266))(34, 0.0);
(***(void (****)(signed int, DWORD))((char *)v4 + 266))(20, 0.0);
(***(void (****)(signed int, DWORD))((char *)v4 + 222))(1016, 0.0);
if ( *(_BYTE *)(*(DWORD *)((char *)v4 + 230) + 5) )
v19 = get_rc_string(30, 0);
else
v19 = get_rc_string(26, 0);
TTextBox::Display(InfoTextBox, 0, v19, -1.0);
v20 = *(void (__thiscall ****)(_DWORD, signed int, _DWORD))((char *)v4 + 230);
v20 = *(void (__thiscall ****)(DWORD, signed int, DWORD))((char *)v4 + 230);
if ( v20 )
(**v20)(v20, 1014, 0.0);
goto LABEL_81;
case 1014:
if ( *(_DWORD *)((char *)this + 94) )
if ( *(DWORD *)((char *)this + 94) )
{
timer_kill(*(_DWORD *)((char *)this + 94));
timer_kill(*(DWORD *)((char *)this + 94));
TPinballTable::EndGame_timeout(0, (void *)v4);
pb_mode_change(1);
}
if ( *(_DWORD *)((char *)v4 + 90) )
if ( *(DWORD *)((char *)v4 + 90) )
{
timer_kill(*(_DWORD *)((char *)v4 + 90));
*(_DWORD *)((char *)v4 + 90) = 0;
timer_kill(*(DWORD *)((char *)v4 + 90));
*(DWORD *)((char *)v4 + 90) = 0;
TPinballTable::Message(v4, 1013, 0.0);
}
else
{
*(_DWORD *)((char *)v4 + 62) = 0;
*(DWORD *)((char *)v4 + 62) = 0;
TPinballTable::Message(v4, 1024, 0.0);
v9 = *(_DWORD *)(*(_DWORD *)((char *)v4 + 262) + 8);
v9 = *(DWORD *)(*(DWORD *)((char *)v4 + 262) + 8);
*(float *)(v9 + 46) = 0.0;
*(float *)(v9 + 42) = 0.0;
*(_DWORD *)(v9 + 50) = -1085485875;
*(DWORD *)(v9 + 50) = -1085485875;
v10 = (signed __int64)_floor(a4);
*(_DWORD *)((char *)v4 + 214) = v10;
*(DWORD *)((char *)v4 + 214) = v10;
if ( (signed int)v10 >= 1 )
{
if ( (signed int)v10 > 4 )
*(_DWORD *)((char *)v4 + 214) = 4;
*(DWORD *)((char *)v4 + 214) = 4;
}
else
{
*(_DWORD *)((char *)v4 + 214) = 1;
*(DWORD *)((char *)v4 + 214) = 1;
}
v11 = *(_DWORD **)((char *)v4 + 102);
*(_DWORD *)((char *)v4 + 218) = 0;
*(_DWORD *)((char *)v4 + 50) = v11;
*(_DWORD *)((char *)v4 + 82) = 0;
v11 = *(DWORD **)((char *)v4 + 102);
*(DWORD *)((char *)v4 + 218) = 0;
*(DWORD *)((char *)v4 + 50) = v11;
*(DWORD *)((char *)v4 + 82) = 0;
score_set(v11, 0);
v14 = __OFSUB__(*(_DWORD *)((char *)v4 + 214), 1);
v12 = *(_DWORD *)((char *)v4 + 214) == 1;
v13 = *(_DWORD *)((char *)v4 + 214) - 1 < 0;
*(_DWORD *)((char *)v4 + 294) = 0;
v14 = __OFSUB__(*(DWORD *)((char *)v4 + 214), 1);
v12 = *(DWORD *)((char *)v4 + 214) == 1;
v13 = *(DWORD *)((char *)v4 + 214) - 1 < 0;
*(DWORD *)((char *)v4 + 294) = 0;
v40 = 1;
if ( !((unsigned __int8)(v13 ^ v14) | v12) )
{
v15 = (_DWORD *)((char *)v4 + 134);
v15 = (DWORD *)((char *)v4 + 134);
do
{
score_set((_DWORD *)*(v15 - 1), 0);
score_set((DWORD *)*(v15 - 1), 0);
++v40;
*v15 = 0;
v15[1] = 0;
v15[3] = *(_DWORD *)((char *)v4 + 330);
v15[4] = *(_DWORD *)((char *)v4 + 334);
v15[5] = *(_DWORD *)((char *)v4 + 342);
v15[2] = *(_DWORD *)((char *)v4 + 314);
v15[3] = *(DWORD *)((char *)v4 + 330);
v15[4] = *(DWORD *)((char *)v4 + 334);
v15[5] = *(DWORD *)((char *)v4 + 342);
v15[2] = *(DWORD *)((char *)v4 + 314);
v15 += 7;
}
while ( v40 < *(_DWORD *)((char *)v4 + 214) );
while ( v40 < *(DWORD *)((char *)v4 + 214) );
}
*(_DWORD *)((char *)v4 + 326) = *(_DWORD *)((char *)v4 + 330);
*(DWORD *)((char *)v4 + 326) = *(DWORD *)((char *)v4 + 330);
Sound_Idle();
TPinballTable::ChangeBallCount(v4, 0, *(_DWORD *)((char *)v4 + 326));
score_set(*(_DWORD **)((char *)v4 + 58), *(_DWORD *)((char *)v4 + 218) + 1);
TPinballTable::ChangeBallCount(v4, 0, *(DWORD *)((char *)v4 + 326));
score_set(*(DWORD **)((char *)v4 + 58), *(DWORD *)((char *)v4 + 218) + 1);
score_update(0, *(int **)((char *)v4 + 58));
Sound_Idle();
v16 = *(_DWORD *)((char *)v4 + 214);
v16 = *(DWORD *)((char *)v4 + 214);
if ( v16 < 4 )
{
v41 = (_DWORD **)((char *)v4 + 28 * v16 + 102);
v41 = (DWORD **)((char *)v4 + 28 * v16 + 102);
v17 = 4 - v16;
do
{
@@ -481,66 +481,66 @@ v41 += 7;
while ( v17 );
}
Sound_Idle();
*(_DWORD *)((char *)v4 + 318) = 0;
*(_DWORD *)((char *)v4 + 310) = 0;
*(_DWORD *)((char *)v4 + 322) = 0;
*(DWORD *)((char *)v4 + 318) = 0;
*(DWORD *)((char *)v4 + 310) = 0;
*(DWORD *)((char *)v4 + 322) = 0;
TTextBox::Clear(InfoTextBox, 0);
Sound_Idle();
TTextBox::Clear(MissTextBox, 0);
Sound_Idle();
(***(void (__stdcall ****)(signed int, _DWORD))((char *)v4 + 266))(28, 0.2);
v18 = loader_play_sound(*(_DWORD *)((char *)v4 + 66));
*(_DWORD *)((char *)v4 + 90) = timer_set(v18, (int)v4, (int)TPinballTable::LightShow_timeout);
(***(void (****)(signed int, DWORD))((char *)v4 + 266))(28, 0.2);
v18 = loader_play_sound(*(DWORD *)((char *)v4 + 66));
*(DWORD *)((char *)v4 + 90) = timer_set(v18, (int)v4, (int)TPinballTable::LightShow_timeout);
}
goto LABEL_81;
case 1018:
if ( *(_DWORD *)((char *)this + 358) )
timer_kill(*(_DWORD *)((char *)this + 358));
if ( *(DWORD *)((char *)this + 358) )
timer_kill(*(DWORD *)((char *)this + 358));
v21 = _floor(a4);
*(_DWORD *)((char *)v4 + 358) = timer_set(v21, (int)v4, (int)TPinballTable::replay_timer_callback);
*(_DWORD *)((char *)v4 + 354) = 1;
*(DWORD *)((char *)v4 + 358) = timer_set(v21, (int)v4, (int)TPinballTable::replay_timer_callback);
*(DWORD *)((char *)v4 + 354) = 1;
goto LABEL_81;
case 1021:
v22 = *(_DWORD *)((char *)this + 214);
v22 = *(DWORD *)((char *)this + 214);
if ( v22 > 1 )
{
v23 = *(_DWORD *)((char *)this + 218);
v23 = *(DWORD *)((char *)this + 218);
v39 = (v23 + 1) % v22;
v24 = (int)v4 + 28 * v39;
if ( *(_DWORD *)(v24 + 118) <= 0 )
if ( *(DWORD *)(v24 + 118) <= 0 )
goto LABEL_81;
*(_DWORD *)((char *)v4 + 28 * v23 + 106) = *(_DWORD *)((char *)v4 + 82);
*(_DWORD *)((char *)v4 + 28 * *(_DWORD *)((char *)v4 + 218) + 110) = *(_DWORD *)((char *)v4 + 86);
*(_DWORD *)((char *)v4 + 28 * *(_DWORD *)((char *)v4 + 218) + 118) = *(_DWORD *)((char *)v4 + 326);
*(_DWORD *)((char *)v4 + 28 * *(_DWORD *)((char *)v4 + 218) + 122) = *(_DWORD *)((char *)v4 + 334);
*(_DWORD *)((char *)v4 + 28 * *(_DWORD *)((char *)v4 + 218) + 126) = *(_DWORD *)((char *)v4 + 342);
*(_DWORD *)((char *)v4 + 28 * *(_DWORD *)((char *)v4 + 218) + 114) = *(_DWORD *)((char *)v4 + 314);
*(_DWORD *)((char *)v4 + 82) = *(_DWORD *)(v24 + 106);
v25 = *(_DWORD *)((char *)v4 + 82);
*(_DWORD *)((char *)v4 + 86) = *(_DWORD *)(v24 + 110);
*(_DWORD *)((char *)v4 + 326) = *(_DWORD *)(v24 + 118);
*(_DWORD *)((char *)v4 + 334) = *(_DWORD *)(v24 + 122);
*(_DWORD *)((char *)v4 + 342) = *(_DWORD *)(v24 + 126);
*(_DWORD *)((char *)v4 + 314) = *(_DWORD *)(v24 + 114);
v26 = *(_DWORD **)(v24 + 102);
*(_DWORD *)((char *)v4 + 50) = v26;
*(DWORD *)((char *)v4 + 28 * v23 + 106) = *(DWORD *)((char *)v4 + 82);
*(DWORD *)((char *)v4 + 28 * *(DWORD *)((char *)v4 + 218) + 110) = *(DWORD *)((char *)v4 + 86);
*(DWORD *)((char *)v4 + 28 * *(DWORD *)((char *)v4 + 218) + 118) = *(DWORD *)((char *)v4 + 326);
*(DWORD *)((char *)v4 + 28 * *(DWORD *)((char *)v4 + 218) + 122) = *(DWORD *)((char *)v4 + 334);
*(DWORD *)((char *)v4 + 28 * *(DWORD *)((char *)v4 + 218) + 126) = *(DWORD *)((char *)v4 + 342);
*(DWORD *)((char *)v4 + 28 * *(DWORD *)((char *)v4 + 218) + 114) = *(DWORD *)((char *)v4 + 314);
*(DWORD *)((char *)v4 + 82) = *(DWORD *)(v24 + 106);
v25 = *(DWORD *)((char *)v4 + 82);
*(DWORD *)((char *)v4 + 86) = *(DWORD *)(v24 + 110);
*(DWORD *)((char *)v4 + 326) = *(DWORD *)(v24 + 118);
*(DWORD *)((char *)v4 + 334) = *(DWORD *)(v24 + 122);
*(DWORD *)((char *)v4 + 342) = *(DWORD *)(v24 + 126);
*(DWORD *)((char *)v4 + 314) = *(DWORD *)(v24 + 114);
v26 = *(DWORD **)(v24 + 102);
*(DWORD *)((char *)v4 + 50) = v26;
score_set(v26, v25);
*(_DWORD *)(*(_DWORD *)((char *)v4 + 50) + 4) = 1;
TPinballTable::ChangeBallCount(v4, 0, *(_DWORD *)((char *)v4 + 326));
score_set(*(_DWORD **)((char *)v4 + 58), v39 + 1);
*(DWORD *)(*(DWORD *)((char *)v4 + 50) + 4) = 1;
TPinballTable::ChangeBallCount(v4, 0, *(DWORD *)((char *)v4 + 326));
score_set(*(DWORD **)((char *)v4 + 58), v39 + 1);
score_update(0, *(int **)((char *)v4 + 58));
v27 = 0;
if ( *(_DWORD *)(*(_DWORD *)((char *)v4 + 254) + 4) > 0 )
if ( *(DWORD *)(*(DWORD *)((char *)v4 + 254) + 4) > 0 )
{
v42 = 8;
do
{
v28 = (double)v39;
(***(void (__stdcall ****)(signed int, _DWORD))(v42 + *(_DWORD *)((char *)v4 + 254)))(1020, LODWORD(v28));
(***(void (****)(signed int, DWORD))(v42 + *(DWORD *)((char *)v4 + 254)))(1020, LODWORD(v28));
v42 += 4;
++v27;
}
while ( v27 < *(_DWORD *)(*(_DWORD *)((char *)v4 + 254) + 4) );
while ( v27 < *(DWORD *)(*(DWORD *)((char *)v4 + 254) + 4) );
}
if ( v39 )
{
@@ -548,38 +548,38 @@ switch ( v39 )
{
case 1:
v38 = -1.0;
if ( *(_BYTE *)(*(_DWORD *)((char *)v4 + 230) + 5) )
if ( *(_BYTE *)(*(DWORD *)((char *)v4 + 230) + 5) )
v29 = get_rc_string(31, 0);
else
v29 = get_rc_string(27, 0);
break;
case 2:
v38 = -1.0;
if ( *(_BYTE *)(*(_DWORD *)((char *)v4 + 230) + 5) )
if ( *(_BYTE *)(*(DWORD *)((char *)v4 + 230) + 5) )
v29 = get_rc_string(32, 0);
else
v29 = get_rc_string(28, 0);
break;
case 3:
v38 = -1.0;
if ( *(_BYTE *)(*(_DWORD *)((char *)v4 + 230) + 5) )
if ( *(_BYTE *)(*(DWORD *)((char *)v4 + 230) + 5) )
v29 = get_rc_string(33, 0);
else
v29 = get_rc_string(29, 0);
break;
default:
LABEL_59:
*(_DWORD *)((char *)v4 + 318) = 0;
*(_DWORD *)((char *)v4 + 310) = 0;
*(_DWORD *)((char *)v4 + 322) = 0;
*(_DWORD *)((char *)v4 + 218) = v39;
*(DWORD *)((char *)v4 + 318) = 0;
*(DWORD *)((char *)v4 + 310) = 0;
*(DWORD *)((char *)v4 + 322) = 0;
*(DWORD *)((char *)v4 + 218) = v39;
goto LABEL_81;
}
}
else
{
v38 = -1.0;
if ( *(_BYTE *)(*(_DWORD *)((char *)v4 + 230) + 5) )
if ( *(_BYTE *)(*(DWORD *)((char *)v4 + 230) + 5) )
v29 = get_rc_string(30, 0);
else
v29 = get_rc_string(26, 0);
@@ -587,7 +587,7 @@ v29 = get_rc_string(26, 0);
TTextBox::Display(InfoTextBox, 0, v29, v38);
goto LABEL_59;
}
if ( *(_BYTE *)(*(_DWORD *)((char *)this + 230) + 5) )
if ( *(_BYTE *)(*(DWORD *)((char *)this + 230) + 5) )
v30 = get_rc_string(30, 0);
else
v30 = get_rc_string(26, 0);
@@ -596,52 +596,52 @@ LABEL_81:
table_control_handler(a3);
return 0;
case 1022:
loader_play_sound(*(_DWORD *)((char *)this + 70));
loader_play_sound(*(DWORD *)((char *)this + 70));
TTextBox::Clear(MissTextBox, a2);
v36 = get_rc_string(34, 0);
TTextBox::Display(InfoTextBox, a2, v36, -1.0);
*(_DWORD *)((char *)v4 + 94) = timer_set(3.0, (int)v4, (int)TPinballTable::EndGame_timeout);
*(DWORD *)((char *)v4 + 94) = timer_set(3.0, (int)v4, (int)TPinballTable::EndGame_timeout);
goto LABEL_81;
case 1024:
v5 = *(_DWORD *)(*(_DWORD *)((char *)this + 254) + 4) - 1;
v5 = *(DWORD *)(*(DWORD *)((char *)this + 254) + 4) - 1;
if ( v5 >= 0 )
{
v6 = 4 * v5 + 8;
v7 = *(_DWORD *)(*(_DWORD *)((char *)this + 254) + 4);
v7 = *(DWORD *)(*(DWORD *)((char *)this + 254) + 4);
do
{
(***(void (__stdcall ****)(signed int, _DWORD))(v6 + *(_DWORD *)((char *)v4 + 254)))(1024, 0.0);
(***(void (****)(signed int, DWORD))(v6 + *(DWORD *)((char *)v4 + 254)))(1024, 0.0);
v6 -= 4;
--v7;
}
while ( v7 );
}
if ( *(_DWORD *)((char *)v4 + 358) )
timer_kill(*(_DWORD *)((char *)v4 + 358));
v8 = *(_DWORD *)((char *)v4 + 90);
*(_DWORD *)((char *)v4 + 358) = 0;
if ( *(DWORD *)((char *)v4 + 358) )
timer_kill(*(DWORD *)((char *)v4 + 358));
v8 = *(DWORD *)((char *)v4 + 90);
*(DWORD *)((char *)v4 + 358) = 0;
if ( v8 )
{
timer_kill(v8);
(***(void (__stdcall ****)(signed int, _DWORD))((char *)v4 + 266))(34, 0.0);
(***(void (****)(signed int, DWORD))((char *)v4 + 266))(34, 0.0);
}
*(_DWORD *)((char *)v4 + 90) = 0;
*(_DWORD *)((char *)v4 + 294) = 0;
*(_DWORD *)((char *)v4 + 298) = 0;
*(_DWORD *)((char *)v4 + 302) = 0;
*(_DWORD *)((char *)v4 + 306) = 10000;
*(_DWORD *)((char *)v4 + 310) = 0;
*(_DWORD *)((char *)v4 + 314) = 20000;
*(_DWORD *)((char *)v4 + 318) = 0;
*(_DWORD *)((char *)v4 + 322) = 0;
*(_DWORD *)((char *)v4 + 334) = 0;
*(_DWORD *)((char *)v4 + 338) = 0;
*(_DWORD *)((char *)v4 + 342) = 0;
*(_DWORD *)((char *)v4 + 346) = 0;
*(_DWORD *)((char *)v4 + 350) = 0;
*(_DWORD *)((char *)v4 + 354) = 0;
*(_DWORD *)((char *)v4 + 358) = 0;
*(_DWORD *)((char *)v4 + 370) = 0;
*(DWORD *)((char *)v4 + 90) = 0;
*(DWORD *)((char *)v4 + 294) = 0;
*(DWORD *)((char *)v4 + 298) = 0;
*(DWORD *)((char *)v4 + 302) = 0;
*(DWORD *)((char *)v4 + 306) = 10000;
*(DWORD *)((char *)v4 + 310) = 0;
*(DWORD *)((char *)v4 + 314) = 20000;
*(DWORD *)((char *)v4 + 318) = 0;
*(DWORD *)((char *)v4 + 322) = 0;
*(DWORD *)((char *)v4 + 334) = 0;
*(DWORD *)((char *)v4 + 338) = 0;
*(DWORD *)((char *)v4 + 342) = 0;
*(DWORD *)((char *)v4 + 346) = 0;
*(DWORD *)((char *)v4 + 350) = 0;
*(DWORD *)((char *)v4 + 354) = 0;
*(DWORD *)((char *)v4 + 358) = 0;
*(DWORD *)((char *)v4 + 370) = 0;
goto LABEL_81;
default:
goto LABEL_81;
@@ -657,7 +657,7 @@ int i; // ecx
signed int v5; // [esp+Ch] [ebp-4h]
v1 = this;
*(_DWORD *)this = &TPinballTable::vftable;
*(DWORD *)this = &TPinballTable::vftable;
v2 = (int *)((char *)this + 102);
v5 = 4;
do
@@ -671,25 +671,25 @@ v2 += 7;
--v5;
}
while ( v5 );
if ( *(_DWORD *)((char *)v1 + 58) )
if ( *(DWORD *)((char *)v1 + 58) )
{
objlist_destroy(*(_DWORD *)((char *)v1 + 58));
*(_DWORD *)((char *)v1 + 58) = 0;
objlist_destroy(*(DWORD *)((char *)v1 + 58));
*(DWORD *)((char *)v1 + 58) = 0;
}
if ( *(_DWORD *)((char *)v1 + 54) )
if ( *(DWORD *)((char *)v1 + 54) )
{
objlist_destroy(*(_DWORD *)((char *)v1 + 54));
*(_DWORD *)((char *)v1 + 54) = 0;
objlist_destroy(*(DWORD *)((char *)v1 + 54));
*(DWORD *)((char *)v1 + 54) = 0;
}
for ( i = *(_DWORD *)((char *)v1 + 266); ; i = *(_DWORD *)(*(_DWORD *)((char *)v1 + 254) + 8) )
for ( i = *(DWORD *)((char *)v1 + 266); ; i = *(DWORD *)(*(DWORD *)((char *)v1 + 254) + 8) )
{
if ( i )
(*(void (__stdcall **)(signed int))(*(_DWORD *)i + 16))(1);
if ( !*(_DWORD *)(*(_DWORD *)((char *)v1 + 254) + 4) )
(*(void (**)(signed int))(*(DWORD *)i + 16))(1);
if ( !*(DWORD *)(*(DWORD *)((char *)v1 + 254) + 4) )
break;
}
objlist_destroy(*(_DWORD *)((char *)v1 + 262));
objlist_destroy(*(_DWORD *)((char *)v1 + 254));
objlist_destroy(*(DWORD *)((char *)v1 + 262));
objlist_destroy(*(DWORD *)((char *)v1 + 254));
return TPinballComponent::~TPinballComponent(v1);
}
// 1002790: using guessed type void *TPinballTable::vftable;
@@ -715,13 +715,13 @@ TBall *v3; // eax
TTableLayer *v4; // eax
TLightGroup *v5; // eax
TLightGroup *v6; // eax
_DWORD *v7; // eax
DWORD *v7; // eax
int v8; // ebx
void **v9; // edi
int v10; // eax
__int16 *v11; // ebx
__int16 v12; // ax
signed __int16 *v13; // ebx
int *v11; // ebx
int v12; // ax
signed int *v13; // ebx
int v14; // edi
TWall *v15; // eax
TOneway *v16; // eax
@@ -763,20 +763,20 @@ int i; // [esp+10h] [ebp-4h]
v1 = 0;
v2 = this;
TPinballComponent::TPinballComponent(this, 0, -1, 0);
*(_DWORD *)v2 = &TPinballTable::vftable;
*(DWORD *)v2 = &TPinballTable::vftable;
objlist_class::objlist_class((TPinballTable *)((char *)v2 + 250), 32, 16);
objlist_class::objlist_class((TPinballTable *)((char *)v2 + 258), 3, 1);
*(_DWORD *)((char *)v2 + 50) = 0;
*(_DWORD *)((char *)v2 + 54) = 0;
*(_DWORD *)((char *)v2 + 58) = 0;
*(_DWORD *)((char *)v2 + 78) = 0;
*(DWORD *)((char *)v2 + 50) = 0;
*(DWORD *)((char *)v2 + 54) = 0;
*(DWORD *)((char *)v2 + 58) = 0;
*(DWORD *)((char *)v2 + 78) = 0;
*((_BYTE *)v2 + 5) = 1;
*(_DWORD *)((char *)v2 + 370) = 0;
*(_DWORD *)((char *)v2 + 94) = 0;
*(_DWORD *)((char *)v2 + 90) = 0;
*(_DWORD *)((char *)v2 + 358) = 0;
*(_DWORD *)((char *)v2 + 98) = 0;
*(_DWORD *)((char *)v2 + 346) = 0;
*(DWORD *)((char *)v2 + 370) = 0;
*(DWORD *)((char *)v2 + 94) = 0;
*(DWORD *)((char *)v2 + 90) = 0;
*(DWORD *)((char *)v2 + 358) = 0;
*(DWORD *)((char *)v2 + 98) = 0;
*(DWORD *)((char *)v2 + 346) = 0;
v3 = (TBall *)TPinballComponent::operator new(0x16Au);
if ( v3 )
v1 = TBall::TBall(v3, v2);
@@ -791,10 +791,10 @@ if ( v5 )
v6 = TLightGroup::TLightGroup(v5, v2, 0);
else
v6 = 0;
*(_DWORD *)((char *)v2 + 266) = v6;
*(DWORD *)((char *)v2 + 266) = v6;
v7 = score_create("score1", render_background_bitmap);
*(_DWORD *)((char *)v2 + 50) = v7;
*(_DWORD *)((char *)v2 + 102) = v7;
*(DWORD *)((char *)v2 + 50) = v7;
*(DWORD *)((char *)v2 + 102) = v7;
v8 = 1;
v9 = (void **)((char *)v2 + 130);
do
@@ -803,12 +803,12 @@ do
v9 += 7;
}
while ( v8 < 4 );
*(_DWORD *)((char *)v2 + 218) = 0;
*(_DWORD *)((char *)v2 + 330) = 3;
*(_DWORD *)((char *)v2 + 54) = score_create("ballcount1", render_background_bitmap);
*(_DWORD *)((char *)v2 + 58) = score_create("player_number1", render_background_bitmap);
*(DWORD *)((char *)v2 + 218) = 0;
*(DWORD *)((char *)v2 + 330) = 3;
*(DWORD *)((char *)v2 + 54) = score_create("ballcount1", render_background_bitmap);
*(DWORD *)((char *)v2 + 58) = score_create("player_number1", render_background_bitmap);
v10 = loader_query_handle("table_objects");
v11 = (__int16 *)loader_query_iattribute(v10, 1025, &v50);
v11 = (int *)loader_query_iattribute(v10, 1025, &v50);
if ( v50 > 0 )
{
for ( i = 0; i < v50 / 2; ++i )
@@ -831,7 +831,7 @@ if ( v17 )
v18 = TPlunger::TPlunger(v17, v2, v14);
else
v18 = 0;
*(_DWORD *)((char *)v2 + 222) = v18;
*(DWORD *)((char *)v2 + 222) = v18;
break;
case 1002:
v19 = (TLight *)TPinballComponent::operator new(0xDEu);
@@ -839,7 +839,7 @@ if ( v19 )
v20 = TLight::TLight(v19, v2, v14);
else
v20 = 0;
objlist_class::Add((objlist_class *)(*(_DWORD *)((char *)v2 + 266) + 42), (void *)v20);
objlist_class::Add((objlist_class *)(*(DWORD *)((char *)v2 + 266) + 42), (void *)v20);
break;
case 1003:
v23 = (TFlipper *)TPinballComponent::operator new(0x6Au);
@@ -847,7 +847,7 @@ if ( v23 )
v24 = TFlipper::TFlipper(v23, v2, v14);
else
v24 = 0;
*(_DWORD *)((char *)v2 + 42) = v24;
*(DWORD *)((char *)v2 + 42) = v24;
break;
case 1004:
v25 = (TFlipper *)TPinballComponent::operator new(0x6Au);
@@ -855,7 +855,7 @@ if ( v25 )
v26 = TFlipper::TFlipper(v25, v2, v14);
else
v26 = 0;
*(_DWORD *)((char *)v2 + 46) = v26;
*(DWORD *)((char *)v2 + 46) = v26;
break;
case 1005:
v27 = (TBumper *)TPinballComponent::operator new(0x96u);
@@ -873,7 +873,7 @@ if ( v37 )
v38 = TDrain::TDrain(v37, v2, v14);
else
v38 = 0;
*(_DWORD *)((char *)v2 + 226) = v38;
*(DWORD *)((char *)v2 + 226) = v38;
break;
case 1011:
v30 = (TBlocker *)TPinballComponent::operator new(0x72u);
+7 -7
View File
@@ -10,15 +10,15 @@
/* 117 */
struct TPinballTable;
void __stdcall TPinballTable::LightShow_timeout(int, void*); // idb
void __stdcall TPinballTable::EndGame_timeout(int, void*); // idb
void TPinballTable::LightShow_timeout(int, void*); // idb
void TPinballTable::EndGame_timeout(int, void*); // idb
int __thiscall TPinballTable::AddScore(TPinballTable* this, int); // idb
// void __userpurge TPinballTable::ChangeBallCount(TPinballTable *this@<ecx>, int a2@<ebx>, int a3);
void __stdcall TPinballTable::replay_timer_callback(int, void*); // idb
// void TPinballTable::ChangeBallCount(TPinballTable *this, int a2, int a3);
void TPinballTable::replay_timer_callback(int, void*); // idb
void __thiscall TPinballTable::port_draw(TPinballTable* __hidden this); // idb
void __stdcall TPinballTable::tilt_timeout(int, void*); // idb
// void __userpurge TPinballTable::tilt(TPinballTable *this@<ecx>, int a2@<ebx>, float a3);
// int __userpurge TPinballTable::Message@<eax>(TPinballTable *this@<ecx>, int a2@<ebx>, int a3, float a4);
void TPinballTable::tilt_timeout(int, void*); // idb
// void TPinballTable::tilt(TPinballTable *this, int a2, float a3);
// int TPinballTable::Message(TPinballTable *this, int a2, int a3, float a4);
TZmapList* __thiscall TPinballTable::~TPinballTable(TPinballTable* this);
TPinballTable* __thiscall TPinballTable::`vector deleting destructor'(TPinballTable *this, char a2);
TPinballTable* __thiscall TPinballTable::TPinballTable(TPinballTable* this);
+58 -58
View File
@@ -1,17 +1,17 @@
#include "TPlunger.h"
//----- (010172F0) --------------------------------------------------------
void __stdcall TPlunger::BallFeedTimer(int a1, void *a2)
void TPlunger::BallFeedTimer(int a1, void *a2)
{
void (__stdcall **v2)(signed int, _DWORD); // eax
void (**v2)(signed int, DWORD); // eax
v2 = *(void (__stdcall ***)(signed int, _DWORD))a2;
*(_DWORD *)((char *)a2 + 78) = 0;
v2 = *(void (***)(signed int, DWORD))a2;
*(DWORD *)((char *)a2 + 78) = 0;
(*v2)(1015, 0.0);
}
//----- (01017314) --------------------------------------------------------
void __stdcall TPlunger::PullbackTimer(int a1, void *a2)
void TPlunger::PullbackTimer(int a1, void *a2)
{
char *v2; // esi
double v3; // st7
@@ -25,30 +25,30 @@ v3 = (double)*(signed int *)((char *)a2 + 90) + *(float *)((char *)a2 + 62);
v6 = (double)*(signed int *)((char *)a2 + 86);
if ( v3 <= v6 )
{
*(_DWORD *)(v2 + 78) = timer_set(*(float *)(v2 + 94), (int)v2, (int)TPlunger::PullbackTimer);
*(DWORD *)(v2 + 78) = timer_set(*(float *)(v2 + 94), (int)v2, (int)TPlunger::PullbackTimer);
}
else
{
*(_DWORD *)(v2 + 78) = 0;
*(DWORD *)(v2 + 78) = 0;
*(float *)(v2 + 62) = v6;
}
v4 = 4
* (unsigned __int64)(signed __int64)_floor(
(double)(*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v2 + 34) + 4) + 4) - 1)
(double)(*(DWORD *)(*(DWORD *)(*(DWORD *)(v2 + 34) + 4) + 4) - 1)
* (*(float *)(v2 + 62)
/ (double)*(signed int *)(v2 + 86)))
+ 8;
v5 = *(_DWORD *)(v4 + *(_DWORD *)(*(_DWORD *)(v2 + 34) + 4));
v5 = *(DWORD *)(v4 + *(DWORD *)(*(DWORD *)(v2 + 34) + 4));
render_sprite_set(
*(_DWORD **)(v2 + 26),
*(_DWORD *)(v4 + *(_DWORD *)(*(_DWORD *)(v2 + 34) + 4)),
*(_DWORD *)(*(_DWORD *)(*(_DWORD *)(v2 + 38) + 4) + v4),
*(_DWORD *)(v5 + 29) - *(_DWORD *)(*(_DWORD *)(v2 + 30) + 234),
*(_DWORD *)(v5 + 33) - *(_DWORD *)(*(_DWORD *)(v2 + 30) + 238));
*(DWORD **)(v2 + 26),
*(DWORD *)(v4 + *(DWORD *)(*(DWORD *)(v2 + 34) + 4)),
*(DWORD *)(*(DWORD *)(*(DWORD *)(v2 + 38) + 4) + v4),
*(DWORD *)(v5 + 29) - *(DWORD *)(*(DWORD *)(v2 + 30) + 234),
*(DWORD *)(v5 + 33) - *(DWORD *)(*(DWORD *)(v2 + 30) + 238));
}
//----- (010173C8) --------------------------------------------------------
void __stdcall TPlunger::PlungerReleasedTimer(int a1, void *a2)
void TPlunger::PlungerReleasedTimer(int a1, void *a2)
{
*(float *)((char *)a2 + 66) = 1000000000.0;
*(float *)((char *)a2 + 62) = 0.0;
@@ -71,11 +71,11 @@ v3 = this;
switch ( a2 )
{
case 1004:
if ( !*(_DWORD *)((char *)this + 78) )
if ( !*(DWORD *)((char *)this + 78) )
{
v7 = *(_DWORD *)((char *)this + 74);
v7 = *(DWORD *)((char *)this + 74);
*(float *)((char *)this + 62) = 0.0;
*(_DWORD *)((char *)this + 66) = 1315859240;
*(DWORD *)((char *)this + 66) = 1315859240;
loader_play_sound(v7);
TPlunger::PullbackTimer(0, (void *)v3);
}
@@ -85,24 +85,24 @@ case 1009:
case 1010:
goto LABEL_12;
case 1015:
v6 = *(_DWORD *)(*(_DWORD *)(*(_DWORD *)((char *)this + 30) + 254) + 8);
(**(void (__thiscall ***)(_DWORD, signed int, _DWORD))v6)(
*(_DWORD *)(*(_DWORD *)(*(_DWORD *)((char *)this + 30) + 254) + 8),
v6 = *(DWORD *)(*(DWORD *)(*(DWORD *)((char *)this + 30) + 254) + 8);
(**(void (__thiscall ***)(DWORD, signed int, DWORD))v6)(
*(DWORD *)(*(DWORD *)(*(DWORD *)((char *)this + 30) + 254) + 8),
1024,
0.0);
*(_DWORD *)(v6 + 42) = *(_DWORD *)(*(_DWORD *)((char *)v3 + 30) + 286);
*(_DWORD *)(v6 + 46) = *(_DWORD *)(*(_DWORD *)((char *)v3 + 30) + 290);
*(DWORD *)(v6 + 42) = *(DWORD *)(*(DWORD *)((char *)v3 + 30) + 286);
*(DWORD *)(v6 + 46) = *(DWORD *)(*(DWORD *)((char *)v3 + 30) + 290);
*(_BYTE *)(v6 + 5) = 1;
*(_DWORD *)(*(_DWORD *)((char *)v3 + 30) + 78) = 0;
*(DWORD *)(*(DWORD *)((char *)v3 + 30) + 78) = 0;
pb_tilt_no_more(a2);
control_handler(a2, v3);
return 0;
case 1016:
if ( *(_DWORD *)((char *)this + 82) )
timer_kill(*(_DWORD *)((char *)this + 82));
if ( *(DWORD *)((char *)this + 82) )
timer_kill(*(DWORD *)((char *)this + 82));
v4 = timer_set(0.95999998, (int)v3, (int)TPlunger::BallFeedTimer);
v5 = *(_DWORD *)((char *)v3 + 98);
*(_DWORD *)((char *)v3 + 82) = v4;
v5 = *(DWORD *)((char *)v3 + 98);
*(DWORD *)((char *)v3 + 82) = v4;
loader_play_sound(v5);
control_handler(a2, v3);
return 0;
@@ -112,24 +112,24 @@ case 1017:
v8 = 0.2;
goto LABEL_17;
case 1024:
if ( *(_DWORD *)((char *)this + 82) )
timer_kill(*(_DWORD *)((char *)this + 82));
*(_DWORD *)((char *)v3 + 82) = 0;
if ( *(DWORD *)((char *)this + 82) )
timer_kill(*(DWORD *)((char *)this + 82));
*(DWORD *)((char *)v3 + 82) = 0;
LABEL_12:
v9 = *(_DWORD *)((char *)v3 + 78);
v9 = *(DWORD *)((char *)v3 + 78);
*(float *)((char *)v3 + 66) = 0.0;
if ( v9 )
timer_kill(v9);
*(_DWORD *)((char *)v3 + 78) = 0;
*(DWORD *)((char *)v3 + 78) = 0;
if ( a2 == 1005 )
loader_play_sound(*(_DWORD *)((char *)v3 + 102));
v10 = *(_DWORD *)(*(_DWORD *)(*(_DWORD *)((char *)v3 + 34) + 4) + 8);
loader_play_sound(*(DWORD *)((char *)v3 + 102));
v10 = *(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 *)(v10 + 29) - *(_DWORD *)(*(_DWORD *)((char *)v3 + 30) + 234),
*(_DWORD *)(v10 + 33) - *(_DWORD *)(*(_DWORD *)((char *)v3 + 30) + 238));
*(DWORD **)((char *)v3 + 26),
*(DWORD *)(*(DWORD *)(*(DWORD *)((char *)v3 + 34) + 4) + 8),
*(DWORD *)(*(DWORD *)(*(DWORD *)((char *)v3 + 38) + 4) + 8),
*(DWORD *)(v10 + 29) - *(DWORD *)(*(DWORD *)((char *)v3 + 30) + 234),
*(DWORD *)(v10 + 33) - *(DWORD *)(*(DWORD *)((char *)v3 + 30) + 238));
v8 = *(float *)((char *)v3 + 94);
LABEL_17:
v11 = v8;
@@ -148,8 +148,8 @@ TPlunger *v6; // esi
float v7; // ST18_4
v6 = this;
if ( *(_DWORD *)(*(_DWORD *)((char *)this + 30) + 370) )
(**(void (__stdcall ***)(signed int, _DWORD))this)(1017, 0.0);
if ( *(DWORD *)(*(DWORD *)((char *)this + 30) + 370) )
(**(void (***)(signed int, DWORD))this)(1017, 0.0);
v7 = (double)_rand() * 0.00003051850947599719 * *(float *)((char *)v6 + 62) * 0.1 + *(float *)((char *)v6 + 62);
basic_collision(a2, a3, a4, *(float *)((char *)v6 + 54), *(float *)((char *)v6 + 58), *(float *)((char *)v6 + 66), v7);
}
@@ -161,7 +161,7 @@ TPlunger *v3; // esi
int v4; // eax
int v5; // eax
signed __int64 v6; // rax
_DWORD *v7; // eax
DWORD *v7; // eax
char v9; // [esp+8h] [ebp-48h]
int v10; // [esp+38h] [ebp-18h]
int v11; // [esp+40h] [ebp-10h]
@@ -169,26 +169,26 @@ int v12; // [esp+44h] [ebp-Ch]
v3 = this;
TCollisionComponent::TCollisionComponent(this, a2, a3, 1);
*(_DWORD *)v3 = &TPlunger::vftable;
*(DWORD *)v3 = &TPlunger::vftable;
loader_query_visual(a3, 0, &v9);
v4 = v11;
*(float *)((char *)v3 + 62) = 0.0;
*(_DWORD *)((char *)v3 + 82) = 0;
*(_DWORD *)((char *)v3 + 78) = 0;
*(_DWORD *)((char *)v3 + 98) = v4;
*(_DWORD *)((char *)v3 + 102) = v12;
*(_DWORD *)((char *)v3 + 74) = v10;
v5 = *(_DWORD *)((char *)v3 + 34);
*(_DWORD *)((char *)v3 + 66) = 1315859240;
*(_DWORD *)((char *)v3 + 86) = 100;
v6 = (signed __int64)(100.0 / ((double)*(signed int *)(*(_DWORD *)(v5 + 4) + 4) * 8.0));
*(DWORD *)((char *)v3 + 82) = 0;
*(DWORD *)((char *)v3 + 78) = 0;
*(DWORD *)((char *)v3 + 98) = v4;
*(DWORD *)((char *)v3 + 102) = v12;
*(DWORD *)((char *)v3 + 74) = v10;
v5 = *(DWORD *)((char *)v3 + 34);
*(DWORD *)((char *)v3 + 66) = 1315859240;
*(DWORD *)((char *)v3 + 86) = 100;
v6 = (signed __int64)(100.0 / ((double)*(signed int *)(*(DWORD *)(v5 + 4) + 4) * 8.0));
*(float *)((char *)v3 + 54) = 0.5;
*(float *)((char *)v3 + 58) = 0.5;
*(_DWORD *)((char *)v3 + 90) = v6;
*(_DWORD *)((char *)v3 + 94) = 1020054733;
v7 = (_DWORD *)loader_query_float_attribute(a3, 0, 601);
*(_DWORD *)((char *)a2 + 286) = *v7;
*(_DWORD *)((char *)a2 + 290) = v7[1];
*(DWORD *)((char *)v3 + 90) = v6;
*(DWORD *)((char *)v3 + 94) = 1020054733;
v7 = (DWORD *)loader_query_float_attribute(a3, 0, 601);
*(DWORD *)((char *)a2 + 286) = *v7;
*(DWORD *)((char *)a2 + 290) = v7[1];
return v3;
}
// 1002750: using guessed type void *TPlunger::vftable;
+3 -3
View File
@@ -10,9 +10,9 @@
/* 118 */
struct TPlunger;
void __stdcall TPlunger::BallFeedTimer(int, void*); // idb
void __stdcall TPlunger::PullbackTimer(int, void*); // idb
void __stdcall TPlunger::PlungerReleasedTimer(int, void*); // idb
void TPlunger::BallFeedTimer(int, void*); // idb
void TPlunger::PullbackTimer(int, void*); // idb
void TPlunger::PlungerReleasedTimer(int, void*); // idb
int __thiscall TPlunger::Message(TPlunger* this, int, float); // idb
void __thiscall TPlunger::Collision(TPlunger* this, struct TBall*, struct vector_type*, struct vector_type*, float, struct TEdgeSegment*); // idb
TPlunger* __thiscall TPlunger::TPlunger(TPlunger* this, struct TPinballTable* a2, int a3);
+28 -28
View File
@@ -1,18 +1,18 @@
#include "TPopupTarget.h"
//----- (010160B3) --------------------------------------------------------
void __stdcall TPopupTarget::TimerExpired(int a1, void *a2)
void TPopupTarget::TimerExpired(int a1, void *a2)
{
int v2; // eax
int v3; // esi
*(_DWORD *)((char *)a2 + 78) = 0;
v2 = *(_DWORD *)((char *)a2 + 34);
*(DWORD *)((char *)a2 + 78) = 0;
v2 = *(DWORD *)((char *)a2 + 34);
*((_BYTE *)a2 + 5) = 1;
render_sprite_set_bitmap(*(_DWORD **)((char *)a2 + 26), *(_DWORD *)(*(_DWORD *)(v2 + 4) + 8));
render_sprite_set_bitmap(*(DWORD **)((char *)a2 + 26), *(DWORD *)(*(DWORD *)(v2 + 4) + 8));
if ( a1 )
{
v3 = *(_DWORD *)((char *)a2 + 70);
v3 = *(DWORD *)((char *)a2 + 70);
if ( v3 )
loader_play_sound(v3);
}
@@ -24,7 +24,7 @@ int __thiscall TPopupTarget::Message(TPopupTarget *this, int a2, float a3)
TPopupTarget *v3; // esi
int v4; // eax
int v5; // ecx
_DWORD *v6; // eax
DWORD *v6; // eax
int v7; // eax
__int64 v8; // ST04_8
@@ -34,37 +34,37 @@ switch ( a2 )
case 49:
v8 = *(unsigned int *)((char *)this + 26);
*((_BYTE *)this + 5) = 0;
render_sprite_set_bitmap((_DWORD *)v8, SHIDWORD(v8));
render_sprite_set_bitmap((DWORD *)v8, SHIDWORD(v8));
break;
case 50:
*(_DWORD *)((char *)this + 78) = timer_set(
*(DWORD *)((char *)this + 78) = timer_set(
*(float *)((char *)this + 82),
(int)this,
(int)TPopupTarget::TimerExpired);
break;
case 1020:
*(_DWORD *)((char *)this + 4 * *(_DWORD *)(*(_DWORD *)((char *)this + 30) + 218) + 98) = *(_DWORD *)((char *)this + 6);
v7 = *(_DWORD *)((char *)this + 4 * (unsigned __int64)(signed __int64)_floor(a3) + 98);
*(_DWORD *)((char *)v3 + 6) = v7;
*(DWORD *)((char *)this + 4 * *(DWORD *)(*(DWORD *)((char *)this + 30) + 218) + 98) = *(DWORD *)((char *)this + 6);
v7 = *(DWORD *)((char *)this + 4 * (unsigned __int64)(signed __int64)_floor(a3) + 98);
*(DWORD *)((char *)v3 + 6) = v7;
TPopupTarget::Message(v3, 50 - (v7 != 0), 0.0);
break;
case 1024:
v4 = *(_DWORD *)((char *)this + 30);
*(_DWORD *)((char *)this + 6) = 0;
v4 = *(DWORD *)((char *)this + 30);
*(DWORD *)((char *)this + 6) = 0;
v5 = 0;
if ( *(_DWORD *)(v4 + 214) > 0 )
if ( *(DWORD *)(v4 + 214) > 0 )
{
v6 = (_DWORD *)((char *)v3 + 98);
v6 = (DWORD *)((char *)v3 + 98);
do
{
*v6 = 0;
++v5;
++v6;
}
while ( v5 < *(_DWORD *)(*(_DWORD *)((char *)v3 + 30) + 214) );
while ( v5 < *(DWORD *)(*(DWORD *)((char *)v3 + 30) + 214) );
}
if ( *(_DWORD *)((char *)v3 + 78) )
timer_kill(*(_DWORD *)((char *)v3 + 78));
if ( *(DWORD *)((char *)v3 + 78) )
timer_kill(*(DWORD *)((char *)v3 + 78));
TPopupTarget::TimerExpired(0, (void *)v3);
break;
}
@@ -79,7 +79,7 @@ int result; // eax
if ( a2 >= 3 )
result = 0;
else
result = *(_DWORD *)((char *)this + 4 * a2 + 86);
result = *(DWORD *)((char *)this + 4 * a2 + 86);
return result;
}
@@ -87,7 +87,7 @@ return result;
void __thiscall TPopupTarget::put_scoring(TPopupTarget *this, int a2, int a3)
{
if ( a2 < 3 )
*(_DWORD *)((char *)this + 4 * a2 + 86) = a3;
*(DWORD *)((char *)this + 4 * a2 + 86) = a3;
}
//----- (010181ED) --------------------------------------------------------
@@ -96,7 +96,7 @@ void __thiscall TPopupTarget::Collision(TPopupTarget *this, struct TBall *a2, st
TPopupTarget *v6; // esi
v6 = this;
if ( *(_DWORD *)(*(_DWORD *)((char *)this + 30) + 370) )
if ( *(DWORD *)(*(DWORD *)((char *)this + 30) + 370) )
{
basic_collision(a2, a3, a4, *(float *)((char *)this + 54), *(float *)((char *)this + 58), 1000000000.0, 0.0);
}
@@ -109,9 +109,9 @@ a4,
*(float *)((char *)this + 66),
*(float *)((char *)this + 62)) > *(float *)((char *)this + 66) )
{
if ( *(_DWORD *)((char *)v6 + 74) )
loader_play_sound(*(_DWORD *)((char *)v6 + 74));
(**(void (__thiscall ***)(TPopupTarget *, signed int, _DWORD))v6)(v6, 49, 0.0);
if ( *(DWORD *)((char *)v6 + 74) )
loader_play_sound(*(DWORD *)((char *)v6 + 74));
(**(void (__thiscall ***)(TPopupTarget *, signed int, DWORD))v6)(v6, 49, 0.0);
control_handler(63, v6);
}
}
@@ -124,10 +124,10 @@ int v4; // eax
v3 = this;
TCollisionComponent::TCollisionComponent(this, a2, a3, 1);
*(_DWORD *)v3 = &TPopupTarget::vftable;
v4 = *(_DWORD *)loader_query_float_attribute(a3, 0, 407);
*(_DWORD *)((char *)v3 + 78) = 0;
*(_DWORD *)((char *)v3 + 82) = v4;
*(DWORD *)v3 = &TPopupTarget::vftable;
v4 = *(DWORD *)loader_query_float_attribute(a3, 0, 407);
*(DWORD *)((char *)v3 + 78) = 0;
*(DWORD *)((char *)v3 + 82) = v4;
return v3;
}
// 10025A4: using guessed type void *TPopupTarget::vftable;
+1 -1
View File
@@ -10,7 +10,7 @@
/* 106 */
struct TPopupTarget;
void __stdcall TPopupTarget::TimerExpired(int, void*); // idb
void TPopupTarget::TimerExpired(int, void*); // idb
int __thiscall TPopupTarget::Message(TPopupTarget* this, int, float); // idb
int __thiscall TPopupTarget::get_scoring(TPopupTarget* this, int); // idb
void __thiscall TPopupTarget::put_scoring(TPopupTarget* this, int, int); // idb
+73 -73
View File
@@ -8,7 +8,7 @@ int result; // eax
if ( a2 >= 4 )
result = 0;
else
result = *(_DWORD *)((char *)this + 4 * a2 + 78);
result = *(DWORD *)((char *)this + 4 * a2 + 78);
return result;
}
@@ -16,7 +16,7 @@ return result;
void __thiscall TRamp::put_scoring(TRamp *this, int a2, int a3)
{
if ( a2 < 4 )
*(_DWORD *)((char *)this + 4 * a2 + 78) = a3;
*(DWORD *)((char *)this + 4 * a2 + 78) = a3;
}
//----- (01016C24) --------------------------------------------------------
@@ -25,7 +25,7 @@ void __thiscall TRamp::Collision(TRamp *this, struct TBall *a2, struct vector_ty
TRamp *v6; // edi
double v7; // st7
int v8; // eax
_DWORD *v9; // eax
DWORD *v9; // eax
double v10; // st7
double v11; // st6
double v12; // st6
@@ -34,48 +34,48 @@ double v13; // st7
v6 = this;
TBall::not_again(a2, a6);
v7 = *(float *)((char *)a2 + 70) - a5;
*(_DWORD *)((char *)a2 + 42) = *(_DWORD *)a3;
v8 = *((_DWORD *)a3 + 1);
*(DWORD *)((char *)a2 + 42) = *(DWORD *)a3;
v8 = *((DWORD *)a3 + 1);
*(float *)((char *)a2 + 70) = v7;
*(_DWORD *)((char *)a2 + 46) = v8;
v9 = *(_DWORD **)((char *)a6 + 13);
*(DWORD *)((char *)a2 + 46) = v8;
v9 = *(DWORD **)((char *)a6 + 13);
if ( v9 )
{
*(_DWORD *)((char *)a2 + 150) = 1;
*(_DWORD *)((char *)a2 + 138) = *v9;
*(DWORD *)((char *)a2 + 150) = 1;
*(DWORD *)((char *)a2 + 138) = *v9;
v10 = *(float *)((char *)a2 + 138) * *(float *)((char *)a2 + 42);
v11 = *(float *)((char *)a2 + 46);
*(_DWORD *)((char *)a2 + 142) = v9[1];
*(DWORD *)((char *)a2 + 142) = v9[1];
v12 = v11 * *(float *)((char *)a2 + 142);
*(_DWORD *)((char *)a2 + 146) = v9[2];
*(_DWORD *)((char *)a2 + 94) = v9[11];
*(_DWORD *)((char *)a2 + 98) = v9[12];
*(DWORD *)((char *)a2 + 146) = v9[2];
*(DWORD *)((char *)a2 + 94) = v9[11];
*(DWORD *)((char *)a2 + 98) = v9[12];
*(float *)((char *)a2 + 50) = v10 + v12 + *(float *)((char *)a2 + 154) + *(float *)((char *)a2 + 146);
*(_DWORD *)((char *)a2 + 110) = *(_DWORD *)((char *)v6 + 106);
*(DWORD *)((char *)a2 + 110) = *(DWORD *)((char *)v6 + 106);
return;
}
if ( a6 == *(struct TEdgeSegment **)((char *)v6 + 134) )
{
if ( !*(_DWORD *)(*(_DWORD *)((char *)v6 + 30) + 370) )
if ( !*(DWORD *)(*(DWORD *)((char *)v6 + 30) + 370) )
{
loader_play_sound(*(_DWORD *)((char *)v6 + 70));
loader_play_sound(*(DWORD *)((char *)v6 + 70));
control_handler(63, v6);
}
}
else
{
*(_DWORD *)((char *)a2 + 150) = 0;
*(DWORD *)((char *)a2 + 150) = 0;
if ( a6 == *(struct TEdgeSegment **)((char *)v6 + 126) )
{
*(_DWORD *)((char *)a2 + 110) = *(_DWORD *)((char *)v6 + 138);
if ( !*(_DWORD *)((char *)v6 + 110) )
*(DWORD *)((char *)a2 + 110) = *(DWORD *)((char *)v6 + 138);
if ( !*(DWORD *)((char *)v6 + 110) )
return;
v13 = *(float *)((char *)a2 + 154) + *(float *)((char *)v6 + 146);
}
else
{
*(_DWORD *)((char *)a2 + 110) = *(_DWORD *)((char *)v6 + 142);
if ( !*(_DWORD *)((char *)v6 + 110) )
*(DWORD *)((char *)a2 + 110) = *(DWORD *)((char *)v6 + 142);
if ( !*(DWORD *)((char *)v6 + 110) )
return;
v13 = *(float *)((char *)a2 + 154) + *(float *)((char *)v6 + 150);
}
@@ -101,7 +101,7 @@ TRamp *__thiscall TRamp::TRamp(TRamp *this, struct TPinballTable *a2, void *a3)
{
void *v3; // ebx
TRamp *v4; // esi
_DWORD *v5; // eax
DWORD *v5; // eax
float *v6; // eax
float *v7; // edi
signed __int64 v8; // rax
@@ -188,30 +188,30 @@ float v88; // [esp+A4h] [ebp-4h]
v3 = a3;
v4 = this;
TCollisionComponent::TCollisionComponent(this, a2, (int)a3, 0);
*(_DWORD *)v4 = &TRamp::vftable;
*(_DWORD *)((char *)v4 + 6) = 0;
*(DWORD *)v4 = &TRamp::vftable;
*(DWORD *)((char *)v4 + 6) = 0;
*((_BYTE *)v4 + 4) = 1;
loader_query_visual((int)v3, 0, &v73);
*(_DWORD *)((char *)v4 + 106) = v74;
v5 = (_DWORD *)loader_query_float_attribute((int)v3, 0, 701);
*(DWORD *)((char *)v4 + 106) = v74;
v5 = (DWORD *)loader_query_float_attribute((int)v3, 0, 701);
if ( v5 )
*(_DWORD *)((char *)v4 + 118) = *v5;
*(DWORD *)((char *)v4 + 118) = *v5;
else
*(_DWORD *)((char *)v4 + 118) = 1045220557;
*(DWORD *)((char *)v4 + 118) = 1045220557;
v6 = (float *)loader_query_float_attribute((int)v3, 0, 1305);
if ( v6 )
*(_DWORD *)((char *)v4 + 110) = (signed __int64)_floor(*v6);
*(DWORD *)((char *)v4 + 110) = (signed __int64)_floor(*v6);
else
*(_DWORD *)((char *)v4 + 110) = 0;
*(DWORD *)((char *)v4 + 110) = 0;
v7 = (float *)loader_query_float_attribute((int)a3, 0, 1300);
v8 = (signed __int64)_floor(*v7);
v9 = a3;
*(_DWORD *)((char *)v4 + 114) = v8;
*(_DWORD *)((char *)v4 + 122) = v7 + 1;
*(DWORD *)((char *)v4 + 114) = v8;
*(DWORD *)((char *)v4 + 122) = v7 + 1;
v10 = loader_query_float_attribute((int)v9, 0, 1303);
v11 = _floor(*(float *)v10);
v75 = *(_DWORD *)(v10 + 8);
v76 = *(_DWORD *)(v10 + 12);
v75 = *(DWORD *)(v10 + 8);
v76 = *(DWORD *)(v10 + 12);
v86 = *(float *)(v10 + 16);
v87 = *(float *)(v10 + 20);
v12 = (TLine *)operator new(0x55u);
@@ -225,70 +225,70 @@ v4,
(struct vector_type *)&v75);
else
v13 = 0;
*(_DWORD *)((char *)v4 + 134) = v13;
*(DWORD *)((char *)v4 + 134) = v13;
objlist_class::Add((TRamp *)((char *)v4 + 42), (void *)v13);
if ( v13 )
{
v14 = *(_DWORD *)v13;
*(_DWORD *)((char *)v13 + 13) = 0;
v14 = *(DWORD *)v13;
*(DWORD *)((char *)v13 + 13) = 0;
(*(void (__thiscall **)(TLine *))(v14 + 8))(v13);
}
v15 = loader_query_float_attribute((int)a3, 0, 1301);
*(_DWORD *)((char *)v4 + 138) = (signed __int64)_floor(*(float *)v15);
*(DWORD *)((char *)v4 + 138) = (signed __int64)_floor(*(float *)v15);
v16 = _floor(*(float *)(v15 + 4));
v17 = *(_DWORD *)((char *)v4 + 138);
v17 = *(DWORD *)((char *)v4 + 138);
v78 = (signed __int64)v16;
v15 += 12;
*(_DWORD *)((char *)v4 + 138) = 1 << v17;
*(_DWORD *)((char *)v4 + 146) = *(_DWORD *)(v15 + 16);
*(DWORD *)((char *)v4 + 138) = 1 << v17;
*(DWORD *)((char *)v4 + 146) = *(DWORD *)(v15 + 16);
find_closest_edge(
*(struct ramp_plane_type **)((char *)v4 + 122),
*(_DWORD *)((char *)v4 + 114),
*(DWORD *)((char *)v4 + 114),
(struct wall_point_type *)v15,
&a2,
&v80);
v18 = (TLine *)operator new(0x55u);
if ( v18 )
v19 = TLine::TLine(v18, v4, (char *)v4 + 5, *(_DWORD *)((char *)v4 + 106), v80, a2);
v19 = TLine::TLine(v18, v4, (char *)v4 + 5, *(DWORD *)((char *)v4 + 106), v80, a2);
else
v19 = 0;
*(_DWORD *)((char *)v4 + 126) = v19;
*(DWORD *)((char *)v4 + 126) = v19;
objlist_class::Add((TRamp *)((char *)v4 + 42), (void *)v19);
if ( v19 )
{
v20 = *(_DWORD *)v19;
*(_DWORD *)((char *)v19 + 13) = 0;
v20 = *(DWORD *)v19;
*(DWORD *)((char *)v19 + 13) = 0;
(*(void (__thiscall **)(TLine *))(v20 + 8))(v19);
}
v21 = loader_query_float_attribute((int)a3, 0, 1302);
*(_DWORD *)((char *)v4 + 142) = (signed __int64)_floor(*(float *)v21);
*(DWORD *)((char *)v4 + 142) = (signed __int64)_floor(*(float *)v21);
v22 = _floor(*(float *)(v21 + 4));
v23 = *(_DWORD *)((char *)v4 + 142);
v23 = *(DWORD *)((char *)v4 + 142);
v77 = (signed __int64)v22;
v21 += 12;
*(_DWORD *)((char *)v4 + 142) = 1 << v23;
*(_DWORD *)((char *)v4 + 150) = *(_DWORD *)(v21 + 16);
*(DWORD *)((char *)v4 + 142) = 1 << v23;
*(DWORD *)((char *)v4 + 150) = *(DWORD *)(v21 + 16);
find_closest_edge(
*(struct ramp_plane_type **)((char *)v4 + 122),
*(_DWORD *)((char *)v4 + 114),
*(DWORD *)((char *)v4 + 114),
(struct wall_point_type *)v21,
&v81,
&v84);
v24 = (TLine *)operator new(0x55u);
if ( v24 )
v25 = TLine::TLine(v24, v4, (char *)v4 + 5, *(_DWORD *)((char *)v4 + 106), v84, v81);
v25 = TLine::TLine(v24, v4, (char *)v4 + 5, *(DWORD *)((char *)v4 + 106), v84, v81);
else
v25 = 0;
*(_DWORD *)((char *)v4 + 130) = v25;
*(DWORD *)((char *)v4 + 130) = v25;
objlist_class::Add((TRamp *)((char *)v4 + 42), (void *)v25);
if ( v25 )
{
v26 = *(_DWORD *)v25;
*(_DWORD *)((char *)v25 + 13) = 0;
v26 = *(DWORD *)v25;
*(DWORD *)((char *)v25 + 13) = 0;
(*(void (__thiscall **)(TLine *))(v26 + 8))(v25);
}
v27 = *(_DWORD *)((char *)v4 + 114) == 0;
v28 = *(_DWORD *)((char *)v4 + 114) < 0;
v27 = *(DWORD *)((char *)v4 + 114) == 0;
v28 = *(DWORD *)((char *)v4 + 114) < 0;
v86 = 1000000000.0;
v82 = 0;
v85 = 1000000000.0;
@@ -298,7 +298,7 @@ if ( !v28 && !v27 )
{
do
{
v29 = *(_DWORD *)((char *)v4 + 122);
v29 = *(DWORD *)((char *)v4 + 122);
v83 = 52 * v82;
v30 = v29 + 52 * v82;
v31 = v30 + 28;
@@ -486,8 +486,8 @@ objlist_class::Add((TRamp *)((char *)v4 + 42), a3);
if ( a3 )
{
v55 = a3;
*(_DWORD *)((char *)a3 + 13) = v83 + *(_DWORD *)((char *)v4 + 122);
(*(void (**)(void))(*(_DWORD *)v55 + 8))();
*(DWORD *)((char *)a3 + 13) = v83 + *(DWORD *)((char *)v4 + 122);
(*(void (**)(void))(*(DWORD *)v55 + 8))();
}
}
if ( v79 != a2 || (struct vector_type *)v31 != v80 )
@@ -520,8 +520,8 @@ objlist_class::Add((TRamp *)((char *)v4 + 42), a3);
if ( a3 )
{
v58 = a3;
*(_DWORD *)((char *)a3 + 13) = v83 + *(_DWORD *)((char *)v4 + 122);
(*(void (**)(void))(*(_DWORD *)v58 + 8))();
*(DWORD *)((char *)a3 + 13) = v83 + *(DWORD *)((char *)v4 + 122);
(*(void (**)(void))(*(DWORD *)v58 + 8))();
}
}
if ( (struct TPinballTable *)v31 != a2 || (struct vector_type *)v32 != v80 )
@@ -562,31 +562,31 @@ v61 = 0;
objlist_class::Add((TRamp *)((char *)v4 + 42), (void *)v61);
if ( v61 )
{
*(_DWORD *)((char *)v61 + 13) = v83 + *(_DWORD *)((char *)v4 + 122);
(*(void (__thiscall **)(TLine *))(*(_DWORD *)v61 + 8))(v61);
*(DWORD *)((char *)v61 + 13) = v83 + *(DWORD *)((char *)v4 + 122);
(*(void (__thiscall **)(TLine *))(*(DWORD *)v61 + 8))(v61);
}
}
v62 = v83;
*(float *)(v83 + *(_DWORD *)((char *)v4 + 122) + 44) = cos(*(float *)(v83 + *(_DWORD *)((char *)v4 + 122) + 40))
* sin(*(float *)(v83 + *(_DWORD *)((char *)v4 + 122) + 36))
* *(float *)(*(_DWORD *)((char *)v4 + 30) + 270);
v63 = (float *)(v62 + *(_DWORD *)((char *)v4 + 122));
v64 = *(_DWORD *)((char *)v4 + 30);
*(float *)(v83 + *(DWORD *)((char *)v4 + 122) + 44) = cos(*(float *)(v83 + *(DWORD *)((char *)v4 + 122) + 40))
* sin(*(float *)(v83 + *(DWORD *)((char *)v4 + 122) + 36))
* *(float *)(*(DWORD *)((char *)v4 + 30) + 270);
v63 = (float *)(v62 + *(DWORD *)((char *)v4 + 122));
v64 = *(DWORD *)((char *)v4 + 30);
v65 = sin(v63[10]);
++v82;
v63[12] = v65 * sin(v63[9]) * *(float *)(v64 + 270);
}
while ( v82 < *(_DWORD *)((char *)v4 + 114) );
while ( v82 < *(DWORD *)((char *)v4 + 114) );
}
v66 = v87;
v67 = v88;
*(_DWORD *)((char *)v4 + 94) = (char *)v4 + 5;
*(DWORD *)((char *)v4 + 94) = (char *)v4 + 5;
v68 = (int)v74;
v69 = v67;
v70 = v85;
*(_DWORD *)((char *)v4 + 102) = v4;
*(DWORD *)((char *)v4 + 102) = v4;
v71 = v70;
*(_DWORD *)((char *)v4 + 98) = v68;
*(DWORD *)((char *)v4 + 98) = v68;
edges_insert_square(v86, v71, v69, v66, 0, (TRamp *)((char *)v4 + 94));
return v4;
}
+15 -15
View File
@@ -1,7 +1,7 @@
#include "TRollover.h"
//----- (0101644B) --------------------------------------------------------
void __stdcall TRollover::TimerExpired(int a1, void *a2)
void TRollover::TimerExpired(int a1, void *a2)
{
*((_BYTE *)a2 + 5) = 1;
}
@@ -13,11 +13,11 @@ int v3; // eax
if ( a2 == 1024 )
{
v3 = *(_DWORD *)((char *)this + 34);
v3 = *(DWORD *)((char *)this + 34);
*((_BYTE *)this + 5) = 1;
*((_BYTE *)this + 78) = 0;
if ( v3 )
render_sprite_set_bitmap(*(_DWORD **)((char *)this + 26), *(_DWORD *)(*(_DWORD *)(v3 + 4) + 8));
render_sprite_set_bitmap(*(DWORD **)((char *)this + 26), *(DWORD *)(*(DWORD *)(v3 + 4) + 8));
}
return 0;
}
@@ -30,7 +30,7 @@ int result; // eax
if ( a2 >= 2 )
result = 0;
else
result = *(_DWORD *)((char *)this + 4 * a2 + 79);
result = *(DWORD *)((char *)this + 4 * a2 + 79);
return result;
}
@@ -38,7 +38,7 @@ return result;
void __thiscall TRollover::put_scoring(TRollover *this, int a2, int a3)
{
if ( a2 < 2 )
*(_DWORD *)((char *)this + 4 * a2 + 79) = a3;
*(DWORD *)((char *)this + 4 * a2 + 79) = a3;
}
//----- (010182E4) --------------------------------------------------------
@@ -74,11 +74,11 @@ bool v10; // cl
v6 = this;
*(float *)((char *)a2 + 42) = *(float *)a3;
v7 = *(float *)((char *)a2 + 70);
*(_DWORD *)((char *)a2 + 46) = *((_DWORD *)a3 + 1);
*(DWORD *)((char *)a2 + 46) = *((DWORD *)a3 + 1);
*(float *)((char *)a2 + 70) = v7 - a5;
TBall::not_again(a2, a6);
v8 = 0;
if ( !*(_DWORD *)(*(_DWORD *)((char *)v6 + 30) + 370) )
if ( !*(DWORD *)(*(DWORD *)((char *)v6 + 30) + 370) )
{
if ( *((_BYTE *)v6 + 78) )
{
@@ -87,17 +87,17 @@ timer_set(0.1, (int)v6, (int)TRollover::TimerExpired);
}
else
{
loader_play_sound(*(_DWORD *)((char *)v6 + 70));
loader_play_sound(*(DWORD *)((char *)v6 + 70));
control_handler(63, v6);
}
v9 = *(_DWORD *)((char *)v6 + 34);
v9 = *(DWORD *)((char *)v6 + 34);
v10 = *((_BYTE *)v6 + 78) == 0;
*((_BYTE *)v6 + 78) = v10;
if ( v9 )
{
if ( !v10 )
v8 = *(_DWORD *)(*(_DWORD *)(v9 + 4) + 8);
render_sprite_set_bitmap(*(_DWORD **)((char *)v6 + 26), v8);
v8 = *(DWORD *)(*(DWORD *)(v9 + 4) + 8);
render_sprite_set_bitmap(*(DWORD **)((char *)v6 + 26), v8);
}
}
}
@@ -109,7 +109,7 @@ TRollover *v4; // esi
v4 = this;
TCollisionComponent::TCollisionComponent(this, a2, a3, a4);
*(_DWORD *)v4 = &TRollover::vftable;
*(DWORD *)v4 = &TRollover::vftable;
return v4;
}
// 1002614: using guessed type void *TRollover::vftable;
@@ -122,11 +122,11 @@ int v4; // eax
v3 = this;
TCollisionComponent::TCollisionComponent(this, a2, a3, 0);
v4 = *(_DWORD *)((char *)v3 + 34);
*(_DWORD *)v3 = &TRollover::vftable;
v4 = *(DWORD *)((char *)v3 + 34);
*(DWORD *)v3 = &TRollover::vftable;
*((_BYTE *)v3 + 78) = 0;
if ( v4 )
render_sprite_set_bitmap(*(_DWORD **)((char *)v3 + 26), *(_DWORD *)(*(_DWORD *)(v4 + 4) + 8));
render_sprite_set_bitmap(*(DWORD **)((char *)v3 + 26), *(DWORD *)(*(DWORD *)(v4 + 4) + 8));
TRollover::build_walls(v3, a3);
return v3;
}
+1 -1
View File
@@ -10,7 +10,7 @@
/* 108 */
struct TRollover;
void __stdcall TRollover::TimerExpired(int, void*); // idb
void TRollover::TimerExpired(int, void*); // idb
int __thiscall TRollover::Message(TRollover* this, int, float); // idb
int __thiscall TRollover::get_scoring(TRollover* this, int); // idb
void __thiscall TRollover::put_scoring(TRollover* this, int, int); // idb
+43 -43
View File
@@ -1,24 +1,24 @@
#include "TSink.h"
//----- (01017130) --------------------------------------------------------
void __stdcall TSink::TimerExpired(int a1, void *a2)
void TSink::TimerExpired(int a1, void *a2)
{
int v2; // eax
v2 = *(_DWORD *)(*(_DWORD *)(*(_DWORD *)((char *)a2 + 30) + 262) + 8);
*(_DWORD *)(v2 + 106) = 0;
v2 = *(DWORD *)(*(DWORD *)(*(DWORD *)((char *)a2 + 30) + 262) + 8);
*(DWORD *)(v2 + 106) = 0;
*(_BYTE *)(v2 + 5) = 1;
*(_DWORD *)(v2 + 42) = *(_DWORD *)((char *)a2 + 86);
*(_DWORD *)(v2 + 46) = *(_DWORD *)((char *)a2 + 90);
*(DWORD *)(v2 + 42) = *(DWORD *)((char *)a2 + 86);
*(DWORD *)(v2 + 46) = *(DWORD *)((char *)a2 + 90);
throw_ball(
(struct TBall *)v2,
(struct vector_type *)((char *)a2 + 98),
*(float *)((char *)a2 + 110),
*(float *)((char *)a2 + 114),
*(float *)((char *)a2 + 118));
if ( *(_DWORD *)((char *)a2 + 126) )
loader_play_sound(*(_DWORD *)((char *)a2 + 126));
*(_DWORD *)((char *)a2 + 78) = 0;
if ( *(DWORD *)((char *)a2 + 126) )
loader_play_sound(*(DWORD *)((char *)a2 + 126));
*(DWORD *)((char *)a2 + 78) = 0;
}
//----- (01017197) --------------------------------------------------------
@@ -27,7 +27,7 @@ int __thiscall TSink::Message(TSink *this, int a2, float a3)
TSink *v3; // esi
int v4; // eax
int v5; // ecx
_DWORD *v6; // eax
DWORD *v6; // eax
v3 = this;
switch ( a2 )
@@ -35,29 +35,29 @@ switch ( a2 )
case 56:
if ( a3 < 0.0 )
a3 = *(float *)((char *)this + 82);
*(_DWORD *)((char *)this + 78) = timer_set(a3, (int)this, (int)TSink::TimerExpired);
*(DWORD *)((char *)this + 78) = timer_set(a3, (int)this, (int)TSink::TimerExpired);
break;
case 1020:
*(_DWORD *)((char *)this + 4 * *(_DWORD *)(*(_DWORD *)((char *)this + 30) + 218) + 142) = *(_DWORD *)((char *)this + 6);
*(_DWORD *)((char *)this + 6) = *(_DWORD *)((char *)this + 4 * (unsigned __int64)(signed __int64)_floor(a3) + 142);
*(DWORD *)((char *)this + 4 * *(DWORD *)(*(DWORD *)((char *)this + 30) + 218) + 142) = *(DWORD *)((char *)this + 6);
*(DWORD *)((char *)this + 6) = *(DWORD *)((char *)this + 4 * (unsigned __int64)(signed __int64)_floor(a3) + 142);
break;
case 1024:
if ( *(_DWORD *)((char *)this + 78) )
timer_kill(*(_DWORD *)((char *)this + 78));
v4 = *(_DWORD *)((char *)v3 + 30);
*(_DWORD *)((char *)v3 + 78) = 0;
*(_DWORD *)((char *)v3 + 6) = 0;
if ( *(DWORD *)((char *)this + 78) )
timer_kill(*(DWORD *)((char *)this + 78));
v4 = *(DWORD *)((char *)v3 + 30);
*(DWORD *)((char *)v3 + 78) = 0;
*(DWORD *)((char *)v3 + 6) = 0;
v5 = 0;
if ( *(_DWORD *)(v4 + 214) > 0 )
if ( *(DWORD *)(v4 + 214) > 0 )
{
v6 = (_DWORD *)((char *)v3 + 142);
v6 = (DWORD *)((char *)v3 + 142);
do
{
*v6 = 0;
++v5;
++v6;
}
while ( v5 < *(_DWORD *)(*(_DWORD *)((char *)v3 + 30) + 214) );
while ( v5 < *(DWORD *)(*(DWORD *)((char *)v3 + 30) + 214) );
}
break;
}
@@ -72,7 +72,7 @@ int result; // eax
if ( a2 >= 3 )
result = 0;
else
result = *(_DWORD *)((char *)this + 4 * a2 + 130);
result = *(DWORD *)((char *)this + 4 * a2 + 130);
return result;
}
@@ -80,7 +80,7 @@ return result;
void __thiscall TSink::put_scoring(TSink *this, int a2, int a3)
{
if ( a2 < 3 )
*(_DWORD *)((char *)this + 4 * a2 + 130) = a3;
*(DWORD *)((char *)this + 4 * a2 + 130) = a3;
}
//----- (010184ED) --------------------------------------------------------
@@ -88,21 +88,21 @@ void __thiscall TSink::Collision(TSink *this, struct TBall *a2, struct vector_ty
{
TSink *v6; // esi
int v7; // eax
_DWORD *v8; // ST14_4
DWORD *v8; // ST14_4
v6 = this;
v7 = *(_DWORD *)((char *)this + 30);
*(_DWORD *)((char *)this + 78) = 0;
if ( *(_DWORD *)(v7 + 370) )
v7 = *(DWORD *)((char *)this + 30);
*(DWORD *)((char *)this + 78) = 0;
if ( *(DWORD *)(v7 + 370) )
{
basic_collision(a2, a3, a4, *(float *)((char *)this + 54), *(float *)((char *)this + 58), 1000000000.0, 0.0);
}
else
{
v8 = *(_DWORD **)((char *)a2 + 26);
v8 = *(DWORD **)((char *)a2 + 26);
*((_BYTE *)a2 + 5) = 0;
render_sprite_set_bitmap(v8, 0);
loader_play_sound(*(_DWORD *)((char *)v6 + 122));
loader_play_sound(*(DWORD *)((char *)v6 + 122));
control_handler(63, v6);
}
}
@@ -114,7 +114,7 @@ TSink *v3; // ebx
int v4; // eax
int v5; // eax
int v6; // eax
_DWORD *v7; // eax
DWORD *v7; // eax
char v9; // [esp+Ch] [ebp-48h]
int v10; // [esp+24h] [ebp-30h]
float v11; // [esp+28h] [ebp-2Ch]
@@ -127,25 +127,25 @@ int v17; // [esp+48h] [ebp-Ch]
v3 = this;
TCollisionComponent::TCollisionComponent(this, a2, a3, 1);
*(_DWORD *)v3 = &TSink::vftable;
*(_DWORD *)((char *)v3 + 6) = 0;
*(_DWORD *)((char *)v3 + 78) = 0;
*(DWORD *)v3 = &TSink::vftable;
*(DWORD *)((char *)v3 + 6) = 0;
*(DWORD *)((char *)v3 + 78) = 0;
loader_query_visual(a3, 0, &v9);
v4 = v15;
*(float *)((char *)v3 + 118) = v11 * 0.01;
*(_DWORD *)((char *)v3 + 98) = v12;
*(_DWORD *)((char *)v3 + 110) = v4;
*(_DWORD *)((char *)v3 + 114) = v10;
*(DWORD *)((char *)v3 + 98) = v12;
*(DWORD *)((char *)v3 + 110) = v4;
*(DWORD *)((char *)v3 + 114) = v10;
v5 = v16;
*(_DWORD *)((char *)v3 + 102) = v13;
*(_DWORD *)((char *)v3 + 122) = v5;
*(DWORD *)((char *)v3 + 102) = v13;
*(DWORD *)((char *)v3 + 122) = v5;
v6 = v17;
*(_DWORD *)((char *)v3 + 106) = v14;
*(_DWORD *)((char *)v3 + 126) = v6;
v7 = (_DWORD *)loader_query_float_attribute(a3, 0, 601);
*(_DWORD *)((char *)v3 + 86) = *v7;
*(_DWORD *)((char *)v3 + 90) = v7[1];
*(_DWORD *)((char *)v3 + 82) = *(_DWORD *)loader_query_float_attribute(a3, 0, 407);
*(DWORD *)((char *)v3 + 106) = v14;
*(DWORD *)((char *)v3 + 126) = v6;
v7 = (DWORD *)loader_query_float_attribute(a3, 0, 601);
*(DWORD *)((char *)v3 + 86) = *v7;
*(DWORD *)((char *)v3 + 90) = v7[1];
*(DWORD *)((char *)v3 + 82) = *(DWORD *)loader_query_float_attribute(a3, 0, 407);
return v3;
}
// 1002704: using guessed type void *TSink::vftable;
+1 -1
View File
@@ -10,7 +10,7 @@
/* 114 */
struct TSink;
void __stdcall TSink::TimerExpired(int, void*); // idb
void TSink::TimerExpired(int, void*); // idb
int __thiscall TSink::Message(TSink* this, int, float); // idb
int __thiscall TSink::get_scoring(TSink* this, int); // idb
void __thiscall TSink::put_scoring(TSink* this, int, int); // idb
+20 -20
View File
@@ -16,22 +16,22 @@ if ( a2 > 50 )
{
if ( a2 != 1024 )
return 0;
if ( *(_DWORD *)((char *)this + 82) )
timer_kill(*(_DWORD *)((char *)this + 82));
*(_DWORD *)((char *)v3 + 82) = 0;
if ( *(DWORD *)((char *)this + 82) )
timer_kill(*(DWORD *)((char *)this + 82));
*(DWORD *)((char *)v3 + 82) = 0;
v4 = a2 == 50;
}
*((_BYTE *)v3 + 5) = v4 || a2 == 1024;
v5 = *(_DWORD *)((char *)v3 + 34);
v5 = *(DWORD *)((char *)v3 + 34);
if ( v5 )
{
v6 = 4 * (3 - *((char *)v3 + 5));
render_sprite_set(
*(_DWORD **)((char *)v3 + 26),
*(_DWORD *)(v6 + *(_DWORD *)(v5 + 4)),
*(_DWORD *)(*(_DWORD *)(*(_DWORD *)((char *)v3 + 38) + 4) + v6),
*(_DWORD *)(*(_DWORD *)(v6 + *(_DWORD *)(v5 + 4)) + 29) - *(_DWORD *)(*(_DWORD *)((char *)v3 + 30) + 234),
*(_DWORD *)(*(_DWORD *)(v6 + *(_DWORD *)(v5 + 4)) + 33) - *(_DWORD *)(*(_DWORD *)((char *)v3 + 30) + 238));
*(DWORD **)((char *)v3 + 26),
*(DWORD *)(v6 + *(DWORD *)(v5 + 4)),
*(DWORD *)(*(DWORD *)(*(DWORD *)((char *)v3 + 38) + 4) + v6),
*(DWORD *)(*(DWORD *)(v6 + *(DWORD *)(v5 + 4)) + 29) - *(DWORD *)(*(DWORD *)((char *)v3 + 30) + 234),
*(DWORD *)(*(DWORD *)(v6 + *(DWORD *)(v5 + 4)) + 33) - *(DWORD *)(*(DWORD *)((char *)v3 + 30) + 238));
}
}
return 0;
@@ -45,7 +45,7 @@ int result; // eax
if ( a2 >= 1 )
result = 0;
else
result = *(_DWORD *)((char *)this + 4 * a2 + 94);
result = *(DWORD *)((char *)this + 4 * a2 + 94);
return result;
}
@@ -53,14 +53,14 @@ return result;
void __thiscall TSoloTarget::put_scoring(TSoloTarget *this, int a2, int a3)
{
if ( a2 < 1 )
*(_DWORD *)((char *)this + 4 * a2 + 94) = a3;
*(DWORD *)((char *)this + 4 * a2 + 94) = a3;
}
//----- (0101620B) --------------------------------------------------------
void __stdcall TSoloTarget::TimerExpired(int a1, void *a2)
void TSoloTarget::TimerExpired(int a1, void *a2)
{
(**(void (__thiscall ***)(void *, signed int, _DWORD))a2)(a2, 50, 0.0);
*(_DWORD *)((char *)a2 + 82) = 0;
(**(void (__thiscall ***)(void *, signed int, DWORD))a2)(a2, 50, 0.0);
*(DWORD *)((char *)a2 + 82) = 0;
}
//----- (01018295) --------------------------------------------------------
@@ -71,8 +71,8 @@ TSoloTarget *v6; // esi
v6 = this;
if ( TCollisionComponent::DefaultCollision(this, a2, a3, a4) )
{
(**(void (__thiscall ***)(TSoloTarget *, signed int, _DWORD))v6)(v6, 49, 0.0);
*(_DWORD *)((char *)v6 + 82) = timer_set(*(float *)((char *)v6 + 86), (int)v6, (int)TSoloTarget::TimerExpired);
(**(void (__thiscall ***)(TSoloTarget *, signed int, DWORD))v6)(v6, 49, 0.0);
*(DWORD *)((char *)v6 + 82) = timer_set(*(float *)((char *)v6 + 86), (int)v6, (int)TSoloTarget::TimerExpired);
control_handler(63, v6);
}
}
@@ -86,11 +86,11 @@ int v6; // [esp+40h] [ebp-10h]
v3 = this;
TCollisionComponent::TCollisionComponent(this, a2, a3, 1);
*(_DWORD *)((char *)v3 + 82) = 0;
*(_DWORD *)v3 = &TSoloTarget::vftable;
*(_DWORD *)((char *)v3 + 86) = 1036831949;
*(DWORD *)((char *)v3 + 82) = 0;
*(DWORD *)v3 = &TSoloTarget::vftable;
*(DWORD *)((char *)v3 + 86) = 1036831949;
loader_query_visual(a3, 0, &v5);
*(_DWORD *)((char *)v3 + 90) = v6;
*(DWORD *)((char *)v3 + 90) = v6;
TSoloTarget::Message(v3, 50, 0.0);
return v3;
}
+1 -1
View File
@@ -10,7 +10,7 @@
/* 107 */
struct TSoloTarget;
void __stdcall TSoloTarget::TimerExpired(int, void*); // idb
void TSoloTarget::TimerExpired(int, void*); // idb
int __thiscall TSoloTarget::Message(TSoloTarget* this, int, float); // idb
int __thiscall TSoloTarget::get_scoring(TSoloTarget* this, int); // idb
void __thiscall TSoloTarget::put_scoring(TSoloTarget* this, int, int); // idb
+3 -3
View File
@@ -19,7 +19,7 @@ return v2;
//----- (0101797E) --------------------------------------------------------
double __thiscall TSound::Play(TSound *this)
{
return loader_play_sound(*(_DWORD *)((char *)this + 42));
return loader_play_sound(*(DWORD *)((char *)this + 42));
}
//----- (0101AA18) --------------------------------------------------------
@@ -31,9 +31,9 @@ int v6; // [esp+3Ch] [ebp-10h]
v3 = this;
TPinballComponent::TPinballComponent(this, a2, a3, 1);
*(_DWORD *)v3 = &TSound::vftable;
*(DWORD *)v3 = &TSound::vftable;
loader_query_visual(a3, 0, &v5);
*(_DWORD *)((char *)v3 + 42) = v6;
*(DWORD *)((char *)v3 + 42) = v6;
return v3;
}
// 10027A4: using guessed type void *TSound::vftable;
+33 -33
View File
@@ -26,10 +26,10 @@ struct TPinballTable *v2; // edi
TTableLayer *v3; // esi
float *v4; // eax
int v5; // eax
_DWORD *v6; // eax
DWORD *v6; // eax
int v7; // eax
_DWORD *v8; // eax
_DWORD *v9; // eax
DWORD *v8; // eax
DWORD *v9; // eax
float *v10; // ecx
float *v11; // edi
double v12; // st7
@@ -57,7 +57,7 @@ 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]
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]
@@ -70,52 +70,52 @@ struct TPinballTable *v46; // [esp+88h] [ebp+8h]
v2 = a2;
v3 = this;
TCollisionComponent::TCollisionComponent(this, a2, -1, 0);
*(_DWORD *)v3 = &TTableLayer::vftable;
*(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;
*(DWORD *)((char *)v3 + 78) = v38;
v40 = 0;
v41 = 0;
v42 = *(_DWORD *)(v5 + 12);
v43 = *(_DWORD *)(v5 + 16);
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);
*(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];
*(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;
*(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);
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);
v8 = (DWORD *)loader_query_float_attribute((int)v45, 0, 701);
if ( v8 )
*(_DWORD *)((char *)v3 + 110) = *v8;
*(DWORD *)((char *)v3 + 110) = *v8;
else
*(_DWORD *)((char *)v3 + 110) = 1045220557;
*(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];
*(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];
*(DWORD *)((char *)v2 + 246) = v9[4];
v44 = v31;
*(_DWORD *)((char *)v3 + 66) = v33;
*(_DWORD *)((char *)v3 + 62) = 1097859072;
*(DWORD *)((char *)v3 + 66) = v33;
*(DWORD *)((char *)v3 + 62) = 1097859072;
v11 = v10;
v46 = (struct TPinballTable *)v10;
if ( v10[2] >= (double)v10[4] )
@@ -205,7 +205,7 @@ 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);
(*(void (__thiscall **)(TLine *))(*(DWORD *)v24 + 8))(v24);
objlist_class::Add((TTableLayer *)((char *)v3 + 42), (void *)v24);
}
v46 = (struct TPinballTable *)((char *)v46 + 8);
@@ -215,12 +215,12 @@ v11 = (float *)v46;
}
}
v25 = *(float *)((char *)v3 + 90);
*(_DWORD *)((char *)v3 + 118) = -1;
*(DWORD *)((char *)v3 + 118) = -1;
v26 = v25;
v27 = *(float *)((char *)v3 + 94);
*(_DWORD *)((char *)v3 + 114) = (char *)v3 + 5;
*(DWORD *)((char *)v3 + 114) = (char *)v3 + 5;
v28 = v27;
*(_DWORD *)((char *)v3 + 122) = v3;
*(DWORD *)((char *)v3 + 122) = v3;
edges_insert_square(
*(float *)((char *)v3 + 86),
*(float *)((char *)v3 + 82),
@@ -238,7 +238,7 @@ TZmapList *__thiscall TTableLayer::~TTableLayer(TTableLayer *this)
TCollisionComponent *v1; // esi
v1 = this;
*(_DWORD *)this = &TTableLayer::vftable;
*(DWORD *)this = &TTableLayer::vftable;
if ( edge_manager )
TEdgeManager::destroy(edge_manager, 1);
return TCollisionComponent::~TCollisionComponent(v1);
+116 -116
View File
@@ -6,7 +6,7 @@ TTextBox *__thiscall TTextBox::TTextBox(TTextBox *this, struct TPinballTable *a2
TTextBox *v3; // esi
bool v4; // zf
bool v5; // sf
signed __int16 *v6; // eax
signed int *v6; // eax
int v7; // ecx
int v8; // ecx
@@ -14,27 +14,27 @@ v3 = this;
TPinballComponent::TPinballComponent(this, a2, a3, 1);
v4 = a3 == 0;
v5 = a3 < 0;
*(_DWORD *)v3 = &TTextBox::vftable;
*(_DWORD *)((char *)v3 + 42) = 0;
*(_DWORD *)((char *)v3 + 46) = 0;
*(_DWORD *)((char *)v3 + 50) = 0;
*(_DWORD *)((char *)v3 + 54) = 0;
*(_DWORD *)((char *)v3 + 62) = render_background_bitmap;
*(_DWORD *)((char *)v3 + 66) = score_msg_fontp;
*(_DWORD *)((char *)v3 + 70) = 0;
*(_DWORD *)((char *)v3 + 74) = 0;
*(_DWORD *)((char *)v3 + 58) = 0;
*(DWORD *)v3 = &TTextBox::vftable;
*(DWORD *)((char *)v3 + 42) = 0;
*(DWORD *)((char *)v3 + 46) = 0;
*(DWORD *)((char *)v3 + 50) = 0;
*(DWORD *)((char *)v3 + 54) = 0;
*(DWORD *)((char *)v3 + 62) = render_background_bitmap;
*(DWORD *)((char *)v3 + 66) = score_msg_fontp;
*(DWORD *)((char *)v3 + 70) = 0;
*(DWORD *)((char *)v3 + 74) = 0;
*(DWORD *)((char *)v3 + 58) = 0;
if ( !v5 && !v4 )
{
v6 = (signed __int16 *)loader_query_iattribute(a3, 1500, &a2);
v6 = (signed int *)loader_query_iattribute(a3, 1500, &a2);
v7 = *v6;
++v6;
*(_DWORD *)((char *)v3 + 42) = v7;
*(DWORD *)((char *)v3 + 42) = v7;
v8 = *v6;
++v6;
*(_DWORD *)((char *)v3 + 46) = v8;
*(_DWORD *)((char *)v3 + 50) = *v6;
*(_DWORD *)((char *)v3 + 54) = v6[1];
*(DWORD *)((char *)v3 + 46) = v8;
*(DWORD *)((char *)v3 + 50) = *v6;
*(DWORD *)((char *)v3 + 54) = v6[1];
}
return v3;
}
@@ -42,73 +42,73 @@ return v3;
// 10253C4: using guessed type struct score_msg_font_type *score_msg_fontp;
//----- (01014143) --------------------------------------------------------
void __usercall TTextBox::Clear(TTextBox *this@<ecx>, int a2@<ebx>)
void TTextBox::Clear(TTextBox *this, int a2)
{
TTextBox *v2; // esi
_DWORD *v3; // edx
DWORD *v3; // edx
int v4; // eax
TTextBoxMessage *v5; // ecx
int v6; // edi
v2 = this;
v3 = *(_DWORD **)((char *)this + 62);
v3 = *(DWORD **)((char *)this + 62);
if ( v3 )
gdrv_copy_bitmap(
&vscreen,
*(_DWORD *)((char *)this + 50),
*(_DWORD *)((char *)this + 54),
*(_DWORD *)((char *)this + 42),
*(_DWORD *)((char *)this + 46),
*(DWORD *)((char *)this + 50),
*(DWORD *)((char *)this + 54),
*(DWORD *)((char *)this + 42),
*(DWORD *)((char *)this + 46),
v3,
*(_DWORD *)((char *)this + 42),
*(_DWORD *)((char *)this + 46));
*(DWORD *)((char *)this + 42),
*(DWORD *)((char *)this + 46));
else
gdrv_fill_bitmap(
a2,
&vscreen,
*(_DWORD *)((char *)this + 50),
*(_DWORD *)((char *)this + 54),
*(_DWORD *)((char *)this + 42),
*(_DWORD *)((char *)this + 46),
*(DWORD *)((char *)this + 50),
*(DWORD *)((char *)this + 54),
*(DWORD *)((char *)this + 42),
*(DWORD *)((char *)this + 46),
0);
gdrv_blit(
(int)&vscreen,
*(_DWORD *)((char *)v2 + 42),
*(_DWORD *)((char *)v2 + 46),
*(_DWORD *)((char *)v2 + 42) + xDest,
*(_DWORD *)((char *)v2 + 46) + yDest,
*(_DWORD *)((char *)v2 + 50),
*(_DWORD *)((char *)v2 + 54));
v4 = *(_DWORD *)((char *)v2 + 58);
*(DWORD *)((char *)v2 + 42),
*(DWORD *)((char *)v2 + 46),
*(DWORD *)((char *)v2 + 42) + xDest,
*(DWORD *)((char *)v2 + 46) + yDest,
*(DWORD *)((char *)v2 + 50),
*(DWORD *)((char *)v2 + 54));
v4 = *(DWORD *)((char *)v2 + 58);
if ( v4 )
{
if ( v4 != -1 )
timer_kill(*(_DWORD *)((char *)v2 + 58));
*(_DWORD *)((char *)v2 + 58) = 0;
timer_kill(*(DWORD *)((char *)v2 + 58));
*(DWORD *)((char *)v2 + 58) = 0;
}
while ( *(_DWORD *)((char *)v2 + 70) )
while ( *(DWORD *)((char *)v2 + 70) )
{
v5 = *(TTextBoxMessage **)((char *)v2 + 70);
v6 = *(_DWORD *)v5;
v6 = *(DWORD *)v5;
if ( v5 )
TTextBoxMessage::destroy(v5, 1);
*(_DWORD *)((char *)v2 + 70) = v6;
*(DWORD *)((char *)v2 + 70) = v6;
}
}
//----- (010141E1) --------------------------------------------------------
void __userpurge TTextBox::TimerExpired(int a1@<ebx>, int a2, TTextBox *a3)
void TTextBox::TimerExpired(int a1, int a2, TTextBox *a3)
{
TTextBoxMessage *v3; // ecx
int v4; // edi
v3 = *(TTextBoxMessage **)((char *)a3 + 70);
*(_DWORD *)((char *)a3 + 58) = 0;
*(DWORD *)((char *)a3 + 58) = 0;
if ( v3 )
{
v4 = *(_DWORD *)v3;
v4 = *(DWORD *)v3;
TTextBoxMessage::destroy(v3, 1);
*(_DWORD *)((char *)a3 + 70) = v4;
*(DWORD *)((char *)a3 + 70) = v4;
TTextBox::Draw(a3, a1);
control_handler(60, a3);
}
@@ -123,23 +123,23 @@ TTextBoxMessage *v3; // ecx
int v4; // edi
v1 = this;
v2 = *(_DWORD *)((char *)this + 58);
*(_DWORD *)this = &TTextBox::vftable;
v2 = *(DWORD *)((char *)this + 58);
*(DWORD *)this = &TTextBox::vftable;
if ( v2 )
{
if ( v2 != -1 )
timer_kill(v2);
*(_DWORD *)((char *)v1 + 58) = 0;
*(DWORD *)((char *)v1 + 58) = 0;
}
if ( *(_DWORD *)((char *)v1 + 70) )
if ( *(DWORD *)((char *)v1 + 70) )
{
do
{
v3 = *(TTextBoxMessage **)((char *)v1 + 70);
v4 = *(_DWORD *)v3;
v4 = *(DWORD *)v3;
if ( v3 )
TTextBoxMessage::destroy(v3, 1);
*(_DWORD *)((char *)v1 + 70) = v4;
*(DWORD *)((char *)v1 + 70) = v4;
}
while ( v4 );
}
@@ -148,16 +148,16 @@ return TPinballComponent::~TPinballComponent(v1);
// 10023B4: using guessed type void *TTextBox::vftable;
//----- (01014269) --------------------------------------------------------
void __usercall TTextBox::Draw(TTextBox *this@<ecx>, int a2@<ebx>)
void TTextBox::Draw(TTextBox *this, int a2)
{
TTextBox *v2; // esi
_DWORD *v3; // edx
DWORD *v3; // edx
float *v4; // edi
int v5; // ebx
double v6; // st7
int v7; // eax
float v8; // ST14_4
_DWORD *v9; // ecx
DWORD *v9; // ecx
_BYTE *v10; // ebx
int v11; // edi
int v12; // eax
@@ -165,7 +165,7 @@ int v13; // eax
char *v14; // edx
char v15; // al
int v16; // eax
_DWORD *v17; // edi
DWORD *v17; // edi
int v18; // [esp-10h] [ebp-34h]
int v19; // [esp-Ch] [ebp-30h]
_BYTE *v20; // [esp+18h] [ebp-Ch]
@@ -174,61 +174,61 @@ int i; // [esp+1Ch] [ebp-8h]
_BYTE *v23; // [esp+20h] [ebp-4h]
v2 = this;
v3 = *(_DWORD **)((char *)this + 62);
v3 = *(DWORD **)((char *)this + 62);
if ( v3 )
gdrv_copy_bitmap(
&vscreen,
*(_DWORD *)((char *)this + 50),
*(_DWORD *)((char *)this + 54),
*(_DWORD *)((char *)this + 42),
*(_DWORD *)((char *)this + 46),
*(DWORD *)((char *)this + 50),
*(DWORD *)((char *)this + 54),
*(DWORD *)((char *)this + 42),
*(DWORD *)((char *)this + 46),
v3,
*(_DWORD *)((char *)this + 42),
*(_DWORD *)((char *)this + 46));
*(DWORD *)((char *)this + 42),
*(DWORD *)((char *)this + 46));
else
gdrv_fill_bitmap(
a2,
&vscreen,
*(_DWORD *)((char *)this + 50),
*(_DWORD *)((char *)this + 54),
*(_DWORD *)((char *)this + 42),
*(_DWORD *)((char *)this + 46),
*(DWORD *)((char *)this + 50),
*(DWORD *)((char *)this + 54),
*(DWORD *)((char *)this + 42),
*(DWORD *)((char *)this + 46),
0);
while ( *(_DWORD *)((char *)v2 + 70) )
while ( *(DWORD *)((char *)v2 + 70) )
{
v4 = *(float **)((char *)v2 + 70);
if ( v4[2] == -1.0 )
{
v5 = *(_DWORD *)v4;
if ( !*(_DWORD *)v4 )
v5 = *(DWORD *)v4;
if ( !*(DWORD *)v4 )
{
*(_DWORD *)((char *)v2 + 58) = -1;
*(DWORD *)((char *)v2 + 58) = -1;
LABEL_18:
v9 = *(_DWORD **)((char *)v2 + 66);
v9 = *(DWORD **)((char *)v2 + 66);
if ( !v9 )
{
gdrv_blit(
(int)&vscreen,
*(_DWORD *)((char *)v2 + 42),
*(_DWORD *)((char *)v2 + 46),
*(_DWORD *)((char *)v2 + 42) + xDest,
*(_DWORD *)((char *)v2 + 46) + yDest,
*(_DWORD *)((char *)v2 + 50),
*(_DWORD *)((char *)v2 + 54));
*(DWORD *)((char *)v2 + 42),
*(DWORD *)((char *)v2 + 46),
*(DWORD *)((char *)v2 + 42) + xDest,
*(DWORD *)((char *)v2 + 46) + yDest,
*(DWORD *)((char *)v2 + 50),
*(DWORD *)((char *)v2 + 54));
grtext_draw_ttext_in_box(
*(LPCSTR *)(*(_DWORD *)((char *)v2 + 70) + 4),
xDest + *(_DWORD *)((char *)v2 + 42),
yDest + *(_DWORD *)((char *)v2 + 46),
*(_DWORD *)((char *)v2 + 50),
*(_DWORD *)((char *)v2 + 54),
*(LPCSTR *)(*(DWORD *)((char *)v2 + 70) + 4),
xDest + *(DWORD *)((char *)v2 + 42),
yDest + *(DWORD *)((char *)v2 + 46),
*(DWORD *)((char *)v2 + 50),
*(DWORD *)((char *)v2 + 54),
255);
return;
}
v10 = *(_BYTE **)(*(_DWORD *)((char *)v2 + 70) + 4);
for ( i = *(_DWORD *)((char *)v2 + 46); ; i += v9[1] )
v10 = *(_BYTE **)(*(DWORD *)((char *)v2 + 70) + 4);
for ( i = *(DWORD *)((char *)v2 + 46); ; i += v9[1] )
{
v15 = *v10;
if ( !*v10 || i + v9[1] > *(_DWORD *)((char *)v2 + 46) + *(_DWORD *)((char *)v2 + 54) )
if ( !*v10 || i + v9[1] > *(DWORD *)((char *)v2 + 46) + *(DWORD *)((char *)v2 + 54) )
break;
v11 = 0;
v20 = 0;
@@ -241,8 +241,8 @@ break;
v12 = v9[v16 + 2];
if ( v12 )
{
v13 = *(_DWORD *)(v12 + 12) + *v9 + v11;
if ( v13 > *(_DWORD *)((char *)v2 + 50) )
v13 = *(DWORD *)(v12 + 12) + *v9 + v11;
if ( v13 > *(DWORD *)((char *)v2 + 50) )
{
if ( v20 )
v23 = v20;
@@ -260,10 +260,10 @@ v14 = v23;
}
v15 = *v14;
}
v21 = *(_DWORD *)((char *)v2 + 42);
v21 = *(DWORD *)((char *)v2 + 42);
while ( v10 < v23 )
{
v17 = (_DWORD *)v9[(*v10++ & 0x7F) + 2];
v17 = (DWORD *)v9[(*v10++ & 0x7F) + 2];
if ( v17 )
{
v19 = v17[4];
@@ -272,7 +272,7 @@ if ( render_background_bitmap )
gdrv_copy_bitmap_w_transparency(&vscreen, v18, v19, v21, i, v17, 0, 0);
else
gdrv_copy_bitmap(&vscreen, v18, v19, v21, i, v17, 0, 0);
v9 = *(_DWORD **)((char *)v2 + 66);
v9 = *(DWORD **)((char *)v2 + 66);
v21 += v17[3] + *v9;
}
}
@@ -280,14 +280,14 @@ while ( (*v10 & 0x7F) == 32 )
++v10;
if ( (*v10 & 0x7F) == 10 )
++v10;
v9 = *(_DWORD **)((char *)v2 + 66);
v9 = *(DWORD **)((char *)v2 + 66);
}
break;
}
}
else
{
v6 = TTextBoxMessage::TimeLeft((TTextBoxMessage *)*(_DWORD *)((char *)v2 + 70));
v6 = TTextBoxMessage::TimeLeft((TTextBoxMessage *)*(DWORD *)((char *)v2 + 70));
if ( v6 >= -2.0 )
{
if ( v6 >= 0.25 )
@@ -299,27 +299,27 @@ else
{
v7 = timer_set(0.25, (int)v2, (int)TTextBox::TimerExpired);
}
*(_DWORD *)((char *)v2 + 58) = v7;
*(DWORD *)((char *)v2 + 58) = v7;
goto LABEL_18;
}
v5 = *(_DWORD *)v4;
v5 = *(DWORD *)v4;
}
if ( v4 )
TTextBoxMessage::destroy((TTextBoxMessage *)v4, 1);
*(_DWORD *)((char *)v2 + 70) = v5;
*(DWORD *)((char *)v2 + 70) = v5;
}
gdrv_blit(
(int)&vscreen,
*(_DWORD *)((char *)v2 + 42),
*(_DWORD *)((char *)v2 + 46),
*(_DWORD *)((char *)v2 + 42) + xDest,
*(_DWORD *)((char *)v2 + 46) + yDest,
*(_DWORD *)((char *)v2 + 50),
*(_DWORD *)((char *)v2 + 54));
*(DWORD *)((char *)v2 + 42),
*(DWORD *)((char *)v2 + 46),
*(DWORD *)((char *)v2 + 42) + xDest,
*(DWORD *)((char *)v2 + 46) + yDest,
*(DWORD *)((char *)v2 + 50),
*(DWORD *)((char *)v2 + 54));
}
//----- (010144B7) --------------------------------------------------------
void __userpurge TTextBox::Display(TTextBox *this@<ecx>, int a2@<ebx>, char *a3, float a4)
void TTextBox::Display(TTextBox *this, int a2, char *a3, float a4)
{
TTextBox *v4; // esi
const char **v5; // ecx
@@ -333,10 +333,10 @@ bool v11; // zf
v4 = this;
if ( a3 )
{
if ( !*(_DWORD *)((char *)this + 70)
if ( !*(DWORD *)((char *)this + 70)
|| (v5 = *(const char ***)((char *)this + 74), v6 = a2, v7 = strcmp(a3, v5[1]), a2 = v6, v7) )
{
if ( *(_DWORD *)((char *)v4 + 58) == -1 )
if ( *(DWORD *)((char *)v4 + 58) == -1 )
TTextBox::Clear(v4, a2);
v9 = (TTextBoxMessage *)operator new(0x10u);
if ( v9 )
@@ -345,14 +345,14 @@ else
v10 = 0;
if ( v10 )
{
if ( *((_DWORD *)v10 + 1) )
if ( *((DWORD *)v10 + 1) )
{
if ( *(_DWORD *)((char *)v4 + 70) )
**(_DWORD **)((char *)v4 + 74) = v10;
if ( *(DWORD *)((char *)v4 + 70) )
**(DWORD **)((char *)v4 + 74) = v10;
else
*(_DWORD *)((char *)v4 + 70) = v10;
v11 = *(_DWORD *)((char *)v4 + 58) == 0;
*(_DWORD *)((char *)v4 + 74) = v10;
*(DWORD *)((char *)v4 + 70) = v10;
v11 = *(DWORD *)((char *)v4 + 58) == 0;
*(DWORD *)((char *)v4 + 74) = v10;
if ( v11 )
TTextBox::Draw(v4, a2);
}
@@ -365,15 +365,15 @@ TTextBoxMessage::destroy(v10, 1);
else
{
TTextBoxMessage::Refresh((TTextBoxMessage *)v5, a4);
if ( *(_DWORD *)((char *)v4 + 74) == *(_DWORD *)((char *)v4 + 70) )
if ( *(DWORD *)((char *)v4 + 74) == *(DWORD *)((char *)v4 + 70) )
{
v8 = *(_DWORD *)((char *)v4 + 58);
v8 = *(DWORD *)((char *)v4 + 58);
if ( v8 && v8 != -1 )
timer_kill(*(_DWORD *)((char *)v4 + 58));
timer_kill(*(DWORD *)((char *)v4 + 58));
if ( a4 == -1.0 )
*(_DWORD *)((char *)v4 + 58) = -1;
*(DWORD *)((char *)v4 + 58) = -1;
else
*(_DWORD *)((char *)v4 + 58) = timer_set(a4, (int)v4, (int)TTextBox::TimerExpired);
*(DWORD *)((char *)v4 + 58) = timer_set(a4, (int)v4, (int)TTextBox::TimerExpired);
}
}
}
@@ -392,7 +392,7 @@ return v2;
}
//----- (01019168) --------------------------------------------------------
int __stdcall TTextBox::Message(int a2, float a3)
int TTextBox::Message(int a2, float a3)
{
return 0;
}
+5 -5
View File
@@ -11,13 +11,13 @@
struct TTextBox;
TTextBox* __thiscall TTextBox::TTextBox(TTextBox* this, struct TPinballTable* a2, int a3);
// void __usercall TTextBox::Clear(TTextBox *this@<ecx>, int a2@<ebx>);
// void __userpurge TTextBox::TimerExpired(int a1@<ebx>, int a2, TTextBox *a3);
// void TTextBox::Clear(TTextBox *this, int a2);
// void TTextBox::TimerExpired(int a1, int a2, TTextBox *a3);
TZmapList* __thiscall TTextBox::~TTextBox(TTextBox* this);
// void __usercall TTextBox::Draw(TTextBox *this@<ecx>, int a2@<ebx>);
// void __userpurge TTextBox::Display(TTextBox *this@<ecx>, int a2@<ebx>, char *a3, float a4);
// void TTextBox::Draw(TTextBox *this, int a2);
// void TTextBox::Display(TTextBox *this, int a2, char *a3, float a4);
TTextBox* __thiscall TTextBox::destroy(TTextBox *this, char a2);
int __stdcall TTextBox::Message(int a2, float a3);
int TTextBox::Message(int a2, float a3);
void* TTextBox::vftable = &TTextBox::Message; // weak
+9 -9
View File
@@ -7,14 +7,14 @@ TTextBoxMessage *v3; // esi
char *v4; // edx
v3 = this;
*(_DWORD *)this = 0;
*(DWORD *)this = 0;
*((float *)this + 2) = a3;
*((_DWORD *)this + 3) = time_ticks - (unsigned __int64)(signed __int64)(a3 * -1000.0);
*((DWORD *)this + 3) = time_ticks - (unsigned __int64)(signed __int64)(a3 * -1000.0);
if ( a2 )
*((_DWORD *)this + 1) = memoryallocate(strlen(a2) + 1);
*((DWORD *)this + 1) = memoryallocate(strlen(a2) + 1);
else
*((_DWORD *)this + 1) = 0;
v4 = (char *)*((_DWORD *)v3 + 1);
*((DWORD *)this + 1) = 0;
v4 = (char *)*((DWORD *)v3 + 1);
if ( v4 )
strcpy(v4, a2);
return v3;
@@ -24,7 +24,7 @@ return v3;
//----- (01013B60) --------------------------------------------------------
double __thiscall TTextBoxMessage::TimeLeft(TTextBoxMessage *this)
{
return (double)(*((_DWORD *)this + 3) - time_ticks) * 0.001;
return (double)(*((DWORD *)this + 3) - time_ticks) * 0.001;
}
// 1024F84: using guessed type int time_ticks;
@@ -32,7 +32,7 @@ return (double)(*((_DWORD *)this + 3) - time_ticks) * 0.001;
void __thiscall TTextBoxMessage::Refresh(TTextBoxMessage *this, float a2)
{
*((float *)this + 2) = a2;
*((_DWORD *)this + 3) = time_ticks - (unsigned __int64)(signed __int64)(a2 * -1000.0);
*((DWORD *)this + 3) = time_ticks - (unsigned __int64)(signed __int64)(a2 * -1000.0);
}
// 1024F84: using guessed type int time_ticks;
@@ -42,8 +42,8 @@ TTextBoxMessage *__thiscall TTextBoxMessage::destroy(TTextBoxMessage *this, char
TTextBoxMessage *v2; // esi
v2 = this;
if ( *((_DWORD *)this + 1) )
memoryfree(*((_DWORD *)this + 1));
if ( *((DWORD *)this + 1) )
memoryfree(*((DWORD *)this + 1));
if ( a2 & 1 )
operator delete((void *)v2);
return v2;
+10 -10
View File
@@ -1,9 +1,9 @@
#include "../../pinball.h"
//----- (0101798C) --------------------------------------------------------
void __stdcall TTimer::TimerExpired(int a1, struct TPinballComponent *a2)
void TTimer::TimerExpired(int a1, struct TPinballComponent *a2)
{
*(_DWORD *)((char *)a2 + 42) = 0;
*(DWORD *)((char *)a2 + 42) = 0;
control_handler(60, a2);
}
@@ -15,16 +15,16 @@ TTimer *v3; // esi
v3 = this;
if ( a2 == 59 )
{
if ( *(_DWORD *)((char *)this + 42) )
timer_kill(*(_DWORD *)((char *)this + 42));
*(_DWORD *)((char *)v3 + 42) = timer_set(a3, (int)v3, (int)TTimer::TimerExpired);
if ( *(DWORD *)((char *)this + 42) )
timer_kill(*(DWORD *)((char *)this + 42));
*(DWORD *)((char *)v3 + 42) = timer_set(a3, (int)v3, (int)TTimer::TimerExpired);
}
else if ( a2 == 1011 || a2 == 1022 || a2 == 1024 )
{
if ( *(_DWORD *)((char *)this + 42) )
if ( *(DWORD *)((char *)this + 42) )
{
timer_kill(*(_DWORD *)((char *)this + 42));
*(_DWORD *)((char *)v3 + 42) = 0;
timer_kill(*(DWORD *)((char *)this + 42));
*(DWORD *)((char *)v3 + 42) = 0;
}
}
return 0;
@@ -37,8 +37,8 @@ TTimer *v3; // esi
v3 = this;
TPinballComponent::TPinballComponent(this, a2, a3, 1);
*(_DWORD *)((char *)v3 + 42) = 0;
*(_DWORD *)v3 = &TTimer::vftable;
*(DWORD *)((char *)v3 + 42) = 0;
*(DWORD *)v3 = &TTimer::vftable;
return v3;
}
// 10027BC: using guessed type void *TTimer::vftable;
+1 -1
View File
@@ -10,7 +10,7 @@
/* 129 */
struct TTimer;
void __stdcall TTimer::TimerExpired(int, struct TPinballComponent*); // idb
void TTimer::TimerExpired(int, struct TPinballComponent*); // idb
int __thiscall TTimer::Message(TTimer* this, int, float); // idb
TTimer* __thiscall TTimer::TTimer(TTimer* this, struct TPinballTable* a2, int a3);
+4 -4
View File
@@ -9,12 +9,12 @@ double v7; // st7
v6 = this;
*(float *)((char *)a2 + 42) = *(float *)a3;
v7 = *(float *)((char *)a2 + 70);
*(_DWORD *)((char *)a2 + 46) = *((_DWORD *)a3 + 1);
*(DWORD *)((char *)a2 + 46) = *((DWORD *)a3 + 1);
*(float *)((char *)a2 + 70) = v7 - a5;
TBall::not_again(a2, a6);
if ( !*(_DWORD *)(*(_DWORD *)((char *)v6 + 30) + 370) )
if ( !*(DWORD *)(*(DWORD *)((char *)v6 + 30) + 370) )
{
loader_play_sound(*(_DWORD *)((char *)v6 + 70));
loader_play_sound(*(DWORD *)((char *)v6 + 70));
control_handler(63, v6);
}
}
@@ -26,7 +26,7 @@ TTripwire *v3; // esi
v3 = this;
TRollover::TRollover(this, a2, a3, 1);
*(_DWORD *)v3 = &TTripwire::vftable;
*(DWORD *)v3 = &TTripwire::vftable;
return v3;
}
// 100264C: using guessed type void *TTripwire::vftable;
+18 -18
View File
@@ -1,11 +1,11 @@
#include "TWall.h"
//----- (01015ACE) --------------------------------------------------------
void __stdcall TWall::TimerExpired(int a1, void *a2)
void TWall::TimerExpired(int a1, void *a2)
{
render_sprite_set_bitmap(*(_DWORD **)((char *)a2 + 26), 0);
*(_DWORD *)((char *)a2 + 78) = 0;
*(_DWORD *)((char *)a2 + 6) = 0;
render_sprite_set_bitmap(*(DWORD **)((char *)a2 + 26), 0);
*(DWORD *)((char *)a2 + 78) = 0;
*(DWORD *)((char *)a2 + 6) = 0;
}
//----- (01015AF3) --------------------------------------------------------
@@ -14,10 +14,10 @@ int __thiscall TWall::Message(TWall *this, int a2, float a3)
TWall *v3; // esi
v3 = this;
if ( a2 == 1024 && *(_DWORD *)((char *)this + 78) )
if ( a2 == 1024 && *(DWORD *)((char *)this + 78) )
{
timer_kill(*(_DWORD *)((char *)this + 78));
TWall::TimerExpired(*(_DWORD *)((char *)v3 + 78), (void *)v3);
timer_kill(*(DWORD *)((char *)this + 78));
TWall::TimerExpired(*(DWORD *)((char *)v3 + 78), (void *)v3);
}
return 0;
}
@@ -30,7 +30,7 @@ int result; // eax
if ( a2 >= 1 )
result = 0;
else
result = *(_DWORD *)((char *)this + 4 * a2 + 86);
result = *(DWORD *)((char *)this + 4 * a2 + 86);
return result;
}
@@ -38,7 +38,7 @@ return result;
void __thiscall TWall::put_scoring(TWall *this, int a2, int a3)
{
if ( a2 < 1 )
*(_DWORD *)((char *)this + 4 * a2 + 86) = a3;
*(DWORD *)((char *)this + 4 * a2 + 86) = a3;
}
//----- (01017FDE) --------------------------------------------------------
@@ -49,10 +49,10 @@ TWall *v6; // esi
v6 = this;
if ( TCollisionComponent::DefaultCollision(this, a2, a3, a4) )
{
if ( *(_DWORD *)((char *)v6 + 82) )
if ( *(DWORD *)((char *)v6 + 82) )
{
render_sprite_set_bitmap(*(_DWORD **)((char *)v6 + 26), *(_DWORD *)((char *)v6 + 82));
*(_DWORD *)((char *)v6 + 78) = timer_set(0.1, (int)v6, (int)TWall::TimerExpired);
render_sprite_set_bitmap(*(DWORD **)((char *)v6 + 26), *(DWORD *)((char *)v6 + 82));
*(DWORD *)((char *)v6 + 78) = timer_set(0.1, (int)v6, (int)TWall::TimerExpired);
}
control_handler(63, v6);
}
@@ -62,19 +62,19 @@ control_handler(63, v6);
TWall *__thiscall TWall::TWall(TWall *this, struct TPinballTable *a2, int a3)
{
TWall *v3; // esi
_DWORD *v4; // eax
DWORD *v4; // eax
int v5; // eax
v3 = this;
TCollisionComponent::TCollisionComponent(this, a2, a3, 1);
v4 = *(_DWORD **)((char *)v3 + 26);
*(_DWORD *)v3 = &TWall::vftable;
v4 = *(DWORD **)((char *)v3 + 26);
*(DWORD *)v3 = &TWall::vftable;
if ( v4 )
render_sprite_set_bitmap(v4, 0);
v5 = *(_DWORD *)((char *)v3 + 34);
v5 = *(DWORD *)((char *)v3 + 34);
if ( v5 )
*(_DWORD *)((char *)v3 + 82) = *(_DWORD *)(*(_DWORD *)(v5 + 4) + 8);
*(_DWORD *)((char *)v3 + 78) = 0;
*(DWORD *)((char *)v3 + 82) = *(DWORD *)(*(DWORD *)(v5 + 4) + 8);
*(DWORD *)((char *)v3 + 78) = 0;
return v3;
}
// 1002508: using guessed type void *TWall::vftable;
+1 -1
View File
@@ -10,7 +10,7 @@
/* 102 */
struct TWall;
void __stdcall TWall::TimerExpired(int, void*); // idb
void TWall::TimerExpired(int, void*); // idb
int __thiscall TWall::Message(TWall* this, int, float); // idb
int __thiscall TWall::get_scoring(TWall* this, int); // idb
void __thiscall TWall::put_scoring(TWall* this, int, int); // idb
+1 -1
View File
@@ -15,7 +15,7 @@ TZmapList *__thiscall TZmapList::destroy(TZmapList *this, char a2)
TZmapList *v2; // esi
v2 = this;
objlist_destroy(*((_DWORD *)this + 1));
objlist_destroy(*((DWORD *)this + 1));
if ( a2 & 1 )
operator delete((void *)v2);
return v2;
+192 -192
View File
@@ -10,7 +10,7 @@ TZmapList *__thiscall TLightGroup::~TLightGroup(TLightGroup *this)
TLightGroup *v1; // esi
v1 = this;
objlist_destroy(*(_DWORD *)((char *)this + 46));
objlist_destroy(*(DWORD *)((char *)this + 46));
return TPinballComponent::~TPinballComponent(v1);
}
@@ -22,31 +22,31 @@ void __thiscall TLightGroup::Reset(TLightGroup *this)
int v3; // eax
v1 = this;
if ( *(_DWORD *)((char *)this + 70) )
timer_kill(*(_DWORD *)((char *)this + 70));
v2 = *(_DWORD *)((char *)v1 + 66);
*(_DWORD *)((char *)v1 + 70) = 0;
if ( *(DWORD *)((char *)this + 70) )
timer_kill(*(DWORD *)((char *)this + 70));
v2 = *(DWORD *)((char *)v1 + 66);
*(DWORD *)((char *)v1 + 70) = 0;
if ( v2 )
timer_kill(v2);
v3 = *(_DWORD *)((char *)v1 + 54);
*(_DWORD *)((char *)v1 + 66) = 0;
*(_DWORD *)((char *)v1 + 58) = 0;
*(_DWORD *)((char *)v1 + 62) = 0;
*(_DWORD *)((char *)v1 + 50) = v3;
v3 = *(DWORD *)((char *)v1 + 54);
*(DWORD *)((char *)v1 + 66) = 0;
*(DWORD *)((char *)v1 + 58) = 0;
*(DWORD *)((char *)v1 + 62) = 0;
*(DWORD *)((char *)v1 + 50) = v3;
}
//----- (0100A027) --------------------------------------------------------
void __stdcall TLightGroup::TimerExpired(int a1, void *a2)
void TLightGroup::TimerExpired(int a1, void *a2)
{
double v2; // st7
void (__stdcall **v3)(_DWORD, _DWORD); // eax
void (**v3)(DWORD, DWORD); // eax
float v4; // ST04_4
v2 = *(float *)((char *)a2 + 50);
v3 = *(void (__stdcall ***)(_DWORD, _DWORD))a2;
*(_DWORD *)((char *)a2 + 70) = 0;
v3 = *(void (***)(DWORD, DWORD))a2;
*(DWORD *)((char *)a2 + 70) = 0;
v4 = v2;
(*v3)(*(_DWORD *)((char *)a2 + 58), LODWORD(v4));
(*v3)(*(DWORD *)((char *)a2 + 58), LODWORD(v4));
}
//----- (0100A04A) --------------------------------------------------------
@@ -55,23 +55,23 @@ void __thiscall TLightGroup::reschedule_animation(TLightGroup *this, float a2)
TLightGroup *v2; // esi
v2 = this;
if ( *(_DWORD *)((char *)this + 70) )
timer_kill(*(_DWORD *)((char *)this + 70));
*(_DWORD *)((char *)v2 + 70) = 0;
if ( *(DWORD *)((char *)this + 70) )
timer_kill(*(DWORD *)((char *)this + 70));
*(DWORD *)((char *)v2 + 70) = 0;
if ( a2 > 0.0 )
{
*(float *)((char *)v2 + 50) = a2;
LABEL_7:
*(_DWORD *)((char *)v2 + 70) = timer_set(*(float *)((char *)v2 + 50), (int)v2, (int)TLightGroup::TimerExpired);
*(DWORD *)((char *)v2 + 70) = timer_set(*(float *)((char *)v2 + 50), (int)v2, (int)TLightGroup::TimerExpired);
return;
}
if ( a2 < 0.0 )
{
*(_DWORD *)((char *)v2 + 50) = *(_DWORD *)((char *)v2 + 54);
*(DWORD *)((char *)v2 + 50) = *(DWORD *)((char *)v2 + 54);
goto LABEL_7;
}
*(_DWORD *)((char *)v2 + 58) = 0;
*(_DWORD *)((char *)v2 + 62) = 0;
*(DWORD *)((char *)v2 + 58) = 0;
*(DWORD *)((char *)v2 + 62) = 0;
}
//----- (0100A0B4) --------------------------------------------------------
@@ -82,13 +82,13 @@ int __thiscall TLightGroup::next_light_up(TLightGroup *this)
int result; // eax
int v4; // ecx
v1 = *(_DWORD *)((char *)this + 46);
v2 = *(_DWORD *)(v1 + 4);
v1 = *(DWORD *)((char *)this + 46);
v2 = *(DWORD *)(v1 + 4);
result = 0;
if ( v2 <= 0 )
return -1;
v4 = v1 + 8;
while ( *(_DWORD *)(*(_DWORD *)v4 + 78) )
while ( *(DWORD *)(*(DWORD *)v4 + 78) )
{
++result;
v4 += 4;
@@ -105,12 +105,12 @@ int __thiscall TLightGroup::next_light_down(TLightGroup *this)
int result; // eax
int v3; // ecx
v1 = *(_DWORD *)((char *)this + 46);
result = *(_DWORD *)(v1 + 4) - 1;
v1 = *(DWORD *)((char *)this + 46);
result = *(DWORD *)(v1 + 4) - 1;
if ( result < 0 )
return -1;
v3 = v1 + 4 * result + 8;
while ( !*(_DWORD *)(*(_DWORD *)v3 + 78) )
while ( !*(DWORD *)(*(DWORD *)v3 + 78) )
{
--result;
v3 -= 4;
@@ -128,21 +128,21 @@ void __thiscall TLightGroup::start_animation(TLightGroup *this)
int v3; // esi
int v4; // ebx
int v5; // ecx
void (__stdcall **v6)(signed int, float); // eax
void (**v6)(signed int, float); // eax
float v7; // [esp+0h] [ebp-10h]
v1 = this;
v2 = *(_DWORD *)(*(_DWORD *)((char *)this + 46) + 4) - 1;
v2 = *(DWORD *)(*(DWORD *)((char *)this + 46) + 4) - 1;
if ( v2 >= 0 )
{
v3 = 4 * v2 + 8;
v4 = *(_DWORD *)(*(_DWORD *)((char *)this + 46) + 4);
v4 = *(DWORD *)(*(DWORD *)((char *)this + 46) + 4);
do
{
v5 = *(_DWORD *)(v3 + *(_DWORD *)((char *)v1 + 46));
v6 = *(void (__stdcall ***)(signed int, float))v5;
v5 = *(DWORD *)(v3 + *(DWORD *)((char *)v1 + 46));
v6 = *(void (***)(signed int, float))v5;
v7 = 0.0;
if ( *(_DWORD *)(v5 + 78) )
if ( *(DWORD *)(v5 + 78) )
(*v6)(9, COERCE_FLOAT(LODWORD(v7)));
else
(*v6)(8, COERCE_FLOAT(LODWORD(v7)));
@@ -154,9 +154,9 @@ void __thiscall TLightGroup::start_animation(TLightGroup *this)
}
//----- (0100A149) --------------------------------------------------------
void __stdcall TLightGroup::NotifyTimerExpired(int a1, void *a2)
void TLightGroup::NotifyTimerExpired(int a1, void *a2)
{
*(_DWORD *)((char *)a2 + 66) = 0;
*(DWORD *)((char *)a2 + 66) = 0;
control_handler(61, (struct TPinballComponent *)a2);
}
@@ -191,20 +191,20 @@ int v27; // ecx
int j; // ebx
double v29; // st7
int v30; // eax
void (__stdcall ***v31)(int, _DWORD); // ecx
void (***v31)(int, DWORD); // ecx
int v32; // eax
int v33; // ecx
signed int v34; // ebx
float v35; // ST10_4
int v36; // eax
int v37; // eax
void (__thiscall ***v38)(_DWORD, signed int, _DWORD); // edi
void (__thiscall **v39)(_DWORD, signed int, _DWORD); // ST24_4
void (__thiscall ***v38)(DWORD, signed int, DWORD); // edi
void (__thiscall **v39)(DWORD, signed int, DWORD); // ST24_4
float v40; // ST10_4
int v41; // eax
int v42; // eax
void (__thiscall ***v43)(_DWORD, signed int, _DWORD); // edi
void (__thiscall **v44)(_DWORD, signed int, _DWORD); // ebx
void (__thiscall ***v43)(DWORD, signed int, DWORD); // edi
void (__thiscall **v44)(DWORD, signed int, DWORD); // ebx
float v45; // ST10_4
int v46; // ecx
int v47; // ebx
@@ -241,7 +241,7 @@ int v77; // eax
int v78; // eax
int v79; // edi
int v80; // ecx
_DWORD *v81; // eax
DWORD *v81; // eax
char *v82; // eax
char *v83; // eax
int v84; // [esp+20h] [ebp-14h]
@@ -275,16 +275,16 @@ if ( a2 != 1011 )
{
if ( a2 == 1020 )
{
v82 = (char *)this + 16 * *(_DWORD *)(*(_DWORD *)((char *)this + 30) + 218);
*(_DWORD *)(v82 + 74) = *(_DWORD *)((char *)this + 6);
*(_DWORD *)(v82 + 78) = *(_DWORD *)((char *)this + 58);
*(_DWORD *)(v82 + 82) = *(_DWORD *)((char *)this + 50);
(*(void (**)(void))(*(_DWORD *)this + 20))();
v82 = (char *)this + 16 * *(DWORD *)(*(DWORD *)((char *)this + 30) + 218);
*(DWORD *)(v82 + 74) = *(DWORD *)((char *)this + 6);
*(DWORD *)(v82 + 78) = *(DWORD *)((char *)this + 58);
*(DWORD *)(v82 + 82) = *(DWORD *)((char *)this + 50);
(*(void (**)(void))(*(DWORD *)this + 20))();
v83 = (char *)v4 + 16 * (unsigned __int64)(signed __int64)_floor(a3);
*(_DWORD *)((char *)v4 + 6) = *(_DWORD *)(v83 + 74);
*(_DWORD *)((char *)v4 + 58) = *(_DWORD *)(v83 + 78);
v25 = *(_DWORD *)((char *)v4 + 6) == 0;
*(_DWORD *)((char *)v4 + 50) = *(_DWORD *)(v83 + 82);
*(DWORD *)((char *)v4 + 6) = *(DWORD *)(v83 + 74);
*(DWORD *)((char *)v4 + 58) = *(DWORD *)(v83 + 78);
v25 = *(DWORD *)((char *)v4 + 6) == 0;
*(DWORD *)((char *)v4 + 50) = *(DWORD *)(v83 + 82);
if ( !v25 )
TLightGroup::TimerExpired(0, (void *)v4);
}
@@ -292,33 +292,33 @@ else if ( a2 != 1022 )
{
if ( a2 == 1024 )
{
(*(void (**)(void))(*(_DWORD *)this + 20))();
(*(void (**)(void))(*(DWORD *)this + 20))();
v80 = 0;
if ( *(_DWORD *)(*(_DWORD *)((char *)v4 + 30) + 214) > 0 )
if ( *(DWORD *)(*(DWORD *)((char *)v4 + 30) + 214) > 0 )
{
v81 = (_DWORD *)((char *)v4 + 78);
v81 = (DWORD *)((char *)v4 + 78);
do
{
*(v81 - 1) = *(_DWORD *)((char *)v4 + 6);
*v81 = *(_DWORD *)((char *)v4 + 58);
v81[1] = *(_DWORD *)((char *)v4 + 50);
*(v81 - 1) = *(DWORD *)((char *)v4 + 6);
*v81 = *(DWORD *)((char *)v4 + 58);
v81[1] = *(DWORD *)((char *)v4 + 50);
++v80;
v81 += 4;
}
while ( v80 < *(_DWORD *)(*(_DWORD *)((char *)v4 + 30) + 214) );
while ( v80 < *(DWORD *)(*(DWORD *)((char *)v4 + 30) + 214) );
}
}
else
{
LABEL_145:
v78 = *(_DWORD *)(*(_DWORD *)((char *)this + 46) + 4) - 1;
v78 = *(DWORD *)(*(DWORD *)((char *)this + 46) + 4) - 1;
if ( v78 >= 0 )
{
v79 = 4 * v78 + 8;
v102 = *(_DWORD *)(*(_DWORD *)((char *)this + 46) + 4);
v102 = *(DWORD *)(*(DWORD *)((char *)this + 46) + 4);
do
{
(***(void (__stdcall ****)(int, _DWORD))(v79 + *(_DWORD *)((char *)v4 + 46)))(v3, LODWORD(a3));
(***(void (****)(int, DWORD))(v79 + *(DWORD *)((char *)v4 + 46)))(v3, LODWORD(a3));
v79 -= 4;
--v102;
}
@@ -333,112 +333,112 @@ else if ( a2 < 1008 )
switch ( a2 )
{
case 24:
v10 = *(_DWORD *)((char *)this + 46);
v11 = *(_DWORD *)(v10 + 4);
v12 = *(_DWORD *)(v10 + 4 * v11 + 4);
v10 = *(DWORD *)((char *)this + 46);
v11 = *(DWORD *)(v10 + 4);
v12 = *(DWORD *)(v10 + 4 * v11 + 4);
v90 = v11;
v95 = v12;
if ( *(_DWORD *)(v12 + 82) || *(_DWORD *)(v12 + 90) || *(_DWORD *)(v12 + 86) )
if ( *(DWORD *)(v12 + 82) || *(DWORD *)(v12 + 90) || *(DWORD *)(v12 + 86) )
return 0;
if ( *(_DWORD *)((char *)v4 + 58) )
if ( *(DWORD *)((char *)v4 + 58) )
{
TLightGroup::Message(v4, 34, 0.0);
v12 = v95;
v11 = v90;
}
*(_DWORD *)((char *)v4 + 62) = 1;
*(_DWORD *)((char *)v4 + 58) = v3;
v89 = *(_DWORD *)(v12 + 6);
v96 = *(_DWORD *)(v12 + 78);
for ( i = v11 - 1; i > 0; *(_DWORD *)(v14 + 6) = *(_DWORD *)(v15 + 6) )
*(DWORD *)((char *)v4 + 62) = 1;
*(DWORD *)((char *)v4 + 58) = v3;
v89 = *(DWORD *)(v12 + 6);
v96 = *(DWORD *)(v12 + 78);
for ( i = v11 - 1; i > 0; *(DWORD *)(v14 + 6) = *(DWORD *)(v15 + 6) )
{
v13 = *(_DWORD *)((char *)v4 + 46);
v14 = *(_DWORD *)(4 * i + v13 + 8);
v15 = *(_DWORD *)(4 * i + v13 + 4);
(**(void (__thiscall ***)(int, bool, _DWORD))v14)(v14, *(_DWORD *)(v15 + 78) != 0, 0.0);
v13 = *(DWORD *)((char *)v4 + 46);
v14 = *(DWORD *)(4 * i + v13 + 8);
v15 = *(DWORD *)(4 * i + v13 + 4);
(**(void (__thiscall ***)(int, bool, DWORD))v14)(v14, *(DWORD *)(v15 + 78) != 0, 0.0);
--i;
}
v16 = *(_DWORD *)(*(_DWORD *)((char *)v4 + 46) + 8);
v16 = *(DWORD *)(*(DWORD *)((char *)v4 + 46) + 8);
goto LABEL_19;
case 25:
v17 = *(_DWORD *)((char *)this + 46);
v18 = *(_DWORD *)(v17 + 4);
v19 = 4 * *(_DWORD *)(v17 + 4);
v20 = *(_DWORD *)(v19 + v17 + 4);
v17 = *(DWORD *)((char *)this + 46);
v18 = *(DWORD *)(v17 + 4);
v19 = 4 * *(DWORD *)(v17 + 4);
v20 = *(DWORD *)(v19 + v17 + 4);
v92 = v18;
v84 = v19;
if ( *(_DWORD *)(v20 + 82) || *(_DWORD *)(v20 + 90) || *(_DWORD *)(v20 + 86) )
if ( *(DWORD *)(v20 + 82) || *(DWORD *)(v20 + 90) || *(DWORD *)(v20 + 86) )
return 0;
if ( *(_DWORD *)((char *)v4 + 58) )
if ( *(DWORD *)((char *)v4 + 58) )
{
TLightGroup::Message(v4, 34, 0.0);
v18 = v92;
}
v21 = *(_DWORD *)(*(_DWORD *)((char *)v4 + 46) + 8);
*(_DWORD *)((char *)v4 + 62) = 1;
*(_DWORD *)((char *)v4 + 58) = a2;
v89 = *(_DWORD *)(v21 + 6);
v96 = *(_DWORD *)(v21 + 78);
v21 = *(DWORD *)(*(DWORD *)((char *)v4 + 46) + 8);
*(DWORD *)((char *)v4 + 62) = 1;
*(DWORD *)((char *)v4 + 58) = a2;
v89 = *(DWORD *)(v21 + 6);
v96 = *(DWORD *)(v21 + 78);
if ( v18 - 1 > 0 )
{
v93 = 12;
v85 = v18 - 1;
do
{
v22 = *(_DWORD *)((char *)v4 + 46);
v23 = *(_DWORD *)(v93 + v22 - 4);
v24 = *(_DWORD *)(v93 + v22);
(**(void (__thiscall ***)(int, bool, _DWORD))v23)(v23, *(_DWORD *)(v24 + 78) != 0, 0.0);
v22 = *(DWORD *)((char *)v4 + 46);
v23 = *(DWORD *)(v93 + v22 - 4);
v24 = *(DWORD *)(v93 + v22);
(**(void (__thiscall ***)(int, bool, DWORD))v23)(v23, *(DWORD *)(v24 + 78) != 0, 0.0);
v93 += 4;
v25 = v85-- == 1;
*(_DWORD *)(v23 + 6) = *(_DWORD *)(v24 + 6);
*(DWORD *)(v23 + 6) = *(DWORD *)(v24 + 6);
}
while ( !v25 );
}
v16 = *(_DWORD *)(v84 + *(_DWORD *)((char *)v4 + 46) + 4);
v16 = *(DWORD *)(v84 + *(DWORD *)((char *)v4 + 46) + 4);
LABEL_19:
(**(void (__thiscall ***)(int, bool, _DWORD))v16)(v16, v96 != 0, 0.0);
*(_DWORD *)(v16 + 6) = v89;
(**(void (__thiscall ***)(int, bool, DWORD))v16)(v16, v96 != 0, 0.0);
*(DWORD *)(v16 + 6) = v89;
goto LABEL_20;
case 26:
if ( *(_DWORD *)((char *)this + 62) || !*(_DWORD *)((char *)this + 58) )
if ( *(DWORD *)((char *)this + 62) || !*(DWORD *)((char *)this + 58) )
TLightGroup::start_animation(this);
v26 = *(_DWORD *)((char *)v4 + 46);
*(_DWORD *)((char *)v4 + 58) = a2;
*(_DWORD *)((char *)v4 + 62) = 0;
v27 = *(_DWORD *)(v26 + 4);
v97 = *(_DWORD *)(*(_DWORD *)(v26 + 4 * v27 + 4) + 90);
v26 = *(DWORD *)((char *)v4 + 46);
*(DWORD *)((char *)v4 + 58) = a2;
*(DWORD *)((char *)v4 + 62) = 0;
v27 = *(DWORD *)(v26 + 4);
v97 = *(DWORD *)(*(DWORD *)(v26 + 4 * v27 + 4) + 90);
for ( j = v27 - 1; ; --j )
{
v29 = 0.0;
v30 = *(_DWORD *)((char *)v4 + 46);
v30 = *(DWORD *)((char *)v4 + 46);
if ( j <= 0 )
break;
(***(void (__thiscall ****)(_DWORD, int, _DWORD))(v30 + 4 * j + 8))(
*(_DWORD *)(v30 + 4 * j + 8),
(*(_DWORD *)(*(_DWORD *)(v30 + 4 * j + 4) + 90) != 0) + 8,
(***(void (__thiscall ****)(DWORD, int, DWORD))(v30 + 4 * j + 8))(
*(DWORD *)(v30 + 4 * j + 8),
(*(DWORD *)(*(DWORD *)(v30 + 4 * j + 4) + 90) != 0) + 8,
0.0);
}
v31 = *(void (__stdcall ****)(int, _DWORD))(v30 + 8);
v31 = *(void (****)(int, DWORD))(v30 + 8);
goto LABEL_44;
case 27:
if ( *(_DWORD *)((char *)this + 62) || !*(_DWORD *)((char *)this + 58) )
if ( *(DWORD *)((char *)this + 62) || !*(DWORD *)((char *)this + 58) )
TLightGroup::start_animation(this);
v32 = *(_DWORD *)((char *)v4 + 46);
*(_DWORD *)((char *)v4 + 58) = a2;
*(_DWORD *)((char *)v4 + 62) = 0;
v33 = *(_DWORD *)(v32 + 4);
v97 = *(_DWORD *)(*(_DWORD *)(v32 + 8) + 90);
v94 = *(_DWORD *)(v32 + 4);
v32 = *(DWORD *)((char *)v4 + 46);
*(DWORD *)((char *)v4 + 58) = a2;
*(DWORD *)((char *)v4 + 62) = 0;
v33 = *(DWORD *)(v32 + 4);
v97 = *(DWORD *)(*(DWORD *)(v32 + 8) + 90);
v94 = *(DWORD *)(v32 + 4);
if ( v33 - 1 > 0 )
{
v34 = 12;
v86 = v33 - 1;
do
{
(***(void (__thiscall ****)(_DWORD, int, _DWORD))(v34 + *(_DWORD *)((char *)v4 + 46) - 4))(
*(_DWORD *)(v34 + *(_DWORD *)((char *)v4 + 46) - 4),
(*(_DWORD *)(*(_DWORD *)(v34 + *(_DWORD *)((char *)v4 + 46)) + 90) != 0) + 8,
(***(void (__thiscall ****)(DWORD, int, DWORD))(v34 + *(DWORD *)((char *)v4 + 46) - 4))(
*(DWORD *)(v34 + *(DWORD *)((char *)v4 + 46) - 4),
(*(DWORD *)(*(DWORD *)(v34 + *(DWORD *)((char *)v4 + 46)) + 90) != 0) + 8,
0.0);
v34 += 4;
--v86;
@@ -446,18 +446,18 @@ v34 += 4;
while ( v86 );
}
v29 = 0.0;
v31 = *(void (__stdcall ****)(int, _DWORD))(*(_DWORD *)((char *)v4 + 46) + 4 * v94 + 4);
v31 = *(void (****)(int, DWORD))(*(DWORD *)((char *)v4 + 46) + 4 * v94 + 4);
LABEL_44:
v35 = v29;
(**v31)((v97 != 0) + 8, LODWORD(v35));
goto LABEL_20;
case 28:
if ( *(_DWORD *)((char *)this + 62) || !*(_DWORD *)((char *)this + 58) )
if ( *(DWORD *)((char *)this + 62) || !*(DWORD *)((char *)this + 58) )
TLightGroup::start_animation(this);
v36 = *(_DWORD *)((char *)v4 + 46);
*(_DWORD *)((char *)v4 + 58) = a2;
*(_DWORD *)((char *)v4 + 62) = 0;
v37 = *(_DWORD *)(v36 + 4) - 1;
v36 = *(DWORD *)((char *)v4 + 46);
*(DWORD *)((char *)v4 + 58) = a2;
*(DWORD *)((char *)v4 + 62) = 0;
v37 = *(DWORD *)(v36 + 4) - 1;
if ( v37 > 0 )
{
v98 = 8;
@@ -466,7 +466,7 @@ do
{
if ( _rand() % 100 > 70 )
{
v38 = *(void (__thiscall ****)(_DWORD, signed int, _DWORD))(v98 + *(_DWORD *)((char *)v4 + 46));
v38 = *(void (__thiscall ****)(DWORD, signed int, DWORD))(v98 + *(DWORD *)((char *)v4 + 46));
v39 = *v38;
v40 = (double)_rand() * 0.00003051850947599719 * a3 * 3.0 + 0.1;
(*v39)(v38, 9, LODWORD(v40));
@@ -478,19 +478,19 @@ while ( v87 );
}
goto LABEL_20;
case 29:
if ( *(_DWORD *)((char *)this + 62) || !*(_DWORD *)((char *)this + 58) )
if ( *(DWORD *)((char *)this + 62) || !*(DWORD *)((char *)this + 58) )
TLightGroup::start_animation(this);
v41 = *(_DWORD *)((char *)v4 + 46);
*(_DWORD *)((char *)v4 + 58) = a2;
*(_DWORD *)((char *)v4 + 62) = 0;
v42 = *(_DWORD *)(v41 + 4) - 1;
v41 = *(DWORD *)((char *)v4 + 46);
*(DWORD *)((char *)v4 + 58) = a2;
*(DWORD *)((char *)v4 + 62) = 0;
v42 = *(DWORD *)(v41 + 4) - 1;
if ( v42 > 0 )
{
v99 = 8;
v88 = v42;
do
{
v43 = *(void (__thiscall ****)(_DWORD, signed int, _DWORD))(v99 + *(_DWORD *)((char *)v4 + 46));
v43 = *(void (__thiscall ****)(DWORD, signed int, DWORD))(v99 + *(DWORD *)((char *)v4 + 46));
v44 = *v43;
v45 = (double)(_rand() % 100 > 70);
(*v44)(v43, 18, LODWORD(v45));
@@ -503,16 +503,16 @@ LABEL_20:
TLightGroup::reschedule_animation(v4, a3);
return 0;
case 30:
v46 = *(_DWORD *)((char *)this + 46);
v46 = *(DWORD *)((char *)this + 46);
v47 = 0;
v48 = *(_DWORD *)(v46 + 4) - 1;
v48 = *(DWORD *)(v46 + 4) - 1;
if ( v48 < 0 )
return 0;
v49 = v46 + 4 * v48 + 8;
v50 = v48 + 1;
do
{
if ( !*(_DWORD *)(*(_DWORD *)v49 + 78) )
if ( !*(DWORD *)(*(DWORD *)v49 + 78) )
++v47;
v49 -= 4;
--v50;
@@ -521,15 +521,15 @@ while ( v50 );
if ( !v47 )
return 0;
v51 = _rand();
v52 = *(_DWORD *)((char *)v4 + 46);
v52 = *(DWORD *)((char *)v4 + 46);
HIDWORD(v53) = v51 % v47;
LODWORD(v53) = *(_DWORD *)(v52 + 4) - 1;
LODWORD(v53) = *(DWORD *)(v52 + 4) - 1;
if ( (signed int)v53 < 0 )
goto LABEL_74;
v103 = v52 + 4 * v53 + 8;
while ( 1 )
{
if ( !*(_DWORD *)(*(_DWORD *)v103 + 78) )
if ( !*(DWORD *)(*(DWORD *)v103 + 78) )
{
v54 = HIDWORD(v53)--;
if ( !v54 )
@@ -541,23 +541,23 @@ if ( (signed int)v53 < 0 )
goto LABEL_74;
}
LABEL_73:
(***(void (__fastcall ****)(_DWORD, _DWORD, signed int, _DWORD))(v52 + 4 * v53 + 8))(
*(_DWORD *)(v52 + 4 * v53 + 8),
(***(void (__fastcall ****)(DWORD, DWORD, signed int, DWORD))(v52 + 4 * v53 + 8))(
*(DWORD *)(v52 + 4 * v53 + 8),
HIDWORD(v53),
1,
0.0);
goto LABEL_74;
case 31:
v55 = *(_DWORD *)((char *)this + 46);
v55 = *(DWORD *)((char *)this + 46);
v56 = 0;
v57 = *(_DWORD *)(v55 + 4) - 1;
v57 = *(DWORD *)(v55 + 4) - 1;
if ( v57 < 0 )
return 0;
v58 = v55 + 4 * v57 + 8;
v59 = v57 + 1;
do
{
if ( *(_DWORD *)(*(_DWORD *)v58 + 78) )
if ( *(DWORD *)(*(DWORD *)v58 + 78) )
++v56;
v58 -= 4;
--v59;
@@ -566,9 +566,9 @@ while ( v59 );
if ( !v56 )
return 0;
v60 = _rand();
v61 = *(_DWORD *)((char *)v4 + 46);
v61 = *(DWORD *)((char *)v4 + 46);
HIDWORD(v62) = v60 % v56;
LODWORD(v62) = *(_DWORD *)(v61 + 4) - 1;
LODWORD(v62) = *(DWORD *)(v61 + 4) - 1;
if ( (signed int)v62 < 0 )
goto LABEL_74;
v104 = v61 + 4 * v62 + 8;
@@ -577,50 +577,50 @@ case 32:
v64 = TLightGroup::next_light_up(this);
if ( v64 < 0 )
return 0;
(***(void (__stdcall ****)(signed int, _DWORD))(*(_DWORD *)((char *)v4 + 46) + 4 * v64 + 8))(1, 0.0);
(***(void (****)(signed int, DWORD))(*(DWORD *)((char *)v4 + 46) + 4 * v64 + 8))(1, 0.0);
goto LABEL_90;
case 33:
v66 = TLightGroup::next_light_down(this);
if ( v66 < 0 )
return 0;
(***(void (__stdcall ****)(_DWORD, _DWORD))(*(_DWORD *)((char *)v4 + 46) + 4 * v66 + 8))(0, 0.0);
(***(void (****)(DWORD, DWORD))(*(DWORD *)((char *)v4 + 46) + 4 * v66 + 8))(0, 0.0);
LABEL_90:
if ( *(_DWORD *)((char *)v4 + 58) )
if ( *(DWORD *)((char *)v4 + 58) )
TLightGroup::start_animation(v4);
return 1;
case 34:
if ( *(_DWORD *)((char *)this + 70) )
timer_kill(*(_DWORD *)((char *)this + 70));
v68 = *(_DWORD *)((char *)v4 + 58);
*(_DWORD *)((char *)v4 + 70) = 0;
if ( *(DWORD *)((char *)this + 70) )
timer_kill(*(DWORD *)((char *)this + 70));
v68 = *(DWORD *)((char *)v4 + 58);
*(DWORD *)((char *)v4 + 70) = 0;
if ( v68 == 26 || v68 == 27 || v68 == 28 )
TLightGroup::Message(v4, 14, 0.0);
*(_DWORD *)((char *)v4 + 58) = 0;
*(_DWORD *)((char *)v4 + 62) = 0;
*(DWORD *)((char *)v4 + 58) = 0;
*(DWORD *)((char *)v4 + 62) = 0;
return 0;
case 35:
v53 = (signed __int64)_floor(a3);
v52 = *(_DWORD *)((char *)v4 + 46);
if ( (signed int)v53 < *(_DWORD *)(v52 + 4) && (signed int)v53 >= 0 )
v52 = *(DWORD *)((char *)v4 + 46);
if ( (signed int)v53 < *(DWORD *)(v52 + 4) && (signed int)v53 >= 0 )
goto LABEL_73;
return 0;
case 36:
v62 = (signed __int64)_floor(a3);
v61 = *(_DWORD *)((char *)v4 + 46);
if ( (signed int)v62 < *(_DWORD *)(v61 + 4) && (signed int)v62 >= 0 )
v61 = *(DWORD *)((char *)v4 + 46);
if ( (signed int)v62 < *(DWORD *)(v61 + 4) && (signed int)v62 >= 0 )
goto LABEL_117;
return 0;
case 37:
v5 = *(_DWORD *)((char *)this + 46);
v5 = *(DWORD *)((char *)this + 46);
result = 0;
v7 = *(_DWORD *)(v5 + 4) - 1;
v7 = *(DWORD *)(v5 + 4) - 1;
if ( v7 >= 0 )
{
v8 = v5 + 4 * v7 + 8;
v9 = *(_DWORD *)(v5 + 4);
v9 = *(DWORD *)(v5 + 4);
do
{
if ( *(_DWORD *)(*(_DWORD *)v8 + 78) )
if ( *(DWORD *)(*(DWORD *)v8 + 78) )
++result;
v8 -= 4;
--v9;
@@ -629,47 +629,47 @@ while ( v9 );
}
return result;
case 38:
return *(_DWORD *)(*(_DWORD *)((char *)this + 46) + 4);
return *(DWORD *)(*(DWORD *)((char *)this + 46) + 4);
case 39:
return *(_DWORD *)((char *)this + 58);
return *(DWORD *)((char *)this + 58);
case 40:
return *(_DWORD *)((char *)this + 62);
return *(DWORD *)((char *)this + 62);
case 41:
v65 = TLightGroup::next_light_up(this);
if ( v65 < 0 )
return 0;
if ( *(_DWORD *)((char *)v4 + 58) || *(_DWORD *)((char *)v4 + 62) )
if ( *(DWORD *)((char *)v4 + 58) || *(DWORD *)((char *)v4 + 62) )
TLightGroup::Message(v4, 34, 0.0);
(***(void (__stdcall ****)(signed int, _DWORD))(*(_DWORD *)((char *)v4 + 46) + 4 * v65 + 8))(15, LODWORD(a3));
(***(void (****)(signed int, DWORD))(*(DWORD *)((char *)v4 + 46) + 4 * v65 + 8))(15, LODWORD(a3));
return 1;
case 42:
v67 = TLightGroup::next_light_down(this);
if ( v67 < 0 )
return 0;
if ( *(_DWORD *)((char *)v4 + 58) || *(_DWORD *)((char *)v4 + 62) )
if ( *(DWORD *)((char *)v4 + 58) || *(DWORD *)((char *)v4 + 62) )
TLightGroup::Message(v4, 34, 0.0);
(***(void (__stdcall ****)(signed int, _DWORD))(*(_DWORD *)((char *)v4 + 46) + 4 * v67 + 8))(16, LODWORD(a3));
(***(void (****)(signed int, DWORD))(*(DWORD *)((char *)v4 + 46) + 4 * v67 + 8))(16, LODWORD(a3));
return 1;
case 43:
if ( *(_DWORD *)((char *)this + 66) )
timer_kill(*(_DWORD *)((char *)this + 66));
*(_DWORD *)((char *)v4 + 66) = 0;
if ( *(DWORD *)((char *)this + 66) )
timer_kill(*(DWORD *)((char *)this + 66));
*(DWORD *)((char *)v4 + 66) = 0;
if ( a3 > 0.0 )
*(_DWORD *)((char *)v4 + 66) = timer_set(a3, (int)v4, (int)TLightGroup::NotifyTimerExpired);
*(DWORD *)((char *)v4 + 66) = timer_set(a3, (int)v4, (int)TLightGroup::NotifyTimerExpired);
return 0;
case 44:
v69 = *(_DWORD *)(*(_DWORD *)((char *)this + 46) + 4) - 1;
v69 = *(DWORD *)(*(DWORD *)((char *)this + 46) + 4) - 1;
if ( v69 >= 0 )
{
v70 = 4 * v69 + 8;
v100 = *(_DWORD *)(*(_DWORD *)((char *)this + 46) + 4);
v100 = *(DWORD *)(*(DWORD *)((char *)this + 46) + 4);
do
{
v71 = *(_DWORD *)(v70 + *(_DWORD *)((char *)v4 + 46));
if ( *(_DWORD *)(v71 + 78) )
v71 = *(DWORD *)(v70 + *(DWORD *)((char *)v4 + 46));
if ( *(DWORD *)(v71 + 78) )
{
(**(void (__stdcall ***)(_DWORD, _DWORD))v71)(0, 0.0);
(***(void (__stdcall ****)(signed int, _DWORD))(v70 + *(_DWORD *)((char *)v4 + 46)))(16, LODWORD(a3));
(**(void (***)(DWORD, DWORD))v71)(0, 0.0);
(***(void (****)(signed int, DWORD))(v70 + *(DWORD *)((char *)v4 + 46)))(16, LODWORD(a3));
}
v70 -= 4;
--v100;
@@ -682,7 +682,7 @@ control_handler(a2, this);
v72 = (signed __int64)_floor(a3);
if ( (signed int)v72 >= 0 )
{
v73 = *(_DWORD *)(*(_DWORD *)((char *)v4 + 46) + 4);
v73 = *(DWORD *)(*(DWORD *)((char *)v4 + 46) + 4);
if ( (signed int)v72 <= v73 )
{
v74 = v73 - 1;
@@ -693,8 +693,8 @@ v101 = v74 - v72;
v74 = v72;
do
{
(***(void (__fastcall ****)(_DWORD, _DWORD, signed int, _DWORD))(v105 + *(_DWORD *)((char *)v4 + 46)))(
*(_DWORD *)(v105 + *(_DWORD *)((char *)v4 + 46)),
(***(void (__fastcall ****)(DWORD, DWORD, signed int, DWORD))(v105 + *(DWORD *)((char *)v4 + 46)))(
*(DWORD *)(v105 + *(DWORD *)((char *)v4 + 46)),
HIDWORD(v72),
20,
0.0);
@@ -709,8 +709,8 @@ v75 = 4 * v74 + 8;
v76 = v74 + 1;
do
{
(***(void (__fastcall ****)(_DWORD, _DWORD, signed int, _DWORD))(v75 + *(_DWORD *)((char *)v4 + 46)))(
*(_DWORD *)(v75 + *(_DWORD *)((char *)v4 + 46)),
(***(void (__fastcall ****)(DWORD, DWORD, signed int, DWORD))(v75 + *(DWORD *)((char *)v4 + 46)))(
*(DWORD *)(v75 + *(DWORD *)((char *)v4 + 46)),
HIDWORD(v72),
19,
0.0);
@@ -725,14 +725,14 @@ return 0;
case 46:
v77 = TLightGroup::next_light_down(this);
if ( v77 >= 0 )
(***(void (__stdcall ****)(signed int, _DWORD))(*(_DWORD *)((char *)v4 + 46) + 4 * v77 + 8))(4, 0.0);
(***(void (****)(signed int, DWORD))(*(DWORD *)((char *)v4 + 46) + 4 * v77 + 8))(4, 0.0);
return 0;
default:
goto LABEL_145;
}
while ( 1 )
{
if ( *(_DWORD *)(*(_DWORD *)v104 + 78) )
if ( *(DWORD *)(*(DWORD *)v104 + 78) )
{
v63 = HIDWORD(v62)--;
if ( !v63 )
@@ -744,13 +744,13 @@ if ( (signed int)v62 < 0 )
goto LABEL_74;
}
LABEL_117:
(***(void (__fastcall ****)(_DWORD, _DWORD, _DWORD, _DWORD))(v61 + 4 * v62 + 8))(
*(_DWORD *)(v61 + 4 * v62 + 8),
(***(void (__fastcall ****)(DWORD, DWORD, DWORD, DWORD))(v61 + 4 * v62 + 8))(
*(DWORD *)(v61 + 4 * v62 + 8),
HIDWORD(v62),
0,
0.0);
LABEL_74:
if ( *(_DWORD *)((char *)v4 + 58) )
if ( *(DWORD *)((char *)v4 + 58) )
TLightGroup::start_animation(v4);
}
return 0;
@@ -760,22 +760,22 @@ return 0;
TLightGroup *__thiscall TLightGroup::TLightGroup(TLightGroup *this, struct TPinballTable *a2, int a3)
{
TLightGroup *v3; // esi
signed __int16 *v4; // ebx
signed int *v4; // ebx
struct TPinballComponent *v5; // eax
int v7; // [esp+Ch] [ebp-4h]
int i; // [esp+1Ch] [ebp+Ch]
v3 = this;
TPinballComponent::TPinballComponent(this, a2, a3, 0);
*(_DWORD *)v3 = &TLightGroup::vftable;
*(DWORD *)v3 = &TLightGroup::vftable;
objlist_class::objlist_class((TLightGroup *)((char *)v3 + 42), 4, 4);
*(_DWORD *)((char *)v3 + 70) = 0;
*(_DWORD *)((char *)v3 + 66) = 0;
*(DWORD *)((char *)v3 + 70) = 0;
*(DWORD *)((char *)v3 + 66) = 0;
TLightGroup::Reset(v3);
if ( a3 > 0 )
{
*(_DWORD *)((char *)v3 + 54) = *(_DWORD *)loader_query_float_attribute(a3, 0, 903);
v4 = (signed __int16 *)loader_query_iattribute(a3, 1027, &v7);
*(DWORD *)((char *)v3 + 54) = *(DWORD *)loader_query_float_attribute(a3, 0, 903);
v4 = (signed int *)loader_query_iattribute(a3, 1027, &v7);
for ( i = 0; i < v7; ++v4 )
{
v5 = TPinballTable::find_component(a2, *v4);
+2 -2
View File
@@ -12,12 +12,12 @@ struct TLightGroup;
TZmapList* __thiscall TLightGroup::~TLightGroup(TLightGroup* this);
void __thiscall TLightGroup::Reset(TLightGroup* __hidden this); // idb
void __stdcall TLightGroup::TimerExpired(int, void*); // idb
void TLightGroup::TimerExpired(int, void*); // idb
void __thiscall TLightGroup::reschedule_animation(TLightGroup* this, float); // idb
int __thiscall TLightGroup::next_light_up(TLightGroup* __hidden this); // idb
int __thiscall TLightGroup::next_light_down(TLightGroup* __hidden this); // idb
void __thiscall TLightGroup::start_animation(TLightGroup* __hidden this); // idb
void __stdcall TLightGroup::NotifyTimerExpired(int, void*); // idb
void TLightGroup::NotifyTimerExpired(int, void*); // idb
int __thiscall TLightGroup::Message(TLightGroup* this, int, float); // idb
TLightGroup* __thiscall TLightGroup::TLightGroup(TLightGroup* this, struct TPinballTable* a2, int a3);
TLightGroup* __thiscall TLightGroup::`vector deleting destructor`(TLightGroup *this, char a2);