Pull across Room frontiers



  • There is a discussion here about how to work around it. But even there the consensus is that this is a bug.

    The idea is that you can't pull a creep to another room, doing so require a 'dance' of sorts which breaks the the usage of creep.pull for making trains.

    Position https://screeps.com/a/#!/map/shard2?pos=-1.5,57.5

    Code https://github.com/Eddyosos/screeps/tree/d5fe6db6b04902c7013863c5accbf8b4a0d8b55b

    Steps: just put a flag on a source on another room and wait


  • Dev Team

    You're able to pull one creep over an edge, but not a whole train. This is as-designed, there is no bug here. Honestly making trains inside one room is a side effect of implementation which we decided to not fix.



  • @o4kapuk said in Pull across Room frontiers:

    You're able to pull one creep over an edge, but not a whole train. This is as-designed, there is no bug here. Honestly making trains inside one room is a side effect of implementation which we decided to not fix.

    Ok, I understand the train part as unintended/not going to fix, but what about the dance? I tried simple going to de edge and pulling the creep and that didn't work.

    Is the intended way the 6 step method described by taiga?

    Tick 1: Move onto edge with pulling creep pulling other creep next to edge

    Tick 2: Do nothing

    Tick 3: Pulling creep is back in the room with the other creep. Now you have to issue a valid move intent to enable the pull. This is nasty. You cannot move "into the wall", you have to either move along the room edge or move back into the room you just came from. Going to assume you move along the room edge as I think moving into the room you just came from adds a tick.

    Tick 4: Pulled creep is now through to the other room. If the pulling creep moved along the room edge it is also. Pulling creep moves into the room further.

    Tick 5: Do nothing

    Tick 6: Pull other creep off room edge.

    That seems at least a little bit off, don't you think?

    minimal code:

    module.exports.loop = function (){
    let spawn = Game.spawns['Spawn1'];
    spawn.spawnCreep([MOVE], 'head');
    spawn.spawnCreep([CARRY], 'tail');
    
    let head = Game.creeps['head'];
    let tail = Game.creeps['tail'];
    if(head && tail) {
     if(head.pull(tail) == OK) {
     tail.move(head);
     head.moveTo(TOP);
    } else head.moveTo(tail);
    }   
    }
    

    to reproduce, simple put a spawn a bit below the top exit



  • I once experimented with pulling for low RCL remote colony w/ one tow-truck and a few immobile creep types. The way Tigga described is the way I used, first creep had to find/had set a location where enough room was to pull (an exit tile w/ enough room), then move there. Next tick their in the next room and wait, the tick after they blink back to the other room next to the creep, issuing a pull toward the next empty exit tile. So that the puller moves to the new exit tile, and the pullee moves to the previous exit tile. Now that their both on the exit tile, the puller can move off but has to wait a tick while the pullee goes back between the rooms, once the pullee is back the puller can move it into the room.

    As mentioned in the previous post, if the pullee has just one move part, it avoids alot of the waiting because it can navigate the border crossing easier.

    I think there may have been another way mentioned in slack? But I don't recall.