No edit summary
 
No edit summary
Line 27: Line 27:
[[File:Holdfast CustomMap.jpg|right|600px|CustomMap]]
[[File:Holdfast CustomMap.jpg|right|600px|CustomMap]]


<pre style="background:#111827;color:#e5e7eb;padding:.8em 1em;border-radius:.6em;overflow:auto;line-height:1.45;font-size:.9em;">!map_rotation start
<pre class="hf-code">!map_rotation start
map_name CustomMap
map_name CustomMap
game_mode ArmyBattlefield
game_mode ArmyBattlefield
Line 50: Line 50:
To refresh changes to your map without restarting your server, issue the following (substitute the correct rotation index):
To refresh changes to your map without restarting your server, issue the following (substitute the correct rotation index):


<pre style="background:#111827;color:#e5e7eb;padding:.8em 1em;border-radius:.6em;overflow:auto;line-height:1.45;font-size:.9em;">rc fileReloader serverConfigFile
<pre class="hf-code">rc fileReloader serverConfigFile
rc mapRotation 1</pre>
rc mapRotation 1</pre>


Line 66: Line 66:
This prints your position and rotation:
This prints your position and rotation:


<pre style="background:#111827;color:#e5e7eb;padding:.8em 1em;border-radius:.6em;overflow:auto;line-height:1.45;font-size:.9em;">playerPosition => (15.3, 16.8, 146.9)
<pre class="hf-code">playerPosition => (15.3, 16.8, 146.9)
playerRotation => (0.0, 218.0, 0.0)</pre>
playerRotation => (0.0, 218.0, 0.0)</pre>


