Room.prototype.getLOIs = function() {
    var lois = this.memory.sources || [];
    if(this.controller) {
        lois.push(this.controller.id);
    }
    return lois;
};

Object.keys(Game.rooms).forEach(function (roomName) {
    var room = Game.rooms[roomName];

    if (!room.memory.calcComplete || Memory.recalcRooms) {
        // Do one time room calculations here

        if(!room.memory.sources) {
            room.memory.sources = room.find(FIND_SOURCES).map(function (sourceObject) {
                return sourceObject.id;
            });
        }

        room.memory.calcComplete = true;
    }
});

if(Object.keys(Game.creeps).length < 4) {
    // Spawn a new creep
}

Object.keys(Game.creeps).forEach(function (creepName) {
    var creep = Game.creeps[creepName];

    if(creep.carry.energy < creep.carryCapacity) {
        // Move to source or harvest
    } else {
        // Move to spawn or transfer
    }
});

Memory.recalcRooms = false;
console.log(Game.getUsedCpu());

@@ -1,12 +1,125 @@
+SetupPrototypes();%0A%0ASetupRooms();%0A%0ASpawnCreeps();%0A%0AHandleCreeps();%0A%0AEndTick();%0A%0Afunction SetupPrototypes() %7B%0A    
 Room.prototy
@@ -144,24 +144,28 @@
 ion() %7B%0A    
+  
+  
 var lois = t
@@ -189,17 +189,43 @@
 s %7C%7C %5B%5D;
-%0A
+ // Need to clone that%0A    
     if(t
@@ -238,24 +238,28 @@
 ntroller) %7B%0A
+    
         lois
@@ -289,18 +289,26 @@
 d);%0A    
+   
+ 
 %7D%0A
+    
     retu
@@ -320,12 +320,46 @@
 is;%0A
-%7D;%0A%0A
+    %7D;%0A%7D%0A%0Afunction SetupRooms() %7B%0A    
 Obje
@@ -400,32 +400,36 @@
 on (roomName) %7B%0A
+    
     var room = G
@@ -454,16 +454,20 @@
 %5D;%0A%0A    
+  
+  
 if (!roo
@@ -509,24 +509,28 @@
 alcRooms) %7B%0A
+    
         // D
@@ -572,16 +572,20 @@
         
+    
 if(!room
@@ -607,32 +607,36 @@
 ) %7B%0A            
+ 
+   
 room.memory.sour
@@ -707,24 +707,28 @@
             
+    
 return sourc
@@ -751,16 +751,20 @@
         
+    
 %7D);%0A    
@@ -767,19 +767,27 @@
         
+ 
-%7D%0A%0A
+   %7D%0A%0A    
         
@@ -819,27 +819,66 @@
 = true;%0A
+    
     %7D%0A
-%7D);%0A%0A
+    %7D);%0A%7D%0A%0Afunction SpawnCreeps() %7B%0A    
 if(Objec
@@ -907,24 +907,28 @@
 ngth %3C 4) %7B%0A
+    
     // Spawn
@@ -940,19 +940,55 @@
 w creep%0A
-%7D%0A%0A
+    %7D%0A%7D%0A%0Afunction HandleCreeps() %7B%0A    
 Object.k
@@ -1031,24 +1031,28 @@
 reepName) %7B%0A
+    
     var cree
@@ -1084,16 +1084,20 @@
 %5D;%0A%0A    
+ 
+   
 if(creep
@@ -1135,32 +1135,36 @@
 city) %7B%0A        
+    
 // Move to sourc
@@ -1176,16 +1176,20 @@
 harvest%0A
+    
     %7D el
@@ -1193,32 +1193,36 @@
  else %7B%0A        
+    
 // Move to spawn
@@ -1242,15 +1242,50 @@
     
-%7D%0A%7D);%0A%0A
+    %7D%0A    %7D);%0A%7D%0A%0Afunction EndTick() %7B%0A    
 Memo
@@ -1308,16 +1308,20 @@
  false;%0A
+    
 console.
@@ -1344,8 +1344,10 @@
 Cpu());%0A
+%7D%0A

Organize main.js into functions