@artch I agree about the isolated shard. I already don't interact meaningfully with 99% of the players on shard0 and shard1, so I don't know that it would really be that different to play on a 100 person shard. The new shard1 => shard0 portals are so dense that I have lost track of who is potentially an inbound threat. It's basically random.
I combine both methods. I basically have three independent systems-
This defines how much of each mineral and boost each room should have as well as total empire amounts. It has some helper functions on top of it for things like "can use resource immediately", which can be used to prioritize market and terminal orders.
For boosts I only track tier3 with the inventory system- tier1 and tier2 are considered building material and always get upgraded in the room they are in.
The sum of all "needs" for each room is greater than the empire need.
Each room also gets assigned a priority mineral family that it produces (typically a mineral that the room itself mines), which means that room is more likely
This uses Inventory Control to find surpluses and deficits, and then sends resources where they need to go. It only moves base minerals or tier3 boosts, with the exception of GH2O which I will transfer to rooms with X that also need XGH2O.
This controls the labs for each individual room. If there is X in the room it'll look for any tier2 boosts to match, then if there is OH it looks for any tier1 boost it can upgrade.
If there is nothing to upgrade it calculates what tier1 boosts it can make, and filters out the ones there is no need for. It prioritizes based on need (with the exception of GH, which is always the lowest priority). If nothing remains the system attempts to build G (for GH).
1. People buy them. This is the main way they come into existence.
2. As rewards for certain actions to help improve the game. Anyone who contributes an article which gets accepted for the docs.screeps.com site gets the option of having five tokens added to their account.
I ran into this issue in a game i was developing with spidermonkey as the users scripting back end. there isnt a good way to handle misbehaving scripts, all you can do with the API is set a hard limit of time until the script is killed. screeps is maiking the best they can with it by setting up a softlimit and bucket system. But inless the backend changes to allow interruptions and resumes, what can they do?
if the hard reset is removed, then a single while loop could block the entire system until someone pulls the power