From 230c981144caacda7a62c8e9e8b018125666eb28 Mon Sep 17 00:00:00 2001 From: oz Date: Fri, 1 Jan 2021 16:14:11 +0300 Subject: [PATCH] TLight, TTimer, TSound, TComponentGroup ready. --- Doc/FuncStats.xlsx | Bin 37762 -> 37904 bytes SpaceCadetPinball/TComponentGroup.cpp | 64 +++++ SpaceCadetPinball/TComponentGroup.h | 16 +- SpaceCadetPinball/TLight.cpp | 325 ++++++++++++++++++++++++++ SpaceCadetPinball/TLight.h | 57 ++++- SpaceCadetPinball/TPinballTable.cpp | 2 +- SpaceCadetPinball/TSound.cpp | 14 ++ SpaceCadetPinball/TSound.h | 11 +- SpaceCadetPinball/TTimer.cpp | 35 +++ SpaceCadetPinball/TTimer.h | 12 +- SpaceCadetPinball/fullscrn.cpp | 2 +- 11 files changed, 515 insertions(+), 23 deletions(-) diff --git a/Doc/FuncStats.xlsx b/Doc/FuncStats.xlsx index c18f505795c3ecf5fcc0edcd295133d7f446d5dc..c6cb10b640dc4cb9d1a602d94eed138b463f310c 100644 GIT binary patch delta 29878 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 delta 29710 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 diff --git a/SpaceCadetPinball/TComponentGroup.cpp b/SpaceCadetPinball/TComponentGroup.cpp index eda558b..e94a19d 100644 --- a/SpaceCadetPinball/TComponentGroup.cpp +++ b/SpaceCadetPinball/TComponentGroup.cpp @@ -1,2 +1,66 @@ #include "pch.h" #include "TComponentGroup.h" + + +#include "control.h" +#include "loader.h" +#include "objlist_class.h" +#include "timer.h" +#include "TPinballTable.h" + +TComponentGroup::TComponentGroup(TPinballTable* table, int groupIndex) : TPinballComponent(table, groupIndex, false) +{ + List = new objlist_class(4, 4); + Timer = 0; + if (groupIndex > 0) + { + int attrCount; + auto shortArr = loader::query_iattribute(groupIndex, 1027, &attrCount); + auto shortArrPtr = shortArr; + for (auto index = 0; index < attrCount; ++index, ++shortArrPtr) + { + auto component = table->find_component(*shortArrPtr); + if (component) + List->Add(component); + } + } +} + +TComponentGroup::~TComponentGroup() +{ + if (Timer) + { + timer::kill(Timer); + Timer = 0; + } + delete List; +} + +int TComponentGroup::Message(int code, float value) +{ + if (code == 48) + { + if (this->Timer) + { + timer::kill(this->Timer); + this->Timer = 0; + } + if (value > 0.0) + this->Timer = timer::set(value, this, NotifyTimerExpired); + } + else if (code <= 1007 || code > 1011 && code != 1020 && code != 1022) + { + for (int i = 0; i < List->Count(); i++) + { + static_cast(List->Get(i))->Message(code, value); + } + } + return 0; +} + +void TComponentGroup::NotifyTimerExpired(int timerId, void* caller) +{ + auto compGroup = static_cast(caller); + compGroup->Timer = 0; + control::handler(61, compGroup); +} diff --git a/SpaceCadetPinball/TComponentGroup.h b/SpaceCadetPinball/TComponentGroup.h index 7e7ba81..ec44329 100644 --- a/SpaceCadetPinball/TComponentGroup.h +++ b/SpaceCadetPinball/TComponentGroup.h @@ -1,11 +1,17 @@ #pragma once #include "TPinballComponent.h" + +class objlist_class; + class TComponentGroup : - public TPinballComponent + public TPinballComponent { public: - TComponentGroup(TPinballTable* table, int groupIndex) : TPinballComponent(table, groupIndex, false) - { - } -}; + TComponentGroup(TPinballTable* table, int groupIndex); + ~TComponentGroup() override; + int Message(int code, float value) override; + static void NotifyTimerExpired(int timerId, void* caller); + objlist_class* List; + int Timer; +}; diff --git a/SpaceCadetPinball/TLight.cpp b/SpaceCadetPinball/TLight.cpp index 9e0ecdd..81494db 100644 --- a/SpaceCadetPinball/TLight.cpp +++ b/SpaceCadetPinball/TLight.cpp @@ -1,2 +1,327 @@ #include "pch.h" #include "TLight.h" + + +#include "control.h" +#include "loader.h" +#include "render.h" +#include "timer.h" +#include "TPinballTable.h" +#include "TZmapList.h" + +TLight::TLight(TPinballTable* table, int groupIndex) : TPinballComponent(table, groupIndex, true) +{ + Timer1 = 0; + FlasherActive = 0; + Timer2 = 0; + Flasher.Timer = 0; + Reset(); + float* floatArr1 = loader::query_float_attribute(groupIndex, 0, 900); + Flasher.TimerDelay[0] = *floatArr1; + FlasherDelay[0] = *floatArr1; + float* floatArr2 = loader::query_float_attribute(groupIndex, 0, 901); + Flasher.TimerDelay[1] = *floatArr2; + FlasherDelay[1] = *floatArr2; +} + +int TLight::Message(int code, float value) +{ + int bmpIndex; + auto this2 = this; + if (code > 1020) + { + if (code == 1024) + { + Reset(); + for (auto index = 0; index < this2->PinballTable->PlayerCount; ++index) + { + auto playerPtr = &this2->PlayerData[index]; + playerPtr->FlasherActive = this2->FlasherActive; + playerPtr->BmpIndex2 = this2->BmpIndex2; + playerPtr->BmpIndex1 = this2->BmpIndex1; + playerPtr->MessageField = this2->MessageField; + } + } + return 0; + } + if (code == 1020) + { + auto playerPtr = &this2->PlayerData[PinballTable->CurrentPlayer]; + playerPtr->FlasherActive = this2->FlasherActive; + playerPtr->BmpIndex2 = this2->BmpIndex2; + playerPtr->BmpIndex1 = this2->BmpIndex1; + playerPtr->MessageField = this2->MessageField; + + Reset(); + + playerPtr = &this2->PlayerData[static_cast(floor(value))]; + this2->FlasherActive = playerPtr->FlasherActive; + this2->BmpIndex2 = playerPtr->BmpIndex2; + this2->BmpIndex1 = playerPtr->BmpIndex1; + this2->MessageField = playerPtr->MessageField; + if (this2->BmpIndex2) + { + this2->Message(11, static_cast(this2->BmpIndex2)); + } + if (this2->BmpIndex1) + this2->Message(1, 0.0); + if (this2->FlasherActive) + this2->Message(4, 0.0); + return 0; + } + switch (code) + { + case 0: + this->BmpIndex1 = 0; + if (this->FlasherActive == 0 && !this->FlasherFlag1 && !this->FlasherFlag2) + render::sprite_set_bitmap(this->RenderSprite, this->Flasher.BmpArr[0]); + return 0; + case 1: + this->BmpIndex1 = 1; + if (this->FlasherActive == 0 && !this->FlasherFlag1 && !this->FlasherFlag2) + render::sprite_set_bitmap(this->RenderSprite, this->Flasher.BmpArr[1]); + return 0; + case 2: + break; + case 3: + return this->FlasherActive; + case 4: + schedule_timeout(0.0); + if (!this2->FlasherActive || !this2->Flasher.Timer) + { + this2->FlasherActive = 1; + this2->FlasherFlag2 = 0; + this2->FlasherFlag1 = 0; + this2->Unknown13 = 0; + flasher_start(&this2->Flasher, this2->BmpIndex1); + } + return 0; + case 5: + this->Flasher.TimerDelay[0] = value * this->FlasherDelay[0]; + this->Flasher.TimerDelay[1] = value * this->FlasherDelay[1]; + return 0; + case 6: + this->Flasher.TimerDelay[0] = this->FlasherDelay[0]; + this->Flasher.TimerDelay[1] = this->FlasherDelay[1]; + return 0; + case 7: + if (!this->FlasherActive) + flasher_start(&this->Flasher, this->BmpIndex1); + this2->FlasherActive = 1; + this2->FlasherFlag2 = 0; + this2->Unknown13 = 0; + this2->FlasherFlag1 = 0; + schedule_timeout(value); + return 0; + case 8: + if (!this->FlasherFlag1) + { + if (this->FlasherActive) + { + flasher_stop(&this->Flasher, 0); + this2->FlasherActive = 0; + } + else + { + render::sprite_set_bitmap(this->RenderSprite, this->Flasher.BmpArr[0]); + } + this2->FlasherFlag1 = 1; + this2->FlasherFlag2 = 0; + } + schedule_timeout(value); + return 0; + case 9: + if (!this->FlasherFlag2) + { + if (this->FlasherActive) + { + flasher_stop(&this->Flasher, 1); + this2->FlasherActive = 0; + } + else + { + render::sprite_set_bitmap(this->RenderSprite, this->Flasher.BmpArr[1]); + } + this2->FlasherFlag2 = 1; + this2->FlasherFlag1 = 0; + } + schedule_timeout(value); + return 0; + case 11: + this2->BmpIndex2 = static_cast(floor(value)); + if (this2->BmpIndex2 > this2->ListBitmap->Count()) + this2->BmpIndex2 = this2->ListBitmap->Count(); + bmpIndex = 0; + if (this2->BmpIndex2 < 0) + this2->BmpIndex2 = 0; + this2->Flasher.BmpArr[0] = nullptr; + this2->Flasher.BmpArr[1] = static_cast(this2->ListBitmap->Get(this2->BmpIndex2)); + if (this2->FlasherActive == 0) + { + if (!this2->FlasherFlag1) + { + if (this2->FlasherFlag2) + bmpIndex = 1; + else + bmpIndex = this2->BmpIndex1; + } + } + else + { + bmpIndex = this2->Flasher.BmpIndex; + } + render::sprite_set_bitmap(this2->RenderSprite, this2->Flasher.BmpArr[bmpIndex]); + return 0; + case 12: + bmpIndex = this->BmpIndex2 + 1; + if (bmpIndex > this->ListBitmap->Count()) + bmpIndex = this->ListBitmap->Count(); + Message(11, static_cast(bmpIndex)); + return 0; + case 13: + bmpIndex = this->BmpIndex2 - 1; + if (bmpIndex < 0) + bmpIndex = 0; + Message(11, static_cast(bmpIndex)); + return 0; + case 14: + if (this->Timer1) + timer::kill(this->Timer1); + this2->Timer1 = 0; + if (this2->FlasherActive != 0) + flasher_stop(&this2->Flasher, -1); + this2->FlasherActive = 0; + this2->FlasherFlag1 = 0; + this2->FlasherFlag2 = 0; + render::sprite_set_bitmap(this2->RenderSprite, this2->Flasher.BmpArr[this2->BmpIndex1]); + return 0; + case 15: + this->Unknown13 = 0; + if (this->Timer2) + timer::kill(this->Timer2); + this2->Timer2 = 0; + Message(1, 0.0); + Message(7, value); + return 0; + case 16: + if (this->Timer2) + timer::kill(this->Timer2); + this2->Timer2 = 0; + Message(7, value); + this2->Unknown13 = 1; + return 0; + case 17: + Message(static_cast(floor(value)) != 0, 0.0); + break; + case 18: + Message(17, value); + Message(14, 0.0); + break; + case 19: + Message(1, 0.0); + Message(14, 0.0); + return 0; + case 20: + Message(0, 0.0); + Message(14, 0.0); + return 0; + case 21: + Message(17, static_cast(this->BmpIndex1 == 0)); + break; + case 22: + Message(18, static_cast(this->BmpIndex1 == 0)); + break; + case 23: + this->MessageField = static_cast(floor(value)); + return 0; + default: + return 0; + } + + return this2->BmpIndex1; +} + +void TLight::Reset() +{ + if (Timer1) + timer::kill(Timer1); + if (Timer2) + timer::kill(Timer2); + if (FlasherActive) + flasher_stop(&Flasher, -1); + Unknown20F = 1.0; + Timer1 = 0; + Timer2 = 0; + BmpIndex1 = 0; + BmpIndex2 = 0; + FlasherFlag1 = 0; + FlasherFlag2 = 0; + FlasherActive = 0; + Unknown13 = 0; + render::sprite_set_bitmap(RenderSprite, nullptr); + Flasher.Sprite = RenderSprite; + Flasher.BmpArr[0] = nullptr; + if (ListBitmap) + Flasher.BmpArr[1] = static_cast(ListBitmap->Get(0)); + Flasher.Unknown4 = 0; + Flasher.Unknown3 = 0; + MessageField = 0; +} + +void TLight::schedule_timeout(float time) +{ + Flasher.TimerDelay[0] = FlasherDelay[0]; + Flasher.TimerDelay[1] = FlasherDelay[1]; + if (Timer1) + timer::kill(Timer1); + Timer1 = 0; + if (time > 0.0) + Timer1 = timer::set(time, this, TimerExpired); +} + +void TLight::TimerExpired(int timerId, void* caller) +{ + auto light = static_cast(caller); + if (light->FlasherActive) + flasher_stop(&light->Flasher, -1); + render::sprite_set_bitmap(light->RenderSprite, light->Flasher.BmpArr[light->BmpIndex1]); + light->FlasherFlag1 = 0; + light->FlasherFlag2 = 0; + light->FlasherActive = 0; + light->Timer1 = 0; + if (light->Unknown13 != 0) + { + light->Unknown13 = 0; + light->Message(20, 0.0); + } + if (light->Control) + control::handler(60, light); +} + + +void TLight::flasher_stop(flasher_type* flash, int bmpIndex) +{ + if (flash->Timer) + timer::kill(flash->Timer); + flash->Timer = 0; + if (bmpIndex >= 0) + { + flash->BmpIndex = bmpIndex; + render::sprite_set_bitmap(flash->Sprite, flash->BmpArr[bmpIndex]); + } +} + +void TLight::flasher_start(flasher_type* flash, int bmpIndex) +{ + flash->BmpIndex = bmpIndex; + flasher_callback(0, flash); +} + +void TLight::flasher_callback(int timerId, void* caller) +{ + auto flash = static_cast(caller); + auto index = 1 - flash->BmpIndex; + flash->BmpIndex = index; + render::sprite_set_bitmap(flash->Sprite, flash->BmpArr[index]); + flash->Timer = timer::set(flash->TimerDelay[flash->BmpIndex], flash, flasher_callback); +} diff --git a/SpaceCadetPinball/TLight.h b/SpaceCadetPinball/TLight.h index e60d80b..cdb9cbd 100644 --- a/SpaceCadetPinball/TLight.h +++ b/SpaceCadetPinball/TLight.h @@ -1,11 +1,56 @@ #pragma once #include "TPinballComponent.h" -class TLight : - public TPinballComponent + +struct gdrv_bitmap8; + +struct __declspec(align(4)) flasher_type { -public: - TLight(TPinballTable* table, int groupIndex) : TPinballComponent(table, groupIndex, true) - { - } + render_sprite_type_struct* Sprite; + gdrv_bitmap8* BmpArr[2]; + int Unknown3; + int Unknown4; + float TimerDelay[2]; + int Timer; + int BmpIndex; }; + +struct __declspec(align(4)) TLight_player_backup +{ + int MessageField; + int BmpIndex1; + int FlasherActive; + int Unknown3; + int Unknown4; + int BmpIndex2; +}; + + +class TLight : + public TPinballComponent +{ +public: + TLight(TPinballTable* table, int groupIndex); + int Message(int code, float value) override; + void Reset(); + void schedule_timeout(float time); + + static void TimerExpired(int timerId, void* caller); + static void flasher_stop(flasher_type* flash, int bmpIndex); + static void flasher_start(struct flasher_type* flash, int bmpIndex); + static void flasher_callback(int timerId, void* caller); + + flasher_type Flasher; + int BmpIndex1; + int FlasherActive; + int FlasherFlag1; + int FlasherFlag2; + int Unknown13; + int BmpIndex2; + float FlasherDelay[2]; + int Timer1; + int Timer2; + int Unknown19; + float Unknown20F; + TLight_player_backup PlayerData[4]; +}; diff --git a/SpaceCadetPinball/TPinballTable.cpp b/SpaceCadetPinball/TPinballTable.cpp index 5efc507..c5ca725 100644 --- a/SpaceCadetPinball/TPinballTable.cpp +++ b/SpaceCadetPinball/TPinballTable.cpp @@ -241,7 +241,7 @@ TPinballComponent* TPinballTable::find_component(LPCSTR componentName) TPinballComponent* TPinballTable::find_component(int groupIndex) { - char Buffer[33]; + char Buffer[40]; int objCount = ComponentList->Count(); if (objCount > 0) { diff --git a/SpaceCadetPinball/TSound.cpp b/SpaceCadetPinball/TSound.cpp index 5c30db5..9e835c8 100644 --- a/SpaceCadetPinball/TSound.cpp +++ b/SpaceCadetPinball/TSound.cpp @@ -1,2 +1,16 @@ #include "pch.h" #include "TSound.h" + +#include "loader.h" + +TSound::TSound(TPinballTable* table, int groupIndex) : TPinballComponent(table, groupIndex, true) +{ + visualStruct visual{}; + loader::query_visual(groupIndex, 0, &visual); + this->SoundIndex = visual.SoundIndex4; +} + +float TSound::Play() +{ + return loader::play_sound(this->SoundIndex); +} diff --git a/SpaceCadetPinball/TSound.h b/SpaceCadetPinball/TSound.h index 3a3a3fe..aef92eb 100644 --- a/SpaceCadetPinball/TSound.h +++ b/SpaceCadetPinball/TSound.h @@ -1,11 +1,12 @@ #pragma once #include "TPinballComponent.h" + class TSound : - public TPinballComponent + public TPinballComponent { public: - TSound(TPinballTable* table, int groupIndex) : TPinballComponent(table, groupIndex, true) - { - } -}; + TSound(TPinballTable* table, int groupIndex); + float Play(); + int SoundIndex; +}; diff --git a/SpaceCadetPinball/TTimer.cpp b/SpaceCadetPinball/TTimer.cpp index 6821d49..56f9dc5 100644 --- a/SpaceCadetPinball/TTimer.cpp +++ b/SpaceCadetPinball/TTimer.cpp @@ -1,2 +1,37 @@ #include "pch.h" #include "TTimer.h" + +#include "control.h" +#include "timer.h" + +TTimer::TTimer(TPinballTable* table, int groupIndex) : TPinballComponent(table, groupIndex, true) +{ + Timer = 0; +} + +int TTimer::Message(int code, float value) +{ + if (code == 59) + { + if (Timer) + timer::kill(Timer); + Timer = timer::set(value, this, TimerExpired); + } + else if (code == 1011 || code == 1022 || code == 1024) + { + if (Timer) + { + timer::kill(Timer); + Timer = 0; + } + } + return 0; +} + + +void TTimer::TimerExpired(int timerId, void* caller) +{ + auto timer = static_cast(caller); + timer->Timer = 0; + control::handler(60, timer); +} diff --git a/SpaceCadetPinball/TTimer.h b/SpaceCadetPinball/TTimer.h index 6ed87a1..175627b 100644 --- a/SpaceCadetPinball/TTimer.h +++ b/SpaceCadetPinball/TTimer.h @@ -1,11 +1,13 @@ #pragma once #include "TPinballComponent.h" + class TTimer : - public TPinballComponent + public TPinballComponent { public: - TTimer(TPinballTable* table, int groupIndex) : TPinballComponent(table, groupIndex, true) - { - } -}; + TTimer(TPinballTable* table, int groupIndex); + int Message(int code, float value) override; + static void TimerExpired(int timerId, void* caller); + int Timer; +}; diff --git a/SpaceCadetPinball/fullscrn.cpp b/SpaceCadetPinball/fullscrn.cpp index d86940f..b539b45 100644 --- a/SpaceCadetPinball/fullscrn.cpp +++ b/SpaceCadetPinball/fullscrn.cpp @@ -11,7 +11,7 @@ rectangle_type fullscrn::WHRect; int fullscrn::fullscrn_flag1; int fullscrn::display_changed; int fullscrn::ChangeDisplay, fullscrn::SmthFullScrnFlag2; -int fullscrn::trick; +int fullscrn::trick = 1; int fullscrn::MenuEnabled; HMENU fullscrn::MenuHandle;