293 lines
7.6 KiB
C#
293 lines
7.6 KiB
C#
//-----------------------------------------------------------------------------
|
|
// Torque Game Engine
|
|
//
|
|
// Copyright (c) 2001 GarageGames.Com
|
|
// Portions Copyright (c) 2001 by Sierra Online, Inc.
|
|
//-----------------------------------------------------------------------------
|
|
|
|
$baseMods = "common";
|
|
$userMods = "marble";
|
|
$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);
|
|
}
|
|
|
|
function onFrameAdvance()
|
|
{
|
|
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Process command line arguments
|
|
|
|
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 <Mode: 0,1,2>");
|
|
|
|
//--------------------
|
|
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++;
|
|
}
|
|
else
|
|
error("Error: Missing Command Line argument. Usage: -mod <mod_name>");
|
|
|
|
//--------------------
|
|
case "-compileguis":
|
|
$compileGuis = true;
|
|
$argUsed[$i]++;
|
|
echo("Compile guis!");
|
|
|
|
case "-compileall":
|
|
$compileGuis = true;
|
|
$compileScripts = true;
|
|
$argUsed[$i]++;
|
|
echo("Compile all!");
|
|
|
|
|
|
case "-game":
|
|
$argUsed[$i]++;
|
|
if ($hasNextArg)
|
|
{
|
|
// Remove all mods, start over with game
|
|
$userMods = $nextArg;
|
|
$argUsed[$i+1]++;
|
|
$i++;
|
|
}
|
|
else
|
|
error("Error: Missing Command Line argument. Usage: -game <game_name>");
|
|
|
|
//--------------------
|
|
case "-show":
|
|
// A useful shortcut for -mod show
|
|
$userMods = strreplace($userMods, "show", "");
|
|
$userMods = pushFront($userMods, "show", ";");
|
|
$argUsed[$i]++;
|
|
|
|
//--------------------
|
|
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 <journal_name>");
|
|
|
|
//--------------------
|
|
case "-jPlay":
|
|
$argUsed[$i]++;
|
|
if ($hasNextArg)
|
|
{
|
|
playJournal($nextArg,false);
|
|
$argUsed[$i+1]++;
|
|
$i++;
|
|
}
|
|
else
|
|
error("Error: Missing Command Line argument. Usage: -jPlay <journal_name>");
|
|
|
|
//--------------------
|
|
case "-jDebug":
|
|
$argUsed[$i]++;
|
|
if ($hasNextArg)
|
|
{
|
|
playJournal($nextArg,true);
|
|
$argUsed[$i+1]++;
|
|
$i++;
|
|
}
|
|
else
|
|
error("Error: Missing Command Line argument. Usage: -jDebug <journal_name>");
|
|
|
|
//-------------------
|
|
case "-help":
|
|
$displayHelp = true;
|
|
$argUsed[$i]++;
|
|
}
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// The displayHelp, onStart, onExit and parseArgs function are overriden
|
|
// by mod packages to get hooked into initialization and cleanup.
|
|
|
|
function onStart()
|
|
{
|
|
// Default startup function
|
|
exec("marble/client/scripts/tttimer.cs");
|
|
exec($Con::root @ "/client/scripts/MarbleSkinSelectionDlg.cs");
|
|
}
|
|
|
|
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(
|
|
"Marble Blast command line options:\n"@
|
|
" -log <logmode> Logging behavior; see main.cs comments for details\n"@
|
|
" -game <game_name> Reset list of mods to only contain <game_name>\n"@
|
|
" -mod <mod_name> Add <mod_name> to list of mods\n"@
|
|
" -console Open a separate console\n"@
|
|
" -show <shape> Launch the TS show tool\n"@
|
|
" -jSave <file_name> Record a journal\n"@
|
|
" -jPlay <file_name> Play back a journal\n"@
|
|
" -jDebug <file_name> 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.
|
|
$modPath = pushback($userMods, $baseMods, ";");
|
|
setModPaths($modPath);
|
|
|
|
// Get the first mod on the list, which will be the last to be applied... this
|
|
// does not modify the list.
|
|
nextToken($modPath, currentMod, ";");
|
|
|
|
// Execute startup scripts for each mod, starting at base and working up
|
|
echo("--------- Loading MODS ---------");
|
|
function loadMods(%modPath)
|
|
{
|
|
%modPath = nextToken(%modPath, token, ";");
|
|
if (%modPath !$= "")
|
|
loadMods(%modPath);
|
|
|
|
exec(%token @ "/main.cs");
|
|
}
|
|
loadMods($modPath);
|
|
echo("");
|
|
|
|
// Parse the command line arguments
|
|
echo("--------- Parsing Arguments ---------");
|
|
parseArgs();
|
|
|
|
// Either display the help message or startup the app.
|
|
if ($compileGuis)
|
|
{
|
|
enableWinConsole(true);
|
|
activatePackage(Help);
|
|
for($file = findFirstFile("*.gui"); $file !$= ""; $file = findNextFile("*.gui"))
|
|
{
|
|
echo($file);
|
|
compile($file);
|
|
}
|
|
if($compileScripts)
|
|
{
|
|
for($file = findFirstFile("*.cs"); $file !$= ""; $file = findNextFile("*.cs"))
|
|
{
|
|
echo($file);
|
|
compile($file);
|
|
}
|
|
}
|
|
quit();
|
|
} else 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: Unkown command line argument: " @ $Game::argv[$i]);
|
|
}
|
|
|
|
function GuiMLTextCtrl::onURL(%this, %url)
|
|
{
|
|
gotoWebPage( %url );
|
|
}
|
|
|