* '''Position''' is (X, Y, Z). Positive X is North, positive Y is up, positive Z is West.
* '''Position''' is (X, Y, Z). Positive X is North, positive Y is up, positive Z is West.
* '''Rotation''' is degrees around (X, Y, Z). You'll use '''Y''' most to turn objects; X and Z tilt.
* '''Rotation''' is degrees around (X, Y, Z). You'll use '''Y''' most to turn objects; X and Z tilt.
* To face the opposite direction of the example above, use <code>(0.0, 38.0, 0.0)</code> (218 180).
* To face the opposite direction of the example above, use <code>(0.0, 38.0, 0.0)</code> (218 ??? 180).


As of [[Game_Version_0.3X#0.35|0.35]], <code>get details</code> also copies position & rotation to your clipboard for easy pasting.
As of [[Game_Version_0.3X#0.35|0.35]], <code>get details</code> also copies position & rotation to your clipboard for easy pasting.
Line 87: Line 87:
See [[Spawnable Props|Spawnable Props]] for the full list. Place a decorative prop with:
See [[Spawnable Props|Spawnable Props]] for the full list. Place a decorative prop with:


<pre style="background:#111827;color:#e5e7eb;padding:.8em 1em;border-radius:.6em;overflow:auto;line-height:1.45;font-size:.9em;">objects_override &lt;prop&gt; &lt;pX&gt; &lt;pY&gt; &lt;pZ&gt; &lt;rX&gt; &lt;rY&gt; &lt;rZ&gt;</pre>
<pre class="hf-code">objects_override &lt;prop&gt; &lt;pX&gt; &lt;pY&gt; &lt;pZ&gt; &lt;rX&gt; &lt;rY&gt; &lt;rZ&gt;</pre>


* '''&lt;prop&gt;''' Enum from [[Spawnable Props|Spawnable Props]]
* '''&lt;prop&gt;''' ??? Enum from [[Spawnable Props|Spawnable Props]]
* '''&lt;pX&gt; &lt;pY&gt; &lt;pZ&gt;''' Position (use <code>get playerPosition</code>)
* '''&lt;pX&gt; &lt;pY&gt; &lt;pZ&gt;''' ??? Position (use <code>get playerPosition</code>)
* '''&lt;rX&gt; &lt;rY&gt; &lt;rZ&gt;''' Rotation (use <code>get playerRotation</code>)
* '''&lt;rX&gt; &lt;rY&gt; &lt;rZ&gt;''' ??? Rotation (use <code>get playerRotation</code>)


[[File:Holdfast CustomMap TargetDummy.jpg|right|600px|CustomMap]]
[[File:Holdfast CustomMap TargetDummy.jpg|right|600px|CustomMap]]


'''Example''' add a Target Dummy at the example coordinates:
'''Example''' ??? add a Target Dummy at the example coordinates:


<pre style="background:#111827;color:#e5e7eb;padding:.8em 1em;border-radius:.6em;overflow:auto;line-height:1.45;font-size:.9em;">!map_rotation start
<pre class="hf-code">!map_rotation start
map_name CustomMap
map_name CustomMap
game_mode ArmyBattlefield
game_mode ArmyBattlefield
Line 128: Line 128:
Players can hold <kbd>E</kbd> to take weapons from a rack (limited supply).
Players can hold <kbd>E</kbd> to take weapons from a rack (limited supply).


<pre style="background:#111827;color:#e5e7eb;padding:.8em 1em;border-radius:.6em;overflow:auto;line-height:1.45;font-size:.9em;">objects_override WeaponRack &lt;Object Position&gt; &lt;Object Rotation&gt; &lt;Weapon&gt; &lt;Number Of Weapons In Rack&gt;</pre>
<pre class="hf-code">objects_override WeaponRack &lt;Object Position&gt; &lt;Object Rotation&gt; &lt;Weapon&gt; &lt;Number Of Weapons In Rack&gt;</pre>


* '''&lt;Object Position&gt;''' <code>x y z</code> (use <code>get playerPosition</code>)
* '''&lt;Object Position&gt;''' ??? <code>x y z</code> (use <code>get playerPosition</code>)
* '''&lt;Object Rotation&gt;''' <code>x y z</code> (use <code>get playerRotation</code>)
* '''&lt;Object Rotation&gt;''' ??? <code>x y z</code> (use <code>get playerRotation</code>)
* '''&lt;Weapon&gt;''' Enum from [[Server Configuration Enums#Weapon|Weapon]]
* '''&lt;Weapon&gt;''' ??? Enum from [[Server Configuration Enums#Weapon|Weapon]]
* '''&lt;Number Of Weapons In Rack&gt;''' <code>0–255</code>
* '''&lt;Number Of Weapons In Rack&gt;''' ??? <code>0???255</code>


'''Example:'''
'''Example:'''
<pre style="background:#111827;color:#e5e7eb;padding:.8em 1em;border-radius:.6em;overflow:auto;line-height:1.45;font-size:.9em;"># Override Commands (This is a comment and will be ignored by the game)
<pre class="hf-code"># Override Commands (This is a comment and will be ignored by the game)
objects_override WeaponRack 1 2 3 7 8 9 Rifle_Pattern1800Infantry 4</pre>
objects_override WeaponRack 1 2 3 7 8 9 Rifle_Pattern1800Infantry 4</pre>


Line 144: Line 144:
Customisable ammo boxes for RP/events. Players replenish ammo on use.
Customisable ammo boxes for RP/events. Players replenish ammo on use.


<pre style="background:#111827;color:#e5e7eb;padding:.8em 1em;border-radius:.6em;overflow:auto;line-height:1.45;font-size:.9em;">objects_override firearmammobox &lt;Object Position&gt; &lt;Object Rotation&gt; &lt;Firearm&gt; &lt;Maximum Interactions Until Depletion&gt; &lt;Ammo Given&gt; &lt;Maximum Interactions Allowed Per Player&gt;</pre>
<pre class="hf-code">objects_override firearmammobox &lt;Object Position&gt; &lt;Object Rotation&gt; &lt;Firearm&gt; &lt;Maximum Interactions Until Depletion&gt; &lt;Ammo Given&gt; &lt;Maximum Interactions Allowed Per Player&gt;</pre>


* '''&lt;Object Position&gt;''' <code>x y z</code>
* '''&lt;Object Position&gt;''' ??? <code>x y z</code>
* '''&lt;Object Rotation&gt;''' <code>x y z</code>
* '''&lt;Object Rotation&gt;''' ??? <code>x y z</code>
* '''&lt;Firearm&gt;''' Enum from [[Server Configuration Enums#Firearm|Firearm]]
* '''&lt;Firearm&gt;''' ??? Enum from [[Server Configuration Enums#Firearm|Firearm]]
* '''&lt;Maximum Interactions Until Depletion&gt;''' <code>0–255</code> total uses
* '''&lt;Maximum Interactions Until Depletion&gt;''' ??? <code>0???255</code> total uses
* '''&lt;Ammo Given&gt;''' <code>0–255</code> rounds per use
* '''&lt;Ammo Given&gt;''' ??? <code>0???255</code> rounds per use
* '''&lt;Maximum Interactions Allowed Per Player&gt;''' <code>0–255</code> per-player cap
* '''&lt;Maximum Interactions Allowed Per Player&gt;''' ??? <code>0???255</code> per-player cap


'''Example:'''
'''Example:'''
<pre style="background:#111827;color:#e5e7eb;padding:.8em 1em;border-radius:.6em;overflow:auto;line-height:1.45;font-size:.9em;"># Override Commands (This is a comment and will be ignored by the game)
<pre class="hf-code"># Override Commands (This is a comment and will be ignored by the game)
objects_override firearmammobox 1 2 3 7 8 9 Rifle_Pattern1800Infantry 20 2 1</pre>
objects_override firearmammobox 1 2 3 7 8 9 Rifle_Pattern1800Infantry 20 2 1</pre>



Revision as of 04:18, 15 February 2026

Overview

Holdfast allows server owners to customise existing maps to create a whole new experience. You can add props, change spawns, weapon setup, class limits, and more until you've created something entirely new. Map customisation is defined using Map Rotations in the configuration file.

Starting Maps

As well as building upon the normal maps, there are two flat and empty maps that are perfect to let your imagination run wild: CustomMap and CustomMapNaval. As you'll likely spend plenty of time setting up your new map, create a new rotation with an unlimited timer and open spawns, e.g.:

CustomMap
CustomMap
!map_rotation start
map_name CustomMap
game_mode ArmyBattlefield
round_time_minutes -1
reinforcements_per_faction 9000
wave_spawn_time_seconds 1
max_player_respawns -1
faction_balancing false
allow_midround_spawning true
allow_faction_switching true
allow_spectating true
minimum_players -1
maximum_players 150
time_hour 8
time_dynamic false
friendly_fire true
weather_preset calm
weather_dynamic false
game_type hardcore
!map_rotation end

To refresh changes to your map without restarting your server, issue the following (substitute the correct rotation index):

rc fileReloader serverConfigFile
rc mapRotation 1

Positioning

Before placing a prop, decide where it goes and which way it faces. Stand where you want it in-game, open the console with F1 and type get.

The output of get
The output of get

This prints your position and rotation:

playerPosition => (15.3, 16.8, 146.9)
playerRotation => (0.0, 218.0, 0.0)
  • Position is (X, Y, Z). Positive X is North, positive Y is up, positive Z is West.
  • Rotation is degrees around (X, Y, Z). You'll use Y most to turn objects; X and Z tilt.
  • To face the opposite direction of the example above, use (0.0, 38.0, 0.0) (218 ??? 180).

As of 0.35, get details also copies position & rotation to your clipboard for easy pasting.

Placing Props

Props range from simple decor (just position/rotation) to interactables (with extra parameters).

Decorative Props

See Spawnable Props for the full list. Place a decorative prop with:

objects_override <prop> <pX> <pY> <pZ> <rX> <rY> <rZ>
  • <prop> ??? Enum from Spawnable Props
  • <pX> <pY> <pZ> ??? Position (use get playerPosition)
  • <rX> <rY> <rZ> ??? Rotation (use get playerRotation)
CustomMap
CustomMap

Example ??? add a Target Dummy at the example coordinates:

!map_rotation start
map_name CustomMap
game_mode ArmyBattlefield
round_time_minutes -1
reinforcements_per_faction 9000
wave_spawn_time_seconds 1
max_player_respawns -1
faction_balancing false
allow_midround_spawning true
allow_faction_switching true
allow_spectating true
minimum_players -1
maximum_players 150
time_hour 8
time_dynamic false
friendly_fire true
weather_preset calm
weather_dynamic false
game_type hardcore

objects_override TargetDummy 15.3 16.8 146.9 0.0 218.0 0.0
!map_rotation end

Interactable Props

These require extra arguments.

Weapon Racks

Players can hold E to take weapons from a rack (limited supply).

objects_override WeaponRack <Object Position> <Object Rotation> <Weapon> <Number Of Weapons In Rack>
  • <Object Position> ??? x y z (use get playerPosition)
  • <Object Rotation> ??? x y z (use get playerRotation)
  • <Weapon> ??? Enum from Weapon
  • <Number Of Weapons In Rack> ??? 0???255

Example:

# Override Commands (This is a comment and will be ignored by the game)
objects_override WeaponRack 1 2 3 7 8 9 Rifle_Pattern1800Infantry 4

Place this between !map_rotation start and !map_rotation end.

Firearm Ammoboxes

Customisable ammo boxes for RP/events. Players replenish ammo on use.

objects_override firearmammobox <Object Position> <Object Rotation> <Firearm> <Maximum Interactions Until Depletion> <Ammo Given> <Maximum Interactions Allowed Per Player>
  • <Object Position> ??? x y z
  • <Object Rotation> ??? x y z
  • <Firearm> ??? Enum from Firearm
  • <Maximum Interactions Until Depletion> ??? 0???255 total uses
  • <Ammo Given> ??? 0???255 rounds per use
  • <Maximum Interactions Allowed Per Player> ??? 0???255 per-player cap

Example:

# Override Commands (This is a comment and will be ignored by the game)
objects_override firearmammobox 1 2 3 7 8 9 Rifle_Pattern1800Infantry 20 2 1

Place this between !map_rotation start and !map_rotation end.

Polishing Up

Once your map is laid out, adjust class limits, spawns, and other settings as usual via the Server Configuration guide.

Community Maps

The Holdfast modding community shares custom map configs and assists new modders. Join via the official Discord:

Holdfast Official Discord

Once joined, go to the #become-a-modder channel and click the button to get the Modder role to unlock the Modding Bench channels.