From 3097edf526a9fdcd1fb18031b5ba462ca3ab633b Mon Sep 17 00:00:00 2001 From: oz Date: Sun, 20 Dec 2020 14:13:12 +0300 Subject: [PATCH] TTableLayer v1. --- Doc/FuncStats.xlsx | Bin 37509 -> 37590 bytes SpaceCadetPinball/SpaceCadetPinball.vcxproj | 2 + .../SpaceCadetPinball.vcxproj.filters | 6 ++ SpaceCadetPinball/TEdgeManager.cpp | 6 ++ SpaceCadetPinball/TEdgeManager.h | 20 ++++ SpaceCadetPinball/TPinballTable.cpp | 16 ++- SpaceCadetPinball/TPinballTable.h | 20 ++-- SpaceCadetPinball/TTableLayer.cpp | 101 ++++++++++++++++++ SpaceCadetPinball/TTableLayer.h | 22 +++- SpaceCadetPinball/loader.cpp | 10 +- SpaceCadetPinball/loader.h | 2 +- 11 files changed, 176 insertions(+), 29 deletions(-) create mode 100644 SpaceCadetPinball/TEdgeManager.cpp create mode 100644 SpaceCadetPinball/TEdgeManager.h diff --git a/Doc/FuncStats.xlsx b/Doc/FuncStats.xlsx index aef5d36857cd88107b78d662cf762d924b597018..8c060c7f77afc13e50027b6747cf564256ca052b 100644 GIT binary patch delta 29373 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 LAT*E1{^9=vM>O~j delta 29191 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 diff --git a/SpaceCadetPinball/SpaceCadetPinball.vcxproj b/SpaceCadetPinball/SpaceCadetPinball.vcxproj index 461b1b6..f6176d6 100644 --- a/SpaceCadetPinball/SpaceCadetPinball.vcxproj +++ b/SpaceCadetPinball/SpaceCadetPinball.vcxproj @@ -185,6 +185,7 @@ + @@ -253,6 +254,7 @@ + diff --git a/SpaceCadetPinball/SpaceCadetPinball.vcxproj.filters b/SpaceCadetPinball/SpaceCadetPinball.vcxproj.filters index e380a02..88cec46 100644 --- a/SpaceCadetPinball/SpaceCadetPinball.vcxproj.filters +++ b/SpaceCadetPinball/SpaceCadetPinball.vcxproj.filters @@ -216,6 +216,9 @@ Header Files + + Header Files\TPinballComponent + @@ -398,6 +401,9 @@ Source Files + + Source Files\TPinballComponent + diff --git a/SpaceCadetPinball/TEdgeManager.cpp b/SpaceCadetPinball/TEdgeManager.cpp new file mode 100644 index 0000000..65e1609 --- /dev/null +++ b/SpaceCadetPinball/TEdgeManager.cpp @@ -0,0 +1,6 @@ +#include "pch.h" +#include "TEdgeManager.h" + +void TEdgeManager::edges_insert_square(float a1, float a2, float a3, float a4, TEdgeSegment* a5, field_effect_type* a6) +{ +} diff --git a/SpaceCadetPinball/TEdgeManager.h b/SpaceCadetPinball/TEdgeManager.h new file mode 100644 index 0000000..9a92d3f --- /dev/null +++ b/SpaceCadetPinball/TEdgeManager.h @@ -0,0 +1,20 @@ +#pragma once +#include "TCollisionComponent.h" +#include "TEdgeSegment.h" + +struct field_effect_type +{ + char* Flag2Ptr; + int Unknown1; + TCollisionComponent* CollisionComp; +}; + +class TEdgeManager +{ +public: + TEdgeManager(float a2, float a3, float a4, float a5) + { + } + + static void edges_insert_square(float a1, float a2, float a3, float a4, TEdgeSegment* a5, field_effect_type* a6); +}; diff --git a/SpaceCadetPinball/TPinballTable.cpp b/SpaceCadetPinball/TPinballTable.cpp index d81afd6..e9d49e1 100644 --- a/SpaceCadetPinball/TPinballTable.cpp +++ b/SpaceCadetPinball/TPinballTable.cpp @@ -56,9 +56,8 @@ TPinballTable::TPinballTable(): TPinballComponent(nullptr, -1, false) ListP2->Add(ballObj); if (ballObj) ballObj->UnknownBaseFlag2 = 0; - TTableLayer* tableLayerObj = new TTableLayer(this); - TLightGroup* lightGroupObj = new TLightGroup(this, 0); - this->LightGroup = lightGroupObj; + new TTableLayer(this); + this->LightGroup = new TLightGroup(this, 0); auto score1 = score::create("score1", render::background_bitmap); this->Score1 = score1; @@ -71,7 +70,7 @@ TPinballTable::TPinballTable(): TPinballComponent(nullptr, -1, false) scorePtr += 7; } while (scoreIndex < 4); - this->UnknownP45 = 0; + this->CurrentPlayer = 0; this->UnknownP73 = 3; this->ScoreBallcount = (int*)score::create("ballcount1", render::background_bitmap); this->ScorePlayerNumber1 = (int*)score::create("player_number1", render::background_bitmap); @@ -192,7 +191,6 @@ TPinballTable::TPinballTable(): TPinballComponent(nullptr, -1, false) TPinballTable::~TPinballTable() { - //this->VfTable = (TPinballComponent_vtbl*)&TPinballTable::`vftable'; scoreStruct** scorePtr = &Score2; int index = 4; do @@ -216,12 +214,10 @@ TPinballTable::~TPinballTable() memory::free(ScoreBallcount); ScoreBallcount = nullptr; } - for (auto i = LightGroup; ; i = static_cast(ListP1->Get(0))) + delete LightGroup; + while (ListP1->Count() > 0) { - //if (i) - //(*(void(__thiscall**)(TLightGroup*, int))(*(_DWORD*)i + 16))(i, 1); - //if (!ListP1->Count()) - break; + delete static_cast(ListP1->Get(0)); } delete ListP2; delete ListP1; diff --git a/SpaceCadetPinball/TPinballTable.h b/SpaceCadetPinball/TPinballTable.h index e78d0ad..155e1e8 100644 --- a/SpaceCadetPinball/TPinballTable.h +++ b/SpaceCadetPinball/TPinballTable.h @@ -22,9 +22,9 @@ public: int* ScoreBallcount; int* ScorePlayerNumber1; int UnknownP6; - int UnknownP7; - int UnknownP8; - int UnknownP9; + int SoundIndex1; + int SoundIndex2; + int SoundIndex3; int UnknownP10; int UnknownP11; int UnknownP12; @@ -59,21 +59,21 @@ public: int UnknownP41; int UnknownP42; int UnknownP43; - int UnknownP44; - int UnknownP45; + int PlayerCount; + int CurrentPlayer; TPlunger* Plunger; TDrain* Drain; int UnknownP48; int XOffset; int YOffset; - int UnknownP51; - int UnknownP52; + int Width; + int Height; objlist_class* ListP1; objlist_class* ListP2; TLightGroup* LightGroup; - int UnknownP58; - int UnknownP59; - int UnknownP60; + float TableAngleMult; + float TableAngle1; + float TableAngle2; float CollisionCompOffset; int UnknownP62; int UnknownP63; diff --git a/SpaceCadetPinball/TTableLayer.cpp b/SpaceCadetPinball/TTableLayer.cpp index eaa0981..8b1d864 100644 --- a/SpaceCadetPinball/TTableLayer.cpp +++ b/SpaceCadetPinball/TTableLayer.cpp @@ -1,2 +1,103 @@ #include "pch.h" #include "TTableLayer.h" + +#include "loader.h" +#include "proj.h" +#include "TLine.h" +#include "TPinballTable.h" + +TEdgeManager* TTableLayer::edge_manager; + +TTableLayer::TTableLayer(TPinballTable* table): TCollisionComponent(table, -1, false) +{ + visualStruct visual{}; + rectangle_type rect{}; + + auto groupIndex = loader::query_handle("table"); + loader::query_visual(groupIndex, 0, &visual); + + auto projCenter = loader::query_float_attribute(groupIndex, 0, 700); + proj::recenter(projCenter[0], projCenter[1]); + render::set_background_zmap(visual.ZMap, 0, 0); + + auto bmp = visual.Bitmap; + VisBmp = visual.Bitmap; + rect.XPosition = 0; + rect.YPosition = 0; + rect.Width = bmp->Width; + rect.Height = bmp->Height; + render::create_sprite(VisualType::None, bmp, visual.ZMap, 0, 0, &rect); + + PinballTable->SoundIndex1 = visual.SoundIndex4; + PinballTable->SoundIndex2 = visual.SoundIndex3; + PinballTable->SoundIndex3 = visual.Kicker.SoundIndex; + + auto tableAngleArr = loader::query_float_attribute(groupIndex, 0, 305); + if (tableAngleArr) + { + PinballTable->TableAngleMult = tableAngleArr[0]; + PinballTable->TableAngle1 = tableAngleArr[1]; + PinballTable->TableAngle2 = tableAngleArr[2]; + } + else + { + PinballTable->TableAngleMult = 25.0f; + PinballTable->TableAngle1 = 0.5f; + PinballTable->TableAngle2 = 1.570796f; + } + + auto table3 = PinballTable; + Angle1 = cos(table3->TableAngle2) * sin(table3->TableAngle1) * table3->TableAngleMult; + Angle2 = sin(table3->TableAngle2) * sin(table3->TableAngle1) * table3->TableAngleMult; + auto angleMultArr = loader::query_float_attribute(groupIndex, 0, 701); + if (angleMultArr) + AngleMult = *angleMultArr; + else + AngleMult = 0.2f; + + table->XOffset = bmp->XPosition; + table->YOffset = bmp->YPosition; + table->Width = bmp->Width; + table->Height = bmp->Height; + UnknownC7F = visual.Kicker.Unknown1F; + UnknownC6F = 15.0f; + + auto visArrPtr = visual.FloatArr; + Unknown1F = min(visArrPtr[0], min(visArrPtr[2], visArrPtr[4])); + Unknown2F = min(visArrPtr[1], min(visArrPtr[3], visArrPtr[5])); + Unknown3F = max(visArrPtr[0], max(visArrPtr[2], visArrPtr[4])); + Unknown4F = max(visArrPtr[1], max(visArrPtr[3], visArrPtr[5])); + auto a2 = Unknown4F - Unknown2F; + auto a1 = Unknown3F - Unknown1F; + edge_manager = new TEdgeManager(Unknown1F, Unknown2F, a1, a2); + + for (auto visFloatArrCount = visual.FloatArrCount; visFloatArrCount > 0; visFloatArrCount--) + { + auto line = new TLine(this, + &UnknownBaseFlag2, + visual.Flag, + visArrPtr[2], + visArrPtr[3], + visArrPtr[0], + visArrPtr[1]); + if (line) + { + line->place_in_grid(); + EdgeList->Add(line); + } + + visArrPtr += 2; + } + + Field.Unknown1 = -1; + Field.Flag2Ptr = &UnknownBaseFlag2; + Field.CollisionComp = this; + TEdgeManager::edges_insert_square(Unknown2F, Unknown1F, Unknown4F, Unknown3F, nullptr, + &Field); +} + +TTableLayer::~TTableLayer() +{ + if (edge_manager) + delete edge_manager; +} diff --git a/SpaceCadetPinball/TTableLayer.h b/SpaceCadetPinball/TTableLayer.h index 70ba35c..dd9d88c 100644 --- a/SpaceCadetPinball/TTableLayer.h +++ b/SpaceCadetPinball/TTableLayer.h @@ -1,11 +1,27 @@ #pragma once #include "TCollisionComponent.h" +#include "TEdgeManager.h" + + + class TTableLayer : public TCollisionComponent { public: - TTableLayer(TPinballTable* table) : TCollisionComponent(table, -1, false) - { - } + static TEdgeManager *edge_manager; + + TTableLayer(TPinballTable* table); + ~TTableLayer() override; + + gdrv_bitmap8* VisBmp; + float Unknown1F; + float Unknown2F; + float Unknown3F; + float Unknown4F; + float Angle1; + float Angle2; + int Unknown7; + float AngleMult; + field_effect_type Field; }; diff --git a/SpaceCadetPinball/loader.cpp b/SpaceCadetPinball/loader.cpp index cb4eb14..79bf608 100644 --- a/SpaceCadetPinball/loader.cpp +++ b/SpaceCadetPinball/loader.cpp @@ -88,7 +88,7 @@ void loader::default_vsi(visualStruct* visual) visual->Kicker.SoundIndex = 0; visual->Unknown1F = 0.94999999f; visual->Unknown2F = 0.60000002f; - visual->FloatArrSizeDiv8Sub2 = 0; + visual->FloatArrCount = 0; visual->SoundIndex2 = 0; visual->Bitmap = 0; visual->ZMap = 0; @@ -545,23 +545,23 @@ LABEL_33: nextFloatVal = floatArr + 1; if (*floatArr != 600.0) return 0; - visual2->FloatArrSizeDiv8Sub2 = (partman::field_size(loader_table, groupIndexSum3, datFieldTypes::FloatArray) >> 2)/ 2- 2; + visual2->FloatArrCount = (partman::field_size(loader_table, groupIndexSum3, datFieldTypes::FloatArray) >> 2)/ 2- 2; floatVal = (__int64)(floor(*nextFloatVal) - 1.0); floatArrPtr = nextFloatVal + 1; if ((int)floatVal) { if ((int)floatVal == 1) { - visual2->FloatArrSizeDiv8Sub2 = 2; + visual2->FloatArrCount = 2; } - else if ((int)floatVal != visual2->FloatArrSizeDiv8Sub2) + else if ((int)floatVal != visual2->FloatArrCount) { return error(8, 18); } } else { - visual2->FloatArrSizeDiv8Sub2 = 1; + visual2->FloatArrCount = 1; } visual2->FloatArr = floatArrPtr; return 0; diff --git a/SpaceCadetPinball/loader.h b/SpaceCadetPinball/loader.h index 8fdd3af..ed50d8d 100644 --- a/SpaceCadetPinball/loader.h +++ b/SpaceCadetPinball/loader.h @@ -37,7 +37,7 @@ struct __declspec(align(4)) visualStruct { float Unknown1F; float Unknown2F; - int FloatArrSizeDiv8Sub2; + int FloatArrCount; float* FloatArr; int SoundIndex2; visualKickerStruct Kicker;