ScummVM API documentation
game_spacepirates.h
1 /* ScummVM - Graphic Adventure Engine
2  *
3  * ScummVM is the legal property of its developers, whose names
4  * are too numerous to list here. Please refer to the COPYRIGHT
5  * file distributed with this source distribution.
6  *
7  * This program is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation, either version 3 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  *
20  */
21 
22 #ifndef ALG_GAME_SPACEPIRATES_H
23 #define ALG_GAME_SPACEPIRATES_H
24 
25 #include "common/hashmap.h"
26 #include "common/rect.h"
27 
28 #include "gui/debugger.h"
29 
30 #include "alg/game.h"
31 #include "alg/scene.h"
32 
33 namespace Alg {
34 
35 typedef Common::Functor1Mem<Scene *, void, GameSpacePirates> SPScriptFunctionScene;
36 typedef Common::Functor1Mem<Rect *, void, GameSpacePirates> SPScriptFunctionRect;
37 typedef Common::HashMap<Common::String, SPScriptFunctionScene *> SPScriptFunctionSceneMap;
38 typedef Common::HashMap<Common::String, SPScriptFunctionRect *> SPScriptFunctionRectMap;
39 
40 class GameSpacePirates : public Game {
41 
42  enum SceneFuncType {
43  PREOP = 1,
44  SHOWMSG = 2,
45  INSOP = 3,
46  WEPDWN = 4,
47  SCNSCR = 5,
48  NXTFRM = 6,
49  NXTSCN = 7,
50  MISSEDRECTS = 8
51  };
52 
53 public:
55  ~GameSpacePirates() override;
56  Common::Error run() override;
57  void debug_warpTo(int val);
58 
59 private:
60  void init() override;
61  void registerScriptFunctions();
62  void verifyScriptFunctions();
63  void unregisterScriptFunctions();
64  void fixScriptBugs();
65  SPScriptFunctionRect getScriptFunctionRectHit(Common::String name);
66  SPScriptFunctionScene getScriptFunctionScene(SceneFuncType type, Common::String name);
67  void callScriptFunctionRectHit(Common::String name, Rect *rect);
68  void callScriptFunctionScene(SceneFuncType type, Common::String name, Scene *scene);
69 
70  SPScriptFunctionRectMap _rectHitFuncs;
71  SPScriptFunctionSceneMap _scenePreOps;
72  SPScriptFunctionSceneMap _sceneShowMsg;
73  SPScriptFunctionSceneMap _sceneInsOps;
74  SPScriptFunctionSceneMap _sceneWepDwn;
75  SPScriptFunctionSceneMap _sceneScnScr;
76  SPScriptFunctionSceneMap _sceneNxtFrm;
77  SPScriptFunctionSceneMap _sceneNxtScn;
78  SPScriptFunctionSceneMap _sceneMissedRects;
79 
80  // images
81  Graphics::Surface *_shotIcon = nullptr;
82  Graphics::Surface *_emptyIcon = nullptr;
83  Graphics::Surface *_deadIcon = nullptr;
84  Graphics::Surface *_liveIcon1 = nullptr;
85  Graphics::Surface *_liveIcon2 = nullptr;
86  Graphics::Surface *_liveIcon3 = nullptr;
87  Graphics::Surface *_difficultyIcon = nullptr;
88  Graphics::Surface *_bulletholeIcon = nullptr;
89  Common::Array<Graphics::Surface *> *_gun = nullptr;
90  Common::Array<Graphics::Surface *> *_numbers = nullptr;
91 
92  // sounds
93  Audio::SeekableAudioStream *_saveSound = nullptr;
94  Audio::SeekableAudioStream *_loadSound = nullptr;
95  Audio::SeekableAudioStream *_difficultySound = nullptr;
96  Audio::SeekableAudioStream *_skullSound = nullptr;
97  Audio::SeekableAudioStream *_shotSound = nullptr;
98  Audio::SeekableAudioStream *_emptySound = nullptr;
99 
100  // constants
101 
102  // gamestate
103  uint8 _difficulty = 1;
104  uint8 _oldDifficulty = 1;
105  bool _holster = false;
106  int8 _lives = 0;
107  int8 _oldLives = 0;
108  int32 _score = 0;
109  int32 _oldScore = -1;
110  uint16 _shots = 0;
111  uint8 _oldShots = 0;
112  uint8 _whichGun = 0;
113  uint8 _oldWhichGun = 0xFF;
114 
115  bool _gameLoaded = false;
116  int8 _livesLoaded = 0;
117  uint16 _shotsLoaded = 0;
118  int32 _scoreLoaded = 0;
119  uint8 _difficultyLoaded = 0;
120  bool _nextSceneFound = false;
121  bool _playerDied = false;
122  int16 _randomPicked = -1;
123  uint32 _lastExtraLifeScore = 0;
124  uint16 _randomScenesValues[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
125  uint8 _randomScenesUsed[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
126  uint8 _maxRandom = 0;
127  uint8 _randomCount = 0;
128  uint8 _randomCountAsteroids = 0;
129  uint8 _randomCountMidship = 0;
130  uint8 _miscRoomsCount = 0;
131  uint16 _pickedMiscRooms = 0;
132  uint16 _gotTo = 0;
133  int8 _currentWorld = 0;
134  uint16 _worldGotTo[4] = {0, 0, 0, 0};
135  bool _worldDone[4] = {false, false, false, false};
136  bool _selectedAWorld = false;
137  uint16 _selectedWorldStart = 0;
138  uint16 _sceneBeforeFlyingSkulls = 0;
139  uint8 _shotGrinReaperCount = 0;
140  uint16 _clue = 0;
141  uint8 _shotColor = 0;
142  uint8 _shotDirection = 0;
143  uint8 _crystalsShot = 0;
144  uint8 _crystalState = 0;
145  uint16 _pickedStartSplitter = 0;
146  bool _targetPracticeReset = false;
147 
148  // base functions
149  void newGame();
150  void resetParams();
151  void doMenu();
152  void changeDifficulty(uint8 newDifficulty);
153  void showDifficulty(uint8 newDifficulty, bool updateCursor);
154  void updateCursor();
155  void updateMouse();
156  void moveMouse();
157  void displayLivesLeft();
158  void displayScores();
159  void displayShotsLeft();
160  bool weaponDown();
161  bool saveState(Common::OutSaveFile *saveFile) override;
162  bool loadState(Common::InSaveFile *inSaveFile) override;
163  Zone *checkZones(Scene *scene, Rect *&hitRect, Common::Point *point);
164 
165  // misc game functions
166  void playErrorSound();
167  void displayShotFiredImage();
168  void displayShotFiredImage(Common::Point *point);
169  void displayShotLine(uint16 startX, uint16 startY, uint16 endX, uint16 endY);
170  void displayMultipleShotLines();
171  void enableVideoFadeIn();
172  uint16 sceneToNumber(Common::String sceneName);
173  uint16 randomUnusedScene(uint8 max);
174  uint16 randomNumberInRange(uint16 min, uint16 max);
175  uint16 pickCrystalScene(uint16 scene1, uint16 scene2, uint16 scene3);
176 
177  // Script functions: RectHit
178  void rectNewScene(Rect *rect);
179  void rectShotMenu(Rect *rect);
180  void rectSave(Rect *rect);
181  void rectLoad(Rect *rect);
182  void rectContinue(Rect *rect);
183  void rectStart(Rect *rect);
184  void rectEasy(Rect *rect);
185  void rectAverage(Rect *rect);
186  void rectHard(Rect *rect);
187  void rectExit(Rect *rect);
188  void rectDefault(Rect *rect);
189  void rectKillInnocentPerson(Rect *rect);
190  void rectContinueJunkRings(Rect *rect);
191  void rectShotGrinReaper(Rect *rect);
192  void rectShowMadDog(Rect *rect);
193  void rectPottWorldShowCrystal(Rect *rect);
194  void rectShotLeft(Rect *rect);
195  void rectShotRight(Rect *rect);
196  void rectShotGold(Rect *rect);
197  void rectShotSilver(Rect *rect);
198  void rectSelectedDuneWorld(Rect *rect);
199  void rectSelectedJunkWorld(Rect *rect);
200  void rectSelectedDragonsTeethWorld(Rect *rect);
201  void rectSelectedVolcanoWorld(Rect *rect);
202  void rectShotRedDeathGrip(Rect *rect);
203  void rectShotBlueDeathGrip(Rect *rect);
204  void rectShotGreenDeathGrip(Rect *rect);
205  void rectShotYellow(Rect *rect);
206  void rectShotBlue(Rect *rect);
207  void rectShotRedCrystal(Rect *rect);
208  void rectShotBlueCrystal(Rect *rect);
209  void rectShotGreenCrystal(Rect *rect);
210  void rectShotBlackDragon1(Rect *rect);
211  void rectShotBlackDragon2(Rect *rect);
212  void rectShotBlackDragon3(Rect *rect);
213  void rectDoFlyingSkull(Rect *rect);
214  void rectSkipScene(Rect *rect);
215  void rectHitPirateShip(Rect *rect);
216 
217  // Script functions: Scene PreOps
218  void scenePsoFadeInVideo(Scene *scene);
219  void scenePsoSetGotTo(Scene *scene);
220  void scenePsoSetGotToNoFadeIn(Scene *scene);
221  void scenePsoSetWorldGotTo(Scene *scene);
222 
223  // Script functions: Scene InsOps
224  void sceneIsoPickAWorld(Scene *scene);
225  void sceneIsoSetWorldGotTo(Scene *scene);
226 
227  // Script functions: Scene NxtScn
228  void sceneNxtscnGotChewedOut(Scene *scene);
229  void sceneNxtscnRestartFromLast(Scene *scene);
230  void sceneNxtscnPlayerDied(Scene *scene);
231  void sceneNxtscnMiscRooms1(Scene *scene);
232  void sceneNxtscnPickDungeonClue(Scene *scene);
233  void sceneNxtscnContinueDungeonClue(Scene *scene);
234  void sceneNxtscnStartMidshipRandomScene(Scene *scene);
235  void sceneNxtscnContinueMidshipRandomScene(Scene *scene);
236  void sceneNxtscnShowDeathGripBeamColor(Scene *scene);
237  void sceneNxtscnSelectAsteroids(Scene *scene);
238  void sceneNxtscnAsteroidsDone(Scene *scene);
239  void sceneNxtscnDoFlyingSkulls(Scene *scene);
240  void sceneNxtscnDidFlyingSkulls(Scene *scene);
241  void sceneNxtscnShowWhichStartSplitter(Scene *scene);
242  void sceneNxtscnGotoSelectedWorld(Scene *scene);
243  void sceneNxtscnStartVolcanoPopup(Scene *scene);
244  void sceneNxtscnContinueVolcanoPopup(Scene *scene);
245  void sceneNxtscnGiveFalinaClue(Scene *scene);
246  void sceneNxtscnCheckFalinaClues(Scene *scene);
247  void sceneNxtscnSetupFalinaTargetPractice(Scene *scene);
248  void sceneNxtscnContinueFalinaTargetPractice(Scene *scene);
249  void sceneNxtscnStartDunePopup(Scene *scene);
250  void sceneNxtscnContinueDunePopup(Scene *scene);
251  void sceneNxtscnPottOrPanShoots(Scene *scene);
252  void sceneNxtscnSetupPottTargetPractice(Scene *scene);
253  void sceneNxtscnContinuePottTargetPractice(Scene *scene);
254  void sceneNxtscnStartDragonsTeethPopup(Scene *scene);
255  void sceneNxtscnContinueDragonsTeethPopup(Scene *scene);
256  void sceneNxtscnGrinReaperClue(Scene *scene);
257  void sceneNxtscnStartGrinReaper(Scene *scene);
258  void sceneNxtscnContinueGrinReaper(Scene *scene);
259  void sceneNxtscnGrinTargetPractice(Scene *scene);
260  void sceneNxtscnContinueGrinTargetPractice(Scene *scene);
261  void sceneNxtscnStartJunkWorld(Scene *scene);
262  void sceneNxtscnContinueJunkWorld(Scene *scene);
263  void sceneNxtscnStartJunkRings(Scene *scene);
264  void sceneNxtscnShowJunkWorldCrystal(Scene *scene);
265  void sceneNxtscnStartJunkWorldTargetPractice(Scene *scene);
266  void sceneNxtscnContinueJunkWorldTargetPractice(Scene *scene);
267  void sceneNxtscnAreAllWorldsDone(Scene *scene);
268  void sceneNxtscnStartPracticePirateShip(Scene *scene);
269  void sceneNxtscnMorePracticePirateShip(Scene *scene);
270  void sceneNxtscnPlayerWon(Scene *scene);
271 
272  // Script functions: MissedRect
273  void sceneMissedRectsDefault(Scene *scene);
274  void sceneMissedRectsMissedPirateShip(Scene *scene);
275 
276  // Script functions: Scene WepDwn
277  void sceneDefaultWepdwn(Scene *scene);
278 
279  // Script functions: ScnScr
280  void sceneDefaultScore(Scene *scene);
281 };
282 
284 public:
286  bool cmdWarpTo(int argc, const char **argv);
287  bool cmdDumpLib(int argc, const char **argv);
288 
289 private:
290  GameSpacePirates *_game;
291 };
292 
293 } // End of namespace Alg
294 
295 #endif
Definition: scene.h:72
Definition: scene.h:101
Definition: str.h:59
Definition: surface.h:67
Definition: savefile.h:54
Definition: error.h:81
Definition: debugger.h:41
Definition: stream.h:745
Definition: audiostream.h:212
Definition: game_spacepirates.h:40
Definition: alg.h:30
Definition: func.h:452
Definition: rect.h:144
Definition: game_spacepirates.h:283
Definition: scene.h:85
Definition: game.h:36
Definition: alg.h:46
Definition: detection.h:39