1 #pragma once
2 
3 #include "TPinballComponent.h"
4 
5 class TBall;
6 struct scoreStruct;
7 class TFlipper;
8 class TPlunger;
9 class TDrain;
10 class TDemo;
11 class TLightGroup;
12 
13 struct score_struct_super
14 {
15 	scoreStruct* ScoreStruct;
16 	int Score;
17 	int ScoreE9Part;
18 	int Unknown2;
19 	int BallCount;
20 	int ExtraBalls;
21 	int BallLockedCounter;
22 };
23 
24 
25 class TPinballTable : public TPinballComponent
26 {
27 public:
28 	TPinballTable();
29 	~TPinballTable() override;
30 	TPinballComponent* find_component(LPCSTR componentName);
31 	TPinballComponent* find_component(int groupIndex);
32 	int AddScore(int score);
33 	void ChangeBallCount(int count);
34 	void tilt(float time);
35 	void port_draw() override;
36 	int Message(int code, float value) override;
37 
38 	static void EndGame_timeout(int timerId, void* caller);
39 	static void LightShow_timeout(int timerId, void* caller);
40 	static void replay_timer_callback(int timerId, void* caller);
41 	static void tilt_timeout(int timerId, void* caller);
42 
43 	TFlipper* FlipperL;
44 	TFlipper* FlipperR;
45 	scoreStruct* CurScoreStruct;
46 	scoreStruct* ScoreBallcount;
47 	scoreStruct* ScorePlayerNumber1;
48 	int CheatsUsed{};
49 	int SoundIndex1{};
50 	int SoundIndex2{};
51 	int SoundIndex3{};
52 	int BallInSink;
53 	int CurScore{};
54 	int CurScoreE9{};
55 	int LightShowTimer;
56 	int EndGameTimeoutTimer;
57 	int TiltTimeoutTimer;
58 	score_struct_super PlayerScores[4]{};
59 	int PlayerCount;
60 	int CurrentPlayer;
61 	TPlunger* Plunger;
62 	TDrain* Drain;
63 	TDemo* Demo{};
64 	int XOffset{};
65 	int YOffset{};
66 	int Width{};
67 	int Height{};
68 	std::vector<TPinballComponent*> ComponentList;
69 	std::vector<TBall*> BallList;
70 	TLightGroup* LightGroup;
71 	float GravityDirVectMult{};
72 	float GravityAngleX{};
73 	float GravityAnglY{};
74 	float CollisionCompOffset{};
75 	float PlungerPositionX{};
76 	float PlungerPositionY{};
77 	int ScoreMultiplier{};
78 	int ScoreAdded{};
79 	int ScoreSpecial1{};
80 	int ScoreSpecial2{};
81 	int ScoreSpecial2Flag{};
82 	int ScoreSpecial3{};
83 	int ScoreSpecial3Flag{};
84 	int UnknownP71{};
85 	int BallCount{};
86 	int MaxBallCount;
87 	int ExtraBalls{};
88 	int UnknownP75{};
89 	int BallLockedCounter{};
90 	int MultiballFlag;
91 	int UnknownP78{};
92 	int ReplayActiveFlag{};
93 	int ReplayTimer;
94 	int UnknownP81{};
95 	int UnknownP82{};
96 	int TiltLockFlag;
97 
98 private:
99 	static int score_multipliers[5];
100 };
101