PTR Changelog 2018-11-05: preboosting


  • Dev Team

    This post describes changes on the Public Test Realm.

    Disabled ability to boost a creep while it's still being spawned (so called "preboosting"). This case is the only one when something can be done to a creep which is not spawned yet, and removed for the sake of consistency. Otherwise we'd need to consider all other actions whether they should be allowed to apply on creeps being spawned.

    Any feedback and comments are welcome as usual.

    Commit engine#acf17f6.

    ☹


  • I think this should still be allowed since it also needs a physical layout of your structures.
    Imo it's fair to do that in order to use it's lifespan to it's fullest, after all they might be really expensive.

    However this is a very obscure feature and should be in the documentation.



  • Can't AIs just boost the creeps the instant they come out anyways?



  • Well yes, but the benefit of doing so while it spawns allows you to use a single lab and filling it in succession with the right amount of materials.



  • Definitely feel that this should not be taken away from players. Was a nice mechanic that players found and has benefits and not down side. I really would love to hear what the downside of this is and why you are taking it out? What other actions would need to be considered if this was left in?


  • Dev Team

    @wolffman122 if we leave pre-boosting, we'll need to re-think everything else that can target creeps.

    Few examples:

    • should we fix transfer too or leave it as it is because pre-boosting is allowed?
    • if we allow boosting, why we don't allow attacking and healing? If we decide to change this and allow attacking, should we also allow melee fightback? Why?

    But that's just couple of out-of-head. If we want a consistent api, we should either fix boosting, or rework/rethink every other api method targeting creep, and ensure that the rework won't break too much code (if said reworks will be even possible without breaking changes — we never know before trying). So we can do this, or we can fix boosting and continue working on game content.

    👍


  • The difference is that spawning and boosting are both part of "creating" a creep.
    And doesn't hurt consistency game play wise much.
    All other actions you mentioned don't fall in this category.

    However if this is something considered to cost performance since it creates a additional check, do away with it.
    But that would be a completely different reasoning and far more understandable and acceptable even if I like the concept of preboosting.

    ☝

  • Dev Team

    @mrfaul said in PTR Changelog 2018-11-05: preboosting:

    The difference is that spawning and boosting are both part of "creating" a creep.

    I don't think you can dress a child before he is born.

    And looks like you're probably missing my point: my examples are just couple of cases, for consistency we need to review all of them.


  • Dev Team

    @mrfaul Clear, straightforward, intuitive and easy to understand game mechanics are as important as performance and quality of gameplay. You mentioned before that this feature is very obscure, and this makes it a good candidate for removing. Or reworking in a clear way (not just documenting, it wouldn't make it less obscure essentially), but it doesn't seem to have enough gameplay value to be introduced as a separate gameplay feature.



  • I have a strong bias on this, but I'd like to give voice for the most extreme "please keep preboosting" side. My novel-length initial reaction can be found here: https://screeps.com/forum/post/11451, and I'll try to avoid repeating myself. Thanks again to artch for the exceptionally fast response on reverting that change to allow a more formal discussion.

    To frame the discussion, I'm going to assume the goal we are working towards is to create the most enjoyment for the most players over the life of screeps. This feature isn't going to affect profits much one way or the other (probably only a dozen affected players), so I don't think that's much of a factor.

    As evidenced from the discussion above, it's fairly easy to contrive an analogy in which preboosting "makes sense", or vice versa. We can make that work either way. The start of this thread raises concerns about consuming developer time to exhaustively consider whether other actions should allowed for creeps during creation. I understand the "slippery slope" fear. I honestly don't think it will come back to bite the developers to let preboosting stand. I haven't seen any players express confusion over whether any other new actions should be allowed while spawning. We've had 4-6 months for those confusions to surface, so that seems like a good data point. I don't think players are likely to waste your time about enabling various other actions moving forward.

    Even though I don't foresee much of a cost to leaving preboosting in, the cost of removing it is admittedly localized to a few players. There are a handful of players besides myself who would be acutely affected by this, but I can't pretend it's a majority. For my little anecdote, knowing preboosting is on the chopping block has killed the game for me, at least in the short term. I went from averaging 3+ hours of screeps play per day to ~2 hours total in the month since the feature was slated for removal. It's really a tough pill to swallow. For me, it's difficult to imagine that the many hours already spent by players to implement preboosting could be equaled by brief confusions over the potential API inconsistency it implies. If there's any path forward that could let us leave things as-is, or consider a non-breaking change, I would love to pursue that.


  • Dev Team

    @omnomwombat I can see your point here, thanks for participating in the discussion. But it's not about what players request or complain on, and not about developers or players time. API consistency is the crux in a game like this. We must either remove it or make it consistent with other methods. Currently it definitely feels like an undocumented, highly obscure and unobvious hidden example of bad design, or in other words, a bug. In fact, creeps being spawned were always intended to be untouchable, and it's just my fault that I haven't noticed this case for many months and not fixed it in due time. We can't just pretend now that it's intended and leave as-is, the game will become a mess eventually if we go this road and start making decisions this way. I understand it can cause some difficulties to players to adapt, but it's good for the game in the long term.

    👍🏻


  • @artch Well since you seeing this a bug, then clearly state it please.
    Your wording in the opening post doesn't state that in any kind and looks like you wanted an open discussion.

    OK well then on that note of consistency, please remove the ability to name spawns.
    It is the only building with a name and kinda pointless. It is used in the tutorial to teach new players how to spawn a creep.
    But beyond that it is bad practice to hard-wire your spawning algorithm to spawn names.



  • @mrfaul I believe spawns having names is what allow them to store data in memory. But then again, that would make them the only structure to have even a memory.


  • Dev Team

    @mrfaul While I agree that hardcoding structure instances is not a good practice, they will find a way to do it without names (by id, for example)



  • I think I said this before, possibly in slack, I don't use pre-boosting and can't see I ever really would (never say never). But when I heard about it I went, that's cool.

    In my mind it doesn't confuse the API (more than it already is), its an action which is part of the creation process. I can already cancel it, set the direction it will come out, and change its memory in preparation for its birth, I don't see why I couldn't also boost it. I.e. there are already some inconsistencies.

    As others have mentioned I don't think anyone has suggested any other actions, attack, heal, transfer etc that should be done to it, and I don't think its that hard to enumerate them, I've looked over the API and can see (along with my feelings):

    • Creep object actions on itself: all: not allowed
    • Creep effecting other creeps: attack, heal, transfer: not allowed
    • Spawn: recycle and renew: not allowed
    • Tower: attack, heal: not allowed
    • Spawn.Spawning: all: allowed
    • Lab: boost, unboost: only boost allowed (can see an argument for allowing unboost to be consistent, i.e. Lab and StructureSpawn.Spawning are the only things allowed to affect it before it pops out; and it might be useful to do before doing a cancel)

    Can anyone else think/see of any other functions that can take a creep as a parameter which would need to be decided upon?

    All that said, to reiterate my first point, I don't use the mechanic so if its removed I'm not going to worry, just seems unnecessary to remove what seems to be a cool mechanic with the only reason being to be clean when there are other inconsistencies which continually trip me up (why is a controller a structure but a source and mineral aren't, why does a container, storage and tombstone have a store, but a creep has carry and then resources, labs, nuker, source and mineral all have their own versions)

    👍

  • Dev Team

    @mrfaul The discussion we wanted to open is not about whether to remove this hidden behavior or not, but whether this game mechanic is valuable enough to critical number of players so that we develop and introduce it as a proper game feature. We are not going to leave it as-is in either way.


  • Dev Team

    @qgazq

    Creep object actions on itself: all: not allowed

    Creep effecting other creeps: attack, heal, transfer: not allowed

    Spawn: recycle and renew: not allowed

    Tower: attack, heal: not allowed

    Spawn.Spawning: all: allowed

    Lab: boost, unboost: only boost allowed (can see an argument for allowing unboost to be consistent, i.e. Lab and StructureSpawn.Spawning are the only things allowed to affect it before it pops out; and it might be useful to do before doing a cancel)

    This is a nice visual representation of inconsistency. Not allowed, not allowed, not allowed, allowed, not allowed, not allowed... wait, what? It's definitely looks like someone overlooked a missing check somewhere. But now we decide that no, it's intended to miss that check, and it's a feature, not just a mistake. Simply due to the fact that someone managed to take advantage of that missing check.

    (why is a controller a structure but a source and mineral aren't, why does a container, storage and tombstone have a store, but a creep has carry and then resources, labs, nuker, source and mineral all have their own versions)

    While I admit these don't represent perfect design (and honestly today I'd design them in a different way, and probably will do in some Screeps API 2.0), they are not inconsistences though, they are different API pieces trying to represent different in-game situations.

    👍


  • Would it be possible to benchmark on the live server how many people use this feature?
    There is only a handful of people really invested in the forum, a shout out in slack would also be nice.

    Because it is a really nice coding challenge for people who like hardcore optimization problems.
    I'm really interested how the entire community thinks about that.
    A poll would also be a good idea regardless of how we proceed in this matter.


  • Dev Team

    @mrfaul There was a tweet which is always translated to announcements in slack.



  • Well I'll voice my two cents since everyone seems to want this feature. I think it doesn't make sense, and even if it was in the documentation, it is very easy to miss things in the documentation.

    It doesn't fit with the other mechanics, and I think it's best to remove it.

    👍