Game-Engine Scripting & Level-Description Languages Family Index


type: language-family-index family: game-engine-scripting languages_catalogued: 24 tags: [language-reference, family-index, game-engine-scripting, level-design, blueprint, unity, unreal, godot, source, usd]

Game-Engine Scripting & Level-Description — Family Index

Family overview

There are two utterly different question a “game language” can answer. The first is how does this character behave in this fight? — gameplay code, AI scripts, dialogue trees, ability rules — and that is the territory of game-scripting (Lua, UnrealScript, GDScript, Papyrus, Squirrel, AngelScript, QuakeC, etc.). The second is what does this level look like, what entities live in it, what types are those entities, and how do designers wire them together? That is engine-side description: brush-based map files, prefab/scene serialisation formats, entity-definition languages used by level editors, visual node-graph scripting that compiles to engine bytecode, and asset/material graph DSLs. This index is the catalogue of that second class.

The lineage of the brush-based plain-text map file runs through every major Western FPS engine for thirty years. Quake’s .map (1996) — convex brushes defined by the planes that bound them, plus key/value-pair entity blocks — was the template; everything from Quake III’s .map, Half-Life’s .rmf/.bsp entity strings, Source’s .vmf (Valve Map File, 2004), and idTech 4’s .map is recognisably the same format with elaborations. Source 2’s Hammer (Half-Life: Alyx, 2020; Counter-Strike 2, 2023) finally broke the brush pattern with a mesh-centric workflow, but .vmap retained the same human-readable, KV-pair entity philosophy. Sitting alongside the map format is the FGD (Forge Game Data) file, a small entity-definition DSL that tells Hammer “an npc_zombie has these properties of these types”; FGD is what lets one editor support every Source-engine game by just swapping the FGD.

Unity, Unreal, and Godot took different paths. Unity ships scenes and prefabs as YAML-serialised asset files (one document per object, GUID references between them) — version-control-friendly by design, with the explicit goal that two designers can merge changes to a scene in git. The companion concept is the ScriptableObject, a deliberate data-as-code pattern: a designer defines a WeaponConfig C# class, the engine serialises instances of it as authored assets, and gameplay code reads those assets at runtime. Many shipping Unity games are 60–80% data in ScriptableObjects with thin C# orchestration on top. Unreal descends from a different lineage: .t3d text scene format from UE1, evolving into .uasset/.umap binary packages, with DataTable as the structured tabular-data primitive and Blueprint Visual Scripting (introduced in UE4, 2014) as the dominant “designer-authorable code” surface. Blueprints compile to a stack-based bytecode (UnrealScript VM lineage) and live alongside C++ — most shipping Unreal games use both. Godot uses .tscn and .tres (text scene / text resource), simple human-readable INI-flavoured formats; its VisualScript was deprecated in Godot 4.0 (announced August 2022, removed from core), an instructive cautionary tale about visual scripting at scale.

Cross-engine, USD (Universal Scene Description, Pixar, open-sourced 2016) is the rising lingua franca for asset and scene description outside the games-engine sandboxes. The Alliance for OpenUSD (Pixar + Adobe + Apple + Autodesk + NVIDIA, founded August 2023) standardises it; NVIDIA’s Omniverse uses it as its foundational layer; Unreal supports .usd/.usda/.usdc/.usdz import (still officially “experimental” through UE 5.6 in 2026); Unity has both first-party and Omniverse-Connector USD packages. Materials, shader graphs, and the visual scripting layers (Unreal Material Editor, Unity Shader Graph, Godot VisualShader) are also part of this family — they are textual-DSL-replacement node graphs that compile to GPU shader code, and they share the same design tensions as Blueprint: graph readability vs. textual maintainability, version-control friendliness vs. visual authoring.

In our deep library

