| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428 |
- # Decision Catalog - Composability knowledge for game architectural decisions
- # This provides RELATIONSHIPS and WORKFLOW LOGIC, not generic tech knowledge
- #
- # ⚠️ CRITICAL: All version/feature info MUST be verified via WebSearch during workflow
- # This file only provides: triggers, relationships (pairs_with), and opinionated stacks
- decision_categories:
- game_engine:
- triggers: ["engine", "framework", "game framework", "renderer", "runtime"]
- importance: "critical"
- affects: "all epics"
- options:
- unity:
- pairs_with: ["C#", "URP", "HDRP", "Unity Input System", "Addressables", "Unity Gaming Services"]
- unreal:
- pairs_with: ["C++", "Blueprints", "Nanite", "Lumen", "Enhanced Input", "Unreal Online Subsystem"]
- godot:
- pairs_with: ["GDScript", "C#", "GDExtension", "Godot Physics", "GodotSteam"]
- phaser:
- pairs_with: ["JavaScript", "TypeScript", "Matter.js", "Arcade Physics"]
- roblox:
- pairs_with:
- [
- "Luau",
- "DataStoreService",
- "MemoryStoreService",
- "RemoteEvents",
- "TweenService",
- "UserInputService",
- "ContextActionService",
- "Rojo",
- "Wally",
- ]
- bevy:
- pairs_with: ["Rust", "ECS", "wgpu"]
- monogame:
- pairs_with: ["C#", "FNA", "FMOD"]
- rendering_pipeline:
- triggers: ["graphics", "rendering", "shaders", "visual style", "art style", "2D", "3D", "pixel art"]
- importance: "critical"
- affects: "all visual epics"
- options:
- unity_urp:
- pairs_with: ["Unity", "Shader Graph", "2D Renderer", "mobile targets"]
- unity_hdrp:
- pairs_with: ["Unity", "Shader Graph", "ray tracing", "high-end PC/console"]
- unreal_nanite_lumen:
- pairs_with: ["Unreal", "virtual geometry", "global illumination", "high-end PC/console"]
- unreal_forward:
- pairs_with: ["Unreal", "mobile", "VR", "stylized rendering"]
- godot_vulkan:
- pairs_with: ["Godot", "Forward+", "mid-range hardware"]
- godot_compatibility:
- pairs_with: ["Godot", "OpenGL", "mobile", "web export"]
- custom_2d:
- pairs_with: ["Phaser", "SDL", "sprite batching", "pixel art"]
- roblox_rendering:
- pairs_with: ["Roblox", "fixed pipeline (platform-managed)", "SurfaceAppearance", "Atmosphere", "Lighting", "StreamingEnabled"]
- physics_system:
- triggers: ["physics", "collision", "rigid body", "character controller", "raycasting", "platformer movement"]
- importance: "high"
- affects: "gameplay and movement epics"
- options:
- engine_native:
- pairs_with: ["PhysX (Unity)", "Chaos (Unreal)", "Godot Physics"]
- jolt:
- pairs_with: ["Godot (Jolt plugin)", "custom engines"]
- box2d:
- pairs_with: ["2D games", "Godot", "Phaser (Matter.js alternative)"]
- custom_controller:
- pairs_with: ["platformers", "raycasting", "kinematic bodies"]
- deterministic:
- pairs_with: ["rollback netcode", "fixed-point math", "lockstep multiplayer"]
- roblox_physics:
- pairs_with: ["Roblox", "Humanoid", "BasePart constraints", "Workspace.Gravity", "client-authoritative character movement"]
- audio_system:
- triggers: ["audio", "music", "sound effects", "SFX", "adaptive music", "spatial audio", "voice"]
- importance: "medium"
- affects: "audio and ambiance epics"
- options:
- engine_native:
- pairs_with: ["Unity Audio", "Unreal MetaSounds", "Godot AudioStreamPlayer"]
- fmod:
- pairs_with: ["Unity", "Unreal", "Godot (via plugin)", "adaptive music", "large projects"]
- wwise:
- pairs_with: ["Unity", "Unreal", "AAA projects", "spatial audio", "large sound libraries"]
- roblox_audio:
- pairs_with: ["Roblox", "SoundService", "Sound/SoundGroup instances", "AudioAnalyzer", "spatial 3D audio via RollOffMode"]
- networking:
- triggers: ["multiplayer", "online", "netcode", "co-op", "PvP", "lobby", "matchmaking", "dedicated server"]
- importance: "critical"
- affects: "all multiplayer epics"
- options:
- unity_netcode:
- pairs_with: ["Unity", "Netcode for GameObjects", "Unity Relay", "Unity Lobby"]
- photon:
- pairs_with: ["Unity", "Photon Fusion", "Photon Quantum", "Photon Voice"]
- mirror:
- pairs_with: ["Unity", "open source", "server authoritative"]
- unreal_replication:
- pairs_with: ["Unreal", "built-in replication", "dedicated servers", "listen servers"]
- eos:
- pairs_with: ["Epic Online Services", "cross-platform", "lobbies", "voice", "anti-cheat"]
- steam_networking:
- pairs_with: ["Steamworks", "peer-to-peer", "relay", "PC-focused"]
- godot_multiplayer:
- pairs_with: ["Godot", "MultiplayerAPI", "ENet", "WebSocket"]
- custom_udp:
- pairs_with: ["ENet", "LiteNetLib", "GameServer.io", "custom protocol"]
- roblox_networking:
- pairs_with:
- [
- "Roblox",
- "RemoteEvent",
- "RemoteFunction",
- "server-authoritative (mandatory)",
- "FilteringEnabled",
- "MemoryStoreService for cross-server",
- "MessagingService",
- ]
- input_system:
- triggers: ["input", "controls", "controller", "gamepad", "keyboard", "touch", "gesture", "rebinding"]
- importance: "high"
- affects: "player interaction epics"
- options:
- unity_input_system:
- pairs_with: ["Unity", "action maps", "rebinding", "multiple devices"]
- unreal_enhanced_input:
- pairs_with: ["Unreal", "input actions", "modifiers", "triggers"]
- godot_input_map:
- pairs_with: ["Godot", "InputMap", "action system"]
- rewired:
- pairs_with: ["Unity", "advanced controller support", "Steam Input"]
- custom_buffer:
- pairs_with: ["fighting games", "input buffering", "command parsing"]
- roblox_input:
- pairs_with:
- ["Roblox", "UserInputService", "ContextActionService", "mobile touch (automatic)", "gamepad (Xbox controller supported)"]
- ai_system:
- triggers: ["AI", "enemies", "NPC", "behavior", "pathfinding", "navigation", "companion"]
- importance: "high"
- affects: "AI and gameplay epics"
- options:
- behavior_trees:
- pairs_with: ["Unity (Behavior Designer)", "Unreal (Behavior Trees)", "Godot (LimboAI)"]
- state_machines:
- pairs_with: ["any engine", "simple enemy AI", "animation state"]
- goap:
- pairs_with: ["emergent behavior", "complex NPCs", "simulation games"]
- utility_ai:
- pairs_with: ["dynamic decision making", "The Sims-style", "squad tactics"]
- navigation_mesh:
- pairs_with: ["Unity NavMesh", "Unreal NavMesh", "Godot NavigationServer", "3D pathfinding"]
- astar_grid:
- pairs_with: ["2D games", "tile-based", "grid pathfinding", "RTS"]
- save_persistence:
- triggers: ["save", "load", "persistence", "progress", "cloud save", "save file", "checkpoint"]
- importance: "high"
- affects: "progression and data epics"
- options:
- player_prefs:
- pairs_with: ["Unity PlayerPrefs", "Godot ConfigFile", "simple key-value", "settings only"]
- serialized_json:
- pairs_with: ["any engine", "JSON save files", "versioned schema", "complex state"]
- sqlite:
- pairs_with: ["large save data", "queryable state", "inventory-heavy games"]
- platform_cloud:
- pairs_with: ["Steam Cloud", "PSN", "Xbox Cloud", "iCloud", "Google Play"]
- custom_binary:
- pairs_with: ["performance-sensitive", "large worlds", "anti-tamper"]
- roblox_datastore:
- pairs_with:
- [
- "Roblox",
- "DataStoreService",
- "UpdateAsync",
- "MemoryStoreService session locking",
- "in-memory cache pattern",
- "BindToClose flush",
- ]
- ui_framework:
- triggers: ["UI", "HUD", "menu", "inventory screen", "dialogue box", "health bar", "minimap"]
- importance: "medium"
- affects: "UI and UX epics"
- options:
- unity_ui_toolkit:
- pairs_with: ["Unity", "USS styling", "UXML layout", "runtime UI"]
- unity_ugui:
- pairs_with: ["Unity", "Canvas", "legacy but mature", "wide plugin support"]
- unreal_umg:
- pairs_with: ["Unreal", "UMG widgets", "Blueprints", "Slate (C++)"]
- godot_control:
- pairs_with: ["Godot", "Control nodes", "themes", "containers"]
- imgui:
- pairs_with: ["debug tools", "dev UI", "any engine via binding"]
- roblox_gui:
- pairs_with:
- ["Roblox", "ScreenGui", "PlayerGui", "vanilla Roblox UI", "Fusion (community reactive)", "Roact (community declarative)"]
- asset_pipeline:
- triggers: ["assets", "textures", "models", "sprites", "animation", "import", "asset bundles", "streaming"]
- importance: "medium"
- affects: "content and loading epics"
- options:
- unity_addressables:
- pairs_with: ["Unity", "async loading", "content updates", "DLC"]
- unity_resources:
- pairs_with: ["Unity", "simple projects", "no remote content"]
- unreal_asset_manager:
- pairs_with: ["Unreal", "async loading", "streaming levels", "pak files"]
- godot_resource_loader:
- pairs_with: ["Godot", "ResourceLoader", "threaded loading", "PCK files"]
- roblox_assets:
- pairs_with: ["Roblox", "Creator Store", "ContentProvider", "StreamingEnabled", "ReplicatedStorage vs ServerStorage split"]
- deployment_platform:
- triggers: ["platform", "target", "build", "export", "Steam", "console", "mobile", "web"]
- importance: "high"
- affects: "all epics"
- options:
- steam_pc:
- pairs_with: ["Steamworks SDK", "Steam Cloud", "Steam Input", "achievements"]
- console:
- pairs_with: ["platform SDK (NDA)", "certification requirements", "platform-specific APIs"]
- mobile_ios:
- pairs_with: ["App Store", "Metal", "Game Center", "StoreKit"]
- mobile_android:
- pairs_with: ["Google Play", "Vulkan/OpenGL ES", "Google Play Games Services"]
- web_html5:
- pairs_with: ["WebGL", "WebAssembly", "itch.io", "Newgrounds"]
- vr_headset:
- pairs_with: ["OpenXR", "Meta SDK", "SteamVR", "platform store"]
- roblox_platform:
- pairs_with:
- [
- "Roblox handles all deployment",
- "PC",
- "mobile iOS/Android",
- "Xbox",
- "VR (Meta Quest)",
- "no App Store submission required",
- "Robux monetization",
- ]
- # Opinionated stack combinations for common game types
- common_stacks:
- unity_3d_action:
- name: "Unity 3D Action/Adventure"
- components: ["Unity", "URP", "C#", "Cinemachine", "Unity Input System", "FMOD or native audio", "Addressables"]
- good_for: "3D action games, third-person, first-person, adventure"
- unity_2d_platformer:
- name: "Unity 2D Platformer"
- components: ["Unity", "URP 2D Renderer", "C#", "Tilemap", "Unity Input System", "custom character controller"]
- good_for: "2D platformers, metroidvanias, side-scrollers"
- unreal_high_fidelity:
- name: "Unreal High-Fidelity 3D"
- components: ["Unreal Engine", "Nanite", "Lumen", "C++ and Blueprints", "Enhanced Input", "MetaSounds"]
- good_for: "AAA-quality 3D, open world, realistic visuals"
- unreal_multiplayer:
- name: "Unreal Multiplayer"
- components: ["Unreal Engine", "Replication", "Dedicated Servers", "Enhanced Input", "EOS"]
- good_for: "Competitive multiplayer, team shooters, battle royale"
- godot_2d:
- name: "Godot 2D"
- components: ["Godot", "GDScript", "TileMap", "AnimationPlayer", "Godot Physics 2D"]
- good_for: "2D games, pixel art, indie, rapid prototyping, web export"
- godot_3d:
- name: "Godot 3D"
- components: ["Godot", "GDScript or C#", "Forward+ renderer", "NavigationServer", "Jolt Physics"]
- good_for: "Mid-scope 3D games, open source priority, multi-platform"
- roblox_experience:
- name: "Roblox Experience"
- components:
- [
- "Roblox Studio",
- "Luau",
- "DataStoreService + MemoryStoreService",
- "RemoteEvents/RemoteFunctions",
- "UserInputService/ContextActionService",
- "SoundService",
- "Rojo (version control)",
- "Wally (packages)",
- ]
- good_for: "Social games, multiplayer experiences, UGC-driven games, games targeting the Roblox platform"
- web_browser_game:
- name: "Browser/HTML5 Game"
- components: ["Phaser or Godot HTML5", "JavaScript/TypeScript", "WebGL", "Howler.js for audio"]
- good_for: "Web games, game jams, itch.io, casual browser games"
- mobile_casual:
- name: "Mobile Casual"
- components: ["Unity or Godot", "lightweight renderer", "touch input", "ad SDK", "IAP SDK", "cloud save"]
- good_for: "Mobile F2P, hyper-casual, idle games"
- vr_experience:
- name: "VR Game"
- components: ["Unity XR Toolkit or Unreal OpenXR", "OpenXR", "spatial audio", "hand tracking", "fixed foveated rendering"]
- good_for: "VR games, XR experiences, room-scale interaction"
- # Starter templates and what decisions they pre-make
- starter_templates:
- unity_2d_urp:
- name: "Unity 2D (URP)"
- command_search: "Unity Hub → New Project → 2D (URP)"
- decisions_provided: ["Unity engine", "URP rendering", "2D Renderer", "C# language", "basic project structure"]
- good_for: ["2D games", "pixel art", "platformers", "top-down"]
- unity_3d_urp:
- name: "Unity 3D (URP)"
- command_search: "Unity Hub → New Project → 3D (URP)"
- decisions_provided: ["Unity engine", "URP rendering", "3D pipeline", "C# language", "basic project structure"]
- good_for: ["3D games", "mobile 3D", "stylized visuals", "cross-platform"]
- unity_3d_hdrp:
- name: "Unity 3D (HDRP)"
- command_search: "Unity Hub → New Project → 3D (HDRP)"
- decisions_provided: ["Unity engine", "HDRP rendering", "high-end pipeline", "C# language"]
- good_for: ["High-fidelity 3D", "PC/console", "realistic rendering"]
- unity_vr:
- name: "Unity VR"
- command_search: "Unity Hub → New Project → VR"
- decisions_provided: ["Unity engine", "XR Plugin Management", "XR Interaction Toolkit", "URP"]
- good_for: ["VR games", "XR experiences"]
- unreal_blank:
- name: "Unreal Blank Project"
- command_search: "Epic Games Launcher → Unreal → Blank"
- decisions_provided: ["Unreal engine", "C++ and Blueprints", "Chaos physics", "MetaSounds"]
- good_for: ["Custom game types", "full control over setup"]
- unreal_third_person:
- name: "Unreal Third Person"
- command_search: "Epic Games Launcher → Unreal → Third Person"
- decisions_provided: ["Unreal engine", "character movement", "Enhanced Input", "third-person camera", "mannequin animations"]
- good_for: ["3D action/adventure", "third-person games"]
- unreal_first_person:
- name: "Unreal First Person"
- command_search: "Epic Games Launcher → Unreal → First Person"
- decisions_provided: ["Unreal engine", "FPS movement", "Enhanced Input", "first-person camera", "projectile system"]
- good_for: ["FPS games", "first-person exploration"]
- godot_default:
- name: "Godot Default Project"
- command_search: "Godot → Project Manager → New Project"
- decisions_provided: ["Godot engine", "GDScript", "scene tree architecture", "2D and 3D capable"]
- good_for: ["Any Godot game", "rapid prototyping", "2D or 3D"]
- phaser_vite:
- name: "Phaser + Vite"
- command_search: "npm create @phaserjs/game@latest"
- decisions_provided: ["Phaser framework", "TypeScript option", "Vite bundler", "Arcade Physics"]
- good_for: ["Browser games", "2D web games", "game jams"]
- roblox_new_place:
- name: "Roblox New Place"
- command_search: "Roblox Studio → New → Baseplate (or your template of choice)"
- decisions_provided:
- [
- "Roblox engine",
- "Luau language",
- "server-authoritative networking (mandatory)",
- "DataStoreService persistence",
- "platform-managed deployment",
- "Roblox avatar system",
- ]
- good_for: ["Roblox platform games", "multiplayer experiences", "social games", "UGC games"]
- bevy_default:
- name: "Bevy Default"
- command_search: "cargo init && cargo add bevy"
- decisions_provided: ["Bevy engine", "Rust language", "ECS architecture", "wgpu renderer"]
- good_for: ["Rust game development", "data-oriented design", "custom pipelines"]
- # Starter selection heuristics (workflow logic)
- starter_selection_rules:
- by_game_type:
- 2d_platformer:
- recommended: ["unity_2d_urp", "godot_default"]
- considerations: "Asset store needs? → Unity. Open source? → Godot. Web export? → Godot or Phaser"
- 3d_action:
- recommended: ["unreal_third_person", "unity_3d_urp"]
- considerations: "High fidelity? → Unreal. Cross-platform mobile? → Unity URP. Stylized? → Either"
- fps_shooter:
- recommended: ["unreal_first_person", "unity_3d_urp"]
- considerations: "Multiplayer replication? → Unreal. Mobile? → Unity. Competitive netcode? → Both viable"
- open_world:
- recommended: ["unreal_blank", "unity_3d_urp"]
- considerations: "Large-scale streaming? → Unreal (World Partition). Mid-scope? → Unity or Godot"
- mobile_casual:
- recommended: ["unity_2d_urp", "godot_default"]
- considerations: "Ad/IAP SDKs? → Unity (best ecosystem). Open source? → Godot. Web-first? → Phaser"
- vr_game:
- recommended: ["unity_vr", "unreal_blank"]
- considerations: "XR Toolkit maturity? → Unity. Visual fidelity? → Unreal. Cross-headset? → Both via OpenXR"
- browser_game:
- recommended: ["phaser_vite", "godot_default"]
- considerations: "Pure web? → Phaser. May expand to desktop? → Godot. Game jam? → Either"
- strategy_rts:
- recommended: ["unity_3d_urp", "godot_default", "unreal_blank"]
- considerations: "Large unit counts? → ECS approach in any engine. Mod support? → Godot. Polish? → Unity or Unreal"
- narrative_rpg:
- recommended: ["unity_3d_urp", "unity_2d_urp", "godot_default"]
- considerations: "Yarn Spinner/Ink integration? → Unity or Godot. Dialogue-heavy? → Godot (built-in). AAA RPG? → Unreal"
|