From bdf2d930fdd3c0353735aadfed9ec32e72232606 Mon Sep 17 00:00:00 2001 From: oz Date: Thu, 21 Jan 2021 17:58:05 +0300 Subject: [PATCH] control v3. --- Doc/FuncStats.xlsx | Bin 39060 -> 39173 bytes SpaceCadetPinball/TLightGroup.cpp | 2 +- SpaceCadetPinball/control.cpp | 1109 ++++++++++++++++++++++++++++- SpaceCadetPinball/control.h | 1 + 4 files changed, 1110 insertions(+), 2 deletions(-) diff --git a/Doc/FuncStats.xlsx b/Doc/FuncStats.xlsx index 9367a2fcbd4c6cda7e22f8dfc2209d75fc39e14e..ad00dcb1d45db1ec682541f5913da2dfadad94b6 100644 GIT binary patch delta 29129 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%0D|G$muqt5C}kGvFaIp}?Xd_7*tW_qtdwv! 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 MKC@m5j>LWPe-Omf!vFvP delta 29011 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 vXriH@kbrM~|Lch@>Bl diff --git a/SpaceCadetPinball/TLightGroup.cpp b/SpaceCadetPinball/TLightGroup.cpp index bc7eef5..fecc74c 100644 --- a/SpaceCadetPinball/TLightGroup.cpp +++ b/SpaceCadetPinball/TLightGroup.cpp @@ -320,7 +320,7 @@ int TLightGroup::Message(int code, float value) for (auto i = countSub1; i >= 0; i--) { if (static_cast(List->Get(i))->BmpIndex1) - ++countSub1; + ++bmp1Count; } return bmp1Count; } diff --git a/SpaceCadetPinball/control.cpp b/SpaceCadetPinball/control.cpp index a18572e..9f7b395 100644 --- a/SpaceCadetPinball/control.cpp +++ b/SpaceCadetPinball/control.cpp @@ -825,6 +825,11 @@ void control::table_set_flag_lights() static_cast(control_info_text_box_tag.Component)->Display(pinball::get_rc_string(51, 0), 2.0); } +void control::table_set_multiball() +{ + static_cast(control_info_text_box_tag.Component)->Display(pinball::get_rc_string(16, 0), 2.0); +} + int control::cheat_bump_rank() { return 0; @@ -937,6 +942,10 @@ void control::FlipperRebounderControl2(int code, TPinballComponent* caller) void control::RebounderControl(int code, TPinballComponent* caller) { + if (code == 63) + { + TableG->AddScore(caller->get_scoring(0)); + } } void control::BumperControl(int code, TPinballComponent* caller) @@ -949,6 +958,8 @@ void control::BumperControl(int code, TPinballComponent* caller) void control::LeftKickerControl(int code, TPinballComponent* caller) { + if (code == 60) + control_gate1_tag.Component->Message(54, 0.0); } void control::RightKickerControl(int code, TPinballComponent* caller) @@ -957,6 +968,16 @@ void control::RightKickerControl(int code, TPinballComponent* caller) void control::LeftKickerGateControl(int code, TPinballComponent* caller) { + if (code == 53) + { + control_lite30_tag.Component->Message(15, 5.0); + control_lite196_tag.Component->Message(7, 5.0); + } + else if (code == 54) + { + control_lite30_tag.Component->Message(20, 0.0); + control_lite196_tag.Component->Message(20, 0.0); + } } void control::RightKickerGateControl(int code, TPinballComponent* caller) @@ -1026,10 +1047,51 @@ void control::DrainBallBlockerControl(int code, TPinballComponent* caller) void control::LaunchRampControl(int code, TPinballComponent* caller) { + TPinballComponent* sound; + char Buffer[64]; + + if (code == 63) + { + int someFlag = 0; + if (light_on(&control_lite54_tag)) + { + someFlag = 1; + int addedScore = SpecialAddScore(TableG->ScoreSpecial1); + sprintf_s(Buffer, static_cast(pinball::get_rc_string(10, 0)), addedScore); + static_cast(control_info_text_box_tag.Component)->Display(Buffer, 2.0); + } + if (light_on(&control_lite55_tag)) + someFlag |= 2u; + if (light_on(&control_lite56_tag)) + someFlag |= 4u; + if (someFlag) + { + if (someFlag == 1) + { + sound = control_soundwave21_tag.Component; + } + else if (someFlag <= 1 || someFlag > 3) + { + sound = control_soundwave24_tag.Component; + } + else + { + sound = control_soundwave23_tag.Component; + } + } + else + { + TableG->AddScore(caller->get_scoring(0)); + sound = control_soundwave30_tag.Component; + } + static_cast(sound)->Play(); + } } void control::LaunchRampHoleControl(int code, TPinballComponent* caller) { + if (code == 58) + control_lite54_tag.Component->Message(7, 5.0); } void control::SpaceWarpRolloverControl(int code, TPinballComponent* caller) @@ -1038,6 +1100,53 @@ void control::SpaceWarpRolloverControl(int code, TPinballComponent* caller) void control::ReentryLanesRolloverControl(int code, TPinballComponent* caller) { + if (code == 63) + { + if (!light_on(&control_lite56_tag) && control_l_trek_lights_tag.Component->Message(39, 0.0)) + { + control_l_trek_lights_tag.Component->Message(34, 0.0); + control_l_trek_lights_tag.Component->Message(20, 0.0); + control_r_trek_lights_tag.Component->Message(34, 0.0); + control_r_trek_lights_tag.Component->Message(20, 0.0); + } + + TLight* light; + if (control_roll3_tag.Component == caller) + { + light = static_cast(control_lite8_tag.Component); + } + else + { + light = static_cast(control_lite9_tag.Component); + if (control_roll2_tag.Component != caller) + light = static_cast(control_lite10_tag.Component); + } + if (!light->FlasherActive) + { + if (light->BmpIndex1) + { + light->Message(20, 0.0); + } + else + { + light->Message(19, 0.0); + int activeCount = control_bmpr_inc_lights_tag.Component->Message(37, 0.0); + if (activeCount == control_bmpr_inc_lights_tag.Component->Message(38, 0.0)) + { + control_bmpr_inc_lights_tag.Component->Message(7, 5.0); + control_bmpr_inc_lights_tag.Component->Message(0, 0.0); + if (static_cast(control_bump1_tag.Component)->BmpIndex < 3) + { + control_attack_bump_tag.Component->Message(12, 0.0); + static_cast(control_info_text_box_tag.Component)->Display( + pinball::get_rc_string(5, 0), 2.0); + } + control_attack_bump_tag.Component->Message(48, 60.0); + } + } + } + TableG->AddScore(caller->get_scoring(0)); + } } void control::BumperGroupControl(int code, TPinballComponent* caller) @@ -1054,10 +1163,77 @@ void control::BumperGroupControl(int code, TPinballComponent* caller) void control::LaunchLanesRolloverControl(int code, TPinballComponent* caller) { + TLight* light; + + if (code == 63) + { + if (control_roll112_tag.Component == caller) + { + light = static_cast(control_lite171_tag.Component); + } + else + { + light = static_cast(control_lite170_tag.Component); + if (control_roll111_tag.Component != caller) + light = static_cast(control_lite169_tag.Component); + } + if (!light->FlasherActive) + { + if (light->BmpIndex1) + { + light->Message(20, 0.0); + } + else + { + light->Message(19, 0.0); + int msg1 = control_ramp_bmpr_inc_lights_tag.Component->Message(37, 0.0); + if (msg1 == control_ramp_bmpr_inc_lights_tag.Component->Message(38, 0.0)) + { + control_ramp_bmpr_inc_lights_tag.Component->Message(7, 5.0); + control_ramp_bmpr_inc_lights_tag.Component->Message(0, 0.0); + if (static_cast(control_bump5_tag.Component)->BmpIndex < 3) + { + control_launch_bump_tag.Component->Message(12, 0.0); + static_cast(control_info_text_box_tag.Component)->Display( + pinball::get_rc_string(6, 0), 2.0); + } + control_launch_bump_tag.Component->Message(48, 60.0); + } + } + } + TableG->AddScore(caller->get_scoring(0)); + } } void control::OutLaneRolloverControl(int code, TPinballComponent* caller) { + if (code == 63) + { + if (light_on(&control_lite17_tag) || light_on(&control_lite18_tag)) + { + table_add_extra_ball(2.0); + control_lite17_tag.Component->Message(20, 0.0); + control_lite18_tag.Component->Message(20, 0.0); + } + else + { + static_cast(control_soundwave26_tag.Component)->Play(); + } + if (control_roll4_tag.Component == caller) + { + if (light_on(&control_lite30_tag)) + { + control_lite30_tag.Component->Message(4, 0.0); + control_lite196_tag.Component->Message(4, 0.0); + } + } + else if (light_on(&control_lite29_tag)) + { + control_lite29_tag.Component->Message(4, 0.0); + control_lite195_tag.Component->Message(4, 0.0); + } + TableG->AddScore(caller->get_scoring(0)); + } } void control::ExtraBallLightControl(int code, TPinballComponent* caller) @@ -1211,6 +1387,22 @@ void control::FuelRollover6Control(int code, TPinballComponent* caller) void control::HyperspaceLightGroupControl(int code, TPinballComponent* caller) { + switch (code) + { + case 0: + caller->Message(0, 0.0); + break; + case 41: + caller->Message(41, 2.0); + caller->Message(43, 60.0); + break; + case 61: + caller->Message(33, 0.0); + if (caller->Message(37, 0.0)) + caller->Message(43, 60.0); + break; + default: break; + } } void control::WormHoleControl(int code, TPinballComponent* caller) @@ -1219,6 +1411,11 @@ void control::WormHoleControl(int code, TPinballComponent* caller) void control::LeftFlipperControl(int code, TPinballComponent* caller) { + if (code == 1) + { + control_bmpr_inc_lights_tag.Component->Message(24, 0.0); + control_ramp_bmpr_inc_lights_tag.Component->Message(24, 0.0); + } } void control::RightFlipperControl(int code, TPinballComponent* caller) @@ -1227,6 +1424,8 @@ void control::RightFlipperControl(int code, TPinballComponent* caller) void control::JackpotLightControl(int code, TPinballComponent* caller) { + if (code == 60) + TableG->ScoreSpecial3Flag = 0; } void control::BonusLightControl(int code, TPinballComponent* caller) @@ -1301,10 +1500,56 @@ void control::BoosterTargetControl(int code, TPinballComponent* caller) void control::MedalLightGroupControl(int code, TPinballComponent* caller) { + switch (code) + { + case 0: + caller->Message(0, 0.0); + break; + case 41: + caller->Message(41, 2.0); + caller->Message(43, 30.0); + break; + case 61: + caller->Message(33, 0.0); + if (caller->Message(37, 0.0)) + caller->Message(43, 30.0); + break; + default: break; + } } void control::MultiplierLightGroupControl(int code, TPinballComponent* caller) { + switch (code) + { + case 0: + caller->Message(0, 0.0); + break; + case 41: + caller->Message(41, 2.0); + caller->Message(43, 30.0); + break; + case 61: + if (TableG->ScoreMultiplier) + TableG->ScoreMultiplier = TableG->ScoreMultiplier - 1; + caller->Message(33, 0.0); + if (caller->Message(37, 0.0)) + caller->Message(43, 30.0); + break; + case 64: + TableG->ScoreMultiplier = 4; + caller->Message(19, 0.0); + caller->Message(43, 30.0); + static_cast(control_info_text_box_tag.Component)->Display(pinball::get_rc_string(59, 0), 2.0); + break; + case 65: + TableG->ScoreMultiplier = 0; + caller->Message(20, 0.0); + caller->Message(43, -1.0); + break; + default: + break; + } } void control::FuelSpotTargetControl(int code, TPinballComponent* caller) @@ -1341,10 +1586,74 @@ void control::FuelSpotTargetControl(int code, TPinballComponent* caller) void control::MissionSpotTargetControl(int code, TPinballComponent* caller) { + if (code == 63) + { + TPinballComponent* lite; + if (control_target13_tag.Component == caller) + { + control_lite101_tag.Component->MessageField |= 1u; + lite = control_lite101_tag.Component; + } + else if (control_target14_tag.Component == caller) + { + control_lite101_tag.Component->MessageField |= 2u; + lite = control_lite102_tag.Component; + } + else + { + control_lite101_tag.Component->MessageField |= 4u; + lite = control_lite103_tag.Component; + } + lite->Message(15, 2.0); + + TPinballComponent* sound; + if (!light_on(&control_lite198_tag) || static_cast(control_lite198_tag.Component)->FlasherActive) + { + sound = control_soundwave52_tag.Component; + } + else + sound = control_soundwave49D_tag.Component; + static_cast(sound)->Play(); + TableG->AddScore(caller->get_scoring(0)); + if (control_ramp_tgt_lights_tag.Component->Message(37, 0.0) == 3) + control_ramp_tgt_lights_tag.Component->Message(16, 2.0); + } } void control::LeftHazardSpotTargetControl(int code, TPinballComponent* caller) { + TPinballComponent* lite; + + if (code == 63) + { + if (control_target16_tag.Component == caller) + { + control_lite104_tag.Component->MessageField |= 1u; + lite = control_lite104_tag.Component; + } + else if (control_target17_tag.Component == caller) + { + control_lite104_tag.Component->MessageField |= 2u; + lite = control_lite105_tag.Component; + } + else + { + control_lite104_tag.Component->MessageField |= 4u; + lite = control_lite106_tag.Component; + } + lite->Message(15, 2.0); + TableG->AddScore(caller->get_scoring(0)); + if (control_lchute_tgt_lights_tag.Component->Message(37, 0.0) == 3) + { + static_cast(control_soundwave14_1_tag.Component)->Play(); + control_gate1_tag.Component->Message(53, 0.0); + control_lchute_tgt_lights_tag.Component->Message(16, 2.0); + } + else + { + static_cast(control_soundwave49D_tag.Component)->Play(); + } + } } void control::RightHazardSpotTargetControl(int code, TPinballComponent* caller) @@ -1383,6 +1692,41 @@ void control::FlagControl(int code, TPinballComponent* caller) void control::GravityWellKickoutControl(int code, TPinballComponent* caller) { + char Buffer[64]; + + switch (code) + { + case 63: + { + auto addedScore = TableG->AddScore(caller->get_scoring(0)); + sprintf_s(Buffer, pinball::get_rc_string(81, 0), addedScore); + static_cast(control_info_text_box_tag.Component)->Display(Buffer, 2.0); + control_lite62_tag.Component->Message(20, 0.0); + caller->UnknownBaseFlag2 = 0; + auto duration = static_cast(control_soundwave7_tag.Component)->Play(); + caller->Message(55, duration); + break; + } + case 64: + { + auto score = reinterpret_cast(caller); + if (score) + { + sprintf_s(Buffer, pinball::get_rc_string(82, 0), score); + } + else + { + sprintf_s(Buffer, static_cast(pinball::get_rc_string(45, 0))); + } + static_cast(control_info_text_box_tag.Component)->Display(Buffer, 2.0); + control_lite62_tag.Component->Message(4, 0.0); + control_kickout1_tag.Component->UnknownBaseFlag2 = 1; + break; + } + case 1024: + control_kickout1_tag.Component->UnknownBaseFlag2 = 0; + break; + } } void control::SkillShotGate1Control(int code, TPinballComponent* caller) @@ -1421,10 +1765,284 @@ void control::EscapeChuteSinkControl(int code, TPinballComponent* caller) void control::MissionControl(int code, TPinballComponent* caller) { + if (!control_lite198_tag.Component) + return; + + int lite198Msg = control_lite198_tag.Component->MessageField; + switch (code) + { + case 47: + if (control_fuel_bargraph_tag.Component == caller && lite198Msg > 1) + { + control_l_trek_lights_tag.Component->Message(34, 0.0); + control_l_trek_lights_tag.Component->Message(20, 0.0); + control_r_trek_lights_tag.Component->Message(34, 0.0); + control_r_trek_lights_tag.Component->Message(20, 0.0); + static_cast(control_mission_text_box_tag.Component)->Display( + pinball::get_rc_string(109, 0), 4.0); + control_lite198_tag.Component->MessageField = 1; + MissionControl(66, nullptr); + } + break; + case 60: + if (control_fuel_bargraph_tag.Component == caller && lite198Msg) + { + if (control_fuel_bargraph_tag.Component->Message(37, 0.0) == 1) + { + static_cast(control_mission_text_box_tag.Component)->Display( + pinball::get_rc_string(116, 0), 4.0); + } + break; + } + if (control_mission_text_box_tag.Component == caller) + code = 67; + break; + case 1009: + code = 67; + break; + default: + break; + } + + switch (lite198Msg) + { + case 0: + WaitingDeploymentController(code, caller); + break; + case 1: + SelectMissionController(code, caller); + break; + case 2: + PracticeMissionController(code, caller); + break; + case 3: + LaunchTrainingController(code, caller); + break; + case 4: + ReentryTrainingController(code, caller); + break; + case 5: + ScienceMissionController(code, caller); + break; + case 6: + StrayCometController(code, caller); + break; + case 7: + BlackHoleThreatController(code, caller); + break; + case 8: + SpaceRadiationController(code, caller); + break; + case 9: + BugHuntController(code, caller); + break; + case 10: + AlienMenaceController(code, caller); + break; + case 11: + RescueMissionController(code, caller); + break; + case 12: + SatelliteController(code, caller); + break; + case 13: + ReconnaissanceController(code, caller); + break; + case 14: + DoomsdayMachineController(code, caller); + break; + case 15: + CosmicPlagueController(code, caller); + break; + case 16: + SecretMissionYellowController(code, caller); + break; + case 17: + TimeWarpController(code, caller); + break; + case 18: + MaelstromController(code, caller); + break; + case 20: + AlienMenacePartTwoController(code, caller); + break; + case 21: + CosmicPlaguePartTwoController(code, caller); + break; + case 22: + SecretMissionRedController(code, caller); + break; + case 23: + SecretMissionGreenController(code, caller); + break; + case 24: + TimeWarpPartTwoController(code, caller); + break; + case 25: + MaelstromPartTwoController(code, caller); + break; + case 26: + MaelstromPartThreeController(code, caller); + break; + case 27: + MaelstromPartFourController(code, caller); + break; + case 28: + MaelstromPartFiveController(code, caller); + break; + case 29: + MaelstromPartSixController(code, caller); + break; + case 30: + MaelstromPartSevenController(code, caller); + break; + case 31: + MaelstromPartEightController(code, caller); + break; + case 32: + GameoverController(code, caller); + break; + default: + UnselectMissionController(code, caller); + break; + } } void control::HyperspaceKickOutControl(int code, TPinballComponent* caller) { + char Buffer[64]; + + if (code != 63) + return; + + auto activeCount = control_hyper_lights_tag.Component->Message(37, 0.0); + HyperspaceLightGroupControl(41, control_hyper_lights_tag.Component); + switch (activeCount) + { + case 0: + { + auto addedScore = TableG->AddScore(caller->get_scoring(0)); + sprintf_s(Buffer, pinball::get_rc_string(12, 0), addedScore); + static_cast(control_info_text_box_tag.Component)->Display(Buffer, 2.0); + break; + } + case 1: + { + auto addedScore = SpecialAddScore(TableG->ScoreSpecial3); + sprintf_s(Buffer, pinball::get_rc_string(14, 0), addedScore); + static_cast(control_info_text_box_tag.Component)->Display(Buffer, 2.0); + TableG->ScoreSpecial3 = 20000; + break; + } + case 2: + { + DrainBallBlockerControl(52, static_cast(control_block1_tag.Component)); + auto addedScore = TableG->AddScore(caller->get_scoring(2)); + sprintf_s(Buffer, pinball::get_rc_string(2, 0), addedScore); + static_cast(control_info_text_box_tag.Component)->Display(Buffer, 2.0); + break; + } + case 3: + { + ExtraBallLightControl(19, nullptr); + auto addedScore = TableG->AddScore(caller->get_scoring(3)); + sprintf_s(Buffer, pinball::get_rc_string(8, 0), addedScore); + static_cast(control_info_text_box_tag.Component)->Display(Buffer, 2.0); + break; + } + case 4: + { + control_hyper_lights_tag.Component->Message(0, 0.0); + auto addedScore = TableG->AddScore(caller->get_scoring(4)); + GravityWellKickoutControl(64, reinterpret_cast(addedScore)); + break; + } + default: + break; + } + + int someFlag = 0; + if (light_on(&control_lite25_tag)) + { + someFlag = 1; + auto addedScore = SpecialAddScore(TableG->ScoreSpecial1); + sprintf_s(Buffer, pinball::get_rc_string(10, 0), addedScore); + static_cast(control_info_text_box_tag.Component)->Display(Buffer, 2.0); + } + if (light_on(&control_lite26_tag)) + someFlag |= 2u; + if (light_on(&control_lite130_tag)) + { + someFlag |= 4u; + control_lite130_tag.Component->Message(20, 0.0); + MultiplierLightGroupControl(64, control_top_target_lights_tag.Component); + control_bumber_target_lights_tag.Component->Message(19, 0.0); + table_set_jackpot(); + table_set_bonus(); + table_set_flag_lights(); + table_set_bonus_hold(); + control_lite27_tag.Component->Message(19, 0.0); + control_lite28_tag.Component->Message(19, 0.0); + ExtraBallLightControl(19, nullptr); + DrainBallBlockerControl(52, control_block1_tag.Component); + + if (TableG->MultiballFlag) + { + table_set_multiball(); + } + if (TableG->ScoreSpecial3 < 100000) + TableG->ScoreSpecial3 = 100000; + if (TableG->ScoreSpecial2 < 100000) + TableG->ScoreSpecial2 = 100000; + GravityWellKickoutControl(64, nullptr); + } + + TPinballComponent* sound; + + if (someFlag) + { + if (someFlag == 1) + { + sound = control_soundwave21_tag.Component; + } + else + { + if (someFlag <= 1 || someFlag > 3) + { + auto duration = static_cast(control_soundwave41_tag.Component)->Play(); + static_cast(control_soundwave36_1_tag.Component)->Play(); + static_cast(control_soundwave50_2_tag.Component)->Play(); + control_lite25_tag.Component->Message(7, 5.0); + caller->Message(55, duration); + return; + } + sound = control_soundwave40_tag.Component; + } + } + else + { + switch (activeCount) + { + case 1: + sound = control_soundwave36_2_tag.Component; + break; + case 2: + sound = control_soundwave35_2_tag.Component; + break; + case 3: + sound = control_soundwave38_tag.Component; + break; + case 4: + sound = control_soundwave39_tag.Component; + break; + default: + sound = control_soundwave35_1_tag.Component; + break; + } + } + auto duration = static_cast(sound)->Play(); + control_lite25_tag.Component->Message(7, 5.0); + caller->Message(55, duration); } void control::PlungerControl(int code, TPinballComponent* caller) @@ -1462,10 +2080,90 @@ void control::PlungerControl(int code, TPinballComponent* caller) void control::MedalTargetControl(int code, TPinballComponent* caller) { + if (code == 63 && !caller->MessageField) + { + caller->MessageField = 1; + if (control_target6_tag.Component->MessageField + + control_target5_tag.Component->MessageField + + control_target4_tag.Component->MessageField == 3) + { + MedalLightGroupControl(41, control_bumber_target_lights_tag.Component); + int activeCount = control_bumber_target_lights_tag.Component->Message(37, 0.0) - 1; + char* text; + switch (activeCount) + { + case 0: + TableG->AddScore(caller->get_scoring(1)); + text = pinball::get_rc_string(53, 0); + break; + case 1: + TableG->AddScore(caller->get_scoring(2)); + text = pinball::get_rc_string(54, 0); + break; + default: + table_add_extra_ball(4.0); + text = pinball::get_rc_string(55, 0); + break; + } + static_cast(control_info_text_box_tag.Component)->Display(text, 2.0); + control_target6_tag.Component->MessageField = 0; + control_target6_tag.Component->Message(50, 0.0); + control_target5_tag.Component->MessageField = 0; + control_target5_tag.Component->Message(50, 0.0); + control_target4_tag.Component->MessageField = 0; + control_target4_tag.Component->Message(50, 0.0); + return; + } + TableG->AddScore(caller->get_scoring(0)); + } } void control::MultiplierTargetControl(int code, TPinballComponent* caller) { + if (code == 63 && !caller->MessageField) + { + caller->MessageField = 1; + if (control_target9_tag.Component->MessageField + + control_target8_tag.Component->MessageField + + control_target7_tag.Component->MessageField == 3) + { + TableG->AddScore(caller->get_scoring(1)); + MultiplierLightGroupControl(41, control_top_target_lights_tag.Component); + int activeCount = control_top_target_lights_tag.Component->Message(37, 0.0); + char* text; + switch (activeCount) + { + case 1: + TableG->ScoreMultiplier = 1; + text = pinball::get_rc_string(56, 0); + break; + case 2: + TableG->ScoreMultiplier = 2; + text = pinball::get_rc_string(57, 0); + break; + case 3: + TableG->ScoreMultiplier = 3; + text = pinball::get_rc_string(58, 0); + break; + default: + TableG->ScoreMultiplier = 4; + text = pinball::get_rc_string(59, 0); + break; + } + + static_cast(control_info_text_box_tag.Component)->Display(text, 2.0); + control_target9_tag.Component->MessageField = 0; + control_target9_tag.Component->Message(50, 0.0); + control_target8_tag.Component->MessageField = 0; + control_target8_tag.Component->Message(50, 0.0); + control_target7_tag.Component->MessageField = 0; + control_target7_tag.Component->Message(50, 0.0); + } + else + { + TableG->AddScore(caller->get_scoring(0)); + } + } } void control::BallDrainControl(int code, TPinballComponent* caller) @@ -2124,53 +2822,462 @@ void control::GameoverController(int code, TPinballComponent* caller) } } } - + control_mission_text_box_tag.Component->MessageField = 0x100; static_cast(control_mission_text_box_tag.Component)->Display(pinball::get_rc_string(172, 0), 10.0); } void control::LaunchTrainingController(int code, TPinballComponent* caller) { + char Buffer[64]; + + if (code != 63) + { + if (code == 66) + { + control_lite317_tag.Component->Message(7, 0.0); + control_lite56_tag.Component->MessageField = 3; + } + else if (code != 67) + { + return; + } + sprintf_s(Buffer, pinball::get_rc_string(110, 0), control_lite56_tag.Component->MessageField); + static_cast(control_mission_text_box_tag.Component)->Display(Buffer, -1.0); + return; + } + if (control_ramp_tag.Component == caller) + { + control_lite56_tag.Component->MessageField = control_lite56_tag.Component->MessageField - 1; + if (control_lite56_tag.Component->MessageField) + { + MissionControl(67, caller); + } + else + { + control_lite317_tag.Component->Message(20, 0.0); + control_lite198_tag.Component->MessageField = 1; + MissionControl(66, nullptr); + static_cast(control_mission_text_box_tag.Component)-> + Display(pinball::get_rc_string(111, 0), 4.0); + int addedScore = SpecialAddScore(500000); + sprintf_s(Buffer, static_cast(pinball::get_rc_string(78, 0)), addedScore); + if (!AddRankProgress(6)) + { + static_cast(control_mission_text_box_tag.Component)->Display(Buffer, 8.0); + static_cast(control_soundwave9_tag.Component)->Play(); + } + } + } } void control::MaelstromController(int code, TPinballComponent* caller) { + char Buffer[64]; + + if (code != 63) + { + if (code == 66) + { + control_lite56_tag.Component->MessageField = 3; + control_lite303_tag.Component->Message(7, 0.0); + control_lite309_tag.Component->Message(7, 0.0); + control_lite315_tag.Component->Message(7, 0.0); + } + else if (code != 67) + { + return; + } + sprintf_s(Buffer, pinball::get_rc_string(148, 0), control_lite56_tag.Component->MessageField); + static_cast(control_mission_text_box_tag.Component)->Display(Buffer, -1.0); + return; + } + if (control_target1_tag.Component == caller + || control_target2_tag.Component == caller + || control_target3_tag.Component == caller + || control_target6_tag.Component == caller + || control_target5_tag.Component == caller + || control_target4_tag.Component == caller + || control_target9_tag.Component == caller + || control_target8_tag.Component == caller + || control_target7_tag.Component == caller) + { + control_lite56_tag.Component->MessageField = control_lite56_tag.Component->MessageField - 1; + if (control_lite56_tag.Component->MessageField) + { + MissionControl(67, caller); + } + else + { + control_lite303_tag.Component->Message(20, 0.0); + control_lite309_tag.Component->Message(20, 0.0); + control_lite315_tag.Component->Message(20, 0.0); + control_lite198_tag.Component->MessageField = 25; + MissionControl(66, nullptr); + } + } } void control::MaelstromPartEightController(int code, TPinballComponent* caller) { + char Buffer[64]; + + if (code != 63) + { + if (code == 66) + { + control_lite130_tag.Component->Message(19, 0.0); + control_lite304_tag.Component->Message(7, 0.0); + } + else if (code != 67) + { + return; + } + static_cast(control_mission_text_box_tag.Component)->Display(pinball::get_rc_string(155, 0), -1.0); + return; + } + if (control_kickout2_tag.Component == caller) + { + control_lite304_tag.Component->Message(20, 0.0); + control_lite130_tag.Component->Message(20, 0.0); + control_lite198_tag.Component->MessageField = 1; + MissionControl(66, nullptr); + int addedScore = SpecialAddScore(5000000); + sprintf_s(Buffer, pinball::get_rc_string(78, 0), addedScore); + static_cast(control_info_text_box_tag.Component)->Display(pinball::get_rc_string(48, 0), 4.0); + if (!AddRankProgress(18)) + { + static_cast(control_mission_text_box_tag.Component)->Display(Buffer, 8.0); + static_cast(control_soundwave9_tag.Component)->Play(); + } + } } void control::MaelstromPartFiveController(int code, TPinballComponent* caller) { + if (code != 63) + { + if (code == 66) + { + control_lite317_tag.Component->Message(7, 0.0); + } + else if (code != 67) + { + return; + } + static_cast(control_mission_text_box_tag.Component)->Display(pinball::get_rc_string(152, 0), -1.0); + return; + } + if (control_ramp_tag.Component == caller) + { + control_lite317_tag.Component->Message(20, 0.0); + control_lite198_tag.Component->MessageField = 29; + MissionControl(66, nullptr); + } } void control::MaelstromPartFourController(int code, TPinballComponent* caller) { + if (code != 63) + { + if (code == 66) + { + control_lite56_tag.Component->MessageField = 0; + control_lite318_tag.Component->Message(7, 0.0); + } + else if (code != 67) + { + return; + } + static_cast(control_mission_text_box_tag.Component)->Display(pinball::get_rc_string(151, 0), -1.0); + return; + } + if (control_roll184_tag.Component == caller) + { + control_lite318_tag.Component->Message(20, 0.0); + control_lite198_tag.Component->MessageField = 28; + MissionControl(66, nullptr); + } } void control::MaelstromPartSevenController(int code, TPinballComponent* caller) { + if (code != 63) + { + if (code == 66) + { + AdvanceWormHoleDestination(1); + control_sink1_tag.Component->Message(7, 0.0); + control_sink2_tag.Component->Message(7, 0.0); + control_sink3_tag.Component->Message(7, 0.0); + } + else if (code != 67) + { + return; + } + static_cast(control_mission_text_box_tag.Component)->Display(pinball::get_rc_string(154, 0), -1.0); + return; + } + if (control_sink1_tag.Component == caller + || control_sink2_tag.Component == caller + || control_sink3_tag.Component == caller) + { + control_lite198_tag.Component->MessageField = 31; + MissionControl(66, nullptr); + } } void control::MaelstromPartSixController(int code, TPinballComponent* caller) { + if (code != 63) + { + if (code == 66) + { + control_lite20_tag.Component->Message(19, 0.0); + control_lite19_tag.Component->Message(19, 0.0); + control_lite305_tag.Component->Message(7, 0.0); + control_lite312_tag.Component->Message(7, 0.0); + } + else if (code != 67) + { + return; + } + static_cast(control_mission_text_box_tag.Component)->Display(pinball::get_rc_string(153, 0), -1.0); + return; + } + if (control_flag1_tag.Component == caller || control_flag2_tag.Component == caller) + { + control_lite305_tag.Component->Message(20, 0.0); + control_lite312_tag.Component->Message(20, 0.0); + control_lite198_tag.Component->MessageField = 30; + MissionControl(66, nullptr); + control_lite20_tag.Component->Message(20, 0.0); + control_lite19_tag.Component->Message(20, 0.0); + } } void control::MaelstromPartThreeController(int code, TPinballComponent* caller) { + char Buffer[64]; + + if (code != 63) + { + if (code == 66) + { + control_lite56_tag.Component->MessageField = 5; + control_lite301_tag.Component->Message(7, 0.0); + control_lite302_tag.Component->Message(7, 0.0); + control_lite307_tag.Component->Message(7, 0.0); + control_lite316_tag.Component->Message(7, 0.0); + control_lite320_tag.Component->Message(7, 0.0); + control_lite321_tag.Component->Message(7, 0.0); + } + else if (code != 67) + { + return; + } + sprintf_s(Buffer, pinball::get_rc_string(150, 0), control_lite56_tag.Component->MessageField); + static_cast(control_mission_text_box_tag.Component)->Display(Buffer, -1.0); + return; + } + if (control_roll3_tag.Component == caller + || control_roll2_tag.Component == caller + || control_roll1_tag.Component == caller + || control_roll112_tag.Component == caller + || control_roll111_tag.Component == caller + || control_roll110_tag.Component == caller + || control_roll4_tag.Component == caller + || control_roll8_tag.Component == caller + || control_roll6_tag.Component == caller + || control_roll7_tag.Component == caller + || control_roll5_tag.Component == caller) + { + control_lite56_tag.Component->MessageField = control_lite56_tag.Component->MessageField - 1; + if (control_lite56_tag.Component->MessageField) + { + MissionControl(67, caller); + } + else + { + control_lite301_tag.Component->Message(20, 0.0); + control_lite302_tag.Component->Message(20, 0.0); + control_lite307_tag.Component->Message(20, 0.0); + control_lite316_tag.Component->Message(20, 0.0); + control_lite320_tag.Component->Message(20, 0.0); + control_lite321_tag.Component->Message(20, 0.0); + control_lite198_tag.Component->MessageField = 27; + MissionControl(66, nullptr); + } + } } void control::MaelstromPartTwoController(int code, TPinballComponent* caller) { + char Buffer[64]; + + if (code != 63) + { + if (code == 66) + { + control_lite56_tag.Component->MessageField = 3; + control_lite306_tag.Component->Message(7, 0.0); + control_lite308_tag.Component->Message(7, 0.0); + control_lite310_tag.Component->Message(7, 0.0); + control_lite313_tag.Component->Message(7, 0.0); + control_lite319_tag.Component->Message(7, 0.0); + } + else if (code != 67) + { + return; + } + sprintf_s(Buffer, pinball::get_rc_string(149, 0), control_lite56_tag.Component->MessageField); + static_cast(control_mission_text_box_tag.Component)->Display(Buffer, -1.0); + return; + } + if (control_target10_tag.Component == caller + || control_target11_tag.Component == caller + || control_target12_tag.Component == caller + || control_target13_tag.Component == caller + || control_target14_tag.Component == caller + || control_target15_tag.Component == caller + || control_target16_tag.Component == caller + || control_target17_tag.Component == caller + || control_target18_tag.Component == caller + || control_target19_tag.Component == caller + || control_target20_tag.Component == caller + || control_target21_tag.Component == caller + || control_target22_tag.Component == caller) + { + control_lite56_tag.Component->MessageField = control_lite56_tag.Component->MessageField - 1; + if (control_lite56_tag.Component->MessageField) + { + MissionControl(67, caller); + } + else + { + control_lite306_tag.Component->Message(20, 0.0); + control_lite308_tag.Component->Message(20, 0.0); + control_lite310_tag.Component->Message(20, 0.0); + control_lite313_tag.Component->Message(20, 0.0); + control_lite319_tag.Component->Message(20, 0.0); + control_lite198_tag.Component->MessageField = 26; + MissionControl(66, nullptr); + } + } } void control::PracticeMissionController(int code, TPinballComponent* caller) { + char Buffer[64]; + + if (code != 63) + { + if (code == 66) + { + control_lite308_tag.Component->Message(7, 0.0); + control_lite311_tag.Component->Message(7, 0.0); + control_lite56_tag.Component->MessageField = 8; + } + else if (code != 67) + { + return; + } + sprintf_s(Buffer, pinball::get_rc_string(107, 0), control_lite56_tag.Component->MessageField); + static_cast(control_mission_text_box_tag.Component)->Display(Buffer, -1.0); + return; + } + + if (control_bump1_tag.Component == caller + || control_bump2_tag.Component == caller + || control_bump3_tag.Component == caller + || control_bump4_tag.Component == caller) + { + control_lite56_tag.Component->MessageField = control_lite56_tag.Component->MessageField - 1; + if (control_lite56_tag.Component->MessageField) + { + MissionControl(67, caller); + } + else + { + control_lite308_tag.Component->Message(20, 0.0); + control_lite311_tag.Component->Message(20, 0.0); + control_lite198_tag.Component->MessageField = 1; + MissionControl(66, nullptr); + static_cast(control_mission_text_box_tag.Component)-> + Display(pinball::get_rc_string(108, 0), 4.0); + int addedScore = SpecialAddScore(500000); + sprintf_s(Buffer, pinball::get_rc_string(78, 0), addedScore); + if (!AddRankProgress(6)) + { + static_cast(control_mission_text_box_tag.Component)->Display(Buffer, 8.0); + static_cast(control_soundwave9_tag.Component)->Play(); + } + } + } } void control::ReconnaissanceController(int code, TPinballComponent* caller) { + char Buffer[64]; + + if (code != 63) + { + if (code == 66) + { + control_lite56_tag.Component->MessageField = 15; + control_lite301_tag.Component->Message(7, 0.0); + control_lite302_tag.Component->Message(7, 0.0); + control_lite307_tag.Component->Message(7, 0.0); + control_lite316_tag.Component->Message(7, 0.0); + control_lite320_tag.Component->Message(7, 0.0); + control_lite321_tag.Component->Message(7, 0.0); + } + else if (code != 67) + { + return; + } + sprintf_s(Buffer, pinball::get_rc_string(134, 0), control_lite56_tag.Component->MessageField); + static_cast(control_mission_text_box_tag.Component)->Display(Buffer, -1.0); + return; + } + if (control_roll3_tag.Component == caller + || control_roll2_tag.Component == caller + || control_roll1_tag.Component == caller + || control_roll112_tag.Component == caller + || control_roll111_tag.Component == caller + || control_roll110_tag.Component == caller + || control_roll4_tag.Component == caller + || control_roll8_tag.Component == caller + || control_roll6_tag.Component == caller + || control_roll7_tag.Component == caller + || control_roll5_tag.Component == caller) + { + control_lite56_tag.Component->MessageField = control_lite56_tag.Component->MessageField - 1; + if (control_lite56_tag.Component->MessageField) + { + MissionControl(67, nullptr); + } + else + { + control_lite301_tag.Component->Message(20, 0.0); + control_lite302_tag.Component->Message(20, 0.0); + control_lite307_tag.Component->Message(20, 0.0); + control_lite316_tag.Component->Message(20, 0.0); + control_lite320_tag.Component->Message(20, 0.0); + control_lite321_tag.Component->Message(20, 0.0); + control_lite198_tag.Component->MessageField = 1; + MissionControl(66, nullptr); + static_cast(control_mission_text_box_tag.Component)-> + Display(pinball::get_rc_string(136, 0), 4.0); + int addedScore = SpecialAddScore(1250000); + sprintf_s(Buffer, pinball::get_rc_string(78, 0), addedScore); + if (!AddRankProgress(9)) + { + static_cast(control_mission_text_box_tag.Component)->Display(Buffer, 8.0); + static_cast(control_soundwave9_tag.Component)->Play(); + } + } + } } void control::ReentryTrainingController(int code, TPinballComponent* caller) diff --git a/SpaceCadetPinball/control.h b/SpaceCadetPinball/control.h index 2c96c61..45ca79d 100644 --- a/SpaceCadetPinball/control.h +++ b/SpaceCadetPinball/control.h @@ -42,6 +42,7 @@ public: static void table_set_bonus(); static void table_set_jackpot(); static void table_set_flag_lights(); + static void table_set_multiball(); static int cheat_bump_rank(); static bool light_on(struct component_tag* tag); static int SpecialAddScore(int score);