TPinballTable v2.

This commit is contained in:
oz
2020-12-25 16:46:06 +03:00
parent 3097edf526
commit 99fba56a34
18 changed files with 576 additions and 127 deletions

1
.gitignore vendored
View File

@@ -259,3 +259,4 @@ paket-files/
# Python Tools for Visual Studio (PTVS) # Python Tools for Visual Studio (PTVS)
__pycache__/ __pycache__/
*.pyc *.pyc
/Ida

Binary file not shown.

View File

@@ -39,3 +39,17 @@ int Sound::AddFactor(int a1, int a2)
{ {
return a1 + a2; return a1 + a2;
} }
void Sound::PlaySoundA(int a1, int a2, int a3, unsigned short a4, short a5)
{
}
CHAR* Sound::LoadWaveFile(LPCSTR lpName)
{
return nullptr;
}
LPCVOID Sound::FreeSound(LPCVOID pMem)
{
return nullptr;
}

View File

@@ -11,4 +11,7 @@ public:
static void Close(); static void Close();
static int SubFactor(int a1, int a2); static int SubFactor(int a1, int a2);
static int AddFactor(int a1, int a2); static int AddFactor(int a1, int a2);
static void PlaySound(int a1, int a2, int a3, unsigned __int16 a4, __int16 a5);
static CHAR* LoadWaveFile(LPCSTR lpName);
static LPCVOID FreeSound(LPCVOID pMem);
}; };

View File

@@ -1,2 +1,10 @@
#include "pch.h" #include "pch.h"
#include "TDemo.h" #include "TDemo.h"
#include "TPinballTable.h"
TDemo::TDemo(TPinballTable* table, int groupIndex)
: TCollisionComponent(table, groupIndex, false)
{
table->Demo = this;
}

View File

@@ -5,7 +5,5 @@ class TDemo :
public TCollisionComponent public TCollisionComponent
{ {
public: public:
TDemo(TPinballTable* table, int groupIndex) : TCollisionComponent(table, groupIndex, false) TDemo(TPinballTable* table, int groupIndex);
{
}
}; };

View File

