2 Copyright (C) 2004-2011 Parallel Realities
3 Copyright (C) 2011-2015 Perpendicular Dimensions
4 Copyright (C) 2011-2015 Perpendicular Dimensions
6 This program is free software; you can redistribute it and/or
7 modify it under the terms of the GNU General Public License
8 as published by the Free Software Foundation; either version 2
9 of the License, or (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15 See the GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
34 ReplayData replayData;
35 MedalServer medalServer;
37 Entity defEnemy[MAX_ENEMIES];
38 Entity defItem[MAX_ITEMS];
40 Weapon weapon[MAX_WEAPONS];
46 "Blob Wars, Episode I - Metal Blob Solid (Version %.2f, Release %d)\n"
47 "Copyright (C) 2004-2011 Parallel Realities\n"
48 "Copyright (C) 2011-2015 Perpendicular Dimensions\n"
49 "Licensed under the GNU General Public License (GPL)\n"
59 "The Metal Blob Solid gameplay manual can be found in,\n"
63 "\t-map <filename> Play the specified map (use -listmaps to see maps)\n"
64 "\t-record <filename> Record a game and output to the specified file\n"
65 "\t-playback <filename> Playback the specified recording\n"
66 "\t-listmaps List the available maps for playing\n"
69 "\tblobwars -map data/grasslands1 -record replay.dat\n"
70 "\tblobwars -playback replay.dat\n"
72 "Additional Commands\n"
73 "\t-fullscreen Start the game in Full Screen mode\n"
74 "\t-window Start the game in Window mode\n"
75 "\t-mono Use mono sound output instead of stereo\n"
76 "\t-noaudio Disables audio\n"
77 "\t-version Display version number\n"
78 "\t--help This help\n"
91 "\tdata/arcticWastes\n"
92 "\tdata/assimilator\n"
98 "\tdata/finalBattle\n"
99 "\tdata/floodedTunnel1\n"
100 "\tdata/floodedTunnel2\n"
101 "\tdata/floodedTunnel3\n"
102 "\tdata/floodedTunnel4\n"
103 "\tdata/grasslands1\n"
104 "\tdata/grasslands2\n"
105 "\tdata/grasslands3\n"
109 "\tdata/spaceStation\n"
120 int main(int argc, char *argv[])
123 debug(("Not Using PAK...\n"));
127 if (chdir(PAKLOCATION))
129 perror("Could not chdir to " PAKLOCATION ":");
134 config.engine = &engine;
138 bindtextdomain("blobwars", LOCALEDIR);
139 setlocale(LC_ALL, "");
140 textdomain("blobwars");
144 bool showSprites = false;
147 int recordMode = REPLAY_MODE::NONE;
148 int requiredSection = SECTION_INTRO;
152 for (int i = 1 ; i < argc ; i++)
154 if (strcmp(argv[i], "-fullscreen") == 0) engine.fullScreen = true;
155 else if (strcmp(argv[i], "-window") == 0) engine.fullScreen = false;
156 else if (strcmp(argv[i], "-noaudio") == 0) engine.useAudio = 0;
157 else if (strcmp(argv[i], "-mono") == 0) engine.useAudio = 1;
158 else if (strcmp(argv[i], "-version") == 0) {showVersion(); exit(0);}
159 else if (strcmp(argv[i], "--help") == 0) showHelp();
160 else if (strcmp(argv[i], "-record") == 0) {recordMode = REPLAY_MODE::RECORD; strlcpy(replayData.filename, argv[++i], sizeof replayData.filename);}
161 else if (strcmp(argv[i], "-playback") == 0) {recordMode = REPLAY_MODE::PLAYBACK; strlcpy(replayData.filename, argv[++i], sizeof replayData.filename);}
162 else if (strcmp(argv[i], "-map") == 0) {if (argc > i + 1) {game.setMapName(argv[++i]); requiredSection = SECTION_GAME;}}
163 else if (strcmp(argv[i], "-listmaps") == 0) listMaps();
164 else if (strcmp(argv[i], "-credits") == 0) requiredSection = SECTION_CREDITS;
167 else if (strcmp(argv[i], "-showsprites") == 0) showSprites = true;
168 else if (strcmp(argv[i], "-hub") == 0) hub = true;
169 else if (strcmp(argv[i], "-randomscreens") == 0) graphics.takeRandomScreenShots = true;
170 else if (strcmp(argv[i], "-nomonsters") == 0) engine.devNoMonsters = true;
173 else {fprintf(stderr, "Unknown argument '%s'\n", argv[i]); showHelp();}
178 case REPLAY_MODE::NONE:
182 case REPLAY_MODE::RECORD:
183 requiredSection = SECTION_GAME;
184 strlcpy(replayData.header.map, game.mapName, sizeof replayData.header.map);
185 replayData.header.skill = game.skill = 3;
186 replayData.setMode(REPLAY_MODE::RECORD);
189 case REPLAY_MODE::PLAYBACK:
190 requiredSection = SECTION_GAME;
191 replayData.setMode(REPLAY_MODE::PLAYBACK);
192 replayData.header.time = 0;
193 game.setMapName(replayData.header.map);
194 game.skill = replayData.header.skill;
200 // seed the random using the one generated
201 // via the replay data
202 Math::pSeed = replayData.header.randomSeed;
204 player.setName("Player");
208 engine.allowQuit = true;
212 requiredSection = SECTION_HUB;
219 game.hasAquaLung = game.hasJetPack = true;
229 switch (requiredSection)
232 requiredSection = doIntro();
236 requiredSection = title();
240 requiredSection = doHub();
244 if (!game.continueFromCheckPoint)
246 checkStartCutscene();
249 requiredSection = doGame();
252 case SECTION_GAMEOVER:
253 requiredSection = gameover();
256 case SECTION_EASYOVER:
260 requiredSection = SECTION_TITLE;
263 case SECTION_CREDITS:
265 requiredSection = SECTION_TITLE;