Skip to content

Commit

Permalink
Restore some original behavior for the cam1-a mission.
Browse files Browse the repository at this point in the history
- Rename and remove labels for less confusion.

- Move some label areas so as not to allow players to bypass them, or
miss a few scavengers that should be grouped together.

- The scavengers hiding in the nearby canyon between bases two and three
will initiate a surprise attack if the oil derrick in base two is built
on before going into the canyon area trigger.
  • Loading branch information
KJeff01 committed Apr 12, 2018
1 parent aacde23 commit babfee9
Show file tree
Hide file tree
Showing 2 changed files with 99 additions and 90 deletions.
125 changes: 75 additions & 50 deletions data/base/script/campaign/cam1a.js
Expand Up @@ -5,21 +5,19 @@ const PLAYER_RES = [
"R-Wpn-MG1Mk1", "R-Vehicle-Body01", "R-Sys-Spade1Mk1", "R-Vehicle-Prop-Wheels",
];

// player zero's droid enteres this area
camAreaEvent("LaunchScavAttack", function(droid)
// Player zero's droid enters area next to first oil patch.
camAreaEvent("launchScavAttack", function(droid)
{
var spos = getObject("scav1soundpos");
playSound("pcv375.ogg", spos.x, spos.y, 0);
playSound("pcv456.ogg");
camPlayVideos("MB1A_MSG");
hackAddMessage("C1A_OBJ1", PROX_MSG, CAM_HUMAN_PLAYER, false);
// send scavengers on war path if triggered above
camManageGroup(camMakeGroup("ScavAttack1", ENEMIES), CAM_ORDER_ATTACK, {
// Send scavengers on war path if triggered above.
camManageGroup(camMakeGroup("scavAttack1", ENEMIES), CAM_ORDER_ATTACK, {
pos: camMakePos("playerBase"),
fallback: camMakePos("retreat1"),
morale: 50
});
// activate mission timer, unlike the original campaign.
// Activate mission timer, unlike the original campaign.
setMissionTime(camChangeOnDiff(3600));
});

Expand All @@ -28,64 +26,91 @@ function runAway()
var oilPatch = getObject("oilPatch");
var droids = enumRange(oilPatch.x, oilPatch.y, 7, 7, false);
camManageGroup(camMakeGroup(droids), CAM_ORDER_ATTACK, {
pos: camMakePos("ScavAttack1"),
pos: camMakePos("scavAttack1"),
fallback: camMakePos("retreat1"),
morale: 20 // will run away after losing a few people
morale: 20 // Will run away after losing a few people.
});
}

function doAmbush()
{
camManageGroup(camMakeGroup("RoadblockArea"), CAM_ORDER_ATTACK, {
camManageGroup(camMakeGroup("roadblockArea"), CAM_ORDER_ATTACK, {
pos: camMakePos("oilPatch"),
fallback: camMakePos("retreat2"),
morale: 50 // will mostly die
morale: 50 // Will mostly die.
});
}

// player zero's droid enteres this area
camAreaEvent("ScavAttack1", function(droid)
// Area with the radar blip just before the first scavenger outpost.
camAreaEvent("scavAttack1", function(droid)
{
hackRemoveMessage("C1A_OBJ1", PROX_MSG, CAM_HUMAN_PLAYER);
queue("runAway", 1000);
queue("doAmbush", 5000);
});

camAreaEvent("RoadblockArea", function(droid)
// Road between first outpost and base two.
camAreaEvent("roadblockArea", function(droid)
{
camEnableFactory("base1factory");
camEnableFactory("base2Factory");
});

camAreaEvent("raidTrigger", function(droid)
// Scavengers hiding in the split canyon area between base two and three.
function raidAttack()
{
camManageGroup( camMakeGroup("raidTrigger", ENEMIES), CAM_ORDER_ATTACK, {
pos: camMakePos("scavbase3area")
pos: camMakePos("scavBase3Cleanup")
});
camManageGroup(camMakeGroup("raidGroup", ENEMIES), CAM_ORDER_ATTACK, {
pos: camMakePos("scavbase3area")
pos: camMakePos("scavBase3Cleanup")
});
camManageGroup(camMakeGroup("scavbase3area", ENEMIES), CAM_ORDER_DEFEND, {
pos: camMakePos("scavbase3area")
camManageGroup(camMakeGroup("scavBase3Cleanup", ENEMIES), CAM_ORDER_DEFEND, {
pos: camMakePos("scavBase3Cleanup")
});
camEnableFactory("base2factory1");
camEnableFactory("base3Factory");
}

// Wait for player to get close to the split canyon and attack, if not already.
camAreaEvent("raidTrigger", function(droid)
{
camCallOnce("raidAttack");
});

camAreaEvent("scavbase3area", function(droid)
// Or, they built on base two's oil patch instead. Initiate a surprise attack.
function eventStructureBuilt(structure, droid)
{
if (structure.player === CAM_HUMAN_PLAYER && structure.stattype === RESOURCE_EXTRACTOR)
{
// Is it in the base two area?
var objs = enumArea("scavBase2Cleanup", CAM_HUMAN_PLAYER);
for (var i = 0, l = objs.length; i < l; ++i)
{
var obj = objs[i];
if (obj.type === STRUCTURE && obj.stattype === RESOURCE_EXTRACTOR)
{
camCallOnce("raidAttack");
break;
}
}
}
}

camAreaEvent("scavBase3Cleanup", function(droid)
{
camEnableFactory("base2factory2");
camEnableFactory("base4Factory");
});

function camEnemyBaseEliminated_scavgroup1()
function camEnemyBaseEliminated_scavGroup1()
{
camEnableFactory("base1factory");
camEnableFactory("base2Factory");
}

function camEnemyBaseEliminated_scavgroup2()
function camEnemyBaseEliminated_scavGroup2()
{
queue("camDetectEnemyBase", 2000, "scavgroup3");
queue("camDetectEnemyBase", 2000, "scavGroup3");
}

function enableStartingBuildings()
function enableBaseStructures()
{
const STRUCTS = [
"A0CommandCentre", "A0PowerGenerator", "A0ResourceExtractor",
Expand All @@ -112,72 +137,72 @@ function eventStartLevel()
setPower(PLAYER_POWER, CAM_HUMAN_PLAYER);
setAlliance(6, 7, true);

enableStartingBuildings();
enableBaseStructures();
camCompleteRequiredResearch(PLAYER_RES, CAM_HUMAN_PLAYER);
//These are available without needing to build a HQ.
// These are available without needing to build a HQ.
enableTemplate("ConstructionDroid");
enableTemplate("ViperLtMGWheels");

// give player briefing
// Give player briefing.
hackAddMessage("CMB1_MSG", CAMP_MSG, CAM_HUMAN_PLAYER, false);
setMissionTime(-1);

// feed libcampaign.js with data to do the rest
// Feed libcampaign.js with data to do the rest.
camSetEnemyBases({
"scavgroup1": {
cleanup: "scavbase1area",
"scavGroup1": {
cleanup: "scavBase1Cleanup",
detectMsg: "C1A_BASE0",
detectSnd: "pcv375.ogg",
eliminateSnd: "pcv391.ogg"
},
"scavgroup2": {
cleanup: "scavbase2area",
"scavGroup2": {
cleanup: "scavBase2Cleanup",
detectMsg: "C1A_BASE1",
detectSnd: "pcv374.ogg",
eliminateSnd: "pcv392.ogg"
},
"scavgroup3": {
cleanup: "scavbase3area",
"scavGroup3": {
cleanup: "scavBase3Cleanup",
detectMsg: "C1A_BASE2",
detectSnd: "pcv374.ogg",
eliminateSnd: "pcv392.ogg"
},
"scavgroup4": {
cleanup: "scavbase4area",
"scavGroup4": {
cleanup: "scavBase4Cleanup",
detectMsg: "C1A_BASE3",
detectSnd: "pcv374.ogg",
eliminateSnd: "pcv392.ogg"
},
});

camSetArtifacts({
"base1factory": { tech: "R-Wpn-Flamer01Mk1" },
"base2factory2": { tech: "R-Sys-Engineering01" },
"base2factory1": { tech: "R-Defense-Tower01" },
"artifact4pos": { tech: "R-Wpn-MG-Damage01" },
"base1ArtifactPos": { tech: "R-Wpn-MG-Damage01" },
"base2Factory": { tech: "R-Wpn-Flamer01Mk1" },
"base3Factory": { tech: "R-Defense-Tower01" },
"base4Factory": { tech: "R-Sys-Engineering01" },
});

with (camTemplates) camSetFactories({
"base1factory": {
assembly: "assembly1",
"base2Factory": {
assembly: "base2Assembly",
order: CAM_ORDER_ATTACK,
data: { pos: "playerBase" },
groupSize: 3,
maxSize: 3,
throttle: camChangeOnDiff(20000),
templates: [ trike, bloke ]
},
"base2factory1": {
assembly: "assembly2",
"base3Factory": {
assembly: "base3Assembly",
order: CAM_ORDER_ATTACK,
data: { pos: "playerBase" },
groupSize: 4,
maxSize: 4,
throttle: camChangeOnDiff(16000),
templates: [ bloke, buggy, bloke ]
},
"base2factory2": {
assembly: "assembly3",
"base4Factory": {
assembly: "base4Assembly",
order: CAM_ORDER_ATTACK,
data: { pos: "playerBase" },
groupSize: 4,
Expand Down
64 changes: 24 additions & 40 deletions data/base/wrf/cam1/cam1a/labels.json
Expand Up @@ -8,47 +8,31 @@
"pos": [5440, 2368]
},
"position_2": {
"label": "retreat4",
"pos": [2112, 4544]
},
"position_3": {
"label": "startPosition",
"pos": [1728, 6720]
},
"position_4": {
"label": "scav1soundpos",
"pos": [3904, 4672]
},
"position_5": {
"label": "scav2soundpos",
"pos": [5002, 2154]
},
"position_6": {
"label": "scav3soundpos",
"pos": [1600, 1728]
},
"position_7": {
"label": "artifact4pos",
"position_3": {
"label": "base1ArtifactPos",
"pos": [3776, 4544]
},
"position_8": {
"position_4": {
"label": "oilPatch",
"pos": [4928, 5568]
},
"position_9": {
"position_5": {
"label": "playerBase",
"pos": [2100, 6700]
},
"position_10": {
"label": "assembly1",
"position_6": {
"label": "base2Assembly",
"pos": [5056, 2496]
},
"position_11": {
"label": "assembly2",
"position_7": {
"label": "base3Assembly",
"pos": [1600, 2240]
},
"position_12": {
"label": "assembly3",
"position_8": {
"label": "base4Assembly",
"pos": [2112, 3648]
},

Expand All @@ -58,7 +42,7 @@
"pos2": [3904, 1088]
},
"area_1": {
"label": "RoadblockArea",
"label": "roadblockArea",
"pos1": [4500, 3600],
"pos2": [5500, 4700]
},
Expand All @@ -68,60 +52,60 @@
"pos2": [1536, 6784]
},
"area_3": {
"label": "LaunchScavAttack",
"label": "launchScavAttack",
"pos1": [2496, 6080],
"pos2": [4928, 7232]
},
"area_4": {
"label": "scavbase1area",
"label": "scavBase1Cleanup",
"pos1": [3520, 4416],
"pos2": [4416, 5056]
},
"area_5": {
"label": "scavbase2area",
"label": "scavBase2Cleanup",
"pos1": [4544, 1856],
"pos2": [5440, 2496]
},
"area_6": {
"label": "scavbase3area",
"label": "scavBase3Cleanup",
"pos1": [1088, 1216],
"pos2": [2240, 2240]
},
"area_7": {
"label": "scavbase4area",
"label": "scavBase4Cleanup",
"pos1": [1472, 3776],
"pos2": [2752, 5440]
},
"area_8": {
"label": "raidTrigger",
"subscriber": 0,
"pos1": [2900, 500],
"pos2": [3800, 3000]
"pos2": [3800, 3200]
},

"object_0": {
"label": "base1factory",
"label": "base2Factory",
"id": 8,
"player": 7,
"type": 1
},
"object_1": {
"label": "base2factory2",
"id": 1256,
"label": "base3Factory",
"id": 20,
"player": 6,
"type": 1
},
"object_2": {
"label": "base2factory1",
"id": 20,
"label": "base4Factory",
"id": 1256,
"player": 6,
"type": 1
},

"radius_0": {
"label": "ScavAttack1",
"label": "scavAttack1",
"subscriber": 0,
"pos": [4928, 6592],
"pos": [5184, 6592],
"radius": 640
}
}

0 comments on commit babfee9

Please sign in to comment.