//----------------------------------------------------------------------------- // Torque Game Engine // Copyright (C) GarageGames.com, Inc. //----------------------------------------------------------------------------- $defaultGame = "tutorial.base"; $displayHelp = false; //----------------------------------------------------------------------------- // Support functions used to manage the mod string function pushFront(%list, %token, %delim) { if (%list !$= "") return %token @ %delim @ %list; return %token; } function pushBack(%list, %token, %delim) { if (%list !$= "") return %list @ %delim @ %token; return %token; } function popFront(%list, %delim) { return nextToken(%list, unused, %delim); } //------------------------------------------------------------------------------ // Process command line arguments // Run the Torque Creator mod by default, it's needed for editors. $modcount = 2; $userMods = "creator;" @ $defaultGame; for ($i = 1; $i < $Game::argc ; $i++) { $arg = $Game::argv[$i]; $nextArg = $Game::argv[$i+1]; $hasNextArg = $Game::argc - $i > 1; $logModeSpecified = false; switch$ ($arg) { //-------------------- case "-log": $argUsed[$i]++; if ($hasNextArg) { // Turn on console logging if ($nextArg != 0) { // Dump existing console to logfile first. $nextArg += 4; } setLogMode($nextArg); $logModeSpecified = true; $argUsed[$i+1]++; $i++; } else error("Error: Missing Command Line argument. Usage: -log "); //-------------------- case "-mod": $argUsed[$i]++; if ($hasNextArg) { // Append the mod to the end of the current list $userMods = strreplace($userMods, $nextArg, ""); $userMods = pushFront($userMods, $nextArg, ";"); $argUsed[$i+1]++; $i++; $modcount++; } else error("Error: Missing Command Line argument. Usage: -mod "); //-------------------- case "-game": $argUsed[$i]++; if ($hasNextArg) { // Set the selected mod and creator for editor stuff. $userMods = "creator;" @ $nextArg; $argUsed[$i+1]++; $i++; $modcount = 2; } else error("Error: Missing Command Line argument. Usage: -game "); //-------------------- case "-show": // A useful shortcut for -mod show $userMods = strreplace($userMods, "show", ""); $userMods = pushFront($userMods, "show", ";"); $argUsed[$i]++; $modcount++; //-------------------- case "-console": enableWinConsole(true); $argUsed[$i]++; //-------------------- case "-jSave": $argUsed[$i]++; if ($hasNextArg) { echo("Saving event log to journal: " @ $nextArg); saveJournal($nextArg); $argUsed[$i+1]++; $i++; } else error("Error: Missing Command Line argument. Usage: -jSave "); //-------------------- case "-jPlay": $argUsed[$i]++; if ($hasNextArg) { playJournal($nextArg,false); $argUsed[$i+1]++; $i++; } else error("Error: Missing Command Line argument. Usage: -jPlay "); //-------------------- case "-jDebug": $argUsed[$i]++; if ($hasNextArg) { playJournal($nextArg,true); $argUsed[$i+1]++; $i++; } else error("Error: Missing Command Line argument. Usage: -jDebug "); //------------------- case "-help": $displayHelp = true; $argUsed[$i]++; //------------------- default: $argUsed[$i]++; if($userMods $= "") $userMods = $arg; } } if($modcount == 0) { $userMods = $defaultGame; $modcount = 1; } //----------------------------------------------------------------------------- // The displayHelp, onStart, onExit and parseArgs function are overriden // by mod packages to get hooked into initialization and cleanup. function onStart() { // Default startup function } function onExit() { // OnExit is called directly from C++ code, whereas onStart is // invoked at the end of this file. } function parseArgs() { // Here for mod override, the arguments have already // been parsed. } package Help { function onExit() { // Override onExit when displaying help } }; function displayHelp() { activatePackage(Help); // Notes on logmode: console logging is written to console.log. // -log 0 disables console logging. // -log 1 appends to existing logfile; it also closes the file // (flushing the write buffer) after every write. // -log 2 overwrites any existing logfile; it also only closes // the logfile when the application shuts down. (default) error( "Torque Demo command line options:\n"@ " -log Logging behavior; see main.cs comments for details\n"@ " -game Reset list of mods to only contain \n"@ " Works like the -game argument\n"@ " -mod Add to list of mods\n"@ " -console Open a separate console\n"@ " -show Launch the TS show tool\n"@ " -jSave Record a journal\n"@ " -jPlay Play back a journal\n"@ " -jDebug Play back a journal and issue an int3 at the end\n"@ " -help Display this help message\n" ); } //-------------------------------------------------------------------------- // Default to a new logfile each session. if (!$logModeSpecified) { setLogMode(6); } // Set the mod path which dictates which directories will be visible // to the scripts and the resource engine. setModPaths($userMods); // Get the first mod on the list, which will be the last to be applied... this // does not modify the list. nextToken($userMods, currentMod, ";"); // Execute startup scripts for each mod, starting at base and working up function loadDir(%dir) { setModPaths(pushback($userMods, %dir, ";")); exec(%dir @ "/main.cs"); } echo("--------- Loading MODS ---------"); function loadMods(%modPath) { %modPath = nextToken(%modPath, token, ";"); if (%modPath !$= "") loadMods(%modPath); if(exec(%token @ "/main.cs") != true){ error("Error: Unable to find specified mod: " @ %token ); $modcount--; } } loadMods($userMods); echo(""); if($modcount == 0) { enableWinConsole(true); error("Error: Unable to load any specified mods"); quit(); } // Parse the command line arguments echo("--------- Parsing Arguments ---------"); parseArgs(); // Either display the help message or startup the app. if ($displayHelp) { enableWinConsole(true); displayHelp(); quit(); } else { onStart(); echo("Engine initialized..."); } // Display an error message for unused arguments for ($i = 1; $i < $Game::argc; $i++) { if (!$argUsed[$i]) error("Error: Unknown command line argument: " @ $Game::argv[$i]); }