<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.soldat2.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Nerf+cardboard</id>
	<title>Soldat2 Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.soldat2.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Nerf+cardboard"/>
	<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Special:Contributions/Nerf_cardboard"/>
	<updated>2026-05-05T21:39:23Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.38.4</generator>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Custom_Modifiers&amp;diff=157</id>
		<title>Custom Modifiers</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Custom_Modifiers&amp;diff=157"/>
		<updated>2023-06-10T17:48:56Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Modifiers are snippets of configuration that partially override the default game config, which makes for some nice match variation in servers.&lt;br /&gt;
&lt;br /&gt;
Check the default configuration file &amp;lt;code&amp;gt;Modifiers/_default.json&amp;lt;/code&amp;gt; (contains anything not related to game modes: eg weapons, player movement, ...) as a reference of available parameters.&lt;br /&gt;
Follow the '''exact''' same structure as in this file - ie. all parameters are within the &amp;quot;Objects&amp;quot; key.&lt;br /&gt;
&lt;br /&gt;
To customize game mode configuration, there is the special namespace &amp;quot;Objects.Rules&amp;quot;. This also allows to load custom scripts, by adding an object key with the script class name.&lt;br /&gt;
&lt;br /&gt;
Some more hints:&lt;br /&gt;
* You only need to specify the parameter you want to change. Due to some bugs, this does not work for some objects (eg MeleeWeapon) - there all parameters of the object need to be specified.&lt;br /&gt;
* Its possible to add or remove elements from lists, instead of replacing the whole default list. To do this, prefix the parameter name with &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; (eg  &amp;lt;code&amp;gt;&amp;quot;-PrimaryWeapons&amp;quot;: [&amp;quot;Minigun&amp;quot;]&amp;lt;/code&amp;gt;). This improves composability of multiple Modifiers. On non-lists, a &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;-prefix removes the whole element.&lt;br /&gt;
* Changes are applied whenever the file is saved. This works for most parameters, but not all.&lt;br /&gt;
* The JSON parser understands JSON2, so trailing commas and comments are allowed.&lt;br /&gt;
&lt;br /&gt;
= Example =&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;Objects&amp;quot;: {&lt;br /&gt;
    &amp;quot;Rules&amp;quot;: {&lt;br /&gt;
      // customizing game rules parameters&lt;br /&gt;
      &amp;quot;StandardGameplay&amp;quot;: {&lt;br /&gt;
        &amp;quot;DamageModifier&amp;quot;: 2&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;-RandomDrops&amp;quot;: {}&lt;br /&gt;
      // loading a custom script&lt;br /&gt;
      &amp;quot;MyCustomScript&amp;quot;: {&lt;br /&gt;
        &amp;quot;SomeScriptParameter&amp;quot;: 1.0&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;Gostek&amp;quot;: {&lt;br /&gt;
      &amp;quot;PhysicsObject&amp;quot;: {&lt;br /&gt;
        &amp;quot;Mass&amp;quot;: 0.65, // faster movement by making players lighter&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;Meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;Description&amp;quot;: &amp;quot;this text shows up as a tooltip in the lobby&amp;quot;,&lt;br /&gt;
    &amp;quot;Author&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;Version&amp;quot;: &amp;quot;1.0&amp;quot;,&lt;br /&gt;
    &amp;quot;Game&amp;quot;: &amp;quot;Soldat2&amp;quot;,&lt;br /&gt;
    &amp;quot;GameVersion&amp;quot;: &amp;quot;0.8.67&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Modding]]&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Server_Configuration&amp;diff=156</id>
		<title>Server Configuration</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Server_Configuration&amp;diff=156"/>
		<updated>2023-06-10T17:46:45Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Config Files =&lt;br /&gt;
&lt;br /&gt;
== autoconfig.ini ==&lt;br /&gt;
Contains basic settings like server name, password, player limit, bot count, lobby mode.&lt;br /&gt;
&lt;br /&gt;
Most relevant options are fairly self-explanatory.&lt;br /&gt;
You should *change at least the following options*:&lt;br /&gt;
* &amp;lt;code&amp;gt;Name&amp;lt;/code&amp;gt; - sets the server name&lt;br /&gt;
* &amp;lt;code&amp;gt;MaxPlayers&amp;lt;/code&amp;gt; - set the maximum of players on the server&lt;br /&gt;
* &amp;lt;code&amp;gt;VisibleInGamesList&amp;lt;/code&amp;gt; - set to false, if you host in LAN only, to not confuse external players with your server in the server listing&lt;br /&gt;
&lt;br /&gt;
'''''Note''''': only ever write changes to autoconfig.ini after the server has stopped - your changes will be lost as the file is rewritten when the server stops.&lt;br /&gt;
&lt;br /&gt;
All options in autoconfig.ini can be defined via CLI arguments (eg &amp;lt;code&amp;gt;./soldat2 ServerPassword=foobar&amp;lt;/code&amp;gt;), as well as dynamically in-game via rcon commands (eg &amp;lt;code&amp;gt;rcon set ServerPassword foobar&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rules/*/*.json ==&lt;br /&gt;
Each JSON file defines a game mode (eg CTF, DM, etc).&lt;br /&gt;
In these files match duration, score limit, teams, default weapon selection, medkits, etcpp are defined.&lt;br /&gt;
&lt;br /&gt;
== Levels/*/*.json ==&lt;br /&gt;
Contains custom maps. Get some maps from [https://tms2.jrgp.org/ TMS2]. See also [[Mapping | Mapping Guide]].&lt;br /&gt;
&lt;br /&gt;
== Modifiers/*/*.json ==&lt;br /&gt;
Contains modifiers that customize some parameters of the game (and can be voted for by players in the lobby for each match). See [[Custom Modifiers]] for details.&lt;br /&gt;
&lt;br /&gt;
== Scripts/*/*.cs ==&lt;br /&gt;
C# scripts that define custom behaviour. See [[:Category:Modding]].&lt;br /&gt;
&lt;br /&gt;
== Cycles/*/*.json ==&lt;br /&gt;
Map rotations (for when lobby is disabled).&lt;br /&gt;
&lt;br /&gt;
== greet.txt ==&lt;br /&gt;
Server info message showing in the popup before each match. Supports [TODO custom formatting]&lt;br /&gt;
&lt;br /&gt;
= Examples =&lt;br /&gt;
You can use the following public server configurations as examples, or a baseline for your own configuration:&lt;br /&gt;
&lt;br /&gt;
* [https://codeberg.org/norwin/soldat2-custom/src/branch/server/nolobby @noerws Vote Fast server] (among others)&lt;br /&gt;
&lt;br /&gt;
= How to... =&lt;br /&gt;
&lt;br /&gt;
== customize match duration, score limit ==&lt;br /&gt;
&lt;br /&gt;
Edit each file in &amp;lt;code&amp;gt;Rules/Standard/&amp;lt;/code&amp;gt; and set:&lt;br /&gt;
* &amp;lt;code&amp;gt;Match.MatchSecs&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Match.ScoreLimit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Manage bots ==&lt;br /&gt;
&lt;br /&gt;
In autoconfig.ini, set:&lt;br /&gt;
&lt;br /&gt;
* FillBotsCount - the amount of bots added to an empty server. they will be replaced by human players.&lt;br /&gt;
* FillBotsDifficulty - 0 is stupid, 3 is butcher&lt;br /&gt;
&lt;br /&gt;
== Set up admin commands ==&lt;br /&gt;
&lt;br /&gt;
In autoconfig.ini, set:&lt;br /&gt;
&lt;br /&gt;
* AdminPlayfabID - your Playfab ID to be admin automatically (To find your Playfab ID, start the server and join with your client. Your Playfab ID will show up in the server logs as &amp;lt;code&amp;gt;1 YOUR_NAME joined the server [YOUR_PLAYFAB_ID]&amp;lt;/code&amp;gt;)&lt;br /&gt;
* RconPassword - if set, more than one player can send admin commands.&lt;br /&gt;
&lt;br /&gt;
== Play pre-selected maps &amp;amp; game modes only ==&lt;br /&gt;
&lt;br /&gt;
In autoconfig.ini, set:&lt;br /&gt;
&lt;br /&gt;
* UseLobby = False&lt;br /&gt;
* AllowVoting = False&lt;br /&gt;
* GamesCycleFile = Cycles/Custom/selected-maps.json&lt;br /&gt;
&lt;br /&gt;
Having this, list the maps you want in your game cycle:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano Cycles/Custom/selected-maps.json&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
  &amp;quot;Rules&amp;quot;: &amp;quot;Deathmatch&amp;quot;,&lt;br /&gt;
  &amp;quot;Level&amp;quot;: &amp;quot;dm_epitaph&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Dedicated Server]]&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Scripting_Examples&amp;diff=155</id>
		<title>Scripting Examples</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Scripting_Examples&amp;diff=155"/>
		<updated>2023-06-10T11:48:59Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: move to Category:Modding&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains a selection of unofficial scripts to demonstrate the usage of various aspects of Soldat 2's scripting API.&lt;br /&gt;
&lt;br /&gt;
== Team Balancer ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C#&amp;quot;&amp;gt;&lt;br /&gt;
// a basic team-balancing script to illustrate how to implement simple&lt;br /&gt;
// chat-commands using S2 scripting&lt;br /&gt;
&lt;br /&gt;
// 'using' directives let you omit namespacing&lt;br /&gt;
// eg: Player rather than the full Teal.Player&lt;br /&gt;
using System.Collections;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using UnityEngine;&lt;br /&gt;
using Teal;&lt;br /&gt;
&lt;br /&gt;
[DisallowMultipleComponent]&lt;br /&gt;
&lt;br /&gt;
// the class name as defined here is what you need to refer to in any json&lt;br /&gt;
// config files, NOT the name of this script file. Case sensitive.&lt;br /&gt;
public class Balance : MonoBehaviour&lt;br /&gt;
{&lt;br /&gt;
    // called when the script is loaded&lt;br /&gt;
    private void Awake()&lt;br /&gt;
    {&lt;br /&gt;
        // this registers a function (OnPlayerChat in this case) to be called&lt;br /&gt;
        // whenever a player chat event occurs&lt;br /&gt;
        // for other types of events, check in the modding channel on S2 discord&lt;br /&gt;
        GameChat.instance.OnChat.AddListener(OnPlayerChat);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // called before the script is unloaded, probably when the server closes/restarts&lt;br /&gt;
    private void OnDestroy()&lt;br /&gt;
    {&lt;br /&gt;
        // presumably important to prevent your script from continuing to respond&lt;br /&gt;
        // to events after it gets removed/disabled&lt;br /&gt;
        GameChat.instance.OnChat.RemoveListener(OnPlayerChat);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // user-defined function for handling chat events - the name can be any&lt;br /&gt;
    // (valid) identifier, only the signature is important&lt;br /&gt;
    void OnPlayerChat(Player p, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        // we are only implementing a single command in this example, but if&lt;br /&gt;
        // you want to have multiple commands a switch/case statement is probably&lt;br /&gt;
        // more appropriate&lt;br /&gt;
        if( msg == &amp;quot;!bal&amp;quot; || msg == &amp;quot;!balance&amp;quot; )&lt;br /&gt;
        {&lt;br /&gt;
            // first we grab a list of the players on each team&lt;br /&gt;
            List&amp;lt;Player&amp;gt; t0 = MonoSingleton&amp;lt;Players&amp;gt;.Get.GetPlayersOfTeam(0);&lt;br /&gt;
            List&amp;lt;Player&amp;gt; t1 = MonoSingleton&amp;lt;Players&amp;gt;.Get.GetPlayersOfTeam(1);&lt;br /&gt;
&lt;br /&gt;
            // integer division rounds down, so we will only do something if teams&lt;br /&gt;
            // are unbalanced by more than one player&lt;br /&gt;
            int hdiff = (t0.Count-t1.Count)/2;&lt;br /&gt;
            if( hdiff &amp;gt; 0 )&lt;br /&gt;
            { // more players on team 0, move half the difference to team 1&lt;br /&gt;
                for( int i=0; i&amp;lt;hdiff; i++ ) t0[i].props[&amp;quot;team&amp;quot;] = 1;&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            else if( hdiff &amp;lt; 0 )&lt;br /&gt;
            { // more players on team 1, move half the difference to team 0&lt;br /&gt;
                for( int i=0; i&amp;lt;-hdiff; i++ ) t1[i].props[&amp;quot;team&amp;quot;] = 0;&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Modding]]&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Scripting_Events&amp;diff=154</id>
		<title>Scripting Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Scripting_Events&amp;diff=154"/>
		<updated>2023-06-10T11:48:44Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: move to Category:Modding&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The main method for reacting to gameplay events in Soldat 2 scripting is by registering ''listeners''. This is done by calling the &amp;lt;code&amp;gt;AddListener()&amp;lt;/code&amp;gt; function, usually on the &amp;lt;code&amp;gt;Eventor&amp;lt;/code&amp;gt; object.&lt;br /&gt;
&lt;br /&gt;
[[Category:Modding]]&lt;br /&gt;
&lt;br /&gt;
== Eventor Events ==&lt;br /&gt;
In the case of Eventor listeners, you will need to specify both the event type to listen for, as well as a function to be called when the event occurs. Callback functions should have the signature &amp;lt;code&amp;gt;void cb_func(IGameEvent)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The event types that are used with Eventor are defined by the &amp;lt;code&amp;gt;Events&amp;lt;/code&amp;gt; enum, which currently contains:&lt;br /&gt;
* None&lt;br /&gt;
* New_Connection (GlobalPlayerConnectionEvent)&lt;br /&gt;
* Created&lt;br /&gt;
* Destroyed&lt;br /&gt;
* Died&lt;br /&gt;
* Add_Player&lt;br /&gt;
* Remove_Player&lt;br /&gt;
* Player_Joined (GlobalPlayerEvent has .Player)&lt;br /&gt;
* Player_Assigned&lt;br /&gt;
* Player_Left&lt;br /&gt;
* Player_Changed_Team&lt;br /&gt;
* Player_Unassigned&lt;br /&gt;
* Level_Loaded&lt;br /&gt;
* Rules_Loaded&lt;br /&gt;
* Impacted&lt;br /&gt;
* Weapon_Selected&lt;br /&gt;
* Trigger (GlobalTriggerEvent)&lt;br /&gt;
* Match_Waiting&lt;br /&gt;
* Match_Warmup&lt;br /&gt;
* Match_Started&lt;br /&gt;
* Match_Ended&lt;br /&gt;
* Hit (GlobalHitEvent)&lt;br /&gt;
* Camera_Target_Changed&lt;br /&gt;
* Camera_Created&lt;br /&gt;
* Powerup_Started&lt;br /&gt;
* Powerup_Ended&lt;br /&gt;
* Bullet_Created&lt;br /&gt;
* Bot_Assigned&lt;br /&gt;
* Flag_Captured&lt;br /&gt;
* Flag_Returned&lt;br /&gt;
* Flag_Grabbed&lt;br /&gt;
* Use_Weapon&lt;br /&gt;
* Construct_AddBody&lt;br /&gt;
* Construct_RemoveBody&lt;br /&gt;
* Properties_Changed&lt;br /&gt;
* Item_Dropped (GlobalItemEvent has .Item and .Holder)&lt;br /&gt;
* Item_Picked (GlobalItemEvent has .Item and .Holder)&lt;br /&gt;
* AssignedNetworkId&lt;br /&gt;
* Changed_Team&lt;br /&gt;
* Request_Spawn&lt;br /&gt;
* End_Condition&lt;br /&gt;
* Reserved&lt;br /&gt;
&lt;br /&gt;
A full example of an AddListener call is &amp;lt;code&amp;gt;Eventor.AddListener(Events.Died, OnPlayerDied)&amp;lt;/code&amp;gt;. These calls are usually placed within the &amp;lt;code&amp;gt;Awake()&amp;lt;/code&amp;gt; function of the script, which is executed when the script is loaded. Note that each AddListener call should be paired with a RemoveListener call (usually in the &amp;lt;code&amp;gt;OnDestroy()&amp;lt;/code&amp;gt; function) to ensure that the script does not continue to respond to events after it has been disabled. See the Unity manual entry for the [https://docs.unity3d.com/2020.1/Documentation/ScriptReference/MonoBehaviour.html MonoBehaviour] class for other special functions.&lt;br /&gt;
&lt;br /&gt;
== Other Events ==&lt;br /&gt;
Not all necessary game events are currently accessible with just the Eventor object, methods for adding listeners to other useful events are listed below:&lt;br /&gt;
* Player chat events: &amp;lt;code&amp;gt;GameChat.instance.OnChat.AddListener()&amp;lt;/code&amp;gt;, only takes a callback function as an argument, required signature for callback is &amp;lt;code&amp;gt;void cb_func(Player, string)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If an event is not available for a specific gameplay element you are interested in responding to, it is also possible to use a polling approach to detect that event by using either the &amp;lt;code&amp;gt;Update()&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;FixedUpdate()&amp;lt;/code&amp;gt; functions which are called periodically by the engine. For example, something equivalent to this is used in the official &amp;lt;code&amp;gt;Climb.cs&amp;lt;/code&amp;gt; script to detect when any player gets within 1.5 range of a checkpoint:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C#&amp;quot;&amp;gt;&lt;br /&gt;
void FixedUpdate() // runs 10 times per second&lt;br /&gt;
{&lt;br /&gt;
    for (int i = checkpoints.Count - 1; i &amp;gt;= 0; i--)&lt;br /&gt;
    {&lt;br /&gt;
        foreach (Player player in Players.Get.GetAlive())&lt;br /&gt;
        {&lt;br /&gt;
            // for each (player,checkpoint) pair, check if the distance between them is less than 1.5&lt;br /&gt;
            if ((player.controlled.transform.position - checkpoints[i].transform.position).magnitude &amp;lt; 1.5f)&lt;br /&gt;
            {&lt;br /&gt;
                checkpoints.RemoveAt(i);&lt;br /&gt;
                lastCheckpointPlayer = player;&lt;br /&gt;
                break;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Category:Scripting&amp;diff=153</id>
		<title>Category:Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Category:Scripting&amp;diff=153"/>
		<updated>2023-06-10T11:48:27Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: drop this nested category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Scripting_Introduction&amp;diff=152</id>
		<title>Scripting Introduction</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Scripting_Introduction&amp;diff=152"/>
		<updated>2023-06-10T11:47:41Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: move to Category:Modding&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Scripting in Soldat 2 is done in a Unity/C# environment. For a script to be usable in-game, the script file must be placed under &amp;lt;code&amp;gt;Soldat2/Scripts/&amp;lt;/code&amp;gt; and there needs to be a ruleset that specifies that script in the &amp;lt;i&amp;gt;GameScript&amp;lt;/i&amp;gt; object in its json - for example, see &amp;lt;code&amp;gt;Soldat2/Rules/Standard/Climb.json&amp;lt;/code&amp;gt;. The script can be tested by starting a game that uses that ruleset.&lt;br /&gt;
&lt;br /&gt;
[[Category:Modding]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Scripting Resources ==&lt;br /&gt;
The Soldat 2 engine uses Unity, so it may be useful to familiarise yourself with the [https://docs.unity3d.com/2020.1/Documentation/Manual/index.html Unity Manual].&lt;br /&gt;
&lt;br /&gt;
There is some [https://soldat2.com/docs/ preliminary documentation] for the Soldat 2 engine, however it is currently rather limited.&lt;br /&gt;
&lt;br /&gt;
Some examples of scripts can be found in your Soldat 2 game directory under the path &amp;lt;code&amp;gt;Soldat2/Scripts/Standard/&amp;lt;/code&amp;gt;. Some unofficial examples are available at [[Scripting Examples]].&lt;br /&gt;
&lt;br /&gt;
See [[:Category:Scripting]] for a list of all pages on this wiki related to scripting.&lt;br /&gt;
&lt;br /&gt;
== Using Scripts ==&lt;br /&gt;
&lt;br /&gt;
A script can be applied to a match via [[Modifiers]] or via a [[Game Mode]] (&amp;quot;Rules&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== In a modifier ===&lt;br /&gt;
Example of a modifier &amp;lt;code&amp;gt;Modifiers/Custom/FlagIsPoison.json&amp;lt;/code&amp;gt; applying the &amp;lt;code&amp;gt;Scripts/Custom/FlagIsPoison.cs&amp;lt;/code&amp;gt; script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;Objects&amp;quot;: {&lt;br /&gt;
    &amp;quot;Rules&amp;quot;: {&lt;br /&gt;
      &amp;quot;FlagIsPoison&amp;quot;: {&lt;br /&gt;
        &amp;quot;FlagDamagePerSecond&amp;quot;: 3.0&lt;br /&gt;
      }&lt;br /&gt;
    }   &lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;Meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;Description&amp;quot;: &amp;quot;(applies the FlagIsPoison script)&amp;quot;,&lt;br /&gt;
    &amp;quot;Author&amp;quot;: &amp;quot;noerw&amp;quot;,&lt;br /&gt;
    &amp;quot;Version&amp;quot;: 1.0&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A script can be parametrized, where the parameters are defined in the modifier or rule definition. In the above example the &amp;lt;code&amp;gt;FlagDamagePerSecond&amp;lt;/code&amp;gt; parameter is applied when the script class contains a &amp;lt;code&amp;gt;JsonProperty&amp;lt;/code&amp;gt; with a default value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C#&amp;quot;&amp;gt;&lt;br /&gt;
[JsonProperty(&amp;quot;FlagDamagePerSecond&amp;quot;)] public float flagDPS = 5.0;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== In a rule / game mode ===&lt;br /&gt;
&lt;br /&gt;
To add a script to all matches of a gamemode, edit &amp;lt;code&amp;gt;Rules/Custom/YourGameMode.json&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Add a script by adding its class name as a key to the game mode definition (on the same level as &amp;lt;code&amp;gt;GameScript&amp;lt;/code&amp;gt;). Inside that object, you can define parameters the script potentially exposes via &amp;lt;code&amp;gt;JSONProperty&amp;lt;/code&amp;gt; tags:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  ...&lt;br /&gt;
      &amp;quot;GameScript&amp;quot;: { ... },&lt;br /&gt;
      &amp;quot;YourScriptName&amp;quot;: {&lt;br /&gt;
        &amp;quot;ExampleParameter&amp;quot;: true,&lt;br /&gt;
      }&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
An alternative way, is to add the class name of your script to the &amp;lt;code&amp;gt;GameScript.Scripts&amp;lt;/code&amp;gt; array:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  ...&lt;br /&gt;
      &amp;quot;GameScript&amp;quot;: {&lt;br /&gt;
        &amp;quot;Scripts&amp;quot;: [&lt;br /&gt;
          ... potentially other scripts ...,&lt;br /&gt;
          &amp;quot;YourScriptName&amp;quot;&lt;br /&gt;
        ]&lt;br /&gt;
      }&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Custom_Modifiers&amp;diff=151</id>
		<title>Custom Modifiers</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Custom_Modifiers&amp;diff=151"/>
		<updated>2023-06-10T11:46:53Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: add to Category:Modding&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Modifiers are snippets of configuration that partially override the default game config, which makes for some nice match variation in servers.&lt;br /&gt;
&lt;br /&gt;
Check the default configuration file &amp;lt;code&amp;gt;Modifiers/_default.json&amp;lt;/code&amp;gt; (contains anything not related to game modes: eg weapons, player movement, ...) as a reference of available parameters.&lt;br /&gt;
Follow the '''exact''' same structure as in this file - ie. all parameters are within the &amp;quot;Objects&amp;quot; key.&lt;br /&gt;
&lt;br /&gt;
To customize game mode configuration, there is the special namespace &amp;quot;Objects.Rules&amp;quot;. This also allows to load custom scripts, by naming it.&lt;br /&gt;
&lt;br /&gt;
Some more hints:&lt;br /&gt;
* You only need to specify the parameter you want to change. Due to some bugs, this does not work for some objects (eg MeleeWeapon).&lt;br /&gt;
* Its possible to add or remove elements from lists, instead of replacing the whole default list. To do this, prefix the parameter name with &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; (eg  &amp;lt;code&amp;gt;&amp;quot;-PrimaryWeapons&amp;quot;: [&amp;quot;Minigun&amp;quot;]&amp;lt;/code&amp;gt;). This improves composability of multiple Modifiers. On non-lists, a &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;-prefix removes the whole element.&lt;br /&gt;
* Changes are applied whenever the file is saved. This works for most parameters, but not all.&lt;br /&gt;
* The JSON parser understands JSON2, so trailing commas and comments are allowed.&lt;br /&gt;
&lt;br /&gt;
= Example =&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;Objects&amp;quot;: {&lt;br /&gt;
    &amp;quot;Rules&amp;quot;: {&lt;br /&gt;
      // customizing game rules parameters&lt;br /&gt;
      &amp;quot;StandardGameplay&amp;quot;: {&lt;br /&gt;
        &amp;quot;DamageModifier&amp;quot;: 2&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;-RandomDrops&amp;quot;: {}&lt;br /&gt;
      // loading a custom script&lt;br /&gt;
      &amp;quot;MyCustomScript&amp;quot;: {&lt;br /&gt;
        &amp;quot;SomeScriptParameter&amp;quot;: 1.0&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;Gostek&amp;quot;: {&lt;br /&gt;
      &amp;quot;PhysicsObject&amp;quot;: {&lt;br /&gt;
        &amp;quot;Mass&amp;quot;: 0.65, // faster movement by making players lighter&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;Meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;Description&amp;quot;: &amp;quot;this text shows up as a tooltip in the lobby&amp;quot;,&lt;br /&gt;
    &amp;quot;Author&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;Version&amp;quot;: &amp;quot;1.0&amp;quot;,&lt;br /&gt;
    &amp;quot;Game&amp;quot;: &amp;quot;Soldat2&amp;quot;,&lt;br /&gt;
    &amp;quot;GameVersion&amp;quot;: &amp;quot;0.8.67&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Modding]]&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Custom_Modifiers&amp;diff=150</id>
		<title>Custom Modifiers</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Custom_Modifiers&amp;diff=150"/>
		<updated>2023-06-10T11:43:46Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Modifiers are snippets of configuration that partially override the default game config, which makes for some nice match variation in servers.&lt;br /&gt;
&lt;br /&gt;
Check the default configuration file &amp;lt;code&amp;gt;Modifiers/_default.json&amp;lt;/code&amp;gt; (contains anything not related to game modes: eg weapons, player movement, ...) as a reference of available parameters.&lt;br /&gt;
Follow the '''exact''' same structure as in this file - ie. all parameters are within the &amp;quot;Objects&amp;quot; key.&lt;br /&gt;
&lt;br /&gt;
To customize game mode configuration, there is the special namespace &amp;quot;Objects.Rules&amp;quot;. This also allows to load custom scripts, by naming it.&lt;br /&gt;
&lt;br /&gt;
Some more hints:&lt;br /&gt;
* You only need to specify the parameter you want to change. Due to some bugs, this does not work for some objects (eg MeleeWeapon).&lt;br /&gt;
* Its possible to add or remove elements from lists, instead of replacing the whole default list. To do this, prefix the parameter name with &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; (eg  &amp;lt;code&amp;gt;&amp;quot;-PrimaryWeapons&amp;quot;: [&amp;quot;Minigun&amp;quot;]&amp;lt;/code&amp;gt;). This improves composability of multiple Modifiers. On non-lists, a &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;-prefix removes the whole element.&lt;br /&gt;
* Changes are applied whenever the file is saved. This works for most parameters, but not all.&lt;br /&gt;
* The JSON parser understands JSON2, so trailing commas and comments are allowed.&lt;br /&gt;
&lt;br /&gt;
= Example =&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;Objects&amp;quot;: {&lt;br /&gt;
    &amp;quot;Rules&amp;quot;: {&lt;br /&gt;
      // customizing game rules parameters&lt;br /&gt;
      &amp;quot;StandardGameplay&amp;quot;: {&lt;br /&gt;
        &amp;quot;DamageModifier&amp;quot;: 2&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;-RandomDrops&amp;quot;: {}&lt;br /&gt;
      // loading a custom script&lt;br /&gt;
      &amp;quot;MyCustomScript&amp;quot;: {&lt;br /&gt;
        &amp;quot;SomeScriptParameter&amp;quot;: 1.0&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;Gostek&amp;quot;: {&lt;br /&gt;
      &amp;quot;PhysicsObject&amp;quot;: {&lt;br /&gt;
        &amp;quot;Mass&amp;quot;: 0.65, // faster movement by making players lighter&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;Meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;Description&amp;quot;: &amp;quot;this text shows up as a tooltip in the lobby&amp;quot;,&lt;br /&gt;
    &amp;quot;Author&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;Version&amp;quot;: &amp;quot;1.0&amp;quot;,&lt;br /&gt;
    &amp;quot;Game&amp;quot;: &amp;quot;Soldat2&amp;quot;,&lt;br /&gt;
    &amp;quot;GameVersion&amp;quot;: &amp;quot;0.8.67&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Custom_Modifiers&amp;diff=149</id>
		<title>Custom Modifiers</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Custom_Modifiers&amp;diff=149"/>
		<updated>2023-06-10T11:43:05Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: Created page with &amp;quot;Modifiers are snippets of configuration that partially override the default game config, which makes for some nice match variation in servers.  Check the default configuration file &amp;lt;code&amp;gt;Modifiers/_default.json&amp;lt;/code&amp;gt; (anything not related to game modes: weapons player movement) as a reference of available parameters. Follow the '''exact''' same structure as in this file - ie. all parameters are within the &amp;quot;Objects&amp;quot; key.  To customize game mode configuration, there is th...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Modifiers are snippets of configuration that partially override the default game config, which makes for some nice match variation in servers.&lt;br /&gt;
&lt;br /&gt;
Check the default configuration file &amp;lt;code&amp;gt;Modifiers/_default.json&amp;lt;/code&amp;gt; (anything not related to game modes: weapons player movement) as a reference of available parameters.&lt;br /&gt;
Follow the '''exact''' same structure as in this file - ie. all parameters are within the &amp;quot;Objects&amp;quot; key.&lt;br /&gt;
&lt;br /&gt;
To customize game mode configuration, there is the special namespace &amp;quot;Objects.Rules&amp;quot;. This also allows to load custom scripts, by naming it.&lt;br /&gt;
&lt;br /&gt;
Some more hints:&lt;br /&gt;
* You only need to specify the parameter you want to change. Due to some bugs, this does not work for some objects (eg MeleeWeapon).&lt;br /&gt;
* Its possible to add or remove elements from lists, instead of replacing the whole default list. To do this, prefix the parameter name with &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; (eg  &amp;lt;code&amp;gt;&amp;quot;-PrimaryWeapons&amp;quot;: [&amp;quot;Minigun&amp;quot;]&amp;lt;/code&amp;gt;). This improves composability of multiple Modifiers. On non-lists, a &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;-prefix removes the whole element.&lt;br /&gt;
* Changes are applied whenever the file is saved. This works for most parameters, but not all.&lt;br /&gt;
* The JSON parser understands JSON2, so trailing commas and comments are allowed.&lt;br /&gt;
&lt;br /&gt;
= Example =&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;Objects&amp;quot;: {&lt;br /&gt;
    &amp;quot;Rules&amp;quot;: {&lt;br /&gt;
      // customizing game rules parameters&lt;br /&gt;
      &amp;quot;StandardGameplay&amp;quot;: {&lt;br /&gt;
        &amp;quot;DamageModifier&amp;quot;: 2&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;-RandomDrops&amp;quot;: {}&lt;br /&gt;
      // loading a custom script&lt;br /&gt;
      &amp;quot;MyCustomScript&amp;quot;: {&lt;br /&gt;
        &amp;quot;SomeScriptParameter&amp;quot;: 1.0&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;Gostek&amp;quot;: {&lt;br /&gt;
      &amp;quot;PhysicsObject&amp;quot;: {&lt;br /&gt;
        &amp;quot;Mass&amp;quot;: 0.65, // faster movement by making players lighter&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;Meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;Description&amp;quot;: &amp;quot;this text shows up as a tooltip in the lobby&amp;quot;,&lt;br /&gt;
    &amp;quot;Author&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;Version&amp;quot;: &amp;quot;1.0&amp;quot;,&lt;br /&gt;
    &amp;quot;Game&amp;quot;: &amp;quot;Soldat2&amp;quot;,&lt;br /&gt;
    &amp;quot;GameVersion&amp;quot;: &amp;quot;0.8.67&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Server_Configuration&amp;diff=148</id>
		<title>Server Configuration</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Server_Configuration&amp;diff=148"/>
		<updated>2023-06-10T11:14:26Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Config Files =&lt;br /&gt;
&lt;br /&gt;
== autoconfig.ini ==&lt;br /&gt;
Contains basic settings like server name, password, player limit, bot count, lobby mode.&lt;br /&gt;
&lt;br /&gt;
Most relevant options are fairly self-explanatory.&lt;br /&gt;
You should *change at least the following options*:&lt;br /&gt;
* &amp;lt;code&amp;gt;Name&amp;lt;/code&amp;gt; - sets the server name&lt;br /&gt;
* &amp;lt;code&amp;gt;MaxPlayers&amp;lt;/code&amp;gt; - set the maximum of players on the server&lt;br /&gt;
* &amp;lt;code&amp;gt;VisibleInGamesList&amp;lt;/code&amp;gt; - set to false, if you host in LAN only, to not confuse external players with your server in the server listing&lt;br /&gt;
&lt;br /&gt;
'''''Note''''': only ever write changes to autoconfig.ini after the server has stopped - your changes will be lost as the file is rewritten when the server stops.&lt;br /&gt;
&lt;br /&gt;
All options in autoconfig.ini can be defined via CLI arguments (eg &amp;lt;code&amp;gt;./soldat2 ServerPassword=foobar&amp;lt;/code&amp;gt;), as well as dynamically in-game via rcon commands (eg &amp;lt;code&amp;gt;rcon set ServerPassword foobar&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rules/*/*.json ==&lt;br /&gt;
Each JSON file defines a game mode (eg CTF, DM, etc).&lt;br /&gt;
In these files match duration, score limit, teams, default weapon selection, medkits, etcpp are defined.&lt;br /&gt;
&lt;br /&gt;
== Levels/*/*.json ==&lt;br /&gt;
Contains custom maps. Get some maps from [https://tms2.jrgp.org/ TMS2]. See also [[Mapping | Mapping Guide]].&lt;br /&gt;
&lt;br /&gt;
== Modifiers/*/*.json ==&lt;br /&gt;
Contains modifiers that customize some parameters of the game (and can be voted for by players in the lobby for each match). See [[Custom Modifiers]] for details.&lt;br /&gt;
&lt;br /&gt;
== Scripts/*/*.cs ==&lt;br /&gt;
C# scripts that define custom behaviour. See [[:Category:Scripting]].&lt;br /&gt;
&lt;br /&gt;
== Cycles/*/*.json ==&lt;br /&gt;
Map rotations (for when lobby is disabled).&lt;br /&gt;
&lt;br /&gt;
== greet.txt ==&lt;br /&gt;
Server info message showing in the popup before each match. Supports [TODO custom formatting]&lt;br /&gt;
&lt;br /&gt;
= Examples =&lt;br /&gt;
You can use the following public server configurations as examples, or a baseline for your own configuration:&lt;br /&gt;
&lt;br /&gt;
* [https://codeberg.org/norwin/soldat2-custom/src/branch/server/nolobby @noerws Vote Fast server] (among others)&lt;br /&gt;
&lt;br /&gt;
= How to... =&lt;br /&gt;
&lt;br /&gt;
== customize match duration, score limit ==&lt;br /&gt;
&lt;br /&gt;
Edit each file in &amp;lt;code&amp;gt;Rules/Standard/&amp;lt;/code&amp;gt; and set:&lt;br /&gt;
* &amp;lt;code&amp;gt;Match.MatchSecs&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Match.ScoreLimit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Manage bots ==&lt;br /&gt;
&lt;br /&gt;
In autoconfig.ini, set:&lt;br /&gt;
&lt;br /&gt;
* FillBotsCount - the amount of bots added to an empty server. they will be replaced by human players.&lt;br /&gt;
* FillBotsDifficulty - 0 is stupid, 3 is butcher&lt;br /&gt;
&lt;br /&gt;
== Set up admin commands ==&lt;br /&gt;
&lt;br /&gt;
In autoconfig.ini, set:&lt;br /&gt;
&lt;br /&gt;
* AdminPlayfabID - your Playfab ID to be admin automatically (To find your Playfab ID, start the server and join with your client. Your Playfab ID will show up in the server logs as &amp;lt;code&amp;gt;1 YOUR_NAME joined the server [YOUR_PLAYFAB_ID]&amp;lt;/code&amp;gt;)&lt;br /&gt;
* RconPassword - if set, more than one player can send admin commands.&lt;br /&gt;
&lt;br /&gt;
== Play pre-selected maps &amp;amp; game modes only ==&lt;br /&gt;
&lt;br /&gt;
In autoconfig.ini, set:&lt;br /&gt;
&lt;br /&gt;
* UseLobby = False&lt;br /&gt;
* AllowVoting = False&lt;br /&gt;
* GamesCycleFile = Cycles/Custom/selected-maps.json&lt;br /&gt;
&lt;br /&gt;
Having this, list the maps you want in your game cycle:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano Cycles/Custom/selected-maps.json&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
  &amp;quot;Rules&amp;quot;: &amp;quot;Deathmatch&amp;quot;,&lt;br /&gt;
  &amp;quot;Level&amp;quot;: &amp;quot;dm_epitaph&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Dedicated Server]]&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Server_Configuration&amp;diff=147</id>
		<title>Server Configuration</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Server_Configuration&amp;diff=147"/>
		<updated>2023-06-10T11:11:16Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: restructure&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Config Files =&lt;br /&gt;
&lt;br /&gt;
== autoconfig.ini ==&lt;br /&gt;
Contains basic settings like server name, password, player limit, bot count, lobby mode.&lt;br /&gt;
&lt;br /&gt;
Most relevant options are fairly self-explanatory.&lt;br /&gt;
You should *change at least the following options*:&lt;br /&gt;
* &amp;lt;code&amp;gt;Name&amp;lt;/code&amp;gt; - sets the server name&lt;br /&gt;
* &amp;lt;code&amp;gt;MaxPlayers&amp;lt;/code&amp;gt; - set the maximum of players on the server&lt;br /&gt;
* &amp;lt;code&amp;gt;VisibleInGamesList&amp;lt;/code&amp;gt; - set to false, if you host in LAN only, to not confuse external players with your server in the server listing&lt;br /&gt;
&lt;br /&gt;
'''''Note''''': only ever write changes to autoconfig.ini after the server has stopped - your changes will be lost as the file is rewritten when the server stops.&lt;br /&gt;
&lt;br /&gt;
All options in autoconfig.ini can be defined via CLI arguments (eg &amp;lt;code&amp;gt;./soldat2 ServerPassword=foobar&amp;lt;/code&amp;gt;), as well as dynamically in-game via rcon commands (eg &amp;lt;code&amp;gt;rcon set ServerPassword foobar&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rules/*/*.json ==&lt;br /&gt;
Each JSON file defines a game mode (eg CTF, DM, etc).&lt;br /&gt;
In these files match duration, score limit, teams, default weapon selection, medkits, etcpp are defined.&lt;br /&gt;
&lt;br /&gt;
== Levels/*/*.json ==&lt;br /&gt;
Contains custom maps. Get some maps from [https://tms2.jrgp.org/ TMS2]. See also [[Mapping | Mapping Guide]].&lt;br /&gt;
&lt;br /&gt;
== Modifiers/*/*.json ==&lt;br /&gt;
Contains modifiers that customize some parameters of the game (and can be voted for by players in the lobby for each match). See [[Custom Modifiers]] for details.&lt;br /&gt;
&lt;br /&gt;
== Scripts/*/*.cs ==&lt;br /&gt;
C# scripts that define custom behaviour. See [[:Category:Scripting]].&lt;br /&gt;
&lt;br /&gt;
== Cycles/*/*.json ==&lt;br /&gt;
Map rotations (for when lobby is disabled).&lt;br /&gt;
&lt;br /&gt;
== greet.txt ==&lt;br /&gt;
Server info message showing in the popup before each match. Supports [TODO custom formatting]&lt;br /&gt;
&lt;br /&gt;
= Examples =&lt;br /&gt;
You can use the following public server configurations as examples, or a baseline for your own configuration:&lt;br /&gt;
&lt;br /&gt;
* [https://codeberg.org/norwin/soldat2-custom/src/branch/server/nolobby @noerws Vote Fast server] (among others)&lt;br /&gt;
&lt;br /&gt;
= How to... =&lt;br /&gt;
&lt;br /&gt;
== Manage bots ==&lt;br /&gt;
&lt;br /&gt;
* FillBotsCount - the amount of bots added to an empty server. they will be replaced by human players.&lt;br /&gt;
* FillBotsDifficulty - 0 is stupid, 3 is butcher&lt;br /&gt;
&lt;br /&gt;
== Set up admin commands ==&lt;br /&gt;
&lt;br /&gt;
* AdminPlayfabID - your Playfab ID to be admin automatically (To find your Playfab ID, start the server and join with your client. Your Playfab ID will show up in the server logs as &amp;lt;code&amp;gt;1 YOUR_NAME joined the server [YOUR_PLAYFAB_ID]&amp;lt;/code&amp;gt;)&lt;br /&gt;
* RconPassword - if set, more than one player can send admin commands.&lt;br /&gt;
&lt;br /&gt;
== Play pre-selected maps &amp;amp; game modes only ==&lt;br /&gt;
&lt;br /&gt;
* UseLobby = False&lt;br /&gt;
* AllowVoting = False&lt;br /&gt;
* GamesCycleFile = Cycles/Custom/selected-maps.json&lt;br /&gt;
&lt;br /&gt;
Having this, list the maps you want in your game cycle:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano Cycles/Custom/selected-maps.json&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
  &amp;quot;Rules&amp;quot;: &amp;quot;Deathmatch&amp;quot;,&lt;br /&gt;
  &amp;quot;Level&amp;quot;: &amp;quot;dm_epitaph&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Dedicated Server]]&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Server_Configuration&amp;diff=146</id>
		<title>Server Configuration</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Server_Configuration&amp;diff=146"/>
		<updated>2023-06-10T11:02:36Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: layout&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Configuration is split across several locations:&lt;br /&gt;
* &amp;lt;code&amp;gt;autoconfig.ini&amp;lt;/code&amp;gt; - basic settings like server name, password, player limit, bot count, lobby mode.&lt;br /&gt;
* &amp;lt;code&amp;gt;Rules/&amp;lt;/code&amp;gt; - each JSON file defines a game mode (eg CTF, DM, etc). In these files match duration, score limit, teams, default weapon selection, medkits, etcpp are defined.&lt;br /&gt;
* &amp;lt;code&amp;gt;Levels/Custom/&amp;lt;/code&amp;gt; - Contains custom maps. Get some maps from [https://tms2.jrgp.org/ TMS2]. See also: [[Mapping | Mapping Guide]].&lt;br /&gt;
* &amp;lt;code&amp;gt;Modifiers/&amp;lt;/code&amp;gt; - Contains modifiers that customize some parameters of the game (and can be voted for by players in the lobby for each match). See [[Custom Modifiers]] for details.&lt;br /&gt;
* &amp;lt;code&amp;gt;Scripts/&amp;lt;/code&amp;gt; - C# scripts that define custom behaviour. See [[:Category:Scripting]].&lt;br /&gt;
* &amp;lt;code&amp;gt;Cycles/&amp;lt;/code&amp;gt; - Map rotations (for when lobby is disabled).&lt;br /&gt;
* &amp;lt;code&amp;gt;greet.txt&amp;lt;/code&amp;gt; - Server info message showing in the popup before each match. Supports [TODO custom formatting]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Example Configurations =&lt;br /&gt;
&lt;br /&gt;
Use the following public server configurations as examples, or a baseline for your own configuration:&lt;br /&gt;
&lt;br /&gt;
* [https://codeberg.org/norwin/soldat2-custom/src/branch/server/nolobby @noerws Vote Fast server] (among others)&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
&lt;br /&gt;
== autoconfig.ini ==&lt;br /&gt;
&lt;br /&gt;
'''''Note''''': only ever write changes to autoconfig.ini after the server has stopped - your changes will be lost as the file is rewritten when the server stops.&lt;br /&gt;
&lt;br /&gt;
Most relevant options are fairly self-explanatory.&lt;br /&gt;
You should *change at least the following options*:&lt;br /&gt;
* Name - sets the server name&lt;br /&gt;
* MaxPlayers - set the maximum of players on the server&lt;br /&gt;
&lt;br /&gt;
Also, fill greet.txt with your own content - it is displayed at the beginning of each match&lt;br /&gt;
&lt;br /&gt;
All options in autoconfig.ini can be defined via CLI arguments (eg &amp;lt;code&amp;gt;./soldat2 ServerPassword=foobar&amp;lt;/code&amp;gt;), as well as dynamically in-game via rcon commands (eg &amp;lt;code&amp;gt;rcon set ServerPassword foobar&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Manage bots ===&lt;br /&gt;
&lt;br /&gt;
* FillBotsCount - the amount of bots added to an empty server. they will be replaced by human players.&lt;br /&gt;
* FillBotsDifficulty - 0 is stupid, 3 is butcher&lt;br /&gt;
&lt;br /&gt;
=== Set up admin commands ===&lt;br /&gt;
&lt;br /&gt;
* AdminPlayfabID - your Playfab ID to be admin automatically (To find your Playfab ID, start the server and join with your client. Your Playfab ID will show up in the server logs as &amp;lt;code&amp;gt;1 YOUR_NAME joined the server [YOUR_PLAYFAB_ID]&amp;lt;/code&amp;gt;)&lt;br /&gt;
* RconPassword - if set, more than one player can send admin commands.&lt;br /&gt;
&lt;br /&gt;
=== Play pre-selected maps &amp;amp; game modes only ===&lt;br /&gt;
&lt;br /&gt;
* UseLobby = False&lt;br /&gt;
* AllowVoting = False&lt;br /&gt;
* GamesCycleFile = Cycles/Custom/selected-maps.json&lt;br /&gt;
&lt;br /&gt;
Having this, list the maps you want in your game cycle:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano Cycles/Custom/selected-maps.json&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
  &amp;quot;Rules&amp;quot;: &amp;quot;Deathmatch&amp;quot;,&lt;br /&gt;
  &amp;quot;Level&amp;quot;: &amp;quot;dm_epitaph&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Dedicated Server]]&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Server_Configuration&amp;diff=145</id>
		<title>Server Configuration</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Server_Configuration&amp;diff=145"/>
		<updated>2023-06-10T11:02:01Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Dedicated Server]]&lt;br /&gt;
&lt;br /&gt;
Configuration is split across several locations:&lt;br /&gt;
* &amp;lt;code&amp;gt;autoconfig.ini&amp;lt;/code&amp;gt; - basic settings like server name, password, player limit, bot count, lobby mode.&lt;br /&gt;
* &amp;lt;code&amp;gt;Rules/&amp;lt;/code&amp;gt; - each JSON file defines a game mode (eg CTF, DM, etc). In these files match duration, score limit, teams, default weapon selection, medkits, etcpp are defined.&lt;br /&gt;
* &amp;lt;code&amp;gt;Levels/Custom/&amp;lt;/code&amp;gt; - Contains custom maps. Get some maps from [https://tms2.jrgp.org/ TMS2]. See also: [[Mapping | Mapping Guide]].&lt;br /&gt;
* &amp;lt;code&amp;gt;Modifiers/&amp;lt;/code&amp;gt; - Contains modifiers that customize some parameters of the game (and can be voted for by players in the lobby for each match). See [[Custom Modifiers]] for details.&lt;br /&gt;
* &amp;lt;code&amp;gt;Scripts/&amp;lt;/code&amp;gt; - C# scripts that define custom behaviour. See [[:Category:Scripting]].&lt;br /&gt;
* &amp;lt;code&amp;gt;Cycles/&amp;lt;/code&amp;gt; - Map rotations (for when lobby is disabled).&lt;br /&gt;
* &amp;lt;code&amp;gt;greet.txt&amp;lt;/code&amp;gt; - Server info message showing in the popup before each match. Supports [TODO custom formatting]&lt;br /&gt;
&lt;br /&gt;
= Example Configurations =&lt;br /&gt;
&lt;br /&gt;
Use the following public server configurations as examples, or a baseline for your own configuration:&lt;br /&gt;
&lt;br /&gt;
* [https://codeberg.org/norwin/soldat2-custom/src/branch/server/nolobby @noerws Vote Fast server] (among others)&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
&lt;br /&gt;
== autoconfig.ini ==&lt;br /&gt;
&lt;br /&gt;
'''''Note''''': only ever write changes to autoconfig.ini after the server has stopped - your changes will be lost as the file is rewritten when the server stops.&lt;br /&gt;
&lt;br /&gt;
Most relevant options are fairly self-explanatory.&lt;br /&gt;
You should *change at least the following options*:&lt;br /&gt;
* Name - sets the server name&lt;br /&gt;
* MaxPlayers - set the maximum of players on the server&lt;br /&gt;
&lt;br /&gt;
Also, fill greet.txt with your own content - it is displayed at the beginning of each match&lt;br /&gt;
&lt;br /&gt;
All options in autoconfig.ini can be defined via CLI arguments (eg &amp;lt;code&amp;gt;./soldat2 ServerPassword=foobar&amp;lt;/code&amp;gt;), as well as dynamically in-game via rcon commands (eg &amp;lt;code&amp;gt;rcon set ServerPassword foobar&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Manage bots ===&lt;br /&gt;
&lt;br /&gt;
* FillBotsCount - the amount of bots added to an empty server. they will be replaced by human players.&lt;br /&gt;
* FillBotsDifficulty - 0 is stupid, 3 is butcher&lt;br /&gt;
&lt;br /&gt;
=== Set up admin commands ===&lt;br /&gt;
&lt;br /&gt;
* AdminPlayfabID - your Playfab ID to be admin automatically (To find your Playfab ID, start the server and join with your client. Your Playfab ID will show up in the server logs as &amp;lt;code&amp;gt;1 YOUR_NAME joined the server [YOUR_PLAYFAB_ID]&amp;lt;/code&amp;gt;)&lt;br /&gt;
* RconPassword - if set, more than one player can send admin commands.&lt;br /&gt;
&lt;br /&gt;
=== Play pre-selected maps &amp;amp; game modes only ===&lt;br /&gt;
&lt;br /&gt;
* UseLobby = False&lt;br /&gt;
* AllowVoting = False&lt;br /&gt;
* GamesCycleFile = Cycles/Custom/selected-maps.json&lt;br /&gt;
&lt;br /&gt;
Having this, list the maps you want in your game cycle:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano Cycles/Custom/selected-maps.json&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
  &amp;quot;Rules&amp;quot;: &amp;quot;Deathmatch&amp;quot;,&lt;br /&gt;
  &amp;quot;Level&amp;quot;: &amp;quot;dm_epitaph&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Server_Hosting&amp;diff=144</id>
		<title>Server Hosting</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Server_Hosting&amp;diff=144"/>
		<updated>2023-06-10T10:57:25Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: simplify configuration section, refer to new page 'Server Configuration&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Dedicated Server]]&lt;br /&gt;
&lt;br /&gt;
A dedicated server can be hosted on linux x86_64 systems - not on windows currently (running on WSL appears to be working [citation needed]).&lt;br /&gt;
&lt;br /&gt;
The most recent version can be downloaded from [https://soldat2.com/downloads.html soldat2.com/downloads].&lt;br /&gt;
&lt;br /&gt;
== System requirements ==&lt;br /&gt;
&lt;br /&gt;
For up to 8 players the following resources are enough:&lt;br /&gt;
&lt;br /&gt;
* some Linux distro with glibc&lt;br /&gt;
* 1 vCPU (x86_64)&lt;br /&gt;
* 512MB RAM&lt;br /&gt;
&lt;br /&gt;
With more players, occasional lags start happening, you should provide more CPU in that case.&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
&lt;br /&gt;
The following guide was originally written by Maz on [https://steamcommunity.com/sharedfiles/filedetails/?id=2793260281 steam] for a Ubuntu 20.04 system.&lt;br /&gt;
&lt;br /&gt;
If you are familiar with Ansible, the easiest setup could be to use [https://codeberg.org/norwin/soldat2-ansible this playbook] instead.&lt;br /&gt;
&lt;br /&gt;
=== Preamble ===&lt;br /&gt;
For this guide, understanding of the Linux-based operating system you're using, specifically the command line, is highly advised.&lt;br /&gt;
This is not a noob-friendly guide, one may or may not be created by the community. This is a simplified, barebones guide to serve as a guideline for Soldat 2 server hosting.&lt;br /&gt;
If you run into any major issues or errors, related to for example a specific OS or library support, please post below so it can be looked at. If you need personal (real-time) assistance, you're better off joining the official Discord instead of asking around in the #help channel: https://discord.gg/T8ejr5u&lt;br /&gt;
&lt;br /&gt;
=== Port forwarding ===&lt;br /&gt;
The default port for Soldat 2 is 33073. If you are running the server behind a firewall (e.g. a server at home, rather than an external dedicated server or VPS) make sure to port-forward this port for TCP &amp;amp; UDP.&lt;br /&gt;
If you wish to use another port, you set this in the config later in the guide.&lt;br /&gt;
&lt;br /&gt;
=== Installing the server ===&lt;br /&gt;
You should create a new user for Soldat 2 and NOT run the following commands as root. If you're root, this might work:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
useradd soldat2&lt;br /&gt;
sudo -i soldat2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can run a server on the release version or on the beta version. Choose one of the packages below.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget https://dl.thd.vg/soldat2-linuxserver-release.tar.gz&lt;br /&gt;
wget https://dl.thd.vg/soldat2-linuxserver-test.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following commands assume you've downloaded the release version.&lt;br /&gt;
If you downloaded the test version, change the file naming accordingly.&lt;br /&gt;
&lt;br /&gt;
Decompress the package:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar -zxf soldat2-linuxserver-release.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Navigate to the server folder, and run the server once to generate the configuration file &amp;lt;code&amp;gt;autoconfig.ini&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd soldat2-linuxserver-release&lt;br /&gt;
./soldat2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once the server has started, you may stop the server again (CTRL+C), so you should modify the newly-generated config file (see blow).&lt;br /&gt;
&lt;br /&gt;
=== Init.d ===&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
=== Multiple Servers on the same machine ===&lt;br /&gt;
&lt;br /&gt;
You can technically start multiple servers, each with their own configuraion&lt;br /&gt;
&lt;br /&gt;
=== Common issues ===&lt;br /&gt;
&lt;br /&gt;
==== SSL errors ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
_Note_: only ever write changes to autoconfig.ini after the server has stopped - your changes will be lost as the file is rewritten when the server stops.&lt;br /&gt;
&lt;br /&gt;
Open the config file with your preferred text editor:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano autoconfig.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Most relevant options are fairly self-explanatory.&lt;br /&gt;
You should *change at least the following options*:&lt;br /&gt;
* Name - sets the server name&lt;br /&gt;
* MaxPlayers - set the maximum of players on the server&lt;br /&gt;
* VisibleInGamesList - set to false, if you host in LAN only, to not confuse external players with your server in the server listing&lt;br /&gt;
&lt;br /&gt;
For more details regarding configuration see [[Server Configuration]].&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
See also [[Command Line Arguments]].&lt;br /&gt;
&lt;br /&gt;
=== Admin Commands ===&lt;br /&gt;
&lt;br /&gt;
To wield admin power on your server:&lt;br /&gt;
&lt;br /&gt;
* Set up admin access in configuration (see above)&lt;br /&gt;
&lt;br /&gt;
* Join the server&lt;br /&gt;
&lt;br /&gt;
* Open the console by pressing Alt+~. There you can enter commands (use Tab to see available commands. syntax is not case sensitive).&lt;br /&gt;
&lt;br /&gt;
* Gain admin rights: If you entered a AdminPlayfabID in autoconfig.ini, you should have a red [Admin] tag on the scoreboard. Other players can also gain admin privileges by running the command &amp;lt;code&amp;gt;rcon [password]&amp;lt;/code&amp;gt; in the console.&lt;br /&gt;
&lt;br /&gt;
* To apply a command to the server, prefix them with &amp;lt;code&amp;gt;rcon&amp;lt;/code&amp;gt;. Apparently, the commands are not case sensitive.&lt;br /&gt;
&lt;br /&gt;
==== Available commands ====&lt;br /&gt;
&lt;br /&gt;
copied from faq.txt in the 0.8.60 server tarball:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        Vote&lt;br /&gt;
        Info&lt;br /&gt;
        AddBot&lt;br /&gt;
        RemBot&lt;br /&gt;
        Restart&lt;br /&gt;
        NextMap&lt;br /&gt;
        LoadMap [mapname] [gamemode]&lt;br /&gt;
        AddModifier [modifier] (Restart or LoadMap to apply)&lt;br /&gt;
        RemoveModifier [modifier]&lt;br /&gt;
        Ban [id] - bans for a couple days&lt;br /&gt;
        Kick [id]&lt;br /&gt;
        Kick [id] &amp;quot;reason&amp;quot; (use parenthesis eg. kick 13 &amp;quot;for being mean&amp;quot;)&lt;br /&gt;
        KickAll&lt;br /&gt;
        KickAll &amp;quot;reason&amp;quot;&lt;br /&gt;
        SetTeam [id] [team] (will disable autobalance for the duration of the match)&lt;br /&gt;
        ListPlayers&lt;br /&gt;
        ListMaps&lt;br /&gt;
        Say [optional-id] &amp;quot;&amp;quot; (use parenthesis eg. say &amp;quot;hello world&amp;quot;)&lt;br /&gt;
        LoadCycle [Cycles/filename.json]&lt;br /&gt;
        Rcon [command]&lt;br /&gt;
        Rcon [password] (first, if not admin)&lt;br /&gt;
        Reload (recompiles scripts)&lt;br /&gt;
        Info (useful info)&lt;br /&gt;
        Vote (starts map vote)&lt;br /&gt;
        RestartServer (reloads the map cycle and restarts)&lt;br /&gt;
        Version (prints game version)&lt;br /&gt;
&lt;br /&gt;
        Set [variable] [value] &lt;br /&gt;
                - use proper casing&lt;br /&gt;
                - works for config vars (autoconfig.json) eg. &amp;quot;Set ServerPassword bla&amp;quot;&lt;br /&gt;
                - rules components (eg. Rules/CaptureTheFlag.json) eg. &amp;quot;Set Match.MinimumPlayers 4&amp;quot;&lt;br /&gt;
                - client settings (client.json) eg. &amp;quot;Set GameSettings.SoundsVolume 0.75&amp;quot;&lt;br /&gt;
        Get [variable]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Examples ====&lt;br /&gt;
&lt;br /&gt;
* dynamically change the amount of bots on the server to 5 - numPlayers: &amp;lt;code&amp;gt;rcon set fillbotscount 5&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* restart the match with a modifier added: &amp;lt;code&amp;gt;rcon addmodifier Amputation&amp;lt;/code&amp;gt;, then &amp;lt;code&amp;gt;rcon restart&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* kick all players with a reason: &amp;lt;code&amp;gt;rcon kickall &amp;quot;restarting the server to fix disconnect issues. will be back in a minute&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* manually balance teams: &amp;lt;code&amp;gt;rcon listplayers&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;rcon setteam [playerid] [0|1]&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Category:Dedicated_Server&amp;diff=143</id>
		<title>Category:Dedicated Server</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Category:Dedicated_Server&amp;diff=143"/>
		<updated>2023-06-10T10:52:28Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: Created blank page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Server_Configuration&amp;diff=142</id>
		<title>Server Configuration</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Server_Configuration&amp;diff=142"/>
		<updated>2023-06-10T10:52:01Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: extract content from Server Hosting page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Dedicated Server]]&lt;br /&gt;
&lt;br /&gt;
Configuration is split across several locations:&lt;br /&gt;
* &amp;lt;code&amp;gt;autoconfig.ini&amp;lt;/code&amp;gt; - basic settings like server name, password, player limit, bot count, lobby mode.&lt;br /&gt;
* &amp;lt;code&amp;gt;Rules/&amp;lt;/code&amp;gt; - each JSON file defines a game mode (eg CTF, DM, etc). In these files match duration, score limit, teams, default weapon selection, medkits, etcpp are defined.&lt;br /&gt;
* &amp;lt;code&amp;gt;Levels/Custom/&amp;lt;/code&amp;gt; - Contains custom maps. Get some maps from [https://tms2.jrgp.org/ TMS2]. See also: [[Mapping | Mapping Guide]].&lt;br /&gt;
* &amp;lt;code&amp;gt;Modifiers/&amp;lt;/code&amp;gt; - Contains modifiers that customize some parameters of the game (and can be voted for by players in the lobby for each match). See [[Custom Modifiers]] for details.&lt;br /&gt;
* &amp;lt;code&amp;gt;Scripts/&amp;lt;/code&amp;gt; - C# scripts that define custom behaviour. See [[:Category:Scripting]].&lt;br /&gt;
* &amp;lt;code&amp;gt;Cycles/&amp;lt;/code&amp;gt; - Map rotations (for when lobby is disabled).&lt;br /&gt;
* &amp;lt;code&amp;gt;greet.txt&amp;lt;/code&amp;gt; - Server info message showing in the popup before each match. Supports [TODO custom formatting]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Public example configurations =&lt;br /&gt;
&lt;br /&gt;
Use the following server configurations as examples, or a baseline for your own configuration:&lt;br /&gt;
&lt;br /&gt;
* [https://codeberg.org/norwin/soldat2-custom/src/branch/server/nolobby @noerws Vote Fast server] (among others)&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
&lt;br /&gt;
== autoconfig.ini ==&lt;br /&gt;
&lt;br /&gt;
'''''Note''''': only ever write changes to autoconfig.ini after the server has stopped - your changes will be lost as the file is rewritten when the server stops.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Most relevant options are fairly self-explanatory.&lt;br /&gt;
You should *change at least the following options*:&lt;br /&gt;
* Name - sets the server name&lt;br /&gt;
* MaxPlayers - set the maximum of players on the server&lt;br /&gt;
&lt;br /&gt;
Also, fill greet.txt with your own content - it is displayed at the beginning of each match&lt;br /&gt;
&lt;br /&gt;
=== Manage bots ===&lt;br /&gt;
&lt;br /&gt;
* FillBotsCount - the amount of bots added to an empty server. they will be replaced by human players.&lt;br /&gt;
* FillBotsDifficulty - 0 is stupid, 3 is butcher&lt;br /&gt;
&lt;br /&gt;
=== Set up admin commands ===&lt;br /&gt;
&lt;br /&gt;
* AdminPlayfabID - your Playfab ID to be admin automatically (To find your Playfab ID, start the server and join with your client. Your Playfab ID will show up in the server logs as &amp;lt;code&amp;gt;1 YOUR_NAME joined the server [YOUR_PLAYFAB_ID]&amp;lt;/code&amp;gt;)&lt;br /&gt;
* RconPassword - if set, more than one player can send admin commands.&lt;br /&gt;
&lt;br /&gt;
=== Play pre-selected maps &amp;amp; game modes only ===&lt;br /&gt;
&lt;br /&gt;
* UseLobby = False&lt;br /&gt;
* AllowVoting = False&lt;br /&gt;
* GamesCycleFile = Cycles/Custom/selected-maps.json&lt;br /&gt;
&lt;br /&gt;
Having this, list the maps you want in your game cycle:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano Cycles/Custom/selected-maps.json&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
  &amp;quot;Rules&amp;quot;: &amp;quot;Deathmatch&amp;quot;,&lt;br /&gt;
  &amp;quot;Level&amp;quot;: &amp;quot;dm_epitaph&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Main_Page&amp;diff=141</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Main_Page&amp;diff=141"/>
		<updated>2023-06-10T10:38:16Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;Welcome to the Soldat 2 Wiki&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contents ==&lt;br /&gt;
&lt;br /&gt;
* [[Weapons]]&lt;br /&gt;
* [[Ranked]]&lt;br /&gt;
* [[Movement|Movement Guide]]&lt;br /&gt;
* [[Radio Commands]]&lt;br /&gt;
* [[:Category:Modding]]&lt;br /&gt;
** [[Mapping|Mapping Guide]]&lt;br /&gt;
** [[Custom Modifiers]]&lt;br /&gt;
** [[Scripting Introduction]]&lt;br /&gt;
** [[Scripting Events]]&lt;br /&gt;
** [[Scripting Examples]]&lt;br /&gt;
* [[:Category:Dedicated Server]]&lt;br /&gt;
** [[Server Hosting]]&lt;br /&gt;
** [[Server Configuration]]&lt;br /&gt;
&lt;br /&gt;
== Important Links ==&lt;br /&gt;
* [https://store.steampowered.com/app/474220/Soldat_2/ Soldat 2 on STEAM]&lt;br /&gt;
* [https://oczki.pl/s2-players Active Player Dashboard]&lt;br /&gt;
* [https://stats.soldat2.com/ Ranked Ladder Statistics &amp;amp; Leaderboards]&lt;br /&gt;
* [https://tms2.jrgp.org/ The Soldat 2 Mapping Showcase]&lt;br /&gt;
* [https://kreis.uber.space/soldat2/mapview/ Map Search &amp;amp; Overview]&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Server_Hosting&amp;diff=140</id>
		<title>Server Hosting</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Server_Hosting&amp;diff=140"/>
		<updated>2023-06-10T10:35:10Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: document locations of all configuration files&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A dedicated server can be hosted on linux x86_64 systems - not on windows currently (running on WSL appears to be working [citation needed]).&lt;br /&gt;
&lt;br /&gt;
The most recent version can be downloaded from [https://soldat2.com/downloads.html soldat2.com/downloads].&lt;br /&gt;
&lt;br /&gt;
== System requirements ==&lt;br /&gt;
&lt;br /&gt;
For up to 8 players the following resources are enough:&lt;br /&gt;
&lt;br /&gt;
* some Linux distro with glibc&lt;br /&gt;
* 1 vCPU (x86_64)&lt;br /&gt;
* 512MB RAM&lt;br /&gt;
&lt;br /&gt;
With more players, occasional lags start happening, you should provide more CPU in that case.&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
&lt;br /&gt;
The following guide was originally written by Maz on [https://steamcommunity.com/sharedfiles/filedetails/?id=2793260281 steam] for a Ubuntu 20.04 system.&lt;br /&gt;
&lt;br /&gt;
If you are familiar with Ansible, the easiest setup could be to use [https://codeberg.org/norwin/soldat2-ansible this playbook] instead.&lt;br /&gt;
&lt;br /&gt;
=== Preamble ===&lt;br /&gt;
For this guide, understanding of the Linux-based operating system you're using, specifically the command line, is highly advised.&lt;br /&gt;
This is not a noob-friendly guide, one may or may not be created by the community. This is a simplified, barebones guide to serve as a guideline for Soldat 2 server hosting.&lt;br /&gt;
If you run into any major issues or errors, related to for example a specific OS or library support, please post below so it can be looked at. If you need personal (real-time) assistance, you're better off joining the official Discord instead of asking around in the #help channel: https://discord.gg/T8ejr5u&lt;br /&gt;
&lt;br /&gt;
=== Port forwarding ===&lt;br /&gt;
The default port for Soldat 2 is 33073. If you are running the server behind a firewall (e.g. a server at home, rather than an external dedicated server or VPS) make sure to port-forward this port for TCP &amp;amp; UDP.&lt;br /&gt;
If you wish to use another port, you set this in the config later in the guide.&lt;br /&gt;
&lt;br /&gt;
=== Installing the server ===&lt;br /&gt;
You should create a new user for Soldat 2 and NOT run the following commands as root. If you're root, this might work:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
useradd soldat2&lt;br /&gt;
sudo -i soldat2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can run a server on the release version or on the beta version. Choose one of the packages below.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget https://dl.thd.vg/soldat2-linuxserver-release.tar.gz&lt;br /&gt;
wget https://dl.thd.vg/soldat2-linuxserver-test.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following commands assume you've downloaded the release version.&lt;br /&gt;
If you downloaded the test version, change the file naming accordingly.&lt;br /&gt;
&lt;br /&gt;
Decompress the package:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar -zxf soldat2-linuxserver-release.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Navigate to the server folder, and run the server once to generate the configuration file &amp;lt;code&amp;gt;autoconfig.ini&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd soldat2-linuxserver-release&lt;br /&gt;
./soldat2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once the server has started, you may stop the server again (CTRL+C), so you should modify the newly-generated config file (see blow).&lt;br /&gt;
&lt;br /&gt;
=== Init.d ===&lt;br /&gt;
&lt;br /&gt;
=== Multiple Servers on the same machine ===&lt;br /&gt;
&lt;br /&gt;
You can technically start multiple servers, each with their own configuraion&lt;br /&gt;
&lt;br /&gt;
=== Common issues ===&lt;br /&gt;
&lt;br /&gt;
==== SSL errors ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Configuration is split across several locations:&lt;br /&gt;
* &amp;lt;code&amp;gt;autoconfig.ini&amp;lt;/code&amp;gt; - basic settings like server name, password, player limit, bot count, lobby mode.&lt;br /&gt;
* &amp;lt;code&amp;gt;Rules/&amp;lt;/code&amp;gt; - each JSON file defines a game mode (eg CTF, DM, etc). In these files match duration, score limit, teams, default weapon selection, medkits, etcpp are defined.&lt;br /&gt;
* &amp;lt;code&amp;gt;Levels/Custom&amp;lt;/code&amp;gt; - contains custom maps. Get some maps from [[https://tms2.jrgp.org/ TMS2]] See also the [[Mapping | Mapping Guide]]&lt;br /&gt;
* &amp;lt;code&amp;gt;Modifiers&amp;lt;/code&amp;gt; - contains modifiers that customize some parameters of the game (and can be voted for by players in the lobby for each match). See [[Custom Modifiers]] for details.&lt;br /&gt;
* &amp;lt;code&amp;gt;Scripts/&amp;lt;/code&amp;gt; - C# scripts that define custom behaviour. See [[:Category:Scripting]]&lt;br /&gt;
* &amp;lt;code&amp;gt;Cycles/&amp;lt;/code&amp;gt; - map rotations (for when lobby is disabled)&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;autoconfig.ini&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
_Note_: only ever write changes to autoconfig.ini after the server has stopped - your changes will be lost as the file is rewritten when the server stops.&lt;br /&gt;
&lt;br /&gt;
Open the config file with your preferred text editor:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano autoconfig.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Most relevant options are fairly self-explanatory.&lt;br /&gt;
You should *change at least the following options*:&lt;br /&gt;
* Name - sets the server name&lt;br /&gt;
* MaxPlayers - set the maximum of players on the server&lt;br /&gt;
&lt;br /&gt;
Also, fill greet.txt with your own content - it is displayed at the beginning of each match&lt;br /&gt;
&lt;br /&gt;
==== Manage bots ====&lt;br /&gt;
&lt;br /&gt;
* FillBotsCount - the amount of bots added to an empty server. they will be replaced by human players.&lt;br /&gt;
* FillBotsDifficulty - 0 is stupid, 3 is butcher&lt;br /&gt;
&lt;br /&gt;
==== Set up admin commands ====&lt;br /&gt;
&lt;br /&gt;
* AdminPlayfabID - your Playfab ID to be admin automatically (To find your Playfab ID, start the server and join with your client. Your Playfab ID will show up in the server logs as &amp;lt;code&amp;gt;1 YOUR_NAME joined the server [YOUR_PLAYFAB_ID]&amp;lt;/code&amp;gt;)&lt;br /&gt;
* RconPassword - if set, more than one player can send admin commands.&lt;br /&gt;
&lt;br /&gt;
==== Play pre-selected maps &amp;amp; game modes only ====&lt;br /&gt;
&lt;br /&gt;
* UseLobby = False&lt;br /&gt;
* AllowVoting = False&lt;br /&gt;
* GamesCycleFile = Cycles/Custom/selected-maps.json&lt;br /&gt;
&lt;br /&gt;
Having this, list the maps you want in your game cycle:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano Cycles/Custom/selected-maps.json&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
  &amp;quot;Rules&amp;quot;: &amp;quot;Deathmatch&amp;quot;,&lt;br /&gt;
  &amp;quot;Level&amp;quot;: &amp;quot;dm_epitaph&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
See also [[Command Line Arguments]].&lt;br /&gt;
&lt;br /&gt;
=== Admin Commands ===&lt;br /&gt;
&lt;br /&gt;
To wield admin power on your server:&lt;br /&gt;
&lt;br /&gt;
* Set up admin access in configuration (see above)&lt;br /&gt;
&lt;br /&gt;
* Join the server&lt;br /&gt;
&lt;br /&gt;
* Open the console by pressing Alt+~. There you can enter commands (use Tab to see available commands. syntax is not case sensitive).&lt;br /&gt;
&lt;br /&gt;
* Gain admin rights: If you entered a AdminPlayfabID in autoconfig.ini, you should have a red [Admin] tag on the scoreboard. Other players can also gain admin privileges by running the command &amp;lt;code&amp;gt;rcon [password]&amp;lt;/code&amp;gt; in the console.&lt;br /&gt;
&lt;br /&gt;
* To apply a command to the server, prefix them with &amp;lt;code&amp;gt;rcon&amp;lt;/code&amp;gt;. Apparently, the commands are not case sensitive.&lt;br /&gt;
&lt;br /&gt;
==== Available commands ====&lt;br /&gt;
&lt;br /&gt;
copied from faq.txt in the 0.8.60 server tarball:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        Vote&lt;br /&gt;
        Info&lt;br /&gt;
        AddBot&lt;br /&gt;
        RemBot&lt;br /&gt;
        Restart&lt;br /&gt;
        NextMap&lt;br /&gt;
        LoadMap [mapname] [gamemode]&lt;br /&gt;
        AddModifier [modifier] (Restart or LoadMap to apply)&lt;br /&gt;
        RemoveModifier [modifier]&lt;br /&gt;
        Ban [id] - bans for a couple days&lt;br /&gt;
        Kick [id]&lt;br /&gt;
        Kick [id] &amp;quot;reason&amp;quot; (use parenthesis eg. kick 13 &amp;quot;for being mean&amp;quot;)&lt;br /&gt;
        KickAll&lt;br /&gt;
        KickAll &amp;quot;reason&amp;quot;&lt;br /&gt;
        SetTeam [id] [team] (will disable autobalance for the duration of the match)&lt;br /&gt;
        ListPlayers&lt;br /&gt;
        ListMaps&lt;br /&gt;
        Say [optional-id] &amp;quot;&amp;quot; (use parenthesis eg. say &amp;quot;hello world&amp;quot;)&lt;br /&gt;
        LoadCycle [Cycles/filename.json]&lt;br /&gt;
        Rcon [command]&lt;br /&gt;
        Rcon [password] (first, if not admin)&lt;br /&gt;
        Reload (recompiles scripts)&lt;br /&gt;
        Info (useful info)&lt;br /&gt;
        Vote (starts map vote)&lt;br /&gt;
        RestartServer (reloads the map cycle and restarts)&lt;br /&gt;
        Version (prints game version)&lt;br /&gt;
&lt;br /&gt;
        Set [variable] [value] &lt;br /&gt;
                - use proper casing&lt;br /&gt;
                - works for config vars (autoconfig.json) eg. &amp;quot;Set ServerPassword bla&amp;quot;&lt;br /&gt;
                - rules components (eg. Rules/CaptureTheFlag.json) eg. &amp;quot;Set Match.MinimumPlayers 4&amp;quot;&lt;br /&gt;
                - client settings (client.json) eg. &amp;quot;Set GameSettings.SoundsVolume 0.75&amp;quot;&lt;br /&gt;
        Get [variable]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Examples ====&lt;br /&gt;
&lt;br /&gt;
* dynamically change the amount of bots on the server to 5 - numPlayers: &amp;lt;code&amp;gt;rcon set fillbotscount 5&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* restart the match with a modifier added: &amp;lt;code&amp;gt;rcon addmodifier Amputation&amp;lt;/code&amp;gt;, then &amp;lt;code&amp;gt;rcon restart&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* kick all players with a reason: &amp;lt;code&amp;gt;rcon kickall &amp;quot;restarting the server to fix disconnect issues. will be back in a minute&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* manually balance teams: &amp;lt;code&amp;gt;rcon listplayers&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;rcon setteam [playerid] [0|1]&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Scripting_Introduction&amp;diff=124</id>
		<title>Scripting Introduction</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Scripting_Introduction&amp;diff=124"/>
		<updated>2023-03-07T15:24:09Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: document how to parametrize scripts in game modes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Scripting in Soldat 2 is done in a Unity/C# environment. For a script to be usable in-game, the script file must be placed under &amp;lt;code&amp;gt;Soldat2/Scripts/&amp;lt;/code&amp;gt; and there needs to be a ruleset that specifies that script in the &amp;lt;i&amp;gt;GameScript&amp;lt;/i&amp;gt; object in its json - for example, see &amp;lt;code&amp;gt;Soldat2/Rules/Standard/Climb.json&amp;lt;/code&amp;gt;. The script can be tested by starting a game that uses that ruleset.&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Scripting Resources ==&lt;br /&gt;
The Soldat 2 engine uses Unity, so it may be useful to familiarise yourself with the [https://docs.unity3d.com/2020.1/Documentation/Manual/index.html Unity Manual].&lt;br /&gt;
&lt;br /&gt;
There is some [https://soldat2.com/docs/ preliminary documentation] for the Soldat 2 engine, however it is currently rather limited.&lt;br /&gt;
&lt;br /&gt;
Some examples of scripts can be found in your Soldat 2 game directory under the path &amp;lt;code&amp;gt;Soldat2/Scripts/Standard/&amp;lt;/code&amp;gt;. Some unofficial examples are available at [[Scripting Examples]].&lt;br /&gt;
&lt;br /&gt;
See [[:Category:Scripting]] for a list of all pages on this wiki related to scripting.&lt;br /&gt;
&lt;br /&gt;
== Using Scripts ==&lt;br /&gt;
&lt;br /&gt;
A script can be applied to a match via [[Modifiers]] or via a [[Game Mode]] (&amp;quot;Rules&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== In a modifier ===&lt;br /&gt;
Example of a modifier &amp;lt;code&amp;gt;Modifiers/Custom/FlagIsPoison.json&amp;lt;/code&amp;gt; applying the &amp;lt;code&amp;gt;Scripts/Custom/FlagIsPoison.cs&amp;lt;/code&amp;gt; script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;Objects&amp;quot;: {&lt;br /&gt;
    &amp;quot;Rules&amp;quot;: {&lt;br /&gt;
      &amp;quot;FlagIsPoison&amp;quot;: {&lt;br /&gt;
        &amp;quot;FlagDamagePerSecond&amp;quot;: 3.0&lt;br /&gt;
      }&lt;br /&gt;
    }   &lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;Meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;Description&amp;quot;: &amp;quot;(applies the FlagIsPoison script)&amp;quot;,&lt;br /&gt;
    &amp;quot;Author&amp;quot;: &amp;quot;noerw&amp;quot;,&lt;br /&gt;
    &amp;quot;Version&amp;quot;: 1.0&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A script can be parametrized, where the parameters are defined in the modifier or rule definition. In the above example the &amp;lt;code&amp;gt;FlagDamagePerSecond&amp;lt;/code&amp;gt; parameter is applied when the script class contains a &amp;lt;code&amp;gt;JsonProperty&amp;lt;/code&amp;gt; with a default value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C#&amp;quot;&amp;gt;&lt;br /&gt;
[JsonProperty(&amp;quot;FlagDamagePerSecond&amp;quot;)] public float flagDPS = 5.0;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== In a rule / game mode ===&lt;br /&gt;
&lt;br /&gt;
To add a script to all matches of a gamemode, edit &amp;lt;code&amp;gt;Rules/Custom/YourGameMode.json&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Add a script by adding its class name as a key to the game mode definition (on the same level as &amp;lt;code&amp;gt;GameScript&amp;lt;/code&amp;gt;). Inside that object, you can define parameters the script potentially exposes via &amp;lt;code&amp;gt;JSONProperty&amp;lt;/code&amp;gt; tags:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  ...&lt;br /&gt;
      &amp;quot;GameScript&amp;quot;: { ... },&lt;br /&gt;
      &amp;quot;YourScriptName&amp;quot;: {&lt;br /&gt;
        &amp;quot;ExampleParameter&amp;quot;: true,&lt;br /&gt;
      }&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
An alternative way, is to add the class name of your script to the &amp;lt;code&amp;gt;GameScript.Scripts&amp;lt;/code&amp;gt; array:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  ...&lt;br /&gt;
      &amp;quot;GameScript&amp;quot;: {&lt;br /&gt;
        &amp;quot;Scripts&amp;quot;: [&lt;br /&gt;
          ... potentially other scripts ...,&lt;br /&gt;
          &amp;quot;YourScriptName&amp;quot;&lt;br /&gt;
        ]&lt;br /&gt;
      }&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Scripting_Events&amp;diff=122</id>
		<title>Scripting Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Scripting_Events&amp;diff=122"/>
		<updated>2023-02-21T15:57:11Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: add some event types&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The main method for reacting to gameplay events in Soldat 2 scripting is by registering ''listeners''. This is done by calling the &amp;lt;code&amp;gt;AddListener()&amp;lt;/code&amp;gt; function, usually on the &amp;lt;code&amp;gt;Eventor&amp;lt;/code&amp;gt; object.&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting]]&lt;br /&gt;
&lt;br /&gt;
== Eventor Events ==&lt;br /&gt;
In the case of Eventor listeners, you will need to specify both the event type to listen for, as well as a function to be called when the event occurs. Callback functions should have the signature &amp;lt;code&amp;gt;void cb_func(IGameEvent)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The event types that are used with Eventor are defined by the &amp;lt;code&amp;gt;Events&amp;lt;/code&amp;gt; enum, which currently contains:&lt;br /&gt;
* None&lt;br /&gt;
* New_Connection (GlobalPlayerConnectionEvent)&lt;br /&gt;
* Created&lt;br /&gt;
* Destroyed&lt;br /&gt;
* Died&lt;br /&gt;
* Add_Player&lt;br /&gt;
* Remove_Player&lt;br /&gt;
* Player_Joined (GlobalPlayerEvent has .Player)&lt;br /&gt;
* Player_Assigned&lt;br /&gt;
* Player_Left&lt;br /&gt;
* Player_Changed_Team&lt;br /&gt;
* Player_Unassigned&lt;br /&gt;
* Level_Loaded&lt;br /&gt;
* Rules_Loaded&lt;br /&gt;
* Impacted&lt;br /&gt;
* Weapon_Selected&lt;br /&gt;
* Trigger (GlobalTriggerEvent)&lt;br /&gt;
* Match_Waiting&lt;br /&gt;
* Match_Warmup&lt;br /&gt;
* Match_Started&lt;br /&gt;
* Match_Ended&lt;br /&gt;
* Hit (GlobalHitEvent)&lt;br /&gt;
* Camera_Target_Changed&lt;br /&gt;
* Camera_Created&lt;br /&gt;
* Powerup_Started&lt;br /&gt;
* Powerup_Ended&lt;br /&gt;
* Bullet_Created&lt;br /&gt;
* Bot_Assigned&lt;br /&gt;
* Flag_Captured&lt;br /&gt;
* Flag_Returned&lt;br /&gt;
* Flag_Grabbed&lt;br /&gt;
* Use_Weapon&lt;br /&gt;
* Construct_AddBody&lt;br /&gt;
* Construct_RemoveBody&lt;br /&gt;
* Properties_Changed&lt;br /&gt;
* Item_Dropped (GlobalItemEvent has .Item and .Holder)&lt;br /&gt;
* Item_Picked (GlobalItemEvent has .Item and .Holder)&lt;br /&gt;
* AssignedNetworkId&lt;br /&gt;
* Changed_Team&lt;br /&gt;
* Request_Spawn&lt;br /&gt;
* End_Condition&lt;br /&gt;
* Reserved&lt;br /&gt;
&lt;br /&gt;
A full example of an AddListener call is &amp;lt;code&amp;gt;Eventor.AddListener(Events.Died, OnPlayerDied)&amp;lt;/code&amp;gt;. These calls are usually placed within the &amp;lt;code&amp;gt;Awake()&amp;lt;/code&amp;gt; function of the script, which is executed when the script is loaded. Note that each AddListener call should be paired with a RemoveListener call (usually in the &amp;lt;code&amp;gt;OnDestroy()&amp;lt;/code&amp;gt; function) to ensure that the script does not continue to respond to events after it has been disabled. See the Unity manual entry for the [https://docs.unity3d.com/2020.1/Documentation/ScriptReference/MonoBehaviour.html MonoBehaviour] class for other special functions.&lt;br /&gt;
&lt;br /&gt;
== Other Events ==&lt;br /&gt;
Not all necessary game events are currently accessible with just the Eventor object, methods for adding listeners to other useful events are listed below:&lt;br /&gt;
* Player chat events: &amp;lt;code&amp;gt;GameChat.instance.OnChat.AddListener()&amp;lt;/code&amp;gt;, only takes a callback function as an argument, required signature for callback is &amp;lt;code&amp;gt;void cb_func(Player, string)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If an event is not available for a specific gameplay element you are interested in responding to, it is also possible to use a polling approach to detect that event by using either the &amp;lt;code&amp;gt;Update()&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;FixedUpdate()&amp;lt;/code&amp;gt; functions which are called periodically by the engine. For example, something equivalent to this is used in the official &amp;lt;code&amp;gt;Climb.cs&amp;lt;/code&amp;gt; script to detect when any player gets within 1.5 range of a checkpoint:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C#&amp;quot;&amp;gt;&lt;br /&gt;
void FixedUpdate() // runs 10 times per second&lt;br /&gt;
{&lt;br /&gt;
    for (int i = checkpoints.Count - 1; i &amp;gt;= 0; i--)&lt;br /&gt;
    {&lt;br /&gt;
        foreach (Player player in Players.Get.GetAlive())&lt;br /&gt;
        {&lt;br /&gt;
            // for each (player,checkpoint) pair, check if the distance between them is less than 1.5&lt;br /&gt;
            if ((player.controlled.transform.position - checkpoints[i].transform.position).magnitude &amp;lt; 1.5f)&lt;br /&gt;
            {&lt;br /&gt;
                checkpoints.RemoveAt(i);&lt;br /&gt;
                lastCheckpointPlayer = player;&lt;br /&gt;
                break;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Server_Hosting&amp;diff=121</id>
		<title>Server Hosting</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Server_Hosting&amp;diff=121"/>
		<updated>2023-02-14T15:20:12Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: link to ansible deployment&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A dedicated server can be hosted on linux x86_64 systems - not on windows currently (running on WSL appears to be working [citation needed]).&lt;br /&gt;
&lt;br /&gt;
The most recent version can be downloaded from [https://soldat2.com/downloads.html soldat2.com/downloads].&lt;br /&gt;
&lt;br /&gt;
== System requirements ==&lt;br /&gt;
&lt;br /&gt;
For up to 8 players the following resources are enough:&lt;br /&gt;
&lt;br /&gt;
* some Linux distro with glibc&lt;br /&gt;
* 1 vCPU (x86_64)&lt;br /&gt;
* 512MB RAM&lt;br /&gt;
&lt;br /&gt;
With more players, occasional lags start happening, you should provide more CPU in that case.&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
&lt;br /&gt;
The following guide was originally written by Maz on [https://steamcommunity.com/sharedfiles/filedetails/?id=2793260281 steam] for a Ubuntu 20.04 system.&lt;br /&gt;
&lt;br /&gt;
If you are familiar with Ansible, the easiest setup could be to use [https://codeberg.org/norwin/soldat2-ansible this playbook] instead.&lt;br /&gt;
&lt;br /&gt;
=== Preamble ===&lt;br /&gt;
For this guide, understanding of the Linux-based operating system you're using, specifically the command line, is highly advised.&lt;br /&gt;
This is not a noob-friendly guide, one may or may not be created by the community. This is a simplified, barebones guide to serve as a guideline for Soldat 2 server hosting.&lt;br /&gt;
If you run into any major issues or errors, related to for example a specific OS or library support, please post below so it can be looked at. If you need personal (real-time) assistance, you're better off joining the official Discord instead of asking around in the #help channel: https://discord.gg/T8ejr5u&lt;br /&gt;
&lt;br /&gt;
=== Port forwarding ===&lt;br /&gt;
The default port for Soldat 2 is 33073. If you are running the server behind a firewall (e.g. a server at home, rather than an external dedicated server or VPS) make sure to port-forward this port for TCP &amp;amp; UDP.&lt;br /&gt;
If you wish to use another port, you set this in the config later in the guide.&lt;br /&gt;
&lt;br /&gt;
=== Installing the server ===&lt;br /&gt;
You should create a new user for Soldat 2 and NOT run the following commands as root. If you're root, this might work:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
useradd soldat2&lt;br /&gt;
sudo -i soldat2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can run a server on the release version or on the beta version. Choose one of the packages below.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget https://dl.thd.vg/soldat2-linuxserver-release.tar.gz&lt;br /&gt;
wget https://dl.thd.vg/soldat2-linuxserver-test.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following commands assume you've downloaded the release version.&lt;br /&gt;
If you downloaded the test version, change the file naming accordingly.&lt;br /&gt;
&lt;br /&gt;
Decompress the package:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar -zxf soldat2-linuxserver-release.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Navigate to the server folder, and run the server once to generate the configuration file &amp;lt;code&amp;gt;autoconfig.ini&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd soldat2-linuxserver-release&lt;br /&gt;
./soldat2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once the server has started, you may stop the server again (CTRL+C), so you should modify the newly-generated config file (see blow).&lt;br /&gt;
&lt;br /&gt;
=== Init.d ===&lt;br /&gt;
&lt;br /&gt;
=== Multiple Servers on the same machine ===&lt;br /&gt;
&lt;br /&gt;
You can technically start multiple servers, each with their own configuraion&lt;br /&gt;
&lt;br /&gt;
=== Common issues ===&lt;br /&gt;
&lt;br /&gt;
==== SSL errors ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
_Note_: only ever write changes to autoconfig.ini after the server has stopped - your changes will be lost as the file is rewritten when the server stops.&lt;br /&gt;
&lt;br /&gt;
Open the config file with your preferred text editor:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano autoconfig.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Most relevant options are fairly self-explanatory.&lt;br /&gt;
You should *change at least the following options*:&lt;br /&gt;
* Name - sets the server name&lt;br /&gt;
* MaxPlayers - set the maximum of players on the server&lt;br /&gt;
&lt;br /&gt;
Also, fill greet.txt with your own content - it is displayed at the beginning of each match&lt;br /&gt;
&lt;br /&gt;
=== Manage bots ===&lt;br /&gt;
&lt;br /&gt;
* FillBotsCount - the amount of bots added to an empty server. they will be replaced by human players.&lt;br /&gt;
* FillBotsDifficulty - 0 is stupid, 3 is butcher&lt;br /&gt;
&lt;br /&gt;
=== Set up admin commands ===&lt;br /&gt;
&lt;br /&gt;
* AdminPlayfabID - your Playfab ID to be admin automatically (To find your Playfab ID, start the server and join with your client. Your Playfab ID will show up in the server logs as &amp;lt;code&amp;gt;1 YOUR_NAME joined the server [YOUR_PLAYFAB_ID]&amp;lt;/code&amp;gt;)&lt;br /&gt;
* RconPassword - if set, more than one player can send admin commands.&lt;br /&gt;
&lt;br /&gt;
=== Play pre-selected maps &amp;amp; game modes only ===&lt;br /&gt;
&lt;br /&gt;
* UseLobby = False&lt;br /&gt;
* AllowVoting = False&lt;br /&gt;
* GamesCycleFile = Cycles/Custom/selected-maps.json&lt;br /&gt;
&lt;br /&gt;
Having this, list the maps you want in your game cycle:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano Cycles/Custom/selected-maps.json&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
  &amp;quot;Rules&amp;quot;: &amp;quot;Deathmatch&amp;quot;,&lt;br /&gt;
  &amp;quot;Level&amp;quot;: &amp;quot;dm_epitaph&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
See also [[Command Line Arguments]].&lt;br /&gt;
&lt;br /&gt;
=== Admin Commands ===&lt;br /&gt;
&lt;br /&gt;
To wield admin power on your server:&lt;br /&gt;
&lt;br /&gt;
* Set up admin access in configuration (see above)&lt;br /&gt;
&lt;br /&gt;
* Join the server&lt;br /&gt;
&lt;br /&gt;
* Open the console by pressing Alt+~. There you can enter commands (use Tab to see available commands. syntax is not case sensitive).&lt;br /&gt;
&lt;br /&gt;
* Gain admin rights: If you entered a AdminPlayfabID in autoconfig.ini, you should have a red [Admin] tag on the scoreboard. Other players can also gain admin privileges by running the command &amp;lt;code&amp;gt;rcon [password]&amp;lt;/code&amp;gt; in the console.&lt;br /&gt;
&lt;br /&gt;
* To apply a command to the server, prefix them with &amp;lt;code&amp;gt;rcon&amp;lt;/code&amp;gt;. Apparently, the commands are not case sensitive.&lt;br /&gt;
&lt;br /&gt;
==== Available commands ====&lt;br /&gt;
&lt;br /&gt;
copied from faq.txt in the 0.8.60 server tarball:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        Vote&lt;br /&gt;
        Info&lt;br /&gt;
        AddBot&lt;br /&gt;
        RemBot&lt;br /&gt;
        Restart&lt;br /&gt;
        NextMap&lt;br /&gt;
        LoadMap [mapname] [gamemode]&lt;br /&gt;
        AddModifier [modifier] (Restart or LoadMap to apply)&lt;br /&gt;
        RemoveModifier [modifier]&lt;br /&gt;
        Ban [id] - bans for a couple days&lt;br /&gt;
        Kick [id]&lt;br /&gt;
        Kick [id] &amp;quot;reason&amp;quot; (use parenthesis eg. kick 13 &amp;quot;for being mean&amp;quot;)&lt;br /&gt;
        KickAll&lt;br /&gt;
        KickAll &amp;quot;reason&amp;quot;&lt;br /&gt;
        SetTeam [id] [team] (will disable autobalance for the duration of the match)&lt;br /&gt;
        ListPlayers&lt;br /&gt;
        ListMaps&lt;br /&gt;
        Say [optional-id] &amp;quot;&amp;quot; (use parenthesis eg. say &amp;quot;hello world&amp;quot;)&lt;br /&gt;
        LoadCycle [Cycles/filename.json]&lt;br /&gt;
        Rcon [command]&lt;br /&gt;
        Rcon [password] (first, if not admin)&lt;br /&gt;
        Reload (recompiles scripts)&lt;br /&gt;
        Info (useful info)&lt;br /&gt;
        Vote (starts map vote)&lt;br /&gt;
        RestartServer (reloads the map cycle and restarts)&lt;br /&gt;
        Version (prints game version)&lt;br /&gt;
&lt;br /&gt;
        Set [variable] [value] &lt;br /&gt;
                - use proper casing&lt;br /&gt;
                - works for config vars (autoconfig.json) eg. &amp;quot;Set ServerPassword bla&amp;quot;&lt;br /&gt;
                - rules components (eg. Rules/CaptureTheFlag.json) eg. &amp;quot;Set Match.MinimumPlayers 4&amp;quot;&lt;br /&gt;
                - client settings (client.json) eg. &amp;quot;Set GameSettings.SoundsVolume 0.75&amp;quot;&lt;br /&gt;
        Get [variable]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Examples ====&lt;br /&gt;
&lt;br /&gt;
* dynamically change the amount of bots on the server to 5 - numPlayers: &amp;lt;code&amp;gt;rcon set fillbotscount 5&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* restart the match with a modifier added: &amp;lt;code&amp;gt;rcon addmodifier Amputation&amp;lt;/code&amp;gt;, then &amp;lt;code&amp;gt;rcon restart&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* kick all players with a reason: &amp;lt;code&amp;gt;rcon kickall &amp;quot;restarting the server to fix disconnect issues. will be back in a minute&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* manually balance teams: &amp;lt;code&amp;gt;rcon listplayers&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;rcon setteam [playerid] [0|1]&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Server_Hosting&amp;diff=94</id>
		<title>Server Hosting</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Server_Hosting&amp;diff=94"/>
		<updated>2023-01-19T14:04:57Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A dedicated server can be hosted on linux x86_64 systems - not on windows currently (running on WSL appears to be working [citation needed]).&lt;br /&gt;
&lt;br /&gt;
The most recent version can be downloaded from [https://soldat2.com/downloads.html soldat2.com/downloads].&lt;br /&gt;
&lt;br /&gt;
== System requirements ==&lt;br /&gt;
&lt;br /&gt;
For up to 8 players the following resources are enough:&lt;br /&gt;
&lt;br /&gt;
* some Linux distro with glibc&lt;br /&gt;
* 1 vCPU (x86_64)&lt;br /&gt;
* 512MB RAM&lt;br /&gt;
&lt;br /&gt;
With more players, occasional lags start happening, you should provide more CPU in that case.&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
&lt;br /&gt;
The following guide was originally written by Maz on [https://steamcommunity.com/sharedfiles/filedetails/?id=2793260281 steam] for a Ubuntu 20.04 system.&lt;br /&gt;
&lt;br /&gt;
=== Preamble ===&lt;br /&gt;
For this guide, understanding of the Linux-based operating system you're using, specifically the command line, is highly advised.&lt;br /&gt;
This is not a noob-friendly guide, one may or may not be created by the community. This is a simplified, barebones guide to serve as a guideline for Soldat 2 server hosting.&lt;br /&gt;
If you run into any major issues or errors, related to for example a specific OS or library support, please post below so it can be looked at. If you need personal (real-time) assistance, you're better off joining the official Discord instead of asking around in the #help channel: https://discord.gg/T8ejr5u&lt;br /&gt;
&lt;br /&gt;
=== Port forwarding ===&lt;br /&gt;
The default port for Soldat 2 is 33073. If you are running the server behind a firewall (e.g. a server at home, rather than an external dedicated server or VPS) make sure to port-forward this port for TCP &amp;amp; UDP.&lt;br /&gt;
If you wish to use another port, you set this in the config later in the guide.&lt;br /&gt;
&lt;br /&gt;
=== Installing the server ===&lt;br /&gt;
You should create a new user for Soldat 2 and NOT run the following commands as root. If you're root, this might work:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
useradd soldat2&lt;br /&gt;
sudo -i soldat2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can run a server on the release version or on the beta version. Choose one of the packages below.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget https://dl.thd.vg/soldat2-linuxserver-release.tar.gz&lt;br /&gt;
wget https://dl.thd.vg/soldat2-linuxserver-test.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following commands assume you've downloaded the release version.&lt;br /&gt;
If you downloaded the test version, change the file naming accordingly.&lt;br /&gt;
&lt;br /&gt;
Decompress the package:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar -zxf soldat2-linuxserver-release.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Navigate to the server folder, and run the server once to generate the configuration file &amp;lt;code&amp;gt;autoconfig.ini&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd soldat2-linuxserver-release&lt;br /&gt;
./soldat2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once the server has started, you may stop the server again (CTRL+C), so you should modify the newly-generated config file (see blow).&lt;br /&gt;
&lt;br /&gt;
=== Init.d ===&lt;br /&gt;
&lt;br /&gt;
=== Multiple Servers on the same machine ===&lt;br /&gt;
&lt;br /&gt;
You can technically start multiple servers, each with their own configuraion&lt;br /&gt;
&lt;br /&gt;
=== Common issues ===&lt;br /&gt;
&lt;br /&gt;
==== SSL errors ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
_Note_: only ever write changes to autoconfig.ini after the server has stopped - your changes will be lost as the file is rewritten when the server stops.&lt;br /&gt;
&lt;br /&gt;
Open the config file with your preferred text editor:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano autoconfig.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Most relevant options are fairly self-explanatory.&lt;br /&gt;
You should *change at least the following options*:&lt;br /&gt;
* Name - sets the server name&lt;br /&gt;
* MaxPlayers - set the maximum of players on the server&lt;br /&gt;
&lt;br /&gt;
Also, fill greet.txt with your own content - it is displayed at the beginning of each match&lt;br /&gt;
&lt;br /&gt;
=== Manage bots ===&lt;br /&gt;
&lt;br /&gt;
* FillBotsCount - the amount of bots added to an empty server. they will be replaced by human players.&lt;br /&gt;
* FillBotsDifficulty - 0 is stupid, 3 is butcher&lt;br /&gt;
&lt;br /&gt;
=== Set up admin commands ===&lt;br /&gt;
&lt;br /&gt;
* AdminPlayfabID - your Playfab ID to be admin automatically (To find your Playfab ID, start the server and join with your client. Your Playfab ID will show up in the server logs as &amp;lt;code&amp;gt;1 YOUR_NAME joined the server [YOUR_PLAYFAB_ID]&amp;lt;/code&amp;gt;)&lt;br /&gt;
* RconPassword - if set, more than one player can send admin commands.&lt;br /&gt;
&lt;br /&gt;
=== Play pre-selected maps &amp;amp; game modes only ===&lt;br /&gt;
&lt;br /&gt;
* UseLobby = False&lt;br /&gt;
* AllowVoting = False&lt;br /&gt;
* GamesCycleFile = Cycles/Custom/selected-maps.json&lt;br /&gt;
&lt;br /&gt;
Having this, list the maps you want in your game cycle:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano Cycles/Custom/selected-maps.json&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
  &amp;quot;Rules&amp;quot;: &amp;quot;Deathmatch&amp;quot;,&lt;br /&gt;
  &amp;quot;Level&amp;quot;: &amp;quot;dm_epitaph&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
See also [[Command Line Arguments]].&lt;br /&gt;
&lt;br /&gt;
=== Admin Commands ===&lt;br /&gt;
&lt;br /&gt;
To wield admin power on your server:&lt;br /&gt;
&lt;br /&gt;
* Set up admin access in configuration (see above)&lt;br /&gt;
&lt;br /&gt;
* Join the server&lt;br /&gt;
&lt;br /&gt;
* Open the console by pressing Alt+~. There you can enter commands (use Tab to see available commands. syntax is not case sensitive).&lt;br /&gt;
&lt;br /&gt;
* Gain admin rights: If you entered a AdminPlayfabID in autoconfig.ini, you should have a red [Admin] tag on the scoreboard. Other players can also gain admin privileges by running the command &amp;lt;code&amp;gt;rcon [password]&amp;lt;/code&amp;gt; in the console.&lt;br /&gt;
&lt;br /&gt;
* To apply a command to the server, prefix them with &amp;lt;code&amp;gt;rcon&amp;lt;/code&amp;gt;. Apparently, the commands are not case sensitive.&lt;br /&gt;
&lt;br /&gt;
==== Available commands ====&lt;br /&gt;
&lt;br /&gt;
copied from faq.txt in the 0.8.60 server tarball:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        Vote&lt;br /&gt;
        Info&lt;br /&gt;
        AddBot&lt;br /&gt;
        RemBot&lt;br /&gt;
        Restart&lt;br /&gt;
        NextMap&lt;br /&gt;
        LoadMap [mapname] [gamemode]&lt;br /&gt;
        AddModifier [modifier] (Restart or LoadMap to apply)&lt;br /&gt;
        RemoveModifier [modifier]&lt;br /&gt;
        Ban [id] - bans for a couple days&lt;br /&gt;
        Kick [id]&lt;br /&gt;
        Kick [id] &amp;quot;reason&amp;quot; (use parenthesis eg. kick 13 &amp;quot;for being mean&amp;quot;)&lt;br /&gt;
        KickAll&lt;br /&gt;
        KickAll &amp;quot;reason&amp;quot;&lt;br /&gt;
        SetTeam [id] [team] (will disable autobalance for the duration of the match)&lt;br /&gt;
        ListPlayers&lt;br /&gt;
        ListMaps&lt;br /&gt;
        Say [optional-id] &amp;quot;&amp;quot; (use parenthesis eg. say &amp;quot;hello world&amp;quot;)&lt;br /&gt;
        LoadCycle [Cycles/filename.json]&lt;br /&gt;
        Rcon [command]&lt;br /&gt;
        Rcon [password] (first, if not admin)&lt;br /&gt;
        Reload (recompiles scripts)&lt;br /&gt;
        Info (useful info)&lt;br /&gt;
        Vote (starts map vote)&lt;br /&gt;
        RestartServer (reloads the map cycle and restarts)&lt;br /&gt;
        Version (prints game version)&lt;br /&gt;
&lt;br /&gt;
        Set [variable] [value] &lt;br /&gt;
                - use proper casing&lt;br /&gt;
                - works for config vars (autoconfig.json) eg. &amp;quot;Set ServerPassword bla&amp;quot;&lt;br /&gt;
                - rules components (eg. Rules/CaptureTheFlag.json) eg. &amp;quot;Set Match.MinimumPlayers 4&amp;quot;&lt;br /&gt;
                - client settings (client.json) eg. &amp;quot;Set GameSettings.SoundsVolume 0.75&amp;quot;&lt;br /&gt;
        Get [variable]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Examples ====&lt;br /&gt;
&lt;br /&gt;
* dynamically change the amount of bots on the server to 5 - numPlayers: &amp;lt;code&amp;gt;rcon set fillbotscount 5&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* restart the match with a modifier added: &amp;lt;code&amp;gt;rcon addmodifier Amputation&amp;lt;/code&amp;gt;, then &amp;lt;code&amp;gt;rcon restart&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* kick all players with a reason: &amp;lt;code&amp;gt;rcon kickall &amp;quot;restarting the server to fix disconnect issues. will be back in a minute&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* manually balance teams: &amp;lt;code&amp;gt;rcon listplayers&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;rcon setteam [playerid] [0|1]&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Server_Hosting&amp;diff=93</id>
		<title>Server Hosting</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Server_Hosting&amp;diff=93"/>
		<updated>2023-01-19T13:55:46Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: Created page with &amp;quot;A dedicated server can be hosted on linux x86_64 systems - not on windows currently (running on WSL appears to be working [citation needed]).  The most recent version can be downloaded from [https://soldat2.com/downloads.html soldat2.com/downloads].  == System requirements ==  For up to 8 players the following resources are enough:  * some Linux distro with glibc * 1 vCPU (x86_64) * 512MB RAM  With more players, occasional lags start happening, you should provide more CP...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A dedicated server can be hosted on linux x86_64 systems - not on windows currently (running on WSL appears to be working [citation needed]).&lt;br /&gt;
&lt;br /&gt;
The most recent version can be downloaded from [https://soldat2.com/downloads.html soldat2.com/downloads].&lt;br /&gt;
&lt;br /&gt;
== System requirements ==&lt;br /&gt;
&lt;br /&gt;
For up to 8 players the following resources are enough:&lt;br /&gt;
&lt;br /&gt;
* some Linux distro with glibc&lt;br /&gt;
* 1 vCPU (x86_64)&lt;br /&gt;
* 512MB RAM&lt;br /&gt;
&lt;br /&gt;
With more players, occasional lags start happening, you should provide more CPU in that case.&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
&lt;br /&gt;
The following guide was originally written by Maz on [https://steamcommunity.com/sharedfiles/filedetails/?id=2793260281 steam] for a Ubuntu 20.04 system.&lt;br /&gt;
&lt;br /&gt;
=== Preamble ===&lt;br /&gt;
For this guide, understanding of the Linux-based operating system you're using, specifically the command line, is highly advised.&lt;br /&gt;
This is not a noob-friendly guide, one may or may not be created by the community. This is a simplified, barebones guide to serve as a guideline for Soldat 2 server hosting.&lt;br /&gt;
If you run into any major issues or errors, related to for example a specific OS or library support, please post below so it can be looked at. If you need personal (real-time) assistance, you're better off joining the official Discord instead of asking around in the #help channel: https://discord.gg/T8ejr5u&lt;br /&gt;
&lt;br /&gt;
=== Port forwarding ===&lt;br /&gt;
The default port for Soldat 2 is 33073. If you are running the server behind a firewall (e.g. a server at home, rather than an external dedicated server or VPS) make sure to port-forward this port for TCP &amp;amp; UDP.&lt;br /&gt;
If you wish to use another port, you set this in the config later in the guide.&lt;br /&gt;
&lt;br /&gt;
=== Installing the server ===&lt;br /&gt;
You should create a new user for Soldat 2 and NOT run the following commands as root. If you're root, this might work:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
useradd soldat2&lt;br /&gt;
sudo -i soldat2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can run a server on the release version or on the beta version. Choose one of the packages below.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget https://dl.thd.vg/soldat2-linuxserver-release.tar.gz&lt;br /&gt;
wget https://dl.thd.vg/soldat2-linuxserver-test.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following commands assume you've downloaded the release version.&lt;br /&gt;
If you downloaded the test version, change the file naming accordingly.&lt;br /&gt;
&lt;br /&gt;
Decompress the package:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar -zxf soldat2-linuxserver-release.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Navigate to the server folder, and run the server once to generate the configuration file &amp;lt;code&amp;gt;autoconfig.ini&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd soldat2-linuxserver-release&lt;br /&gt;
./soldat&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once the server has started, you may stop the server again (CTRL+C), so you should modify the newly-generated config file (see blow).&lt;br /&gt;
&lt;br /&gt;
=== Common issues ===&lt;br /&gt;
&lt;br /&gt;
==== SSL errors ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
*Note*: only ever write changes to autoconfig.ini after the server has stopped - your changes will be lost as the file is rewritten when the server stops.&lt;br /&gt;
&lt;br /&gt;
Open the config file with your preferred text editor:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano autoconfig.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Most relevant options are fairly self-explanatory.&lt;br /&gt;
You should *change at least the following options*:&lt;br /&gt;
* Name - sets the server name&lt;br /&gt;
* MaxPlayers - set the maximum of players on the server&lt;br /&gt;
&lt;br /&gt;
Also, fill greet.txt with your own content - it is displayed at the beginning of each match&lt;br /&gt;
&lt;br /&gt;
=== Manage bots ===&lt;br /&gt;
&lt;br /&gt;
* FillBotsCount - the amount of bots added to an empty server. they will be replaced by human players.&lt;br /&gt;
* FillBotsDifficulty - 0 is stupid, 3 is butcher&lt;br /&gt;
&lt;br /&gt;
=== Set up admin commands ===&lt;br /&gt;
&lt;br /&gt;
* AdminPlayfabID - your Playfab ID to be admin automatically (To find your Playfab ID, start the server and join with your client. Your Playfab ID will show up in the server logs as &amp;lt;code&amp;gt;1 YOUR_NAME joined the server [YOUR_PLAYFAB_ID]&amp;lt;/code&amp;gt;)&lt;br /&gt;
* RconPassword - if set, more than one player can send admin commands.&lt;br /&gt;
&lt;br /&gt;
=== Play pre-selected maps &amp;amp; game modes only ===&lt;br /&gt;
&lt;br /&gt;
* UseLobby = False&lt;br /&gt;
* AllowVoting = False&lt;br /&gt;
* GamesCycleFile = Cycles/Custom/selected-maps.json&lt;br /&gt;
&lt;br /&gt;
Having this, list the maps you want in your game cycle:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano Cycles/Custom/selected-maps.json&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
  &amp;quot;Rules&amp;quot;: &amp;quot;Deathmatch&amp;quot;,&lt;br /&gt;
  &amp;quot;Level&amp;quot;: &amp;quot;dm_epitaph&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
See also [[Command Line Arguments]].&lt;br /&gt;
&lt;br /&gt;
=== Admin Commands ===&lt;br /&gt;
&lt;br /&gt;
To wield admin power on your server:&lt;br /&gt;
&lt;br /&gt;
* Set up admin access in configuration (see above)&lt;br /&gt;
&lt;br /&gt;
* Join the server&lt;br /&gt;
&lt;br /&gt;
* Open the console by pressing Alt+~. There you can enter commands (use Tab to see available commands. syntax is not case sensitive).&lt;br /&gt;
&lt;br /&gt;
* Gain admin rights: If you entered a AdminPlayfabID in autoconfig.ini, you should have a red [Admin] tag on the scoreboard. Other players can also gain admin privileges by running the command &amp;lt;code&amp;gt;rcon &amp;amp;lt;password&amp;amp;gt;&amp;lt;/code&amp;gt; in the console.&lt;br /&gt;
&lt;br /&gt;
* To apply a command to the server, prefix them with &amp;lt;code&amp;gt;rcon&amp;lt;/code&amp;gt;. Apparently, the commands are not case sensitive.&lt;br /&gt;
&lt;br /&gt;
==== Available commands ====&lt;br /&gt;
&lt;br /&gt;
copied from faq.txt in the 0.8.60 server tarball:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        Vote&lt;br /&gt;
        Info&lt;br /&gt;
        AddBot&lt;br /&gt;
        RemBot&lt;br /&gt;
        Restart&lt;br /&gt;
        NextMap&lt;br /&gt;
        LoadMap [mapname] [gamemode]&lt;br /&gt;
        AddModifier [modifier] (Restart or LoadMap to apply)&lt;br /&gt;
        RemoveModifier [modifier]&lt;br /&gt;
        Ban [id] - bans for a couple days&lt;br /&gt;
        Kick [id]&lt;br /&gt;
        Kick [id] &amp;quot;reason&amp;quot; (use parenthesis eg. kick 13 &amp;quot;for being mean&amp;quot;)&lt;br /&gt;
        KickAll&lt;br /&gt;
        KickAll &amp;quot;reason&amp;quot;&lt;br /&gt;
        SetTeam [id] [team] (will disable autobalance for the duration of the match)&lt;br /&gt;
        ListPlayers&lt;br /&gt;
        ListMaps&lt;br /&gt;
        Say [optional-id] &amp;quot;&amp;quot; (use parenthesis eg. say &amp;quot;hello world&amp;quot;)&lt;br /&gt;
        LoadCycle [Cycles/filename.json]&lt;br /&gt;
        Rcon [command]&lt;br /&gt;
        Rcon [password] (first, if not admin)&lt;br /&gt;
        Reload (recompiles scripts)&lt;br /&gt;
        Info (useful info)&lt;br /&gt;
        Vote (starts map vote)&lt;br /&gt;
        RestartServer (reloads the map cycle and restarts)&lt;br /&gt;
        Version (prints game version)&lt;br /&gt;
&lt;br /&gt;
        Set [variable] [value] &lt;br /&gt;
                - use proper casing&lt;br /&gt;
                - works for config vars (autoconfig.json) eg. &amp;quot;Set ServerPassword bla&amp;quot;&lt;br /&gt;
                - rules components (eg. Rules/CaptureTheFlag.json) eg. &amp;quot;Set Match.MinimumPlayers 4&amp;quot;&lt;br /&gt;
                - client settings (client.json) eg. &amp;quot;Set GameSettings.SoundsVolume 0.75&amp;quot;&lt;br /&gt;
        Get [variable]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Examples ====&lt;br /&gt;
&lt;br /&gt;
* dynamically change the amount of bots on the server to 5 - numPlayers: &amp;lt;code&amp;gt;rcon set fillbotscount 5&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* restart the match with a modifier added: &amp;lt;code&amp;gt;rcon addmodifier Amputation&amp;lt;/code&amp;gt;, then &amp;lt;code&amp;gt;rcon restart&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* kick all players with a reason: &amp;lt;code&amp;gt;rcon kickall &amp;quot;restarting the server to fix disconnect issues. will be back in a minute&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* manually balance teams: &amp;lt;code&amp;gt;rcon listplayers&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;rcon setteam &amp;amp;lt;playerid&amp;amp;gt; &amp;amp;lt;0|1&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Main_Page&amp;diff=92</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Main_Page&amp;diff=92"/>
		<updated>2023-01-19T11:57:23Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;Welcome to the Soldat 2 Wiki&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contents ==&lt;br /&gt;
&lt;br /&gt;
* [[Weapons]]&lt;br /&gt;
* [[Ranked]]&lt;br /&gt;
* [[Movement|Movement Guide]]&lt;br /&gt;
* [[:Category:Modding]]&lt;br /&gt;
** [[Mapping|Mapping Guide]]&lt;br /&gt;
** [[Scripting Introduction]]&lt;br /&gt;
** [[Scripting Events]]&lt;br /&gt;
* [[Server Hosting]]&lt;br /&gt;
&lt;br /&gt;
== Important Links ==&lt;br /&gt;
* [https://store.steampowered.com/app/474220/Soldat_2/ Soldat 2 on STEAM]&lt;br /&gt;
* [https://oczki.pl/s2-players Active Player Dashboard]&lt;br /&gt;
* [https://stats.soldat2.com/ Ranked Ladder Statistics &amp;amp; Leaderboards]&lt;br /&gt;
* [https://tms2.jrgp.org/ The Soldat 2 Mapping Showcase]&lt;br /&gt;
* [https://kreis.uber.space/soldat2/mapview/ Map Search &amp;amp; Overview]&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Mapping&amp;diff=91</id>
		<title>Mapping</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Mapping&amp;diff=91"/>
		<updated>2023-01-19T11:56:04Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Creating custom maps &amp;amp; mods is explicitly welcomed - Soldat 2 ships with a built in map editor.&lt;br /&gt;
&lt;br /&gt;
[[Category:Modding]]&lt;br /&gt;
&lt;br /&gt;
== General Tips for Mapping ==&lt;br /&gt;
&lt;br /&gt;
* Make your map ''readable''; follow functional conventions of map design. Steel beams and big bridges are almost always ''collisionmodel: players collide'', while small stairs and platforms are - guess what - ''collisionmodel: platform''. Sandbags and barrels are always ''collisionmodel: bullets collide''.&lt;br /&gt;
&lt;br /&gt;
* Especially on CTF maps, make sure to place grenade kits, health packs, and sandbags / barrels, and choose their locations wisely.&lt;br /&gt;
&lt;br /&gt;
* Check your map for bad spawn locations in DM - even if it's not a DM map. See section [[#Unwanted Spawn Locations]] for details.&lt;br /&gt;
&lt;br /&gt;
* Put work in selecting good colors from the start (see below for a guide to what each color does). This will help a lot getting a good feel for the map.&lt;br /&gt;
&lt;br /&gt;
* Always test your maps with the graphics setting ''detailed backgrounds'' set to off. Many people play with this setting (for various reasons), so the map must look okay with this. With this configuration...&lt;br /&gt;
** the &amp;lt;code&amp;gt;SkyColor1&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;SkyColor2&amp;lt;/code&amp;gt; colors are not used for the map background. Instead &amp;lt;code&amp;gt;BackDimColor&amp;lt;/code&amp;gt; is applied to the background. Make sure it looks OK.&lt;br /&gt;
** anything in the ''background'' layer is not drawn. Look for map-props that appear floating because they are placed on a ''background'' shape. To fix this, put these objects also in the ''background'' layer, or move them to a better position.&lt;br /&gt;
&lt;br /&gt;
* Add depth to the map by placing objects deep into the foreground and background. ''dm_db_cuba'' is a good example of this.&lt;br /&gt;
&lt;br /&gt;
* Most props are 3D - rotating them often gives them quite different appearance and use on the map. Make use of this property to reduce repetition, or to reinterpret what those props represent.&lt;br /&gt;
&lt;br /&gt;
* Don't overdo decoration, it will distract too much during game play and in some cases eat FPS of your players. When in doubt, place decorative props on the background layer, so players can hide them via the ''disable detailed backgrounds'' setting.&lt;br /&gt;
&lt;br /&gt;
* There are already a shitload of maps (check out [https://tms2.jrgp.org/ TMS]). If you want to create a map that gets played, make sure you do at least one thing differently. Or fill a niche that isn't populated yet. If you just want to create a piece of art that's great too of course&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Built-in Map Editor ==&lt;br /&gt;
&lt;br /&gt;
The built-in editor is as of v0.8.46a still very much beta - its UI is quite rough around the edges.&lt;br /&gt;
Here are some tips for working with it.&lt;br /&gt;
&lt;br /&gt;
=== General Concepts ===&lt;br /&gt;
&lt;br /&gt;
Maps primarily consist of polygons (''protoshapes''), 3D-props, and spawn locations for various items, and a color scheme.&lt;br /&gt;
Props and protoshapes have attributes that affect their rendering.&lt;br /&gt;
Protoshapes also have a collision model (props don't - to make something collide with a prop, draw a protoshape with disabled rendering on top of it).&lt;br /&gt;
Maps are persisted to a JSON structure.&lt;br /&gt;
&lt;br /&gt;
=== MapProp &amp;amp; Protoshape Properties ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Rendering Layer ====&lt;br /&gt;
&lt;br /&gt;
Each object on the map is placed a rendering layer, which affects (a) how it is colored, and (b) sets a default value for the depth / z parameter. Available values are:&lt;br /&gt;
&lt;br /&gt;
* foreground: slightly desaturated, applies ''SunColor'' taint. default for solid protoshapes.&lt;br /&gt;
* none: don't draw this object.&lt;br /&gt;
* background: desaturates and darkens the object, and applies ''Fog*'' and ''BackDimColor'' taints to it. default for non-colliding protoshapes, which get a different texture applied.&lt;br /&gt;
* color: directly applies the color defined on the object 1:1. protoshapes with this also get a different texture.&lt;br /&gt;
* original: similar to ''color'', but not the same?&lt;br /&gt;
** TODO: whats the difference?&lt;br /&gt;
&lt;br /&gt;
==== Collision Model ====&lt;br /&gt;
&lt;br /&gt;
Applies to Protoshapes only, it's pretty self-explanatory.&lt;br /&gt;
Note that platform shapes will always draw a dashed outline, which is good, as it helps with map readability.&lt;br /&gt;
&lt;br /&gt;
==== Material ====&lt;br /&gt;
&lt;br /&gt;
Defines the sound effect when bullets hit this shape. Also applies different bullet ricochet visuals (but those are not actual bullet ricochets able to hit players).&lt;br /&gt;
&lt;br /&gt;
=== Map Settings ===&lt;br /&gt;
&lt;br /&gt;
There are plenty of settings. I highly recommend exploring the entire settings panel, but you can use this section as a guide.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;q&amp;gt;Note that this section does not primarily consist of authoritative information, but is to a large degree reverse 'engineered'.&amp;lt;/q&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Dimensions &amp;amp; Scaling ====&lt;br /&gt;
&lt;br /&gt;
* ''Width'', ''Height'': Defines the map size&lt;br /&gt;
&lt;br /&gt;
* ''Scale'': This vector does '''not''' scale the whole map (see '''GlobalScale''' for that) - it's a multiplier on the ''Width'' and ''Height'' attributes.&lt;br /&gt;
&lt;br /&gt;
* ''Mirror'': Enable this if you want a symmetrical map. You only draw the left half of the map, and the game generates the other half on the fly. To get a preview, use the ''mirror'' button at the bottom of the settings UI. Individual map objects can be excluded from mirroring via the ''Mirror'' flag.&lt;br /&gt;
&lt;br /&gt;
* ''GlobalScale, GlobalPosition'': These values transform all objects on the map. Do '''not''' set these numbers in the settings panel, but use the ''transform'' button in the map settings panel (the transformation handle UI can appear outside of the map bounds)&lt;br /&gt;
&lt;br /&gt;
==== Lighting ====&lt;br /&gt;
* '''SunLightColor''': Sunlight color taints all objects in the ''foreground'' rendering layer.&lt;br /&gt;
* '''SunIntensityShift''': The amount of sunlight&lt;br /&gt;
* '''SunHorizontalAngle''', '''SunVerticalAngle''': the angle from which light is applied, useful for shadows on protoshape normals.&lt;br /&gt;
&lt;br /&gt;
* '''Fog''', '''FogColor''', '''FogDistance''': fog applies a taint to ''background'' objects, which is applied with increasing opacity with increasing depth (z axis coordinate).&lt;br /&gt;
&lt;br /&gt;
* '''HueShift''' '''SaturationShift''' '''BrightnessShift''': These transform all colors specified in the settings panel, but does not apply to colors specified on individual map objects.&lt;br /&gt;
&lt;br /&gt;
==== Sky / Background Colors ====&lt;br /&gt;
&lt;br /&gt;
* '''SkyColor''', '''SkyColor2''': two colors with a gradient in between can be defined.&lt;br /&gt;
* '''SkyGradientScale''', '''SkyGradientOffset''', '''SkyGradientRotation''': Parameters for the gradient between ''SkyColor'' and ''SkyColor2''.&lt;br /&gt;
* '''BackDimColor''': fallback color for the sky, when the setting ''detailed backgrounds'' is disabled. Note that this also applies a taint on ''background'' objects (why tho?).&lt;br /&gt;
&lt;br /&gt;
==== Other Colors ====&lt;br /&gt;
&lt;br /&gt;
* '''FadeColor''': Color applied to the area outside of the map boundary.&lt;br /&gt;
* '''EffectsColor''': Color used to taint stuff like explosions. White == untainted.&lt;br /&gt;
&lt;br /&gt;
==== Protoshapes ====&lt;br /&gt;
&lt;br /&gt;
* '''PlatformsColor''': default color for all ''foreground'' platforms, unless they have an individual color specified.&lt;br /&gt;
&lt;br /&gt;
* '''BackColor''': default color for all ''background'' platforms, unless they have an individual color specified.&lt;br /&gt;
&lt;br /&gt;
* '''PlatformsTexture''', '''NormalTexture''': defines the texture of the protoshapes and their normals (i.e the depth information that makes them have shadows.&lt;br /&gt;
** '''TODO''': is it possible to provide custom textures by placing them next to a map in the &amp;lt;code&amp;gt;Levels/Custom/&amp;lt;/code&amp;gt; dir?&lt;br /&gt;
&lt;br /&gt;
* '''DetaulTexture''', '''DetailNormalTexture''', '''DetailTextureScale''', '''DetailNormalTextureScale''', '''DetailImpact''', '''DetailGradientTexture''', '''DetailColor''': Additionally to their primary texture, protoshapes have a detail overlay with a separate set of textures. ''DetailImpact'' scales the visibility of this overlay.&lt;br /&gt;
** Note: iiuc, this is mostly a relic from the pre-0.8 versions with a different renderer. To me, these settings are of little use for design.&lt;br /&gt;
&lt;br /&gt;
==== Miscellaneous ====&lt;br /&gt;
&lt;br /&gt;
* '''Author''': self-explanatory. Make sure to fill this in, people want to be able to find the creator of a map.&lt;br /&gt;
* '''AmbientSound''': selects one of a couple soundscapes. there is nothing worse than a sunny map with rumble ambience, be sure to choose a proper ambience.&lt;br /&gt;
* '''Generate''': ??? iirc when enabled enabled, some sandbags etc are placed around each basecamp / flag placement.&lt;br /&gt;
* '''Seed''': RNG initialization value for the ''generate'' feature.&lt;br /&gt;
* '''TopBarrierheight''': ???&lt;br /&gt;
&lt;br /&gt;
=== Workarounds ===&lt;br /&gt;
&lt;br /&gt;
While the editor is in beta, there are plenty of bugs. For many, a workaround is available:&lt;br /&gt;
&lt;br /&gt;
==== Unwanted Spawn Locations ====&lt;br /&gt;
&lt;br /&gt;
In DM, players spawn at random locations on top of any colliding protoshape within map bounds, and not at the spawn locations you can place with the Gostek symbol.&lt;br /&gt;
If your map is enclosed by a protoshape that does not extend well outside of the map bounds, players ''will'' spawn there.&lt;br /&gt;
&lt;br /&gt;
This can be avoided, by placing another protoshape along the outer edge of your enclosing shape, extending it well outside of the map bounds.&lt;br /&gt;
To not affect your map design you can set apply &amp;lt;code&amp;gt;collision-model: players collide&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rendering mode: none&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Selecting / moving all map objects ====&lt;br /&gt;
&lt;br /&gt;
It can quickly happen that you run out of space in the left or bottom area.&lt;br /&gt;
Instead of moving each object, use the ''transform'' button in the map settings panel to select all objects and move, rotate or scale them all.&lt;br /&gt;
&lt;br /&gt;
==== Protoshape with ''render mode: color'' does not apply color ====&lt;br /&gt;
&lt;br /&gt;
Restart the editor. ¯\_ (ツ)_/¯. &lt;br /&gt;
&lt;br /&gt;
==== Protoshape is invisible ====&lt;br /&gt;
&lt;br /&gt;
This can happen when a shape is very thin or has a very pointy corner.&lt;br /&gt;
Moving some vertices around can often fix the issue. If not, creating an extension of the shape&lt;br /&gt;
&lt;br /&gt;
==== Protoshape is always drawn in front of Gosteks ====&lt;br /&gt;
&lt;br /&gt;
The exact root cause is still unclear, some protoshapes just always appear in front of the player, independent of their rendering layer setting and depth value. It could have to do with the vertex order being wrong (clockwise instead of anticlockwise or vice versa). To fix this move some vertexes around, or just replace the shape another with another protoshape that does not have this problem.&lt;br /&gt;
&lt;br /&gt;
== Third Party Tools ==&lt;br /&gt;
&lt;br /&gt;
The community also has written tools for creating maps that integrate with the map game / map editor:&lt;br /&gt;
&lt;br /&gt;
* [https://kreis.uber.space/soldat2/svg2map/ svg2map] by @noerw converts between map JSON files and SVG and can be used to create or edit protoshapes in programs like [https://inkscape.org/ Inkscape].&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Scripting_Events&amp;diff=90</id>
		<title>Scripting Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Scripting_Events&amp;diff=90"/>
		<updated>2023-01-19T11:55:40Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The main method for reacting to gameplay events in Soldat 2 scripting is by registering ''listeners''. This is done by calling the &amp;lt;code&amp;gt;AddListener()&amp;lt;/code&amp;gt; function, usually on the &amp;lt;code&amp;gt;Eventor&amp;lt;/code&amp;gt; object.&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting]]&lt;br /&gt;
&lt;br /&gt;
== Eventor Events ==&lt;br /&gt;
In the case of Eventor listeners, you will need to specify both the event type to listen for, as well as a function to be called when the event occurs. Callback functions should have the signature &amp;lt;code&amp;gt;void cb_func(IGameEvent)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The event types that are used with Eventor are defined by the &amp;lt;code&amp;gt;Events&amp;lt;/code&amp;gt; enum, which currently contains:&lt;br /&gt;
* None&lt;br /&gt;
* New_Connection&lt;br /&gt;
* Created&lt;br /&gt;
* Destroyed&lt;br /&gt;
* Died&lt;br /&gt;
* Add_Player&lt;br /&gt;
* Remove_Player&lt;br /&gt;
* Player_Joined&lt;br /&gt;
* Player_Assigned&lt;br /&gt;
* Player_Left&lt;br /&gt;
* Player_Changed_Team&lt;br /&gt;
* Player_Unassigned&lt;br /&gt;
* Level_Loaded&lt;br /&gt;
* Rules_Loaded&lt;br /&gt;
* Impacted&lt;br /&gt;
* Weapon_Selected&lt;br /&gt;
* Trigger&lt;br /&gt;
* Match_Waiting&lt;br /&gt;
* Match_Warmup&lt;br /&gt;
* Match_Started&lt;br /&gt;
* Match_Ended&lt;br /&gt;
* Hit&lt;br /&gt;
* Camera_Target_Changed&lt;br /&gt;
* Camera_Created&lt;br /&gt;
* Powerup_Started&lt;br /&gt;
* Powerup_Ended&lt;br /&gt;
* Bullet_Created&lt;br /&gt;
* Bot_Assigned&lt;br /&gt;
* Flag_Captured&lt;br /&gt;
* Flag_Returned&lt;br /&gt;
* Flag_Grabbed&lt;br /&gt;
* Use_Weapon&lt;br /&gt;
* Construct_AddBody&lt;br /&gt;
* Construct_RemoveBody&lt;br /&gt;
* Properties_Changed&lt;br /&gt;
* Item_Dropped&lt;br /&gt;
* Item_Picked&lt;br /&gt;
* AssignedNetworkId&lt;br /&gt;
* Changed_Team&lt;br /&gt;
* Request_Spawn&lt;br /&gt;
* End_Condition&lt;br /&gt;
* Reserved&lt;br /&gt;
&lt;br /&gt;
A full example of an AddListener call is &amp;lt;code&amp;gt;Eventor.AddListener(Events.Died, OnPlayerDied)&amp;lt;/code&amp;gt;. These calls are usually placed within the &amp;lt;code&amp;gt;Awake()&amp;lt;/code&amp;gt; function of the script, which is executed when the script is loaded. Note that each AddListener call should be paired with a RemoveListener call (usually in the &amp;lt;code&amp;gt;OnDestroy()&amp;lt;/code&amp;gt; function) to ensure that the script does not continue to respond to events after it has been disabled. See the Unity manual entry for the [https://docs.unity3d.com/2020.1/Documentation/ScriptReference/MonoBehaviour.html MonoBehaviour] class for other special functions.&lt;br /&gt;
&lt;br /&gt;
== Other Events ==&lt;br /&gt;
Not all necessary game events are currently accessible with just the Eventor object, methods for adding listeners to other useful events are listed below:&lt;br /&gt;
* Player chat events: &amp;lt;code&amp;gt;GameChat.instance.OnChat.AddListener()&amp;lt;/code&amp;gt;, only takes a callback function as an argument, required signature for callback is &amp;lt;code&amp;gt;void cb_func(Player, string)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If an event is not available for a specific gameplay element you are interested in responding to, it is also possible to use a polling approach to detect that event by using either the &amp;lt;code&amp;gt;Update()&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;FixedUpdate()&amp;lt;/code&amp;gt; functions which are called periodically by the engine.&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Category:Modding&amp;diff=89</id>
		<title>Category:Modding</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Category:Modding&amp;diff=89"/>
		<updated>2023-01-19T11:55:29Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: Created blank page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Category:Scripting&amp;diff=88</id>
		<title>Category:Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Category:Scripting&amp;diff=88"/>
		<updated>2023-01-19T11:55:22Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Pages related to scripting in Soldat 2&lt;br /&gt;
&lt;br /&gt;
[[Category:Modding]]&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Scripting_Introduction&amp;diff=87</id>
		<title>Scripting Introduction</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Scripting_Introduction&amp;diff=87"/>
		<updated>2023-01-19T11:48:11Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Scripting in Soldat 2 is done in a Unity/C# environment. For a script to be usable in-game, the script file must be placed under &amp;lt;code&amp;gt;Soldat2/Scripts/&amp;lt;/code&amp;gt; and there needs to be a ruleset that specifies that script in the &amp;lt;i&amp;gt;GameScript&amp;lt;/i&amp;gt; object in its json - for example, see &amp;lt;code&amp;gt;Soldat2/Rules/Standard/Climb.json&amp;lt;/code&amp;gt;. The script can be tested by starting a game that uses that ruleset.&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Scripting Resources ==&lt;br /&gt;
The Soldat 2 engine uses Unity, so it may be useful to familiarise yourself with the [https://docs.unity3d.com/2020.1/Documentation/Manual/index.html Unity Manual].&lt;br /&gt;
&lt;br /&gt;
There is some [https://soldat2.com/docs/ preliminary documentation] for the Soldat 2 engine, however it is currently rather limited.&lt;br /&gt;
&lt;br /&gt;
Some examples of scripts can be found in your Soldat 2 game directory under the path &amp;lt;code&amp;gt;Soldat2/Scripts/Standard/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
More documentation is added to this wiki under [[:Category:Scripting]].&lt;br /&gt;
&lt;br /&gt;
== Using Scripts ==&lt;br /&gt;
&lt;br /&gt;
A script can be applied to a match via [[Modifiers]] or via a [[Game Mode]] (&amp;quot;Rules&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== In a modifier ===&lt;br /&gt;
Example of a modifier &amp;lt;code&amp;gt;Modifiers/Custom/FlagIsPoison.json&amp;lt;/code&amp;gt; applying the &amp;lt;code&amp;gt;Scripts/Custom/FlagIsPoison.cs&amp;lt;/code&amp;gt; script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;Objects&amp;quot;: {&lt;br /&gt;
    &amp;quot;Rules&amp;quot;: {&lt;br /&gt;
      &amp;quot;FlagIsPoison&amp;quot;: {&lt;br /&gt;
        &amp;quot;FlagDamagePerSecond&amp;quot;: 3.0&lt;br /&gt;
      }&lt;br /&gt;
    }   &lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;Meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;Description&amp;quot;: &amp;quot;(applies the FlagIsPoison script)&amp;quot;,&lt;br /&gt;
    &amp;quot;Author&amp;quot;: &amp;quot;noerw&amp;quot;,&lt;br /&gt;
    &amp;quot;Version&amp;quot;: 1.0&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A script can be parametrized, where the parameters are defined in the modifier or rule definition. In the above example the &amp;lt;code&amp;gt;FlagDamagePerSecond&amp;lt;/code&amp;gt; parameter is applied when the script class contains a &amp;lt;code&amp;gt;JsonProperty&amp;lt;/code&amp;gt; with a default value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[JsonProperty(&amp;quot;FlagDamagePerSecond&amp;quot;)] public float flagDPS = 5.0;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== In a rule / game mode ===&lt;br /&gt;
&lt;br /&gt;
Add the script name to the &amp;lt;code&amp;gt;GameRules&amp;lt;/code&amp;gt; section of the rule definition in &amp;lt;code&amp;gt;Rules/Custom/YourGameMode.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;Objects&amp;quot;: {&lt;br /&gt;
    &amp;quot;YourGameMode&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      &amp;quot;GameScript&amp;quot;: {&lt;br /&gt;
        &amp;quot;Scripts&amp;quot;: [&lt;br /&gt;
          ... potentially other scripts ...,&lt;br /&gt;
          &amp;quot;YourScriptName&amp;quot;&lt;br /&gt;
        ]&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* TODO: check if parameters can be passed in this syntax too (eg &amp;lt;code&amp;gt;&amp;quot;Scripts&amp;quot;: [{ &amp;quot;YourScriptName&amp;quot;: { MyParam: false } }]&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Scripting_Events&amp;diff=86</id>
		<title>Scripting Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Scripting_Events&amp;diff=86"/>
		<updated>2023-01-19T11:43:12Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: add Modding &amp;amp; Scripting categories&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The main method for reacting to gameplay events in Soldat 2 scripting is by registering ''listeners''. This is done by calling the &amp;lt;code&amp;gt;AddListener()&amp;lt;/code&amp;gt; function, usually on the &amp;lt;code&amp;gt;Eventor&amp;lt;/code&amp;gt; object.&lt;br /&gt;
&lt;br /&gt;
[[Category:Modding]]&lt;br /&gt;
[[Category:Scripting]]&lt;br /&gt;
&lt;br /&gt;
== Eventor Events ==&lt;br /&gt;
In the case of Eventor listeners, you will need to specify both the event type to listen for, as well as a function to be called when the event occurs. Callback functions should have the signature &amp;lt;code&amp;gt;void cb_func(IGameEvent)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The event types that are used with Eventor are defined by the &amp;lt;code&amp;gt;Events&amp;lt;/code&amp;gt; enum, which currently contains:&lt;br /&gt;
* None&lt;br /&gt;
* New_Connection&lt;br /&gt;
* Created&lt;br /&gt;
* Destroyed&lt;br /&gt;
* Died&lt;br /&gt;
* Add_Player&lt;br /&gt;
* Remove_Player&lt;br /&gt;
* Player_Joined&lt;br /&gt;
* Player_Assigned&lt;br /&gt;
* Player_Left&lt;br /&gt;
* Player_Changed_Team&lt;br /&gt;
* Player_Unassigned&lt;br /&gt;
* Level_Loaded&lt;br /&gt;
* Rules_Loaded&lt;br /&gt;
* Impacted&lt;br /&gt;
* Weapon_Selected&lt;br /&gt;
* Trigger&lt;br /&gt;
* Match_Waiting&lt;br /&gt;
* Match_Warmup&lt;br /&gt;
* Match_Started&lt;br /&gt;
* Match_Ended&lt;br /&gt;
* Hit&lt;br /&gt;
* Camera_Target_Changed&lt;br /&gt;
* Camera_Created&lt;br /&gt;
* Powerup_Started&lt;br /&gt;
* Powerup_Ended&lt;br /&gt;
* Bullet_Created&lt;br /&gt;
* Bot_Assigned&lt;br /&gt;
* Flag_Captured&lt;br /&gt;
* Flag_Returned&lt;br /&gt;
* Flag_Grabbed&lt;br /&gt;
* Use_Weapon&lt;br /&gt;
* Construct_AddBody&lt;br /&gt;
* Construct_RemoveBody&lt;br /&gt;
* Properties_Changed&lt;br /&gt;
* Item_Dropped&lt;br /&gt;
* Item_Picked&lt;br /&gt;
* AssignedNetworkId&lt;br /&gt;
* Changed_Team&lt;br /&gt;
* Request_Spawn&lt;br /&gt;
* End_Condition&lt;br /&gt;
* Reserved&lt;br /&gt;
&lt;br /&gt;
A full example of an AddListener call is &amp;lt;code&amp;gt;Eventor.AddListener(Events.Died, OnPlayerDied)&amp;lt;/code&amp;gt;. These calls are usually placed within the &amp;lt;code&amp;gt;Awake()&amp;lt;/code&amp;gt; function of the script, which is executed when the script is loaded. Note that each AddListener call should be paired with a RemoveListener call (usually in the &amp;lt;code&amp;gt;OnDestroy()&amp;lt;/code&amp;gt; function) to ensure that the script does not continue to respond to events after it has been disabled. See the Unity manual entry for the [https://docs.unity3d.com/2020.1/Documentation/ScriptReference/MonoBehaviour.html MonoBehaviour] class for other special functions.&lt;br /&gt;
&lt;br /&gt;
== Other Events ==&lt;br /&gt;
Not all necessary game events are currently accessible with just the Eventor object, methods for adding listeners to other useful events are listed below:&lt;br /&gt;
* Player chat events: &amp;lt;code&amp;gt;GameChat.instance.OnChat.AddListener()&amp;lt;/code&amp;gt;, only takes a callback function as an argument, required signature for callback is &amp;lt;code&amp;gt;void cb_func(Player, string)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If an event is not available for a specific gameplay element you are interested in responding to, it is also possible to use a polling approach to detect that event by using either the &amp;lt;code&amp;gt;Update()&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;FixedUpdate()&amp;lt;/code&amp;gt; functions which are called periodically by the engine.&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Scripting_Introduction&amp;diff=85</id>
		<title>Scripting Introduction</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Scripting_Introduction&amp;diff=85"/>
		<updated>2023-01-19T11:39:43Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Scripting in Soldat 2 is done in a Unity/C# environment. For a script to be usable in-game, the script file must be placed under &amp;lt;code&amp;gt;Soldat2/Scripts/&amp;lt;/code&amp;gt; and there needs to be a ruleset that specifies that script in the &amp;lt;i&amp;gt;GameScript&amp;lt;/i&amp;gt; object in its json - for example, see &amp;lt;code&amp;gt;Soldat2/Rules/Standard/Climb.json&amp;lt;/code&amp;gt;. The script can be tested by starting a game that uses that ruleset.&lt;br /&gt;
&lt;br /&gt;
== Scripting Resources ==&lt;br /&gt;
The Soldat 2 engine uses Unity, so it may be useful to familiarise yourself with the [https://docs.unity3d.com/2020.1/Documentation/Manual/index.html Unity Manual].&lt;br /&gt;
&lt;br /&gt;
There is some [https://soldat2.com/docs/ preliminary documentation] for the Soldat 2 engine, however it is currently rather limited.&lt;br /&gt;
&lt;br /&gt;
Some examples of scripts can be found in your Soldat 2 game directory under the path &amp;lt;code&amp;gt;Soldat2/Scripts/Standard/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting]]&lt;br /&gt;
&lt;br /&gt;
== Using Scripts ==&lt;br /&gt;
&lt;br /&gt;
A script can be applied to a match via [[Modifiers]] or via a [[Game Mode]] (&amp;quot;Rules&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== In a modifier ===&lt;br /&gt;
Example of a modifier &amp;lt;code&amp;gt;Modifiers/Custom/FlagIsPoison.json&amp;lt;/code&amp;gt; applying the &amp;lt;code&amp;gt;Scripts/Custom/FlagIsPoison.cs&amp;lt;/code&amp;gt; script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;Objects&amp;quot;: {&lt;br /&gt;
    &amp;quot;Rules&amp;quot;: {&lt;br /&gt;
      &amp;quot;FlagIsPoison&amp;quot;: {&lt;br /&gt;
        &amp;quot;FlagDamagePerSecond&amp;quot;: 3.0&lt;br /&gt;
      }&lt;br /&gt;
    }   &lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;Meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;Description&amp;quot;: &amp;quot;(applies the FlagIsPoison script)&amp;quot;,&lt;br /&gt;
    &amp;quot;Author&amp;quot;: &amp;quot;noerw&amp;quot;,&lt;br /&gt;
    &amp;quot;Version&amp;quot;: 1.0&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A script can be parametrized, where the parameters are defined in the modifier or rule definition. In the above example the &amp;lt;code&amp;gt;FlagDamagePerSecond&amp;lt;/code&amp;gt; parameter is applied when the script class contains a &amp;lt;code&amp;gt;JsonProperty&amp;lt;/code&amp;gt; with a default value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[JsonProperty(&amp;quot;FlagDamagePerSecond&amp;quot;)] public float flagDPS = 5.0;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== In a rule / game mode ===&lt;br /&gt;
&lt;br /&gt;
Add the script name to the &amp;lt;code&amp;gt;GameRules&amp;lt;/code&amp;gt; section of the rule definition in &amp;lt;code&amp;gt;Rules/Custom/YourGameMode.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;Objects&amp;quot;: {&lt;br /&gt;
    &amp;quot;YourGameMode&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      &amp;quot;GameScript&amp;quot;: {&lt;br /&gt;
        &amp;quot;Scripts&amp;quot;: [&lt;br /&gt;
          ... potentially other scripts ...,&lt;br /&gt;
          &amp;quot;YourScriptName&amp;quot;&lt;br /&gt;
        ]&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* TODO: check if parameters can be passed in this syntax too (eg &amp;lt;code&amp;gt;&amp;quot;Scripts&amp;quot;: [{ &amp;quot;YourScriptName&amp;quot;: { MyParam: false } }]&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Scripting_Introduction&amp;diff=84</id>
		<title>Scripting Introduction</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Scripting_Introduction&amp;diff=84"/>
		<updated>2023-01-19T11:37:50Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: document how to apply a script to a match&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Scripting in Soldat 2 is done in a Unity/C# environment. For a script to be usable in-game, the script file must be placed under &amp;lt;code&amp;gt;Soldat2/Scripts/&amp;lt;/code&amp;gt; and there needs to be a ruleset that specifies that script in the &amp;lt;i&amp;gt;GameScript&amp;lt;/i&amp;gt; object in its json - for example, see &amp;lt;code&amp;gt;Soldat2/Rules/Standard/Climb.json&amp;lt;/code&amp;gt;. The script can be tested by starting a game that uses that ruleset.&lt;br /&gt;
&lt;br /&gt;
== Scripting Resources ==&lt;br /&gt;
The Soldat 2 engine uses Unity, so it may be useful to familiarise yourself with the [https://docs.unity3d.com/2020.1/Documentation/Manual/index.html Unity Manual].&lt;br /&gt;
&lt;br /&gt;
There is some [https://soldat2.com/docs/ preliminary documentation] for the Soldat 2 engine, however it is currently rather limited.&lt;br /&gt;
&lt;br /&gt;
Some examples of scripts can be found in your Soldat 2 game directory under the path &amp;lt;code&amp;gt;Soldat2/Scripts/Standard/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting]]&lt;br /&gt;
&lt;br /&gt;
== Using Scripts ==&lt;br /&gt;
&lt;br /&gt;
A script can be applied to a match via [[Modifiers]] or via a [[Game Mode]] (&amp;quot;Rules&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== In a modifier ===&lt;br /&gt;
Example of a modifier &amp;lt;code&amp;gt;Modifiers/Custom/FlagIsPoison.json&amp;lt;/code&amp;gt; applying the &amp;lt;code&amp;gt;Scripts/Custom/FlagIsPoison.cs&amp;lt;/code&amp;gt; script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;Objects&amp;quot;: {&lt;br /&gt;
    &amp;quot;Rules&amp;quot;: {&lt;br /&gt;
      &amp;quot;FlagIsPoison&amp;quot;: {&lt;br /&gt;
        &amp;quot;FlagDamagePerSecond&amp;quot;: 3.0&lt;br /&gt;
      }&lt;br /&gt;
    }   &lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;Meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;Description&amp;quot;: &amp;quot;(applies the FlagIsPoison script)&amp;quot;,&lt;br /&gt;
    &amp;quot;Author&amp;quot;: &amp;quot;noerw&amp;quot;,&lt;br /&gt;
    &amp;quot;Version&amp;quot;: 1.0&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A script can be parametrized, where the parameters are defined in the modifier or rule definition. In the above example the &amp;lt;code&amp;gt;FlagDamagePerSecond&amp;lt;/code&amp;gt; parameter is applied when the script class contains a &amp;lt;code&amp;gt;JsonProperty&amp;lt;/code&amp;gt; with a default value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[JsonProperty(&amp;quot;FlagDamagePerSecond&amp;quot;)] public int flagDPSParameter = 5.0;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== In a rule / game mode ===&lt;br /&gt;
&lt;br /&gt;
Add the script name to the &amp;lt;code&amp;gt;GameRules&amp;lt;/code&amp;gt; section of the rule definition in &amp;lt;code&amp;gt;Rules/Custom/YourGameMode.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;Objects&amp;quot;: {&lt;br /&gt;
    &amp;quot;YourGameMode&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
      &amp;quot;GameScript&amp;quot;: {&lt;br /&gt;
        &amp;quot;Scripts&amp;quot;: [&lt;br /&gt;
          ... potentially other scripts ...,&lt;br /&gt;
          &amp;quot;YourScriptName&amp;quot;&lt;br /&gt;
        ]&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* TODO: check if parameters can be passed in this syntax too (eg &amp;lt;code&amp;gt;&amp;quot;Scripts&amp;quot;: [{ &amp;quot;YourScriptName&amp;quot;: { MyParam: false } }]&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Movement&amp;diff=42</id>
		<title>Movement</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Movement&amp;diff=42"/>
		<updated>2022-12-10T09:55:22Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Quick and controlled movement is - next to aiming well - a player's primary skill in Soldat 2.&lt;br /&gt;
&lt;br /&gt;
== Move Set ==&lt;br /&gt;
&lt;br /&gt;
The available mechanics are quite similar to the classic Soldat game, but the move set is a bit different.&lt;br /&gt;
What follows is an incomplete description of essential moves, in the spirit of [https://wiki.soldat.pl/index.php/Soldat%27s_Comprehensive_Movement_Tutorial guides for classic Soldat] (which still partially apply).&lt;br /&gt;
&lt;br /&gt;
=== Jumps ===&lt;br /&gt;
The duration {{key press|Up}} or {{key press|W}} is held down determines the jump height.&lt;br /&gt;
Generally, jumps provide more momentum than simply walking, both vertically (duh) and horizontally:&lt;br /&gt;
&lt;br /&gt;
A long jump is often used to kickstart vertical momentum, usually followed by using jets.&lt;br /&gt;
Kick jumps - many consecutive short jumps while moving left/right - are the fastest way to move up a slope - the optimal timing depends on the slope angle.&lt;br /&gt;
&lt;br /&gt;
=== Jets ===&lt;br /&gt;
&amp;lt;code&amp;gt;RMB&amp;lt;/code&amp;gt; enables jets. They have slow acceleration, so it's best to already have some momentum when using them, eg by doing a long jump before starting to jet boost.&lt;br /&gt;
&lt;br /&gt;
=== Rolls ===&lt;br /&gt;
Pressing &amp;lt;code&amp;gt;↓&amp;lt;/code&amp;gt; in combination with holding &amp;lt;code&amp;gt;←&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;→&amp;lt;/code&amp;gt; causes you to roll.&lt;br /&gt;
Immediately rolling when touching ground allows to maintain horizontal momentum [citation needed].&lt;br /&gt;
&lt;br /&gt;
=== Hard Stop ===&lt;br /&gt;
When on the ground, letting go of movement keys causes abrupt deceleration.&lt;br /&gt;
&lt;br /&gt;
=== Soft Stop ===&lt;br /&gt;
When changing direction on the ground by pressing left before letting go of right (or vice versa), you slowly decelerate before changing directions.&lt;br /&gt;
Avoid doing that unless you explicitly need to decelerate, eg. in combination with a long jump.&lt;br /&gt;
&lt;br /&gt;
=== Moving backwards ===&lt;br /&gt;
Going backwards (as determined by the cursor position relative to your [[Gostek]]) - provides higher acceleration than going forwards [citation needed].&lt;br /&gt;
&lt;br /&gt;
=== Front Flip ===&lt;br /&gt;
&lt;br /&gt;
After losing contact with the ground, you can make one front and one back flip.&lt;br /&gt;
&lt;br /&gt;
=== Back Flip ===&lt;br /&gt;
Facing away from the cursor, and doing the same actions as for the front flip, your Gostek performs a backflip.&lt;br /&gt;
&lt;br /&gt;
=== Cannonball ===&lt;br /&gt;
Combining a flip with a short use of jets causes a roll with strong horizontal acceleration.&lt;br /&gt;
This move strongly depends on micro timing, and thus requires practice, but is one of the best ways to gain acceleration. The required key sequence is: left/right down, up down, jet down, move up, jet up [citation needed].&lt;br /&gt;
The amount of upwards momentum primarily depends on the time window between letting go of up and letting of jets.&lt;br /&gt;
&lt;br /&gt;
=== Superman / Prone ===&lt;br /&gt;
- Using jets while in superman provides ability to change directions mid air.&lt;br /&gt;
- Going into superman while close to a wall provides you extra momentum away from the wall.&lt;br /&gt;
- When on the ground, the direction of going prone / into superman depends on the direction slope you're standing on.&lt;br /&gt;
- When already moving quickly, being in superman allows to slide over solid surfaces without losing much momentum.&lt;br /&gt;
&lt;br /&gt;
=== Explosion Boosts ===&lt;br /&gt;
Using explosives while standing next to obstacles, provides strong acceleration at the cost of a couple HP.&lt;br /&gt;
Technically no obstacle is needed: When in motion, holding a grenade until detonation also provides you a boost.&lt;br /&gt;
&lt;br /&gt;
Different explosives provide a different amount of acceleration - in ascending order:&lt;br /&gt;
- (???)&lt;br /&gt;
- ...&lt;br /&gt;
- ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How To Be Hasty™ ==&lt;br /&gt;
&lt;br /&gt;
This guide aims to help with movement on a higher level. Using the above elements from the move set, good ways to solve high level tasks are described.&lt;br /&gt;
&lt;br /&gt;
=== Accelerating ===&lt;br /&gt;
&lt;br /&gt;
==== ...from standstill ====&lt;br /&gt;
&lt;br /&gt;
==== ...horizontally ====&lt;br /&gt;
&lt;br /&gt;
==== ...vertically ====&lt;br /&gt;
&lt;br /&gt;
==== ...going up slope ====&lt;br /&gt;
&lt;br /&gt;
==== ...going down slope ====&lt;br /&gt;
&lt;br /&gt;
==== ...while mid air ====&lt;br /&gt;
&lt;br /&gt;
=== Changing directions ===&lt;br /&gt;
&lt;br /&gt;
=== Using the map &amp;amp; your equipment ===&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Movement&amp;diff=41</id>
		<title>Movement</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Movement&amp;diff=41"/>
		<updated>2022-12-10T09:54:10Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Quick and controlled movement is - next to aiming well - a player's primary skill in Soldat 2.&lt;br /&gt;
&lt;br /&gt;
== Move Set ==&lt;br /&gt;
&lt;br /&gt;
The available mechanics are quite similar to the classic Soldat game, but the move set is a bit different.&lt;br /&gt;
What follows is an incomplete description of essential moves, in the spirit of [https://wiki.soldat.pl/index.php/Soldat%27s_Comprehensive_Movement_Tutorial guides for classic Soldat]&lt;br /&gt;
&lt;br /&gt;
=== Jumps ===&lt;br /&gt;
The duration {{key press|Up}} or {{key press|W}} is held down determines the jump height.&lt;br /&gt;
Generally, jumps provide more momentum than simply walking, both vertically (duh) and horizontally:&lt;br /&gt;
&lt;br /&gt;
A long jump is often used to kickstart vertical momentum, usually followed by using jets.&lt;br /&gt;
Kick jumps - many consecutive short jumps while moving left/right - are the fastest way to move up a slope - the optimal timing depends on the slope angle.&lt;br /&gt;
&lt;br /&gt;
=== Jets ===&lt;br /&gt;
&amp;lt;code&amp;gt;RMB&amp;lt;/code&amp;gt; enables jets. They have slow acceleration, so it's best to already have some momentum when using them, eg by doing a long jump before starting to jet boost.&lt;br /&gt;
&lt;br /&gt;
=== Rolls ===&lt;br /&gt;
Pressing &amp;lt;code&amp;gt;↓&amp;lt;/code&amp;gt; in combination with holding &amp;lt;code&amp;gt;←&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;→&amp;lt;/code&amp;gt; causes you to roll.&lt;br /&gt;
Immediately rolling when touching ground allows to maintain horizontal momentum [citation needed].&lt;br /&gt;
&lt;br /&gt;
=== Hard Stop ===&lt;br /&gt;
When on the ground, letting go of movement keys causes abrupt deceleration.&lt;br /&gt;
&lt;br /&gt;
=== Soft Stop ===&lt;br /&gt;
When changing direction on the ground by pressing left before letting go of right (or vice versa), you slowly decelerate before changing directions.&lt;br /&gt;
Avoid doing that unless you explicitly need to decelerate, eg. in combination with a long jump.&lt;br /&gt;
&lt;br /&gt;
=== Moving backwards ===&lt;br /&gt;
Going backwards (as determined by the cursor position relative to your [[Gostek]]) - provides higher acceleration than going forwards [citation needed].&lt;br /&gt;
&lt;br /&gt;
=== Front Flip ===&lt;br /&gt;
&lt;br /&gt;
After losing contact with the ground, you can make one front and one back flip.&lt;br /&gt;
&lt;br /&gt;
=== Back Flip ===&lt;br /&gt;
Facing away from the cursor, and doing the same actions as for the front flip, your Gostek performs a backflip.&lt;br /&gt;
&lt;br /&gt;
=== Cannonball ===&lt;br /&gt;
Combining a flip with a short use of jets causes a roll with strong horizontal acceleration.&lt;br /&gt;
This move strongly depends on micro timing, and thus requires practice, but is one of the best ways to gain acceleration. The required key sequence is: left/right down, up down, jet down, move up, jet up [citation needed].&lt;br /&gt;
The amount of upwards momentum primarily depends on the time window between letting go of up and letting of jets.&lt;br /&gt;
&lt;br /&gt;
=== Superman / Prone ===&lt;br /&gt;
- Using jets while in superman provides ability to change directions mid air.&lt;br /&gt;
- Going into superman while close to a wall provides you extra momentum away from the wall.&lt;br /&gt;
- When on the ground, the direction of going prone / into superman depends on the direction slope you're standing on.&lt;br /&gt;
- When already moving quickly, being in superman allows to slide over solid surfaces without losing much momentum.&lt;br /&gt;
&lt;br /&gt;
=== Explosion Boosts ===&lt;br /&gt;
Using explosives while standing next to obstacles, provides strong acceleration at the cost of a couple HP.&lt;br /&gt;
Technically no obstacle is needed: When in motion, holding a grenade until detonation also provides you a boost.&lt;br /&gt;
&lt;br /&gt;
Different explosives provide a different amount of acceleration - in ascending order:&lt;br /&gt;
- (???)&lt;br /&gt;
- ...&lt;br /&gt;
- ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How To Be Hasty™ ==&lt;br /&gt;
&lt;br /&gt;
This guide aims to help with movement on a higher level. Using the above elements from the move set, good ways to solve high level tasks are described.&lt;br /&gt;
&lt;br /&gt;
=== Accelerating ===&lt;br /&gt;
&lt;br /&gt;
==== ...from standstill ====&lt;br /&gt;
&lt;br /&gt;
==== ...horizontally ====&lt;br /&gt;
&lt;br /&gt;
==== ...vertically ====&lt;br /&gt;
&lt;br /&gt;
==== ...going up slope ====&lt;br /&gt;
&lt;br /&gt;
==== ...going down slope ====&lt;br /&gt;
&lt;br /&gt;
==== ...while mid air ====&lt;br /&gt;
&lt;br /&gt;
=== Changing directions ===&lt;br /&gt;
&lt;br /&gt;
=== Using the map &amp;amp; your equipment ===&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Mapping&amp;diff=40</id>
		<title>Mapping</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Mapping&amp;diff=40"/>
		<updated>2022-12-10T01:09:21Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Creating custom maps &amp;amp; mods is explicitly welcomed - Soldat 2 ships with a built in map editor.&lt;br /&gt;
&lt;br /&gt;
== General Tips for Mapping ==&lt;br /&gt;
&lt;br /&gt;
* Make your map ''readable''; follow functional conventions of map design. Steel beams and big bridges are almost always ''collisionmodel: players collide'', while small stairs and platforms are - guess what - ''collisionmodel: platform''. Sandbags and barrels are always ''collisionmodel: bullets collide''.&lt;br /&gt;
&lt;br /&gt;
* Especially on CTF maps, make sure to place grenade kits, health packs, and sandbags / barrels, and choose their locations wisely.&lt;br /&gt;
&lt;br /&gt;
* Check your map for bad spawn locations in DM - even if it's not a DM map. See section [[#Unwanted Spawn Locations]] for details.&lt;br /&gt;
&lt;br /&gt;
* Put work in selecting good colors from the start (see below for a guide to what each color does). This will help a lot getting a good feel for the map.&lt;br /&gt;
&lt;br /&gt;
* Always test your maps with the graphics setting ''detailed backgrounds'' set to off. Many people play with this setting (for various reasons), so the map must look okay with this. With this configuration...&lt;br /&gt;
** the &amp;lt;code&amp;gt;SkyColor1&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;SkyColor2&amp;lt;/code&amp;gt; colors are not used for the map background. Instead &amp;lt;code&amp;gt;BackDimColor&amp;lt;/code&amp;gt; is applied to the background. Make sure it looks OK.&lt;br /&gt;
** anything in the ''background'' layer is not drawn. Look for map-props that appear floating because they are placed on a ''background'' shape. To fix this, put these objects also in the ''background'' layer, or move them to a better position.&lt;br /&gt;
&lt;br /&gt;
* Add depth to the map by placing objects deep into the foreground and background. ''dm_db_cuba'' is a good example of this.&lt;br /&gt;
&lt;br /&gt;
* Most props are 3D - rotating them often gives them quite different appearance and use on the map. Make use of this property to reduce repetition, or to reinterpret what those props represent.&lt;br /&gt;
&lt;br /&gt;
* Don't overdo decoration, it will distract too much during game play and in some cases eat FPS of your players. When in doubt, place decorative props on the background layer, so players can hide them via the ''disable detailed backgrounds'' setting.&lt;br /&gt;
&lt;br /&gt;
* There are already a shitload of maps (check out [https://tms2.jrgp.org/ TMS]). If you want to create a map that gets played, make sure you do at least one thing differently. Or fill a niche that isn't populated yet. If you just want to create a piece of art that's great too of course&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Built-in Map Editor ==&lt;br /&gt;
&lt;br /&gt;
The built-in editor is as of v0.8.46a still very much beta - its UI is quite rough around the edges.&lt;br /&gt;
Here are some tips for working with it.&lt;br /&gt;
&lt;br /&gt;
=== General Concepts ===&lt;br /&gt;
&lt;br /&gt;
Maps primarily consist of polygons (''protoshapes''), 3D-props, and spawn locations for various items, and a color scheme.&lt;br /&gt;
Props and protoshapes have attributes that affect their rendering.&lt;br /&gt;
Protoshapes also have a collision model (props don't - to make something collide with a prop, draw a protoshape with disabled rendering on top of it).&lt;br /&gt;
Maps are persisted to a JSON structure.&lt;br /&gt;
&lt;br /&gt;
=== MapProp &amp;amp; Protoshape Properties ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Rendering Layer ====&lt;br /&gt;
&lt;br /&gt;
Each object on the map is placed a rendering layer, which affects (a) how it is colored, and (b) sets a default value for the depth / z parameter. Available values are:&lt;br /&gt;
&lt;br /&gt;
* foreground: slightly desaturated, applies ''SunColor'' taint. default for solid protoshapes.&lt;br /&gt;
* none: don't draw this object.&lt;br /&gt;
* background: desaturates and darkens the object, and applies ''Fog*'' and ''BackDimColor'' taints to it. default for non-colliding protoshapes, which get a different texture applied.&lt;br /&gt;
* color: directly applies the color defined on the object 1:1. protoshapes with this also get a different texture.&lt;br /&gt;
* original: similar to ''color'', but not the same?&lt;br /&gt;
** TODO: whats the difference?&lt;br /&gt;
&lt;br /&gt;
==== Collision Model ====&lt;br /&gt;
&lt;br /&gt;
Applies to Protoshapes only, it's pretty self-explanatory.&lt;br /&gt;
Note that platform shapes will always draw a dashed outline, which is good, as it helps with map readability.&lt;br /&gt;
&lt;br /&gt;
==== Material ====&lt;br /&gt;
&lt;br /&gt;
Defines the sound effect when bullets hit this shape. Also applies different bullet ricochet visuals (but those are not actual bullet ricochets able to hit players).&lt;br /&gt;
&lt;br /&gt;
=== Map Settings ===&lt;br /&gt;
&lt;br /&gt;
There are plenty of settings. I highly recommend exploring the entire settings panel, but you can use this section as a guide.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;q&amp;gt;Note that this section does not primarily consist of authoritative information, but is to a large degree reverse 'engineered'.&amp;lt;/q&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Dimensions &amp;amp; Scaling ====&lt;br /&gt;
&lt;br /&gt;
* ''Width'', ''Height'': Defines the map size&lt;br /&gt;
&lt;br /&gt;
* ''Scale'': This vector does '''not''' scale the whole map (see '''GlobalScale''' for that) - it's a multiplier on the ''Width'' and ''Height'' attributes.&lt;br /&gt;
&lt;br /&gt;
* ''Mirror'': Enable this if you want a symmetrical map. You only draw the left half of the map, and the game generates the other half on the fly. To get a preview, use the ''mirror'' button at the bottom of the settings UI. Individual map objects can be excluded from mirroring via the ''Mirror'' flag.&lt;br /&gt;
&lt;br /&gt;
* ''GlobalScale, GlobalPosition'': These values transform all objects on the map. Do '''not''' set these numbers in the settings panel, but use the ''transform'' button in the map settings panel (the transformation handle UI can appear outside of the map bounds)&lt;br /&gt;
&lt;br /&gt;
==== Lighting ====&lt;br /&gt;
* '''SunLightColor''': Sunlight color taints all objects in the ''foreground'' rendering layer.&lt;br /&gt;
* '''SunIntensityShift''': The amount of sunlight&lt;br /&gt;
* '''SunHorizontalAngle''', '''SunVerticalAngle''': the angle from which light is applied, useful for shadows on protoshape normals.&lt;br /&gt;
&lt;br /&gt;
* '''Fog''', '''FogColor''', '''FogDistance''': fog applies a taint to ''background'' objects, which is applied with increasing opacity with increasing depth (z axis coordinate).&lt;br /&gt;
&lt;br /&gt;
* '''HueShift''' '''SaturationShift''' '''BrightnessShift''': These transform all colors specified in the settings panel, but does not apply to colors specified on individual map objects.&lt;br /&gt;
&lt;br /&gt;
==== Sky / Background Colors ====&lt;br /&gt;
&lt;br /&gt;
* '''SkyColor''', '''SkyColor2''': two colors with a gradient in between can be defined.&lt;br /&gt;
* '''SkyGradientScale''', '''SkyGradientOffset''', '''SkyGradientRotation''': Parameters for the gradient between ''SkyColor'' and ''SkyColor2''.&lt;br /&gt;
* '''BackDimColor''': fallback color for the sky, when the setting ''detailed backgrounds'' is disabled. Note that this also applies a taint on ''background'' objects (why tho?).&lt;br /&gt;
&lt;br /&gt;
==== Other Colors ====&lt;br /&gt;
&lt;br /&gt;
* '''FadeColor''': Color applied to the area outside of the map boundary.&lt;br /&gt;
* '''EffectsColor''': Color used to taint stuff like explosions. White == untainted.&lt;br /&gt;
&lt;br /&gt;
==== Protoshapes ====&lt;br /&gt;
&lt;br /&gt;
* '''PlatformsColor''': default color for all ''foreground'' platforms, unless they have an individual color specified.&lt;br /&gt;
&lt;br /&gt;
* '''BackColor''': default color for all ''background'' platforms, unless they have an individual color specified.&lt;br /&gt;
&lt;br /&gt;
* '''PlatformsTexture''', '''NormalTexture''': defines the texture of the protoshapes and their normals (i.e the depth information that makes them have shadows.&lt;br /&gt;
** '''TODO''': is it possible to provide custom textures by placing them next to a map in the &amp;lt;code&amp;gt;Levels/Custom/&amp;lt;/code&amp;gt; dir?&lt;br /&gt;
&lt;br /&gt;
* '''DetaulTexture''', '''DetailNormalTexture''', '''DetailTextureScale''', '''DetailNormalTextureScale''', '''DetailImpact''', '''DetailGradientTexture''', '''DetailColor''': Additionally to their primary texture, protoshapes have a detail overlay with a separate set of textures. ''DetailImpact'' scales the visibility of this overlay.&lt;br /&gt;
** Note: iiuc, this is mostly a relic from the pre-0.8 versions with a different renderer. To me, these settings are of little use for design.&lt;br /&gt;
&lt;br /&gt;
==== Miscellaneous ====&lt;br /&gt;
&lt;br /&gt;
* '''Author''': self-explanatory. Make sure to fill this in, people want to be able to find the creator of a map.&lt;br /&gt;
* '''AmbientSound''': selects one of a couple soundscapes. there is nothing worse than a sunny map with rumble ambience, be sure to choose a proper ambience.&lt;br /&gt;
* '''Generate''': ??? iirc when enabled enabled, some sandbags etc are placed around each basecamp / flag placement.&lt;br /&gt;
* '''Seed''': RNG initialization value for the ''generate'' feature.&lt;br /&gt;
* '''TopBarrierheight''': ???&lt;br /&gt;
&lt;br /&gt;
=== Workarounds ===&lt;br /&gt;
&lt;br /&gt;
While the editor is in beta, there are plenty of bugs. For many, a workaround is available:&lt;br /&gt;
&lt;br /&gt;
==== Unwanted Spawn Locations ====&lt;br /&gt;
&lt;br /&gt;
In DM, players spawn at random locations on top of any colliding protoshape within map bounds, and not at the spawn locations you can place with the Gostek symbol.&lt;br /&gt;
If your map is enclosed by a protoshape that does not extend well outside of the map bounds, players ''will'' spawn there.&lt;br /&gt;
&lt;br /&gt;
This can be avoided, by placing another protoshape along the outer edge of your enclosing shape, extending it well outside of the map bounds.&lt;br /&gt;
To not affect your map design you can set apply &amp;lt;code&amp;gt;collision-model: players collide&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rendering mode: none&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Selecting / moving all map objects ====&lt;br /&gt;
&lt;br /&gt;
It can quickly happen that you run out of space in the left or bottom area.&lt;br /&gt;
Instead of moving each object, use the ''transform'' button in the map settings panel to select all objects and move, rotate or scale them all.&lt;br /&gt;
&lt;br /&gt;
==== Protoshape with ''render mode: color'' does not apply color ====&lt;br /&gt;
&lt;br /&gt;
Restart the editor. ¯\_ (ツ)_/¯. &lt;br /&gt;
&lt;br /&gt;
==== Protoshape is invisible ====&lt;br /&gt;
&lt;br /&gt;
This can happen when a shape is very thin or has a very pointy corner.&lt;br /&gt;
Moving some vertices around can often fix the issue. If not, creating an extension of the shape&lt;br /&gt;
&lt;br /&gt;
==== Protoshape is always drawn in front of Gosteks ====&lt;br /&gt;
&lt;br /&gt;
The exact root cause is still unclear, some protoshapes just always appear in front of the player, independent of their rendering layer setting and depth value. It could have to do with the vertex order being wrong (clockwise instead of anticlockwise or vice versa). To fix this move some vertexes around, or just replace the shape another with another protoshape that does not have this problem.&lt;br /&gt;
&lt;br /&gt;
== Third Party Tools ==&lt;br /&gt;
&lt;br /&gt;
The community also has written tools for creating maps that integrate with the map game / map editor:&lt;br /&gt;
&lt;br /&gt;
* [https://kreis.uber.space/soldat2/svg2map/ svg2map] by @noerw converts between map JSON files and SVG and can be used to create or edit protoshapes in programs like [https://inkscape.org/ Inkscape].&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Mapping&amp;diff=39</id>
		<title>Mapping</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Mapping&amp;diff=39"/>
		<updated>2022-12-10T01:04:46Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Creating custom maps &amp;amp; mods is explicitly welcomed - Soldat 2 ships with a built in map editor.&lt;br /&gt;
&lt;br /&gt;
== General Tips for Mapping ==&lt;br /&gt;
&lt;br /&gt;
* Make your map ''readable'': Follow functional conventions of map design. Steel beams and big bridges are almost always ''collisionmodel: players collide'', while small stairs and platforms are - guess what - ''collisionmodel: platform''. Sandbags and barrels are always ''collisionmodel: bullets collide''.&lt;br /&gt;
&lt;br /&gt;
* Especially on CTF maps, make sure to place grenade kits, health packs, and sandbags / barrels, and choose their locations wisely.&lt;br /&gt;
&lt;br /&gt;
* Check your map for bad spawn locations in DM - even if it's not a DM map. See section [[#Unwanted Spawn Locations]] for details.&lt;br /&gt;
&lt;br /&gt;
* Put work in selecting good colors from the start (see below for a guide to what each color does). This will help a lot getting a good feel for the map.&lt;br /&gt;
&lt;br /&gt;
* Always test your maps with the graphics setting ''detailed backgrounds'' set to off. Many people play with this setting (for various reasons), so the map must look okay with this. With this configuration...&lt;br /&gt;
** the &amp;lt;code&amp;gt;SkyColor1&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;SkyColor2&amp;lt;/code&amp;gt; colors are not used for the map background. Instead &amp;lt;code&amp;gt;BackDimColor&amp;lt;/code&amp;gt; is applied to the background. Make sure it looks OK.&lt;br /&gt;
** anything in the ''background'' layer is not drawn. Look for map-props that appear floating because they are placed on a ''background'' shape. To fix this, put these objects also in the ''background'' layer, or move them to a better position.&lt;br /&gt;
&lt;br /&gt;
* Add depth to the map by placing objects deep into the foreground and background. ''dm_db_cuba'' is a good example of this.&lt;br /&gt;
&lt;br /&gt;
* Most props are 3D - rotating them often gives them quite different appearance and use on the map. Make use of this property to reduce repetition, or to reinterpret what those props represent.&lt;br /&gt;
&lt;br /&gt;
* Don't overdo decoration, it will distract too much during game play and in some cases eat FPS of your players. When in doubt, place decorative props on the background layer, so players can hide them via the ''disable detailed backgrounds'' setting.&lt;br /&gt;
&lt;br /&gt;
* There are already a shitload of maps (check out [https://tms2.jrgp.org/ TMS]). If you want to create a map that gets played, make sure you do at least one thing differently. Or fill a niche that is not yet. If you just want to create a piece of art that's of course great too ;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Built-in Map Editor ==&lt;br /&gt;
&lt;br /&gt;
The built-in editor is as of v0.8.46a still very much beta - its UI is quite rough around the edges.&lt;br /&gt;
Here are some tips for working with it.&lt;br /&gt;
&lt;br /&gt;
=== General Concepts ===&lt;br /&gt;
&lt;br /&gt;
Maps primarily consist of polygons (''protoshapes''), 3D-props, and spawn locations for various items, and a color scheme.&lt;br /&gt;
Props and protoshapes have attributes that affect their rendering.&lt;br /&gt;
Protoshapes also have a collision model (props don't. To make something collide with a prop, draw a protoshape with disabled rendering on top of it.&lt;br /&gt;
Maps are persisted to a JSON structure.&lt;br /&gt;
&lt;br /&gt;
=== MapProp &amp;amp; Protoshape Properties ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Rendering Layer ====&lt;br /&gt;
&lt;br /&gt;
Each object on the map is placed a rendering layer, which affects (a) how it is colored, and (b) sets a default value for the depth / z parameter. Available values are:&lt;br /&gt;
&lt;br /&gt;
* foreground: slightly desaturated, applies ''SunColor'' taint. default for solid protoshapes.&lt;br /&gt;
* none: don't draw this object.&lt;br /&gt;
* background: desaturates and darkens the object, and applies ''Fog*'' and ''BackDimColor'' taints to it. default for non-colliding protoshapes, which get a different texture applied.&lt;br /&gt;
* color: directly applies the color defined on the object 1:1. protoshapes with this also get a different texture.&lt;br /&gt;
* original: similar to ''color'', but not the same?&lt;br /&gt;
** TODO: whats the difference?&lt;br /&gt;
&lt;br /&gt;
==== Collision Model ====&lt;br /&gt;
&lt;br /&gt;
Applies to Protoshapes only, it's pretty self-explanatory.&lt;br /&gt;
Note that platform shapes will always draw a dashed outline, which is good, as it helps with map readability.&lt;br /&gt;
&lt;br /&gt;
==== Material ====&lt;br /&gt;
&lt;br /&gt;
Defines the sound effect when bullets hit this shape. Also applies different bullet ricochet visuals (but those are not actual bullet ricochets able to hit players).&lt;br /&gt;
&lt;br /&gt;
=== Map Settings ===&lt;br /&gt;
&lt;br /&gt;
There are plenty of settings. I highly recommend exploring the entire settings panel, but you can use this section as a guide.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;q&amp;gt;Note that this section does not primarily consist of authoritative information, but is to a large degree reverse 'engineered'.&amp;lt;/q&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Dimensions &amp;amp; Scaling ====&lt;br /&gt;
&lt;br /&gt;
* ''Width'', ''Height'': Defines the map size&lt;br /&gt;
&lt;br /&gt;
* ''Scale'': This vector does '''not''' scale the whole map (see '''GlobalScale''' for that) - it's a multiplier on the ''Width'' and ''Height'' attributes.&lt;br /&gt;
&lt;br /&gt;
* ''Mirror'': Enable this if you want a symmetrical map. You only draw the left half of the map, and the game generates the other half on the fly. To get a preview, use the ''mirror'' button at the bottom of the settings UI. Individual map objects can be excluded from mirroring via the ''Mirror'' flag.&lt;br /&gt;
&lt;br /&gt;
* ''GlobalScale, GlobalPosition'': These values transform all objects on the map. Do '''not''' set these numbers in the settings panel, but use the ''transform'' button in the map settings panel (the transformation handle UI can appear outside of the map bounds)&lt;br /&gt;
&lt;br /&gt;
==== Lighting ====&lt;br /&gt;
* '''SunLightColor''': Sunlight color taints all objects in the ''foreground'' rendering layer.&lt;br /&gt;
* '''SunIntensityShift''': The amount of sunlight&lt;br /&gt;
* '''SunHorizontalAngle''', '''SunVerticalAngle''': the angle from which light is applied, useful for shadows on protoshape normals.&lt;br /&gt;
&lt;br /&gt;
* '''Fog''', '''FogColor''', '''FogDistance''': fog applies a taint to ''background'' objects, which is applied with increasing opacity with increasing depth (z axis coordinate).&lt;br /&gt;
&lt;br /&gt;
* '''HueShift''' '''SaturationShift''' '''BrightnessShift''': These transform all colors specified in the settings panel, but does not apply to colors specified on individual map objects.&lt;br /&gt;
&lt;br /&gt;
==== Sky / Background Colors ====&lt;br /&gt;
&lt;br /&gt;
* '''SkyColor''', '''SkyColor2''': two colors with a gradient in between can be defined.&lt;br /&gt;
* '''SkyGradientScale''', '''SkyGradientOffset''', '''SkyGradientRotation''': Parameters for the gradient between ''SkyColor'' and ''SkyColor2''.&lt;br /&gt;
* '''BackDimColor''': fallback color for the sky, when the setting ''detailed backgrounds'' is disabled. Note that this also applies a taint on ''background'' objects (why tho?).&lt;br /&gt;
&lt;br /&gt;
==== Other Colors ====&lt;br /&gt;
&lt;br /&gt;
* '''FadeColor''': Color applied to the area outside of the map boundary.&lt;br /&gt;
* '''EffectsColor''': Color used to taint stuff like explosions. White == untainted.&lt;br /&gt;
&lt;br /&gt;
==== Protoshapes ====&lt;br /&gt;
&lt;br /&gt;
* '''PlatformsColor''': default color for all ''foreground'' platforms, unless they have an individual color specified.&lt;br /&gt;
&lt;br /&gt;
* '''BackColor''': default color for all ''background'' platforms, unless they have an individual color specified.&lt;br /&gt;
&lt;br /&gt;
* '''PlatformsTexture''', '''NormalTexture''': defines the texture of the protoshapes and their normals (i.e the depth information that makes them have shadows.&lt;br /&gt;
** '''TODO''': is it possible to provide custom textures by placing them next to a map in the &amp;lt;code&amp;gt;Levels/Custom/&amp;lt;/code&amp;gt; dir?&lt;br /&gt;
&lt;br /&gt;
* '''DetaulTexture''', '''DetailNormalTexture''', '''DetailTextureScale''', '''DetailNormalTextureScale''', '''DetailImpact''', '''DetailGradientTexture''', '''DetailColor''': Additionally to their primary texture, protoshapes have a detail overlay with a separate set of textures. ''DetailImpact'' scales the visibility of this overlay.&lt;br /&gt;
** Note: iiuc, this is mostly a relic from the pre-0.8 versions with a different renderer. To me, these settings are of little use for design.&lt;br /&gt;
&lt;br /&gt;
==== Miscellaneous ====&lt;br /&gt;
&lt;br /&gt;
* '''Author''': self-explanatory. Make sure to fill this in, people want to be able to find the creator of a map.&lt;br /&gt;
* '''AmbientSound''': selects one of a couple soundscapes. there is nothing worse than a sunny map with rumble ambience, be sure to choose a proper ambience.&lt;br /&gt;
* '''Generate''': ??? iirc when enabled enabled, some sandbags etc are placed around each basecamp / flag placement.&lt;br /&gt;
* '''Seed''': RNG initialization value for the ''generate'' feature.&lt;br /&gt;
* '''TopBarrierheight''': ???&lt;br /&gt;
&lt;br /&gt;
=== Workarounds ===&lt;br /&gt;
&lt;br /&gt;
While the editor is in beta, there are plenty of bugs. For many, a workaround is available:&lt;br /&gt;
&lt;br /&gt;
==== Unwanted Spawn Locations ====&lt;br /&gt;
&lt;br /&gt;
In DM, players spawn at random locations on top of any colliding protoshape within map bounds, and not at the spawn locations you can place with the Gostek symbol.&lt;br /&gt;
If your map is enclosed by a protoshape that does not extend well outside of the map bounds, players ''will'' spawn there.&lt;br /&gt;
&lt;br /&gt;
This can be avoided, by placing another protoshape along the outer edge of your enclosing shape, extending it well outside of the map bounds.&lt;br /&gt;
To not affect your map design you can set apply &amp;lt;code&amp;gt;collision-model: players collide&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rendering mode: none&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Selecting / moving all map objects ====&lt;br /&gt;
&lt;br /&gt;
It can quickly happen that you run out of space in the left or bottom area.&lt;br /&gt;
Instead of moving each object, use the ''transform'' button in the map settings panel to select all objects and move, rotate or scale them all.&lt;br /&gt;
&lt;br /&gt;
==== Protoshape with ''render mode: color'' does not apply color ====&lt;br /&gt;
&lt;br /&gt;
Restart the editor. ¯\_ (ツ)_/¯. &lt;br /&gt;
&lt;br /&gt;
==== Protoshape is invisible ====&lt;br /&gt;
&lt;br /&gt;
This can happen when a shape is very thin or has a very pointy corner.&lt;br /&gt;
Moving some vertices around can often fix the issue. If not, creating an extension of the shape&lt;br /&gt;
&lt;br /&gt;
==== Protoshape is always drawn in front of Gosteks ====&lt;br /&gt;
&lt;br /&gt;
The exact root cause is still unclear, some protoshapes just always appear in front of the player, independent of their rendering layer setting and depth value. It could have to do with the vertex order being wrong (clockwise instead of anticlockwise or vice versa). To fix this move some vertexes around, or just replace the shape another with another protoshape that does not have this problem.&lt;br /&gt;
&lt;br /&gt;
== Third Party Tools ==&lt;br /&gt;
&lt;br /&gt;
The community also has written tools for creating maps that integrate with the map game / map editor:&lt;br /&gt;
&lt;br /&gt;
* [https://kreis.uber.space/soldat2/svg2map/ svg2map] by @noerw converts between map JSON files and SVG and can be used to create or edit protoshapes in programs like [https://inkscape.org/ Inkscape].&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Mapping&amp;diff=38</id>
		<title>Mapping</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Mapping&amp;diff=38"/>
		<updated>2022-12-10T00:59:02Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Creating custom maps &amp;amp; mods is explicitly welcomed - Soldat 2 ships with a built in map editor.&lt;br /&gt;
&lt;br /&gt;
== General Tips for Mapping ==&lt;br /&gt;
&lt;br /&gt;
* Put work in selecting good colors from the start (see below for a guide to what each color does). This will help a lot getting a good feel for the map.&lt;br /&gt;
&lt;br /&gt;
* Make your map ''readable'': Follow functional conventions of map design. Steel beams and big bridges are almost always ''collisionmodel: players collide'', while small stairs and platforms are - guess what - ''collisionmodel: platform''. Sandbags and barrels are always ''collisionmodel: bullets collide''.&lt;br /&gt;
&lt;br /&gt;
* Especially on CTF maps, make sure to place grenade kits, health packs, and sandbags / barrels, and choose their locations wisely.&lt;br /&gt;
&lt;br /&gt;
* Check your map for bad spawn locations in DM - even if it's not a DM map. See section [[#Unwanted Spawn Locations]] for details.&lt;br /&gt;
&lt;br /&gt;
* Always test your maps with the graphics setting ''detailed backgrounds'' set to off. Many people play with this setting (for various reasons), so the map must look okay with this. With this configuration...&lt;br /&gt;
** the &amp;lt;code&amp;gt;SkyColor1&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;SkyColor2&amp;lt;/code&amp;gt; colors are not used for the map background. Instead &amp;lt;code&amp;gt;BackDimColor&amp;lt;/code&amp;gt; is applied to the background. Make sure it looks OK.&lt;br /&gt;
** anything in the ''background'' layer is not drawn. Look for map-props that appear floating because they are placed on a ''background'' shape. (To fix this, put these objects also in the ''background'' layer, or move them to a better place'&lt;br /&gt;
&lt;br /&gt;
* There are already a shitload of maps (check out [https://tms2.jrgp.org/ TMS]. If you want to create a map that gets played, make sure you do at least one thing differently. Or fill a niche that is not yet. If you just want to create a piece of art that's of course great too ;)&lt;br /&gt;
&lt;br /&gt;
* Add depth to the map by placing objects deep into the foreground and background. ''dm_db_cuba'' is a good example of this.&lt;br /&gt;
&lt;br /&gt;
* Most props are 3D - rotating them often gives them quite different appearance and use on the map. Make use of this property to reduce repetition, or to reinterpret what those props represent.&lt;br /&gt;
&lt;br /&gt;
* Don't overdo decoration, it will distract too much during game play and in some cases eat FPS of your players. When in doubt, place decorative props on the background layer, so players can hide them via the ''disable detailed backgrounds'' setting.&lt;br /&gt;
&lt;br /&gt;
== Built-in Map Editor ==&lt;br /&gt;
&lt;br /&gt;
The built-in editor is as of v0.8.46a still in early beta - its UI is quite rough around the edges.&lt;br /&gt;
Here are some tips for working with it.&lt;br /&gt;
&lt;br /&gt;
=== MapProp &amp;amp; Protoshape Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Rendering Layer ====&lt;br /&gt;
&lt;br /&gt;
Each object on the map is placed a rendering layer, which affects (a) how it is colored, and (b) sets a default value for the depth / z parameter. Available values are:&lt;br /&gt;
&lt;br /&gt;
* foreground: slightly desaturated, applies ''SunColor'' taint. default for solid protoshapes.&lt;br /&gt;
* none: don't draw this object.&lt;br /&gt;
* background: desaturates and darkens the object, and applies ''Fog*'' and ''BackDimColor'' taints to it. default for non-colliding protoshapes, which get a different texture applied.&lt;br /&gt;
* color: directly applies the color defined on the object 1:1. protoshapes with this also get a different texture.&lt;br /&gt;
* original: similar to ''color'', but not the same?&lt;br /&gt;
** TODO: whats the difference?&lt;br /&gt;
&lt;br /&gt;
==== Collision Model ====&lt;br /&gt;
&lt;br /&gt;
Applies to Protoshapes only, it's pretty self-explanatory.&lt;br /&gt;
Note that platform shapes will always draw a dashed outline, which is good, as it helps with map readability.&lt;br /&gt;
&lt;br /&gt;
==== Material ====&lt;br /&gt;
&lt;br /&gt;
Defines the sound effect when bullets hit this shape. Also applies different bullet ricochet visuals (but those are not actual bullet ricochets able to hit players).&lt;br /&gt;
&lt;br /&gt;
=== Map Settings ===&lt;br /&gt;
&lt;br /&gt;
There are plenty of settings. I highly recommend exploring the entire settings panel, but you can use this section as a guide.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;q&amp;gt;Note that this section does not primarily consist of authoritative information, but is to a large degree reverse 'engineered'.&amp;lt;/q&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Dimensions &amp;amp; Scaling ====&lt;br /&gt;
&lt;br /&gt;
* ''Width'', ''Height'': Defines the map size&lt;br /&gt;
&lt;br /&gt;
* ''Scale'': This vector does '''not''' scale the whole map (see '''GlobalScale''' for that) - it's a multiplier on the ''Width'' and ''Height'' attributes.&lt;br /&gt;
&lt;br /&gt;
* ''Mirror'': Enable this if you want a symmetrical map. You only draw the left half of the map, and the game generates the other half on the fly. To get a preview, use the ''mirror'' button at the bottom of the settings UI. Individual map objects can be excluded from mirroring via the ''Mirror'' flag.&lt;br /&gt;
&lt;br /&gt;
* ''GlobalScale, GlobalPosition'': These values transform all objects on the map. Do '''not''' set these numbers in the settings panel, but use the ''transform'' button in the map settings panel (the transformation handle UI can appear outside of the map bounds)&lt;br /&gt;
&lt;br /&gt;
==== Lighting ====&lt;br /&gt;
* '''SunLightColor''': Sunlight color taints all objects in the ''foreground'' rendering layer.&lt;br /&gt;
* '''SunIntensityShift''': The amount of sunlight&lt;br /&gt;
* '''SunHorizontalAngle''', '''SunVerticalAngle''': the angle from which light is applied, useful for shadows on protoshape normals.&lt;br /&gt;
&lt;br /&gt;
* '''Fog''', '''FogColor''', '''FogDistance''': fog applies a taint to ''background'' objects, which is applied with increasing opacity with increasing depth (z axis coordinate).&lt;br /&gt;
&lt;br /&gt;
* '''HueShift''' '''SaturationShift''' '''BrightnessShift''': These transform all colors specified in the settings panel, but does not apply to colors specified on individual map objects.&lt;br /&gt;
&lt;br /&gt;
==== Sky / Background Colors ====&lt;br /&gt;
&lt;br /&gt;
* '''SkyColor''', '''SkyColor2''': two colors with a gradient in between can be defined.&lt;br /&gt;
* '''SkyGradientScale''', '''SkyGradientOffset''', '''SkyGradientRotation''': Parameters for the gradient between ''SkyColor'' and ''SkyColor2''.&lt;br /&gt;
* '''BackDimColor''': fallback color for the sky, when the setting ''detailed backgrounds'' is disabled. Note that this also applies a taint on ''background'' objects (why tho?).&lt;br /&gt;
&lt;br /&gt;
==== Other Colors ====&lt;br /&gt;
&lt;br /&gt;
* '''FadeColor''': Color applied to the area outside of the map boundary.&lt;br /&gt;
* '''EffectsColor''': Color used to taint stuff like explosions. White == untainted.&lt;br /&gt;
&lt;br /&gt;
==== Protoshapes ====&lt;br /&gt;
&lt;br /&gt;
* '''PlatformsColor''': default color for all ''foreground'' platforms, unless they have an individual color specified.&lt;br /&gt;
&lt;br /&gt;
* '''BackColor''': default color for all ''background'' platforms, unless they have an individual color specified.&lt;br /&gt;
&lt;br /&gt;
* '''PlatformsTexture''', '''NormalTexture''': defines the texture of the protoshapes and their normals (i.e the depth information that makes them have shadows.&lt;br /&gt;
** '''TODO''': is it possible to provide custom textures by placing them next to a map in the &amp;lt;code&amp;gt;Levels/Custom/&amp;lt;/code&amp;gt; dir?&lt;br /&gt;
&lt;br /&gt;
* '''DetaulTexture''', '''DetailNormalTexture''', '''DetailTextureScale''', '''DetailNormalTextureScale''', '''DetailImpact''', '''DetailGradientTexture''', '''DetailColor''': Additionally to their primary texture, protoshapes have a detail overlay with a separate set of textures. ''DetailImpact'' scales the visibility of this overlay.&lt;br /&gt;
** Note: iiuc, this is mostly a relic from the pre-0.8 versions with a different renderer. To me, these settings are of little use for design.&lt;br /&gt;
&lt;br /&gt;
==== Miscellaneous ====&lt;br /&gt;
&lt;br /&gt;
* '''Author''': self-explanatory. Make sure to fill this in, people want to be able to find the creator of a map.&lt;br /&gt;
* '''AmbientSound''': selects one of a couple soundscapes. there is nothing worse than a sunny map with rumble ambience, be sure to choose a proper ambience.&lt;br /&gt;
* '''Generate''': ??? iirc when enabled enabled, some sandbags etc are placed around each basecamp / flag placement.&lt;br /&gt;
* '''Seed''': RNG initialization value for the ''generate'' feature.&lt;br /&gt;
* '''TopBarrierheight''': ???&lt;br /&gt;
&lt;br /&gt;
=== Workarounds ===&lt;br /&gt;
&lt;br /&gt;
While the editor is in beta, there are plenty of bugs. For many, a workaround is available:&lt;br /&gt;
&lt;br /&gt;
==== Unwanted Spawn Locations ====&lt;br /&gt;
&lt;br /&gt;
In DM, players spawn at random locations on top of any colliding protoshape within map bounds, and not at the spawn locations you can place with the Gostek symbol.&lt;br /&gt;
If your map is enclosed by a protoshape that does not extend well outside of the map bounds, players ''will'' spawn there.&lt;br /&gt;
&lt;br /&gt;
This can be avoided, by placing another protoshape along the outer edge of your enclosing shape, extending it well outside of the map bounds.&lt;br /&gt;
To not affect your map design you can set apply &amp;lt;code&amp;gt;collision-model: players collide&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rendering mode: none&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Selecting / moving all map objects ====&lt;br /&gt;
&lt;br /&gt;
It can quickly happen that you run out of space in the left or bottom area.&lt;br /&gt;
Instead of moving each object, use the ''transform'' button in the map settings panel to select all objects and move, rotate or scale them all.&lt;br /&gt;
&lt;br /&gt;
==== Protoshape with ''render mode: color'' does not apply color ====&lt;br /&gt;
&lt;br /&gt;
Restart the editor. ¯\_ (ツ)_/¯. &lt;br /&gt;
&lt;br /&gt;
==== Protoshape is invisible ====&lt;br /&gt;
&lt;br /&gt;
This can happen when a shape is very thin or has a very pointy corner.&lt;br /&gt;
Moving some vertices around can often fix the issue. If not, creating an extension of the shape&lt;br /&gt;
&lt;br /&gt;
==== Protoshape is always drawn in front of Gosteks ====&lt;br /&gt;
&lt;br /&gt;
The exact root cause is still unclear, some protoshapes just always appear in front of the player, independent of their rendering layer setting and depth value. It could have to do with the vertex order being wrong (clockwise instead of anticlockwise or vice versa). To fix this move some vertexes around, or just replace the shape another with another protoshape that does not have this problem.&lt;br /&gt;
&lt;br /&gt;
== Third Party Tools ==&lt;br /&gt;
&lt;br /&gt;
The community also has written tools for creating maps that integrate with the map game / map editor:&lt;br /&gt;
&lt;br /&gt;
* [https://kreis.uber.space/soldat2/svg2map/ svg2map] by @noerw converts between map JSON files and SVG and can be used to create or edit protoshapes in programs like [https://inkscape.org/ Inkscape].&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Mapping&amp;diff=37</id>
		<title>Mapping</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Mapping&amp;diff=37"/>
		<updated>2022-12-10T00:54:19Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: add initial mapping guide&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Creating custom maps &amp;amp; mods is explicitly welcomed - Soldat 2 ships with a built in map editor.&lt;br /&gt;
&lt;br /&gt;
== General Tips for Mapping ==&lt;br /&gt;
&lt;br /&gt;
* Put work in selecting good colors from the start (see below for a guide to what each color does). This will help a lot getting a good feel for the map.&lt;br /&gt;
&lt;br /&gt;
* Make your map ''readable'': Follow functional conventions of map design. Steel beams and big bridges are almost always ''collisionmodel: players collide'', while small stairs and platforms are - guess what - ''collisionmodel: platform''. Sandbags and barrels are always ''collisionmodel: bullets collide''.&lt;br /&gt;
&lt;br /&gt;
* Especially on CTF maps, make sure to place grenade kits, health packs, and sandbags / barrels, and choose their locations wisely.&lt;br /&gt;
&lt;br /&gt;
* Check your map for bad spawn locations in DM - even if it's not a DM map. See section [[#Unwanted Spawn Locations]] for details.&lt;br /&gt;
&lt;br /&gt;
* Always test your maps with the graphics setting ''detailed backgrounds'' set to off. Many people play with this setting (for various reasons), so the map must look okay with this. With this configuration...&lt;br /&gt;
** the &amp;lt;code&amp;gt;SkyColor1&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;SkyColor2&amp;lt;/code&amp;gt; colors are not used for the map background. Instead &amp;lt;code&amp;gt;BackDimColor&amp;lt;/code&amp;gt; is applied to the background. Make sure it looks OK.&lt;br /&gt;
** anything in the ''background'' layer is not drawn. Look for map-props that appear floating because they are placed on a ''background'' shape. (To fix this, put these objects also in the ''background'' layer, or move them to a better place'&lt;br /&gt;
&lt;br /&gt;
* There are already a shitload of maps (check out [https://tms2.jrgp.org/ TMS]. If you want to create a map that gets played, make sure you do at least one thing differently. Or fill a niche that is not yet. If you just want to create a piece of art that's of course great too ;)&lt;br /&gt;
&lt;br /&gt;
* Add depth to the map by placing objects deep into the foreground and background. ''dm_db_cuba'' is a good example of this.&lt;br /&gt;
&lt;br /&gt;
* Don't overdo decoration, it will distract too much during game play. When in doubt, place it on the background layer, so players can hide it via the ''disable detailed backgrounds'' setting.&lt;br /&gt;
&lt;br /&gt;
== Built-in Map Editor ==&lt;br /&gt;
&lt;br /&gt;
The built-in editor is as of v0.8.46a still in early beta - its UI is quite rough around the edges.&lt;br /&gt;
Here are some tips for working with it.&lt;br /&gt;
&lt;br /&gt;
=== MapProp &amp;amp; Protoshape Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Rendering Layer ====&lt;br /&gt;
&lt;br /&gt;
Each object on the map is placed a rendering layer, which affects (a) how it is colored, and (b) sets a default value for the depth / z parameter. Available values are:&lt;br /&gt;
&lt;br /&gt;
* foreground: slightly desaturated, applies ''SunColor'' taint. default for solid protoshapes.&lt;br /&gt;
* none: don't draw this object.&lt;br /&gt;
* background: desaturates and darkens the object, and applies ''Fog*'' and ''BackDimColor'' taints to it. default for non-colliding protoshapes, which get a different texture applied.&lt;br /&gt;
* color: directly applies the color defined on the object 1:1. protoshapes with this also get a different texture.&lt;br /&gt;
* original: similar to ''color'', but not the same?&lt;br /&gt;
** TODO: whats the difference?&lt;br /&gt;
&lt;br /&gt;
==== Collision Model ====&lt;br /&gt;
&lt;br /&gt;
Applies to Protoshapes only, it's pretty self-explanatory.&lt;br /&gt;
Note that platform shapes will always draw a dashed outline, which is good, as it helps with map readability.&lt;br /&gt;
&lt;br /&gt;
==== Material ====&lt;br /&gt;
&lt;br /&gt;
Defines the sound effect when bullets hit this shape. Also applies different bullet ricochet visuals (but those are not actual bullet ricochets able to hit players).&lt;br /&gt;
&lt;br /&gt;
=== Map Settings ===&lt;br /&gt;
&lt;br /&gt;
There are plenty of settings. I highly recommend exploring the entire settings panel, but you can use this section as a guide.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;q&amp;gt;Note that this section does not primarily consist of authoritative information, but is to a large degree reverse 'engineered'.&amp;lt;/q&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Dimensions &amp;amp; Scaling ====&lt;br /&gt;
&lt;br /&gt;
* ''Width'', ''Height'': Defines the map size&lt;br /&gt;
&lt;br /&gt;
* ''Scale'': This vector does '''not''' scale the whole map (see '''GlobalScale''' for that) - it's a multiplier on the ''Width'' and ''Height'' attributes.&lt;br /&gt;
&lt;br /&gt;
* ''Mirror'': Enable this if you want a symmetrical map. You only draw the left half of the map, and the game generates the other half on the fly. To get a preview, use the ''mirror'' button at the bottom of the settings UI. Individual map objects can be excluded from mirroring via the ''Mirror'' flag.&lt;br /&gt;
&lt;br /&gt;
* ''GlobalScale, GlobalPosition'': These values transform all objects on the map. Do '''not''' set these numbers in the settings panel, but use the ''transform'' button in the map settings panel (the transformation handle UI can appear outside of the map bounds)&lt;br /&gt;
&lt;br /&gt;
==== Lighting ====&lt;br /&gt;
* '''SunLightColor''': Sunlight color taints all objects in the ''foreground'' rendering layer.&lt;br /&gt;
* '''SunIntensityShift''': The amount of sunlight&lt;br /&gt;
* '''SunHorizontalAngle''', '''SunVerticalAngle''': the angle from which light is applied, useful for shadows on protoshape normals.&lt;br /&gt;
&lt;br /&gt;
* '''Fog''', '''FogColor''', '''FogDistance''': fog applies a taint to ''background'' objects, which is applied with increasing opacity with increasing depth (z axis coordinate).&lt;br /&gt;
&lt;br /&gt;
* '''HueShift''' '''SaturationShift''' '''BrightnessShift''': These transform all colors specified in the settings panel, but does not apply to colors specified on individual map objects.&lt;br /&gt;
&lt;br /&gt;
==== Other Colors ====&lt;br /&gt;
&lt;br /&gt;
* '''FadeColor''': Color applied to the area outside of the map boundary.&lt;br /&gt;
* '''EffectsColor''': Color used to taint stuff like explosions. White == untainted.&lt;br /&gt;
&lt;br /&gt;
===== Protoshapes =====&lt;br /&gt;
&lt;br /&gt;
* '''PlatformsColor''': default color for all ''foreground'' platforms, unless they have an individual color specified.&lt;br /&gt;
&lt;br /&gt;
* '''BackColor''': default color for all ''background'' platforms, unless they have an individual color specified.&lt;br /&gt;
&lt;br /&gt;
* '''PlatformsTexture''', '''NormalTexture''': defines the texture of the protoshapes and their normals (i.e the depth information that makes them have shadows.&lt;br /&gt;
** '''TODO''': is it possible to provide custom textures by placing them next to a map in the &amp;lt;code&amp;gt;Levels/Custom/&amp;lt;/code&amp;gt; dir?&lt;br /&gt;
&lt;br /&gt;
* '''DetaulTexture''', '''DetailNormalTexture''', '''DetailTextureScale''', '''DetailNormalTextureScale''', '''DetailImpact''', '''DetailGradientTexture''', '''DetailColor''': Additionally to their primary texture, protoshapes have a detail overlay with a separate set of textures. ''DetailImpact'' scales the visibility of this overlay.&lt;br /&gt;
** Note: iiuc, this is mostly a relic from the pre-0.8 versions with a different renderer. To me, these settings are of little use for design.&lt;br /&gt;
&lt;br /&gt;
===== Sky / Background =====&lt;br /&gt;
&lt;br /&gt;
* '''SkyColor''', '''SkyColor2''': two colors with a gradient in between can be defined.&lt;br /&gt;
* '''SkyGradientScale''', '''SkyGradientOffset''', '''SkyGradientRotation''': Parameters for the gradient between ''SkyColor'' and ''SkyColor2''.&lt;br /&gt;
* '''BackDimColor''': fallback color for the sky, when the setting ''detailed backgrounds'' is disabled. Note that this also applies a taint on ''background'' objects (why tho?).&lt;br /&gt;
&lt;br /&gt;
==== Other ====&lt;br /&gt;
&lt;br /&gt;
* '''Author''': self-explanatory. Make sure to fill this in, people want to be able to find the creator of a map.&lt;br /&gt;
* '''AmbientSound''': selects one of a couple soundscapes. there is nothing worse than a sunny map with rumble ambience, be sure to choose a proper ambience.&lt;br /&gt;
* '''Generate''': ??? iirc when enabled enabled, some sandbags etc are placed around each basecamp / flag placement.&lt;br /&gt;
* '''Seed''': RNG initialization value for the ''generate'' feature.&lt;br /&gt;
* '''TopBarrierheight''': ???&lt;br /&gt;
&lt;br /&gt;
=== Workarounds ===&lt;br /&gt;
&lt;br /&gt;
While the editor is in beta, there are plenty of bugs. For many, a workaround is available:&lt;br /&gt;
&lt;br /&gt;
==== Unwanted Spawn Locations ====&lt;br /&gt;
&lt;br /&gt;
In DM, players spawn at random locations on top of any colliding protoshape within map bounds, and not at the spawn locations you can place with the Gostek symbol.&lt;br /&gt;
If your map is enclosed by a protoshape that does not extend well outside of the map bounds, players ''will'' spawn there.&lt;br /&gt;
&lt;br /&gt;
This can be avoided, by placing another protoshape along the outer edge of your enclosing shape, extending it well outside of the map bounds.&lt;br /&gt;
To not affect your map design you can set apply &amp;lt;code&amp;gt;collision-model: players collide&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rendering mode: none&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Selecting / moving all map objects ====&lt;br /&gt;
&lt;br /&gt;
It can quickly happen that you run out of space in the left or bottom area.&lt;br /&gt;
Instead of moving each object, use the ''transform'' button in the map settings panel to select all objects and move, rotate or scale them all.&lt;br /&gt;
&lt;br /&gt;
==== Protoshape with ''render mode: color'' does not apply color ====&lt;br /&gt;
&lt;br /&gt;
Restart the editor. ¯\_ (ツ)_/¯. &lt;br /&gt;
&lt;br /&gt;
==== Protoshape is invisible ====&lt;br /&gt;
&lt;br /&gt;
This can happen when a shape is very thin or has a very pointy corner.&lt;br /&gt;
Moving some vertices around can often fix the issue. If not, creating an extension of the shape&lt;br /&gt;
&lt;br /&gt;
==== Protoshape is always drawn in front of Gosteks ====&lt;br /&gt;
&lt;br /&gt;
The exact root cause is still unclear, some protoshapes just always appear in front of the player, independent of their rendering layer setting and depth value. It could have to do with the vertex order being wrong (clockwise instead of anticlockwise or vice versa). To fix this move some vertexes around, or just replace the shape another with another protoshape that does not have this problem.&lt;br /&gt;
&lt;br /&gt;
== Third Party Tools ==&lt;br /&gt;
&lt;br /&gt;
The community also has written tools for creating maps that integrate with the map game / map editor:&lt;br /&gt;
&lt;br /&gt;
* [https://kreis.uber.space/soldat2/svg2map/ svg2map] by @noerw converts between map JSON files and SVG and can be used to create or edit protoshapes in programs like [https://inkscape.org/ Inkscape].&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Ranked&amp;diff=36</id>
		<title>Ranked</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Ranked&amp;diff=36"/>
		<updated>2022-12-09T22:26:47Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: add page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ranked mode is a ladder system, where balanced teams play [[Capture The Flag]] against each other via a ranking &amp;amp; queue system.&lt;br /&gt;
Its spirit is similar to the 'Gather' format from classic [[Soldat]] - i.e. competitive, but without the drama.&lt;br /&gt;
&lt;br /&gt;
While many top players play this format, beginners are explicitly welcome - don't be intimidated, it's a great opportunity to learn the mechanics of the game!&lt;br /&gt;
&lt;br /&gt;
== How it works ==&lt;br /&gt;
&lt;br /&gt;
Players queue up for a match in from the ''play ranked'' game menu.&lt;br /&gt;
There are multiple queues for different server locations and team sizes.&lt;br /&gt;
Once enough players queued for a match, they fight two rounds plus an optional tie-breaker round. The teams are balanced based on all players ranks.&lt;br /&gt;
The result of the game affects each players rank (players receive their initial rank only after 10 played ranked matches).&lt;br /&gt;
For each round, one team votes (one of three) for a map out of the [#map-rotation map rotation].&lt;br /&gt;
&lt;br /&gt;
== Map Rotation ==&lt;br /&gt;
&lt;br /&gt;
The map rotation currently consists of a subset of the CTF maps included in the game:&lt;br /&gt;
&lt;br /&gt;
* ctf_ash&lt;br /&gt;
* ctf_campsite&lt;br /&gt;
* ctf_cobra&lt;br /&gt;
* ctf_crossfire&lt;br /&gt;
* ctf_division&lt;br /&gt;
* ctf_dogbite&lt;br /&gt;
* ctf_dopamine&lt;br /&gt;
* ctf_guardian&lt;br /&gt;
* ctf_hormone&lt;br /&gt;
* ctf_lanubya&lt;br /&gt;
* ctf_limbo&lt;br /&gt;
* ctf_rotten&lt;br /&gt;
* ctf_snakebite&lt;br /&gt;
* ctf_steel&lt;br /&gt;
* ctf_tyrus&lt;br /&gt;
* ctf_wretch&lt;br /&gt;
&lt;br /&gt;
== Events ==&lt;br /&gt;
&lt;br /&gt;
[[Transhuman Design]] occasionally holds events such as tournaments (whose rules are based on the principle and ladder from ranked mod).&lt;br /&gt;
&lt;br /&gt;
* ''2022-12-17'': Tournament ([https://discord.com/channels/498800300199772162/1050173726387347476/1050337407414837248 Announcement])&lt;br /&gt;
&lt;br /&gt;
== External resources ==&lt;br /&gt;
&lt;br /&gt;
* The [https://kreis.uber.space/soldat2/mapview/ map viewer] has a filter for the rotation and can be used to get an overview of these maps.&lt;br /&gt;
* [https://stats.soldat2.com/ Ranked eaderboard &amp;amp; statistics]&lt;br /&gt;
* [https://oczki.pl/s2-players Realtime matchmaking status]&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Template:Key_press&amp;diff=35</id>
		<title>Template:Key press</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Template:Key_press&amp;diff=35"/>
		<updated>2022-12-09T20:18:44Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Template:Key_press/styles.css&amp;diff=34</id>
		<title>Template:Key press/styles.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Template:Key_press/styles.css&amp;diff=34"/>
		<updated>2022-12-09T20:18:27Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Template:Key_press/styles.css&amp;diff=33</id>
		<title>Template:Key press/styles.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Template:Key_press/styles.css&amp;diff=33"/>
		<updated>2022-12-09T19:59:59Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: copied from https://www.mediawiki.org/wiki/Template:Key_press/styles.css&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.keyboard-key {&lt;br /&gt;
	border: 1px solid #aaa;&lt;br /&gt;
	border-radius: 0.2em;&lt;br /&gt;
	box-shadow: 0.1em 0.2em 0.2em #ddd;&lt;br /&gt;
	background-image: linear-gradient(to bottom, #eee, #f9f9f9, #eee);&lt;br /&gt;
	padding: 0.1em 0.3em;&lt;br /&gt;
	font-family: inherit;&lt;br /&gt;
	font-size: 0.85em;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Template:Key_press&amp;diff=32</id>
		<title>Template:Key press</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Template:Key_press&amp;diff=32"/>
		<updated>2022-12-09T19:50:57Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: copied from https://www.mediawiki.org/wiki/Template:Key_press&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;templatestyles src=&amp;quot;Key press/styles.css&amp;quot;/&amp;gt;{{key press/core|{{{1|}}}}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{2|}}}|{{{chain first|{{{chain|+}}}}}}{{key press/core|{{{2}}}}}}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{3|}}}|{{{chain second|{{{chain|+}}}}}}{{key press/core|{{{3}}}}}}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{4|}}}|{{{chain third|{{{chain|+}}}}}}{{key press/core|{{{4}}}}}}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{5|}}}|{{{chain fourth|{{{chain|+}}}}}}{{key press/core|{{{5}}}}}}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{6|}}}|{{{chain fifth|{{{chain|+}}}}}}{{key press/core|{{{6}}}}}}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{7|}}}|{{{chain sixth|{{{chain|+}}}}}}{{key press/core|{{{7}}}}}}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{8|}}}|{{{chain seventh|{{{chain|+}}}}}}{{key press/core|{{{8}}}}}}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{9|}}}|{{{chain eighth|{{{chain|+}}}}}}{{key press/core|{{{9}}}}}}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{10|}}}|{{{chain ninth|{{{chain|+}}}}}}{{key press/core|{{{10}}}}}}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{11|}}}|[[Category:Wikipedia keypress template parameter needs fixing]]}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- add category and language links to the /doc sub-page, not here --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Movement&amp;diff=31</id>
		<title>Movement</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Movement&amp;diff=31"/>
		<updated>2022-12-09T19:48:46Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: add initial version describing some moves - probably highly inaccurate, plz correct&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Quick and controlled movement is - next to aiming well - a player's primary skill in Soldat 2.&lt;br /&gt;
&lt;br /&gt;
== Move Set ==&lt;br /&gt;
&lt;br /&gt;
The available mechanics are quite similar to the classic Soldat game, but the move set is bigger.&lt;br /&gt;
What follows is an incomplete description of essential moves, in the spirit of [https://wiki.soldat.pl/index.php/Soldat%27s_Comprehensive_Movement_Tutorial guides for classic soldat]&lt;br /&gt;
&lt;br /&gt;
=== Jumps ===&lt;br /&gt;
The duration {{key press|Up}} or {{key press|W}} is held down determines the jump height.&lt;br /&gt;
Generally, jumps provide more momentum than simply walking, both vertically (duh) and horizontally:&lt;br /&gt;
&lt;br /&gt;
A long jump is often used to kickstart vertical momentum, usually followed by using jets.&lt;br /&gt;
Kick jumps - many consecutive short jumps while moving left/right - are the fastest way to move up a slope - the optimal timing depends on the slope angle.&lt;br /&gt;
&lt;br /&gt;
=== Jets ===&lt;br /&gt;
{{key press|RMB}} enables jets. They have slow acceleration, so it's best to already have some momentum when using them, eg by doing a long jump before starting to jet boost.&lt;br /&gt;
&lt;br /&gt;
=== Rolls ===&lt;br /&gt;
Pressing {{key press|Down}} in combination with holding {{key press|Left}}/{{key press|Right}} causes you to roll.&lt;br /&gt;
Immediately rolling when touching ground allows to maintain horizontal momentum [citation needed].&lt;br /&gt;
&lt;br /&gt;
=== Hard Stop ===&lt;br /&gt;
When on the ground, letting go of movement keys causes abrupt deceleration.&lt;br /&gt;
&lt;br /&gt;
=== Soft Stop ===&lt;br /&gt;
When changing direction on the ground by pressing left before letting go of right (or vice versa), you slowly decelerate before changing directions.&lt;br /&gt;
Avoid doing that unless you explicitly need to decelerate, eg. in combination with a long jump.&lt;br /&gt;
&lt;br /&gt;
=== Moving backwards ===&lt;br /&gt;
Going backwards (as determined by the cursor position relative to your [[Gostek]]) - provides higher acceleration than going forwards [citation needed].&lt;br /&gt;
&lt;br /&gt;
=== Front Flip ===&lt;br /&gt;
&lt;br /&gt;
After losing contact with the ground, you can make one front and one back flip.&lt;br /&gt;
&lt;br /&gt;
=== Back Flip ===&lt;br /&gt;
Facing away from the cursor, and doing the same actions as for the front flip, your Gostek performs a backflip.&lt;br /&gt;
&lt;br /&gt;
=== Cannonball ===&lt;br /&gt;
Combining a flip with a short use of jets causes a roll with strong horizontal acceleration.&lt;br /&gt;
This move strongly depends on micro timing, and thus requires practice, but is one of the best ways to gain acceleration. The required key sequence is: left/right down, up down, jet down, move up, jet up [citation needed].&lt;br /&gt;
The amount of upwards momentum primarily depends on the time window between letting go of up and letting of jets.&lt;br /&gt;
&lt;br /&gt;
=== Superman / Prone ===&lt;br /&gt;
- Using jets while in superman provides ability to change directions mid air.&lt;br /&gt;
- Going into superman while close to a wall provides you extra momentum away from the wall.&lt;br /&gt;
- When on the ground, the direction of going prone / into superman depends on the direction slope you're standing on.&lt;br /&gt;
- When already moving quickly, being in superman allows to slide over solid surfaces without losing much momentum.&lt;br /&gt;
&lt;br /&gt;
=== Explosion Boosts ===&lt;br /&gt;
Using explosives while standing next to obstacles, provides strong acceleration at the cost of a couple HP.&lt;br /&gt;
Technically no obstacle is needed: When in motion, holding a grenade until detonation also provides you a boost.&lt;br /&gt;
&lt;br /&gt;
Different explosives provide a different amount of acceleration - in ascending order:&lt;br /&gt;
- (???)&lt;br /&gt;
- ...&lt;br /&gt;
- ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How To Be Hasty™ ==&lt;br /&gt;
&lt;br /&gt;
This guide aims to help with movement on a higher level. Using the above elements from the move set, good ways to solve high level tasks are described.&lt;br /&gt;
&lt;br /&gt;
=== Accelerating ===&lt;br /&gt;
&lt;br /&gt;
==== ...from standstill ====&lt;br /&gt;
&lt;br /&gt;
==== ...horizontally ====&lt;br /&gt;
&lt;br /&gt;
==== ...vertically ====&lt;br /&gt;
&lt;br /&gt;
==== ...going up slope ====&lt;br /&gt;
&lt;br /&gt;
==== ...going down slope ====&lt;br /&gt;
&lt;br /&gt;
==== ...while mid air ====&lt;br /&gt;
&lt;br /&gt;
=== Changing directions ===&lt;br /&gt;
&lt;br /&gt;
=== Using the map &amp;amp; your equipment ===&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Main_Page&amp;diff=30</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Main_Page&amp;diff=30"/>
		<updated>2022-12-09T17:16:08Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: make internal links internal&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;Welcome to the Soldat 2 Wiki&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contents ==&lt;br /&gt;
* [[Weapons]]&lt;br /&gt;
* [[Movement|Movement Guide]]&lt;br /&gt;
* [[Mapping|Mapping Guide]]&lt;br /&gt;
* [[Server Hosting]]&lt;br /&gt;
&lt;br /&gt;
== Important Links ==&lt;br /&gt;
* [https://store.steampowered.com/app/474220/Soldat_2/ Soldat 2 on STEAM]&lt;br /&gt;
* [https://oczki.pl/s2-players Active Player Dashboard]&lt;br /&gt;
* [https://stats.soldat2.com/ Ranked Ladder Statistics &amp;amp; Leaderboards]&lt;br /&gt;
* [https://tms2.jrgp.org/ The Soldat 2 Mapping Showcase]&lt;br /&gt;
* [https://kreis.uber.space/soldat2/mapview/ Map Search &amp;amp; Overview]&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soldat2.com/index.php?title=Main_Page&amp;diff=29</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat2.com/index.php?title=Main_Page&amp;diff=29"/>
		<updated>2022-12-09T17:14:44Z</updated>

		<summary type="html">&lt;p&gt;Nerf cardboard: add more links to community contributed sites, add links to new page stubs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;Welcome to the Soldat 2 Wiki&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contents ==&lt;br /&gt;
* [https://wiki.soldat2.com/index.php?title=Weapons Weapons]&lt;br /&gt;
* [https://wiki.soldat2.com/index.php?title=Movement Movement Guide]&lt;br /&gt;
* [https://wiki.soldat2.com/index.php?title=Mapping Mapping Guide]&lt;br /&gt;
* [https://wiki.soldat2.com/index.php?title=Server+Hosting Server Hosting]&lt;br /&gt;
&lt;br /&gt;
== Important Links ==&lt;br /&gt;
* [https://store.steampowered.com/app/474220/Soldat_2/ Soldat 2 on STEAM]&lt;br /&gt;
* [https://oczki.pl/s2-players Active Player Dashboard]&lt;br /&gt;
* [https://stats.soldat2.com/ Ranked Ladder Statistics &amp;amp; Leaderboards]&lt;br /&gt;
* [https://tms2.jrgp.org/ The Soldat 2 Mapping Showcase]&lt;br /&gt;
* [https://kreis.uber.space/soldat2/mapview/ Map Search &amp;amp; Overview]&lt;/div&gt;</summary>
		<author><name>Nerf cardboard</name></author>
	</entry>
</feed>