Skip to content

Commit

Permalink
jscam: Convert cam1-2.{vlo,slo} into cam1-2.js.
Browse files Browse the repository at this point in the history
In the process:
- Add a new scripted cheat, "ascend <level>".
- Add a new pre-defined victory condition, CAM_VICTORY_OFFWORLD.
- Add a new campaign group order, CAM_ORDER_COMPROMISE.
- Allow CAM_ORDER_ATTACK to take list of positions.
- Implement artifact pickup callbacks.
- Don't cause victory until all enemies are defeated.
- Throw all enemies into last attack when all bases are destroyed,
  which fixes previous missions as well.

refs ticket:4234
  • Loading branch information
haoNoQ committed Nov 2, 2014
1 parent 7a4a925 commit 9583cb6
Show file tree
Hide file tree
Showing 11 changed files with 390 additions and 1,016 deletions.
112 changes: 112 additions & 0 deletions data/base/script/campaign/cam1-2.js
@@ -0,0 +1,112 @@

include("script/campaign/libcampaign.js");
include("script/campaign/templates.js");

var northSeen = false;

function exposeNorthBase() {
if (northSeen)
return;
northSeen = true;
camDetectEnemyBase("NorthGroup"); // no problem if already detected
hackAddMessage("SB1_2_MSG2", MISS_MSG, 0, true); // that's what it was for
}

function camArtifactPickup_ScavLab() {
exposeNorthBase();
}

function camEnemyBaseDetected_NorthGroup() {
exposeNorthBase();
}

camAreaEvent("NorthBaseTrigger", 0, function(droid)
{
// frankly, this one happens silently
camEnableFactory("NorthFactory");
});

function eventStartLevel()
{
camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, "SUB_1_3S", {
area: "RTLZ",
message: "C1-2_LZ",
reinforcements: 60
});
var startpos = getObject("StartPosition");
centreView(startpos.x, startpos.y);
var lz = getObject("LandingZone");
setNoGoArea(lz.x, lz.y, lz.x2, lz.y2, 0);
var tent = getObject("TransporterEntry");
startTransporterEntry(62, 58, 0);
var text = getObject("TransporterExit");
setTransporterExit(58, 62, 0);
setPower(200, 7);

camSetEnemyBases({
"NorthGroup": {
cleanup: "NorthBase",
detectMsg: "C1-2_BASE1",
detectSnd: "pcv374.ogg",
eliminateSnd: "pcv392.ogg"
},
"WestGroup": {
cleanup: "WestBase",
detectMsg: "C1-2_BASE2",
detectSnd: "pcv374.ogg",
eliminateSnd: "pcv392.ogg"
},
"ScavLabGroup": {
detectMsg: "C1-2_OBJ1",
},
});

hackAddMessage("SB1_2_MSG", MISS_MSG, 0, false);
camDetectEnemyBase("ScavLabGroup");

camSetArtifacts({
"ScavLab": { tech: "R-Wpn-Mortar01Lt" },
"NorthFactory": { tech: "R-Vehicle-Prop-Halftracks" },
});

with (camTemplates) camSetFactories({
"NorthFactory": {
assembly: "NorthAssembly",
order: CAM_ORDER_COMPROMISE,
data: {
pos: [
camMakePos("NorthAssembly"),
camMakePos("GatesPos"),
camMakePos("ScavLabPos"),
camMakePos("RTLZ"),
],
radius: 8
},
groupSize: 5,
maxSize: 8,
throttle: 15000,
group: camMakeGroup("NorthTankGroup"),
templates: [ trike, bloke, buggy, bjeep ]
},
"WestFactory": {
assembly: "WestAssembly",
order: CAM_ORDER_COMPROMISE,
data: {
pos: [
camMakePos("WestAssembly"),
camMakePos("GatesPos"),
camMakePos("ScavLabPos"),
camMakePos("RTLZ"),
],
radius: 8
},
groupSize: 5,
maxSize: 8,
throttle: 10000,
group: camMakeGroup("WestTankGroup"),
templates: [ trike, bloke, buggy, bjeep ]
},
});

queue("camEnableFactory", 30000, "WestFactory");
}
18 changes: 11 additions & 7 deletions data/base/script/campaign/cam1a.js
Expand Up @@ -6,7 +6,7 @@ var timerComing = 0; // start mission timer after first power gen
// and derrick is built

