screeps-online/creep.custom.js
2019-11-29 15:19:38 +01:00

76 lines
2.4 KiB
JavaScript

var customCreep = function() {
StructureSpawn.prototype.spawnCustomCreep = function(role, name, energy, behaviourLevel) {
var body_parts = [];
var body_pre = [];
var body_component = [];
var body_post = []
var body_pre_cost = 0;
var body_component_cost = 0;
var body_post_cost = 0;
switch(role) {
case 'upgrader':
body_component = [WORK, CARRY, CARRY, MOVE];
body_component_cost = 250;
break;
case 'harvester':
body_pre = [CARRY, CARRY, MOVE];
body_pre_cost = 150;
body_component = [WORK];
body_component_cost = 100;
break;
case 'refiller':
body_pre = [WORK, MOVE];
body_pre_cost = 150;
body_component = [CARRY, CARRY, MOVE];
body_component_cost = 150;
break;
case 'wallRepairer':
body_component = [WORK, CARRY, CARRY, MOVE, MOVE, MOVE];
body_component_cost = 350;
break;
case 'pickup':
body_pre = [WORK, MOVE];
body_pre_cost = 150;
body_component = [CARRY, CARRY, MOVE];
body_component_cost = 150;
break;
case 'repairer':
body_component = [WORK, CARRY, CARRY, MOVE, MOVE];
body_component_cost = 300;
break;
case 'builder':
body_component = [WORK, CARRY, CARRY, MOVE];
body_component_cost = 250;
break;
default:
body_component = [WORK, CARRY, MOVE];
body_component_cost = 200;
break;
}
var num_body_part_patches = Math.floor((energy - (body_pre_cost + body_post_cost)) / body_component_cost);
// Make pre-body
for(var part of body_pre) {
body_parts.push(part);
}
// Make component body
for(var i = 0; i < num_body_part_patches; i++) {
for(var part of body_component) {
body_parts.push(part);
}
}
// Make post-body
for(var part of body_post) {
body_parts.push(part);
}
return this.spawnCreep(body_parts, name, {memory: {role: role}});
}
}
module.exports = customCreep;