Back to homepage
Documentation of configuration files on desktop
Updated Fri, 05 Jun 2020 15:13:10 +0200 by Wuzzy

Configuration files


This documents the structure and content of the configuration (.ini) files found in the desktop version of Hedgewars.



Graphics rendering settings, back-end (engine)

Setting Type Description
fullscreenResolution=1280x768 String Screen resolution the game is rendered when using fullscreen mode
windowedWidth=1280 Integer Window width when using window mode
windowedHeight=1024 Integer Window height when using window mode
fullscreen=false Boolean If the game is rendered in fullscreen
quality=5 Integer Quality of game rendering (0-5, 5 is best quality)
stereo=0 Integer Mode of stereoscopic 3D rendering, 0 being no 3D


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 in the frontend
music=true Boolean If background music is being played in the frontend


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
teamtag Boolean Whether to show the team name above hedgehogs by default
hogtag Boolean Whether to show the hog name above hedgehogs by default
healthtag Boolean Whether to show the health above hedgehogs by default
tagopacity Boolean If true, name and health tags above hedgehogs are translucent


Sound settings for the sounds and music in the game itself

Setting Type Description
sound=true Boolean If sound effects should be played in-game
music=true Boolean If background music should be played in-game
volume=100 Integer Volume level (in percent) of sound effects and music


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=d41d8cd98f00b204e9800998ecf8427e String Hash of password used for online play
passwordlength=0 Integer Currently unused
savepassword=true Boolean If true, password will be saved
ip= String Default IP address or hostname when connecting to a LAN server
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


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)


Proxy settings

Setting Type Description
type=0 Integer Proxy type. 0: no proxy, 1: system proxy, 2: SOCKS5 proxy, 3: HTTP proxy. The following settings are ignored if the proxy type is 0 or 1.
host String Hostname or IP adress of proxy
port Integer Port number of proxy
login String User name to login to the proxy
password String Password (in clear text) to login to the proxy


Video recording settings

Setting Type Description
format=mp4 String Container format (the file format of the resulting file)
videocodec String Video codec
audiocodec String Audio codec
framerate Integer Frame rate in frames per second
bitrate Integer The bit rate in 1000 bytes per second
width Integer Video width
height Integer Video height
usegameres Boolean If true, use the game resolution and ignore the width and height settings
audio Boolean Whether to use audio


Setup 9 team colors here, the setting names are from color0 to color8 . The values are 3-byte hexadecimal numbers in RGB notation with “#” prefixed.

Setting Default
color0 #ff0204
color1 #4980c1
color2 #1de6ba
color3 #b541ef
color4 #e55bb0
color5 #20bf00
color6 #fe8b0e
color7 #874b06
color8 #ffff01


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.


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
chat%20team Open clan 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 Toggle team bars
rottags Toggle hedgehog tags
record Record video

Key codes

Keyboard names are based on the 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


Code Description
a A
f1 F1
shift_left Left shift key
space Space bar
tab Tabulator

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

Controllers, gamepads and joysticks are written in a somewhat cryptic syntax.


Syntax: jJbB

  • J : Controller ID beginning with 0
  • A : Button ID beginning with 0


Code Description
j0b0 First controller, first button
j0b1 First controller, second button
j1b2 Second controller, third button


Syntax: jJaAD

  • J : Controller ID beginning with 0
  • A : Axis
  • D : Axis direction. One of the following letters:
    • u : positive (“up”)
    • d : negative (“down”)


Code Description
j0a0u First controller, first axis up
j0a1d First controller, second axis down
j1a1d Second controller, second axis down


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


Code Description
j0h0u First controller, first D-pad up
j0h1l First controller, second D-pad left
j1h1r Second controller, second D-pad right


A game scheme. Each game scheme has its own file. <SchemeName> is the name of the scheme. Each game scheme setting is stored as a key-value pair, one setting per line:

Setting Type Description
switchhog=false Boolean If free hog switching is enabled on turn start
divteams=false Boolean If teams start at the opposite side of the terrain
solidland=false Boolean If land is indestructible
border=false Boolean If an insestructible border is added around the map
lowgrav=false Boolean If gravity is lowered
laser=false Boolean If aiming is assisted with laser sights
invulnerability=false Boolean If hogs have a personal forcefield
resethealth=false Boolean If living hogs' health is reset to 100 at end of round
vampiric=false Boolean If hogs gain life equal to 80 percent of the damage they deal
karma=false Boolean If hogs lose life equal to the damage they deal
artillery=false Boolean If hogs are unable to move
randomorder=true Boolean If turn order is generated randomly
king=false Boolean If a chess-like king is used
placehog=false Boolean If players take turns placing their hogs before the start of a game
sharedammo=false Boolean If ammo is shared between all teams of the same color
disablegirders=false Boolean If girders are removed from randomly-generated maps
disablelandobjects=false Boolean If land objects are removed from randomly-generated maps
aisurvival=false Boolean If AI hogs respawn on death
infattack=false Boolean If hogs can attack an unlimited number of times each turn
resetweps=false Boolean If weapons are reset at end of each turn
perhogammo=false Boolean If each hog has seperate ammo
disablewind=false Boolean If wind is disabled
morewind=false Boolean If wind is much stronger then usually
tagteam=false Boolean If players in a team share time on each turn
bottomborder=false Boolean If an indestructible border is added at the bottom of the map
damagefactor=100 Integer Percentage of damage dealt
turntime=45 Integer Maximum time in seconds of each turn
health=100 Integer The initial health of the hogs
suddendeath=15 Integer Number of rounds to play until Sudden Death begins, after the first round was played. 0 = SD starts in 2nd round
caseprobability=5 Integer Number of turns between cases drops
minestime=3 Integer Seconds before mines explode
minesnum=4 Integer Number of mines on a level
minedudpct=0 Integer Percentage chance of each mine being a dud
explosives=2 Integer Number of explosives on a level
healthprobability=35 Integer Percentage chance of each crate being a health crate
healthcaseamount=25 Integer Amount of life restored by each health crate
waterrise=47 Integer Number of pixels the water rises each turn in "Sudden Death" mode
healthdecrease=5 Integer Damage dealth each turn to hogs in water during "Sudden Death" mode
ropepct=100 Integer Maximum length of rope as a percentage
getawaytime=100 Integer Time you have to get away from an explosive after arming it, as a percentage
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.
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.


