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.
31 "Blob Wars, Episode I - Metal Blob Solid (Version %.2f, Release %d)\n"
32 "Copyright (C) 2004-2011 Parallel Realities\n"
33 "Copyright (C) 2011-2015 Perpendicular Dimensions\n"
34 "Licensed under the GNU General Public License (GPL)\n"
44 "The Metal Blob Solid gameplay manual can be found in,\n"
48 "\t-map <filename> Play the specified map (use -listmaps to see maps)\n"
49 "\t-record <filename> Record a game and output to the specified file\n"
50 "\t-playback <filename> Playback the specified recording\n"
51 "\t-listmaps List the available maps for playing\n"
54 "\tblobwars -map data/grasslands1 -record replay.dat\n"
55 "\tblobwars -playback replay.dat\n"
57 "Additional Commands\n"
58 "\t-fullscreen Start the game in Full Screen mode\n"
59 "\t-window Start the game in Window mode\n"
60 "\t-mono Use mono sound output instead of stereo\n"
61 "\t-noaudio Disables audio\n"
62 "\t-version Display version number\n"
63 "\t--help This help\n"
76 "\tdata/arcticWastes\n"
77 "\tdata/assimilator\n"
83 "\tdata/finalBattle\n"
84 "\tdata/floodedTunnel1\n"
85 "\tdata/floodedTunnel2\n"
86 "\tdata/floodedTunnel3\n"
87 "\tdata/floodedTunnel4\n"
88 "\tdata/grasslands1\n"
89 "\tdata/grasslands2\n"
90 "\tdata/grasslands3\n"
94 "\tdata/spaceStation\n"
105 int main(int argc, char *argv[])
108 debug(("Not Using PAK...\n"));
112 if (chdir(PAKLOCATION))
114 perror("Could not chdir to " PAKLOCATION ":");
119 config.engine = &engine;
123 bindtextdomain("blobwars", LOCALEDIR);
124 setlocale(LC_ALL, "");
125 textdomain("blobwars");
129 bool showSprites = false;
132 int recordMode = REPLAY_MODE::NONE;
133 int requiredSection = SECTION_INTRO;
137 for (int i = 1 ; i < argc ; i++)
139 if (strcmp(argv[i], "-fullscreen") == 0) engine.fullScreen = true;
140 else if (strcmp(argv[i], "-window") == 0) engine.fullScreen = false;
141 else if (strcmp(argv[i], "-noaudio") == 0) engine.useAudio = 0;
142 else if (strcmp(argv[i], "-mono") == 0) engine.useAudio = 1;
143 else if (strcmp(argv[i], "-version") == 0) {showVersion(); exit(0);}
144 else if (strcmp(argv[i], "--help") == 0) showHelp();
145 else if (strcmp(argv[i], "-record") == 0) {recordMode = REPLAY_MODE::RECORD; strlcpy(replayData.filename, argv[++i], sizeof replayData.filename);}
146 else if (strcmp(argv[i], "-playback") == 0) {recordMode = REPLAY_MODE::PLAYBACK; strlcpy(replayData.filename, argv[++i], sizeof replayData.filename);}
147 else if (strcmp(argv[i], "-map") == 0) {if (argc > i + 1) {game.setMapName(argv[++i]); requiredSection = SECTION_GAME;}}
148 else if (strcmp(argv[i], "-listmaps") == 0) listMaps();
149 else if (strcmp(argv[i], "-credits") == 0) requiredSection = SECTION_CREDITS;
152 else if (strcmp(argv[i], "-showsprites") == 0) showSprites = true;
153 else if (strcmp(argv[i], "-hub") == 0) hub = true;
154 else if (strcmp(argv[i], "-randomscreens") == 0) graphics.takeRandomScreenShots = true;
155 else if (strcmp(argv[i], "-nomonsters") == 0) engine.devNoMonsters = true;
158 else {fprintf(stderr, "Unknown argument '%s'\n", argv[i]); showHelp();}
163 case REPLAY_MODE::NONE:
167 case REPLAY_MODE::RECORD:
168 requiredSection = SECTION_GAME;
169 strlcpy(replayData.header.map, game.mapName, sizeof replayData.header.map);
170 replayData.header.skill = game.skill = 3;
171 replayData.setMode(REPLAY_MODE::RECORD);
174 case REPLAY_MODE::PLAYBACK:
175 requiredSection = SECTION_GAME;
176 replayData.setMode(REPLAY_MODE::PLAYBACK);
177 replayData.header.time = 0;
178 game.setMapName(replayData.header.map);
179 game.skill = replayData.header.skill;
185 // seed the random using the one generated
186 // via the replay data
187 Math::pSeed = replayData.header.randomSeed;
189 player.setName("Player");
193 engine.allowQuit = true;
197 requiredSection = SECTION_HUB;
204 game.hasAquaLung = game.hasJetPack = true;
214 switch (requiredSection)
217 requiredSection = doIntro();
221 requiredSection = title();
225 requiredSection = doHub();
229 if (!game.continueFromCheckPoint)
231 checkStartCutscene();
234 requiredSection = doGame();
237 case SECTION_GAMEOVER:
238 requiredSection = gameover();
241 case SECTION_EASYOVER:
245 requiredSection = SECTION_TITLE;
248 case SECTION_CREDITS:
250 requiredSection = SECTION_TITLE;