// player zero's droid enteres this area
camAreaEvent("LaunchScavAttack", me, function(droid)
camAreaEvent("LaunchScavAttack", 0, function(droid)
{
var spos = getObject("scav1soundpos");
playSound("pcv375.ogg", spos.x, spos.y, 0);
Expand All @@ -16,7 +16,11 @@ camAreaEvent("LaunchScavAttack", me, function(droid)
// send scavengers on war path if triggered above
camManageGroup(
camMakeGroup("ScavAttack1", ENEMIES), CAM_ORDER_ATTACK,
{ pos: camMakePos("playerBase") }
{
pos: camMakePos("playerBase"),
fallback: camMakePos("retreat1"),
morale: 50
}
);
});

Expand All @@ -41,19 +45,19 @@ function doAmbush()
}

// player zero's droid enteres this area
camAreaEvent("ScavAttack1", me, function(droid)
camAreaEvent("ScavAttack1", 0, function(droid)
{
hackRemoveMessage("C1A_OBJ1", PROX_MSG, 0);
queue("runAway", 1000);
queue("doAmbush", 5000);
});

camAreaEvent("RoadblockArea", me, function(droid)
camAreaEvent("RoadblockArea", 0, function(droid)
{
camEnableFactory("base1factory");
});

camAreaEvent("raidTrigger", me, function(droid)
camAreaEvent("raidTrigger", 0, function(droid)
{
camManageGroup(
camMakeGroup("raidTrigger", ENEMIES),
Expand All @@ -70,7 +74,7 @@ camAreaEvent("raidTrigger", me, function(droid)
camEnableFactory("base2factory1");
});

camAreaEvent("scavbase3area", me, function(droid)
camAreaEvent("scavbase3area", 0, function(droid)
{
camEnableFactory("base2factory2");
});
Expand Down Expand Up @@ -100,7 +104,7 @@ function eventStartLevel()
camSetStandardWinLossConditions(CAM_VICTORY_STANDARD, "CAM_1B");

var startpos = getObject("startPosition");
var lz = label("landingZone");
var lz = getObject("landingZone");
centreView(startpos.x, startpos.y);
setNoGoArea(lz.x, lz.y, lz.x2, lz.y2, 0);

Expand Down
17 changes: 11 additions & 6 deletions data/base/script/campaign/cam1b.js
Expand Up @@ -5,7 +5,7 @@ include("script/campaign/templates.js");
var NPScout; // Sensor scout (initialized when droid is created)
var NPRetreating = false;

camAreaEvent("AttackArea1", me, function(droid)
camAreaEvent("AttackArea1", 0, function(droid)
{
// call this manually because eventObjectSeen is unreliable
eventObjectSeen(0, NPScout);
Expand All @@ -26,21 +26,26 @@ camAreaEvent("AttackArea1", me, function(droid)
throttle: 40000,
templates: [ trike, bloke, buggy, bloke, ] // changes
});
camEnableFactory("base2factory"); // re-enable
});

camAreaEvent("AttackArea2", me, function(droid)
camAreaEvent("AttackArea2", 0, function(droid)
{
camEnableFactory("base4factory");
});

function doNPRetreat() {
var pos = camMakePos("NPSensorTurn");
camTrace("New Paradigm sensor droid is retreating");
orderDroidLoc(NPScout, DORDER_MOVE, pos.x, pos.y);
}

function eventObjectSeen(viewer, seen)
{
if (NPRetreating || viewer !== 0 || seen.id !== NPScout.id)
return;
camTrace("New Paradigm sensor droid is retreating");
NPRetreating = true;
var pos = camMakePos("NPSensorTurn");
orderDroidLoc(NPScout, DORDER_MOVE, pos.x, pos.y);
queue("doNPRetreat", 2000);
}

camAreaEvent("NPSensorTurn", 1, function(droid)
Expand All @@ -58,7 +63,7 @@ function eventStartLevel()
{
camSetStandardWinLossConditions(CAM_VICTORY_STANDARD, "SUB_1_1S");
var startpos = getObject("startPosition");
var lz = label("landingZone");
var lz = getObject("landingZone");
centreView(startpos.x, startpos.y);
setNoGoArea(lz.x, lz.y, lz.x2, lz.y2, 0);

Expand Down

0 comments on commit 9583cb6

Please sign in to comment.