2 Game Template XML
Frank Harris edited this page 2026-06-20 13:04:55 -05:00

Game Template XML

Game template XML files define how GSP installs, starts, updates, queries, and customizes supported game servers.

The detailed structure in this page is imported from the original OGP XML notes and then checked against the current GSP schema and parser.

Where The Files Live

Current template files are stored in:

  • Panel/Panel/modules/config_games/server_configs/

Current schema and parser files:

  • Panel/Panel/modules/config_games/schema_server_config.xml
  • Panel/Panel/modules/config_games/server_config_parser.php
  • Panel/Panel/modules/config_games/tests/validate_server_configs.php

Purpose Of The XML Templates

Each game template can define:

  • the unique game key
  • the installer type
  • game display name
  • executable name
  • query and control protocol details
  • startup command generation
  • reserved port behavior
  • map handling
  • config-file replacement rules
  • user-editable startup parameters
  • custom fields
  • lifecycle scripts
  • lock files and configuration files
  • Steam Workshop capability metadata in current GSP

Element Order Matters

The original OGP XML documentation is explicit about this and the current GSP schema confirms it: the order of elements matters. XML files should follow the schema ordering, not just include the right tags.

Base Structure

There is one top-level <game_config> element:

<game_config>
  ...
</game_config>

All remaining elements appear inside that root element.

Core Identification And Query Tags

<game_key>

Unique identifier for the game template.

Example:

<game_key>space_engineers_win64</game_key>

The original OGP notes describe OS suffixes such as _win32, _win64, _linux32, and _linux64. Current GSP templates still follow that general naming pattern.

<protocol>

Defines the query protocol family.

Example:

<protocol>lgsl</protocol>

The imported OGP notes document values such as lgsl, gameq, and RCON-oriented protocol flows. Current GSP schema still includes related query and control protocol handling.

<lgsl_query_name>

LGSL-specific query key.

Example:

<lgsl_query_name>killingfloor2</lgsl_query_name>

<gameq_query_name>

GameQ-specific query key.

Example:

<gameq_query_name>redorchestra2</gameq_query_name>

Installation And Display Tags

<installer>

Defines how the game server is installed.

Example:

<installer>steamcmd</installer>

The imported OGP documentation uses this to represent installers such as SteamCMD. Current GSP templates still rely on installer metadata in this area.

<game_name>

Friendly display name shown in the panel.

Example:

<game_name>Killing Floor 2</game_name>

<server_exec_name>

Executable used in the generated start command.

Example:

<server_exec_name>SpaceEngineersDedicated.exe</server_exec_name>

<query_port>

Describes how the query port relates to the base server port.

Example:

<query_port type="add">13</query_port>

The original OGP notes describe type="add" and arithmetic offset behavior. Current GSP schema still includes query-port structure in this area.

Command-Line Generation

<cli_template>

Defines the startup command template appended after the executable name.

Examples:

<cli_template>-console %BASE_PATH% -ignorelastsession</cli_template>
<cli_template>%MAP%%GAMEMODE%%DIFFICULTY%%GAMELENGTH%%PLAYERS%%MUTATOR% %PORT% %IP% %WEB_ADMIN_PORT% %QUERY_PORT%</cli_template>

The imported OGP notes document built-in variables including:

  • GAME_TYPE
  • HOSTNAME
  • IP
  • MAP
  • PID_FILE
  • PLAYERS
  • PORT
  • QUERY_PORT
  • BASE_PATH
  • HOME_PATH
  • SAVE_PATH
  • OUTPUT_PATH
  • CONTROL_PASSWORD

Templates may also use custom variables defined elsewhere in the XML.

<cli_params>

Defines variables used in the CLI template.

Example:

<cli_params>
  <cli_param id="MAP" cli_string="" />
  <cli_param id="IP" cli_string="-MultiHome=" options="q"/>
  <cli_param id="PORT" cli_string="-Port=" options="sq"/>
</cli_params>

The imported OGP explanation still applies:

  • id matches a variable in <cli_template>
  • cli_string is the prefix inserted before the value
  • options affects spacing and quoting

Port Reservation

<reserve_ports>

Defines additional ports derived from the base server port.

Example:

<reserve_ports>
  <port type="subtract" id="WEB_ADMIN_PORT" cli_string="-WebAdminPort=">5</port>
  <port type="add" id="STEAM_PORT" cli_string="-SteamPort=">19238</port>
  <port type="add" id="MY_CUSTOM_PORT">666</port>
</reserve_ports>

Imported OGP behavior:

  • type="add" adds to the main port
  • type="subtract" subtracts from the main port
  • a reserved port can be exposed only for firewall bookkeeping even if no CLI string is emitted

<cli_allow_chars>

Allows selected characters in the generated command line.

Example:

<cli_allow_chars>;</cli_allow_chars>

The original OGP notes describe a default escaped set and using this tag to allow selected characters where required.

Maps, Logs, And Executable Paths

<maps_location>

Path to the map directory used to generate a selectable map list.