These engine-side description formats and node graphs do not have standalone deep-library notes — they exist inside their host engines and are documented per-engine. Cross-reference adjacencies:

  • game-scriptingthe complementary family. Gameplay scripting languages (UnrealScript, Wren, AngelScript, Squirrel, Pawn, GDScript, Papyrus, QuakeC, Lua-as-game-script, MoonScript, Ren’Py, Lingo) live there; this index covers everything around them.
  • visual-dataflow — Houdini VEX, TouchDesigner, vvvv, and the broader node-graph-programming heritage. Blueprint and Shader Graph share lineage with this family.
  • config-and-dsl — Unity scene YAML, Godot .tscn, .vmf, FGD all live in the broader “structured-config / declarative-data” DSL space.
  • gpu-and-shaders — Material Editor, Shader Graph, VisualShader all compile to HLSL/GLSL/SPIR-V; they are visual frontends to that family.
  • lua — Source 2 VScript embeds Lua (Half-Life: Alyx); many engines pair a description format here with Lua over there.
  • python — USD’s primary SDK is C++ + Python (pxr.Usd); Houdini, Maya, Blender all script USD via Python.
  • notation-spec — formats like USD that describe rather than execute are notation-adjacent.

Tier 3 family table

Format / LanguageFirst appearedOriginEngineTypeStatus (2026)URL
Quake .map1996id Software (John Carmack, John Cash)Quake / id Tech 1–4 and every descendant editor (TrenchBroom, J.A.C.K., GtkRadiant, NetRadiant)Plain-text brush + entity level formatFoundational; still readable by every modern Quake-lineage tool; TrenchBroom 2.x activehttps://quakewiki.org/wiki/Quake_Map_Format
Doom WAD lump format1993id SoftwareDoom / Doom II / Heretic / Hexen / GZDoom / dsda-doomBinary container of named “lumps” (THINGS, LINEDEFS, SIDEDEFS, VERTEXES, SECTORS, etc.)Active in source ports; GZDoom is the dominant modern runtime; UDMF (Universal Doom Map Format, 2008) is the textual-successor lumphttps://doomwiki.org/wiki/WAD
Build Engine MAP1995Ken SilvermanBuild (Duke Nukem 3D, Blood, Shadow Warrior, Ion Fury, Wrath: Aeon of Ruin)Binary sector-portal-based level format (not BSP)Active in source ports (EDuke32, Raze, NBlood); Ion Fury (2019) and Phantom Fury (2024) ship Build mapshttps://moddingwiki.shikadi.net/wiki/MAP_Format_(Build)
GoldSrc .rmf / .map + halflife.fgd1998Valve (Worldcraft / Hammer 3.x)GoldSrc (Half-Life, Counter-Strike 1.6, TFC, DoD)Text + binary level formats; FGD entity definitionsLegacy-active; modding still occurs (Black Mesa, Sven Co-op)https://twhl.info/wiki/page/halflife.fgd
Source .vmf (Valve Map File)2004Valve (Hammer 4)Source (HL2, Portal, L4D, TF2, CS:GO, Garry’s Mod)Plain-text KV-pair level format with brush solids and entity blocksActive; Hammer++ (community, 2021+) is the de facto editor for Source 1 mapping in 2026https://developer.valvesoftware.com/wiki/VMF_(Valve_Map_Format)
Source 2 .vmap2015 (Dota 2 Reborn) / 2020 (Alyx public)ValveSource 2 (Dota 2, Half-Life: Alyx, Counter-Strike 2, Deadlock)Binary level format with mesh-centric workflow; replaces brush modelActive; Counter-Strike 2 launched September 2023, Deadlock playtest ongoing through 2026https://developer.valvesoftware.com/wiki/Source_2
Source FGD (Forge Game Data)~1996 (WC) / 2004 (Source)ValveGoldSrc / Source / Source 2Entity-definition language for Hammer; declares entity classes, key/value types, helpers, and visual hintsActive; per-game FGD shipped with each title (e.g. halflife2.fgd, csgo.fgd, hlvr.fgd, cs2.fgd)https://developer.valvesoftware.com/wiki/FGD
idTech 4 .map2004 (Doom 3)id SoftwareidTech 4 (Doom 3, Quake 4, Prey, Brink)Plain-text brush + patch + entity format; superset of Quake .map with curved patch surfacesLegacy-active in idTech 4 modding (Dhewm3); idTech 5+ moved to MegaTexture asset workflow without a public map formathttps://modwiki.dhewm3.org/MAP_(file_format)
Quake III BSP entity strings1999id SoftwareidTech 3 (Quake III Arena, RTCW, Wolfenstein: ET, Soldier of Fortune II, Jedi Academy)Embedded text entity-string lump inside compiled BSPActive in modding (ioquake3, OpenJK, ET: Legacy)https://www.mralligator.com/q3/
Unreal .t3d (Text 3D)1998Epic GamesUnreal Engine 1–3 / UDKTextual scene/map export format (clipboard format in modern UE)Active as clipboard/copy-paste serialisation; replaced as on-disk format by .umap (binary)https://docs.unrealengine.com/udk/Three/UnrealScriptT3D.html
Unreal .uasset / .umap2014 (UE4)Epic GamesUnreal Engine 4 / 5 / 5.6 (2026)Binary asset/level package format with editor-only metadataActive; UE 5.6 shipped 2025; UE 5.7 in 2026; UE6 (UE5+UEFN unification) targeted 2027–2028https://dev.epicgames.com/documentation/en-us/unreal-engine/unreal-engine-5-6-release-notes
Unreal Blueprint Visual Scripting2014 (UE4 launch)Epic Games (Tim Sweeney, Kismet → Blueprint)Unreal Engine 4 / 5Visual node graph compiled to stack-based UnrealScript-VM bytecode via FKismetCompilerVMBackend; UFunction holds bytecode in Script arrayDominant; co-equal with C++ in shipped UE titles; nativised-to-C++ option deprecated in UE5; Verse coming in UE6https://dev.epicgames.com/documentation/en-us/unreal-engine/blueprints-visual-scripting-in-unreal-engine
Unreal DataTable / CurveTable~2014 (UE4)Epic GamesUnreal Engine 4 / 5CSV/JSON-backed UStruct row tables; designer-authored gameplay dataActive; the canonical “designer data” surface in UE alongside Blueprintshttps://dev.epicgames.com/documentation/en-us/unreal-engine/data-driven-gameplay-elements-in-unreal-engine
Unreal Material Editor (graph)2008 (UE3) / 2014 (UE4 modern form)Epic GamesUnreal EngineVisual node graph compiled to HLSL/Metal/Vulkan shaders per-platformActive; primary material authoring path in UE5/5.6https://dev.epicgames.com/documentation/en-us/unreal-engine/unreal-engine-material-editor-reference
Unity scene .unity / prefab .prefab (YAML)2010 (Unity 3) — text serialisation default ~2014Unity TechnologiesUnity 4 / 5 / 2017–2022 / 6 (2024+)YAML-serialised GameObject + Component graph; one document per object; GUID referencesActive; Unity 6.x (Unity 6000.x) ships 2024–2026 with this format unchanged in concepthttps://docs.unity3d.com/6000.6/Documentation/Manual/yaml-prefab-serialization.html
Unity ScriptableObject pattern2012 (Unity 4)Unity TechnologiesUnity 4 / 5 / 2017+ / 6Data-as-code DSL: C# class deriving from ScriptableObject, instances serialised as .asset files, edited in InspectorIdiomatic; standard pattern for designer-authored config in modern Unityhttps://docs.unity3d.com/6000.1/Documentation/Manual/class-ScriptableObject.html
Unity Visual Scripting (formerly Bolt)2015 (Bolt) / 2021 (acquired, renamed Visual Scripting)Ludiq → Unity TechnologiesUnity 2021+ / 6Node-graph visual scripting; Flow Graph (event-driven) and State Graph variantsActive but lower velocity; less central to Unity’s strategy than Blueprint is to Unrealhttps://docs.unity3d.com/Packages/com.unity.visualscripting@1.9/manual/index.html
Unity Shader Graph2018 (preview, SRP)Unity TechnologiesUnity 2018+ / 6 (URP, HDRP)Visual shader-graph compiling to HLSL via SRP shader systemActive; required for SRP-based pipelines (URP, HDRP) in Unity 6https://docs.unity3d.com/Packages/com.unity.shadergraph@17.0/manual/index.html
Godot .tscn / .tres (text scene/resource)2014 (Godot 1.0)Juan Linietsky, Ariel Manzur / Godot EngineGodot 1 / 2 / 3 / 4 / 4.x (2026)Plain-text INI-flavoured scene tree and resource serialisation; sibling binary .scn/.resActive; flagship format of a rapidly growing open-source engine; Godot 4.4 stable 2025, 4.5 in 2026https://docs.godotengine.org/en/stable/engine_details/file_formats/tscn.html
Godot VisualScript2018 (Godot 3.0)Godot EngineGodot 3.x onlyNode-graph visual scriptingRemoved from core in Godot 4.0 (announcement August 2022); maintained as optional out-of-tree module (godot-visual-script repo) for those who compile it inhttps://godotengine.org/article/godot-4-will-discontinue-visual-scripting/
Godot VisualShader2018 (Godot 3.0)Godot EngineGodot 3 / 4 / 4.xVisual shader-graph compiling to GLSL/Vulkan SPIR-VActive through Godot 4.x; survived the VisualScript culling because shader graphs proved their worthhttps://docs.godotengine.org/en/stable/tutorials/shaders/visual_shaders.html
Source 2 VScript (Lua / JS / TypeScript / Pulse)2020 (Alyx, Lua) / 2023 (CS2, JS)ValveSource 2 (HL: Alyx Lua VScript; CS2 cs_script JavaScript + VScript2 TypeScript + Pulse visual scripting)Multi-language abstraction layer over Source 2; per-game scripting picks the languageActive; CS2’s Pulse is Valve’s first first-party visual-scripting solutionhttps://developer.valvesoftware.com/wiki/Counter-Strike_2_Workshop_Tools/Scripting
CryEngine Flow Graph~2004 (Far Cry)CrytekCryEngine 2 / 3 / VNode-graph level-scriptingDeprecated in favour of Schematyc; Crytek’s stated direction is “users will gravitate towards Schematyc by default and Flow Graph will continue to be deprecated”https://docs.cryengine.com/display/CEMANUAL/Scripting
CryEngine Schematyc2017 (CryEngine V)CrytekCryEngine V (5.x / 5.7 LTS)Component-system-aware node-graph scripting; transition graphs for state machinesActive; CryEngine 5.7 LTS (2022) is the current support line through 2026https://docs.cryengine.com/display/CEMANUAL/Schematyc
Bethesda Creation Engine ESM/ESP/ESL + Creation Kit2002 (Morrowind ESM/ESP) — Creation Engine since 2011 (Skyrim)Bethesda Game StudiosCreation Engine (Skyrim, Fallout 4, Fallout 76, Starfield, ES VI in dev)Binary record-based plugin/master file format; Creation Kit GUI authors the data; Papyrus scripts attach to formsActive; Starfield (2023) and ongoing Skyrim/Fallout 4 modding ecosystems; Papyrus is in game-scriptinghttps://en.uesp.net/wiki/Skyrim_Mod:File_Format
RPG Maker MZ event editor2020 (MZ)Kadokawa / Gotcha Gotcha GamesRPG Maker MZVisual event-driven scripting via “Event Commands” stored in JSON map filesActive; RPG Maker MZ is the current entry; community plugins extend it heavilyhttps://store.steampowered.com/app/1096900/RPG_Maker_MZ/
GameMaker DnD (Drag-and-Drop)1999 (Game Maker 1) — modern GML/DnD parity 2017+Mark Overmars / YoYo GamesGameMaker (current: GameMaker LTS, GameMaker 2024.x)Visual block-based scripting; compiles 1:1 to GML (GameMaker Language)Active; YoYo Games rebranded to GameMaker Inc. 2022, post-Opera spinouthttps://manual.gamemaker.io/lts/en/Drag_And_Drop/Drag_And_Drop.htm
Construct 3 event sheets2017 (C3, browser) — lineage from Construct Classic 2007ScirraConstruct 3 (browser-based)Tabular condition-action “event sheet” scripting; not a graph but a domain-specific spreadsheet-like DSLActive; major web-game authoring platformhttps://www.construct.net/en/make-games/manuals/construct-3/project-primitives/events
Roblox Place file (.rbxl / .rbxlx)2006 (Roblox Studio)Roblox CorporationRoblox Studio / Roblox clientBinary .rbxl / XML .rbxlx place + model serialisation; Luau scripting attaches as Script instancesActive; massive (175M+ DAU range as of 2024–2025); Luau (Roblox Lua fork) is the script languagehttps://create.roblox.com/docs/projects/files
Houdini VEX (engine-graph-adjacent)2003 (Houdini 6.5)SideFXHoudini, Houdini Engine (Unreal/Unity plugin)C-like procedural-shader/SOP language inside a node graph; cross-classified with visual-dataflowActive; Houdini 20.5 (2024) / 20.6 (2025); Houdini Engine for Unreal/Unity actively used in AAAhttps://www.sidefx.com/docs/houdini/vex/
USD / OpenUSD (Universal Scene Description)2012 internal Pixar / 2016 open-sourcePixar Animation Studios → Alliance for OpenUSD (2023)Cross-engine: Maya, Houdini, Blender, Unreal, Unity, NVIDIA OmniverseLayered, composable scene-description format (.usd binary, .usda ASCII, .usdc crate, .usdz zip-archive) with a Python/C++ SDKVery active (2026); AOUSD founded August 2023 (Pixar + Adobe + Apple + Autodesk + NVIDIA); UE USD importer still officially “experimental” through 5.6https://openusd.org/