@@ -1,10 +1,13 @@
#pragma once #pragma once
#include "control.h" struct render_sprite_type_struct;
#include "render.h" struct component_control;
#include "TZmapList.h"
class TPinballTable; class TPinballTable;
class TZmapList;
enum class message_code
{
};
class TPinballComponent class TPinballComponent
{ {
@@ -16,7 +19,6 @@ public:
virtual void put_scoring(int scoreId, int value); virtual void put_scoring(int scoreId, int value);
virtual int get_scoring(int score1); virtual int get_scoring(int score1);
int VfTable;
__int8 UnknownBaseFlag1; __int8 UnknownBaseFlag1;
__int8 UnknownBaseFlag2; __int8 UnknownBaseFlag2;
int MessageField; int MessageField;

File diff suppressed because it is too large Load Diff

View File

@@ -1,11 +1,26 @@
#pragma once #pragma once
#include "objlist_class.h"
#include "score.h"
#include "TDrain.h"
#include "TFlipper.h"
#include "TLightGroup.h"
#include "TPinballComponent.h" #include "TPinballComponent.h"
#include "TPlunger.h"
struct scoreStruct;
class TFlipper;
class TPlunger;
class TDrain;
class TDemo;
class objlist_class;
class TLightGroup;
struct score_struct_super
{
scoreStruct* ScoreStruct;
int Score;
int ScoreE9Part;
int Unknown2;
int BallCount;
int ExtraBalls;
int BallLockedCounter;
};
class TPinballTable : public TPinballComponent class TPinballTable : public TPinballComponent
{ {
@@ -14,56 +29,38 @@ public:
~TPinballTable(); ~TPinballTable();
TPinballComponent* find_component(LPCSTR componentName); TPinballComponent* find_component(LPCSTR componentName);
TPinballComponent* find_component(int groupIndex); TPinballComponent* find_component(int groupIndex);
int AddScore(int score);
void ChangeBallCount(int count);
void tilt(float time);
void port_draw() override; void port_draw() override;
int Message(int code, float value) override;
static void EndGame_timeout(int timerId, void* caller);
static void LightShow_timeout(int timerId, void* caller);
static void replay_timer_callback(int timerId, void* caller);
static void tilt_timeout(int timerId, void* caller);
TFlipper* FlipperL; TFlipper* FlipperL;
TFlipper* FlipperR; TFlipper* FlipperR;
scoreStruct* Score1; scoreStruct* CurScoreStruct;
int* ScoreBallcount; scoreStruct* ScoreBallcount;
int* ScorePlayerNumber1; scoreStruct* ScorePlayerNumber1;
int UnknownP6; int UnknownP6;
int SoundIndex1; int SoundIndex1;
int SoundIndex2; int SoundIndex2;
int SoundIndex3; int SoundIndex3;
int UnknownP10; int UnknownP10;
int UnknownP11; int CurScore;
int UnknownP12; int CurScoreE9;
int UnknownP13; int LightShowTimer;
int UnknownP14; int EndGameTimeoutTimer;
int UnknownP15; int TiltTimeoutTimer;
scoreStruct* Score2; score_struct_super PlayerScores[4];
int UnknownP17;
int UnknownP18;
int UnknownP19;
int UnknownP20;
int UnknownP21;
int UnknownP22;
scoreStruct* Score3_x3_at7;
int UnknownP24;
int UnknownP25;
int UnknownP26;
int UnknownP27;
int UnknownP28;
int UnknownP29;
int UnknownP30;
int UnknownP31;
int UnknownP32;
int UnknownP33;
int UnknownP34;
int UnknownP35;
int UnknownP36;
int UnknownP37;
int UnknownP38;
int UnknownP39;
int UnknownP40;
int UnknownP41;
int UnknownP42;
int UnknownP43;
int PlayerCount; int PlayerCount;
int CurrentPlayer; int CurrentPlayer;
TPlunger* Plunger; TPlunger* Plunger;
TDrain* Drain; TDrain* Drain;
int UnknownP48; TDemo* Demo;
int XOffset; int XOffset;
int YOffset; int YOffset;
int Width; int Width;
@@ -77,24 +74,27 @@ public:
float CollisionCompOffset; float CollisionCompOffset;
int UnknownP62; int UnknownP62;
int UnknownP63; int UnknownP63;
int UnknownP64; int ScoreMultiplier;
int UnknownP65; int ScoreAdded;
int UnknownP66; int ScoreSpecial1;
int UnknownP67; int ScoreSpecial2;
int UnknownP68; int ScoreSpecial2Flag;
int UnknownP69; int ScoreSpecial3;
int UnknownP70; int ScoreSpecial3Flag;
int UnknownP71; int UnknownP71;
int UnknownP72; int BallCount;
int UnknownP73; int MaxBallCount;
int UnknownP74; int ExtraBalls;
int UnknownP75; int UnknownP75;
int UnknownP76; int BallLockedCounter;
int UnknownP77; int MultiballFlag;
int UnknownP78; int UnknownP78;
int UnknownP79; int ReplayActiveFlag;
int UnknownP80; int ReplayTimer;
int UnknownP81; int UnknownP81;
int UnknownP82; int UnknownP82;
int UnknownP83; int TiltLockFlag;
private:
static int score_multipliers[5];
}; };

View File

@@ -3,6 +3,7 @@
#include "loader.h" #include "loader.h"
#include "proj.h" #include "proj.h"
#include "render.h"
#include "TLine.h" #include "TLine.h"
#include "TPinballTable.h" #include "TPinballTable.h"

View File

@@ -3,13 +3,15 @@
#include "TEdgeManager.h" #include "TEdgeManager.h"
class TPinballTable;
class TEdgeManager;
struct gdrv_bitmap8;
class TTableLayer : class TTableLayer :
public TCollisionComponent public TCollisionComponent
{ {
public: public:
static TEdgeManager *edge_manager; static TEdgeManager* edge_manager;
TTableLayer(TPinballTable* table); TTableLayer(TPinballTable* table);
~TTableLayer() override; ~TTableLayer() override;

View File

@@ -1,6 +1,9 @@
#include "pch.h" #include "pch.h"
#include "TTextBox.h" #include "TTextBox.h"
#include "control.h"
#include "loader.h" #include "loader.h"
#include "render.h"
#include "score.h" #include "score.h"
#include "timer.h" #include "timer.h"

View File

@@ -1,5 +1,7 @@
#include "pch.h" #include "pch.h"
#include "control.h" #include "control.h"
#include "objlist_class.h"
#include "TPinballTable.h" #include "TPinballTable.h"
int control_bump_scores1[] = {500, 1000, 1500, 2000}; int control_bump_scores1[] = {500, 1000, 1500, 2000};
@@ -500,6 +502,8 @@ component_tag* control::simple_components[142]
&control_soundwave7_tag &control_soundwave7_tag
}; };
int control::table_control_flag;
void control::make_links(TPinballTable* table) void control::make_links(TPinballTable* table)
{ {
@@ -558,7 +562,8 @@ void control::handler(int code, TPinballComponent* cmp)
{ {
cmp->put_scoring(scoreInd, control->Scores[scoreInd]); cmp->put_scoring(scoreInd, control->Scores[scoreInd]);
++scoreInd; ++scoreInd;
} while (scoreInd < control->ScoreCount); }
while (scoreInd < control->ScoreCount);
} }
control->ControlFunc(code, cmp); control->ControlFunc(code, cmp);
} }
@@ -796,3 +801,12 @@ void control::MultiplierTargetControl(int code, TPinballComponent* caller)
void control::BallDrainControl(int code, TPinballComponent* caller) void control::BallDrainControl(int code, TPinballComponent* caller)
{ {
} }
void control::table_control_handler(int code)
{
if (code == 1011)
{
table_control_flag = 0;
control_lite77_tag.Component->Message(7, 0.0);
}
}

