Game Configuration
Where a game's identity, starting map, spawn tile, tabs, HUD bars, gameplay systems and project-wide defaults are edited, and which file each setting lands in.
8 min read
What game configuration is#
A project carries two small configuration files at its root, and "game configuration" is everything that ends up in them:
game_config.jsonis the player-facing file. It is packed into thedatapack and uploaded alongside every build, so whatever it says is what the game ships with: title, description, developer, website, genre, tags, the starting map and the spawn tile.project.vastopiais the editor-facing file. It records the same starting map and spawn tile for the editor's own use, plus things a player never sees: the template the project came from, which gameplay systems are enabled, the platform game id, branding paths, export options, and the machine-specific server and client checkouts.
The layout of both files is documented in Project structure. This page is about the places in the editor where you change them.
There is no single "game config" screen. The settings are spread across the surfaces where they make sense:
| What | Where it is edited | Lands in |
|---|---|---|
| Title, description, developer, website, genre, tags | New Project page (Basics and Presentation steps); afterwards the Creator Dashboard or the update_game_config MCP tool | game_config.json |
| Game logo / icon | New Project page (Basics step) | assets/branding/game_icon.<ext>, project.vastopia [branding] |
| Starting map, spawn tile | Game Settings tab | game_config.json and project.vastopia [game] |
| Server and client checkouts for Dev Test | Game Settings tab | project.vastopia [server] / [client] only |
| Tab bar layout | New Project page (Tabs step); afterwards the GUI editor's Game Screen mode | assets/data/tab_config.json |
| HUD stat bars | New Project page (Presentation step); afterwards the GUI editor's Game Screen mode | assets/data/map_area_config.json |
| Gameplay systems | New Project page (Systems step) | project.vastopia [systems], server/data/systems.json |
| Max world size, new-map defaults | Settings ▸ Project Settings..., Project tab | project.vastopia [world] / [map_defaults] |
The Game Settings tab#
Game Settings is a button in the top bar of the main window. It is also the screen the project hub opens when you choose Open Game Settings from a project card's menu. Every change on it is saved the moment you make it; the footer reads "Changes are saved automatically." and flips to "Saved" after each write.
World#
| Field | What it does |
|---|---|
| Starting map | The map players spawn into when they join the game. The dropdown lists every directory under assets/maps/ that contains a <name>_region.tscn scene. Click Refresh after creating a map in another tab to see it here. If the project has no maps the dropdown is disabled and reads "No maps found". |
| Spawn X (tile) | Player spawn tile on the X axis. Maps are centred on 0, and the standard playable area is tiles -64 to 63. The spinner accepts -1024 to 1024. |
| Spawn Z (tile) | Player spawn tile on the Z axis. Same range. |
Selecting a map writes its name (just the folder name, not a path) to starting_map in game_config.json and to [game] starting_map in project.vastopia. Changing a spinner writes start_x and start_z to both files in the same way. game_config.json is treated as the authoritative copy; the project.vastopia values are a mirror the editor uses itself, for example to pick which map's thumbnail to show on the project card in the hub.
To set where players start:
- Click Game Settings in the top bar.
- Under World, choose the map in Starting map. If you just created the map, click Refresh first.
- Set Spawn X (tile) and Spawn Z (tile) to the tile the player should appear on. Use the Map Editor's Regions mode to read tile coordinates off the grid (see Regions and elements).
- Confirm the footer says "Saved". No separate save step is needed.
Development#
The Development section holds two folder paths used by Dev Test and Play Local (see Test your game):
| Field | What it expects |
|---|---|
| Server project path | The folder containing RealmServer.csproj. Dev Test builds and runs the local server from here. |
| Client project path | The folder containing the client's project.godot. Optional; auto-detected next to the server repo when empty. |
Each has a Browse... button, and a hint line under the server path tells you whether the folder checks out: "Server project found", "Folder not found: ...", "RealmServer.csproj not found here — point at the Server/ folder of the server repo", or "Not set — Dev Test can't launch the local server without it."
These two paths describe your machine, not your game. They are stored only in project.vastopia ([server] project_path and [client] project_path), never in game_config.json, and they are re-stamped with the local checkouts whenever a project is created or downloaded from the cloud. New projects are pre-filled from the editor-wide defaults under Settings ▸ Editor ▸ Source Checkouts, which auto-detect a sibling checkout the first time.
Identity and store listing#
The text a player reads about your game is set on the New Project page and shipped in game_config.json:
- Basics step: the game name becomes
title. A logo chosen here is copied toassets/branding/game_icon.<ext>and recorded as[branding] icon_pathinproject.vastopia(withicon_cdn_urlleft empty until it is uploaded). - Presentation step, Store Listing card: a description ("What is your game about?"), a Genre dropdown (Adventure, RPG, MMO, Survival, Sandbox, Action, Puzzle, Social, Other), Tags (comma separated), Developer and Website. These land in
description,genre,tags(as an array),developerandwebsite.versionkeeps the template's1.0.0.
After the project exists, the platform listing players browse is edited in the Creator Dashboard, which also covers cover art, screenshots and the loading screen: Game details and branding. The file in the project is edited with the update_game_config MCP tool or by hand.
Tabs and HUD#
The in-game tab bar and the HUD's stat orbs are game configuration too, but they are authored visually:
- The Tabs step of the New Project page lays out the two rows of tabs and their per-row width and spacing, written to
assets/data/tab_config.json. Tabs belonging to a gameplay system you switch off are removed from the file; the inventory, equipment and skills tabs are built into the client and always stay. See Tabs. - The Presentation step's HUD Stat Bars card picks which orbs sit beside the minimap: Health, Stamina, Mana and Energy, with Health and Stamina on by default. The choice is written as
progress_barsinassets/data/map_area_config.json, leaving the template's bottom buttons alone. See Game screen and HUD.
Both can be changed later in the GUI editor's Game Screen mode, which edits the same two files.
Gameplay Systems#
Which gameplay systems a project ships is decided on the Systems step of the New Project page and applied while the template is copied: the files of a system you left off are never in the new project. The editor has no screen for revisiting that choice afterwards. The result is recorded in project.vastopia [systems] enabled and in server/data/systems.json, which is what stops a game server running a module the project no longer carries. The full list of systems, what each owns, and the server-enforced ones are on Templates and gameplay systems.
Project settings#
Settings ▸ Project Settings... opens the editor's settings dialog on its Project tab (the same dialog also holds the Editor and Keybinds tabs). With no project open the tab only says "Open a project to edit project settings." Otherwise it has three sections:
| Section | Setting | Details |
|---|---|---|
| World | Max world size | Largest map footprint per side, in world units (1 unit = 2 tiles). 0 = unlimited. Steps of 64 up to 32768. Maps exceeding this show a warning when saved. Stored as [world] max_world_size. |
| New Map Defaults | Terrain type | Preselected terrain when creating a new map: Empty, Flat Grass, Hills, Mountains, Desert, Islands. Stored as [map_defaults] terrain_type. |
| Lighting theme | Preselected lighting for new maps: Daylight, Sunset, Night, Overcast, Dawn. Stored as [map_defaults] lighting_theme. | |
| Project | Name, Version, Platform game ID, Location | Read-only. The game id shows "Not linked" when [platform] game_id is empty. |
Changes here apply immediately, the same as the Game Settings tab.
Reference: what lands where#
game_config.json#
| Key | Type | Written by |
|---|---|---|
title | string | New Project page (the game name) |
description, developer, website, genre | string | New Project page, Presentation step |
tags | array of strings | New Project page, Presentation step |
version | string | Template default 1.0.0; update_game_config can change it |
starting_map | string (map folder name) | Game Settings tab, set_starting_map |
start_x, start_z | integer | Game Settings tab |
project.vastopia#
| Section | Key | Written by |
|---|---|---|
[game] | title | Project creation |
starting_map, start_x, start_z | Game Settings tab (mirror of game_config.json) | |
[project] | template_id, template_version | Project creation |
[systems] | enabled | Project creation |
[branding] | icon_path, icon_cdn_url | New Project page logo |
[server], [client] | project_path | Game Settings tab, or auto-stamped from Settings ▸ Editor ▸ Source Checkouts |
[world] | max_world_size | Project tab of the settings dialog |
[map_defaults] | terrain_type, lighting_theme | Project tab of the settings dialog |
[export] | pack_only_used_models | Defaults to true; see Project structure |
[platform] | game_id | Generated at creation; re-stamped on cloud download |
With AI (MCP)#
update_game_config- edittitle,description,version,developer,websiteorstarting_mapingame_config.json; only the fields you pass change, anddryRunpreviews the diff.set_starting_map- set the starting map, validating that it exists and syncingproject.vastopia[game] starting_mapwithgame_config.json.get_project_config- read every section ofproject.vastopia.set_project_paths- change[paths]entries (maps_dir,data_dir,interface_dir,ui_dir) without touching the rest of the file.
