Help for other RTS players
This list outlines some of the main differences and similarities between ZK and Starcraft (other games could be added here as well). It could give a head start to players learning ZK who are already familiar with popular RTS games.
Contents
Units and UI
Give Attack Orders rarely
Nearly all mobile units can fire while moving. This means that instead of giving force fire commands you should focus on the positioning of your units. Micromanagement is mostly done with move orders.
Right Click+Drag to give Move Orders
A normal right click will give a move order. But Right-Clicking and dragging will give a line-move order which positions your units along a line. This is a much more powerful way of giving move orders and quickly deploying formations. Units cannot fire through each other and AoE weapons are common so using line-move is required.
'Attack-Move' and 'Patrol' Orders enable Unit AI
Long ranged units with an Attack-Move or Patrol command will automatically kite. Short ranged units will attempt to dodge shots. This behaviour is not as good as a player could implement but it means units can be ignored for some seconds.
Advanced commands
Zero-K has many advanced commands that automate manual tasks from other games, a list of the most common ones can be found here.
Economy
Queue Construction
Shift queuing units and structures does not reserve the resources as it does in Starcraft. Queues have no downsides. There are many advanced queueing options to simplify the creation of queues.
Resources are Spent Continuously, not in Batches
Constructors and factories work by constantly draining resources to add the the progress of a project. If you are trying to drain more than your income each project will take longer.
Metal and Energy costs are equal
The cost value of a unit is both its Metal and Energy cost. As a rule of thumb try to have slightly more energy income than metal income. Both resources are equally required for production; energy is also required for some unit abilities. Excess energy is automatically converted into bonus metal.
Reclaim
The wreckage of dead units can be reclaimed for metal. This is an important part of the economy. Map features such as rocks and trees can also be reclaimed.
Game Flow
Constantly Expand
Expansion in Zero-K is about taking control of an area and building Metal Extractors. This should be done gradually throughout the game in multiple directions at once. Defense for each Metal Extractor should be no more than a Picket or Lotus. Your Commander is a powerful tool for expanding and defending the most pressured edge of your territory.
Constantly Raid
Raiding is similarly gradual. Raid the outlying Metal Extractors, not the base.
Debug data:
[SQLBagOStuff] MainObjectStash using store ReplicatedBagOStuff
[objectcache] MainWANObjectCache using store EmptyBagOStuff
IP: 13.59.192.254
Start request GET /mediawiki/Help_for_other_RTS_players
HTTP HEADERS:
CONTENT-TYPE:
CONTENT-LENGTH: 0
X-ORIGINAL-URL: /mediawiki/Help_for_other_RTS_players
USER-AGENT: Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
HOST: zero-k.info
ACCEPT-ENCODING: gzip, br, zstd, deflate
ACCEPT: */*
CONNECTION: close[localisation] LocalisationCache: using store LCStoreDB
[session] SessionManager using store SqlBagOStuff
[DBReplication] Cannot use ChronologyProtector with EmptyBagOStuff
[DBReplication] Wikimedia\Rdbms\LBFactory::getChronologyProtector: request info {
"IPAddress": "13.59.192.254",
"UserAgent": "Mozilla\/5.0 AppleWebKit\/537.36 (KHTML, like Gecko; compatible; ClaudeBot\/1.0; +claudebot@anthropic.com)",
"ChronologyProtection": false,
"ChronologyPositionIndex": 0,
"ChronologyClientId": false
}[DBConnection] Wikimedia\Rdbms\LoadBalancer::lazyLoadReplicationPositions: executed chronology callback.
[DBConnection] Wikimedia\Rdbms\LoadBalancer::getLocalConnection: connected to database 0 at 'localhost'.
[SQLBagOStuff] Connection mysql object #127 (handle id #121) will be used for SqlBagOStuff
[session] SessionBackend "m9pjpjuqa324cd4bsv74lqs1rt4n6imn" is unsaved, marking dirty in constructor
[session] SessionBackend "m9pjpjuqa324cd4bsv74lqs1rt4n6imn" save: dataDirty=1 metaDirty=1 forcePersist=0
[cookie] already deleted setcookie: "wikidb229_mw__session", "", "1711650335", "/", "", "", "1"
[cookie] already deleted setcookie: "wikidb229_mw_UserID", "", "1711650335", "/", "", "", "1"
[cookie] already deleted setcookie: "wikidb229_mw_Token", "", "1711650335", "/", "", "", "1"
[cookie] already deleted setcookie: "forceHTTPS", "", "1711650335", "/", "", "", "1"
[DBConnection] Wikimedia\Rdbms\LoadBalancer::getLocalConnection: connected to database 0 at 'localhost'.
Title::getRestrictionTypes: applicable restrictions to [[Help for other RTS players]] are {edit,move}
[ContentHandler] Created handler for wikitext: WikitextContentHandler
[MessageCache] MessageCache using store SqlBagOStuff
[SQLBagOStuff] Connection mysql object #127 (handle id #121) will be used for SqlBagOStuff
[SQLBagOStuff] Connection mysql object #127 (handle id #121) will be used for SqlBagOStuff
[SQLBagOStuff] Connection mysql object #127 (handle id #121) will be used for SqlBagOStuff
[SQLBagOStuff] Connection mysql object #127 (handle id #121) will be used for SqlBagOStuff
[SQLBagOStuff] SqlBagOStuff::lock failed due to timeout for wikidb229-mw_:messages:en.
[SQLBagOStuff] Connection mysql object #127 (handle id #121) will be used for SqlBagOStuff
[SQLBagOStuff] Connection mysql object #127 (handle id #121) will be used for SqlBagOStuff
[MessageCache] MessageCache::load: Loading en... local cache is empty, global cache is expired/volatile, loading from database
ParserFactory: using preprocessor: Preprocessor_Hash
Unstubbing $wgLang on call of $wgLang::_unstub from ParserOptions->__construct
[caches] parser: SqlBagOStuff
Article::view using parser cache: yes
[SQLBagOStuff] Connection mysql object #127 (handle id #121) will be used for SqlBagOStuff
[SQLBagOStuff] Connection mysql object #127 (handle id #121) will be used for SqlBagOStuff
Parser cache options found.
[SQLBagOStuff] Connection mysql object #127 (handle id #121) will be used for SqlBagOStuff
[SQLBagOStuff] Connection mysql object #127 (handle id #121) will be used for SqlBagOStuff
ParserOutput cache found.
Article::view: showing parser cache contents
MediaWiki::preOutputCommit: primary transaction round committed
MediaWiki::preOutputCommit: pre-send deferred updates completed
MediaWiki::preOutputCommit: session changes committed
MediaWiki::preOutputCommit: LBFactory shutdown completed
Title::getRestrictionTypes: applicable restrictions to [[Help for other RTS players]] are {edit,move}