View File

@@ -30,6 +30,7 @@ public:
static TPinballTable* TableG; static TPinballTable* TableG;
static component_info score_components[88]; static component_info score_components[88];
static component_tag* simple_components[142]; static component_tag* simple_components[142];
static int table_control_flag;
static void make_links(TPinballTable* table); static void make_links(TPinballTable* table);
static TPinballComponent* make_component_link(component_tag* tag); static TPinballComponent* make_component_link(component_tag* tag);
@@ -93,4 +94,6 @@ public:
static void MedalTargetControl(int code, TPinballComponent* caller); static void MedalTargetControl(int code, TPinballComponent* caller);
static void MultiplierTargetControl(int code, TPinballComponent* caller); static void MultiplierTargetControl(int code, TPinballComponent* caller);
static void BallDrainControl(int code, TPinballComponent* caller); static void BallDrainControl(int code, TPinballComponent* caller);
static void table_control_handler(int code);
}; };

View File

@@ -3,6 +3,7 @@
#include "memory.h" #include "memory.h"
#include "partman.h" #include "partman.h"
#include "pinball.h" #include "pinball.h"
#include "Sound.h"
#include "zdrv.h" #include "zdrv.h"
@@ -132,7 +133,7 @@ void loader::unload()
soundListStruct* soundListPtr = &sound_list[1]; soundListStruct* soundListPtr = &sound_list[1];
do do
{ {
//Sound_FreeSound(soundListPtr->WavePtr); Sound::FreeSound(soundListPtr->WavePtr);
++index; ++index;
++soundListPtr; ++soundListPtr;
} }
@@ -166,7 +167,7 @@ int loader::get_sound_id(int groupIndex)
if (!sound_list[soundIndex].Loaded && !sound_list[soundIndex].WavePtr) if (!sound_list[soundIndex].Loaded && !sound_list[soundIndex].WavePtr)
{ {
int soundGroupId = sound_list[soundIndex].GroupIndex; int soundGroupId = sound_list[soundIndex].GroupIndex;
sound_list[soundIndex].Volume = 0.0; sound_list[soundIndex].Duration = 0.0;
if (soundGroupId > 0 && !pinball::quickFlag) if (soundGroupId > 0 && !pinball::quickFlag)
{ {
__int16* value = (__int16*)partman::field(loader_table, soundGroupId, datFieldTypes::ShortValue); __int16* value = (__int16*)partman::field(loader_table, soundGroupId, datFieldTypes::ShortValue);
@@ -174,9 +175,9 @@ int loader::get_sound_id(int groupIndex)
{ {
const CHAR* fileName = partman::field(loader_table, soundGroupId, datFieldTypes::String); const CHAR* fileName = partman::field(loader_table, soundGroupId, datFieldTypes::String);
HFILE hFile = _lopen(fileName, 0); HFILE hFile = _lopen(fileName, 0);
sound_list[soundIndex].Volume = (float)((double)(_llseek(hFile, 0, 2)) * 0.0000909090909090909); sound_list[soundIndex].Duration = (float)((double)_llseek(hFile, 0, 2) * 0.0000909090909090909);
_lclose(hFile); _lclose(hFile);
//sound_list[soundIndex4].WavePtr = Sound_LoadWaveFile(lpName); sound_list[soundIndex].WavePtr = Sound::LoadWaveFile(fileName);
} }
} }
} }
@@ -320,12 +321,12 @@ int loader::material(int groupIndex, visualStruct* visual)
} }
double loader::play_sound(int soundIndex) float loader::play_sound(int soundIndex)
{ {
if (soundIndex <= 0) if (soundIndex <= 0)
return 0.0; return 0.0;
//Sound_PlaySound(sound_list[soundIndex].WavePtr, 0, 7, 5, 0); Sound::PlaySound((int)sound_list[soundIndex].WavePtr, 0, 7, 5, 0);
return sound_list[soundIndex].Volume; return sound_list[soundIndex].Duration;
} }
int loader::state_id(int groupIndex, int groupIndexOffset) int loader::state_id(int groupIndex, int groupIndexOffset)

