Mapping
Also check the SS14 guide here
Make sure you have the codebase downloaded and compiled. After downloading, run RUN_THIS.py, then compile the game in the tools mode by running the script in Scripts/win/buildall-Tools.bat. Then launch the game using RunAll.bat.
The TL;DR
Here is a quick rundown of the steps you need to go through to make a new map, in case you need a refresher or you're already familiar with the mapping process. Otherwise, scroll down to the tutorial.
-
When you're ingame, spawn as an observer. Open the console using
\
and typemapping 10 Maps/civ/template.yml
. This will open the template map, which has some presets predefined. -
Expand the map if you need to, first select a floor tile and hold CTRL and drag it to expand. Remember to enclose the new area in indestructible walls, normally
WallRockIndestructible
. If you do so, remember to runfixgridatmos
in the console. -
Map to your heart's content. Don't forget to add:
- Spawns for all factions
- An observer spawn somewhere
- Capturable area(s), if applicable
- Grace walls
-
Save the map using
savemap 10 mapname.yml
. The file will be created inbin/Content.Server/Data
. Move it to the map folder in Resources/ afterwards. -
Create a new map metadata in
Resources/Prototypes/Maps
and edit it accordingly. Don't forget to define an ID, the preset and the jobs. -
Edit the map file and add the ID you defined above to the station section.
-
Test it!!
Tutorial - Your First Map
Let’s create a simple WW2-themed King of the Hill (KotH) map called River, set in a European theater with two factions (Germans and Soviets) fighting to control a central river crossing.
Step 1: Setup and Template
Ensure the Civ14 codebase is compiled (see the note on the top of this page). Copy the template map file Resources/Maps/basic.yml.template
and rename it river.yml
. This template includes basic presets like weather and global lights.
Launch the game using RunAll.bat
, spawn as an observer, and open the console (\
). Type: mapping 10 Maps/civ/river.yml
This loads the river.yml
map in the editor and spawns you as an observer, where you can edit the map.
Step 2: Expand the Map
The template map is a small grid, so let’s expand it for a KotH layout:
- Expand the Grid: Select a floor tile (e.g.,
FloorPlanetGrass
), holdCTRL
, and drag to expand the map to a reasonable size (e.g., 100x100 tiles for a medium map). Ensure the terrain reflects a WW2 battlefield—use grass, dirt, and river tiles (FloorWaterEntity
andFloorWaterDeepEntity
). - Enclose the Area: Surround the map with indestructible walls (
WallRockIndestructible
, using the entity spawner) to prevent players from falling into space. - Fix Atmosphere: Run
fixgridatmos
in the console to stabilize the map’s atmosphere, ensuring no air leaks or physics issues.
Make sure the map is fully enclosed, otherwise oxygen will escape and players will suffocate to death!
Step 3: Design the Terrain
Mapping is trial and error! Save often, test frequently, and check the Civ14 GitHub for community feedback or new mapping tools.
Shape the River map to fit its WW2 KotH theme:
- Central Objective: Place a capturable marker in the map’s center using
MarkerKOTHOpushka
. This is from the Opushka map, but it will work just fine and is already preconfigured for the German and Soviet factions, and to have a radius of 5. You can have a look at it in `Resources/Prototypes/Civ14/Entities/Markers/capturable_areas.yml. - River: Add a winding river (
FloorWaterDeep
) splitting the map, with the bridge as the only crossing point. Use shallow water tiles (FloorWaterShallow
) for fording. Note that water is an object, not a tile! You will need to make sure you do not accidentally double the ammount of water entities in a tile. - Terrain Features: Scatter trees (
TreeTemperate
, for example), Rocks (WallRock
) and bushes (found under decals) to give the map some cover and flavour.
Step 4: Add Key Elements
Include essential entities for gameplay:
- Faction Spawns:
- Germans: Place 10 or so
SpawnPointGerman
in the left side of the map near the wall. - Soviets: Place 10 or so
SpawnPointSoviet
in the right side of the map.
- Germans: Place 10 or so
- Observer Spawn: Add a single
SpawnPointObserver
in a neutral corner (e.g., map edge) or in the middle of the map for spectators. - Grace Walls: Place temporary
GraceWall
entities around each faction’s base to prevent early rushes. AddGraceWallGerman
around the Soviet base andGraceWallSoviet
around the Soviet base. Also addGraceWall
on the inside of the previous grace walls. PressToggle BB
on the sandbox menu to see its boundaries and make sure there are no holes.
Step 5: Save the Map
Save your work by typing in the console: savemap 10 river.yml
The file will save to bin/Content.Server/Data
. Move it to Resources/Maps/civ/tdm/
afterward.
Step 6: Create Map Metadata
Create a new file in Resources/Prototypes/Maps/river.yml
to define the map’s metadata, specifying its ID, name, path, jobs, factions, and gamemode. Based on Civ14’s structure (similar to the Camp map metadata), here’s the metadata for the River map:
- type: gameMap
id: River
mapName: "River (WW2)"
mapPath: /Maps/civ/tdm/river.yml
minPlayers: 0
maxPlayers: 50
maxRandomOffset: 0
randomRotation: false
fixedPreset: TDM
stations:
River:
stationProto: StandardStationTDM
components:
- type: StationNameSetup
mapNameTemplate: "River (WW2)"
- type: StationJobs
availableJobs:
# German
GermanCaptain: [1, 1]
GermanSergeant: [4, 4]
GermanSubmachineGunner: [10, 10]
GermanRifleman: [40, 40]
GermanMachinegunner: [5, 5]
GermanMedic: [3, 3]
# Soviet
SovietCaptain: [1, 1]
SovietSergeant: [4, 4]
SovietSubmachineGunner: [10, 10]
SovietRifleman: [40, 40]
SovietMachinegunner: [5, 5]
SovietMedic: [3, 3]
Metadata Notes:
- id and mapName: Set to River and River (WW2) for clarity.
- mapPath: Points to
/Maps/civ/tdm/river.yml
, or wherever your map is. - minPlayers and maxPlayers: Set to 0 and 50 to support small-to-medium KotH matches, adjustable based on map size.
- availableJobs: Includes WW2-appropriate roles with counts similar to Opushka (e.g., 1 commander, 15 soldiers per faction). fixedPreset: Specifies KotH victory conditions (4-minute capture) of a common point.
- Checking Metadata: Ensure job IDs (e.g., SovietMachinegunner) exist in
Resources/Prototypes/Civ14/Roles/Jobs/TDM/
. - Common Issues: Incorrect mapPath or undefined job IDs can prevent loading. If the map crashes, check logs in bin/Content.Server/Data/logs or validate YAML syntax.
Step 7: Update the Map File
Open river.yml in a text editor and add the map ID to the metadata and station sections, use CTRL-F to find them:
entities:
- proto: ""
entities:
- uid: 1
components:
- type: MetaData
name: River (WW2)
and
- uid: 2
components:
- type: MetaData
name: River (WW2)
and
- type: BecomesStation
id: River
Ensure the id matches the metadata’s id field (River
) and the name aligns with mapNameTemplate.
Step 8: Test the Map
Open Resources/ConfigPresets/Build/development.toml
and change the value of map to River and the value of defaultpreset to tdm. This will make the game load the map automatically. Run the game.
Test the following:
- Spawns: Ensure Allies and Axis spawn correctly in their bases.
- Capture Point: Verify the bridge's capture point object tracks control times.
- Grace Walls: Confirm they have no holes in them.
- Terrain: Check pathfinding (e.g., no blocked routes) and atmosphere stability (no air leaks).
- Metadata: Confirm jobs load correctly and the KotH gamemode activates with the 4-minute capture condition.
- Balance: Playtest with bots or players to ensure the bridge isn’t too easy/hard to hold.Fix issues by tweaking the map in the editor or editing the metadata file, then resave.