<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://test.zero-k.info/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sprung</id>
	<title>Zero-K - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://test.zero-k.info/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sprung"/>
	<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/Special:Contributions/Sprung"/>
	<updated>2026-04-12T15:37:30Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.34.1</generator>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Transportation&amp;diff=9826</id>
		<title>Transportation</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Transportation&amp;diff=9826"/>
		<updated>2024-07-28T21:55:32Z</updated>

		<summary type="html">&lt;p&gt;Sprung: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Transports are used to rapidly move ground and sea forces around the battlefield. There are two transports: [[Charon]] and [[Hercules]]. Both are constructed at the [[Gunship Plant]].&lt;br /&gt;
&lt;br /&gt;
[[Teleportation]] is an alternative means of transportation.&lt;br /&gt;
&lt;br /&gt;
== Basic Commands and Abilities ==&lt;br /&gt;
&lt;br /&gt;
=== Mass and Capacity ===&lt;br /&gt;
Transports can pick up and carry a single unit at a time.&lt;br /&gt;
&lt;br /&gt;
[[Charon]] can carry '''light''' and '''medium''' units while [[Hercules]] can carry any transportable unit. Transports cannot carry air units. A unit's transportability depends on its metal cost. Light units are units below or equal to 500 metal, medium units are between 501 and 1000 metal, and heavy units are everything else. A unit's transportability and mass can be viewed in an information window by {{key press|Space}}-clicking on the unit.&lt;br /&gt;
&lt;br /&gt;
Laden transports have a speed penalty depending on the mass of their cargo. Transports receive no additional speed penalty for transporting units up to their own mass, otherwise, they have a speed modifier of {{frac|2 &amp;amp;times; &amp;lt;var&amp;gt;selfMass&amp;lt;/var&amp;gt;|{{expr|&amp;lt;var&amp;gt;selfMass&amp;lt;/var&amp;gt; + &amp;lt;var&amp;gt;cargoMass&amp;lt;/var&amp;gt;}}}}&amp;lt;!--&amp;lt;code&amp;gt;2*selfMass / (selfMass + cargoMass)&amp;lt;/code&amp;gt;--&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Loading ===&lt;br /&gt;
Transports can pick up any valid &amp;lt;em&amp;gt;stationary&amp;lt;/em&amp;gt; unit, including stunned enemies. They have to physically lower themselves onto a unit to pick it up. This process can take a few seconds, depending on the target. There are two ways to load units:&lt;br /&gt;
# Issue the [[Load Command|'''Load''']] command (hotkey {{key press|L}}) to a transport to load the target unit. This command is generally available as a right-click context command. Issue an area command with by clicking and dragging to tell multiple transports to load a group of units.&lt;br /&gt;
# Select a mixed selection of transports and ground units and issue the '''Load Selected Units''' command (double-tap {{key press|L}}) to have the transports load the selected units. Idle units will be loaded into the transports while units with orders will be loaded and transported to the end of their order queue.&lt;br /&gt;
&lt;br /&gt;
=== Unloading ===&lt;br /&gt;
Transports can either carefully place their cargo on the ground, or they can eject it in-flight.&lt;br /&gt;
* Use the [[Unload Command|'''Unload''']] command (hotkey {{key press|U}}) to unload carefully. This command can be issued in an area selected by clicking and dragging or along a line by {{key press|Alt}}-clicking and dragging.&lt;br /&gt;
* Use the [[Eject Cargo Command|'''Eject Cargo''']] command (hotkey {{key press|D}}) to drop transported units. This may damage the dropped units. Transports carrying bombs draw a target where the bomb is going to hit on the ground based on their velocity.&lt;br /&gt;
&lt;br /&gt;
== Transport AI ==&lt;br /&gt;
'''Transport AI''' can be toggled with the unit AI state toggle (&amp;lt;img src=&amp;quot;//raw.githubusercontent.com/ZeroK-RTS/Zero-K/master/LuaUI/Images/commands/states/bulb_on.png&amp;quot; height=&amp;quot;18&amp;quot;&amp;gt;) on transports.&lt;br /&gt;
&lt;br /&gt;
Transports can be set to [[Guard Command|guard]] a factory to automatically pick up newly created units and drop them off at the end of the rally queue.&lt;br /&gt;
&lt;br /&gt;
There are two queueable commands: ''Embark'' [[File:Embark.png|18px]] and ''Disembark'' [[File:Disembark.png|18px]]&amp;amp;mdash;these commands appear on transportable land units and factories when you build your first air transport.&lt;br /&gt;
*'''Embark'''&amp;amp;mdash;wait for transport to pick me up. Transports called by the ''Embark'' command will return to the spot where they took the unit using the same path.&lt;br /&gt;
*'''Disembark'''&amp;amp;mdash;safely exit and from the transport.&lt;br /&gt;
&lt;br /&gt;
=== Benefit ===&lt;br /&gt;
A transport might skip some units because it finds it pointless to transport them. It takes several things into account&amp;amp;mdash;distance of transport from unit, planned unit path, unit speed, transport speed, transport land times, terrain height differences&amp;amp;mdash;all of this is used to estimate the &amp;quot;benefit&amp;quot; of transporting a given unit with the air transport.&lt;br /&gt;
&lt;br /&gt;
'''Benefit''' is the number of seconds saved by using a transport. It transports units only if benefit is greater than five seconds and in the order of benefit (slowest units will be transported first, fast units might be ignored completely). The exception to this is the ''Embark'' command, which serves as &amp;quot;priority&amp;quot; transport&amp;amp;mdash;units waiting with the ''Embark'' command will be served first.&lt;br /&gt;
&lt;br /&gt;
=== Possible uses ===&lt;br /&gt;
# Give bot factory waypoints through safe area next to the current battlefield.&lt;br /&gt;
#* Result: Units walk along these waypoints and if there are idle transports they will pick them up and transport them to their destination.&lt;br /&gt;
# Give factory waypoint to ally's base entrance followed by [[Patrol Command|patrol]].&lt;br /&gt;
#* Result: Units walk there and if transport nearby it will pick it up, drop it off and the unit will start patrolling.&lt;br /&gt;
# Give factory a move order near your base, ''Embark'', then move to an impassable mountain.&lt;br /&gt;
#* Result: Units will emerge from factory and enter ''Embark'' mode&amp;amp;mdash;they will stand there and wait for transport to get them to the mountain.&lt;br /&gt;
# Select crawling bombs, click to move to enemy base then click ''Embark''.&lt;br /&gt;
#* Result: Bombs will stop and wait for transports, transports will carry them to enemy base.&lt;br /&gt;
# Select Dantes, give them move commands across air safe areas, followed by disembark from behind the base spot and move to enemy base. Then click ''Embark''.&lt;br /&gt;
#* Result: Dantes will stop and wait for transports. Transport will carry them along the waypoints to back of enemy base, unload them. From there, Dantes will continue on foot.&lt;br /&gt;
&lt;br /&gt;
== Ferry routes ==&lt;br /&gt;
Ferry routes automate transports to travel units across a set path to a destination. The &amp;lt;abbr title=&amp;quot;user interface&amp;quot;&amp;gt;UI&amp;lt;/abbr&amp;gt; for creating ferry routes is (by default) in the upper left corner bar next to ''retreat and repair''. The symbol is a red circle with a ray pointing out of it to the right ([[File:Ferry.png|18px]]). To create a ferry route, first left-click the ferry route button, next left-click the start location of your ferry route, then left-click the destination. A ferry route does not have to be just a straight line. The path to take can twist and turn all you like by holding {{key press|Shift}} and left-clicking between the starting area and destination. Your ferry route will appear as a hard red circle indicating the start and a line directing out of that circle towards the destination.&lt;br /&gt;
&lt;br /&gt;
Transports return to the spot where they took a unit using the same path.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;video&amp;quot; width=&amp;quot;560&amp;quot; height=&amp;quot;320&amp;quot; loop=&amp;quot;true&amp;quot; autoplay=&amp;quot;true&amp;quot; src=&amp;quot;//i.imgur.com/XHY0vP7.mp4&amp;quot; controls=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can even edit your ferry route by clicking the ferry route button, holding {{key press|Shift}} and clicking where you placed a start, end, or corner to select it, and then clicking where you want that point to be.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;video&amp;quot; width=&amp;quot;560&amp;quot; height=&amp;quot;320&amp;quot; loop=&amp;quot;true&amp;quot; autoplay=&amp;quot;true&amp;quot; src=&amp;quot;//i.imgur.com/WC2qb03.mp4&amp;quot; controls=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To remove a ferry route, click the ferry route button and left-click a start location.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;video&amp;quot; width=&amp;quot;560&amp;quot; height=&amp;quot;320&amp;quot; loop=&amp;quot;true&amp;quot; autoplay=&amp;quot;true&amp;quot; src=&amp;quot;//i.imgur.com/SHFhe68.mp4&amp;quot; controls=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that you have your ferry route, it's time to put it to use! Assign transports to the ferry route by issuing a move command into the start circle. The transports will now stay within a short distance of the start, even if you try and move them away, waiting for units. Take a unit you want to ferry and issue a move order into the circle. Once the unit is in the circle, it will wait for a transport to pick it up and move it to the end of the ferry route. You can shift queue commands for the unit, and it will follow the commands after arrival at the destination.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;video&amp;quot; width=&amp;quot;560&amp;quot; height=&amp;quot;320&amp;quot; loop=&amp;quot;true&amp;quot; autoplay=&amp;quot;true&amp;quot; src=&amp;quot;//i.imgur.com/No0wGkg.mp4&amp;quot; controls=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Potential uses for ferry routes:&lt;br /&gt;
*To move a large army around static anti-air cover to far locations, as the transports will follow the route both to and from the location.&lt;br /&gt;
*You can set your factory's waypoint to the ferry route start, and units will wait for transports to ferry them.&lt;br /&gt;
&lt;br /&gt;
While automated, ferry routes require periodical check-ups. Under certain circumstances, a unit may end up waiting to be transported forever. Also, units waiting for transports may enter the [[Wait Command|Wait]] state, denoted by an hourglass icon above the unit, which will prevent them from defending themselves.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--There are a few bugs with the system, such as if you assign a transport to a ferry route one time it may be unable to ever be assigned to a different ferry route, sometimes units won't seen to call for transports when they are in the start circle. if you have a gunship plant's rally point in a ferry route, the transports will wait for transport instead of being added to the ferry route, so you need to manually move them into the circle. There seem to be cases where there are both units and transports at the start location, but the units wait for a transport that is already off on it's ferry mission to come back and pick them up, which is undesired. Somehow, units seem to wait for a transport outside the circle, and thus never get a transport to pick them up. If a unit is waiting and not picked up, it will never get assigned a wait command when issuing a move command into the circle, and if you want it to be ferried, you must manually issue a wait command on the unit while it is inside the ferry circle. If the &amp;lt;abbr title=&amp;quot;landing zone&amp;quot;&amp;gt;LZ&amp;lt;/abbr&amp;gt; is cluttered with units at the end of the ferry, transports will get stuck and not place units down, instead just holding them hostage over the end point. All in all, while automated, ferry routes require periodical check-ups.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Navbox manual}}&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Modelling_guidelines&amp;diff=9789</id>
		<title>Modelling guidelines</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Modelling_guidelines&amp;diff=9789"/>
		<updated>2024-06-15T12:33:42Z</updated>

		<summary type="html">&lt;p&gt;Sprung: Example for a remodel PR&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Before you get started ==&lt;br /&gt;
* keep in mind that someone else might already be working on the unit you were planning to remodel, so check [https://docs.google.com/spreadsheets/d/11UyxUYvkbwck0F2cEVEdHvxxtllXzOBDkXnOtb-4fK8/edit#gid=126218909 the remodel tracker]. We also accept &amp;quot;loose&amp;quot; models (i.e. not remodels of existing units) but by default these will just join a sort of unused model pool for use by modders or experiments.&lt;br /&gt;
* be aware that devs are handling other stuff and are not artists at heart so your model may get &amp;quot;difficult&amp;quot; feedback and it may take a while to implement it ([https://github.com/ZeroK-RTS/Zero-K/pull/5164 here]'s an example process for a recent model, as a reference). Don't get discouraged!&lt;br /&gt;
* be aware that implementing a model into the game takes some knowledge of the game engine, so realistically you will require help at some point. Don't be afraid to ask!&lt;br /&gt;
&lt;br /&gt;
== Preparation ==&lt;br /&gt;
Here's a bunch of things to think about and take into account when laying the foundations for your model.&lt;br /&gt;
&lt;br /&gt;
* let people know you're starting work to get initial feedback (#modelling channel on ZK Discord).&lt;br /&gt;
* if you're doing a remodel, the existing model is your authoritative source of concept art. Identify what makes it unique and replicate it. An ideal remodel is merely a strict quality upgrade.&lt;br /&gt;
* a thing to watch out is whether the unit can fire &amp;quot;over itself&amp;quot;, i.e. another unit of the same type. If the original unit blocks itself from firing then this should carry over to a remodel.&lt;br /&gt;
* the model should generally not have any bits sticking out too much since they will clip into adjacent things. A good model can fit &amp;quot;neatly&amp;quot; inside a sphere or a box.&lt;br /&gt;
* the model should be split into separate pieces, which double as the 'bones' of the model (skinning is supported with up to 4 pieces/bones per vertex though). More technical info at [[Blender_To_Zero-K|the more technical modelling guide for Blender]].&lt;br /&gt;
* use the existing model as a reference for the order of magnitude when it comes to polygons, perhaps check some similar units from the same unit class (there's [https://github.com/ZeroK-RTS/Zero-K/issues/5214 a ticket aiming to produce a full listing], maybe it will contain something interesting by the time you read it). As a ballpark you can get into thousands unless the unit is particularly spammable (say Flea).&lt;br /&gt;
* keep the texture on the smaller side (say 512 or 1024 unless it's a rare unit), again check the ticket above or look at similar units. If you plan to remodel a handful of similar units it is an excellent idea to use a shared texture (atlas) between them, which gives benefits in visual consistency and rendering performance and is a good reason to make the texture much larger.&lt;br /&gt;
&lt;br /&gt;
== During work; initial feedback ==&lt;br /&gt;
This is the stage where the basic model shape is done and you want to move onto the details.&lt;br /&gt;
&lt;br /&gt;
* double-check that there is a materials texture (second texture whcih defines shininess etc) and also a normals texture (FIXME normals may currently be broken)&lt;br /&gt;
* feedback, and eventually model approval, comes from GoogleFrog. Show him (and perhaps the general modelling community at #modelling) some screenshots or a video, the earlier you do so the more chance of finding potential problems. GoogleFrog is the lead dev/designer and is quite busy with other stuff so it may take him a while to give feedback.&lt;br /&gt;
* if GF initially has negative feedback you can talk to Niarteloc for a quicker response.&lt;br /&gt;
&lt;br /&gt;
== Model has taken up shape ==&lt;br /&gt;
* at this point, getting feedback involves a proof-of-concept implementation of the model ingame that GoogleFrog could test.&lt;br /&gt;
* salient places on the model (e.g. tip of the barrel where projectiles will appear) will need an empty piece with no geometry and just the &amp;quot;origin&amp;quot; set to their location.&lt;br /&gt;
* the model needs a basic animation at this point but unfortunately this involves Lua code. Look at existing scripts to get a basic idea. Otherwise it should largely be a matter of placing files in the directory structure correctly.&lt;br /&gt;
* if you're willing to do this on your own, check out these: (FIXME add links some example accepted PRs, maybe a scripting guide or something)&lt;br /&gt;
* eye candy (special effects, fancy animations etc) are optional at this point (but of course if you manage to implement them that's great).&lt;br /&gt;
* talk to Niarteloc or Sprung if you struggle with this step.&lt;br /&gt;
&lt;br /&gt;
== After the base model is done ==&lt;br /&gt;
* check with GoogleFrog again to make sure it's really ready.&lt;br /&gt;
* there needs to be a wreck model. It is a mangled version of the base mesh, and there's a standard texture for wrecks so you don't need to provide one (but are welcome to if it makes the wreck look much better, just keep the color tone the same as default).&lt;br /&gt;
* remaining salient places, e.g. eye candy particle spawners (tips of aircraft wings for blinking lights, underside of tank treads for dust kickup etc) need an empty piece as well, if you haven't added them in earlier stages.&lt;br /&gt;
* playtesting the model would be great. Play a game vs bots using the model (FIXME link a basic modding guide here)&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Status_Effects&amp;diff=9231</id>
		<title>Status Effects</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Status_Effects&amp;diff=9231"/>
		<updated>2024-04-13T14:20:21Z</updated>

		<summary type="html">&lt;p&gt;Sprung: Reef now captures.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Zero-K has a lot of status effects, special debuffs that can be applied to enemy units to help suppress them and support your armies in battle. They work by filling separate damage meters underneath the target's hit points, and generate various effects.{{TOC right}}&lt;br /&gt;
&lt;br /&gt;
== EMP damage ==&lt;br /&gt;
&amp;lt;abbr title=&amp;quot;electromagnetic pulse&amp;quot;&amp;gt;EMP&amp;lt;/abbr&amp;gt; damage stuns enemies, completely disabling them and preventing them from moving, using abilities, or returning fire.&lt;br /&gt;
&lt;br /&gt;
[[File:Weapon EMP.jpg]]&lt;br /&gt;
&lt;br /&gt;
* When an instance of EMP damage is applied to an enemy, it is checked in proportion to the enemy's current health and converted into a stacking percentage.&lt;br /&gt;
* When EMP percentage reaches 100% or higher, the unit is stunned.&lt;br /&gt;
* EMP percentage on units decay at a rate of 2.5% per second. The moment the unit's percentage drops below 100%, it is no longer stunned.&lt;br /&gt;
* Even though EMP percentage stacks, it doesn't stack freely: every EMP weapon has a maximum percentage it can raise a unit to. This is described in the weapon stat block as a maximum stun time - each second effectively being a 2.5% maximum over 100% since EMP decays at that rate.&lt;br /&gt;
** For example, a [[Venom]] has a maximum stun time of 1s, which means it can at most raise an enemy's stun percentage to 102.5%.&lt;br /&gt;
** Meanwhile a [[Widow]] can stun a unit for 30s, which means it can raise an enemy's stun percentage to 100 + 30 &amp;amp;times; 2.5 = 175%.&lt;br /&gt;
&lt;br /&gt;
Against shields, EMP damage is divided by 3 and converted into normal shield damage. If a weapon deals normal and EMP damage together, the EMP damage is applied last.&lt;br /&gt;
&lt;br /&gt;
EMP is yellow, or in the case of the self-destructing [[Imp]], blue.&lt;br /&gt;
&lt;br /&gt;
== Disarm damage ==&lt;br /&gt;
Disarm is a particular type of EMP that will leave the afflicted units able to move, but unable to use any weapons or special abilities (this includes jumping, using build power, regeneration or receiving income from the commander's Vanguard economy module). Disarm damage is converted into a separate disarm percentage bar tracked independently from EMP percentage. Disarmed units flash yellow instead of blue.&lt;br /&gt;
&lt;br /&gt;
== Slow damage ==&lt;br /&gt;
Slow damage gradually decreases the movement speed and rate of fire of enemy units.&lt;br /&gt;
&lt;br /&gt;
[[File: Weapon slow.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Unlike EMP or disarm damage, slow damage is tracked and stored directly on the affected unit as a total rather than being converted into a percentage.&lt;br /&gt;
* As long as a unit has slow damage on it, it is slowed in proportion to the slow damage / its current health. This means that damaging a unit can increase its slow since the slow damage buffer becomes proportionally larger.&lt;br /&gt;
* Slow damage is always capped at 50% of the unit's current health. If a unit is damaged to the point that slow damage would rise over this limit, the extra slow damage is cleared.&lt;br /&gt;
* After 0.5s of taking no slow damage, units start clearing slow damage = 4% of their current health per second.&lt;br /&gt;
* Some units (the [[Limpet]] and [[Moderator]]) apply '''overslow''':&lt;br /&gt;
** This is a secondary status effect that raises the slow damage cap of the target to higher than 50% of the target's current HP.&lt;br /&gt;
** Even when a unit's slow damage taken is higher than 50% of its current health, it is still only slowed down by 50%. Overslow effectively &amp;quot;stretches out&amp;quot; the 50% slow longer.&lt;br /&gt;
** Overslow is tracked and cleared separately from slow.&lt;br /&gt;
&lt;br /&gt;
Like EMP damage, slow damage is divided by 3 and converted into normal damage against shields.&lt;br /&gt;
&lt;br /&gt;
Slow is purple.&lt;br /&gt;
&lt;br /&gt;
== Capture damage ==&lt;br /&gt;
Capture damage is a special kind of damage only dealt by the [[Dominatrix]] and the [[Reef]]'s drones. It can steal a unit from an enemy and place it under your (potentially permanent) control.&lt;br /&gt;
&lt;br /&gt;
* When an instance of capture damage is applied to an enemy, it is directly converted into a percentage just like with EMP damage. Unlike with EMP damage, it's divided by (the target enemy's current HP + 500) instead of just the target's current HP.&lt;br /&gt;
* When a unit reaches 100% capture percentage, it is captured and belongs to the unit who dealt that last bit of capture damage. It stays this way until the controller is destroyed.&lt;br /&gt;
* After 5s of taking no capture damage, capture percentage decays at a rate of 4% per second.&lt;br /&gt;
* If a captured unit's controller is destroyed, it is returned to its original owner with 95% capture percentage.&lt;br /&gt;
* Capturing a controller grants control of all its subordinates, in a tree-like control structure.&lt;br /&gt;
* Even though capture percentage stacks, it does not stack between players who belong on different teams. Each team gets their own capture bar for the target unit, and the UI will only display the highest percentage.&lt;br /&gt;
&lt;br /&gt;
When a capturing unit takes control of an enemy unit, a visible control line is drawn leading from the controller to its victim. The full line is visible to any enemy player who has vision of either end of the line, so they can spot hidden controllers.&lt;br /&gt;
&lt;br /&gt;
Even though the Dominatrix has a 12 second reload time after capturing a unit, this only applies to the Dominatrix that dealt the final instance of capture damage - every other Dominatrix that contributed can fire on new targets immediately. Reef's drones have individual capture reload timers but their damage counts for the Reef.&lt;br /&gt;
&lt;br /&gt;
Capturing a unit that originally belonged to an ally returns it to that ally without creating a control link.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Navbox manual}}&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Modelling_guidelines&amp;diff=9224</id>
		<title>Modelling guidelines</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Modelling_guidelines&amp;diff=9224"/>
		<updated>2024-03-23T18:19:56Z</updated>

		<summary type="html">&lt;p&gt;Sprung: Technical limits&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Before you get started ==&lt;br /&gt;
* keep in mind that someone else might already be working on the unit you were planning to remodel, so check [https://docs.google.com/spreadsheets/d/11UyxUYvkbwck0F2cEVEdHvxxtllXzOBDkXnOtb-4fK8/edit#gid=126218909 the remodel tracker]. We also accept &amp;quot;loose&amp;quot; models (i.e. not remodels of existing units) but by default these will just join a sort of unused model pool for use by modders or experiments.&lt;br /&gt;
* be aware that devs are handling other stuff and are not artists at heart so your model may get &amp;quot;difficult&amp;quot; feedback and it may take a while to implement it. Don't get discouraged!&lt;br /&gt;
* be aware that implementing a model into the game takes some knowledge of the game engine, so realistically you will require help at some point. Don't be afraid to ask!&lt;br /&gt;
&lt;br /&gt;
== Preparation ==&lt;br /&gt;
Here's a bunch of things to think about and take into account when laying the foundations for your model.&lt;br /&gt;
&lt;br /&gt;
* let people know you're starting work to get initial feedback (#modelling channel on ZK Discord).&lt;br /&gt;
* if you're doing a remodel, the existing model is your authoritative source of concept art. Identify what makes it unique and replicate it. An ideal remodel is merely a strict quality upgrade.&lt;br /&gt;
* a thing to watch out is whether the unit can fire &amp;quot;over itself&amp;quot;, i.e. another unit of the same type. If the original unit blocks itself from firing then this should carry over to a remodel.&lt;br /&gt;
* the model should generally not have any bits sticking out too much since they will clip into adjacent things. A good model can fit &amp;quot;neatly&amp;quot; inside a sphere or a box.&lt;br /&gt;
* the model should be split into separate pieces, which double as the 'bones' of the model (skinning is supported with up to 4 pieces/bones per vertex though). More technical info at [[Blender_To_Zero-K|the more technical modelling guide for Blender]].&lt;br /&gt;
* use the existing model as a reference for the order of magnitude when it comes to polygons, perhaps check some similar units from the same unit class (there's [https://github.com/ZeroK-RTS/Zero-K/issues/5214 a ticket aiming to produce a full listing], maybe it will contain something interesting by the time you read it). As a ballpark you can get into thousands unless the unit is particularly spammable (say Flea).&lt;br /&gt;
* keep the texture on the smaller side (say 512 or 1024 unless it's a rare unit), again check the ticket above or look at similar units. If you plan to remodel a handful of similar units it is an excellent idea to use a shared texture (atlas) between them, which gives benefits in visual consistency and rendering performance and is a good reason to make the texture much larger.&lt;br /&gt;
&lt;br /&gt;
== During work; initial feedback ==&lt;br /&gt;
This is the stage where the basic model shape is done and you want to move onto the details.&lt;br /&gt;
&lt;br /&gt;
* double-check that there is a materials texture (second texture whcih defines shininess etc) and also a normals texture (FIXME normals may currently be broken)&lt;br /&gt;
* feedback, and eventually model approval, comes from GoogleFrog. Show him (and perhaps the general modelling community at #modelling) some screenshots or a video, the earlier you do so the more chance of finding potential problems. GoogleFrog is the lead dev/designer and is quite busy with other stuff so it may take him a while to give feedback.&lt;br /&gt;
* if GF initially has negative feedback you can talk to Niarteloc for a quicker response.&lt;br /&gt;
&lt;br /&gt;
== Model has taken up shape ==&lt;br /&gt;
* at this point, getting feedback involves a proof-of-concept implementation of the model ingame that GoogleFrog could test.&lt;br /&gt;
* salient places on the model (e.g. tip of the barrel where projectiles will appear) will need an empty piece with no geometry and just the &amp;quot;origin&amp;quot; set to their location.&lt;br /&gt;
* the model needs a basic animation at this point but unfortunately this involves Lua code. Look at existing scripts to get a basic idea. Otherwise it should largely be a matter of placing files in the directory structure correctly.&lt;br /&gt;
* if you're willing to do this on your own, check out these: (FIXME add links some example accepted PRs, maybe a scripting guide or something)&lt;br /&gt;
* eye candy (special effects, fancy animations etc) are optional at this point (but of course if you manage to implement them that's great).&lt;br /&gt;
* talk to Niarteloc or Sprung if you struggle with this step.&lt;br /&gt;
&lt;br /&gt;
== After the base model is done ==&lt;br /&gt;
* check with GoogleFrog again to make sure it's really ready.&lt;br /&gt;
* there needs to be a wreck model. It is a mangled version of the base mesh, and there's a standard texture for wrecks so you don't need to provide one (but are welcome to if it makes the wreck look much better, just keep the color tone the same as default).&lt;br /&gt;
* remaining salient places, e.g. eye candy particle spawners (tips of aircraft wings for blinking lights, underside of tank treads for dust kickup etc) need an empty piece as well, if you haven't added them in earlier stages.&lt;br /&gt;
* playtesting the model would be great. Play a game vs bots using the model (FIXME link a basic modding guide here)&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Modelling_guidelines&amp;diff=9220</id>
		<title>Modelling guidelines</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Modelling_guidelines&amp;diff=9220"/>
		<updated>2024-03-23T00:17:53Z</updated>

		<summary type="html">&lt;p&gt;Sprung: Modelling guidelines by LKST&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Before you get started ==&lt;br /&gt;
* keep in mind that someone else might already be working on the unit you were planning to remodel, so check [https://docs.google.com/spreadsheets/d/11UyxUYvkbwck0F2cEVEdHvxxtllXzOBDkXnOtb-4fK8/edit#gid=126218909 the remodel tracker]. We also accept &amp;quot;loose&amp;quot; models (i.e. not remodels of existing units) but by default these will just join a sort of unused model pool for use by modders or experiments.&lt;br /&gt;
* be aware that devs are handling other stuff and are not artists at heart so your model may get &amp;quot;difficult&amp;quot; feedback and it may take a while to implement it. Don't get discouraged!&lt;br /&gt;
* be aware that implementing a model into the game takes some knowledge of the game engine, so realistically you will require help at some point. Don't be afraid to ask!&lt;br /&gt;
&lt;br /&gt;
== Preparation ==&lt;br /&gt;
Here's a bunch of things to think about and take into account when laying the foundations for your model.&lt;br /&gt;
&lt;br /&gt;
* let people know you're starting work to get initial feedback (#modelling channel on ZK Discord).&lt;br /&gt;
* if you're doing a remodel, the existing model is your authoritative source of concept art. Identify what makes it unique and replicate it. An ideal remodel is merely a strict quality upgrade.&lt;br /&gt;
* a thing to watch out is whether the unit can fire &amp;quot;over itself&amp;quot;, i.e. another unit of the same type. If the original unit blocks itself from firing then this should carry over to a remodel.&lt;br /&gt;
* the model should generally not have any bits sticking out too much since they will clip into adjacent things. A good model can fit &amp;quot;neatly&amp;quot; inside a sphere or a box.&lt;br /&gt;
* the model should be split into separate pieces, which double as the 'bones' of the model (skinning is supported with up to 4 pieces/bones per vertex though). More technical info at [[Blender_To_Zero-K|the more technical modelling guide for Blender]].&lt;br /&gt;
* you can have quite a lot of polygons (Glaive is 1000+) but keep the texture on the smaller side. If you plan to remodel a handful of similar units it is an excellent idea to use a shared texture (atlas) between them, which gives benefits in visual consistency and rendering performance and is a good reason to make the texture a bit larger.&lt;br /&gt;
&lt;br /&gt;
== During work; initial feedback ==&lt;br /&gt;
This is the stage where the basic model shape is done and you want to move onto the details.&lt;br /&gt;
&lt;br /&gt;
* double-check that there is a materials texture (second texture whcih defines shininess etc) and also a normals texture (FIXME normals may currently be broken)&lt;br /&gt;
* feedback, and eventually model approval, comes from GoogleFrog. Show him (and perhaps the general modelling community at #modelling) some screenshots or a video, the earlier you do so the more chance of finding potential problems. GoogleFrog is the lead dev/designer and is quite busy with other stuff so it may take him a while to give feedback.&lt;br /&gt;
* if GF initially has negative feedback you can talk to Niarteloc for a quicker response.&lt;br /&gt;
&lt;br /&gt;
== Model has taken up shape ==&lt;br /&gt;
* at this point, getting feedback involves a proof-of-concept implementation of the model ingame that GoogleFrog could test.&lt;br /&gt;
* salient places on the model (e.g. tip of the barrel where projectiles will appear) will need an empty piece with no geometry and just the &amp;quot;origin&amp;quot; set to their location.&lt;br /&gt;
* the model needs a basic animation at this point but unfortunately this involves Lua code. Look at existing scripts to get a basic idea. Otherwise it should largely be a matter of placing files in the directory structure correctly.&lt;br /&gt;
* if you're willing to do this on your own, check out these: (FIXME add links some example accepted PRs, maybe a scripting guide or something)&lt;br /&gt;
* eye candy (special effects, fancy animations etc) are optional at this point (but of course if you manage to implement them that's great).&lt;br /&gt;
* talk to Niarteloc or Sprung if you struggle with this step.&lt;br /&gt;
&lt;br /&gt;
== After the base model is done ==&lt;br /&gt;
* check with GoogleFrog again to make sure it's really ready.&lt;br /&gt;
* there needs to be a wreck model. It is a mangled version of the base mesh, and there's a standard texture for wrecks so you don't need to provide one (but are welcome to if it makes the wreck look much better, just keep the color tone the same as default).&lt;br /&gt;
* remaining salient places, e.g. eye candy particle spawners (tips of aircraft wings for blinking lights, underside of tank treads for dust kickup etc) need an empty piece as well, if you haven't added them in earlier stages.&lt;br /&gt;
* playtesting the model would be great. Play a game vs bots using the model (FIXME link a basic modding guide here)&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Quick_Stat_Tweaks&amp;diff=9047</id>
		<title>Quick Stat Tweaks</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Quick_Stat_Tweaks&amp;diff=9047"/>
		<updated>2023-12-21T01:48:15Z</updated>

		<summary type="html">&lt;p&gt;Sprung: oops&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Tweak Units modoption can be used to modify many unit and weapon parameters. It can be used for rapidly testing balance changes or just for making a quick game mode. It has limitations and should not be used for large mod projects, see [[Mod Creation]] and [[How To Play Mods]] to get started on full modding.&lt;br /&gt;
&lt;br /&gt;
[[File:Tweakunitsdefs.png]]&lt;br /&gt;
&lt;br /&gt;
Stat tweaks can be saved and shared as a [[Custom Modes | Custom Mode]].&lt;br /&gt;
&lt;br /&gt;
== Workflow ==&lt;br /&gt;
The Tweak Units modoption overwrites unit parameter (called unitDefs) as they are loaded. The modoption requires a base64-encoded Lua array of differences. Here is how to use it.&lt;br /&gt;
* Make a Lua table in an empty file.&lt;br /&gt;
* For each unit you wish to modify, add an empty table indexed by the [[Internal unit names|internal name]] of the unit to your table.&lt;br /&gt;
* Search for the units you wish to modify in the [https://github.com/ZeroK-RTS/Zero-K/blob/master/units Zero-K repository].&lt;br /&gt;
* Copy the parameters you wish to modify into the table, maintaining the structure of the unitDef table.&lt;br /&gt;
* [https://www.base64encode.org Base64 encode] your table.&lt;br /&gt;
* Put the base 64 encoding of your table into the Tweak Units modoption.&lt;br /&gt;
* Start the game.&lt;br /&gt;
* Check infolog.txt in your install directory and fix your syntax errors.&lt;br /&gt;
&lt;br /&gt;
Check out the [https://springrts.com/wiki/Gamedev:UnitDefs unit def] and [https://springrts.com/wiki/Gamedev:WeaponDefs weapon def] pages on the SpringRTS wiki for definitions of many of the parameters. Search the Internet for tutorials on Lua tables.&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
Tweak Units cannot be used to change parameters that are part of a unit's animation, and access to some of the more unique abilities may be missing. In particular, the aiming speed of most units cannot be changed with this method.&lt;br /&gt;
&lt;br /&gt;
== Simple Example ==&lt;br /&gt;
In this example we make Glaive faster and cheaper.&lt;br /&gt;
&lt;br /&gt;
Start with an empty Lua table.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
A search through the [https://github.com/ZeroK-RTS/Zero-K/blob/master/units unitdef repository] reveals that Glaive is known as cloakraid internally. [https://github.com/ZeroK-RTS/Zero-K/blob/master/units/cloakraid.lua This] is the file. Add an empty table with key 'cloakraid'.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
    cloakraid = {},&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The [https://springrts.com/wiki/Gamedev:UnitDefs SpringRTS wiki page on unitdefs] says that a unit's cost is 'metalCost' and its speed is just 'speed'. [https://github.com/ZeroK-RTS/Zero-K/blob/master/units/cloakraid.lua The Glaive file] shows us the current value of these parameters, as well as their position in the structure of a unitdef. We can change these values like so:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
    cloakraid = {&lt;br /&gt;
        metalCost = 50,&lt;br /&gt;
        speed = 240,&lt;br /&gt;
    },&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Copy this text into a [https://www.base64encode.org/ base64 encoder] and click encode. Here is the resulting encoding.&lt;br /&gt;
&amp;lt;code style=&amp;quot;display:block;overflow:auto&amp;quot;&amp;gt;ewogICAgY2xvYWtyYWlkID0gewogICAgICAgIG1ldGFsQ29zdCA9IDUwLAogICAgICAgIHNwZWVkID0gMjQwLAogICAgfSwKfQ==&amp;lt;/code&amp;gt;&lt;br /&gt;
Set the Tweak Units modoption to your encoding and start the game. Your infolog should indicate that the modoption loaded successfully.&lt;br /&gt;
&amp;lt;samp&amp;gt;&amp;lt;pre&amp;gt;[f=-000001] Loading UnitDefs_posts&lt;br /&gt;
[f=-000001] Loading tweakunits modoption        &amp;lt;------&lt;br /&gt;
[f=-000001] Loading tweakunits for cloakraid    &amp;lt;------&lt;br /&gt;
[f=-000001] Loading FeatureDefs_posts&lt;br /&gt;
[f=-000001] Loading WeaponDefs_posts&lt;br /&gt;
[f=-000001] Loading ArmorDefs_posts&amp;lt;/pre&amp;gt;&amp;lt;/samp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advanced Example ==&lt;br /&gt;
In this example we will change Bandit's damage and range, and add it to the Glaive changes.&lt;br /&gt;
&lt;br /&gt;
As in the simple example, we find the [https://github.com/ZeroK-RTS/Zero-K/blob/master/units/shieldraid.lua Bandit's file] and see that it's called shieldraid. To change Bandit and Glaive at the same time, we add a new sub-table to the table from the previous example.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
    cloakraid = {&lt;br /&gt;
        metalCost = 50,&lt;br /&gt;
        speed = 240,&lt;br /&gt;
    },&lt;br /&gt;
    shieldraid = {},&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Weapon parameters can be found in the [https://springrts.com/wiki/Gamedev:WeaponDefs SpringRTS page on weapon defs], and Zero-K stores them as a sub-table within unitdefs. The range parameter is inside 'LASER' (the internal name of the Bandit's weapon), which is inside the weaponDefs table of Bandit. Weapon damage is further nested inside the damage sub-table of the weapondef.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
    cloakraid = {&lt;br /&gt;
        metalCost = 50,&lt;br /&gt;
        speed = 240,&lt;br /&gt;
    },&lt;br /&gt;
    shieldraid = {&lt;br /&gt;
        weaponDefs = {&lt;br /&gt;
            LASER = {&lt;br /&gt;
                range = 600,&lt;br /&gt;
                damage = {&lt;br /&gt;
                    default = 50,&lt;br /&gt;
                },&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    },&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
As before, we now take this text, [https://www.base64encode.org/ base64 encode] it, and copy it into Tweak Units. Encodings can be shortened by removing whitespace prior to encoding.&lt;br /&gt;
&amp;lt;code style=&amp;quot;display:block;overflow:auto&amp;quot;&amp;gt;e2Nsb2FrcmFpZD17bWV0YWxDb3N0PTUwLHNwZWVkPTI0MCx9LHNoaWVsZHJhaWQ9e3dlYXBvbkRlZnM9e0xBU0VSPXtyYW5nZT02MDAsZGFtYWdlPXtkZWZhdWx0PTUwLH0sfSx9LH0s&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mass post-processing ==&lt;br /&gt;
&lt;br /&gt;
The above examples deal with specific values for a single unit (e.g. &amp;quot;make Glaive have 240 speed&amp;quot;).&lt;br /&gt;
It is also possible to write Lua code that works on units, including changing values for all units or doing some sort of logic. This time, the option is not &amp;quot;Tweak Units&amp;quot; but &amp;quot;Tweak Defs&amp;quot;. Again, it should be encoded to base64.&lt;br /&gt;
&lt;br /&gt;
Here's an example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;for name, ud in pairs(UnitDefs) do&lt;br /&gt;
	if ud.speed then&lt;br /&gt;
		ud.speed = ud.speed*10&lt;br /&gt;
	else&lt;br /&gt;
		ud.health = ud.health*5&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if ud.metalcost then&lt;br /&gt;
		ud.metalcost = ud.metalcost*2&lt;br /&gt;
	end&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UnitDefs is a Lua table indexed with unit names as above (for example &amp;quot;cloakraid&amp;quot; for Glaive) whose values are the unit def tables in a similar format as for tweakunits, BUT WITH ALL KEYS LOWERCASE (notice how it's metalcost and not metalCost!). This snippet increases unit speeds 10 times for all mobiles and health 5 times for all statics, and makes all units twice as expensive. Some fields may be &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; (for another example, death explosions are weapons but don't have a reload time). Specific Tweak Units values override the values that result from Tweak Defs. &lt;br /&gt;
&lt;br /&gt;
Happy hacking!&lt;br /&gt;
&lt;br /&gt;
[[File:Zk_1_7_11_0_cover.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]{{Navbox manual}}&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Quick_Stat_Tweaks&amp;diff=9046</id>
		<title>Quick Stat Tweaks</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Quick_Stat_Tweaks&amp;diff=9046"/>
		<updated>2023-12-21T01:47:14Z</updated>

		<summary type="html">&lt;p&gt;Sprung: Change used def keys (maxdamage/maxvelocity are now speed/health, add metalCost to illustrate lowerkeys)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Tweak Units modoption can be used to modify many unit and weapon parameters. It can be used for rapidly testing balance changes or just for making a quick game mode. It has limitations and should not be used for large mod projects, see [[Mod Creation]] and [[How To Play Mods]] to get started on full modding.&lt;br /&gt;
&lt;br /&gt;
[[File:Tweakunitsdefs.png]]&lt;br /&gt;
&lt;br /&gt;
Stat tweaks can be saved and shared as a [[Custom Modes | Custom Mode]].&lt;br /&gt;
&lt;br /&gt;
== Workflow ==&lt;br /&gt;
The Tweak Units modoption overwrites unit parameter (called unitDefs) as they are loaded. The modoption requires a base64-encoded Lua array of differences. Here is how to use it.&lt;br /&gt;
* Make a Lua table in an empty file.&lt;br /&gt;
* For each unit you wish to modify, add an empty table indexed by the [[Internal unit names|internal name]] of the unit to your table.&lt;br /&gt;
* Search for the units you wish to modify in the [https://github.com/ZeroK-RTS/Zero-K/blob/master/units Zero-K repository].&lt;br /&gt;
* Copy the parameters you wish to modify into the table, maintaining the structure of the unitDef table.&lt;br /&gt;
* [https://www.base64encode.org Base64 encode] your table.&lt;br /&gt;
* Put the base 64 encoding of your table into the Tweak Units modoption.&lt;br /&gt;
* Start the game.&lt;br /&gt;
* Check infolog.txt in your install directory and fix your syntax errors.&lt;br /&gt;
&lt;br /&gt;
Check out the [https://springrts.com/wiki/Gamedev:UnitDefs unit def] and [https://springrts.com/wiki/Gamedev:WeaponDefs weapon def] pages on the SpringRTS wiki for definitions of many of the parameters. Search the Internet for tutorials on Lua tables.&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
Tweak Units cannot be used to change parameters that are part of a unit's animation, and access to some of the more unique abilities may be missing. In particular, the aiming speed of most units cannot be changed with this method.&lt;br /&gt;
&lt;br /&gt;
== Simple Example ==&lt;br /&gt;
In this example we make Glaive faster and cheaper.&lt;br /&gt;
&lt;br /&gt;
Start with an empty Lua table.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
A search through the [https://github.com/ZeroK-RTS/Zero-K/blob/master/units unitdef repository] reveals that Glaive is known as cloakraid internally. [https://github.com/ZeroK-RTS/Zero-K/blob/master/units/cloakraid.lua This] is the file. Add an empty table with key 'cloakraid'.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
    cloakraid = {},&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The [https://springrts.com/wiki/Gamedev:UnitDefs SpringRTS wiki page on unitdefs] says that a unit's cost is 'metalCost' and its speed is just 'speed'. [https://github.com/ZeroK-RTS/Zero-K/blob/master/units/cloakraid.lua The Glaive file] shows us the current value of these parameters, as well as their position in the structure of a unitdef. We can change these values like so:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
    cloakraid = {&lt;br /&gt;
        metalCost = 50,&lt;br /&gt;
        speed = 240,&lt;br /&gt;
    },&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Copy this text into a [https://www.base64encode.org/ base64 encoder] and click encode. Here is the resulting encoding.&lt;br /&gt;
&amp;lt;code style=&amp;quot;display:block;overflow:auto&amp;quot;&amp;gt;ewogICAgY2xvYWtyYWlkID0gewogICAgICAgIG1ldGFsQ29zdCA9IDUwLAogICAgICAgIHNwZWVkID0gMjQwLAogICAgfSwKfQ==&amp;lt;/code&amp;gt;&lt;br /&gt;
Set the Tweak Units modoption to your encoding and start the game. Your infolog should indicate that the modoption loaded successfully.&lt;br /&gt;
&amp;lt;samp&amp;gt;&amp;lt;pre&amp;gt;[f=-000001] Loading UnitDefs_posts&lt;br /&gt;
[f=-000001] Loading tweakunits modoption        &amp;lt;------&lt;br /&gt;
[f=-000001] Loading tweakunits for cloakraid    &amp;lt;------&lt;br /&gt;
[f=-000001] Loading FeatureDefs_posts&lt;br /&gt;
[f=-000001] Loading WeaponDefs_posts&lt;br /&gt;
[f=-000001] Loading ArmorDefs_posts&amp;lt;/pre&amp;gt;&amp;lt;/samp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advanced Example ==&lt;br /&gt;
In this example we will change Bandit's damage and range, and add it to the Glaive changes.&lt;br /&gt;
&lt;br /&gt;
As in the simple example, we find the [https://github.com/ZeroK-RTS/Zero-K/blob/master/units/shieldraid.lua Bandit's file] and see that it's called shieldraid. To change Bandit and Glaive at the same time, we add a new sub-table to the table from the previous example.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
    cloakraid = {&lt;br /&gt;
        metalCost = 50,&lt;br /&gt;
        speed = 240,&lt;br /&gt;
    },&lt;br /&gt;
    shieldraid = {},&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Weapon parameters can be found in the [https://springrts.com/wiki/Gamedev:WeaponDefs SpringRTS page on weapon defs], and Zero-K stores them as a sub-table within unitdefs. The range parameter is inside 'LASER' (the internal name of the Bandit's weapon), which is inside the weaponDefs table of Bandit. Weapon damage is further nested inside the damage sub-table of the weapondef.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
    cloakraid = {&lt;br /&gt;
        metalCost = 50,&lt;br /&gt;
        speed = 240,&lt;br /&gt;
    },&lt;br /&gt;
    shieldraid = {&lt;br /&gt;
        weaponDefs = {&lt;br /&gt;
            LASER = {&lt;br /&gt;
                range = 600,&lt;br /&gt;
                damage = {&lt;br /&gt;
                    default = 50,&lt;br /&gt;
                },&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    },&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
As before, we now take this text, [https://www.base64encode.org/ base64 encode] it, and copy it into Tweak Units. Encodings can be shortened by removing whitespace prior to encoding.&lt;br /&gt;
&amp;lt;code style=&amp;quot;display:block;overflow:auto&amp;quot;&amp;gt;e2Nsb2FrcmFpZD17bWF4RGFtYWdlPTUwMCxtYXhWZWxvY2l0eT04LH0sc2hpZWxkcmFpZD17d2VhcG9uRGVmcz17TEFTRVI9e3JhbmdlPTYwMCxkYW1hZ2U9e2RlZmF1bHQ9NTAsfSx9LH0sfSw=&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mass post-processing ==&lt;br /&gt;
&lt;br /&gt;
The above examples deal with specific values for a single unit (e.g. &amp;quot;make Glaive have 240 speed&amp;quot;).&lt;br /&gt;
It is also possible to write Lua code that works on units, including changing values for all units or doing some sort of logic. This time, the option is not &amp;quot;Tweak Units&amp;quot; but &amp;quot;Tweak Defs&amp;quot;. Again, it should be encoded to base64.&lt;br /&gt;
&lt;br /&gt;
Here's an example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;for name, ud in pairs(UnitDefs) do&lt;br /&gt;
	if ud.speed then&lt;br /&gt;
		ud.speed = ud.speed*10&lt;br /&gt;
	else&lt;br /&gt;
		ud.health = ud.health*5&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if ud.metalcost then&lt;br /&gt;
		ud.metalcost = ud.metalcost*2&lt;br /&gt;
	end&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UnitDefs is a Lua table indexed with unit names as above (for example &amp;quot;cloakraid&amp;quot; for Glaive) whose values are the unit def tables in a similar format as for tweakunits, BUT WITH ALL KEYS LOWERCASE (notice how it's metalcost and not metalCost!). This snippet increases unit speeds 10 times for all mobiles and health 5 times for all statics, and makes all units twice as expensive. Some fields may be &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; (for another example, death explosions are weapons but don't have a reload time). Specific Tweak Units values override the values that result from Tweak Defs. &lt;br /&gt;
&lt;br /&gt;
Happy hacking!&lt;br /&gt;
&lt;br /&gt;
[[File:Zk_1_7_11_0_cover.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]{{Navbox manual}}&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=FAQ&amp;diff=9014</id>
		<title>FAQ</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=FAQ&amp;diff=9014"/>
		<updated>2023-11-06T23:53:27Z</updated>

		<summary type="html">&lt;p&gt;Sprung: Off -&amp;gt; on&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Frequently Asked Questions'''&amp;amp;mdash;Zero-K&lt;br /&gt;
&lt;br /&gt;
==I'm new to Zero-K. Where should I start?==&lt;br /&gt;
First, you should read the [[Newbie Guide]] and try some practice games against the &amp;lt;abbr title=&amp;quot;artificial intelligence&amp;quot;&amp;gt;AI&amp;lt;/abbr&amp;gt;. You should definitely try the tutorial, play some or all of the campaign, and/or the more detailed tutorial set available in the ''Help'' menu in the game's lobby.&lt;br /&gt;
&lt;br /&gt;
You can also spectate some online games to see which things are significant.&lt;br /&gt;
&lt;br /&gt;
==How can I unlock Commander modules?==&lt;br /&gt;
Visit the [//www.zero-k.info Zero-K Homepage] and log in with your account. You can easily reach this page from the lobby through the &amp;quot;Welcome&amp;quot; tab. From here, you scroll down until you see &amp;quot;You can unlock technology&amp;quot; and click on this link. The link may not be there for you. That's because you do not have to unlock anything from this page; all modules are currently unlocked for all players.&lt;br /&gt;
&lt;br /&gt;
You can see [//zero-k.info/My/UnlockList the list of unlocked technologies] if you're logged in. Unlocking technology during single-player campaign does not affect anything on this page.&lt;br /&gt;
&lt;br /&gt;
==How do I gain rating? ==&lt;br /&gt;
You can gain rating if you're winning multiplayer games. You will gain or lose more or less rating based on the skill of your opponent(s).&lt;br /&gt;
&lt;br /&gt;
{{:Rating and Rank}}&lt;br /&gt;
&lt;br /&gt;
==How much XP do I need to reach the next level?== &lt;br /&gt;
Mouse over the ''&amp;lt;abbr title=&amp;quot;experience points&amp;quot;&amp;gt;XP&amp;lt;/abbr&amp;gt;'' bar on the home page; the XP needed is displayed in the tooltip.&lt;br /&gt;
&lt;br /&gt;
==How do I un-clump my units to make a decent firing line?==&lt;br /&gt;
Read up on [[Unit Management#Micromanagement|micromanaging units]] with ''[[Help for other RTS players#Units and UI|line move]],'' an easy way to make your units form a line whenever you need them to.&lt;br /&gt;
&lt;br /&gt;
==How do I remove a structure that I built?==&lt;br /&gt;
Among the best options are:&lt;br /&gt;
#[[Reclaim]] it. You get back some resources at the expense of time.&lt;br /&gt;
#[[Self Destruct Command|Destroy]] it. Quick, but the explosion may damage nearby units and buildings.&lt;br /&gt;
This works with mobile units, too.&lt;br /&gt;
&lt;br /&gt;
==My FPS is low after some time have passed in game. What can I do?==&lt;br /&gt;
{{See|Performance Optimizations}}&lt;br /&gt;
Try to reduce your graphics settings. To do so, go to the ''Settings'' tab in Zero-K lobby and click ''Graphics Settings''. Some work-intensive elements that you could tone down or disable are shadows, anti-aliasing, and water type. There is also the ''Lowest'' preset you can try for maximum performance. Trying higher presets can help you find the performance and graphic level that works best on your system.&lt;br /&gt;
&lt;br /&gt;
If you're playing on Steam, disable the Steam Overlay, as it negatively affects performance:&lt;br /&gt;
* Right-click on Zero-K in your Steam library.&lt;br /&gt;
* Select ''Properties'' from the drop-down menu.&lt;br /&gt;
* Untick &amp;quot;Enable the Steam Overlay while in-game&amp;quot; in ''General''.&lt;br /&gt;
&lt;br /&gt;
==I'm on Linux and my game hangs/crashes the second time I launch it==&lt;br /&gt;
This may be an issue with certain versions of Mono. You might be able to work around it by deleting one or both files in &amp;lt;code&amp;gt;Zero-K/games&amp;lt;/code&amp;gt; directory and letting the game rebuild them.&lt;br /&gt;
&lt;br /&gt;
If the game is launched through Steam, you can also try setting the ''Steam Linux Runtime'' as compatibility tool for Zero-K.&lt;br /&gt;
&lt;br /&gt;
==I get ugly bubbles in the minimap/the whole screen flashbangs.==&lt;br /&gt;
Do you get bubbles like this?&lt;br /&gt;
&lt;br /&gt;
[[File:FAQ_bg.jpg]]&lt;br /&gt;
&lt;br /&gt;
This is a bug somewhere in Lua drawing with ATI/AMD and OpenGL.&lt;br /&gt;
&lt;br /&gt;
Disable widgets that draw via {{key press|F11}} menu to find the problematic widget.&lt;br /&gt;
&lt;br /&gt;
This should largely be fixed. If it still happens, [[Reporting Bugs|send a bug report]], please.&lt;br /&gt;
&lt;br /&gt;
==I have some game ideas. Where can I post them?==&lt;br /&gt;
Visit the [//zero-k.info/Forum Zero-K forum] and pose your ideas in the appropriate section. You can also create a new issue on [//github.com/ZeroK-RTS/Zero-K/issues our development site].&lt;br /&gt;
&lt;br /&gt;
==What do all the in-game abbreviations mean?==&lt;br /&gt;
You can look up some abbreviations and acronyms used in the game in [[Abbreviations|our list of abbreviations]]. Some abbreviations unrelated to the game can be looked up on [//en.wiktionary.org/wiki/Appendix:Internet_slang wiktionary]. Another way is to ask other players.&lt;br /&gt;
&lt;br /&gt;
==How can I support the game? Donations?==&lt;br /&gt;
On the one hand, you can [//zero-k.info/Contributions donate some coins] so we can pay the server costs. You can also support Zero-K through one of the [//store.steampowered.com/dlc/334920/ donation packs] available on Steam. On the other hand, you can support us by simply playing the game and spreading the word. Feel free to use our [//presskit.zero-k.info/ advertisement material] on your site. Thanks a lot! :-)&lt;br /&gt;
&lt;br /&gt;
==How can I change my Username?==&lt;br /&gt;
Follow the guide on [[Name Change|name change]].&lt;br /&gt;
&lt;br /&gt;
==How do I change my password? ==&lt;br /&gt;
On your [[User Page|home/account page]], click ''Account maintenance'' and enter your new password.&lt;br /&gt;
&lt;br /&gt;
==I forgot my password/username. Help me pls!==&lt;br /&gt;
If you forgot your password or username, please contact the server administrators. They will reset it to something and communicate it to you.&lt;br /&gt;
&lt;br /&gt;
==My mouse cursor in game has disappeared==&lt;br /&gt;
This can be caused by driver updates. If it happens, this can be fixed by adding a line to a file in your Zero-K folder that will tell the game to draw the mouse cursor with an alternate method. Under the ''LuaMenu/Config folder'', look for the ''IGL_data.lua'' file and open in a text editor. Look for the section called ''game_settings''. &lt;br /&gt;
&lt;br /&gt;
Adding the line &amp;lt;syntaxhighlight inline&amp;gt;HardwareCursor = 1,&amp;lt;/syntaxhighlight&amp;gt; (including the comma) in the middle of this section and saving the file should have your cursor appear the next time you load Zero-K.&lt;br /&gt;
&lt;br /&gt;
Hardware cursor can also be toggled in the [[Ingame Menu#Mouse Cursor|settings menu]] during a game.&lt;br /&gt;
&lt;br /&gt;
==My game crashes/has graphical glitches. How do I fix it?==&lt;br /&gt;
First, check the [//springrts.com/wiki/FAQ:trouble troubleshooting FAQ] on the Spring engine wiki and see if your issue is covered there. If you can't find a solution to the problem, you can file a bug report on our forum or [//github.com/ZeroK-RTS Github development site].&lt;br /&gt;
&lt;br /&gt;
==I have a bug report!==&lt;br /&gt;
You can post in the [//zero-k.info/Forum?categoryID=3 ''Help and Bugs'' sub-forum] or make an issue report on [//github.com/ZeroK-RTS ZeroK-RTS Github] (more technical). There is also a #support channel on [https://discord.gg/aab63Vt Discord] you can post to.&lt;br /&gt;
&lt;br /&gt;
Please include diagnostic logs as appropriate. You can automatically upload the log from the game's lobby by pressing the &amp;lt;samp&amp;gt;Help&amp;lt;/samp&amp;gt; button, then &amp;lt;samp&amp;gt;Report A Bug&amp;lt;/samp&amp;gt;. During this step, a webpage should open with your diagnostic log. Be sure to make note of the address before closing it.&lt;br /&gt;
&lt;br /&gt;
Otherwise, look for ''infolog.txt'' and ''infolog_full.txt'' in your installation folder. Use [//www.pastebin.com pastebin] to show the contents of your ''infolog'' files and give the resulting link instead of posting the whole thing on the forum or github.&lt;br /&gt;
&lt;br /&gt;
==Steam won't log me in anymore!==&lt;br /&gt;
&lt;br /&gt;
The Steam service and its login servers experience occasional maintenance downtime (usually on Tuesday) that can cause your Zero-K account to fail to connect. First you should [https://steamstat.us check if steam is down in your region]. If Steam services in your region are showing as OK, try the next step.&lt;br /&gt;
&lt;br /&gt;
In the lobby client, go to &amp;quot;Settings &amp;gt; Lobby &amp;gt; Login with Steam&amp;quot; and make sure this and &amp;quot;Login automatically&amp;quot; are checked on. If you want to set a password and unlink your account from steam, see [[Account Management]].&lt;br /&gt;
&lt;br /&gt;
==My question isn't answered here. Where can I ask my question?==&lt;br /&gt;
As above, you can visit the [//zero-k.info/Forum forum] and ask your question in one of the listed sections.&lt;br /&gt;
&lt;br /&gt;
You can also ask other players to get help.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Navbox manual}}&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Promotion&amp;diff=8937</id>
		<title>Promotion</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Promotion&amp;diff=8937"/>
		<updated>2023-10-17T15:26:29Z</updated>

		<summary type="html">&lt;p&gt;Sprung: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== There is no memetics division ===&lt;br /&gt;
&lt;br /&gt;
ZK doesn't really have any sort of coordinated promotion effort ongoing. The dev team are technical people and won't be of much help beyond general high-level guidance. If you want to do stuff and contribute promotion effort, feel free to, but you'll most likely be on your own and have to both figure out what to do, and actually do that grunt work, yourself. Of course you can grab other people to help you, but again, everything is grassroots so finding those people and setting up some sort of coordination is still up to you. You, the reader, are the head of the memetics division.&lt;br /&gt;
&lt;br /&gt;
=== Known ongoing work ===&lt;br /&gt;
&lt;br /&gt;
Here is a summary of the promotion efforts that are ongoing, and the people who have offered their skills.&lt;br /&gt;
&lt;br /&gt;
Existing promotion people&lt;br /&gt;
* 64-Bit Dragon - Runs the ZK twitter and casts games on Youtube https://www.youtube.com/@64-Bit_Dragon https://twitter.com/ZeroKTeam&lt;br /&gt;
* nr1_riposteR_fan - has access to ZK twitter&lt;br /&gt;
&lt;br /&gt;
Potential helpers&lt;br /&gt;
* AltoArts - Experience making promotional videos.&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Promotion&amp;diff=8936</id>
		<title>Promotion</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Promotion&amp;diff=8936"/>
		<updated>2023-10-17T15:19:20Z</updated>

		<summary type="html">&lt;p&gt;Sprung: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== There is no memetics division ===&lt;br /&gt;
&lt;br /&gt;
ZK doesn't really have any sort of coordinated promotion effort ongoing. The dev team are technical people and won't be of much help beyond general high-level guidance. If you want to do stuff and contribute promotion effort, feel free to, but you'll most likely be on your own and have to both figure out what to do, and actually do that grunt work, yourself. Of course you can grab other people to help you, but again, everything is grassroots so finding those people and setting up some sort of coordination is still up to you.&lt;br /&gt;
&lt;br /&gt;
=== Known ongoing work ===&lt;br /&gt;
&lt;br /&gt;
Here is a summary of the promotion efforts that are ongoing, and the people who have offered their skills.&lt;br /&gt;
&lt;br /&gt;
Existing promotion people&lt;br /&gt;
* 64-Bit Dragon - Runs the ZK twitter and casts games on Youtube https://www.youtube.com/@64-Bit_Dragon https://twitter.com/ZeroKTeam&lt;br /&gt;
* nr1_riposteR_fan - has access to ZK twitter&lt;br /&gt;
&lt;br /&gt;
Potential helpers&lt;br /&gt;
* AltoArts - Experience making promotional videos.&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Promotion&amp;diff=8935</id>
		<title>Promotion</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Promotion&amp;diff=8935"/>
		<updated>2023-10-17T15:17:50Z</updated>

		<summary type="html">&lt;p&gt;Sprung: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== There is no memetics division ===&lt;br /&gt;
&lt;br /&gt;
ZK doesn't really have any sort of coordinated promotion effort ongoing. The dev team are technical people and won't be of much help beyond general high-level guidance. If you want to do stuff and contribute promotion effort, feel free to, but you'll most likely be on your own and have to do the grunt work yourself. Of course you can grab other people to help you, but again, everything is grassroots so finding those people and setting up some sort of coordination is still up to you.&lt;br /&gt;
&lt;br /&gt;
=== Known ongoing work ===&lt;br /&gt;
&lt;br /&gt;
Here is a summary of the promotion efforts that are ongoing, and the people who have offered their skills.&lt;br /&gt;
&lt;br /&gt;
Existing promotion people&lt;br /&gt;
* 64-Bit Dragon - Runs the ZK twitter and casts games on Youtube https://www.youtube.com/@64-Bit_Dragon https://twitter.com/ZeroKTeam&lt;br /&gt;
* nr1_riposteR_fan - has access to ZK twitter&lt;br /&gt;
&lt;br /&gt;
Potential helpers&lt;br /&gt;
* AltoArts - Experience making promotional videos.&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Promotion&amp;diff=8934</id>
		<title>Promotion</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Promotion&amp;diff=8934"/>
		<updated>2023-10-17T15:13:13Z</updated>

		<summary type="html">&lt;p&gt;Sprung: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== There is no memetics division ===&lt;br /&gt;
&lt;br /&gt;
ZK doesn't really have any sort of coordinated promotion effort ongoing. The dev team are technical people and won't be of much help beyond general high-level guidance. If you want to do stuff and contribute promotion effort, feel free to, but you'll most likely be on your own and have to do the grunt work yourself. Of course you can grab other people to help you, but again, everything is grassroots so finding those people and setting up some sort of coordination is still up to you.&lt;br /&gt;
&lt;br /&gt;
=== Known ongoing work ===&lt;br /&gt;
&lt;br /&gt;
Here is a summary of the promotion efforts that are ongoing, and the people who have offered their skills.&lt;br /&gt;
&lt;br /&gt;
Existing promotion people&lt;br /&gt;
* 64-Bit Dragon - Runs the ZK twitter and casts games on Youtube https://www.youtube.com/@64-Bit_Dragon https://twitter.com/ZeroKTeam&lt;br /&gt;
&lt;br /&gt;
Potential helpers&lt;br /&gt;
* AltoArts - Experience making promotional videos.&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Startbox_API&amp;diff=8480</id>
		<title>Startbox API</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Startbox_API&amp;diff=8480"/>
		<updated>2022-07-31T02:00:52Z</updated>

		<summary type="html">&lt;p&gt;Sprung: Formatting.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Start boxes ==&lt;br /&gt;
&lt;br /&gt;
Each team has a defined starting area in which its players can spawn their commanders - these are called start boxes. Map makers can define how these areas look like by including a config file inside their map archive.&lt;br /&gt;
&lt;br /&gt;
== The config file ==&lt;br /&gt;
&lt;br /&gt;
The file which you need to include is &lt;br /&gt;
 mapconfig/map_startboxes.lua&lt;br /&gt;
&lt;br /&gt;
It consists of Lua code which returns 2 tables: one with the start box layout for the current match and one that contains possible box counts.&lt;br /&gt;
&lt;br /&gt;
For examples see the bottom of this page.&lt;br /&gt;
&lt;br /&gt;
== Box counts ==&lt;br /&gt;
&lt;br /&gt;
Let's start from the last table because it is the simplest. This is just a list of how many teams the map is designed for.&lt;br /&gt;
&lt;br /&gt;
Let's take [http://zero-k.info/Maps/Detail/8162 Throne] as an example. It has an outer ring with 7 starting areas so it can be played as a 7-team FFA. There are also rings with 3 and 5 areas so 3- and 5-team FFAs are also possible setups. Finally, you could play a duel between any two positions from the same ring. (The real Throne config is a fair bit more complicated than that but you get the idea.)&lt;br /&gt;
&lt;br /&gt;
Thus, the possible team counts are 2, 3, 5, and 7. Let's define a Lua table for that:&lt;br /&gt;
 local playercounts = {2, 3, 5, 7}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is mostly important for fancy FFA maps. Simple duel/teamgame maps will usually just have 2 as the only value here:&lt;br /&gt;
 local playercounts = {2}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The boxes ==&lt;br /&gt;
&lt;br /&gt;
Now, the most tedious part. The boxes do not need to actually be boxes, they can be any arbitrary shape (even concave or disjoint). This is achieved by having the boxes defined as a set of polygons.&lt;br /&gt;
&lt;br /&gt;
There is a widget which lets you draw the polygons ingame, it's called &amp;quot;Startbox Editor&amp;quot; and is under the &amp;quot;For Developers&amp;quot; tab in the widget list (press Alt+F11, and don't touch anything else unless you know what you're doing).&lt;br /&gt;
&lt;br /&gt;
To draw a polygon, use LMB - either drag a line or click points:&lt;br /&gt;
&lt;br /&gt;
[[File:Startbox API 1.jpg]]&lt;br /&gt;
&lt;br /&gt;
Once you draw a full loop, press RMB to close it. Make sure the line does not cross itself. Finished polygons are a bit darker.&lt;br /&gt;
&lt;br /&gt;
[[File:Startbox API 2.jpg]]&lt;br /&gt;
&lt;br /&gt;
Now you can add another polygon if you want. These will all be a part of the same team.&lt;br /&gt;
&lt;br /&gt;
[[File:Startbox API 3.jpg]]&lt;br /&gt;
&lt;br /&gt;
If you want to delete the last created polygon, press D.&lt;br /&gt;
Once you are satisfied with the area, press S. Now you can draw the area for another team.&lt;br /&gt;
&lt;br /&gt;
Once you create all the boxes, go to your Spring directory and find the infolog. There you will see a bunch of code like&lt;br /&gt;
 boxes = {&lt;br /&gt;
     stuff&lt;br /&gt;
 },&lt;br /&gt;
&lt;br /&gt;
Each of those tables is a team's startbox. The config is an array of each team's startbox data. The box data from the generator will go to a team's config entry. Like this:&lt;br /&gt;
 local main_config = {&lt;br /&gt;
     {&lt;br /&gt;
         boxes = {&lt;br /&gt;
             stuff&lt;br /&gt;
         },&lt;br /&gt;
         -- more entries will go there later!&lt;br /&gt;
     },&lt;br /&gt;
     &lt;br /&gt;
     -- another team's box data&lt;br /&gt;
     {&lt;br /&gt;
         boxes = {&lt;br /&gt;
             stuff&lt;br /&gt;
         },&lt;br /&gt;
     },&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The layout is a normal Lua table so you can use all the usual table manipulation methods. For example you could add more area based on how many people there are, or generate them dynamically.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The recommended start points ===&lt;br /&gt;
&lt;br /&gt;
This sub-table defines recommended start points within each box. These are points on which CAI bots will spawn. The first point is special: human players who did not pick start position will also spawn here and so will any extra CAI if there are more of them than the spots; as such having at least one startpoint in each box is mandatory. These points are also marked on people's UI as circles.&lt;br /&gt;
&lt;br /&gt;
Defining these is very simple. It's very similar to how start areas were defined. Ingame you can hold Space over a point to see its coordinates. These are written down for boxes similarly to the areas:&lt;br /&gt;
 local main_config = {&lt;br /&gt;
     {&lt;br /&gt;
         boxes = {&lt;br /&gt;
             stuff&lt;br /&gt;
         },&lt;br /&gt;
         startpoints = {&lt;br /&gt;
             {123, 456}, -- X, Z&lt;br /&gt;
             {654, 321},&lt;br /&gt;
             -- as many as you want, it's good if there are as many as you want people per team&lt;br /&gt;
         },&lt;br /&gt;
     },&lt;br /&gt;
     {&lt;br /&gt;
         boxes = {&lt;br /&gt;
             stuff&lt;br /&gt;
         },&lt;br /&gt;
         startpoints = {&lt;br /&gt;
             {789, 789},&lt;br /&gt;
             {987, 987},&lt;br /&gt;
         },&lt;br /&gt;
     },&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Of course, the start positions should match the areas, though they don't have to.&lt;br /&gt;
&lt;br /&gt;
== Putting these together ==&lt;br /&gt;
&lt;br /&gt;
You can give each team a name, alongside a shorter backup if the first one is too large. Here's how:&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
     boxes = { stuff },&lt;br /&gt;
     startpoints = { stuff },&lt;br /&gt;
     nameLong = &amp;quot;South-West&amp;quot;,&lt;br /&gt;
     nameShort = &amp;quot;SW&amp;quot;,&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
It serves to identify the team so while it's good to use something that describes placement, you can get creative. For example:&lt;br /&gt;
* &amp;quot;North&amp;quot;, &amp;quot;South-East&amp;quot;&lt;br /&gt;
* &amp;quot;5 o'clock&amp;quot;&lt;br /&gt;
* real-world style maps could have names like &amp;quot;Russia&amp;quot; or &amp;quot;America&amp;quot;&lt;br /&gt;
* asymmetric maps can use landmarks, for example &amp;quot;Lake&amp;quot; vs &amp;quot;Desert&amp;quot;&lt;br /&gt;
* for missions it's good to use storyline names, eg &amp;quot;Empire&amp;quot; vs &amp;quot;Dynasty&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
Now just return the config table and the playercounts table.&lt;br /&gt;
  return main_config, playercounts&lt;br /&gt;
&lt;br /&gt;
The exact format for the config table that should get returned is&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
     { -- a single team's data&lt;br /&gt;
         boxes = {&lt;br /&gt;
             { -- a polygon&lt;br /&gt;
                 {123, 456}, -- a vertex of the polygon. X, Z.&lt;br /&gt;
                 {234, 567}, -- another vertex&lt;br /&gt;
                 {345, 678},&lt;br /&gt;
                 -- more vertices&lt;br /&gt;
             },&lt;br /&gt;
             { -- another polygon&lt;br /&gt;
                 -- vertices&lt;br /&gt;
             },&lt;br /&gt;
             -- more polygons&lt;br /&gt;
         },&lt;br /&gt;
         startpoints = {&lt;br /&gt;
             {123, 456}, -- X, Z&lt;br /&gt;
             {654, 321},&lt;br /&gt;
             -- more points&lt;br /&gt;
         },&lt;br /&gt;
         nameLong = &amp;quot;longer string with team name&amp;quot;,&lt;br /&gt;
         nameShort = &amp;quot;short&amp;quot;,&lt;br /&gt;
     },&lt;br /&gt;
     { -- another team's data&lt;br /&gt;
         boxes = { ... },&lt;br /&gt;
         startpoints = { ... },&lt;br /&gt;
         nameLong = &amp;quot;...&amp;quot;,&lt;br /&gt;
         nameShort = &amp;quot;...&amp;quot;,&lt;br /&gt;
     },&lt;br /&gt;
     -- more teams&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Advanced stuff ==&lt;br /&gt;
The config has access to Spring Lua API so it is possible to do a lot of dynamic things. In particular, you can use math.random without worry.&lt;br /&gt;
&lt;br /&gt;
You can make stuff dependent on the game mode. There are functions which return the gametype, such as `Spring.Utilities.Gametype.is1v1()`. The full list is here: https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Utilities/teamFunctions.lua#L74&lt;br /&gt;
&lt;br /&gt;
An important thing is that #Spring.GetAllTeams() will return a wrong value due to fake technical teams and Gaia. Instead, use Spring.Utilities.GetTeamCount() to get the real number of teams.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/SpeedMetal.lua SpeedMetal] - the simplest layout, just two squares.&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/DeltaSiegeDry.lua DSD] - huge polygons, but otherwise very simple.&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/Sever%201.lua#L343 Sever] - shows an example of smaller boxes for 1v1 and larger for teams.&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/Isle%20of%20Grief%200.2.lua Isle of Grief] - shows a smart approach, one of the boxes is not defined rigidly but is a mirror of the other (only really feasible for rough boxes or perfectly symmetrical maps).&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/Aum_1.1.lua Aum] - another small trick, this time 5-way radial symmetry.&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/Throne%20v1.lua Throne] - multiple boxes defined, with a system to pick some of them based on how many teams there are.&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/Speed_Ball_10x10.lua Speedball] - shows boxes that are generated completely algorithmically.&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/Mearth_v4.lua#L6 Middle-Earth] - interesting team names.&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/Adansonia%20v2.lua Adansonia v2] - shows synchronizing boxes across map versions.&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/duck.lua Duck] - boxless config for silly maps where everybody can start anywhere.&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]{{Navbox manual}}&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Startbox_API&amp;diff=8479</id>
		<title>Startbox API</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Startbox_API&amp;diff=8479"/>
		<updated>2022-07-31T02:00:10Z</updated>

		<summary type="html">&lt;p&gt;Sprung: Indexing is now from 1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Start boxes ==&lt;br /&gt;
&lt;br /&gt;
Each team has a defined starting area in which its players can spawn their commanders - these are called start boxes. Map makers can define how these areas look like by including a config file inside their map archive.&lt;br /&gt;
&lt;br /&gt;
== The config file ==&lt;br /&gt;
&lt;br /&gt;
The file which you need to include is &lt;br /&gt;
 mapconfig/map_startboxes.lua&lt;br /&gt;
&lt;br /&gt;
It consists of Lua code which returns 2 tables: one with the start box layout for the current match and one that contains possible box counts.&lt;br /&gt;
&lt;br /&gt;
For examples see the bottom of this page.&lt;br /&gt;
&lt;br /&gt;
== Box counts ==&lt;br /&gt;
&lt;br /&gt;
Let's start from the last table because it is the simplest. This is just a list of how many teams the map is designed for.&lt;br /&gt;
&lt;br /&gt;
Let's take [http://zero-k.info/Maps/Detail/8162 Throne] as an example. It has an outer ring with 7 starting areas so it can be played as a 7-team FFA. There are also rings with 3 and 5 areas so 3- and 5-team FFAs are also possible setups. Finally, you could play a duel between any two positions from the same ring. (The real Throne config is a fair bit more complicated than that but you get the idea.)&lt;br /&gt;
&lt;br /&gt;
Thus, the possible team counts are 2, 3, 5, and 7. Let's define a Lua table for that:&lt;br /&gt;
 local playercounts = {2, 3, 5, 7}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is mostly important for fancy FFA maps. Simple duel/teamgame maps will usually just have 2 as the only value here:&lt;br /&gt;
 local playercounts = {2}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The boxes ==&lt;br /&gt;
&lt;br /&gt;
Now, the most tedious part. The boxes do not need to actually be boxes, they can be any arbitrary shape (even concave or disjoint). This is achieved by having the boxes defined as a set of polygons.&lt;br /&gt;
&lt;br /&gt;
There is a widget which lets you draw the polygons ingame, it's called &amp;quot;Startbox Editor&amp;quot; and is under the &amp;quot;For Developers&amp;quot; tab in the widget list (press Alt+F11, and don't touch anything else unless you know what you're doing).&lt;br /&gt;
&lt;br /&gt;
To draw a polygon, use LMB - either drag a line or click points:&lt;br /&gt;
&lt;br /&gt;
[[File:Startbox API 1.jpg]]&lt;br /&gt;
&lt;br /&gt;
Once you draw a full loop, press RMB to close it. Make sure the line does not cross itself. Finished polygons are a bit darker.&lt;br /&gt;
&lt;br /&gt;
[[File:Startbox API 2.jpg]]&lt;br /&gt;
&lt;br /&gt;
Now you can add another polygon if you want. These will all be a part of the same team.&lt;br /&gt;
&lt;br /&gt;
[[File:Startbox API 3.jpg]]&lt;br /&gt;
&lt;br /&gt;
If you want to delete the last created polygon, press D.&lt;br /&gt;
Once you are satisfied with the area, press S. Now you can draw the area for another team.&lt;br /&gt;
&lt;br /&gt;
Once you create all the boxes, go to your Spring directory and find the infolog. There you will see a bunch of code like&lt;br /&gt;
 boxes = {&lt;br /&gt;
     stuff&lt;br /&gt;
 },&lt;br /&gt;
&lt;br /&gt;
Each of those tables is a team's startbox. The config is an array of each team's startbox data. The box data from the generator will go to a team's config entry. Like this:&lt;br /&gt;
 local main_config = {&lt;br /&gt;
     {&lt;br /&gt;
         boxes = {&lt;br /&gt;
             stuff&lt;br /&gt;
         },&lt;br /&gt;
         -- more entries will go there later!&lt;br /&gt;
     },&lt;br /&gt;
&lt;br /&gt;
     -- another team's box data&lt;br /&gt;
     {&lt;br /&gt;
         boxes = {&lt;br /&gt;
             stuff&lt;br /&gt;
         },&lt;br /&gt;
     },&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The layout is a normal Lua table so you can use all the usual table manipulation methods. For example you could add more area based on how many people there are, or generate them dynamically.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The recommended start points ===&lt;br /&gt;
&lt;br /&gt;
This sub-table defines recommended start points within each box. These are points on which CAI bots will spawn. The first point is special: human players who did not pick start position will also spawn here and so will any extra CAI if there are more of them than the spots; as such having at least one startpoint in each box is mandatory. These points are also marked on people's UI as circles.&lt;br /&gt;
&lt;br /&gt;
Defining these is very simple. It's very similar to how start areas were defined. Ingame you can hold Space over a point to see its coordinates. These are written down for boxes similarly to the areas:&lt;br /&gt;
 local main_config = {&lt;br /&gt;
     {&lt;br /&gt;
         boxes = {&lt;br /&gt;
             stuff&lt;br /&gt;
         },&lt;br /&gt;
         startpoints = {&lt;br /&gt;
             {123, 456}, -- X, Z&lt;br /&gt;
             {654, 321},&lt;br /&gt;
             -- as many as you want, it's good if there are as many as you want people per team&lt;br /&gt;
         },&lt;br /&gt;
     },&lt;br /&gt;
     {&lt;br /&gt;
         boxes = {&lt;br /&gt;
             stuff&lt;br /&gt;
         },&lt;br /&gt;
         startpoints = {&lt;br /&gt;
             {789, 789},&lt;br /&gt;
             {987, 987},&lt;br /&gt;
         },&lt;br /&gt;
     },&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Of course, the start positions should match the areas, though they don't have to.&lt;br /&gt;
&lt;br /&gt;
== Putting these together ==&lt;br /&gt;
&lt;br /&gt;
You can give each team a name, alongside a shorter backup if the first one is too large. Here's how:&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
     boxes = { stuff },&lt;br /&gt;
     startpoints = { stuff },&lt;br /&gt;
     nameLong = &amp;quot;South-West&amp;quot;,&lt;br /&gt;
     nameShort = &amp;quot;SW&amp;quot;,&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
It serves to identify the team so while it's good to use something that describes placement, you can get creative. For example:&lt;br /&gt;
* &amp;quot;North&amp;quot;, &amp;quot;South-East&amp;quot;&lt;br /&gt;
* &amp;quot;5 o'clock&amp;quot;&lt;br /&gt;
* real-world style maps could have names like &amp;quot;Russia&amp;quot; or &amp;quot;America&amp;quot;&lt;br /&gt;
* asymmetric maps can use landmarks, for example &amp;quot;Lake&amp;quot; vs &amp;quot;Desert&amp;quot;&lt;br /&gt;
* for missions it's good to use storyline names, eg &amp;quot;Empire&amp;quot; vs &amp;quot;Dynasty&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
Now just return the config table and the playercounts table.&lt;br /&gt;
  return main_config, playercounts&lt;br /&gt;
&lt;br /&gt;
The exact format for the config table that should get returned is&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
     { -- a single team's data&lt;br /&gt;
         boxes = {&lt;br /&gt;
             { -- a polygon&lt;br /&gt;
                 {123, 456}, -- a vertex of the polygon. X, Z.&lt;br /&gt;
                 {234, 567}, -- another vertex&lt;br /&gt;
                 {345, 678},&lt;br /&gt;
                 -- more vertices&lt;br /&gt;
             },&lt;br /&gt;
             { -- another polygon&lt;br /&gt;
                 -- vertices&lt;br /&gt;
             },&lt;br /&gt;
             -- more polygons&lt;br /&gt;
         },&lt;br /&gt;
         startpoints = {&lt;br /&gt;
             {123, 456}, -- X, Z&lt;br /&gt;
             {654, 321},&lt;br /&gt;
             -- more points&lt;br /&gt;
         },&lt;br /&gt;
         nameLong = &amp;quot;longer string with team name&amp;quot;,&lt;br /&gt;
         nameShort = &amp;quot;short&amp;quot;,&lt;br /&gt;
     },&lt;br /&gt;
     { -- another team's data&lt;br /&gt;
         boxes = { ... },&lt;br /&gt;
         startpoints = { ... },&lt;br /&gt;
         nameLong = &amp;quot;...&amp;quot;,&lt;br /&gt;
         nameShort = &amp;quot;...&amp;quot;,&lt;br /&gt;
     },&lt;br /&gt;
     -- more teams&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Advanced stuff ==&lt;br /&gt;
The config has access to Spring Lua API so it is possible to do a lot of dynamic things. In particular, you can use math.random without worry.&lt;br /&gt;
&lt;br /&gt;
You can make stuff dependent on the game mode. There are functions which return the gametype, such as `Spring.Utilities.Gametype.is1v1()`. The full list is here: https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Utilities/teamFunctions.lua#L74&lt;br /&gt;
&lt;br /&gt;
An important thing is that #Spring.GetAllTeams() will return a wrong value due to fake technical teams and Gaia. Instead, use Spring.Utilities.GetTeamCount() to get the real number of teams.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/SpeedMetal.lua SpeedMetal] - the simplest layout, just two squares.&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/DeltaSiegeDry.lua DSD] - huge polygons, but otherwise very simple.&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/Sever%201.lua#L343 Sever] - shows an example of smaller boxes for 1v1 and larger for teams.&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/Isle%20of%20Grief%200.2.lua Isle of Grief] - shows a smart approach, one of the boxes is not defined rigidly but is a mirror of the other (only really feasible for rough boxes or perfectly symmetrical maps).&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/Aum_1.1.lua Aum] - another small trick, this time 5-way radial symmetry.&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/Throne%20v1.lua Throne] - multiple boxes defined, with a system to pick some of them based on how many teams there are.&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/Speed_Ball_10x10.lua Speedball] - shows boxes that are generated completely algorithmically.&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/Mearth_v4.lua#L6 Middle-Earth] - interesting team names.&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/Adansonia%20v2.lua Adansonia v2] - shows synchronizing boxes across map versions.&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/duck.lua Duck] - boxless config for silly maps where everybody can start anywhere.&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]{{Navbox manual}}&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=ZK_Map_Making_Guide&amp;diff=8398</id>
		<title>ZK Map Making Guide</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=ZK_Map_Making_Guide&amp;diff=8398"/>
		<updated>2022-04-29T15:53:19Z</updated>

		<summary type="html">&lt;p&gt;Sprung: Fix a typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Also see:&lt;br /&gt;
&lt;br /&gt;
* [[Map Creation]]&lt;br /&gt;
* [https://docs.google.com/document/d/1PL8U2bf-c5HuSVAihdldDTBA5fWKoeHKNb130YDdd-w/edit# Advanced guide using WorldMachine], by Beherith&lt;br /&gt;
&lt;br /&gt;
DISCLAIMER: This guide is a work in progress (particularly with respect to using particular pieces of software) but the basic framework here should give you a good start.&lt;br /&gt;
&lt;br /&gt;
= Minimal Brief Guide =&lt;br /&gt;
&lt;br /&gt;
For more detail on each of these steps read the later sections of the document.&lt;br /&gt;
&lt;br /&gt;
This guide assumes that you are using a version of Zero-K installed through Steam. You can still make maps if you installed by some other method but you may need to modify some of the later steps.&lt;br /&gt;
&lt;br /&gt;
If you want to see what the map's file structure is meant to look like overall, scroll to the [[https://zero-k.info/mediawiki/index.php?title=ZK_Map_Making_Guide#Skeleton_Of_A_Map Skeleton Of A Map]] section. It's also a good idea to un7zip some existing maps and take a look to see how they are set up (and borrow anything which seems useful for your map).&lt;br /&gt;
&lt;br /&gt;
== Download Tools ==&lt;br /&gt;
&lt;br /&gt;
* 7zip - https://www.7-zip.org/download.html&lt;br /&gt;
* pymapconv - clone or download https://github.com/Beherith/springrts_smf_compiler somewhere, then copy pymapconv.exe and nvdxt.exe to a new directory to keep things simple&lt;br /&gt;
* map blueprint - clone or download https://github.com/Aquanim/ZKMapBlueprint&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Mapguide_download_aquanim_blueprint.png|Map blueprint download]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Create Images ==&lt;br /&gt;
&lt;br /&gt;
For a 10x10 (TitanDuel-size) map, create the following images with a tool of your choice:&lt;br /&gt;
&lt;br /&gt;
* A height map grayscale image with dimensions 641 x 641, saved as an 8-bit .bmp or a 16-bit .png. (The latter is preferred but not all tools offer 16-bit output.) The brighter a pixel is the higher the corresponding part of the map will be.&lt;br /&gt;
* A texture map colour image with dimensions 5120 x 5120, saved as a .bmp&lt;br /&gt;
&lt;br /&gt;
For a different size map, multiply the height/width of the map by 64 and add 1 to get the right size for the heightmap; multiply the height/width of the map by 512 to get the right size for the texture map.&lt;br /&gt;
&lt;br /&gt;
Different image formats ''might'' work but are just as likely to cause difficult-to-diagnose errors.&lt;br /&gt;
&lt;br /&gt;
Put these images in the same directory as pymapconv.exe from the previous step (may not strictly be required but keeps things simple).&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Useful tools: Spring Map Edit (SME), Springboard, TerreSculptor, World Machine, GIMP, Blender, any image editing software really&lt;br /&gt;
&lt;br /&gt;
== Compile Your Map ==&lt;br /&gt;
Run pymapconv.exe and fill in the following fields...&lt;br /&gt;
* An output file name - ideally this should be the name of your map, possibly with a version number. File extension .smf, will also generate a .smt. '''IMPORTANT:''' Do not rename these files after compiling!&lt;br /&gt;
* Use the buttons to select the texture and heightmap images you made in the previous step.&lt;br /&gt;
* I expect the minimum/maximum height values to be overridden by mapinfo.lua later but you might as well set them.&lt;br /&gt;
* Scroll down to the NVDXT option and make sure it says &amp;quot;-Sinc -quality_highest&amp;quot;. Also probably a good idea to tick the CLEAN option.&lt;br /&gt;
* Untick everything else, press &amp;quot;Save options as&amp;quot; if you like, then press the &amp;quot;Compile&amp;quot; button.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Troubleshooting:&lt;br /&gt;
* If your map's minimap looks like it is from an old version of your map or a different map entirely, there is probably an old minimap file which the compiler is reading. In the directory where your compiler .exe is, delete any images which look like a minimap (probably something like mini.bmp and/or mini.dds) then recompile.&lt;br /&gt;
* If your map texture looks all pinkish ingame you probably renamed the .smf and .smt files. Regenerate them and be extra sure not to rename them this time. If the issue persists there might be other reasons this can happen, consult the #zkmap channel.&lt;br /&gt;
&lt;br /&gt;
== Construct .sdd File ==&lt;br /&gt;
* Rename ZKMapBlueprint_v0.0.sdd to have the name of your map. A version identifier is advisable as well. Keep the .sdd extension.&lt;br /&gt;
* Copy the .smf and .smt files produced by pymapconv.exe into the /maps subfolder of the .sdd folder. (There should be mapblueprint.smf and mapblueprint.smt files here, you can delete them.)&lt;br /&gt;
* In the root of the .sdd folder there should be a file &amp;quot;mapinfo.lua&amp;quot;. Open this with a text editor. This file contains a bunch of stuff but there are only a few items we are interested in for now:&lt;br /&gt;
** Near the start of the file change the ''author'', ''description'', ''name'', ''shortname'' and ''version'' variables to suit you and your map.&lt;br /&gt;
** Scroll down a bit to the &amp;quot;smf&amp;quot; section and change the ''maxheight'' and ''minheight'' numbers to suit your map. Also change the file name after ''smtFileName0'' so that it has your .smt file's name.&lt;br /&gt;
* To test your map, copy the .sdd directory into the /maps folder of your Zero-K install. In the settings make sure that &amp;quot;Only featured maps&amp;quot; is disabled. Then open a Skirmish game, click on the current map, select your map from the list, and play. (You might want to make the enemy AI inactive. The minimap in the lobby will be blank, don't worry about this for now.)&lt;br /&gt;
* If you want to change your map you will need to replace the files in your ZK maps folder, then restart ZK, in order to load the new version.&lt;br /&gt;
&lt;br /&gt;
== Metal and Startboxes ==&lt;br /&gt;
Now that you can look at your height and texturemap ingame this is a good time to sort out your metal spots and start locations. &lt;br /&gt;
=== Metal spots ===&lt;br /&gt;
In the /mapconfig subfolder of the .sdd file there is a &amp;quot;map_metal_layout.lua&amp;quot; file. The blueprint contains two metal spots as an example; replace them with your own.&lt;br /&gt;
&lt;br /&gt;
=== Startboxes ===&lt;br /&gt;
In the /mapconfig subfolder of the .sdd file there is a &amp;quot;map_startboxes.lua&amp;quot; file. This specifies each team's startboxes as well as default start locations.&lt;br /&gt;
&lt;br /&gt;
Some hints for configuring the metal and startbox files:&lt;br /&gt;
&lt;br /&gt;
* Startboxes are specified by their corner points reading clockwise around the polygon. More than one separate box for a given team is possible.&lt;br /&gt;
* Holding SPACE ingame will display a dialog box which (among other things) gives the X and Z coordinates of wherever your cursor is.&lt;br /&gt;
* The metal and startbox files are just LUA scripts. This means you don't have to write simple numbers to specify locations; you can perform arithmetic to make sure your map setup is symmetric (the startbox of the South-East team in the blueprint is an example). More advanced scripting is also possible, for example to make your startbox configuration dependent on the number of players or allyteams. See the [[http://zero-k.info/mediawiki/index.php?title=Startbox_API#Advanced_stuff Startbox API page]] .&lt;br /&gt;
&lt;br /&gt;
=== Useful Tools ===&lt;br /&gt;
&lt;br /&gt;
[[https://zero-k.info/mediawiki/index.php?title=ZK_Map_Making_Guide#Startbox_Editor_Widget Startbox Editor Widget]]&lt;br /&gt;
[[https://zero-k.info/mediawiki/index.php?title=ZK_Map_Making_Guide#Metal_Spot_Placer Metal Spot Placer]]&lt;br /&gt;
&lt;br /&gt;
== Optional Extras ==&lt;br /&gt;
Scroll down to section 3 to see how to add...&lt;br /&gt;
* Features (geovents, trees, rocks, etc)&lt;br /&gt;
* DNTS (fancy map details and specular map)&lt;br /&gt;
* Fancy mapinfo stuff (lighting, water effects, etc)&lt;br /&gt;
* Skybox&lt;br /&gt;
* Other nonsense (particle effects, sound, etc)&lt;br /&gt;
* Lava&lt;br /&gt;
&lt;br /&gt;
== Upload ==&lt;br /&gt;
&lt;br /&gt;
Compress the contents of the .sdd file into a 7z, then change the file extension to “.sd7”. &lt;br /&gt;
&lt;br /&gt;
If you remove the .sdd from your game maps directory and put the .sd7 in its place, the map should still work. It is a good idea to test the .sd7 before uploading since there are several *very* easy mistakes to make in the compression process.&lt;br /&gt;
&lt;br /&gt;
'''IMPORTANT:''' Make sure that when you open the archive you see mapinfo.lua and not your .sdd folder! If you get this wrong the map will not work correctly. If you get an error saying that a .smd file is missing this is probably the problem.&lt;br /&gt;
&lt;br /&gt;
'''IMPORTANT:''' When you compress to 7z make sure the compression is “non-solid”. If using 7zip this is done by setting the &amp;quot;Solid Block size&amp;quot; option to &amp;quot;non solid&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Uploading to Zero-K Server ===&lt;br /&gt;
&lt;br /&gt;
* Go to https://zero-k.info/Maps&lt;br /&gt;
* Scroll down until you find the &amp;quot;Upload map or game (sd7 or sdz):&amp;quot; file on the right-hand side&lt;br /&gt;
* Upload your map&lt;br /&gt;
* Test your map on the live server so there is a publically accessible replay or two - games against AIs are fine&lt;br /&gt;
* Ask a moderator to support/feature your map (they will also tag it as 1v1/teams/hilly/flat/whatever as appropriate)&lt;br /&gt;
&lt;br /&gt;
If the upload step doesn't work there are two potential reasons:&lt;br /&gt;
* Your map isn't set up right. Test it locally again and make sure your map works.&lt;br /&gt;
* Something on the server has gone wrong. AFTER testing your map locally and finding that it works there, contact an admin. Uploading your map to a file-sharing service so the admin can look at it may help.&lt;br /&gt;
&lt;br /&gt;
=== Uploading to Springfiles for use in other Spring communities ===&lt;br /&gt;
&lt;br /&gt;
The old Springfiles website is defunct and has been replaced by https://springfiles.springrts.com/?type=0&lt;br /&gt;
&lt;br /&gt;
Somebody who knows how the upload process works now should fill this in. Should hopefully be simpler than old Springfiles though.&lt;br /&gt;
&lt;br /&gt;
= Skeleton Of A Map =&lt;br /&gt;
&lt;br /&gt;
All you *really* need is the stuff in solid grey boxes: mapinfo.lua, .smf and .smt files, a metal layout, and a startbox config.&lt;br /&gt;
&lt;br /&gt;
[[File:Mapskeleton.png|The skeleton of a map]]&lt;br /&gt;
&lt;br /&gt;
(Note: Some of the things labelled as &amp;quot;necessary&amp;quot; probably technically aren't; there are many ways to construct a map that Spring will accept. This guide will walk you through one that should be reasonably coherent and up to date.)&lt;br /&gt;
&lt;br /&gt;
= Tools and Resources =&lt;br /&gt;
&lt;br /&gt;
== Springboard ==&lt;br /&gt;
&lt;br /&gt;
[https://springboard-core.readthedocs.io/en/latest/installing.html Springboard Documentation]&lt;br /&gt;
&lt;br /&gt;
[[Springboard Tutorial]] on this wiki (under construction)&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
[https://github.com/Spring-SpringBoard/SpringBoard-Core/ Github page]&lt;br /&gt;
Scroll down to the &amp;quot;Installing&amp;quot; section and get the appropriate installer.&lt;br /&gt;
&lt;br /&gt;
== SpringMapEdit ==&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
[https://springfiles.com/spring/development/spring-map-edit Springfiles page]&lt;br /&gt;
&lt;br /&gt;
== Nobiax Texture Pack ==&lt;br /&gt;
&lt;br /&gt;
== Startbox Editor Widget ==&lt;br /&gt;
Load your map in ZK, press Alt-F11 to access the widget list, press &amp;quot;Search&amp;quot; and enter &amp;quot;Startbox&amp;quot;. Enable the Startbox Editor widget. The ingame description doesn't say much so let's consult the [https://github.com/ZeroK-RTS/Zero-K/blob/90d61099e3fb8509645cf16d3fa2982150c81bdd/LuaUI/Widgets/dbg_startbox_editor.lua widget source file]:&lt;br /&gt;
&lt;br /&gt;
[[Image:Startboxeditor1.png]]&lt;br /&gt;
&lt;br /&gt;
...well, that's not a good sign. Scroll down a bit further:&lt;br /&gt;
&lt;br /&gt;
[[Image:Startboxeditor2.png]]&lt;br /&gt;
&lt;br /&gt;
That's more like it. Follow those instructions to create your startboxes, then open your infolog.lua (in the main zero-k directory) after you exit to retrieve the startbox information for copying into map_startboxes.lua. It's probably a good idea to turn the widget off after you are done with it.&lt;br /&gt;
&lt;br /&gt;
== Metal Spot Placer ==&lt;br /&gt;
Load your map in ZK, press Alt-F11 to access the widget list, press &amp;quot;Search&amp;quot; and enter &amp;quot;Metal Spot&amp;quot;. Enable the Metal Spot Placer widget. As per the ingame description:&lt;br /&gt;
* Press Alt-M to enable the widget&lt;br /&gt;
* Click in locations on the map to place metal points&lt;br /&gt;
* Press Alt-M again to disable the widget and print a list of metal points to the infolog&lt;br /&gt;
&lt;br /&gt;
Then open your infolog.txt (in the main zero-k directory) after you exit to retrieve the startbox information for copying into map_metal_layout.lua. Check that the metal point values for each mex point are as you want them to be. It's probably a good idea to turn the widget off after you are done with it.&lt;br /&gt;
&lt;br /&gt;
== Upspring ==&lt;br /&gt;
&lt;br /&gt;
A tool for modifying models like those of tree features, etc. Might be useful if a feature is too large, too small, or not centered properly. I'll leave this guide to somebody who actually understands modelling.&lt;br /&gt;
&lt;br /&gt;
= Other Stuff =&lt;br /&gt;
&lt;br /&gt;
== Features (geovents, trees, rocks, etc) ==&lt;br /&gt;
&lt;br /&gt;
This method of placing features requires you to have some s11n gadgets in /LuaRules/Gadgets and some s11n and lcs stuff in the /libs/ folder. If your map doesn't have these then get them from the blueprint or some other map.&lt;br /&gt;
&lt;br /&gt;
* Put the files defining the features you want in your map file. This includes a definition in the /features subdirectory, model files in the /objects3d directory, and textures in the /unittextures directory. The easiest way to get these is to borrow them from existing maps. There is a features library as well... ask around in #zkmap for a link then update this page.&lt;br /&gt;
* Load your map in Springboard&lt;br /&gt;
* Delete any features you have marking mex locations, otherwise you will end up with two copies of them and that is bad.&lt;br /&gt;
* Place features using Springboard.&lt;br /&gt;
* Open the &amp;quot;Export&amp;quot; window in Springboard, choose a file name, set the file type to &amp;quot;s11n object format&amp;quot; and export the file.&lt;br /&gt;
* The file will (probably?) have been exported to &amp;lt;springboard exe directory&amp;gt;/data/springboard/exports - copy this s11n file to the ./mapconfig subdirectory of your map.&lt;br /&gt;
* Make sure that in ./libs/s11n/s11n_load_map_features.lua that the &amp;quot;modelPath&amp;quot; variable points at your s11n file.&lt;br /&gt;
&lt;br /&gt;
Troubleshooting: &lt;br /&gt;
* IF your features do not move when the ground under them is terraformed (a particular problem for geovents) go to ./libs/s11n/features_s11n.lua, look for the &amp;quot;CreateObject&amp;quot; function, and change it so that SetFeatureMoveCtrl is not being used to set MoveCtrl to true.&lt;br /&gt;
&lt;br /&gt;
== DNTS ==&lt;br /&gt;
&lt;br /&gt;
If you don't use DNTS but you do set detailTex in the &amp;quot;resources&amp;quot; section of mapinfo.lua then you will get some general detail map. This works better than flat colour but we can get fancier.&lt;br /&gt;
&lt;br /&gt;
* Put the .dds or .tga files defining the detail map (commonly grass, pebbles, rocks, etc.) you want in your /maps subdirectory. Again these are most easily found by borrowing from other maps. [http://beherith.eat-peet.net/stuff/nobiax_spring_dnts/nobiax_spring_dnts.html This page] has some that may work (possibly with some effort).&lt;br /&gt;
* In mapinfo.lua, in the &amp;quot;resources&amp;quot; section, set splatDetailNormalTex1, splatDetailNormalTex2, splatDetailNormalTex3, splatDetailNormalTex4 to point to your detail files. These will in order be defined by the red, green, blue and alpha channels of your distribution image.&lt;br /&gt;
* Set splatDistrTex to point to your distribution image. This defines where each detail type appears on your map. This image will be stretched over your map; powers of two in the resolution are advised.&lt;br /&gt;
* Set specularTex to point to your specular image; what colour of light will be reflected from each part of the map. It is easy to go overboard with this so taking your texture map, darkening it significantly (or possibly increasing its transparency), and tuning from there is an okay strategy. Again, this image will be stretched over your map; powers of two in the resolution are advised.&lt;br /&gt;
* There is also some lightemission thing that I have not used and don't really understand [https://springrts.com/wiki/Mapdev:lightemission here]. The example image looks like Otago so try asking TheMooseIsLoose for advice?&lt;br /&gt;
&lt;br /&gt;
== Water and lighting settings ==&lt;br /&gt;
&lt;br /&gt;
I'm not an expert, tune these for yourself until it looks good. Try reading [https://springrts.com/wiki/Mapdev:water these] [https://springrts.com/wiki/Mapdev:mapinfo.lua#Lighting pages].&lt;br /&gt;
&lt;br /&gt;
== Skybox ==&lt;br /&gt;
&lt;br /&gt;
Borrow one from some other map then set it in mapinfo.lua, atmosphere section, variable &amp;quot;skyBox&amp;quot;. If you want to make one yourself apparently pymapconv can put it in the right format.&lt;br /&gt;
&lt;br /&gt;
== Particle and sound effects ==&lt;br /&gt;
&lt;br /&gt;
Find a map that does the thing you want to do, look at how that map did it. For reference some fairly simple examples can be found in Rogues River (sound effects), Aurelian (precipitation), and Mercurial (plumes from the water).&lt;br /&gt;
&lt;br /&gt;
== Lava ==&lt;br /&gt;
&lt;br /&gt;
Good luck... I'm not sure anybody has come up with an entirely bug-free implementation of this yet. Banana Republic might be your best bet for a reference.&lt;br /&gt;
&lt;br /&gt;
== Lobby/Website minimap image ==&lt;br /&gt;
&lt;br /&gt;
This minimap image is generated from your map's texture, but unlike the ingame minimap does not have water drawn on it. If you would like your map's lobby/website image to be different, you need to create replacement images and provide them to somebody with the appropriate server access to overwrite the existing minimaps (not just any admin can do this). Anarchid has handled most of these in recent years. Ideally you only want to do this once, so wait until your map is up to a final release version before making the replacement image.&lt;br /&gt;
&lt;br /&gt;
Required images for a map called &amp;quot;map name v1.0&amp;quot;:&lt;br /&gt;
* A minimap image with the name map_name_v1.0.minimap.jpg with maximum height/width 1024.&lt;br /&gt;
* A thumbnail image with the name map_name_v1.0.thumbnail.jpg with maximum height/width 96.&lt;br /&gt;
'''IMPORTANT:''' Replace any spaces in your map name with underscores.&lt;br /&gt;
&lt;br /&gt;
Find the default images for your map on the server to figure out reasonable dimensions. Screenshotting your ingame minimap and then rescaling it is a reasonable way to get a minimap image with water on it.&lt;br /&gt;
&lt;br /&gt;
{{Navbox manual}} [[Category: Development]]&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Award&amp;diff=8340</id>
		<title>Award</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Award&amp;diff=8340"/>
		<updated>2022-03-15T15:40:27Z</updated>

		<summary type="html">&lt;p&gt;Sprung: Slow/EMP don't count for the averages.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;At the end of every battle, players are '''award'''ed with shiny trophies for various achievements during the game. Some awards are presented every game, while others are less common. It takes outstanding performance with the relevant unit set to receive an award.&lt;br /&gt;
&lt;br /&gt;
There are also event-based awards which are never awarded in normal games, for example tournament cups.&lt;br /&gt;
&lt;br /&gt;
All damage-related awards except Big Purple Heart use metal value to compare performance. Such awards are only given if the damage dealt with those weapons/units compares favorably to the average damage done by other players.&lt;br /&gt;
&lt;br /&gt;
== The Awards ==&lt;br /&gt;
&lt;br /&gt;
=== Generic Awards ===&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_pwn.png '''Complete Annihilation''': always awarded to the player who dealt the most damage.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_ouch.png '''Big Purple Heart''': always awarded to the player who received the most health damage.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_reclaim.png '''Spoils of War''': efficient usage of reclaim.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_mex.png '''Mineral Prospector''': building metal extractors.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_mexkill.png '''Loot &amp;amp; Pillage''': raiding enemy metal extractors.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_shell.png '''Turtle Shell''': effective use of defense.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_nux.png '''Apocalyptic Achievement Award''': employing superweapons.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_air.png '''Air Force General''': exceptional play with airborne units.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_navy.png '''Fleet Admiral''': successful ship usage.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_slow.png '''Traffic Cop''': applying slow damage.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_emp.png '''EMP Wizard''': dealing EMP damage.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_kam.png '''Kamikaze Award''': heroic usage of self-destructing units.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_terra.png '''Legendary Landscaper''': excessive terraforming.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_comm.png '''Master and Commander''': using your commander like a boss&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_fire.png '''Master Grill-Chef''': dealing fire damage.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_cap.png '''Master of Puppets''': capturing enemy units.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_rezz.png '''Vile Necromancer''': resurrecting wreckage.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_head.png '''Head Hunter''': eliminating enemy commanders.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_share.png '''Share Bear''': sharing units to allies.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_vet.png '''Decorated Veteran''': extremely efficient usage of a single unit.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_disarm.png '''Peacemaker''': disarming enemy units.&lt;br /&gt;
&lt;br /&gt;
=== Chicken Awards ===&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_heart.png '''Queen Heart Breaker''': killing the Chicken Queen.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_sweeper.png '''Land Sweeper''': destroying Chicken Roosts.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_dragon.png '''Dragon Slayer''': eliminating Chicken Dragons.&lt;br /&gt;
&lt;br /&gt;
=== Event Awards ===&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_gold.png http://zero-k.info/img/Awards/trophy_silver.png http://zero-k.info/img/Awards/trophy_bronze.png '''Tournament Cups''': awarded for the winners of the monthly tournaments.&lt;br /&gt;
* http://zero-k.info/img/Awards/coingold.png http://zero-k.info/img/Awards/coinsilver.png http://zero-k.info/img/Awards/coinbronze.png '''Coins''': awarded for minor community events.&lt;br /&gt;
&lt;br /&gt;
== Technical details ==&lt;br /&gt;
&lt;br /&gt;
Some awards have flat requirements for being awarded: &lt;br /&gt;
* Mineral Prospector / Loot &amp;amp; Pillage take a minimum of 15 mexes built/killed to earn.&lt;br /&gt;
* Legendary Landscaper takes a minimum of 1000m worth of terraform.&lt;br /&gt;
* Head Hunter / Dragon Slayer / Land Sweeper require 3/3/20 commander/dragon/nest kills.&lt;br /&gt;
* Master of Puppets / Vile Necromancer / Share Bear require 1000/3000/5000m worth of units captured/resurrected/shared respectively.&lt;br /&gt;
* Decorated Veteran requires the unit to make 300% cost, with a minimum of 1000m.&lt;br /&gt;
* Queen Heartbreaker requires the chicken queen to die.&lt;br /&gt;
&lt;br /&gt;
Big Purple Heart operates on health and considers environmental damage (such as collisions, forest fires, or lava). All other damage awards operate on cost and only consider PvP damage.&lt;br /&gt;
&lt;br /&gt;
Using a damage type is not enough to be eligible for the appropriate award. Each award has a dynamic threshold that scales with the general game size. Eligibility is decided thus:&lt;br /&gt;
* Take the average physical damage done by all players except yourself.&lt;br /&gt;
* Multiply by a per-award factor given in the table below.&lt;br /&gt;
* Compare your own damage with the given type. You are eligible if your damage is higher.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Difficulty factors&lt;br /&gt;
|-&lt;br /&gt;
! Award&lt;br /&gt;
! Multiplier&lt;br /&gt;
|-&lt;br /&gt;
| EMP Wizard&lt;br /&gt;
| 1.2&lt;br /&gt;
|-&lt;br /&gt;
| Fleet Admiral&amp;lt;br&amp;gt;Airforce General&amp;lt;br&amp;gt;Traffic Cop&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| Turtle Shell&amp;lt;br&amp;gt;Master Grill-Chef&lt;br /&gt;
| 0.5&lt;br /&gt;
|-&lt;br /&gt;
| Apocalyptic Achievement Award&amp;lt;br&amp;gt;Kamikaze Award&amp;lt;br&amp;gt;Master and Commander&lt;br /&gt;
| 0.3&lt;br /&gt;
|-&lt;br /&gt;
| Spoils of War&lt;br /&gt;
| 0.06&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;var&amp;gt;A&amp;lt;/var&amp;gt; did 900m of damage composed of 450m of fire damage, 350m of kamikaze damage and 100m general damage.&lt;br /&gt;
* &amp;lt;var&amp;gt;B&amp;lt;/var&amp;gt; did 800m kamikaze damage and 50m slow damage.&lt;br /&gt;
* &amp;lt;var&amp;gt;C&amp;lt;/var&amp;gt; did 1200m general damage and 50m EMP damage.&lt;br /&gt;
&lt;br /&gt;
The average of others' damage:&lt;br /&gt;
* For &amp;lt;var&amp;gt;A&amp;lt;/var&amp;gt;, it is (800 + 1200) / 2 = 1000. Note that the slow dealt by B and EMP dealt by C are not &amp;quot;physical&amp;quot; so do not count.&lt;br /&gt;
* For &amp;lt;var&amp;gt;B&amp;lt;/var&amp;gt;, it is (900 + 1200) / 2 = 1050.&lt;br /&gt;
* For &amp;lt;var&amp;gt;C&amp;lt;/var&amp;gt;, it is (900 + 800) / 2 = 850.&lt;br /&gt;
 &lt;br /&gt;
The multiplier for kamikaze is 0.3 and for fire is 0.5, so:&lt;br /&gt;
* &amp;lt;var&amp;gt;A&amp;lt;/var&amp;gt; would have to do 1000 &amp;amp;times; 0.5 = 500 fire damage to be eligible. He did 450, so he won't get it.&lt;br /&gt;
* &amp;lt;var&amp;gt;A&amp;lt;/var&amp;gt; would have to do 1000 &amp;amp;times; 0.3 = 300 kamikaze damage. He did 350, so he is eligible.&lt;br /&gt;
* &amp;lt;var&amp;gt;B&amp;lt;/var&amp;gt; would have to do 1050 &amp;amp;times; 0.3 = 315 kamikaze damage. He did 800, so is also eligible.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;var&amp;gt;B&amp;lt;/var&amp;gt; did 800 kamikaze damage and &amp;lt;var&amp;gt;A&amp;lt;/var&amp;gt; did 350, so &amp;lt;var&amp;gt;B&amp;lt;/var&amp;gt; gets the kamikaze award.&lt;br /&gt;
Nobody is eligible for the fire award.&lt;br /&gt;
&amp;lt;var&amp;gt;C&amp;lt;/var&amp;gt; did the most total damage, so gets the Complete Annihilation award.&lt;br /&gt;
{{Navbox manual}}&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Quick_Stat_Tweaks&amp;diff=8334</id>
		<title>Quick Stat Tweaks</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Quick_Stat_Tweaks&amp;diff=8334"/>
		<updated>2022-03-08T12:14:43Z</updated>

		<summary type="html">&lt;p&gt;Sprung: Github dislikes case mismatch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Tweak Units modoption can be used to modify many unit and weapon parameters. It can be used for rapidly testing balance changes or just for making a quick game mode. It has limitations and should not be used for large mod projects, see [[Mod Creation]] and [[How To Play Mods]] to get started on full modding.&lt;br /&gt;
&lt;br /&gt;
[[File:Tweakunitsdefs.png]]&lt;br /&gt;
&lt;br /&gt;
Stat tweaks can be saved and shared as a [[Custom Modes | Custom Mode]].&lt;br /&gt;
&lt;br /&gt;
== Workflow ==&lt;br /&gt;
The Tweak Units modoption overwrites unit parameter (called unitDefs) as they are loaded. The modoption requires a base64-encoded Lua array of differences. Here is how to use it.&lt;br /&gt;
* Make a Lua table in an empty file.&lt;br /&gt;
* For each unit you wish to modify, add an empty table indexed by the [[Internal unit names|internal name]] of the unit to your table.&lt;br /&gt;
* Search for the units you wish to modify in the [https://github.com/ZeroK-RTS/Zero-K/blob/master/units Zero-K repository].&lt;br /&gt;
* Copy the parameters you wish to modify into the table, maintaining the structure of the unitDef table.&lt;br /&gt;
* [https://www.base64encode.org Base64 encode] your table.&lt;br /&gt;
* Put the base 64 encoding of your table into the Tweak Units modoption.&lt;br /&gt;
* Start the game.&lt;br /&gt;
* Check infolog.txt in your install directory and fix your syntax errors.&lt;br /&gt;
&lt;br /&gt;
Check out the [https://springrts.com/wiki/Gamedev:UnitDefs unit def] and [https://springrts.com/wiki/Gamedev:WeaponDefs weapon def] pages on the SpringRTS wiki for definitions of many of the parameters. Search the Internet for tutorials on Lua tables.&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
Tweak Units cannot be used to change parameters that are part of a unit's animation, and access to some of the more unique abilities may be missing. In particular, the aiming speed of most units cannot be changed with this method.&lt;br /&gt;
&lt;br /&gt;
== Simple Example ==&lt;br /&gt;
In this example we make Glaive faster and healthier.&lt;br /&gt;
&lt;br /&gt;
Start with an empty Lua table.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
A search through the [https://github.com/ZeroK-RTS/Zero-K/blob/master/units unitdef repository] reveals that Glaive is known as cloakraid internally. [https://github.com/ZeroK-RTS/Zero-K/blob/master/units/cloakraid.lua This] is the file. Add an empty table with key 'cloakraid'.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
    cloakraid = {},&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The [https://springrts.com/wiki/Gamedev:UnitDefs SpringRTS wiki page on unitdefs] says that a unit's health is 'maxDamage' and its speed is 'maxVelocity'. [https://github.com/ZeroK-RTS/Zero-K/blob/master/units/cloakraid.Lua The Glaive file] shows us the current value of these parameters, as well as their position in the structure of a unitdef. We can change these values like so:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
    cloakraid = {&lt;br /&gt;
        maxDamage = 500,&lt;br /&gt;
        maxVelocity = 8,&lt;br /&gt;
    },&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Copy this text into a [https://www.base64encode.org/ base64 encoder] and click encode. Here is the resulting encoding.&lt;br /&gt;
&amp;lt;code style=&amp;quot;display:block;overflow:auto&amp;quot;&amp;gt;ewogICAgY2xvYWtyYWlkID0gewogICAgICAgIG1heERhbWFnZSA9IDUwMCwKICAgICAgICBtYXhWZWxvY2l0eSA9IDgsCiAgICB9LAp9&amp;lt;/code&amp;gt;&lt;br /&gt;
Set the Tweak Units modoption to your encoding and start the game. Your infolog should indicate that the modoption loaded successfully.&lt;br /&gt;
&amp;lt;samp&amp;gt;&amp;lt;pre&amp;gt;[f=-000001] Loading UnitDefs_posts&lt;br /&gt;
[f=-000001] Loading tweakunits modoption&lt;br /&gt;
[f=-000001] Loading tweakunits for cloakraid&lt;br /&gt;
[f=-000001] Loading FeatureDefs_posts&lt;br /&gt;
[f=-000001] Loading WeaponDefs_posts&lt;br /&gt;
[f=-000001] Loading ArmorDefs_posts&amp;lt;/pre&amp;gt;&amp;lt;/samp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advanced Example ==&lt;br /&gt;
In this example we will change Bandit's damage and range, and add it to the Glaive changes.&lt;br /&gt;
&lt;br /&gt;
As in the simple example, we find the [https://github.com/ZeroK-RTS/Zero-K/blob/master/units/shieldraid.Lua Bandit's file] and see that it's called shieldraid. To change Bandit and Glaive at the same time, we add a new sub-table to the table from the previous example.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
    cloakraid = {&lt;br /&gt;
        maxDamage = 500,&lt;br /&gt;
        maxVelocity = 8,&lt;br /&gt;
    },&lt;br /&gt;
    shieldraid = {},&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Weapon parameters can be found in the [https://springrts.com/wiki/Gamedev:WeaponDefs SpringRTS page on weapon defs], and Zero-K stores them as a sub-table within unitdefs. The range parameter is inside 'LASER' (the internal name of the Bandit's weapon), which is inside the weaponDefs table of Bandit. Weapon damage is further nested inside the damage sub-table of the weapondef.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
    cloakraid = {&lt;br /&gt;
        maxDamage = 500,&lt;br /&gt;
        maxVelocity = 8,&lt;br /&gt;
    },&lt;br /&gt;
    shieldraid = {&lt;br /&gt;
        weaponDefs = {&lt;br /&gt;
            LASER = {&lt;br /&gt;
                range = 600,&lt;br /&gt;
                damage = {&lt;br /&gt;
                    default = 50,&lt;br /&gt;
                },&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    },&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
As before, we now take this text, [https://www.base64encode.org/ base64 encode] it, and copy it into Tweak Units. Encodings can be shortened by removing whitespace prior to encoding.&lt;br /&gt;
&amp;lt;code style=&amp;quot;display:block;overflow:auto&amp;quot;&amp;gt;e2Nsb2FrcmFpZCA9IHttYXhEYW1hZ2UgPSA1MDAsbWF4VmVsb2NpdHkgPSA4LH0sc2hpZWxkcmFpZCA9IHt3ZWFwb25EZWZzID0ge0xBU0VSID0ge3JhbmdlID0gNjAwLGRhbWFnZSA9IHtkZWZhdWx0ID0gNTAsfSx9LH0sfSx9&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mass post-processing ==&lt;br /&gt;
&lt;br /&gt;
The above examples deal with specific values for a single unit (e.g. &amp;quot;make Glaive have 500 health&amp;quot;).&lt;br /&gt;
It is also possible to write Lua code that works on units, including changing values for all units or doing some sort of logic. This time, the option is not &amp;quot;Tweak Units&amp;quot; but &amp;quot;Tweak Defs&amp;quot;. Again, it should be encoded to base64.&lt;br /&gt;
&lt;br /&gt;
Here's an example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;for name, ud in pairs(UnitDefs) do&lt;br /&gt;
	if ud.maxvelocity then&lt;br /&gt;
		ud.maxvelocity = ud.maxvelocity*10&lt;br /&gt;
	else&lt;br /&gt;
		ud.maxdamage = ud.maxdamage*5&lt;br /&gt;
	end&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UnitDefs is a Lua table indexed with unit names as above (for example &amp;quot;cloakraid&amp;quot; for Glaive) whose values are the unit def tables in a similar format as for tweakunits, BUT WITH ALL KEYS LOWERCASE. This snippet increases unit speeds 10 times for all mobiles and health 5 times for all statics. Some fields may be &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; (for another example, death explosions are weapons but don't have a reload time). Specific Tweak Units values override the values that result from Tweak Defs. &lt;br /&gt;
&lt;br /&gt;
Happy hacking!&lt;br /&gt;
&lt;br /&gt;
[[File:Zk_1_7_11_0_cover.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]{{Navbox manual}}&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Quick_Stat_Tweaks&amp;diff=8300</id>
		<title>Quick Stat Tweaks</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Quick_Stat_Tweaks&amp;diff=8300"/>
		<updated>2022-02-02T19:54:38Z</updated>

		<summary type="html">&lt;p&gt;Sprung: Update tweak units modoption picture (tweakdefs since added)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Tweak Units modoption can be used to modify many unit and weapon parameters. It can be used for rapidly testing balance changes or just for making a quick game mode. It has limitations and should not be used for large mod projects, see [[Mod Creation]] and [[How To Play Mods]] to get started on full modding.&lt;br /&gt;
&lt;br /&gt;
[[File:Tweakunitsdefs.png]]&lt;br /&gt;
&lt;br /&gt;
Stat tweaks can be saved and shared as a [[Custom Modes | Custom Mode]].&lt;br /&gt;
&lt;br /&gt;
== Workflow ==&lt;br /&gt;
The Tweak Units modoption overwrites unit parameter (called unitDefs) as they are loaded. The modoption requires a base64-encoded Lua array of differences. Here is how to use it.&lt;br /&gt;
* Make a Lua table in an empty file.&lt;br /&gt;
* For each unit you wish to modify, add an empty table indexed by the [[Internal unit names|internal name]] of the unit to your table.&lt;br /&gt;
* Search for the units you wish to modify in the [https://github.com/ZeroK-RTS/Zero-K/blob/master/units Zero-K repository].&lt;br /&gt;
* Copy the parameters you wish to modify into the table, maintaining the structure of the unitDef table.&lt;br /&gt;
* [https://www.base64encode.org Base64 encode] your table.&lt;br /&gt;
* Put the base 64 encoding of your table into the Tweak Units modoption.&lt;br /&gt;
* Start the game.&lt;br /&gt;
* Check infolog.txt in your install directory and fix your syntax errors.&lt;br /&gt;
&lt;br /&gt;
Check out the [https://springrts.com/wiki/Gamedev:UnitDefs unit def] and [https://springrts.com/wiki/Gamedev:WeaponDefs weapon def] pages on the SpringRTS wiki for definitions of many of the parameters. Search the Internet for tutorials on Lua tables.&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
Tweak Units cannot be used to change parameters that are part of a unit's animation, and access to some of the more unique abilities may be missing. In particular, the aiming speed of most units cannot be changed with this method.&lt;br /&gt;
&lt;br /&gt;
== Simple Example ==&lt;br /&gt;
In this example we make Glaive faster and healthier.&lt;br /&gt;
&lt;br /&gt;
Start with an empty Lua table.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
A search through the [https://github.com/ZeroK-RTS/Zero-K/blob/master/units unitdef repository] reveals that Glaive is known as cloakraid internally. [https://github.com/ZeroK-RTS/Zero-K/blob/master/units/cloakraid.Lua This] is the file. Add an empty table with key 'cloakraid'.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
    cloakraid = {},&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The [https://springrts.com/wiki/Gamedev:UnitDefs SpringRTS wiki page on unitdefs] says that a unit's health is 'maxDamage' and its speed is 'maxVelocity'. [https://github.com/ZeroK-RTS/Zero-K/blob/master/units/cloakraid.Lua The Glaive file] shows us the current value of these parameters, as well as their position in the structure of a unitdef. We can change these values like so:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
    cloakraid = {&lt;br /&gt;
        maxDamage = 500,&lt;br /&gt;
        maxVelocity = 8,&lt;br /&gt;
    },&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Copy this text into a [https://www.base64encode.org/ base64 encoder] and click encode. Here is the resulting encoding.&lt;br /&gt;
&amp;lt;code style=&amp;quot;display:block;overflow:auto&amp;quot;&amp;gt;ewogICAgY2xvYWtyYWlkID0gewogICAgICAgIG1heERhbWFnZSA9IDUwMCwKICAgICAgICBtYXhWZWxvY2l0eSA9IDgsCiAgICB9LAp9&amp;lt;/code&amp;gt;&lt;br /&gt;
Set the Tweak Units modoption to your encoding and start the game. Your infolog should indicate that the modoption loaded successfully.&lt;br /&gt;
&amp;lt;samp&amp;gt;&amp;lt;pre&amp;gt;[f=-000001] Loading UnitDefs_posts&lt;br /&gt;
[f=-000001] Loading tweakunits modoption&lt;br /&gt;
[f=-000001] Loading tweakunits for cloakraid&lt;br /&gt;
[f=-000001] Loading FeatureDefs_posts&lt;br /&gt;
[f=-000001] Loading WeaponDefs_posts&lt;br /&gt;
[f=-000001] Loading ArmorDefs_posts&amp;lt;/pre&amp;gt;&amp;lt;/samp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advanced Example ==&lt;br /&gt;
In this example we will change Bandit's damage and range, and add it to the Glaive changes.&lt;br /&gt;
&lt;br /&gt;
As in the simple example, we find the [https://github.com/ZeroK-RTS/Zero-K/blob/master/units/shieldraid.Lua Bandit's file] and see that it's called shieldraid. To change Bandit and Glaive at the same time, we add a new sub-table to the table from the previous example.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
    cloakraid = {&lt;br /&gt;
        maxDamage = 500,&lt;br /&gt;
        maxVelocity = 8,&lt;br /&gt;
    },&lt;br /&gt;
    shieldraid = {},&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Weapon parameters can be found in the [https://springrts.com/wiki/Gamedev:WeaponDefs SpringRTS page on weapon defs], and Zero-K stores them as a sub-table within unitdefs. The range parameter is inside 'LASER' (the internal name of the Bandit's weapon), which is inside the weaponDefs table of Bandit. Weapon damage is further nested inside the damage sub-table of the weapondef.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;{&lt;br /&gt;
    cloakraid = {&lt;br /&gt;
        maxDamage = 500,&lt;br /&gt;
        maxVelocity = 8,&lt;br /&gt;
    },&lt;br /&gt;
    shieldraid = {&lt;br /&gt;
        weaponDefs = {&lt;br /&gt;
            LASER = {&lt;br /&gt;
                range = 600,&lt;br /&gt;
                damage = {&lt;br /&gt;
                    default = 50,&lt;br /&gt;
                },&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    },&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
As before, we now take this text, [https://www.base64encode.org/ base64 encode] it, and copy it into Tweak Units. Encodings can be shortened by removing whitespace prior to encoding.&lt;br /&gt;
&amp;lt;code style=&amp;quot;display:block;overflow:auto&amp;quot;&amp;gt;e2Nsb2FrcmFpZCA9IHttYXhEYW1hZ2UgPSA1MDAsbWF4VmVsb2NpdHkgPSA4LH0sc2hpZWxkcmFpZCA9IHt3ZWFwb25EZWZzID0ge0xBU0VSID0ge3JhbmdlID0gNjAwLGRhbWFnZSA9IHtkZWZhdWx0ID0gNTAsfSx9LH0sfSx9&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mass post-processing ==&lt;br /&gt;
&lt;br /&gt;
The above examples deal with specific values for a single unit (e.g. &amp;quot;make Glaive have 500 health&amp;quot;).&lt;br /&gt;
It is also possible to write Lua code that works on units, including changing values for all units or doing some sort of logic. This time, the option is not &amp;quot;Tweak Units&amp;quot; but &amp;quot;Tweak Defs&amp;quot;. Again, it should be encoded to base64.&lt;br /&gt;
&lt;br /&gt;
Here's an example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;for name, ud in pairs(UnitDefs) do&lt;br /&gt;
	if ud.maxvelocity then&lt;br /&gt;
		ud.maxvelocity = ud.maxvelocity*10&lt;br /&gt;
	else&lt;br /&gt;
		ud.maxdamage = ud.maxdamage*5&lt;br /&gt;
	end&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UnitDefs is a Lua table indexed with unit names as above (for example &amp;quot;cloakraid&amp;quot; for Glaive) whose values are the unit def tables in a similar format as for tweakunits, BUT WITH ALL KEYS LOWERCASE. This snippet increases unit speeds 10 times for all mobiles and health 5 times for all statics. Some fields may be &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; (for another example, death explosions are weapons but don't have a reload time). Specific Tweak Units values override the values that result from Tweak Defs. &lt;br /&gt;
&lt;br /&gt;
Happy hacking!&lt;br /&gt;
&lt;br /&gt;
[[File:Zk_1_7_11_0_cover.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]{{Navbox manual}}&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=File:Tweakunitsdefs.png&amp;diff=8299</id>
		<title>File:Tweakunitsdefs.png</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=File:Tweakunitsdefs.png&amp;diff=8299"/>
		<updated>2022-02-02T19:53:54Z</updated>

		<summary type="html">&lt;p&gt;Sprung: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tweak units/defs window&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Units&amp;diff=8269</id>
		<title>Units</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Units&amp;diff=8269"/>
		<updated>2022-01-19T17:52:09Z</updated>

		<summary type="html">&lt;p&gt;Sprung: Split air into GS and planes; split naval into ships and submarines&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''Units''' of Zero-K are the tools you will use to execute your strategies and defeat your opponents.&lt;br /&gt;
&lt;br /&gt;
Use your [[Commander]] and [[Unit classes#Constructor|Constructors]] to build up your base and economy, [[Unit classes#Raider|Raider]] and [[Unit classes#Assault|Assault]] units to attack at close range, [[Unit classes#Skirmisher|Skirmishers]] and [[Unit classes#Artillery|Artillery]] to engage at long range, and [[Unit classes#Riot|Riots]] to defend in close quarters.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center;&amp;quot; | [[Cloakbot Factory|&amp;lt;img src=&amp;quot;http://manual.zero-k.info/unitpics/factorycloak.png&amp;quot; height='64' align=&amp;quot;center&amp;quot;/&amp;gt;]]&lt;br /&gt;
[[Cloakbot Factory|Cloakbots]]&lt;br /&gt;
! style=&amp;quot;text-align: center;&amp;quot; | [[Shieldbot Factory|&amp;lt;img src=&amp;quot;http://manual.zero-k.info/unitpics/factoryshield.png&amp;quot; height='64' align=&amp;quot;center&amp;quot;/&amp;gt;]]&lt;br /&gt;
[[Shieldbot Factory|Shieldbots]]&lt;br /&gt;
! style=&amp;quot;text-align: center;&amp;quot; | [[Rover Assembly|&amp;lt;img src=&amp;quot;http://manual.zero-k.info/unitpics/factoryveh.png&amp;quot; height='64' align=&amp;quot;center&amp;quot;/&amp;gt;]]&lt;br /&gt;
[[Rover Assembly|Rovers]]&lt;br /&gt;
! style=&amp;quot;text-align: center;&amp;quot; | [[Hovercraft Platform|&amp;lt;img src=&amp;quot;http://manual.zero-k.info/unitpics/factoryhover.png&amp;quot; height='64' align=&amp;quot;center&amp;quot;/&amp;gt;]]&lt;br /&gt;
[[Hovercraft Platform|Hovercraft]]&lt;br /&gt;
! style=&amp;quot;text-align: center;&amp;quot; | [[Gunship Plant|&amp;lt;img src=&amp;quot;http://manual.zero-k.info/unitpics/factorygunship.png&amp;quot; height='64' align=&amp;quot;center&amp;quot;/&amp;gt;]]&lt;br /&gt;
[[Gunship Plant|Gunships]]&lt;br /&gt;
! style=&amp;quot;text-align: center;&amp;quot; | [[Airplane Plant|&amp;lt;img src=&amp;quot;http://manual.zero-k.info/unitpics/factoryplane.png&amp;quot; height='64' align=&amp;quot;center&amp;quot;/&amp;gt;]]&lt;br /&gt;
[[Airplane Plant|Airplanes]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | [[Spider Factory|&amp;lt;img src=&amp;quot;http://manual.zero-k.info/unitpics/factoryspider.png&amp;quot; height='64' align=&amp;quot;center&amp;quot;/&amp;gt;]]&lt;br /&gt;
[[Spider Factory|Spiders]]&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | [[Jumpbot Factory|&amp;lt;img src=&amp;quot;http://manual.zero-k.info/unitpics/factoryjump.png&amp;quot; height='64' align=&amp;quot;center&amp;quot;/&amp;gt;]]&lt;br /&gt;
[[Jumpbot Factory|Jumpbots]]&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | [[Tank Foundry|&amp;lt;img src=&amp;quot;http://manual.zero-k.info/unitpics/factorytank.png&amp;quot; height='64' align=&amp;quot;center&amp;quot;/&amp;gt;]]&lt;br /&gt;
[[Tank Foundry|Tanks]]&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | [[Amphbot Factory|&amp;lt;img src=&amp;quot;http://manual.zero-k.info/unitpics/factoryamph.png&amp;quot; height='64' align=&amp;quot;center&amp;quot;/&amp;gt;]]&lt;br /&gt;
[[Amphbot Factory|Amphbots]]&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | [[Shipyard|&amp;lt;img src=&amp;quot;http://manual.zero-k.info/unitpics/factoryship.png&amp;quot; height='64' align=&amp;quot;center&amp;quot;/&amp;gt;]]&lt;br /&gt;
[[Shipyard|Ships]]&lt;br /&gt;
| style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | [[Strider Hub|&amp;lt;img src=&amp;quot;http://manual.zero-k.info/unitpics/striderhub.png&amp;quot; height='64' align=&amp;quot;center&amp;quot;/&amp;gt;]]&lt;br /&gt;
[[Strider Hub|Striders]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Properties shared by most or all units in Zero-K include:&lt;br /&gt;
&lt;br /&gt;
* They cost the same amount of [[Metal]] and [[Energy]].&lt;br /&gt;
* Most units are produced by a factory, and autonomous Drones are built by their parent.&lt;br /&gt;
&lt;br /&gt;
Useful information on units:&lt;br /&gt;
* [[Unit classes]]&lt;br /&gt;
* [[Map icons|Unit map icons]]&lt;br /&gt;
* [[Weapon classes]]&lt;br /&gt;
* [[Internal unit names]]&lt;br /&gt;
&lt;br /&gt;
==Unit chassis movement traits==&lt;br /&gt;
&lt;br /&gt;
The movement traits of different unit chassis can be a very important factor when choosing which factory to build at the start of a game. Factors such as the terrain of the map as well as the map size can influence this decision. For instance, lots of deep water may call for a factory with lots of amphibious or airborne options, while a map with mostly somewhat steep terrain may call for bots, spiders or airborne options.&lt;br /&gt;
&lt;br /&gt;
===Brief overview===&lt;br /&gt;
&lt;br /&gt;
;Legged chassis&lt;br /&gt;
:&amp;lt;img src=&amp;quot;http://manual.zero-k.info/unitpics/cloakraid.png&amp;quot; style=&amp;quot;float:left;padding-right:0.5em&amp;quot;&amp;gt; ''Bots:'' Non-climbing legged units (generally having two or four legs) tend to have great turn rates and can typically traverse somewhat steep terrain. Some bots are amphibious, notably [[Amphbot Factory|amphbots]] and certain [[Strider Hub|strider bots]]. Some of the bots from the [[Jumpbot Factory]] can jump, which can be useful for traversing terrain as well as in combat.{{clear}}&lt;br /&gt;
:&amp;lt;img src=&amp;quot;http://manual.zero-k.info/unitpics/cloakbomb.png&amp;quot; style=&amp;quot;float:left;padding-right:0.5em&amp;quot;&amp;gt;''All-terrain:'' Climbing legged units (generally having four or more legs) can climb and traverse any land terrain, including practically vertical hills and cliffs, but tend to have poor speed. They include [[Spider Factory|all spider factory units]] and various other units such as the [[Scorpion|Scorpion strider]].{{clear}}&lt;br /&gt;
;Wheeled, tracked and hovercraft chassis&lt;br /&gt;
:&amp;lt;img src=&amp;quot;http://manual.zero-k.info/unitpics/vehraid.png&amp;quot; style=&amp;quot;float:left;padding-right:0.5em&amp;quot;&amp;gt; [[Rover Assembly|Rovers]] tend to have good or great speed, medium or poor turn rates, and prefer flat terrain (slightly steep terrain slows them).{{clear}}&lt;br /&gt;
:&amp;lt;img src=&amp;quot;http://manual.zero-k.info/unitpics/tankassault.png&amp;quot; style=&amp;quot;float:left;padding-right:0.5em&amp;quot;&amp;gt; [[Tank Foundry|Tanks]] are like rovers, except their speed and turn rates are typically worse.{{clear}}&lt;br /&gt;
:&amp;lt;img src=&amp;quot;http://manual.zero-k.info/unitpics/hoverraid.png&amp;quot; style=&amp;quot;float:left;padding-right:0.5em&amp;quot;&amp;gt; [[Hovercraft Platform|Hovercraft]] are like rovers, except they can traverse water easily.{{clear}}&lt;br /&gt;
;Airborne chassis&lt;br /&gt;
:&amp;lt;img src=&amp;quot;http://manual.zero-k.info/unitpics/bomberriot.png&amp;quot; style=&amp;quot;float:left;padding-right:0.5em&amp;quot;&amp;gt; Airplanes fly and tend to have excellent speed. Their movement resembles real-life planes.{{clear}}&lt;br /&gt;
:&amp;lt;img src=&amp;quot;http://manual.zero-k.info/unitpics/gunshipraid.png&amp;quot; style=&amp;quot;float:left;padding-right:0.5em&amp;quot;&amp;gt; Gunships hover above the ground; their movement resembles helicopters.{{clear}}&lt;br /&gt;
;Naval chassis&lt;br /&gt;
:&amp;lt;img src=&amp;quot;http://manual.zero-k.info/unitpics/shipscout.png&amp;quot; style=&amp;quot;float:left;padding-right:0.5em&amp;quot;&amp;gt; Ships float on the sea surface. Smaller ships are built in the [[Shipyard]], while carriers and battleships are built at the [[Strider Hub]].{{clear}}&lt;br /&gt;
:&amp;lt;img src=&amp;quot;http://manual.zero-k.info/unitpics/subraider.png&amp;quot; style=&amp;quot;float:left;padding-right:0.5em&amp;quot;&amp;gt; Submarines dive underwater, which gives them protection from radar and weaponry (but they cannot surface).{{clear}}&lt;br /&gt;
&lt;br /&gt;
There are also various kinds of indirect movement, such as transport gunships, teleportation, throwing, gravity projection, etc.&lt;br /&gt;
&lt;br /&gt;
The [[Newbie Guide#Map views|pathing map overlay]] when a unit is selected is useful for viewing where a selected unit can and cannot go.&lt;br /&gt;
&lt;br /&gt;
{{Navbox units}}&lt;br /&gt;
&lt;br /&gt;
{{Navbox buildings}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Units]]&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=ZK_Map_Making_Guide&amp;diff=7993</id>
		<title>ZK Map Making Guide</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=ZK_Map_Making_Guide&amp;diff=7993"/>
		<updated>2021-10-27T14:47:00Z</updated>

		<summary type="html">&lt;p&gt;Sprung: Add a pic for map blueprint download because github is confusing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Also see:&lt;br /&gt;
&lt;br /&gt;
* [[Map Creation]]&lt;br /&gt;
* [https://docs.google.com/document/d/1PL8U2bf-c5HuSVAihdldDTBA5fWKoeHKNb130YDdd-w/edit# Advanced guide using WorldMachine], by Beherith&lt;br /&gt;
&lt;br /&gt;
DISCLAIMER: This guide is a work in progress (particularly with respect to using particular pieces of software) but the basic framework here should give you a good start.&lt;br /&gt;
&lt;br /&gt;
= Minimal Brief Guide =&lt;br /&gt;
&lt;br /&gt;
For more detail on each of these steps read the later sections of the document.&lt;br /&gt;
&lt;br /&gt;
This guide assumes that you are using a version of Zero-K installed through Steam. You can still make maps if you installed by some other method but you may need to modify some of the later steps.&lt;br /&gt;
&lt;br /&gt;
If you want to see what the map's file structure is meant to look like overall, scroll to the [[https://zero-k.info/mediawiki/index.php?title=ZK_Map_Making_Guide#Skeleton_Of_A_Map Skeleton Of A Map]] section. It's also a good idea to un7zip some existing maps and take a look to see how they are set up (and borrow anything which seems useful for your map).&lt;br /&gt;
&lt;br /&gt;
== Download Tools ==&lt;br /&gt;
&lt;br /&gt;
* 7zip - https://www.7-zip.org/download.html&lt;br /&gt;
* pymapconv - clone or download https://github.com/Beherith/springrts_smf_compiler somewhere, then copy pymapconv.exe and nvdxt.exe to a new directory to keep things simple&lt;br /&gt;
* map blueprint - clone or download https://github.com/Aquanim/ZKMapBlueprint&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Mapguide_download_aquanim_blueprint.png|Map blueprint download]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Create Images ==&lt;br /&gt;
&lt;br /&gt;
For a 10x10 (TitanDuel-size) map, create the following images with a tool of your choice:&lt;br /&gt;
&lt;br /&gt;
* A height map grayscale image with dimensions 641 x 641, saved as an 8-bit .bmp or a 16-bit .png. (The latter is preferred but not all tools offer 16-bit output.) The brighter a pixel is the higher the corresponding part of the map will be.&lt;br /&gt;
* A texture map colour image with dimensions 5120 x 5120, saved as a .bmp&lt;br /&gt;
&lt;br /&gt;
For a different size map, multiply the height/width of the map by 64 and add 1 to get the right size for the heightmap; multiply the height/width of the map by 512 to get the right size for the texture map.&lt;br /&gt;
&lt;br /&gt;
Different image formats ''might'' work but are just as likely to cause difficult-to-diagnose errors.&lt;br /&gt;
&lt;br /&gt;
Put these images in the same directory as pymapconv.exe from the previous step (may not strictly be required but keeps things simple).&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Useful tools: Spring Map Edit (SME), Springboard, TerreSculptor, World Machine, GIMP, Blender, any image editing software really&lt;br /&gt;
&lt;br /&gt;
== Compile Your Map ==&lt;br /&gt;
Run pymapconv.exe and fill in the following fields...&lt;br /&gt;
* An output file name - ideally this should be the name of your map, possibly with a version number. File extension .smf, will also generate a .smt. '''IMPORTANT:''' Do not rename these files after compiling!&lt;br /&gt;
* Use the buttons to select the texture and heightmap images you made in the previous step.&lt;br /&gt;
* I expect the minimum/maximum height values to be overridden by mapinfo.lua later but you might as well set them.&lt;br /&gt;
* Scroll down to the NVDXT option and make sure it says &amp;quot;-Sinc -quality_highest&amp;quot;. Also probably a good idea to tick the CLEAN option.&lt;br /&gt;
* Untick everything else, press &amp;quot;Save options as&amp;quot; if you like, then press the &amp;quot;Compile&amp;quot; button.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Troubleshooting:&lt;br /&gt;
* If your map's minimap looks like it is from an old version of your map or a different map entirely, there is probably an old minimap file which the compiler is reading. In the directory where your compiler .exe is, delete any images which look like a minimap (probably something like mini.bmp and/or mini.dds) then recompile.&lt;br /&gt;
* If your map texture looks all pinkish ingame you probably renamed the .smf and .smt files. Regenerate them and be extra sure not to rename them this time. If the issue persists there might be other reasons this can happen, consult the #zkmap channel.&lt;br /&gt;
&lt;br /&gt;
== Construct .sdd File ==&lt;br /&gt;
* Rename ZKMapBlueprint_v0.0.sdd to have the name of your map. A version identifier is advisable as well. Keep the .sdd extension.&lt;br /&gt;
* Copy the .smf and .smt files produced by pymapconv.exe into the /maps subfolder of the .sdd folder. (There should be mapblueprint.smf and mapblueprint.smt files here, you can delete them.)&lt;br /&gt;
* In the root of the .sdd folder there should be a file &amp;quot;mapinfo.lua&amp;quot;. Open this with a text editor. This file contains a bunch of stuff but there are only a few items we are interested in for now:&lt;br /&gt;
** Near the start of the file change the ''author'', ''description'', ''name'', ''shortname'' and ''version'' variables to suit you and your map.&lt;br /&gt;
** Scroll down a bit to the &amp;quot;smf&amp;quot; section and change the ''maxheight'' and ''minheight'' numbers to suit your map. Also change the file name after ''smtFileName0'' so that it has your .smt file's name.&lt;br /&gt;
* To test your map, copy the .sdd directory into the /maps folder of your Zero-K install. In the settings make sure that &amp;quot;Only featured maps&amp;quot; is disabled. Then open a Skirmish game, click on the current map, select your map from the list, and play. (You might want to make the enemy AI inactive. The minimap in the lobby will be blank, don't worry about this for now.)&lt;br /&gt;
* If you want to change your map you will need to replace the files in your ZK maps folder, then restart ZK, in order to load the new version.&lt;br /&gt;
&lt;br /&gt;
== Metal and Startboxes ==&lt;br /&gt;
Now that you can look at your height and texturemap ingame this is a good time to sort out your metal spots and start locations. &lt;br /&gt;
=== Metal spots ===&lt;br /&gt;
In the /mapconfig subfolder of the .sdd file there is a &amp;quot;map_metal_layout.lua&amp;quot; file. The blueprint contains two metal spots as an example; replace them with your own.&lt;br /&gt;
&lt;br /&gt;
=== Startboxes ===&lt;br /&gt;
In the /mapconfig subfolder of the .sdd file there is a &amp;quot;map_startboxes.lua&amp;quot; file. This specifies each team's startboxes as well as default start locations.&lt;br /&gt;
&lt;br /&gt;
Some hints for configuring the metal and startbox files:&lt;br /&gt;
&lt;br /&gt;
* Startboxes are specified by their corner points reading clockwise around the polygon. More than one separate box for a given team is possible.&lt;br /&gt;
* Holding SPACE ingame will display a dialog box which (among other things) gives the X and Z coordinates of wherever your cursor is.&lt;br /&gt;
* The metal and startbox files are just LUA scripts. This means you don't have to write simple numbers to specify locations; you can perform arithmetic to make sure your map setup is symmetric (the startbox of the South-East team in the blueprint is an example). More advanced scripting is also possible, for example to make your startbox configuration dependent on the number of players or allyteams. See the [[http://zero-k.info/mediawiki/index.php?title=Startbox_API#Advanced_stuff Startbox API page]] .&lt;br /&gt;
&lt;br /&gt;
=== Useful Tools ===&lt;br /&gt;
&lt;br /&gt;
[[https://zero-k.info/mediawiki/index.php?title=ZK_Map_Making_Guide#Startbox_Editor_Widget Startbox Editor Widget]]&lt;br /&gt;
[[https://zero-k.info/mediawiki/index.php?title=ZK_Map_Making_Guide#Metal_Spot_Placer Metal Spot Placer]]&lt;br /&gt;
&lt;br /&gt;
== Optional Extras ==&lt;br /&gt;
Scroll down to section 3 to see how to add...&lt;br /&gt;
* Features (geovents, trees, rocks, etc)&lt;br /&gt;
* DNTS (fancy map details and specular map)&lt;br /&gt;
* Fancy mapinfo stuff (lighting, water effects, etc)&lt;br /&gt;
* Skybox&lt;br /&gt;
* Other nonsense (particle effects, sound, etc)&lt;br /&gt;
* Lava&lt;br /&gt;
&lt;br /&gt;
== Upload ==&lt;br /&gt;
&lt;br /&gt;
Compress the contents of the .sdd file into a 7z, then change the file extension to “.sd7”. &lt;br /&gt;
&lt;br /&gt;
If you remove the .sdd from your game maps directory and put the .sd7 in its place, the map should still work. It is a good idea to test the .sd7 before uploading since there are several *very* easy mistakes to make in the compression process.&lt;br /&gt;
&lt;br /&gt;
'''IMPORTANT:''' Make sure that when you open the archive you see mapinfo.lua and not your .sdd folder! If you get this wrong the map will not work correctly. If you get an error saying that a .smd file is missing this is probably the problem.&lt;br /&gt;
&lt;br /&gt;
'''IMPORTANT:''' When you compress to 7z make sure the compression is “non-solid”. If using 7zip this is done by setting the &amp;quot;Solid Block size&amp;quot; option to &amp;quot;non solid&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Uploading to Zero-K Server ===&lt;br /&gt;
&lt;br /&gt;
* Go to https://zero-k.info/Maps&lt;br /&gt;
* Scroll down until you find the &amp;quot;Upload map or game (sd7 or sdz):&amp;quot; file on the right-hand side&lt;br /&gt;
* Upload your map&lt;br /&gt;
* Test your map on the live server so there is a publically accessible replay or two - games against AIs are fine&lt;br /&gt;
* Ask a moderator to support/feature your map (they will also tag it as 1v1/teams/hilly/flat/whatever as appropriate)&lt;br /&gt;
&lt;br /&gt;
If the upload step doesn't work there are two potential reasons:&lt;br /&gt;
* Your map isn't set up right. Test it locally again and make sure your map works.&lt;br /&gt;
* Something on the server has gone wrong. AFTER testing your map locally and finding that it works there, contact an admin. Uploading your map to a file-sharing service so the admin can look at it may help.&lt;br /&gt;
&lt;br /&gt;
=== Uploading to Springfiles for use in other Spring communities ===&lt;br /&gt;
&lt;br /&gt;
The old Springfiles website is defunct and has been replaced by https://springfiles.springrts.com/?type=0&lt;br /&gt;
&lt;br /&gt;
Somebody who knows how the upload process works now should fill this in. Should hopefully be simpler than old Springfiles though.&lt;br /&gt;
&lt;br /&gt;
= Skeleton Of A Map =&lt;br /&gt;
&lt;br /&gt;
All you *really* need is the stuff in solid grey boxes: mapinfo.lua, .smf and .smt files, a metal layout, and a startbox config.&lt;br /&gt;
&lt;br /&gt;
[[File:Mapskeleton.png|The skeleton of a map]]&lt;br /&gt;
&lt;br /&gt;
(Note: Some of the things labelled as &amp;quot;necessary&amp;quot; probably technically aren't; there are many ways to construct a map that Spring will accept. This guide will walk you through one that should be reasonably coherent and up to date.)&lt;br /&gt;
&lt;br /&gt;
= Tools and Resources =&lt;br /&gt;
&lt;br /&gt;
== Springboard ==&lt;br /&gt;
&lt;br /&gt;
[https://springboard-core.readthedocs.io/en/latest/installing.html Springboard Documentation]&lt;br /&gt;
&lt;br /&gt;
[[Springboard Tutorial]] on this wiki (under construction)&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
[https://github.com/Spring-SpringBoard/SpringBoard-Core/ Github page]&lt;br /&gt;
Scroll down to the &amp;quot;Installing&amp;quot; section and get the appropriate installer.&lt;br /&gt;
&lt;br /&gt;
== SpringMapEdit ==&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
[https://springfiles.com/spring/development/spring-map-edit Springfiles page]&lt;br /&gt;
&lt;br /&gt;
== Nobiax Texture Pack ==&lt;br /&gt;
&lt;br /&gt;
== Startbox Editor Widget ==&lt;br /&gt;
Load your map in ZK, press Alt-F11 to access the widget list, press &amp;quot;Search&amp;quot; and enter &amp;quot;Startbox&amp;quot;. Enable the Startbox Editor widget. The ingame description doesn't say much so let's consult the [https://github.com/ZeroK-RTS/Zero-K/blob/90d61099e3fb8509645cf16d3fa2982150c81bdd/LuaUI/Widgets/dbg_startbox_editor.lua widget source file]:&lt;br /&gt;
&lt;br /&gt;
[[Image:Startboxeditor1.png]]&lt;br /&gt;
&lt;br /&gt;
...well, that's not a good sign. Scroll down a bit further:&lt;br /&gt;
&lt;br /&gt;
[[Image:Startboxeditor2.png]]&lt;br /&gt;
&lt;br /&gt;
That's more like it. Follow those instructions to create your startboxes, then open your infolog.lua (in the main zero-k directory) after you exit to retrieve the startbox information for copying into map_startboxes.lua. It's probably a good idea to turn the widget off after you are done with it.&lt;br /&gt;
&lt;br /&gt;
== Metal Spot Placer ==&lt;br /&gt;
Load your map in ZK, press Alt-F11 to access the widget list, press &amp;quot;Search&amp;quot; and enter &amp;quot;Metal Spot&amp;quot;. Enable the Metal Spot Placer widget. As per the ingame description:&lt;br /&gt;
* Press Alt-M to enable the widget&lt;br /&gt;
* Click in locations on the map to place metal points&lt;br /&gt;
* Press Alt-M again to disable the widget and print a list of metal points to the infolog&lt;br /&gt;
&lt;br /&gt;
Then open your infolog.lua (in the main zero-k directory) after you exit to retrieve the startbox information for copying into map_metal_layout.lua. Check that the metal point values for each mex point are as you want them to be. It's probably a good idea to turn the widget off after you are done with it.&lt;br /&gt;
&lt;br /&gt;
== Upspring ==&lt;br /&gt;
&lt;br /&gt;
A tool for modifying models like those of tree features, etc. Might be useful if a feature is too large, too small, or not centered properly. I'll leave this guide to somebody who actually understands modelling.&lt;br /&gt;
&lt;br /&gt;
= Other Stuff =&lt;br /&gt;
&lt;br /&gt;
== Features (geovents, trees, rocks, etc) ==&lt;br /&gt;
&lt;br /&gt;
This method of placing features requires you to have some s11n gadgets in /LuaRules/Gadgets and some s11n and lcs stuff in the /libs/ folder. If your map doesn't have these then get them from the blueprint or some other map.&lt;br /&gt;
&lt;br /&gt;
* Put the files defining the features you want in your map file. This includes a definition in the /features subdirectory, model files in the /objects3d directory, and textures in the /unittextures directory. The easiest way to get these is to borrow them from existing maps. There is a features library as well... ask around in #zkmap for a link then update this page.&lt;br /&gt;
* Load your map in Springboard&lt;br /&gt;
* Delete any features you have marking mex locations, otherwise you will end up with two copies of them and that is bad.&lt;br /&gt;
* Place features using Springboard.&lt;br /&gt;
* Open the &amp;quot;Export&amp;quot; window in Springboard, choose a file name, set the file type to &amp;quot;s11n object format&amp;quot; and export the file.&lt;br /&gt;
* The file will (probably?) have been exported to &amp;lt;springboard exe directory&amp;gt;/data/springboard/exports - copy this s11n file to the ./mapconfig subdirectory of your map.&lt;br /&gt;
* Make sure that in ./libs/s11n/s11n_load_map_features.lua that the &amp;quot;modelPath&amp;quot; variable points at your s11n file.&lt;br /&gt;
&lt;br /&gt;
Troubleshooting: &lt;br /&gt;
* IF your features do not move when the ground under them is terraformed (a particular problem for geovents) go to ./libs/s11n/features_s11n.lua, look for the &amp;quot;CreateObject&amp;quot; function, and change it so that SetFeatureMoveCtrl is not being used to set MoveCtrl to true.&lt;br /&gt;
&lt;br /&gt;
== DNTS ==&lt;br /&gt;
&lt;br /&gt;
If you don't use DNTS but you do set detailTex in the &amp;quot;resources&amp;quot; section of mapinfo.lua then you will get some general detail map. This works better than flat colour but we can get fancier.&lt;br /&gt;
&lt;br /&gt;
* Put the .dds or .tga files defining the detail map (commonly grass, pebbles, rocks, etc.) you want in your /maps subdirectory. Again these are most easily found by borrowing from other maps. [http://beherith.eat-peet.net/stuff/nobiax_spring_dnts/nobiax_spring_dnts.html This page] has some that may work (possibly with some effort).&lt;br /&gt;
* In mapinfo.lua, in the &amp;quot;resources&amp;quot; section, set splatDetailNormalTex1, splatDetailNormalTex2, splatDetailNormalTex3, splatDetailNormalTex4 to point to your detail files. These will in order be defined by the red, green, blue and alpha channels of your distribution image.&lt;br /&gt;
* Set splatDistrTex to point to your distribution image. This defines where each detail type appears on your map. This image will be stretched over your map; powers of two in the resolution are advised.&lt;br /&gt;
* Set specularTex to point to your specular image; what colour of light will be reflected from each part of the map. It is easy to go overboard with this so taking your texture map, darkening it significantly (or possibly increasing its transparency), and tuning from there is an okay strategy. Again, this image will be stretched over your map; powers of two in the resolution are advised.&lt;br /&gt;
* There is also some lightemission thing that I have not used and don't really understand [https://springrts.com/wiki/Mapdev:lightemission here]. The example image looks like Otago so try asking TheMooseIsLoose for advice?&lt;br /&gt;
&lt;br /&gt;
== Water and lighting settings ==&lt;br /&gt;
&lt;br /&gt;
I'm not an expert, tune these for yourself until it looks good. Try reading [https://springrts.com/wiki/Mapdev:water these] [https://springrts.com/wiki/Mapdev:mapinfo.lua#Lighting pages].&lt;br /&gt;
&lt;br /&gt;
== Skybox ==&lt;br /&gt;
&lt;br /&gt;
Borrow one from some other map then set it in mapinfo.lua, atmosphere section, variable &amp;quot;skyBox&amp;quot;. If you want to make one yourself apparently pymapconv can put it in the right format.&lt;br /&gt;
&lt;br /&gt;
== Particle and sound effects ==&lt;br /&gt;
&lt;br /&gt;
Find a map that does the thing you want to do, look at how that map did it. For reference some fairly simple examples can be found in Rogues River (sound effects), Aurelian (precipitation), and Mercurial (plumes from the water).&lt;br /&gt;
&lt;br /&gt;
== Lava ==&lt;br /&gt;
&lt;br /&gt;
Good luck... I'm not sure anybody has come up with an entirely bug-free implementation of this yet. Banana Republic might be your best bet for a reference.&lt;br /&gt;
&lt;br /&gt;
{{Navbox manual}} [[Category: Development]]&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=File:Mapguide_download_aquanim_blueprint.png&amp;diff=7992</id>
		<title>File:Mapguide download aquanim blueprint.png</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=File:Mapguide_download_aquanim_blueprint.png&amp;diff=7992"/>
		<updated>2021-10-27T14:45:40Z</updated>

		<summary type="html">&lt;p&gt;Sprung: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Licensing ==&lt;br /&gt;
{{PD}}&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Abbreviations&amp;diff=7965</id>
		<title>Abbreviations</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Abbreviations&amp;diff=7965"/>
		<updated>2021-10-14T12:18:24Z</updated>

		<summary type="html">&lt;p&gt;Sprung: AN? Everybody calls anti anti.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Maybe ideal for new player (under construction). So please add something useful here. Also expand into ZK slang in general, not just abbreviations. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===A===&lt;br /&gt;
*AA — '''A'''nti '''A'''ir.&lt;br /&gt;
*Anti — [[Antinuke|'''Anti'''nuke]].&lt;br /&gt;
*Anni — [[Lucifer]] (''anni'' is from Annihilator, the old name) — heavy tachyon tower.&lt;br /&gt;
*AoE — '''A'''rea '''o'''f '''E'''ffect (splash damage).&lt;br /&gt;
*Avenger — old name for [[Swift]] — multirole fighter.&lt;br /&gt;
*Amph — [[Amphbot Factory|'''Amph'''ibious bots]].&lt;br /&gt;
*Air — typically indicates [[Airplane Plant|plane factory]] units; rarely [[Gunship Plant|gunships]].&lt;br /&gt;
*Arty — short for '''Arti'''llery, a class of long-range units.&lt;br /&gt;
&lt;br /&gt;
===B===&lt;br /&gt;
*Bantha — old name for [[Paladin]].&lt;br /&gt;
*BB — [[Big Bertha|'''B'''ig '''B'''ertha]] — the long range cannon.&lt;br /&gt;
*BD — [[Revenant]], comes from old name Black Dawn — heavy raider/assault gunship.&lt;br /&gt;
*Behe — [[Cerberus]], from old name Behemoth.&lt;br /&gt;
*BP — buildpower — the speed at which constructors/factories convert resources to units.&lt;br /&gt;
*BW — [[Blastwing|'''B'''last'''W'''ing]] — flying bomb unit.&lt;br /&gt;
&lt;br /&gt;
===C===&lt;br /&gt;
*CA — Complete Annihilation — ZK's direct ancestor game. Also the Complete Annihilation [[Award|award]] (for dealing the most damage).&lt;br /&gt;
*Cata — [[Merlin]]. From the old name, Catapult — artillery strider.&lt;br /&gt;
*CCR — [https://zero-k.info/Maps/Detail/55646 Comet Catcher Redux] — the flat vehicle map.&lt;br /&gt;
*Chix — [[Chicken Defense]], a Tower Defense style game mode.&lt;br /&gt;
*Com(m) — [[Commander|'''Comm'''ander]] — the starting unit.&lt;br /&gt;
*Con — [[Unit classes#Constructor|'''Con'''structor]] — any mobile unit with ability to build stuff.&lt;br /&gt;
*Cooked — destroyed, usually about players (but sometimes also individual units). See also: [[#lobster|lobster]].&lt;br /&gt;
*CS — [[Chainsaw|'''C'''hain'''S'''aw]] — long range anti-air.&lt;br /&gt;
*Crow — mistyped [[Krow]].&lt;br /&gt;
&lt;br /&gt;
===D===&lt;br /&gt;
*Det — also ''detri'' — [[Detriment]] — the largest strider.&lt;br /&gt;
*DDM — [[Desolator]], formerly known as the '''D'''ooms'''d'''ay '''M'''achine — heavy defensive structure.&lt;br /&gt;
*DF — DeinFreund — one of the developers.&lt;br /&gt;
*Dgun — '''D'''isintegrator '''Gun''' — class of special weapons that need manual activation using &amp;quot;D&amp;quot; key — for example Dante's missile volley or special commander weapons.&lt;br /&gt;
*Domi — [[Dominatrix]] — capture vehicle.&lt;br /&gt;
*DPS — '''D'''amage '''P'''er '''S'''econd.&lt;br /&gt;
*DRP — [[Disco Rave Party|'''D'''isco '''R'''ave '''P'''arty]] — the superweapon.&lt;br /&gt;
*Drop — a &amp;quot;drop&amp;quot; happens when units are loaded into transports and then &amp;quot;dropped&amp;quot; somewhere, like the enemy base.&lt;br /&gt;
*DSD — [https://zero-k.info/Maps/Detail/56560 Delta Siege Dry] — a popular teams map.&lt;br /&gt;
&lt;br /&gt;
===E===&lt;br /&gt;
*E — [[Energy|'''E'''nergy]] — the resource.&lt;br /&gt;
*Eco — '''Eco'''nomy — all resource-producing units and buildings.&lt;br /&gt;
*&amp;lt;span id=&amp;quot;Elo&amp;quot;&amp;gt;Elo&amp;lt;/span&amp;gt; — a rating system used for balancing games basing on estimated players skill (on which ZK's ladder ratings used to be based).&lt;br /&gt;
*EMP — '''E'''lectro'''M'''agnetic '''P'''ulse — paralyzer weapons, can also be used to mean an air player using [[Thunderbird]].&lt;br /&gt;
&lt;br /&gt;
===F===&lt;br /&gt;
*FFA — '''F'''ree '''f'''or '''A'''ll — a match with 3 or more teams.&lt;br /&gt;
*Fac — [[Units|'''Fac'''tory]] — building that produces mobile units.&lt;br /&gt;
*FW — [[Firewalker]] — artillery bot.&lt;br /&gt;
*Fus — [[Fusion Reactor]].&lt;br /&gt;
*Firepluk award — named after the player Firepluk; When a player resigns very early into the game but ends up winning anyways.&lt;br /&gt;
&lt;br /&gt;
===G===&lt;br /&gt;
*Gaetor — [[Scorcher]], formerly known as Insti'''gator'''.&lt;br /&gt;
*Geo — [[Geothermal Generator|'''Geo'''thermal Powerplant]] or the spot where it can be built (also ''geospot'').&lt;br /&gt;
*GF — GoogleFrog — one of the lead developers.&lt;br /&gt;
*GS — [[Gunship Plant|Gunships]].&lt;br /&gt;
*Golly or Goli — [[Cyclops]], formerly known as Goliath — heavy tank.&lt;br /&gt;
*Grid — energy grid — system of connected energy sources, part of [[Overdrive|overdrive]]. Structures are in the same grid if their &amp;quot;circles&amp;quot; touch.&lt;br /&gt;
&lt;br /&gt;
===H===&lt;br /&gt;
*HLT — '''H'''eavy '''L'''aser '''T'''ower — [[Stinger]].&lt;br /&gt;
*Hawk — old name for [[Raptor]] — air superiority fighter.&lt;br /&gt;
&lt;br /&gt;
===I===&lt;br /&gt;
*Icy — [https://zero-k.info/Maps/Detail/7513 Icy Run v2], a popular map for (very) high density casual team games.&lt;br /&gt;
*IoG — [https://zero-k.info/Maps/Detail/49517 Isle of Grief], a map.&lt;br /&gt;
&lt;br /&gt;
===J===&lt;br /&gt;
*JJ — JumpJet Factory, now [[Jumpbot Factory]].&lt;br /&gt;
&lt;br /&gt;
===K===&lt;br /&gt;
*KR — KingRaptor — one of the core developers (currently known as Histidine).&lt;br /&gt;
&lt;br /&gt;
===L===&lt;br /&gt;
*Licho — old name for [[Likho]] — heavy bomber plane. Also one of the core developers.&lt;br /&gt;
*Link — to link disconnected parts of energy grid together OR to link shields together.&lt;br /&gt;
*LLT — '''L'''ight '''L'''aser '''T'''ower — the [[Lotus]] turret.&lt;br /&gt;
*&amp;lt;span id=&amp;quot;lobster&amp;quot;&amp;gt;Lobster&amp;lt;/span&amp;gt; — a taunt for a player who hasn't performed well in ongoing or previous battle(s).&lt;br /&gt;
*LoS — line of sight.&lt;br /&gt;
*LV — '''L'''ight '''V'''ehicles (Factory) — LV got renamed to [[Rover Assembly]].&lt;br /&gt;
*Leveler — old name for [[Ripper]]. &lt;br /&gt;
&lt;br /&gt;
===M===&lt;br /&gt;
*M — [[Metal|'''M'''etal]] — the resource.&lt;br /&gt;
*Merl — old name for [[Impaler]].&lt;br /&gt;
*Mex — [[Metal Extractor|'''M'''etal '''Ex'''tractor]], ''to mex'' - the action of constructing extractors on untapped metal spots.&lt;br /&gt;
*Morph — to upgrade a [[Commander]] or a [[Geothermal Generator]].&lt;br /&gt;
*Moho — old name for [[Advanced Geothermal]].&lt;br /&gt;
*MT — '''M'''issile '''T'''ower — the [[Picket]] turret.&lt;br /&gt;
&lt;br /&gt;
===N===&lt;br /&gt;
*Nano — [[Caretaker]] nanolathe tower — static constructor.&lt;br /&gt;
*Nap — to kidnap — usually &amp;quot;comnap&amp;quot; — capture enemy commander with [[Gunship Plant|air transport]].&lt;br /&gt;
*NullAI — a &amp;quot;sandbox&amp;quot; skirmish opponent which does nothing, sometimes used as an insult.&lt;br /&gt;
&lt;br /&gt;
===O===&lt;br /&gt;
*OD — '''O'''ver'''D'''rive — overdrive pumps spare energy to metal extractors to improve their output, see [[Overdrive|economic section of the manual]].&lt;br /&gt;
*OP — '''O'''ver'''P'''owered — something is considered too good for its cost (e.g. a unit/module/ability). Also forum abbreviation for ''original poster'', the person who started the current thread.&lt;br /&gt;
*OTA — (Original) Total Annihilation — a 1997 RTS game which ZK started out as a mod of (where &amp;quot;original&amp;quot; is to refer to the retail game as opposed to the collection of the various other mods it spawned).&lt;br /&gt;
*Owled — weak enough that it might as well not be in the game.&lt;br /&gt;
&lt;br /&gt;
===P===&lt;br /&gt;
*Pene — [[Lance]]. From old name &amp;quot;Penetrator&amp;quot;.&lt;br /&gt;
*Porc — from porcupine — heavy defenses, usually useless.&lt;br /&gt;
*Porcing — playing too defensively, not taking enough land.&lt;br /&gt;
*PW — [[PlanetWars|'''P'''lanet'''W'''ars]] — the online multiplayer campaign.&lt;br /&gt;
*Plop (fac) — deploying your first factory, which is free and builds instantly.&lt;br /&gt;
&lt;br /&gt;
===R===&lt;br /&gt;
*Rec — [[Reclaim Command|'''Rec'''laim]] — command to recycle units, wreckages and map features.&lt;br /&gt;
*Ress/rez — [[Resurrect Command|'''Ress'''urection]] (common misspelled version of resurrection) — ability to recreate a unit from its wreckage.&lt;br /&gt;
*Reaper — old name for [[Minotaur]]. &lt;br /&gt;
&lt;br /&gt;
===S===&lt;br /&gt;
*SD — [[Stardust|'''S'''tar'''d'''ust]].&lt;br /&gt;
*Singu — [[Singularity Reactor|'''Singu'''larity Reactor]] — most powerful, and most dangerous energy-producing structure.&lt;br /&gt;
*Shadow — old name for [[Raven]] — bomber plane.&lt;br /&gt;
*Shiny — huge explosion caused either by nuke, advanced geothermal or destruction of Singularity Reactor. Can also be used when a lot of bombs chain explode.&lt;br /&gt;
*Skydust — [[Stardust]] on a [[Terraform|terraformed]] spire.&lt;br /&gt;
*Starlulz — [[Starlight]].&lt;br /&gt;
*Stiletto — old name for [[Thunderbird]].&lt;br /&gt;
*Sumo — old name for [[Jugglenaut]].&lt;br /&gt;
*SSB — [https://zero-k.info/Maps/Detail/7770 Small Supreme Battlefield] — a remake of Seton's Clutch, the iconic map from Supreme Commander.&lt;br /&gt;
*Selfd — '''Self D'''estruct — usually meant as an encouragement to self destruct all your things using CTRL+A, CTRL+D keys to end the game; sometimes to self destruct a single unit for its powerful death explosion.&lt;br /&gt;
*Shield-ball — a group of units that have shields, usually containing [[Thug]]s, [[Felon]]s, and possibly an [[Aspis]].&lt;br /&gt;
*Stealth — also 'stealth-ball' — a group of units with personal cloaks (like [[Scythe]]s, or under cloaking field of [[Aspis]].&lt;br /&gt;
&lt;br /&gt;
===T===&lt;br /&gt;
*TB — [[Thunderbird|'''T'''hunder'''b'''ird]] — area disable bomber plane.&lt;br /&gt;
*Terra — [[Terraform|'''Terra'''form]] — a way to modify map's landscape.&lt;br /&gt;
*Tit d — [https://zero-k.info/Maps/Detail/56655 Titan Duel], a popular map.&lt;br /&gt;
*Trollcom — a frontline [[Commander]] with a lot of investment, typically a disintegrator gun commander with high movement speed and stealth cloak.&lt;br /&gt;
*Tick — old name for [[Imp]].&lt;br /&gt;
&lt;br /&gt;
===U===&lt;br /&gt;
*Ubermex — a [[Metal Extractor]] spot with much more yield than usual (4+ while typical mex is 2).&lt;br /&gt;
*UP — '''U'''nder'''P'''owered — something is considered too weak for its cost (e.g. a unit/module/ability).&lt;br /&gt;
*Ulti — [[Ultimatum|'''Ulti'''matum]] — cloaked anti-heavy strider.&lt;br /&gt;
&lt;br /&gt;
===V===&lt;br /&gt;
*Vamp — old name for [[Raptor]] — air superiority fighter.&lt;br /&gt;
*Vindi — [[Hercules]]. From the old name Vindicator.&lt;br /&gt;
&lt;br /&gt;
===W===&lt;br /&gt;
*Warrior — old name for [[Reaver]].&lt;br /&gt;
*WHR — Whole History Rating — the rating system used for the ZK ladder. See also: [[#Elo|Elo]].&lt;br /&gt;
*Wubbernaut — a new player. Comes from ''wub'' (similar to nub) + ''naut'' (to explore).&lt;br /&gt;
&lt;br /&gt;
===Z===&lt;br /&gt;
*ZK — [[Zero Kelvin|'''Z'''ero '''K'''elvin]] — the name of this game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Navbox manual}}&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Resurrect_Command&amp;diff=7964</id>
		<title>Resurrect Command</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Resurrect_Command&amp;diff=7964"/>
		<updated>2021-10-14T12:11:49Z</updated>

		<summary type="html">&lt;p&gt;Sprung: Engineer comm is multiplayer; misc tweaks&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;An alternative to [[Reclaim]], resurrection is a late-game option that allows players to resurrect wrecks of units and buildings. Only [[Athena]]s and [[Commander|Commanders]] with the [[Commander#Support|Lazarus Device]] (which in multiplayer requires the Engineer chassis) are able to resurrect units. The default hotkey is {{key press|T}}.&lt;br /&gt;
&lt;br /&gt;
The case for resurrection comes up mostly at the [[typical game progression|later stages of the game]], as it requires copious amounts of [[Energy]]. While [[Reclaim]] grants you 40% of wreck's metal cost, with resurrection you need to pay 200% of its value in Energy in order to restore it. In late game, however, Energy is generally abundant, and an ability to reassemble valuable units, armies or defensive lines for no [[Metal]] payment is invaluable.&lt;br /&gt;
&lt;br /&gt;
In conclusion:&lt;br /&gt;
*Resurrection takes 200% of target's cost in Energy and returns 100% of its Metal cost by fully reviving it. &lt;br /&gt;
*Reclaim takes 0% Energy directly (though you will later need Energy to use the resulting Metal) and returns 40% of its Metal cost back into your pocket.&lt;br /&gt;
*Resurrection can take effect only on [[wreck]]s. Self-destruction, large explosions, [[Ultimatum]]'s gun and any other weaponry inflicting large amounts of burst damage will render the target unresurrectable.&lt;br /&gt;
**As such, debris is useless for resurrections and should be reclaimed.&lt;br /&gt;
*Resurrection takes quite a bit longer than reclaim. Also, if a unit was partially reclaimed earlier, you will need to refill its Metal wreck beforehand.&lt;br /&gt;
*Resurrection is best used late in the game, with abundance of Energy, to quickly replenish your forces, or even to take dead enemies to fight for you.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Navbox commands}}&lt;br /&gt;
[[Category: Commands]]&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Corpses&amp;diff=7958</id>
		<title>Corpses</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Corpses&amp;diff=7958"/>
		<updated>2021-10-13T14:31:39Z</updated>

		<summary type="html">&lt;p&gt;Sprung: Redirected page to Wreckage&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Wreckage]]&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Corpse&amp;diff=7957</id>
		<title>Corpse</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Corpse&amp;diff=7957"/>
		<updated>2021-10-13T14:31:26Z</updated>

		<summary type="html">&lt;p&gt;Sprung: Redirected page to Wreckage&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Wreckage]]&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Resurrect_Command&amp;diff=7955</id>
		<title>Resurrect Command</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Resurrect_Command&amp;diff=7955"/>
		<updated>2021-10-13T12:16:31Z</updated>

		<summary type="html">&lt;p&gt;Sprung: Reclaim costs no E directly, severity is not health*2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;An alternative to [[Reclaim]], resurrection is a late-game option that allows players to resurrect wrecks of units and buildings. Only [[Athena]]s and [[Commander|Engineer Commander]] with [[Commander#Support|Lazarus Device]] are able to resurrect units. Default accelerator key is {{key press|T}}.&lt;br /&gt;
&lt;br /&gt;
The case for resurrection comes up mostly at the [[typical game progression|later stages of the game]], as it requires copious amounts of energy. While [[Reclaim]] grants you 40% of wreck's cost, with resurrection you need to pay 200% of its value in energy in order to restore it. In late game, however, energy is generally abundant, and an ability reassemble valuable units, armies or defensive lines for no metal payment is invaluable.&lt;br /&gt;
&lt;br /&gt;
In conclusion:&lt;br /&gt;
&lt;br /&gt;
*Resurrection takes 200% of target's cost in energy and returns 100% of its metal cost by fully reviving it. &lt;br /&gt;
&lt;br /&gt;
*Reclaim takes 0% energy directly (though you will later need energy to use the resulting metal) and returns 40% of its metal cost back into your pocket.&lt;br /&gt;
&lt;br /&gt;
*Resurrection can only take affect on [[wreck]]s. Self-destruction, large explosions, [[Ultimatum]]'s gun and any other weaponry inflicting large amounts of burst damage will render the target unresurrectable.&lt;br /&gt;
&lt;br /&gt;
*As such, debris is useless for resurrections, and should be reclaimed.&lt;br /&gt;
&lt;br /&gt;
*Resurrection takes quite a bit longer then reclaim. Also, if a unit was partially reclaimed earlier, you will need to refill its metal wreck beforehand.&lt;br /&gt;
&lt;br /&gt;
*Resurrection is best used late-game, with abundance of energy, to quickly replenish your forces, or even take dead enemies to fight for you.&lt;br /&gt;
&lt;br /&gt;
{{Navbox commands}}&lt;br /&gt;
[[Category: Commands]]&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Wreckage&amp;diff=7954</id>
		<title>Wreckage</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Wreckage&amp;diff=7954"/>
		<updated>2021-10-13T12:12:32Z</updated>

		<summary type="html">&lt;p&gt;Sprung: Fix list formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wrecks are objects that drop from units upon deaths. If the unit suffers a lot of damage in a short period of time, it turns into debris instead. Wrecks can be reclaimed for metal, creating a dynamic point of interest on the map (for battles in the field) and providing a bit of defender's advantage.&lt;br /&gt;
&lt;br /&gt;
=== Wrecks ===&lt;br /&gt;
* reclaim for 40% of unit's cost.&lt;br /&gt;
* can be resurrected by Athena or a Commander with the Lazarus Device module, for 200% of the original unit's cost, but in energy only.&lt;br /&gt;
* has the same health as the base unit, and turns into debris if destroyed (but overkill damage doesn't carry over).&lt;br /&gt;
* often blocks unit pathing and building construction, except for very small units.&lt;br /&gt;
* large units can crush small wreckage by moving over them, turning them into debris.&lt;br /&gt;
&lt;br /&gt;
=== Debris ===&lt;br /&gt;
* reclaim for 20% of unit's cost.&lt;br /&gt;
* can NOT be resurrected.&lt;br /&gt;
* has the same health as the base unit, disappears completely if destroyed.&lt;br /&gt;
* does not block pathing or construction.&lt;br /&gt;
* units always turn into debris when self-destructed. This is useful if you cannot retrieve a high-value unit that is close to death, and would rather not give your enemy as much of an economic boost.&lt;br /&gt;
&lt;br /&gt;
=== Shards ===&lt;br /&gt;
* only created from commander module wrecks, around the commander's wreck (the main wreck is left &amp;quot;naked&amp;quot;).&lt;br /&gt;
* can NOT be resurrected or collected by a commander, only reclaimed. A resurrected commander starts with no modules.&lt;br /&gt;
* have 40% of the module's metal value and their health is 200% of the cost (e.g. a 100m module has 40m reclaim and 200 health).&lt;br /&gt;
* turn into debris when destroyed, which have 20% of the value but otherwise are the same.&lt;br /&gt;
&lt;br /&gt;
= Detailed mechanics =&lt;br /&gt;
&lt;br /&gt;
Whether a unit turns into a wreck or debris is controlled by the &amp;quot;severity&amp;quot; of its death. Units leave a full wreck if the severity value is less than 50% of their max health, debris otherwise. Severity is a numerical buffer that accumulates damage taken by the unit and dissipates 10% of its value every simulation frame (or, equivalently, 95% every second). The way this resolves is that its value will be approximately the last damage instance, unless under heavy concentrated fire, and continuous weapons such as Lotus will leave the value at about 1/3 of their DPS (so a 75 DPS laser usually kills units with 25 severity). In practice this means that burst, high-alpha damage is far better at turning units into debris than continuous damage.&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Wreckage&amp;diff=7953</id>
		<title>Wreckage</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Wreckage&amp;diff=7953"/>
		<updated>2021-10-13T12:12:00Z</updated>

		<summary type="html">&lt;p&gt;Sprung: Details etc&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wrecks are objects that drop from units upon deaths. If the unit suffers a lot of damage in a short period of time, it turns into debris instead. Wrecks can be reclaimed for metal, creating a dynamic point of interest on the map (for battles in the field) and providing a bit of defender's advantage.&lt;br /&gt;
&lt;br /&gt;
=== Wrecks ===&lt;br /&gt;
 * reclaim for 40% of unit's cost.&lt;br /&gt;
 * can be resurrected by Athena or a Commander with the Lazarus Device module, for 200% of the original unit's cost, but in energy only.&lt;br /&gt;
 * has the same health as the base unit, and turns into debris if destroyed (but overkill damage doesn't carry over).&lt;br /&gt;
 * often blocks unit pathing and building construction, except for very small units.&lt;br /&gt;
 * large units can crush small wreckage by moving over them, turning them into debris.&lt;br /&gt;
&lt;br /&gt;
=== Debris ===&lt;br /&gt;
 * reclaim for 20% of unit's cost.&lt;br /&gt;
 * can NOT be resurrected.&lt;br /&gt;
 * has the same health as the base unit, disappears completely if destroyed.&lt;br /&gt;
 * does not block pathing or construction.&lt;br /&gt;
 * units always turn into debris when self-destructed. This is useful if you cannot retrieve a high-value unit that is close to death, and would rather not give your enemy as much of an economic boost.&lt;br /&gt;
&lt;br /&gt;
=== Shards ===&lt;br /&gt;
 * only created from commander module wrecks, around the commander's wreck (the main wreck is left &amp;quot;naked&amp;quot;).&lt;br /&gt;
 * can NOT be resurrected or collected by a commander, only reclaimed. A resurrected commander starts with no modules.&lt;br /&gt;
 * have 40% of the module's metal value and their health is 200% of the cost (e.g. a 100m module has 40m reclaim and 200 health).&lt;br /&gt;
 * turn into debris when destroyed, which have 20% of the value but otherwise are the same.&lt;br /&gt;
&lt;br /&gt;
= Detailed mechanics =&lt;br /&gt;
&lt;br /&gt;
Whether a unit turns into a wreck or debris is controlled by the &amp;quot;severity&amp;quot; of its death. Units leave a full wreck if the severity value is less than 50% of their max health, debris otherwise. Severity is a numerical buffer that accumulates damage taken by the unit and dissipates 10% of its value every simulation frame (or, equivalently, 95% every second). The way this resolves is that its value will be approximately the last damage instance, unless under heavy concentrated fire, and continuous weapons such as Lotus will leave the value at about 1/3 of their DPS (so a 75 DPS laser usually kills units with 25 severity). In practice this means that burst, high-alpha damage is far better at turning units into debris than continuous damage.&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Scrap&amp;diff=7952</id>
		<title>Scrap</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Scrap&amp;diff=7952"/>
		<updated>2021-10-13T11:50:19Z</updated>

		<summary type="html">&lt;p&gt;Sprung: Redirected page to Wreckage&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Wreckage]]&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Debris&amp;diff=7951</id>
		<title>Debris</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Debris&amp;diff=7951"/>
		<updated>2021-10-13T11:48:18Z</updated>

		<summary type="html">&lt;p&gt;Sprung: Redirected page to Wreckage&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Wreckage]]&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Wrecks&amp;diff=7950</id>
		<title>Wrecks</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Wrecks&amp;diff=7950"/>
		<updated>2021-10-13T11:48:02Z</updated>

		<summary type="html">&lt;p&gt;Sprung: Redirected page to Wreckage&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Wreckage]]&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Wreckage&amp;diff=7948</id>
		<title>Wreckage</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Wreckage&amp;diff=7948"/>
		<updated>2021-10-13T11:47:37Z</updated>

		<summary type="html">&lt;p&gt;Sprung: Sprung moved page Wreck to Wreckage&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wrecks are objects that drop from units upon deaths. If the unit suffers damage twice it's health, it turns into debris. If the unit dies at any lower damage, it turns into a wreck.&lt;br /&gt;
* Wrecks reclaim for 40% of unit's cost.&lt;br /&gt;
* Debris reclaims for 20% of unit's cost.&lt;br /&gt;
Upon self-destruction, unit turns into debris at all times. This is useful if you cannot retrieve a high-value unit that is close to death, and would rather not give your enemy as much of an economic boost.&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Wreck&amp;diff=7949</id>
		<title>Wreck</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Wreck&amp;diff=7949"/>
		<updated>2021-10-13T11:47:37Z</updated>

		<summary type="html">&lt;p&gt;Sprung: Sprung moved page Wreck to Wreckage&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Wreckage]]&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Burning&amp;diff=7891</id>
		<title>Burning</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Burning&amp;diff=7891"/>
		<updated>2021-10-05T17:57:09Z</updated>

		<summary type="html">&lt;p&gt;Sprung: Redirected page to Fire&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Fire]]&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Afterburn&amp;diff=7890</id>
		<title>Afterburn</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Afterburn&amp;diff=7890"/>
		<updated>2021-10-05T17:56:57Z</updated>

		<summary type="html">&lt;p&gt;Sprung: Afterburn -&amp;gt; Fire&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Fire]]&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Napalm&amp;diff=7889</id>
		<title>Napalm</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Napalm&amp;diff=7889"/>
		<updated>2021-10-05T17:56:38Z</updated>

		<summary type="html">&lt;p&gt;Sprung: Napalm -&amp;gt; Fire&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Fire]]&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Status_Effects&amp;diff=7888</id>
		<title>Status Effects</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Status_Effects&amp;diff=7888"/>
		<updated>2021-10-05T17:52:29Z</updated>

		<summary type="html">&lt;p&gt;Sprung: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Zero-K has a lot of status effects, special debuffs that can be applied to enemy units to help suppress them and support your armies in battle. They work by filling separate damage meters underneath the target's hit points, and generate various effects.&amp;lt;div style=&amp;quot;float:right;&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== EMP damage ==&lt;br /&gt;
EMP damage stuns enemies, completely disabling them and preventing them from moving, using abilities, or returning fire.&lt;br /&gt;
&lt;br /&gt;
[[File:Weapon EMP.jpg]]&lt;br /&gt;
&lt;br /&gt;
* When an instance of EMP damage is applied to an enemy, it is checked in proportion to the enemy's current health and converted into a stacking percentage.&lt;br /&gt;
* When EMP percentage reaches 100% or higher, the unit is stunned.&lt;br /&gt;
* EMP percentage on units decay at a rate of 2.5% per second. The moment the unit's percentage drops below 100%, it is no longer stunned.&lt;br /&gt;
* Even though EMP percentage stacks, it doesn't stack freely: every EMP weapon has a maximum percentage it can raise a unit to. This is described in the weapon stat block as a maximum stun time - each second effectively being a 2.5% maximum over 100% since EMP decays at that rate.&lt;br /&gt;
** For example, a [[Venom]] has a maximum stun time of 1s, which means it can at most raise an enemy's stun percentage to 102.5%.&lt;br /&gt;
** Meanwhile a [[Widow]] can stun a unit for 30s, which means it can raise an enemy's stun percentage to 100 + 30 * 2.5 = 175%.&lt;br /&gt;
&lt;br /&gt;
Against shields, EMP damage is divided by 3 and converted into normal shield damage. If a weapon deals normal and EMP damage together, the EMP damage is applied last.&lt;br /&gt;
&lt;br /&gt;
EMP is yellow, or in the case of the self-destructing [[Imp]], blue.&lt;br /&gt;
&lt;br /&gt;
== Disarm damage ==&lt;br /&gt;
Disarm is a particular type of EMP that will leave the afflicted units able to move, but unable to use any weapons or special abilities (this includes jumping, using build power, regeneration or receiving income from the commander's Vanguard economy module). Disarm damage is converted into a separate disarm percentage bar tracked independently from EMP percentage. Disarmed units flash yellow instead of blue.&lt;br /&gt;
&lt;br /&gt;
== Slow damage ==&lt;br /&gt;
Slow damage gradually decreases the movement speed and rate of fire of enemy units.&lt;br /&gt;
&lt;br /&gt;
[[File: Weapon slow.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Unlike EMP or disarm damage, slow damage is tracked and stored directly on the affected unit as a total rather than being converted into a percentage.&lt;br /&gt;
* As long as a unit has slow damage on it, it's slowed in proportion to the slow damage / its maximum health. This means that damaging a unit can increase its slow since the slow damage buffer becomes proportionally larger.&lt;br /&gt;
* Slow damage is always capped at 50% of the unit's current health. If a unit is damaged to the point that slow damage would rise over this limit, the extra slow damage is cleared.&lt;br /&gt;
* After 0.5s of taking no slow damage, units start clearing slow damage = 4% of their current health per second.&lt;br /&gt;
* Some units (the [[Limpet]] and [[Moderator]]) apply '''overslow''':&lt;br /&gt;
** This is a secondary status effect that raises the slow damage cap of the target to a higher percentage than 50%.&lt;br /&gt;
** Even when a unit's slow damage is higher than 50% of its current health thanks to overslow, it is still only slowed down by 50%. Overslow can only &amp;quot;stretch out&amp;quot; a 50% slow longer.&lt;br /&gt;
** Overslow is tracked and cleared separately from slow.&lt;br /&gt;
&lt;br /&gt;
Like EMP damage, slow damage is divided by 3 and converted into normal damage against shields.&lt;br /&gt;
&lt;br /&gt;
Slow is purple.&lt;br /&gt;
&lt;br /&gt;
== Capture damage ==&lt;br /&gt;
Capture damage is a special kind of damage only dealt by the [[Dominatrix]]. It can steal a unit from an enemy and place it under your (potentially permanent) control.&lt;br /&gt;
&lt;br /&gt;
* When an instance of capture damage is applied to an enemy, it is directly converted into a percentage just like with EMP damage. Unlike with EMP damage, it's divided by (the target enemy's current HP + 1000) instead of just the target's current HP.&lt;br /&gt;
* When a unit reaches 100% capture percentage, it is captured and belongs to the Dominatrix's player. It stays this way until the Dominatrix that dealt the final instance of capture damage is destroyed or the unit is captured by a different Dominatrix.&lt;br /&gt;
* After 5s of taking no capture damage, capture percentage decays at a rate of 4% per second.&lt;br /&gt;
* If a captured unit's controlling Dominatrix is destroyed, it is returned to its original controller with 95% capture percentage.&lt;br /&gt;
* Capturing a Dominatrix grants control of it as well as its subordinates. Battles with Dominatrices on both side can result in a tree-like control structure.&lt;br /&gt;
* Capturing a unit that originally belonged to an ally returns it to that ally without creating a control link. &lt;br /&gt;
* Even though capture percentage stacks, it does not stack between players who belong on different teams (say, in a 3 player FFA). Each team gets their own capture bar for the target unit, and the UI will only display the highest percentage.&lt;br /&gt;
&lt;br /&gt;
When a unit is captured, a yellow line is displayed connecting them to their controlling Dominatrix, visible if either the Dominatrix or the unit is visible.&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Moderator&amp;diff=7866</id>
		<title>Moderator</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Moderator&amp;diff=7866"/>
		<updated>2021-10-05T16:50:04Z</updated>

		<summary type="html">&lt;p&gt;Sprung: Wording (overslow doesnt actually slow more, just longer)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''{{PAGENAME}}''' is a disruptor skirmisher walker from the [[Jumpbot Factory]].{{ Infobox zkunit&lt;br /&gt;
| name = Moderator&lt;br /&gt;
| defname = jumpskirm&lt;br /&gt;
| description = Disruptor Skirmisher Walker&lt;br /&gt;
| image = http://manual.zero-k.info/unitpics/jumpskirm.png&lt;br /&gt;
| icontype = fatbotsupport&lt;br /&gt;
| cost = 240&lt;br /&gt;
| hitpoints = 480&lt;br /&gt;
| movespeed = 57&lt;br /&gt;
| turnrate = 475&lt;br /&gt;
| sight = 473&lt;br /&gt;
| transportable = Light&lt;br /&gt;
| weapons = &lt;br /&gt;
	{{ Infobox zkweapon&lt;br /&gt;
	| name = Disruptor Pulse Beam&lt;br /&gt;
	| type = BeamLaser&lt;br /&gt;
	| damage = 460&lt;br /&gt;
	| reloadtime = 10&lt;br /&gt;
	| dps = 46&lt;br /&gt;
	| slowdamage = 1840&lt;br /&gt;
	| slowdps = 184&lt;br /&gt;
	| range = 420&lt;br /&gt;
	| special1 = Instantly hits&lt;br /&gt;
	}}&lt;br /&gt;
| abilities = &lt;br /&gt;
	{{ Infobox zkability line&lt;br /&gt;
	| customdata1 = Can ignore unidentified targets&lt;br /&gt;
	}}&lt;br /&gt;
}}==Description==&lt;br /&gt;
The Moderator's disruptor beam reduces enemy speed and rate of fire by up to 50% in addition to dealing damage, making it effective against almost all targets.&lt;br /&gt;
&lt;br /&gt;
== Tactics and Strategy ==&lt;br /&gt;
Since the Moderator's slowbeam instantly hits, and since it deals significant amounts of slow damage, even high-weight raiders such as the [[Blitz]] and [[Pyro]] are ill-suited towards dealing with about equal numbers of Moderators. To counter this, try switching to using cheaper, smaller raiders like [[Glaive]]s, or longer-ranged skirmishers like [[Ronin]]s or [[Fencer]]s.&lt;br /&gt;
&lt;br /&gt;
== Mechanics ==&lt;br /&gt;
Not only does the Moderator slow, it also overslows - the targeted enemy unit can take extra slow damage, equivalent to 2 seconds of decay, above the usual cap, though without actually increasing the slowdown (this means staying at the maximum 50% slowdown for 2 seconds instead of falling off immediately, as long as enough slow damage was dealt). &lt;br /&gt;
&lt;br /&gt;
{{Navbox units}}&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Limpet&amp;diff=7860</id>
		<title>Limpet</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Limpet&amp;diff=7860"/>
		<updated>2021-10-05T16:41:54Z</updated>

		<summary type="html">&lt;p&gt;Sprung: Wording (overslow doesnt actually slow more, just longer)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''{{PAGENAME}}''' is an amphibious slow bomb from the [[Amphbot Factory]].{{ Infobox zkunit&lt;br /&gt;
| name = Limpet&lt;br /&gt;
| defname = amphbomb&lt;br /&gt;
| description = Amphibious Slow Bomb&lt;br /&gt;
| image = http://manual.zero-k.info/unitpics/amphbomb.png&lt;br /&gt;
| icontype = amphbomb&lt;br /&gt;
| cost = 150&lt;br /&gt;
| hitpoints = 400&lt;br /&gt;
| movespeed = 123&lt;br /&gt;
| turnrate = 593&lt;br /&gt;
| sight = 240&lt;br /&gt;
| sonar = 240&lt;br /&gt;
| transportable = Light&lt;br /&gt;
| weapons = &lt;br /&gt;
	{{ Infobox zkweapon&lt;br /&gt;
	| name = Slowing Explosion&lt;br /&gt;
	| damage = 150&lt;br /&gt;
	| slowdamage = 1201&lt;br /&gt;
	| slowdps = 0&lt;br /&gt;
	| aoe = 250&lt;br /&gt;
	| special1 = No friendly fire&lt;br /&gt;
	}}&lt;br /&gt;
| abilities = &lt;br /&gt;
	{{ Infobox zkability regen&lt;br /&gt;
	| waterregen = 10&lt;br /&gt;
	| atdepth = 30&lt;br /&gt;
	}}&lt;br /&gt;
	{{ Infobox zkability line&lt;br /&gt;
	| customdata1 = Instant self-destruction&lt;br /&gt;
	}}&lt;br /&gt;
}}==Description==&lt;br /&gt;
The Limpet can dodge most slow projectiles thanks to its agility and small size, allowing it to get close to enemy units in order to detonate, slowing and damaging them. Unlike other types of bombs, friendly units are not affected by its explosion.&lt;br /&gt;
&lt;br /&gt;
==Mechanics==&lt;br /&gt;
Not only does the Limpet slow, it also overslows - every enemy unit caught in the blast can take extra slow damage, equivalent to 5 seconds of decay, above the usual cap, though without actually increasing the slowdown (this means staying at the maximum 50% slowdown for 5 seconds instead of falling off immediately, as long as enough slow damage was dealt).&lt;br /&gt;
&lt;br /&gt;
{{Navbox units}}&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Quick_Stat_Tweaks&amp;diff=7695</id>
		<title>Quick Stat Tweaks</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Quick_Stat_Tweaks&amp;diff=7695"/>
		<updated>2021-08-18T12:28:29Z</updated>

		<summary type="html">&lt;p&gt;Sprung: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Tweak Units modoption can be used to modify many unit and weapon parameters. It can be used for rapidly testing balance changes or just for making a quick game mode. It has limitations and should not be used for large mod projects, see [[Mod Creation]] and [[How To Play Mods]] to get started on full modding.&lt;br /&gt;
&lt;br /&gt;
[[File:Tweakunitswindow.jpg]]&lt;br /&gt;
&lt;br /&gt;
Stat tweaks can be saved and shared as a [[Custom Modes | Custom Mode]].&lt;br /&gt;
&lt;br /&gt;
== Workflow ==&lt;br /&gt;
The Tweak Units modoption overwrites unit parameter (called unitDefs) as they are loaded. The modoption requires a base64 encoded lua array of differences. Here is how to use it.&lt;br /&gt;
* Make a lua table in an empty file.&lt;br /&gt;
* For each unit you wish to modify, add an empty table indexed by the internal name of the unit to your table.&lt;br /&gt;
* Search for the units you wish to modify in the [https://github.com/ZeroK-RTS/Zero-K/blob/master/units Zero-K repository].&lt;br /&gt;
* Copy the parameters you wish to modify into the table, maintaining the structure of the unitDef table.&lt;br /&gt;
* [https://www.base64encode.org Base64 encode] your table.&lt;br /&gt;
* Put the base 64 encoding of your table into the Tweak Units modoption.&lt;br /&gt;
* Start the game.&lt;br /&gt;
* Check infolog.txt in your install directory and fix your syntax errors.&lt;br /&gt;
&lt;br /&gt;
Check out the [https://springrts.com/wiki/Gamedev:UnitDefs unit def] and [https://springrts.com/wiki/Gamedev:WeaponDefs weapon def] pages on the SpringRTS wiki for definitions of many of the parameters. Search the internet for tutorials on lua tables.&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
Tweak Units cannot be used to change parameters that are part of a unit's animation, and access to some of the more unique abilities may be missing. In particular, the aiming speed of most units cannot be changed with this method.&lt;br /&gt;
&lt;br /&gt;
== Simple Example ==&lt;br /&gt;
In this example we make Glaive faster and healthier.&lt;br /&gt;
&lt;br /&gt;
Start with an empty lua table.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
A search through the [https://github.com/ZeroK-RTS/Zero-K/blob/master/units unitdef repository] reveals that Glaive is known as cloakraid internally. [https://github.com/ZeroK-RTS/Zero-K/blob/master/units/cloakraid.lua This] is the file. Add an empty table with key 'cloakraid'.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{&lt;br /&gt;
    cloakraid = {},&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
The [https://springrts.com/wiki/Gamedev:UnitDefs SpringRTS wiki page on unitdefs] says that a unit's health is 'maxDamage' and its speed is 'maxVelocity'. [https://github.com/ZeroK-RTS/Zero-K/blob/master/units/cloakraid.lua The Glaive file] shows us the current value of these parameters, as well as their position in the structure of a unitdef. We can change these values like so:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{&lt;br /&gt;
    cloakraid = {&lt;br /&gt;
        maxDamage = 500,&lt;br /&gt;
        maxVelocity = 8,&lt;br /&gt;
    },&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Copy this text into a [https://www.base64encode.org/ base64 encoder] and click encode. Here is the resulting encoding.&lt;br /&gt;
 ewogICAgY2xvYWtyYWlkID0gewogICAgICAgIG1heERhbWFnZSA9IDUwMCwKICAgICAgICBtYXhWZWxvY2l0eSA9IDgsCiAgICB9LAp9&lt;br /&gt;
Set the Tweak Units modoption to your encoding and start the game. Your infolog should indicate that the modoption loaded successfully.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;[f=-000001] Loading UnitDefs_posts&lt;br /&gt;
[f=-000001] Loading tweakunits modoption&lt;br /&gt;
[f=-000001] Loading tweakunits for cloakraid&lt;br /&gt;
[f=-000001] Loading FeatureDefs_posts&lt;br /&gt;
[f=-000001] Loading WeaponDefs_posts&lt;br /&gt;
[f=-000001] Loading ArmorDefs_posts&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advanced Example ==&lt;br /&gt;
In this example we will change Bandit's damage and range, and add it to the Glaive changes.&lt;br /&gt;
&lt;br /&gt;
As in the simple example, we find the [https://github.com/ZeroK-RTS/Zero-K/blob/master/units/shieldraid.lua Bandit's file] and see that it called shieldraid. To change Bandit and Glaive at the same time we add a new subtable to the table from the previous example.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{&lt;br /&gt;
    cloakraid = {&lt;br /&gt;
        maxDamage = 500,&lt;br /&gt;
        maxVelocity = 8,&lt;br /&gt;
    },&lt;br /&gt;
    shieldraid = {},&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Weapon parameters can be found in the [https://springrts.com/wiki/Gamedev:WeaponDefs SpringRTS page on weapon defs], and Zero-K stores them as a subtable within unitdefs. The range parameter is inside 'LASER' (the internal name of the Bandit's weapon), which is inside the weaponDefs table of Bandit. Weapon damage is further nested inside the damage sub-table of the weapondef.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{&lt;br /&gt;
    cloakraid = {&lt;br /&gt;
        maxDamage = 500,&lt;br /&gt;
        maxVelocity = 8,&lt;br /&gt;
    },&lt;br /&gt;
    shieldraid = {&lt;br /&gt;
        weaponDefs = {&lt;br /&gt;
            LASER = {&lt;br /&gt;
                range = 600,&lt;br /&gt;
                damage = {&lt;br /&gt;
                    default = 50,&lt;br /&gt;
                },&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    },&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
As before, we now take this text, [https://www.base64encode.org/ base64 encode] it, and copy it into Tweak Units. Encodings can be shortened by removing whitespace prior to encoding.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;display:block;overflow:auto&amp;quot;&amp;gt;e2Nsb2FrcmFpZCA9IHttYXhEYW1hZ2UgPSA1MDAsbWF4VmVsb2NpdHkgPSA4LH0sc2hpZWxkcmFpZCA9IHt3ZWFwb25EZWZzID0ge0xBU0VSID0ge3JhbmdlID0gNjAwLGRhbWFnZSA9IHtkZWZhdWx0ID0gNTAsfSx9LH0sfSx9&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mass post-processing ==&lt;br /&gt;
&lt;br /&gt;
The above example deal with specific values for a single unit (e.g. &amp;quot;make Glaive have 500 health&amp;quot;).&lt;br /&gt;
It is also possible to write Lua code that works on units, including changing values for all units or doing some sort of logic. This time, the option is not &amp;quot;Tweak Units&amp;quot; but &amp;quot;Tweak Defs&amp;quot;. Again, it should be encoded to base64. &lt;br /&gt;
&lt;br /&gt;
Here's an example:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;for name, ud in pairs(UnitDefs) do&lt;br /&gt;
	if ud.maxvelocity then&lt;br /&gt;
		ud.maxvelocity = ud.maxvelocity*10&lt;br /&gt;
	else&lt;br /&gt;
		ud.maxdamage = ud.maxdamage*5&lt;br /&gt;
	end&lt;br /&gt;
end&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UnitDefs is a Lua table indexed with unit names as above (for example &amp;quot;cloakraid&amp;quot; for Glaive) whose values are the unit def tables in a similar format as for tweakunits, BUT WITH ALL KEYS LOWERCASE. This snippet increases unit speeds 10 times for all mobiles and health 5 times for all statics. Pay attention that some fields may be nil (for another example, death explosions are weapons but don't have a reload time). Specific Tweak Units values override the values that result from Tweak Defs. &lt;br /&gt;
&lt;br /&gt;
Happy hacking!&lt;br /&gt;
&lt;br /&gt;
[[File:Zk_1_7_11_0_cover.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]{{Navbox manual}}&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Quick_Stat_Tweaks&amp;diff=7694</id>
		<title>Quick Stat Tweaks</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Quick_Stat_Tweaks&amp;diff=7694"/>
		<updated>2021-08-18T12:15:10Z</updated>

		<summary type="html">&lt;p&gt;Sprung: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Tweak Units modoption can be used to modify many unit and weapon parameters. It can be used for rapidly testing balance changes or just for making a quick game mode. It has limitations and should not be used for large mod projects, see [[Mod Creation]] and [[How To Play Mods]] to get started on full modding.&lt;br /&gt;
&lt;br /&gt;
[[File:Tweakunitswindow.jpg]]&lt;br /&gt;
&lt;br /&gt;
Stat tweaks can be saved and shared as a [[Custom Modes | Custom Mode]].&lt;br /&gt;
&lt;br /&gt;
== Workflow ==&lt;br /&gt;
The Tweak Units modoption overwrites unit parameter (called unitDefs) as they are loaded. The modoption requires a base64 encoded lua array of differences. Here is how to use it.&lt;br /&gt;
* Make a lua table in an empty file.&lt;br /&gt;
* For each unit you wish to modify, add an empty table indexed by the internal name of the unit to your table.&lt;br /&gt;
* Search for the units you wish to modify in the [https://github.com/ZeroK-RTS/Zero-K/blob/master/units Zero-K repository].&lt;br /&gt;
* Copy the parameters you wish to modify into the table, maintaining the structure of the unitDef table.&lt;br /&gt;
* [https://www.base64encode.org Base64 encode] your table.&lt;br /&gt;
* Put the base 64 encoding of your table into the Tweak Units modoption.&lt;br /&gt;
* Start the game.&lt;br /&gt;
* Check infolog.txt in your install directory and fix your syntax errors.&lt;br /&gt;
&lt;br /&gt;
Check out the [https://springrts.com/wiki/Gamedev:UnitDefs unit def] and [https://springrts.com/wiki/Gamedev:WeaponDefs weapon def] pages on the SpringRTS wiki for definitions of many of the parameters. Search the internet for tutorials on lua tables.&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
Tweak Units cannot be used to change parameters that are part of a unit's animation, and access to some of the more unique abilities may be missing. In particular, the aiming speed of most units cannot be changed with this method.&lt;br /&gt;
&lt;br /&gt;
== Simple Example ==&lt;br /&gt;
In this example we make Glaive faster and healthier.&lt;br /&gt;
&lt;br /&gt;
Start with an empty lua table.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
A search through the [https://github.com/ZeroK-RTS/Zero-K/blob/master/units unitdef repository] reveals that Glaive is known as cloakraid internally. [https://github.com/ZeroK-RTS/Zero-K/blob/master/units/cloakraid.lua This] is the file. Add an empty table with key 'cloakraid'.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{&lt;br /&gt;
    cloakraid = {},&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
The [https://springrts.com/wiki/Gamedev:UnitDefs SpringRTS wiki page on unitdefs] says that a unit's health is 'maxDamage' and its speed is 'maxVelocity'. [https://github.com/ZeroK-RTS/Zero-K/blob/master/units/cloakraid.lua The Glaive file] shows us the current value of these parameters, as well as their position in the structure of a unitdef. We can change these values like so:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{&lt;br /&gt;
    cloakraid = {&lt;br /&gt;
        maxDamage = 500,&lt;br /&gt;
        maxVelocity = 8,&lt;br /&gt;
    },&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Copy this text into a [https://www.base64encode.org/ base64 encoder] and click encode. Here is the resulting encoding.&lt;br /&gt;
 ewogICAgY2xvYWtyYWlkID0gewogICAgICAgIG1heERhbWFnZSA9IDUwMCwKICAgICAgICBtYXhWZWxvY2l0eSA9IDgsCiAgICB9LAp9&lt;br /&gt;
Set the Tweak Units modoption to your encoding and start the game. Your infolog should indicate that the modoption loaded successfully.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;[f=-000001] Loading UnitDefs_posts&lt;br /&gt;
[f=-000001] Loading tweakunits modoption&lt;br /&gt;
[f=-000001] Loading tweakunits for cloakraid&lt;br /&gt;
[f=-000001] Loading FeatureDefs_posts&lt;br /&gt;
[f=-000001] Loading WeaponDefs_posts&lt;br /&gt;
[f=-000001] Loading ArmorDefs_posts&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advanced Example ==&lt;br /&gt;
In this example we will change Bandit's damage and range, and add it to the Glaive changes.&lt;br /&gt;
&lt;br /&gt;
As in the simple example, we find the [https://github.com/ZeroK-RTS/Zero-K/blob/master/units/shieldraid.lua Bandit's file] and see that it called shieldraid. To change Bandit and Glaive at the same time we add a new subtable to the table from the previous example.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{&lt;br /&gt;
    cloakraid = {&lt;br /&gt;
        maxDamage = 500,&lt;br /&gt;
        maxVelocity = 8,&lt;br /&gt;
    },&lt;br /&gt;
    shieldraid = {},&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Weapon parameters can be found in the [https://springrts.com/wiki/Gamedev:WeaponDefs SpringRTS page on weapon defs], and Zero-K stores them as a subtable within unitdefs. The range parameter is inside 'LASER' (the internal name of the Bandit's weapon), which is inside the weaponDefs table of Bandit. Weapon damage is further nested inside the damage sub-table of the weapondef.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{&lt;br /&gt;
    cloakraid = {&lt;br /&gt;
        maxDamage = 500,&lt;br /&gt;
        maxVelocity = 8,&lt;br /&gt;
    },&lt;br /&gt;
    shieldraid = {&lt;br /&gt;
        weaponDefs = {&lt;br /&gt;
            LASER = {&lt;br /&gt;
                range = 600,&lt;br /&gt;
                damage = {&lt;br /&gt;
                    default = 50,&lt;br /&gt;
                },&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    },&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
As before, we now take this text, [https://www.base64encode.org/ base64 encode] it, and copy it into Tweak Units. Encodings can be shortened by removing whitespace prior to encoding.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;display:block;overflow:auto&amp;quot;&amp;gt;e2Nsb2FrcmFpZCA9IHttYXhEYW1hZ2UgPSA1MDAsbWF4VmVsb2NpdHkgPSA4LH0sc2hpZWxkcmFpZCA9IHt3ZWFwb25EZWZzID0ge0xBU0VSID0ge3JhbmdlID0gNjAwLGRhbWFnZSA9IHtkZWZhdWx0ID0gNTAsfSx9LH0sfSx9&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mass post-processing ==&lt;br /&gt;
&lt;br /&gt;
The above example deal with specific values for a single unit (e.g. &amp;quot;make Glaive have 500 health&amp;quot;).&lt;br /&gt;
It is also possible to write Lua code that works on units, including changing values for all units or doing some sort of logic. This time, the option is not &amp;quot;Tweak Units&amp;quot; but &amp;quot;Tweak Defs&amp;quot;. Again, it should be encoded to base64. &lt;br /&gt;
&lt;br /&gt;
Here's an example:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;for name, ud in pairs(UnitDefs) do&lt;br /&gt;
	if ud.maxvelocity then&lt;br /&gt;
		ud.maxvelocity = ud.maxvelocity*10&lt;br /&gt;
	else&lt;br /&gt;
		ud.maxdamage = ud.maxdamage*5&lt;br /&gt;
	end&lt;br /&gt;
end&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UnitDefs is a Lua table indexed with unit names as above (for example &amp;quot;cloakraid&amp;quot; for Glaive) whose values are the unit def tables in a similar format as for tweakunits, BUT WILL ALL KEYS LOWERCASE. This snippet increases unit speeds 10 times for all mobiles and health 5 times for all statics. Pay attention that some fields may be nil (for another example, death explosions are weapons but don't have a reload time). Specific Tweak Units values override the values that result from Tweak Defs. &lt;br /&gt;
&lt;br /&gt;
Happy hacking!&lt;br /&gt;
&lt;br /&gt;
[[File:Zk_1_7_11_0_cover.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]{{Navbox manual}}&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Quick_Stat_Tweaks&amp;diff=7693</id>
		<title>Quick Stat Tweaks</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Quick_Stat_Tweaks&amp;diff=7693"/>
		<updated>2021-08-18T12:09:22Z</updated>

		<summary type="html">&lt;p&gt;Sprung: Add tweakdefs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Tweak Units modoption can be used to modify many unit and weapon parameters. It can be used for rapidly testing balance changes or just for making a quick game mode. It has limitations and should not be used for large mod projects, see [[Mod Creation]] and [[How To Play Mods]] to get started on full modding.&lt;br /&gt;
&lt;br /&gt;
[[File:Tweakunitswindow.jpg]]&lt;br /&gt;
&lt;br /&gt;
Stat tweaks can be saved and shared as a [[Custom Modes | Custom Mode]].&lt;br /&gt;
&lt;br /&gt;
== Workflow ==&lt;br /&gt;
The Tweak Units modoption overwrites unit parameter (called unitDefs) as they are loaded. The modoption requires a base64 encoded lua array of differences. Here is how to use it.&lt;br /&gt;
* Make a lua table in an empty file.&lt;br /&gt;
* For each unit you wish to modify, add an empty table indexed by the internal name of the unit to your table.&lt;br /&gt;
* Search for the units you wish to modify in the [https://github.com/ZeroK-RTS/Zero-K/blob/master/units Zero-K repository].&lt;br /&gt;
* Copy the parameters you wish to modify into the table, maintaining the structure of the unitDef table.&lt;br /&gt;
* [https://www.base64encode.org Base64 encode] your table.&lt;br /&gt;
* Put the base 64 encoding of your table into the Tweak Units modoption.&lt;br /&gt;
* Start the game.&lt;br /&gt;
* Check infolog.txt in your install directory and fix your syntax errors.&lt;br /&gt;
&lt;br /&gt;
Check out the [https://springrts.com/wiki/Gamedev:UnitDefs unit def] and [https://springrts.com/wiki/Gamedev:WeaponDefs weapon def] pages on the SpringRTS wiki for definitions of many of the parameters. Search the internet for tutorials on lua tables.&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
Tweak Units cannot be used to change parameters that are part of a unit's animation, and access to some of the more unique abilities may be missing. In particular, the aiming speed of most units cannot be changed with this method.&lt;br /&gt;
&lt;br /&gt;
== Simple Example ==&lt;br /&gt;
In this example we make Glaive faster and healthier.&lt;br /&gt;
&lt;br /&gt;
Start with an empty lua table.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
A search through the [https://github.com/ZeroK-RTS/Zero-K/blob/master/units unitdef repository] reveals that Glaive is known as cloakraid internally. [https://github.com/ZeroK-RTS/Zero-K/blob/master/units/cloakraid.lua This] is the file. Add an empty table with key 'cloakraid'.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{&lt;br /&gt;
    cloakraid = {},&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
The [https://springrts.com/wiki/Gamedev:UnitDefs SpringRTS wiki page on unitdefs] says that a unit's health is 'maxDamage' and its speed is 'maxVelocity'. [https://github.com/ZeroK-RTS/Zero-K/blob/master/units/cloakraid.lua The Glaive file] shows us the current value of these parameters, as well as their position in the structure of a unitdef. We can change these values like so:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{&lt;br /&gt;
    cloakraid = {&lt;br /&gt;
        maxDamage = 500,&lt;br /&gt;
        maxVelocity = 8,&lt;br /&gt;
    },&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Copy this text into a [https://www.base64encode.org/ base64 encoder] and click encode. Here is the resulting encoding.&lt;br /&gt;
 ewogICAgY2xvYWtyYWlkID0gewogICAgICAgIG1heERhbWFnZSA9IDUwMCwKICAgICAgICBtYXhWZWxvY2l0eSA9IDgsCiAgICB9LAp9&lt;br /&gt;
Set the Tweak Units modoption to your encoding and start the game. Your infolog should indicate that the modoption loaded successfully.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;[f=-000001] Loading UnitDefs_posts&lt;br /&gt;
[f=-000001] Loading tweakunits modoption&lt;br /&gt;
[f=-000001] Loading tweakunits for cloakraid&lt;br /&gt;
[f=-000001] Loading FeatureDefs_posts&lt;br /&gt;
[f=-000001] Loading WeaponDefs_posts&lt;br /&gt;
[f=-000001] Loading ArmorDefs_posts&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advanced Example ==&lt;br /&gt;
In this example we will change Bandit's damage and range, and add it to the Glaive changes.&lt;br /&gt;
&lt;br /&gt;
As in the simple example, we find the [https://github.com/ZeroK-RTS/Zero-K/blob/master/units/shieldraid.lua Bandit's file] and see that it called shieldraid. To change Bandit and Glaive at the same time we add a new subtable to the table from the previous example.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{&lt;br /&gt;
    cloakraid = {&lt;br /&gt;
        maxDamage = 500,&lt;br /&gt;
        maxVelocity = 8,&lt;br /&gt;
    },&lt;br /&gt;
    shieldraid = {},&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Weapon parameters can be found in the [https://springrts.com/wiki/Gamedev:WeaponDefs SpringRTS page on weapon defs], and Zero-K stores them as a subtable within unitdefs. The range parameter is inside 'LASER' (the internal name of the Bandit's weapon), which is inside the weaponDefs table of Bandit. Weapon damage is further nested inside the damage sub-table of the weapondef.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{&lt;br /&gt;
    cloakraid = {&lt;br /&gt;
        maxDamage = 500,&lt;br /&gt;
        maxVelocity = 8,&lt;br /&gt;
    },&lt;br /&gt;
    shieldraid = {&lt;br /&gt;
        weaponDefs = {&lt;br /&gt;
            LASER = {&lt;br /&gt;
                range = 600,&lt;br /&gt;
                damage = {&lt;br /&gt;
                    default = 50,&lt;br /&gt;
                },&lt;br /&gt;
            },&lt;br /&gt;
        },&lt;br /&gt;
    },&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
As before, we now take this text, [https://www.base64encode.org/ base64 encode] it, and copy it into Tweak Units. Encodings can be shortened by removing whitespace prior to encoding.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;display:block;overflow:auto&amp;quot;&amp;gt;e2Nsb2FrcmFpZCA9IHttYXhEYW1hZ2UgPSA1MDAsbWF4VmVsb2NpdHkgPSA4LH0sc2hpZWxkcmFpZCA9IHt3ZWFwb25EZWZzID0ge0xBU0VSID0ge3JhbmdlID0gNjAwLGRhbWFnZSA9IHtkZWZhdWx0ID0gNTAsfSx9LH0sfSx9&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mass post-processing ==&lt;br /&gt;
&lt;br /&gt;
The above example deal with specific values for a single unit (e.g. &amp;quot;make Glaive have 500 health&amp;quot;).&lt;br /&gt;
It is also possible to write Lua code that works on units, including changing values for all units or doing some sort of logic. This time, the option is not &amp;quot;Tweak Units&amp;quot; but &amp;quot;Tweak Defs&amp;quot;. Again, it should be encoded to base64. &lt;br /&gt;
&lt;br /&gt;
Here's an example:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;for name, ud in pairs(UnitDefs) do&lt;br /&gt;
	if ud.maxvelocity then&lt;br /&gt;
		ud.maxvelocity = ud.maxvelocity*10&lt;br /&gt;
	else&lt;br /&gt;
		ud.maxdamage = ud.maxdamage*5&lt;br /&gt;
	end&lt;br /&gt;
end&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UnitDefs is a Lua table indexed with unit names as above (for example &amp;quot;cloakraid&amp;quot; for Glaive) whose values are the unit def tables in a similar format as for tweakunits, BUT WILL ALL KEYS LOWERCASE. This snippet increases unit speeds 10 times for all mobiles and health 5 times for all statics. Pay attention that some fields may be nil (for another example, death explosions are weapons but don't have a reload time).&lt;br /&gt;
&lt;br /&gt;
Happy hacking!&lt;br /&gt;
&lt;br /&gt;
[[File:Zk_1_7_11_0_cover.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]{{Navbox manual}}&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Startbox_API&amp;diff=7460</id>
		<title>Startbox API</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Startbox_API&amp;diff=7460"/>
		<updated>2021-05-17T15:51:14Z</updated>

		<summary type="html">&lt;p&gt;Sprung: Gametype API: fix code anchor&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Start boxes ==&lt;br /&gt;
&lt;br /&gt;
Each team has a defined starting area in which its players can spawn their commanders - these are called start boxes. Map makers can define how these areas look like by including a config file inside their map archive.&lt;br /&gt;
&lt;br /&gt;
== The config file ==&lt;br /&gt;
&lt;br /&gt;
The file which you need to include is &lt;br /&gt;
 mapconfig/map_startboxes.lua&lt;br /&gt;
&lt;br /&gt;
It consists of Lua code which returns 2 tables: one with the start box layout for the current match and one that contains possible box counts.&lt;br /&gt;
&lt;br /&gt;
For examples see the bottom of this page.&lt;br /&gt;
&lt;br /&gt;
== Box counts ==&lt;br /&gt;
&lt;br /&gt;
Let's start from the last table because it is the simplest. This is just a list of how many teams the map is designed for.&lt;br /&gt;
&lt;br /&gt;
Let's take [http://zero-k.info/Maps/Detail/8162 Throne] as an example. It has an outer ring with 7 starting areas so it can be played as a 7-team FFA. There are also rings with 3 and 5 areas so 3- and 5-team FFAs are also possible setups. Finally, you could play a duel between any two positions from the same ring. (The real Throne config is a fair bit more complicated than that but you get the idea.)&lt;br /&gt;
&lt;br /&gt;
Thus, the possible team counts are 2, 3, 5, and 7. Let's define a Lua table for that:&lt;br /&gt;
 local playercounts = {2, 3, 5, 7}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is mostly important for fancy FFA maps. Simple duel/teamgame maps will usually just have 2 as the only value here:&lt;br /&gt;
 local playercounts = {2}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The boxes ==&lt;br /&gt;
&lt;br /&gt;
Now, the most tedious part. The boxes do not need to actually be boxes, they can be any arbitrary shape (even concave or disjoint). This is achieved by having the boxes defined as a set of polygons.&lt;br /&gt;
&lt;br /&gt;
There is a widget which lets you draw the polygons ingame, it's called &amp;quot;Startbox Editor&amp;quot; and is under the &amp;quot;For Developers&amp;quot; tab in the widget list (press Alt+F11, and don't touch anything else unless you know what you're doing).&lt;br /&gt;
&lt;br /&gt;
To draw a polygon, use LMB - either drag a line or click points:&lt;br /&gt;
&lt;br /&gt;
[[File:Startbox API 1.jpg]]&lt;br /&gt;
&lt;br /&gt;
Once you draw a full loop, press RMB to close it. Make sure the line does not cross itself. Finished polygons are a bit darker.&lt;br /&gt;
&lt;br /&gt;
[[File:Startbox API 2.jpg]]&lt;br /&gt;
&lt;br /&gt;
Now you can add another polygon if you want. These will all be a part of the same team.&lt;br /&gt;
&lt;br /&gt;
[[File:Startbox API 3.jpg]]&lt;br /&gt;
&lt;br /&gt;
If you want to delete the last created polygon, press D.&lt;br /&gt;
Once you are satisfied with the area, press S. Now you can draw the area for another team.&lt;br /&gt;
&lt;br /&gt;
Once you create all the boxes, go to your Spring directory and find the infolog. There you will see a bunch of code like&lt;br /&gt;
 boxes = {&lt;br /&gt;
     stuff&lt;br /&gt;
 },&lt;br /&gt;
&lt;br /&gt;
Each of those tables is a team's startbox. The config is an array (indexed from 0) of each team's startbox data. The box data from the generator will go to a team's config entry. Like this:&lt;br /&gt;
 local main_config = {&lt;br /&gt;
     [0] = {&lt;br /&gt;
         boxes = {&lt;br /&gt;
             stuff&lt;br /&gt;
         },&lt;br /&gt;
         -- more entries will go there later!&lt;br /&gt;
     },&lt;br /&gt;
     [1] = {&lt;br /&gt;
         boxes = {&lt;br /&gt;
             stuff&lt;br /&gt;
         },&lt;br /&gt;
     },&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The layout is a normal Lua table so you can use all the usual table manipulation methods. For example you could add more area based on how many people there are, or generate them dynamically.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The recommended start points ===&lt;br /&gt;
&lt;br /&gt;
This sub-table defines recommended start points within each box. These are points on which CAI bots will spawn. The first point is special: human players who did not pick start position will also spawn here and so will any extra CAI if there are more of them than the spots; as such having at least one startpoint in each box is mandatory. These points are also marked on people's UI as circles.&lt;br /&gt;
&lt;br /&gt;
Defining these is very simple. It's very similar to how start areas were defined. Ingame you can hold Space over a point to see its coordinates. These are written down for boxes similarly to the areas:&lt;br /&gt;
 local main_config = {&lt;br /&gt;
     [0] = {&lt;br /&gt;
         boxes = {&lt;br /&gt;
             stuff&lt;br /&gt;
         },&lt;br /&gt;
         startpoints = {&lt;br /&gt;
             {123, 456}, -- X, Z&lt;br /&gt;
             {654, 321},&lt;br /&gt;
             -- as many as you want, it's good if there are as many as you want people per team&lt;br /&gt;
         },&lt;br /&gt;
     },&lt;br /&gt;
     [1] = {&lt;br /&gt;
         boxes = {&lt;br /&gt;
             stuff&lt;br /&gt;
         },&lt;br /&gt;
         startpoints = {&lt;br /&gt;
             {789, 789},&lt;br /&gt;
             {987, 987},&lt;br /&gt;
         },&lt;br /&gt;
     },&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Of course, the start positions should match the areas, though they don't have to.&lt;br /&gt;
&lt;br /&gt;
== Putting these together ==&lt;br /&gt;
&lt;br /&gt;
You can give each team a name, alongside a shorter backup if the first one is too large. Here's how:&lt;br /&gt;
&lt;br /&gt;
  [0] = {&lt;br /&gt;
     boxes = { stuff },&lt;br /&gt;
     startpoints = { stuff },&lt;br /&gt;
     nameLong = &amp;quot;South-West&amp;quot;,&lt;br /&gt;
     nameShort = &amp;quot;SW&amp;quot;,&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
It serves to identify the team so while it's good to use something that describes placement, you can get creative. For example:&lt;br /&gt;
* &amp;quot;North&amp;quot;, &amp;quot;South-East&amp;quot;&lt;br /&gt;
* &amp;quot;5 o'clock&amp;quot;&lt;br /&gt;
* real-world style maps could have names like &amp;quot;Russia&amp;quot; or &amp;quot;America&amp;quot;&lt;br /&gt;
* asymmetric maps can use landmarks, for example &amp;quot;Lake&amp;quot; vs &amp;quot;Desert&amp;quot;&lt;br /&gt;
* for missions it's good to use storyline names, eg &amp;quot;Empire&amp;quot; vs &amp;quot;Dynasty&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
Now just return the config table and the playercounts table.&lt;br /&gt;
  return main_config, playercounts&lt;br /&gt;
&lt;br /&gt;
The exact format for the config table that should get returned is&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
     [0] = { -- a single team's data. Indexed from 0&lt;br /&gt;
         boxes = {&lt;br /&gt;
             { -- a polygon&lt;br /&gt;
                 {123, 456}, -- a vertex of the polygon. X, Z.&lt;br /&gt;
                 {234, 567}, -- another vertex&lt;br /&gt;
                 {345, 678},&lt;br /&gt;
                 -- more vertices&lt;br /&gt;
             },&lt;br /&gt;
             { -- another polygon&lt;br /&gt;
                 -- vertices&lt;br /&gt;
             },&lt;br /&gt;
             -- more polygons&lt;br /&gt;
         },&lt;br /&gt;
         startpoints = {&lt;br /&gt;
             {123, 456}, -- X, Z&lt;br /&gt;
             {654, 321},&lt;br /&gt;
             -- more points&lt;br /&gt;
         },&lt;br /&gt;
         nameLong = &amp;quot;longer string with team name&amp;quot;,&lt;br /&gt;
         nameShort = &amp;quot;short&amp;quot;,&lt;br /&gt;
     },&lt;br /&gt;
     [1] = { -- another team's data&lt;br /&gt;
         boxes = { ... },&lt;br /&gt;
         startpoints = { ... },&lt;br /&gt;
         nameLong = &amp;quot;...&amp;quot;,&lt;br /&gt;
         nameShort = &amp;quot;...&amp;quot;,&lt;br /&gt;
     },&lt;br /&gt;
     -- more teams&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Advanced stuff ==&lt;br /&gt;
The config has access to Spring Lua API so it is possible to do a lot of dynamic things. In particular, you can use math.random without worry.&lt;br /&gt;
&lt;br /&gt;
You can make stuff dependent on the game mode. There are functions which return the gametype, such as `Spring.Utilities.Gametype.is1v1()`. The full list is here: https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Utilities/teamFunctions.lua#L74&lt;br /&gt;
&lt;br /&gt;
An important thing is that #Spring.GetAllTeams() will return a wrong value due to fake technical teams and Gaia. Instead, use Spring.Utilities.GetTeamCount() to get the real number of teams.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/SpeedMetal.lua SpeedMetal] - the simplest layout, just two squares.&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/DeltaSiegeDry.lua DSD] - huge polygons, but otherwise very simple.&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/Sever%201.lua#L343 Sever] - shows an example of smaller boxes for 1v1 and larger for teams.&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/Isle%20of%20Grief%200.2.lua Isle of Grief] - shows a smart approach, one of the boxes is not defined rigidly but is a mirror of the other (only really feasible for rough boxes or perfectly symmetrical maps).&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/Aum_1.1.lua Aum] - another small trick, this time 5-way radial symmetry.&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/Throne%20v1.lua Throne] - multiple boxes defined, with a system to pick some of them based on how many teams there are.&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/Speed_Ball_10x10.lua Speedball] - shows boxes that are generated completely algorithmically.&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/Mearth_v4.lua#L6 Middle-Earth] - interesting team names.&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/Adansonia%20v2.lua Adansonia v2] - shows synchronizing boxes across map versions.&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/duck.lua Duck] - boxless config for silly maps where everybody can start anywhere.&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]{{Navbox manual}}&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=HLT&amp;diff=7447</id>
		<title>HLT</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=HLT&amp;diff=7447"/>
		<updated>2021-04-06T15:41:24Z</updated>

		<summary type="html">&lt;p&gt;Sprung: Setup redirect: HLT -&amp;gt; Stinger&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Stinger]]&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Award&amp;diff=6699</id>
		<title>Award</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Award&amp;diff=6699"/>
		<updated>2020-06-24T14:32:11Z</updated>

		<summary type="html">&lt;p&gt;Sprung: Add CA award to the example&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;At the end of every battle, players are '''award'''ed with shiny trophies for various achievements during the game. Some awards are presented every game, while others are less common. It takes outstanding performance with the relevant unit set to receive an award.&lt;br /&gt;
&lt;br /&gt;
There are also event-based awards which are never awarded in normal games, for example tournament cups.&lt;br /&gt;
&lt;br /&gt;
All damage-related awards except Big Purple Heart use metal value to compare performance. Such awards are only given if the damage dealt with those weapons/units compares favorably to the average damage done by other players.&lt;br /&gt;
&lt;br /&gt;
== The Awards ==&lt;br /&gt;
&lt;br /&gt;
=== Generic Awards ===&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_pwn.png '''Complete Annihilation''': always awarded to the player who dealt the most damage.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_ouch.png '''Big Purple Heart''': always awarded to the player who received the most health damage.&lt;br /&gt;
&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_reclaim.png '''Spoils of War''': efficient usage of reclaim.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_mex.png '''Mineral Prospector''': building metal extractors.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_mexkill.png '''Loot &amp;amp; Pillage''': raiding enemy metal extractors.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_shell.png '''Turtle Shell''': effective use of defense.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_nux.png '''Apocalyptic Achievement Award''': employing superweapons.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_air.png '''Air Force General''': exceptional play with airborne units.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_navy.png '''Fleet Admiral''': successful ship usage.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_slow.png '''Traffic Cop''': applying slow damage.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_emp.png '''EMP Wizard''': dealing EMP damage.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_kam.png '''Kamikaze Award''': heroic usage of self-destructing units.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_terra.png '''Legendary Landscaper''': excessive terraforming.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_comm.png '''Master and Commander''': Using your commander like a boss&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_fire.png '''Master Grill-Chef''': dealing fire damage.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_cap.png '''Master of Puppets''': capturing enemy units.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_rezz.png '''Vile Necromancer''': resurrecting wreckage.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_head.png '''Head Hunter''': eliminating enemy commanders.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_share.png '''Share Bear''': sharing units to allies.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_vet.png '''Decorated Veteran''': extremely efficient usage of a single unit.&lt;br /&gt;
&lt;br /&gt;
=== Chicken Awards ===&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_heart.png '''Heart Breaker''': killing the Chicken Queen.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_sweeper.png '''Land Sweeper''': destroying Chicken Roosts.&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_dragon.png '''Dragon Slayer''': eliminating Chicken Dragons.&lt;br /&gt;
&lt;br /&gt;
=== Event Awards ===&lt;br /&gt;
* http://zero-k.info/img/Awards/trophy_gold.png http://zero-k.info/img/Awards/trophy_silver.png http://zero-k.info/img/Awards/trophy_bronze.png '''Tournament Cups''': awarded for the winners of the monthly tournaments.&lt;br /&gt;
* http://zero-k.info/img/Awards/coingold.png http://zero-k.info/img/Awards/coinsilver.png http://zero-k.info/img/Awards/coinbronze.png '''Coins''': awarded for minor community events.&lt;br /&gt;
&lt;br /&gt;
= Technical details =&lt;br /&gt;
&lt;br /&gt;
Some awards have flat requirements for being awarded: &lt;br /&gt;
* Mineral Prospector / Loot &amp;amp; Pillage take a minimum of 15 mexes built/killed to earn.&lt;br /&gt;
* Legendary Landscaper takes a minimum of 1000m worth of terraform.&lt;br /&gt;
* Head Hunter / Dragon Slayer / Land Sweeper require 3/3/20 commander/dragon/nest kills.&lt;br /&gt;
* Master of Puppets / Vile Necromancer / Share Bear require 1000/3000/5000m worth of units captured/resurrected/shared respectively.&lt;br /&gt;
* Decorated Veteran requires the unit to make 300% cost, with a minimum of 1000m.&lt;br /&gt;
* Queen Heartbreaker requires the chicken queen to die.&lt;br /&gt;
&lt;br /&gt;
Big Purple Heart operates on health and considers environmental damage (such as collisions, forest fires, or lava). All other damage awards operate on cost and only consider PvP damage.&lt;br /&gt;
&lt;br /&gt;
Using a damage type is not enough to be eligible for the appropriate award. Each award has a dynamic threshold that scales with the general game size. Eligibility is decided thus:&lt;br /&gt;
* Take the average physical damage done by all other players except yourself.&lt;br /&gt;
* Multiply by a per-award factor given in the table below.&lt;br /&gt;
* Compare your own damage with the given type. You are eligible if your damage is higher.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Difficulty factors&lt;br /&gt;
|-&lt;br /&gt;
! Award&lt;br /&gt;
! Multiplier&lt;br /&gt;
|-&lt;br /&gt;
| EMP Wizard&lt;br /&gt;
| 1.2&lt;br /&gt;
|-&lt;br /&gt;
| Fleet Admiral&amp;lt;br/&amp;gt;Airforce General&amp;lt;br/&amp;gt;Traffic Cop&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| Turtle Shell&amp;lt;br/&amp;gt;Master Grill Chef&lt;br /&gt;
| 0.5&lt;br /&gt;
|-&lt;br /&gt;
| Apocalyptic Achievement Award&amp;lt;br/&amp;gt;Kamikaze Award&amp;lt;br/&amp;gt;Master and Commander&lt;br /&gt;
| 0.3&lt;br /&gt;
|-&lt;br /&gt;
| Spoils of War&lt;br /&gt;
| 0.06&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
 A did 900m of damage, composed of 450m of fire damage, 350m of kamikaze damage and 100m general damage.&lt;br /&gt;
 B did 800m kamikaze damage.&lt;br /&gt;
 C did 1200m general damage.&lt;br /&gt;
 &lt;br /&gt;
 For A, the average of others' damage is (800 + 1200) / 2 == 1000.&lt;br /&gt;
 For B, the average is (900 + 1200) / 2 == 1050.&lt;br /&gt;
 For C, the average is (900 + 800) / 2 == 850.&lt;br /&gt;
 &lt;br /&gt;
 The multiplier for kamikaze is 0.3 and for fire is 0.5, so:&lt;br /&gt;
 A would have to do 1000 * 0.5 == 500 fire damage to be eligible. He did 450 so he won't get it.&lt;br /&gt;
 A would have to do 1000 * 0.3 == 300 kamikaze damage. He did 350 so he is eligible.&lt;br /&gt;
 B would have to do 1050 * 0.3 == 317 kamikaze damage. He did 800 so is also eligible.&lt;br /&gt;
 &lt;br /&gt;
 B did 800 kamikaze damage and A did 350 so B gets the kamikaze award.&lt;br /&gt;
 Nobody is eligible for the fire award.&lt;br /&gt;
 C did the most total damage so gets the Complete Annihilation award.&lt;br /&gt;
{{Navbox manual}}&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Template:Navbox_units&amp;diff=6698</id>
		<title>Template:Navbox units</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Template:Navbox_units&amp;diff=6698"/>
		<updated>2020-06-24T11:17:42Z</updated>

		<summary type="html">&lt;p&gt;Sprung: Surfboard is no more&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Navbox&lt;br /&gt;
| name       = Navbox units&lt;br /&gt;
| title      = [[Units]]&lt;br /&gt;
| state      = uncollapsed&lt;br /&gt;
| listclass = hlist&lt;br /&gt;
&lt;br /&gt;
| group1     = [[Cloakbot Factory|Cloakbots]]&lt;br /&gt;
| list1      = * [[Conjurer]]&lt;br /&gt;
* [[Glaive]]&lt;br /&gt;
* [[Scythe]]&lt;br /&gt;
* [[Ronin]]&lt;br /&gt;
* [[Reaver]]&lt;br /&gt;
* [[Knight]]&lt;br /&gt;
* [[Sling]]&lt;br /&gt;
* [[Phantom]]&lt;br /&gt;
* [[Gremlin]]&lt;br /&gt;
* [[Imp]]&lt;br /&gt;
* [[Iris]]&lt;br /&gt;
&lt;br /&gt;
| group2     = [[Shieldbot Factory|Shieldbots]]&lt;br /&gt;
| list2      = * [[Convict]]&lt;br /&gt;
* [[Dirtbag]]&lt;br /&gt;
* [[Bandit]]&lt;br /&gt;
* [[Rogue]]&lt;br /&gt;
* [[Thug]]&lt;br /&gt;
* [[Outlaw]]&lt;br /&gt;
* [[Felon]]&lt;br /&gt;
* [[Racketeer]]&lt;br /&gt;
* [[Vandal]]&lt;br /&gt;
* [[Snitch]]&lt;br /&gt;
* [[Aspis]]&lt;br /&gt;
&lt;br /&gt;
| group3     = [[Rover Assembly|Rovers]]&lt;br /&gt;
| list3      = * [[Mason]]&lt;br /&gt;
* [[Dart]]&lt;br /&gt;
* [[Scorcher]]&lt;br /&gt;
* [[Fencer]]&lt;br /&gt;
* [[Ripper]]&lt;br /&gt;
* [[Ravager]]&lt;br /&gt;
* [[Dominatrix]]&lt;br /&gt;
* [[Badger]]&lt;br /&gt;
* [[Impaler]]&lt;br /&gt;
* [[Crasher]]&lt;br /&gt;
&lt;br /&gt;
| group4     = [[Hovercraft Platform|Hovercraft]]&lt;br /&gt;
| list4      = * [[Quill]]&lt;br /&gt;
* [[Dagger]]&lt;br /&gt;
* [[Scalpel]]&lt;br /&gt;
* [[Halberd]]&lt;br /&gt;
* [[Claymore]]&lt;br /&gt;
* [[Mace]]&lt;br /&gt;
* [[Lance]]&lt;br /&gt;
* [[Flail]]&lt;br /&gt;
* [[Bolas]]&lt;br /&gt;
&lt;br /&gt;
| group5     = [[Gunship Plant|Gunships]]&lt;br /&gt;
| list5      = * [[Wasp]]&lt;br /&gt;
* [[Blastwing]]&lt;br /&gt;
* [[Gnat]]&lt;br /&gt;
* [[Locust]]&lt;br /&gt;
* [[Harpy]]&lt;br /&gt;
* [[Nimbus]]&lt;br /&gt;
* [[Revenant]]&lt;br /&gt;
* [[Krow]]&lt;br /&gt;
* [[Trident]]&lt;br /&gt;
* [[Charon]]&lt;br /&gt;
* [[Hercules]]&lt;br /&gt;
&lt;br /&gt;
| group6     = [[Airplane Plant|Airplanes]]&lt;br /&gt;
| list6      = * [[Crane]]&lt;br /&gt;
* [[Swift]]&lt;br /&gt;
* [[Raptor]]&lt;br /&gt;
* [[Raven]]&lt;br /&gt;
* [[Phoenix]]&lt;br /&gt;
* [[Thunderbird]]&lt;br /&gt;
* [[Likho]]&lt;br /&gt;
* [[Sparrow]]&lt;br /&gt;
* [[Owl]]&lt;br /&gt;
&lt;br /&gt;
| group7     = [[Spider Factory|Spiders]]&lt;br /&gt;
| list7      = * [[Weaver]]&lt;br /&gt;
* [[Flea]]&lt;br /&gt;
* [[Hermit]]&lt;br /&gt;
* [[Venom]]&lt;br /&gt;
* [[Redback]]&lt;br /&gt;
* [[Recluse]]&lt;br /&gt;
* [[Crab]]&lt;br /&gt;
* [[Tarantula]]&lt;br /&gt;
* [[Widow]]&lt;br /&gt;
&lt;br /&gt;
| group8     = [[Jumpbot Factory|Jumpbots]]&lt;br /&gt;
| list8      = * [[Constable]]&lt;br /&gt;
* [[Puppy]]&lt;br /&gt;
* [[Pyro]]&lt;br /&gt;
* [[Placeholder]]&lt;br /&gt;
* [[Moderator]]&lt;br /&gt;
* [[Jack]]&lt;br /&gt;
* [[Jugglenaut]]&lt;br /&gt;
* [[Firewalker]]&lt;br /&gt;
* [[Toad]]&lt;br /&gt;
* [[Skuttle]]&lt;br /&gt;
&lt;br /&gt;
| group9     = [[Tank Foundry|Heavy Tanks]]&lt;br /&gt;
| list9      = * [[Welder]]&lt;br /&gt;
* [[Kodachi]]&lt;br /&gt;
* [[Blitz]]&lt;br /&gt;
* [[Ogre]]&lt;br /&gt;
* [[Minotaur]]&lt;br /&gt;
* [[Cyclops]]&lt;br /&gt;
* [[Emissary]]&lt;br /&gt;
* [[Tremor]]&lt;br /&gt;
* [[Ettin]]&lt;br /&gt;
&lt;br /&gt;
| group10     = [[Amphbot Factory|Amphbots]]&lt;br /&gt;
| list10      = * [[Conch]]&lt;br /&gt;
* [[Duck]]&lt;br /&gt;
* [[Archer]]&lt;br /&gt;
* [[Buoy]]&lt;br /&gt;
* [[Scallop]]&lt;br /&gt;
* [[Grizzly]]&lt;br /&gt;
* [[Angler]]&lt;br /&gt;
* [[Limpet]]&lt;br /&gt;
* [[Lobster]]&lt;br /&gt;
* [[Djinn]]&lt;br /&gt;
&lt;br /&gt;
| group11     = [[Shipyard|Ships]]&lt;br /&gt;
| list11      = * [[Mariner]]&lt;br /&gt;
* [[Cutter]]&lt;br /&gt;
* [[Hunter]]&lt;br /&gt;
* [[Seawolf]]&lt;br /&gt;
* [[Corsair]]&lt;br /&gt;
* [[Mistral]]&lt;br /&gt;
* [[Siren]]&lt;br /&gt;
* [[Envoy]]&lt;br /&gt;
* [[Zephyr]]&lt;br /&gt;
&lt;br /&gt;
| group12     = [[Strider Hub|Striders]]&lt;br /&gt;
| list12      = * [[Athena]]&lt;br /&gt;
* [[Ultimatum]]&lt;br /&gt;
* [[Scorpion]]&lt;br /&gt;
* [[Dante]]&lt;br /&gt;
* [[Merlin]]&lt;br /&gt;
* [[Funnelweb]]&lt;br /&gt;
* [[Paladin]]&lt;br /&gt;
* [[Detriment]]&lt;br /&gt;
* [[Shogun]]&lt;br /&gt;
* [[Reef]]&lt;br /&gt;
* [[Scylla]]&lt;br /&gt;
&lt;br /&gt;
| group13     = [[Missile Silo|Tactical Missiles]]&lt;br /&gt;
| list13      = * [[Eos]]&lt;br /&gt;
* [[Quake]]&lt;br /&gt;
* [[Shockley]]&lt;br /&gt;
* [[Inferno]]&lt;br /&gt;
&lt;br /&gt;
| group14     = Other Units&lt;br /&gt;
| list14      = * [[Commander]]&lt;br /&gt;
* [[Firefly]]&lt;br /&gt;
* [[Viper]]&lt;br /&gt;
* [[Gull]]&lt;br /&gt;
* [[Glint]]&lt;br /&gt;
&lt;br /&gt;
| group15     = [[Chicken Defense|Chickens]]&lt;br /&gt;
| list15      = * [[Chicken]]&lt;br /&gt;
* [[Pigeon]]&lt;br /&gt;
* [[Spiker]]&lt;br /&gt;
* [[Cockatrice]]&lt;br /&gt;
* [[Lobber]]&lt;br /&gt;
* [[Wurm]]&lt;br /&gt;
* [[Roc]]&lt;br /&gt;
* [[Sporeshooter]]&lt;br /&gt;
* [[Leaper]]&lt;br /&gt;
* [[Talon]]&lt;br /&gt;
* [[Basilisk]]&lt;br /&gt;
* [[Blobber]]&lt;br /&gt;
* [[Blimpy]]&lt;br /&gt;
* [[Tiamat]]&lt;br /&gt;
* [[White Dragon]]&lt;br /&gt;
* [[Chicken Queen]] ([[Chicken Flyer Queen|flying]])&lt;br /&gt;
* [[Digger]]&lt;br /&gt;
* [[Dodo]]&lt;br /&gt;
* [[Spidermonkey]]&lt;br /&gt;
* [[Blooper]]&lt;br /&gt;
&lt;br /&gt;
| group16     = Unused Units&lt;br /&gt;
| list16      = * [[Nebula]]&lt;br /&gt;
* [[Spicula]]&lt;br /&gt;
* [[Kestrel]]&lt;br /&gt;
* [[Eclipse]]&lt;br /&gt;
* [[Trisula]]&lt;br /&gt;
* [[Morningstar]]&lt;br /&gt;
* [[Lancelet]]&lt;br /&gt;
* [[Daimyo]]&lt;br /&gt;
* [[Vanquisher]]&lt;br /&gt;
* [[Listener (burrowed)]]&lt;br /&gt;
* [[Chicken Queen (old)]]&lt;br /&gt;
* [[Chicken Brood Queen]]&lt;br /&gt;
&lt;br /&gt;
| below       = [[Buildings]]&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&lt;br /&gt;
[[Category:Units]]&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Internal_unit_names&amp;diff=6697</id>
		<title>Internal unit names</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Internal_unit_names&amp;diff=6697"/>
		<updated>2020-06-24T11:08:31Z</updated>

		<summary type="html">&lt;p&gt;Sprung: Surfboard is gone&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists the '''internal unit names''' of [[units]] and[[ buildings]] in Zero-K, including test/unused/template units and excluding commanders.&lt;br /&gt;
&lt;br /&gt;
== Unit names and IDs ==&lt;br /&gt;
:''Click a header to sort the table''&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Unit def name || Human name&lt;br /&gt;
|-&lt;br /&gt;
|amphaa || [[Angler]]&lt;br /&gt;
|-&lt;br /&gt;
|amphassault || [[Grizzly]]&lt;br /&gt;
|-&lt;br /&gt;
|amphbomb || [[Limpet]]&lt;br /&gt;
|-&lt;br /&gt;
|amphcon || [[Conch]]&lt;br /&gt;
|-&lt;br /&gt;
|amphfloater || [[Buoy]]&lt;br /&gt;
|-&lt;br /&gt;
|amphimpulse || [[Archer]]&lt;br /&gt;
|-&lt;br /&gt;
|amphlaunch || [[Lobster]]&lt;br /&gt;
|-&lt;br /&gt;
|amphraid || [[Duck]]&lt;br /&gt;
|-&lt;br /&gt;
|amphriot || [[Scallop]]&lt;br /&gt;
|-&lt;br /&gt;
|amphtele || [[Djinn]]&lt;br /&gt;
|-&lt;br /&gt;
|assaultcruiser || [[Vanquisher]]&lt;br /&gt;
|-&lt;br /&gt;
|asteroid || [[Asteroid]]&lt;br /&gt;
|-&lt;br /&gt;
|athena || [[Athena]]&lt;br /&gt;
|-&lt;br /&gt;
|bomberassault || [[Eclipse]]&lt;br /&gt;
|-&lt;br /&gt;
|bomberdisarm || [[Thunderbird]]&lt;br /&gt;
|-&lt;br /&gt;
|bomberheavy || [[Likho]]&lt;br /&gt;
|-&lt;br /&gt;
|bomberprec || [[Raven]]&lt;br /&gt;
|-&lt;br /&gt;
|bomberriot || [[Phoenix]]&lt;br /&gt;
|-&lt;br /&gt;
|bomberstrike || [[Kestrel]]&lt;br /&gt;
|-&lt;br /&gt;
|chicken || [[Chicken]]&lt;br /&gt;
|-&lt;br /&gt;
|chicken_blimpy || [[Blimpy]]&lt;br /&gt;
|-&lt;br /&gt;
|chicken_digger || [[Digger]]&lt;br /&gt;
|-&lt;br /&gt;
|chicken_digger_b || [[Digger (burrowed)]]&lt;br /&gt;
|-&lt;br /&gt;
|chicken_dodo || [[Dodo]]&lt;br /&gt;
|-&lt;br /&gt;
|chicken_dragon || [[White Dragon]]&lt;br /&gt;
|-&lt;br /&gt;
|chicken_drone || [[Drone]]&lt;br /&gt;
|-&lt;br /&gt;
|chicken_drone_starter || [[Drone]]&lt;br /&gt;
|-&lt;br /&gt;
|chicken_leaper || [[Leaper]]&lt;br /&gt;
|-&lt;br /&gt;
|chicken_listener || [[Listener]]&lt;br /&gt;
|-&lt;br /&gt;
|chicken_listener_b || [[Listener (burrowed)]]&lt;br /&gt;
|-&lt;br /&gt;
|chicken_pigeon || [[Pigeon]]&lt;br /&gt;
|-&lt;br /&gt;
|chicken_rafflesia || [[Rafflesia]]&lt;br /&gt;
|-&lt;br /&gt;
|chicken_roc || [[Roc]]&lt;br /&gt;
|-&lt;br /&gt;
|chicken_shield || [[Blooper]]&lt;br /&gt;
|-&lt;br /&gt;
|chicken_spidermonkey || [[Spidermonkey]]&lt;br /&gt;
|-&lt;br /&gt;
|chicken_sporeshooter || [[Sporeshooter]]&lt;br /&gt;
|-&lt;br /&gt;
|chicken_tiamat || [[Tiamat]]&lt;br /&gt;
|-&lt;br /&gt;
|chickena || [[Cockatrice]]&lt;br /&gt;
|-&lt;br /&gt;
|chickenblobber || [[Blobber]]&lt;br /&gt;
|-&lt;br /&gt;
|chickenbroodqueen || [[Chicken Brood Queen]]&lt;br /&gt;
|-&lt;br /&gt;
|chickenc || [[Basilisk]]&lt;br /&gt;
|-&lt;br /&gt;
|chickend || [[Chicken Tube]]&lt;br /&gt;
|-&lt;br /&gt;
|chickenf || [[Talon]]&lt;br /&gt;
|-&lt;br /&gt;
|chickenflyerqueen || [[Chicken Flyer Queen]]&lt;br /&gt;
|-&lt;br /&gt;
|chickenlandqueen || [[Chicken Queen]]&lt;br /&gt;
|-&lt;br /&gt;
|chickenr || [[Lobber]]&lt;br /&gt;
|-&lt;br /&gt;
|chickens || [[Spiker]]&lt;br /&gt;
|-&lt;br /&gt;
|chickenspire || [[Chicken Spire]]&lt;br /&gt;
|-&lt;br /&gt;
|chickenwurm || [[Wurm]]&lt;br /&gt;
|-&lt;br /&gt;
|cloakaa || [[Gremlin]]&lt;br /&gt;
|-&lt;br /&gt;
|cloakarty || [[Sling]]&lt;br /&gt;
|-&lt;br /&gt;
|cloakassault || [[Knight]]&lt;br /&gt;
|-&lt;br /&gt;
|cloakbomb || [[Imp]]&lt;br /&gt;
|-&lt;br /&gt;
|cloakcon || [[Conjurer]]&lt;br /&gt;
|-&lt;br /&gt;
|cloakheavyraid || [[Scythe]]&lt;br /&gt;
|-&lt;br /&gt;
|cloakjammer || [[Iris]]&lt;br /&gt;
|-&lt;br /&gt;
|cloakraid || [[Glaive]]&lt;br /&gt;
|-&lt;br /&gt;
|cloakriot || [[Reaver]]&lt;br /&gt;
|-&lt;br /&gt;
|cloakskirm || [[Ronin]]&lt;br /&gt;
|-&lt;br /&gt;
|cloaksnipe || [[Phantom]]&lt;br /&gt;
|-&lt;br /&gt;
|damagesink || [[Damage Sink thing]]&lt;br /&gt;
|-&lt;br /&gt;
|dronecarry || [[Gull]]&lt;br /&gt;
|-&lt;br /&gt;
|dronefighter || [[Spicula]]&lt;br /&gt;
|-&lt;br /&gt;
|droneheavyslow || [[Viper]]&lt;br /&gt;
|-&lt;br /&gt;
|dronelight || [[Firefly]]&lt;br /&gt;
|-&lt;br /&gt;
|empiricaldpser || [[Empirical DPS thing]]&lt;br /&gt;
|-&lt;br /&gt;
|empiricaldpsersmall || [[Empirical DPS thing (small)]]&lt;br /&gt;
|-&lt;br /&gt;
|empmissile || [[Shockley]]&lt;br /&gt;
|-&lt;br /&gt;
|energyfusion || [[Fusion Reactor]]&lt;br /&gt;
|-&lt;br /&gt;
|energygeo || [[Geothermal Generator]]&lt;br /&gt;
|-&lt;br /&gt;
|energyheavygeo || [[Advanced Geothermal]]&lt;br /&gt;
|-&lt;br /&gt;
|energypylon || [[Energy Pylon]]&lt;br /&gt;
|-&lt;br /&gt;
|energysingu || [[Singularity Reactor]]&lt;br /&gt;
|-&lt;br /&gt;
|energysolar || [[Solar Collector]]&lt;br /&gt;
|-&lt;br /&gt;
|energywind || [[Wind/Tidal Generator]]&lt;br /&gt;
|-&lt;br /&gt;
|factoryamph || [[Amphbot Factory]]&lt;br /&gt;
|-&lt;br /&gt;
|factorycloak || [[Cloakbot Factory]]&lt;br /&gt;
|-&lt;br /&gt;
|factorygunship || [[Gunship Plant]]&lt;br /&gt;
|-&lt;br /&gt;
|factoryhover || [[Hovercraft Platform]]&lt;br /&gt;
|-&lt;br /&gt;
|factoryjump || [[Jumpbot Factory]]&lt;br /&gt;
|-&lt;br /&gt;
|factoryplane || [[Airplane Plant]]&lt;br /&gt;
|-&lt;br /&gt;
|factoryshield || [[Shieldbot Factory]]&lt;br /&gt;
|-&lt;br /&gt;
|factoryship || [[Shipyard]]&lt;br /&gt;
|-&lt;br /&gt;
|factoryspider || [[Spider Factory]]&lt;br /&gt;
|-&lt;br /&gt;
|factorytank || [[Tank Foundry]]&lt;br /&gt;
|-&lt;br /&gt;
|factoryveh || [[Rover Assembly]]&lt;br /&gt;
|-&lt;br /&gt;
|fakeunit || [[Fake radar signal]]&lt;br /&gt;
|-&lt;br /&gt;
|fakeunit_aatarget || [[Fake AA target]]&lt;br /&gt;
|-&lt;br /&gt;
|fakeunit_los || [[LOS Provider]]&lt;br /&gt;
|-&lt;br /&gt;
|generic_tech || [[Generic Neutral Structure]]&lt;br /&gt;
|-&lt;br /&gt;
|grebe || [[Grebe]]&lt;br /&gt;
|-&lt;br /&gt;
|gunshipaa || [[Trident]]&lt;br /&gt;
|-&lt;br /&gt;
|gunshipassault || [[Revenant]]&lt;br /&gt;
|-&lt;br /&gt;
|gunshipbomb || [[Blastwing]]&lt;br /&gt;
|-&lt;br /&gt;
|gunshipcon || [[Wasp]]&lt;br /&gt;
|-&lt;br /&gt;
|gunshipemp || [[Gnat]]&lt;br /&gt;
|-&lt;br /&gt;
|gunshipheavyskirm || [[Nimbus]]&lt;br /&gt;
|-&lt;br /&gt;
|gunshipheavytrans || [[Hercules]]&lt;br /&gt;
|-&lt;br /&gt;
|gunshipkrow || [[Krow]]&lt;br /&gt;
|-&lt;br /&gt;
|gunshipraid || [[Locust]]&lt;br /&gt;
|-&lt;br /&gt;
|gunshipskirm || [[Harpy]]&lt;br /&gt;
|-&lt;br /&gt;
|gunshiptrans || [[Charon]]&lt;br /&gt;
|-&lt;br /&gt;
|hoveraa || [[Flail]]&lt;br /&gt;
|-&lt;br /&gt;
|hoverarty || [[Lance]]&lt;br /&gt;
|-&lt;br /&gt;
|hoverassault || [[Halberd]]&lt;br /&gt;
|-&lt;br /&gt;
|hovercon || [[Quill]]&lt;br /&gt;
|-&lt;br /&gt;
|hoverdepthcharge || [[Claymore]]&lt;br /&gt;
|-&lt;br /&gt;
|hoverminer || [[Dampener]]&lt;br /&gt;
|-&lt;br /&gt;
|hoverraid || [[Dagger]]&lt;br /&gt;
|-&lt;br /&gt;
|hoverriot || [[Mace]]&lt;br /&gt;
|-&lt;br /&gt;
|hovershotgun || [[Punisher]]&lt;br /&gt;
|-&lt;br /&gt;
|hoverskirm || [[Scalpel]]&lt;br /&gt;
|-&lt;br /&gt;
|hoverskirm2 || [[Trisula]]&lt;br /&gt;
|-&lt;br /&gt;
|hoversonic || [[Morningstar]]&lt;br /&gt;
|-&lt;br /&gt;
|jumpaa || [[Toad]]&lt;br /&gt;
|-&lt;br /&gt;
|jumparty || [[Firewalker]]&lt;br /&gt;
|-&lt;br /&gt;
|jumpassault || [[Jack]]&lt;br /&gt;
|-&lt;br /&gt;
|jumpblackhole || [[Placeholder]]&lt;br /&gt;
|-&lt;br /&gt;
|jumpbomb || [[Skuttle]]&lt;br /&gt;
|-&lt;br /&gt;
|jumpcon || [[Constable]]&lt;br /&gt;
|-&lt;br /&gt;
|jumpraid || [[Pyro]]&lt;br /&gt;
|-&lt;br /&gt;
|jumpscout || [[Puppy]]&lt;br /&gt;
|-&lt;br /&gt;
|jumpskirm || [[Moderator]]&lt;br /&gt;
|-&lt;br /&gt;
|jumpsumo || [[Jugglenaut]]&lt;br /&gt;
|-&lt;br /&gt;
|mahlazer || [[Starlight]]&lt;br /&gt;
|-&lt;br /&gt;
|napalmmissile || [[Inferno]]&lt;br /&gt;
|-&lt;br /&gt;
|nebula || [[Nebula]]&lt;br /&gt;
|-&lt;br /&gt;
|planecon || [[Crane]]&lt;br /&gt;
|-&lt;br /&gt;
|planefighter || [[Swift]]&lt;br /&gt;
|-&lt;br /&gt;
|planeheavyfighter || [[Raptor]]&lt;br /&gt;
|-&lt;br /&gt;
|planescout || [[Owl]]&lt;br /&gt;
|-&lt;br /&gt;
|pw_artefact || [[Ancient Artefact]]&lt;br /&gt;
|-&lt;br /&gt;
|pw_bomberfac || [[Bomber Factory]]&lt;br /&gt;
|-&lt;br /&gt;
|pw_dropfac || [[Dropship Factory]]&lt;br /&gt;
|-&lt;br /&gt;
|pw_estorage || [[Energy Storage]]&lt;br /&gt;
|-&lt;br /&gt;
|pw_estorage2 || [[Double Energy Storage]]&lt;br /&gt;
|-&lt;br /&gt;
|pw_garrison || [[Field Garrison]]&lt;br /&gt;
|-&lt;br /&gt;
|pw_gaspowerstation || [[Gas Power Station]]&lt;br /&gt;
|-&lt;br /&gt;
|pw_generic || [[Generic Neutral Structure]]&lt;br /&gt;
|-&lt;br /&gt;
|pw_grid || [[Planetary Defense Grid]]&lt;br /&gt;
|-&lt;br /&gt;
|pw_guerilla || [[Guerilla Jumpgate]]&lt;br /&gt;
|-&lt;br /&gt;
|pw_hq_attacker || [[Attacker Command]]&lt;br /&gt;
|-&lt;br /&gt;
|pw_hq_defender || [[Defender Command]]&lt;br /&gt;
|-&lt;br /&gt;
|pw_inhibitor || [[Wormhole Inhibitor]]&lt;br /&gt;
|-&lt;br /&gt;
|pw_interception || [[Interception Network]]&lt;br /&gt;
|-&lt;br /&gt;
|pw_metal || [[Ancient Fabricator]]&lt;br /&gt;
|-&lt;br /&gt;
|pw_mine || [[Power Generator Unit]]&lt;br /&gt;
|-&lt;br /&gt;
|pw_mine2 || [[Orbital Solar Array]]&lt;br /&gt;
|-&lt;br /&gt;
|pw_mine3 || [[Planetary Geothermal Tap]]&lt;br /&gt;
|-&lt;br /&gt;
|pw_mstorage2 || [[Metal Storage]]&lt;br /&gt;
|-&lt;br /&gt;
|pw_relay || [[Communication Relay]]&lt;br /&gt;
|-&lt;br /&gt;
|pw_techlab || [[Tech Lab]]&lt;br /&gt;
|-&lt;br /&gt;
|pw_warpgate || [[Warp Gate]]&lt;br /&gt;
|-&lt;br /&gt;
|pw_warpgatealt || [[Warp Gate]]&lt;br /&gt;
|-&lt;br /&gt;
|pw_warpjammer || [[Warp Jammer]]&lt;br /&gt;
|-&lt;br /&gt;
|pw_wormhole || [[Wormhole Generator]]&lt;br /&gt;
|-&lt;br /&gt;
|pw_wormhole2 || [[Improved Wormhole]]&lt;br /&gt;
|-&lt;br /&gt;
|raveparty || [[Disco Rave Party]]&lt;br /&gt;
|-&lt;br /&gt;
|rocksink || [[Rocking Damage Sink thing]]&lt;br /&gt;
|-&lt;br /&gt;
|roost || [[Roost]]&lt;br /&gt;
|-&lt;br /&gt;
|seismic || [[Quake]]&lt;br /&gt;
|-&lt;br /&gt;
|shieldaa || [[Vandal]]&lt;br /&gt;
|-&lt;br /&gt;
|shieldarty || [[Racketeer]]&lt;br /&gt;
|-&lt;br /&gt;
|shieldassault || [[Thug]]&lt;br /&gt;
|-&lt;br /&gt;
|shieldbomb || [[Snitch]]&lt;br /&gt;
|-&lt;br /&gt;
|shieldcon || [[Convict]]&lt;br /&gt;
|-&lt;br /&gt;
|shieldfelon || [[Felon]]&lt;br /&gt;
|-&lt;br /&gt;
|shieldraid || [[Bandit]]&lt;br /&gt;
|-&lt;br /&gt;
|shieldriot || [[Outlaw]]&lt;br /&gt;
|-&lt;br /&gt;
|shieldscout || [[Dirtbag]]&lt;br /&gt;
|-&lt;br /&gt;
|shieldshield || [[Aspis]]&lt;br /&gt;
|-&lt;br /&gt;
|shieldskirm || [[Rogue]]&lt;br /&gt;
|-&lt;br /&gt;
|shipaa || [[Zephyr]]&lt;br /&gt;
|-&lt;br /&gt;
|shiparty || [[Envoy]]&lt;br /&gt;
|-&lt;br /&gt;
|shipassault || [[Siren]]&lt;br /&gt;
|-&lt;br /&gt;
|shipcarrier || [[Reef]]&lt;br /&gt;
|-&lt;br /&gt;
|shipcon || [[Mariner]]&lt;br /&gt;
|-&lt;br /&gt;
|shipheavyarty || [[Shogun]]&lt;br /&gt;
|-&lt;br /&gt;
|shipriot || [[Corsair]]&lt;br /&gt;
|-&lt;br /&gt;
|shipscout || [[Cutter]]&lt;br /&gt;
|-&lt;br /&gt;
|shipskirm || [[Mistral]]&lt;br /&gt;
|-&lt;br /&gt;
|shiptorpraider || [[Hunter]]&lt;br /&gt;
|-&lt;br /&gt;
|spideraa || [[Tarantula]]&lt;br /&gt;
|-&lt;br /&gt;
|spideranarchid || [[Anarchid]]&lt;br /&gt;
|-&lt;br /&gt;
|spiderantiheavy || [[Widow]]&lt;br /&gt;
|-&lt;br /&gt;
|spiderassault || [[Hermit]]&lt;br /&gt;
|-&lt;br /&gt;
|spidercon || [[Weaver]]&lt;br /&gt;
|-&lt;br /&gt;
|spidercrabe || [[Crab]]&lt;br /&gt;
|-&lt;br /&gt;
|spideremp || [[Venom]]&lt;br /&gt;
|-&lt;br /&gt;
|spiderriot || [[Redback]]&lt;br /&gt;
|-&lt;br /&gt;
|spiderscout || [[Flea]]&lt;br /&gt;
|-&lt;br /&gt;
|spiderskirm || [[Recluse]]&lt;br /&gt;
|-&lt;br /&gt;
|starlight_satellite || [[Glint]]&lt;br /&gt;
|-&lt;br /&gt;
|staticantinuke || [[Antinuke]]&lt;br /&gt;
|-&lt;br /&gt;
|staticarty || [[Cerberus]]&lt;br /&gt;
|-&lt;br /&gt;
|staticcon || [[Caretaker]]&lt;br /&gt;
|-&lt;br /&gt;
|staticheavyarty || [[Big Bertha]]&lt;br /&gt;
|-&lt;br /&gt;
|staticheavyradar || [[Advanced Radar]]&lt;br /&gt;
|-&lt;br /&gt;
|staticjammer || [[Cornea]]&lt;br /&gt;
|-&lt;br /&gt;
|staticmex || [[Metal Extractor]]&lt;br /&gt;
|-&lt;br /&gt;
|staticmissilesilo || [[Missile Silo]]&lt;br /&gt;
|-&lt;br /&gt;
|staticnuke || [[Trinity]]&lt;br /&gt;
|-&lt;br /&gt;
|staticradar || [[Radar Tower]]&lt;br /&gt;
|-&lt;br /&gt;
|staticrearm || [[Airpad]]&lt;br /&gt;
|-&lt;br /&gt;
|staticshield || [[Aegis]]&lt;br /&gt;
|-&lt;br /&gt;
|staticsonar || [[Sonar Station]]&lt;br /&gt;
|-&lt;br /&gt;
|staticstorage || [[Storage]]&lt;br /&gt;
|-&lt;br /&gt;
|striderantiheavy || [[Ultimatum]]&lt;br /&gt;
|-&lt;br /&gt;
|striderarty || [[Merlin]]&lt;br /&gt;
|-&lt;br /&gt;
|striderbantha || [[Paladin]]&lt;br /&gt;
|-&lt;br /&gt;
|striderdante || [[Dante]]&lt;br /&gt;
|-&lt;br /&gt;
|striderdetriment || [[Detriment]]&lt;br /&gt;
|-&lt;br /&gt;
|striderfunnelweb || [[Funnelweb]]&lt;br /&gt;
|-&lt;br /&gt;
|striderhub || [[Strider Hub]]&lt;br /&gt;
|-&lt;br /&gt;
|striderscorpion || [[Scorpion]]&lt;br /&gt;
|-&lt;br /&gt;
|subraider || [[Seawolf]]&lt;br /&gt;
|-&lt;br /&gt;
|subscout || [[Lancelet]]&lt;br /&gt;
|-&lt;br /&gt;
|subtacmissile || [[Scylla]]&lt;br /&gt;
|-&lt;br /&gt;
|tacnuke || [[Eos]]&lt;br /&gt;
|-&lt;br /&gt;
|tankaa || [[Ettin]]&lt;br /&gt;
|-&lt;br /&gt;
|tankarty || [[Emissary]]&lt;br /&gt;
|-&lt;br /&gt;
|tankassault || [[Minotaur]]&lt;br /&gt;
|-&lt;br /&gt;
|tankcon || [[Welder]]&lt;br /&gt;
|-&lt;br /&gt;
|tankheavyarty || [[Tremor]]&lt;br /&gt;
|-&lt;br /&gt;
|tankheavyassault || [[Cyclops]]&lt;br /&gt;
|-&lt;br /&gt;
|tankheavyraid || [[Blitz]]&lt;br /&gt;
|-&lt;br /&gt;
|tankraid || [[Kodachi]]&lt;br /&gt;
|-&lt;br /&gt;
|tankriot || [[Ogre]]&lt;br /&gt;
|-&lt;br /&gt;
|tele_beacon || [[Lamp]]&lt;br /&gt;
|-&lt;br /&gt;
|terraunit || [[Terraform]]&lt;br /&gt;
|-&lt;br /&gt;
|tiptest || [[Turn In Place test]]&lt;br /&gt;
|-&lt;br /&gt;
|turretaaclose || [[Hacksaw]]&lt;br /&gt;
|-&lt;br /&gt;
|turretaafar || [[Chainsaw]]&lt;br /&gt;
|-&lt;br /&gt;
|turretaaflak || [[Thresher]]&lt;br /&gt;
|-&lt;br /&gt;
|turretaaheavy || [[Artemis]]&lt;br /&gt;
|-&lt;br /&gt;
|turretaalaser || [[Razor]]&lt;br /&gt;
|-&lt;br /&gt;
|turretantiheavy || [[Lucifer]]&lt;br /&gt;
|-&lt;br /&gt;
|turretemp || [[Faraday]]&lt;br /&gt;
|-&lt;br /&gt;
|turretgauss || [[Gauss]]&lt;br /&gt;
|-&lt;br /&gt;
|turretheavy || [[Desolator]]&lt;br /&gt;
|-&lt;br /&gt;
|turretheavylaser || [[Stinger]]&lt;br /&gt;
|-&lt;br /&gt;
|turretimpulse || [[Newton]]&lt;br /&gt;
|-&lt;br /&gt;
|turretlaser || [[Lotus]]&lt;br /&gt;
|-&lt;br /&gt;
|turretmissile || [[Picket]]&lt;br /&gt;
|-&lt;br /&gt;
|turretriot || [[Stardust]]&lt;br /&gt;
|-&lt;br /&gt;
|turretsunlance || [[Sunlance]]&lt;br /&gt;
|-&lt;br /&gt;
|turrettorp || [[Urchin]]&lt;br /&gt;
|-&lt;br /&gt;
|vehaa || [[Crasher]]&lt;br /&gt;
|-&lt;br /&gt;
|veharty || [[Badger]]&lt;br /&gt;
|-&lt;br /&gt;
|vehassault || [[Ravager]]&lt;br /&gt;
|-&lt;br /&gt;
|vehcapture || [[Dominatrix]]&lt;br /&gt;
|-&lt;br /&gt;
|vehcon || [[Mason]]&lt;br /&gt;
|-&lt;br /&gt;
|vehheavyarty || [[Impaler]]&lt;br /&gt;
|-&lt;br /&gt;
|vehraid || [[Scorcher]]&lt;br /&gt;
|-&lt;br /&gt;
|vehriot || [[Ripper]]&lt;br /&gt;
|-&lt;br /&gt;
|vehscout || [[Dart]]&lt;br /&gt;
|-&lt;br /&gt;
|vehsupport || [[Fencer]]&lt;br /&gt;
|-&lt;br /&gt;
|wolverine_mine || [[Claw]]&lt;br /&gt;
|-&lt;br /&gt;
|zenith || [[Zenith]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Generation code ==&lt;br /&gt;
The above wiki table can be generated using a widget with the following Lua code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function widget:Initialize()&lt;br /&gt;
	local file = io.open(&amp;quot;testwidget.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
	file:write([[{|class=&amp;quot;wikitable sortable&amp;quot;]] .. &amp;quot;\n&amp;quot;)&lt;br /&gt;
	file:write(&amp;quot;! Unit def name || Human name\n&amp;quot;)	-- || Description\n&amp;quot;)&lt;br /&gt;
	for i=1,#UnitDefs do&lt;br /&gt;
		local ud = UnitDefs[i]&lt;br /&gt;
		if not ud.customParams.level then&lt;br /&gt;
			local unitname = ud.name&lt;br /&gt;
			local name = ud.humanName&lt;br /&gt;
			local desc = Spring.Utilities.GetDescription(ud, nil)&lt;br /&gt;
			local helptext = Spring.Utilities.GetHelptext(ud)&lt;br /&gt;
			file:write(&amp;quot;|-\n&amp;quot;)&lt;br /&gt;
			file:write(&amp;quot;|&amp;quot; .. unitname .. &amp;quot; || &amp;quot; .. &amp;quot;[[&amp;quot; .. name .. &amp;quot;]]\n&amp;quot;)	-- .. &amp;quot; || &amp;quot; .. desc .. &amp;quot;\n&amp;quot;)	-- .. &amp;quot;\t&amp;quot; .. helptext .. &amp;quot;\n&amp;quot;)&lt;br /&gt;
	  end&lt;br /&gt;
	end&lt;br /&gt;
	file:write(&amp;quot;|}&amp;quot;)&lt;br /&gt;
	file:flush()&lt;br /&gt;
	file:close()&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=User:Aquanim/DraftMapMakingGuide&amp;diff=6690</id>
		<title>User:Aquanim/DraftMapMakingGuide</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=User:Aquanim/DraftMapMakingGuide&amp;diff=6690"/>
		<updated>2020-06-15T09:15:48Z</updated>

		<summary type="html">&lt;p&gt;Sprung: Add a link to startbox API help page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Minimal Brief Guide =&lt;br /&gt;
&lt;br /&gt;
For more detail on each of these steps read the later sections of the document (TODO: when these are actually written lol)&lt;br /&gt;
&lt;br /&gt;
This guide assumes that you are using a version of Zero-K installed through Steam. You can still make maps if you installed by some other method but you may need to modify some of the later steps.&lt;br /&gt;
&lt;br /&gt;
== Download Tools ==&lt;br /&gt;
&lt;br /&gt;
* 7zip - https://www.7-zip.org/download.html&lt;br /&gt;
* pymapconv - clone or download https://github.com/Beherith/springrts_smf_compiler somewhere, then copy pymapconv.exe and nvdxt.exe to a new directory to keep things simple&lt;br /&gt;
* map blueprint - clone or download https://github.com/Aquanim/ZKMapBlueprint&lt;br /&gt;
&lt;br /&gt;
== Create Images ==&lt;br /&gt;
&lt;br /&gt;
For a 10x10 (TitanDuel-size) map, create the following images with a tool of your choice:&lt;br /&gt;
&lt;br /&gt;
* A height map grayscale image with dimensions 641 x 641, saved as an 8-bit .bmp or a 16-bit .png. (The latter is preferred but not all tools offer 16-bit output.) The brighter a pixel is the higher the corresponding part of the map will be.&lt;br /&gt;
* A texture map colour image with dimensions 5120 x 5120, saved as a .bmp&lt;br /&gt;
&lt;br /&gt;
For a different size map, multiply the height/width of the map by 64 and add 1 to get the right size for the heightmap; multiply the height/width of the map by 512 to get the right size for the texture map.&lt;br /&gt;
&lt;br /&gt;
Put these images in the same directory as pymapconv.exe from the previous step (may not strictly be required but keeps things simple).&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TODO: SME and Springboard tools&lt;br /&gt;
&lt;br /&gt;
== Compile Your Map ==&lt;br /&gt;
Run pymapconv.exe and fill in the following fields...&lt;br /&gt;
* An output file name - ideally this should be the name of your map, possibly with a version number. File extension .smf, will also generate a .smt. '''IMPORTANT:''' Do not rename these files after compiling!&lt;br /&gt;
* Use the buttons to select the texture and heightmap images you made in the previous step.&lt;br /&gt;
* I expect the minimum/maximum height values to be overridden by mapinfo.lua later but you might as well set them.&lt;br /&gt;
* Scroll down to the NVDXT option and make sure it says &amp;quot;-Sinc -quality_highest&amp;quot;. Also probably a good idea to tick the CLEAN option.&lt;br /&gt;
* Untick everything else, press &amp;quot;Save options as&amp;quot; if you like, then press the &amp;quot;Compile&amp;quot; button.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Construct .sdd File ==&lt;br /&gt;
* Rename ZKMapBlueprint_v0.0.sdd to have the name of your map. A version identifier is advisable as well. Keep the .sdd extension.&lt;br /&gt;
* Copy the .smf and .smt files produced by pymapconv.exe into the /maps subfolder of the .sdd folder. (There should be mapblueprint.smf and mapblueprint.smt files here, you can delete them.)&lt;br /&gt;
* In the root of the .sdd folder there should be a file &amp;quot;mapinfo.lua&amp;quot;. Open this with a text editor. This file contains a bunch of stuff but there are only a few items we are interested in for now:&lt;br /&gt;
** Near the start of the file change the ''author'', ''description'', ''name'', ''shortname'' and ''version'' variables to suit you and your map.&lt;br /&gt;
** Scroll down a bit to the &amp;quot;smf&amp;quot; section and change the ''maxheight'' and ''minheight'' numbers to suit your map. Also change the file name after ''smtFileName0'' so that it has your .smt file's name.&lt;br /&gt;
* To test your map, copy the .sdd directory into the /maps folder of your Zero-K install. In the settings make sure that &amp;quot;Only featured maps&amp;quot; is disabled. Then open a Skirmish game, click on the current map, select your map from the list, and play. (You might want to make the enemy AI inactive. The minimap in the lobby will be blank, don't worry about this for now.)&lt;br /&gt;
* If you want to change your map you will need to replace the files in your ZK maps folder, then restart ZK, in order to load the new version.&lt;br /&gt;
&lt;br /&gt;
== Metal and Startboxes ==&lt;br /&gt;
Now that you can look at your height and texturemap ingame this is a good time to sort out your metal spots and start locations. &lt;br /&gt;
=== Metal spots ===&lt;br /&gt;
In the /mapconfig subfolder of the .sdd file there is a &amp;quot;map_metal_layout.lua&amp;quot; file. The blueprint contains two metal spots as an example; replace them with your own.&lt;br /&gt;
&lt;br /&gt;
=== Startboxes ===&lt;br /&gt;
In the /mapconfig subfolder of the .sdd file there is a &amp;quot;map_startboxes.lua&amp;quot; file. This specifies each team's startboxes as well as default start locations.&lt;br /&gt;
&lt;br /&gt;
Some hints for configuring the metal and startbox files:&lt;br /&gt;
&lt;br /&gt;
* Startboxes are specified by their corner points reading clockwise around the polygon. More than one separate box for a given team is possible.&lt;br /&gt;
* Holding SPACE ingame will display a dialog box which (among other things) gives the X and Z coordinates of wherever your cursor is.&lt;br /&gt;
* The metal and startbox files are just LUA scripts. This means you don't have to write simple numbers to specify locations; you can perform arithmetic to make sure your map setup is symmetric (the startbox of the South-East team in the blueprint is an example). More advanced scripting is also possible, for example to make your startbox configuration dependent on the number of players or allyteams. See the [[http://zero-k.info/mediawiki/index.php?title=Startbox_API#Advanced_stuff Startbox API page]] .&lt;br /&gt;
&lt;br /&gt;
=== Useful Tools ===&lt;br /&gt;
&lt;br /&gt;
[[https://zero-k.info/mediawiki/index.php?title=User:Aquanim/DraftMapMakingGuide#Startbox_Editor_Widget Startbox Editor Widget]]&lt;br /&gt;
&lt;br /&gt;
== Optional Extras ==&lt;br /&gt;
TODO: fill these in&lt;br /&gt;
&lt;br /&gt;
You can skip this for now, but refer to the sections linked below if you want...&lt;br /&gt;
* Features (geovents, trees, rocks, etc)&lt;br /&gt;
* DNTS (fancy map details and specular map)&lt;br /&gt;
* Fancy mapinfo stuff (lighting, water effects, etc)&lt;br /&gt;
* Skybox (???)&lt;br /&gt;
* Other nonsense (particle effects, sound, etc)&lt;br /&gt;
&lt;br /&gt;
== Upload ==&lt;br /&gt;
&lt;br /&gt;
Compress the contents of the .sdd file into a 7zip, then change the file extension to “.sd7”. If you remove the .sdd from your game maps directory and put the .sd7 in its place, the map should still work.&lt;br /&gt;
&lt;br /&gt;
'''IMPORTANT:''' Make sure that when you open the archive you see mapinfo.lua and not your .sdd folder! If you get this wrong the map will not work correctly.&lt;br /&gt;
&lt;br /&gt;
'''IMPORTANT:''' When you compress to 7zip make sure the compression is “non-solid”. &lt;br /&gt;
&lt;br /&gt;
* Make a Springfiles account at https://springfiles.com/&lt;br /&gt;
* Pray to your deity of choice that whoever approves Springfiles accounts checks in this month&lt;br /&gt;
&lt;br /&gt;
Alternatively, get somebody else who already has an account to upload the map for you. Your name will still be listed as the author and you should still be able to upload any later updates yourself.&lt;br /&gt;
&lt;br /&gt;
* Upload your map&lt;br /&gt;
* Pray to your deity of choice that Springfiles is actually working this week&lt;br /&gt;
* If your map is not listed at https://api.springfiles.com/ within 24 hours ask for help in the #zkmap channel&lt;br /&gt;
* Eventually see your map on the ZK website - it will be unsupported by default so make sure you set your search filter accordingly&lt;br /&gt;
* Test your map on the live server so there is a publically accessible replay or two - games against AIs are fine&lt;br /&gt;
* Ask a moderator to support/feature your map&lt;br /&gt;
&lt;br /&gt;
= Tools and Resources =&lt;br /&gt;
&lt;br /&gt;
== Springboard ==&lt;br /&gt;
&lt;br /&gt;
== SpringMapEdit ==&lt;br /&gt;
&lt;br /&gt;
== Nobiax Texture Pack ==&lt;br /&gt;
&lt;br /&gt;
== Startbox Editor Widget ==&lt;br /&gt;
Load your map in ZK, press Alt-F11 to access the widget list, press &amp;quot;Search&amp;quot; and enter &amp;quot;Startbox&amp;quot;. Enable the Startbox Editor. The ingame description doesn't say much so let's consult the [https://github.com/ZeroK-RTS/Zero-K/blob/90d61099e3fb8509645cf16d3fa2982150c81bdd/LuaUI/Widgets/dbg_startbox_editor.lua widget source file]:&lt;br /&gt;
&lt;br /&gt;
[[Image:Startboxeditor1.png]]&lt;br /&gt;
&lt;br /&gt;
...well, that's not a good sign. Scroll down a bit further:&lt;br /&gt;
&lt;br /&gt;
[[Image:Startboxeditor2.png]]&lt;br /&gt;
&lt;br /&gt;
That's more like it. Follow those instructions to create your startboxes, then open your infolog.lua (in the main zero-k directory) after you exit to retrieve the startbox information for copying into map_startboxes.lua. It's probably a good idea to turn the widget off after you are done with it.&lt;br /&gt;
&lt;br /&gt;
== Upspring ==&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
	<entry>
		<id>http://test.zero-k.info/mediawiki/index.php?title=Startbox_API&amp;diff=6689</id>
		<title>Startbox API</title>
		<link rel="alternate" type="text/html" href="http://test.zero-k.info/mediawiki/index.php?title=Startbox_API&amp;diff=6689"/>
		<updated>2020-06-15T09:10:39Z</updated>

		<summary type="html">&lt;p&gt;Sprung: Add a note about gametype functions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Start boxes ==&lt;br /&gt;
&lt;br /&gt;
Each team has a defined starting area in which its players can spawn their commanders - these are called start boxes. Map makers can define how these areas look like by including a config file inside their map archive.&lt;br /&gt;
&lt;br /&gt;
== The config file ==&lt;br /&gt;
&lt;br /&gt;
The file which you need to include is &lt;br /&gt;
 mapconfig/map_startboxes.lua&lt;br /&gt;
&lt;br /&gt;
It consists of Lua code which returns 2 tables: one with the start box layout for the current match and one that contains possible box counts.&lt;br /&gt;
&lt;br /&gt;
For examples see the bottom of this page.&lt;br /&gt;
&lt;br /&gt;
== Box counts ==&lt;br /&gt;
&lt;br /&gt;
Let's start from the last table because it is the simplest. This is just a list of how many teams the map is designed for.&lt;br /&gt;
&lt;br /&gt;
Let's take [http://zero-k.info/Maps/Detail/8162 Throne] as an example. It has an outer ring with 7 starting areas so it can be played as a 7-team FFA. There are also rings with 3 and 5 areas so 3- and 5-team FFAs are also possible setups. Finally, you could play a duel between any two positions from the same ring. (The real Throne config is a fair bit more complicated than that but you get the idea.)&lt;br /&gt;
&lt;br /&gt;
Thus, the possible team counts are 2, 3, 5, and 7. Let's define a Lua table for that:&lt;br /&gt;
 local playercounts = {2, 3, 5, 7}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is mostly important for fancy FFA maps. Simple duel/teamgame maps will usually just have 2 as the only value here:&lt;br /&gt;
 local playercounts = {2}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The boxes ==&lt;br /&gt;
&lt;br /&gt;
Now, the most tedious part. The boxes do not need to actually be boxes, they can be any arbitrary shape (even concave or disjoint). This is achieved by having the boxes defined as a set of polygons.&lt;br /&gt;
&lt;br /&gt;
There is a widget which lets you draw the polygons ingame, it's called &amp;quot;Startbox Editor&amp;quot; and is under the &amp;quot;For Developers&amp;quot; tab in the widget list (press Alt+F11, and don't touch anything else unless you know what you're doing).&lt;br /&gt;
&lt;br /&gt;
To draw a polygon, use LMB - either drag a line or click points:&lt;br /&gt;
&lt;br /&gt;
[[File:Startbox API 1.jpg]]&lt;br /&gt;
&lt;br /&gt;
Once you draw a full loop, press RMB to close it. Make sure the line does not cross itself. Finished polygons are a bit darker.&lt;br /&gt;
&lt;br /&gt;
[[File:Startbox API 2.jpg]]&lt;br /&gt;
&lt;br /&gt;
Now you can add another polygon if you want. These will all be a part of the same team.&lt;br /&gt;
&lt;br /&gt;
[[File:Startbox API 3.jpg]]&lt;br /&gt;
&lt;br /&gt;
If you want to delete the last created polygon, press D.&lt;br /&gt;
Once you are satisfied with the area, press S. Now you can draw the area for another team.&lt;br /&gt;
&lt;br /&gt;
Once you create all the boxes, go to your Spring directory and find the infolog. There you will see a bunch of code like&lt;br /&gt;
 boxes = {&lt;br /&gt;
     stuff&lt;br /&gt;
 },&lt;br /&gt;
&lt;br /&gt;
Each of those tables is a team's startbox. The config is an array (indexed from 0) of each team's startbox data. The box data from the generator will go to a team's config entry. Like this:&lt;br /&gt;
 local main_config = {&lt;br /&gt;
     [0] = {&lt;br /&gt;
         boxes = {&lt;br /&gt;
             stuff&lt;br /&gt;
         },&lt;br /&gt;
         -- more entries will go there later!&lt;br /&gt;
     },&lt;br /&gt;
     [1] = {&lt;br /&gt;
         boxes = {&lt;br /&gt;
             stuff&lt;br /&gt;
         },&lt;br /&gt;
     },&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The layout is a normal Lua table so you can use all the usual table manipulation methods. For example you could add more area based on how many people there are, or generate them dynamically.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The recommended start points ===&lt;br /&gt;
&lt;br /&gt;
This sub-table defines recommended start points within each box. These are points on which CAI bots will spawn. The first point is special: human players who did not pick start position will also spawn here and so will any extra CAI if there are more of them than the spots; as such having at least one startpoint in each box is mandatory. These points are also marked on people's UI as circles.&lt;br /&gt;
&lt;br /&gt;
Defining these is very simple. It's very similar to how start areas were defined. Ingame you can hold Space over a point to see its coordinates. These are written down for boxes similarly to the areas:&lt;br /&gt;
 local main_config = {&lt;br /&gt;
     [0] = {&lt;br /&gt;
         boxes = {&lt;br /&gt;
             stuff&lt;br /&gt;
         },&lt;br /&gt;
         startpoints = {&lt;br /&gt;
             {123, 456}, -- X, Z&lt;br /&gt;
             {654, 321},&lt;br /&gt;
             -- as many as you want, it's good if there are as many as you want people per team&lt;br /&gt;
         },&lt;br /&gt;
     },&lt;br /&gt;
     [1] = {&lt;br /&gt;
         boxes = {&lt;br /&gt;
             stuff&lt;br /&gt;
         },&lt;br /&gt;
         startpoints = {&lt;br /&gt;
             {789, 789},&lt;br /&gt;
             {987, 987},&lt;br /&gt;
         },&lt;br /&gt;
     },&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Of course, the start positions should match the areas, though they don't have to.&lt;br /&gt;
&lt;br /&gt;
== Putting these together ==&lt;br /&gt;
&lt;br /&gt;
You can give each team a name, alongside a shorter backup if the first one is too large. Here's how:&lt;br /&gt;
&lt;br /&gt;
  [0] = {&lt;br /&gt;
     boxes = { stuff },&lt;br /&gt;
     startpoints = { stuff },&lt;br /&gt;
     nameLong = &amp;quot;South-West&amp;quot;,&lt;br /&gt;
     nameShort = &amp;quot;SW&amp;quot;,&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
It serves to identify the team so while it's good to use something that describes placement, you can get creative. For example:&lt;br /&gt;
* &amp;quot;North&amp;quot;, &amp;quot;South-East&amp;quot;&lt;br /&gt;
* &amp;quot;5 o'clock&amp;quot;&lt;br /&gt;
* real-world style maps could have names like &amp;quot;Russia&amp;quot; or &amp;quot;America&amp;quot;&lt;br /&gt;
* asymmetric maps can use landmarks, for example &amp;quot;Lake&amp;quot; vs &amp;quot;Desert&amp;quot;&lt;br /&gt;
* for missions it's good to use storyline names, eg &amp;quot;Empire&amp;quot; vs &amp;quot;Dynasty&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
Now just return the config table and the playercounts table.&lt;br /&gt;
  return main_config, playercounts&lt;br /&gt;
&lt;br /&gt;
The exact format for the config table that should get returned is&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
     [0] = { -- a single team's data. Indexed from 0&lt;br /&gt;
         boxes = {&lt;br /&gt;
             { -- a polygon&lt;br /&gt;
                 {123, 456}, -- a vertex of the polygon. X, Z.&lt;br /&gt;
                 {234, 567}, -- another vertex&lt;br /&gt;
                 {345, 678},&lt;br /&gt;
                 -- more vertices&lt;br /&gt;
             },&lt;br /&gt;
             { -- another polygon&lt;br /&gt;
                 -- vertices&lt;br /&gt;
             },&lt;br /&gt;
             -- more polygons&lt;br /&gt;
         },&lt;br /&gt;
         startpoints = {&lt;br /&gt;
             {123, 456}, -- X, Z&lt;br /&gt;
             {654, 321},&lt;br /&gt;
             -- more points&lt;br /&gt;
         },&lt;br /&gt;
         nameLong = &amp;quot;longer string with team name&amp;quot;,&lt;br /&gt;
         nameShort = &amp;quot;short&amp;quot;,&lt;br /&gt;
     },&lt;br /&gt;
     [1] = { -- another team's data&lt;br /&gt;
         boxes = { ... },&lt;br /&gt;
         startpoints = { ... },&lt;br /&gt;
         nameLong = &amp;quot;...&amp;quot;,&lt;br /&gt;
         nameShort = &amp;quot;...&amp;quot;,&lt;br /&gt;
     },&lt;br /&gt;
     -- more teams&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Advanced stuff ==&lt;br /&gt;
The config has access to Spring Lua API so it is possible to do a lot of dynamic things. In particular, you can use math.random without worry.&lt;br /&gt;
&lt;br /&gt;
You can make stuff dependent on the game mode. There are functions which return the gametype, such as `Spring.Utilities.Gametype.is1v1()`. The full list is here: https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Utilities/teamFunctions.lua#L67&lt;br /&gt;
&lt;br /&gt;
An important thing is that #Spring.GetAllTeams() will return a wrong value due to fake technical teams and Gaia. Instead, use Spring.Utilities.GetTeamCount() to get the real number of teams.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/SpeedMetal.lua SpeedMetal] - the simplest layout, just two squares.&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/DeltaSiegeDry.lua DSD] - huge polygons, but otherwise very simple.&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/Sever%201.lua#L343 Sever] - shows an example of smaller boxes for 1v1 and larger for teams.&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/Isle%20of%20Grief%200.2.lua Isle of Grief] - shows a smart approach, one of the boxes is not defined rigidly but is a mirror of the other (only really feasible for rough boxes or perfectly symmetrical maps).&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/Aum_1.1.lua Aum] - another small trick, this time 5-way radial symmetry.&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/Throne%20v1.lua Throne] - multiple boxes defined, with a system to pick some of them based on how many teams there are.&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/Speed_Ball_10x10.lua Speedball] - shows boxes that are generated completely algorithmically.&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/Mearth_v4.lua#L6 Middle-Earth] - interesting team names.&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/Adansonia%20v2.lua Adansonia v2] - shows synchronizing boxes across map versions.&lt;br /&gt;
* [https://github.com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Configs/StartBoxes/duck.lua Duck] - boxless config for silly maps where everybody can start anywhere.&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]{{Navbox manual}}&lt;/div&gt;</summary>
		<author><name>Sprung</name></author>
		
	</entry>
</feed>