A weapon scheme. <SchemeName> is the name of this weapon scheme. This file contains a long sequence of digits between 0 to 9 to configure all weapon settings.

The number string has 4 equally long sections, in this order:

  • Start ammo (0-9, 9 = infinite)
  • Crate probability (0-8, higher = more)
  • Ammo in crate (0-8)
  • Delay (0-8)

The section length is the number of ammo types, excluding amNothing . In version 1.0.0, each section has a length of 59.

In each section, each digit represents one weapon. The order of these weapons is noted in ammo types. This means the first number of a section is for the grenade, followed by the cluster bomb, then bazooka, and so on.


Legacy file for game schemes for version 0.9.23 and older. Since 0.9.24, this file is no longer actively used, it is now only used to import schemes to the new format when the Schemes/Game/ directory has not been created yet.


List of custom scheme settings as key-value pairs, each with a key of "index number of scheme backslash setting name". The only exception is size which holds the number of game schemes in this file.

Setting Type Description
size=1 Integer Number of custom scheme settings
1\name=new String Name of scheme no. 1
1\fortsmode=false Boolean Whether forts are used in scheme no. 1. This is no longer used since 0.9.23
1\<setting>=value See above A setting of scheme no. 1. <setting> is any of the game scheme settings listed above in the new game scheme format


Legacy file for weapon schemes for version 0.9.23 and older. Since 0.9.24, this file is no longer actively used, it is now only used to import weapon schemes to the new format when the Schemes/Ammo/ directory has not been created yet.


List of weapon settings as key-value pairs, each with a string name and integer value

Setting Type Description
<Scheme name> =93919...11101 Integer Weapon settings. <Scheme name> is the name of the scheme. The number string has the same meaning as in the new ammo scheme file


These files are found in the Teams directory and contain the team settings, one file per 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 Unused
Wins=0 Integer Unused
CampaignProgress=0 Integer 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 Unused
Kills=0 Integer Unused
Deaths=0 Integer Unused
Suicides=0 Integer Unused


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.


The special value “ default ” is for the default keybinding as specified in the game preferences.

Regarding other keys: See the “Binds” section of settings.ini.


This section stores campaign variables which are stored and read by Lua scripts. Replace “ <CAMPAIGN_NAME> 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 and to determine which missions and campaigns have been completed.

For linear campaigns, the variables Progress and Won are used. For non-linear campaigns, the variables UnlockedMissions , MissionX , MissionXWon and Won are used. The variables should not be mixed up.

Completed missions and campaigns get a check mark in the campaign screen.

Setting Type Description
Progress Integer This variable stands for the number of completed missions in a linear campaign, starting with mission 1. For each completed mission, the next one gets unlocked. If the number is 0 , only the first mission is available.
UnlockedMissions Integer 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.
MissionX Integer E.g. Mission1 , Mission2 , etc. Contains the campaign.ini ID of the X th unlocked mission, must be used together with UnlockedMissions
MissionXWon Boolean E.g. Mission1Won , Mission2Won , etc. If true , the mission with the number X in campaign.ini has been completed.
Won Boolean If true , the team has completed the campaign. Note that campaign victory is completely separate from mission victory, so this setting must be set seperately.

If neither Progress nor UnlockedMissions is set (which is the case for new teams), only the first mission (mission 1 in campaign.ini ) is available.


Simple campaign with 10 missions, missions 1-5 are available and missions 1-4 count as completed:

[Campaign%20Simple_Campaign] Progress=4

Simple campaign with 6 missions. This campaign and all its missions have been unlocked and completed:

[Campaign%20Simple_Campaign_2] Progress=6 Won=true

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


This section stores mission variables. Mission variables are very similar to campaign variables, but they are for single missions (training/challenge/scenario) that are not part of a campaign. Replace “ <MISSION_NAME> with the file name of the mission.

Like campaign variables, mission variables are stored on a key-value basis. You can choose custom names but there are also a few special key names with a special meaning.

Won is to mark victory and it's often useful to be used together with onGameResult . The other special keys are to store challenge records. Use these only when they make sense.

Setting Type Description
Won Boolean If true , the team has completed the mission.
Highscore Integer Team's best score in this mission, where higher = better
Lowscore Integer Team's best score in this mission, where lower = better
TimeRecord Integer Team's best time (in milliseconds) in this mission, where lower = better
TimeRecordHigh Integer Team's best time (in milliseconds) in this mission, where higher = better
AccuracyRecord Integer Team's highest accuracy in this mission, in percent