text: var roleHarvester = require('role.harvester');
  var roleUpgrader = require('role.upgrader');
  var roleBuilder = require('role.builder');
  
  module.exports.loop = function () {
  
      for (var name in Memory.creeps) {
          if (!Game.creeps[name]) {
              delete Memory.creeps[name];
              console.log('Clearing non-existing creep memory:', name);
          }
      }
  
      var harvesters = _.filter(Game.creeps, (creep) => creep.memory.role == 'harvester');
      var builders = _.filter(Game.creeps, (creep) => creep.memory.role == 'builder');
      var upgraders = _.filter(Game.creeps, (creep) => creep.memory.role == 'upgrader');
  
      if (harvesters.length < 2) {
          var newName = 'Harvester' + Game.time;
          console.log('Spawning new harvester: ' + newName);
          Game.spawns['Spawn1'].spawnCreep([WORK, CARRY, MOVE], newName,
              { memory: { role: 'harvester' } });
      } else if (upgraders.length < 1) {
          var newName = 'Upgrader' + Game.time;
          console.log('Spawning new Upgrader: ' + newName);
          Game.spawns['Spawn1'].spawnCreep([WORK, CARRY, MOVE], newName, { memory: { role: 'upgrader' } })
      } else if (builders.length < 1) {
          var newName = 'Builder' + Game.time;
          console.log('Spawning new Builder: ' + newName);
          Game.spawns['Spawn1'].spawnCreep([WORK, CARRY, MOVE], newName, { memory: { role: 'builder' } })
      }
  
      if (Game.spawns['Spawn1'].spawning) {
          var spawningCreep = Game.creeps[Game.spawns['Spawn1'].spawning.name];
          Game.spawns['Spawn1'].room.visual.text(
              '🛠️' + spawningCreep.memory.role,
              Game.spawns['Spawn1'].pos.x + 1,
              Game.spawns['Spawn1'].pos.y,
              { align: 'left', opacity: 0.8 });
      }
  
      for (var name in Game.creeps) {
  
          var creep = Game.creeps[name];
          let targets = creep.room.find(FIND_CONSTRUCTION_SITES)
  
          if (creep.memory.role == 'harvester' || creep.memory.role === undefined) {
              if (Room.energyAvailable !== Room.energyCapacityAvailable) {
                  roleHarvester.run(creep);
              } else if (targets.length > 0) {
                  roleBuilder.run(creep)
              } else {
                  roleUpgrader.run(creep)
              }
          }
          if (creep.memory.role == 'upgrader') {
              roleUpgrader.run(creep);
          }
          if (creep.memory.role == 'builder') {
              if (targets > 0) {
                  roleBuilder.run(creep);
              }
              else if (Room.energyAvailable !== Room.energyCapacityAvailable) {
                  roleHarvester.run(creep)
              } else {
                  roleUpgrader.run(creep)
              }
          }
  
      }
  }