View File

@@ -16,7 +16,7 @@ struct soundListStruct
char* WavePtr; char* WavePtr;
int GroupIndex; int GroupIndex;
int Loaded; int Loaded;
float Volume; float Duration;
char* PtrToSmth; char* PtrToSmth;
}; };
@@ -66,7 +66,7 @@ public:
static char* query_name(int groupIndex); static char* query_name(int groupIndex);
static float* query_float_attribute(int groupIndex, int groupIndexOffset, int firstValue); static float* query_float_attribute(int groupIndex, int groupIndexOffset, int firstValue);
static __int16* query_iattribute(int groupIndex, int firstValue, int* arraySize); static __int16* query_iattribute(int groupIndex, int firstValue, int* arraySize);
static double play_sound(int soundIndex); static float play_sound(int soundIndex);
static datFileStruct* loader_table; static datFileStruct* loader_table;
private: private:
static errorMsg loader_errors[]; static errorMsg loader_errors[];

View File

@@ -13,6 +13,8 @@
#include "timer.h" #include "timer.h"
#include "winmain.h" #include "winmain.h"
#include "resource.h" #include "resource.h"
#include "TLightGroup.h"
#include "TPlunger.h"
TPinballTable* pb::MainTable = nullptr; TPinballTable* pb::MainTable = nullptr;
datFileStruct* pb::record_table = nullptr; datFileStruct* pb::record_table = nullptr;
@@ -355,19 +357,19 @@ void pb::keydown(int key)
} }
if (key == options::Options.LeftTableBumpKey) if (key == options::Options.LeftTableBumpKey)
{ {
if (!MainTable->UnknownP83) if (!MainTable->TiltLockFlag)
nudge::nudge_right(); nudge::nudge_right();
return; return;
} }
if (key == options::Options.RightTableBumpKey) if (key == options::Options.RightTableBumpKey)
{ {
if (!MainTable->UnknownP83) if (!MainTable->TiltLockFlag)
nudge::nudge_left(); nudge::nudge_left();
return; return;
} }
if (key == options::Options.BottomTableBumpKey) if (key == options::Options.BottomTableBumpKey)
{ {
if (!MainTable->UnknownP83) if (!MainTable->TiltLockFlag)
nudge::nudge_up(); nudge::nudge_up();
return; return;
} }

View File

@@ -3,6 +3,7 @@
#include "loader.h" #include "loader.h"
#include "memory.h" #include "memory.h"
#include "partman.h" #include "partman.h"
#include "render.h"
#include "TDrain.h" #include "TDrain.h"
#include "winmain.h" #include "winmain.h"
@@ -15,12 +16,13 @@ int score::init()
scoreStruct* score::create(LPCSTR fieldName, gdrv_bitmap8* renderBgBmp) scoreStruct* score::create(LPCSTR fieldName, gdrv_bitmap8* renderBgBmp)
{ {
scoreStruct* score = (scoreStruct*)memory::allocate(sizeof(scoreStruct)); auto score = reinterpret_cast<scoreStruct*>(memory::allocate(sizeof(scoreStruct)));
if (!score) if (!score)
return nullptr; return nullptr;
score->Score = -9999; score->Score = -9999;
score->BackgroundBmp = renderBgBmp; score->BackgroundBmp = renderBgBmp;
__int16* shortArr = (__int16*)partman::field_labeled(loader::loader_table, fieldName, datFieldTypes::ShortArray); auto shortArr = reinterpret_cast<__int16*>(partman::field_labeled(loader::loader_table, fieldName,
datFieldTypes::ShortArray));
if (!shortArr) if (!shortArr)
{ {
memory::free(score); memory::free(score);