Notable threads

  • The Quake .map format’s outsized influence — the “convex-brush + KV-entities” pattern survived 30 years. Every brush-based engine for a quarter-century descends from Carmack/Cash’s 1996 design: a level is a list of { "classname" "..." ... } entity blocks plus a list of brushes, each brush a list of planes that bound a convex solid. Quake III’s .map, GoldSrc’s .rmf/.map, idTech 4’s .map, and Source’s .vmf are recognisably the same format with elaborations (curved patches, displacements, instances). Source 2’s .vmap (Half-Life: Alyx, 2020; Counter-Strike 2, 2023) is the first major break — mesh-centric, no brush solids — but even there the entity-block half of the format is recognisably Quake-lineage. The key insight that survived was “keep the level format human-readable so modders can hand-edit it”, an ethos modern AAA largely abandoned in favour of binary .uasset/.umap (Unreal) and binary .scn (Godot, optional).

  • Why Source’s .vmf is plain text and Unity’s scene format is YAML — version control, not just legibility. Both Valve (Hammer, 2004) and Unity (text-serialisation flag, ~2014) decided that level/scene data must be diff-friendly because teams of designers merge the same scene in git. Unreal’s binary .uasset/.umap represents the opposite philosophy (“the editor owns the asset, the source-control system locks it”) and Unreal projects routinely use Perforce instead of git for exactly this reason. Godot’s .tscn / .tres follow the Unity/Valve philosophy. The trade-off is real: text formats are slower to load and bigger on disk, but they don’t require lock-based source control, which is a huge productivity win for distributed teams.

  • Blueprint vs. C++ in Unreal — and the Verse/UE6 endgame. The perennial UE community debate (“should I learn Blueprint or C++?”) has a boring real answer: shipped UE games use both, with C++ for systems and performance-critical paths and Blueprint for designer-authorable gameplay logic. Blueprint compiles to a stack-based bytecode (UnrealScript-VM lineage from UE3) via FKismetCompilerVMBackend, stored in UFunction::Script. UE5 deprecated the “nativise to C++” feature that briefly existed in UE4 because it created more bugs than it solved; the runtime VM is now considered fast enough. Looking forward, Verse (Epic’s new functional-logic language, first shipped in UEFN March 2023) is positioned as the unified scripting language for Unreal Engine 6, which Tim Sweeney describes as “UE5 + UEFN + Verse” and targets 2027–2028; UE 5.7 (2026) is the last UE5-line release before that pivot.

  • Unity’s ScriptableObject is a data-as-code DSL hiding in plain sight. Most discussions treat ScriptableObject as just a “serialised C# class,” but it’s better understood as Unity’s deliberate decision to make designer-authorable, type-safe data a first-class concept. A studio that uses ScriptableObjects well will define a WeaponConfig, EnemyArchetype, DialogueLine, LootTable — each a C# type — and ship dozens or hundreds of instances as .asset files that designers create and edit in the Inspector. The runtime is then a thin C# orchestrator; the content is in the ScriptableObjects. This is a DSL pattern: the type definition is the grammar, and the asset files are programs in that grammar. It’s why ScriptableObject deserves a place in this index alongside .vmf and .tscn even though it’s “just” a C# class.

  • USD as the cross-engine convergence point — and why games-engines were late to it. Pixar open-sourced USD in 2016, but games-engine support stayed lukewarm for years because USD’s rich layering / variants / composition model is overkill for a typical level (and undercut by every engine’s own native scene format). The 2023 founding of the Alliance for OpenUSD (Pixar, Adobe, Apple, Autodesk, NVIDIA — and indirectly via Omniverse, much of the broader DCC ecosystem) finally pushed it past games-engine resistance. As of 2026, Unreal supports .usd/.usda/.usdc/.usdz import (still officially “experimental” through 5.6), Unity has both first-party and Omniverse-Connector USD packages, and the practical use case is “DCC-tool-to-engine asset interchange” rather than “USD as the runtime scene format.” USD’s natural home is digital twins, simulation, and previz pipelines more than gameplay — but the convergence is real and growing.

  • FGD (Forge Game Data) is a fascinating self-describing entity-type DSL. Hammer doesn’t know what an npc_zombie is; it learns from the FGD file shipped with the game. The FGD declares: @PointClass base(BaseNPC) studio("models/zombie.mdl") = npc_zombie : "An ordinary zombie." [ spawnflags(flags) : "spawnflags" : 0 = [ ... ] additionalequipment(string) : "additional equipment" : "" ... ]. The format is small, declarative, and powerful enough that one editor (Hammer) supports every Source-engine game (HL2, Portal, L4D, TF2, CS:GO, Half-Life: Alyx, Counter-Strike 2) just by swapping the FGD. This is the same insight that made Bethesda’s Creation Kit moddable — the editor reads the data definitions from the game, not the game from the editor.

  • The Godot VisualScript deprecation (announcement Aug 2022, removed in Godot 4.0) — a cautionary tale for visual scripting at scale. Visual scripting works well for small, local logic — UI animations, simple triggers, dialogue branches. It scales badly: large graphs become unreadable noodle bowls; refactoring is brutal; version control is pathological. Godot’s team concluded after years of effort that VisualScript “never gained traction and the path to improve it was never clear” and removed it from core in 4.0; it survives only as an out-of-tree module. The contrast with Blueprint is instructive: Blueprint succeeds because (a) Unreal invested vastly more engineering into editor UX, debugging, and refactoring tools, (b) Blueprint integrates tightly with UE’s reflection system and component model, and (c) it’s the primary designer surface, not a secondary one. Bolt/Unity Visual Scripting sits between these two extremes — alive but never central. The lesson: visual scripting is engine-strategic; you either commit to it as the dominant authoring path (Unreal) or it gets killed (Godot) or it withers (Bolt).

  • The Source 2 scripting menagerie shows Valve still hasn’t picked a side. Half-Life: Alyx (2020) used Lua VScript. Counter-Strike 2 (2023) ships three scripting systems: cs_script (JavaScript), VScript2 (TypeScript), and Pulse (Valve’s first first-party visual scripting solution). Source 2’s “vscript” is an abstraction layer that can host Lua, Squirrel, GameMonkey, Python, JS, or TS depending on the game. This is not indecision so much as Valve’s traditional “pick the right tool for this game” stance, but it does mean modders moving from Alyx to CS2 have to relearn most of the scripting surface.

Citations