From 840fc18041a182462577c07b616fb7ee9df21b51 Mon Sep 17 00:00:00 2001 From: ObeseTermite Date: Tue, 10 Jun 2025 08:43:01 -0700 Subject: [PATCH] Improved early game speed, and properly added the equalizer in. Started work on auto build --- role_builder.js | 8 ++++---- role_dispatcher.js | 14 +++++++++++--- role_equalizer.js | 19 +++++++++++++++++++ role_harvester.js | 9 ++++++++- role_repairer.js | 8 ++++---- util_autobuild.js | 18 ++++++++++++++++++ util_energy.js | 20 ++++++++++++++++---- 7 files changed, 80 insertions(+), 16 deletions(-) create mode 100644 util_autobuild.js diff --git a/role_builder.js b/role_builder.js index 53a3be7..c04db79 100644 --- a/role_builder.js +++ b/role_builder.js @@ -11,10 +11,10 @@ function run(creep) { } if(creep.memory.building) { - var targets = creep.room.find(FIND_CONSTRUCTION_SITES); - if(targets.length) { - if(creep.build(targets[0]) == ERR_NOT_IN_RANGE) { - creep.moveTo(targets[0]); + var target = creep.pos.findClosestByRange(FIND_CONSTRUCTION_SITES); + if(target != null) { + if(creep.build(target) == ERR_NOT_IN_RANGE) { + creep.moveTo(target); } } } diff --git a/role_dispatcher.js b/role_dispatcher.js index 8a4d7d9..dc7435b 100644 --- a/role_dispatcher.js +++ b/role_dispatcher.js @@ -4,13 +4,15 @@ var roleBuilder = require('role_builder'); var roleRepairer = require('role_repairer'); var roleGuard = require('role_guard'); var roleBase = require('role_base'); +var roleEqualizer = require('role_equalizer'); const roleMap = { harvester: roleHarvester, upgrader: roleUpgrader, builder: roleBuilder, repairer: roleRepairer, - streltsy: roleGuard + streltsy: roleGuard, + desatilnik: roleEqualizer }; function calculateCreepCounts(room){ @@ -19,7 +21,8 @@ function calculateCreepCounts(room){ "builder" : 1, "upgrader" : 1, "repairer" : 1, - "streltsy" : 0 + "streltsy" : 0, + "desatilnik" : 0 }; // 2 harvesters per source by default @@ -44,6 +47,10 @@ function calculateCreepCounts(room){ creepCounts.builder += 1; } + if(room.memory.containers >= 2){ + creepCounts.desatilnik += 1; + } + room.memory.creepCounts = creepCounts; } @@ -57,7 +64,8 @@ function calculateCreepBodies(room){ "repairer" : [WORK, CARRY, MOVE], // 400 base cost - "streltsy" : [MOVE, MOVE, RANGED_ATTACK, RANGED_ATTACK] + "streltsy" : [MOVE, MOVE, RANGED_ATTACK, RANGED_ATTACK], + "desatilnik" : [CARRY, CARRY, CARRY, MOVE, MOVE, MOVE] }; // 450 cost diff --git a/role_equalizer.js b/role_equalizer.js index 70a2410..4c1a424 100644 --- a/role_equalizer.js +++ b/role_equalizer.js @@ -18,8 +18,27 @@ function run(creep) { maxContainer = container; } }); + + if(creep.withdraw(maxContainer, RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) { + creep.moveTo(maxContainer); + } } else{ + var containers = creep.room.find(FIND_STRUCTURES, { + filter : { structureType: STRUCTURE_CONTAINER} + }); + + var minContainer = containers[0]; + + containers.forEach((container, index) => { + if(container.store[RESOURCE_ENERGY] < minContainer.store[RESOURCE_ENERGY]){ + minContainer = container; + } + }); + + if(creep.withdraw(minContainer, RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) { + creep.moveTo(minContainer); + } } } diff --git a/role_harvester.js b/role_harvester.js index 8ae520b..2e6a085 100644 --- a/role_harvester.js +++ b/role_harvester.js @@ -3,7 +3,14 @@ var energyUtils = require('util_energy'); var name = 'harvester'; function run(creep) { - if(creep.store.getFreeCapacity() > 0) { + if(!creep.memory.harvesting && creep.store[RESOURCE_ENERGY] == 0){ + creep.memory.harvesting = true; + } + if(creep.memory.harvesting && creep.store.getFreeCapacity() == 0){ + creep.memory.harvesting = false; + } + + if(creep.memory.harvesting) { if(typeof creep.memory.assignedSource === 'undefined') energyUtils.sourceDelegate(creep); var source = Game.getObjectById(creep.memory.assignedSource); diff --git a/role_repairer.js b/role_repairer.js index b9f4332..1394fe3 100644 --- a/role_repairer.js +++ b/role_repairer.js @@ -11,14 +11,14 @@ function run(creep) { } if(creep.memory.building) { - var targets = creep.room.find(FIND_STRUCTURES, { + var target = creep.pos.findClosestByRange(FIND_STRUCTURES, { filter: (structure) => { return structure.hitsMax - structure.hits > 0; } }); - if(targets.length > 0) { - if(creep.repair(targets[0]) == ERR_NOT_IN_RANGE) { - creep.moveTo(targets[0], {visualizePathStyle: {stroke: '#ffffff'}}); + if(target != null) { + if(creep.repair(target) == ERR_NOT_IN_RANGE) { + creep.moveTo(target, {visualizePathStyle: {stroke: '#ffffff'}}); } } else{ diff --git a/util_autobuild.js b/util_autobuild.js new file mode 100644 index 0000000..a95f36e --- /dev/null +++ b/util_autobuild.js @@ -0,0 +1,18 @@ +function determineNextBlueprint(room){ + return STRUCTURE_EXTENSION; +} + +function addBlueprint(room){ + let foundPosition = false; + let spawn = room.find(FIND_MY_SPAWNS); + let position = spawn.pos; + let spiralOffset = 1; + while(!foundPosition){ + position.y -= spiralOffset++; + position.x -= spiralOffset++; + position.y += spiralOffset++; + position.x += spiralOffset++; + } +} + +module.exports = { addBlueprint } diff --git a/util_energy.js b/util_energy.js index a05a07d..b627119 100644 --- a/util_energy.js +++ b/util_energy.js @@ -5,7 +5,7 @@ var energyUtils = { gatherEnergy : function(creep) { let storage; if(creep.room.memory.containers > 0){ - storage = creep.room.find(FIND_STRUCTURES, { + storage = creep.room.findClosestByRange(FIND_STRUCTURES, { filter: (structure) => { return (structure.structureType == STRUCTURE_CONTAINER) && structure.store.getUsedCapacity(RESOURCE_ENERGY) > 0; @@ -21,10 +21,10 @@ var energyUtils = { return; } - if(storage.length == 0) return; + if(storage == null) return; - if(creep.withdraw(storage[0], RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) { - creep.moveTo(storage[0]); + if(creep.withdraw(storage, RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) { + creep.moveTo(storage); } }, @@ -85,6 +85,18 @@ var energyUtils = { } return true; } + + // if no storage anywhere, then just build something + // in order to speed up early game, since no storage + if(creep.room.memory.containers == 0){ + target = creep.pos.findClosestByRange(FIND_CONSTRUCTION_SITES); + if(target != null){ + if(creep.build(target) == ERR_NOT_IN_RANGE){ + creep.moveTo(target); + } + return true; + } + } return false; } }