I think that the overwhelmingly negative replies to this idea should be taken as a sign that the wrong decision is being made here, even if the intention is pure. And I think it might help to break down the properties of generatePixel as it is now and as it will be if the scheduled change occurs:
AS IT IS NOW:
- This is a super boring solution and virtually the only interaction people have with the system -> if(Game.cpu.bucket>9700) Game.cpu.generatePixel();
- Hard to balance <- With a bucket limit of only 10 000, the CPU consumed by generatePixel cannot be higher than that.
- Economic woes <- It's trivially easy to turn unused CPU into money, thereby flooding the market with both pixels and credits.
- CPU woes <- It's trivially easy to stack large amounts of unused CPU.
AS IT WILL BE:
- This is a super boring solution and virtually the only interaction people have with the system -> if(Game.shard===ONE_I_DONT_USE) return Game.cpu.generatePixle();
- Hard to balance <- With a bucket limit of only 10 000, the CPU consumed by generatePixel cannot be higher than that.
- Economic okay? <- Pixels will be far less common, so this is mostly* fixed <- *Not fixed for people with barely-utilized alt-shards; economy isn't actually fixed.
- CPU woes <- It's trivially easy to stack large amounts of unused CPU.
It's easy to whine and complain that something isn't how we'd like it, but I think it'll be a lot better for both the players and the game if we explore alternatives; otherwise, this is going to 1) Not actually do what's intended and 2) Become an underutilized feature. I've read through all of @artch's replies to the complaints so far, and I think I've come up with an idea adjacent to what he intends that could actually be interesting for players?
Game.cpu.chargePixel();
It's similar to generatePixel in that it consumes CPU, but different in the following ways:
- Consumes X active CPU when called (far less than 5 000; think 100-490; this number counts against "CPU used this tick").
- Must be called Y times IN A ROW (X=200 cpu & Y=25 ticks would equal 5 000 CPU consumed total).
- Has a Z percent chance that, at the end of the call-series, a pixel is generated (Z=1 would be as it is now; this is your knob for economic balance!).
This function does not create any additional world-objects. X, Y, and Z are variables that can be tweaked for balance or dynamically adjusted to hit a performance goal on the server.
- Variable X provides a challenge to the player: Can you operate at -100 CPU per tick for an extended period?
- Variable Y provides a CPU-sink for the server: How big this number is will determine how much CPU is removed from the game.
- Variable Z provides an economic knob: Too many pixels/credits? Lower the percentage! Too few? Raise it!
Optional extras:
- Stun the creeps in a room provided by Game.cpu.chargePixel(roomName) at the end of the call-series?
4.1) Must be a controlled room?
4.2) Number of creeps adjusts the chance of Z?
4.3) Stun the creeps in adjacent rooms?
4.4) Generate extra fatigue for affected creeps during the call-series?
- Creeps in a room provided by Game.cpu.chargePixel(roomName) "poop out" pixels with a random chance of variable W? It drops on the floor, and you have to be quick before it decays! <- This could potentially cause some chaos in a person's logistics network that they might be challenged to overcome
5.1) Pixels that exist physically have a timeToDecay of variable V EVEN IF carried by a creep; get it to a terminal/controller fast!
- Variable Z could compound with each successive call-series-loop to encourage LONG TERM pixel generation (e.g. it starts at 10% and adds 1% for each call-series, resetting after a time of disuse).
- Probably a bunch of other things I'm not thinking of that could make this fun.
In summary: There's a better way to approach this problem that's more fun AND better addresses the economic, cpu, and player-challenge problems posed by the current (and proposed) solutions