Game.cpu.generatePixel change



  • NeyaZayah's AS IT IS NOW and AS IT WILL BE hits the nail on the head. I thought the intent behind .generatePixel() and related graphics is to allow a trivial amount of code (2 lines) to allow access to graphics in the game. Getting players to express themselves with 2D graphics and spicing up the look of the surrounding MMO world at the same time.

    The suggestion to cancel intents isn't a interesting problem or solution to work towards. Simply adding challenges for challenge's sake is not fun.

    What is the problem we're trying to solve? The communities response has been overwhelmingly negative so let's find a different solution to the problem we're trying to fix.

    1. If the problem is to many pixels are being generated by generatePixel(). The function already consumes 5000 CPU of 10000 bucket. We could play with the idea of a value between 5000-8000 but I expect this would disrupt far to many players to be viable. So we can't go higher unless bucket is changed and I doubt that's feasible. So we have to look elsewhere.

    2. "Pixelization" currently costs 500 and refunds are 400 of that 500. Both of these can be changed to slow down the 'value' of pixel generation. Double/Half the amounts that we know work until we find a value that works well. If we want to slow down pixel generation, change pixelization to cost 1000. If that slows down things to much, half the difference to 750 and so on until we find a happy medium. If re-rolling is a concern we can adjust those amounts.

    3. If we're interested in a more complex change we could change the amount of pixels generated per generatePixel() call. If we increase pixelization costs by the same amount. generatePixel() could generates 10 pixels if we change "Pixelization" costs to become 5000 instead of 500. This would allow us to play with the generatePixel amount so if our new "normal" is 10 we could half it to 5 (while keeping "Pixelization" at 5000) to half the 'value' of pixels.

    Note for suggestion #3: If we're entertaining this idea, do this by a factor of 100 or 500. These numbers are a lot easier to tweak then a factor of 10.

    Screeps already has a major problem of rewarding the old guard with the biggest economies and code-bases (Factory change did this most recently) and doing very little for the newer players (safe mode is one of the few catch-up mechanics we have). The proposed change will help those that are already idling all/most of their intents already and hurt those who desperately need those intents for energy and other things as they get their feet under them. Let's not compound problems that are only viable at higher RCL levels vs lower RCLs please.

    ๐Ÿ‘๐Ÿ‘๐Ÿ‘‘๐Ÿ‘†


  • I think we all glossed over:

    @systemparadox said in Game.cpu.generatePixel change:

    @artch said in Game.cpu.generatePixel change:

    @rayderblitz @Gadjung We don't consider any challenges that involve world game objects in pixel-related mechanics.

    That makes sense for buying them and using them, but for generating them that seems like a strange policy.

    Also, you are involving game world objects now - all of them. Every single object in my empire has to pause to generate pixels.

    This is, to me, a super important point. I would really like an answer on how this isn't totally going against that policy.

    ๐Ÿ‘๐Ÿ‘


  • Gadjung was suggesting adding a new game object (new structure) to cross-highways that facilitate getting pixels, artch was saying they weren't considering adding new game objects (or structures) to the world for this. You have to read the full context of the thread.

    Pausing every object of yours isn't a good idea, don't get be wrong. But artch wasn't contradicting themself.



  • Also, other self-contradictory statements:

    @artch said in Game.cpu.generatePixel change:

    Just a routine balancing change, no big deal.

    vs

    @artch said in Game.cpu.generatePixel change:

    There is no "problem" we are trying to fix. Quite the opposite, we want to create a new coding problem here for those generating pixels. We want to create more coding challenge in it besides simple CPU consumption.

    We understand some may get upset since more coding efforts now should be put to continue generating pixels. But this is exactly the idea. Challenges are fun!

    Is it a balance change, or is it trying to create a challenge?

    If it's a balance change, what was out of balance?



  • @raskvann said in Game.cpu.generatePixel change:

    Gadjung was suggesting adding a new game object (new structure) to cross-highways that facilitate getting pixels, artch was saying they weren't considering adding new game objects (or structures) to the world for this. You're talking about two different things.

    Pausing every object of yours isn't a good idea, don't get be wrong. But artch wasn't contradicting themself.

    It says challenges that involve world game objects not implementation of new objects. This is pixels interacting with "world game objects." It is blatantly contradictory.


  • Dev Team

    @cribbit Please let's don't play words and spam pointless discussions here. It's obvious enough what was meant.


  • Dev Team

    Another suggestion that we discussed initially as an alternative for this new cancel rule is raising the bucket cost from 5000 CPU to 9900 CPU (UPD: 10000 CPU). What do you guys think about this one? Can you survive the next tick without skipping it after generatePixel call?

    ๐Ÿ‘


  • @artch said in Game.cpu.generatePixel change:

    Another suggestion that we discussed initially as an alternative for this new cancel rule is raising the bucket cost from 5000 CPU to 9900 CPU. What do you guys think about this one? Can you survive the next tick without skipping it after generatePixel call?

    I like that a lot more. Tbh even make it the full 10k, and extra CPU from the generation tick isn't given to bucket.


  • Dev Team

    @cribbit But then you will lose the entire tick, and not just intents?



  • @artch could you clarify this because I'm now confused?


  • Dev Team

    @systemparadox If you have negative bucket at the start of the tick, it will be skipped with an error Script execution has been terminated: CPU bucket is empty.



  • Ok I don't think @cribbit realised that.

    What if you charged 10K but the extra CPU did carry over like normal. Does it work like this:

    • Tick 1 starts with 9950 bucket and has 100 CPU allocated
    • Tick 1 executes generatePixel, costing 10K CPU
    • Tick 1 does some other stuff costing 40 CPU
    • Tick 2 starts with 10 bucket

    I think this does introduce some interesting challenges and decision making:

    • If you don't have enough bucket to start with, you lose a tick
    • If you spend too much CPU in tick 1, you lose a tick
    • If you spend too much CPU in tick 2, you lose a tick

    The challenge is getting enough bucket in the first place (9000 bucket is easy, but getting a full bucket seems quite hard because of periodic tasks), and in how close you can skirt the CPU limit vs the risk of losing a tick if you run over by mistake.

    This seems much more interesting and doesn't feel like the only way to participate in pixel generation is to opt out of the game entirely for a tick.


  • Dev Team

    @systemparadox This was our initial idea, but we thought displaying a console error and losing a tick is more harsh than cancelling intents only and keeping all calculations. But if enough people tell it's better, we may use this idea instead.



  • @artch said in Game.cpu.generatePixel change:

    @cribbit But then you will lose the entire tick, and not just intents?

    Do we not get CPU allocated per tick?

    I thought it was:

    You have 20 + GCL * 10 CPU for the tick

    If you go over, you can use up to 500 from the bucket, if available

    If you go under, any excess is given to the bucket, which is capped at 10k

    So what I'm saying is:

    generatePixel costs 10k from bucket, plus however much CPU you do not use that tick (eg 150 CPU given for that tick, you use 50, the last 100 does not go to bucket)

    So the tick you generate pixel and the tick after you cannot use bucket, and the ticks beyond that you have to be careful to gain some buffer back before you do anything big.

    That, to me, would be a much more interesting challenge, and one that goes to the core of the performance question of the game. (it also doubles pixel generation cost, which I think would help with their pricing)

    I think the only concern with that setup is it does not play nice with VM resets, so we would either need some indicator that a reset is coming (which I'm assuming can't be done?), or be given an arbitrary higher CPU cap on a VM reset tick.



  • Taking 9900 CPU is better than the current purposed solution. Still going to see a lot of players probably skip this feature, but it isn't as bad.

    ๐Ÿ‘๐Ÿ‘‚๐Ÿ‘†


  • @artch said in Game.cpu.generatePixel change:

    @systemparadox This was our initial idea, but we thought displaying a console error and losing a tick is more harsh than cancelling intents only and keeping all calculations. But if enough people tell it's better, we may use this idea instead.

    I think the whole point is that we have the opportunity to avoid this if we can handle it well in our code. I'll take the risk of losing an entire tick over a guaranteed loss of intents any day.

    As far as I'm concerned a tick without intents is a lost tick anyway. I suspect the majority of players would feel the same way.



  • @artch that's all you have to say to an idea that's trying to catch your points and addressing the overwhelming concerns in the community?

    I am not sure if you even have slightest respect for your community at all.

    The proposal of CONSECUTIVE calls means you have to commit long term to a specific amount instead of paying whenever the bucket is full. You need to actually know how much CPU you can spare. And by not working on the bucket, but CPU it โ€œhurtsโ€œ more.

    I would have wanted you to respond in more detail than just โ€œthis sounds boring to meโ€œ.

    ๐Ÿ‘๐Ÿ‘‚๐Ÿ‘†


  • @nobodysnightmare it was probably unfair to accuse you of not respecting the community... I can't undo that I said that.

    It is just not visible to me how you care about the negative responses you get here and how you weigh the constructive feedback that you receive.



  • @nobodysnightmare This is actually more receptive than usual unfortunately...



  • @nobodysnightmare Let's not turn this into a contest of egos thing; we're just trying to find a solution to a problem โค And it seems like we've found one by simply increasing the bucket cost of generatePixel to 10 000 -> The simplest solutions are often the best for situations like these.

    @artch For as much detail as I put in the post, I apparently didn't put enough if you thought that ๐Ÿ˜ฎ It's okay though; thank you for seeing the community's concerns seriously and for the patience you've shown in the face of such hostility ๐Ÿ™‚

    โค