#summary Documentation of configuration files on desktop
#labels Documentation
= Configuration files =
== Introduction ==
This documents the structure and content of the configuration (.ini) files found in the desktop version of Hedgewars.
== `hedgewars.ini` ==
=== {{{[video]}}} ===
_Graphics rendering settings, back-end (engine)_
|| *Setting* || *Type* || *Description* ||
|| resolution=1280x768 || String || Screen resolution the game is rendered at ||
|| fullscreen=false || Boolean || If the game is rendered in fullscreen ||
|| quality=5 || Integer || Quality of game rendering ||
|| stereo=0 || Integer || Mode of stereoscopic 3D rendering, 0 being no 3D ||
=== {{{[frontend]}}} ===
_Graphics and sound settings, front-end (GUI)_
|| *Setting* || *Type* || *Description* ||
|| effects=true || Boolean || If game effects are displayed ||
|| fullscreen=false || Boolean || If the game is in fullscreen-mode, instead of windowed-mode ||
|| width=800 || Integer || Width of the game window ||
|| height=600 || Integer || Height of the game window ||
|| sound=true || Boolean || If sounds are being played ||
|| music=true || Boolean || If background music is being played ||
=== {{{[misc]}}} ===
_Miscellaneous settings_
|| *Setting* || *Type* || *Description* ||
|| weaponTooltips=true || Boolean || If tooltips should be shown in the ammo menu ||
|| altdamage=false || Boolean || If damage pop-ups should be shown on every shot, instead of only at the end of a round ||
|| appendTimeToRecords=false || Boolean || If date and time should be appended to the file name when demo records are saved ||
|| locale=en_US || String || Language used in game in the format "ISO 639-1 Code underscore ISO 3166-1 alpha-2 Code", or system default if left blank ||
=== {{{[audio]}}} ===
_Sound rendering settings, back-end_
|| *Setting* || *Type* || *Description* ||
|| sound=true || Boolean || If sound effects should be rendered ||
|| music=true || Boolean || If background music should be rendered ||
|| volume=100 || Integer || Volume level of sound effects and music rendering ||
=== {{{[net]}}} ===
_Online and LAN settings_
|| *Setting* || *Type* || *Description* ||
|| nick=username || String || Username/nickname used for online play, or promt the user when first connecting if left blank ||
|| passwordhash=@!ByteArray(d41d8cd98f00b204e9800998ecf8427e) || Byte array || Hash of password used for online play ||
|| passwordlength=0 || Integer || Lenght of unhashed password string ||
|| ip=10.0.0.0 || String || Default IP-address when connecting to a LAN server, stored in human-readable dot-notation ||
|| port=46631 || Integer || Default port number when connecting to a LAN server ||
|| servername=hedgewars server || String || Default name when creating a LAN server ||
|| serverport=46631 || Integer || Default port number when creating a LAN server ||
=== {{{[fps]}}} ===
_Frames per second settings_
|| *Setting* || *Type* || *Description* ||
|| show=false || Boolean || If the number of frames rendered per second should be shown in-game ||
|| limit=27 || Integer || Maximum number of frames rendered per second, calculated as _1000 / (35 - limit)_ ||
== `weapons.ini` ==
=== {{{[General]}}} ===
_List of weapon settings as key-value pairs, each with a string name and integer value_
|| *Setting* || *Type* || *Description* ||
|| Default=93919...11101 || Integer || Which weapons are allowed in the default mode ||
== `settings.ini` ==
Various Hedgewars settings.
=== {{{Binds}}} ===
This section defines the global key bindings. They can be overwritten by teams.
Each key binding is written in the form `action=keycode`, e.g. “`ammomenu=b`” for opening the ammo menu with the B key.
==== Actions ====
|| *Setting* || *Description* ||
|| %2Bup || Up ||
|| %2Bleft || Left ||
|| %2Bright || Right ||
|| %2Bdown || Down ||
|| %2Bprecise || Precise ||
|| ljump || Long jump ||
|| hjump || High jump ||
|| switch || Switch hog ||
|| ammomenu || Ammo menu ||
|| slot%201 || Slot 1 ||
|| slot%202 || Slot 2 ||
|| slot%203 || Slot 3 ||
|| slot%204 || Slot 4 ||
|| slot%205 || Slot 5 ||
|| slot%206 || Slot 6 ||
|| slot%207 || Slot 7 ||
|| slot%208 || Slot 8 ||
|| slot%209 || Slot 9 ||
|| slot%20%3A || Slot 10 ||
|| timer%201 || Timer: 1 second ||
|| timer%202 || Timer: 2 seconds ||
|| timer%203 || Timer: 3 seconds ||
|| timer%204 || Timer: 4 seconds ||
|| timer%205 || Timer: 5 seconds ||
|| %2Battack || Attack ||
|| put || Place hedgehog or select target ||
|| findhh || Automatic camera / find hedgehog ||
|| %2Bcur_u || Move camera or cursor up ||
|| %2Bcur_l || Move camera or cursor left ||
|| %2Bcur_r || Move camera or cursor right ||
|| %2Bcur_d || Move camera or cursor down ||
|| zoomin || Zoom in ||
|| zoomout || Zoom out ||
|| zoomreset || Reset zoom ||
|| chat || Open chat input ||
|| history || Toggle chat history ||
|| pause || Toggle pause ||
|| quit || Quit ||
|| confirm || Confirm ||
|| %2Bvoldown || Raise volume ||
|| %2Bvolup || Lower volume ||
|| mute || Mute ||
|| fullscr || Toggle window mode (window/fullscreen) ||
|| capture || Take screenshot ||
|| %2Bspeedup || Increase demo replay speed ||
|| rotmask || Cycle tags above hedgehogs ||
|| record || Record video ||
==== Key codes ====
===== Keyboard =====
Keyboard names are based on the [https://wiki.libsdl.org/SDL_Scancode SDL scancode].
The key name is constructed as follows:
* Take the name from the “Key Name” column of the aforementioned webpage
* Convert it to lower-case
* Replace spaces with underscores
Examples:
|| *Code* || Description ||
|| `a` || A ||
|| `f1` || F1 ||
|| `shift_left` || Left shift key ||
|| `space` || Space bar ||
|| `tab` || Tabulator ||
===== Mouse =====
The codes for the mouse are as follows:
|| *Code* || Description ||
|| `mousel` || Left mouse button ||
|| `mousem` || Middle mouse button ||
|| `mouser` || Right mouse button ||
|| `wheelup` || Mouse wheel up ||
|| `wheeldown` || Mouse wheel down ||
===== Controller/Gamepad/Joystick =====
Controllers, gamepads and joysticks are written in a somewhat cryptic syntax.
====== Buttons ======
Syntax: `jJbB`
* `J`: Controller ID beginning with 0
* `A`: Button ID beginning with 0
Examples:
|| *Code* || Description ||
|| `j0b0` || First controller, first button ||
|| `j0b1` || First controller, second button ||
|| `j1b2` || Second controller, third button ||
====== Axes ======
Syntax: `jJaAD`
* `J`: Controller ID beginning with 0
* `A`: Axis
* `D`: Axis direction. One of the following letters:
* `u`: positive (“up”)
* `d`: negative (“down”)
Examples:
|| *Code* || Description ||
|| `j0a0u` || First controller, first axis up ||
|| `j0a1d` || First controller, second axis down ||
|| `j1a1d` || Second controller, second axis down ||
====== Hats/D-pads ======
Syntax: `jJhHD`
* `J`: Controller ID beginning with 0
* `A`: D-pad ID
* `D`: Direction, it is one of 4 letters:
* `u`: up
* `r`: right
* `d`: down
* `l`: left
Examples:
|| *Code* || Description ||
|| `j0h0u` || First controller, first D-pad up ||
|| `j0h1l` || First controller, second D-pad left ||
|| `j1h1r` || Second controller, second D-pad right ||
=== Other sections ===
_To be written …_
== `schemes.ini` ==
=== {{{[schemes]}}} ===
_List of custom scheme settings as key-value pairs, each with a key of "index number of scheme backslash setting name"_
|| *Setting* || *Type* || *Description* ||
|| size=1 || Integer || Number of custom scheme settings ||
|| 1\name=new || String || Name of scheme ||
|| 1\fortsmode=false || Boolean || If forts are enabled ||
|| 1\divteams=false || Boolean || If teams start at the opposite side of the terrain ||
|| 1\solidland=false || Boolean || If land is indestructible ||
|| 1\border=false || Boolean || If an insestructible border is added around the map ||
|| 1\lowgrav=false || Boolean || If gravity is lowered ||
|| 1\laser=false || Boolean || If aiming is assisted with laser sights ||
|| 1\invulnerability=false || Boolean || If hogs have a personal forcefield ||
|| 1\resethealth=false || Boolean || If living hogs' health is reset to 100 at end of round ||
|| 1\vampiric=false || Boolean || If hogs gain life equal to 80 percent of the damage they deal ||
|| 1\karma=false || Boolean || If hogs lose life equal to the damage they deal ||
|| 1\artillery=false || Boolean || If hogs are unable to move ||
|| 1\randomorder=true || Boolean || If turn order is generated randomly ||
|| 1\king=false || Boolean || If a chess-like king is used ||
|| 1\placehog=false || Boolean || If players take turns placing their hogs before the start of a game ||
|| 1\sharedammo=false || Boolean || If ammo is shared between all teams of the same color ||
|| 1\disablegirders=false || Boolean || If girders are removed from randomly-generated maps ||
|| 1\disablelandobjects=false || Boolean || If land objects are removed from randomly-generated maps ||
|| 1\aisurvival=false || Boolean || If AI hogs respawn on death ||
|| 1\infattack=false || Boolean || If hogs can attack an unlimited number of times each turn ||
|| 1\resetweps=false || Boolean || If weapons are reset at end of each turn ||
|| 1\perhogammo=false || Boolean || If each hog has seperate ammo ||
|| 1\disablewind=false || Boolean || If wind is disabled ||
|| 1\morewind=false || Boolean || If wind is much stronger then usually ||
|| 1\tagteam=false || Boolean || If players in a team share time on each turn ||
|| 1\bottomborder=false || Boolean || If an indestructible border is added at the bottom of the map ||
|| 1\damagefactor=100 || Integer || Percentage of damage dealt ||
|| 1\turntime=45 || Integer || Maximum time in seconds of each turn ||
|| 1\health=100 || Integer || The initial health of the hogs ||
|| 1\suddendeath=15 || Integer || Turns before "Sudden Death" mode begins ||
|| 1\caseprobability=5 || Integer || Number of turns between cases drops ||
|| 1\minestime=3 || Integer || Seconds before mines explode ||
|| 1\minesnum=4 || Integer || Number of mines on a level ||
|| 1\minedudpct=0 || Integer || Percentage chance of each mine being a dud ||
|| 1\explosives=2 || Integer || Number of explosives on a level ||
|| 1\healthprobability=35 || Integer || Percentage chance of each crate being a health crate ||
|| 1\healthcaseamount=25 || Integer || Amount of life restored by each health crate ||
|| 1\waterrise=47 || Integer || Number of pixels the water rises each turn in "Sudden Death" mode ||
|| 1\healthdecrease=5 || Integer || Damage dealth each turn to hogs in water during "Sudden Death" mode ||
|| 1\ropepct=100 || Integer || Maximum length of rope as a percentage ||
|| 1\getawaytime=100 || Integer || Time you have to get away from an explosive after arming it, as a percentage ||
|| 1\worldedge=0 || Integer || Type of world edges at the left and right side. `0` for no edge (default), `1` for wrap-around, `2` for bouncy edges, `3` for ocean. ||
|| 1\scriptparam="" || String || 0.9.21: Script parameter, this is read by scripts. Can have any arbitrary srting value, the meaning of this value depends on the script used. ||
== `TeamName.hwt` ==
These files are found in the `Teams` directory and contain the team settings, one file per team.
=== {{{[Team]}}} ===
_General team settings_
|| *Setting* || *Type* || *Description* ||
|| Name=!TeamName || String || Name of team ||
|| Grave=Statue || String || Type of grave created when hog dies ||
|| Fort=Plane || String || Type of fort if Forts Mode is enabled ||
|| Voicepack=Default || String || Sounds used for hog voice ||
|| Flag=hedgewars || String || Name of flag (flag file name without suffix). This is ignored for AI teams; their flags will always be based on their difficulty level ||
|| Difficulty=0 || Integer || Diffuculty of AI (1-5, 1 = most difficult), or human if 0 ||
|| Rounds=0 || Integer || Number of rounds played with team _(Currently unused)_ ||
|| Wins=0 || Integer || Number of rounds won with team _(Currently unused)_ ||
|| !CampaignProgress=0 || Integer || Campain progress using team as a percentage _(Currently unused)_ ||
=== {{{[Hedgehog0]}}} - {{{[Hedgehog7]}}} ===
_8 sections, one per hedgehog of the team_
|| *Setting* || *Type* || *Description* ||
|| Name=Hedgehog Name || String || Name of hog ||
|| Hat=!NoHat || String || Type of hat used by hog ||
|| Rounds=0 || Integer || Number of rounds played with hog _(Currently unused)_ ||
|| Kills=0 || Integer || Kills comitted by hog _(Currently unused)_ ||
|| Deaths=0 || Integer || Deaths experienced by hog _(Currently unused)_ ||
|| Suicides=0 || Integer || Suicides comitted by hog _(Currently unused)_ ||
=== {{{[Binds]}}} ===
Key bindings of the team. Teams can optionally overwrite the global key bindings or leave everything at default.
This section follows the same format as in `settings.ini`, with one addition: The key code `default` is used for using the default (global) key binding.
==== Values ====
The special value “`default`” is for the default keybinding as specified in the game preferences.
Regarding other keys: _TO BE WRITTEN_
=== {{{[Campaign%20]}}} ===
This section stores campaign variables which are stored and read by Lua scripts. Replace “`` with the folder name of the campaign. Example: The section for “A Classic Fairytale” would be “`[Campaign%20A_Classic_Fairytale]`”.
Campaign variables are stored on a key-value basis, where the key is the name of the campaign variable and the value is the value of the campaign variable.
Campaign variable names and their values can are chosen by the Lua script authors, but there are some special variables which are used to determine which missions are available in the main menu:
|| *Setting* || *Type* || *Description* ||
|| `Progress` || Integer || If present, this number of missions _additional to the first mission_ are unlocked in the menu, starting with the second mission and continuing with the following missions in their regular order (as specified in `campaign.ini`). If the number is `0`, only the first mission is available. ||
|| `UnlockedMissions` || Integer || An alternative way to store the unlocked missions in the main menu if the missions aren't unlocked in the regular order. This number specifies how many missions are unlocked. If this variable is set, then the variables `Mission1`, `Mission2`, etc. must be used to specfify the IDs of the unlocked missions. ||
|| `Mission1` || Integer || The `campaign.ini` ID of the first unlocked mission, must be used together with `UnlockedMissions` ||
|| `Mission2` || Integer || ID of the second unlocked mission (continues with `Mission3`, `Mission4`, and so on) ||
If neither `Progress` nor `UnlockedMissions` are present, only the first mission is unlocked.
==== Examples ====
Simple campaign with 10 missions, missions 1-5 are available:
{{{
[Campaign%20Simple_Campaign]
Progress=4
}}}
Complex campaign with 13 missions, missions 2, 7 and 3 are available (in that order):
{{{
[Campaign%20Complex_Campaign]
UnlockedMissions=3
Mission1=2
Mission2=7
Mission3=3
}}}
Another campaign with some custom campaign variables:
{{{
[Campaign%20Another_Campaign]
Progress=2
MyCustomVariable=54
MyCustomString=Hedgewars
}}}