Game Configuration
You can configure Eldiron by selecting the Game -> Settings item in the project tree.
Other game-level TOML documents are edited separately:
- Game -> Authoring: Authoring Configuration
- Game -> World / Visual Scripting: global graph-based runtime logic
- Game -> World / Eldrin Scripting: global text-based runtime logic
- Game -> Rules: Rules
- Game -> Locales: Localization
- Game -> Audio FX: Audio
For party-bound UI such as portraits, equipped hand slots, or member-specific inventory widgets, see Screen Widgets and the character Attributes.
Game Configuration
Game configuration options are located in the [game] section.
[game]
target_fps = 30 # The target frames per second for the game.
game_tick_ms = 250 # The milliseconds per game tick.
simulation_mode = "realtime" # Gameplay pacing: "realtime", "turn_based", or "hybrid".
turn_timeout_ms = 600 # In hybrid mode, advance one gameplay step after this idle timeout.
ticks_per_minute = 4 # The amount of ticks per in-game minute.
movement_units_per_sec = 4 # Base movement speed in world units per second.
turn_speed_deg_per_sec = 120 # First-person turn speed in degrees per second.
firstp_eye_level = 1.7 # First-person camera eye height above the entity base Y.
entity_block_mode = "always" # The block mode, "always" or "never".
collision_mode = "tile" # Collision/path mode: "tile" or "mesh".
auto_create_player = true # Whether to auto-create a player entity.
start_region = "" # The name of the region to start the game in.
start_screen = "" # The name of the screen to show at startup.
click_intents_2d = false # Target 2D intents with mouse clicks while keeping WASD movement.
auto_walk_2d = false # In walk mode, clicking terrain in 2D makes the player path-walk there.
# Base currency configuration
base_currency_name = "Gold" # Display name of the primary in-game currency.
base_currency_symbol = "G" # Symbol used to represent the currency (e.g. "G" for Gold).
locale = "en" # Active locale used for localized strings and rules-based messages.
# The supported gear slots
gear_slots = ["legs", "head", "torso"]
# The supported weapon slots
weapon_slots = ["main_hand", "off_hand"]
# The attribute which handles health & death
health = "HP"
# The attribute which stores the current level
level = "LEVEL"
# The attribute which stores accumulated experience
experience = "EXP"
# Enables generated marker ramp shading for avatars.
avatar_shading = true
# Enables generated marker ramp shading for skin markers.
avatar_skin_auto_shading = false
Option Descriptions
-
target_fps- Defines the refresh rate of the game.
- A higher FPS results in smoother gameplay, but increases CPU usage.
-
game_tick_ms- Sets the milliseconds per game tick, which is Eldiron’s internal clock.
- Events, actions, and player interactions are processed each tick.
- Default:
250 ms, meaning 4 ticks per second (suitable for most games). - In
turn_basedandhybridsimulation modes, this also defines the size of one discrete gameplay step.
-
simulation_mode- Controls how gameplay simulation advances.
"realtime"→ Current Eldiron behavior. Gameplay advances continuously with wall-clock time."turn_based"→ Gameplay advances only when the player commits an action."hybrid"→ Gameplay advances when the player commits an action, or automatically afterturn_timeout_msof inactivity.- Rendering and UI stay realtime in all modes; this setting gates gameplay progression, not screen refresh.
- Default:
"realtime".
-
turn_timeout_ms- Idle timeout used by
simulation_mode = "hybrid". - When the player does nothing for this long, Eldiron advances one discrete gameplay step automatically.
- Ignored in
realtimeandturn_based. - Default:
600.
- Idle timeout used by
-
ticks_per_minute- Defines the number of ticks per in-game minute.
- Default:
4, meaning 1 in-game minute = 1 real-time second. - To sync in-game time with real time, set this value to
60 * 4 = 240.
-
movement_units_per_sec- Defines the base movement speed in world units per second.
- Other movement actions scale relative to this value.
- Default:
4.
-
turn_speed_deg_per_sec- Defines first-person turning speed in degrees per second.
- Helps tune camera yaw feel without changing movement speed.
- Default:
120.
-
firstp_eye_level- Defines first-person camera eye height above the entity's base Y position.
- Applied on the client in first-person mode only.
- Default:
1.7.
-
entity_block_mode- Controls whether entities (i.e., characters) can move through each other.
"always"→ Entities always block each other."never"→ Entities never block each other.
-
collision_mode- Selects which collision/pathfinding mode movement actions use (
move,goto,close_in). "tile"→ Use tile/linedef-based collision and pathing."mesh"→ Use 3D mesh/chunk-based collision and pathing.- Default:
"tile". - Recommendation: use
"tile"for 2D games and"mesh"for 3D games.
- Selects which collision/pathfinding mode movement actions use (
-
auto_create_playerIftrue, Eldiron will automatically create a player instance in the map if one is defined. Useful for quickly testing and building games without needing to implement a full character creation process. Iffalse, the player must be created manually—typically using a screen and user input flow. -
start_regionThe name of the region the game will load when it starts. Ifstart_screenis not set, this first region will be shown by default. -
start_screenThe name of the screen to load on startup. If empty, Eldiron will display a black screen. -
click_intents_2d- Enables click-targeted intents in
2dand2d_gridinput modes. - When enabled, selecting an intent changes mouse interaction, but movement keys still walk as usual.
- Click a target to apply the current intent; the selected intent stays active until you switch it.
- Intent hover / clicked cursors also apply in 2D while this mode is active.
- Default:
false.
- Enables click-targeted intents in
-
auto_walk_2d- Enables terrain click-to-walk for
2dand2d_gridinput modes. - Only applies when no intent is active, so walk mode stays separate from click-targeted intents.
- Uses the normal runtime
Gotopathing action. - Default:
false.
- Enables terrain click-to-walk for
-
gear_slotsThe valid gear slots of items. Items can define it's gear slot by settingslotin the data tool. -
weapon_slotsThe valid weapon slots of items. Items can define it's weapon slot by settingslotin the data tool.
health
The name of the health attribute for characters. When it becomes smaller or equal to zero, the character is considered dead and its mode attribute is set to "dead" automatically by the server damage system. If you want to use another attribute name, change the default "HP" value to something else.
level
The name of the character attribute used as the current level for Rules progression formulas. Default: "LEVEL".
experience
The name of the character attribute used to store accumulated experience. Default: "EXP".
avatar_shading
- Enables generated runtime marker-ramp shading for avatars.
- Default:
true. - Set to
falseto keep avatar marker colors flat (no auto ramp shading).
avatar_skin_auto_shading
- Enables generated runtime marker-ramp shading for skin markers.
- Default:
false. - Useful when skin already contains artist-authored light/dark tones and should stay flat.
base_currency_name
- The display name of your game's primary currency (e.g.
"Gold","Credits"). - Used in the UI, item pricing, and trade.
base_currency_symbol
- The short symbol shown with currency values (e.g.
"G"). - Appears alongside numbers (e.g.
50 G,100 💎).
locale
- Selects the active locale table, for example
"en"or"de". - Use
"auto"to follow the system locale. - The actual translation tables are edited separately in Game / Locales.
Say Presentation
Speech bubble styling belongs to game widgets, because it is presentation-specific.
Configure it with a [say] section in the game widget data. See
Game Widgets.
Using In-Game Time for Events
Some commands use in-game minutes for timing.
For example, the notify_in command schedules events after a set number of in-game minutes:
notify_in(2, "close_door")
With the default settings, this means the event will trigger after 2 real-time seconds.
Viewport Configuration
Viewport configuration defines the resolution and grid used when the game starts.
[viewport]
width = 1280 # Width of the game viewport in pixels.
height = 720 # Height of the game viewport in pixels.
window_scale = 1.0 # Multiplies startup window size (e.g. 2.0 = 2x bigger window).
grid_size = 32 # Size of one grid tile in pixels.
upscale = "aspect" # 'aspect' upscales the game output to the screen dimensions. 'none' otherwise.
background_color_2d = "#000000" # 2D viewport background color.
visibility_range_2d = 0 # 2D visible range around the player in tiles. 0 disables the limit.
visibility_alpha_2d = 0.82 # LOS mask blend toward the background color (0..1).
screen_background = "#000000" # Screen/widget background color.
cursor_id = "..." # The tile id of the default mouse cursor.
target_rect_color = "" # Optional target rectangle color for the current leader target in 2D.
Option Descriptions
-
width/heightDefines the starting resolution of the game window or screen. You can adjust these values to target common resolutions like 1280×720 or 1920×1080. -
window_scaleMultiplies the startup window size while keeping the game viewport resolution unchanged. For example, withwidth = 1280,height = 720, andwindow_scale = 2.0, the window opens at 2560×1440. Default is1.0. -
grid_sizeSets the pixel size of a single tile in the world/grid. This affects rendering and snapping behavior in tools and the viewport layout. -
upscaleIf set to "aspect" upscales the game output to the screen / window resolution keeping the viewport aspect-ratio intact. "none" (the default) does not upscale and centers the output. -
background_color_2dBackground color used for the 2D game viewport and the editor's 2D game preview. Accepts#RRGGBBor#RRGGBBAA. -
visibility_range_2dLimits how many tiles are visible around the player in 2D. The mask uses the 2D background color outside the visible range. Use0or a negative value to disable the limit. -
visibility_alpha_2dControls how strongly hidden 2D tiles blend towardbackground_color_2d.0keeps the original color,1fully hides the tile. -
screen_backgroundBackground color used when rendering screens and screen widgets. If omitted, it falls back tobackground_color_2d. -
cursor_idThe tile id for the default mouse cursor. -
target_rect_colorOptional rectangle color for drawing the current leader target in 2D game widgets. Usestarget/attack_targetfrom the current leader entity. Leave empty to disable.
Render Configuration
Render configuration options are located in the [render] section.
[render]
# Static sky color (used when simulation is disabled).
sky_color = "#87CEEB"
# Static sun color (used when simulation is disabled).
sun_color = "#FFFACD"
# Sun intensity/brightness multiplier.
sun_intensity = 1.0
# Static sun direction as [x, y, z] (used when simulation is disabled).
sun_direction = [-0.5, -1.0, -0.3]
# Enable/disable sun lighting.
sun_enabled = true
# Ambient light color.
ambient_color = "#999999"
# Ambient light strength (0.0 - 1.0).
ambient_strength = 0.3
# Fog color.
fog_color = "#808080"
# Fog density (0.0 = no fog, higher values = denser fog).
fog_density = 0.0
# Shadow toggle.
shadow_enabled = true
# Shadow strength (default 0.8).
shadow_strength = 0.8
# Shadow-map resolution.
shadow_resolution = 1024
# Shadow depth bias.
shadow_bias = 0.0015
# Fade mode for alpha/visibility transitions: "ordered_dither" or "uniform".
fade_mode = "ordered_dither"
# Lighting model: "lambert", "cook_torrance", or "pbr".
lighting_model = "cook_torrance"
# Renderer style: "clean" keeps normal lighting, "retro" softens shine,
# "grimy" adds stronger worn surface variation.
style = "clean"
# Avatar readability boost toggle for Raster 3D avatars.
avatar_highlight_enabled = true
# Avatar readability lift multiplier (1.0 = unchanged).
avatar_highlight_lift = 1.12
# Avatar ambient fill contribution.
avatar_highlight_fill = 0.20
# Avatar rim-light contribution.
avatar_highlight_rim = 0.18
# Bump mapping strength (0.0 = off, 1.0 = full).
bump_strength = 1.0
# MSAA sample count for raster 3D (0 = off, 4 = on).
msaa_samples = 4
# First-person blur transition start distance.
firstp_blur_near = 3.0
# First-person blur transition end distance.
firstp_blur_far = 8.0
Option Descriptions
All [render] options apply only to the 3D renderer (they do not affect the 2D tile/sprite renderer).
sky_color— Static sky RGB used when sky simulation is off.sun_color— Static sun RGB tint used when sun simulation is off.sun_intensity— Multiplier for sun brightness. Increase for harsher lighting; reduce for softer daylight.sun_direction— Sun vector[x, y, z](points from light to scene). Adjust to change time-of-day lighting angle.sun_enabled— Toggles the directional sun light. Setfalsefor indoor or emissive-only scenes.ambient_color— Uniform ambient RGB independent of sky. Use to fill shadows with a specific hue.ambient_strength— Scalar (0–1) for ambient_color energy. Higher values lighten occluded areas.fog_color— Fog RGB tint applied with distance-based fog.fog_density— Strength of exponential-squared fog.0disables; higher values increase haze with distance.shadow_enabled— Enables or disables sun shadow-map rendering.shadow_strength— Shadow contribution amount (0–1). Lower values make shadows softer/fainter.shadow_resolution— Shadow-map size in pixels. Higher values sharpen shadows but increase GPU cost.shadow_bias— Depth bias used to reduce shadow acne/peter-panning.fade_mode— Visibility fade style for hidden/fading geometry (ordered_ditheroruniform).lighting_model— Surface lighting model (lambert,cook_torrance,pbr).style— Renderer style preset (clean,retro,grimy).retroandgrimyreduce shiny PBR response and add coarse organic surface variation.avatar_highlight_enabled— Enables avatar readability boost in Raster 3D.avatar_highlight_lift— Multiplier for avatar lit color (1.0= unchanged).avatar_highlight_fill— Extra ambient/albedo fill added to avatars.avatar_highlight_rim— Rim-light intensity for avatar silhouettes at grazing view angles.bump_strength— Scales normal-map/bump detail (0–1). Lower to flatten surfaces;1.0keeps full effect.msaa_samples— Raster 3D multisampling level (0= off,4= on) for edge anti-aliasing.firstp_blur_near— Distance where first-person texture blur transition starts.firstp_blur_far— Distance where first-person texture blur transition is fully applied.
Post Configuration
Post configuration options are located in the [post] section.
Post-processing applies to both Raster 2D and Raster 3D render paths, so the same authored color treatment can be shared between 2D and 3D views.
[post]
# Enable/disable final post pass.
enabled = true
# Tone mapper: "none", "reinhard", "aces".
tone_mapper = "reinhard"
# Exposure multiplier before tone mapping.
exposure = 1.0
# Post saturation (1.0 = unchanged, 0.0 = grayscale).
saturation = 1.0
# Post luminance/brightness multiplier.
luminance = 1.0
# Output gamma.
gamma = 2.2
# Stylized grain/noise amount (0 = off, 1 = strong).
grit = 0.0
# Stylized tonal banding amount (0 = off, 1 = strong).
posterize = 0.0
# Bias colors toward earthy retro tones (0 = off, 1 = strong).
palette_bias = 0.0
# Lift near-black areas after tone mapping (0 = off, 1 = strong).
shadow_lift = 0.0
# Soften harsh post contrast (0 = off, 1 = strong).
edge_soften = 0.0
Option Descriptions
enabled— Enables or disables the post-processing stage.tone_mapper— Tone mapping operator used before gamma (none,reinhard,aces).exposure— Brightness multiplier applied before tone mapping.saturation— Color saturation multiplier;0is grayscale,1keeps original saturation.luminance— Overall post brightness multiplier.gamma— Final output gamma value.grit— Adds subtle screen-space grain/noise for a dirtier retro image.posterize— Adds controlled tonal banding without changing geometry lighting.palette_bias— Pushes the final image toward warmer, earthier RPG colors.shadow_lift— Lifts near-black areas after tone mapping to avoid black crush.edge_soften— Softens harsh post contrast. This is not a true blur pass.
Runtime Overrides
[render], [post], and [viewport] define the authored defaults of your project.
At runtime, scripts can override these values through world and region contexts:
world.render.*region.render.*world.post.*region.post.*
The final value is resolved in this order:
- project configuration default
- world script override
- region script override
This lets you keep stable defaults in TOML and then change mood, fog, palette remap, or post processing dynamically during play.
Palette Remap
The 2D palette remap lives under render.pal.*:
let world.render.pal.start = 0;
let world.render.pal.end = 9;
let world.render.pal.mode = "nearest";
let world.render.pal.blend = 1.0;
Supported fields:
render.pal.startrender.pal.endrender.pal.moderender.pal.blend
Supported modes:
"disabled""luma_ramp""nearest""dithered_ramp"
Render Overrides
Common runtime render overrides include:
let region.render.background_color_2d = "#272744";
let region.render.visibility_range_2d = 6.0;
let region.render.visibility_alpha_2d = 0.6;
let region.render.fog_color = "#20242c";
let region.render.fog_density = 5.0;
let world.render.sun_enabled = false;
Most scalar values from [render] are available at runtime, including:
background_color_2dvisibility_range_2dvisibility_alpha_2dsky_colorsun_colorsun_intensitysun_directionsun_enabledambient_colorambient_strengthfog_colorfog_densityshadow_enabledshadow_strengthshadow_resolutionshadow_biasfade_modelighting_modelstyleavatar_highlight_enabledavatar_highlight_liftavatar_highlight_fillavatar_highlight_rimavatar_shading_enabledavatar_skin_shading_enabledao_samplesao_radiusbump_strengthmsaa_samplesmax_transparency_bouncesmax_shadow_distancemax_sky_distancemax_shadow_stepsreflection_samplesfirstp_blur_nearfirstp_blur_farms_per_frame
Post Overrides
The main post controls are also available at runtime:
let world.post.enabled = true;
let world.post.tone_mapper = "aces";
let world.post.exposure = 0.9;
let world.post.saturation = 0.7;
let world.post.grit = 0.25;
Supported runtime post fields:
post.enabledpost.tone_mapperpost.exposurepost.gammapost.saturationpost.luminancepost.gritpost.posterizepost.palette_biaspost.shadow_liftpost.edge_soften
Simulation Configuration
Simulation configuration options are located in the [simulation] section.
[simulation]
# Enable procedural daylight simulation (overrides static sky_color, sun_color, sun_direction)
enabled = true
# Sky color at night (dark)
night_sky_color = "#050510"
# Sky color at sunrise/sunset (morning)
morning_sky_color = "#FF9966"
# Sky color at midday
midday_sky_color = "#87CEEB"
# Sky color in the evening
evening_sky_color = "#FF8040"
# Sun/moon color at night (very dim)
night_sun_color = "#1A1A26"
# Sun color at sunrise/sunset (morning)
morning_sun_color = "#FFCC99"
# Sun color at midday
midday_sun_color = "#FFFFF2"
# Sun color in the evening
evening_sun_color = "#FFB380"
# Sunrise time in 24-hour format (e.g., 6.5 = 6:30 AM)
sunrise_time = 6.0
# Sunset time in 24-hour format (e.g., 18.5 = 6:30 PM)
sunset_time = 18.0
# Per-transition blend duration in in-game hours (0.5 = 30 minutes)
color_transition_duration_hours = 0.5
Option Descriptions
These simulation values drive the 3D AND 2D procedural sky/sun lighting.
enabled— Turns procedural daylight on. Whentrue, it overrides staticsky_color,sun_color, andsun_directionfrom[render].night_sky_color— Sky tint used from sunset to sunrise.morning_sky_color— Sky tint blended in during the sunrise transition.midday_sky_color— Sky tint applied around noon for clear daylight.evening_sky_color— Sky tint used during sunset.night_sun_color— Dim sun/moon color at night for subtle skylight.morning_sun_color— Sun tint during sunrise; often warmer/orange.midday_sun_color— Sun tint at noon; typically neutral/white.evening_sun_color— Sun tint during sunset; typically warm.sunrise_time— 24-hour decimal time when sunrise starts (e.g.,6.5= 06:30). Drives interpolation from night → morning.sunset_time— 24-hour decimal time when sunset starts (e.g.,18.5= 18:30). Drives interpolation from midday → evening → night.color_transition_duration_hours— Duration of each day/night color blend window in in-game hours. Example:0.5= 30 minutes,0.25= 15 minutes.