Hello everyone!

We're happy to introduce one of the biggest content updates in Screeps! We tested it since May on the PTR and private servers with your help, and now we're ready to launch these exciting new features.

IMPORTANT: Although we put our best effort to make this update as less breaking as possible, some things in your code may break due to the new improved API. See the API Changes section below for details.

Factory and new resources

A new structure is now available at RCL 7: Factory. It allows for creating many new types of resources. Four of these are very special — we have added new raw resources to the game. They have Deposit game object type and can be occasionally found in "highway" rooms. You can harvest them as usual, but they will exhaust over time and have a limited lifespan. Deposits are distributed unevenly across the world map: one resource type per map quadrant (NW, NE, SW, SE).

Using factories, you can produce new resources that we call "trade commodities." These are resources that NPC market traders are most interested in. They have no other purpose other than to be sold and generate credits. Producing high-level commodities is the most profitable business in the game.

The factory mechanic is tightly linked with the OPERATE_FACTORY power. The full use of factories will be possible only by leveraging the coordinated work of multiple Operators.

We have developed four production chains of high-level trade commodities (for each new raw resource type). This is how the market now looks:

We're very excited about this change since it provides much more interesting crafting and trading challenges in the game. If you're an economy gamer, you'll definitely like it! But what if the fighting aspect of Screeps appeals to you more?

See documentation: Commodities



PTR forum topic

Draft discussion

NPC Strongholds

NPC Invaders now have a home!

If you check your sector on the map now, you will see that one room in each sector is claimed by the "Invader" user, and has its base in it. This is a place where all invader creeps in this sector originate from. Now, although it has towers and defender creeps (sometimes quite strong), if you attack and destroy this NPC stronghold, invaders will stop appearing in this sector until a new stronghold reappears elsewhere.

If you leave the stronghold untouched, it will spawn lesser cores in rooms nearby and reserve them. You'll have to destroy cores to resume harvesting there.

There is one more reason to conquer an NPC Stronghold — it contains resources in its treasury. Every stronghold has a few containers, and the core structure ruin also will contain valuable resources after you destroy it. Here is an example of a level 5 stronghold loot:

We will continue working on the stronghold defenders AI to make it an exciting fighting challenge for players of all levels.

See documentation: NPC Strongholds



PTR forum topic

Draft discussion

Ruins

We also introduced a new concept of ruins, which is similar to tombstones. When you destroy a structure, it does not disappear but drops a ruin object. All resources are moved to the ruin's store. In general, player structures ruins have 500 ticks of decay, but some special cases exist:

InvaderCore ruins will last the same equal time as the remaining EFFECT_COLLAPSE_TIMER on it.

When a user respawns, all structures are converted to ruins with 500,000 decay time.

When a novice player initially spawns into the room with another player's structures, all structures are converted to ruins with 100,000 decay time.

API Changes

POSSIBLY BREAKING CHANGE: Implemented new global Store prototype. All structures and creeps now use this prototype as their store property. Old style properties are now considered deprecated. See documentation for more details, and also this previous discussion. If you have any troubles because of this change, it most likely falls into one of these categories: You're checking for structure.store presence to distinguish storages and containers from spawns and extensions. Use structure.structureType check instead, or structure.store.getCapacity(RESOURCE_ENERGY) !== null . You're comparing .store[resource] === undefined . Now all absent resources are equal to 0. You're trying to redefine store property, which is now non-configurable.

POSSIBLY BREAKING CHANGE: Removed FIND_DROPPED_ENERGY constant, which was deprecated long ago. Use FIND_DROPPED_RESOURCES instead.

POSSIBLY BREAKING CHANGE: Removed all Structure*.transfer methods which were deprecated long ago. Use Creep.withdraw instead.

New prototypes: StructureFactory , StructureInvaderCore , Deposit , Ruin .

A lot of new constants.

PWR_OPERATE_FACTORY power is now operational.

RoomObject.effects elements now have effect property instead of power. Property power remains for backward compatibility, but is not documented and will be removed in the future.

Added new method Game.market.getHistory , which contains historical price data for all resources.

Increased per-player market orders limit from 50 to 300.

Added expiration period to market orders. An order expires in 30 days after its creation, and the remaining market fee is returned. Extending the order doesn't update its expiration time.

Game.market.createOrder now accepts parameters in an object notation in order to minimize mistakes caused by wrong order of parameters: Game.market.createOrder({ type: ORDER_BUY, resourceType: RESOURCE_ENERGY, price: 0.01, totalAmount: 100000, roomName: 'W1N1' });

Dismantle does not work through own and public ramparts.

Nuke landing does not generate tombstones and ruins, and destroys all existing tombstones and ruins in the room.

Removed minimal limit for StructureTerminal.send .

Various bug fixes.