Make Creeps and PowerCreeps inherit from a "Movable" class

  • I would argue that Creep.move affecting PowerCreep.move is itself a bug. This surprised me when I encountered it and I fully expected it to be fixed at some point. Anyone relying on this behaviour is relying on a bug and should expect it to be fixed. For what it's worth, fixing this will break my code, but I still want it to be fixed.

    All you need to do is publish an announcement far enough in advance that this is the plan and anyone relying on it can prepare for it by doing this:

    PowerCreep.prototype.move = Creep.prototype.move;
    PowerCreep.prototype.moveTo = Creep.prototype.moveTo;
    PowerCreep.prototype.moveByPath = Creep.prototype.moveByPath;
    PowerCreep.prototype.transfer = Creep.prototype.transfer;
    PowerCreep.prototype.withdraw = Creep.prototype.withdraw;
    PowerCreep.prototype.drop = Creep.prototype.drop;
    PowerCreep.prototype.pickup = Creep.prototype.pickup;
    PowerCreep.prototype.say = Creep.prototype.say;

    For anyone who does this or isn't relying on the buggy behaviour there are no breaking changes!

    Note: I would strongly suggest that all of the offending methods above should be fixed, not just the move ones, so the class should probably be called BaseCreep or something rather than Movable.

  • Here is a behavior change. Object.getOwnPropertyNames(Creep.prototype) would no longer return move or moveTo.

    I assumed it would break more stuff. I was surprised that Creep.prototype.move still worked the same.

    I really think this is a good idea. And it fixes the bug of changes to Creep.move affecting PowerCreep.move.

  • Ok everyone, @ags131 very graciously set up a pServ at as a test with my fork/branch of engine with a BaseCreep class. He and @WarInternal already helped me identify/fix 1 error in it, and it is running pretty smoothly right now. Please spawn in and post results if you can 🙂

    @artch, idk if you have any code, but you and @o4kapuk are more than welcome to spawn in too. I'd love to get feedback on what the devs think. btw, figuring out the data() call was more tricky than I thought (see the commits from today lol)

    Again, everyone can take a look at my branch here:

  • @semperrabbit Thank you for taking the initiative on this Semp. This is huge. I'd like to recommend adding a FIND_MOVEABLES or something similar so there can be a unified lookup, and probably others I'm not thinking of.

    How is pull handled here?

  • @SemperRabbit No pull request so I'll leave code review comments here.

    Use braces on all multi line if statements. That seems to be the style in the rest of the repo.

    Consider breaking this up into two PRs. The first one creates the new base-creep type in the existing creep file renaming classes but otherwise not moving code around. The second one moves it all to the new file. This would be far easier to review as the unchanged functions would be nearly diff free. The second one would have tons of diffs but very little new code. The easier the PR is to review the more likely the devs will accept it.

    We're still having memory problems with high room counts. I suspect the indexes are to blame. FIND_MOVEABLES is a fine idea but I would discourage a new index just concat the FIND_POWER_CREEPS and FIND_CREEPS calls. For completeness add a FIND_MY_MOVEABLES as well.

  • @SemperRabbit It looks like this is branched from main. It should branch from PTR, otherwise this will force all the new Store to code to rebased (merge-hell).

  • its ok @deft-code, ty for the suggestions, but yeah, i guess its not happening ever. devs put their foot down, testing be damned.