From d4febb4082037816a7349284679fe7076835c03e Mon Sep 17 00:00:00 2001 From: oz Date: Wed, 20 Jan 2021 17:28:48 +0300 Subject: [PATCH] control v2. --- Doc/FuncStats.xlsx | Bin 38856 -> 39060 bytes SpaceCadetPinball/TBlocker.cpp | 4 +- SpaceCadetPinball/TBlocker.h | 4 +- SpaceCadetPinball/TPinballComponent.h | 3 + SpaceCadetPinball/control.cpp | 943 +++++++++++++++++++++++++- SpaceCadetPinball/control.h | 43 +- SpaceCadetPinball/pb.h | 2 +- 7 files changed, 991 insertions(+), 8 deletions(-) diff --git a/Doc/FuncStats.xlsx b/Doc/FuncStats.xlsx index a8fa03979e9099b85e5d0f1f0ac189d59fed61b0..9367a2fcbd4c6cda7e22f8dfc2209d75fc39e14e 100644 GIT binary patch delta 30987 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 diff --git a/SpaceCadetPinball/TBlocker.cpp b/SpaceCadetPinball/TBlocker.cpp index 221b1b7..7039da3 100644 --- a/SpaceCadetPinball/TBlocker.cpp +++ b/SpaceCadetPinball/TBlocker.cpp @@ -15,8 +15,8 @@ TBlocker::TBlocker(TPinballTable* table, int groupIndex) : TCollisionComponent(t loader::query_visual(groupIndex, 0, &visual); SoundIndex4 = visual.SoundIndex4; SoundIndex3 = visual.SoundIndex3; - Unknown0 = 55; - Unknown1 = 5; + TurnOnMsgValue = 55; + TurnOffMsgValue = 5; MaxCollisionSpeed = 1000000000.0f; Timer = 0; MessageField = 0; diff --git a/SpaceCadetPinball/TBlocker.h b/SpaceCadetPinball/TBlocker.h index 1882263..2ff3b3d 100644 --- a/SpaceCadetPinball/TBlocker.h +++ b/SpaceCadetPinball/TBlocker.h @@ -10,8 +10,8 @@ public: static void TimerExpired(int timerId, void* caller); - int Unknown0; - int Unknown1; + int TurnOnMsgValue; + int TurnOffMsgValue; int Timer; int SoundIndex4; int SoundIndex3; diff --git a/SpaceCadetPinball/TPinballComponent.h b/SpaceCadetPinball/TPinballComponent.h index 446526d..2fdde3e 100644 --- a/SpaceCadetPinball/TPinballComponent.h +++ b/SpaceCadetPinball/TPinballComponent.h @@ -8,6 +8,9 @@ class TZmapList; enum class message_code { Reset = 1024, + LightActiveCount = 37, + LightTotalCount = 38, + LightSetMessageField = 23, }; class TPinballComponent diff --git a/SpaceCadetPinball/control.cpp b/SpaceCadetPinball/control.cpp index bd87add..a18572e 100644 --- a/SpaceCadetPinball/control.cpp +++ b/SpaceCadetPinball/control.cpp @@ -3,9 +3,12 @@ #include "objlist_class.h" #include "pb.h" +#include "TBlocker.h" +#include "TBumper.h" #include "TLight.h" #include "TLightGroup.h" #include "TPinballTable.h" +#include "TSink.h" #include "TSound.h" int control::pbctrl_state; @@ -509,7 +512,9 @@ component_tag* control::simple_components[142] }; int control::table_unlimited_balls; - +int control::extraball_light_flag; +int control::RankRcArray[9] = {84, 85, 86, 87, 88, 89, 90, 91, 92}; +int control::MissionRcArray[17] = {60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76}; void control::make_links(TPinballTable* table) { @@ -792,12 +797,40 @@ void control::table_add_extra_ball(float count) static_cast(control_info_text_box_tag.Component)->Display(msg, count); } +void control::table_set_bonus_hold() +{ + control_lite58_tag.Component->Message(19, 0.0); + static_cast(control_info_text_box_tag.Component)->Display(pinball::get_rc_string(52, 0), 2.0); +} + +void control::table_set_bonus() +{ + TableG->ScoreSpecial2Flag = 1; + control_lite59_tag.Component->Message(9, 60.0); + static_cast(control_info_text_box_tag.Component)->Display(pinball::get_rc_string(4, 0), 2.0); +} + +void control::table_set_jackpot() +{ + TableG->ScoreSpecial3Flag = 1; + control_lite60_tag.Component->Message(9, 60.0); + static_cast(control_info_text_box_tag.Component)->Display(pinball::get_rc_string(15, 0), 2.0); +} + +void control::table_set_flag_lights() +{ + control_lite20_tag.Component->Message(9, 60.0); + control_lite19_tag.Component->Message(9, 60.0); + control_lite61_tag.Component->Message(9, 60.0); + static_cast(control_info_text_box_tag.Component)->Display(pinball::get_rc_string(51, 0), 2.0); +} + int control::cheat_bump_rank() { return 0; } -BOOL control::light_on(component_tag* tag) +bool control::light_on(component_tag* tag) { auto light = static_cast(tag->Component); return light->BmpIndex1 || light->FlasherFlag2 || light->FlasherActive; @@ -819,12 +852,87 @@ int control::SpecialAddScore(int score) return addedScore; } +int control::AddRankProgress(int rank) +{ + char Buffer[64]; + int result = 0; + + control_lite16_tag.Component->Message(19, 0.0); + TPinballComponent* outerCircle = control_outer_circle_tag.Component; + for (int index = rank; index; --index) + { + outerCircle->Message(41, 2.0); + } + + int activeCount = outerCircle->Message(37, 0.0); + int totalCount = outerCircle->Message(38, 0.0); + if (activeCount == totalCount) + { + result = 1; + outerCircle->Message(16, 5.0); + TPinballComponent* middleCircle = control_middle_circle_tag.Component; + control_middle_circle_tag.Component->Message(34, 0.0); + int midActiveCount = middleCircle->Message(37, 0.0); + if (midActiveCount < 9) + { + middleCircle->Message(41, 5.0); + auto rankText = pinball::get_rc_string(RankRcArray[midActiveCount], 1); + sprintf_s(Buffer, pinball::get_rc_string(83, 0), rankText); + static_cast(control_mission_text_box_tag.Component)->Display(Buffer, 8.0); + static_cast(control_soundwave10_tag.Component)->Play(); + } + } + else if (activeCount >= 3 * totalCount / 4) + { + control_middle_circle_tag.Component->Message(27, -1.0); + } + return result; +} + +void control::AdvanceWormHoleDestination(int flag) +{ + int lite198Msg = control_lite198_tag.Component->MessageField; + if (lite198Msg != 16 && lite198Msg != 22 && lite198Msg != 23) + { + int lite4Msg = control_lite4_tag.Component->MessageField; + if (flag || lite4Msg) + { + int val1 = lite4Msg + 1; + int val2 = val1; + if (val1 == 4) + { + val1 = 1; + val2 = 1; + } + control_bsink_arrow_lights_tag.Component->Message(23, static_cast(val2)); + control_bsink_arrow_lights_tag.Component->Message(11, static_cast(3 - val1)); + if (!light_on(&control_lite4_tag)) + { + control_worm_hole_lights_tag.Component->Message(19, 0.0); + control_bsink_arrow_lights_tag.Component->Message(19, 0.0); + } + } + } +} + void control::FlipperRebounderControl1(int code, TPinballComponent* caller) { + if (code == 63) + { + control_lite84_tag.Component->Message(9, 0.1f); + auto score = caller->get_scoring(0); + TableG->AddScore(score); + } } void control::FlipperRebounderControl2(int code, TPinballComponent* caller) { + if (code == 63) + { + control_lite85_tag.Component->Message(9, 0.1f); + int score = caller->get_scoring(0); + TableG->AddScore(score); + } } void control::RebounderControl(int code, TPinballComponent* caller) @@ -833,6 +941,10 @@ void control::RebounderControl(int code, TPinballComponent* caller) void control::BumperControl(int code, TPinballComponent* caller) { + if (code == 63) + { + TableG->AddScore(caller->get_scoring(static_cast(caller)->BmpIndex)); + } } void control::LeftKickerControl(int code, TPinballComponent* caller) @@ -883,6 +995,33 @@ void control::DeploymentChuteToTableOneWayControl(int code, TPinballComponent* c void control::DrainBallBlockerControl(int code, TPinballComponent* caller) { + int msgCode; + float msgValue; + + auto block = static_cast(caller); + if (code == 52) + { + block->MessageField = 1; + block->Message(52, static_cast(block->TurnOnMsgValue)); + msgValue = static_cast(block->TurnOnMsgValue); + msgCode = 9; + } + else + { + if (code != 60) + return; + if (block->MessageField != 1) + { + block->MessageField = 0; + block->Message(51, 0.0); + return; + } + block->MessageField = 2; + block->Message(59, static_cast(block->TurnOffMsgValue)); + msgValue = static_cast(block->TurnOffMsgValue); + msgCode = 7; + } + control_lite1_tag.Component->Message(msgCode, msgValue); } void control::LaunchRampControl(int code, TPinballComponent* caller) @@ -903,6 +1042,14 @@ void control::ReentryLanesRolloverControl(int code, TPinballComponent* caller) void control::BumperGroupControl(int code, TPinballComponent* caller) { + if (code == 61) + { + if (static_cast(caller)->BmpIndex) + { + caller->Message(48, 60.0); + caller->Message(13, 0.0); + } + } } void control::LaunchLanesRolloverControl(int code, TPinballComponent* caller) @@ -915,6 +1062,21 @@ void control::OutLaneRolloverControl(int code, TPinballComponent* caller) void control::ExtraBallLightControl(int code, TPinballComponent* caller) { + if (code == 19) + { + control_lite17_tag.Component->Message(9, 55.0); + control_lite18_tag.Component->Message(9, 55.0); + extraball_light_flag = 1; + } + else if (code == 60) + { + if (extraball_light_flag) + { + control_lite17_tag.Component->Message(7, 5.0); + control_lite18_tag.Component->Message(7, 5.0); + extraball_light_flag = 0; + } + } } void control::ReturnLaneRolloverControl(int code, TPinballComponent* caller) @@ -923,30 +1085,128 @@ void control::ReturnLaneRolloverControl(int code, TPinballComponent* caller) void control::BonusLaneRolloverControl(int code, TPinballComponent* caller) { + char Buffer[64]; + + if (code == 63) + { + if (light_on(&control_lite16_tag)) + { + int addedScore = SpecialAddScore(TableG->ScoreSpecial2); + sprintf_s(Buffer, pinball::get_rc_string(3, 0), addedScore); + static_cast(control_info_text_box_tag.Component)->Display(Buffer, 2.0); + control_lite16_tag.Component->Message(20, 0.0); + static_cast(control_soundwave50_1_tag.Component)->Play(); + } + else + { + TableG->AddScore(caller->get_scoring(0)); + static_cast(control_soundwave25_tag.Component)->Play(); + static_cast(control_info_text_box_tag.Component)->Display(pinball::get_rc_string(44, 0), 2.0); + } + control_fuel_bargraph_tag.Component->Message(45, 11.0); + } } void control::FuelRollover1Control(int code, TPinballComponent* caller) { + if (code == 63) + { + if (control_fuel_bargraph_tag.Component->Message(37, 0.0) > 1) + { + control_literoll179_tag.Component->Message(8, 0.05f); + } + else + { + control_fuel_bargraph_tag.Component->Message(45, 1.0); + static_cast(control_info_text_box_tag.Component)->Display(pinball::get_rc_string(44, 0), 2.0); + } + TableG->AddScore(caller->get_scoring(0)); + } } void control::FuelRollover2Control(int code, TPinballComponent* caller) { + if (code == 63) + { + if (control_fuel_bargraph_tag.Component->Message(37, 0.0) > 3) + { + control_literoll180_tag.Component->Message(8, 0.05f); + } + else + { + control_fuel_bargraph_tag.Component->Message(45, 3.0); + static_cast(control_info_text_box_tag.Component)->Display(pinball::get_rc_string(44, 0), 2.0); + } + TableG->AddScore(caller->get_scoring(0)); + } } void control::FuelRollover3Control(int code, TPinballComponent* caller) { + if (code == 63) + { + if (control_fuel_bargraph_tag.Component->Message(37, 0.0) > 5) + { + control_literoll181_tag.Component->Message(8, 0.05f); + } + else + { + control_fuel_bargraph_tag.Component->Message(45, 5.0); + static_cast(control_info_text_box_tag.Component)->Display(pinball::get_rc_string(44, 0), 2.0); + } + TableG->AddScore(caller->get_scoring(0)); + } } void control::FuelRollover4Control(int code, TPinballComponent* caller) { + if (code == 63) + { + if (control_fuel_bargraph_tag.Component->Message(37, 0.0) > 7) + { + control_literoll182_tag.Component->Message(8, 0.05f); + } + else + { + control_fuel_bargraph_tag.Component->Message(45, 7.0); + static_cast(control_info_text_box_tag.Component)->Display(pinball::get_rc_string(44, 0), 2.0); + } + TableG->AddScore(caller->get_scoring(0)); + } } void control::FuelRollover5Control(int code, TPinballComponent* caller) { + if (code == 63) + { + if (control_fuel_bargraph_tag.Component->Message(37, 0.0) > 9) + { + control_literoll183_tag.Component->Message(8, 0.05f); + } + else + { + control_fuel_bargraph_tag.Component->Message(45, 9.0); + static_cast(control_info_text_box_tag.Component)->Display(pinball::get_rc_string(44, 0), 2.0); + } + TableG->AddScore(caller->get_scoring(0)); + } } void control::FuelRollover6Control(int code, TPinballComponent* caller) { + if (code == 63) + { + if (control_fuel_bargraph_tag.Component->Message(37, 0.0) > 11) + { + control_literoll184_tag.Component->Message(8, 0.05f); + } + else + { + control_fuel_bargraph_tag.Component->Message(45, 11.0); + static_cast(control_info_text_box_tag.Component)->Display(pinball::get_rc_string(44, 0), 2.0); + } + TableG->AddScore(caller->get_scoring(0)); + } } void control::HyperspaceLightGroupControl(int code, TPinballComponent* caller) @@ -971,10 +1231,72 @@ void control::JackpotLightControl(int code, TPinballComponent* caller) void control::BonusLightControl(int code, TPinballComponent* caller) { + if (code == 60) + TableG->ScoreSpecial2Flag = 0; } void control::BoosterTargetControl(int code, TPinballComponent* caller) { + TPinballComponent* sound = nullptr; + + if (code == 63 && !caller->MessageField) + { + caller->MessageField = 1; + if (control_target1_tag.Component->MessageField + + control_target2_tag.Component->MessageField + + control_target3_tag.Component->MessageField != 3) + { + TableG->AddScore(caller->get_scoring(0)); + return; + } + if (light_on(&control_lite61_tag)) + { + if (light_on(&control_lite60_tag)) + { + if (light_on(&control_lite59_tag)) + { + if (light_on(&control_lite58_tag)) + { + TableG->AddScore(caller->get_scoring(1)); + } + else + { + table_set_bonus_hold(); + } + sound = control_soundwave48_tag.Component; + } + else + { + table_set_bonus(); + sound = control_soundwave46_tag.Component; + } + } + else + { + table_set_jackpot(); + sound = control_soundwave45_tag.Component; + } + } + else + { + int msg = control_lite198_tag.Component->MessageField; + if (msg != 15 && msg != 29) + { + table_set_flag_lights(); + sound = control_soundwave47_tag.Component; + } + } + if (sound) + static_cast(sound)->Play(); + + control_target1_tag.Component->MessageField = 0; + control_target1_tag.Component->Message(50, 0.0); + control_target2_tag.Component->MessageField = 0; + control_target2_tag.Component->Message(50, 0.0); + control_target3_tag.Component->MessageField = 0; + control_target3_tag.Component->Message(50, 0.0); + TableG->AddScore(caller->get_scoring(1)); + } } void control::MedalLightGroupControl(int code, TPinballComponent* caller) @@ -987,6 +1309,34 @@ void control::MultiplierLightGroupControl(int code, TPinballComponent* caller) void control::FuelSpotTargetControl(int code, TPinballComponent* caller) { + TPinballComponent* liteComp; + + if (code == 63) + { + if (control_target10_tag.Component == caller) + { + liteComp = control_lite70_tag.Component; + } + else + { + liteComp = control_lite71_tag.Component; + if (control_target11_tag.Component != caller) + liteComp = control_lite72_tag.Component; + } + liteComp->Message(15, 2.0); + TableG->AddScore(caller->get_scoring(0)); + if (control_top_circle_tgt_lights_tag.Component->Message(37, 0.0) == 3) + { + control_top_circle_tgt_lights_tag.Component->Message(16, 2.0); + control_fuel_bargraph_tag.Component->Message(45, 11.0); + static_cast(control_soundwave25_tag.Component)->Play(); + static_cast(control_info_text_box_tag.Component)->Display(pinball::get_rc_string(44, 0), 2.0); + } + else + { + static_cast(control_soundwave49D_tag.Component)->Play(); + } + } } void control::MissionSpotTargetControl(int code, TPinballComponent* caller) @@ -1007,10 +1357,28 @@ void control::WormHoleDestinationControl(int code, TPinballComponent* caller) void control::BlackHoleKickoutControl(int code, TPinballComponent* caller) { + char Buffer[64]; + + if (code == 63) + { + int addedScore = TableG->AddScore(caller->get_scoring(0)); + sprintf_s(Buffer, pinball::get_rc_string(80, 0), addedScore); + static_cast(control_info_text_box_tag.Component)->Display(Buffer, 2.0); + caller->Message(55, -1.0); + } } void control::FlagControl(int code, TPinballComponent* caller) { + if (code == 62) + { + AdvanceWormHoleDestination(0); + } + else if (code == 63) + { + int score = caller->get_scoring(light_on(&control_lite20_tag)); + TableG->AddScore(score); + } } void control::GravityWellKickoutControl(int code, TPinballComponent* caller) @@ -1047,6 +1415,8 @@ void control::ShootAgainLightControl(int code, TPinballComponent* caller) void control::EscapeChuteSinkControl(int code, TPinballComponent* caller) { + if (code == 63) + caller->Message(56, static_cast(caller)->TimerTime); } void control::MissionControl(int code, TPinballComponent* caller) @@ -1281,6 +1651,7 @@ void control::BallDrainControl(int code, TPinballComponent* caller) } } + void control::table_control_handler(int code) { if (code == 1011) @@ -1289,3 +1660,571 @@ void control::table_control_handler(int code) control_lite77_tag.Component->Message(7, 0.0); } } + + +void control::AlienMenaceController(int code, TPinballComponent* caller) +{ + if (code != 11) + { + if (code == 66) + { + control_attack_bump_tag.Component->Message(11, 0.0); + TPinballComponent* lTrekLight = control_l_trek_lights_tag.Component; + control_l_trek_lights_tag.Component->Message(20, 0.0); + lTrekLight->Message(32, 0.2f); + lTrekLight->Message(26, 0.2f); + TPinballComponent* rTrekLight = control_r_trek_lights_tag.Component; + control_r_trek_lights_tag.Component->Message(20, 0.0); + rTrekLight->Message(32, 0.2f); + rTrekLight->Message(26, 0.2f); + control_lite307_tag.Component->Message(7, 0.0); + } + else if (code != 67) + { + return; + } + static_cast(control_mission_text_box_tag.Component)->Display(pinball::get_rc_string(175, 0), -1.0); + return; + } + if (control_bump1_tag.Component == caller) + { + if (static_cast(control_bump1_tag.Component)->BmpIndex) + { + control_lite307_tag.Component->Message(20, 0.0); + control_lite198_tag.Component->MessageField = 20; + MissionControl(66, nullptr); + } + } +} + +void control::AlienMenacePartTwoController(int code, TPinballComponent* caller) +{ + char Buffer[64]; + + if (code != 63) + { + if (code == 66) + { + control_lite56_tag.Component->MessageField = 8; + 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); + control_lite308_tag.Component->Message(7, 0.0); + control_lite311_tag.Component->Message(7, 0.0); + } + else if (code != 67) + { + return; + } + sprintf_s(Buffer, static_cast(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(130, 0), 4.0); + int addedScore = SpecialAddScore(750000); + sprintf_s(Buffer, pinball::get_rc_string(78, 0), addedScore); + if (!AddRankProgress(7)) + { + static_cast(control_mission_text_box_tag.Component)->Display(Buffer, 8.0); + static_cast(control_soundwave9_tag.Component)->Play(); + } + } + } +} + +void control::BlackHoleThreatController(int code, TPinballComponent* caller) +{ + char Buffer[64]; + + if (code == 11) + { + if (control_bump5_tag.Component == caller) + MissionControl(67, caller); + } + else if (code == 63) + { + if (control_kickout3_tag.Component == caller + && static_cast(control_bump5_tag.Component)->BmpIndex) + { + if (light_on(&control_lite316_tag)) + control_lite316_tag.Component->Message(20, 0.0); + if (light_on(&control_lite314_tag)) + control_lite314_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(124, 0), 4.0); + int addedScore = SpecialAddScore(1000000); + sprintf_s(Buffer, pinball::get_rc_string(78, 0), addedScore); + if (!AddRankProgress(8)) + { + static_cast(control_mission_text_box_tag.Component)->Display(Buffer, 8.0); + static_cast(control_soundwave9_tag.Component)->Play(); + } + } + } + else + { + if (code == 66) + { + control_launch_bump_tag.Component->Message(11, 0.0); + } + else if (code != 67) + { + return; + } + if (static_cast(control_bump5_tag.Component)->BmpIndex) + { + static_cast(control_mission_text_box_tag.Component)->Display( + pinball::get_rc_string(123, 0), -1.0); + if (light_on(&control_lite316_tag)) + control_lite316_tag.Component->Message(20, 0.0); + if (!light_on(&control_lite314_tag)) + { + control_lite314_tag.Component->Message(7, 0.0); + } + } + else + { + static_cast(control_mission_text_box_tag.Component)->Display( + pinball::get_rc_string(122, 0), -1.0); + if (light_on(&control_lite314_tag)) + control_lite314_tag.Component->Message(20, 0.0); + if (!light_on(&control_lite316_tag)) + { + control_lite316_tag.Component->Message(7, 0.0); + } + } + } +} + +void control::BugHuntController(int code, TPinballComponent* caller) +{ + char Buffer[64]; + + if (code != 63) + { + if (code == 66) + { + control_lite56_tag.Component->MessageField = 15; + control_target1_tag.Component->MessageField = 0; + control_target1_tag.Component->Message(50, 0.0); + control_target2_tag.Component->MessageField = 0; + control_target2_tag.Component->Message(50, 0.0); + control_target3_tag.Component->MessageField = 0; + control_target3_tag.Component->Message(50, 0.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); + 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); + control_top_circle_tgt_lights_tag.Component->Message(20, 0.0); + control_ramp_tgt_lights_tag.Component->Message(20, 0.0); + control_lchute_tgt_lights_tag.Component->Message(20, 0.0); + control_bpr_solotgt_lights_tag.Component->Message(20, 0.0); + 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(125, 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_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 = 1; + MissionControl(66, nullptr); + static_cast(control_mission_text_box_tag.Component)-> + Display(pinball::get_rc_string(126, 0), 4.0); + int addedScore = SpecialAddScore(750000); + sprintf_s(Buffer, pinball::get_rc_string(78, 0), addedScore); + if (!AddRankProgress(7)) + { + static_cast(control_mission_text_box_tag.Component)->Display(Buffer, 8.0); + static_cast(control_soundwave9_tag.Component)->Play(); + } + } + } +} + +void control::CosmicPlagueController(int code, TPinballComponent* caller) +{ + char Buffer[64]; + + if (code != 63) + { + if (code == 66) + { + control_lite56_tag.Component->MessageField = 75; + 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; + } + sprintf_s(Buffer, pinball::get_rc_string(139, 0), control_lite56_tag.Component->MessageField); + static_cast(control_mission_text_box_tag.Component)->Display(Buffer, -1.0); + return; + } + if (control_flag1_tag.Component == caller || control_flag2_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_lite305_tag.Component->Message(20, 0.0); + control_lite312_tag.Component->Message(20, 0.0); + control_lite198_tag.Component->MessageField = 21; + MissionControl(66, nullptr); + control_lite20_tag.Component->Message(20, 0.0); + control_lite19_tag.Component->Message(20, 0.0); + } + } +} + +void control::CosmicPlaguePartTwoController(int code, TPinballComponent* caller) +{ + char Buffer[64]; + + if (code != 63) + { + if (code == 66) + { + control_lite310_tag.Component->Message(7, 0.0); + } + else if (code != 67) + { + return; + } + static_cast(control_mission_text_box_tag.Component)->Display(pinball::get_rc_string(140, 0), -1.0); + return; + } + if (control_roll9_tag.Component == caller) + { + control_lite310_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(141, 0), 4.0); + int addedScore = SpecialAddScore(1750000); + sprintf_s(Buffer, pinball::get_rc_string(78, 0), addedScore); + if (!AddRankProgress(11)) + { + static_cast(control_mission_text_box_tag.Component)->Display(Buffer, 8.0); + static_cast(control_soundwave9_tag.Component)->Play(); + } + } +} + +void control::DoomsdayMachineController(int code, TPinballComponent* caller) +{ + char Buffer[64]; + + if (code != 63) + { + if (code == 66) + { + control_lite56_tag.Component->MessageField = 3; + control_lite301_tag.Component->Message(7, 0.0); + control_lite320_tag.Component->Message(7, 0.0); + } + else if (code != 67) + { + return; + } + sprintf_s(Buffer, pinball::get_rc_string(137, 0), control_lite56_tag.Component->MessageField); + static_cast(control_mission_text_box_tag.Component)->Display(Buffer, -1.0); + return; + } + if (control_roll4_tag.Component == caller || control_roll8_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_lite320_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(138, 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::GameoverController(int code, TPinballComponent* caller) +{ + char Buffer[128]; + + if (code == 66) + { + control_goal_lights_tag.Component->Message(20, 0.0); + pb::mode_change(2); + control_flip1_tag.Component->Message(1022, 0.0); + control_flip2_tag.Component->Message(1022, 0.0); + control_mission_text_box_tag.Component->MessageField = 0; + return; + } + if (code != 67) + return; + + int missionMsg = control_mission_text_box_tag.Component->MessageField; + if (missionMsg & 0x100) + { + int playerId = missionMsg & 0xF; + int playerScore = TableG->PlayerScores[playerId].ScoreStruct->Score; + auto nextPlayerId = playerId + 1; + if (playerScore >= 0) + { + const char* playerNScoreText = nullptr; + switch (nextPlayerId) + { + case 1: + playerNScoreText = pinball::get_rc_string(180, 0); + break; + case 2: + playerNScoreText = pinball::get_rc_string(181, 0); + break; + case 3: + playerNScoreText = pinball::get_rc_string(182, 0); + break; + case 4: + playerNScoreText = pinball::get_rc_string(183, 0); + break; + default: + break; + } + if (playerNScoreText != nullptr) + { + sprintf_s(Buffer, playerNScoreText, playerScore); + static_cast(control_mission_text_box_tag.Component)->Display(Buffer, 3.0); + int msgField = nextPlayerId == TableG->PlayerCount ? 0x200 : nextPlayerId | 0x100; + control_mission_text_box_tag.Component->MessageField = msgField; + return; + } + } + control_mission_text_box_tag.Component->MessageField = 0x200; + } + + if (missionMsg & 0x200) + { + int highscoreId = missionMsg & 0xF; + int highScore = pb::highscore_table[highscoreId].Score; + auto nextHidhscoreId = highscoreId + 1; + if (highScore > 0) + { + const char* highScoreNText = nullptr; + switch (nextHidhscoreId) + { + case 1: + highScoreNText = pinball::get_rc_string(184, 0); + break; + case 2: + highScoreNText = pinball::get_rc_string(185, 0); + break; + case 3: + highScoreNText = pinball::get_rc_string(186, 0); + break; + case 4: + highScoreNText = pinball::get_rc_string(187, 0); + break; + case 5: + highScoreNText = pinball::get_rc_string(188, 0); + break; + default: + break; + } + if (highScoreNText != nullptr) + { + sprintf_s(Buffer, highScoreNText, highScore); + static_cast(control_mission_text_box_tag.Component)->Display(Buffer, 3.0); + int msgField = nextHidhscoreId == 5 ? 0 : nextHidhscoreId | 0x200; + control_mission_text_box_tag.Component->MessageField = msgField; + return; + } + } + } + + 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) +{ +} + +void control::MaelstromController(int code, TPinballComponent* caller) +{ +} + +void control::MaelstromPartEightController(int code, TPinballComponent* caller) +{ +} + +void control::MaelstromPartFiveController(int code, TPinballComponent* caller) +{ +} + +void control::MaelstromPartFourController(int code, TPinballComponent* caller) +{ +} + +void control::MaelstromPartSevenController(int code, TPinballComponent* caller) +{ +} + +void control::MaelstromPartSixController(int code, TPinballComponent* caller) +{ +} + +void control::MaelstromPartThreeController(int code, TPinballComponent* caller) +{ +} + +void control::MaelstromPartTwoController(int code, TPinballComponent* caller) +{ +} + +void control::PracticeMissionController(int code, TPinballComponent* caller) +{ +} + +void control::ReconnaissanceController(int code, TPinballComponent* caller) +{ +} + +void control::ReentryTrainingController(int code, TPinballComponent* caller) +{ +} + +void control::RescueMissionController(int code, TPinballComponent* caller) +{ +} + +void control::SatelliteController(int code, TPinballComponent* caller) +{ +} + +void control::ScienceMissionController(int code, TPinballComponent* caller) +{ +} + +void control::SecretMissionGreenController(int code, TPinballComponent* caller) +{ +} + +void control::SecretMissionRedController(int code, TPinballComponent* caller) +{ +} + +void control::SecretMissionYellowController(int code, TPinballComponent* caller) +{ +} + +void control::SelectMissionController(int code, TPinballComponent* caller) +{ +} + +void control::SpaceRadiationController(int code, TPinballComponent* caller) +{ +} + +void control::StrayCometController(int code, TPinballComponent* caller) +{ +} + +void control::TimeWarpController(int code, TPinballComponent* caller) +{ +} + +void control::TimeWarpPartTwoController(int code, TPinballComponent* caller) +{ +} + +void control::UnselectMissionController(int code, TPinballComponent* caller) +{ +} + +void control::WaitingDeploymentController(int code, TPinballComponent* caller) +{ +} diff --git a/SpaceCadetPinball/control.h b/SpaceCadetPinball/control.h index b6f69e0..2c96c61 100644 --- a/SpaceCadetPinball/control.h +++ b/SpaceCadetPinball/control.h @@ -31,15 +31,22 @@ public: static component_info score_components[88]; static component_tag* simple_components[142]; static int table_unlimited_balls; + static int RankRcArray[9], MissionRcArray[17]; static void make_links(TPinballTable* table); static TPinballComponent* make_component_link(component_tag* tag); static void handler(int code, TPinballComponent* cmp); static void pbctrl_bdoor_controller(int key); static void table_add_extra_ball(float count); + static void table_set_bonus_hold(); + static void table_set_bonus(); + static void table_set_jackpot(); + static void table_set_flag_lights(); static int cheat_bump_rank(); - static BOOL light_on(struct component_tag* tag); + static bool light_on(struct component_tag* tag); static int SpecialAddScore(int score); + static int AddRankProgress(int rank); + static void AdvanceWormHoleDestination(int flag); static void FlipperRebounderControl1(int code, TPinballComponent* caller); static void FlipperRebounderControl2(int code, TPinballComponent* caller); @@ -102,6 +109,40 @@ public: static void table_control_handler(int code); + static void AlienMenaceController(int code, TPinballComponent* caller); + static void AlienMenacePartTwoController(int code, TPinballComponent* caller); + static void BlackHoleThreatController(int code, TPinballComponent* caller); + static void BugHuntController(int code, TPinballComponent* caller); + static void CosmicPlagueController(int code, TPinballComponent* caller); + static void CosmicPlaguePartTwoController(int code, TPinballComponent* caller); + static void DoomsdayMachineController(int code, TPinballComponent* caller); + static void GameoverController(int code, TPinballComponent* caller); + static void LaunchTrainingController(int code, TPinballComponent* caller); + static void MaelstromController(int code, TPinballComponent* caller); + static void MaelstromPartEightController(int code, TPinballComponent* caller); + static void MaelstromPartFiveController(int code, TPinballComponent* caller); + static void MaelstromPartFourController(int code, TPinballComponent* caller); + static void MaelstromPartSevenController(int code, TPinballComponent* caller); + static void MaelstromPartSixController(int code, TPinballComponent* caller); + static void MaelstromPartThreeController(int code, TPinballComponent* caller); + static void MaelstromPartTwoController(int code, TPinballComponent* caller); + static void PracticeMissionController(int code, TPinballComponent* caller); + static void ReconnaissanceController(int code, TPinballComponent* caller); + static void ReentryTrainingController(int code, TPinballComponent* caller); + static void RescueMissionController(int code, TPinballComponent* caller); + static void SatelliteController(int code, TPinballComponent* caller); + static void ScienceMissionController(int code, TPinballComponent* caller); + static void SecretMissionGreenController(int code, TPinballComponent* caller); + static void SecretMissionRedController(int code, TPinballComponent* caller); + static void SecretMissionYellowController(int code, TPinballComponent* caller); + static void SelectMissionController(int code, TPinballComponent* caller); + static void SpaceRadiationController(int code, TPinballComponent* caller); + static void StrayCometController(int code, TPinballComponent* caller); + static void TimeWarpController(int code, TPinballComponent* caller); + static void TimeWarpPartTwoController(int code, TPinballComponent* caller); + static void UnselectMissionController(int code, TPinballComponent* caller); + static void WaitingDeploymentController(int code, TPinballComponent* caller); private: static int pbctrl_state; + static int extraball_light_flag; }; diff --git a/SpaceCadetPinball/pb.h b/SpaceCadetPinball/pb.h index 4f6b0ed..7bbcdec 100644 --- a/SpaceCadetPinball/pb.h +++ b/SpaceCadetPinball/pb.h @@ -13,6 +13,7 @@ public: static int cheat_mode, game_mode; static datFileStruct* record_table; static TPinballTable* MainTable; + static high_score_struct highscore_table[5]; static int init(); static int uninit(); @@ -39,6 +40,5 @@ public: static float collide(float timeNow, float timeDelta, TBall* ball); private : static int demo_mode, mode_countdown_; - static high_score_struct highscore_table[5]; static int state; };