<map_list>

Path to a file containing one map per line.

<console_log>

Path to a log file shown in the panel log view.

<exe_location>

Path to the executable directory when the executable is not in the server root.

<max_user_amount>

Maximum player count allowed by the panel UI for that template.

Control Protocol

<control_protocol>

Defines the remote control protocol used by the panel.

Imported OGP notes describe values such as:

  • rcon
  • rcon2
  • lcon

Current GSP schema confirms:

  • rcon
  • rcon2
  • lcon
  • armabe

<control_protocol_type>

Used with RCON to distinguish protocol variants.

Current GSP schema confirms:

  • new
  • old

Mods

<mods>

Defines available game variants or install targets.

Example:

<mods>
  <mod key="insurgency">
    <name>none</name>
    <installer_name>237410</installer_name>
  </mod>
</mods>

The imported OGP notes describe <installer_name> as the install target identifier, commonly a Steam app ID.

Current GSP schema confirms additional mod child tags:

  • name
  • installer_name
  • installer_login
  • betaname
  • betapwd
  • steam_bitness

Config File Editing

<replace_texts>

Defines text replacement operations applied to configuration files.

Example:

<replace_texts>
  <text key="control_password">
    <default>ServerAdminPassword=.*</default>
    <var>ServerAdminPassword=</var>
    <filepath>ShooterGame/Saved/Config/LinuxServer/GameUserSettings.ini</filepath>
    <options>sq</options>
  </text>
</replace_texts>

Imported OGP behavior:

  • <default> identifies what existing line pattern should be replaced
  • <var> is the prefix kept in the target file
  • <filepath> selects the file to edit
  • <options> controls spacing, quoting, and comma behavior

Documented option values:

  • empty: write as-is
  • s: add a space
  • q: quote the value
  • sq: add a space and quote the value
  • sc: add a space and trailing comma
  • sqc: add a space, quotes, and trailing comma

Current GSP schema also confirms:

  • <alltext>
  • <occurrence>

inside each replacement text definition.

User-Facing Startup Parameters

<server_params>

Defines editable parameters that are used to build the startup command line.

Example:

<server_params>
  <param id="SP" key="?ServerPassword=" type="text">
    <option>ns</option>
    <caption>Server Password</caption>
    <desc>Players must know this password to connect.</desc>
  </param>
</server_params>

Imported OGP parameter types:

  • text
  • select
  • checkbox_key_value

Imported OGP option rules:

  • ns: no space between key and value
  • q: quotes around the value with no added space
  • s: add a space before the value
  • anything else: space plus quotes

Current GSP schema also confirms richer structure for server params, including:

  • group
  • param
  • option
  • attribute
  • default
  • caption
  • desc
  • options
  • access

Custom Fields

<custom_fields>

Defines fields stored by the panel for use outside the startup command line.

Current GSP schema confirms:

  • default_value
  • occurrence
  • access

Imported OGP notes indicate these fields are intended for values the panel needs to capture and reuse even when they are not direct command-line substitutions.

Player Management Tags

<list_players_command>

Command used to request the current player list.

<player_info_regex>

Regular expression used to parse player rows from command output.

<player_info>

Maps parsed values into player fields.

<player_commands>

Defines commands such as kick or ban against selected players.

These sections are documented in the imported OGP XML notes and still appear in the current schema.

Lifecycle Scripts

<pre_install>

Commands or actions that run before installation.

<post_install>

Commands or actions that run after installation.

<pre_start>

Commands or actions that run before server start.

The original OGP XML notes include both Linux and Windows style examples for pre-start logic. Current GSP history also shows post-install XML fixes, including CDATA cleanup for DayZ scripts.

Environment And Locking

<environment_variables>

Defines environment variables exported for the server process.

<lock_files>

Defines files used to detect running or locked server states.

Configuration File Registration

<configuration_files>

Registers configuration files known to the panel.

Current GSP schema confirms <file> entries with a description attribute.

GSP Verification Notes

The current GSP schema adds a major block that is not described in the original OGP XML notes:

<workshop_support>

Current confirmed child tags:

  • enabled
  • provider
  • steam_app_id
  • workshop_app_id
  • download_method
  • install_strategy
  • install_path
  • startup_param_format
  • mod_separator
  • mod_prefix
  • mod_folder_format
  • copy_keys
  • post_install_action

Confirmed copy_keys child tags:

  • source_pattern
  • target_path

Confirmed install_strategy values in the current schema:

  • game_managed_workshop
  • steamcmd_download_only
  • copy_to_game_root
  • copy_to_mod_folder
  • dayz_mod_folder
  • arma_mod_folder
  • config_only
  • custom_scripted_install

This block is visible in current templates such as:

  • arma3_linux64.xml
  • arma3_win64.xml

Needs Verification

  • whether any legacy tags remain accepted by runtime code even when not present in the current schema
  • whether any module-specific XML conventions exist outside config_games
  • whether every older OGP XML example remains valid without adjustment under the current GSP schema