Moves implementation of base settings into rules.js script. Handling of 'some base' option
is not the same as current, but since few play with that anyway, we can take some time to think about what to do about that. Network sync is handled with an ugly hack for now.master
parent
9f47504584
commit
e7aa1a7e97
|
@ -10,15 +10,6 @@ var lastHitTime = 0;
|
|||
|
||||
function eventGameInit()
|
||||
{
|
||||
//set up the reticule buttons
|
||||
addReticuleButton(COMMAND);
|
||||
addReticuleButton(CANCEL);
|
||||
addReticuleButton(BUILD);
|
||||
addReticuleButton(MANUFACTURE);
|
||||
addReticuleButton(RESEARCH);
|
||||
addReticuleButton(INTELMAP);
|
||||
addReticuleButton(DESIGN);
|
||||
|
||||
for (var playnum = 0; playnum < maxPlayers; playnum++)
|
||||
{
|
||||
enableStructure("A0CommandCentre", playnum); // make structures available to build
|
||||
|
@ -100,6 +91,20 @@ function eventGameInit()
|
|||
{
|
||||
completeResearch(techlist[count], playnum);
|
||||
}
|
||||
// Keep only some structures for insane AI
|
||||
hackNetOff();
|
||||
var structs = enumStruct(playnum);
|
||||
for (var i = 0; i < structs.length; i++)
|
||||
{
|
||||
var s = structs[i];
|
||||
if (playerData[playnum].difficulty != INSANE
|
||||
|| (s.stattype != WALL && s.stattype != DEFENSE && s.stattype != GATE
|
||||
&& s.stattype != RESOURCE_EXTRACTOR))
|
||||
{
|
||||
removeStruct(s);
|
||||
}
|
||||
}
|
||||
hackNetOn();
|
||||
}
|
||||
else if (baseType == CAMP_BASE)
|
||||
{
|
||||
|
@ -108,6 +113,19 @@ function eventGameInit()
|
|||
{
|
||||
completeResearch(techlist[count], playnum);
|
||||
}
|
||||
// Keep only some structures
|
||||
hackNetOff();
|
||||
var structs = enumStruct(playnum);
|
||||
for (var i = 0; i < structs.length; i++)
|
||||
{
|
||||
var s = structs[i];
|
||||
if ((playerData[playnum].difficulty != INSANE && (s.stattype == WALL || s.stattype == DEFENSE))
|
||||
|| s.stattype == GATE || s.stattype == CYBORG_FACTORY || s.stattype == COMMAND_CONTROL)
|
||||
{
|
||||
removeStruct(s);
|
||||
}
|
||||
}
|
||||
hackNetOn();
|
||||
}
|
||||
else // CAMP_WALLS
|
||||
{
|
||||
|
|
145
src/multiopt.cpp
145
src/multiopt.cpp
|
@ -375,146 +375,6 @@ bool multiTemplateSetup(void)
|
|||
return true;
|
||||
}
|
||||
|
||||
// ////////////////////////////////////////////////////////////////////////////
|
||||
// remove structures from map before campaign play.
|
||||
static bool cleanMap(UDWORD player)
|
||||
{
|
||||
DROID *psD,*psD2;
|
||||
STRUCTURE *psStruct;
|
||||
bool firstFact,firstRes;
|
||||
|
||||
bMultiPlayer = false;
|
||||
bMultiMessages = false;
|
||||
|
||||
firstFact = true;
|
||||
firstRes = true;
|
||||
|
||||
switch(game.base)
|
||||
{
|
||||
case CAMP_CLEAN: //clean map
|
||||
psStruct = apsStructLists[player];
|
||||
while (psStruct) //strip away structures.
|
||||
{
|
||||
if ((psStruct->pStructureType->type != REF_WALL && psStruct->pStructureType->type != REF_WALLCORNER
|
||||
&& psStruct->pStructureType->type != REF_DEFENSE && psStruct->pStructureType->type != REF_GATE
|
||||
&& psStruct->pStructureType->type != REF_RESOURCE_EXTRACTOR)
|
||||
|| NetPlay.players[player].difficulty != DIFFICULTY_INSANE || NetPlay.players[player].allocated)
|
||||
{
|
||||
removeStruct(psStruct, true);
|
||||
psStruct = apsStructLists[player]; //restart,(list may have changed).
|
||||
}
|
||||
else
|
||||
{
|
||||
psStruct = psStruct->psNext;
|
||||
}
|
||||
}
|
||||
psD = apsDroidLists[player]; // remove all but construction droids.
|
||||
while(psD)
|
||||
{
|
||||
psD2=psD->psNext;
|
||||
if (psD->droidType != DROID_CONSTRUCT && psD->droidType != DROID_CYBORG_CONSTRUCT)
|
||||
{
|
||||
killDroid(psD);
|
||||
}
|
||||
psD = psD2;
|
||||
}
|
||||
break;
|
||||
|
||||
case CAMP_BASE: //just structs, no walls
|
||||
psStruct = apsStructLists[player];
|
||||
while(psStruct)
|
||||
{
|
||||
if (((psStruct->pStructureType->type == REF_WALL || psStruct->pStructureType->type == REF_WALLCORNER
|
||||
|| psStruct->pStructureType->type == REF_DEFENSE || psStruct->pStructureType->type == REF_GATE)
|
||||
&& (NetPlay.players[player].difficulty != DIFFICULTY_INSANE || NetPlay.players[player].allocated))
|
||||
|| psStruct->pStructureType->type == REF_BLASTDOOR
|
||||
|| psStruct->pStructureType->type == REF_CYBORG_FACTORY
|
||||
|| psStruct->pStructureType->type == REF_COMMAND_CONTROL)
|
||||
{
|
||||
removeStruct(psStruct, true);
|
||||
psStruct= apsStructLists[player]; //restart,(list may have changed).
|
||||
}
|
||||
else if( (psStruct->pStructureType->type == REF_FACTORY)
|
||||
||(psStruct->pStructureType->type == REF_RESEARCH)
|
||||
||(psStruct->pStructureType->type == REF_POWER_GEN))
|
||||
{
|
||||
if(psStruct->pStructureType->type == REF_FACTORY )
|
||||
{
|
||||
if(firstFact == true)
|
||||
{
|
||||
firstFact = false;
|
||||
removeStruct(psStruct, true);
|
||||
psStruct= apsStructLists[player];
|
||||
}
|
||||
else // don't delete, just rejig!
|
||||
{
|
||||
if(((FACTORY*)psStruct->pFunctionality)->capacity != 0)
|
||||
{
|
||||
((FACTORY*)psStruct->pFunctionality)->capacity = 0;
|
||||
((FACTORY*)psStruct->pFunctionality)->productionOutput = (UBYTE)((PRODUCTION_FUNCTION*)psStruct->pStructureType->asFuncList[0])->productionOutput;
|
||||
|
||||
psStruct->sDisplay.imd = psStruct->pStructureType->pIMD[0];
|
||||
psStruct->body = (UWORD)(structureBody(psStruct));
|
||||
|
||||
}
|
||||
psStruct = psStruct->psNext;
|
||||
}
|
||||
}
|
||||
else if(psStruct->pStructureType->type == REF_RESEARCH)
|
||||
{
|
||||
if(firstRes == true)
|
||||
{
|
||||
firstRes = false;
|
||||
removeStruct(psStruct, true);
|
||||
psStruct= apsStructLists[player];
|
||||
}
|
||||
else
|
||||
{
|
||||
if(((RESEARCH_FACILITY*)psStruct->pFunctionality)->capacity != 0)
|
||||
{ // downgrade research
|
||||
((RESEARCH_FACILITY*)psStruct->pFunctionality)->capacity = 0;
|
||||
((RESEARCH_FACILITY*)psStruct->pFunctionality)->researchPoints = ((RESEARCH_FUNCTION*)psStruct->pStructureType->asFuncList[0])->researchPoints;
|
||||
psStruct->sDisplay.imd = psStruct->pStructureType->pIMD[0];
|
||||
psStruct->body = (UWORD)(structureBody(psStruct));
|
||||
}
|
||||
psStruct=psStruct->psNext;
|
||||
}
|
||||
}
|
||||
else if(psStruct->pStructureType->type == REF_POWER_GEN)
|
||||
{
|
||||
if(((POWER_GEN*)psStruct->pFunctionality)->capacity != 0)
|
||||
{ // downgrade powergen.
|
||||
((POWER_GEN*)psStruct->pFunctionality)->capacity = 0;
|
||||
|
||||
psStruct->sDisplay.imd = psStruct->pStructureType->pIMD[0];
|
||||
psStruct->body = (UWORD)(structureBody(psStruct));
|
||||
}
|
||||
structurePowerUpgrade(psStruct);
|
||||
psStruct=psStruct->psNext;
|
||||
}
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
psStruct=psStruct->psNext;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case CAMP_WALLS: //everything.
|
||||
break;
|
||||
default:
|
||||
debug( LOG_FATAL, "Unknown Campaign Style" );
|
||||
abort();
|
||||
break;
|
||||
}
|
||||
|
||||
bMultiPlayer = true;
|
||||
bMultiMessages = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
// ////////////////////////////////////////////////////////////////////////////
|
||||
static bool gameInit(void)
|
||||
{
|
||||
|
@ -532,11 +392,6 @@ static bool gameInit(void)
|
|||
return true;
|
||||
}
|
||||
|
||||
for(player = 0;player<game.maxPlayers;player++) // clean up only to the player limit for this map..
|
||||
{
|
||||
cleanMap(player);
|
||||
}
|
||||
|
||||
for (player = 1; player < MAX_PLAYERS; player++)
|
||||
{
|
||||
// we want to remove disabled AI & all the other players that don't belong
|
||||
|
|
|
@ -1015,6 +1015,22 @@ static QScriptValue js_isStructureAvailable(QScriptContext *context, QScriptEngi
|
|||
&& asStructLimits[player][index].currentQuantity < asStructLimits[player][index].limit);
|
||||
}
|
||||
|
||||
// FIXME - find a better way
|
||||
static QScriptValue js_hackNetOff(QScriptContext *, QScriptEngine *)
|
||||
{
|
||||
bMultiPlayer = false;
|
||||
bMultiMessages = false;
|
||||
return QScriptValue();
|
||||
}
|
||||
|
||||
// FIXME - find a better way
|
||||
static QScriptValue js_hackNetOn(QScriptContext *, QScriptEngine *)
|
||||
{
|
||||
bMultiPlayer = true;
|
||||
bMultiMessages = true;
|
||||
return QScriptValue();
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------------------
|
||||
// Register functions with scripting system
|
||||
|
||||
|
@ -1024,6 +1040,10 @@ bool registerFunctions(QScriptEngine *engine)
|
|||
engine->globalObject().setProperty("_", engine->newFunction(js_translate));
|
||||
engine->globalObject().setProperty("label", engine->newFunction(js_label));
|
||||
|
||||
// horrible hacks follow -- do not rely on these being present!
|
||||
engine->globalObject().setProperty("hackNetOff", engine->newFunction(js_hackNetOff));
|
||||
engine->globalObject().setProperty("hackNetOn", engine->newFunction(js_hackNetOn));
|
||||
|
||||
// General functions -- geared for use in AI scripts
|
||||
engine->globalObject().setProperty("debug", engine->newFunction(js_debug));
|
||||
engine->globalObject().setProperty("console", engine->newFunction(js_console));
|
||||
|
|
Loading…
Reference in New Issue