Files

2547 lines
74 KiB
C++

#include "pinball.h"
//----- (0100E657) --------------------------------------------------------
void WaitingDeploymentController(int a1, int a2, TPinballComponent* a3)
{
char* v3; // eax
switch (a2)
{
case 63:
if ((struct TPinballComponent*)dword_1023838 == a3 || (TPinballComponent*)dword_1023840 == a3)
{
*(DWORD*)(dword_1023BBC + 6) = 1;
MissionControl(66, 0);
}
break;
case 66:
TTextBox::Clear(tTextBox, a1);
dword_1025048 = 0;
break;
case 67:
v3 = get_rc_string(50, 0);
TTextBox::Display(tTextBox, a1, v3, -1.0);
break;
}
}
// 1023838: using guessed type int dword_1023838;
// 1023840: using guessed type int dword_1023840;
// 1023BBC: using guessed type int dword_1023BBC;
// 1025048: using guessed type int dword_1025048;
//----- (0100E6D2) --------------------------------------------------------
void SelectMissionController(int a1, struct TPinballComponent* a2)
{
signed int v2; // esi
void(__thiscall * **v3)(DWORD, signed int, DWORD); // edi
void(__thiscall * **v4)(DWORD, signed int, DWORD); // edi
char* v5; // eax
void(* **v6)(signed int, DWORD); // ecx
char* v7; // eax
CHAR* v8; // ST58_4
CHAR* v9; // eax
int v10; // esi
int v11; // ST58_4
CHAR* v12; // eax
signed int v13; // [esp+58h] [ebp-54h]
char Dest; // [esp+68h] [ebp-44h]
v2 = 0;
if (a1 == 45 || a1 == 47)
{
if ((struct TPinballComponent*)dword_1023978 == a2)
LABEL_83:
MissionControl(67, a2);
}
else if (a1 == 63)
{
if ((struct TPinballComponent*)dword_1023B84 == a2)
v2 = 1;
if ((struct TPinballComponent*)dword_1023B8C == a2)
v2 = 2;
if ((struct TPinballComponent*)dword_1023B94 == a2)
v2 = 3;
if (v2)
{
if (*(DWORD*)(dword_1023B9C + 6) == 7)
{
*(DWORD*)(dword_1023B9C + 6) = 0;
v2 = 4;
}
switch ((**(int(* **)(signed int, DWORD))dword_1023CF4)(37, 0.0))
{
case 1:
switch (v2)
{
case 1:
v13 = 3;
break;
case 2:
v13 = 4;
break;
case 3:
v13 = 2;
break;
default:
v13 = 5;
break;
}
goto LABEL_71;
case 2:
case 3:
switch (v2)
{
case 1:
v13 = 9;
break;
case 2:
v13 = 11;
break;
case 3:
v13 = 10;
break;
default:
LABEL_69:
v13 = 16;
break;
}
goto LABEL_71;
case 4:
case 5:
switch (v2)
{
case 1:
v13 = 6;
break;
case 2:
v13 = 8;
break;
case 3:
v13 = 7;
break;
default:
LABEL_70:
v13 = 15;
break;
}
goto LABEL_71;
case 6:
case 7:
switch (v2)
{
case 1:
v13 = 12;
break;
case 2:
v13 = 13;
break;
case 3:
v13 = 14;
break;
default:
LABEL_68:
v13 = 17;
break;
}
goto LABEL_71;
case 8:
case 9:
switch (v2)
{
case 1:
goto LABEL_70;
case 2:
goto LABEL_69;
case 3:
goto LABEL_68;
}
v13 = 18;
LABEL_71:
*(DWORD*)(dword_1023888 + 6) = v13;
(**(void(* **)(signed int, DWORD))dword_1023888)(15, 2.0);
(**(void(* **)(signed int, DWORD))dword_1023BBC)(4, 0.0);
goto LABEL_83;
default:
return;
}
}
else if ((struct TPinballComponent*)dword_1023870 == a2
&& light_on((struct component_tag*) & lite56)
&& (**(int(* **)(signed int, DWORD))dword_1023978)(37, 0.0))
{
(**(void(* **)(signed int, DWORD))dword_1023888)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023BBC)(19, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023CFC)(26, -1.0);
if (light_on((struct component_tag*) & lite317))
(**(void(* **)(signed int, DWORD))dword_1023EBC)(20, 0.0);
if (light_on((struct component_tag*) & lite318))
(**(void(* **)(signed int, DWORD))dword_1023EC4)(20, 0.0);
if (light_on((struct component_tag*) & lite319))
(**(void(* **)(signed int, DWORD))dword_1023ECC)(20, 0.0);
v10 = *(DWORD*)(dword_1023888 + 6);
*(DWORD*)(dword_1023BBC + 6) = v10;
MissionControl(66, 0);
v11 = SpecialAddScore(*(&off_10246A0 + v10));
v12 = get_rc_string(77, 0);
_sprintf(&Dest, v12, v11);
TTextBox::Display(tTextBox, 0, &Dest, 4.0);
}
}
else
{
if (a1 == 66)
{
(**(void(* **)(signed int, DWORD))dword_1023BBC)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023CFC)(34, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023BB4)(20, 0.0);
*(DWORD*)(dword_1023888 + 6) = 0;
*(DWORD*)(dword_1023B9C + 6) = 0;
v3 = (void(__thiscall * **)(DWORD, signed int, DWORD))dword_1023A8C;
(**(void(* **)(signed int, DWORD))dword_1023A8C)(34, 0.0);
(**v3)(v3, 20, 0.0);
v4 = (void(__thiscall * **)(DWORD, signed int, DWORD))dword_1023A94;
(**(void(* **)(signed int, DWORD))dword_1023A94)(34, 0.0);
(**v4)(v4, 20, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023EEC)(20, 0.0);
}
else if (a1 != 67)
{
return;
}
if ((**(int(* **)(signed int, DWORD))dword_1023978)(37, 0.0))
{
if (light_on((struct component_tag*) & lite56))
{
v8 = get_rc_string(word_1024708[2 * *(DWORD*)(dword_1023888 + 6)], 1);
v9 = get_rc_string(106, 0);
_sprintf(&Dest, v9, v8);
TTextBox::Display(tTextBox, 0, &Dest, -1.0);
if (light_on((struct component_tag*) & lite318))
(**(void(* **)(signed int, DWORD))dword_1023EC4)(20, 0.0);
if (light_on((struct component_tag*) & lite319))
(**(void(* **)(signed int, DWORD))dword_1023ECC)(20, 0.0);
if (!light_on((struct component_tag*) & lite317))
{
v6 = (void(* **)(signed int, DWORD))dword_1023EBC;
goto LABEL_28;
}
}
else
{
v7 = get_rc_string(104, 0);
TTextBox::Display(tTextBox, 0, v7, -1.0);
if (light_on((struct component_tag*) & lite317))
(**(void(* **)(signed int, DWORD))dword_1023EBC)(20, 0.0);
if (light_on((struct component_tag*) & lite318))
(**(void(* **)(signed int, DWORD))dword_1023EC4)(20, 0.0);
if (!light_on((struct component_tag*) & lite319))
{
v6 = (void(* **)(signed int, DWORD))dword_1023ECC;
goto LABEL_28;
}
}
}
else
{
v5 = get_rc_string(105, 0);
TTextBox::Display(tTextBox, 0, v5, -1.0);
if (light_on((struct component_tag*) & lite317))
(**(void(* **)(signed int, DWORD))dword_1023EBC)(20, 0.0);
if (light_on((struct component_tag*) & lite319))
(**(void(* **)(signed int, DWORD))dword_1023ECC)(20, 0.0);
if (!light_on((struct component_tag*) & lite318))
{
v6 = (void(* **)(signed int, DWORD))dword_1023EC4;
LABEL_28:
(**v6)(7, 0.0);
return;
}
}
}
}
// 1023870: using guessed type int dword_1023870;
// 1023884: using guessed type char *lite56;
// 1023888: using guessed type int dword_1023888;
// 1023978: using guessed type int dword_1023978;
// 1023A8C: using guessed type int dword_1023A8C;
// 1023A94: using guessed type int dword_1023A94;
// 1023B84: using guessed type int dword_1023B84;
// 1023B8C: using guessed type int dword_1023B8C;
// 1023B94: using guessed type int dword_1023B94;
// 1023B9C: using guessed type int dword_1023B9C;
// 1023BB4: using guessed type int dword_1023BB4;
// 1023BBC: using guessed type int dword_1023BBC;
// 1023CF4: using guessed type int dword_1023CF4;
// 1023CFC: using guessed type int dword_1023CFC;
// 1023EB8: using guessed type char *lite317;
// 1023EBC: using guessed type int dword_1023EBC;
// 1023EC0: using guessed type char *lite318;
// 1023EC4: using guessed type int dword_1023EC4;
// 1023EC8: using guessed type char *lite319;
// 1023ECC: using guessed type int dword_1023ECC;
// 1023EEC: using guessed type int dword_1023EEC;
// 1024708: using guessed type int word_1024708[];
//----- (0100EBF3) --------------------------------------------------------
void PracticeMissionController(int a1@<ebx > , int a2, struct TPinballComponent* a3)
{
int v3; // ST10_4
CHAR* v4; // eax
int v5; // ecx
char* v6; // eax
int v7; // ST10_4
CHAR* v8; // eax
char Dest; // [esp+14h] [ebp-44h]
if (a2 != 63)
{
if (a2 == 66)
{
(**(void(__fastcall * **)(int, struct TPinballComponent*, signed int, DWORD))dword_1023E74)(
dword_1023E74,
a3,
7,
0.0);
(**(void(* **)(signed int, DWORD))dword_1023E8C)(7, 0.0);
*(DWORD*)(dword_1023888 + 6) = 8;
}
else if (a2 != 67)
{
return;
}
v3 = *(DWORD*)(dword_1023888 + 6);
v4 = get_rc_string(107, 0);
_sprintf(&Dest, v4, v3);
TTextBox::Display(tTextBox, a1, &Dest, -1.0);
return;
}
if ((struct TPinballComponent*)dword_10236E4 == a3
|| (struct TPinballComponent*)dword_10236EC == a3
|| (struct TPinballComponent*)dword_10236F4 == a3
|| (struct TPinballComponent*)dword_10236FC == a3)
{
v5 = *(DWORD*)(dword_1023888 + 6) - 1;
*(DWORD*)(dword_1023888 + 6) = v5;
if (v5)
{
MissionControl(67, a3);
}
else
{
(**(void(__fastcall * **)(int, struct TPinballComponent*, signed int, DWORD))dword_1023E74)(
dword_1023E74,
a3,
20,
0.0);
(**(void(* **)(signed int, DWORD))dword_1023E8C)(20, 0.0);
*(DWORD*)(dword_1023BBC + 6) = 1;
MissionControl(66, 0);
v6 = get_rc_string(108, 0);
TTextBox::Display(tTextBox, a1, v6, 4.0);
v7 = SpecialAddScore(500000);
v8 = get_rc_string(78, 0);
_sprintf(&Dest, v8, v7);
if (!AddRankProgress(6))
{
TTextBox::Display(tTextBox, a1, &Dest, 8.0);
(*(void (**)(void))(*(DWORD*)dword_1023D14 + 20))();
}
}
}
}
// 10236E4: using guessed type int dword_10236E4;
// 10236EC: using guessed type int dword_10236EC;
// 10236F4: using guessed type int dword_10236F4;
// 10236FC: using guessed type int dword_10236FC;
// 1023888: using guessed type int dword_1023888;
// 1023BBC: using guessed type int dword_1023BBC;
// 1023D14: using guessed type int dword_1023D14;
// 1023E74: using guessed type int dword_1023E74;
// 1023E8C: using guessed type int dword_1023E8C;
//----- (0100ED83) --------------------------------------------------------
void LaunchTrainingController(int a1@<ebx > , int a2, struct TPinballComponent* a3)
{
int v3; // ST08_4
CHAR* v4; // eax
int v5; // ecx
char* v6; // eax
int v7; // ST08_4
CHAR* v8; // eax
char Dest; // [esp+Ch] [ebp-44h]
if (a2 != 63)
{
if (a2 == 66)
{
(**(void(__fastcall * **)(int, struct TPinballComponent*, signed int, DWORD))dword_1023EBC)(
dword_1023EBC,
a3,
7,
0.0);
*(DWORD*)(dword_1023888 + 6) = 3;
}
else if (a2 != 67)
{
return;
}
v3 = *(DWORD*)(dword_1023888 + 6);
v4 = get_rc_string(110, 0);
_sprintf(&Dest, v4, v3);
TTextBox::Display(tTextBox, a1, &Dest, -1.0);
return;
}
if ((struct TPinballComponent*)dword_1023870 == a3)
{
v5 = *(DWORD*)(dword_1023888 + 6) - 1;
*(DWORD*)(dword_1023888 + 6) = v5;
if (v5)
{
MissionControl(67, a3);
}
else
{
(**(void(__fastcall * **)(int, struct TPinballComponent*, signed int, DWORD))dword_1023EBC)(
dword_1023EBC,
a3,
20,
0.0);
*(DWORD*)(dword_1023BBC + 6) = 1;
MissionControl(66, 0);
v6 = get_rc_string(111, 0);
TTextBox::Display(tTextBox, a1, v6, 4.0);
v7 = SpecialAddScore(500000);
v8 = get_rc_string(78, 0);
_sprintf(&Dest, v8, v7);
if (!AddRankProgress(6))
{
TTextBox::Display(tTextBox, a1, &Dest, 8.0);
(*(void (**)(void))(*(DWORD*)dword_1023D14 + 20))();
}
}
}
}
// 1023870: using guessed type int dword_1023870;
// 1023888: using guessed type int dword_1023888;
// 1023BBC: using guessed type int dword_1023BBC;
// 1023D14: using guessed type int dword_1023D14;
// 1023EBC: using guessed type int dword_1023EBC;
//----- (0100EED7) --------------------------------------------------------
void ReentryTrainingController(int a1@<ebx > , int a2, struct TPinballComponent* a3)
{
void(__thiscall * **v3)(DWORD, signed int, DWORD); // esi
void(__thiscall * **v4)(DWORD, signed int, DWORD); // esi
int v5; // ST38_4
CHAR* v6; // eax
int v7; // ecx
char* v8; // eax
int v9; // ST38_4
CHAR* v10; // eax
char Dest; // [esp+40h] [ebp-44h]
if (a2 != 63)
{
if (a2 == 66)
{
*(DWORD*)(dword_1023888 + 6) = 3;
v3 = (void(__thiscall * **)(DWORD, signed int, DWORD))dword_1023A8C;
(**(void(__fastcall * **)(int, struct TPinballComponent*, signed int, DWORD))dword_1023A8C)(
dword_1023A8C,
a3,
20,
0.0);
(**v3)(v3, 32, 0.2);
(**v3)(v3, 26, 0.2);
v4 = (void(__thiscall * **)(DWORD, signed int, DWORD))dword_1023A94;
(**(void(* **)(signed int, DWORD))dword_1023A94)(20, 0.0);
(**v4)(v4, 32, 0.2);
(**v4)(v4, 26, 0.2);
(**(void(* **)(signed int, DWORD))dword_1023E6C)(7, 0.0);
}
else if (a2 != 67)
{
return;
}
v5 = *(DWORD*)(dword_1023888 + 6);
v6 = get_rc_string(112, 0);
_sprintf(&Dest, v6, v5);
TTextBox::Display(tTextBox, a1, &Dest, -1.0);
return;
}
if ((struct TPinballComponent*)dword_102372C == a3
|| (struct TPinballComponent*)dword_1023734 == a3
|| (struct TPinballComponent*)dword_102373C == a3)
{
v7 = *(DWORD*)(dword_1023888 + 6) - 1;
*(DWORD*)(dword_1023888 + 6) = v7;
if (v7)
{
MissionControl(67, a3);
}
else
{
(**(void(__fastcall * **)(int, struct TPinballComponent*, signed int, DWORD))dword_1023E6C)(
dword_1023E6C,
a3,
20,
0.0);
*(DWORD*)(dword_1023BBC + 6) = 1;
MissionControl(66, 0);
v8 = get_rc_string(113, 0);
TTextBox::Display(tTextBox, a1, v8, 4.0);
v9 = SpecialAddScore(500000);
v10 = get_rc_string(78, 0);
_sprintf(&Dest, v10, v9);
if (!AddRankProgress(6))
{
TTextBox::Display(tTextBox, a1, &Dest, 8.0);
(*(void (**)(void))(*(DWORD*)dword_1023D14 + 20))();
}
}
}
}
// 102372C: using guessed type int dword_102372C;
// 1023734: using guessed type int dword_1023734;
// 102373C: using guessed type int dword_102373C;
// 1023888: using guessed type int dword_1023888;
// 1023A8C: using guessed type int dword_1023A8C;
// 1023A94: using guessed type int dword_1023A94;
// 1023BBC: using guessed type int dword_1023BBC;
// 1023D14: using guessed type int dword_1023D14;
// 1023E6C: using guessed type int dword_1023E6C;
//----- (0100F0B3) --------------------------------------------------------
void ScienceMissionController(int a1@<ebx > , int a2, struct TPinballComponent* a3)
{
int v3; // ST60_4
CHAR* v4; // eax
int v5; // edx
char* v6; // eax
int v7; // ST60_4
CHAR* v8; // eax
char Dest; // [esp+68h] [ebp-44h]
if (a2 != 63)
{
if (a2 == 66)
{
*(DWORD*)(dword_1023888 + 6) = 9;
*(DWORD*)(dword_1023A9C + 6) = 0;
(**(void(* **)(signed int, DWORD))dword_1023A9C)(50, 0.0);
*(DWORD*)(dword_1023AA4 + 6) = 0;
(**(void(* **)(signed int, DWORD))dword_1023AA4)(50, 0.0);
*(DWORD*)(dword_1023AAC + 6) = 0;
(**(void(* **)(signed int, DWORD))dword_1023AAC)(50, 0.0);
*(DWORD*)(dword_1023ADC + 6) = 0;
(**(void(* **)(signed int, DWORD))dword_1023ADC)(50, 0.0);
*(DWORD*)(dword_1023AE4 + 6) = 0;
(**(void(* **)(signed int, DWORD))dword_1023AE4)(50, 0.0);
*(DWORD*)(dword_1023AEC + 6) = 0;
(**(void(* **)(signed int, DWORD))dword_1023AEC)(50, 0.0);
*(DWORD*)(dword_1023B20 + 6) = 0;
(**(void(* **)(signed int, DWORD))dword_1023B20)(50, 0.0);
*(DWORD*)(dword_1023B28 + 6) = 0;
(**(void(* **)(signed int, DWORD))dword_1023B28)(50, 0.0);
*(DWORD*)(dword_1023B30 + 6) = 0;
(**(void(* **)(signed int, DWORD))dword_1023B30)(50, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023E4C)(7, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023E7C)(7, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023EAC)(7, 0.0);
}
else if (a2 != 67)
{
return;
}
v3 = *(DWORD*)(dword_1023888 + 6);
v4 = get_rc_string(114, 0);
_sprintf(&Dest, v4, v3);
TTextBox::Display(tTextBox, a1, &Dest, -1.0);
return;
}
if ((struct TPinballComponent*)dword_1023A9C == a3
|| (struct TPinballComponent*)dword_1023AA4 == a3
|| (struct TPinballComponent*)dword_1023AAC == a3
|| (struct TPinballComponent*)dword_1023ADC == a3
|| (struct TPinballComponent*)dword_1023AE4 == a3
|| (struct TPinballComponent*)dword_1023AEC == a3
|| (struct TPinballComponent*)dword_1023B20 == a3
|| (struct TPinballComponent*)dword_1023B28 == a3
|| (struct TPinballComponent*)dword_1023B30 == a3)
{
v5 = *(DWORD*)(dword_1023888 + 6) - 1;
*(DWORD*)(dword_1023888 + 6) = v5;
if (v5)
{
MissionControl(67, a3);
}
else
{
(**(void(* **)(signed int, DWORD))dword_1023E4C)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023E7C)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023EAC)(20, 0.0);
*(DWORD*)(dword_1023BBC + 6) = 1;
MissionControl(66, 0);
v6 = get_rc_string(115, 0);
TTextBox::Display(tTextBox, a1, v6, 4.0);
v7 = SpecialAddScore(750000);
v8 = get_rc_string(78, 0);
_sprintf(&Dest, v8, v7);
if (!AddRankProgress(9))
{
TTextBox::Display(tTextBox, a1, &Dest, 8.0);
(*(void (**)(void))(*(DWORD*)dword_1023D14 + 20))();
}
}
}
}
// 1023888: using guessed type int dword_1023888;
// 1023A9C: using guessed type int dword_1023A9C;
// 1023AA4: using guessed type int dword_1023AA4;
// 1023AAC: using guessed type int dword_1023AAC;
// 1023ADC: using guessed type int dword_1023ADC;
// 1023AE4: using guessed type int dword_1023AE4;
// 1023AEC: using guessed type int dword_1023AEC;
// 1023B20: using guessed type int dword_1023B20;
// 1023B28: using guessed type int dword_1023B28;
// 1023B30: using guessed type int dword_1023B30;
// 1023BBC: using guessed type int dword_1023BBC;
// 1023D14: using guessed type int dword_1023D14;
// 1023E4C: using guessed type int dword_1023E4C;
// 1023E7C: using guessed type int dword_1023E7C;
// 1023EAC: using guessed type int dword_1023EAC;
//----- (0100F381) --------------------------------------------------------
void StrayCometController(int a1@<ebx > , int a2, struct TPinballComponent* a3)
{
char* v3; // eax
char* v4; // eax
int v5; // ST10_4
CHAR* v6; // eax
char Dest; // [esp+18h] [ebp-44h]
if (a2 == 63)
{
if ((struct TPinballComponent*)dword_1023BE0 == a3
|| (struct TPinballComponent*)dword_1023BE8 == a3
|| (struct TPinballComponent*)dword_1023BF0 == a3)
{
if (*(DWORD*)(dword_1023C10 + 6) == 7)
{
(**(void(* **)(signed int, DWORD))dword_1023E64)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023E54)(7, 0.0);
*(DWORD*)(dword_1023C10 + 6) = 15;
MissionControl(67, a3);
}
}
else if ((struct TPinballComponent*)dword_1023980 == a3 && *(DWORD*)(dword_1023C10 + 6) == 15)
{
(**(void(* **)(signed int, DWORD))dword_1023E54)(20, 0.0);
*(DWORD*)(dword_1023BBC + 6) = 1;
MissionControl(66, 0);
v4 = get_rc_string(119, 0);
TTextBox::Display(tTextBox, a1, v4, 4.0);
v5 = SpecialAddScore(1000000);
v6 = get_rc_string(78, 0);
_sprintf(&Dest, v6, v5);
if (!AddRankProgress(8))
{
TTextBox::Display(tTextBox, a1, &Dest, 8.0);
(*(void (**)(void))(*(DWORD*)dword_1023D14 + 20))();
}
}
}
else
{
if (a2 == 66)
{
(**(void(* **)(signed int, DWORD))dword_1023C30)(20, 0.0);
*(DWORD*)(dword_1023C10 + 6) = 0;
(**(void(* **)(signed int, DWORD))dword_1023E64)(7, 0.0);
}
else if (a2 != 67)
{
return;
}
if (*(DWORD*)(dword_1023C10 + 6) == 15)
v3 = get_rc_string(118, 0);
else
v3 = get_rc_string(117, 0);
TTextBox::Display(tTextBox, a1, v3, -1.0);
}
}
// 1023980: using guessed type int dword_1023980;
// 1023BBC: using guessed type int dword_1023BBC;
// 1023BE0: using guessed type int dword_1023BE0;
// 1023BE8: using guessed type int dword_1023BE8;
// 1023BF0: using guessed type int dword_1023BF0;
// 1023C10: using guessed type int dword_1023C10;
// 1023C30: using guessed type int dword_1023C30;
// 1023D14: using guessed type int dword_1023D14;
// 1023E54: using guessed type int dword_1023E54;
// 1023E64: using guessed type int dword_1023E64;
//----- (0100F539) --------------------------------------------------------
void SpaceRadiationController(int a1@<ebx > , int a2, struct TPinballComponent* a3)
{
char* v3; // eax
char* v4; // eax
int v5; // ST10_4
CHAR* v6; // eax
char Dest; // [esp+18h] [ebp-44h]
if (a2 == 63)
{
if ((struct TPinballComponent*)dword_1023BC8 == a3
|| (struct TPinballComponent*)dword_1023BD0 == a3
|| (struct TPinballComponent*)dword_1023BD8 == a3)
{
if (*(DWORD*)(dword_1023BF8 + 6) == 7)
{
*(DWORD*)(dword_1023BF8 + 6) = 15;
(**(void(* **)(signed int, DWORD))dword_1023A3C)(7, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023E9C)(20, 0.0);
MissionControl(67, a3);
AdvanceWormHoleDestination(1);
}
}
else if (((struct TPinballComponent*)dword_10239EC == a3
|| (struct TPinballComponent*)dword_10239F4 == a3
|| (struct TPinballComponent*)dword_10239FC == a3)
&& *(DWORD*)(dword_1023BF8 + 6) == 15)
{
*(DWORD*)(dword_1023BBC + 6) = 1;
MissionControl(66, 0);
v4 = get_rc_string(121, 0);
TTextBox::Display(tTextBox, a1, v4, 4.0);
v5 = SpecialAddScore(1000000);
v6 = get_rc_string(78, 0);
_sprintf(&Dest, v6, v5);
if (!AddRankProgress(8))
{
TTextBox::Display(tTextBox, a1, &Dest, 8.0);
(*(void (**)(void))(*(DWORD*)dword_1023D14 + 20))();
}
}
}
else
{
if (a2 == 66)
{
(**(void(* **)(signed int, DWORD))dword_1023C28)(20, 0.0);
*(DWORD*)(dword_1023BF8 + 6) = 0;
(**(void(* **)(signed int, DWORD))dword_1023E9C)(7, 0.0);
}
else if (a2 != 67)
{
return;
}
if (*(DWORD*)(dword_1023BF8 + 6) == 15)
v3 = get_rc_string(120, 0);
else
v3 = get_rc_string(176, 0);
TTextBox::Display(tTextBox, a1, v3, -1.0);
}
}
// 10239EC: using guessed type int dword_10239EC;
// 10239F4: using guessed type int dword_10239F4;
// 10239FC: using guessed type int dword_10239FC;
// 1023A3C: using guessed type int dword_1023A3C;
// 1023BBC: using guessed type int dword_1023BBC;
// 1023BC8: using guessed type int dword_1023BC8;
// 1023BD0: using guessed type int dword_1023BD0;
// 1023BD8: using guessed type int dword_1023BD8;
// 1023BF8: using guessed type int dword_1023BF8;
// 1023C28: using guessed type int dword_1023C28;
// 1023D14: using guessed type int dword_1023D14;
// 1023E9C: using guessed type int dword_1023E9C;
//----- (0100F6F4) --------------------------------------------------------
void BlackHoleThreatController(int a1@<ebx > , int a2, struct TPinballComponent* a3)
{
char* v3; // eax
void(* **v4)(signed int, DWORD); // ecx
char* v5; // eax
char* v6; // eax
int v7; // ST10_4
CHAR* v8; // eax
float v9; // [esp+10h] [ebp-4Ch]
char Dest; // [esp+18h] [ebp-44h]
if (a2 == 11)
{
if ((struct TPinballComponent*)dword_1023758 == a3)
MissionControl(67, a3);
}
else if (a2 == 63)
{
if ((struct TPinballComponent*)dword_1023C5C == a3 && *(DWORD*)(dword_1023758 + 78))
{
if (light_on((struct component_tag*) & lite316))
(**(void(* **)(signed int, DWORD))dword_1023EB4)(20, 0.0);
if (light_on((struct component_tag*) & lite314))
(**(void(* **)(signed int, DWORD))dword_1023EA4)(20, 0.0);
*(DWORD*)(dword_1023BBC + 6) = 1;
MissionControl(66, 0);
v6 = get_rc_string(124, 0);
TTextBox::Display(tTextBox, a1, v6, 4.0);
v7 = SpecialAddScore(1000000);
v8 = get_rc_string(78, 0);
_sprintf(&Dest, v8, v7);
if (!AddRankProgress(8))
{
TTextBox::Display(tTextBox, a1, &Dest, 8.0);
(*(void (**)(void))(*(DWORD*)dword_1023D14 + 20))();
}
}
}
else
{
if (a2 == 66)
{
(**(void(* **)(signed int, DWORD))dword_1023770)(11, 0.0);
}
else if (a2 != 67)
{
return;
}
v9 = -1.0;
if (*(DWORD*)(dword_1023758 + 78))
{
v5 = get_rc_string(123, 0);
TTextBox::Display(tTextBox, a1, v5, v9);
if (light_on((struct component_tag*) & lite316))
(**(void(* **)(signed int, DWORD))dword_1023EB4)(20, 0.0);
if (!light_on((struct component_tag*) & lite314))
{
v4 = (void(* **)(signed int, DWORD))dword_1023EA4;
goto LABEL_12;
}
}
else
{
v3 = get_rc_string(122, 0);
TTextBox::Display(tTextBox, a1, v3, v9);
if (light_on((struct component_tag*) & lite314))
(**(void(* **)(signed int, DWORD))dword_1023EA4)(20, 0.0);
if (!light_on((struct component_tag*) & lite316))
{
v4 = (void(* **)(signed int, DWORD))dword_1023EB4;
LABEL_12:
(**v4)(7, 0.0);
return;
}
}
}
}
// 1023758: using guessed type int dword_1023758;
// 1023770: using guessed type int dword_1023770;
// 1023BBC: using guessed type int dword_1023BBC;
// 1023C5C: using guessed type int dword_1023C5C;
// 1023D14: using guessed type int dword_1023D14;
// 1023EA0: using guessed type char *lite314;
// 1023EA4: using guessed type int dword_1023EA4;
// 1023EB0: using guessed type char *lite316;
// 1023EB4: using guessed type int dword_1023EB4;
//----- (0100F900) --------------------------------------------------------
void BugHuntController(int a1@<ebx > , int a2, struct TPinballComponent* a3)
{
int v3; // ST90_4
CHAR* v4; // eax
int v5; // edx
char* v6; // eax
int v7; // ST90_4
CHAR* v8; // eax
char Dest; // [esp+9Ch] [ebp-44h]
if (a2 != 63)
{
if (a2 == 66)
{
*(DWORD*)(dword_1023888 + 6) = 15;
*(DWORD*)(dword_1023A9C + 6) = 0;
(**(void(* **)(signed int, DWORD))dword_1023A9C)(50, 0.0);
*(DWORD*)(dword_1023AA4 + 6) = 0;
(**(void(* **)(signed int, DWORD))dword_1023AA4)(50, 0.0);
*(DWORD*)(dword_1023AAC + 6) = 0;
(**(void(* **)(signed int, DWORD))dword_1023AAC)(50, 0.0);
*(DWORD*)(dword_1023ADC + 6) = 0;
(**(void(* **)(signed int, DWORD))dword_1023ADC)(50, 0.0);
*(DWORD*)(dword_1023AE4 + 6) = 0;
(**(void(* **)(signed int, DWORD))dword_1023AE4)(50, 0.0);
*(DWORD*)(dword_1023AEC + 6) = 0;
(**(void(* **)(signed int, DWORD))dword_1023AEC)(50, 0.0);
*(DWORD*)(dword_1023B20 + 6) = 0;
(**(void(* **)(signed int, DWORD))dword_1023B20)(50, 0.0);
*(DWORD*)(dword_1023B28 + 6) = 0;
(**(void(* **)(signed int, DWORD))dword_1023B28)(50, 0.0);
*(DWORD*)(dword_1023B30 + 6) = 0;
(**(void(* **)(signed int, DWORD))dword_1023B30)(50, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023B78)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023BB4)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023C28)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023C30)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023E64)(7, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023E74)(7, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023E84)(7, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023E9C)(7, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023ECC)(7, 0.0);
}
else if (a2 != 67)
{
return;
}
v3 = *(DWORD*)(dword_1023888 + 6);
v4 = get_rc_string(125, 0);
_sprintf(&Dest, v4, v3);
TTextBox::Display(tTextBox, a1, &Dest, -1.0);
return;
}
if ((struct TPinballComponent*)dword_1023A9C == a3
|| (struct TPinballComponent*)dword_1023AA4 == a3
|| (struct TPinballComponent*)dword_1023AAC == a3
|| (struct TPinballComponent*)dword_1023ADC == a3
|| (struct TPinballComponent*)dword_1023AE4 == a3
|| (struct TPinballComponent*)dword_1023AEC == a3
|| (struct TPinballComponent*)dword_1023B20 == a3
|| (struct TPinballComponent*)dword_1023B28 == a3
|| (struct TPinballComponent*)dword_1023B30 == a3
|| (struct TPinballComponent*)dword_1023B48 == a3
|| (struct TPinballComponent*)dword_1023B50 == a3
|| (struct TPinballComponent*)dword_1023B58 == a3
|| (struct TPinballComponent*)dword_1023B84 == a3
|| (struct TPinballComponent*)dword_1023B8C == a3
|| (struct TPinballComponent*)dword_1023B94 == a3
|| (struct TPinballComponent*)dword_1023BC8 == a3
|| (struct TPinballComponent*)dword_1023BD0 == a3
|| (struct TPinballComponent*)dword_1023BD8 == a3
|| (struct TPinballComponent*)dword_1023BE0 == a3
|| (struct TPinballComponent*)dword_1023BE8 == a3
|| (struct TPinballComponent*)dword_1023BF0 == a3
|| (struct TPinballComponent*)dword_1023C3C == a3)
{
v5 = *(DWORD*)(dword_1023888 + 6) - 1;
*(DWORD*)(dword_1023888 + 6) = v5;
if (v5)
{
MissionControl(67, a3);
}
else
{
(**(void(* **)(signed int, DWORD))dword_1023E64)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023E74)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023E84)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023E9C)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023ECC)(20, 0.0);
*(DWORD*)(dword_1023BBC + 6) = 1;
MissionControl(66, 0);
v6 = get_rc_string(126, 0);
TTextBox::Display(tTextBox, a1, v6, 4.0);
v7 = SpecialAddScore(750000);
v8 = get_rc_string(78, 0);
_sprintf(&Dest, v8, v7);
if (!AddRankProgress(7))
{
TTextBox::Display(tTextBox, a1, &Dest, 8.0);
(*(void (**)(void))(*(DWORD*)dword_1023D14 + 20))();
}
}
}
}
// 1023888: using guessed type int dword_1023888;
// 1023A9C: using guessed type int dword_1023A9C;
// 1023AA4: using guessed type int dword_1023AA4;
// 1023AAC: using guessed type int dword_1023AAC;
// 1023ADC: using guessed type int dword_1023ADC;
// 1023AE4: using guessed type int dword_1023AE4;
// 1023AEC: using guessed type int dword_1023AEC;
// 1023B20: using guessed type int dword_1023B20;
// 1023B28: using guessed type int dword_1023B28;
// 1023B30: using guessed type int dword_1023B30;
// 1023B48: using guessed type int dword_1023B48;
// 1023B50: using guessed type int dword_1023B50;
// 1023B58: using guessed type int dword_1023B58;
// 1023B78: using guessed type int dword_1023B78;
// 1023B84: using guessed type int dword_1023B84;
// 1023B8C: using guessed type int dword_1023B8C;
// 1023B94: using guessed type int dword_1023B94;
// 1023BB4: using guessed type int dword_1023BB4;
// 1023BBC: using guessed type int dword_1023BBC;
// 1023BC8: using guessed type int dword_1023BC8;
// 1023BD0: using guessed type int dword_1023BD0;
// 1023BD8: using guessed type int dword_1023BD8;
// 1023BE0: using guessed type int dword_1023BE0;
// 1023BE8: using guessed type int dword_1023BE8;
// 1023BF0: using guessed type int dword_1023BF0;
// 1023C28: using guessed type int dword_1023C28;
// 1023C30: using guessed type int dword_1023C30;
// 1023C3C: using guessed type int dword_1023C3C;
// 1023D14: using guessed type int dword_1023D14;
// 1023E64: using guessed type int dword_1023E64;
// 1023E74: using guessed type int dword_1023E74;
// 1023E84: using guessed type int dword_1023E84;
// 1023E9C: using guessed type int dword_1023E9C;
// 1023ECC: using guessed type int dword_1023ECC;
//----- (0100FCD9) --------------------------------------------------------
void RescueMissionController(int a1, int a2, struct TPinballComponent* a3)
{
BOOL v3; // eax
char* v4; // eax
void(* **v5)(signed int, DWORD); // ecx
char* v6; // eax
int v7; // ecx
char* v8; // eax
int v9; // ST18_4
CHAR* v10; // eax
float v11; // [esp+18h] [ebp-4Ch]
char Dest; // [esp+20h] [ebp-44h]
if (a2 == 63)
{
if ((struct TPinballComponent*)dword_1023A9C == a3
|| (struct TPinballComponent*)dword_1023AA4 == a3
|| (struct TPinballComponent*)dword_1023AAC == a3)
{
MissionControl(67, a3);
return;
}
if ((struct TPinballComponent*)dword_1023980 != a3 || !light_on((struct component_tag*) & lite20))
return;
v7 = *(DWORD*)(dword_1023888 + 6) - 1;
*(DWORD*)(dword_1023888 + 6) = v7;
if (v7)
{
MissionControl(67, a3);
return;
}
if (light_on((struct component_tag*) & lite303))
(**(void(* **)(signed int, DWORD))dword_1023E4C)(20, 0.0);
if (light_on((struct component_tag*) & lite304))
(**(void(* **)(signed int, DWORD))dword_1023E54)(20, 0.0);
*(DWORD*)(dword_1023BBC + 6) = 1;
MissionControl(66, 0);
v8 = get_rc_string(129, 0);
TTextBox::Display(tTextBox, a1, v8, 4.0);
v9 = SpecialAddScore(750000);
v10 = get_rc_string(78, 0);
_sprintf(&Dest, v10, v9);
if (!AddRankProgress(7))
{
TTextBox::Display(tTextBox, a1, &Dest, 8.0);
(*(void (**)(void))(*(DWORD*)dword_1023D14 + 20))();
}
}
else
{
if (a2 == 66)
{
(**(void(* **)(signed int, DWORD))dword_1023940)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_10239D0)(20, 0.0);
*(DWORD*)(dword_1023888 + 6) = 1;
}
else if (a2 != 67)
{
return;
}
v3 = light_on((struct component_tag*) & lite20);
v11 = -1.0;
if (v3)
{
v6 = get_rc_string(128, 0);
TTextBox::Display(tTextBox, a1, v6, v11);
if (light_on((struct component_tag*) & lite303))
(**(void(* **)(signed int, DWORD))dword_1023E4C)(20, 0.0);
if (!light_on((struct component_tag*) & lite304))
{
v5 = (void(* **)(signed int, DWORD))dword_1023E54;
goto LABEL_11;
}
}
else
{
v4 = get_rc_string(127, 0);
TTextBox::Display(tTextBox, a1, v4, v11);
if (light_on((struct component_tag*) & lite304))
(**(void(* **)(signed int, DWORD))dword_1023E54)(20, 0.0);
if (!light_on((struct component_tag*) & lite303))
{
v5 = (void(* **)(signed int, DWORD))dword_1023E4C;
LABEL_11:
(**v5)(7, 0.0);
return;
}
}
}
}
// 1023888: using guessed type int dword_1023888;
// 102393C: using guessed type char *lite20;
// 1023940: using guessed type int dword_1023940;
// 1023980: using guessed type int dword_1023980;
// 10239D0: using guessed type int dword_10239D0;
// 1023A9C: using guessed type int dword_1023A9C;
// 1023AA4: using guessed type int dword_1023AA4;
// 1023AAC: using guessed type int dword_1023AAC;
// 1023BBC: using guessed type int dword_1023BBC;
// 1023D14: using guessed type int dword_1023D14;
// 1023E48: using guessed type char *lite303;
// 1023E4C: using guessed type int dword_1023E4C;
// 1023E50: using guessed type char *lite304;
// 1023E54: using guessed type int dword_1023E54;
//----- (0100FF35) --------------------------------------------------------
void AlienMenaceController(int a1@<ebx > , int a2, struct TPinballComponent* a3)
{
void(__thiscall * **v3)(DWORD, signed int, DWORD); // esi
void(__thiscall * **v4)(DWORD, signed int, DWORD); // esi
char* v5; // eax
if (a2 != 11)
{
if (a2 == 66)
{
(**(void(* **)(signed int, DWORD))dword_1023704)(11, 0.0);
v3 = (void(__thiscall * **)(DWORD, signed int, DWORD))dword_1023A8C;
(**(void(* **)(signed int, DWORD))dword_1023A8C)(20, 0.0);
(**v3)(v3, 32, 0.2);
(**v3)(v3, 26, 0.2);
v4 = (void(__thiscall * **)(DWORD, signed int, DWORD))dword_1023A94;
(**(void(* **)(signed int, DWORD))dword_1023A94)(20, 0.0);
(**v4)(v4, 32, 0.2);
(**v4)(v4, 26, 0.2);
(**(void(* **)(signed int, DWORD))dword_1023E6C)(7, 0.0);
}
else if (a2 != 67)
{
return;
}
v5 = get_rc_string(175, 0);
TTextBox::Display(tTextBox, a1, v5, -1.0);
return;
}
if ((struct TPinballComponent*)dword_10236E4 == a3)
{
if (*(DWORD*)(dword_10236E4 + 78))
{
(**(void(* **)(signed int, DWORD))dword_1023E6C)(20, 0.0);
*(DWORD*)(dword_1023BBC + 6) = 20;
MissionControl(66, 0);
}
}
}
// 10236E4: using guessed type int dword_10236E4;
// 1023704: using guessed type int dword_1023704;
// 1023A8C: using guessed type int dword_1023A8C;
// 1023A94: using guessed type int dword_1023A94;
// 1023BBC: using guessed type int dword_1023BBC;
// 1023E6C: using guessed type int dword_1023E6C;
//----- (01010051) --------------------------------------------------------
void AlienMenacePartTwoController(int a1@<ebx > , int a2, struct TPinballComponent* a3)
{
void(__thiscall * **v3)(DWORD, signed int, DWORD); // esi
void(__thiscall * **v4)(DWORD, signed int, DWORD); // esi
int v5; // ST30_4
CHAR* v6; // eax
int v7; // ecx
char* v8; // eax
int v9; // ST30_4
CHAR* v10; // eax
char Dest; // [esp+38h] [ebp-44h]
if (a2 != 63)
{
if (a2 == 66)
{
*(DWORD*)(dword_1023888 + 6) = 8;
v3 = (void(__thiscall * **)(DWORD, signed int, DWORD))dword_1023A8C;
(**(void(__fastcall * **)(int, struct TPinballComponent*, signed int, DWORD))dword_1023A8C)(
dword_1023A8C,
a3,
34,
0.0);
(**v3)(v3, 20, 0.0);
v4 = (void(__thiscall * **)(DWORD, signed int, DWORD))dword_1023A94;
(**(void(* **)(signed int, DWORD))dword_1023A94)(34, 0.0);
(**v4)(v4, 20, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023E74)(7, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023E8C)(7, 0.0);
}
else if (a2 != 67)
{
return;
}
v5 = *(DWORD*)(dword_1023888 + 6);
v6 = get_rc_string(107, 0);
_sprintf(&Dest, v6, v5);
TTextBox::Display(tTextBox, a1, &Dest, -1.0);
return;
}
if ((struct TPinballComponent*)dword_10236E4 == a3
|| (struct TPinballComponent*)dword_10236EC == a3
|| (struct TPinballComponent*)dword_10236F4 == a3
|| (struct TPinballComponent*)dword_10236FC == a3)
{
v7 = *(DWORD*)(dword_1023888 + 6) - 1;
*(DWORD*)(dword_1023888 + 6) = v7;
if (v7)
{
MissionControl(67, a3);
}
else
{
(**(void(__fastcall * **)(int, struct TPinballComponent*, signed int, DWORD))dword_1023E74)(
dword_1023E74,
a3,
20,
0.0);
(**(void(* **)(signed int, DWORD))dword_1023E8C)(20, 0.0);
*(DWORD*)(dword_1023BBC + 6) = 1;
MissionControl(66, 0);
v8 = get_rc_string(130, 0);
TTextBox::Display(tTextBox, a1, v8, 4.0);
v9 = SpecialAddScore(750000);
v10 = get_rc_string(78, 0);
_sprintf(&Dest, v10, v9);
if (!AddRankProgress(7))
{
TTextBox::Display(tTextBox, a1, &Dest, 8.0);
(*(void (**)(void))(*(DWORD*)dword_1023D14 + 20))();
}
}
}
}
// 10236E4: using guessed type int dword_10236E4;
// 10236EC: using guessed type int dword_10236EC;
// 10236F4: using guessed type int dword_10236F4;
// 10236FC: using guessed type int dword_10236FC;
// 1023888: using guessed type int dword_1023888;
// 1023A8C: using guessed type int dword_1023A8C;
// 1023A94: using guessed type int dword_1023A94;
// 1023BBC: using guessed type int dword_1023BBC;
// 1023D14: using guessed type int dword_1023D14;
// 1023E74: using guessed type int dword_1023E74;
// 1023E8C: using guessed type int dword_1023E8C;
//----- (0101022D) --------------------------------------------------------
void SatelliteController(int a1@<ebx > , int a2, struct TPinballComponent* a3)
{
int v3; // ST08_4
CHAR* v4; // eax
int v5; // ecx
char* v6; // eax
int v7; // ST08_4
CHAR* v8; // eax
char Dest; // [esp+Ch] [ebp-44h]
if (a2 != 63)
{
if (a2 == 66)
{
*(DWORD*)(dword_1023888 + 6) = 3;
(**(void(__fastcall * **)(int, struct TPinballComponent*, signed int, DWORD))dword_1023E74)(
dword_1023E74,
a3,
7,
0.0);
}
else if (a2 != 67)
{
return;
}
v3 = *(DWORD*)(dword_1023888 + 6);
v4 = get_rc_string(132, 0);
_sprintf(&Dest, v4, v3);
TTextBox::Display(tTextBox, a1, &Dest, -1.0);
return;
}
if ((struct TPinballComponent*)dword_10236FC == a3)
{
v5 = *(DWORD*)(dword_1023888 + 6) - 1;
*(DWORD*)(dword_1023888 + 6) = v5;
if (v5)
{
MissionControl(67, a3);
}
else
{
(**(void(__fastcall * **)(int, struct TPinballComponent*, signed int, DWORD))dword_1023E74)(
dword_1023E74,
a3,
20,
0.0);
*(DWORD*)(dword_1023BBC + 6) = 1;
MissionControl(66, 0);
v6 = get_rc_string(133, 0);
TTextBox::Display(tTextBox, a1, v6, 4.0);
v7 = SpecialAddScore(1250000);
v8 = get_rc_string(78, 0);
_sprintf(&Dest, v8, v7);
if (!AddRankProgress(9))
{
TTextBox::Display(tTextBox, a1, &Dest, 8.0);
(*(void (**)(void))(*(DWORD*)dword_1023D14 + 20))();
}
}
}
}
// 10236FC: using guessed type int dword_10236FC;
// 1023888: using guessed type int dword_1023888;
// 1023BBC: using guessed type int dword_1023BBC;
// 1023D14: using guessed type int dword_1023D14;
// 1023E74: using guessed type int dword_1023E74;
//----- (01010385) --------------------------------------------------------
void ReconnaissanceController(int a1@<ebx > , int a2, struct TPinballComponent* a3)
{
int v3; // ST30_4
CHAR* v4; // eax
int v5; // ecx
char* v6; // eax
int v7; // ST30_4
CHAR* v8; // eax
char Dest; // [esp+38h] [ebp-44h]
if (a2 != 63)
{
if (a2 == 66)
{
*(DWORD*)(dword_1023888 + 6) = 15;
(**(void(* **)(signed int, DWORD))dword_1023E3C)(7, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023E44)(7, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023E6C)(7, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023EB4)(7, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023ED4)(7, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023EDC)(7, 0.0);
}
else if (a2 != 67)
{
return;
}
v3 = *(DWORD*)(dword_1023888 + 6);
v4 = get_rc_string(134, 0);
_sprintf(&Dest, v4, v3);
TTextBox::Display(tTextBox, a1, &Dest, -1.0);
return;
}
if ((struct TPinballComponent*)dword_102372C == a3
|| (struct TPinballComponent*)dword_1023734 == a3
|| (struct TPinballComponent*)dword_102373C == a3
|| (struct TPinballComponent*)dword_1023798 == a3
|| (struct TPinballComponent*)dword_10237A0 == a3
|| (struct TPinballComponent*)dword_10237A8 == a3
|| (struct TPinballComponent*)dword_102389C == a3
|| (struct TPinballComponent*)dword_10238A4 == a3
|| (struct TPinballComponent*)dword_10238C0 == a3
|| (struct TPinballComponent*)dword_10238C8 == a3
|| (struct TPinballComponent*)dword_10238E8 == a3)
{
v5 = *(DWORD*)(dword_1023888 + 6) - 1;
*(DWORD*)(dword_1023888 + 6) = v5;
if (v5)
{
MissionControl(67, 0);
}
else
{
(**(void(* **)(signed int, DWORD))dword_1023E3C)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023E44)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023E6C)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023EB4)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023ED4)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023EDC)(20, 0.0);
*(DWORD*)(dword_1023BBC + 6) = 1;
MissionControl(66, 0);
v6 = get_rc_string(136, 0);
TTextBox::Display(tTextBox, a1, v6, 4.0);
v7 = SpecialAddScore(1250000);
v8 = get_rc_string(78, 0);
_sprintf(&Dest, v8, v7);
if (!AddRankProgress(9))
{
TTextBox::Display(tTextBox, a1, &Dest, 8.0);
(*(void (**)(void))(*(DWORD*)dword_1023D14 + 20))();
}
}
}
}
// 102372C: using guessed type int dword_102372C;
// 1023734: using guessed type int dword_1023734;
// 102373C: using guessed type int dword_102373C;
// 1023798: using guessed type int dword_1023798;
// 10237A0: using guessed type int dword_10237A0;
// 10237A8: using guessed type int dword_10237A8;
// 1023888: using guessed type int dword_1023888;
// 102389C: using guessed type int dword_102389C;
// 10238A4: using guessed type int dword_10238A4;
// 10238C0: using guessed type int dword_10238C0;
// 10238C8: using guessed type int dword_10238C8;
// 10238E8: using guessed type int dword_10238E8;
// 1023BBC: using guessed type int dword_1023BBC;
// 1023D14: using guessed type int dword_1023D14;
// 1023E3C: using guessed type int dword_1023E3C;
// 1023E44: using guessed type int dword_1023E44;
// 1023E6C: using guessed type int dword_1023E6C;
// 1023EB4: using guessed type int dword_1023EB4;
// 1023ED4: using guessed type int dword_1023ED4;
// 1023EDC: using guessed type int dword_1023EDC;
//----- (010105E3) --------------------------------------------------------
void DoomsdayMachineController(int a1@<ebx > , int a2, struct TPinballComponent* a3)
{
int v3; // ST10_4
CHAR* v4; // eax
int v5; // ecx
char* v6; // eax
int v7; // ST10_4
CHAR* v8; // eax
char Dest; // [esp+14h] [ebp-44h]
if (a2 != 63)
{
if (a2 == 66)
{
*(DWORD*)(dword_1023888 + 6) = 3;
(**(void(__fastcall * **)(int, struct TPinballComponent*, signed int, DWORD))dword_1023E3C)(
dword_1023E3C,
a3,
7,
0.0);
(**(void(* **)(signed int, DWORD))dword_1023ED4)(7, 0.0);
}
else if (a2 != 67)
{
return;
}
v3 = *(DWORD*)(dword_1023888 + 6);
v4 = get_rc_string(137, 0);
_sprintf(&Dest, v4, v3);
TTextBox::Display(tTextBox, a1, &Dest, -1.0);
return;
}
if ((struct TPinballComponent*)dword_102389C == a3 || (struct TPinballComponent*)dword_10238A4 == a3)
{
v5 = *(DWORD*)(dword_1023888 + 6) - 1;
*(DWORD*)(dword_1023888 + 6) = v5;
if (v5)
{
MissionControl(67, a3);
}
else
{
(**(void(__fastcall * **)(int, struct TPinballComponent*, signed int, DWORD))dword_1023E3C)(
dword_1023E3C,
a3,
20,
0.0);
(**(void(* **)(signed int, DWORD))dword_1023ED4)(20, 0.0);
*(DWORD*)(dword_1023BBC + 6) = 1;
MissionControl(66, 0);
v6 = get_rc_string(138, 0);
TTextBox::Display(tTextBox, a1, v6, 4.0);
v7 = SpecialAddScore(1250000);
v8 = get_rc_string(78, 0);
_sprintf(&Dest, v8, v7);
if (!AddRankProgress(9))
{
TTextBox::Display(tTextBox, a1, &Dest, 8.0);
(*(void (**)(void))(*(DWORD*)dword_1023D14 + 20))();
}
}
}
}
// 1023888: using guessed type int dword_1023888;
// 102389C: using guessed type int dword_102389C;
// 10238A4: using guessed type int dword_10238A4;
// 1023BBC: using guessed type int dword_1023BBC;
// 1023D14: using guessed type int dword_1023D14;
// 1023E3C: using guessed type int dword_1023E3C;
// 1023ED4: using guessed type int dword_1023ED4;
//----- (01010767) --------------------------------------------------------
void CosmicPlagueController(int a1@<ebx > , int a2, struct TPinballComponent* a3)
{
int v3; // ST20_4
CHAR* v4; // eax
int v5; // ecx
char Dest; // [esp+24h] [ebp-44h]
if (a2 != 63)
{
if (a2 == 66)
{
*(DWORD*)(dword_1023888 + 6) = 75;
(**(void(__fastcall * **)(int, struct TPinballComponent*, signed int, DWORD))dword_1023940)(
dword_1023940,
a3,
19,
0.0);
(**(void(* **)(signed int, DWORD))dword_10239D0)(19, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023E5C)(7, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023E94)(7, 0.0);
}
else if (a2 != 67)
{
return;
}
v3 = *(DWORD*)(dword_1023888 + 6);
v4 = get_rc_string(139, 0);
_sprintf(&Dest, v4, v3);
TTextBox::Display(tTextBox, a1, &Dest, -1.0);
return;
}
if ((struct TPinballComponent*)dword_1023930 == a3 || (struct TPinballComponent*)dword_10239C8 == a3)
{
v5 = *(DWORD*)(dword_1023888 + 6) - 1;
*(DWORD*)(dword_1023888 + 6) = v5;
if (v5)
{
MissionControl(67, a3);
}
else
{
(**(void(__fastcall * **)(int, struct TPinballComponent*, signed int, DWORD))dword_1023E5C)(
dword_1023E5C,
a3,
20,
0.0);
(**(void(* **)(signed int, DWORD))dword_1023E94)(20, 0.0);
*(DWORD*)(dword_1023BBC + 6) = 21;
MissionControl(66, 0);
(**(void(* **)(signed int, DWORD))dword_1023940)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_10239D0)(20, 0.0);
}
}
}
// 1023888: using guessed type int dword_1023888;
// 1023930: using guessed type int dword_1023930;
// 1023940: using guessed type int dword_1023940;
// 10239C8: using guessed type int dword_10239C8;
// 10239D0: using guessed type int dword_10239D0;
// 1023BBC: using guessed type int dword_1023BBC;
// 1023E5C: using guessed type int dword_1023E5C;
// 1023E94: using guessed type int dword_1023E94;
//----- (010108BC) --------------------------------------------------------
void CosmicPlaguePartTwoController(int a1@<ebx > , int a2, struct TPinballComponent* a3)
{
char* v3; // eax
char* v4; // eax
int v5; // ST08_4
CHAR* v6; // eax
char Dest; // [esp+Ch] [ebp-44h]
if (a2 != 63)
{
if (a2 == 66)
{
(**(void(* **)(signed int, DWORD))dword_1023E84)(7, 0.0);
}
else if (a2 != 67)
{
return;
}
v3 = get_rc_string(140, 0);
TTextBox::Display(tTextBox, a1, v3, -1.0);
return;
}
if ((struct TPinballComponent*)dword_1023C50 == a3)
{
(**(void(* **)(signed int, DWORD))dword_1023E84)(20, 0.0);
*(DWORD*)(dword_1023BBC + 6) = 1;
MissionControl(66, 0);
v4 = get_rc_string(141, 0);
TTextBox::Display(tTextBox, a1, v4, 4.0);
v5 = SpecialAddScore(1750000);
v6 = get_rc_string(78, 0);
_sprintf(&Dest, v6, v5);
if (!AddRankProgress(11))
{
TTextBox::Display(tTextBox, a1, &Dest, 8.0);
(*(void (**)(void))(*(DWORD*)dword_1023D14 + 20))();
}
}
}
// 1023BBC: using guessed type int dword_1023BBC;
// 1023C50: using guessed type int dword_1023C50;
// 1023D14: using guessed type int dword_1023D14;
// 1023E84: using guessed type int dword_1023E84;
//----- (010109D5) --------------------------------------------------------
void SecretMissionYellowController(int a1@<ebx > , int a2, struct TPinballComponent* a3)
{
char* v3; // eax
if (a2 != 63)
{
if (a2 == 66)
{
(**(void(* **)(signed int, DWORD))dword_1023A1C)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023A3C)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023A3C)(23, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023C44)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023A14)(19, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023A34)(11, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023A34)(19, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023A34)(7, 0.0);
}
else if (a2 != 67)
{
return;
}
v3 = get_rc_string(142, 0);
TTextBox::Display(tTextBox, a1, v3, -1.0);
return;
}
if ((struct TPinballComponent*)dword_10239FC == a3)
{
*(DWORD*)(dword_1023BBC + 6) = 22;
MissionControl(66, 0);
}
}
// 10239FC: using guessed type int dword_10239FC;
// 1023A14: using guessed type int dword_1023A14;
// 1023A1C: using guessed type int dword_1023A1C;
// 1023A34: using guessed type int dword_1023A34;
// 1023A3C: using guessed type int dword_1023A3C;
// 1023BBC: using guessed type int dword_1023BBC;
// 1023C44: using guessed type int dword_1023C44;
//----- (01010AD3) --------------------------------------------------------
void SecretMissionRedController(int a1@<ebx > , int a2, struct TPinballComponent* a3)
{
char* v3; // eax
if (a2 != 63)
{
if (a2 == 66)
{
(**(void(* **)(signed int, DWORD))dword_1023A04)(19, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023A24)(11, 2.0);
(**(void(* **)(signed int, DWORD))dword_1023A24)(19, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023A24)(7, 0.0);
}
else if (a2 != 67)
{
return;
}
v3 = get_rc_string(143, 0);
TTextBox::Display(tTextBox, a1, v3, -1.0);
return;
}
if ((struct TPinballComponent*)dword_10239EC == a3)
{
*(DWORD*)(dword_1023BBC + 6) = 23;
MissionControl(66, 0);
}
}
// 10239EC: using guessed type int dword_10239EC;
// 1023A04: using guessed type int dword_1023A04;
// 1023A24: using guessed type int dword_1023A24;
// 1023BBC: using guessed type int dword_1023BBC;
//----- (01010B85) --------------------------------------------------------
void SecretMissionGreenController(int a1@<ebx > , int a2, struct TPinballComponent* a3)
{
char* v3; // eax
char* v4; // eax
int v5; // ST20_4
CHAR* v6; // eax
char Dest; // [esp+24h] [ebp-44h]
if (a2 != 63)
{
if (a2 == 66)
{
(**(void(* **)(signed int, DWORD))dword_1023A0C)(19, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023A2C)(11, 1.0);
(**(void(* **)(signed int, DWORD))dword_1023A2C)(19, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023A2C)(7, 0.0);
}
else if (a2 != 67)
{
return;
}
v3 = get_rc_string(144, 0);
TTextBox::Display(tTextBox, a1, v3, -1.0);
return;
}
if ((struct TPinballComponent*)dword_10239F4 == a3)
{
*(DWORD*)(dword_1023BBC + 6) = 1;
MissionControl(66, 0);
v4 = get_rc_string(145, 0);
TTextBox::Display(tTextBox, a1, v4, 4.0);
v5 = SpecialAddScore(1500000);
v6 = get_rc_string(78, 0);
_sprintf(&Dest, v6, v5);
if (!AddRankProgress(10))
{
TTextBox::Display(tTextBox, a1, &Dest, 8.0);
(*(void (**)(void))(*(DWORD*)dword_1023D14 + 20))();
}
}
}
// 10239F4: using guessed type int dword_10239F4;
// 1023A0C: using guessed type int dword_1023A0C;
// 1023A2C: using guessed type int dword_1023A2C;
// 1023BBC: using guessed type int dword_1023BBC;
// 1023D14: using guessed type int dword_1023D14;
//----- (01010CC2) --------------------------------------------------------
void TimeWarpController(int a1@<ebx > , int a2, struct TPinballComponent* a3)
{
int v3; // ST10_4
CHAR* v4; // eax
int v5; // ecx
char Dest; // [esp+14h] [ebp-44h]
if (a2 != 63)
{
if (a2 == 66)
{
*(DWORD*)(dword_1023888 + 6) = 25;
(**(void(__fastcall * **)(int, struct TPinballComponent*, signed int, DWORD))dword_1023E34)(
dword_1023E34,
a3,
7,
0.0);
(**(void(* **)(signed int, DWORD))dword_1023EE4)(7, 0.0);
}
else if (a2 != 67)
{
return;
}
v3 = *(DWORD*)(dword_1023888 + 6);
v4 = get_rc_string(146, 0);
_sprintf(&Dest, v4, v3);
TTextBox::Display(tTextBox, a1, &Dest, -1.0);
return;
}
if ((struct TPinballComponent*)dword_10237C4 == a3
|| (struct TPinballComponent*)dword_10237CC == a3
|| (struct TPinballComponent*)dword_10237E8 == a3
|| (struct TPinballComponent*)dword_10237F0 == a3)
{
v5 = *(DWORD*)(dword_1023888 + 6) - 1;
*(DWORD*)(dword_1023888 + 6) = v5;
if (v5)
{
MissionControl(67, a3);
}
else
{
(**(void(__fastcall * **)(int, struct TPinballComponent*, signed int, DWORD))dword_1023E34)(
dword_1023E34,
a3,
20,
0.0);
(**(void(* **)(signed int, DWORD))dword_1023EE4)(20, 0.0);
*(DWORD*)(dword_1023BBC + 6) = 24;
MissionControl(66, 0);
}
}
}
// 10237C4: using guessed type int dword_10237C4;
// 10237CC: using guessed type int dword_10237CC;
// 10237E8: using guessed type int dword_10237E8;
// 10237F0: using guessed type int dword_10237F0;
// 1023888: using guessed type int dword_1023888;
// 1023BBC: using guessed type int dword_1023BBC;
// 1023E34: using guessed type int dword_1023E34;
// 1023EE4: using guessed type int dword_1023EE4;
//----- (01010DD3) --------------------------------------------------------
void TimeWarpPartTwoController(int a1@<ebx > , int a2, struct TPinballComponent* a3)
{
char* v3; // eax
char* v4; // eax
int v5; // eax
CHAR* v6; // ST30_4
CHAR* v7; // eax
char* v8; // eax
int v9; // esi
CHAR* v10; // ST30_4
CHAR* v11; // eax
char Dest; // [esp+38h] [ebp-44h]
if (a2 != 63)
{
if (a2 == 66)
{
(**(void(* **)(signed int, DWORD))dword_1023880)(7, -1.0);
(**(void(* **)(signed int, DWORD))dword_10239B8)(7, -1.0);
(**(void(* **)(signed int, DWORD))dword_1023E54)(7, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023EBC)(7, 0.0);
}
else if (a2 != 67)
{
return;
}
v3 = get_rc_string(147, 0);
TTextBox::Display(tTextBox, a1, v3, -1.0);
return;
}
if ((struct TPinballComponent*)dword_1023980 == a3)
{
v4 = get_rc_string(47, 0);
TTextBox::Display(tTextBox, a1, v4, 4.0);
if ((**(int(* **)(signed int, DWORD))dword_1023CF4)(37, 0.0) > 1)
{
(**(void(* **)(signed int, DWORD))dword_1023CF4)(33, 5.0);
v5 = (**(int(* **)(signed int, DWORD))dword_1023CF4)(37, 0.0);
v6 = get_rc_string(word_10246EC[2 * (v5 - 1)], 1);
v7 = get_rc_string(174, 0);
_sprintf(&Dest, v7, v6);
TTextBox::Display(tTextBox, a1, &Dest, 8.0);
}
}
else
{
if ((struct TPinballComponent*)dword_1023870 != a3)
return;
v8 = get_rc_string(46, 0);
TTextBox::Display(tTextBox, a1, v8, 4.0);
if ((**(int(* **)(signed int, DWORD))dword_1023CF4)(37, 0.0) < 9)
{
v9 = (**(int(* **)(signed int, DWORD))dword_1023CF4)(37, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023CF4)(41, 5.0);
v10 = get_rc_string(word_10246EC[2 * v9], 1);
v11 = get_rc_string(173, 0);
_sprintf(&Dest, v11, v10);
}
if (!AddRankProgress(12))
{
TTextBox::Display(tTextBox, a1, &Dest, 8.0);
(*(void (**)(void))(*(DWORD*)dword_1023D1C + 20))();
}
}
SpecialAddScore(2000000);
(**(void(* **)(signed int, DWORD))dword_1023880)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_10239B8)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023E54)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023EBC)(20, 0.0);
*(DWORD*)(dword_1023BBC + 6) = 1;
MissionControl(66, 0);
}
// 1023870: using guessed type int dword_1023870;
// 1023880: using guessed type int dword_1023880;
// 1023980: using guessed type int dword_1023980;
// 10239B8: using guessed type int dword_10239B8;
// 1023BBC: using guessed type int dword_1023BBC;
// 1023CF4: using guessed type int dword_1023CF4;
// 1023D1C: using guessed type int dword_1023D1C;
// 1023E54: using guessed type int dword_1023E54;
// 1023EBC: using guessed type int dword_1023EBC;
// 10246EC: using guessed type int word_10246EC[];
//----- (0101106F) --------------------------------------------------------
void MaelstromController(int a1@<ebx > , int a2, struct TPinballComponent* a3)
{
int v3; // ST18_4
CHAR* v4; // eax
int v5; // edx
char Dest; // [esp+1Ch] [ebp-44h]
if (a2 != 63)
{
if (a2 == 66)
{
*(DWORD*)(dword_1023888 + 6) = 3;
(**(void(* **)(signed int, DWORD))dword_1023E4C)(7, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023E7C)(7, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023EAC)(7, 0.0);
}
else if (a2 != 67)
{
return;
}
v3 = *(DWORD*)(dword_1023888 + 6);
v4 = get_rc_string(148, 0);
_sprintf(&Dest, v4, v3);
TTextBox::Display(tTextBox, a1, &Dest, -1.0);
return;
}
if ((struct TPinballComponent*)dword_1023A9C == a3
|| (struct TPinballComponent*)dword_1023AA4 == a3
|| (struct TPinballComponent*)dword_1023AAC == a3
|| (struct TPinballComponent*)dword_1023ADC == a3
|| (struct TPinballComponent*)dword_1023AE4 == a3
|| (struct TPinballComponent*)dword_1023AEC == a3
|| (struct TPinballComponent*)dword_1023B20 == a3
|| (struct TPinballComponent*)dword_1023B28 == a3
|| (struct TPinballComponent*)dword_1023B30 == a3)
{
v5 = *(DWORD*)(dword_1023888 + 6) - 1;
*(DWORD*)(dword_1023888 + 6) = v5;
if (v5)
{
MissionControl(67, a3);
}
else
{
(**(void(* **)(signed int, DWORD))dword_1023E4C)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023E7C)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023EAC)(20, 0.0);
*(DWORD*)(dword_1023BBC + 6) = 25;
MissionControl(66, 0);
}
}
}
// 1023888: using guessed type int dword_1023888;
// 1023A9C: using guessed type int dword_1023A9C;
// 1023AA4: using guessed type int dword_1023AA4;
// 1023AAC: using guessed type int dword_1023AAC;
// 1023ADC: using guessed type int dword_1023ADC;
// 1023AE4: using guessed type int dword_1023AE4;
// 1023AEC: using guessed type int dword_1023AEC;
// 1023B20: using guessed type int dword_1023B20;
// 1023B28: using guessed type int dword_1023B28;
// 1023B30: using guessed type int dword_1023B30;
// 1023BBC: using guessed type int dword_1023BBC;
// 1023E4C: using guessed type int dword_1023E4C;
// 1023E7C: using guessed type int dword_1023E7C;
// 1023EAC: using guessed type int dword_1023EAC;
//----- (010111D3) --------------------------------------------------------
void MaelstromPartTwoController(int a1@<ebx > , int a2, struct TPinballComponent* a3)
{
int v3; // ST28_4
CHAR* v4; // eax
int v5; // edx
char Dest; // [esp+30h] [ebp-44h]
if (a2 != 63)
{
if (a2 == 66)
{
*(DWORD*)(dword_1023888 + 6) = 3;
(**(void(* **)(signed int, DWORD))dword_1023E64)(7, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023E74)(7, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023E84)(7, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023E9C)(7, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023ECC)(7, 0.0);
}
else if (a2 != 67)
{
return;
}
v3 = *(DWORD*)(dword_1023888 + 6);
v4 = get_rc_string(149, 0);
_sprintf(&Dest, v4, v3);
TTextBox::Display(tTextBox, a1, &Dest, -1.0);
return;
}
if ((struct TPinballComponent*)dword_1023B48 == a3
|| (struct TPinballComponent*)dword_1023B50 == a3
|| (struct TPinballComponent*)dword_1023B58 == a3
|| (struct TPinballComponent*)dword_1023B84 == a3
|| (struct TPinballComponent*)dword_1023B8C == a3
|| (struct TPinballComponent*)dword_1023B94 == a3
|| (struct TPinballComponent*)dword_1023BC8 == a3
|| (struct TPinballComponent*)dword_1023BD0 == a3
|| (struct TPinballComponent*)dword_1023BD8 == a3
|| (struct TPinballComponent*)dword_1023BE0 == a3
|| (struct TPinballComponent*)dword_1023BE8 == a3
|| (struct TPinballComponent*)dword_1023BF0 == a3
|| (struct TPinballComponent*)dword_1023C3C == a3)
{
v5 = *(DWORD*)(dword_1023888 + 6) - 1;
*(DWORD*)(dword_1023888 + 6) = v5;
if (v5)
{
MissionControl(67, a3);
}
else
{
(**(void(* **)(signed int, DWORD))dword_1023E64)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023E74)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023E84)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023E9C)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023ECC)(20, 0.0);
*(DWORD*)(dword_1023BBC + 6) = 26;
MissionControl(66, 0);
}
}
}
// 1023888: using guessed type int dword_1023888;
// 1023B48: using guessed type int dword_1023B48;
// 1023B50: using guessed type int dword_1023B50;
// 1023B58: using guessed type int dword_1023B58;
// 1023B84: using guessed type int dword_1023B84;
// 1023B8C: using guessed type int dword_1023B8C;
// 1023B94: using guessed type int dword_1023B94;
// 1023BBC: using guessed type int dword_1023BBC;
// 1023BC8: using guessed type int dword_1023BC8;
// 1023BD0: using guessed type int dword_1023BD0;
// 1023BD8: using guessed type int dword_1023BD8;
// 1023BE0: using guessed type int dword_1023BE0;
// 1023BE8: using guessed type int dword_1023BE8;
// 1023BF0: using guessed type int dword_1023BF0;
// 1023C3C: using guessed type int dword_1023C3C;
// 1023E64: using guessed type int dword_1023E64;
// 1023E74: using guessed type int dword_1023E74;
// 1023E84: using guessed type int dword_1023E84;
// 1023E9C: using guessed type int dword_1023E9C;
// 1023ECC: using guessed type int dword_1023ECC;
//----- (010113A1) --------------------------------------------------------
void MaelstromPartThreeController(int a1@<ebx > , int a2, struct TPinballComponent* a3)
{
int v3; // ST30_4
CHAR* v4; // eax
int v5; // edx
char Dest; // [esp+38h] [ebp-44h]
if (a2 != 63)
{
if (a2 == 66)
{
*(DWORD*)(dword_1023888 + 6) = 5;
(**(void(* **)(signed int, DWORD))dword_1023E3C)(7, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023E44)(7, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023E6C)(7, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023EB4)(7, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023ED4)(7, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023EDC)(7, 0.0);
}
else if (a2 != 67)
{
return;
}
v3 = *(DWORD*)(dword_1023888 + 6);
v4 = get_rc_string(150, 0);
_sprintf(&Dest, v4, v3);
TTextBox::Display(tTextBox, a1, &Dest, -1.0);
return;
}
if ((struct TPinballComponent*)dword_102372C == a3
|| (struct TPinballComponent*)dword_1023734 == a3
|| (struct TPinballComponent*)dword_102373C == a3
|| (struct TPinballComponent*)dword_1023798 == a3
|| (struct TPinballComponent*)dword_10237A0 == a3
|| (struct TPinballComponent*)dword_10237A8 == a3
|| (struct TPinballComponent*)dword_102389C == a3
|| (struct TPinballComponent*)dword_10238A4 == a3
|| (struct TPinballComponent*)dword_10238C0 == a3
|| (struct TPinballComponent*)dword_10238C8 == a3
|| (struct TPinballComponent*)dword_10238E8 == a3)
{
v5 = *(DWORD*)(dword_1023888 + 6) - 1;
*(DWORD*)(dword_1023888 + 6) = v5;
if (v5)
{
MissionControl(67, a3);
}
else
{
(**(void(* **)(signed int, DWORD))dword_1023E3C)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023E44)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023E6C)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023EB4)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023ED4)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023EDC)(20, 0.0);
*(DWORD*)(dword_1023BBC + 6) = 27;
MissionControl(66, 0);
}
}
}
// 102372C: using guessed type int dword_102372C;
// 1023734: using guessed type int dword_1023734;
// 102373C: using guessed type int dword_102373C;
// 1023798: using guessed type int dword_1023798;
// 10237A0: using guessed type int dword_10237A0;
// 10237A8: using guessed type int dword_10237A8;
// 1023888: using guessed type int dword_1023888;
// 102389C: using guessed type int dword_102389C;
// 10238A4: using guessed type int dword_10238A4;
// 10238C0: using guessed type int dword_10238C0;
// 10238C8: using guessed type int dword_10238C8;
// 10238E8: using guessed type int dword_10238E8;
// 1023BBC: using guessed type int dword_1023BBC;
// 1023E3C: using guessed type int dword_1023E3C;
// 1023E44: using guessed type int dword_1023E44;
// 1023E6C: using guessed type int dword_1023E6C;
// 1023EB4: using guessed type int dword_1023EB4;
// 1023ED4: using guessed type int dword_1023ED4;
// 1023EDC: using guessed type int dword_1023EDC;
//----- (01011582) --------------------------------------------------------
void MaelstromPartFourController(int a1@<ebx > , int a2, struct TPinballComponent* a3)
{
char* v3; // eax
if (a2 != 63)
{
if (a2 == 66)
{
*(DWORD*)(dword_1023888 + 6) = 0;
(**(void(* **)(signed int, DWORD))dword_1023EC4)(7, 0.0);
}
else if (a2 != 67)
{
return;
}
v3 = get_rc_string(151, 0);
TTextBox::Display(tTextBox, a1, v3, -1.0);
return;
}
if ((struct TPinballComponent*)dword_1023924 == a3)
{
(**(void(* **)(signed int, DWORD))dword_1023EC4)(20, 0.0);
*(DWORD*)(dword_1023BBC + 6) = 28;
MissionControl(66, 0);
}
}
// 1023888: using guessed type int dword_1023888;
// 1023924: using guessed type int dword_1023924;
// 1023BBC: using guessed type int dword_1023BBC;
// 1023EC4: using guessed type int dword_1023EC4;
//----- (01011612) --------------------------------------------------------
void MaelstromPartFiveController(int a1@<ebx > , int a2, struct TPinballComponent* a3)
{
char* v3; // eax
if (a2 != 63)
{
if (a2 == 66)
{
(**(void(* **)(signed int, DWORD))dword_1023EBC)(7, 0.0);
}
else if (a2 != 67)
{
return;
}
v3 = get_rc_string(152, 0);
TTextBox::Display(tTextBox, a1, v3, -1.0);
return;
}
if ((struct TPinballComponent*)dword_1023870 == a3)
{
(**(void(* **)(signed int, DWORD))dword_1023EBC)(20, 0.0);
*(DWORD*)(dword_1023BBC + 6) = 29;
MissionControl(66, 0);
}
}
// 1023870: using guessed type int dword_1023870;
// 1023BBC: using guessed type int dword_1023BBC;
// 1023EBC: using guessed type int dword_1023EBC;
//----- (01011699) --------------------------------------------------------
void MaelstromPartSixController(int a1@<ebx > , int a2, struct TPinballComponent* a3)
{
char* v3; // eax
if (a2 != 63)
{
if (a2 == 66)
{
(**(void(* **)(signed int, DWORD))dword_1023940)(19, 0.0);
(**(void(* **)(signed int, DWORD))dword_10239D0)(19, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023E5C)(7, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023E94)(7, 0.0);
}
else if (a2 != 67)
{
return;
}
v3 = get_rc_string(153, 0);
TTextBox::Display(tTextBox, a1, v3, -1.0);
return;
}
if ((struct TPinballComponent*)dword_1023930 == a3 || (struct TPinballComponent*)dword_10239C8 == a3)
{
(**(void(* **)(signed int, DWORD))dword_1023E5C)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023E94)(20, 0.0);
*(DWORD*)(dword_1023BBC + 6) = 30;
MissionControl(66, 0);
(**(void(* **)(signed int, DWORD))dword_1023940)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_10239D0)(20, 0.0);
}
}
// 1023930: using guessed type int dword_1023930;
// 1023940: using guessed type int dword_1023940;
// 10239C8: using guessed type int dword_10239C8;
// 10239D0: using guessed type int dword_10239D0;
// 1023BBC: using guessed type int dword_1023BBC;
// 1023E5C: using guessed type int dword_1023E5C;
// 1023E94: using guessed type int dword_1023E94;
//----- (01011798) --------------------------------------------------------
void MaelstromPartSevenController(int a1@<ebx > , int a2, struct TPinballComponent* a3)
{
char* v3; // eax
if (a2 != 63)
{
if (a2 == 66)
{
AdvanceWormHoleDestination(1);
(**(void(* **)(signed int, DWORD))dword_10239EC)(7, 0.0);
(**(void(* **)(signed int, DWORD))dword_10239F4)(7, 0.0);
(**(void(* **)(signed int, DWORD))dword_10239FC)(7, 0.0);
}
else if (a2 != 67)
{
return;
}
v3 = get_rc_string(154, 0);
TTextBox::Display(tTextBox, a1, v3, -1.0);
return;
}
if ((struct TPinballComponent*)dword_10239EC == a3
|| (struct TPinballComponent*)dword_10239F4 == a3
|| (struct TPinballComponent*)dword_10239FC == a3)
{
*(DWORD*)(dword_1023BBC + 6) = 31;
MissionControl(66, 0);
}
}
// 10239EC: using guessed type int dword_10239EC;
// 10239F4: using guessed type int dword_10239F4;
// 10239FC: using guessed type int dword_10239FC;
// 1023BBC: using guessed type int dword_1023BBC;
//----- (0101184C) --------------------------------------------------------
void MaelstromPartEightController(int a1@<ebx > , int a2, struct TPinballComponent* a3)
{
char* v3; // eax
int v4; // ST10_4
CHAR* v5; // eax
char* v6; // eax
char Dest; // [esp+14h] [ebp-44h]
if (a2 != 63)
{
if (a2 == 66)
{
(**(void(* **)(signed int, DWORD))dword_10239C0)(19, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023E54)(7, 0.0);
}
else if (a2 != 67)
{
return;
}
v3 = get_rc_string(155, 0);
TTextBox::Display(tTextBox, a1, v3, -1.0);
return;
}
if ((struct TPinballComponent*)dword_1023980 == a3)
{
(**(void(* **)(signed int, DWORD))dword_1023E54)(20, 0.0);
(**(void(* **)(signed int, DWORD))dword_10239C0)(20, 0.0);
*(DWORD*)(dword_1023BBC + 6) = 1;
MissionControl(66, 0);
v4 = SpecialAddScore(5000000);
v5 = get_rc_string(78, 0);
_sprintf(&Dest, v5, v4);
v6 = get_rc_string(48, 0);
TTextBox::Display(dword_1023E1C, a1, v6, 4.0);
if (!AddRankProgress(18))
{
TTextBox::Display(tTextBox, a1, &Dest, 8.0);
(*(void (**)(void))(*(DWORD*)dword_1023D14 + 20))();
}
}
}
// 1023980: using guessed type int dword_1023980;
// 10239C0: using guessed type int dword_10239C0;
// 1023BBC: using guessed type int dword_1023BBC;
// 1023D14: using guessed type int dword_1023D14;
// 1023E54: using guessed type int dword_1023E54;
//----- (01011985) --------------------------------------------------------
void GameoverController(int a1, struct TPinballComponent* a2)
{
TTextBox* v2; // eax
int v3; // esi
int v4; // esi
int v5; // ecx
CHAR* v6; // eax
int v7; // esi
int v8; // esi
int v9; // ecx
int v10; // esi
CHAR* v11; // eax
char* v12; // eax
int v13; // [esp+10h] [ebp-94h]
int v14; // [esp+10h] [ebp-94h]
char Dest; // [esp+20h] [ebp-84h]
if (a1 != 66)
{
if (a1 != 67)
return;
v2 = tTextBox;
v3 = *(DWORD*)((char*)tTextBox + 6);
if (!(v3 & 0x100))
{
if (!(v3 & 0x200))
goto LABEL_33;
goto LABEL_18;
}
v4 = *(DWORD*)((_BYTE*)tTextBox + 6) & 0xF;
v5 = **(DWORD * *)((char*)dword_1025040 + 28 * v4 + 102);
v3 = v4 + 1;
if (v5 >= 0)
{
switch (v3)
{
case 1:
v13 = v5;
v6 = get_rc_string(180, 0);
break;
case 2:
v13 = v5;
v6 = get_rc_string(181, 0);
break;
case 3:
v13 = v5;
v6 = get_rc_string(182, 0);
break;
case 4:
v13 = v5;
v6 = get_rc_string(183, 0);
break;
default:
goto LABEL_9;
}
_sprintf(&Dest, v6, v13);
TTextBox::Display(tTextBox, 256, &Dest, 3.0);
if (v3 == *(DWORD*)((char*)dword_1025040 + 214))
v7 = 512;
else
v7 = v3 | 0x100;
goto LABEL_32;
}
LABEL_9:
*(DWORD*)((char*)tTextBox + 6) = 512;
v2 = tTextBox;
LABEL_18:
v8 = v3 & 0xF;
v9 = dword_1025598[9 * v8];
v10 = v8 + 1;
if (v9 > 0)
{
switch (v10)
{
case 1:
v14 = v9;
v11 = get_rc_string(184, 0);
break;
case 2:
v14 = v9;
v11 = get_rc_string(185, 0);
break;
case 3:
v14 = v9;
v11 = get_rc_string(186, 0);
break;
case 4:
v14 = v9;
v11 = get_rc_string(187, 0);
break;
case 5:
v14 = v9;
v11 = get_rc_string(188, 0);
break;
default:
goto LABEL_33;
}
_sprintf(&Dest, v11, v14);
TTextBox::Display(tTextBox, 256, &Dest, 3.0);
if (v10 == 5)
v7 = 0;
else
v7 = v10 | 0x200;
LABEL_32:
*(DWORD*)((char*)tTextBox + 6) = v7;
return;
}
LABEL_33:
*(DWORD*)((char*)v2 + 6) = 256;
v12 = get_rc_string(172, 0);
TTextBox::Display(tTextBox, 256, v12, 10.0);
return;
}
(**(void(* **)(signed int, DWORD))dword_1023EEC)(20, 0.0);
pb_mode_change(2);
(**(void(* **)(signed int, DWORD))dword_1023A74)(1022, 0.0);
(**(void(* **)(signed int, DWORD))dword_1023A7C)(1022, 0.0);
*(DWORD*)((char*)tTextBox + 6) = 0;
}
// 1023A74: using guessed type int dword_1023A74;
// 1023A7C: using guessed type int dword_1023A7C;
// 1023EEC: using guessed type int dword_1023EEC;
//----- (01011B98) --------------------------------------------------------
void UnselectMissionController(int a1, struct TPinballComponent* a2)
{
*(DWORD*)(dword_1023BBC + 6) = 1;
MissionControl(66, 0);
}
// 1023BBC: using guessed type int dword_1023BBC;
//----- (01011BB5) --------------------------------------------------------
void MissionControl(int a1, struct TPinballComponent* a2)
{
int v2; // ebx
signed int v3; // edi
void(__thiscall * **v4)(DWORD, signed int, DWORD); // ebx
void(__thiscall * **v5)(DWORD, signed int, DWORD); // ebx
char* v6; // eax
char* v7; // eax
int v8; // [esp+30h] [ebp-4h]
if (dword_1023BBC)
{
v2 = *(DWORD*)(dword_1023BBC + 6);
v3 = a1;
v8 = *(DWORD*)(dword_1023BBC + 6);
switch (a1)
{
case 47:
if ((struct TPinballComponent*)dword_1023978 == a2 && v2 > 1)
{
v4 = (void(__thiscall * **)(DWORD, signed int, DWORD))dword_1023A8C;
(**(void(* **)(signed int, DWORD))dword_1023A8C)(34, 0.0);
(**v4)(v4, 20, 0.0);
v5 = (void(__thiscall * **)(DWORD, signed int, DWORD))dword_1023A94;
(**(void(* **)(signed int, DWORD))dword_1023A94)(34, 0.0);
(**v5)(v5, 20, 0.0);
v6 = get_rc_string(109, 0);
TTextBox::Display(tTextBox, (int)v5, v6, 4.0);
*(DWORD*)(dword_1023BBC + 6) = 1;
MissionControl(66, 0);
v2 = v8;
}
break;
case 60:
if ((struct TPinballComponent*)dword_1023978 == a2 && v2)
{
if ((**(int(* **)(signed int, DWORD))dword_1023978)(37, 0.0) == 1)
{
v7 = get_rc_string(116, 0);
TTextBox::Display(tTextBox, v2, v7, 4.0);
}
break;
}
if (tTextBox == a2)
goto LABEL_14;
break;
case 1009:
LABEL_14:
v3 = 67;
break;
}
switch (v2)
{
case 0:
WaitingDeploymentController(v2, v3, a2);
break;
case 1:
SelectMissionController(v3, a2);
break;
case 2:
PracticeMissionController(v2, v3, a2);
break;
case 3:
LaunchTrainingController(v2, v3, a2);
break;
case 4:
ReentryTrainingController(v2, v3, a2);
break;
case 5:
ScienceMissionController(v2, v3, a2);
break;
case 6:
StrayCometController(v2, v3, a2);
break;
case 7:
BlackHoleThreatController(v2, v3, a2);
break;
case 8:
SpaceRadiationController(v2, v3, a2);
break;
case 9:
BugHuntController(v2, v3, a2);
break;
case 10:
AlienMenaceController(v2, v3, a2);
break;
case 11:
RescueMissionController(v2, v3, a2);
break;
case 12:
SatelliteController(v2, v3, a2);
break;
case 13:
ReconnaissanceController(v2, v3, a2);
break;
case 14:
DoomsdayMachineController(v2, v3, a2);
break;
case 15:
CosmicPlagueController(v2, v3, a2);
break;
case 16:
SecretMissionYellowController(v2, v3, a2);
break;
case 17:
TimeWarpController(v2, v3, a2);
break;
case 18:
MaelstromController(v2, v3, a2);
break;
case 20:
AlienMenacePartTwoController(v2, v3, a2);
break;
case 21:
CosmicPlaguePartTwoController(v2, v3, a2);
break;
case 22:
SecretMissionRedController(v2, v3, a2);
break;
case 23:
SecretMissionGreenController(v2, v3, a2);
break;
case 24:
TimeWarpPartTwoController(v2, v3, a2);
break;
case 25:
MaelstromPartTwoController(v2, v3, a2);
break;
case 26:
MaelstromPartThreeController(v2, v3, a2);
break;
case 27:
MaelstromPartFourController(v2, v3, a2);
break;
case 28:
MaelstromPartFiveController(v2, v3, a2);
break;
case 29:
MaelstromPartSixController(v2, v3, a2);
break;
case 30:
MaelstromPartSevenController(v2, v3, a2);
break;
case 31:
MaelstromPartEightController(v2, v3, a2);
break;
case 32:
GameoverController(v3, a2);
break;
default:
UnselectMissionController(v3, a2);
break;
}
}
}
// 1023978: using guessed type int dword_1023978;
// 1023A8C: using guessed type int dword_1023A8C;
// 1023A94: using guessed type int dword_1023A94;
// 1023BBC: using guessed type int dword_1023BBC;