decision-catalog.yaml 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428
  1. # Decision Catalog - Composability knowledge for game architectural decisions
  2. # This provides RELATIONSHIPS and WORKFLOW LOGIC, not generic tech knowledge
  3. #
  4. # ⚠️ CRITICAL: All version/feature info MUST be verified via WebSearch during workflow
  5. # This file only provides: triggers, relationships (pairs_with), and opinionated stacks
  6. decision_categories:
  7. game_engine:
  8. triggers: ["engine", "framework", "game framework", "renderer", "runtime"]
  9. importance: "critical"
  10. affects: "all epics"
  11. options:
  12. unity:
  13. pairs_with: ["C#", "URP", "HDRP", "Unity Input System", "Addressables", "Unity Gaming Services"]
  14. unreal:
  15. pairs_with: ["C++", "Blueprints", "Nanite", "Lumen", "Enhanced Input", "Unreal Online Subsystem"]
  16. godot:
  17. pairs_with: ["GDScript", "C#", "GDExtension", "Godot Physics", "GodotSteam"]
  18. phaser:
  19. pairs_with: ["JavaScript", "TypeScript", "Matter.js", "Arcade Physics"]
  20. roblox:
  21. pairs_with:
  22. [
  23. "Luau",
  24. "DataStoreService",
  25. "MemoryStoreService",
  26. "RemoteEvents",
  27. "TweenService",
  28. "UserInputService",
  29. "ContextActionService",
  30. "Rojo",
  31. "Wally",
  32. ]
  33. bevy:
  34. pairs_with: ["Rust", "ECS", "wgpu"]
  35. monogame:
  36. pairs_with: ["C#", "FNA", "FMOD"]
  37. rendering_pipeline:
  38. triggers: ["graphics", "rendering", "shaders", "visual style", "art style", "2D", "3D", "pixel art"]
  39. importance: "critical"
  40. affects: "all visual epics"
  41. options:
  42. unity_urp:
  43. pairs_with: ["Unity", "Shader Graph", "2D Renderer", "mobile targets"]
  44. unity_hdrp:
  45. pairs_with: ["Unity", "Shader Graph", "ray tracing", "high-end PC/console"]
  46. unreal_nanite_lumen:
  47. pairs_with: ["Unreal", "virtual geometry", "global illumination", "high-end PC/console"]
  48. unreal_forward:
  49. pairs_with: ["Unreal", "mobile", "VR", "stylized rendering"]
  50. godot_vulkan:
  51. pairs_with: ["Godot", "Forward+", "mid-range hardware"]
  52. godot_compatibility:
  53. pairs_with: ["Godot", "OpenGL", "mobile", "web export"]
  54. custom_2d:
  55. pairs_with: ["Phaser", "SDL", "sprite batching", "pixel art"]
  56. roblox_rendering:
  57. pairs_with: ["Roblox", "fixed pipeline (platform-managed)", "SurfaceAppearance", "Atmosphere", "Lighting", "StreamingEnabled"]
  58. physics_system:
  59. triggers: ["physics", "collision", "rigid body", "character controller", "raycasting", "platformer movement"]
  60. importance: "high"
  61. affects: "gameplay and movement epics"
  62. options:
  63. engine_native:
  64. pairs_with: ["PhysX (Unity)", "Chaos (Unreal)", "Godot Physics"]
  65. jolt:
  66. pairs_with: ["Godot (Jolt plugin)", "custom engines"]
  67. box2d:
  68. pairs_with: ["2D games", "Godot", "Phaser (Matter.js alternative)"]
  69. custom_controller:
  70. pairs_with: ["platformers", "raycasting", "kinematic bodies"]
  71. deterministic:
  72. pairs_with: ["rollback netcode", "fixed-point math", "lockstep multiplayer"]
  73. roblox_physics:
  74. pairs_with: ["Roblox", "Humanoid", "BasePart constraints", "Workspace.Gravity", "client-authoritative character movement"]
  75. audio_system:
  76. triggers: ["audio", "music", "sound effects", "SFX", "adaptive music", "spatial audio", "voice"]
  77. importance: "medium"
  78. affects: "audio and ambiance epics"
  79. options:
  80. engine_native:
  81. pairs_with: ["Unity Audio", "Unreal MetaSounds", "Godot AudioStreamPlayer"]
  82. fmod:
  83. pairs_with: ["Unity", "Unreal", "Godot (via plugin)", "adaptive music", "large projects"]
  84. wwise:
  85. pairs_with: ["Unity", "Unreal", "AAA projects", "spatial audio", "large sound libraries"]
  86. roblox_audio:
  87. pairs_with: ["Roblox", "SoundService", "Sound/SoundGroup instances", "AudioAnalyzer", "spatial 3D audio via RollOffMode"]
  88. networking:
  89. triggers: ["multiplayer", "online", "netcode", "co-op", "PvP", "lobby", "matchmaking", "dedicated server"]
  90. importance: "critical"
  91. affects: "all multiplayer epics"
  92. options:
  93. unity_netcode:
  94. pairs_with: ["Unity", "Netcode for GameObjects", "Unity Relay", "Unity Lobby"]
  95. photon:
  96. pairs_with: ["Unity", "Photon Fusion", "Photon Quantum", "Photon Voice"]
  97. mirror:
  98. pairs_with: ["Unity", "open source", "server authoritative"]
  99. unreal_replication:
  100. pairs_with: ["Unreal", "built-in replication", "dedicated servers", "listen servers"]
  101. eos:
  102. pairs_with: ["Epic Online Services", "cross-platform", "lobbies", "voice", "anti-cheat"]
  103. steam_networking:
  104. pairs_with: ["Steamworks", "peer-to-peer", "relay", "PC-focused"]
  105. godot_multiplayer:
  106. pairs_with: ["Godot", "MultiplayerAPI", "ENet", "WebSocket"]
  107. custom_udp:
  108. pairs_with: ["ENet", "LiteNetLib", "GameServer.io", "custom protocol"]
  109. roblox_networking:
  110. pairs_with:
  111. [
  112. "Roblox",
  113. "RemoteEvent",
  114. "RemoteFunction",
  115. "server-authoritative (mandatory)",
  116. "FilteringEnabled",
  117. "MemoryStoreService for cross-server",
  118. "MessagingService",
  119. ]
  120. input_system:
  121. triggers: ["input", "controls", "controller", "gamepad", "keyboard", "touch", "gesture", "rebinding"]
  122. importance: "high"
  123. affects: "player interaction epics"
  124. options:
  125. unity_input_system:
  126. pairs_with: ["Unity", "action maps", "rebinding", "multiple devices"]
  127. unreal_enhanced_input:
  128. pairs_with: ["Unreal", "input actions", "modifiers", "triggers"]
  129. godot_input_map:
  130. pairs_with: ["Godot", "InputMap", "action system"]
  131. rewired:
  132. pairs_with: ["Unity", "advanced controller support", "Steam Input"]
  133. custom_buffer:
  134. pairs_with: ["fighting games", "input buffering", "command parsing"]
  135. roblox_input:
  136. pairs_with:
  137. ["Roblox", "UserInputService", "ContextActionService", "mobile touch (automatic)", "gamepad (Xbox controller supported)"]
  138. ai_system:
  139. triggers: ["AI", "enemies", "NPC", "behavior", "pathfinding", "navigation", "companion"]
  140. importance: "high"
  141. affects: "AI and gameplay epics"
  142. options:
  143. behavior_trees:
  144. pairs_with: ["Unity (Behavior Designer)", "Unreal (Behavior Trees)", "Godot (LimboAI)"]
  145. state_machines:
  146. pairs_with: ["any engine", "simple enemy AI", "animation state"]
  147. goap:
  148. pairs_with: ["emergent behavior", "complex NPCs", "simulation games"]
  149. utility_ai:
  150. pairs_with: ["dynamic decision making", "The Sims-style", "squad tactics"]
  151. navigation_mesh:
  152. pairs_with: ["Unity NavMesh", "Unreal NavMesh", "Godot NavigationServer", "3D pathfinding"]
  153. astar_grid:
  154. pairs_with: ["2D games", "tile-based", "grid pathfinding", "RTS"]
  155. save_persistence:
  156. triggers: ["save", "load", "persistence", "progress", "cloud save", "save file", "checkpoint"]
  157. importance: "high"
  158. affects: "progression and data epics"
  159. options:
  160. player_prefs:
  161. pairs_with: ["Unity PlayerPrefs", "Godot ConfigFile", "simple key-value", "settings only"]
  162. serialized_json:
  163. pairs_with: ["any engine", "JSON save files", "versioned schema", "complex state"]
  164. sqlite:
  165. pairs_with: ["large save data", "queryable state", "inventory-heavy games"]
  166. platform_cloud:
  167. pairs_with: ["Steam Cloud", "PSN", "Xbox Cloud", "iCloud", "Google Play"]
  168. custom_binary:
  169. pairs_with: ["performance-sensitive", "large worlds", "anti-tamper"]
  170. roblox_datastore:
  171. pairs_with:
  172. [
  173. "Roblox",
  174. "DataStoreService",
  175. "UpdateAsync",
  176. "MemoryStoreService session locking",
  177. "in-memory cache pattern",
  178. "BindToClose flush",
  179. ]
  180. ui_framework:
  181. triggers: ["UI", "HUD", "menu", "inventory screen", "dialogue box", "health bar", "minimap"]
  182. importance: "medium"
  183. affects: "UI and UX epics"
  184. options:
  185. unity_ui_toolkit:
  186. pairs_with: ["Unity", "USS styling", "UXML layout", "runtime UI"]
  187. unity_ugui:
  188. pairs_with: ["Unity", "Canvas", "legacy but mature", "wide plugin support"]
  189. unreal_umg:
  190. pairs_with: ["Unreal", "UMG widgets", "Blueprints", "Slate (C++)"]
  191. godot_control:
  192. pairs_with: ["Godot", "Control nodes", "themes", "containers"]
  193. imgui:
  194. pairs_with: ["debug tools", "dev UI", "any engine via binding"]
  195. roblox_gui:
  196. pairs_with:
  197. ["Roblox", "ScreenGui", "PlayerGui", "vanilla Roblox UI", "Fusion (community reactive)", "Roact (community declarative)"]
  198. asset_pipeline:
  199. triggers: ["assets", "textures", "models", "sprites", "animation", "import", "asset bundles", "streaming"]
  200. importance: "medium"
  201. affects: "content and loading epics"
  202. options:
  203. unity_addressables:
  204. pairs_with: ["Unity", "async loading", "content updates", "DLC"]
  205. unity_resources:
  206. pairs_with: ["Unity", "simple projects", "no remote content"]
  207. unreal_asset_manager:
  208. pairs_with: ["Unreal", "async loading", "streaming levels", "pak files"]
  209. godot_resource_loader:
  210. pairs_with: ["Godot", "ResourceLoader", "threaded loading", "PCK files"]
  211. roblox_assets:
  212. pairs_with: ["Roblox", "Creator Store", "ContentProvider", "StreamingEnabled", "ReplicatedStorage vs ServerStorage split"]
  213. deployment_platform:
  214. triggers: ["platform", "target", "build", "export", "Steam", "console", "mobile", "web"]
  215. importance: "high"
  216. affects: "all epics"
  217. options:
  218. steam_pc:
  219. pairs_with: ["Steamworks SDK", "Steam Cloud", "Steam Input", "achievements"]
  220. console:
  221. pairs_with: ["platform SDK (NDA)", "certification requirements", "platform-specific APIs"]
  222. mobile_ios:
  223. pairs_with: ["App Store", "Metal", "Game Center", "StoreKit"]
  224. mobile_android:
  225. pairs_with: ["Google Play", "Vulkan/OpenGL ES", "Google Play Games Services"]
  226. web_html5:
  227. pairs_with: ["WebGL", "WebAssembly", "itch.io", "Newgrounds"]
  228. vr_headset:
  229. pairs_with: ["OpenXR", "Meta SDK", "SteamVR", "platform store"]
  230. roblox_platform:
  231. pairs_with:
  232. [
  233. "Roblox handles all deployment",
  234. "PC",
  235. "mobile iOS/Android",
  236. "Xbox",
  237. "VR (Meta Quest)",
  238. "no App Store submission required",
  239. "Robux monetization",
  240. ]
  241. # Opinionated stack combinations for common game types
  242. common_stacks:
  243. unity_3d_action:
  244. name: "Unity 3D Action/Adventure"
  245. components: ["Unity", "URP", "C#", "Cinemachine", "Unity Input System", "FMOD or native audio", "Addressables"]
  246. good_for: "3D action games, third-person, first-person, adventure"
  247. unity_2d_platformer:
  248. name: "Unity 2D Platformer"
  249. components: ["Unity", "URP 2D Renderer", "C#", "Tilemap", "Unity Input System", "custom character controller"]
  250. good_for: "2D platformers, metroidvanias, side-scrollers"
  251. unreal_high_fidelity:
  252. name: "Unreal High-Fidelity 3D"
  253. components: ["Unreal Engine", "Nanite", "Lumen", "C++ and Blueprints", "Enhanced Input", "MetaSounds"]
  254. good_for: "AAA-quality 3D, open world, realistic visuals"
  255. unreal_multiplayer:
  256. name: "Unreal Multiplayer"
  257. components: ["Unreal Engine", "Replication", "Dedicated Servers", "Enhanced Input", "EOS"]
  258. good_for: "Competitive multiplayer, team shooters, battle royale"
  259. godot_2d:
  260. name: "Godot 2D"
  261. components: ["Godot", "GDScript", "TileMap", "AnimationPlayer", "Godot Physics 2D"]
  262. good_for: "2D games, pixel art, indie, rapid prototyping, web export"
  263. godot_3d:
  264. name: "Godot 3D"
  265. components: ["Godot", "GDScript or C#", "Forward+ renderer", "NavigationServer", "Jolt Physics"]
  266. good_for: "Mid-scope 3D games, open source priority, multi-platform"
  267. roblox_experience:
  268. name: "Roblox Experience"
  269. components:
  270. [
  271. "Roblox Studio",
  272. "Luau",
  273. "DataStoreService + MemoryStoreService",
  274. "RemoteEvents/RemoteFunctions",
  275. "UserInputService/ContextActionService",
  276. "SoundService",
  277. "Rojo (version control)",
  278. "Wally (packages)",
  279. ]
  280. good_for: "Social games, multiplayer experiences, UGC-driven games, games targeting the Roblox platform"
  281. web_browser_game:
  282. name: "Browser/HTML5 Game"
  283. components: ["Phaser or Godot HTML5", "JavaScript/TypeScript", "WebGL", "Howler.js for audio"]
  284. good_for: "Web games, game jams, itch.io, casual browser games"
  285. mobile_casual:
  286. name: "Mobile Casual"
  287. components: ["Unity or Godot", "lightweight renderer", "touch input", "ad SDK", "IAP SDK", "cloud save"]
  288. good_for: "Mobile F2P, hyper-casual, idle games"
  289. vr_experience:
  290. name: "VR Game"
  291. components: ["Unity XR Toolkit or Unreal OpenXR", "OpenXR", "spatial audio", "hand tracking", "fixed foveated rendering"]
  292. good_for: "VR games, XR experiences, room-scale interaction"
  293. # Starter templates and what decisions they pre-make
  294. starter_templates:
  295. unity_2d_urp:
  296. name: "Unity 2D (URP)"
  297. command_search: "Unity Hub → New Project → 2D (URP)"
  298. decisions_provided: ["Unity engine", "URP rendering", "2D Renderer", "C# language", "basic project structure"]
  299. good_for: ["2D games", "pixel art", "platformers", "top-down"]
  300. unity_3d_urp:
  301. name: "Unity 3D (URP)"
  302. command_search: "Unity Hub → New Project → 3D (URP)"
  303. decisions_provided: ["Unity engine", "URP rendering", "3D pipeline", "C# language", "basic project structure"]
  304. good_for: ["3D games", "mobile 3D", "stylized visuals", "cross-platform"]
  305. unity_3d_hdrp:
  306. name: "Unity 3D (HDRP)"
  307. command_search: "Unity Hub → New Project → 3D (HDRP)"
  308. decisions_provided: ["Unity engine", "HDRP rendering", "high-end pipeline", "C# language"]
  309. good_for: ["High-fidelity 3D", "PC/console", "realistic rendering"]
  310. unity_vr:
  311. name: "Unity VR"
  312. command_search: "Unity Hub → New Project → VR"
  313. decisions_provided: ["Unity engine", "XR Plugin Management", "XR Interaction Toolkit", "URP"]
  314. good_for: ["VR games", "XR experiences"]
  315. unreal_blank:
  316. name: "Unreal Blank Project"
  317. command_search: "Epic Games Launcher → Unreal → Blank"
  318. decisions_provided: ["Unreal engine", "C++ and Blueprints", "Chaos physics", "MetaSounds"]
  319. good_for: ["Custom game types", "full control over setup"]
  320. unreal_third_person:
  321. name: "Unreal Third Person"
  322. command_search: "Epic Games Launcher → Unreal → Third Person"
  323. decisions_provided: ["Unreal engine", "character movement", "Enhanced Input", "third-person camera", "mannequin animations"]
  324. good_for: ["3D action/adventure", "third-person games"]
  325. unreal_first_person:
  326. name: "Unreal First Person"
  327. command_search: "Epic Games Launcher → Unreal → First Person"
  328. decisions_provided: ["Unreal engine", "FPS movement", "Enhanced Input", "first-person camera", "projectile system"]
  329. good_for: ["FPS games", "first-person exploration"]
  330. godot_default:
  331. name: "Godot Default Project"
  332. command_search: "Godot → Project Manager → New Project"
  333. decisions_provided: ["Godot engine", "GDScript", "scene tree architecture", "2D and 3D capable"]
  334. good_for: ["Any Godot game", "rapid prototyping", "2D or 3D"]
  335. phaser_vite:
  336. name: "Phaser + Vite"
  337. command_search: "npm create @phaserjs/game@latest"
  338. decisions_provided: ["Phaser framework", "TypeScript option", "Vite bundler", "Arcade Physics"]
  339. good_for: ["Browser games", "2D web games", "game jams"]
  340. roblox_new_place:
  341. name: "Roblox New Place"
  342. command_search: "Roblox Studio → New → Baseplate (or your template of choice)"
  343. decisions_provided:
  344. [
  345. "Roblox engine",
  346. "Luau language",
  347. "server-authoritative networking (mandatory)",
  348. "DataStoreService persistence",
  349. "platform-managed deployment",
  350. "Roblox avatar system",
  351. ]
  352. good_for: ["Roblox platform games", "multiplayer experiences", "social games", "UGC games"]
  353. bevy_default:
  354. name: "Bevy Default"
  355. command_search: "cargo init && cargo add bevy"
  356. decisions_provided: ["Bevy engine", "Rust language", "ECS architecture", "wgpu renderer"]
  357. good_for: ["Rust game development", "data-oriented design", "custom pipelines"]
  358. # Starter selection heuristics (workflow logic)
  359. starter_selection_rules:
  360. by_game_type:
  361. 2d_platformer:
  362. recommended: ["unity_2d_urp", "godot_default"]
  363. considerations: "Asset store needs? → Unity. Open source? → Godot. Web export? → Godot or Phaser"
  364. 3d_action:
  365. recommended: ["unreal_third_person", "unity_3d_urp"]
  366. considerations: "High fidelity? → Unreal. Cross-platform mobile? → Unity URP. Stylized? → Either"
  367. fps_shooter:
  368. recommended: ["unreal_first_person", "unity_3d_urp"]
  369. considerations: "Multiplayer replication? → Unreal. Mobile? → Unity. Competitive netcode? → Both viable"
  370. open_world:
  371. recommended: ["unreal_blank", "unity_3d_urp"]
  372. considerations: "Large-scale streaming? → Unreal (World Partition). Mid-scope? → Unity or Godot"
  373. mobile_casual:
  374. recommended: ["unity_2d_urp", "godot_default"]
  375. considerations: "Ad/IAP SDKs? → Unity (best ecosystem). Open source? → Godot. Web-first? → Phaser"
  376. vr_game:
  377. recommended: ["unity_vr", "unreal_blank"]
  378. considerations: "XR Toolkit maturity? → Unity. Visual fidelity? → Unreal. Cross-headset? → Both via OpenXR"
  379. browser_game:
  380. recommended: ["phaser_vite", "godot_default"]
  381. considerations: "Pure web? → Phaser. May expand to desktop? → Godot. Game jam? → Either"
  382. strategy_rts:
  383. recommended: ["unity_3d_urp", "godot_default", "unreal_blank"]
  384. considerations: "Large unit counts? → ECS approach in any engine. Mod support? → Godot. Polish? → Unity or Unreal"
  385. narrative_rpg:
  386. recommended: ["unity_3d_urp", "unity_2d_urp", "godot_default"]
  387. considerations: "Yarn Spinner/Ink integration? → Unity or Godot. Dialogue-heavy? → Godot (built-in). AAA RPG? → Unreal"