[
  {
    "id": "E5",
    "title": "E5 — AI-Assisted Development Workflow",
    "description": "",
    "category": "explanation",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 12758,
    "sections": [
      "The Core Principle: AI Handles the \"How,\" You Own the \"Why\"",
      "Why ECS Is Uniquely AI-Friendly",
      "Structuring Code for AI",
      "CONTEXT.md",
      "Architecture: MonoGame + Arch ECS + Composed Libraries",
      "Patterns: Service Locator for ambient services, DI for game logic",
      "Arch owns: ALL entities (player, NPCs, enemies, particles, simulation)",
      "Key Libraries: Apos.Input, Gum.MonoGame, FontStashSharp, BrainAI",
      "Custom Code: Scene manager, render layers, SpatialHash, tweens",
      "Coding conventions: C# 12, nullable enabled, readonly structs for data",
      "CLAUDE.md for Claude Code",
      "What AI Is Good At (Use It For)",
      "What AI Is Bad At (Write It Yourself)",
      "AI Code Review Checklist",
      "Workflow",
      "Avoiding AI Slop: Art Pipeline",
      "The 70/30 Rule",
      "Iterative img2img Workflow",
      "Style Consistency",
      "Budget Reality",
      "The Cognitive Atrophy Risk",
      "AI as a Scope Creep Amplifier",
      "Tool Recommendations",
      "The Bottom Line"
    ]
  },
  {
    "id": "gamedev-rules",
    "title": "Game Development AI Rules (Engine-Agnostic)",
    "description": "Universal rules for AI-assisted game development. These apply regardless of engine, language, or architecture.",
    "category": "explanation",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 8366,
    "sections": [
      "AI Code Generation Rules",
      "What AI Should Generate",
      "What AI Should NOT Generate",
      "Code Generation Principles",
      "Art Pipeline Rules",
      "Asset Naming",
      "Sprite and Texture Rules",
      "Audio Rules",
      "File Organization",
      "Project Management Rules",
      "Milestone Structure",
      "Task Granularity",
      "Work-in-Progress Limits",
      "Scope Control",
      "The Scope Watchdog Rules",
      "When to Cut",
      "Task Structure",
      "Standard Task Format",
      "Task: {title}",
      "Steps",
      "Notes",
      "Task Workflow",
      "Documentation Rules",
      "What to Document",
      "What NOT to Document",
      "Documentation Practices",
      "Engine-Specific Rules",
      "Related Guides"
    ]
  },
  {
    "id": "ai-theory",
    "title": "AI Systems -- Theory & Concepts",
    "description": "This document covers engine-agnostic game AI theory, including FSMs, behavior trees, GOAP, utility AI, and perception...",
    "category": "concept",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 7348,
    "sections": [
      "Finite State Machines (FSM)",
      "Structure",
      "Hierarchical FSM (HFSM)",
      "When to Use",
      "Behavior Trees",
      "Node Types",
      "Pseudocode",
      "Blackboard Pattern",
      "When to Use",
      "GOAP (Goal-Oriented Action Planning)",
      "Data Model",
      "Planning Algorithm",
      "Example",
      "When to Use",
      "Utility AI",
      "Response Curves",
      "Scoring",
      "When to Use",
      "Perception Systems",
      "Vision Cone (Field of View)",
      "Hearing",
      "Line-of-Sight",
      "Influence Maps",
      "Boss Pattern Design",
      "Architecture Decision Guide"
    ]
  },
  {
    "id": "animation-theory",
    "title": "Animation Systems -- Theory & Concepts",
    "description": "This document covers engine-agnostic 2D animation theory, including sprite animation fundamentals, state machines, tr...",
    "category": "concept",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 7638,
    "sections": [
      "Sprite Animation Fundamentals",
      "Playback State",
      "Animation State Machine",
      "State Definition",
      "Transition Rules",
      "Evaluation Logic",
      "Global Transitions",
      "Example: Platformer State Machine",
      "Separation of State and Rendering",
      "Directional Animation",
      "Approaches",
      "Direction Resolution",
      "Frame Events",
      "Implementation Approaches",
      "Priority System",
      "Layered Animation",
      "Sprite Flash (Hit Feedback)",
      "Best Practices"
    ]
  },
  {
    "id": "audio-theory",
    "title": "Audio Systems -- Theory & Concepts",
    "description": "This document covers engine-agnostic audio theory for games, including audio architecture, sound pooling, music cross...",
    "category": "concept",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 8377,
    "sections": [
      "Audio Architecture",
      "Category-Based Volume Mixing",
      "Sound vs Music",
      "Sound Pooling",
      "Music Crossfading",
      "2D Spatial Audio",
      "Dynamic Music (Vertical Layering)",
      "Sound Variation",
      "Multiple Variants",
      "Pitch Randomization",
      "Impact Layering",
      "Audio Buses and Effects (Advanced)",
      "Key Principles"
    ]
  },
  {
    "id": "camera-theory",
    "title": "Camera Systems -- Theory & Concepts",
    "description": "This document covers engine-agnostic camera theory for 2D games. The concepts apply regardless of framework or langua...",
    "category": "concept",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 6112,
    "sections": [
      "Core Camera Concepts",
      "Camera Follow Patterns",
      "1. Direct Follow (Lock to Target)",
      "2. Smoothed Follow (Lerp)",
      "3. Deadzone",
      "4. Look-Ahead",
      "Camera Bounds (Clamping to Map)",
      "Camera Shake",
      "Camera Zoom",
      "Smooth Zoom",
      "Zoom to Point",
      "Multi-Target Camera",
      "Frustum Culling",
      "Split Screen",
      "Common Pitfalls"
    ]
  },
  {
    "id": "character-controller-theory",
    "title": "2D Character Controller -- Theory & Concepts",
    "description": "This document covers engine-agnostic theory for 2D platformer character controllers, including kinematic vs physics-b...",
    "category": "concept",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 12750,
    "sections": [
      "Kinematic vs Physics-Based",
      "Deriving Jump Parameters from Design Values",
      "Ground Detection",
      "Multi-Ray Approach",
      "State Transitions",
      "Horizontal Movement",
      "Why Separate Air and Ground Values?",
      "Variable-Height Jump",
      "Apex Float",
      "Coyote Time",
      "Typical Values",
      "Jump Buffering",
      "Timer vs Ring Buffer",
      "Wall Mechanics",
      "Wall Detection",
      "Wall Slide",
      "Wall Jump",
      "Wall Cling",
      "One-Way Platforms",
      "Drop-Through",
      "Slopes",
      "Key Concepts",
      "Common Slope Problems",
      "Corner Correction",
      "Moving Platforms",
      "Dash / Dodge",
      "Tuning Reference"
    ]
  },
  {
    "id": "combat-theory",
    "title": "Combat & Damage Systems — Theory & Concepts",
    "description": "This document covers engine-agnostic combat system design theory. For engine-specific implementations, see G64 Combat...",
    "category": "concept",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 34843,
    "sections": [
      "Table of Contents",
      "Damage Pipeline Architecture",
      "Canonical Pipeline",
      "Design Principles",
      "Event-Driven vs Direct Call",
      "Health & Resource Pools",
      "Basic Health Model",
      "Segmented Health",
      "Shield / Overshield",
      "Resource Pools (Mana, Stamina, Energy)",
      "Damage Types & Resistances",
      "Type System Design",
      "Resistance Matrix",
      "Effectiveness Triangles",
      "Hitbox / Hurtbox Model",
      "Why Separate?",
      "Collision Layer Setup",
      "Activation Patterns",
      "Shape Choices",
      "Invincibility Frames",
      "Implementation",
      "Tuning Reference",
      "Design Consideration",
      "Knockback & Hit Reactions",
      "Impulse Model",
      "Curve-Based Knockback",
      "Weight Classes",
      "Hit Stun",
      "Hit Stop & Screen Shake",
      "Hit Stop (Frame Freeze)",
      "Screen Shake",
      "Projectile Systems",
      "Projectile Types",
      "Homing Projectile Steering",
      "Projectile Lifetime & Cleanup",
      "Object Pooling",
      "Melee Attack Design",
      "Frame Data Model",
      "Telegraph Hierarchy",
      "Cancel Windows",
      "Critical Hits & Damage Variance",
      "Critical Hit Formula",
      "Damage Variance",
      "Pseudo-Random Distribution",
      "Armor & Defense Models",
      "Model Comparison",
      "Armor Penetration",
      "Status Effects & Damage Over Time",
      "Common Status Effect Types",
      "Stacking Rules",
      "DoT Implementation",
      "Combo Systems",
      "Input Combo (Fighting Games)",
      "Chain Combo (Character Action Games)",
      "Combo Counter & Scaling",
      "Turn-Based Combat",
      "Turn Order Systems",
      "Timeline System (Pseudocode)",
      "Action Economy",
      "Difficulty Scaling & Damage Curves",
      "Stat Growth Models",
      "Damage Formula Examples",
      "Difficulty Adjustments",
      "Death, Respawn & Recovery",
      "Death State Machine",
      "Consequences of Death",
      "Combat Feel & Feedback",
      "Feedback Channels",
      "The White Flash",
      "Layering Feedback",
      "Anti-Patterns",
      "1. Damage Sponge",
      "2. Instant Death",
      "3. Stat Check Combat",
      "4. Invisible Damage",
      "5. Unreadable Hitboxes",
      "Decision Framework",
      "Cross-References"
    ]
  },
  {
    "id": "dialogue-narrative-theory",
    "title": "Dialogue & Narrative Systems — Theory & Concepts",
    "description": "This document covers engine-agnostic dialogue and narrative system design theory. For engine-specific implementations...",
    "category": "concept",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 45159,
    "sections": [
      "Table of Contents",
      "Dialogue Architecture Overview",
      "The Three-Layer Model",
      "Why Separation Matters",
      "Data Formats & Authoring",
      "Choosing a Format",
      "Data Node Structure",
      "Authoring Workflow",
      "Linear Dialogue",
      "Structure",
      "Advancement Logic",
      "Skip and Fast-Forward",
      "Branching Dialogue Trees",
      "Tree Structure",
      "Choice Filtering",
      "Tree Depth and Combinatorial Explosion",
      "Graph-Based Dialogue",
      "Graph Properties",
      "Hub-and-Spoke Pattern",
      "Visited-Node Tracking",
      "Ink, Yarn & Domain-Specific Languages",
      "Ink (Inkle)",
      "Yarn Spinner",
      "Choosing Between Them",
      "Custom DSL Justification",
      "Conditional Logic & World State",
      "Condition Types",
      "State Store Architecture",
      "Priority-Based Node Selection",
      "Character & Speaker Systems",
      "Character Definition",
      "Expression System",
      "Name Display Patterns",
      "Typewriter & Text Presentation",
      "Core Implementation",
      "Punctuation Pausing",
      "Speed Control",
      "Character-Specific Speeds",
      "Rich Text & Inline Effects",
      "Common Inline Tags",
      "Tag Processing Pipeline",
      "Text Effects Implementation",
      "Voice Acting & Audio Integration",
      "Architecture",
      "Voice + Typewriter Sync",
      "Unvoiced \"Blip\" Sounds",
      "Choice Systems & Consequence Tracking",
      "Choice Presentation Patterns",
      "Consequence Tracking",
      "The Butterfly Effect Problem",
      "Relationship & Affinity Systems",
      "Simple Affinity",
      "Multi-Axis Relationships",
      "Gift and Interaction Systems",
      "Diminishing Returns",
      "Journal, Quest Log & Narrative State",
      "Quest Data Model",
      "Quest State Machine",
      "Journal Entries",
      "Barks, Ambient Dialogue & Context Lines",
      "Bark Types",
      "Bark System Architecture",
      "Ambient Conversation",
      "Cutscenes & Scripted Sequences",
      "Cutscene Architecture",
      "Skipping Cutscenes",
      "Localization Considerations",
      "String Externalization",
      "Dialogue-Specific Localization Challenges",
      "Localization-Friendly Data Format",
      "Translation Pipeline for Dialogue",
      "Performance & Memory",
      "Lazy Loading",
      "String Memory",
      "Condition Evaluation Cost",
      "Anti-Patterns",
      "1. Hardcoded Dialogue in Code",
      "2. Monolithic Dialogue File",
      "3. Presentation Logic in Data",
      "4. No Fallback for Missing Data",
      "5. Untestable Narrative Logic",
      "Architecture Decision Framework",
      "Related Engine Guides"
    ]
  },
  {
    "id": "fog-of-war-theory",
    "title": "Fog of War -- Theory & Concepts",
    "description": "This document covers engine-agnostic fog of war and visibility system theory. For engine-specific implementations, se...",
    "category": "concept",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 15224,
    "sections": [
      "Visibility States",
      "The Fog Grid",
      "Line-of-Sight (Raycasting)",
      "Bresenham's Line",
      "Brute-Force Raycast FOV",
      "Symmetric vs Asymmetric Visibility",
      "Shadowcasting Algorithm",
      "How It Works",
      "Octant Transformation",
      "Scan Algorithm",
      "Vision Shapes",
      "Circular Vision",
      "Cone-Shaped Vision (Stealth Games)",
      "Multiple Vision Sources",
      "Elevation Blocking",
      "Dynamic Updates",
      "When to Recalculate",
      "Update Throttling",
      "Incremental Updates",
      "Fog Rendering",
      "The Naive Approach (Avoid)",
      "The Good Approach: Fog Texture + Blur",
      "Render Pipeline Order",
      "Fog Compositing",
      "Explored Rendering",
      "Smooth Transitions",
      "Entity Visibility",
      "Last-Known Information",
      "Rendering Ghosts",
      "Strategy Game Patterns",
      "Team-Based Shared Vision",
      "Competitive Fog (Re-closing)",
      "Building Sight Ranges",
      "Co-op Shared Exploration",
      "AI That Respects Fog",
      "Minimap Integration",
      "Performance Budget",
      "Approximate Timings",
      "Related Engine Guides"
    ]
  },
  {
    "id": "game-loop-theory",
    "title": "Game Loop -- Theory & Concepts",
    "description": "This document covers engine-agnostic game loop theory, including fixed vs variable timesteps, accumulator patterns, f...",
    "category": "concept",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 7027,
    "sections": [
      "The Core Problem",
      "Fixed vs Variable Timestep",
      "Variable Timestep",
      "Fixed Timestep",
      "The Accumulator Pattern (Best of Both)",
      "Spiral of Death Prevention",
      "Interpolation for Smooth Rendering",
      "Variable Render Rate",
      "Culling and Batching",
      "Frustum Culling",
      "Sprite Batching",
      "Overdraw",
      "Common Game Loop Patterns",
      "Pattern 1: Simple Fixed Timestep",
      "Pattern 2: Accumulator with Interpolation",
      "Pattern 3: Semi-Fixed Timestep",
      "Mobile-Specific Considerations",
      "Key Principles"
    ]
  },
  {
    "id": "input-handling-theory",
    "title": "Input Handling -- Theory & Concepts",
    "description": "This document covers engine-agnostic input handling theory, including input abstraction, buffering, rebinding, dead z...",
    "category": "concept",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 9440,
    "sections": [
      "Input Abstraction Layer",
      "Edge Detection",
      "Input Buffering",
      "Jump Buffering",
      "General Input Buffer (Ring Buffer)",
      "Typical Buffer Windows",
      "Input Consumption (Priority System)",
      "Gamepad Dead Zones",
      "Axial Dead Zone (Simple, Flawed)",
      "Radial Dead Zone (Preferred)",
      "Response Curves",
      "Typical Dead Zone Values",
      "Key Rebinding",
      "Rebinding UI Flow",
      "Simultaneous Multi-Device Input",
      "Touch Input",
      "Input Recording and Playback",
      "Haptic Feedback (Rumble)"
    ]
  },
  {
    "id": "lighting-2d-theory",
    "title": "2D Lighting -- Theory & Concepts",
    "description": "This document covers engine-agnostic 2D lighting and shadow theory. For engine-specific implementations, see the rele...",
    "category": "concept",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 5980,
    "sections": [
      "The Lightmap Approach",
      "Pipeline",
      "Multiply Blending",
      "Light Types",
      "Point Lights",
      "Falloff Curves",
      "Spot Lights",
      "Ambient Light",
      "2D Shadow Casting",
      "Algorithm Overview",
      "Visibility Polygon",
      "Performance Considerations",
      "Normal Map Lighting",
      "How It Works",
      "When to Use",
      "Light Cookies / Masking",
      "Flicker Effects",
      "Performance Guidelines",
      "Render Pipeline Order"
    ]
  },
  {
    "id": "networking-theory",
    "title": "Networking & Multiplayer -- Theory & Concepts",
    "description": "This document covers engine-agnostic multiplayer networking theory for games, including network architectures, state ...",
    "category": "concept",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 21592,
    "sections": [
      "Network Architectures",
      "Client-Server",
      "Peer-to-Peer (P2P)",
      "Relay Server (Hybrid)",
      "The Fundamental Problem: Latency",
      "Latency Ranges",
      "State Synchronization",
      "Full State Sync",
      "Delta Compression",
      "Quantization",
      "Interest Management",
      "Client-Side Prediction",
      "What to Predict",
      "Server Reconciliation",
      "Handling Mispredictions",
      "Entity Interpolation",
      "Extrapolation (Dead Reckoning)",
      "Lag Compensation",
      "Server-Side Rewind",
      "History Buffer",
      "Rollback Netcode",
      "Core Loop",
      "State Save/Load",
      "Rollback Budget",
      "Input Delay",
      "Tick Rate and Simulation",
      "Fixed Tick Rate",
      "Deterministic Simulation",
      "Transport Protocols",
      "UDP vs TCP",
      "Reliable UDP Patterns",
      "Channel Multiplexing",
      "Connection Management",
      "Handshake",
      "Heartbeat and Timeout",
      "Reconnection",
      "Matchmaking",
      "Skill-Based Matchmaking (SBMM)",
      "Match Quality",
      "Lobby vs Queue",
      "Security",
      "Never Trust the Client",
      "Common Cheats and Countermeasures",
      "Rate Limiting",
      "Bandwidth Optimization",
      "Packet Budgets",
      "Bit Packing",
      "Priority Accumulator",
      "Clock Synchronization",
      "Architecture Patterns Summary",
      "Choosing Your Architecture"
    ]
  },
  {
    "id": "particles-theory",
    "title": "Particle Systems -- Theory & Concepts",
    "description": "This document covers engine-agnostic particle system theory for 2D games. The concepts apply to any engine or framewo...",
    "category": "concept",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 6349,
    "sections": [
      "Two Fundamental Approaches",
      "Particle Properties",
      "Pool-Based Particle System",
      "Core Update Loop",
      "Core Draw Loop",
      "Emitter Patterns",
      "Burst Emission",
      "Continuous (Stream) Emission",
      "Blending Modes",
      "Particle Textures",
      "Common Effect Recipes",
      "Explosion",
      "Fire",
      "Smoke",
      "Trail",
      "Production Patterns",
      "Budget-Based Emission",
      "Pool Load Throttle",
      "Kill Bounds",
      "Velocity Delay Ramp",
      "Frustum-Culled Draw",
      "Cached Interpolation",
      "Performance Guidelines"
    ]
  },
  {
    "id": "pathfinding-theory",
    "title": "Pathfinding -- Theory & Concepts",
    "description": "This document covers engine-agnostic pathfinding theory for 2D games. All algorithms are presented in pseudocode. For...",
    "category": "concept",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 9387,
    "sections": [
      "A* Algorithm",
      "Heuristics",
      "A* Pseudocode",
      "Terrain Weights",
      "Dynamic Obstacles",
      "Jump Point Search (JPS)",
      "Flow Fields",
      "Algorithm",
      "Hierarchical Pathfinding (HPA*)",
      "Steps",
      "Navigation Mesh (2D)",
      "Path Smoothing",
      "Steering Behaviors",
      "Core Behaviors",
      "Flocking",
      "Spatial Hashing for Neighbor Queries",
      "Decision Guide",
      "Related Engine Guides",
      "Related Concept Docs"
    ]
  },
  {
    "id": "physics-theory",
    "title": "Physics & Collision -- Theory & Concepts",
    "description": "This document covers engine-agnostic 2D physics and collision detection theory. For engine-specific implementations, ...",
    "category": "concept",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 6809,
    "sections": [
      "Collision Detection",
      "AABB (Axis-Aligned Bounding Box)",
      "Circle vs Circle",
      "SAT (Separating Axis Theorem)",
      "Swept AABB (Continuous Collision Detection)",
      "Spatial Partitioning",
      "Spatial Hash",
      "Physics Integration",
      "Euler Integration (Semi-Implicit)",
      "Verlet Integration",
      "Distance Constraints (Ropes, Chains)",
      "Fixed Timestep",
      "Accumulator Pattern",
      "Render Interpolation",
      "Tile-Based Collision",
      "Efficient Resolution",
      "Axis Resolution Order",
      "Slope Tiles",
      "Trigger Zones (Sensors)",
      "One-Way Platforms",
      "Moving Platforms",
      "Deterministic Physics",
      "Typical Platformer Values"
    ]
  },
  {
    "id": "procedural-generation-theory",
    "title": "Procedural Generation -- Theory & Concepts",
    "description": "This document covers engine-agnostic procedural content generation theory for 2D games. For engine-specific implement...",
    "category": "concept",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 7402,
    "sections": [
      "Seeded Random",
      "Noise Functions",
      "Perlin Noise",
      "Fractal / Octave Noise",
      "Noise Type Guide",
      "BSP Dungeon Generation",
      "Algorithm",
      "Cellular Automata",
      "Algorithm",
      "Wave Function Collapse (WFC)",
      "Algorithm",
      "Adjacency Rules",
      "Room Templates and Handcrafted Chunks",
      "Random Walk / Drunkard's Walk",
      "Terrain Generation",
      "Height-Based",
      "Multi-Noise Biomes",
      "Validation and Guarantees",
      "Loot and Item Generation",
      "Weighted Random Selection",
      "Rarity Tiers",
      "Enemy Placement",
      "Related Engine Guides",
      "MonoGame",
      "Godot",
      "Core"
    ]
  },
  {
    "id": "scene-management-theory",
    "title": "Scene Management -- Theory & Concepts",
    "description": "This document covers engine-agnostic scene and game state management theory. For engine-specific implementations, see...",
    "category": "concept",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 6519,
    "sections": [
      "What is a Scene?",
      "What a Scene Typically Owns",
      "Scene Lifecycle",
      "Scene Stack Model",
      "Key Properties",
      "Scene Manager Operations",
      "Deferred Operations",
      "Visibility Walk (Draw)",
      "Update Walk",
      "Game State Machine",
      "Typical Flow",
      "State-to-Scene Mapping",
      "Scene Transitions",
      "Common Transition Types",
      "Loading Screens",
      "Pause System",
      "What Should Not Pause",
      "Overlay Scenes",
      "Scene Communication",
      "Composable Scene Subsystems"
    ]
  },
  {
    "id": "tilemap-theory",
    "title": "Tilemap Systems -- Theory & Concepts",
    "description": "This document covers engine-agnostic tilemap theory for 2D games. For engine-specific implementations, see the releva...",
    "category": "concept",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 6180,
    "sections": [
      "Core Concepts",
      "Data Structure",
      "Map Formats",
      "Tilemap Rendering",
      "Viewport Culling",
      "Tile Flipping",
      "Multiple Tile Layers",
      "Autotiling",
      "Bitmask Approach",
      "4-Bit Computation",
      "8-Bit with Corner Collapse",
      "When to Recompute",
      "Tile Collision",
      "Collision Layer",
      "Slope Tiles",
      "Chunk-Based Loading",
      "Load Radius",
      "Chunk Coordinates",
      "Animated Tiles",
      "Tile Properties and Metadata",
      "Isometric and Hexagonal Tilemaps",
      "Isometric",
      "Hexagonal",
      "Performance Checklist"
    ]
  },
  {
    "id": "tweening-theory",
    "title": "Tweening & Easing -- Theory & Concepts",
    "description": "This document covers engine-agnostic tweening and easing theory. For engine-specific implementations, see the relevan...",
    "category": "concept",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 6128,
    "sections": [
      "What is Tweening?",
      "Core Parameters",
      "Basic Update Loop",
      "Easing Functions",
      "Easing Families",
      "Common Formulas",
      "Choosing an Easing",
      "Tween Management",
      "Tween Manager",
      "Object Pooling",
      "Tween Features",
      "Delay",
      "Looping",
      "Pause / Resume / Cancel",
      "Chaining and Sequencing",
      "OnComplete Chaining",
      "Tween Sequences",
      "Tween Groups (Parallel)",
      "Multi-Type Interpolation",
      "Common Game Uses",
      "Tweens vs Coroutines"
    ]
  },
  {
    "id": "ui-theory",
    "title": "UI Architecture — Theory & Concepts",
    "description": "Engine-agnostic theory for game UI architecture. Covers rendering paradigms, layout systems, control patterns, screen...",
    "category": "concept",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 40796,
    "sections": [
      "Table of Contents",
      "1. UI Rendering Paradigms",
      "Immediate Mode",
      "Retained Mode",
      "Hybrid Approach",
      "Direct Draw (No Framework)",
      "2. Layout System Architecture",
      "Position Models",
      "Size Models",
      "Layout Containers",
      "Anchoring & Margins",
      "Layout Calculation Pipeline",
      "3. The Visual Tree",
      "Tree Properties",
      "Z-Order vs Tree Order",
      "4. Common Controls & Patterns",
      "Basic Controls",
      "Compound Controls",
      "Game-Specific Controls",
      "5. Screen & Layer Management",
      "Screen Stack",
      "Layer Model",
      "Modal vs Non-Modal",
      "Transition Types",
      "6. HUD Design",
      "Information Hierarchy",
      "HUD Layout Zones",
      "Animated Value Changes",
      "Damage Direction Indicators",
      "7. Inventory & Container UI",
      "Slot-Based Inventory",
      "Drag-and-Drop",
      "Item Tooltip",
      "8. Dialogue & Text Systems",
      "Typewriter Effect",
      "Dialogue Tree Architecture",
      "Rich Text & Inline Effects",
      "9. Theming & Visual States",
      "Control States",
      "Theme System",
      "Pixel-Art UI Theming",
      "10. Data Binding & Reactive UI",
      "The Synchronization Problem",
      "Observer Pattern (Event-Driven)",
      "Polling Pattern (Frame-Driven)",
      "Recommended Hybrid",
      "11. Input Handling & Navigation",
      "Multi-Input Support",
      "Focus System",
      "Spatial Navigation",
      "Input Action Glyph Mapping",
      "12. Tooltips, Popups & Contextual UI",
      "Tooltip System",
      "Contextual Menus (Right-Click)",
      "Confirmation Dialog Pattern",
      "Notification Toast System",
      "13. Animation & Transitions",
      "Common UI Animations",
      "Easing Functions",
      "Staggered Entry",
      "14. Localization",
      "Text Externalization",
      "Localization Challenges for Games",
      "Pseudolocalization",
      "15. Accessibility",
      "Essential Game UI Accessibility",
      "Color Contrast Guidelines",
      "Minimum Touch/Click Targets",
      "16. Resolution & Scaling",
      "The Resolution Problem",
      "Scaling Strategies",
      "Safe Area",
      "Pixel-Perfect UI",
      "17. Performance",
      "Rendering Cost",
      "Layout Cost",
      "Virtualized Scrolling",
      "18. Anti-Patterns",
      "1. Spaghetti Updates",
      "2. Layout Every Frame",
      "3. Deep Nesting for Positioning",
      "4. Hardcoded Screen Positions",
      "5. Ignoring Gamepad Navigation",
      "6. One Giant UI Scene",
      "7. No Transition on State Change",
      "19. UI Architecture Decision Framework",
      "Related Engine Guides"
    ]
  },
  {
    "id": "C1",
    "title": "C1 — Genre Reference",
    "description": "Comprehensive map of 2D game genres, the core mechanics each requires, and which toolkit systems serve them. All refe...",
    "category": "catalog",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 13180,
    "sections": [
      "Action Platformer (Celeste, Hollow Knight, Dead Cells)",
      "Metroidvania (Ori, Guacamelee)",
      "Top-Down Action RPG (Zelda: ALTTP, Hyper Light Drifter)",
      "Turn-Based RPG (Final Fantasy, Octopath)",
      "Roguelike / Roguelite (Binding of Isaac, Dead Cells, Hades)",
      "Bullet Hell / Shoot 'em Up (Touhou, Enter the Gungeon, Ikaruga)",
      "Tower Defense (Bloons TD, Kingdom Rush)",
      "Real-Time Strategy (StarCraft-style, simplified 2D)",
      "Puzzle (Tetris, Baba Is You, Into the Breach)",
      "Card Game / Deck Builder (Slay the Spire, Balatro)",
      "Farming / Life Sim (Stardew Valley, Littlewood)",
      "Fighting Game (Street Fighter, Skullgirls-style)",
      "Visual Novel / Narrative (Ace Attorney, VA-11 Hall-A)",
      "Sandbox / Survival (Terraria, Noita)",
      "Rhythm Game (Crypt of the NecroDancer, Muse Dash)",
      "Vampire Survivors / Swarm Survival",
      "Idle / Incremental (Cookie Clicker, Melvor Idle)",
      "Physics Puzzle (Angry Birds, Cut the Rope, World of Goo)"
    ]
  },
  {
    "id": "C2",
    "title": "C2 — Game Feel & Genre Design Craft",
    "description": "Genre-specific mechanics with concrete tuning values, the complete \"juice\" toolkit (screen shake, hitstop, squash/str...",
    "category": "catalog",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 19111,
    "sections": [
      "Platformers: The Science of Movement Feel",
      "Key Techniques with Specific Values",
      "Jump Curve Design",
      "Level Design: Teach-Test-Twist",
      "Metroidvanias: Ability Gating and Interconnected Worlds",
      "Gate Types",
      "Map Design Principles",
      "Power Progression",
      "Top-Down Action/Adventure: Dungeon Design",
      "Roguelikes/Roguelites: Run-Based Design",
      "Procedural Generation Approaches",
      "Permadeath Design",
      "Item Synergy Systems",
      "Turn-Based RPGs and Tactical Games",
      "The Four Virtues of Tactical Combat",
      "Key Design Techniques",
      "Notable Action Economy Innovations",
      "Puzzle Games: Teaching Without Words",
      "Three Types of Puzzle Difficulty (Ramp Separately)",
      "The Witness Method: 5 Conditions for Wordless Instruction",
      "Shmups: Designing the Negative Space",
      "Pattern Types",
      "Design Parameters",
      "Strategy and Tower Defense: Resource Tension",
      "Narrative and Visual Novels: Micro-Reactivity",
      "Branching Narrative Patterns",
      "Key Design Insights",
      "The Complete \"Juice\" Toolkit",
      "What Game Feel Actually Is",
      "Screen Shake",
      "Hitstop",
      "Squash and Stretch",
      "Particle Effects Hierarchy",
      "Flash Effects",
      "2D Camera Systems",
      "Camera-Window (Dead Zone)",
      "Lerp-Smoothing (Frame-Rate Independent)",
      "Platform-Snapping",
      "Dual-Forward Focus (Super Mario World)",
      "Pixel-Art Tip",
      "Input Responsiveness",
      "Combo System Input Buffering",
      "Timing Window Guidelines",
      "Animation Principles Applied to Games",
      "Anticipation vs Input Lag",
      "Easing Functions",
      "Audio as Game Feel",
      "Impact Sound Layering",
      "Variation and Pitch",
      "Dynamic Music Through Vertical Layering",
      "Vlambeer's Implementation Priority Tiers",
      "Priority Order for Maximum Impact",
      "Common Mistakes",
      "Related Engine Guides",
      "MonoGame",
      "Godot",
      "Core Theory"
    ]
  },
  {
    "id": "E6",
    "title": "E6 — Game Design Fundamentals",
    "description": "Design frameworks, player motivation models, feedback systems, and design philosophy — the conceptual foundations tha...",
    "category": "catalog",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 17781,
    "sections": [
      "The Canonical Frameworks",
      "The MDA Framework",
      "Design Pillars",
      "Player Motivation",
      "Bartle's Taxonomy (1996)",
      "Self-Determination Theory",
      "Quantic Foundry's Model",
      "Nicole Lazzaro's 4 Keys to Fun",
      "Feedback Loops and Risk/Reward",
      "Pacing, Tension, and Flow",
      "Iteration Is Everything",
      "The Designer Spectrum: Auteur to Player-Servant",
      "Depth from Simplicity",
      "Emergence: Systems That Surprise Their Creators",
      "Constraints as Creative Engines",
      "Three Designer Philosophies Worth Internalizing",
      "Sid Meier's \"Interesting Decisions\"",
      "Jonathan Blow's \"Listening to the System\"",
      "Miyamoto's \"Start with the Toy\"",
      "Indie Scope Management",
      "Playtesting: What Players Do vs. What They Say",
      "Through-Lines"
    ]
  },
  {
    "id": "E7",
    "title": "E7 — Emergent Puzzle Design",
    "description": "Emergent vs contrived puzzles, chemistry engine architecture, rule-as-object design, combinatorial mechanics, and pro...",
    "category": "catalog",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 11479,
    "sections": [
      "What Makes Puzzles Emergent Rather Than Contrived",
      "How Breath of the Wild Builds Its Chemistry of Emergence",
      "The Three Rules",
      "Why It Works",
      "Element-Material Interaction Flow",
      "Element-Material Interaction Matrix",
      "Divinity: Original Sin 2's Surface System",
      "Baba Is You: Rule-as-Object Design",
      "Orthogonal Unit Differentiation",
      "Additive vs Multiplicative Mechanics",
      "Procedural Puzzle Generation Techniques",
      "Grammar-Based Generation",
      "Constraint Satisfaction",
      "Wave Function Collapse (WFC)",
      "Spelunky's Approach (Gold Standard for 2D)",
      "8 Actionable Patterns for Building Emergent Puzzle Systems",
      "1. Element-Material Interaction Matrix",
      "2. Circular System Dependencies",
      "3. Backward Solution Design",
      "4. Guaranteed Path + Emergent Content",
      "5. Attribute + Process + Combination",
      "6. Non-Mandatory Emergent Puzzles",
      "7. Real-World Intuition as Tutorial",
      "8. Consistent Global Rules"
    ]
  },
  {
    "id": "G_stitch_ui_workflow",
    "title": "G — Stitch UI Workflow for Game Development",
    "description": "",
    "category": "catalog",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 52972,
    "sections": [
      "Table of Contents",
      "1. What Is Google Stitch?",
      "Why Game Developers Should Care",
      "2. March 2026 Update — The AI-Native Canvas",
      "Infinite Canvas",
      "Voice Canvas",
      "Vibe Design",
      "Direct Edits",
      "Design Agent & Agent Manager",
      "DESIGN.md",
      "3. Why Use Stitch for Game UI?",
      "The Problem",
      "The Stitch Shortcut",
      "What Stitch Does Well for Games",
      "What Stitch Does NOT Do",
      "4. Game UI Prompt Engineering",
      "Anatomy of a Good Game UI Prompt",
      "Key Prompt Elements for Game UI",
      "Example Prompts by Screen Type",
      "Prompt Anti-Patterns",
      "5. Prototyping Core Game Screens",
      "Screen Categories",
      "HUD (Heads-Up Display)",
      "Inventory Systems",
      "Menu Screens",
      "6. Prototyping Game Flows",
      "Core Game Flow",
      "How to Prototype Flows in Stitch",
      "Flow Design Tips",
      "Example Flow Prompt Sequence",
      "7. Voice Canvas for Rapid Iteration",
      "When to Use Voice vs Text",
      "Voice Iteration Workflow for Game UI",
      "Voice Prompt Examples for Game UI",
      "8. Vibe Design for Game Aesthetics",
      "Game Aesthetic Vibes — Prompt Templates",
      "Using Vibe Design to Establish a Style Guide",
      "9. DESIGN.md for Game Style Systems",
      "Creating a Game DESIGN.md",
      "Color Palette",
      "Typography",
      "Spacing",
      "UI Elements",
      "Rules",
      "Using DESIGN.md Across Screens",
      "Extracting Design Systems from References",
      "10. Export Pipeline — Stitch to Game Engine",
      "What to Extract from Stitch Output",
      "The Extract-and-Implement Workflow",
      "What Does NOT Transfer",
      "11. Integration with MonoGame",
      "Stitch → Gum.MonoGame",
      "Stitch → ImGui.NET (Debug/Dev UI)",
      "MonoGame-Specific Extraction Tips",
      "12. Integration with Godot",
      "Stitch → Godot Control Nodes",
      "Inventory screen — layout values extracted from Stitch prototype",
      "Godot-Specific Tips",
      "13. Advanced Workflows",
      "Multi-Resolution Prototyping",
      "Competitive Analysis Workflow",
      "Collaborative Design Reviews",
      "A/B Testing UI Variants",
      "Screenshot Comparison Loop",
      "14. Limitations & What Stitch Is Not",
      "Stitch Generates Web UI, Not Game UI",
      "Resolution Mismatch",
      "No State Management",
      "No Sprite/Texture Generation",
      "Font Rendering Differences",
      "15. Best Practices",
      "Do",
      "Don't",
      "The 80/20 Rule",
      "Recommended Workflow",
      "16. Quick Reference — Prompt Templates",
      "HUD Prompt",
      "Inventory Prompt",
      "Menu Prompt",
      "Shop Prompt",
      "Dialogue Box Prompt",
      "Settings Screen Prompt",
      "Game Over Prompt",
      "Related Guides"
    ]
  },
  {
    "id": "R4",
    "title": "R4 — Game Design Resources",
    "description": "GDC talks, books by tier, pattern wikis, YouTube channels, and MonoGame community resources — everything a 2D develop...",
    "category": "catalog",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 9268,
    "sections": [
      "The 10 GDC Talks Every 2D Developer Should Watch",
      "Juice It or Lose It (2012)",
      "The Art of Screenshake (2013)",
      "Scroll Back: The Theory and Practice of Cameras in Side-Scrollers (2015)",
      "Designing Celeste (2017)",
      "Twenty Years, Twenty Lessons (2016)",
      "Interesting Decisions (2012)",
      "Change and Constant: Breaking Conventions with BotW (2017)",
      "Breathing Life into Greek Myth: The Dialogue of Hades (2021)",
      "One More Run: The Making of Spelunky 2 (2021)",
      "30 Things I Hate About Your Game Pitch (2017)",
      "Books Ranked by Impact",
      "Tier 1 — Read These",
      "Tier 2 — Highly Valuable",
      "Tier 3 — Deep Reference",
      "Free Pattern Libraries and Reference Tools",
      "YouTube Channels and Ongoing Education",
      "Game Maker's Toolkit (Mark Brown, ~1.7M subscribers)",
      "Other Essential Channels",
      "MonoGame-Specific Resources",
      "Notable MonoGame Games"
    ]
  },
  {
    "id": "G11",
    "title": "G11 — Programming Principles",
    "description": "Foundational principles applied to game development with MonoGame + Arch ECS.",
    "category": "guide",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 6704,
    "sections": [
      "SOLID Principles",
      "Single Responsibility Principle (SRP)",
      "Open/Closed Principle (OCP)",
      "Liskov Substitution Principle (LSP)",
      "Interface Segregation Principle (ISP)",
      "Dependency Inversion Principle (DIP)",
      "DRY, KISS, YAGNI",
      "Composition Over Inheritance",
      "Related Guides"
    ]
  },
  {
    "id": "G12",
    "title": "G12 — Design Patterns",
    "description": "Game-specific design patterns with full implementations for the MonoGame + Arch ECS stack.",
    "category": "guide",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 8628,
    "sections": [
      "Observer Pattern / Event System",
      "Event Bus (Decoupled Communication)",
      "Command Pattern",
      "State Machines",
      "Service Locator (Singleton Alternative)",
      "Strategy Pattern",
      "Flyweight Pattern",
      "Factory Pattern"
    ]
  },
  {
    "id": "G14",
    "title": "G14 — Data Structures",
    "description": "",
    "category": "guide",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 30408,
    "sections": [
      "1. Ring Buffer (Circular Buffer)",
      "Generic Implementation",
      "Usage Patterns",
      "2. Priority Queue (.NET 6+)",
      "A* Pathfinding (Primary Use)",
      "Event Scheduling System",
      "Turn-Based Initiative",
      "3. Bit Flags & Collision Layers",
      "Collision Layer Setup",
      "Collision Matrix",
      "ECS Component Masks",
      "Bit Manipulation Utilities",
      "4. Spatial Data Structures",
      "Choosing the Right One",
      "Spatial Hash (Full Implementation)",
      "Uniform Grid (Fixed-Size World)",
      "Quadtree",
      "Spatial Structure Comparison",
      "5. Object Pools",
      "Generic Object Pool",
      "Pooled Bullet System (ECS Pattern)",
      "Array-Based Pool (Zero GC)",
      "6. ECS-Friendly Data Layouts",
      "Structure of Arrays (SoA) vs Array of Structures (AoS)",
      "Why This Matters in Arch",
      "Hot/Cold Splitting",
      "Avoiding Archetype Fragmentation",
      "7. Specialized Game Structures",
      "Sparse Set",
      "Free List (Index Recycling)",
      "Flat 2D Array Helpers",
      "8. When to Use What — Decision Guide",
      "Performance Rules of Thumb"
    ]
  },
  {
    "id": "G18",
    "title": "G18 — Game Programming Patterns",
    "description": "19 game programming patterns from Robert Nystrom's Game Programming Patterns, adapted for MonoGame + Arch ECS develop...",
    "category": "guide",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 33639,
    "sections": [
      "Pattern Overview",
      "Design Patterns Revisited",
      "Command",
      "Flyweight",
      "Observer",
      "Prototype",
      "Singleton",
      "State",
      "Sequencing Patterns",
      "Double Buffer",
      "Game Loop",
      "Update Method",
      "Behavioral Patterns",
      "Bytecode",
      "Subclass Sandbox",
      "Type Object",
      "Decoupling Patterns",
      "Component",
      "Event Queue",
      "Service Locator",
      "Optimization Patterns",
      "Data Locality",
      "Dirty Flag",
      "Object Pool",
      "Spatial Partition",
      "Pattern Relationships & Synergies",
      "Implementation Priority Matrix",
      "Architecture Guidelines",
      "Simplicity First",
      "Performance Awareness",
      "Decoupling Over Coupling",
      "Data-Driven Design",
      "Know When to Break the Rules"
    ]
  },
  {
    "id": "E4",
    "title": "E4 — Game Dev Project Management",
    "description": "",
    "category": "playbook",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 44186,
    "sections": [
      "Table of Contents",
      "Vertical Slice Development",
      "Vertical Slice Checklist",
      "When Slicing Gets Hard",
      "Task Structure: Five Levels",
      "Level 1: Design Pillars (3–5 statements)",
      "Level 2: Major Milestones",
      "Level 3: Feature Categories",
      "Level 4: Implementation Tasks",
      "Level 5: Bug Tracking",
      "Scope Management",
      "MoSCoW Prioritization",
      "The Polaris Framework",
      "Living Game Design Document",
      "Scope Creep Defenses",
      "The 80/20 Rule of Game Features",
      "Kanban for Game Devs",
      "Minimum Viable Board",
      "Column Rules",
      "When Kanban Breaks Down",
      "Risk Management & Pre-Mortem",
      "Running a Pre-Mortem",
      "Risk Register",
      "The \"Bus Factor\" for Solo Devs",
      "Energy Management & Burnout Prevention",
      "The Energy Model",
      "Burnout Warning Signs",
      "Prevention Strategies",
      "Recovery from Burnout",
      "Project Health Metrics",
      "Core Metrics",
      "Monthly Health Check Template",
      "Month [X] Health Check — [Date]",
      "Metrics",
      "What went well",
      "What's stuck",
      "Biggest risk right now",
      "Next month's focus",
      "The Pivot Decision",
      "Signals It's Time to Consider Pivoting",
      "Signals to Keep Going",
      "Types of Pivots",
      "The Kill Criteria",
      "Kill Criteria",
      "After the Decision",
      "Financial Planning for Game Dev",
      "Calculate Your Runway",
      "The Decision Date",
      "Revenue Planning",
      "Costs Most Solo Devs Forget",
      "Tool Recommendations",
      "Tool Selection Principles",
      "Version Control Workflow",
      "Branching Strategy",
      "Tag Releases",
      "Git LFS",
      "Workflow Rules",
      "Technical Debt Management",
      "When to Refactor",
      "When NOT to Refactor",
      "The Strangler Fig Pattern",
      "Prototype vs Production Code",
      "Allocating Debt Time",
      "Build Automation",
      "GitHub Actions Template",
      "Automated Deployment",
      "Build Verification Checklist",
      "Documentation That Compounds",
      "Architecture Decision Records",
      "Living Game Design Document (DESIGN.md)",
      "Weekly Development Notes",
      "Public Devlog",
      "ECS-Specific Documentation",
      "Documentation Minimum Viable Set",
      "Lessons from Successful Solo Developers",
      "Pattern 1: Low Expectations Enable Great Work",
      "Pattern 2: Process Over Tools",
      "Pattern 3: Strategic Breaks",
      "Pattern 4: Failure Is Prerequisite",
      "Pattern 5: Known Tech Stack",
      "The Critical Social Milestone",
      "The Fix/Polish Phase",
      "What Polish Actually Means",
      "Polish Prioritization",
      "Common Project Management Mistakes",
      "1. Planning the Whole Game Before Building",
      "2. Tracking Time Instead of Output",
      "3. Ignoring the \"Dark Middle\"",
      "4. Comparing to Other Projects",
      "5. Never Showing Anyone",
      "6. Sunk Cost Continuation",
      "Cross-References"
    ]
  },
  {
    "id": "E9",
    "title": "E9 — Game Dev Playbook: AI Tools and Project Management",
    "description": "AI amplifies both productivity and chaos. Without deliberate systems for tracking progress, maintaining creative visi...",
    "category": "playbook",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 49796,
    "sections": [
      "Table of Contents",
      "AI and Game Architecture: Where It Works",
      "ECS (Entity Component System)",
      "Scene Tree / Node-Based (Godot)",
      "Traditional OOP (Unity, custom engines)",
      "The Critical Boundary",
      "AI Coding Tool Workflows",
      "The Knowledge Gap Problem",
      "Tool-Specific Patterns",
      "The Effective Solo Dev AI Workflow",
      "Realistic Productivity Expectations",
      "The Productivity Matrix",
      "Cognitive Atrophy Risk",
      "The AI Quality Pipeline",
      "The Five-Stage Pipeline",
      "Code Review Checklist for AI Output",
      "The \"Looks Right, Isn't Right\" Problem",
      "AI Art Pipeline",
      "The Visibility Rule (2026 Consensus)",
      "The 70/30 Rule",
      "Style Consistency",
      "AI Art for Prototyping (Safe Uses)",
      "Goal Hierarchy and Kanban",
      "The 5-Level Goal Hierarchy",
      "WIP Limits",
      "Social Milestones",
      "Tool Recommendations",
      "The Two-Tool Pattern",
      "Tools to Avoid Over-Investing In",
      "The Solo Dev Testing Strategy",
      "What to Test (Priority Order)",
      "What NOT to Test",
      "The Playtesting Cadence",
      "AI-Assisted Testing",
      "Version Control for Solo Devs",
      "The Solo Dev Git Workflow",
      "Commit Discipline",
      "What to Version Control",
      "Branching for Risky Experiments",
      "Backup Beyond Git",
      "Patterns from Successful Solo Games",
      "The Passion Project Pattern",
      "The Engine Doesn't Matter (Much)",
      "The Constraint Advantage",
      "The \"Ship Ugly, Polish Later\" Pattern",
      "Scope Creep and AI Amplification",
      "Antidotes",
      "The Polaris Framework (Fix/Polish Phase)",
      "Health, Sustainability & The Long Haul",
      "Work Schedule",
      "Energy Management",
      "The Motivation Cycle",
      "Isolation and Mental Health",
      "Community Building & Player Management",
      "When to Start",
      "Discord Server Structure (Minimal Viable)",
      "Managing Feedback as a Solo Dev",
      "The Content Creator Relationship",
      "Launch Timing & Market Awareness",
      "Windows to Avoid",
      "Windows to Target",
      "The Wishlist Math",
      "Market Research (Minimal Viable)",
      "Living Documentation",
      "The Four-Element System",
      "AI-Friendly Project Documentation",
      "Decision Journal Workflow",
      "The Process",
      "ADR Template (Minimal)",
      "Context",
      "Options Considered",
      "Decision",
      "Consequences",
      "When to Write an ADR",
      "Planning Session Workflow",
      "The Process",
      "Weekly Review (15 Minutes)",
      "The Solo Dev Tech Stack Decision",
      "Engine Decision Framework",
      "Build vs Buy",
      "Libraries: Red Flags",
      "The AI+PM Feedback Loop",
      "The Positive Loop",
      "The Negative Loop",
      "The Bottom Line",
      "Common Mistakes",
      "1. \"I'll Clean Up the AI Code Later\"",
      "2. Optimizing the PM System Instead of the Game",
      "3. Building an Engine Instead of a Game",
      "4. Skipping the Prototype",
      "5. Solo Dev Crunch",
      "6. Comparing Your Progress to Others",
      "7. Infinite Polishing",
      "Related Docs"
    ]
  },
  {
    "id": "P0",
    "title": "🎮 How to Make a 2D Game: From Idea to Launch",
    "description": "",
    "category": "playbook",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 62404,
    "sections": [
      "The Master Playbook",
      "How to Use This Document",
      "The Journey at a Glance",
      "The Stack You're Building With",
      "🗓️ Week 1 · ⏱️ ~10-15 hours",
      "🎯 Goal",
      "Why This Phase Matters",
      "Step 1: Find Your Game Idea",
      "Step 2: Define Your Game's Identity",
      "Step 3: Feasibility Check",
      "Step 4: Write the 1-Page Pitch",
      "Elevator Pitch",
      "Core Mechanic",
      "Design Pillars",
      "Genre & Perspective",
      "Target Audience",
      "Scope",
      "Inspirations",
      "Unique Hook",
      "🚦 Decision Gate: Ready for Pre-Production?",
      "⚠️ Common Mistakes",
      "🗓️ Weeks 2-3 · ⏱️ ~30-40 hours",
      "🎯 Goal",
      "Why This Phase Matters",
      "Step 1: Write the Game Design Document",
      "Step 2: Choose Your Art Direction",
      "Step 3: Scope Into Milestones",
      "Step 4: Identify and Prototype the Risky Mechanic",
      "Step 5: Set Up the Project",
      "🚦 Decision Gate: Ready for Vertical Slice?",
      "⚠️ Common Mistakes",
      "🗓️ Weeks 4-8 · ⏱️ ~100-125 hours",
      "🎯 Goal",
      "What a Vertical Slice IS and ISN'T",
      "Implementation Order",
      "🚦 Decision Gate: The Most Important Gate",
      "⚠️ Common Mistakes",
      "🗓️ Weeks 9-16 · ⏱️ ~200-250 hours",
      "🎯 Goal",
      "The Alpha Mindset",
      "System Build Order",
      "Alpha Testing Checklist",
      "🚦 Decision Gate: Ready for Beta?",
      "⚠️ Common Mistakes",
      "🗓️ Weeks 17-22 · ⏱️ ~150-175 hours",
      "🎯 Goal",
      "The Beta Mindset",
      "Weeks 17-18: Content Completion",
      "Weeks 19-20: The Polish Pass",
      "Weeks 21-22: Testing, Accessibility & Performance",
      "🚦 Decision Gate: Ready for Release Candidate?",
      "⚠️ Common Mistakes",
      "🗓️ Weeks 23-24 · ⏱️ ~40-60 hours",
      "🎯 Goal",
      "Platform Builds",
      "Store Page & Marketing",
      "Achievement & Online Integration",
      "Crash Reporting",
      "Final Testing Checklist",
      "🚦 Decision Gate: Ready to Launch?",
      "⚠️ Common Mistakes",
      "🗓️ Launch Day + Ongoing",
      "🎯 Goal",
      "Launch Day",
      "Post-Launch Support",
      "Community & Modding",
      "The Post-Mortem",
      "What's Next?",
      "Reference Docs",
      "Explanation Docs",
      "Guide Docs",
      "Catalog Docs",
      "Playbook Docs",
      "Time Estimates for Common Features (Solo Dev)"
    ]
  },
  {
    "id": "P10",
    "title": "14 — System Integration Map",
    "description": "",
    "category": "playbook",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 49121,
    "sections": [
      "1. The Big Picture",
      "2. Dependency Graph",
      "Core Layer",
      "Infrastructure Layer",
      "Gameplay Layer",
      "Content Layer",
      "Polish Layer",
      "Ship Layer",
      "ASCII Dependency Flow",
      "3. Implementation Order",
      "Phase 1 — Foundation (Week 1–2)",
      "Phase 2 — Core Gameplay (Week 3–4)",
      "Phase 3 — Systems (Week 5–8)",
      "Phase 4 — Polish (Week 9–12)",
      "Phase 5 — Ship (Week 13+)",
      "4. System-to-Doc Reference Table",
      "G-Series: Guides (63 docs)",
      "R-Series: Reference (4 docs)",
      "E-Series: Essays (9 docs)",
      "C-Series: Craft Guides (2 docs)",
      "5. Genre-Specific Build Orders",
      "🏃 Platformer",
      "⚔️ Top-Down RPG",
      "🎲 Roguelike",
      "🧩 Puzzle",
      "🏰 Isometric",
      "6. System Interaction Patterns",
      "Pattern 1: Input → Gameplay Flow",
      "Pattern 2: ECS System Communication",
      "Pattern 3: Scene Lifecycle",
      "Pattern 4: Render Pipeline Order",
      "7. The \"What Do I Need?\" Checklist",
      "Player Systems",
      "World Building",
      "NPCs & AI",
      "Visuals",
      "UI & Menus",
      "Persistence & Meta",
      "Polish & Feel",
      "Shipping",
      "8. Cross-Cutting Concerns",
      "Input (G7) — Touches Everything Interactive",
      "Rendering (G2) — Everything Visible",
      "Audio (G6) — Ambient Everywhere",
      "Debugging (G16) — Dev-Only Overlay",
      "Profiling (G33) — Know Your Bottlenecks",
      "Quick Navigation"
    ]
  },
  {
    "id": "P11",
    "title": "P11 · Polish & Juice Checklist",
    "description": "This checklist is your polish-phase companion. Work through it systematically after your core gameplay loop is solid....",
    "category": "playbook",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 26842,
    "sections": [
      "1 · What Is Juice?",
      "The 3 Pillars of Juice",
      "2 · Screen Shake",
      "Checklist",
      "Implementation Pattern",
      "Tuning Guide",
      "3 · Hitstop / Freeze Frames",
      "Checklist",
      "Implementation Pattern",
      "4 · Particles",
      "Checklist",
      "Design Tips",
      "5 · Squash & Stretch",
      "Checklist",
      "Implementation Pattern",
      "6 · Camera Effects",
      "Checklist",
      "Tuning",
      "7 · Tweens & Easing",
      "Checklist",
      "Common Curves",
      "8 · Screen Transitions",
      "Checklist",
      "Implementation Notes",
      "9 · UI Juice",
      "Checklist",
      "10 · Audio Juice",
      "Checklist",
      "Audio Juice Quick Wins",
      "11 · Color & Flash",
      "Checklist",
      "Implementation Pattern: White Flash",
      "12 · Time Manipulation",
      "Checklist",
      "Implementation Notes",
      "13 · Post-Processing",
      "Checklist",
      "⚠️ Post-Processing Pitfalls",
      "14 · Environmental Polish",
      "Checklist",
      "Design Philosophy",
      "15 · The Polish Priority List",
      "The 80/20 Rule of Juice",
      "16 · The \"Before & After\" Test",
      "How to Do It",
      "What This Proves",
      "Recording Tips",
      "Quick Reference: The Full Checklist",
      "🔴 Critical (Do First)",
      "🟠 High Priority",
      "🟡 Medium Priority",
      "🟢 Nice to Have"
    ]
  },
  {
    "id": "P12",
    "title": "P12 — Performance Budget Template",
    "description": "",
    "category": "playbook",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 234,
    "sections": []
  },
  {
    "id": "P13",
    "title": "P13 — Release Build Pipeline",
    "description": "A step-by-step guide for building, testing, signing, and uploading release builds of your MonoGame DesktopGL game. Th...",
    "category": "playbook",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 35735,
    "sections": [
      "1. Build Configurations",
      "Debug vs Release vs Distribution",
      "Creating a Distribution Configuration",
      ".NET Publish Basics",
      "Self-Contained vs Framework-Dependent",
      "Single-File Publish",
      "Trimming Considerations",
      "2. Windows Build",
      "Step-by-Step",
      "Testing on a Clean Machine",
      "Common Windows Issues",
      "Code Signing (Optional)",
      "Creating an Installer (Inno Setup)",
      "3. Linux Build",
      "Step-by-Step",
      "Creating an AppImage",
      "Testing",
      "Steam Runtime Considerations",
      "Common Linux Issues",
      "4. macOS Build",
      "Step-by-Step",
      "Creating a .app Bundle",
      "Code Signing",
      "Notarization",
      "Creating a DMG",
      "Common macOS Issues",
      "5. Steam Upload",
      "Steamworks Setup",
      "Depot Configuration",
      "SteamPipe Build Scripts",
      "Uploading with steamcmd",
      "Branch Management",
      "Build Verification",
      "Launch Configuration",
      "Steam Input API",
      "6. itch.io Upload",
      "butler CLI Setup",
      "Uploading Builds",
      "Versioning",
      "Channel Naming Conventions",
      "Setting Up the itch.io Page",
      "Checking Upload Status",
      "7. Content Pipeline Build",
      "How MonoGame Content Works in Release",
      "Ensuring Content is Included",
      "Content.mgcb Configuration for Release",
      "Pre-Building Content",
      "Common Content Pipeline Errors in Release",
      "8. Pre-Release Testing Checklist",
      "Core Functionality",
      "Assets & Content",
      "Debug Code",
      "Performance",
      "Platform-Specific",
      "Release Infrastructure",
      "Fresh Install Test",
      "9. Version Numbering",
      "Semantic Versioning for Games",
      "Embedding Version in the Build",
      "Displaying Version In-Game",
      "Git Tags for Releases",
      "10. Automated Build Pipeline",
      "GitHub Actions CI/CD",
      "Example Workflow",
      "What This Does",
      "Adding Steam/itch.io Upload to CI",
      "Secrets You'll Need",
      "11. Hotfix Process",
      "Step 1: Assess Severity",
      "Step 2: Fix on a Branch",
      "Step 3: Test",
      "Step 4: Tag and Build",
      "Step 5: Push the Update",
      "Step 6: Communicate",
      "12. Build Checklist Template",
      "Release Build Checklist — v____"
    ]
  },
  {
    "id": "P14",
    "title": "18 · Marketing Timeline",
    "description": "",
    "category": "playbook",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 36947,
    "sections": [
      "Table of Contents",
      "1 · Marketing Reality Check",
      "The Hard Truth",
      "Marketing Is Part of the Job",
      "The Compound Effect",
      "2 · Month 1–3: Foundation",
      "Action Items",
      "What \"Building in Public\" Looks Like",
      "Month 1–3 Targets",
      "3 · Month 4–6: Announcement",
      "Month 4: Prepare the Announcement",
      "Month 5: The Announcement Push",
      "Month 6: Sustain the Momentum",
      "The Demo Question",
      "Month 4–6 Targets",
      "4 · Month 7–9: Building Momentum",
      "Ongoing Weekly Tasks",
      "Month 7: Steam Events & Festivals",
      "Month 8: Press & Streamer Outreach",
      "Month 9: Community Building",
      "Month 7–9 Targets",
      "5 · Month 10–11: Pre-Launch Push",
      "Month 10: Lock It In",
      "Month 11: The Push",
      "Month 10–11 Targets",
      "6 · Month 12: Launch Month",
      "Launch Week Timeline",
      "Launch Sale Strategy",
      "Post-Launch Content Tease",
      "Launch Month Targets",
      "7 · Post-Launch: The Long Tail",
      "The First 30 Days",
      "Month 2–6 Post-Launch",
      "Month 6–12 Post-Launch",
      "When to Move On",
      "8 · Platform-Specific Marketing",
      "Twitter/X",
      "Reddit",
      "Discord",
      "TikTok",
      "YouTube",
      "Newsletter / Mailing List",
      "9 · Content Calendar Template",
      "Weekly Posting Schedule",
      "When You Have \"Nothing to Show\"",
      "10 · Wishlist Benchmarks",
      "What Your Wishlist Numbers Mean",
      "Conversion Rates",
      "Quick Math",
      "How to Track Wishlists",
      "11 · Budget-Friendly Marketing",
      "The Free Tier (Most of Your Marketing)",
      "When to Spend Money",
      "Budget Summary",
      "12 · Marketing Mistakes",
      "The Biggest Killers",
      "13 · Templates & Resources",
      "Press Email Template",
      "Streamer/YouTuber Outreach Template",
      "Weekly Devlog Template",
      "What I Worked On This Week",
      "Challenges",
      "What's Next",
      "Numbers (optional)",
      "Social Media Bio Template",
      "Press Kit Contents",
      "Quick Reference: The 12-Month Timeline",
      "The One Thing to Remember"
    ]
  },
  {
    "id": "P15",
    "title": "19 — Post-Mortem Template",
    "description": "",
    "category": "playbook",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 21172,
    "sections": [
      "How to Use This Template",
      "1. Project Overview",
      "2. Timeline Comparison",
      "Milestone Comparison",
      "Where Did the Schedule Slip?",
      "Why Did It Slip?",
      "3. Scope Comparison",
      "Feature Comparison",
      "What Was Cut?",
      "What Was Added (Unplanned)?",
      "MVP Assessment",
      "Scope Creep Analysis",
      "4. What Went Right (Top 5–10)",
      "1. Best Technical Decision",
      "2. Best Design Decision",
      "3. Best Workflow / Process Habit",
      "4. Best Tool Choice",
      "5. Something That Surprised You Positively",
      "6–10. Additional Wins",
      "5. What Went Wrong (Top 5–10)",
      "1. Biggest Time Waste",
      "2. Worst Technical Decision",
      "3. Biggest Scope Creep",
      "4. Worst Estimation",
      "5. Something You'd Never Do Again",
      "6–10. Additional Mistakes",
      "6. Technical Post-Mortem",
      "Architecture Review",
      "Performance",
      "Libraries & Dependencies",
      "Code Quality",
      "7. Art Post-Mortem",
      "Art Style Assessment",
      "Time Spent on Art",
      "Asset Pipeline",
      "8. Audio Post-Mortem",
      "Audio Approach",
      "Quality Satisfaction",
      "Implementation",
      "Budget",
      "9. Marketing Post-Mortem",
      "Launch Metrics",
      "Marketing Channels",
      "What marketing actually moved the needle?",
      "What marketing was a waste of time?",
      "Streamer / YouTuber / Press Coverage",
      "Trailer Performance",
      "10. Time Tracking Analysis",
      "Time Breakdown",
      "Analysis",
      "11. Financial Summary",
      "Development Costs",
      "Revenue (if applicable)",
      "The Math",
      "Financial Reflection",
      "12. Lessons Learned",
      "Lesson 1",
      "Lesson 2",
      "Lesson 3",
      "Lesson 4",
      "Lesson 5",
      "Additional Lessons",
      "13. Next Project Planning",
      "Process Changes",
      "Skills to Develop",
      "Tool / Workflow Changes",
      "Scope Calibration",
      "The One Thing",
      "14. The Honest Questions",
      "Did you finish?",
      "Are you proud of it?",
      "Would you play it?",
      "Was it fun to make?",
      "Would you recommend this process to someone else?",
      "What would 6-months-ago-you need to hear?",
      "Final Notes",
      "Post-Mortem Checklist"
    ]
  },
  {
    "id": "P1",
    "title": "P1 — Pre-Production Checklist",
    "description": "",
    "category": "playbook",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 38972,
    "sections": [
      "Table of Contents",
      "1. Game Concept Worksheet",
      "Concept Validation Questions",
      "2. Genre Selection Guide",
      "Small Team Suitability Matrix",
      "Reading the Table",
      "Genre Decision Checklist",
      "3. Design Doc Template (Lightweight GDD)",
      "📄 Game Design Document: [Title]",
      "4. Scope Assessment",
      "4.1 Scope Estimation Worksheet",
      "4.2 Red Flags for Scope Creep 🚩",
      "4.3 The Cut List",
      "4.4 MVP Definition",
      "5. Art Style Decision Matrix",
      "5.1 Style Comparison",
      "5.2 Resolution Decision",
      "5.3 Color Palette Planning",
      "5.4 Reference Board",
      "5.5 Sprite Specification Sheet",
      "6. Technical Decisions Checklist",
      "6.1 Library Stack",
      "6.2 Resolution & Viewport Strategy",
      "6.3 Input Scheme",
      "6.4 Save System Approach",
      "6.5 Scene Architecture",
      "6.6 Camera Strategy",
      "7. Project Setup Checklist",
      "7.1 Repository Init",
      "7.2 Solution & Project Structure",
      "7.3 Content Pipeline Setup",
      "7.4 CI / Build Automation",
      "7.5 Task Tracking",
      "8. Risk Assessment & Prototype Plan",
      "8.1 Technical Risk Inventory",
      "8.2 Prototype Plan",
      "8.3 \"Prove It Works\" Milestones",
      "Pre-Production Exit Checklist",
      "Quick Reference: Key Doc Links by Topic"
    ]
  },
  {
    "id": "P2",
    "title": "03 — Production Milestones",
    "description": "A milestone-based production guide for solo and small-team 2D game development using MonoGame + Arch ECS. Each milest...",
    "category": "playbook",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 26931,
    "sections": [
      "Table of Contents",
      "Milestone Overview",
      "Timeline Estimates",
      "1. Prototype Phase",
      "What You're Proving",
      "What You Are NOT Building",
      "Definition of Done",
      "Checklist",
      "Technical Notes",
      "🚩 Red Flags",
      "2. Vertical Slice",
      "What \"Vertical Slice\" Means",
      "Definition of Done",
      "Checklist",
      "The Scope Math",
      "🚩 Red Flags",
      "3. Alpha",
      "Definition of Done",
      "Checklist",
      "🚩 Red Flags",
      "4. Beta",
      "Definition of Done",
      "The \"No New Features\" Rule",
      "Checklist",
      "🚩 Red Flags",
      "5. Release Candidate",
      "Definition of Done",
      "Checklist",
      "🚩 Red Flags",
      "6. Gold / Launch",
      "Pre-Launch Checklist (1 week before)",
      "Launch Day Checklist",
      "Post-Launch (First Week)",
      "Post-Launch (First Month)",
      "Milestone Review Template",
      "Milestone Review: [Milestone Name]",
      "What Got Done",
      "What Slipped",
      "Scope Changes",
      "What Went Well",
      "What Went Poorly",
      "Morale Check (1-10)",
      "Key Learnings",
      "Next Milestone Plan",
      "How to Use This",
      "Scope Adjustment Framework",
      "When to Cut",
      "The Scope Triage Matrix",
      "How to Cut",
      "The Kill Switch",
      "Scope Adjustment by Milestone",
      "The Emotional Cost",
      "Quick Reference: Milestone Summary"
    ]
  },
  {
    "id": "P3",
    "title": "P3 — Daily Dev Workflow",
    "description": "A practical daily routine for solo, team, and small-studio 2D game developers. Whether you have two evening hours or ...",
    "category": "playbook",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 50603,
    "sections": [
      "Table of Contents",
      "1. The Daily Development Loop",
      "The Steps",
      "The Pipeline Principle",
      "Evening Session (2–4 hours)",
      "Full Day (8 hours)",
      "Weekend Sprint (5–6 hours, compressed)",
      "2. Task Management",
      "Breaking Work Into Tasks",
      "The \"One Thing\" Rule",
      "Task Decomposition Strategies",
      "Task Tracking",
      "In Progress",
      "Up Next",
      "Done (this week)",
      "Task States",
      "Task Priority Matrix",
      "3. Estimation & Time Tracking",
      "Why Game Devs Need Estimation",
      "The Multiplier Method",
      "Task Size Categories",
      "Tracking Time",
      "Estimation Calibration",
      "Common Estimation Traps",
      "4. Commit Habits",
      "Commit Often",
      "Conventional Commit Messages",
      "Branching Strategy for Solo Dev",
      "5. The Playtest Loop",
      "Play Your Game Every Session",
      "What to Look For",
      "Write It Down",
      "Playtest — 2026-03-07",
      "The \"Fresh Eyes\" Trick",
      "6. Dev Journal",
      "Why Bother",
      "Template",
      "What I Worked On",
      "What Went Well",
      "What's Stuck",
      "Ideas",
      "Tomorrow",
      "Time Spent",
      "Minimal Version",
      "7. AI-Integrated Workflow",
      "AI-Augmented Build Phase",
      "The AI Review Ritual",
      "Context Files for AI Sessions",
      "Architecture",
      "Naming",
      "Current Focus",
      "AI-Assisted Playtest Analysis",
      "8. Session Handoff & Context Preservation",
      "The Breadcrumb File",
      "Current State",
      "Files I Was Editing",
      "Decisions I Made (and why)",
      "What To Do Next",
      "The \"Leave a Failing Test\" Trick",
      "Long Gaps (1+ week away)",
      "Context for Part-Time Developers",
      "9. Multi-Discipline Day Planning",
      "Energy-Discipline Mapping",
      "The Discipline Block Pattern",
      "The \"Creative Tuesday\" Pattern",
      "Balancing Content vs Systems",
      "10. The First Hour Problem",
      "Why the First Hour Fails",
      "The \"Zero Friction Start\" Protocol",
      "Warm-Up Tasks",
      "11. Focus & Productivity",
      "Pomodoro for Game Dev",
      "Avoiding Rabbit Holes",
      "The 15-Minute Rule",
      "Context Switching Costs",
      "Environment Tips",
      "12. Distraction & Interruption Recovery",
      "The Interrupt Journal",
      "The \"Controlled Interruption\" Pattern",
      "Interruption Log — Today",
      "Recovery Strategies by Interruption Length",
      "Notification Discipline",
      "13. Progress Visualization & Motivation",
      "The Progress Wall",
      "The \"Percentage Complete\" Trap",
      "The Devlog as Motivation Engine",
      "Milestone Celebrations",
      "14. Weekly Review",
      "End-of-Week Checklist",
      "What Got Done",
      "What Slipped & Why",
      "Scope Check",
      "Playtest Summary",
      "Next Week's Priorities",
      "Hours This Week",
      "Monthly Review Template",
      "Major Milestones",
      "What Worked",
      "What Didn't Work",
      "Scope & Direction",
      "Next Month's Goals",
      "Hours This Month: ~52 hours",
      "15. Avoiding Burnout",
      "Warning Signs",
      "Prevention",
      "16. Debug Workflow",
      "The Cycle",
      "Debug Overlays",
      "Logging Strategy",
      "Common 2D Game Bugs — Quick Reference",
      "17. Build & Test Routine",
      "Regular Build Testing",
      "Clean Build Checklist",
      "Performance Check Cadence",
      "Quick Reference — Session Checklists",
      "Evening Session (2–4h) — Checklist",
      "Full Day (8h) — Checklist",
      "Weekly — Checklist",
      "18. Common Mistakes",
      "❌ Starting Without a Plan → ✅ Decide Before You Sit Down",
      "❌ Skipping Playtesting → ✅ Play Every Session, Even 5 Minutes",
      "❌ Heroic Marathon Sessions → ✅ Consistent Short Sessions",
      "❌ Committing Only at the End → ✅ Commit When It Works",
      "❌ Mixing AI Tasks and Manual Tasks → ✅ Batch AI Work Separately",
      "❌ Perfecting Before Finishing → ✅ Make It Work, Make It Right, Make It Fast",
      "❌ Ignoring Physical Health → ✅ Ergonomics are Part of the Workflow",
      "Tuning Reference",
      "Session Duration by Context",
      "Pomodoro Variants by Discipline",
      "Common Task Duration Reference",
      "Weekly Hours → Milestone Timeline",
      "Related Docs"
    ]
  },
  {
    "id": "P4",
    "title": "P4 — Playtesting Guide",
    "description": "You built the game. You know every mechanic, every shortcut, every hidden path. That's exactly why you're the worst p...",
    "category": "playbook",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 38159,
    "sections": [
      "Table of Contents",
      "1 — Why Playtest",
      "Playing ≠ Playtesting",
      "The Curse of Knowledge",
      "What Playtesting Actually Reveals",
      "2 — Types of Playtesting",
      "Overview",
      "Self-Testing",
      "Friends & Family",
      "Targeted Testers",
      "Public Beta",
      "3 — Self-Testing Framework",
      "The Notepad Method",
      "The 30-Second Test",
      "The First 5 Minutes Test",
      "System Isolation Testing",
      "Record Your Sessions",
      "4 — Finding Testers",
      "Where to Look",
      "How to Ask",
      "What to Offer in Return",
      "5 — Feedback Collection",
      "Observation vs. Opinion",
      "Question Design",
      "The Game Usability Scale (adapted from SUS)",
      "Pre-Test Questionnaire",
      "Post-Test Questionnaire",
      "6 — Recording Sessions",
      "Why Record",
      "OBS Setup for Playtest Recording",
      "Other Recording Options",
      "The Silent Observation Method",
      "7 — Analyzing Feedback",
      "Don't Get Defensive",
      "Separate the Problem from the Solution",
      "The Frequency × Severity Matrix",
      "Feedback Tracking Spreadsheet",
      "8 — Iterating on Feedback",
      "The Feedback Cycle",
      "When to Ignore Feedback",
      "When Feedback Conflicts",
      "A/B Testing for Indies",
      "9 — Playtesting Schedule",
      "Start Earlier Than You Think",
      "Recommended Cadence",
      "Development Phase Mapping",
      "Milestone Playtests",
      "10 — Common Playtesting Mistakes",
      "❌ Explaining the Game Before They Play",
      "❌ Watching Over Their Shoulder",
      "❌ Taking Feedback Personally",
      "❌ Testing Too Late",
      "❌ Only Testing with Gamers",
      "❌ Not Testing on Target Hardware",
      "❌ Asking \"Is It Fun?\"",
      "❌ Only Fixing Things, Never Cutting",
      "❌ Not Closing the Loop",
      "11 — Feedback Form Templates",
      "Template A: First Impression Test",
      "Template B: Core Loop Test",
      "Template C: Full Playthrough Test",
      "Template D: UX & Controls Test",
      "Quick Reference Checklist",
      "Related Docs"
    ]
  },
  {
    "id": "P5",
    "title": "09 — Art Production Pipeline",
    "description": "A practical guide to creating, organizing, and shipping 2D game art — aimed at game developers and small teams who ma...",
    "category": "playbook",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 41269,
    "sections": [
      "Table of Contents",
      "1. Art Style Selection",
      "Style Comparison",
      "Resolution Implications",
      "Color Palette Strategies",
      "Style Consistency Checklist",
      "Reference and Mood Boards",
      "2. Aseprite Workflow",
      "Project Setup",
      "Layer Naming Conventions",
      "Animation Workflow",
      "Aseprite Tips",
      "Aseprite → MonoGame Pipeline",
      "3. Asset Naming Conventions",
      "File Naming",
      "Naming Rules",
      "Folder Organization",
      "4. Sprite Sheet Organization",
      "Individual Sprites vs Sheets",
      "Atlas Packing Strategies",
      "Atlas Tools",
      "MonoGame Content Pipeline Setup",
      "5. Animation Pipeline",
      "Frame Count Guidelines",
      "Animation Principles for Game Sprites",
      "Timing Guidelines",
      "Animation State Machines",
      "6. Tileset Creation",
      "Tile Sizes",
      "Auto-Tiling Systems",
      "Seamless Tiling Techniques",
      "Tiled Editor Integration",
      "7. Placeholder Art Strategy",
      "The Placeholder Progression",
      "Why Placeholders Are Essential",
      "Making Good Placeholders",
      "The \"Programmer Art\" Trap",
      "8. UI Art",
      "UI/UX Design Phase — Prototyping with Google Stitch",
      "UI Element Sizing",
      "9-Slice / 9-Patch Sprites",
      "Font Selection",
      "Icon Design at Small Sizes",
      "UI Style Consistency",
      "9. Particle & Effect Art",
      "Core Particle Sprites",
      "Gradient Textures",
      "Blending Modes",
      "10. Background & Parallax Art",
      "Layer Design for Parallax",
      "Repeating Backgrounds",
      "Color and Value Separation",
      "Design Tips",
      "11. Art Optimization",
      "Texture Sizes",
      "Compression",
      "Memory Budgets",
      "When to Split vs Combine Atlases",
      "General Optimization Tips",
      "12. Art Production Schedule",
      "When to Do Art",
      "Art Phases Per Asset",
      "Batch Similar Work",
      "The Art Asset Tracker",
      "Quick Reference: Art Pipeline Checklist",
      "Starting a New Project",
      "Per-Asset Workflow",
      "Before Shipping"
    ]
  },
  {
    "id": "P6",
    "title": "10 — Audio Production Pipeline",
    "description": "Most game devs treat audio as an afterthought — something to bolt on the week before release. That's a mistake. Audio...",
    "category": "playbook",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 28642,
    "sections": [
      "Table of Contents",
      "1 — Audio Overview for Game Dev",
      "The Three Pillars",
      "Audio as Game Feel",
      "Budget Your Audio Time",
      "2 — Sound Effect Creation",
      "Procedural Generation Tools (Free, Fast)",
      "Recording Real Sounds",
      "Processing in Audacity (Free)",
      "Layering Sounds",
      "Export Formats",
      "3 — Sound Effect Sourcing",
      "Free SFX Libraries",
      "License Types — What They Mean",
      "Paid Libraries",
      "When to Make vs Source",
      "4 — Music Workflow",
      "Options for Solo Devs",
      "Music Production Tools",
      "Chip-Tune Tools (Great for Pixel Art Games)",
      "Making Seamless Loops",
      "Adaptive / Dynamic Music (Advanced)",
      "5 — Audio Implementation in MonoGame",
      "SoundEffect vs Song",
      "Basic Playback",
      "Audio Manager Pattern",
      "Positional Audio for 2D",
      "Limiting Simultaneous Sounds",
      "6 — Audio Asset Organization",
      "Folder Structure",
      "Naming Conventions",
      "Content Pipeline Setup",
      "7 — Mixing Guide",
      "Volume Levels by Category",
      "The -6dB Rule",
      "Volume Architecture",
      "Volume Curves",
      "Settings Menu Integration",
      "8 — Sound Design by Genre",
      "Platformer Sound Checklist",
      "RPG Sound Checklist",
      "Roguelike Sound Checklist",
      "9 — Common Audio Mistakes",
      "1. Everything is Too Loud",
      "2. Too Many Simultaneous Sounds",
      "3. No Volume Control",
      "4. Forgetting Ambience",
      "5. Music is Too Busy",
      "6. Audio Doesn't Match Art Style",
      "7. No Sound Variation",
      "8. Click and Pop Artifacts",
      "9. Music Loops Have a Gap",
      "10. Ignoring Audio Until the End",
      "10 — Audio Polish Checklist",
      "Variation",
      "Transitions",
      "Ducking & Priority",
      "UI Audio",
      "Game Feel Sync",
      "Settings & Accessibility",
      "Technical",
      "Final Listen Test",
      "Quick Reference: Recommended Tool Stack"
    ]
  },
  {
    "id": "P7",
    "title": "11 — Launch Checklist",
    "description": "",
    "category": "playbook",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 30735,
    "sections": [
      "Table of Contents",
      "1 — Pre-Launch (3–6 Months Before)",
      "Steam Developer Account",
      "Store Page — Copy",
      "Store Page — Visual Assets",
      "Screenshots",
      "Pricing & Release Date",
      "Tags & Categories",
      "Publish the Store Page",
      "2 — Trailer Production",
      "Planning",
      "Capture",
      "Editing",
      "Music & Audio",
      "Publishing",
      "3 — Press Kit",
      "Press Kit Contents",
      "Hosting Your Press Kit",
      "4 — Marketing & Wishlists",
      "Social Media — Set Up",
      "Content Strategy",
      "Timing Your Announcement",
      "Press & Media Outreach",
      "Streamer & YouTuber Outreach",
      "5 — Store Page Optimization",
      "Tags Strategy",
      "Description Formatting",
      "System Requirements",
      "Demo Strategy",
      "Early Access Considerations",
      "6 — Pre-Launch Week",
      "Build Preparation",
      "Steam Upload",
      "Achievements & Integration",
      "Communications",
      "Personal Prep",
      "7 — Launch Day",
      "The Launch",
      "Monitoring",
      "Community Management",
      "Social Media",
      "Hotfix Readiness",
      "8 — Post-Launch Week 1",
      "Reviews & Feedback",
      "Bug Fixes & Patches",
      "Marketing Push",
      "Community",
      "9 — Post-Launch Month 1",
      "Sales Analysis",
      "Review Patterns",
      "Content Update Planning",
      "Community Feedback Synthesis",
      "Long-Term",
      "10 — Platform-Specific Checklists",
      "Steam (Primary)",
      "itch.io (Secondary)",
      "Mobile (Optional)",
      "Console (If Applicable)",
      "11 — Legal & Business",
      "Business Entity",
      "Tax Requirements",
      "Ratings",
      "Privacy & Legal",
      "Quick Reference: Asset Sizes",
      "Recommended Reading"
    ]
  },
  {
    "id": "P8",
    "title": "12 — Common Pitfalls & Solutions",
    "description": "Every mistake here has been made thousands of times by solo and small-team developers. They're predictable, avoidable...",
    "category": "playbook",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 30779,
    "sections": [
      "Table of Contents",
      "Scope & Planning",
      "1. Starting Too Big — The \"Dream Game\" Trap 🔴",
      "2. No Design Document — Building Blind 🔴",
      "3. Scope Creep — \"Just One More Feature\" 🔴",
      "4. Perfectionism — Polishing Too Early 🟡",
      "5. No Milestones — Working Without Deadlines 🟡",
      "6. Skipping Pre-Production — Jumping Straight to Code 🟡",
      "7. Building an Engine Instead of a Game 🔴",
      "8. Not Playtesting Early Enough 🔴",
      "Technical",
      "9. Premature Optimization 🟡",
      "10. Not Using Version Control (Or Using It Wrong) 🔴",
      "11. Hardcoding Everything 🟡",
      "12. Ignoring the Game Loop — Wrong Delta Time Handling 🔴",
      "13. Rolling Your Own Everything 🟡",
      "14. No Save System Plan 🟡",
      "15. Spaghetti Architecture 🟡",
      "16. Platform-Specific Code Everywhere 🟢",
      "Art & Audio",
      "17. Final Art Too Early 🟡",
      "18. Inconsistent Art Style 🟡",
      "19. Forgetting Audio Entirely 🟡",
      "20. No Placeholder Art Strategy 🟢",
      "21. Wrong Resolution Choice 🟢",
      "22. Ignoring UI/UX 🟡",
      "Production & Mental Health",
      "23. Working in Isolation 🟡",
      "24. Comparing to AAA 🟡",
      "25. No Marketing Until Launch 🟡",
      "26. Burnout from Crunch 🔴",
      "27. Feature Envy — Copying Every Game You Play 🟢",
      "28. Not Finishing 🔴",
      "29. Ignoring Accessibility 🟢",
      "30. No Post-Mortem 🟢",
      "Bonus Pitfalls",
      "31. Tutorial Hell 🟢",
      "32. Neglecting the \"Game Feel\" 🟡",
      "33. Solo Hero Complex — Refusing Help 🟡",
      "Quick Reference: Severity Summary",
      "Cross-References"
    ]
  },
  {
    "id": "P9",
    "title": "13 — Game Design Document Template",
    "description": "",
    "category": "playbook",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 29078,
    "sections": [
      "1. Title Page",
      "Revision History",
      "2. Vision Statement",
      "Elevator Pitch (2-3 sentences)",
      "The \"X meets Y\" Formula",
      "Core Fantasy",
      "What Makes This Unique?",
      "3. Design Pillars",
      "4. Game Overview",
      "Quick Facts",
      "Comparable Titles",
      "5. Core Gameplay Loop",
      "The Three Loops",
      "Loop Diagram",
      "Core Verbs",
      "6. Mechanics",
      "6.1 Movement",
      "6.2 Combat",
      "6.3 Progression Mechanics",
      "6.4 Exploration",
      "6.5 Social / Multiplayer",
      "6.6 Economy",
      "7. Progression Systems",
      "Progression Overview",
      "Power Curve",
      "Unlock Sequence",
      "Skill Tree / Upgrade Paths",
      "8. Content Plan",
      "8.1 Levels / Areas / Worlds",
      "8.2 Enemy Roster",
      "8.3 Boss List",
      "8.4 Items & Equipment",
      "8.5 NPCs",
      "Content Volume Summary",
      "9. Narrative & World",
      "Setting",
      "Lore Summary",
      "Story Structure",
      "Key Characters",
      "Dialogue Approach",
      "10. Art Direction",
      "Style Overview",
      "Reference Images / Games",
      "Character Art",
      "Environment Art",
      "UI Art Style",
      "Animation Philosophy",
      "11. Audio Direction",
      "Music",
      "Sound Effects",
      "Audio References",
      "Audio Budget",
      "12. UI/UX Design",
      "Screen Flow",
      "HUD Elements",
      "Control Scheme",
      "Accessibility",
      "13. Technical Design",
      "Architecture Overview",
      "Key ECS Components",
      "Key Systems",
      "Save System",
      "Performance Targets",
      "Platform Considerations",
      "14. Scope & Schedule",
      "Scope Summary",
      "Milestone Timeline",
      "MVP Feature List (Must-Have for Launch)",
      "Nice-to-Have (Post-Launch or If Time Allows)",
      "Cut List (Things You've Already Decided to Cut)",
      "Risk Assessment",
      "15. Marketing & Release",
      "Release Plan",
      "Marketing Channels",
      "Goals",
      "16. Appendices",
      "A. Glossary",
      "B. Reference Links",
      "C. Inspiration Board",
      "D. Competitive Analysis",
      "Using This Document"
    ]
  },
  {
    "id": "formatting",
    "title": "Session Formatting Templates",
    "description": "Standardized formatting for all session co-pilot output. Use these templates exactly to maintain visual consistency.",
    "category": "explanation",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 9590,
    "sections": [
      "Session Briefing Dashboard",
      "Field Descriptions",
      "Step Progress Header",
      "Examples",
      "Mode Tip Callout",
      "Examples",
      "Path Completed Banner",
      "Session Summary Dashboard",
      "Field Descriptions",
      "Routing Confirmation",
      "Inline Step Transition",
      "Error / Clarification Prompt",
      "Decision Summary Card"
    ]
  },
  {
    "id": "session-prompt",
    "title": "Session Co-Pilot System Prompt",
    "description": "You are a game development session co-pilot. You help developers plan, decide, build features, debug, and manage scop...",
    "category": "explanation",
    "module": "core",
    "engine": null,
    "tier": "free",
    "sizeBytes": 10646,
    "sections": [
      "Phase 1: Boot & Briefing",
      "Context Gathering",
      "Session Briefing Dashboard",
      "Phase 2: Routing",
      "Input Handling",
      "Phase 3: Paths",
      "Path: Plan (6 Steps)",
      "Path: Decide (5 Steps)",
      "Path: Feature (5 Steps)",
      "Path: Debug (5 Steps)",
      "Path: Scope (5 Steps)",
      "Phase 4: Loop & Wrap",
      "After Completing a Path",
      "Session Wrap-Up (on \"done\")",
      "Protocols",
      "Decision Protocol",
      "ADR Protocol",
      "Context",
      "Options Considered",
      "Decision",
      "Consequences",
      "Session State Protocol",
      "Last Session",
      "Open Items",
      "Recent Decisions",
      "Notes",
      "Topic-to-Doc Routing",
      "Behavioral Rules"
    ]
  },
  {
    "id": "E1",
    "title": "Babylon.js Architecture Overview",
    "description": "Babylon.js is a full-featured 3D game engine for the web, built with TypeScript. Unlike Three.js (a rendering library...",
    "category": "architecture",
    "module": "babylonjs-arch",
    "engine": "Babylon.js",
    "tier": "pro",
    "sizeBytes": 8100,
    "sections": [
      "Core Architecture",
      "Engine Hierarchy",
      "Scene",
      "Node Hierarchy (Scene Graph)",
      "TransformNode vs Mesh",
      "Rendering Pipeline",
      "Default Pipeline",
      "Post-Processing",
      "WebGPU Support",
      "Fallback Strategy",
      "Built-in Systems (vs Three.js)",
      "Observable Pattern",
      "Performance Characteristics",
      "Optimization Tools",
      "Ecosystem"
    ]
  },
  {
    "id": "engine-overview",
    "title": "Babylon.js Engine Architecture Overview",
    "description": "Babylon.js is a full-featured, open-source 3D game engine for the web. Unlike Three.js (a rendering library), Babylon...",
    "category": "architecture",
    "module": "babylonjs-arch",
    "engine": "Babylon.js",
    "tier": "pro",
    "sizeBytes": 7530,
    "sections": [
      "Core Architecture",
      "Engine Hierarchy",
      "Scene Graph",
      "Material System",
      "Camera System",
      "Physics: Havok Integration",
      "WebGPU Support",
      "Performance Features",
      "Animation System",
      "V7 Highlights: Node Geometry and Flow Graph",
      "Built-in Game Development Features",
      "Asset Loading"
    ]
  },
  {
    "id": "babylonjs-arch-rules",
    "title": "Babylon.js Architecture Module Rules",
    "description": "",
    "category": "reference",
    "module": "babylonjs-arch",
    "engine": "Babylon.js",
    "tier": "pro",
    "sizeBytes": 2721,
    "sections": [
      "Module Purpose",
      "Document Standards",
      "Coverage Plan",
      "architecture/",
      "guides/",
      "reference/"
    ]
  },
  {
    "id": "babylonjs-rules",
    "title": "Babylon.js — AI Code Generation Rules",
    "description": "Engine-specific rules for Babylon.js 7.x+ projects using TypeScript. These supplement the engine-agnostic rules in do...",
    "category": "reference",
    "module": "babylonjs-arch",
    "engine": "Babylon.js",
    "tier": "pro",
    "sizeBytes": 9354,
    "sections": [
      "⚠️ Babylon.js 6 vs 7 — Critical Differences",
      "Changes That Break Code",
      "Import Style (ES Modules)",
      "Scene Graph Rules",
      "Node Hierarchy",
      "Object Lifecycle",
      "Camera Rules",
      "Physics (Havok — Default in v7+)",
      "Animation & Game Loop",
      "Asset Loading",
      "GUI System",
      "Performance Rules",
      "Common Mistakes"
    ]
  },
  {
    "id": "G10",
    "title": "Networking & Multiplayer",
    "description": "Babylon.js does not ship a built-in networking layer, but its architecture integrates cleanly with popular real-time ...",
    "category": "guide",
    "module": "babylonjs-arch",
    "engine": "Babylon.js",
    "tier": "pro",
    "sizeBytes": 10803,
    "sections": [
      "Architecture Overview",
      "Framework Options",
      "Colyseus Integration (Recommended)",
      "Server Setup",
      "Defining Shared State with Schema",
      "Room Lifecycle (Server)",
      "Client Connection (Babylon.js)",
      "Sending Input",
      "State Synchronization Strategies",
      "Interpolation (Recommended Default)",
      "Client-Side Prediction",
      "Entity Interpolation Buffer",
      "Alternative: WebRTC with Geckos.io",
      "Performance Considerations",
      "Bandwidth",
      "Server Tick Rate",
      "Client-Side Optimizations",
      "Deployment"
    ]
  },
  {
    "id": "babylonjs-arch/G11",
    "title": "Node Material Editor & Custom Shaders",
    "description": "The Babylon.js Node Material Editor (NME) is a visual, graph-based shader authoring tool that produces production-rea...",
    "category": "guide",
    "module": "babylonjs-arch",
    "engine": "Babylon.js",
    "tier": "pro",
    "sizeBytes": 11806,
    "sections": [
      "Overview",
      "Architecture: Vertex + Fragment Outputs",
      "Block Categories",
      "Input Blocks",
      "Math Blocks",
      "Texture Blocks",
      "PBR Blocks",
      "Conditional / Logic Blocks",
      "Programmatic API",
      "Creating a Node Material from Code",
      "Loading from JSON (Editor Export)",
      "Exposing Parameters for Gameplay",
      "Game-Relevant Shader Patterns",
      "Toon / Cel Shading",
      "Dissolve Effect",
      "Scrolling Lava / Water",
      "Rim Lighting",
      "Particle Shaders",
      "WebGPU Considerations",
      "Performance Tips"
    ]
  },
  {
    "id": "babylonjs-arch/G12",
    "title": "G12 — Particle Systems",
    "description": "Babylon.js has one of the most complete built-in particle systems of any web 3D engine. It provides CPU particles (fu...",
    "category": "guide",
    "module": "babylonjs-arch",
    "engine": "Babylon.js",
    "tier": "pro",
    "sizeBytes": 11017,
    "sections": [
      "CPU Particle System — Full Control",
      "Basic Setup",
      "Gradient API",
      "Emitter Shapes",
      "Custom Emitter",
      "Sub-Emitters (CPU Only)",
      "Sub-Emitter Types",
      "GPU Particle System — Massive Scale",
      "GPU vs CPU Feature Parity",
      "Noise Texture for Organic Motion",
      "ParticleHelper — Presets",
      "Performance Guidelines",
      "General Tips",
      "Further Reading"
    ]
  },
  {
    "id": "G1",
    "title": "G1 — Physics with Havok (Physics V2)",
    "description": "Babylon.js includes a production-grade physics system powered by Havok, a professional WASM physics engine used in AA...",
    "category": "guide",
    "module": "babylonjs-arch",
    "engine": "Babylon.js",
    "tier": "pro",
    "sizeBytes": 13823,
    "sections": [
      "Setup",
      "Installation",
      "Initialization",
      "WebGPU Setup",
      "PhysicsAggregate (Quick Setup)",
      "PhysicsShapeType Options",
      "PhysicsAggregate Parameters",
      "PhysicsBody + PhysicsShape (Full Control)",
      "Motion Types",
      "Applying Forces and Impulses",
      "Collision Events",
      "Trigger Volumes (Sensors)",
      "Raycasting",
      "Character Controller",
      "Collision Filtering",
      "Debugging Physics",
      "Performance Considerations",
      "Complete Minimal Example"
    ]
  },
  {
    "id": "G2",
    "title": "G2 — Animation System",
    "description": "Babylon.js has a comprehensive built-in animation system covering property animation, skeletal animation, animation b...",
    "category": "guide",
    "module": "babylonjs-arch",
    "engine": "Babylon.js",
    "tier": "pro",
    "sizeBytes": 11506,
    "sections": [
      "Animation Architecture",
      "Loading Animations from glTF",
      "AnimationGroup Key Methods",
      "Animation Blending",
      "Crossfade Between Two Animations",
      "Additive Blending (v7+)",
      "Animation Masks (v7+)",
      "Animation Retargeting (v9.0)",
      "How Retargeting Works",
      "Programmatic Animations",
      "Common Easing Functions",
      "Game Animation State Machine Pattern",
      "Performance Considerations",
      "Common Mistakes"
    ]
  },
  {
    "id": "G3",
    "title": "Babylon.js GUI System — 2D/3D UI for Games",
    "description": "Babylon.js ships a full UI toolkit via the @babylonjs/gui package. It renders UI elements onto a dynamic texture, sup...",
    "category": "guide",
    "module": "babylonjs-arch",
    "engine": "Babylon.js",
    "tier": "pro",
    "sizeBytes": 12584,
    "sections": [
      "Installation",
      "AdvancedDynamicTexture — The Foundation",
      "Fullscreen Mode (HUD / Menus)",
      "Texture Mode (In-World UI)",
      "Controls Reference",
      "TextBlock — Display Text",
      "Button — Interactive",
      "Image — Display Sprites/Icons",
      "Slider — Numeric Input",
      "InputText — Text Entry",
      "Checkbox & RadioButton",
      "Containers — Layout",
      "StackPanel",
      "Grid — Table Layout",
      "ScrollViewer — Scrollable Content",
      "Rectangle — Styled Container",
      "Linking UI to 3D Objects",
      "Non-Overlapping Labels",
      "Adaptive Scaling",
      "Reusable Styles",
      "Event Handling",
      "Keyboard Focus (InputText)",
      "Game UI Patterns",
      "Health Bar",
      "Floating Damage Number",
      "Performance Tips"
    ]
  },
  {
    "id": "G4",
    "title": "Babylon.js Asset Loading — glTF, Compression & Production Pipelines",
    "description": "Babylon.js provides a powerful, extensible asset loading pipeline built around SceneLoader. This guide covers loading...",
    "category": "guide",
    "module": "babylonjs-arch",
    "engine": "Babylon.js",
    "tier": "pro",
    "sizeBytes": 8631,
    "sections": [
      "SceneLoader API",
      "Core Loading Methods",
      "Basic Loading",
      "AssetContainer — Deferred Loading",
      "glTF Extension Support",
      "Draco Compression Setup",
      "KTX2 Texture Compression",
      "Loading Patterns for Games",
      "Progress Tracking",
      "Parallel Loading with AssetsManager",
      "Incremental Loading",
      "Right-Handed Coordinate System",
      "Performance Considerations",
      "WebGPU Notes"
    ]
  },
  {
    "id": "G5",
    "title": "Babylon.js WebGPU Renderer & Compute Shaders",
    "description": "Babylon.js has first-class WebGPU support alongside its WebGL 1/2 backends. Starting with v8.0, all core engine shade...",
    "category": "guide",
    "module": "babylonjs-arch",
    "engine": "Babylon.js",
    "tier": "pro",
    "sizeBytes": 9559,
    "sections": [
      "Engine Initialization",
      "Writing WGSL Shaders",
      "ShaderMaterial with WGSL",
      "Node Material Editor",
      "Compute Shaders",
      "Basic Compute Shader",
      "Binding Resources",
      "Dispatching and Reading Results",
      "Frame Graph (v9.0)",
      "WebGPU Limitations and Gotchas",
      "Migration Checklist: WebGL → WebGPU",
      "Performance Recommendations"
    ]
  },
  {
    "id": "G6",
    "title": "G6 — Lighting & PBR Materials",
    "description": "Babylon.js has a mature PBR (Physically Based Rendering) pipeline that handles metallic-roughness workflows, image-ba...",
    "category": "guide",
    "module": "babylonjs-arch",
    "engine": "Babylon.js",
    "tier": "pro",
    "sizeBytes": 10499,
    "sections": [
      "PBR Material Classes",
      "Basic PBR Setup",
      "Environment Textures",
      "Light Types for Games",
      "HemisphericLight — Ambient Fill",
      "DirectionalLight — Sun/Moon",
      "PointLight — Omnidirectional",
      "SpotLight — Cone",
      "Light Intensity in PBR",
      "Shadow Generators",
      "ShadowGenerator — Standard",
      "CascadedShadowGenerator — Large Outdoor Scenes",
      "Shadow Performance Tips",
      "Advanced PBR Features (PBRMaterial)",
      "Clear Coat",
      "Subsurface Scattering",
      "Anisotropy",
      "OpenPBR (Babylon.js 9.0+)",
      "Lightmaps",
      "Performance Checklist",
      "Common Pitfalls"
    ]
  },
  {
    "id": "G7",
    "title": "Babylon.js Audio & Spatial Sound for Games",
    "description": "Babylon.js ships a full audio engine built on the Web Audio API. Version 7+ introduces Audio Engine V2 — a ground-up ...",
    "category": "guide",
    "module": "babylonjs-arch",
    "engine": "Babylon.js",
    "tier": "pro",
    "sizeBytes": 10714,
    "sections": [
      "Audio Engine Setup",
      "Audio Engine V2 (Recommended)",
      "Checking Audio State",
      "Playing Sounds",
      "Static Sounds (Loaded in Memory)",
      "Streaming Sounds",
      "Sound Sprites",
      "Spatial Audio",
      "Enabling Spatial Sound",
      "Distance Models",
      "Attaching Sound to a Mesh",
      "Manual Positioning",
      "Directional Sound (Cones)",
      "HRTF (Binaural) Rendering",
      "Audio Buses",
      "Muting Categories",
      "Game Audio Patterns",
      "Pooling SFX for Rapid Playback",
      "Random Pitch Variation",
      "Crossfading Music Tracks",
      "Ambient Sound Zones",
      "Performance Considerations",
      "Common Pitfalls"
    ]
  },
  {
    "id": "G8",
    "title": "Optimization & Performance",
    "description": "Babylon.js provides a layered optimization toolkit — from quick scene-level toggles to fine-grained GPU instancing an...",
    "category": "guide",
    "module": "babylonjs-arch",
    "engine": "Babylon.js",
    "tier": "pro",
    "sizeBytes": 9236,
    "sections": [
      "Scene-Level Quick Wins",
      "Mesh Optimization Strategies",
      "Freezing Transforms",
      "Mesh Merging",
      "Instances",
      "Thin Instances",
      "Level of Detail (LOD)",
      "Occlusion Culling",
      "SceneOptimizer",
      "Built-in Optimization Steps (in escalating order)",
      "Texture and Asset Optimization",
      "Profiling and Diagnostics",
      "Key Metrics to Monitor",
      "Mobile-Specific Optimizations",
      "WebGPU Considerations"
    ]
  },
  {
    "id": "G9",
    "title": "Babylon.js Input Handling & Camera Systems",
    "description": "Babylon.js provides a composable input system where each camera type has an InputManager that treats input sources (m...",
    "category": "guide",
    "module": "babylonjs-arch",
    "engine": "Babylon.js",
    "tier": "pro",
    "sizeBytes": 8509,
    "sections": [
      "Camera Types for Games",
      "UniversalCamera (First-Person / Exploration)",
      "ArcRotateCamera (Third-Person / Orbit)",
      "FollowCamera",
      "The Input Manager System",
      "Listing Attached Inputs",
      "Adding and Removing Inputs",
      "Shorthand Methods by Camera Type",
      "Tuning Sensitivity",
      "Building Custom Inputs",
      "Required Interface Methods",
      "Pointer Inputs Shortcut — BaseCameraPointersInput",
      "Game-Specific Patterns",
      "Pointer Lock (FPS Games)",
      "Switching Camera Modes at Runtime",
      "Gamepad Dead Zones",
      "Performance Notes"
    ]
  },
  {
    "id": "R1",
    "title": "Babylon.js Scene Management & State Machines for Games",
    "description": "Babylon.js supports multiple scenes per engine, scene-level disposal, and asset containers for modular loading. This ...",
    "category": "reference",
    "module": "babylonjs-arch",
    "engine": "Babylon.js",
    "tier": "pro",
    "sizeBytes": 11663,
    "sections": [
      "Scene Lifecycle",
      "Multi-Scene Rendering",
      "Game State Machine Pattern",
      "Concrete State Example: Main Menu",
      "Concrete State Example: Gameplay",
      "Wiring it together",
      "AssetContainer for Level Streaming",
      "Loading Screen Pattern",
      "Scene Optimization During Transitions",
      "Performance Considerations",
      "WebGPU Notes"
    ]
  },
  {
    "id": "R2",
    "title": "Babylon.js Inspector & Debugging Tools",
    "description": "Babylon.js ships with a powerful built-in Inspector — a visual debugging tool that lets you browse the scene graph, e...",
    "category": "reference",
    "module": "babylonjs-arch",
    "engine": "Babylon.js",
    "tier": "pro",
    "sizeBytes": 10843,
    "sections": [
      "Launching the Inspector",
      "Quick Start (Development)",
      "Configuration Options",
      "Production Builds — Exclude the Inspector",
      "Scene Explorer (Left Pane)",
      "Node Categories",
      "Scene Explorer Actions",
      "Properties Pane (Right Pane)",
      "Common Editable Properties",
      "Custom Inspectable Properties",
      "Statistics & Performance Profiler",
      "Statistics Tab",
      "Performance Profiler (Visual Graph)",
      "Debug Visualizers",
      "Skeleton Viewer",
      "Physics Debug Viewer",
      "Bounding Box and Axes Helpers",
      "Tools Pane",
      "Programmatic Debugging Utilities",
      "Logging and Timers",
      "Render Pipeline Debugging",
      "Texture Inspector",
      "Game Development Debugging Workflow"
    ]
  },
  {
    "id": "R3",
    "title": "R3 — WebXR Immersive Experiences",
    "description": "Babylon.js has the most complete WebXR integration of any web 3D framework. It wraps the browser's WebXR Device API b...",
    "category": "reference",
    "module": "babylonjs-arch",
    "engine": "Babylon.js",
    "tier": "pro",
    "sizeBytes": 11885,
    "sections": [
      "Quick Start — VR in 10 Lines",
      "Session Management",
      "Session Types",
      "Manual Session Control",
      "Reference Spaces",
      "Controller Input",
      "Accessing Controllers",
      "Standard Controller Components",
      "Hand Tracking",
      "Teleportation",
      "Default Setup (included with createDefaultXRExperienceAsync)",
      "Manual Teleportation Setup",
      "Smooth Locomotion Alternative",
      "AR Features",
      "Hit Testing (Place Objects in Real World)",
      "Light Estimation",
      "Performance for XR Games",
      "Frame Rate Targets",
      "Optimization Checklist",
      "Profiling in XR",
      "Feature Detection"
    ]
  },
  {
    "id": "babylonjs-arch/R4",
    "title": "Procedural Generation",
    "description": "Babylon.js provides multiple layers of procedural generation support, from simple heightmap terrain to a full node-ba...",
    "category": "reference",
    "module": "babylonjs-arch",
    "engine": "Babylon.js",
    "tier": "pro",
    "sizeBytes": 10150,
    "sections": [
      "1. MeshBuilder Procedural Primitives",
      "Height-Map Terrain",
      "Custom VertexData",
      "Updatable Meshes",
      "2. DynamicTerrain Extension",
      "Setup",
      "LOD Configuration",
      "Custom Vertex Functions",
      "Camera-Following (FPS-Style)",
      "3. Node Geometry System",
      "Basic Pipeline",
      "Available Source Blocks",
      "Instancing Blocks",
      "Node Geometry Editor",
      "Performance Considerations",
      "Comparison of Approaches",
      "Integration with Physics"
    ]
  },
  {
    "id": "R5",
    "title": "R5 — Scene Optimization, LOD & Spatial Partitioning",
    "description": "Large game worlds with thousands of meshes, sprawling terrain, and dense vegetation need aggressive optimization to m...",
    "category": "reference",
    "module": "babylonjs-arch",
    "engine": "Babylon.js",
    "tier": "pro",
    "sizeBytes": 12475,
    "sections": [
      "SceneOptimizer — Automatic Quality Scaling",
      "Basic Usage",
      "Built-in Optimization Levels",
      "Custom Optimizer",
      "Performance Priority Mode",
      "Level of Detail (LOD)",
      "Automatic LOD with Mesh Simplification",
      "Manual LOD with Pre-made Meshes",
      "LOD + Instancing",
      "Mesh Instancing",
      "Standard Instances",
      "Thin Instances (Maximum Performance)",
      "Octree Spatial Partitioning",
      "Scene-Level Octree",
      "Dynamic Content",
      "Per-Mesh Submesh Octree",
      "Ground Mesh Optimization",
      "Manual Queries",
      "Freezing & Caching",
      "Material Freezing",
      "World Matrix Freezing",
      "Active Mesh Freezing",
      "Culling Strategies",
      "Buffer Clearing Optimization",
      "Optimization Checklist for Game Worlds",
      "Profiling Tools"
    ]
  },
  {
    "id": "R6",
    "title": "Post-Processing Pipeline",
    "description": "Babylon.js has a layered post-processing system: individual PostProcess effects, pre-built rendering pipelines that c...",
    "category": "reference",
    "module": "babylonjs-arch",
    "engine": "Babylon.js",
    "tier": "pro",
    "sizeBytes": 11221,
    "sections": [
      "DefaultRenderingPipeline — The All-in-One Solution",
      "Performance Notes",
      "SSAO2 — Screen-Space Ambient Occlusion",
      "Tuning SSAO2",
      "Screen-Space Reflections (SSR)",
      "SSR Caveats",
      "Custom Post-Process Effects",
      "Custom Shader Tips",
      "Combining Pipelines",
      "Pipeline Ordering Best Practices",
      "Performance Budget",
      "Disabling at Runtime"
    ]
  },
  {
    "id": "E10",
    "title": "E10 — Custom Shaders & Materials",
    "description": "",
    "category": "architecture",
    "module": "bevy-arch",
    "engine": "Bevy",
    "tier": "pro",
    "sizeBytes": 11718,
    "sections": [
      "Overview",
      "The Material Trait",
      "Registering the Material",
      "The WGSL Shader Side",
      "Bind Group Layout",
      "Extending StandardMaterial",
      "Render Pipeline Architecture",
      "Dual-World Architecture",
      "The Four Render Phases",
      "2D Materials",
      "Post-Processing Effects",
      "Shader Defs (Compile-Time Branching)",
      "Cargo Dependencies",
      "Common Pitfalls",
      "Bind Group Mismatches",
      "Forgetting MaterialPlugin",
      "Ownership and the Asset System",
      "Hot Reloading",
      "Summary"
    ]
  },
  {
    "id": "E11",
    "title": "E11 — System Scheduling, Sets & Ordering",
    "description": "",
    "category": "architecture",
    "module": "bevy-arch",
    "engine": "Bevy",
    "tier": "pro",
    "sizeBytes": 11696,
    "sections": [
      "Overview",
      "Schedules",
      "Adding Systems to Schedules",
      "Custom Schedules",
      "System Ordering",
      "`.before()` and `.after()`",
      "`.chain()`",
      "Partial Chaining",
      "System Sets",
      "Defining Sets",
      "Adding Systems to Sets",
      "Configuring Sets",
      "Nested Sets",
      "Run Conditions",
      "Built-in Conditions",
      "Custom Run Conditions",
      "Set-Level Run Conditions",
      "Multiple Conditions",
      "Removing Systems at Runtime (Bevy 0.18)",
      "Exclusive Systems",
      "Ambiguity Detection",
      "Common Patterns",
      "Game Loop Pattern",
      "Plugin Integration Pattern",
      "Fixed Timestep Physics with Interpolation",
      "Quick Reference",
      "Further Reading"
    ]
  },
  {
    "id": "E12",
    "title": "E12 — Fullscreen Materials & Post-Processing",
    "description": "",
    "category": "architecture",
    "module": "bevy-arch",
    "engine": "Bevy",
    "tier": "pro",
    "sizeBytes": 7330,
    "sections": [
      "Overview",
      "The Problem It Solves",
      "FullscreenMaterial Trait",
      "Key Trait Methods",
      "Registering the Plugin",
      "Writing the WGSL Shader",
      "Shader Conventions",
      "Render Graph Ordering",
      "Multiple Effects & Chaining",
      "Dynamic Parameter Updates",
      "When to Use FullscreenMaterial vs. Low-Level Render Features",
      "Cargo Dependencies"
    ]
  },
  {
    "id": "E13",
    "title": "E13 — Common ECS Anti-Patterns & Pitfalls",
    "description": "",
    "category": "architecture",
    "module": "bevy-arch",
    "engine": "Bevy",
    "tier": "pro",
    "sizeBytes": 9728,
    "sections": [
      "Why This Matters",
      "1. God Components",
      "The Anti-Pattern",
      "Why It Hurts",
      "The Fix",
      "2. Forgetting System Ordering",
      "The Anti-Pattern",
      "Why It Hurts",
      "The Fix",
      "3. Conflicting Query Parameters",
      "The Anti-Pattern",
      "The Fix — ParamSet",
      "The Fix — Without Filter (when applicable)",
      "4. Spawning Entities Without Required Components",
      "The Anti-Pattern",
      "Why It Hurts",
      "The Fix",
      "5. Overusing `Commands` When Direct World Access Works",
      "The Anti-Pattern",
      "Why It Hurts",
      "The Fix",
      "6. Mutating Resources Inside Queries",
      "The Anti-Pattern",
      "The Fix",
      "7. Ignoring Change Detection",
      "The Anti-Pattern",
      "The Fix",
      "8. Event Misuse: Missing Events or Double-Processing",
      "The Anti-Pattern",
      "The Fix",
      "Quick Reference: Pitfall → Fix",
      "Next Steps"
    ]
  },
  {
    "id": "E14",
    "title": "Entity Picking & Selection",
    "description": "Bevy's built-in picking system lets you detect pointer interactions (hover, click, drag) on entities — meshes, sprite...",
    "category": "architecture",
    "module": "bevy-arch",
    "engine": "Bevy",
    "tier": "pro",
    "sizeBytes": 7767,
    "sections": [
      "Core Architecture",
      "Quick Start — 3D Mesh Picking",
      "Pointer Event Types",
      "Event Categories",
      "Common Patterns",
      "Drag to Rotate (3D)",
      "Sprite Picking (2D)",
      "Disabling Picking on Specific Entities",
      "Opt-In Picking (Require Markers)",
      "Manual Ray Casting with MeshRayCast",
      "Performance Notes",
      "Rust Ownership Gotcha",
      "Cargo Dependencies"
    ]
  },
  {
    "id": "E15",
    "title": "Reflection & Type Registry",
    "description": "Bevy's reflection system (bevyreflect) provides runtime introspection — accessing struct fields by name, serializing ...",
    "category": "architecture",
    "module": "bevy-arch",
    "engine": "Bevy",
    "tier": "pro",
    "sizeBytes": 7783,
    "sections": [
      "Why Reflection Matters in Game Dev",
      "Deriving Reflect",
      "Registering Types",
      "Dynamic Field Access",
      "Path-Based Access",
      "Serialization with Reflection",
      "Trait Reflection",
      "Handling Non-Reflect Fields",
      "Practical Uses in Game Development",
      "Debug Inspector",
      "Scene Files",
      "Save Games",
      "Hot Reloading",
      "Rust Ownership Gotchas",
      "Cargo Dependencies"
    ]
  },
  {
    "id": "bevy-arch/E1",
    "title": "E1 — ECS Fundamentals",
    "description": "",
    "category": "architecture",
    "module": "bevy-arch",
    "engine": "Bevy",
    "tier": "pro",
    "sizeBytes": 9194,
    "sections": [
      "What is Bevy's ECS?",
      "Entities",
      "Components",
      "Ownership Gotcha (Rust-Specific)",
      "Systems",
      "System Parameters",
      "Registration",
      "Queries",
      "Query Filters",
      "Resources",
      "When to Use Resources vs Components",
      "Events",
      "Schedules and Ordering",
      "Built-in Schedules",
      "System Ordering",
      "States",
      "Archetype Storage Model",
      "Commands and Deferred Execution"
    ]
  },
  {
    "id": "E2",
    "title": "E2 — Rendering & Cameras",
    "description": "",
    "category": "architecture",
    "module": "bevy-arch",
    "engine": "Bevy",
    "tier": "pro",
    "sizeBytes": 14387,
    "sections": [
      "Overview",
      "Cameras",
      "Camera2d",
      "Camera3d",
      "Camera Configuration",
      "Built-in Camera Controllers (New in 0.18)",
      "Multi-Camera Setup",
      "2D Rendering",
      "Sprites",
      "Sprite Z-Ordering",
      "Texture Atlases (Spritesheets)",
      "2D Meshes",
      "3D Rendering",
      "Meshes and Materials",
      "Built-in Primitive Shapes",
      "StandardMaterial (PBR)",
      "Lighting",
      "Point Light",
      "Directional Light",
      "Spot Light",
      "Ambient Light",
      "Loading 3D Models",
      "Addressing glTF Sub-Assets",
      "Render Layers and Visibility",
      "Visibility",
      "Render Layers",
      "Performance Tips",
      "Common Pitfalls"
    ]
  },
  {
    "id": "E3",
    "title": "E3 — Input Handling & State Management",
    "description": "",
    "category": "architecture",
    "module": "bevy-arch",
    "engine": "Bevy",
    "tier": "pro",
    "sizeBytes": 9039,
    "sections": [
      "Input Handling",
      "Keyboard Input",
      "Mouse Input",
      "Gamepad Input",
      "Touch Input",
      "Action-Based Input (Community Pattern)",
      "State Management",
      "Defining a State",
      "Transitioning Between States",
      "Gating Systems by State",
      "SubStates — Child States with Manual Control",
      "ComputedStates — Derived States (Read-Only)",
      "State-Scoped Entities",
      "Design Patterns",
      "Input → Action → State Flow"
    ]
  },
  {
    "id": "bevy-arch/E4",
    "title": "E4 — Scenes, Animation & Serialization",
    "description": "",
    "category": "architecture",
    "module": "bevy-arch",
    "engine": "Bevy",
    "tier": "pro",
    "sizeBytes": 8967,
    "sections": [
      "Overview",
      "Scenes & Serialization",
      "What Is a Scene?",
      "Scene File Format (RON)",
      "Registering Types for Reflection",
      "Saving a Scene at Runtime",
      "Loading & Spawning a Scene",
      "Scene Gotchas",
      "Animation System",
      "Architecture",
      "AnimationGraph Structure",
      "Loading Animations from glTF",
      "Controlling Playback",
      "Procedural Animation (Code-Driven Clips)",
      "Animation Events",
      "Combining Scenes + Animation",
      "Key Cargo Dependencies",
      "Further Reading"
    ]
  },
  {
    "id": "bevy-arch/E5",
    "title": "E5 — 3D Rendering & Lighting",
    "description": "",
    "category": "architecture",
    "module": "bevy-arch",
    "engine": "Bevy",
    "tier": "pro",
    "sizeBytes": 13046,
    "sections": [
      "Overview",
      "Core 3D Components",
      "Mesh3d — Geometry",
      "MeshMaterial3d — Appearance",
      "Lighting",
      "PointLight",
      "DirectionalLight",
      "SpotLight",
      "Ambient Light",
      "Environment Maps",
      "Camera Setup",
      "Camera3d",
      "HDR & Tonemapping",
      "Post-Processing",
      "Loading 3D Models (glTF)",
      "Accessing Individual Parts",
      "Bevy 0.18 PBR Fixes",
      "Custom Materials",
      "Performance Tips",
      "Complete Example: Lit Scene",
      "Common Pitfalls"
    ]
  },
  {
    "id": "bevy-arch/E6",
    "title": "E6 — Testing & Debugging",
    "description": "",
    "category": "architecture",
    "module": "bevy-arch",
    "engine": "Bevy",
    "tier": "pro",
    "sizeBytes": 9715,
    "sections": [
      "Overview",
      "Unit Testing Systems",
      "Basic Pattern: World + System Runner",
      "Why App instead of raw World?",
      "Testing with Events",
      "Testing State Transitions",
      "Debugging Tools",
      "Built-in Logging",
      "FrameTimeDiagnosticsPlugin",
      "bevy-inspector-egui (Community — v0.36+, Bevy 0.18 compatible)",
      "System Ordering Ambiguity Detection",
      "Performance Profiling",
      "Tracy Integration",
      "Custom Spans",
      "Testing Strategy Recommendations",
      "Running Tests",
      "Common Pitfalls"
    ]
  },
  {
    "id": "bevy-arch/E7",
    "title": "E7 — Required Components & Entity Relationships",
    "description": "",
    "category": "architecture",
    "module": "bevy-arch",
    "engine": "Bevy",
    "tier": "pro",
    "sizeBytes": 11318,
    "sections": [
      "Overview",
      "Required Components",
      "The Problem They Solve",
      "How They Work",
      "Declaring Required Components",
      "Custom Initialization",
      "Overriding Defaults",
      "Runtime Registration",
      "Performance",
      "Rust Ownership Gotcha",
      "Entity Relationships",
      "The Problem They Solve",
      "Relationship & RelationshipTarget",
      "Built-in: ChildOf & Children",
      "Defining Custom Relationships",
      "Spawning with Custom Relationships",
      "Querying Relationships",
      "The Relationship Trait",
      "Migration from Pre-0.16",
      "Required Components + Relationships Together",
      "Common Pitfalls",
      "Further Reading"
    ]
  },
  {
    "id": "E8",
    "title": "E8 — Performance Optimization & ECS Best Practices",
    "description": "",
    "category": "architecture",
    "module": "bevy-arch",
    "engine": "Bevy",
    "tier": "pro",
    "sizeBytes": 8634,
    "sections": [
      "Overview",
      "Compile-Time Performance",
      "Dynamic Linking (Dev Only)",
      "Faster Linker",
      "Optimize Dependencies, Not Your Code",
      "Runtime ECS Performance",
      "1. Use Read-Only Access When Possible",
      "2. Use Query Filters to Reduce Iteration",
      "3. Leverage Change Detection",
      "4. System Sets and Ordering",
      "5. Disabling Multithreading for Simple Games",
      "Profiling",
      "Built-In Diagnostics",
      "Tracy Integration",
      "System-Level Spans",
      "Common Performance Pitfalls",
      "Entity Archetype Awareness",
      "Cargo Profile for Releases",
      "Summary Checklist"
    ]
  },
  {
    "id": "bevy-arch/E9",
    "title": "E9 — Observers, Component Hooks & One-Shot Systems",
    "description": "",
    "category": "architecture",
    "module": "bevy-arch",
    "engine": "Bevy",
    "tier": "pro",
    "sizeBytes": 12372,
    "sections": [
      "Overview",
      "Component Lifecycle Hooks",
      "Available Hooks",
      "Registering Hooks",
      "Hook Rules",
      "Rust Ownership Gotcha",
      "Observers",
      "Lifecycle Observers",
      "Custom Event Observers",
      "Observer vs Hook Decision Guide",
      "API Naming (Bevy 0.18)",
      "One-Shot Systems",
      "Basic Usage with `run_system_cached`",
      "Key Behaviors",
      "One-Shot Systems with Input/Output",
      "When to Use Each Pattern",
      "Combining Patterns: A Practical Example",
      "Cargo Dependencies",
      "Common Pitfalls",
      "Further Reading"
    ]
  },
  {
    "id": "bevy-arch-rules",
    "title": "Bevy — AI Rules",
    "description": "Engine-specific rules for projects using the Bevy game engine. These supplement the engine-agnostic rules in docs/cor...",
    "category": "reference",
    "module": "bevy-arch",
    "engine": "Bevy",
    "tier": "pro",
    "sizeBytes": 5358,
    "sections": [
      "Architecture Context",
      "Tech Stack",
      "Project Structure Conventions",
      "Rust + Bevy Code Generation Rules",
      "Components: Pure Data Only",
      "Systems: Functions with Typed Parameters",
      "Resources: Global Singletons",
      "Events: Loose Coupling Between Systems",
      "Critical Bevy Conventions",
      "1. Use Plugins for Organization",
      "2. Commands Are Deferred",
      "3. Query Conflict Resolution",
      "4. Use FixedUpdate for Physics",
      "5. States for Game Phases",
      "6. Never Hallucinate APIs",
      "Rust-Specific Gotchas in Game Dev",
      "Ownership in Game Loops",
      "Borrowing in Queries",
      "String Handling",
      "Version Compatibility"
    ]
  },
  {
    "id": "bevy-arch/G10",
    "title": "G10 — Procedural Generation Patterns",
    "description": "",
    "category": "guide",
    "module": "bevy-arch",
    "engine": "Bevy",
    "tier": "pro",
    "sizeBytes": 16138,
    "sections": [
      "Overview",
      "Noise-Based Terrain",
      "Cargo Dependencies",
      "Heightmap Generation",
      "Spawning 3D Terrain Meshes",
      "2D Tilemap Generation",
      "Biome Assignment",
      "Multi-Layer Noise",
      "Wave Function Collapse (WFC)",
      "Manual WFC Concepts",
      "Chunk Streaming (Infinite Worlds)",
      "Async Generation",
      "Seeded Randomness",
      "Community Crates for Procgen",
      "Common Pitfalls",
      "Generating Too Much Per Frame",
      "Floating Point Determinism",
      "Forgetting to Despawn",
      "Mesh Updates"
    ]
  },
  {
    "id": "bevy-arch/G11",
    "title": "G11 — First-Party Camera Controllers",
    "description": "",
    "category": "guide",
    "module": "bevy-arch",
    "engine": "Bevy",
    "tier": "pro",
    "sizeBytes": 7768,
    "sections": [
      "Overview",
      "Cargo Feature Flags",
      "FreeCamera (3D Fly Camera)",
      "Quick Setup",
      "Default Controls",
      "Customizing FreeCamera",
      "When to Use FreeCamera",
      "PanCamera (2D Pan & Zoom)",
      "Quick Setup",
      "Default Controls",
      "Customizing PanCamera",
      "Toggling Controllers at Runtime",
      "Building a Custom Camera From the Built-In Source",
      "Common Patterns",
      "Dual Camera Setup (Gameplay + Debug)",
      "Camera Bounds (Clamping PanCamera)",
      "Rust Ownership Note"
    ]
  },
  {
    "id": "bevy-arch/G12",
    "title": "G12 — Screenshot, Video Recording & Dev Tools",
    "description": "",
    "category": "guide",
    "module": "bevy-arch",
    "engine": "Bevy",
    "tier": "pro",
    "sizeBytes": 7713,
    "sections": [
      "Overview",
      "EasyScreenshotPlugin",
      "Setup",
      "How It Works",
      "Practical Tips",
      "EasyScreenRecordPlugin",
      "Setup",
      "How It Works",
      "Programmatic Control",
      "Important Limitations",
      "When to Use (and Not Use) Screen Recording",
      "Other Dev Tools in Bevy 0.18",
      "Frame Time Diagnostics",
      "Entity Count Diagnostics",
      "System Information",
      "Wireframe Rendering (3D)",
      "Debug Gizmos",
      "Putting It All Together: A Dev Tools Setup",
      "Rust Ownership Note"
    ]
  },
  {
    "id": "G13",
    "title": "G13 — Atmosphere & Procedural Sky Rendering",
    "description": "",
    "category": "guide",
    "module": "bevy-arch",
    "engine": "Bevy",
    "tier": "pro",
    "sizeBytes": 8079,
    "sections": [
      "Overview",
      "Quick Start: Earth-like Sky",
      "Core Components",
      "`Atmosphere`",
      "`ScatteringMedium` (Asset)",
      "`AtmosphereSettings`",
      "Sun Interaction",
      "Recipe: Different Atmosphere Types",
      "Desert Sky (Warm, Hazy)",
      "Foggy Coastline (Dense, Low Visibility)",
      "Alien Planet (Non-Earth Colors)",
      "Performance Notes",
      "Integration with Volumetric Fog",
      "Rust Ownership Note"
    ]
  },
  {
    "id": "bevy-arch/G14",
    "title": "G14 — Particle Systems & VFX",
    "description": "",
    "category": "guide",
    "module": "bevy-arch",
    "engine": "Bevy",
    "tier": "pro",
    "sizeBytes": 8465,
    "sections": [
      "Overview",
      "Setup",
      "Core Concepts",
      "EffectAsset",
      "Modifier Pipeline",
      "Spawner",
      "Basic Example — Fire Effect",
      "Common Effect Recipes",
      "Explosion (One-Shot Burst)",
      "Trail / Ribbon",
      "Performance Guidelines",
      "Alternatives to bevy_hanabi",
      "Next Steps"
    ]
  },
  {
    "id": "G15",
    "title": "G15 — Accessibility and Internationalization",
    "description": "",
    "category": "guide",
    "module": "bevy-arch",
    "engine": "Bevy",
    "tier": "pro",
    "sizeBytes": 8835,
    "sections": [
      "Overview",
      "Part 1 — Accessibility with AccessKit",
      "What is AccessKit?",
      "How it Works",
      "Key Components",
      "Current Limitations (Bevy 0.18)",
      "Best Practices",
      "Part 2 — Internationalization (i18n) with Fluent",
      "Why Fluent?",
      "Setup",
      "File Structure",
      "Loading and Using Translations",
      "Runtime Locale Switching",
      "Combining Accessibility + i18n",
      "Ownership Gotchas",
      "Recommended Crates"
    ]
  },
  {
    "id": "G16",
    "title": "G16 — CI/CD, Release Pipelines, and Distribution",
    "description": "",
    "category": "guide",
    "module": "bevy-arch",
    "engine": "Bevy",
    "tier": "pro",
    "sizeBytes": 10401,
    "sections": [
      "Overview",
      "Quick Start: bevy_github_ci_template",
      "Build Outputs",
      "Alternative: bevy_game_template",
      "Writing Your Own CI Pipeline",
      "Step 1 — Fast CI (Lint + Test)",
      "Step 2 — Release Builds",
      "Publishing to itch.io",
      "macOS Packaging: Info.plist",
      "Speeding Up CI Builds",
      "Steam Distribution",
      "Asset Path Considerations",
      "Checklist"
    ]
  },
  {
    "id": "bevy-arch/G1",
    "title": "G1 — Getting Started with Bevy",
    "description": "",
    "category": "guide",
    "module": "bevy-arch",
    "engine": "Bevy",
    "tier": "pro",
    "sizeBytes": 9300,
    "sections": [
      "Prerequisites",
      "Create a New Project",
      "Feature Collections (New in 0.18)",
      "Enable Fast Compiles",
      "Minimal App",
      "Adding a 2D Game Window with a Sprite",
      "Input Handling",
      "Gamepad Input",
      "Audio",
      "Asset Loading",
      "Common Plugins Ecosystem",
      "Project Structure Convention",
      "Organizing with Plugins",
      "WASM / Web Builds",
      "Common Pitfalls"
    ]
  },
  {
    "id": "bevy-arch/G2",
    "title": "G2 — Physics with Avian",
    "description": "",
    "category": "guide",
    "module": "bevy-arch",
    "engine": "Bevy",
    "tier": "pro",
    "sizeBytes": 13646,
    "sections": [
      "What is Avian?",
      "Setup",
      "Rigid Bodies",
      "Colliders",
      "2D Collider Shapes",
      "3D Collider Shapes",
      "Gravity",
      "Important: Pixel-Scale Gravity",
      "Per-Entity Gravity Override",
      "Velocity and Forces",
      "Direct Velocity",
      "Angular Velocity",
      "External Forces and Impulses",
      "Sensors",
      "Detecting Sensor Overlaps",
      "Collision Events",
      "Using Observers (Recommended)",
      "Using MessageReader (Global)",
      "Mass and Physical Properties",
      "Joints (Constraints)",
      "Transform Interpolation",
      "Physics Layers (Collision Filtering)",
      "Debugging Physics",
      "Physics Diagnostics",
      "Complete 2D Example: Falling Boxes",
      "Common Pitfalls"
    ]
  },
  {
    "id": "bevy-arch/G3",
    "title": "G3 — Asset Loading & Audio",
    "description": "",
    "category": "guide",
    "module": "bevy-arch",
    "engine": "Bevy",
    "tier": "pro",
    "sizeBytes": 8591,
    "sections": [
      "Overview",
      "The AssetServer",
      "Checking Load State",
      "Asset Events",
      "Organized Loading with bevy_asset_loader",
      "Audio",
      "Playing a Sound",
      "Controlling Playback",
      "PlaybackSettings Reference",
      "Spatial Audio",
      "Common Patterns",
      "Loading Screen with Progress",
      "Sound Effect Pool",
      "Hot Reloading in Development",
      "Supported Audio Formats"
    ]
  },
  {
    "id": "bevy-arch/G4",
    "title": "G4 — UI System (bevyui)",
    "description": "",
    "category": "guide",
    "module": "bevy-arch",
    "engine": "Bevy",
    "tier": "pro",
    "sizeBytes": 13232,
    "sections": [
      "Overview",
      "Core Concepts",
      "The `Node` Component",
      "Layout Values (`Val`)",
      "Flexbox vs. CSS Grid",
      "Adding Visuals",
      "Background Color",
      "Borders and Rounded Corners",
      "Background Gradients (Bevy 0.17+)",
      "Text",
      "Loading Custom Fonts",
      "Images in UI",
      "Interaction and Buttons",
      "Standard Headless Widgets (Bevy 0.17+)",
      "Button Widget",
      "Checkbox Widget",
      "Slider Widget",
      "Input Focus (Bevy 0.16+)",
      "Nesting and Hierarchy",
      "Showing/Hiding UI",
      "bevy_egui: Alternative Immediate-Mode UI",
      "Common Pitfalls"
    ]
  },
  {
    "id": "bevy-arch/G5",
    "title": "G5 — Networking & Multiplayer",
    "description": "",
    "category": "guide",
    "module": "bevy-arch",
    "engine": "Bevy",
    "tier": "pro",
    "sizeBytes": 9814,
    "sections": [
      "Overview",
      "Choosing a Networking Crate",
      "Lightyear Setup",
      "Cargo Dependencies",
      "Architecture Concepts",
      "Defining a Protocol",
      "Server Setup",
      "Client-Side Prediction",
      "Bevy Replicon Setup",
      "Cargo Dependencies",
      "Marking Components for Replication",
      "Entity Replication",
      "Network Events",
      "Visibility",
      "Common Multiplayer Patterns",
      "Lobby Architecture",
      "Authority Model",
      "Tick Rate vs Frame Rate",
      "WASM / Web Multiplayer",
      "Debugging Multiplayer",
      "Quick Decision Guide",
      "Further Reading"
    ]
  },
  {
    "id": "bevy-arch/G6",
    "title": "G6 — Editor Tools & Development Workflow",
    "description": "",
    "category": "guide",
    "module": "bevy-arch",
    "engine": "Bevy",
    "tier": "pro",
    "sizeBytes": 7847,
    "sections": [
      "Overview",
      "bevy_inspector_egui",
      "Setup",
      "Quick Start — World Inspector",
      "Inspecting Specific Resources",
      "State and Asset Inspectors",
      "Making Custom Types Inspectable",
      "bevy_editor_pls",
      "Setup",
      "Built-In Panels",
      "Custom Editor Windows",
      "The Official Bevy Editor (In Progress)",
      "Development Workflow Tips",
      "1. Feature-Gate Editor Plugins",
      "2. Hot Reloading Assets",
      "3. Fast Iteration Cycle",
      "4. Conditional Systems for Debug Visualization",
      "Comparison: Which Tool to Use"
    ]
  },
  {
    "id": "bevy-arch/G7",
    "title": "G7 — 2D Game Development Patterns",
    "description": "",
    "category": "guide",
    "module": "bevy-arch",
    "engine": "Bevy",
    "tier": "pro",
    "sizeBytes": 12711,
    "sections": [
      "Overview",
      "Sprites and Sprite Sheets",
      "Basic Sprite",
      "Sprite Sheet Animation",
      "Sprite Ordering (Z-Layers)",
      "Tilemaps",
      "bevy_ecs_tilemap",
      "bevy_ecs_tiled (Tiled Map Editor Integration)",
      "LDtk Integration",
      "2D Camera Patterns",
      "Basic Camera with Smooth Follow",
      "Camera Bounds (Clamping to Level)",
      "Pixel-Perfect Rendering",
      "Common 2D Game Architecture",
      "Plugin-Per-Feature Pattern",
      "State Machine for Game Flow",
      "2D Collision (Without Full Physics)",
      "Cargo Dependencies",
      "Common Pitfalls",
      "Further Reading"
    ]
  },
  {
    "id": "bevy-arch/G8",
    "title": "G8 — Save/Load Systems & Game Persistence",
    "description": "",
    "category": "guide",
    "module": "bevy-arch",
    "engine": "Bevy",
    "tier": "pro",
    "sizeBytes": 11620,
    "sections": [
      "Overview",
      "Strategy: What to Save",
      "Save These",
      "Skip These",
      "The Marker Pattern",
      "Approach 1: Built-in DynamicScene (Simple Games)",
      "Saving",
      "Loading",
      "Limitations",
      "Approach 2: Custom Serde-Based System (Medium Complexity)",
      "Cargo Dependencies",
      "Define a Save File Struct",
      "Save System",
      "Load System",
      "Save File Versioning",
      "Approach 3: Third-Party Frameworks (Production Games)",
      "bevy_save (v2.0 — supports Bevy 0.16)",
      "moonshine_save",
      "bevy_atomic_save",
      "Best Practices",
      "Save Directory Location",
      "Atomic Writes",
      "Save Slot UI Pattern",
      "Autosave",
      "Common Pitfalls",
      "Further Reading"
    ]
  },
  {
    "id": "bevy-arch/G9",
    "title": "G9 — AI & Pathfinding Patterns",
    "description": "",
    "category": "guide",
    "module": "bevy-arch",
    "engine": "Bevy",
    "tier": "pro",
    "sizeBytes": 14707,
    "sections": [
      "Overview",
      "Decision-Making Architectures",
      "1. Simple State Machine (No Dependencies)",
      "2. Utility AI with big-brain",
      "3. Behavior Trees with bevior_tree",
      "Pathfinding",
      "Grid-Based: The `pathfinding` Crate",
      "NavMesh: oxidized_navigation (3D)",
      "Hierarchical: bevy_northstar (2D/2.5D)",
      "Steering & Movement",
      "Path Following",
      "Separation (Avoid Stacking)",
      "Performance Considerations",
      "Throttled Pathfinding",
      "Combining AI + Pathfinding",
      "Ecosystem Crate Summary",
      "Further Reading"
    ]
  },
  {
    "id": "bevy-arch/R1",
    "title": "R1 — Plugins & WASM Deployment",
    "description": "",
    "category": "reference",
    "module": "bevy-arch",
    "engine": "Bevy",
    "tier": "pro",
    "sizeBytes": 9541,
    "sections": [
      "Bevy's Plugin System",
      "Writing a Plugin",
      "Plugin Groups",
      "Configurable Plugins",
      "Popular Community Plugins (Bevy 0.18)",
      "Physics",
      "UI & Debug",
      "Rendering & Graphics",
      "Audio",
      "Networking",
      "Tilemaps",
      "WASM / Web Deployment",
      "Prerequisites",
      "Building",
      "HTML Template",
      "Using Trunk (Recommended)",
      "WASM-Specific Cargo Settings",
      "Feature Flags for WASM",
      "Asset Loading in WASM",
      "Deploying to itch.io",
      "WASM Limitations",
      "Finding More Plugins",
      "Common Pitfalls"
    ]
  },
  {
    "id": "bevy-arch/R2",
    "title": "R2 — Community Plugins Ecosystem",
    "description": "",
    "category": "reference",
    "module": "bevy-arch",
    "engine": "Bevy",
    "tier": "pro",
    "sizeBytes": 8301,
    "sections": [
      "Overview",
      "Physics",
      "Avian (formerly bevy_xpbd)",
      "bevy_rapier (Rapier integration)",
      "Input",
      "leafwing-input-manager",
      "UI & Debug",
      "bevy_egui",
      "bevy-inspector-egui",
      "VFX & Particles",
      "bevy_hanabi",
      "Asset Loading",
      "bevy_asset_loader",
      "Networking & Multiplayer",
      "bevy_replicon",
      "Tilemaps",
      "bevy_ecs_tilemap",
      "Audio",
      "bevy_kira_audio",
      "Plugin Compatibility Quick Reference (Bevy 0.18)",
      "Finding More Plugins"
    ]
  },
  {
    "id": "bevy-arch/R3",
    "title": "R3 — Migration Patterns & Version Management",
    "description": "",
    "category": "reference",
    "module": "bevy-arch",
    "engine": "Bevy",
    "tier": "pro",
    "sizeBytes": 7457,
    "sections": [
      "Overview",
      "Bevy's Release Cadence",
      "Migration Workflow",
      "Step 1: Read the Official Guide First",
      "Step 2: Update Dependencies Methodically",
      "Step 3: Fix Compiler Errors Categorically",
      "Step 4: Run Tests, Then Spot-Check Visually",
      "Common Breaking Change Patterns",
      "Pattern 1: Renamed APIs",
      "Pattern 2: Removed Re-exports",
      "Pattern 3: Restructured Cargo Features",
      "Pattern 4: Trait/Derive Changes",
      "Pattern 5: Behavioral Changes",
      "Automated Migration Assistance",
      "ast-grep for Mechanical Renames",
      "Compiler-Driven Migration",
      "Version Pinning Strategy",
      "For Game Projects (Ship Date Pressure)",
      "For Library/Plugin Authors",
      "Pre-Release Testing",
      "Resources",
      "Checklist: Upgrading Bevy Version"
    ]
  },
  {
    "id": "bevy-arch/R4",
    "title": "R4 — Cargo Feature Collections & Selective Compilation",
    "description": "",
    "category": "reference",
    "module": "bevy-arch",
    "engine": "Bevy",
    "tier": "pro",
    "sizeBytes": 6782,
    "sections": [
      "Overview",
      "The Three Collections",
      "`2d` — Everything for a 2D Game",
      "`3d` — Full 3D Rendering Stack",
      "`ui` — Minimal UI-Only",
      "Mid-Level Features for Fine-Grained Control",
      "Practical Configurations",
      "Game Jam 2D Prototype",
      "3D Game with Everything",
      "Headless Server (ECS Only)",
      "CI / Testing (Faster Builds)",
      "Impact on Compile Times",
      "Migration from Pre-0.18",
      "Ownership / Borrowing Note",
      "Quick Reference"
    ]
  },
  {
    "id": "bevy-arch/R5",
    "title": "R5 — Bevy Remote Protocol (BRP)",
    "description": "",
    "category": "reference",
    "module": "bevy-arch",
    "engine": "Bevy",
    "tier": "pro",
    "sizeBytes": 8329,
    "sections": [
      "Overview",
      "Quick Setup",
      "Built-in Methods",
      "Entity Methods",
      "Query Methods",
      "Resource Methods",
      "Other Methods",
      "Watch Variants",
      "Request / Response Format",
      "Querying an Entity's Transform",
      "Querying Entities with Filters",
      "Spawning an Entity",
      "Error Response",
      "Testing with curl",
      "Custom Methods",
      "Practical Use Cases",
      "Live Editor / Inspector",
      "AI-Assisted Development",
      "Debug Dashboards",
      "Automated Testing",
      "Security Considerations",
      "Ownership Gotcha"
    ]
  },
  {
    "id": "construct-arch/E1",
    "title": "E1 — Construct 3 Architecture Overview",
    "description": "",
    "category": "architecture",
    "module": "construct-arch",
    "engine": "Construct",
    "tier": "pro",
    "sizeBytes": 7652,
    "sections": [
      "Core Philosophy: Event Sheets, Layouts, and Behaviors",
      "Object Types and Instances",
      "Object Types",
      "Instances and SOL (Selected Object List)",
      "Event Sheet Structure",
      "Event Types",
      "Execution Order",
      "Functions",
      "Families",
      "Layers and Effects",
      "Layer Stack",
      "WebGL Effects",
      "JavaScript / TypeScript Integration",
      "Runtime API",
      "Bridging Events and Scripts",
      "Export Pipeline",
      "When to Choose Construct 3"
    ]
  },
  {
    "id": "construct-arch-rules",
    "title": "Construct 3 — AI Rules",
    "description": "Engine-specific rules for projects using Construct 3. These supplement the engine-agnostic rules in docs/core/ai-work...",
    "category": "reference",
    "module": "construct-arch",
    "engine": "Construct",
    "tier": "pro",
    "sizeBytes": 4824,
    "sections": [
      "Architecture Context",
      "Tech Stack",
      "Project Structure Conventions",
      "Event Sheet Rules",
      "Conditions Before Actions — Always",
      "Use Groups to Organize",
      "Families for Shared Logic",
      "Use \"For Each\" for Per-Instance Logic",
      "Prefer Behaviors Over Manual Code",
      "JavaScript Scripting Rules",
      "In-Event Scripts",
      "Separate Script Files",
      "Do Not Mix Paradigms Recklessly",
      "Common Pitfalls"
    ]
  },
  {
    "id": "construct-arch/G10",
    "title": "G10 — UI and HUD Patterns",
    "description": "",
    "category": "guide",
    "module": "construct-arch",
    "engine": "Construct",
    "tier": "pro",
    "sizeBytes": 9849,
    "sections": [
      "Overview",
      "Layer-Based HUD Architecture",
      "Recommended Layer Stack",
      "Why Parallax 0,0 Matters",
      "Layer Properties for UI",
      "Global UI: One Layout, Every Level",
      "Pattern: Global UI via Layout Include",
      "When Global Objects Work",
      "When Global Objects Don't Work",
      "Text Rendering Options",
      "Text Object Best Practices",
      "SpriteFont Setup",
      "Health Bars and Progress Indicators",
      "Pattern: Sprite-Based Health Bar",
      "Pattern: 9-Patch for Scalable UI Panels",
      "Anchor Behavior for Responsive Layout",
      "Applying Anchors",
      "Common Anchor Configurations",
      "Dialogue and Notification Systems",
      "Pattern: Typewriter Text Effect",
      "Pattern: Toast Notification Queue",
      "Input Indicators in UI",
      "Performance Tips",
      "Troubleshooting"
    ]
  },
  {
    "id": "construct-arch/G1",
    "title": "G1 — Event Sheet Patterns and Organization in Construct 3",
    "description": "",
    "category": "guide",
    "module": "construct-arch",
    "engine": "Construct",
    "tier": "pro",
    "sizeBytes": 9907,
    "sections": [
      "The SOL: Why Construct Logic Works the Way It Does",
      "SOL Rules",
      "SOL Example: Targeting the Right Enemy",
      "Common SOL Mistake: Picking Across Object Types",
      "Organizing Event Sheets at Scale",
      "Pattern: Domain-Based Sheet Separation",
      "Include Order Matters",
      "Groups: Runtime Logic Switches",
      "When to Use Groups",
      "Group Best Practices",
      "Functions: Reusable Logic Blocks",
      "Defining a Function",
      "Calling a Function",
      "Function Best Practices",
      "For-Each and System Loops",
      "For Each (Ordered)",
      "Repeat and While",
      "Performance Patterns",
      "Avoid Per-Tick Collision When Possible",
      "Use Instance Variables Over Global Lookups",
      "Disable Off-Screen Logic",
      "Common Mistakes"
    ]
  },
  {
    "id": "construct-arch/G2",
    "title": "G2 — Families and Performance Optimization in Construct 3",
    "description": "",
    "category": "guide",
    "module": "construct-arch",
    "engine": "Construct",
    "tier": "pro",
    "sizeBytes": 9116,
    "sections": [
      "Families: Polymorphism Without Code",
      "When to Use Families",
      "Creating and Using a Family",
      "Family Instance Variables",
      "Family Behaviors",
      "SOL and Families: How Picking Works",
      "Common Family Patterns",
      "Performance Optimization",
      "The Performance Hierarchy",
      "Architecture: Object Count Management",
      "Event Evaluation: Reduce Work Per Tick",
      "Rendering: Draw Call Reduction",
      "Monitoring Performance",
      "Mobile-Specific Optimization",
      "Families + Performance: Combined Patterns"
    ]
  },
  {
    "id": "construct-arch/G3",
    "title": "G3 — JavaScript Scripting API & Modules",
    "description": "",
    "category": "guide",
    "module": "construct-arch",
    "engine": "Construct",
    "tier": "pro",
    "sizeBytes": 9335,
    "sections": [
      "When to Use Scripting vs Event Sheets",
      "Setting Up Script Modules",
      "Enabling Modules",
      "Project Script Structure",
      "The IRuntime Interface",
      "Connecting to the Runtime",
      "Key IRuntime Methods",
      "Working with Instances from Script",
      "Common Instance Properties",
      "Bridging Event Sheets and Scripts",
      "Calling Script Functions from Event Sheets",
      "Calling Event Sheet Functions from Script",
      "Using Behaviors from Script",
      "Migrating Classic Scripts to Modules",
      "Migration Steps",
      "Addon SDK (For Plugin Authors)",
      "SDK Structure Overview",
      "Key SDK Concepts",
      "Related Resources"
    ]
  },
  {
    "id": "construct-arch/G4",
    "title": "G4 — Tilemap and Level Design in Construct 3",
    "description": "",
    "category": "guide",
    "module": "construct-arch",
    "engine": "Construct",
    "tier": "pro",
    "sizeBytes": 9649,
    "sections": [
      "How Tilemaps Work in Construct 3",
      "Setting Up a Tilemap",
      "1. Prepare Your Tileset",
      "2. Add the Tilemap Object",
      "3. Configure the Layout Grid",
      "4. Paint with the Tilemap Bar",
      "Auto-Tiling with Brushes",
      "Creating an Auto-Tile Brush",
      "Patch Brushes",
      "When to Use Which",
      "Tilemap Collisions",
      "Setting Up Collision",
      "Per-Tile Collision Control",
      "Runtime Tilemap Manipulation",
      "Key Expressions and Actions",
      "Example: Destructible Blocks",
      "Example: Procedural Generation",
      "Tilemap Scrolling and Parallax",
      "Camera Scrolling",
      "Parallax with Multiple Tilemaps",
      "Level Design Workflow",
      "1. Block Out First",
      "2. Tile Art Pass",
      "3. Collision Audit",
      "4. Polish Layer",
      "Performance Notes",
      "Quick Reference"
    ]
  },
  {
    "id": "construct-arch/G5",
    "title": "G5 — Animation & Timeline Systems",
    "description": "",
    "category": "guide",
    "module": "construct-arch",
    "engine": "Construct",
    "tier": "pro",
    "sizeBytes": 7844,
    "sections": [
      "Two Animation Systems",
      "Sprite Animations",
      "Animation Editor Basics",
      "Importing Frames",
      "Controlling Animations from Events",
      "Animation State Machine Pattern",
      "Timeline System",
      "Core Concepts",
      "Creating a Timeline",
      "Easing Functions",
      "Timeline Events",
      "Master Keyframe Tags",
      "Tween Behavior",
      "Adding Tweens",
      "Tween Properties",
      "Tween vs. Timeline Decision Guide",
      "Performance Notes"
    ]
  },
  {
    "id": "construct-arch/G6",
    "title": "Audio System & Sound Design",
    "description": "Construct 3's Audio plugin wraps the Web Audio API behind an event-sheet-friendly interface. This guide covers import...",
    "category": "guide",
    "module": "construct-arch",
    "engine": "Construct",
    "tier": "pro",
    "sizeBytes": 9721,
    "sections": [
      "Importing Sound Assets",
      "Sounds vs. Music",
      "Supported Formats",
      "The Audio Object",
      "Basic Playback",
      "Volume Units",
      "Tags — Organizing and Controlling Audio",
      "Tag Strategies",
      "Controlling Audio by Tag",
      "Options Menu Pattern",
      "Audio Effects Chain",
      "Available Effects",
      "Applying Effects via Events",
      "Removing Effects",
      "Practical Patterns",
      "Positional Audio",
      "Distance-Based Volume Pattern",
      "Stereo Panning",
      "Music Crossfading",
      "Audio and Browser Autoplay Policy",
      "Performance Tips",
      "Common Pitfalls"
    ]
  },
  {
    "id": "construct-arch/G7",
    "title": "G7 — Input Handling and Touch Controls in Construct 3",
    "description": "Construct 3 handles input through dedicated plugin objects — Keyboard, Mouse, Touch, and Gamepad. Each is added to a ...",
    "category": "guide",
    "module": "construct-arch",
    "engine": "Construct",
    "tier": "pro",
    "sizeBytes": 12969,
    "sections": [
      "Input Plugin Architecture",
      "Keyboard Plugin",
      "Key Conditions",
      "Common Pattern — 4-Direction Movement",
      "Scripting API",
      "Mouse Plugin",
      "Key Conditions",
      "Key Expressions",
      "Touch Plugin",
      "Key Conditions",
      "Key Expressions",
      "Virtual Joystick Pattern",
      "Touch-Activated Buttons",
      "Gamepad Plugin",
      "Key Conditions",
      "Gamepad Mapping",
      "Dead Zone Handling",
      "Cross-Device Input Abstraction",
      "Detecting Input Method",
      "Platform Detection for Touch UI",
      "Common Pitfalls",
      "Next Steps"
    ]
  },
  {
    "id": "construct-arch/G8",
    "title": "G8 — Physics and Platformer Mechanics in Construct 3",
    "description": "Construct 3 provides two distinct approaches to movement and physics: the Platform behavior for traditional side-scro...",
    "category": "guide",
    "module": "construct-arch",
    "engine": "Construct",
    "tier": "pro",
    "sizeBytes": 11006,
    "sections": [
      "Platform Behavior",
      "Adding the Platform Behavior",
      "Core Properties",
      "Key Conditions",
      "Useful Actions",
      "Double Jump Pattern",
      "Wall Jump Pattern",
      "Coyote Time",
      "Physics Behavior",
      "Adding Physics",
      "Material Properties",
      "Collision Shapes",
      "Forces and Impulses",
      "Joints",
      "Physics World Settings",
      "Collision Filtering",
      "Combining Platform and Physics",
      "Pattern 1: Physics Environment with Platform Player",
      "Pattern 2: Physics-Only Platformer",
      "Pattern 3: Hybrid with Pin",
      "Performance Tips",
      "Common Pitfalls",
      "Next Steps"
    ]
  },
  {
    "id": "construct-arch/G9",
    "title": "G9 — Save and Load System in Construct 3",
    "description": "",
    "category": "guide",
    "module": "construct-arch",
    "engine": "Construct",
    "tier": "pro",
    "sizeBytes": 10745,
    "sections": [
      "Two Approaches: System Save vs. Custom JSON",
      "Method 1: System Save/Load (Quick & Simple)",
      "Event Sheet Setup",
      "System Save Limitations",
      "Method 2: Custom JSON + LocalStorage (Recommended)",
      "Step 1: Design Your Save Schema",
      "Step 2: Building Save Data (Event Sheet Approach)",
      "Step 3: Saving to LocalStorage (Event Sheet)",
      "Step 4: Loading from LocalStorage (Event Sheet)",
      "Step 5: Scripting API Alternative (JavaScript)",
      "Save Versioning and Migration",
      "Multiple Save Slots",
      "Slot Metadata",
      "Platform-Specific Considerations",
      "Browser (HTML5)",
      "Desktop (NW.js Export)",
      "Mobile",
      "Error Handling Checklist",
      "Summary: Recommended Architecture"
    ]
  },
  {
    "id": "construct-arch/R1",
    "title": "R1 — Behaviors & Effects Reference",
    "description": "",
    "category": "reference",
    "module": "construct-arch",
    "engine": "Construct",
    "tier": "pro",
    "sizeBytes": 9946,
    "sections": [
      "Behaviors: Plug-and-Play Functionality",
      "Movement Behaviors",
      "Physics Behavior",
      "Utility Behaviors",
      "Tween Behavior Details",
      "Custom Behaviors (Addon SDK)",
      "Effects: GPU-Powered Visual Processing",
      "Applying Effects",
      "Built-In Effect Categories",
      "Blend Modes (Simplified)",
      "Custom Effects (Addon SDK)",
      "Performance Considerations",
      "Quick Decision Guide"
    ]
  },
  {
    "id": "construct-arch/R2",
    "title": "R2 — Multiplayer and Scripting API Reference",
    "description": "",
    "category": "reference",
    "module": "construct-arch",
    "engine": "Construct",
    "tier": "pro",
    "sizeBytes": 11877,
    "sections": [
      "Overview",
      "Part 1: Multiplayer",
      "Architecture",
      "Key Concepts",
      "Multiplayer Workflow (Event Sheet)",
      "Sync Modes",
      "Multiplayer Conditions Reference",
      "Multiplayer Actions Reference",
      "Hosting Your Own Signalling Server",
      "Multiplayer Limitations",
      "Part 2: JavaScript Scripting API",
      "Scripting Modes",
      "The Runtime API",
      "Key Interfaces",
      "Common Scripting Patterns",
      "TypeScript Support",
      "Scripting vs. Event Sheets",
      "Script Performance Notes",
      "Combining Multiplayer and Scripting"
    ]
  },
  {
    "id": "construct-arch/R3",
    "title": "Addon SDK Development",
    "description": "Construct 3's Addon SDK lets developers extend the editor and runtime with custom plugins, behaviors, effects, and th...",
    "category": "reference",
    "module": "construct-arch",
    "engine": "Construct",
    "tier": "pro",
    "sizeBytes": 9957,
    "sections": [
      "Addon Types",
      "Project Structure",
      "addon.json",
      "plugin.js (Editor-side)",
      "c3runtime/main.js (SDK v2)",
      "ACEs — Actions, Conditions, Expressions",
      "Language File",
      "Drawable Plugins",
      "Testing & Installation",
      "Local development",
      "Packaging for distribution",
      "SDK v1 → v2 Migration"
    ]
  },
  {
    "id": "defold-arch/E1",
    "title": "E1 — Architecture Overview",
    "description": "",
    "category": "architecture",
    "module": "defold-arch",
    "engine": "Defold",
    "tier": "pro",
    "sizeBytes": 6302,
    "sections": [
      "Core Philosophy: Lightweight, Opinionated, Production-Ready",
      "The Three Building Blocks",
      "1. Game Objects",
      "2. Components",
      "3. Collections",
      "Message Passing: The Communication Model",
      "Addressing Format",
      "Why Message Passing?",
      "Script Lifecycle",
      "Properties: go.property",
      "Build System",
      "When to Choose Defold"
    ]
  },
  {
    "id": "defold-arch-rules",
    "title": "Defold — AI Rules",
    "description": "Engine-specific rules for projects using the Defold game engine. These supplement the engine-agnostic rules in docs/c...",
    "category": "reference",
    "module": "defold-arch",
    "engine": "Defold",
    "tier": "pro",
    "sizeBytes": 9098,
    "sections": [
      "Architecture Context",
      "Tech Stack",
      "Project Structure Conventions",
      "Code Generation Rules",
      "Message Passing: The Communication Law",
      "Script Lifecycle",
      "Properties (go.property)",
      "Addressing",
      "GUI Scripts",
      "Factories",
      "Physics",
      "Input",
      "Common Patterns",
      "Screen/Scene Management",
      "Shared Lua Modules",
      "Object Pooling",
      "Anti-Patterns to Avoid",
      "Documentation Index"
    ]
  },
  {
    "id": "defold-arch/G10",
    "title": "G10 — Networking & Multiplayer",
    "description": "",
    "category": "guide",
    "module": "defold-arch",
    "engine": "Defold",
    "tier": "pro",
    "sizeBytes": 11028,
    "sections": [
      "Networking in Defold",
      "HTTP Requests",
      "POST with JSON Body",
      "http.request() Parameters",
      "Response Table",
      "WebSockets",
      "Basic WebSocket Usage",
      "WebSocket Events",
      "Raw TCP/UDP with LuaSocket",
      "Non-Blocking TCP Client",
      "UDP for Fast Unreliable Messages",
      "Multiplayer with Nakama",
      "Setup",
      "Authentication",
      "Real-Time Match",
      "Nakama Op Codes",
      "Multiplayer Architecture Patterns",
      "Client-Server (Authoritative)",
      "Peer-to-Peer (Relay)",
      "State Synchronization Tips",
      "DefNet Utility Library",
      "Security Considerations",
      "Common Pitfalls"
    ]
  },
  {
    "id": "defold-arch/G11",
    "title": "G11 — Resource Management",
    "description": "",
    "category": "guide",
    "module": "defold-arch",
    "engine": "Defold",
    "tier": "pro",
    "sizeBytes": 8668,
    "sections": [
      "The Static Resource Tree",
      "Automatic vs. Manual Loading",
      "Factories: Spawning Game Objects",
      "Basic Factory Usage",
      "Collection Factory Usage",
      "Passing Properties at Spawn Time",
      "Dynamic Loading",
      "Synchronous (Simple but Blocking)",
      "Asynchronous (Recommended)",
      "Checking Load Status",
      "Unloading",
      "Dynamic Prototypes",
      "Collection Proxies: Level Streaming",
      "Memory Management With Proxies",
      "sys.load_resource — Custom Files",
      "Memory Budget Tips"
    ]
  },
  {
    "id": "defold-arch/G12",
    "title": "Distribution and Publishing",
    "description": "Defold supports bundling to Android, iOS, HTML5, Windows, macOS, Linux, and consoles (Nintendo Switch, PS4, PS5, Xbox...",
    "category": "guide",
    "module": "defold-arch",
    "engine": "Defold",
    "tier": "pro",
    "sizeBytes": 9243,
    "sections": [
      "Bundling from the Editor",
      "Supported Targets",
      "game.project Settings for Bundling",
      "[project]",
      "[display]",
      "[android]",
      "[ios]",
      "[html5]",
      "Bob: Command-Line Builder",
      "Requirements",
      "Basic Commands",
      "Platform Identifiers",
      "Common bob.jar Options",
      "Example: Android Release Build",
      "Example: HTML5 Build",
      "Platform-Specific Notes",
      "Android",
      "iOS",
      "HTML5",
      "Steam",
      "Console (Switch, PlayStation, Xbox)",
      "CI/CD Integration",
      "GitHub Actions Example",
      "Community Tools",
      "Pre-Release Checklist"
    ]
  },
  {
    "id": "defold-arch/G13",
    "title": "Debugging & Profiling",
    "description": "Defold ships with integrated debugging and profiling tools that work on debug builds. This guide covers print debuggi...",
    "category": "guide",
    "module": "defold-arch",
    "engine": "Defold",
    "tier": "pro",
    "sizeBytes": 9380,
    "sections": [
      "Print Debugging",
      "Defold's Lua Debugger",
      "Setting Breakpoints",
      "Debugger Controls",
      "Inspecting State",
      "Debugging Tips",
      "Visual Profiler Overlay",
      "Profiler Modes",
      "View Modes",
      "Reading the Overlay",
      "Toggling on Hot Reload",
      "Web-Based Profiler (Remotery)",
      "How to Connect",
      "What Remotery Shows",
      "When to Use Remotery vs. the Visual Overlay",
      "Memory Profiling",
      "Lua Memory",
      "Common Memory Issues",
      "Performance Optimization Checklist",
      "Script Performance",
      "Rendering Performance",
      "Physics Performance",
      "Debugging Checklist for Common Issues"
    ]
  },
  {
    "id": "defold-arch/G14",
    "title": "Camera Systems & Tilemaps",
    "description": "Defold's camera component controls what the player sees, and tilemaps provide an efficient way to build tile-based le...",
    "category": "guide",
    "module": "defold-arch",
    "engine": "Defold",
    "tier": "pro",
    "sizeBytes": 12281,
    "sections": [
      "Camera Component Basics",
      "Adding a Camera",
      "Camera Properties",
      "Activating a Camera",
      "Orthographic Projection for 2D Games",
      "Setting Up Orthographic Projection",
      "Render Script Integration",
      "Following a Game Object",
      "Option 1: Parent the Camera",
      "Option 2: Script-Based Following with Smoothing",
      "Camera Bounds Clamping",
      "Defold-Orthographic Library",
      "Installation",
      "Key API",
      "When to Use defold-orthographic vs. Built-in",
      "Tilemap Component",
      "Creating a Tilemap",
      "Tilemap Properties",
      "Runtime Tilemap API",
      "Coordinate Conversion",
      "Dynamic Level Generation",
      "Tilemap Collision",
      "Performance Tips for Tilemaps",
      "Combining Camera and Tilemaps",
      "Z-Order with Tilemaps"
    ]
  },
  {
    "id": "defold-arch/G15",
    "title": "G15 — Lua Scripting Patterns",
    "description": "Defold scripts are Lua files attached to game objects as script components. The engine calls a fixed set of lifecycle...",
    "category": "guide",
    "module": "defold-arch",
    "engine": "Defold",
    "tier": "pro",
    "sizeBytes": 12832,
    "sections": [
      "Script Lifecycle",
      "The `self` Table",
      "Reactive vs. Polling",
      "Polling (expensive, avoid when possible)",
      "Reactive (preferred)",
      "Timers Instead of Counters",
      "go.property() — Exposable Configuration",
      "Behavior Object Pattern",
      "Message Passing Patterns",
      "Direct Messaging",
      "Broadcast via a Manager",
      "Request–Response",
      "Lua Modules for Shared Logic",
      "State Machines",
      "Performance Patterns",
      "Localize Globals",
      "Avoid Table Creation in Hot Paths",
      "Use `hash()` Constants",
      "Common Pitfalls"
    ]
  },
  {
    "id": "defold-arch/G16",
    "title": "G16 — Teal: Type-Safe Scripting",
    "description": "",
    "category": "guide",
    "module": "defold-arch",
    "engine": "Defold",
    "tier": "pro",
    "sizeBytes": 9281,
    "sections": [
      "Why Teal?",
      "Setup",
      "1. Add the Extension",
      "2. Create tlconfig.lua",
      "3. Create Your First .tl File",
      "4. Attach to a Game Object",
      "Teal Type System Essentials",
      "Basic Types",
      "Records (Structs)",
      "Enums",
      "Generics",
      "Union Types",
      "Typed Message Passing",
      "Gradual Migration Strategy",
      "Editor Integration",
      "Limitations and Gotchas",
      "Quick Reference",
      "Further Reading"
    ]
  },
  {
    "id": "G17",
    "title": "G17 — Testing and Quality Assurance",
    "description": "",
    "category": "guide",
    "module": "defold-arch",
    "engine": "Defold",
    "tier": "pro",
    "sizeBytes": 11783,
    "sections": [
      "Why Test in Defold?",
      "Testing Strategy",
      "DefTest: The Standard Testing Framework",
      "Installation",
      "Project Structure",
      "Writing Tests",
      "Test Runner Script",
      "Assertions",
      "Setup and Teardown",
      "Running Tests",
      "Locally (GUI)",
      "Headless (CI/CD)",
      "Filtering Tests",
      "Integration Testing with Collections",
      "Code Coverage",
      "CI/CD Pipeline Example",
      "GitHub Actions",
      "GitLab CI",
      "Testing Patterns for Defold-Specific Code",
      "Testing State Machines",
      "Mocking Defold APIs",
      "Common Pitfalls"
    ]
  },
  {
    "id": "defold-arch/G18",
    "title": "G18 — Common Game Patterns",
    "description": "",
    "category": "guide",
    "module": "defold-arch",
    "engine": "Defold",
    "tier": "pro",
    "sizeBytes": 14547,
    "sections": [
      "Overview",
      "Finite State Machines",
      "Table-Driven FSM",
      "Platformer Pattern",
      "Architecture",
      "Kinematic Platformer (No Physics Engine)",
      "One-Way Platforms",
      "Top-Down RPG Pattern",
      "Architecture",
      "Four-Directional Movement",
      "Trigger Zones via Message Passing",
      "Spawning and Object Pooling",
      "Factory Spawning with Tracking",
      "Object Pool (Disable/Enable)",
      "Scene / Level Transitions",
      "Manager Pattern (Singleton via Shared Module)",
      "Checklist: Choosing the Right Pattern"
    ]
  },
  {
    "id": "G19",
    "title": "G19 — Accessibility and Localization",
    "description": "",
    "category": "guide",
    "module": "defold-arch",
    "engine": "Defold",
    "tier": "pro",
    "sizeBytes": 11704,
    "sections": [
      "Overview",
      "Localization Architecture",
      "Choosing a Library",
      "Manual Localization System",
      "Locale File Structure",
      "Pluralization",
      "Applying Localized Text to GUI",
      "Updating GUI Nodes",
      "Broadcasting Locale Changes",
      "Right-to-Left (RTL) Text",
      "Font Collections for Multi-Language Support",
      "Runtime Font Approach",
      "RTL Layout Considerations",
      "Detecting System Locale",
      "Accessibility Features",
      "Input Remapping",
      "Text Scaling",
      "Colorblind Mode",
      "Screen Shake and Flash Controls",
      "Subtitle and Audio Description Support",
      "Localization Checklist",
      "Summary"
    ]
  },
  {
    "id": "defold-arch/G1",
    "title": "G1 — Message Passing",
    "description": "",
    "category": "guide",
    "module": "defold-arch",
    "engine": "Defold",
    "tier": "pro",
    "sizeBytes": 7868,
    "sections": [
      "Why Message Passing?",
      "Addressing",
      "Address Examples",
      "Shorthand Rules",
      "Sending Messages",
      "msg.post(receiver, message_id, [message])",
      "Receiving Messages",
      "Built-In System Messages",
      "Sprite Messages",
      "Collision Messages (Received Automatically)",
      "Sound Messages",
      "Factory Messages",
      "Common Patterns",
      "Request-Response",
      "Broadcast to Multiple Objects",
      "Acquiring Input Focus",
      "Debugging Messages",
      "Common Pitfalls"
    ]
  },
  {
    "id": "G20",
    "title": "G20 — Particles & Visual Effects",
    "description": "Defold's built-in ParticleFX system handles explosions, smoke, fire, rain, sparkles, and other visual effects. Effect...",
    "category": "guide",
    "module": "defold-arch",
    "engine": "Defold",
    "tier": "pro",
    "sizeBytes": 9901,
    "sections": [
      "Creating a Particle Effect",
      "Adding to a Game Object",
      "Emitter Properties",
      "Playback",
      "Emission",
      "Particle Lifecycle",
      "Visual",
      "Emitter Types",
      "Modifiers",
      "Scripting API",
      "Playing and Stopping",
      "Emitter State Callbacks",
      "Runtime Tinting",
      "GUI Particle Effects",
      "Common Effect Recipes",
      "Fire",
      "Explosion",
      "Rain",
      "Trail / Sparkle",
      "Performance Considerations",
      "Common Pitfalls"
    ]
  },
  {
    "id": "G21",
    "title": "G21 — Save Data & Persistence",
    "description": "Every game beyond the most trivial needs to persist data between sessions — high scores, settings, save slots, progre...",
    "category": "guide",
    "module": "defold-arch",
    "engine": "Defold",
    "tier": "pro",
    "sizeBytes": 9505,
    "sections": [
      "Quick Start: sys.save / sys.load",
      "What sys.save Supports",
      "sys.get_save_file(application_id, file_name)",
      "Robust Save/Load Pattern",
      "Key Design Decisions",
      "Multiple Save Slots",
      "Settings vs. Game State",
      "Raw File Access with io",
      "Bundled Read-Only Resources",
      "Custom Resources (sys.load_resource)",
      "Bundle Resources",
      "HTML5 Considerations",
      "Auto-Save Pattern",
      "Common Pitfalls"
    ]
  },
  {
    "id": "G22",
    "title": "G22 — Web Publishing & Poki Integration",
    "description": "",
    "category": "guide",
    "module": "defold-arch",
    "engine": "Defold",
    "tier": "pro",
    "sizeBytes": 11349,
    "sections": [
      "Overview",
      "HTML5 Build Configuration",
      "game.project Settings",
      "Canvas Scaling",
      "Bundling for Web",
      "Command-Line Bundling with bob.jar",
      "Poki SDK Integration",
      "Adding the Extension",
      "Using the Poki Template",
      "Bundle Directly to Poki",
      "Poki SDK API Reference",
      "Gameplay Events",
      "Commercial Breaks (Interstitial Ads)",
      "Rewarded Breaks (Opt-In Video Ads)",
      "Shareable URLs",
      "Utility Functions",
      "Constants Reference",
      "Typical Game Flow with Poki",
      "WebGPU (Experimental)",
      "Enabling WebGPU",
      "Current Status",
      "Performance Tips for Web Builds",
      "Reduce Build Size",
      "Loading and Startup",
      "Gameplay Performance",
      "Testing Web Builds Locally"
    ]
  },
  {
    "id": "defold-arch/G2",
    "title": "G2 — Game Objects & Collections",
    "description": "",
    "category": "guide",
    "module": "defold-arch",
    "engine": "Defold",
    "tier": "pro",
    "sizeBytes": 12621,
    "sections": [
      "The Mental Model",
      "Game Objects",
      "Creating Game Objects in the Editor",
      "Game Object Properties",
      "Manipulating Game Objects at Runtime",
      "Parent-Child Relationships",
      "Components",
      "Core Component Types",
      "Collections",
      "The Bootstrap Collection",
      "Sub-Collections",
      "Addressing Across Collections",
      "Script Properties (go.property)",
      "Defining Properties",
      "Supported Types",
      "Overriding at Spawn Time",
      "Factories (Dynamic Spawning)",
      "Factory (Single Game Object)",
      "Collection Factory (Hierarchy of Objects)",
      "Dynamic Loading",
      "Lifecycle Callbacks",
      "Call Order Within a Frame",
      "Common Patterns",
      "Object Pooling",
      "Collection Proxies (Level Loading)",
      "Common Pitfalls"
    ]
  },
  {
    "id": "defold-arch/G3",
    "title": "G3 — GUI System",
    "description": "",
    "category": "guide",
    "module": "defold-arch",
    "engine": "Defold",
    "tier": "pro",
    "sizeBytes": 15806,
    "sections": [
      "Overview",
      "Node Types",
      "GUI Script Lifecycle",
      "Working with Nodes",
      "Getting and Manipulating Nodes",
      "Dynamic Node Creation",
      "Node Hierarchies and Parenting",
      "Input Handling and Hit Testing",
      "Pick Node (Hit Testing)",
      "Multi-Touch",
      "Button Pattern",
      "GUI Animations",
      "Animatable Properties",
      "Animation API",
      "Playback Modes",
      "Easing Functions",
      "Clipping (Stencil Masks)",
      "Setting Up Clipping",
      "Inverted Clipping",
      "Limitations",
      "Templates (Reusable Components)",
      "Creating a Template",
      "Accessing Template Nodes from Script",
      "Overriding Template Properties",
      "Layouts (Multi-Resolution Support)",
      "Setup",
      "Communicating Between GUI and Game",
      "Common Patterns",
      "Screen Transitions",
      "Health Bar",
      "Common Pitfalls"
    ]
  },
  {
    "id": "defold-arch/G4",
    "title": "G4 — Physics & Collisions",
    "description": "",
    "category": "guide",
    "module": "defold-arch",
    "engine": "Defold",
    "tier": "pro",
    "sizeBytes": 11950,
    "sections": [
      "Physics Engine Overview",
      "Collision Object Types",
      "Dynamic",
      "Kinematic",
      "Static",
      "Trigger",
      "Collision Shapes",
      "Collision Groups and Masks",
      "Collision Messages",
      "collision_response",
      "contact_point_response",
      "trigger_response",
      "Resolving Kinematic Collisions",
      "Simple Separation",
      "Ground Detection",
      "Ray Casts",
      "Physics Messages (Commands)",
      "game.project Physics Settings",
      "Common Pitfalls"
    ]
  },
  {
    "id": "defold-arch/G5",
    "title": "G5 — Input Handling & Script Properties",
    "description": "",
    "category": "guide",
    "module": "defold-arch",
    "engine": "Defold",
    "tier": "pro",
    "sizeBytes": 9243,
    "sections": [
      "Input System Overview",
      "Input Bindings File",
      "Acquiring Input Focus",
      "Input Stack",
      "The on_input Callback",
      "Parameters",
      "Common Patterns",
      "Script Properties (go.property)",
      "Why Properties?",
      "Defining Properties",
      "Supported Types",
      "Resource Properties",
      "Reading and Writing at Runtime",
      "Accessing Sub-components",
      "Properties vs. self Variables",
      "Putting It Together — Input-Driven Character"
    ]
  },
  {
    "id": "defold-arch/G6",
    "title": "G6 — Native Extensions & Build System",
    "description": "",
    "category": "guide",
    "module": "defold-arch",
    "engine": "Defold",
    "tier": "pro",
    "sizeBytes": 8925,
    "sections": [
      "Why Native Extensions?",
      "Extension Structure",
      "ext.manifest",
      "Writing a Native Extension",
      "Minimal Example — Expose a Function to Lua",
      "Extension Lifecycle Callbacks",
      "Best Practices",
      "Build System",
      "Editor Build (F5 / Build & Run)",
      "Bob.jar — Command-Line Builder",
      "Platform Identifiers",
      "Self-Hosted Build Server (Extender)",
      "Hot Reload",
      "CI/CD Example (GitHub Actions)"
    ]
  },
  {
    "id": "defold-arch/G7",
    "title": "G7 — Animation & Audio",
    "description": "",
    "category": "guide",
    "module": "defold-arch",
    "engine": "Defold",
    "tier": "pro",
    "sizeBytes": 9403,
    "sections": [
      "Animation Types in Defold",
      "Flipbook Animation",
      "Setting Up in the Atlas",
      "Playing at Runtime",
      "GUI Flipbook",
      "Property Animation (Tweening)",
      "Basic Syntax",
      "Examples",
      "Common Easing Constants",
      "Custom Easing",
      "Cancelling Animations",
      "Audio System",
      "Supported Formats",
      "Adding a Sound Component",
      "Playing Sounds via Messages",
      "Sound Properties",
      "Sound Groups (Mixer)",
      "Sound Group Ducking Pattern",
      "Combining Animation and Audio"
    ]
  },
  {
    "id": "defold-arch/G8",
    "title": "G8 — Hot Reload & Live Update",
    "description": "",
    "category": "guide",
    "module": "defold-arch",
    "engine": "Defold",
    "tier": "pro",
    "sizeBytes": 10689,
    "sections": [
      "Two Systems, Different Goals",
      "Hot Reload (Development)",
      "How It Works",
      "What Gets Reloaded",
      "Script Reload Behavior",
      "Hot Reload on Device",
      "Gotchas",
      "Live Update (Production)",
      "The Mental Model",
      "Setting Up Live Update",
      "Scripting Live Update",
      "Live Update API Reference",
      "Live Update Architecture",
      "Production Considerations",
      "Hot Reload vs. Live Update Summary"
    ]
  },
  {
    "id": "defold-arch/G9",
    "title": "G9 — Render Pipeline & Materials",
    "description": "",
    "category": "guide",
    "module": "defold-arch",
    "engine": "Defold",
    "tier": "pro",
    "sizeBytes": 10867,
    "sections": [
      "How Rendering Works in Defold",
      "The Render Script Lifecycle",
      "Render Predicates",
      "Default Material Tags",
      "The Default Render Loop",
      "Key Observations",
      "Materials",
      "Material Properties",
      "Creating a Custom Material",
      "Setting Constants from Scripts",
      "Overriding Constants in the Render Script",
      "Custom Shaders",
      "Minimal Vertex Shader (sprite.vp)",
      "Minimal Fragment Shader (sprite.fp)",
      "Shader Constants",
      "Render Targets (Off-Screen Rendering)",
      "Camera Integration",
      "Recent Updates (2025–2026)",
      "Common Pitfalls"
    ]
  },
  {
    "id": "defold-arch/R1",
    "title": "R1 — API Quick Reference",
    "description": "Defold's Lua API is organized into namespaces that mirror the engine's component-based architecture. Most functions o...",
    "category": "reference",
    "module": "defold-arch",
    "engine": "Defold",
    "tier": "pro",
    "sizeBytes": 8850,
    "sections": [
      "Core Namespaces",
      "go — Game Objects",
      "Properties",
      "Script Properties (go.property)",
      "Animation",
      "Lifecycle",
      "msg — Messages",
      "sprite",
      "sound",
      "factory / collectionfactory",
      "gui",
      "vmath",
      "sys",
      "timer",
      "http",
      "Script Lifecycle Callbacks"
    ]
  },
  {
    "id": "defold-arch/R2",
    "title": "R2 — Community Libraries & Asset Portal",
    "description": "Defold has a first-party Asset Portal (defold.com/assets) and a library dependency system built into the editor. Comm...",
    "category": "reference",
    "module": "defold-arch",
    "engine": "Defold",
    "tier": "pro",
    "sizeBytes": 7470,
    "sections": [
      "Adding a Library Dependency",
      "UI & Screen Management",
      "Camera & Rendering",
      "Physics & Collision",
      "Networking & Multiplayer",
      "Animation & VFX",
      "Audio",
      "Input & Controls",
      "AI & Pathfinding",
      "Monetization, Analytics & Services",
      "Dev Tools",
      "Choosing Libraries"
    ]
  },
  {
    "id": "defold-arch/R3",
    "title": "R3 — Performance Optimization",
    "description": "Defold's deterministic engine architecture gives you a head start on performance — the runtime is written in C++ and ...",
    "category": "reference",
    "module": "defold-arch",
    "engine": "Defold",
    "tier": "pro",
    "sizeBytes": 11514,
    "sections": [
      "Profiling First",
      "Draw Call Reduction",
      "How Defold Batches",
      "Practical Strategies",
      "Checking Draw Call Count",
      "Texture Memory",
      "Texture Profiles",
      "Scaling Down",
      "Lua Script Performance",
      "Reduce Per-Frame Work",
      "Avoid Table Allocation in Hot Paths",
      "Cache Hash Values",
      "Localize Frequently Called Functions",
      "Collection Proxy Loading",
      "Async Loading",
      "Unloading",
      "Exclude Resources",
      "Sound Optimization",
      "Streaming",
      "Short SFX",
      "Physics Optimization",
      "Render Script Optimization",
      "Quick Reference: Optimization Checklist"
    ]
  },
  {
    "id": "defold-arch/R4",
    "title": "R4 — 3D Development",
    "description": "",
    "category": "reference",
    "module": "defold-arch",
    "engine": "Defold",
    "tier": "pro",
    "sizeBytes": 10796,
    "sections": [
      "Defold's 3D Architecture",
      "Model Components",
      "Supported Format",
      "Adding a Model",
      "Built-In Materials",
      "Render Script Setup for 3D",
      "Minimal 3D Render Script Changes",
      "Mixed 2D/3D Rendering",
      "Animation",
      "Playing Animations at Runtime",
      "Animation Cursor Control",
      "Animation Sets",
      "Runtime Material and Texture Control",
      "Tinting",
      "Swapping Textures at Runtime",
      "Camera Setup for 3D",
      "Manual Camera via Render Script Messages",
      "Custom Shaders for 3D",
      "Minimal 3D Vertex Shader",
      "Simple Directional Light Fragment Shader",
      "Performance Considerations",
      "Current Limitations (Early 2026)",
      "Recommended Workflow"
    ]
  },
  {
    "id": "defold-arch/R5",
    "title": "R5 — Defold 1.12 Changes",
    "description": "",
    "category": "reference",
    "module": "defold-arch",
    "engine": "Defold",
    "tier": "pro",
    "sizeBytes": 7121,
    "sections": [
      "Overview",
      "Script Execution Order (Breaking Change)",
      "New Execution Order Per Frame",
      "`fixed_update(dt)` Now Runs Before `update(dt)`",
      "`late_update(dt)` — New Callback",
      "Migration from 1.11.x",
      "Unicode Text Shaping",
      "Features",
      "Usage",
      "Font Requirements",
      "Engine Throttle API",
      "Use Cases",
      "Caveats",
      "Other Notable Changes",
      "Render Script Updates",
      "Collection Proxy Behavior",
      "Quick Migration Checklist"
    ]
  },
  {
    "id": "defold-arch/R6",
    "title": "R6 — Editor Scripting",
    "description": "",
    "category": "reference",
    "module": "defold-arch",
    "engine": "Defold",
    "tier": "pro",
    "sizeBytes": 15692,
    "sections": [
      "Overview",
      "File Structure",
      "Lifecycle Hooks File",
      "Commands (Custom Menu Items)",
      "Command Properties",
      "Query and Selection",
      "Core Editor API",
      "Inspecting Nodes",
      "Modifying Resources (Transactions)",
      "File Operations",
      "Running External Tools",
      "Saving",
      "Platform Info",
      "Editable Resource Types",
      "Editor Scripts UI (editor.ui)",
      "Showing a Dialog",
      "Reactive Components",
      "Available UI Components",
      "Layout Properties",
      "Hooks Rules",
      "Preferences",
      "Language Server Integration",
      "HTTP Server Routes",
      "Execution Contexts",
      "Restrictions",
      "Practical Examples",
      "Auto-Increment Build Number",
      "Format Lua on Save",
      "Summary"
    ]
  },
  {
    "id": "excalibur-arch/E1",
    "title": "E1 — Excalibur.js Architecture Overview",
    "description": "",
    "category": "architecture",
    "module": "excalibur-arch",
    "engine": "Excalibur.js",
    "tier": "pro",
    "sizeBytes": 15848,
    "sections": [
      "Core Philosophy: Engine, Scenes, Actors, and ECS",
      "Engine Setup: The Entry Point",
      "Key Config Decisions",
      "Scene Lifecycle: Organizing Game States",
      "Lifecycle Flow",
      "Scene Transitions",
      "Actors: The Primary Game Object",
      "Actor vs Entity: When to Use Which",
      "Entity Component System (ECS)",
      "Resource Loading",
      "Resource Types",
      "Collision and Physics",
      "Collision Type Reference",
      "Input Handling",
      "Recommended Project Structure",
      "Comparison with Other Web Frameworks",
      "Mobile and Deployment",
      "Mobile Considerations",
      "Deployment",
      "Key Takeaways for AI Code Generation"
    ]
  },
  {
    "id": "excalibur-arch-rules",
    "title": "Excalibur.js — AI Rules",
    "description": "Engine-specific rules for projects using Excalibur.js. These supplement the engine-agnostic rules in docs/core/ai-wor...",
    "category": "reference",
    "module": "excalibur-arch",
    "engine": "Excalibur.js",
    "tier": "pro",
    "sizeBytes": 5672,
    "sections": [
      "Architecture Context",
      "Tech Stack",
      "Project Structure Conventions",
      "Code Generation Rules",
      "Actors: Always Extend Actor",
      "Collision Types: Always Specify",
      "Resources: Declare, Load, Then Use",
      "Scenes: Use Lifecycle Hooks Correctly",
      "Input: Access Through engine.input",
      "ECS: Use Only When Needed",
      "Common Pitfalls"
    ]
  },
  {
    "id": "excalibur-arch/G10",
    "title": "G10 — Excalibur.js Mobile Support & Deployment",
    "description": "",
    "category": "guide",
    "module": "excalibur-arch",
    "engine": "Excalibur.js",
    "tier": "pro",
    "sizeBytes": 11415,
    "sections": [
      "Overview",
      "Display Modes",
      "Available Modes",
      "FitScreen vs FitScreenAndFill",
      "FitContainer for Embedded Games",
      "Screen, Viewport, and Resolution",
      "HiDPI / Retina Support",
      "Mobile Input",
      "Pointer Events on Actors",
      "Handling Swipe Gestures",
      "Touch-Friendly Hit Areas",
      "Performance on Mobile",
      "Reduce Resolution",
      "Actor Management",
      "Texture Considerations",
      "Deployment: Static Hosting",
      "Hosting Options",
      "Deployment: Native Apps",
      "Capacitor (iOS + Android)",
      "Tauri v2 (Desktop + Mobile)",
      "PWA Setup",
      "manifest.json",
      "Service Worker (basic cache-first)",
      "Deployment Checklist",
      "Framework Comparison: Display Modes"
    ]
  },
  {
    "id": "excalibur-arch/G11",
    "title": "G11 — Excalibur.js Save/Load & Game State Persistence",
    "description": "",
    "category": "guide",
    "module": "excalibur-arch",
    "engine": "Excalibur.js",
    "tier": "pro",
    "sizeBytes": 19917,
    "sections": [
      "Overview",
      "Core Architecture: Separate State from Entities",
      "Step 1: Define Your State Interfaces",
      "Step 2: State Manager (Single Source of Truth)",
      "Storage Backends",
      "localStorage (Simple, Synchronous)",
      "IndexedDB (Large Data, Async)",
      "Which Storage to Use",
      "Wiring State to Actors",
      "Extracting State from Actors",
      "Extracting Level State",
      "Save/Load Flow",
      "Saving",
      "Loading",
      "State Migration",
      "Migration Best Practices",
      "Auto-Save",
      "When to Auto-Save",
      "ECS-Based State Extraction",
      "Common Pitfalls",
      "Don't Serialize Engine Objects",
      "Don't Store Derived Data",
      "Handle Missing Saves Gracefully",
      "Test Save/Load in CI",
      "Cross-Framework Comparison",
      "Recommended File Structure"
    ]
  },
  {
    "id": "excalibur-arch/G12",
    "title": "G12 — Excalibur.js Camera & Viewport Systems",
    "description": "",
    "category": "guide",
    "module": "excalibur-arch",
    "engine": "Excalibur.js",
    "tier": "pro",
    "sizeBytes": 15043,
    "sections": [
      "Overview",
      "Camera Basics",
      "Reading Camera State",
      "Camera Strategies",
      "Lock to Actor",
      "Lock to Actor Axis",
      "Elastic to Actor",
      "Radius Around Actor",
      "Limit Camera Bounds",
      "Combining Strategies",
      "Managing Strategies",
      "Custom Strategies",
      "Zoom",
      "Zoom + Bounds Interaction",
      "Camera Effects",
      "Shake",
      "Move (Animated Pan)",
      "Screen & Viewport",
      "Viewport (CSS Pixels)",
      "Resolution (Logical Game Pixels)",
      "Custom Resolution",
      "Display Modes",
      "Antialiasing and Pixel Art",
      "HiDPI Handling",
      "Actual Rendered Dimensions",
      "Coordinate Conversion",
      "Runtime Resolution Changes",
      "Common Patterns",
      "Platformer Camera",
      "Top-Down RPG Camera",
      "Scene Transition Pan",
      "Damage Feedback",
      "Cross-Framework Comparison",
      "Performance Notes"
    ]
  },
  {
    "id": "excalibur-arch/G1",
    "title": "G1 — Excalibur.js Actors & Entities",
    "description": "",
    "category": "guide",
    "module": "excalibur-arch",
    "engine": "Excalibur.js",
    "tier": "pro",
    "sizeBytes": 20421,
    "sections": [
      "Overview",
      "Creating Actors",
      "Constructor Options",
      "Actor Lifecycle",
      "onInitialize(engine)",
      "onPreUpdate(engine, delta) and onPostUpdate(engine, delta)",
      "onPreKill() and onPostKill()",
      "Graphics System",
      "Static Sprites",
      "Spritesheets and Animation",
      "Animation Strategies",
      "Graphics Groups (Composite Sprites)",
      "Collision Types",
      "Collision Events",
      "Using Tags for Collision Filtering",
      "Actions API: Scripted Behavior",
      "Action Patterns",
      "The Entity Component System (ECS)",
      "Custom Component",
      "Custom System",
      "Registering Components and Systems",
      "Actor vs Raw Entity: When to Use Which",
      "ScreenElement: UI Actors",
      "Practical Patterns",
      "Platformer Player (Full Example)",
      "Enemy with Patrol",
      "Collectible Pickup",
      "Comparison: Game Object Models Across Frameworks",
      "Key Takeaways"
    ]
  },
  {
    "id": "excalibur-arch/G2",
    "title": "G2 — Excalibur.js Scene Management & Transitions",
    "description": "",
    "category": "guide",
    "module": "excalibur-arch",
    "engine": "Excalibur.js",
    "tier": "pro",
    "sizeBytes": 19204,
    "sections": [
      "Overview",
      "Creating Scenes",
      "Class-Based vs Instance Registration",
      "Scene Lifecycle",
      "onInitialize(engine)",
      "onActivate(context) and onDeactivate(context)",
      "onPreUpdate / onPostUpdate",
      "Navigating Between Scenes",
      "engine.goToScene(name, options?)",
      "Receiving Data in the Target Scene",
      "Navigation from Within Actors",
      "Scene Transitions",
      "Built-in Transition: FadeInOut",
      "Built-in Transition: CrossFade",
      "Default Transitions on Scene Registration",
      "Transition Options",
      "Custom Transitions",
      "Camera Per Scene",
      "Common Scene Architectures",
      "Linear Flow",
      "Multi-Level with Shared Scene",
      "Pause Overlay Pattern",
      "Resource Loading Per Scene",
      "Comparison: Scene Systems Across Frameworks",
      "Key Takeaways"
    ]
  },
  {
    "id": "excalibur-arch/G3",
    "title": "G3 — Excalibur.js Physics & Collisions",
    "description": "",
    "category": "guide",
    "module": "excalibur-arch",
    "engine": "Excalibur.js",
    "tier": "pro",
    "sizeBytes": 12323,
    "sections": [
      "Overview",
      "Configuring Physics",
      "Switching to Realistic Physics",
      "Collision Types",
      "When to Use Each Type",
      "Collider Shapes",
      "BoxCollider (default)",
      "CircleCollider",
      "PolygonCollider",
      "EdgeCollider",
      "CompositeCollider",
      "Composite Mode: Together vs. Separate",
      "Collision Events",
      "collisionstart / collisionend",
      "precollision",
      "postcollision",
      "Collision Groups",
      "Broadphase: SparseHashGrid",
      "Common Patterns",
      "One-Way Platforms",
      "Ground Detection for Jumping",
      "Pickup / Trigger Zone",
      "Framework Comparison",
      "Performance Tips",
      "Next Steps"
    ]
  },
  {
    "id": "excalibur-arch/G4",
    "title": "G4 — Excalibur Input Handling",
    "description": "",
    "category": "guide",
    "module": "excalibur-arch",
    "engine": "Excalibur.js",
    "tier": "pro",
    "sizeBytes": 18293,
    "sections": [
      "Overview",
      "Architecture: Input Subsystems",
      "Keyboard Input",
      "Polling (Recommended for Movement)",
      "Key Enum",
      "Event-Driven (Recommended for One-Shot Actions)",
      "Checking Multiple Keys",
      "Pointer Input (Mouse + Touch)",
      "Scene-Level Pointer Events",
      "Actor-Level Pointer Events",
      "Available Actor Pointer Events",
      "Pointer Position Coordinates",
      "Drag and Drop",
      "Gamepad Input",
      "Enabling Gamepads",
      "Reading Gamepad State",
      "Gamepad Button Map (Standard Layout)",
      "Gamepad Events",
      "InputMapper — Action Abstraction",
      "Common Patterns",
      "Pattern 1: Platformer Controls",
      "Pattern 2: Click-to-Move (Strategy/RPG)",
      "Pattern 3: Twin-Stick Shooter (Keyboard + Mouse Aim)",
      "Mobile Considerations",
      "Comparison: Input Systems Across Frameworks",
      "Key Takeaways"
    ]
  },
  {
    "id": "excalibur-arch/G5",
    "title": "Sprites and Animation",
    "description": "Excalibur's graphics pipeline is built around ImageSource (loading), Sprite (a view into an image), SpriteSheet (a gr...",
    "category": "guide",
    "module": "excalibur-arch",
    "engine": "Excalibur.js",
    "tier": "pro",
    "sizeBytes": 9439,
    "sections": [
      "Loading Images",
      "Sprites",
      "Assigning Sprites to Actors",
      "Sprite Sheets",
      "Grids with Spacing",
      "Sparse / Non-Uniform Sprite Sheets",
      "Retrieving Individual Sprites",
      "Animations",
      "From a Sprite Sheet (Index-Based)",
      "From a Sprite Sheet (Coordinate-Based)",
      "Manual Frame Construction",
      "Animation Strategies",
      "Using Animations on Actors",
      "Animation Events",
      "Flipping and Tinting",
      "Aseprite Integration",
      "Best Practices"
    ]
  },
  {
    "id": "excalibur-arch/G6",
    "title": "Audio and Sound",
    "description": "Excalibur provides a Sound resource class for loading and playing audio — from one-shot sound effects to looping back...",
    "category": "guide",
    "module": "excalibur-arch",
    "engine": "Excalibur.js",
    "tier": "pro",
    "sizeBytes": 9503,
    "sections": [
      "Loading Audio",
      "Checking Load State",
      "Playback Control",
      "Play",
      "Pause, Stop, and Resume",
      "State Checks",
      "Volume and Playback Rate",
      "Volume",
      "Playback Rate",
      "Seeking",
      "Looping",
      "Multi-Instance Playback",
      "Browser Autoplay Policies",
      "Common Patterns",
      "Separate Music and SFX Volume",
      "Playing Sound Effects on Actor Events",
      "Scene-Based Music Transitions",
      "Pause/Resume with Game Visibility",
      "Performance and Mobile Notes",
      "Cross-Framework Comparison"
    ]
  },
  {
    "id": "excalibur-arch/G7",
    "title": "Tilemaps and Level Design",
    "description": "Excalibur provides a built-in TileMap class for rendering grid-based levels — platformers, RPGs, top-down worlds, and...",
    "category": "guide",
    "module": "excalibur-arch",
    "engine": "Excalibur.js",
    "tier": "pro",
    "sizeBytes": 12503,
    "sections": [
      "Programmatic TileMap",
      "Creating a TileMap",
      "Accessing Tiles",
      "Adding Graphics to Tiles",
      "Multiple Graphic Layers",
      "Solid Tiles and Collision",
      "The Tiled Plugin",
      "Installation",
      "Basic Usage",
      "Supported Formats",
      "Supported Map Types",
      "Marking Layers Solid",
      "Accessing Tiled Objects",
      "Isometric TileMaps",
      "LDtk Plugin",
      "Common Patterns",
      "Procedural Level Generation",
      "Camera Following with Tilemap Bounds",
      "Loading Multiple Levels",
      "Tile-Based Pathfinding",
      "Performance Notes",
      "Cross-Framework Comparison"
    ]
  },
  {
    "id": "excalibur-arch/G8",
    "title": "G8 — Excalibur UI & HUD Systems",
    "description": "",
    "category": "guide",
    "module": "excalibur-arch",
    "engine": "Excalibur.js",
    "tier": "pro",
    "sizeBytes": 20251,
    "sections": [
      "Overview",
      "ScreenElement Basics",
      "Creating a ScreenElement",
      "Graphics on ScreenElements",
      "Labels & Text",
      "Basic Label",
      "Font Properties",
      "Dynamic Text Updates",
      "SpriteFont (Bitmap Fonts)",
      "Building a Basic HUD",
      "Health Bars & Progress Bars",
      "Interactive UI Elements",
      "Pointer Events on Actors",
      "Important: PointerScope",
      "Building a Button Component",
      "HTML/CSS UI Overlay",
      "Basic Pattern",
      "Syncing Game State to HTML",
      "Dialog & Menu Systems",
      "Responsive UI",
      "Display Mode Options",
      "Cross-Framework Comparison",
      "Best Practices"
    ]
  },
  {
    "id": "excalibur-arch/G9",
    "title": "Asset Loading and Resources",
    "description": "Excalibur uses a typed resource system where every asset — images, sounds, fonts, generic data — is represented by a ...",
    "category": "guide",
    "module": "excalibur-arch",
    "engine": "Excalibur.js",
    "tier": "pro",
    "sizeBytes": 11698,
    "sections": [
      "Core Concept — Resource → Loader → Start",
      "Resource Types",
      "`ImageSource` — Images and Spritesheets",
      "`Sound` — Audio",
      "`FontSource` — Custom Fonts",
      "`Resource<T>` — Generic Data",
      "The Loader",
      "Default Loader",
      "Adding Resources Dynamically",
      "Suppressing the Play Button",
      "Custom Loading Screen",
      "Scene-Specific Loading",
      "Scene Transition + Loader API",
      "Centralized Resource Registry Pattern",
      "Checking Load State",
      "Best Practices",
      "Always Provide Audio Fallbacks",
      "Use the Resource Registry for Projects > 10 Assets",
      "Lazy-Load Level-Specific Assets",
      "Handle Load Errors Gracefully",
      "Optimize for Web Delivery",
      "Mobile and Browser Considerations",
      "Cross-Framework Comparison"
    ]
  },
  {
    "id": "excalibur-arch/R1",
    "title": "R1 — Excalibur.js v0.32 API Quick Reference",
    "description": "",
    "category": "reference",
    "module": "excalibur-arch",
    "engine": "Excalibur.js",
    "tier": "pro",
    "sizeBytes": 17163,
    "sections": [
      "Engine Setup",
      "DisplayMode Options",
      "Resource Loading",
      "SpriteSheet from ImageSource",
      "Scenes",
      "Actors",
      "Actor Common Properties",
      "Graphics on Actors",
      "Actions (Scripted Behavior)",
      "Input",
      "Keyboard",
      "Pointer (Mouse / Touch)",
      "Gamepad",
      "Physics & Collisions",
      "Camera",
      "Audio",
      "Timers & Events",
      "Text & UI",
      "TileMaps",
      "Useful Utilities"
    ]
  },
  {
    "id": "fna-arch-rules",
    "title": "FNA Architecture Rules",
    "description": "",
    "category": "reference",
    "module": "fna-arch",
    "engine": "FNA",
    "tier": "pro",
    "sizeBytes": 9451,
    "sections": [
      "Architecture Context",
      "Tech Stack",
      "Native Libraries",
      "Project Structure Conventions",
      "FNA as Source Reference",
      "Content Pipeline Rules",
      "Options for Building Content",
      "Content Format Differences from MonoGame",
      "Code Conventions",
      "FNA-Specific API Notes",
      "Build Commands",
      "Porting from MonoGame to FNA",
      "Porting from XNA to FNA",
      "Console Support (NativeAOT)",
      "Shader Runtime Translation (MojoShader)",
      "When to Choose FNA over MonoGame",
      "Shipping a Complete Game"
    ]
  },
  {
    "id": "G01",
    "title": "G01 — Getting Started with FNA",
    "description": "A step-by-step guide to creating your first FNA project from scratch. Covers environment setup, FNA submodule integra...",
    "category": "guide",
    "module": "fna-arch",
    "engine": "FNA",
    "tier": "pro",
    "sizeBytes": 12860,
    "sections": [
      "Table of Contents",
      "1 — Prerequisites",
      "2 — Project Setup",
      "3 — Adding FNA as a Submodule",
      "Updating FNA",
      "4 — Downloading fnalibs",
      "Required Libraries",
      "Download Prebuilt Binaries",
      "Copy to Output on Build",
      "5 — Project File Configuration",
      "6 — Your First Game Class",
      "7 — Loading Content",
      "Option A: Raw Asset Loading (Simplest)",
      "Option B: MonoGame Content Builder (MGCB)",
      "Option C: Original XNA Content Pipeline",
      "8 — Running and Debugging",
      "Environment Variables",
      "9 — Platform-Specific Notes",
      "Windows",
      "Linux",
      "macOS",
      "10 — Common Setup Issues",
      "\"DllNotFoundException: SDL2\"",
      "\"Could not load file or assembly 'FNA'\"",
      "\"Content not found\" errors",
      "Build errors in FNA source",
      "Shaders won't load",
      "Next Steps"
    ]
  },
  {
    "id": "G02",
    "title": "G02 — NativeAOT Publishing with FNA",
    "description": "A comprehensive guide to ahead-of-time (AOT) compilation and deployment of FNA games using .NET NativeAOT. This guide...",
    "category": "guide",
    "module": "fna-arch",
    "engine": "FNA",
    "tier": "pro",
    "sizeBytes": 21969,
    "sections": [
      "Table of Contents",
      "1 — What is NativeAOT?",
      "Benefits of NativeAOT",
      "Trade-offs",
      "2 — Prerequisites",
      "Platform-Specific Build Tools",
      "Checking Your Setup",
      "3 — Project Configuration",
      "Why FNA.Core?",
      "Runtime Descriptor (rd.xml)",
      "4 — Native Library Linking",
      "Declaring NativeLibrary Items",
      "DirectPInvoke for Direct Loading",
      "Platform-Specific Linking",
      "Why Explicit Linking?",
      "5 — Code Compatibility",
      "Incompatible Patterns",
      "Best Practices for NativeAOT-Safe Code",
      "Checking for NativeAOT Warnings",
      "6 — Building for Each Platform",
      "Linux (x86_64)",
      "Windows (x86_64)",
      "macOS (Universal / Apple Silicon + Intel)",
      "7 — SDL3 Integration Notes",
      "What Changed from SDL2",
      "SDL3 P/Invoke Declarations",
      "Platform Quirks",
      "8 — Trimming and Size Optimization",
      "Trimming Configuration",
      "Typical Binary Sizes",
      "Analyzing Trim Warnings",
      "9 — Console Deployment",
      "Console Workflow",
      "Example: Nintendo Switch",
      "10 — Common Issues and Troubleshooting",
      "\"error: native compiler error when compiling\"",
      "\"error: metadata for type 'X' is not available\"",
      "\"DllNotFoundException: SDL3\"",
      "\"warning IL3050: The following types or members were not AOT-analyzable\"",
      "Binary size is unexpectedly large",
      "\"No suitable build tools found\"",
      "Next Steps"
    ]
  },
  {
    "id": "G03",
    "title": "G03 — FNA3D, SDLgpu, and the SDL3 Graphics Transition",
    "description": "FNA's graphics layer is migrating from its custom FNA3D backend to SDLgpu, the official GPU API that shipped with SDL...",
    "category": "guide",
    "module": "fna-arch",
    "engine": "FNA",
    "tier": "pro",
    "sizeBytes": 12229,
    "sections": [
      "Table of Contents",
      "1 — Background: FNA3D to SDL_gpu",
      "The lineage",
      "2 — What is SDL_gpu?",
      "SDL_gpu vs. FNA3D Feature Comparison",
      "3 — How FNA Uses SDL_gpu",
      "What changes internally",
      "4 — Supported Graphics Backends",
      "Forcing a specific backend",
      "5 — Migration Impact on Game Code",
      "What does NOT change",
      "What MAY change",
      "Checklist for existing projects",
      "6 — Shader Compilation Changes",
      "Previous workflow (FNA3D)",
      "New workflow (SDL_gpu)",
      "Migration path for shaders",
      "Games with no custom shaders",
      "7 — SDL3 Input and Platform Changes",
      "Input changes",
      "SDL_Storage",
      "Event system",
      "8 — Building FNA Against SDL3",
      "Prerequisites",
      "Build steps",
      "Project file changes",
      "9 — Debugging Graphics Issues",
      "Common issues during SDL3 migration",
      "GPU debugging tools by backend",
      "SDL_gpu debug logging",
      "10 — Timeline and Stability",
      "Recommendation",
      "11 — Common Pitfalls"
    ]
  },
  {
    "id": "G04",
    "title": "G04 — Audio System with FAudio",
    "description": "FNA's audio is powered by FAudio, an accuracy-focused reimplementation of Microsoft's XAudio2, X3DAudio, XAPO, and XA...",
    "category": "guide",
    "module": "fna-arch",
    "engine": "FNA",
    "tier": "pro",
    "sizeBytes": 23304,
    "sections": [
      "Table of Contents",
      "1 — Audio Architecture Overview",
      "The Audio Stack",
      "Key Namespace Mapping",
      "2 — FAudio Native Library Setup",
      "Obtaining FAudio",
      "Placing Native Libraries",
      "Build Verification",
      "3 — Supported Audio Formats",
      "Format Comparison",
      "Recommended Formats for FNA",
      "QOA (Quite OK Audio)",
      "4 — SoundEffect — One-Shot and Looping Sounds",
      "Loading a SoundEffect",
      "Playing a SoundEffect",
      "Master Volume",
      "SoundEffect Lifetime",
      "5 — SoundEffectInstance — Controlled Playback",
      "Creating and Using Instances",
      "Instance Limits",
      "Instance Pooling Pattern",
      "6 — Song and MediaPlayer — Background Music",
      "Loading and Playing Music",
      "MediaPlayer Controls",
      "FNA Music Format Requirement",
      "Music Crossfading",
      "7 — XACT Audio Engine",
      "When to Use XACT",
      "XACT Architecture",
      "XACT Usage in FNA",
      "XACT Format Warning for FNA",
      "8 — 3D Positional Audio",
      "Setting Up 3D Audio",
      "3D Audio Parameters",
      "2D Games and 3D Audio",
      "9 — Dynamic Sound Generation",
      "Use Cases for Dynamic Audio",
      "Buffer Guidelines",
      "10 — Audio Resource Management",
      "Memory Considerations",
      "Disposal Order",
      "11 — Cross-Platform Format Pipeline",
      "Recommended Asset Pipeline",
      "FFmpeg Conversion Commands",
      "12 — Common Pitfalls",
      "Pitfall 1: MP3 Files for Music",
      "Pitfall 2: Forgetting `AudioEngine.Update()`",
      "Pitfall 3: Disposing SoundEffect Before Instances Stop",
      "Pitfall 4: Too Many Concurrent Sounds",
      "Pitfall 5: xWMA in XACT Banks",
      "Pitfall 6: Missing FAudio Native Library",
      "13 — Performance Considerations",
      "Audio Thread",
      "Memory Budget Guidelines",
      "Optimization Tips",
      "14 — Differences from MonoGame Audio"
    ]
  },
  {
    "id": "G05",
    "title": "G05 — Input Handling & FNA Extensions",
    "description": "FNA preserves the XNA 4.0 input API exactly — Keyboard, Mouse, GamePad, and TouchPanel work identically to their orig...",
    "category": "guide",
    "module": "fna-arch",
    "engine": "FNA",
    "tier": "pro",
    "sizeBytes": 21933,
    "sections": [
      "Table of Contents",
      "1 — Input Architecture Overview",
      "Key Principle",
      "2 — Keyboard Input",
      "Basic Polling",
      "Scancodes vs Keycodes",
      "3 — Mouse Input",
      "Basic Polling",
      "Relative Mouse Mode",
      "Setting Mouse Position",
      "4 — GamePad Input",
      "Basic Polling",
      "Thumbstick Deadzone",
      "Custom Deadzone Implementation",
      "Vibration / Rumble",
      "5 — TextInputEXT — Text Entry Events",
      "Setup",
      "Important Notes",
      "6 — Mouse Extensions — ClickedEXT",
      "7 — GamePad Extensions",
      "GetGUIDEXT — Hardware Identification",
      "GetCapabilitiesEXT — Extended Capabilities",
      "SetLightBarEXT — PlayStation DualShock/DualSense",
      "SetTriggerVibrationEXT — Trigger Haptics",
      "8 — SDL2 Controller Database",
      "Built-in Database",
      "Custom Mappings",
      "Detecting Unmapped Controllers",
      "9 — Building an Input Abstraction Layer",
      "10 — Touch Input (Mobile/SDL)",
      "11 — Environment Variables for Input",
      "12 — Common Pitfalls",
      "13 — Differences from MonoGame Input"
    ]
  },
  {
    "id": "G06",
    "title": "G06 — Content Loading Without the Pipeline",
    "description": "FNA preserves XNA's ContentManager API but extends it to load raw asset files directly — no .xnb compilation step req...",
    "category": "guide",
    "module": "fna-arch",
    "engine": "FNA",
    "tier": "pro",
    "sizeBytes": 18143,
    "sections": [
      "Table of Contents",
      "1 — Why Skip the Content Pipeline?",
      "2 — Raw Format Support via ContentManager",
      "Supported Raw Formats",
      "Example: Loading Raw Assets",
      "3 — Loading Textures",
      "Via ContentManager (Recommended)",
      "Via Texture2D.FromStream (Manual Control)",
      "FNA Extension: TextureDataFromStreamEXT",
      "FNA Extension: DDSFromStreamEXT",
      "Texture Format Utilities",
      "4 — Loading Audio",
      "Sound Effects (Short Clips)",
      "Music (Streaming Playback)",
      "FNA Extension: DynamicSoundEffectInstance with Float Buffers",
      "QOA Format",
      "5 — Loading Fonts",
      "Option A: SpriteFont via MGCB (XNA-Compatible)",
      "Option B: BMFont (Bitmap Font)",
      "Option C: TrueType Libraries",
      "6 — Loading Video",
      "FNA Video Extensions",
      "7 — Loading Effects (Shaders)",
      "Compiling Shaders",
      "Loading Effects",
      "Critical Difference from MonoGame",
      "8 — Stream-Based Loading",
      "9 — Custom Content Managers",
      "10 — Using MGCB as a Fallback",
      "11 — Asset Hot-Reloading",
      "12 — Third-Party Asset Libraries",
      "13 — Performance Considerations",
      "14 — Common Pitfalls",
      "Pitfall 1: Missing fnalibs at Runtime",
      "Pitfall 2: Using MGFX Shaders with FNA",
      "Pitfall 3: ContentManager Path Resolution",
      "Pitfall 4: SpriteFont Without Content Pipeline",
      "Pitfall 5: Texture Premultiplication"
    ]
  },
  {
    "id": "G07",
    "title": "G07 — Shader Compilation with FXC",
    "description": "How to compile, load, and manage Effect shaders in FNA using the DirectX FXC compiler. Covers Windows-native and cros...",
    "category": "guide",
    "module": "fna-arch",
    "engine": "FNA",
    "tier": "pro",
    "sizeBytes": 10526,
    "sections": [
      "Why FXC, Not MGFX",
      "Setting Up FXC",
      "Option A: DirectX SDK (Windows)",
      "Option B: Windows SDK (Windows 10+)",
      "Option C: Wine (Linux / macOS)",
      "FXC Command Reference",
      "Basic Compilation",
      "Profile: Always Use `fx_2_0`",
      "MSBuild Integration",
      "`build/BuildShaders.targets`",
      "Include in Your `.csproj`",
      "Loading Shaders at Runtime",
      "Content Pipeline Alternative",
      "Writing FNA-Compatible Shaders",
      "Basic Sprite Effect",
      "Using with SpriteBatch",
      "Shader Model Limitations",
      "Differences from MonoGame Shaders",
      "Troubleshooting",
      "\"Effect format is not supported\"",
      "\"wine: command not found\" on CI",
      "Shader compiles but renders incorrectly"
    ]
  },
  {
    "id": "G08",
    "title": "G08 — Cross-Platform Deployment & fnalibs Management",
    "description": "How to ship an FNA game to Windows, Linux, and macOS. Covers fnalibs structure, per-platform library placement, dotne...",
    "category": "guide",
    "module": "fna-arch",
    "engine": "FNA",
    "tier": "pro",
    "sizeBytes": 8607,
    "sections": [
      "fnalibs: What They Are",
      "Downloading fnalibs",
      "Publishing with `dotnet publish`",
      "Per-Platform fnalibs Placement",
      "Windows",
      "Linux",
      "macOS",
      "Build Matrix for CI",
      "Compatibility with MonoGame",
      "Common Deployment Issues",
      "Checklist Before Shipping"
    ]
  },
  {
    "id": "G09",
    "title": "G09 — FNA3D SDLGPU Migration",
    "description": "How to work with FNA3D's transition to SDLGPU as its primary graphics backend. Covers what changed, how to configure ...",
    "category": "guide",
    "module": "fna-arch",
    "engine": "FNA",
    "tier": "pro",
    "sizeBytes": 7433,
    "sections": [
      "Background: FNA3D's Backend Evolution",
      "What This Means for Your Game",
      "If You're Starting a New FNA Project",
      "If You're Updating an Existing FNA Project",
      "Configuring the Graphics Backend",
      "FNA3D_FORCE_DRIVER",
      "SDL_GPU_DRIVER",
      "Setting Environment Variables in Code",
      "Shader Compatibility",
      "Shader Debugging Tips",
      "Performance Considerations",
      "Steam Deck Considerations",
      "Troubleshooting",
      "Migration Checklist"
    ]
  },
  {
    "id": "fna-arch/G10",
    "title": "G10 — Debugging, Profiling & Performance",
    "description": "How to debug, profile, and optimize FNA games. Covers FNA's built-in diagnostics, environment variables for GPU/audio...",
    "category": "guide",
    "module": "fna-arch",
    "engine": "FNA",
    "tier": "pro",
    "sizeBytes": 11368,
    "sections": [
      "FNA's Debugging Philosophy",
      "Environment Variables for Debugging",
      "Graphics Debugging (FNA3D)",
      "Audio Debugging (FAudio)",
      "Platform / Window Debugging",
      "Setting Variables in a Launch Script",
      "In-Game Performance Metrics",
      ".NET Profiling Tools",
      "dotnet-trace (CPU Profiling)",
      "dotnet-counters (Live Metrics)",
      "dotnet-gcdump (Memory Analysis)",
      "Common FNA Performance Bottlenecks",
      "1. SpriteBatch Draw Call Batching",
      "2. GC Pressure from Per-Frame Allocations",
      "3. Content Loading Stalls",
      "4. Unoptimized Collision Detection",
      "NativeAOT Debugging Considerations",
      "FNA-Specific Debug Checklist"
    ]
  },
  {
    "id": "fna-arch/G11",
    "title": "G11 — ECS Architecture with MoonTools.ECS",
    "description": "How to structure FNA games using the Entity Component System pattern with MoonTools.ECS. Covers the core ECS concepts...",
    "category": "guide",
    "module": "fna-arch",
    "engine": "FNA",
    "tier": "pro",
    "sizeBytes": 11715,
    "sections": [
      "Why ECS with FNA?",
      "Setting Up MoonTools.ECS",
      "Core Concepts",
      "Components Are Unmanaged Structs",
      "The World",
      "Creating Entities",
      "Systems and Filters",
      "Manipulators (for Non-System Code)",
      "Integrating with the FNA Game Loop",
      "Rendering System Pattern",
      "Relations: Entity-to-Entity Connections",
      "Tag Components for State Machines",
      "Performance Characteristics",
      "Common Pitfalls",
      "Don't Store References in Components",
      "Don't Forget FinishUpdate",
      "Keep Systems Focused",
      "When Not to Use ECS"
    ]
  },
  {
    "id": "fna-arch/G12",
    "title": "G12 — Real-World SDLGPU Deployment: Lessons from Terraria & Production Games",
    "description": "Practical lessons from deploying FNA games with SDLGPU in production, drawn from Terraria 1.4.5's transition and comm...",
    "category": "guide",
    "module": "fna-arch",
    "engine": "FNA",
    "tier": "pro",
    "sizeBytes": 10472,
    "sections": [
      "Background: SDL_GPU in the Wild",
      "Intel GPU Compatibility",
      "The Problem",
      "Detection and Workarounds",
      "Backend Fallback Strategy",
      "Defensive Initialization Pattern",
      "Linux-Specific Deployment Issues",
      "Mesa Driver Versions",
      "Steam Runtime vs. Native Libraries",
      "Steam Deck",
      "macOS Deployment Notes",
      "Windows Deployment Notes",
      "Deployment Checklist",
      "Updating FNA + Native Libraries"
    ]
  },
  {
    "id": "fna-arch/G13",
    "title": "G13 — SDL3 Storage API: Modern Data Persistence for FNA Games",
    "description": "FNA 25.03 made SDL3 the default platform, and with it comes SDLStorage — a new cross-platform storage API that replac...",
    "category": "guide",
    "module": "fna-arch",
    "engine": "FNA",
    "tier": "pro",
    "sizeBytes": 11907,
    "sections": [
      "Why Migrate from XNA Storage?",
      "Storage API Concepts",
      "Title Storage",
      "User Storage",
      "Where Files Actually Go",
      "Practical Save System",
      "Migration from XNA Storage",
      "Before (XNA Storage)",
      "After (SDL3 Storage)",
      "Migration Checklist",
      "Console Considerations",
      "Settings Storage Pattern",
      "Error Handling",
      "Recommendations"
    ]
  },
  {
    "id": "fna-arch/G14",
    "title": "G14 — 2D Physics Systems with MoonTools.ECS",
    "description": "FNA provides the rendering and input layer but has no built-in physics. For 2D games, you need to build or integrate ...",
    "category": "guide",
    "module": "fna-arch",
    "engine": "FNA",
    "tier": "pro",
    "sizeBytes": 16561,
    "sections": [
      "Architecture Overview",
      "Core Components",
      "Velocity Integration System",
      "Collision Detection: Broad Phase with Spatial Hashing",
      "Collision Detection: Narrow Phase (AABB)",
      "Collision Resolution System",
      "Registering the Physics Pipeline",
      "One-Way Platforms",
      "Fixed Timestep Physics",
      "Performance Considerations",
      "When to Use a Third-Party Physics Library"
    ]
  },
  {
    "id": "fna-arch/G15",
    "title": "G15 — Multi-Window Rendering with SDL3 GPU API",
    "description": "SDL3's GPU API provides first-class support for rendering to multiple windows from a single SDLGPUDevice. This is use...",
    "category": "guide",
    "module": "fna-arch",
    "engine": "FNA",
    "tier": "pro",
    "sizeBytes": 10892,
    "sections": [
      "When Multi-Window Matters",
      "Claiming Windows for the GPU Device",
      "Swapchain Configuration",
      "Multi-Window Render Loop",
      "Render Functions Per Window",
      "Window Lifecycle Management",
      "Sharing Resources Across Windows",
      "Threading Considerations",
      "FNA Integration Notes",
      "Summary"
    ]
  },
  {
    "id": "fna-arch/G16",
    "title": "G16 — SDL 3.4 GPU / 2D Renderer Interoperability",
    "description": "SDL 3.4 introduced new APIs that bridge the gap between SDL's modern 3D GPU API (SDLGPU) and its 2D rendering system ...",
    "category": "guide",
    "module": "fna-arch",
    "engine": "FNA",
    "tier": "pro",
    "sizeBytes": 10767,
    "sections": [
      "Why GPU/2D Interop Matters for FNA",
      "Core Interop APIs (SDL 3.4+)",
      "SDL_CreateGPURenderState",
      "SDL_SetGPURenderState",
      "SDL_SetGPURenderStateFragmentUniforms",
      "SDL_DestroyGPURenderState",
      "FNA Integration Pattern",
      "Usage in a Game's Draw Loop",
      "Shader Compilation for Cross-Platform",
      "Additional SDL 3.4 GPU Features",
      "YUV Texture Support in GPU 2D Renderer",
      "GPU Device Property Queries",
      "Vulkan Feature Configuration",
      "When to Use Interop vs. Full GPU API",
      "Performance Notes",
      "Next Steps"
    ]
  },
  {
    "id": "fna-arch/G17",
    "title": "G17 — Save System Design Patterns",
    "description": "How to design a robust save system for FNA games. Covers serialization strategies (JSON, binary, MessagePack), save d...",
    "category": "guide",
    "module": "fna-arch",
    "engine": "FNA",
    "tier": "pro",
    "sizeBytes": 15907,
    "sections": [
      "Architecture Overview",
      "Save Data Model",
      "Design Rules",
      "Serialization Strategies",
      "JSON with System.Text.Json",
      "MessagePack (Recommended for Release)",
      "Raw Binary with BinaryWriter/BinaryReader",
      "Strategy Comparison",
      "Atomic Writes (Crash Safety)",
      "Save Versioning & Migration",
      "Migration Rules",
      "Save Slot Management",
      "Why Separate Metadata Files?",
      "ECS Integration with MoonTools.ECS",
      "Checklist"
    ]
  },
  {
    "id": "fna-arch/G18",
    "title": "G18 — SDLshadercross & Compute Shader Pipeline",
    "description": "How to use SDLshadercross to compile and translate shaders for FNA games targeting the SDL GPU API. Covers the shader...",
    "category": "guide",
    "module": "fna-arch",
    "engine": "FNA",
    "tier": "pro",
    "sizeBytes": 10897,
    "sections": [
      "Background: Why SDL_shadercross Exists",
      "Compilation Pipelines",
      "HLSL as Source (Recommended for FNA)",
      "SPIR-V as Source (For Existing Vulkan Shaders)",
      "Offline Compilation (Recommended for Shipping)",
      "CLI Usage",
      "CLI Options Reference",
      "Build Integration",
      "Online (Runtime) Compilation",
      "Graphics Shader from HLSL",
      "Compute Shader from HLSL",
      "From SPIR-V (Pre-compiled)",
      "Resource Reflection",
      "JSON Reflection Output",
      "Writing Compute Shaders for SDL GPU",
      "HLSL Compute Shader Structure",
      "Dispatching Compute Work",
      "Common Use Cases for Compute Shaders in Games",
      "Offline vs. Online: Decision Guide",
      "Migration from FXC (Legacy)",
      "Checklist"
    ]
  },
  {
    "id": "fna-arch/G19",
    "title": "G19 — SDL3 Storage API & Platform Abstraction",
    "description": "How to use SDL3's Storage API for portable file I/O in FNA games. Covers the two storage interfaces (SDLTitleStorage ...",
    "category": "guide",
    "module": "fna-arch",
    "engine": "FNA",
    "tier": "pro",
    "sizeBytes": 8920,
    "sections": [
      "Why SDL3 Storage Over System.IO",
      "SDL_TitleStorage — Read-Only Game Assets",
      "Opening Title Storage",
      "Reading Files",
      "Checking Readiness",
      "SDL_UserStorage — Read-Write Save Data",
      "Opening User Storage",
      "Writing Files",
      "Creating Directories",
      "Enumerating Files",
      "Integration with FNA Content Loading",
      "Custom TitleContainer Bridge",
      "Integration with Save Systems",
      "Remaining Free for System.IO",
      "Cleanup",
      "Troubleshooting"
    ]
  },
  {
    "id": "fna-arch/G1",
    "title": "G1 — Getting Started with FNA",
    "description": "",
    "category": "guide",
    "module": "fna-arch",
    "engine": "FNA",
    "tier": "pro",
    "sizeBytes": 7757,
    "sections": [
      "1. Prerequisites",
      ".NET SDK",
      "Development Environment",
      "Platform-Specific Setup",
      "2. Project Setup",
      "Clone FNA",
      "Create the Project File",
      "Create the Entry Point",
      "3. Native Libraries",
      "Option A: Prebuilt Binaries (Recommended)",
      "Option B: Build From Source",
      "4. Build and Run",
      "Troubleshooting",
      "5. Next Steps"
    ]
  },
  {
    "id": "fna-arch/G20",
    "title": "G20 — MonoGame Compatibility & Migration",
    "description": "Comprehensive guide to porting between FNA and MonoGame. Covers API compatibility, content format differences, build ...",
    "category": "guide",
    "module": "fna-arch",
    "engine": "FNA",
    "tier": "pro",
    "sizeBytes": 9372,
    "sections": [
      "Why Two XNA Successors Exist",
      "API Compatibility Matrix",
      "Fully Compatible (No Changes Needed)",
      "Incompatible Areas",
      "MonoGame-Extended and Third-Party Libraries",
      "Content Format Migration",
      "Shaders (Critical — Not Interchangeable)",
      "Audio Migration",
      "Video Migration",
      "Textures and Other Content",
      "MonoGame to FNA: Step-by-Step",
      "1. Set Up FNA Submodule",
      "2. Replace NuGet References",
      "3. Download fnalibs",
      "4. Recompile Shaders",
      "5. Convert Media Files",
      "6. Remove Platform Defines",
      "7. Remove MonoGame-Specific API Calls",
      "8. Configure Content Loading",
      "9. Test Thoroughly",
      "FNA to MonoGame: Step-by-Step",
      "Compatibility Shim for Dual-Target Projects",
      "Common Migration Pitfalls"
    ]
  },
  {
    "id": "fna-arch/G21",
    "title": "G21 — Environment Variables & Runtime Configuration",
    "description": "Complete reference for FNA and FNA3D environment variables that control graphics backends, input behavior, display se...",
    "category": "guide",
    "module": "fna-arch",
    "engine": "FNA",
    "tier": "pro",
    "sizeBytes": 10121,
    "sections": [
      "Overview",
      "FNA Core Variables",
      "FNA_PLATFORM_BACKEND",
      "FNA_GRAPHICS_ENABLE_HIGHDPI",
      "FNA_GRAPHICS_JPEG_SAVE_QUALITY",
      "FNA_KEYBOARD_USE_SCANCODES",
      "FNA_GAMEPAD_NUM_GAMEPADS",
      "FNA_SDL_FORCE_BASE_PATH",
      "FNA3D Graphics Variables",
      "FNA3D_FORCE_DRIVER",
      "FNA3D_ENABLE_HDR_COLORSPACE",
      "FNA3D_ENABLE_LATESWAPTEAR",
      "FNA3D_BACKBUFFER_SCALE_NEAREST",
      "FNA3D_MOJOSHADER_PROFILE",
      "OpenGL Profile Overrides",
      "FNA3D_OPENGL_WINDOW_DEPTHSTENCILFORMAT",
      "Setting Variables in Code",
      "At Application Startup (Before Game Constructor)",
      "Parsing Launch Options",
      "Shipping Recommendations",
      "Default Configuration",
      "Player-Facing Options",
      "Debugging",
      "Troubleshooting"
    ]
  },
  {
    "id": "fna-arch/G22",
    "title": "G22 — Platform Backend Architecture",
    "description": "How FNA's delegate-based platform abstraction enables a single compiled binary to run on SDL2 or SDL3 without recompi...",
    "category": "guide",
    "module": "fna-arch",
    "engine": "FNA",
    "tier": "pro",
    "sizeBytes": 12032,
    "sections": [
      "Architecture Overview",
      "FNAPlatform: Delegate-Based Abstraction",
      "How Backend Selection Works",
      "What FNAPlatform Manages",
      "Why Delegates Instead of Interfaces",
      "FNA3D: The Rendering Stack",
      "Backend Architecture (Post-SDL_GPU Migration)",
      "SDL_GPU: The Default Path",
      "Legacy Drivers",
      "FAudio: Audio Architecture",
      "Native Library Loading",
      ".NET Framework / Mono",
      ".NET 8+ (CoreCLR)",
      "NativeAOT",
      "Build Once, Run Anywhere",
      "Runtime vs. Compile-Time: FNA vs. MonoGame",
      "Practical Implications for Game Developers",
      "You Don't Need to Understand the Internals",
      "Checking the Active Backend",
      "Keeping fnalibs Updated"
    ]
  },
  {
    "id": "G23",
    "title": "G23 — Console Porting with NativeAOT",
    "description": "How FNA ships to Xbox, PlayStation 5, and Nintendo Switch using NativeAOT — the architecture that keeps all platform ...",
    "category": "guide",
    "module": "fna-arch",
    "engine": "FNA",
    "tier": "pro",
    "sizeBytes": 8041,
    "sections": [
      "Architecture: No Private Branches",
      "Why NativeAOT for Consoles",
      "Xbox: Public GDK Workflow",
      "Prerequisites",
      "Build Flow",
      "Key Considerations",
      "PlayStation 5: SDL-PlayStation",
      "NDA Boundary",
      "Nintendo Switch: NativeAOT + SDL",
      "Architecture",
      "NDA Boundary",
      "Code Compatibility Checklist",
      "Must Avoid",
      "Safe Patterns",
      "Testing for Compatibility",
      "FNA vs MonoGame: Console Support Comparison",
      "Workflow Summary"
    ]
  },
  {
    "id": "G24",
    "title": "G24 — MojoShader Runtime Shader Translation Pipeline",
    "description": "How MojoShader translates FXC-compiled DXBC shader bytecode at runtime to target every graphics backend FNA supports....",
    "category": "guide",
    "module": "fna-arch",
    "engine": "FNA",
    "tier": "pro",
    "sizeBytes": 8706,
    "sections": [
      "The Problem MojoShader Solves",
      "SPIR-V as the Universal Intermediate",
      "Why Not Translate Directly to Each Format?",
      "How FNA3D Integrates MojoShader",
      "1. Effect Loading",
      "2. Shader Translation (On First Use)",
      "3. Caching",
      "4. Parameter Binding",
      "The Role of SPIRV-Cross",
      "When SPIRV-Cross Is Available",
      "When SPIRV-Cross Is Not Available",
      "MojoShader vs SDL_shadercross",
      "Shader Model Limitations",
      "Debugging Shader Translation Issues",
      "Symptoms of MojoShader Problems",
      "Environment Variables for Diagnosis",
      "Validation Steps",
      "MonoGame Compatibility Note"
    ]
  },
  {
    "id": "G25",
    "title": "G25 — Game Packaging and Distribution",
    "description": "How to package an FNA game for distribution on Steam, itch.io, GOG, and direct download. Covers fnalibs bundling per ...",
    "category": "guide",
    "module": "fna-arch",
    "engine": "FNA",
    "tier": "pro",
    "sizeBytes": 9318,
    "sections": [
      "Distribution Build Types",
      "fnalibs: Native Library Bundling",
      "Required Libraries",
      "Where to Get fnalibs",
      "Directory Layout",
      "Platform-Specific Packaging",
      "Windows",
      "Linux",
      "macOS",
      "Store-Specific Requirements",
      "Steam",
      "itch.io",
      "GOG",
      "Content Directory Considerations",
      "Relative Path Loading",
      "Case Sensitivity",
      "Asset Size and Compression",
      "Build Automation",
      "FNA vs MonoGame: Distribution Differences"
    ]
  },
  {
    "id": "G26",
    "title": "G26 — Steam & Storefront Integration",
    "description": "Integrating FNA games with Steam, GOG, and other storefronts. Covers Steamworks.NET setup, depot configuration, achie...",
    "category": "guide",
    "module": "fna-arch",
    "engine": "FNA",
    "tier": "pro",
    "sizeBytes": 11394,
    "sections": [
      "Table of Contents",
      "1 — Overview",
      "2 — Steamworks.NET Setup",
      "Installation",
      "Native Libraries",
      "Initialization",
      "The `steam_appid.txt` File",
      "3 — Steam Depot Configuration",
      "Launch Options in Steamworks",
      "4 — Achievements and Stats",
      "5 — Cloud Saves",
      "6 — FNA.Steamworks (Xbox Live Shim)",
      "7 — GOG Galaxy Integration",
      "8 — itch.io Distribution",
      "9 — Steam Deck Considerations",
      "Verifying Steam Deck Compatibility",
      "10 — FNA vs MonoGame: Distribution Differences"
    ]
  },
  {
    "id": "G27",
    "title": "G27 — macOS App Bundle & Distribution",
    "description": "Creating a proper macOS .app bundle for FNA games, including code signing, notarization, Apple Silicon support, and G...",
    "category": "guide",
    "module": "fna-arch",
    "engine": "FNA",
    "tier": "pro",
    "sizeBytes": 14310,
    "sections": [
      "Table of Contents",
      "1 — Why an App Bundle",
      "2 — App Bundle Structure",
      "3 — Building the Executable",
      "Option A: .NET Self-Contained Publish",
      "Option B: NativeAOT Publish",
      "4 — Creating the Bundle",
      "Info.plist",
      "5 — Fixing Library Paths with install_name_tool",
      "6 — Apple Silicon and Universal Binaries",
      "Option A: Universal Binary (recommended for distribution)",
      "Option B: Separate Architecture Builds",
      "7 — Code Signing",
      "Sign the Bundle",
      "Entitlements",
      "8 — Notarization",
      "CI/CD Automation",
      "9 — DMG Packaging",
      "10 — Common Issues",
      "\"MyGame is damaged and can't be opened\"",
      "\"Library not loaded: /usr/local/lib/libSDL3.0.dylib\"",
      "Crash on Apple Silicon",
      "Notarization fails with \"The signature is invalid\"",
      "Game can't find Content folder",
      "11 — FNA vs MonoGame: macOS Differences"
    ]
  },
  {
    "id": "G28",
    "title": "G28 — Testing FNA Games",
    "description": "Patterns for unit testing and integration testing FNA games. Covers testing game logic without a graphics device, moc...",
    "category": "guide",
    "module": "fna-arch",
    "engine": "FNA",
    "tier": "pro",
    "sizeBytes": 16259,
    "sections": [
      "Table of Contents",
      "1 — Testing Strategy Overview",
      "2 — Unit Testing Game Logic",
      "Project Structure",
      "Example: Testing a Damage Calculator",
      "Test Project Configuration",
      "3 — Testing with a Graphics Device (Integration Tests)",
      "Headless FNA Test Fixture",
      "Using the Fixture",
      "4 — Mocking XNA Services",
      "Define Interfaces for Framework Services",
      "Implement Against FNA in the Game Project",
      "Mock in Tests",
      "5 — Testing Input and State Machines",
      "6 — Testing Content Loading",
      "7 — CI Pipeline Configuration",
      "GitHub Actions / GitLab CI",
      "8 — Common Pitfalls",
      "9 — FNA vs MonoGame: Testing Differences"
    ]
  },
  {
    "id": "G29",
    "title": "G29 — Localization & Internationalization",
    "description": "Patterns for building localization (l10n) and internationalization (i18n) systems in FNA games. Covers text managemen...",
    "category": "guide",
    "module": "fna-arch",
    "engine": "FNA",
    "tier": "pro",
    "sizeBytes": 19829,
    "sections": [
      "Table of Contents",
      "1 — Architecture Overview",
      "2 — String Table System",
      "String Table File Format",
      "String Table Loader",
      "Usage",
      "3 — Font Rendering for International Text",
      "The Problem with SpriteFont",
      "Solution: Runtime Font Rendering with SharpFont",
      "Drawing Text with DynamicFont",
      "SpriteFont Still Works for Latin-Only Games",
      "4 — Runtime Language Switching",
      "5 — Localizing Non-Text Assets",
      "Folder-per-Locale Pattern",
      "Localized Asset Loader",
      "6 — Right-to-Left and CJK Layout",
      "Right-to-Left (Arabic, Hebrew)",
      "CJK Considerations",
      "7 — Pluralization and Variables",
      "8 — Integration with SpriteBatch",
      "Measuring Text Before Drawing",
      "UI Layout Tips",
      "9 — Common Pitfalls",
      "10 — FNA vs MonoGame: Localization Differences"
    ]
  },
  {
    "id": "fna-arch/G2",
    "title": "G2 — SDL3 Platform Layer",
    "description": "",
    "category": "guide",
    "module": "fna-arch",
    "engine": "FNA",
    "tier": "pro",
    "sizeBytes": 9633,
    "sections": [
      "1. Architecture Overview",
      "Delegate-Based Platform Abstraction",
      "2. SDL3 vs SDL2 Backend Selection",
      "Default Behavior",
      "Switching Backends",
      "3. Graphics Backend (FNA3D)",
      "Forcing a Graphics Backend",
      "Auto-Selection Logic",
      "4. Window and Display Management",
      "HiDPI Support",
      "Multi-Monitor",
      "5. Input Through SDL3",
      "Text Input (IME Support)",
      "6. Platform-Specific Notes",
      "Apple Platforms (macOS, iOS, tvOS)",
      "Linux",
      "Windows",
      "Console Platforms",
      "7. Environment Variable Reference",
      "8. Next Steps"
    ]
  },
  {
    "id": "G30",
    "title": "G30 — Game Accessibility Patterns",
    "description": "Implementing accessibility features in FNA games. Covers input remapping, colorblind modes, scalable UI, subtitle sys...",
    "category": "guide",
    "module": "fna-arch",
    "engine": "FNA",
    "tier": "pro",
    "sizeBytes": 19878,
    "sections": [
      "Table of Contents",
      "1 — Why Accessibility Matters for Indie Games",
      "2 — Input Remapping",
      "Architecture: Action Map Pattern",
      "Remap UI Flow",
      "Save and Load Bindings",
      "3 — Colorblind Modes",
      "Approach 1: Palette Swap (Recommended for Pixel Art)",
      "Approach 2: Post-Processing Shader",
      "Principle: Don't Rely on Color Alone",
      "4 — Scalable Text and UI",
      "Applying Scale to Drawing",
      "5 — Subtitle and Caption System",
      "6 — Reduced Motion and Photosensitivity",
      "Applying Motion Settings",
      "Flashing Check",
      "7 — Difficulty and Assist Modes",
      "8 — Audio Accessibility",
      "9 — One-Handed and Switch Controls",
      "10 — Steam Accessibility Tags",
      "11 — Common Pitfalls"
    ]
  },
  {
    "id": "G31",
    "title": "G31 — Networking & Multiplayer",
    "description": "Patterns for adding networking and multiplayer to FNA games. Covers library selection, client-server architecture, pe...",
    "category": "guide",
    "module": "fna-arch",
    "engine": "FNA",
    "tier": "pro",
    "sizeBytes": 21356,
    "sections": [
      "Table of Contents",
      "1 — Networking in FNA: The Landscape",
      "2 — Library Selection",
      "Recommended Approach",
      "NuGet Installation",
      "3 — Architecture: Client-Server vs Peer-to-Peer",
      "Client-Server (Authoritative)",
      "Peer-to-Peer (Lockstep or Rollback)",
      "Recommendation for FNA Games",
      "4 — Integrating with the FNA Game Loop",
      "Network Update Placement",
      "Critical Rule: Never Block Update()",
      "5 — LiteNetLib: UDP Networking",
      "Server Setup",
      "Client Setup",
      "Packet Type Constants",
      "6 — Steamworks Peer-to-Peer",
      "7 — State Synchronization Patterns",
      "Snapshot Interpolation (Client-Server)",
      "Input Forwarding (Peer-to-Peer)",
      "8 — Serialization",
      "LiteNetLib's NetDataWriter/Reader",
      "Delta Compression",
      "9 — Lag Compensation and Prediction",
      "Client-Side Prediction",
      "10 — Common Pitfalls",
      "11 — FNA vs MonoGame: Networking Differences"
    ]
  },
  {
    "id": "G32",
    "title": "G32 — Build Targets & .NET Configuration",
    "description": "FNA provides multiple project files targeting different .NET runtimes. This guide covers which build target to choose...",
    "category": "guide",
    "module": "fna-arch",
    "engine": "FNA",
    "tier": "pro",
    "sizeBytes": 10063,
    "sections": [
      "Table of Contents",
      "1 — FNA's Multi-Target Strategy",
      "2 — Available Project Files",
      "3 — Choosing the Right Target",
      "4 — .NET 8+ (FNA.Core.csproj)",
      "5 — .NET Framework 4.0 (FNA.NetFramework.csproj)",
      "6 — .NET Standard 2.0 (FNA.NetStandard.csproj)",
      "7 — Mono / Makefile Builds",
      "8 — FNA.Settings.props Customization",
      "9 — NativeAOT Configuration",
      "10 — Referencing FNA in Your Game",
      "11 — Common Build Issues",
      "12 — FNA vs MonoGame: Build System Differences"
    ]
  },
  {
    "id": "G33",
    "title": "G33 — AV1 Video Support with dav1dfile",
    "description": "FNA 26.02 introduced experimental AV1 video stream support via dav1dfile, a thin C wrapper around the dav1d AV1 decod...",
    "category": "guide",
    "module": "fna-arch",
    "engine": "FNA",
    "tier": "pro",
    "sizeBytes": 9585,
    "sections": [
      "Table of Contents",
      "1 — Video Playback in FNA",
      "2 — Theora vs AV1: When to Use Which",
      "Use Ogg Theora when:",
      "Use AV1 when:",
      "File size comparison (approximate, 1080p 30fps 60-second clip):",
      "3 — dav1dfile Architecture",
      "4 — Setting Up AV1 Playback",
      "Step 1: Get the dav1dfile native library",
      "Step 2: Prepare your video file",
      "Step 3: Load and play via the standard Video API",
      "5 — Encoding AV1 Video for FNA",
      "Basic encode (good quality, reasonable speed):",
      "High quality (slower encode, better compression):",
      "Using SVT-AV1 (faster encoding):",
      "6 — YUV-to-RGB GPU Conversion",
      "7 — Performance Considerations",
      "8 — Platform Support Status",
      "9 — Common Pitfalls",
      "10 — FNA vs MonoGame: Video Differences"
    ]
  },
  {
    "id": "G34",
    "title": "G34 — Release Lifecycle & Extension Policy",
    "description": "FNA follows a monthly release cadence with strict versioning, a well-defined SDL migration timeline, and a formal ext...",
    "category": "guide",
    "module": "fna-arch",
    "engine": "FNA",
    "tier": "pro",
    "sizeBytes": 9596,
    "sections": [
      "Table of Contents",
      "1 — Release Cadence",
      "2 — Version Numbering",
      "3 — SDL2 to SDL3 Transition Timeline",
      "Choosing SDL2 vs SDL3",
      "4 — Tracking Native Library Versions",
      "5 — The Extension Model (Historical)",
      "6 — Extension Policy Change (26.01)",
      "Why the change happened",
      "Impact on your game",
      "7 — Updating FNA in Your Project",
      "Update checklist:",
      "8 — Breaking Changes by Release",
      "9 — Staying on Older Versions",
      "10 — FNA vs MonoGame: Release Philosophy"
    ]
  },
  {
    "id": "gamemaker-arch/E1",
    "title": "E1 — GameMaker Architecture Overview",
    "description": "",
    "category": "architecture",
    "module": "gamemaker-arch",
    "engine": "GameMaker",
    "tier": "pro",
    "sizeBytes": 8768,
    "sections": [
      "Core Philosophy: Objects, Events, and Rooms",
      "The Game Loop: Event Execution Order",
      "Key Rules",
      "Objects and Instances",
      "Object Definition",
      "Instance Variables vs Global",
      "Object Parenting",
      "Rooms and Layers",
      "Room Structure",
      "Room Transitions",
      "GML Language Essentials",
      "Type System",
      "Modern GML Features (2.3+)",
      "Feather (Static Analysis)",
      "Surfaces, Shaders, and Particles",
      "Surfaces",
      "Particle System",
      "Platform Export Pipeline",
      "When to Choose GameMaker"
    ]
  },
  {
    "id": "gamemaker-arch-rules",
    "title": "GameMaker — AI Rules",
    "description": "Engine-specific rules for projects using GameMaker (2024+). These supplement the engine-agnostic rules in docs/core/a...",
    "category": "reference",
    "module": "gamemaker-arch",
    "engine": "GameMaker",
    "tier": "pro",
    "sizeBytes": 4096,
    "sections": [
      "Architecture Context",
      "Tech Stack",
      "Project Structure Conventions",
      "Code Generation Rules",
      "Objects: One Event File Per Event",
      "Step Event: Game Logic Only",
      "Draw Event: Rendering Only",
      "Functions: Use script_ for Reusable Logic",
      "Structs and Constructors (GML 2.3+)",
      "Rooms: Use Layers Properly",
      "Alarms: Prefer Over Manual Timers",
      "Common Pitfalls"
    ]
  },
  {
    "id": "gamemaker-arch/G10",
    "title": "G10 — Collision Detection and Physics in GameMaker",
    "description": "",
    "category": "guide",
    "module": "gamemaker-arch",
    "engine": "GameMaker",
    "tier": "pro",
    "sizeBytes": 11288,
    "sections": [
      "Two Collision Systems",
      "Traditional Collision System",
      "Collision Masks",
      "Core Collision Functions",
      "The Collision Event vs. Manual Checks",
      "Pixel-Perfect Movement with Collision",
      "Box2D Physics System",
      "Enabling Physics on an Object",
      "Fixtures (Collision Shapes)",
      "Applying Forces and Impulses",
      "Physics Collision Events",
      "Joints",
      "Common Patterns",
      "Platformer Ground Check",
      "One-Way Platforms (Traditional)",
      "Collecting Items Without Blocking",
      "Performance Tips",
      "Quick Reference"
    ]
  },
  {
    "id": "gamemaker-arch/G11",
    "title": "Save/Load System & Data Persistence",
    "description": "GameMaker offers multiple approaches for persisting game data — from simple inifile key-value storage to full JSON se...",
    "category": "guide",
    "module": "gamemaker-arch",
    "engine": "GameMaker",
    "tier": "pro",
    "sizeBytes": 10638,
    "sections": [
      "Quick Reference: Which Method to Use",
      "Tier 1: INI Files (Settings & Preferences)",
      "Tier 2: JSON + Buffers (Recommended for Game State)",
      "Saving",
      "Loading",
      "Why Buffers Instead of `file_text_*`?",
      "Save File Versioning",
      "Handling Complex Data",
      "Nested Structs & Arrays",
      "Things That Do NOT Serialize",
      "Serializing Instance State",
      "Checking and Deleting Saves",
      "Legacy: `json_encode` / `json_decode` (Pre-2.3)",
      "File Locations",
      "Common Pitfalls"
    ]
  },
  {
    "id": "gamemaker-arch/G12",
    "title": "Extensions and Marketplace",
    "description": "Extensions let you package reusable GML functions, constants, and native-platform libraries into portable assets. The...",
    "category": "guide",
    "module": "gamemaker-arch",
    "engine": "GameMaker",
    "tier": "pro",
    "sizeBytes": 9745,
    "sections": [
      "Extension Types",
      "Creating a GML Extension",
      "Step 1: Create the Extension Asset",
      "Step 2: Add a GML File",
      "Step 3: Define Functions in the Extension Editor",
      "Step 4: Define Macros (Constants)",
      "Extension File Structure",
      "Placeholder vs. Proxy Files",
      "Native Extensions (DLL Example)",
      "1. Write Your DLL (C)",
      "2. Register in Extension Editor",
      "3. Platform Considerations",
      "Extension Best Practices",
      "Naming Conventions",
      "Initialization and Cleanup",
      "Documentation",
      "Publishing to the Marketplace",
      "Package Format",
      "Creating a Package",
      "Upload Process",
      "Marketplace Guidelines",
      "Common Patterns",
      "Wrapping Native APIs for Cross-Platform",
      "Extension Configuration via Macros",
      "Troubleshooting"
    ]
  },
  {
    "id": "gamemaker-arch/G1",
    "title": "G1 — Object Events and State Machines in GameMaker",
    "description": "",
    "category": "guide",
    "module": "gamemaker-arch",
    "engine": "GameMaker",
    "tier": "pro",
    "sizeBytes": 11294,
    "sections": [
      "Object Events: The Complete Picture",
      "Event Reference",
      "The Three Laws of Events",
      "State Machines: Organizing Complex Behavior",
      "Pattern 1: Enum + Switch (Simple and Effective)",
      "Pattern 2: Function-Based States (Scalable)",
      "Pattern 3: Struct-Based State Machine (Advanced)",
      "Shared Logic: Helper Functions",
      "Animation Integration",
      "Common Mistakes"
    ]
  },
  {
    "id": "gamemaker-arch/G2",
    "title": "G2 — Rooms, Layers, and Cameras in GameMaker",
    "description": "",
    "category": "guide",
    "module": "gamemaker-arch",
    "engine": "GameMaker",
    "tier": "pro",
    "sizeBytes": 12535,
    "sections": [
      "Rooms: The Container for Everything",
      "Room Properties",
      "Room Order",
      "Layers",
      "Layer Types",
      "Creating Layers at Runtime",
      "Tile Map Layers",
      "Room Navigation",
      "Changing Rooms",
      "Room Lifecycle",
      "Persistent Rooms and Instances",
      "Cameras and Viewports",
      "Core Concepts",
      "Setting Up Views in the Room Editor",
      "Camera Functions (GML)",
      "Viewport Configuration",
      "Camera Shake",
      "Camera Bounds (Clamping)",
      "Sequences",
      "Sequence Components",
      "Using Sequences in GML",
      "Sequence Events",
      "When to Use Sequences vs. Code",
      "Particle Systems",
      "Particle System Editor (2024+)",
      "GML Particle API",
      "Performance Guidelines",
      "Common Patterns",
      "Room Transition with Fade",
      "Parallax Background Layers",
      "Dynamic Room Creation"
    ]
  },
  {
    "id": "gamemaker-arch/G3",
    "title": "G3 — Particles & Sequences Guide",
    "description": "",
    "category": "guide",
    "module": "gamemaker-arch",
    "engine": "GameMaker",
    "tier": "pro",
    "sizeBytes": 10873,
    "sections": [
      "Particle System Overview",
      "Creating a Particle System in GML",
      "Basic Setup (Create Event)",
      "Cleanup (Clean Up Event)",
      "One-Shot Bursts (Explosions, Hit Effects)",
      "Using the Particle System Editor (Asset-Based)",
      "Using Custom Sprites as Particles",
      "Particle System Positioning",
      "Sequences Overview",
      "Key Concepts",
      "Creating Sequences in the Editor",
      "Broadcast Messages in GML",
      "Controlling Sequences at Runtime",
      "Sequences + Particles Together",
      "Common Patterns",
      "Particle Trail Behind a Moving Object",
      "Death Particles from Destroyed Instance",
      "UI Animation with Sequences",
      "Performance Guidelines"
    ]
  },
  {
    "id": "gamemaker-arch/G4",
    "title": "G4 — Networking and Multiplayer in GameMaker",
    "description": "",
    "category": "guide",
    "module": "gamemaker-arch",
    "engine": "GameMaker",
    "tier": "pro",
    "sizeBytes": 10449,
    "sections": [
      "Networking in GameMaker: Two Paths",
      "Low-Level Networking",
      "Creating a Server",
      "Connecting as a Client",
      "The Async Networking Event",
      "Sending Data with Buffers",
      "Reliable Message Protocol Pattern",
      "Architecture: Message ID Pattern",
      "HTTP Requests",
      "Rollback Multiplayer (GX.games)",
      "Setup",
      "Player Object Requirements",
      "Reading Input",
      "Rollback Constraints (Critical)",
      "Rollback Events",
      "Choosing the Right Approach",
      "Steam Networking",
      "Common Pitfalls"
    ]
  },
  {
    "id": "gamemaker-arch/G5",
    "title": "G5 — Sprite Management and Animation in GameMaker",
    "description": "",
    "category": "guide",
    "module": "gamemaker-arch",
    "engine": "GameMaker",
    "tier": "pro",
    "sizeBytes": 10978,
    "sections": [
      "How GameMaker Handles Sprites",
      "Core Sprite Instance Variables",
      "How image_index Actually Works",
      "Swapping Sprites Correctly",
      "The image_index Reset Problem",
      "Sprite Swap Checklist",
      "Animation State Machines",
      "Simple Enum-Based Animation Controller",
      "Loading Sprites at Runtime",
      "sprite_add",
      "sprite_create_from_surface",
      "Skeletal Animation (Spine)",
      "Setting Up Spine Sprites",
      "Controlling Spine Animations in GML",
      "Spine Caveats",
      "Performance Considerations",
      "Texture Pages",
      "Draw Call Optimization",
      "Animation Speed vs. Frame Count",
      "Quick Reference"
    ]
  },
  {
    "id": "gamemaker-arch/G6",
    "title": "Structs, Constructors & State Machines",
    "description": "Modern GML (2.3+) structs and constructors unlock clean, reusable patterns that were previously awkward or impossible...",
    "category": "guide",
    "module": "gamemaker-arch",
    "engine": "GameMaker",
    "tier": "pro",
    "sizeBytes": 9705,
    "sections": [
      "Structs — Lightweight Data Containers",
      "When to use structs vs. objects",
      "Constructors — Struct Factories",
      "Key rules",
      "Constructor Inheritance",
      "Calling parent methods",
      "The Static Chain",
      "Struct-Based State Machines",
      "State Machine Controller",
      "Defining States as Constructors",
      "Wiring It Up in an Object",
      "Why this pattern wins",
      "Shared helper functions",
      "Performance Tips"
    ]
  },
  {
    "id": "gamemaker-arch/G7",
    "title": "Audio System and Sound Design",
    "description": "GameMaker's audio engine supports simple sound playback, 3D positional audio via emitters and listeners, audio groups...",
    "category": "guide",
    "module": "gamemaker-arch",
    "engine": "GameMaker",
    "tier": "pro",
    "sizeBytes": 9349,
    "sections": [
      "Basic Playback",
      "Playing a Sound",
      "Extended Playback",
      "Stopping and Fading",
      "Audio Groups",
      "Audio Group Gain",
      "3D Positional Audio (Emitters and Listeners)",
      "Setup: Falloff Model",
      "Creating and Positioning Emitters",
      "Updating Emitter Position (Moving Sources)",
      "Listener (The Player's Ears)",
      "Cleanup",
      "Audio Effects (Buses and DSP)",
      "Audio Bus Structure",
      "Applying Effects",
      "Common Effect Types",
      "Dynamic Effects Example: Underwater Muffling",
      "Common Patterns",
      "Music Manager (Singleton Object)",
      "Sound Pooling (Limiting Concurrent Instances)",
      "Common Pitfalls"
    ]
  },
  {
    "id": "gamemaker-arch/G8",
    "title": "Tilemaps, Tile Sets & the Layer System",
    "description": "Tiles are GameMaker's most efficient rendering primitive. They have no events, no collision masks, and no per-instanc...",
    "category": "guide",
    "module": "gamemaker-arch",
    "engine": "GameMaker",
    "tier": "pro",
    "sizeBytes": 9211,
    "sections": [
      "Tile Set Setup",
      "Creating a Tile Set",
      "Tile Set Editors",
      "Auto Tiling",
      "Two Modes",
      "Setting Up Auto Tiles",
      "Design Tips",
      "Animated Tiles",
      "Setup",
      "Constraints",
      "Brush Builder",
      "Room Layers",
      "Layer Types",
      "Organizing Layers",
      "GML Tilemap Functions",
      "Getting the Tile Map ID",
      "Reading Tiles",
      "Writing Tiles",
      "Tile Data Bitfield",
      "Collision with Tilemaps",
      "Performance Best Practices"
    ]
  },
  {
    "id": "gamemaker-arch/G9",
    "title": "Input Handling & Abstraction",
    "description": "GameMaker provides three input families — keyboard, mouse, and gamepad — each with its own set of check, checkpressed...",
    "category": "guide",
    "module": "gamemaker-arch",
    "engine": "GameMaker",
    "tier": "pro",
    "sizeBytes": 13355,
    "sections": [
      "Keyboard Input",
      "Core Functions",
      "Letter Keys",
      "Mouse Input",
      "Core Functions",
      "GUI vs. Room Coordinates",
      "Gamepad Input",
      "Detection via Async System Event",
      "Reading Buttons and Sticks",
      "Standard Button Constants",
      "Building an Input Abstraction Layer",
      "The InputManager Constructor",
      "Wiring It Up",
      "Input Buffering for Platformers",
      "Analog Stick Helpers",
      "Handling Multiple Input Devices",
      "Common Pitfalls",
      "Summary"
    ]
  },
  {
    "id": "gamemaker-arch/R1",
    "title": "R1 — GML Data Structures Reference",
    "description": "",
    "category": "reference",
    "module": "gamemaker-arch",
    "engine": "GameMaker",
    "tier": "pro",
    "sizeBytes": 11828,
    "sections": [
      "Modern GML Data: Structs, Arrays, and When to Use Legacy DS",
      "Arrays",
      "Creating Arrays",
      "Core Array Functions",
      "Functional Array Methods",
      "Structs",
      "Anonymous Structs",
      "Constructor Structs (Classes)",
      "Inheritance",
      "Static Variables and the Static Struct",
      "Struct Utility Functions",
      "JSON Serialization",
      "Legacy Data Structures (When They're Still Useful)",
      "ds_grid Example (Tilemap Operations)",
      "ds_priority Example (A* Open List)",
      "Buffers (Binary Data)",
      "Buffer Types",
      "Quick Decision Guide"
    ]
  },
  {
    "id": "gamemaker-arch/R2",
    "title": "R2 — Surfaces & Shaders Reference",
    "description": "",
    "category": "reference",
    "module": "gamemaker-arch",
    "engine": "GameMaker",
    "tier": "pro",
    "sizeBytes": 11362,
    "sections": [
      "Surfaces: Off-Screen Drawing Targets",
      "Core Surface Functions",
      "Creating and Using a Surface",
      "The Application Surface",
      "Surface Stack Rules",
      "GPU Blend Modes",
      "Shaders",
      "Shader Lifecycle in GML",
      "Key Shader Functions",
      "Passing Textures to Shaders",
      "Writing a Fragment Shader: Grayscale Example",
      "Writing a Fragment Shader: Outline Effect",
      "Combining Surfaces and Shaders: Multi-Pass Post-Processing",
      "Common Pitfalls",
      "Quick Decision Guide"
    ]
  },
  {
    "id": "gamemaker-arch/R3",
    "title": "R3 — Feather Linter & Debugging Tools",
    "description": "",
    "category": "reference",
    "module": "gamemaker-arch",
    "engine": "GameMaker",
    "tier": "pro",
    "sizeBytes": 7631,
    "sections": [
      "Feather: Static Analysis for GML",
      "Enabling Feather",
      "Feather Rule Categories",
      "Controlling Rule Severity",
      "Feather Directives",
      "Strict Type Mode",
      "Hover Information and Find References",
      "The Debugger",
      "Starting a Debug Session",
      "Core Debugger Features",
      "Conditional Breakpoints",
      "The Profiler",
      "Accessing the Profiler",
      "Reading Profiler Output",
      "Common Performance Patterns",
      "Real-Time Instance Inspector",
      "Debug Workflow Cheat Sheet",
      "Related Resources"
    ]
  },
  {
    "id": "gamemaker-arch/R4",
    "title": "R4 — Modern Data Patterns: Structs, Constructors, and Garbage Collection",
    "description": "",
    "category": "reference",
    "module": "gamemaker-arch",
    "engine": "GameMaker",
    "tier": "pro",
    "sizeBytes": 12882,
    "sections": [
      "Why Modern Patterns Matter",
      "Constructors",
      "Key Rules",
      "Constructor Inheritance",
      "Inheritance Rules",
      "Static Variables and the Static Chain",
      "How the Static Chain Works",
      "Inspecting the Static Chain",
      "Replacing Legacy DS Types",
      "ds_map → Struct",
      "ds_list → Array",
      "Dynamic Key Access (ds_map replacement)",
      "When to Keep Legacy DS",
      "Accessor Chaining",
      "Garbage Collection",
      "How It Works",
      "Best Practices",
      "GC and Instances",
      "Monitoring GC",
      "Patterns: Putting It All Together",
      "Factory Pattern with Constructors",
      "Configuration Struct (replacing ds_map + ini_read)",
      "Quick Reference: Legacy → Modern"
    ]
  },
  {
    "id": "gdevelop-arch/E1",
    "title": "E1 — GDevelop Architecture Overview",
    "description": "",
    "category": "architecture",
    "module": "gdevelop-arch",
    "engine": "GDevelop",
    "tier": "pro",
    "sizeBytes": 9212,
    "sections": [
      "Core Philosophy: Events, Objects, and Scenes — No Code Required",
      "The Event System",
      "Event Structure",
      "Event Types",
      "Execution Order",
      "Objects",
      "Built-in Object Types",
      "Object Instances",
      "Object Variables",
      "Behaviors",
      "Built-in Behaviors",
      "Custom Behaviors (Event-Based)",
      "Scenes and Layers",
      "Scene Structure",
      "Layer Stack",
      "Scene Transitions",
      "Extensions",
      "Extension Contents",
      "Community Extension Library",
      "Publishing Extensions",
      "Export Pipeline",
      "When to Choose GDevelop"
    ]
  },
  {
    "id": "gdevelop-arch-rules",
    "title": "GDevelop — AI Rules",
    "description": "Engine-specific rules for projects using GDevelop (5.x / 6.x). These supplement the engine-agnostic rules in docs/cor...",
    "category": "reference",
    "module": "gdevelop-arch",
    "engine": "GDevelop",
    "tier": "pro",
    "sizeBytes": 5985,
    "sections": [
      "Architecture Context",
      "Tech Stack",
      "Project Structure Conventions",
      "Event System Rules",
      "Conditions and Actions — Core Pattern",
      "Use Sub-events for Sequential Logic",
      "Use \"For Each\" for Per-Instance Operations",
      "Prefer Behaviors Over Manual Event Logic",
      "Variables — Scope Hierarchy",
      "Extensions and Custom Functions",
      "Built-in Extension Library",
      "Creating Custom Extensions",
      "Custom Behaviors (Event-Based)",
      "Custom Objects (Prefabs)",
      "Common Pitfalls"
    ]
  },
  {
    "id": "gdevelop-arch/G1",
    "title": "G1 — Events and Behaviors in GDevelop",
    "description": "",
    "category": "guide",
    "module": "gdevelop-arch",
    "engine": "GDevelop",
    "tier": "pro",
    "sizeBytes": 13516,
    "sections": [
      "How Events Work",
      "Event Types",
      "Standard Event",
      "Sub-Events",
      "For Each Event",
      "Repeat Event",
      "While Event",
      "Link Event",
      "Conditions Reference",
      "Comparison Conditions",
      "Collision / Overlap Conditions",
      "Input Conditions",
      "Trigger Conditions (Run Once)",
      "Actions Reference",
      "Object Actions",
      "Variable Actions",
      "Scene Actions",
      "Behaviors",
      "Built-in Behaviors",
      "Using Behaviors in Events",
      "Combining Multiple Behaviors",
      "Custom Behaviors (Events-Based)",
      "Creating a Custom Behavior",
      "Lifecycle Functions",
      "Example: Health System Behavior",
      "Scene Variables vs Object Variables vs Behavior Properties",
      "Common Patterns",
      "Pattern: One-Shot Events (Trigger Once)",
      "Pattern: Cooldown Timer",
      "Pattern: Spawn Wave",
      "Pattern: State Machine via Variables",
      "Performance Tips"
    ]
  },
  {
    "id": "gdevelop-arch/G2",
    "title": "G2 — Custom Functions & Extensions",
    "description": "",
    "category": "guide",
    "module": "gdevelop-arch",
    "engine": "GDevelop",
    "tier": "pro",
    "sizeBytes": 11047,
    "sections": [
      "Why Custom Functions?",
      "Creating a Function",
      "Step-by-Step",
      "Function Types at a Glance",
      "Parameters",
      "Using Parameters in Expressions",
      "Example: A Custom \"Apply Damage\" Action",
      "Setting Up the Function",
      "Function Events",
      "Using It in Your Game",
      "Example: A Custom Condition",
      "\"Is In Range\" Condition",
      "Function Events",
      "Example: A Custom Expression",
      "\"Calculate DPS\" Expression",
      "Function Events",
      "Extracting Events into Functions",
      "Building Extensions",
      "Sharing Extensions",
      "JavaScript in Functions",
      "Common Pitfalls"
    ]
  },
  {
    "id": "gdevelop-arch/G3",
    "title": "G3 — Publishing & Export Pipeline",
    "description": "",
    "category": "guide",
    "module": "gdevelop-arch",
    "engine": "GDevelop",
    "tier": "pro",
    "sizeBytes": 8546,
    "sections": [
      "Export Overview",
      "Supported Platforms",
      "One-Click Export (Recommended for Most Users)",
      "How to Export",
      "Web Export to gd.games",
      "Manual Export (For Advanced Control)",
      "Web (HTML5 Folder)",
      "Android / iOS (Cordova)",
      "Desktop (Electron)",
      "Platform-Specific Optimization",
      "Web Performance",
      "Mobile Optimization",
      "Desktop Optimization",
      "Monetization Pathways",
      "Mobile Ads (AdMob)",
      "Web Game Platforms",
      "Paid Distribution",
      "Export Checklist",
      "Related Resources"
    ]
  },
  {
    "id": "gdevelop-arch/G4",
    "title": "Physics Engine and Collision Patterns",
    "description": "GDevelop includes a built-in 2D physics engine (powered by Box2D) and an experimental 3D physics engine. The 2D Physi...",
    "category": "guide",
    "module": "gdevelop-arch",
    "engine": "GDevelop",
    "tier": "pro",
    "sizeBytes": 10341,
    "sections": [
      "Adding the Physics Behavior",
      "Body Types",
      "Physics Properties",
      "Shape",
      "Material Properties",
      "Damping",
      "Applying Movement",
      "Forces vs. Impulses",
      "Movement Examples",
      "Collision Detection",
      "Physics Collision Events",
      "Collision Layers and Masks",
      "Sensors (Triggers)",
      "Joints",
      "Distance Joint",
      "Revolute Joint (Hinge)",
      "Weld Joint",
      "Prismatic Joint (Slider)",
      "Gear Joint",
      "Rope Joint",
      "Mixing Physics and Standard Events",
      "Do NOT Mix",
      "Safe to Mix",
      "Converting Between Worlds",
      "World Settings",
      "Performance Tips",
      "Common Pitfalls"
    ]
  },
  {
    "id": "gdevelop-arch/G5",
    "title": "UI and HUD Patterns",
    "description": "GDevelop has no dedicated UI framework — instead, you compose HUDs and menus from general-purpose objects (Text, Bitm...",
    "category": "guide",
    "module": "gdevelop-arch",
    "engine": "GDevelop",
    "tier": "pro",
    "sizeBytes": 11677,
    "sections": [
      "The UI Layer",
      "Setup",
      "Keeping Objects Pinned to the Screen",
      "Anchor Behavior",
      "Manual Positioning (Alternative)",
      "Text Display Objects",
      "Text Object — Displaying Variables",
      "Bitmap Text — Pixel-Art Scores",
      "Health Bars and Resource Bars",
      "Resource Bar Object",
      "Shape Painter — Custom Health Bar",
      "Panel Sprite Health Frame",
      "Score and Combo Counters",
      "Simple Score Display",
      "Animated Score (Counting Up)",
      "Combo Pop-Up",
      "Interactive Buttons",
      "Button Object",
      "Custom Sprite Buttons",
      "Dialogue and Text Boxes",
      "Basic Dialogue Box",
      "Typewriter Effect",
      "Minimap with Shape Painter",
      "Responsive Layout Tips",
      "Performance Considerations",
      "Common Pitfalls"
    ]
  },
  {
    "id": "gdevelop-arch/G6",
    "title": "Animation and Tween System",
    "description": "GDevelop provides two main ways to animate objects: sprite animations (frame-by-frame) and the Tween behavior (smooth...",
    "category": "guide",
    "module": "gdevelop-arch",
    "engine": "GDevelop",
    "tier": "pro",
    "sizeBytes": 9453,
    "sections": [
      "Sprite Animations",
      "Key Concepts",
      "Common Animation Actions",
      "Common Animation Conditions",
      "Animation State Machine Pattern",
      "The Tween Behavior",
      "Adding the Tween Behavior",
      "What You Can Tween",
      "Easing Functions",
      "Tween Conditions",
      "Chaining Tweens",
      "Destroying Tween Objects",
      "Common Patterns",
      "Juicy Button (Scale Bounce on Hover)",
      "Screen-Shake via Tween",
      "Fade-In a Scene",
      "Animating a Health Bar",
      "Performance Notes",
      "Quick Reference"
    ]
  },
  {
    "id": "gdevelop-arch/G7",
    "title": "G7 — Multiplayer and Networking in GDevelop",
    "description": "GDevelop provides two distinct networking paths: the built-in Multiplayer feature (managed servers, lobbies, automati...",
    "category": "guide",
    "module": "gdevelop-arch",
    "engine": "GDevelop",
    "tier": "pro",
    "sizeBytes": 10545,
    "sections": [
      "Built-in Multiplayer (Recommended Path)",
      "How It Works",
      "Setting Up Multiplayer",
      "Object Ownership",
      "What Gets Synchronized Automatically",
      "Key Conditions and Actions",
      "Multiplayer Debugging",
      "P2P Extension (Low-Level Networking)",
      "P2P Connection Flow",
      "Core P2P Conditions",
      "Core P2P Actions",
      "Core P2P Expressions",
      "P2P Example — Sync Player Position",
      "Choosing Between Multiplayer and P2P",
      "Common Pitfalls",
      "Community Extensions",
      "Next Steps"
    ]
  },
  {
    "id": "gdevelop-arch/G8",
    "title": "G8 — Audio System and Sound Management in GDevelop",
    "description": "GDevelop separates audio into two categories: sounds (short effects like jumps, explosions, UI clicks) and music (lon...",
    "category": "guide",
    "module": "gdevelop-arch",
    "engine": "GDevelop",
    "tier": "pro",
    "sizeBytes": 10504,
    "sections": [
      "Sounds vs. Music",
      "Supported Formats",
      "Basic Playback",
      "Playing a Sound",
      "Playing Music",
      "Volume",
      "Channel System",
      "How Channels Work",
      "Recommended Channel Layout",
      "Channel Actions",
      "Channel Conditions",
      "Channel Expressions",
      "Volume Fading",
      "Common Fade Patterns",
      "Spatial Audio Patterns",
      "Distance-Based Volume",
      "Stereo Panning (Left/Right)",
      "Built-In Sound Effect Creator (jfxr)",
      "Accessing jfxr",
      "jfxr Preset Categories",
      "Audio Context Extension",
      "What It Enables",
      "When to Use It",
      "Performance Tips",
      "Common Pitfalls",
      "Next Steps"
    ]
  },
  {
    "id": "gdevelop-arch/G9",
    "title": "Input Handling & Controls",
    "description": "GDevelop provides built-in conditions and actions for keyboard, mouse/touch, and gamepad input — all accessible throu...",
    "category": "guide",
    "module": "gdevelop-arch",
    "engine": "GDevelop",
    "tier": "pro",
    "sizeBytes": 9308,
    "sections": [
      "Keyboard Input",
      "Key Conditions",
      "Common Key Names",
      "Typical Movement Pattern",
      "Mouse & Touch Input",
      "Mouse/Touch Conditions",
      "Cursor Position Expressions",
      "Click-to-Move Example",
      "Multitouch",
      "Touch Conditions & Expressions",
      "Multitouch Pattern",
      "Multitouch Joystick Object",
      "Disabling Touch-Mouse Mirroring",
      "Gamepad Input",
      "Gamepad Conditions",
      "Gamepad Expressions",
      "Button Names",
      "Rumble/Vibration",
      "Cross-Platform Input Pattern",
      "Step 1: Define Action Variables",
      "Step 2: Input Reading Events (one group per device)",
      "Step 3: Gameplay Events Read Variables Only",
      "Step 4: Reset at End of Frame",
      "Input and Behaviors",
      "Common Pitfalls"
    ]
  },
  {
    "id": "gdevelop-arch/R1",
    "title": "R1 — Extensions & Custom Behaviors Reference",
    "description": "",
    "category": "reference",
    "module": "gdevelop-arch",
    "engine": "GDevelop",
    "tier": "pro",
    "sizeBytes": 10290,
    "sections": [
      "Extensions: GDevelop's Module System",
      "Creating an Extension",
      "Custom Behaviors (Events-Based)",
      "Behavior Structure",
      "Lifecycle Functions",
      "Creating a Behavior: Step by Step",
      "Behavior Properties vs. Variables",
      "Built-In Behaviors Worth Knowing",
      "Community Extension Behaviors (Highlights)",
      "Extension Best Practices",
      "Naming",
      "Architecture",
      "Sharing Extensions",
      "Extension Functions (Custom Actions/Conditions)",
      "Example: A \"MathUtils\" Extension",
      "Quick Decision Guide"
    ]
  },
  {
    "id": "gdevelop-arch/R2",
    "title": "R2 — Variables & Data Management Reference",
    "description": "",
    "category": "reference",
    "module": "gdevelop-arch",
    "engine": "GDevelop",
    "tier": "pro",
    "sizeBytes": 8062,
    "sections": [
      "Variable Scopes",
      "Scope Priority",
      "Primitive Variable Types",
      "Number",
      "Text (String)",
      "Boolean",
      "Collection Types",
      "Structure Variables",
      "Array Variables",
      "Working with Variables in Events",
      "Iterating Over Collections",
      "Dynamic Variable Access",
      "JSON Integration",
      "Variable Declaration Best Practices",
      "Declare Variables in the Editor",
      "Naming Conventions",
      "Avoiding Common Pitfalls",
      "Persistence & Storage"
    ]
  },
  {
    "id": "godot-arch/E1",
    "title": "E1 — Architecture Overview",
    "description": "",
    "category": "architecture",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 15974,
    "sections": [
      "Core Philosophy: Nodes, Scenes, and Signals",
      "The Node Tree: How Godot Thinks",
      "Why the Tree Matters",
      "Key Insight for Godot Developers",
      "Scenes: Composition Over Inheritance",
      "One Scene Per Logical Entity",
      "Instancing at Runtime",
      "Scene Inheritance vs Scene Composition",
      "Signals: The Communication Backbone",
      "Defining and Emitting",
      "Connecting Signals",
      "When Signals Aren't Enough: The Signal Bus",
      "Autoloads: Global Singletons",
      "Recommended Autoloads",
      "Anti-pattern: Autoload Overload",
      "Custom Resources: Data-Driven Design",
      "Where Resources Shine",
      "Referencing Resources",
      "The State Machine Pattern",
      "Godot 2D vs 3D: Not the Same Engine",
      "Architecture Comparison: Godot vs MonoGame + Arch ECS",
      "When to Use Godot",
      "Godot Excels At",
      "Think Twice Before Using Godot For",
      "Honest Assessment",
      "Next Steps"
    ]
  },
  {
    "id": "godot-arch/E2",
    "title": "E2 — GDScript vs C#: Language Choice Deep-Dive",
    "description": "",
    "category": "architecture",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 34006,
    "sections": [
      "Table of Contents",
      "1. Overview",
      "The Short Answer",
      "Community Adoption (2025–2026)",
      "2. GDScript Fundamentals",
      "Key Characteristics",
      "Modern Typed GDScript (4.4+)",
      "Movement tuning — editable in the Inspector.",
      "Jump tuning.",
      "Emitted when the player takes damage.",
      "Emitted when health reaches zero.",
      "GDScript Strengths",
      "GDScript Limitations",
      "3. C# in Godot Fundamentals",
      "Key Characteristics",
      "C# Equivalent of the Player Above",
      "C# Strengths",
      "C# Limitations",
      "C# Gotcha: Velocity Is a Struct",
      "4. Syntax Comparison",
      "Variable Declaration",
      "Signals",
      "Node References",
      "Coroutines",
      "Enums",
      "Dictionary / Resource Access",
      "5. Type System Deep-Dive",
      "GDScript Typing Levels",
      "Typed Arrays and Dictionaries (4.4+)",
      "C# Type Advantages",
      "GDScript Workarounds for No Interfaces",
      "6. Performance Characteristics",
      "Benchmarks (Approximate — Godot 4.4, 2026)",
      "What the Benchmarks Mean",
      "When GDScript Performance Is Sufficient",
      "When C# Performance Matters",
      "The Performance Ladder",
      "7. Tooling & Editor Integration",
      "GDScript Tooling",
      "C# Tooling",
      "Editor Recommendation by Language",
      "8. Platform Export Compatibility",
      "Web Export Is GDScript-Only",
      "Console Considerations",
      "9. Ecosystem & Libraries",
      "GDScript Ecosystem",
      "C# Ecosystem",
      "NuGet Compatibility Warning",
      "Addon Compatibility",
      "10. Interop: Mixing Languages",
      "Calling C# from GDScript",
      "Calling GDScript from C#",
      "Mixed-Language Architecture Pattern",
      "Interop Limitations",
      "When Mixing Makes Sense",
      "11. Migration Patterns",
      "GDScript → C# Migration",
      "Unity C# → Godot C# Migration",
      "Unity C# → Godot GDScript Migration",
      "12. Decision Framework",
      "Project-Based Decision Tree",
      "Risk Assessment",
      "13. Common Mistakes by Language Background",
      "Python Developers → GDScript",
      "Unity C# Developers → Godot C#",
      "Unity C# Developers → GDScript",
      "14. Team & Project Scaling",
      "Solo / Small Team (1–3 developers)",
      "Medium Team (4–8 developers)",
      "Large Team (8+ developers)",
      "Code Review Differences",
      "15. Future Outlook",
      "GDScript Roadmap (4.5–5.0)",
      "C# Roadmap (4.5–5.0)",
      "Industry Trends",
      "16. Quick Reference",
      "When to Choose GDScript",
      "When to Choose C#",
      "When to Mix Both",
      "The One Rule",
      "Related Guides"
    ]
  },
  {
    "id": "godot-rules",
    "title": "Godot 4.x — AI Code Generation Rules",
    "description": "Engine-specific rules for Godot 4.4+ projects using GDScript. These supplement the engine-agnostic rules in docs/core...",
    "category": "reference",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 14776,
    "sections": [
      "⚠️ Godot 3 vs 4 — Critical Differences",
      "Renames That Break Everything",
      "Syntax Patterns That Changed",
      "Architecture Rules",
      "Node Tree Structure",
      "Scene Composition",
      "Signals Over Direct References",
      "Autoloads (Singletons)",
      "GDScript Code Standards",
      "Type Hints (Mandatory)",
      "Export Variables",
      "Naming Conventions",
      "Signal Callback Naming",
      "Movement Patterns",
      "Platformer (CharacterBody2D)",
      "Top-Down (CharacterBody2D)",
      "Custom Resources",
      "Common Patterns",
      "Timer Usage",
      "Tweens",
      "Groups",
      "Object Pooling",
      "File Boundaries",
      "Build and Run Commands",
      "Performance Rules",
      "Integration with Core Rules",
      "Related Guides"
    ]
  },
  {
    "id": "G100",
    "title": "G100 — Advanced Editor Plugin Development",
    "description": "Godot's editor is built on the same UI framework as your game, which means you can extend it with custom docks, inspe...",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 20243,
    "sections": [
      "Table of Contents",
      "1. Plugin Architecture Overview",
      "What an EditorPlugin Can Do",
      "Key Rule",
      "2. Setting Up a Plugin Project",
      "Directory Structure",
      "plugin.cfg",
      "Minimal Plugin — GDScript",
      "Minimal Plugin — C#",
      "3. Custom Editor Docks",
      "GDScript — Dock from Code",
      "GDScript — Dock from Scene",
      "C# — Custom Dock",
      "4. Inspector Plugins",
      "Architecture",
      "GDScript — Custom Property Editor",
      "Registration in EditorPlugin",
      "C# — Inspector Plugin",
      "5. Bottom Panel Plugins",
      "GDScript",
      "C#",
      "When to Use Bottom Panels vs. Docks",
      "6. Main Screen Plugins",
      "GDScript",
      "C#",
      "7. Toolbar Buttons & Menu Items",
      "Adding a Tool Menu Item",
      "Adding a Toolbar Button (via _build)",
      "8. Context Menu Extensions",
      "GDScript (4.4+)",
      "9. EditorSettings & Persistent State",
      "Using ConfigFile",
      "Using EditorSettings (User-Global)",
      "10. Undo/Redo Integration",
      "GDScript",
      "C#",
      "11. Packaging & Distribution",
      "As an addon (manual install)",
      "Via the Godot Asset Library",
      "Testing Your Plugin",
      "12. Common Pitfalls & Best Practices",
      "Memory Leaks — The #1 Problem",
      "Null Checks on Deactivation",
      "@tool is Mandatory",
      "Avoid Blocking the Editor",
      "Editor Theme Colors",
      "Quick Reference"
    ]
  },
  {
    "id": "G101",
    "title": "G101 — Web-Compatible Multiplayer: WebRTC & WebSocket",
    "description": "Godot's default ENetMultiplayerPeer uses raw UDP sockets, which browsers cannot create. If your game targets web expo...",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 23057,
    "sections": [
      "Table of Contents",
      "1. Why Web Multiplayer Needs Different Transport",
      "2. WebSocket vs. WebRTC — When to Use Which",
      "Choose WebSocket When:",
      "Choose WebRTC When:",
      "Choose Hybrid When:",
      "3. WebSocket Multiplayer",
      "Server — GDScript",
      "Client — GDScript",
      "Server — C#",
      "Client — C#",
      "4. WebRTC Multiplayer",
      "Core Flow",
      "WebRTC Peer Setup — GDScript",
      "WebRTC Peer Setup — C#",
      "5. Building a Signaling Server",
      "Node.js WebSocket Signaling Server",
      "GDScript Signaling Server (for prototyping)",
      "6. Hybrid Architecture: Desktop + Web",
      "Bridge Server Pattern",
      "7. HTTPS and WSS for Production",
      "Options",
      "TURN Servers for WebRTC",
      "8. Lobby and Matchmaking Patterns",
      "Simple WebSocket Lobby",
      "9. Performance Considerations",
      "WebSocket Limitations",
      "WebRTC Channel Configuration",
      "Bandwidth Tips",
      "10. Debugging Web Multiplayer",
      "Browser Developer Tools",
      "Godot-Side Debugging",
      "Common Issues",
      "11. Deployment Checklist"
    ]
  },
  {
    "id": "G102",
    "title": "G102 — Skeleton Modifiers & Procedural Character Animation",
    "description": "Godot 4.4 introduced the SkeletonModifier3D framework — a unified pipeline for procedurally modifying bone transforms...",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 21958,
    "sections": [
      "Table of Contents",
      "1. The SkeletonModifier3D Pipeline",
      "Key Properties (All Modifiers)",
      "Adding Modifiers in the Scene Tree",
      "2. LookAtModifier3D — Procedural Aim and Head Tracking",
      "Basic Setup — GDScript",
      "Basic Setup — C#",
      "Multi-Bone Look-At Chain (Head + Spine)",
      "Important: Parent-Before-Child Ordering",
      "3. SpringBoneSimulator3D — Physics-Driven Secondary Motion",
      "How It Works",
      "Setup — GDScript",
      "Setup — C#",
      "Configuration Properties Per Bone Set",
      "Tuning Tips",
      "Collision Avoidance",
      "4. RetargetModifier3D — Runtime Animation Retargeting",
      "How It Works",
      "Setup — GDScript",
      "Setup — C#",
      "Custom SkeletonProfile for Non-Humanoid Rigs",
      "5. Stacking Modifiers: Processing Order",
      "Recommended Order",
      "Why Order Matters",
      "Runtime Reordering",
      "6. Custom SkeletonModifier3D in GDScript",
      "Bone name for the chest/spine bone that should breathe",
      "Breathing rate in cycles per second",
      "Scale of the breathing motion",
      "Hit Reaction Modifier",
      "7. Custom SkeletonModifier3D in C#",
      "8. Practical Recipes",
      "Recipe: Weapon Sway",
      "Recipe: Blend Modifiers During State Transitions",
      "9. Performance and Optimization",
      "Cost Breakdown",
      "Optimization Strategies",
      "10. Migration from Legacy IK",
      "Migration Steps",
      "11. Troubleshooting"
    ]
  },
  {
    "id": "G103",
    "title": "G103 — Console Porting with W4 Consoles",
    "description": "Godot Engine doesn't ship official console export templates because Nintendo, Sony, and Microsoft require NDA-protect...",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 19642,
    "sections": [
      "Table of Contents",
      "1. Why Console Export Needs Middleware",
      "2. W4 Consoles Overview",
      "What You Get",
      "Pricing (as of 2026)",
      "Supported Godot Versions",
      "3. Requirements and Developer Registration",
      "Nintendo",
      "Sony (PlayStation Partners)",
      "Microsoft (ID@Xbox)",
      "W4 Games",
      "4. Supported Godot Versions and Features",
      "Rendering",
      "GDExtension",
      "C# (Mono/.NET)",
      "5. Project Setup for Console Targets",
      "Renderer Selection",
      "Export Presets",
      "Abstraction Layer for Platform Code",
      "6. Platform-Specific Considerations: Nintendo Switch",
      "Hardware Constraints",
      "Key Guidelines",
      "Docked vs. Handheld",
      "7. Platform-Specific Considerations: PlayStation 5",
      "Hardware Headroom",
      "DualSense Haptics (GDScript)",
      "8. Platform-Specific Considerations: Xbox Series X|S",
      "Key Differences",
      "Scaling Between X and S",
      "9. Console Performance Budgets",
      "General Console Optimization",
      "10. Input Handling for Controllers",
      "Console Button Label Conventions",
      "11. Platform Services: Achievements, Saves, and Presence",
      "Save Data",
      "12. Certification and Submission Checklist",
      "Platform-Specific Cert Requirements",
      "13. Alternative Console Porting Approaches",
      "14. Common Mistakes",
      "Starting console work too late",
      "Ignoring Switch constraints during development",
      "Using unsupported GDExtension libraries",
      "Hardcoding filesystem paths",
      "Skipping platform-specific input icons",
      "Not budgeting for certification"
    ]
  },
  {
    "id": "G104",
    "title": "G104 — Large Project Organization: UIDs, Dependencies & Team Workflows",
    "description": "Small Godot projects work fine with loose folder conventions — but once a project grows past ~100 scenes, multiple co...",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 17861,
    "sections": [
      "Table of Contents",
      "1. When Organization Starts Mattering",
      "2. The UID System — Path-Agnostic Resource References",
      "How UIDs Work",
      "What Has UIDs (Since 4.4)",
      "Referencing by UID in Code",
      "When to Use UIDs vs. Paths",
      "3. .uid Files and Version Control",
      "Critical Rule: Commit .uid Files",
      "Merge Conflicts in .uid Files",
      "4. Upgrading Existing Projects to Universal UIDs",
      "5. Folder Architecture Patterns",
      "Pattern A: Feature-Based (Recommended for Most Projects)",
      "Pattern B: Type-Based (Traditional)",
      "Pattern C: Hybrid (Large Teams)",
      "6. Resource Dependencies and Load Order",
      "Visualizing Dependencies",
      "Circular Dependency Prevention",
      "Preload vs. Load",
      "7. Team Workflows and Merge Conflict Prevention",
      "The .tscn Merge Problem",
      "8. Scene Ownership and Locking",
      "Naming Convention for Ownership",
      "Automated Conflict Detection",
      "9. Asset Import Pipeline for Teams",
      ".import Files Must Be Committed",
      "Standardize Import Presets",
      "Large Binary Assets",
      "10. Autoload Management at Scale",
      "The Autoload Sprawl Problem",
      "Solution: Layered Autoloads",
      "Explicit Initialization",
      "11. Refactoring Safely",
      "Moving Files (4.4+ with UIDs)",
      "Renaming Classes",
      "Deleting Unused Resources",
      "12. Common Mistakes",
      "Not committing .uid files",
      "Moving files outside the editor",
      "Monolithic scenes",
      "Circular autoload dependencies",
      "Using `res://` paths in external data files",
      "Ignoring .import files in version control"
    ]
  },
  {
    "id": "G105",
    "title": "G105 — Steam Networking for Multiplayer",
    "description": "Most indie multiplayer games ship on Steam, and Steam provides a production-grade networking layer — Steam Networking...",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 22336,
    "sections": [
      "Table of Contents",
      "1. Why Steam Networking Instead of Raw ENet",
      "2. Architecture Overview",
      "3. Installing GodotSteam",
      "Method A: Asset Library (Simplest)",
      "Method B: GitHub Release",
      "Steam Multiplayer Peer (Companion Extension)",
      "Verify Installation",
      "4. Steam Multiplayer Peer Setup",
      "Creating a Host",
      "Joining a Host",
      "C# Equivalent",
      "5. Lobby Creation and Discovery",
      "Creating a Lobby",
      "Searching for Lobbies",
      "C# Lobby Creation",
      "6. Joining a Lobby and Starting the Session",
      "Joining via Lobby ID",
      "Joining via Steam Friend Invite",
      "Starting the Game",
      "7. Using Godot's High-Level Multiplayer API",
      "RPCs",
      "MultiplayerSynchronizer",
      "MultiplayerSpawner",
      "8. P2P Connection Flow",
      "The Steam Callback Loop",
      "9. Handling Disconnections and Reconnection",
      "Detecting Disconnection",
      "Host Migration (Advanced)",
      "10. Steam Relay and NAT Traversal",
      "Checking Connection Quality",
      "Relay Server Regions",
      "11. Voice Chat via Steam",
      "12. Testing Without Multiple Steam Accounts",
      "Steam's \"Spacewar\" App ID",
      "Testing with Multiple Instances",
      "Offline Testing Fallback",
      "13. Production Checklist",
      "14. Common Mistakes",
      "Forgetting `run_callbacks()`",
      "Using the wrong GodotSteam version",
      "Not closing lobbies on game start",
      "Hardcoding peer ID 1 as host",
      "Skipping the ENet fallback",
      "Not testing relay connections"
    ]
  },
  {
    "id": "G106",
    "title": "G106 — Physics Interpolation & Fixed Timestep Patterns",
    "description": "Godot's physics engine runs at a fixed tick rate (default 60 Hz) while rendering runs as fast as possible. Without in...",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 16713,
    "sections": [
      "Table of Contents",
      "1. Why Physics Interpolation Matters",
      "2. Enabling Physics Interpolation",
      "Project Settings",
      "GDScript — Per-Node Control",
      "C# — Per-Node Control",
      "Per-Node Modes",
      "3. How It Works Under the Hood",
      "4. Structuring Game Logic — _physics_process vs _process",
      "GDScript — Correct Pattern",
      "C# — Correct Pattern",
      "What Belongs in _process()",
      "5. Teleportation and Spawning",
      "GDScript — Teleportation",
      "GDScript — Spawning",
      "C# — Teleportation",
      "When to Call reset_physics_interpolation()",
      "6. Camera Interpolation Strategies",
      "Approach 1: Camera as Child of Interpolated Body (Simplest)",
      "Approach 2: Independent Camera with Manual Follow",
      "Approach 3: Camera with Interpolation Disabled",
      "7. AnimationPlayer and Interpolation Conflicts",
      "The Problem",
      "Solutions",
      "8. Jolt Physics Integration (4.6)",
      "Verify Your Physics Engine",
      "C#",
      "Jolt-Specific Considerations",
      "9. Testing at Low Tick Rates",
      "GDScript — Debug Toggle",
      "What to Look For at 10 Hz",
      "10. Common Patterns",
      "Pattern: Interpolation-Safe Object Pool",
      "Pattern: Input Buffering for Responsive Controls",
      "Pattern: Fixed-Timestep with Variable Rendering (Manual)",
      "11. Common Mistakes"
    ]
  },
  {
    "id": "G107",
    "title": "G107 — 3D Camera Systems & Cinematic Rigs",
    "description": "G6 covers Camera2D in depth. This guide covers Camera3D — the node that defines how your 3D world is projected onto t...",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 21289,
    "sections": [
      "Table of Contents",
      "1. Camera3D Fundamentals",
      "Key Properties",
      "Scene Tree Conventions",
      "Making a Camera Active",
      "2. First-Person Camera",
      "GDScript",
      "C#",
      "Why _unhandled_input for Mouse Look",
      "3. Third-Person Camera with SpringArm3D",
      "Scene Tree",
      "GDScript",
      "C#",
      "SpringArm3D Properties",
      "4. Orbit Camera",
      "GDScript",
      "C#",
      "5. Camera Collision and Clipping",
      "Raycast-Based Collision",
      "C#",
      "6. Smooth Camera Transitions",
      "Tween-Based Transition",
      "Attach to an autoload or camera manager node.",
      "Simple Crossfade with Environment",
      "7. Screen Shake in 3D",
      "GDScript — Perlin-Based Shake",
      "C#",
      "8. Cinematic Camera Rail",
      "GDScript",
      "Attach this to a PathFollow3D on a Path3D.",
      "The Camera3D is a child of this node.",
      "Scene Tree",
      "9. Split-Screen Multiplayer",
      "Scene Tree",
      "GDScript Setup",
      "Performance Tips",
      "10. Field of View Effects",
      "GDScript",
      "Call from damage system",
      "11. Common Mistakes"
    ]
  },
  {
    "id": "G108",
    "title": "G108 — In-App Purchases & Platform Monetization",
    "description": "Mobile games and free-to-play titles need in-app purchases (IAP). Godot does not include IAP in its core engine — ins...",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 23570,
    "sections": [
      "Table of Contents",
      "1. IAP Architecture Overview",
      "2. Product Types",
      "3. Android — GodotGooglePlayBilling",
      "Setup",
      "GDScript — Initialization and Purchase",
      "Autoload: IAPManager",
      "C# — Initialization",
      "4. iOS — StoreKit Plugin",
      "Setup",
      "GDScript — iOS IAP Pattern",
      "C# — iOS IAP Pattern",
      "StoreKit 2 Alternative",
      "5. Cross-Platform Abstraction Layer",
      "GDScript",
      "Abstract interface — extend per platform.",
      "GDScript — Platform Factory",
      "In your IAPManager autoload:",
      "Stub for Development",
      "Simulates purchases for desktop testing.",
      "6. Receipt Validation",
      "Architecture",
      "GDScript — Sending Token to Your Server",
      "7. Restoring Purchases",
      "GDScript",
      "Call from a settings menu button.",
      "When Restoration Triggers",
      "8. Monetization Patterns for Games",
      "Consumable Economy",
      "Soft currency (gems) purchased with real money.",
      "Gems spent on in-game items.",
      "Non-Consumable Unlocks",
      "Ethical Guidelines",
      "9. Testing IAP",
      "Android",
      "iOS",
      "Both Platforms",
      "10. Common Mistakes"
    ]
  },
  {
    "id": "G109",
    "title": "G109 — Modular Shader Architecture with ShaderIncludes",
    "description": "A guide to building reusable, maintainable shader libraries in Godot 4.x using the ShaderInclude resource and the #in...",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 22750,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. ShaderInclude Basics",
      "The ShaderInclude Resource",
      "Using #include in a Shader",
      "2. Project Organization",
      "Recommended Directory Structure",
      "Naming Conventions",
      "3. Utility Libraries — Noise, Math, Color",
      "noise.gdshaderinc",
      "math_utils.gdshaderinc",
      "color_utils.gdshaderinc",
      "4. Preprocessor Directives for Configuration",
      "Feature Flags",
      "Inside the include — respond to flags",
      "Platform/Render-Mode Flags",
      "5. Lighting Models as Includes",
      "Custom Toon Lighting Include",
      "Using in a Spatial Shader",
      "6. Include Guards and Avoiding Double Inclusion",
      "Pattern",
      "Naming Convention for Guards",
      "Why This Matters",
      "7. Using Includes with C# Shader Generation",
      "8. Performance Considerations",
      "Includes Don't Add Runtime Cost",
      "What Does Cost Performance",
      "Shader Compilation Caching",
      "9. Debugging Include Errors",
      "Common Error Messages",
      "Debugging Steps",
      "10. Real-World Example — A Complete Shader Library",
      "Project: Stylized RPG with Shared Art Direction",
      "constants.gdshaderinc",
      "wind.gdshaderinc",
      "foliage.gdshader (consumer)",
      "11. Common Mistakes",
      "Putting shader_type in an Include",
      "Forgetting Include Guards",
      "Using Relative Paths",
      "Declaring Uniforms in Includes",
      "Depending on Include Order",
      "Summary"
    ]
  },
  {
    "id": "godot-arch/G10",
    "title": "G10 — Audio Systems",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 42768,
    "sections": [
      "What This Guide Covers",
      "Audio Architecture Overview",
      "Key Concepts",
      "Audio Format Decision Tree",
      "AudioBus Layout — The Mixing Desk",
      "Recommended Bus Layout",
      "Bus Setup in Code",
      "Get the bus index by name (returns -1 if not found)",
      "Set volume in decibels (-80 = silent, 0 = full, +6 = boosted)",
      "Mute/unmute a bus",
      "Add an effect to a bus at runtime",
      "Volume Conversion — Linear ↔ dB",
      "Linear (0.0–1.0) to decibels",
      "Decibels to linear (for displaying sliders)",
      "Playing Sounds — The Three Players",
      "AudioStreamPlayer (Non-Positional)",
      "Simple one-shot playback",
      "AudioStreamPlayer2D (Positional)",
      "Positional sound with distance attenuation",
      "AudioListener2D",
      "Attach to player for listener-follows-player (not camera)",
      "Camera2D auto-listens unless a separate AudioListener2D exists",
      "SFX Manager — Centralized Sound Playback",
      "sfx_manager.gd — Add as Autoload named \"SFXManager\"",
      "Preloaded sound library",
      "Register a sound for quick access by name",
      "Play by resource reference",
      "Play by registered name with random pitch variation",
      "Play with random selection from an array of streams",
      "Using the SFX Manager",
      "From any script in the project:",
      "Spatial SFX Manager — Pooled 2D Positional Audio",
      "spatial_sfx_manager.gd — Autoload named \"SpatialSFX\"",
      "Play a sound at a world position",
      "Play with pitch variation at position",
      "Usage",
      "Explosion at a position (called from anywhere)",
      "Environmental sound from a tilemap interaction",
      "Music Manager — Crossfading & Playlists",
      "music_manager.gd — Autoload named \"MusicManager\"",
      "Playlist support",
      "Play a track with crossfade (default 1.5 seconds)",
      "Stop music with fade out",
      "Pause/resume music (e.g., during pause menu)",
      "Set up a playlist",
      "Usage",
      "Scene transitions",
      "Playlist for overworld",
      "Layered / Adaptive Music",
      "Vertical Layering (Same BPM, Different Instruments)",
      "layered_music.gd — Attach to a scene or use as component",
      "Start all layers synced",
      "Set the target volume for a specific layer (0.0 = silent, 1.0 = full)",
      "Convenience: set intensity level (0.0 to 1.0) to control all layers",
      "Horizontal Sequencing (Different Sections, Beat-Synced Transitions)",
      "beat_synced_music.gd",
      "Queue a transition that happens on the next bar boundary",
      "Audio Effects — Bus Processing",
      "Common Effect Chains",
      "Environment-based reverb switching",
      "Useful Effect Types",
      "Music Ducking — Lower Music During Dialogue",
      "Duck the music bus when dialogue plays, restore after",
      "Ambient Sound System",
      "ambient_zone.gd",
      "Common Audio Patterns",
      "Footstep System with Surface Detection",
      "footstep_system.gd — Attach to player CharacterBody2D",
      "Hit Sound Variation — Avoid Repetition",
      "Audio resource with multiple variations",
      "UI Sound Feedback",
      "ui_sounds.gd — Autoload named \"UISounds\"",
      "Connect to any Button automatically",
      "Auto-connect all buttons in a container",
      "Animation-Synced Sound Effects",
      "In your character script:",
      "Then in AnimationPlayer:",
      "1. Add a \"Method Call\" track targeting the character node",
      "2. Add a keyframe at the exact frame (e.g., frame 3 of \"attack\" animation)",
      "3. Set method to \"anim_play_sound\" with args: [\"res://audio/sfx/sword_swing.wav\", -3.0]",
      "Volume Settings — Player Controls with Persistence",
      "audio_settings.gd — Component or part of settings screen",
      "Bus name → HSlider mapping",
      "AudioStreamRandomizer — Built-in Variation",
      "Create in the editor or in code:",
      "Add streams with weights",
      "Configure variation",
      "Assign to any player",
      "One-Shot Scene Pattern — Self-Cleaning Audio",
      "audio_one_shot.gd — Preload and instance as needed",
      "Static helper to spawn a one-shot sound at a position",
      "Audio in Cutscenes — Syncing with AnimationPlayer",
      "In a cutscene AnimationPlayer:",
      "Track 1: AudioStreamPlayer (Music) — Play boss_intro_music.ogg at t=0.0",
      "Track 2: AudioStreamPlayer2D (Voice) — Play boss_taunt.wav at t=2.5",
      "Track 3: Method Call — Call camera.shake(0.3, 8.0) at t=3.0",
      "Track 4: AudioStreamPlayer (SFX) — Play explosion.wav at t=3.0",
      "Cutscene controller",
      "Common Mistakes & Fixes",
      "1. Sounds Don't Play — No Bus Assignment",
      "❌ Wrong: Player defaults to \"Master\" bus, but you set Master volume to 0",
      "✅ Right: Always assign the correct bus",
      "2. Overlapping Rapid Sounds — Machine Gun Effect",
      "❌ Wrong: Playing the same sound every frame creates cacophony",
      "✅ Right: Check if already playing, or use a cooldown",
      "3. Positional Sound on a Non-Moving Node",
      "❌ Wrong: AudioStreamPlayer2D as child of a static scene root",
      "The sound always plays at (0,0)",
      "✅ Right: Make it a child of the moving entity",
      "Or update global_position before playing:",
      "4. Music Cuts Abruptly on Scene Change",
      "❌ Wrong: MusicPlayer in the scene — destroyed on scene change",
      "(music stops immediately)",
      "✅ Right: MusicManager as Autoload",
      "Autoloads persist across scene changes",
      "Play/crossfade from the new scene's _ready()",
      "5. Volume Slider Feels Non-Linear",
      "❌ Wrong: Using slider value directly as dB",
      "✅ Right: Convert linear to dB",
      "6. Too Many AudioStreamPlayer Nodes — Scene Bloat",
      "❌ Wrong: 20 AudioStreamPlayer2D children on every enemy",
      "Each enemy has: attack, hurt, death, footstep1, footstep2...",
      "✅ Right: Use pooled SFXManager/SpatialSFX",
      "Enemies call SFXManager.play() or SpatialSFX.play_at()",
      "One pool serves all enemies",
      "7. Audio Continues After Node is Freed",
      "❌ Wrong: queue_free() while sound is playing — sound cuts off",
      "✅ Right: Play sound via manager, THEN free",
      "Performance Considerations",
      "Tuning Reference Tables",
      "Volume Levels by Sound Type",
      "Pitch Variation by Sound Type",
      "Crossfade Durations by Context",
      "Attenuation Settings by Game Type",
      "Godot 3→4 Migration Reference",
      "Related Guides"
    ]
  },
  {
    "id": "G110",
    "title": "G110 — Scene Replication with MultiplayerSynchronizer & MultiplayerSpawner",
    "description": "A deep-dive into Godot 4's high-level scene replication system — the MultiplayerSynchronizer, MultiplayerSpawner, and...",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 31205,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Architecture Overview",
      "The Replication Stack",
      "2. MultiplayerSynchronizer — Property Replication",
      "Basic Setup",
      "Configuring in the Inspector",
      "Configuring via Code (GDScript)",
      "Configuring via Code (C#)",
      "Replication Interval",
      "3. SceneReplicationConfig — Defining What Syncs",
      "Property Paths",
      "Replication Modes",
      "Spawn Mode",
      "4. MultiplayerSpawner — Dynamic Node Replication",
      "The Problem",
      "Basic Setup",
      "Spawning Nodes (GDScript)",
      "Spawning Nodes (C#)",
      "Auto Spawn List vs. Custom Spawn Function",
      "Spawn Limit",
      "5. Authority Models",
      "Server Authority (Default)",
      "Client Authority (Per-Player)",
      "Mixed Authority",
      "6. Replication Modes — Sync vs. Spawn vs. Watch",
      "Understanding the Three Behaviors",
      "Combining All Three",
      "7. Visibility and Interest Management",
      "The Problem",
      "MultiplayerSynchronizer Visibility",
      "Visibility Changed Signal",
      "8. Delta Compression and Bandwidth",
      "How Godot Compresses Sync Data",
      "Measuring Bandwidth",
      "Bandwidth Optimization Tips",
      "9. Mid-Game Joins and Reconnection",
      "The Challenge",
      "How It Works",
      "Ensuring Correct State on Join",
      "Handling Peer Disconnect/Reconnect",
      "10. Complete Example — Co-op Action Game",
      "Network Manager (GDScript)",
      "Network Manager (C#)",
      "Player Scene (player.tscn)",
      "Player Script (GDScript)",
      "Replicated properties",
      "Server-authoritative damage — any peer can request, server validates",
      "World Scene with Spawner",
      "11. Complete Example — Authoritative Server",
      "Input is sent to server via RPC; server simulates and syncs result",
      "Client sends input to server",
      "12. Debugging Replication",
      "Visual Debugging",
      "Common Debug Techniques",
      "Running Multiple Instances Locally",
      "13. Common Mistakes",
      "Not Setting Authority",
      "Syncing Too Many Properties",
      "Forgetting spawn = true",
      "Processing Input on Non-Authority Peers",
      "Using the Wrong RPC Channel for Input",
      "Not Adding Scenes to the Auto Spawn List",
      "Summary"
    ]
  },
  {
    "id": "G111",
    "title": "G111 — GDExtension Advanced Patterns: Lifecycle, Hot Reload & Editor Integration",
    "description": "Advanced GDExtension patterns for Godot 4.4+: initialization lifecycle stages, main loop callbacks (4.5+), hot reload...",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 30005,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Initialization Lifecycle",
      "The Four (+1) Initialization Stages",
      "Registering Multiple Stages",
      "GDScript Equivalent — Why This Matters",
      "2. Main Loop Callbacks (4.5+)",
      "The Problem Before 4.5",
      "The Solution — MainLoop Stage",
      "Hooking into Startup and Shutdown",
      "Per-Frame Callbacks (4.5+)",
      "C# Equivalent",
      "3. Hot Reload Workflow",
      "Current State (Godot 4.4+)",
      "Enabling Hot Reload",
      "The Reload Cycle",
      "Important Limitations",
      "GDScript Comparison",
      "4. Virtual Method Binding",
      "Making C++ Methods Overridable in GDScript",
      "Overriding in GDScript",
      "Overriding in C#",
      "Known Caveats",
      "5. Editor Tool Integration",
      "Making Your Node Work in the Editor",
      "Registering an EditorPlugin",
      "6. Custom Inspector Plugins via GDExtension",
      "Extending the Inspector",
      "7. Multi-Extension Architecture",
      "When to Split into Multiple Libraries",
      "Project Structure for Multiple Extensions",
      "Sharing Code Between Extensions",
      "8. Memory Management Patterns",
      "Godot-Managed vs. Manual Memory",
      "The memnew/memdelete Rule",
      "GDScript/C# Comparison",
      "9. Debugging Native Code",
      "Attaching a Debugger",
      "Print Debugging",
      "Debug vs. Release Builds",
      "10. Cross-Language Patterns — C++ ↔ GDScript ↔ C#",
      "Calling GDScript from C++",
      "Calling C++ from GDScript",
      "Calling C++ from C#",
      "Type Marshaling",
      "11. Production Build Configuration",
      "SCons Build File for Multiple Platforms",
      "CI/CD Integration",
      ".gdextension Compatibility Settings",
      "12. Common Mistakes",
      "Accessing Singletons Too Early",
      "Using new Instead of memnew",
      "Forgetting to Check Editor Mode",
      "Not Handling Hot Reload State Loss",
      "Circular Dependencies Between Extensions",
      "Summary"
    ]
  },
  {
    "id": "G112",
    "title": "G112 — GPUParticles3D & 3D VFX Pipeline",
    "description": "Complete guide to 3D particle systems in Godot 4.4+. Covers GPUParticles3D node setup, ParticleProcessMaterial config...",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 22418,
    "sections": [
      "Table of Contents",
      "1. GPUParticles3D vs CPUParticles3D — When to Use Each",
      "2. GPUParticles3D Node Setup",
      "GDScript",
      "C#",
      "Key Properties",
      "3. ParticleProcessMaterial for 3D",
      "GDScript",
      "C#",
      "4. Emission Shapes in 3D",
      "5. Gravity, Velocity, and Directional Forces",
      "6. Turbulence",
      "7. Particle Attractors",
      "Attractor Types",
      "GDScript",
      "C#",
      "Vector Field Attractors",
      "8. Particle Colliders",
      "Collider Types",
      "SDF Collider — Indoor Scenes",
      "Height Field Collider — Outdoor Terrain",
      "Collision Material Properties",
      "9. Sub-Emitters in 3D",
      "10. Particle Trails in 3D",
      "11. Custom 3D Particle Shaders",
      "Built-in Particle Shader Variables",
      "12. Draw Passes and Mesh Particles",
      "13. VFX Recipes — Common 3D Effects",
      "Campfire",
      "Rain with Splash Sub-Emitter",
      "Magic Vortex",
      "14. Performance Optimization",
      "Budget Guidelines",
      "Optimization Techniques",
      "15. Common Mistakes"
    ]
  },
  {
    "id": "G113",
    "title": "G113 — NavigationServer3D & 3D Pathfinding",
    "description": "Complete guide to 3D navigation in Godot 4.4+. Covers NavigationServer3D architecture, NavigationRegion3D setup, Navi...",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 25494,
    "sections": [
      "Table of Contents",
      "1. NavigationServer3D Architecture",
      "2. NavigationRegion3D & Mesh Baking",
      "Basic Setup (Editor)",
      "GDScript — Runtime Baking",
      "C#",
      "Async Baking (Background Thread)",
      "3. NavigationMesh Configuration",
      "Parsed Geometry Types",
      "Source Geometry Mode",
      "Cell Size and Detail",
      "4. NavigationAgent3D — Pathfinding",
      "GDScript",
      "C#",
      "Key Agent Properties",
      "5. NavigationAgent3D — Avoidance (RVO)",
      "Enabling Avoidance",
      "Avoidance-Aware Movement",
      "Avoidance Layers and Masks",
      "6. NavigationObstacle3D",
      "7. Navigation Layers & Cost",
      "Travel Cost",
      "8. Runtime NavMesh Modification",
      "NavigationLink3D — Connecting Disjoint Regions",
      "Dynamic Region Enable/Disable",
      "Rebaking at Runtime",
      "9. Async Map Synchronization (4.4+)",
      "10. Direct NavigationServer3D API",
      "C#",
      "11. Large World Navigation",
      "Multi-Region Approach",
      "LOD for Navigation",
      "12. Integration with AI Systems",
      "With State Machines (see G2)",
      "With Behavior Trees (see G25)",
      "13. Debug Visualization",
      "Editor Debug",
      "Runtime Debug Drawing",
      "14. Performance Optimization",
      "Baking Performance",
      "Runtime Performance",
      "15. Common Mistakes & Fixes"
    ]
  },
  {
    "id": "godot-arch/G11",
    "title": "G11 — Save & Load Systems",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 50180,
    "sections": [
      "What This Guide Covers",
      "Save Architecture — What to Save",
      "The Golden Rule",
      "What to Save vs What NOT to Save",
      "Saveable Interface — The Contract Pattern",
      "saveable.gd — Base class or interface",
      "Return a Dictionary of data to save.",
      "Keys should be strings. Values must be JSON-safe",
      "(or convertible via _to_json_safe).",
      "Restore state from a previously-saved Dictionary.",
      "Using Groups for Auto-Discovery",
      "player.gd",
      "enemy.gd",
      "JSON Save System — The Community Standard",
      "SaveManager Autoload",
      "save_manager.gd — Autoload named \"SaveManager\"",
      "── Saving ──────────────────────────────────────────────",
      "── Loading ─────────────────────────────────────────────",
      "── Slot Management ─────────────────────────────────────",
      "── Internal ────────────────────────────────────────────",
      "Serializing Complex Types",
      "Type Conversion Helpers",
      "save_helpers.gd — Static utility class",
      "── Vector2 ─────────────────────────────────────────────",
      "── Vector2i ────────────────────────────────────────────",
      "── Color ───────────────────────────────────────────────",
      "── Rect2 ───────────────────────────────────────────────",
      "── Transform2D ─────────────────────────────────────────",
      "── Generic typed array ─────────────────────────────────",
      "Inventory Serialization Example",
      "inventory.gd",
      "Quest System Serialization",
      "quest_manager.gd — Autoload",
      "Resource-Based Saves — Godot-Native Approach",
      "save_data_resource.gd",
      "Saving with Resources",
      "resource_save_manager.gd",
      "JSON vs Resource Saves — Decision Guide",
      "Binary Serialization — Compact & Fast",
      "binary_save.gd",
      "Save File Versioning & Migration",
      "In save_manager.gd:",
      "Migration Best Practices",
      "Autosave System",
      "autosave.gd — Attach to a scene or add to SaveManager",
      "Saving World State — Modified Tiles & Objects",
      "Delta-Based World Saving",
      "world_state_manager.gd — Autoload named \"WorldState\"",
      "Per-scene dictionary of modifications",
      "{ scene_path: { \"tiles\": {...}, \"objects\": {...}, \"flags\": {...} } }",
      "── Tile Modifications ──────────────────────────────────",
      "── Object State ────────────────────────────────────────",
      "── Scene Flags ─────────────────────────────────────────",
      "── Save/Load ───────────────────────────────────────────",
      "── Apply to Scene ──────────────────────────────────────",
      "Using World State in Scenes",
      "chest.gd — Openable chest that remembers its state",
      "Scene Reconstruction — Spawned Entities",
      "In save_manager.gd, add spawned entity tracking:",
      "Call when spawning any persistent entity at runtime",
      "Dropped Item Example",
      "dropped_item.gd — Items dropped by enemies or players",
      "Multiple Save Slots — UI Integration",
      "save_load_screen.gd",
      "Settings Persistence — Separate from Game Saves",
      "settings_manager.gd — Autoload named \"Settings\"",
      "Default values",
      "Save File Location & Platform Considerations",
      "`user://` Path by Platform",
      "File Access Patterns",
      "Check if a directory exists",
      "List all save files",
      "Get file modification time (for sorting saves by date)",
      "Save Data Encryption — Preventing Cheating",
      "encrypted_save.gd",
      "⚠️ In a real game, use a unique key and don't ship it in source",
      "Screenshot Thumbnails for Save Slots",
      "In save_manager.gd:",
      "Common Mistakes & Fixes",
      "1. Saving Node References Instead of Data",
      "❌ Wrong: Node references are invalid after load",
      "✅ Right: Save an identifier, resolve on load",
      "2. Loading Before the Scene is Ready",
      "❌ Wrong: Apply data immediately after change_scene_to_file",
      "✅ Right: Wait for the scene tree to settle",
      "3. Not Handling Missing Keys (Old Save Files)",
      "❌ Wrong: Crashes if \"gold\" key doesn't exist in old save",
      "✅ Right: Always use .get() with defaults",
      "4. Saving Every Frame / On Every Change",
      "❌ Wrong: Save on every coin pickup (disk I/O spam)",
      "✅ Right: Batch saves at natural breakpoints",
      "- Entering a new room/area",
      "- Opening a save point (bonfire, typewriter)",
      "- Autosave timer (every 5 minutes)",
      "- Before a boss fight",
      "5. Using NodePath as Save Key (Breaks if Tree Changes)",
      "❌ Fragile: NodePath changes if you rearrange the scene tree",
      "✅ Robust: Use a stable unique ID",
      "6. Forgetting to Save Autoload State",
      "❌ Wrong: Only saving nodes in the current scene",
      "Autoloads (QuestManager, WorldState, PlayerStats) are NOT in the scene tree!",
      "✅ Right: Also add Autoloads to the \"saveable\" group",
      "In quest_manager.gd _ready():",
      "7. Race Condition on Load — Signals Fire Before Data Applied",
      "❌ Wrong: _ready() emits signals that depend on loaded data",
      "✅ Right: Defer initial signal emission",
      "Performance Considerations",
      "Threaded Save (Prevent Hitches)",
      "Tuning Reference Tables",
      "Save Frequency by Game Type",
      "Save File Sizes by Game Complexity",
      "Serialization Format Comparison",
      "Godot 3→4 Migration Reference",
      "Related Guides"
    ]
  },
  {
    "id": "godot-arch/G12",
    "title": "G12 — Shaders & Visual Effects",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 67894,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Shader Pipeline Overview",
      "Material Types",
      "Shader Application Hierarchy",
      "2. Shader Types & When to Use Each",
      "CanvasItem Shader (2D)",
      "Spatial Shader (3D)",
      "Particles Shader",
      "Decision Tree",
      "3. Shader Language Fundamentals",
      "Types",
      "Built-In Variables (canvas_item)",
      "Reading Textures",
      "Common Math Functions",
      "4. Shader Parameters & GDScript Integration",
      "Declaring Uniforms",
      "Setting Parameters from GDScript",
      "Set a shader parameter by name.",
      "Get a shader parameter value.",
      "Animate a shader parameter with a tween.",
      "Material Uniqueness Pattern",
      "Ensure this node has its own unique material (not shared).",
      "Call this in _ready() before setting any per-instance shader params.",
      "5. Hit Flash & Damage Shaders",
      "Basic White Flash",
      "GDScript Flash Controller",
      "The sprite or node with the flash shader material.",
      "Duration of the flash in seconds.",
      "Flash color (white = classic hit flash).",
      "Trigger a hit flash. Call this from your damage handler.",
      "Advanced Hit Shader (Flash + Overlay + Saturation)",
      "I-Frame Blink Pattern",
      "6. Dissolve & Death Effects",
      "Noise-Based Dissolve",
      "Dissolve Controller",
      "Start dissolving the target. Emits dissolve_finished when done.",
      "Reverse dissolve (materialize effect).",
      "Pixel Dissolve (Retro Style)",
      "7. Outline Shaders",
      "Pixel-Perfect Outline (Sprite Edge Detection)",
      "8-Direction Outline (Smoother Diagonals)",
      "Selection/Hover Outline (Animated)",
      "8. Color Manipulation Shaders",
      "Greyscale / Desaturation",
      "Color Replace (Palette Swap)",
      "Palette Texture Swap (Flexible Color Variants)",
      "Color Tint (Status Effects)",
      "Apply a status tint. Blends with modulate for simplicity.",
      "Remove the active tint.",
      "9. Water & Liquid Shaders",
      "Simple 2D Water Surface",
      "Water Reflection (Screen-Space Distortion)",
      "10. Distortion & Heat Haze",
      "Heat Haze / Shimmer",
      "Shockwave / Ripple",
      "Shockwave Controller",
      "Play from the center of the screen.",
      "Attach this script to a full-screen ColorRect on a top CanvasLayer.",
      "Trigger a shockwave at the given screen position (0-1 range).",
      "Convenience: convert world position to screen UV for trigger().",
      "11. 2D Lighting & Shadows",
      "PointLight2D Setup",
      "A gameplay light that can be toggled, flickered, and faded.",
      "Smoothly turn the light on or off.",
      "Pulse the light (for pickups, alerts).",
      "Light Occlusion (2D Shadows)",
      "Normal Map Lighting",
      "Apply a normal map to a Sprite2D for 2D lighting depth.",
      "The normal map must match the sprite dimensions.",
      "Day/Night Cycle",
      "Simple day/night cycle via CanvasModulate.",
      "CanvasModulate tints the ENTIRE canvas — one per scene max.",
      "Get the current time as a 0-1 value (0=midnight, 0.5=noon).",
      "Set time of day directly (0-1).",
      "12. Screen-Space Effects & Post-Processing",
      "Setup Pattern",
      "Attach to the post-processing ColorRect.",
      "Automatically sizes to viewport.",
      "Vignette",
      "CRT / Scanline Effect",
      "Chromatic Aberration",
      "Low-Health Danger Effect",
      "Combines vignette darkening + red tint + pulsing when health is low.",
      "13. GPUParticles2D",
      "Configuration Overview",
      "ParticleProcessMaterial Key Properties",
      "Create a burst explosion effect (enemy death, crate break).",
      "Particle Pooling Pattern",
      "Pool of reusable GPUParticles2D nodes.",
      "Pre-creates particles to avoid instantiation during gameplay.",
      "Emit a particle effect at the given position. Returns the particle node.",
      "Emit with custom color override.",
      "14. CPUParticles2D",
      "When to Use CPU vs GPU Particles",
      "Simple dust puff using CPUParticles2D (landing, footsteps).",
      "15. Particle Patterns for Common Effects",
      "Blood/Hit Splatter",
      "Emit at a position with directional bias (away from hit direction).",
      "Coin/Pickup Collect",
      "Sparkle burst when collecting items. Attach directly to the pickup.",
      "Call this when the item is collected. Self-destructs after particles finish.",
      "Trail Effect (Movement Trail)",
      "A movement trail that follows a target node.",
      "Uses Line2D with a gradient for fade effect.",
      "Footstep Dust",
      "Spawns small dust puffs when the character lands or runs.",
      "Designed to be a child of a CharacterBody2D.",
      "16. Visual Shader Editor",
      "When to Use Visual Shaders",
      "Creating a Visual Shader",
      "Key Visual Shader Nodes",
      "Visual Shader to Code Conversion",
      "17. Shader Composition & Reuse",
      "Shader Include Files (Godot 4.x)",
      "Multi-Effect Shader Pattern",
      "Shader Manager Autoload",
      "Centralized shader management. Preloads and caches shader resources.",
      "Register as an Autoload: Project → Project Settings → Autoload → ShaderManager",
      "Create a new ShaderMaterial with the named shader. Returns a unique material.",
      "Apply a shader to a node, replacing any existing material.",
      "Returns the new material for parameter access.",
      "Remove shader from a node (restore default rendering).",
      "18. Performance Optimization",
      "Shader Performance Rules",
      "Particle Performance Rules",
      "Optimize particles based on distance from camera.",
      "Material Sharing vs Uniqueness",
      "Shader Compilation Stutter",
      "Warm up shaders by briefly rendering them off-screen during loading.",
      "19. Common Mistakes",
      "❌ Modifying a Shared Material",
      "❌ Using Deprecated screen_texture",
      "❌ Multiple Screen Texture Reads Per Layer",
      "❌ Particles Without one_shot Self-Cleanup",
      "❌ Using shader_parameter on Wrong Material Type",
      "❌ Forgetting Texture Filter Settings",
      "❌ GPU Particles on Web Export",
      "20. Tuning Reference Tables",
      "Hit Flash Timing by Genre",
      "Dissolve Timing",
      "Particle Counts by Effect",
      "Post-Processing Intensity Guide",
      "Outline Width by Resolution",
      "Related Guides"
    ]
  },
  {
    "id": "godot-arch/G13",
    "title": "G13 — Networking & Multiplayer",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 47491,
    "sections": [
      "Table of Contents",
      "1. Multiplayer Architecture Overview",
      "Execution Flow",
      "Peer Model",
      "Authority Model",
      "2. Setting Up the Peer Network",
      "ENet (Default — UDP, Reliable + Unreliable)",
      "Connection Timeout Configuration",
      "3. RPCs — Remote Procedure Calls",
      "RPC Annotations",
      "RPC Annotation Reference",
      "Calling RPCs",
      "RPC Validation Pattern",
      "4. MultiplayerSpawner — Dynamic Object Replication",
      "Scene Tree Setup",
      "Spawner Configuration",
      "Spawn with Custom Data",
      "5. MultiplayerSynchronizer — State Replication",
      "Scene Setup — Player.tscn",
      "Synchronizer Configuration",
      "Replication Configuration (Editor)",
      "Programmatic Replication Config",
      "6. Authoritative Server Pattern",
      "Architecture",
      "Client Input Sender",
      "7. Lobby & Connection Management",
      "Lobby with Player Info Exchange",
      "Reconnection Handler",
      "8. Client-Side Prediction & Reconciliation",
      "9. Interpolation & Extrapolation",
      "Interpolation Buffer",
      "10. Lag Compensation — Server Rewind",
      "11. Network Optimization",
      "Delta Compression",
      "Interest Management — Visibility Culling",
      "Bandwidth Budgeting",
      "Quantization — Reduce Precision for Bandwidth",
      "Pack a Vector2 position into 2 × 16-bit integers (±32767 range).",
      "Pack a rotation (0–2π) into a single byte.",
      "12. Chat & Non-Gameplay Messaging",
      "13. WebSocket & WebRTC Transport",
      "WebSocket (For Web Export)",
      "WebRTC (Peer-to-Peer via Signaling Server)",
      "Transport Decision Table",
      "14. Testing & Debugging",
      "Local Multi-Instance Testing",
      "Handling Command-Line Args",
      "Network Debug Overlay",
      "Simulating Latency & Packet Loss (Development)",
      "15. Common Mistakes",
      "❌ Mistake 1: Running Game Logic on the Client",
      "❌ Mistake 2: Using `reliable` for Everything",
      "❌ Mistake 3: Forgetting `set_multiplayer_authority()`",
      "❌ Mistake 4: Not Handling Disconnects Gracefully",
      "❌ Mistake 5: Syncing Everything",
      "❌ Mistake 6: Testing Only on Localhost",
      "❌ Mistake 7: Using Node Paths in RPCs",
      "16. Tuning Reference",
      "Tick Rate by Game Type",
      "Interpolation Buffer by Connection Quality",
      "Bandwidth Budget per Player",
      "ENet Channel Allocation",
      "Related Guides"
    ]
  },
  {
    "id": "godot-arch/G14",
    "title": "G14 — Navigation & Pathfinding",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 77398,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1 — Architecture Decision: Which System?",
      "2 — NavigationServer2D Fundamentals",
      "Core Concepts",
      "Server Lifecycle",
      "Getting the Default Map",
      "3 — NavigationRegion2D Setup",
      "Basic Setup (Scene Tree)",
      "Creating NavigationPolygon in Code",
      "Multiple Regions (Connected Automatically)",
      "4 — NavigationAgent2D",
      "Basic Enemy Following Player",
      "NavigationAgent2D Properties Reference",
      "Path Update Strategies",
      "Manages path recalculation timing for navigation agents",
      "5 — Navigation from TileMapLayer",
      "TileSet Navigation Layer Setup",
      "Programmatic Navigation from TileMap",
      "Builds navigation from TileMapLayer tile data",
      "Combining TileMap Nav with Custom Regions",
      "6 — NavigationObstacle2D",
      "Moving Obstacle (NPC, Patrol)",
      "Entity that other navigation agents avoid",
      "Static Obstacle (Pushable Crate, Closed Door)",
      "Door that blocks navigation when closed",
      "7 — Runtime Navigation Modification",
      "Adding Temporary Walkable Area (Bridge Extends)",
      "NavigationLink2D (Teleporters, Jump Points, Ladders)",
      "Connects two disconnected navigation regions",
      "Example: Agent checks link type to play correct animation",
      "8 — AStarGrid2D for Tile Games",
      "Basic Setup",
      "A* pathfinding on a 2D tile grid",
      "Building from TileMapLayer",
      "Builds AStarGrid2D from TileMapLayer collision/custom data",
      "Grid Movement with Path Following",
      "Follows AStarGrid2D paths with smooth grid-cell movement",
      "9 — AStar2D for Custom Graphs",
      "Waypoint Network",
      "Manual waypoint-based pathfinding for non-grid worlds",
      "Build from scene — add Marker2D children as waypoints",
      "Platformer Jump Graph",
      "Pathfinding for platformers — nodes are platform edges, connections are jumps/walks",
      "10 — Steering Behaviors",
      "Core Steering System",
      "Composable steering behaviors for smooth AI movement",
      "--- Behaviors ---",
      "--- Combination ---",
      "Path Following with Steering",
      "Follows a navigation path using steering behaviors for smooth movement",
      "11 — Obstacle Avoidance",
      "RVO Avoidance (Built into NavigationAgent2D)",
      "Raycast Avoidance (Manual, for Steering)",
      "Obstacle avoidance using raycasts — for steering-based movement",
      "Context-Based Steering (Advanced)",
      "Context-based steering — interest/danger maps for multi-concern movement",
      "Better than weighted steering for complex environments",
      "12 — Flow Fields",
      "Flow Field Generator",
      "Precomputed direction field — all cells point toward target",
      "--- Internal ---",
      "Tower Defense Path with Flow Field",
      "Regenerates flow field when towers are placed/removed",
      "Flow Field Enemy Movement",
      "13 — Hierarchical Pathfinding",
      "Two-Level Hierarchical A*",
      "Coarse chunk-level path + fine cell-level path within chunks",
      "14 — Path Smoothing & Following",
      "String Pulling (Funnel Algorithm)",
      "Smooths grid paths by removing unnecessary waypoints via line-of-sight",
      "Catmull-Rom Path Interpolation",
      "Smooth path with Catmull-Rom spline interpolation",
      "Smooth Path Follower with Lookahead",
      "Follows a path with lookahead for smooth cornering",
      "15 — Navigation Layers & Cost",
      "Layer Architecture",
      "Apply to NavigationAgent2D",
      "Apply to NavigationRegion2D",
      "Travel Cost by Terrain Type",
      "Sets up navigation regions with different travel costs per terrain type",
      "AI can choose: short through mud (slow) or long around on road (fast)",
      "NavigationServer2D automatically picks lowest total cost",
      "16 — Group & Formation Movement",
      "Formation Controller",
      "Manages a group of units moving in formation",
      "Crowd Flow (Simple Boid-like)",
      "Simple group cohesion for many units — lighter than full formations",
      "17 — State Machine Integration",
      "AI States with Navigation",
      "Enemy with state-driven navigation behavior",
      "18 — Debug Visualization",
      "Navigation Debug Overlay",
      "Draws navigation debug information — paths, agents, obstacles",
      "Godot Built-in Navigation Debug",
      "19 — Performance Optimization",
      "Path Query Batching",
      "Batches path requests across frames to prevent spikes",
      "Distance-Based LOD for Navigation",
      "Reduces navigation frequency for distant/offscreen agents",
      "Performance Budget Reference",
      "20 — Common Mistakes & Fixes",
      "❌ Querying navigation on the first frame",
      "❌ Recalculating paths every frame",
      "❌ Moving with position instead of velocity (breaks avoidance)",
      "❌ Mismatched avoidance radius and collision shape",
      "❌ Not calling `astar.update()` after configuration",
      "❌ Navigation link endpoints not on the navmesh",
      "❌ Forgetting to handle unreachable targets",
      "21 — Tuning Reference Tables",
      "Path Update Frequency by Genre",
      "Navigation System Selection",
      "Steering Behavior Weights by Game Type",
      "Agent Count Performance Targets",
      "Related Guides"
    ]
  },
  {
    "id": "godot-arch/G15",
    "title": "G15 — Particle Systems & Visual Effects",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 67827,
    "sections": [
      "Table of Contents",
      "1. Particle Pipeline Overview",
      "Key Concepts",
      "Execution Order in the Frame",
      "2. GPU vs CPU Particles — Decision Guide",
      "Comparison Table",
      "3. GPUParticles2D Fundamentals",
      "Basic Setup",
      "Important: Vector3 in 2D Context",
      "Visibility & Draw Rect",
      "Draw Passes",
      "4. ParticleProcessMaterial Deep Dive",
      "4.1 Direction & Spread",
      "4.2 Velocity & Acceleration",
      "4.3 Angular Velocity (Spin)",
      "4.4 Scale Over Lifetime",
      "4.5 Color Over Lifetime",
      "4.6 Turbulence",
      "4.7 Attractor Interaction",
      "5. CPUParticles2D",
      "Basic Setup",
      "Per-Particle Access (Unique to CPU)",
      "Manually set colors based on game state",
      "Deterministic Particles (Replays, Netcode)",
      "Seed-based deterministic spawning",
      "6. Emission Shapes",
      "Point (Default)",
      "Sphere / Sphere Surface",
      "Box",
      "Ring (2D Circle / Donut)",
      "Points (Custom Shape via Texture)",
      "Directed Points (Position + Normal)",
      "7. Particle Curves & Gradients",
      "Curve Patterns",
      "Create common curve shapes for particle properties",
      "Fast start, slow end (good for velocity damping)",
      "Slow start, fast end (good for gravity pull-in)",
      "Pop: quick grow then shrink (good for scale)",
      "Flicker (good for fire alpha)",
      "Pulse: oscillates then fades (good for glow)",
      "Gradient Patterns",
      "Common color gradients for particle effects",
      "Fire: white-yellow → orange → red → smoke",
      "Electric: cyan → white → blue → fade",
      "Heal: green → yellow-green → white → fade",
      "Poison: purple → green → dark → fade",
      "8. Sub-Emitters",
      "Setup",
      "Sub-Emitter Modes",
      "Firework Example (Two-Stage)",
      "Firework: launch shell → explode into colored sparks",
      "9. Particle Trails",
      "Basic Trail Setup",
      "Trail Mesh Shapes",
      "Sword Slash Trail",
      "Attach to the tip of a sword sprite",
      "Trail + Local vs World Coordinates",
      "10. Custom Particle Shaders",
      "Vertex Shader (Particle Update)",
      "Key Shader Built-ins for Particles",
      "2D Attractor via Shader",
      "11. One-Shot Burst Effects",
      "Explosion Manager (Autoload)",
      "VFX Spawner — Autoload (\"VFX\")",
      "Manages one-shot particle spawning with automatic cleanup",
      "Pre-built effect scenes",
      "Pool of available emitters per effect type",
      "Spawn a one-shot effect at a world position",
      "Spawn effect with velocity inheritance (e.g., sparks from moving enemy)",
      "Usage",
      "Impact Effect Scene (hit_spark.tscn)",
      "12. Continuous Ambient Effects",
      "Rain System",
      "Full-screen rain using multiple particle layers",
      "Torch Flame",
      "Attach to a torch sprite as a child",
      "Fireflies (Ambient Night)",
      "13. Physics-Influenced Particles",
      "Collision Hints (GPU)",
      "Manual Physics Particles (CPU)",
      "Debris that bounces off platforms using raycasts",
      "14. VFX Recipes — Common Game Effects",
      "14.1 Dust Puff (Landing / Dash)",
      "Spawn on land, dash start, wall slide",
      "14.2 Coin / Item Pickup",
      "Sparkle burst + floating \"+ 1\" (combine with damage number from G8)",
      "14.3 Blood / Hit Splash",
      "14.4 Smoke Trail (Missile / Rocket)",
      "Attach as child of projectile node",
      "14.5 Charge-Up / Power Accumulation",
      "Particles spiral inward toward a charge point",
      "14.6 Footstep Dust",
      "Call from character state machine on each footstep",
      "14.7 Environmental Weather Particles",
      "Snow — lighter, slower, more turbulence than rain",
      "15. Particle Pooling & Lifecycle Management",
      "Why Pool Particles?",
      "Advanced Pool with Warmup",
      "VFXPool — Pre-warms particle emitters for zero-allocation spawning",
      "Stats for debugging",
      "Automatic Return Timer",
      "Wrap pool usage with auto-return",
      "16. Screen-Space Effects",
      "Fullscreen Particle Overlay (CanvasLayer)",
      "Persistent screen-space effects (vignette particles, screen dust, etc.)",
      "Camera Shake + Particles Integration",
      "Coordinate particle effects with camera shake (see G6 Camera Systems)",
      "17. Particle Interaction with Gameplay",
      "Damage Zone Particles",
      "Particles that visually represent an active damage area",
      "Status Effect Particle Attachment",
      "Attach persistent particle effects to characters for status effects",
      "Active particle effects keyed by status name",
      "Pre-defined effect configurations",
      "18. Performance Optimization",
      "Budget Guidelines",
      "Optimization Techniques",
      "Reduce particle count and disable features based on camera distance",
      "Profiling Particles",
      "Debug overlay for particle stats",
      "19. Common Mistakes & Troubleshooting",
      "Mistake 1: Particles Vanish When Camera Moves",
      "Mistake 2: \"Fill-Up\" Delay on Scene Load",
      "Mistake 3: One-Shot Doesn't Restart",
      "Mistake 4: Trails Look Broken / Zigzag",
      "Mistake 5: Sub-Emitter Particle Count Explosion",
      "Mistake 6: Particles Don't Appear (Nothing Visible)",
      "Mistake 7: GPU Particles Don't Work on Some Devices",
      "Runtime particle type selection",
      "20. Tuning Reference Tables",
      "Particle Count by Effect Type",
      "Turbulence Tuning",
      "Velocity & Gravity by Effect Type",
      "Blend Mode Selection",
      "Related Guides"
    ]
  },
  {
    "id": "godot-arch/G16",
    "title": "G16 — GDExtension & Native C++ Integration",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 24009,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. How GDExtension Works",
      "Key Concepts",
      "2. Project Setup with godot-cpp",
      "Prerequisites",
      "Directory Structure",
      "Step-by-Step Setup",
      "SConstruct File",
      "3. Your First Extension — A Custom Node",
      "Header — `src/my_custom_node.h`",
      "Implementation — `src/my_custom_node.cpp`",
      "Registration — `src/register_types.cpp`",
      "Registration Header — `src/register_types.h`",
      "4. Exposing Properties to the Editor",
      "5. Methods, Signals, and Constants",
      "Exposing Methods",
      "Defining Signals",
      "Enums and Constants",
      "6. The .gdextension File",
      "Key Fields",
      "7. Building for Multiple Platforms",
      "8. Calling GDExtension from GDScript",
      "9. Calling GDScript from GDExtension",
      "10. Debugging GDExtension Code",
      "IDE Debugger Attach",
      "Print Debugging",
      "Hot Reload",
      "11. Performance Patterns",
      "When GDExtension Wins Big",
      "Object Pooling in C++",
      "Batch Processing",
      "12. API Compatibility and Versioning",
      "godot-cpp Versioning",
      "13. Common Mistakes",
      "Forgetting `GDCLASS` Macro",
      "Mismatched `_bind_methods`",
      "Not Handling `nullptr` from `get_node`",
      "Building Release for Editor Testing",
      "Changing Class Names After Scenes Reference Them",
      "Ignoring Thread Safety",
      "14. When to Use What — Decision Matrix",
      "Tuning Reference"
    ]
  },
  {
    "id": "godot-arch/G17",
    "title": "G17 — Procedural Generation Patterns",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 31147,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Seeded Randomization — The Foundation",
      "GDScript",
      "Wraps RandomNumberGenerator with convenience methods for PCG.",
      "Returns a random int in [min_val, max_val] (inclusive).",
      "Returns a random float in [min_val, max_val].",
      "Picks a random element from an array.",
      "Weighted random pick. weights[i] corresponds to items[i].",
      "Shuffles an array in place (Fisher-Yates).",
      "C#",
      "2. Noise-Based Terrain with FastNoiseLite",
      "Height Map Terrain",
      "Generates a 2D height map using layered noise.",
      "Noise configuration",
      "Height thresholds for tile assignment",
      "Biome Blending with Multiple Noise Layers",
      "Use separate noise instances for temperature and moisture.",
      "The combination determines the biome.",
      "Noise Tuning Reference",
      "3. BSP (Binary Space Partitioning) Dungeons",
      "Binary Space Partitioning dungeon generator.",
      "4. Random Walk (Drunkard's Walk) Caves",
      "Random-walk cave generator.",
      "Directions: up, down, left, right",
      "Variant: multiple walkers from different starting points",
      "5. Cellular Automata Smoothing",
      "Cellular automata for cave smoothing.",
      "Classic 4-5 rule: a cell becomes wall if it has ≥5 wall neighbors",
      "(including itself), or if it has ≤1 wall neighbors.",
      "Combining Drunkard's Walk + Cellular Automata",
      "6. Wave Function Collapse (WFC)",
      "Simplified 2D WFC",
      "Simplified Wave Function Collapse for 2D tile grids.",
      "Each tile defines which tiles can be adjacent in each direction.",
      "Adjacency rules: tile_name → { \"up\": [...], \"down\": [...], \"left\": [...], \"right\": [...] }",
      "Defining WFC Tile Rules",
      "7. Loot and Encounter Tables",
      "Weighted Loot Table",
      "Weighted loot table with rarity tiers.",
      "Encounter Scaling",
      "Scale encounter difficulty based on player progress.",
      "8. Chunk-Based Infinite Worlds",
      "Manages infinite-world chunks around the player.",
      "9. Integration with TileMapLayer",
      "Renders a generated dungeon onto TileMapLayer nodes.",
      "Atlas coordinates in your TileSet",
      "10. Navigation Mesh Generation",
      "After rendering tiles, bake the navigation region.",
      "11. Performance Considerations",
      "Threading Large Generations",
      "Generate a dungeon off the main thread to avoid frame hitches.",
      "12. Common Mistakes",
      "Using Global Random State",
      "Not Validating Connectivity",
      "Generating on the Main Thread",
      "Forgetting Seed Persistence",
      "Over-Parameterizing",
      "13. Algorithm Selection Guide",
      "Decision Flowchart"
    ]
  },
  {
    "id": "godot-arch/G18",
    "title": "G18 — Performance Profiling & Optimization",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 25713,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. The Profiling Workflow",
      "Are You CPU-Bound or GPU-Bound?",
      "2. Built-In Profiler (Debugger Panel)",
      "How to Use",
      "Reading the Profiler",
      "Frame Time Budget",
      "3. Performance Monitors",
      "Key Monitors to Watch",
      "Accessing Monitors in Code",
      "Read any performance monitor programmatically.",
      "4. Custom Performance Monitors",
      "Register custom monitors for game-specific metrics.",
      "Call this from your pathfinding system",
      "Micro-Benchmarking in Code",
      "Measure a specific code section.",
      "5. CPU Optimization",
      "Reduce Per-Frame Work",
      "Reduce Scene Tree Operations",
      "Use `@onready` and Cache References",
      "Disable Processing for Inactive Nodes",
      "Off-screen enemies don't need _process every frame.",
      "6. GPU Optimization",
      "Reduce Draw Calls",
      "Shader Optimization",
      "Viewport and Resolution",
      "Particle Budgets",
      "7. Memory Optimization",
      "Monitor for Leaks",
      "Print resource counts periodically to detect leaks.",
      "Common Leak Patterns",
      "Texture Memory",
      "Check VRAM usage",
      "8. Physics Optimization",
      "Collision Layer Strategy",
      "Reduce Physics Body Count",
      "Physics Tick Rate",
      "9. Object Pooling",
      "Generic object pool for any PackedScene.",
      "Get an object from the pool. Returns null if pool is exhausted.",
      "Return an object to the pool.",
      "Pre-allocate objects.",
      "Usage",
      "10. Multithreading with WorkerThreadPool",
      "Safe Threading Rules",
      "Example: Threaded Pathfinding",
      "Runs A* pathfinding off the main thread.",
      "Example: Threaded Chunk Generation",
      "Generate world chunks without blocking the main thread.",
      "11. GDScript-Specific Optimizations",
      "Use Typed Variables",
      "Use PackedArrays for Large Data",
      "Avoid String Concatenation in Loops",
      "StringName for Frequent Comparisons",
      "12. Export and Platform Optimization",
      "Mobile-Specific Settings",
      "Web Export Settings",
      "Debug vs Release Performance",
      "13. External Profilers",
      "Using Tracy with Godot",
      "14. Common Mistakes",
      "Optimizing Without Profiling",
      "Premature Optimization",
      "Optimizing the Wrong Side",
      "Creating Nodes Every Frame",
      "Too Many `get_node()` Calls",
      "Using `_process` When `_physics_process` Suffices",
      "Forgetting to Disable Processing",
      "15. Optimization Checklist",
      "Quick Wins (< 5 minutes each)",
      "Medium Effort (30 min – 2 hours)",
      "Major Refactors (hours – days)",
      "Tuning Reference"
    ]
  },
  {
    "id": "godot-arch/G19",
    "title": "G19 — Custom Resources & Plugin Development",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 19529,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Custom Resources — Core Concepts",
      "Why Not Just Use Dictionaries or JSON?",
      "How Resources Work in Memory",
      "2. Defining a Custom Resource",
      "GDScript",
      "The item's display name shown in inventory UI.",
      "Base damage value before modifiers.",
      "Weight in kilograms — affects carry capacity.",
      "Item rarity tier for loot table weighting.",
      "Optional icon displayed in the inventory grid.",
      "Flavor text shown on hover.",
      "C#",
      "Creating Instances in the Editor",
      "3. The @export Annotation System",
      "Grouping Properties",
      "4. Resource Sharing and local_to_scene",
      "The Sharing Problem",
      "Solution: local_to_scene",
      "Solution: Explicit Duplication",
      "5. Nested and Composed Resources",
      "Typed Arrays of Resources",
      "6. Resource-Based Data Architecture",
      "Pattern: Config Database",
      "Pattern: Data Registry",
      "7. Security: Script Injection in Resources",
      "Mitigations",
      "8. Editor Plugins — Fundamentals",
      "Plugin File Structure",
      "plugin.cfg",
      "Main Plugin Script",
      "Enabling Your Plugin",
      "9. Custom Inspector Plugins",
      "10. Custom Dock Panels",
      "11. Import Plugins",
      "12. Distributing Plugins via AssetLib",
      "Preparing for Distribution",
      "Publishing to Godot AssetLib",
      "Plugin Testing Checklist",
      "Cheat Sheet",
      "Common Mistakes"
    ]
  },
  {
    "id": "godot-arch/G1",
    "title": "G1 — Scene Composition",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 15211,
    "sections": [
      "What This Guide Covers",
      "The Core Idea",
      "Designing Scenes: The Three Questions",
      "1. What is the physics behavior?",
      "2. What does it need to function?",
      "3. What reusable behaviors does it need?",
      "Building Component Scenes",
      "Health Component",
      "Hitbox Component (Deals Damage)",
      "Hurtbox Component (Receives Damage)",
      "Wiring Components Together",
      "Scene Organization in the File System",
      "Instancing Scenes at Runtime",
      "Spawning Enemies",
      "Spawning with Object Pooling",
      "Dynamic Scene Loading",
      "Composition vs Inheritance: Decision Guide",
      "Use Composition (Default)",
      "Use Scene Inheritance (Rarely)",
      "Never Use Deep Class Inheritance",
      "Common Composition Patterns",
      "The \"Entity\" Pattern (RPG/Action)",
      "The \"Interactable\" Pattern",
      "The \"Projectile\" Pattern",
      "The \"UI Panel\" Pattern",
      "Debugging Scene Composition",
      "Common Issues",
      "Remote Scene Tree",
      "Checklist: Is Your Scene Well-Composed?"
    ]
  },
  {
    "id": "godot-arch/G20",
    "title": "G20 — CI/CD & Export Pipelines",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 16287,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Export Fundamentals",
      "Export Templates",
      "Export Presets",
      "Rendering Methods and Platform Compatibility",
      "2. Export Presets and the CLI",
      "Command-Line Export",
      "Export Flags",
      "3. Platform-Specific Considerations",
      "Web (HTML5 / WebAssembly)",
      "Android",
      "iOS",
      "Desktop (Windows, macOS, Linux)",
      "4. Automated Testing with GdUnit4",
      "Installation",
      "Writing Tests",
      "Running Tests in CI",
      "5. GitHub Actions Pipeline",
      "Full Pipeline with godot-ci",
      "Import Step Explained",
      "6. GitLab CI Pipeline",
      "7. Deploying to Itch.io",
      "Using Butler (Itch.io CLI)",
      "CI Authentication",
      "8. Deploying to Steam",
      "9. Mobile Store Deployment",
      "Google Play (Android)",
      "Apple App Store (iOS)",
      "10. Versioning Strategy",
      "Semantic Versioning for Games",
      "Embedding Version in the Build",
      "11. Common Pipeline Failures",
      "Cheat Sheet",
      ".gitignore for Godot Projects"
    ]
  },
  {
    "id": "godot-arch/G21",
    "title": "G21 — Accessibility in Godot Games",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 22873,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Why Accessibility Matters for Games",
      "2. Screen Reader Support (Godot 4.5+)",
      "How It Works",
      "Enabling Screen Reader Support",
      "Custom Accessibility Bindings",
      "Best Practices for Screen Reader Compatibility",
      "3. Keyboard and Controller Navigation",
      "Focus Navigation",
      "Auto-Focus Management",
      "Focus Visuals",
      "4. Input Remapping",
      "Start listening for a new binding",
      "Save remapped bindings to a config file",
      "Load remapped bindings from config",
      "5. Visual Accessibility",
      "Colorblind-Safe Design",
      "Color palettes that work for each type",
      "Scalable UI",
      "High Contrast Mode",
      "6. Audio Accessibility",
      "Subtitle System",
      "Display a subtitle with optional speaker name and duration",
      "Visual Audio Cues",
      "Call this when a significant sound plays in the game world",
      "Separate Volume Controls",
      "7. Motor Accessibility",
      "Hold vs. Toggle",
      "Adjustable Timings",
      "Auto-Aim and Aim Assist",
      "8. Cognitive Accessibility",
      "Difficulty Settings",
      "Clear Objective Indicators",
      "9. Accessibility Options Menu",
      "10. Testing Your Game's Accessibility",
      "Manual Testing Checklist",
      "Automated Checks",
      "Community Resources",
      "Common Mistakes"
    ]
  },
  {
    "id": "godot-arch/G22",
    "title": "G22 — Mobile & Web Export",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 21463,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Platform Overview — What's Supported Where",
      "Language Choice for Cross-Platform",
      "2. Android Export Setup",
      "Prerequisites",
      "Project Settings",
      "Export Preset Configuration",
      "Signing for Release",
      "One-Click Deploy",
      "3. iOS Export Setup",
      "Requirements",
      "Export Workflow",
      "C# on iOS",
      "4. Web Export Setup",
      "How It Works",
      "Export Configuration",
      "Required HTTP Headers for Threaded Builds",
      "File Naming",
      "MIME Types",
      "5. Rendering Constraints by Platform",
      "Web Is Compatibility Only",
      "Choosing a Renderer for Mobile",
      "Renderer Feature Gaps",
      "6. Texture Compression for Mobile",
      "Why It Matters",
      "Enabling Mobile Texture Compression",
      "Compression Formats",
      "Texture Optimization Tips",
      "7. Touch Input Handling",
      "Input Events for Touch",
      "Making Desktop Input Work on Mobile",
      "Virtual Joystick Pattern",
      "Multi-Touch Tracking",
      "8. Screen Adaptation and Safe Areas",
      "Stretch Modes",
      "Safe Areas (Notches and Rounded Corners)",
      "Orientation Locking",
      "9. Mobile Performance Optimization",
      "Rendering Budget",
      "Key Optimization Techniques",
      "10. Web-Specific Limitations and Workarounds",
      "No Persistent File System",
      "No Raw Sockets",
      "Audio Autoplay Restrictions",
      "Browser Compatibility",
      "Memory Limits",
      "11. File Size Optimization",
      "Reducing Export Size",
      "Custom Export Templates",
      "12. Testing Workflows",
      "Android Testing",
      "iOS Testing",
      "Web Testing",
      "Cross-Platform Input Testing",
      "13. Common Mistakes",
      "Further Reading"
    ]
  },
  {
    "id": "godot-arch/G23",
    "title": "G23 — Advanced Physics: Jolt, Rapier & Custom Integrations",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 20331,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Physics Backend Landscape",
      "2. Jolt Physics — Built-In Alternative (4.4+)",
      "What Is Jolt?",
      "When to Use Jolt",
      "How to Enable Jolt",
      "Differences from Godot Physics 3D",
      "Known Limitations (4.4)",
      "Jolt-Specific Project Settings",
      "3. Rapier Physics — Community GDExtension",
      "What Is Rapier?",
      "Key Features",
      "Installation",
      "Enabling Rapier",
      "Rapier-Specific Features",
      "4. Choosing a Physics Backend",
      "Migration Checklist",
      "5. Physics Interpolation",
      "Enabling Physics Interpolation",
      "Per-Node Control",
      "When to Disable",
      "6. Continuous Collision Detection (CCD)",
      "Enabling CCD on RigidBody",
      "CCD Modes (2D)",
      "When CCD Isn't Enough",
      "7. Advanced Collision Layers and Masks",
      "Layer Strategy for Complex Games",
      "Configuring Layers and Masks",
      "Performance Tip",
      "8. Custom Physics Materials",
      "PhysicsMaterial Resource",
      "Friction Combine Modes",
      "Material Presets Pattern",
      "9. Deterministic Physics for Multiplayer",
      "Why Determinism Matters",
      "Godot Physics and Jolt Are Not Deterministic",
      "Rapier's Deterministic Mode",
      "Rollback with Rapier State Serialization",
      "10. Custom Physics via GDExtension",
      "Architecture",
      "Extension Approach",
      "Simpler Alternative: Physics Process Override",
      "11. Common Mistakes",
      "Further Reading"
    ]
  },
  {
    "id": "godot-arch/G24",
    "title": "G24 — Terrain & Open-World Techniques",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 26994,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Architecture of Large Worlds",
      "The Core Problem",
      "Key Architectural Concepts",
      "2. Terrain Solutions for Godot 4",
      "Decision Guide",
      "3. Terrain3D Plugin — Setup and Usage",
      "Installation",
      "Creating Terrain",
      "Key Properties",
      "Terrain Texturing",
      "Heightmap Import",
      "4. HTerrain Plugin — GDScript-Based Alternative",
      "Installation",
      "Creating Terrain",
      "Key Features",
      "Limitations",
      "5. Procedural Terrain with Shaders",
      "Heightmap Generation with Noise",
      "GPU-Based Terrain Displacement",
      "6. Chunk-Based World Streaming",
      "Core Streaming System",
      "Size of each chunk in world units",
      "How many chunks to keep loaded around the player (radius)",
      "How many chunks to unload beyond load_radius",
      "Maximum milliseconds per frame to spend on loading",
      "Async Loading with ResourceLoader",
      "Content Categories with Different Radii",
      "7. Level of Detail (LOD)",
      "Built-In Mesh LOD",
      "Controlling LOD Behavior",
      "Manual LOD for Complex Objects",
      "VisibilityRange (HLOD)",
      "8. Vegetation and Foliage Instancing",
      "MultiMeshInstance3D for Foliage",
      "Performance Tips for Foliage",
      "9. Navigation in Large Worlds",
      "Regional Navigation Meshes",
      "Navigation Updates on Streaming",
      "10. Lighting and Environment at Scale",
      "Outdoor Lighting Strategy",
      "Cascaded Shadow Maps",
      "Day/Night Cycle",
      "11. Performance Budgets for Open Worlds",
      "Target Budgets by Platform",
      "Profiling an Open World",
      "12. Common Mistakes",
      "Further Reading"
    ]
  },
  {
    "id": "godot-arch/G25",
    "title": "G25 — AI & Behavior Trees",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 28325,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Why Not Just State Machines?",
      "2. Behavior Tree Fundamentals",
      "3. Node Types — The Building Blocks",
      "Composite Nodes (have children)",
      "Decorator Nodes (one child, modify behavior)",
      "Leaf Nodes (no children, do the work)",
      "4. Blackboard — Sharing Data Between Tasks",
      "Blackboard Architecture",
      "Common Blackboard Keys",
      "5. Building a Minimal BT in GDScript",
      "Core Types",
      "Base Task",
      "Composite: Sequence",
      "Composite: Selector",
      "Example Action: Chase Target",
      "Example Condition: Can See Target",
      "Tree Runner",
      "6. LimboAI — Production-Grade Behavior Trees",
      "Installation",
      "Key Components",
      "Creating a Custom Action",
      "Creating a Custom Condition",
      "Blackboard Plans",
      "7. Beehave — GDScript-Native Behavior Trees",
      "Key Differences from LimboAI",
      "Tree Setup in Beehave",
      "Custom Beehave Action",
      "8. Common AI Patterns",
      "Patrol Pattern",
      "Alert & Investigate",
      "Coordinated Squad AI",
      "Boss Phase Transitions",
      "9. Utility AI — Scoring Decisions",
      "Scoring Functions",
      "Combining BT + Utility AI",
      "10. Goal-Oriented Action Planning (GOAP)",
      "Example GOAP Actions",
      "11. Integration with Navigation",
      "NavigationAgent2D in BT Actions",
      "Connecting Avoidance",
      "12. Performance Considerations",
      "Staggered Ticking",
      "LOD for AI",
      "13. Debugging AI",
      "Visual Debug Overlay",
      "LimboAI Visual Debugger",
      "Print-Based Debugging",
      "14. Common Mistakes & Fixes",
      "C# Equivalents",
      "Custom BT Task in C#",
      "Simple Utility AI in C#",
      "Decision Framework: Which AI System?"
    ]
  },
  {
    "id": "godot-arch/G26",
    "title": "G26 — Dialogue & Narrative Systems",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 30495,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Architecture Decisions",
      "Approaches Compared",
      "Key Design Questions",
      "2. Data-Driven Dialogue with Custom Resources",
      "Dialogue Line Resource",
      "Dialogue Choice Resource",
      "Conversation Resource",
      "3. Building a Minimal Dialogue System",
      "Dialogue Box UI",
      "Dialogue Trigger (Area-based)",
      "4. Typewriter Text Effect",
      "Advanced Typewriter with BBCode",
      "Inline Speed Tags",
      "5. Branching & Conditional Dialogue",
      "Graph-Based Dialogue Structure",
      "Condition Evaluation",
      "Evaluate simple conditions against game state",
      "Supports: \"has_key\", \"!has_key\", \"gold >= 50\", \"quest_stage == 3\"",
      "6. Dialogue Manager Addon",
      "Installation",
      "Dialogue File Syntax (.dialogue)",
      "Calling from GDScript",
      "Mutations (Dialogue → Game)",
      "7. Connecting Dialogue to Game State",
      "Signal-Based Event System",
      "Dialogue Triggering Game Events",
      "8. Portrait & Expression Systems",
      "Portrait Resource",
      "Expression Switching in Dialogue",
      "9. Voice Acting & Audio Integration",
      "Per-Line Voice Clips",
      "Syncing Typewriter to Voice",
      "Text Barks (No Full Voice Acting)",
      "10. Localization",
      "Using Godot's Built-In TranslationServer",
      "CSV Translation File",
      "Dialogue Manager Localization",
      "11. Quest & Journal Integration",
      "Quest Resource",
      "Dialogue-Driven Quest Progression",
      "12. Save/Load for Dialogue State",
      "Tracking Visited Dialogue",
      "13. Performance & Best Practices",
      "Dialogue Tree Testing",
      "14. Common Mistakes & Fixes",
      "C# Equivalents",
      "Dialogue Line Resource in C#",
      "Minimal Dialogue Box in C#"
    ]
  },
  {
    "id": "godot-arch/G27",
    "title": "G27 — Dedicated Servers & Advanced Networking",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 35359,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Networking Architecture Decisions",
      "Decision Tree",
      "2. Headless Dedicated Server",
      "Export as Dedicated Server",
      "Command-Line Launch",
      "Server Entry Point",
      "Server Configuration via Command Line",
      "3. Server-Only and Client-Only Code Separation",
      "Feature Tags",
      "Scene Stripping",
      "Server Tick Loop",
      "4. ENet Deep Dive",
      "Channel Configuration",
      "Transfer Modes Per-Channel",
      "Connection Quality Monitoring",
      "Timeout Configuration",
      "5. WebSocket Transport",
      "Server: Accept WebSocket Clients",
      "Client: Connect via WebSocket",
      "Dual Transport: ENet + WebSocket",
      "6. WebRTC Peer-to-Peer",
      "How WebRTC Connection Works",
      "WebRTC Multiplayer Peer",
      "STUN vs TURN",
      "7. Signaling Server for WebRTC",
      "Node.js Signaling Server",
      "8. Relay Server Architecture",
      "9. Matchmaking",
      "Simple Lobby-Based Matchmaking",
      "Skill-Based Matchmaking",
      "10. Authentication & Security",
      "Token-Based Authentication",
      "11. Anti-Cheat Patterns",
      "Server-Authoritative Validation",
      "Rate Limiting RPCs",
      "Movement Validation",
      "12. Cloud Deployment",
      "Docker Container",
      "Docker Compose for Development",
      "Cloud Platform Options",
      "13. Scaling & Load Balancing",
      "Multiple Server Instances",
      "Health Reporting",
      "14. Monitoring & Diagnostics",
      "Server Performance Logging",
      "Per-Player Network Stats",
      "15. Common Mistakes & Fixes",
      "C# Equivalents",
      "Headless Server Entry in C#",
      "WebSocket Client in C#"
    ]
  },
  {
    "id": "godot-arch/G28",
    "title": "G28 — Localization & Internationalization",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 20655,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Core Concepts",
      "2. Project Setup",
      "Enable localization in Project Settings",
      "Recommended directory structure",
      "GDScript — mark strings from the start",
      "C# — equivalent usage",
      "3. The tr() Function",
      "Basic usage",
      "Key vs. natural language keys",
      "Scene-level translation",
      "4. CSV Translation Files",
      "File format",
      "Importing",
      "Tips for managing CSV translations",
      "5. Gettext / PO Files",
      "Why gettext over CSV?",
      "Workflow",
      "Example .po file",
      "Extracting strings",
      "6. TranslationServer API",
      "Key methods",
      "C# equivalent",
      "7. Runtime Locale Switching",
      "Language selection menu",
      "Detecting system locale",
      "8. Right-to-Left & Bidirectional Text",
      "Enabling RTL on UI controls",
      "BiDi considerations",
      "9. Font Fallback Chains",
      "Setting up fallbacks",
      "Best practice: use SystemFont for broad coverage",
      "Font size considerations by script",
      "10. Pluralization & Context",
      "Pluralization with gettext",
      "Context for disambiguation",
      "11. Translating Non-Text Assets",
      "Using remaps",
      "Programmatic remap",
      "12. Integration with External Services",
      "Crowdin / Lokalise / Transifex workflow",
      "Automation with CI/CD",
      "13. Testing Localization",
      "Pseudolocalization",
      "What to test",
      "14. Common Mistakes & Fixes",
      "Quick Reference"
    ]
  },
  {
    "id": "godot-arch/G29",
    "title": "G29 — Testing & Quality Assurance",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 20844,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Testing Philosophy for Games",
      "2. Framework Comparison: GUT vs GdUnit4",
      "3. Setting Up GUT",
      "Install from AssetLib",
      "Directory structure",
      "GUT configuration (`.gutconfig.json`)",
      "4. Setting Up GdUnit4",
      "Install from AssetLib",
      "Directory structure",
      "5. Writing Your First Test",
      "GUT — test a damage formula",
      "GdUnit4 — same test, fluent API",
      "6. Unit Testing Game Logic",
      "Testing an inventory system",
      "Testing a crafting recipe validator",
      "7. Scene Testing",
      "GdUnit4 scene runner",
      "GUT scene testing",
      "8. Testing Signals",
      "GdUnit4 signal assertions",
      "GUT signal testing",
      "9. Testing State Machines",
      "10. Mocking & Test Doubles",
      "GdUnit4 mocking",
      "GUT doubling",
      "11. Testing Input",
      "GdUnit4 input simulation",
      "12. Testing with Physics",
      "13. Test Organization & Naming",
      "Naming convention",
      "Recommended project structure",
      "Running tests",
      "14. Test-Driven Development Workflow",
      "Example: TDD a health component",
      "15. C# Testing with GdUnit4Net",
      "16. Common Mistakes & Fixes",
      "Quick Reference"
    ]
  },
  {
    "id": "godot-arch/G2",
    "title": "G2 — State Machines",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 38271,
    "sections": [
      "What This Guide Covers",
      "When to Use Each Pattern",
      "Pattern 1: Enum FSM",
      "When Enum FSM Breaks Down",
      "Pattern 2: Node-Based FSM",
      "Scene Tree",
      "Base State Class",
      "Reference to the state machine managing this state.",
      "Reference to the character body (set automatically by StateMachine).",
      "Reference to the animation player (set automatically by StateMachine).",
      "Called when this state becomes active.",
      "Called when this state is replaced by another.",
      "Called every frame while this state is active. Return a State to transition.",
      "Called every physics frame while active. Return a State to transition.",
      "Called for unhandled input while active. Return a State to transition.",
      "State Machine Manager",
      "Assign in the inspector — which state starts active.",
      "The currently active state. Read-only externally.",
      "Emitted on every transition for debugging and analytics.",
      "Force a transition from outside (e.g., damage triggers Hurt state).",
      "Concrete State Examples",
      "Coyote time — allow jumping for a few frames after leaving a ledge.",
      "Wiring States in the Inspector",
      "Pattern 3: Hierarchical State Machine (HSM)",
      "Scene Tree",
      "Hierarchical Base State",
      "The currently active child state (only for parent states).",
      "Default child to enter when this parent state is entered.",
      "Parent State: Grounded",
      "Parent State: Airborne",
      "HSM Manager",
      "Get the deepest active state name for debugging.",
      "HSM Benefit Summary",
      "Pattern 4: Pushdown Automaton (State Stack)",
      "The Stack Concept",
      "Implementation",
      "Called when this state becomes the top of the stack (entered or resumed).",
      "Called when this state is removed from the stack.",
      "Called when a state above this one is popped — we're active again.",
      "Called when a new state is pushed on top — we're paused.",
      "Push a new state onto the stack. Current state is paused.",
      "Pop the top state. Previous state resumes.",
      "Replace the top state without affecting states below.",
      "Check current active state name.",
      "Check if a specific state is anywhere in the stack.",
      "Get the stack depth.",
      "Usage: Game Flow",
      "Debugging State Machines",
      "Debug Overlay",
      "Transition History",
      "Print the last N transitions to the console.",
      "State Machine + Animation Integration",
      "Animation State Sync",
      "The animation to play when entering this state.",
      "If empty, uses the node name in snake_case (e.g., \"WallSlide\" → \"wall_slide\").",
      "Blend time for smooth animation transitions.",
      "Waiting for Animation to Finish",
      "Combining Patterns: Character FSM + Game Flow Stack",
      "Common Mistakes",
      "1. Checking State from Outside",
      "2. Circular Transitions",
      "3. Forgetting Exit Cleanup",
      "4. Physics in `_process`, Logic in `_physics_process`",
      "5. God States",
      "State Machine Anti-Patterns in Godot",
      "Don't Use AnimationTree as a State Machine",
      "Don't Store State as Strings",
      "Real-World Example: Enemy AI State Machine",
      "Performance Considerations",
      "Choosing Your Pattern: Decision Flowchart",
      "File Organization",
      "What's Next"
    ]
  },
  {
    "id": "godot-arch/G30",
    "title": "G30 — Advanced Animation & Inverse Kinematics",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 23639,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. AnimationTree Deep Dive",
      "Node types",
      "Nested state machines",
      "Transition types",
      "2. Advanced Blend Spaces",
      "BlendSpace2D for 8-direction movement",
      "Placing animations in 2D space",
      "BlendSpace1D for speed interpolation",
      "3. Animation Layers & Masking",
      "Setting up in AnimationTree",
      "OneShot for temporary overlays",
      "4. Root Motion in Practice",
      "Enabling root motion",
      "C# equivalent",
      "5. SkeletonModifier3D Architecture",
      "Class hierarchy (as of Godot 4.6)",
      "How modifiers compose",
      "Enabling/disabling at runtime",
      "6. LookAt & Aim Modifiers",
      "LookAtModifier3D (4.4+)",
      "AimModifier3D (4.5+)",
      "7. Inverse Kinematics: The Solver Suite",
      "8. TwoBoneIK3D — Limb IK",
      "Setup",
      "Pole vector (knee/elbow direction)",
      "GDScript: dynamic hand IK",
      "C# equivalent",
      "9. FABRIK3D — Chain IK",
      "Setup",
      "Key properties",
      "When to use FABRIK vs CCDIK",
      "10. Foot Placement on Uneven Ground",
      "Smoothing IK transitions",
      "11. Spring Bones & Secondary Motion",
      "Setup",
      "Typical use cases",
      "12. Animation Retargeting",
      "Use case",
      "Setup",
      "13. Procedural Animation Techniques",
      "Look-at with body lean",
      "Breathing animation",
      "14. Combining Authored + Procedural Animation",
      "Blending IK influence",
      "15. Performance Considerations",
      "Optimization tips",
      "16. Common Mistakes & Fixes",
      "Migrating from SkeletonIK3D",
      "Quick Reference"
    ]
  },
  {
    "id": "godot-arch/G31",
    "title": "G31 — Advanced 3D Shaders & Compute Shaders",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 29200,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Spatial Shader Architecture",
      "Built-in Variable Categories",
      "2. Render Modes Reference",
      "Lighting & Shading Modes",
      "Depth & Culling",
      "Blending & Transparency",
      "Other",
      "3. Vertex Shader Techniques",
      "Wind Animation for Vegetation",
      "Vertex Displacement with Height Maps",
      "Mesh Explosion Effect",
      "4. Fragment Shader & PBR Overrides",
      "Triplanar Mapping (Texture Without UVs)",
      "Dissolve Effect (3D)",
      "Subsurface Scattering (Skin, Wax, Leaves)",
      "5. Custom Light Functions",
      "Toon / Cel Shading",
      "Rim Lighting in Light Function",
      "6. Volumetric Fog & Fog Shaders",
      "Enabling Volumetric Fog",
      "Custom Fog Shader",
      "7. Compute Shader Fundamentals",
      "When to Use Compute Shaders",
      "When NOT to Use Compute Shaders",
      "GLSL Compute Shader Structure",
      "8. RenderingDevice API Walkthrough",
      "Step-by-Step: Running a Compute Shader from GDScript",
      "C# Equivalent (Key Differences)",
      "9. Compute Shader Patterns",
      "Pattern: GPU Boid Simulation",
      "Pattern: Compute Texture Generation",
      "10. Integrating Compute Output with Rendering",
      "Method 1: Storage Buffer → MultiMesh",
      "Method 2: Compute Image → Shader Texture",
      "11. Performance Considerations",
      "Work Group Sizing",
      "Avoiding GPU Stalls",
      "Memory Alignment",
      "12. Common Mistakes",
      "Spatial Shaders",
      "Compute Shaders",
      "Further Reading"
    ]
  },
  {
    "id": "godot-arch/G32",
    "title": "G32 — Inventory & Crafting Systems",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 32316,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Architecture Decisions",
      "Resources vs Dictionaries",
      "Signal-Driven vs Polling",
      "2. Item Data Model",
      "Item Definition Resource",
      "Unique identifier — use for lookups, save/load, crafting recipes",
      "Display",
      "Categorization",
      "Stacking",
      "Weight / value",
      "Equipment specifics (only relevant if category == \"Equipment\")",
      "Optional: scene to spawn in world",
      "C# Equivalent",
      "Item Instance (Runtime State)",
      "Convenience accessors",
      "3. Inventory Container",
      "--- Core Operations ---",
      "--- Query Helpers ---",
      "4. Slot-Based Inventory",
      "Item Database (Registry)",
      "Autoload this as \"ItemDB\"",
      "5. Grid-Based Inventory",
      "Defining Item Shapes",
      "6. Stacking, Weight & Capacity",
      "Weight Limit System",
      "Stack Splitting",
      "7. Inventory UI",
      "Slot UI Component",
      "Inventory Panel (Grid of Slots)",
      "8. Drag & Drop",
      "9. Equipment & Stats",
      "Slot name → equipped ItemInstance",
      "10. Crafting System",
      "Recipe Resource",
      "Inputs: Array of {item_id: StringName, quantity: int}",
      "Outputs: Array of {item_id: StringName, quantity: int}",
      "Optional: required crafting station",
      "Optional: time to craft (0 = instant)",
      "Optional: required player skill level",
      "Crafting Manager",
      "11. Loot Tables",
      "12. Save/Load Integration",
      "Integration with G11 Save System",
      "13. Performance at Scale",
      "14. Common Mistakes",
      "Further Reading"
    ]
  },
  {
    "id": "godot-arch/G33",
    "title": "G33 — XR & VR Development",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 29141,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. XR Architecture in Godot",
      "2. Project Setup",
      "Step 1: Enable OpenXR",
      "Step 2: Rendering Settings for VR",
      "Step 3: Startup Script",
      "C# Startup",
      "3. Core XR Nodes",
      "Scene Tree Structure",
      "Node Roles",
      "Setting Up in Code",
      "4. Controller Input",
      "OpenXR Action Map",
      "Reading Input",
      "Signal-Based Input",
      "5. Hand Tracking",
      "Checking Hand Tracking Availability",
      "Reading Hand Joint Positions",
      "Key Hand Joints",
      "Pinch Gesture Detection",
      "6. Interaction Patterns",
      "Grab / Pick Up Objects",
      "Ray Pointer (For UI and Distant Selection)",
      "7. Locomotion",
      "Smooth Locomotion (Thumbstick)",
      "Snap Turn (Comfort Option)",
      "Teleport Locomotion",
      "8. XR User Interface",
      "World-Space UI Panel",
      "Renders a Control scene onto a 3D quad that responds to pointer interaction",
      "Called by the XR pointer system when the ray hits this panel",
      "Best Practices for VR UI",
      "9. AR & Passthrough",
      "Enabling Passthrough (Meta Quest)",
      "Mixed Reality Scene Setup",
      "10. Performance for VR",
      "Target Frame Rates",
      "Optimization Checklist",
      "Godot-Specific VR Performance Settings",
      "11. Deploying to Headsets",
      "Meta Quest (Android APK)",
      "SteamVR (PC)",
      "Tips for Both Platforms",
      "12. Common Mistakes",
      "Further Reading"
    ]
  },
  {
    "id": "godot-arch/G34",
    "title": "G34 — Threading, Async Loading, and Background Tasks",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 20549,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Concurrency Model Overview",
      "2. Coroutines and Await",
      "Awaiting Signals",
      "Awaiting Timers",
      "Awaiting Another Coroutine",
      "Key Rules",
      "3. Background Resource Loading",
      "Basic Usage",
      "Loading Multiple Resources",
      "Caveats",
      "4. WorkerThreadPool",
      "Single Task",
      "Group Task (Parallel Batches)",
      "Checking Completion Without Blocking",
      "5. Manual Threads",
      "6. Mutexes and Semaphores",
      "Mutex",
      "Semaphore",
      "7. Thread-Safety Rules",
      "What You CAN Do from Worker Threads",
      "What You CANNOT Do from Worker Threads",
      "Passing Results Back to Main Thread",
      "8. Pattern: Loading Screen with Progress",
      "9. Pattern: Chunked World Generation",
      "10. Pattern: Parallel Enemy Processing",
      "11. C# Equivalents",
      "Background Loading",
      "WorkerThreadPool",
      "Manual Thread with Task",
      "12. Common Mistakes"
    ]
  },
  {
    "id": "G35",
    "title": "G35 — Editor Tool Scripts & Plugin Development",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 15589,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. @tool Scripts — Running Code in the Editor",
      "When to Use @tool",
      "When NOT to Use @tool",
      "2. Safety: What Runs and When",
      "Guard with Engine.is_editor_hint()",
      "Guard with @export Setter",
      "The _ready() Trap",
      "3. EditorPlugin Fundamentals",
      "File Structure",
      "plugin.cfg",
      "Main Plugin Script",
      "Enabling the Plugin",
      "4. Custom Inspector Properties",
      "Custom EditorProperty",
      "5. Custom Bottom Panel / Dock",
      "Dock Positions",
      "6. Editor Gizmos",
      "7. EditorScript for Batch Operations",
      "8. Exporting and Distributing Plugins",
      "Asset Library Structure",
      "Tips for Distribution",
      "Using EditorUndoRedoManager",
      "9. C# Plugin Development",
      "10. Common Mistakes"
    ]
  },
  {
    "id": "G36",
    "title": "G36 — Compositor Effects & Custom Render Passes",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 21403,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. How the Compositor Works",
      "2. Pipeline Stages",
      "3. Setting Up a Compositor",
      "Via WorldEnvironment (Global)",
      "Via Camera3D (Per-Camera)",
      "In Code",
      "4. Creating a CompositorEffect",
      "5. Accessing Render Buffers",
      "6. Example: Grayscale Post-Process",
      "The GLSL Compute Shader",
      "The GDScript Effect",
      "Using It",
      "7. Example: Edge Detection with Depth",
      "8. Example: Custom Compute Shader Pass",
      "9. Push Constants and Uniforms",
      "Push Constants",
      "UniformSetCacheRD",
      "10. Performance Considerations",
      "Resolution-Aware Dispatching",
      "11. C# Implementation",
      "12. Common Mistakes"
    ]
  },
  {
    "id": "G37",
    "title": "G37 — Scene Management, Transitions & Loading Screens",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 15746,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Scene Switching Fundamentals",
      "preload vs load",
      "2. The SceneManager Autoload Pattern",
      "Setup",
      "Implementation",
      "Usage from anywhere",
      "3. Async Loading with Progress",
      "The Three-Step Pattern",
      "Important Rules",
      "4. Transition Animations",
      "Simple Fade (ColorRect)",
      "Shader-Based Transitions (Dissolve, Wipe, Circle)",
      "5. Additive Scene Loading",
      "Sub-Level Streaming",
      "6. Passing Data Between Scenes",
      "Autoload (Global State)",
      "Scene Metadata via meta",
      "Typed Dictionaries (Godot 4.4+)",
      "7. Pattern: Full Loading Screen",
      "Integrating with SceneManager",
      "8. C# Equivalents",
      "Async Loading in C#",
      "9. Common Mistakes"
    ]
  },
  {
    "id": "G38",
    "title": "G38 — Game Feel & Juice Patterns",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 17945,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. The Juice Toolkit",
      "2. Screen Shake (Trauma System)",
      "Camera Script",
      "Maximum horizontal/vertical shake in pixels",
      "Maximum rotation shake in radians",
      "How quickly trauma decays (per second)",
      "Power curve: 2 = quadratic (smooth), 3 = cubic (punchier)",
      "Triggering Shake",
      "3. Hitstop / Freeze Frames",
      "Engine.time_scale Approach",
      "Freeze the game for `duration` seconds, then resume.",
      "Per-Node Approach (More Control)",
      "Slow-Motion Variant",
      "Slow time to `scale` for `duration` real seconds, then ease back.",
      "4. Squash and Stretch",
      "The sprite node to deform",
      "Squash on land (wide + short)",
      "Stretch on jump (tall + narrow)",
      "Generic punch-scale (good for pickups, UI elements)",
      "Integration with Character Controller",
      "5. Tweens for Everything",
      "Chaining and Parallel Execution",
      "Ease and Transition Types",
      "Flash on Hit",
      "Flash a sprite white for a brief moment",
      "Alternatively, use a shader for a true white-out effect:",
      "Damage Number Pop-Up",
      "6. Impact Effects Stack",
      "Call this for any combat hit. Customize parameters per weapon/attack.",
      "7. UI Juice",
      "Health Bar with Delayed Drain",
      "Button Hover Bounce",
      "8. Chromatic Aberration and Post-Processing Pulses",
      "9. C# Equivalents",
      "Trauma-Based Screen Shake",
      "Hitstop",
      "10. Guidelines: How Much Juice?",
      "11. Common Mistakes"
    ]
  },
  {
    "id": "G39",
    "title": "G39 — Scalable Architecture & Object Pooling",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 19968,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. When Godot's Defaults Stop Scaling",
      "2. Object Pooling",
      "Generic Pool",
      "The scene to pool",
      "Initial pool size",
      "Maximum pool growth (-1 = unlimited)",
      "Get a node from the pool. Returns null if max_size reached.",
      "Return a node to the pool for reuse.",
      "How many nodes are currently in use.",
      "Pooled Bullet Example",
      "Usage from a Weapon",
      "When to Pool vs. When to Instantiate",
      "3. The Component Pattern",
      "Component Structure",
      "Health Component",
      "Hurtbox Component",
      "The HealthComponent to forward damage to",
      "Invincibility frames duration (0 = no i-frames)",
      "Why Components?",
      "4. Service Locator vs Autoloads",
      "The Problem with Autoloads at Scale",
      "Service Locator Pattern",
      "Registration",
      "Usage",
      "5. Entity Spawner / Manager Pattern",
      "Bulk operations — run on all active enemies",
      "6. Data-Oriented Techniques",
      "Parallel Arrays for Bulk Processing",
      "MultiMesh for Rendering",
      "7. Signal Bus (Event Bus)",
      "Game events",
      "UI events",
      "Emitting Events",
      "Listening for Events",
      "8. C# Equivalents",
      "Object Pool",
      "Component Pattern with Interfaces",
      "9. Architecture Decision Guide",
      "When NOT to Over-Architect",
      "10. Common Mistakes"
    ]
  },
  {
    "id": "godot-arch/G3",
    "title": "G3 — Signal Architecture",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 19701,
    "sections": [
      "Table of Contents",
      "1. Why Signals Matter",
      "The Coupling Problem",
      "The Signal Solution",
      "When to Use Each",
      "2. Signal Fundamentals",
      "2.1 Declaring & Emitting",
      "2.2 Connecting in Code",
      "2.3 Editor Connections",
      "2.4 Key Built-in Signals",
      "3. Connection Patterns",
      "3.1 Lambda Connections",
      "3.2 One-Shot & Deferred",
      "3.3 Binding Extra Arguments",
      "3.4 Awaiting Signals",
      "3.5 Disconnecting",
      "4. The Signal Bus",
      "4.1 Why You Need One",
      "4.2 Implementation",
      "4.3 Usage",
      "4.4 Bus vs Direct Signals",
      "5. Groups — Broadcast Without Wiring",
      "5.1 Basics",
      "5.2 Groups as Game Logic Tags",
      "5.3 Communication Method Comparison",
      "6. Advanced Signal Patterns",
      "6.1 Signal Relay (Facade)",
      "6.2 Typed Event Objects",
      "6.3 Reactive Data Model",
      "6.4 Async Signal Chains (Cutscenes)",
      "7. Anti-Patterns & Debugging",
      "7.1 Signal Spaghetti",
      "7.2 Signal Ping-Pong",
      "7.3 God Signal Bus",
      "7.4 Performance Characteristics",
      "7.5 Debug Signal Log",
      "8. Architecture Decision Guide",
      "8.1 Decision Tree",
      "8.2 Scaling by Project Size",
      "8.3 Migration: Direct References → Signals",
      "8.4 Migration: Inheritance → Signal Composition",
      "8.5 Quick Reference"
    ]
  },
  {
    "id": "G40",
    "title": "G40 — 2D Lighting, Shadows & Normal Maps",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 21867,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. How 2D Lighting Works in Godot",
      "2. PointLight2D — Local Light Sources",
      "Basic Setup",
      "GDScript — Configuring a Point Light",
      "Light Texture Tips",
      "3. DirectionalLight2D — Global Lighting",
      "DirectionalLight2D Properties",
      "4. Light Textures & Energy",
      "Energy and Overbright",
      "Height Property",
      "5. Shadows with LightOccluder2D",
      "Setting Up Occluders",
      "Occluder on TileMapLayers",
      "Shadow Properties",
      "Shadow Filter Smooth Property",
      "6. Normal Maps & CanvasTexture",
      "How Normal Maps Work in 2D",
      "Applying Normal Maps with CanvasTexture",
      "Creating Normal Maps",
      "Normal Map Orientation Gotcha",
      "7. Specular Highlights",
      "8. Light Masks & Item Masks",
      "How Masks Work",
      "9. Blend Modes & Color Effects",
      "10. SDF (Signed Distance Field) Shadows",
      "SDF Functions Available in Shaders",
      "11. CanvasModulate for Ambient Darkness",
      "12. Dynamic Lighting Patterns",
      "Flickering Torch",
      "Pulsing Pickup Glow",
      "Muzzle Flash",
      "13. Performance Optimization",
      "Light Count Budget",
      "Optimization Techniques",
      "14. C# Equivalents",
      "15. Common Mistakes"
    ]
  },
  {
    "id": "G41",
    "title": "G41 — Godot 4.4–4.6 Feature Guide",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 18644,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Typed Dictionaries (4.4)",
      "Syntax",
      "Type Safety",
      "When to Use Typed Dictionaries",
      "C# Equivalent",
      "2. @export_tool_button (4.4)",
      "Basic Usage",
      "Practical Examples",
      "Warning Suppression (4.4)",
      "3. Async Navigation Maps (4.4)",
      "What Changed",
      "Impact",
      "4. Runtime WAV Loading (4.4)",
      "5. Stencil Buffer (4.5)",
      "How It Works",
      "Renderer Support",
      "Usage in Spatial Shaders",
      "6. Shader Baker (4.5)",
      "The Problem",
      "The Solution",
      "Performance Impact",
      "When to Use",
      "7. Screen Reader Accessibility (4.5)",
      "For Game Developers",
      "8. Jolt Physics as Default (4.6)",
      "What is Jolt?",
      "Migration Considerations",
      "Switching Between Engines",
      "9. IKModifier3D — Inverse Kinematics Returns (4.6)",
      "Architecture",
      "Basic Setup",
      "Key Features",
      "10. LibGodot — Engine Embedding (4.6)",
      "Use Cases",
      "How It Works",
      "11. ObjectDB Snapshots & Diffing (4.6)",
      "What It Solves",
      "How to Use",
      "Programmatic Access",
      "12. Modern Editor Theme & Dock Rewrite (4.6)",
      "13. Other Notable Changes",
      "4.4",
      "4.5",
      "4.6",
      "14. Migration Checklist",
      "From 4.3 → 4.4",
      "From 4.4 → 4.5",
      "From 4.5 → 4.6"
    ]
  },
  {
    "id": "G42",
    "title": "G42 — Platform Integration & Steamworks",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 23287,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Platform Integration Architecture",
      "2. Installing GodotSteam (GDExtension)",
      "Installation Steps",
      "3. Initializing Steam",
      "steamInitEx vs steamInit",
      "4. The Callback Loop",
      "5. Achievements & Statistics",
      "Setup in Steamworks Dashboard",
      "Unlocking Achievements",
      "Tracking Statistics",
      "Stat-Based Achievements",
      "6. Leaderboards",
      "Finding a Leaderboard",
      "Uploading Scores",
      "Downloading Scores",
      "7. Cloud Saves (Remote Storage)",
      "Setup",
      "Writing Save Data",
      "Conflict Resolution",
      "8. Rich Presence",
      "Setup",
      "Setting Rich Presence",
      "Localization File Format",
      "9. Steam Overlay",
      "Opening Specific Overlay Pages",
      "10. Steam Input (Controller Support)",
      "11. Workshop / UGC Integration",
      "12. Testing & Debugging",
      "Testing Without Steam",
      "Using Spacewar (App ID 480)",
      "Common Debug Steps",
      "13. Export & Release Checklist",
      "14. Platform Abstraction Layer",
      "15. Other Storefronts (Epic, GOG, itch.io)",
      "Epic Games Store",
      "GOG Galaxy",
      "itch.io",
      "Console (Nintendo Switch, PlayStation, Xbox)",
      "16. C# Equivalents",
      "Option A: GodotSteam (GDExtension — works from C#)",
      "Option B: Steamworks.NET (native C# wrapper)",
      "17. Common Mistakes"
    ]
  },
  {
    "id": "G43",
    "title": "G43 — Rollback Netcode & Deterministic Multiplayer",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 21179,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Why Rollback Over Delay-Based",
      "2. How Rollback Works",
      "3. Choosing an Addon",
      "Godot Rollback Netcode (by Snopek Games)",
      "Delta Rollback (by BimDav)",
      "4. Setting Up Godot Rollback Netcode (Snopek)",
      "Installation",
      "Project Configuration",
      "Network Layer",
      "5. Core Concepts: SyncManager, Ticks, and Input",
      "SyncManager",
      "Virtual Methods",
      "Registration",
      "6. State Serialization",
      "What to Serialize",
      "Custom HashSerializer",
      "Performance Tips",
      "7. Deterministic Game Logic",
      "Common Determinism Pitfalls",
      "NetworkRandomNumberGenerator",
      "Fixed Timestep",
      "8. Input Prediction and Misprediction",
      "Default Prediction Strategy",
      "Improving Predictions",
      "Handling Mispredictions Gracefully",
      "9. Input Delay and Interpolation",
      "Input Delay",
      "Visual Interpolation",
      "10. Spawning and Despawning",
      "11. Timers, Animation, and Sound",
      "NetworkTimer",
      "NetworkAnimationPlayer",
      "Sound",
      "12. Debugging Mismatches",
      "Hash Mismatches",
      "Log Inspector",
      "Common Desync Sources",
      "13. Delta Rollback (Alternative Addon)",
      "14. Production Considerations",
      "Lobby and Matchmaking",
      "Bandwidth",
      "Maximum Supported Players",
      "Testing",
      "15. C# Equivalents",
      "16. Common Mistakes"
    ]
  },
  {
    "id": "G44",
    "title": "G44 — Version Control Best Practices for Godot Projects",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 16915,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Why Git Needs Special Setup for Godot",
      "2. Initial Repository Setup",
      "From Scratch",
      "From an Existing Project (No Git Yet)",
      "From an Existing Project (Already Has Git, Adding LFS)",
      "3. The .gitignore File",
      "Recommended .gitignore for Godot 4.x",
      "What NOT to Ignore",
      "4. The .gitattributes File",
      "Recommended .gitattributes",
      "Why `.tscn` and `.tres` Are Marked as Text",
      "5. Git LFS for Binary Assets",
      "Why LFS Matters",
      "Setting Up LFS",
      "LFS Hosting",
      "When NOT to Use LFS",
      "6. Understanding Godot's File Formats",
      "UIDs in Godot 4.x",
      "7. Merge Conflicts in Scene Files",
      "Prevention",
      "Resolution",
      "File Locking (GitLab / GitHub)",
      "8. Team Workflow Patterns",
      "Small Team (2–5 People)",
      "Medium Team (5–15 People)",
      "Large Team (15+)",
      "9. Branching Strategies for Game Dev",
      "Recommended: Simplified Git Flow",
      "Tags for Builds",
      "10. Godot's Built-In VCS Integration",
      "11. C# / .NET Considerations",
      "NuGet Restore in CI",
      "12. CI Integration",
      "13. Common Mistakes"
    ]
  },
  {
    "id": "G45",
    "title": "G45 — Advanced GDScript Patterns",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 24636,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Static Typing as a Development Strategy",
      "Why Bother",
      "Type Everything That Matters",
      "Return Type Annotations",
      "Type Inference with `:=`",
      "2. Typed Collections: Arrays and Dictionaries",
      "Typed Arrays (Godot 4.0+)",
      "Typed Dictionaries (Godot 4.4+)",
      "When to Use Which",
      "3. Lambdas and First-Class Functions",
      "Basic Lambdas",
      "Lambdas with Collection Methods",
      "Named Lambdas for Debugging",
      "Capturing Variables",
      "Connecting Signals with Lambdas",
      "4. Coroutines and Await",
      "Awaiting Signals",
      "Awaiting Other Coroutines",
      "Awaiting Timers",
      "Parallel Coroutines",
      "Coroutine Gotchas",
      "5. Custom Annotations and Metadata",
      "Export Annotations",
      "@export_tool_button (Godot 4.4+)",
      "@onready",
      "6. The Signal Bus Pattern",
      "When to Use Signals vs. Direct Calls",
      "7. Resource-Based Data Objects",
      "Nested Resources",
      "8. Command Pattern",
      "9. Object Pooling in GDScript",
      "10. Builder and Configuration Patterns",
      "Fluent Builder",
      "11. Error Handling Patterns",
      "Assert for Development, Guard for Production",
      "Result Pattern (for operations that can fail)",
      "12. Enum-Driven Architecture",
      "Flags with Enums",
      "13. Static Typing Enforcement",
      "Project-Wide Enforcement",
      "Gradual Adoption",
      "14. C# Equivalents",
      "15. Common Mistakes"
    ]
  },
  {
    "id": "G46",
    "title": "G46 — Modding Support & User-Generated Content",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 17738,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Modding Architecture Overview",
      "Filesystem Paths",
      "2. PCK Resource Packs",
      "Creating a PCK Programmatically",
      "Loading a PCK at Runtime",
      "ModLoader.gd — Autoload singleton for managing mods",
      "C# Equivalent",
      "Important: Override Behavior",
      "3. Loading Loose Files at Runtime",
      "Images",
      "Audio (WAV)",
      "3D Models (glTF)",
      "JSON Data Files",
      "4. Designing a Mod Interface",
      "Mod Manifest",
      "Mod Entry Point",
      "mod_base.gd — Base class for all mod entry points",
      "Called when the mod is first loaded. Register content here.",
      "Called when the mod is being unloaded. Clean up here.",
      "Return mod metadata as a Dictionary.",
      "Registration Pattern",
      "In your game's item registry (autoload)",
      "5. Mod Discovery and Load Order",
      "Scan a directory for mod packs or folders",
      "6. Conflict Resolution",
      "Additive merging for item mods — last writer wins on individual fields",
      "7. Security Considerations",
      "Threat Model",
      "Best Practices",
      "Validate mod data before using it",
      "8. Mod Configuration and Metadata",
      "mod_config.gd — Persistent per-mod settings",
      "9. Distributing Mod Tools",
      "10. C# Considerations",
      "11. Common Mistakes"
    ]
  },
  {
    "id": "G47",
    "title": "G47 — RenderingServer & Low-Level Graphics",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 20302,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. When to Use RenderingServer",
      "2. Core Concepts: RIDs and Server Architecture",
      "RIDs (Resource IDs)",
      "Server Threading Model",
      "3. 2D Rendering with RenderingServer",
      "Creating and Drawing a Canvas Item",
      "Drawing Primitives",
      "Transforms",
      "Bulk 2D Rendering (Bullet Hell Example)",
      "4. 3D Rendering with RenderingServer",
      "5. Custom Meshes and Procedural Geometry",
      "Updating Mesh Data Every Frame",
      "6. Materials and Shaders via RenderingServer",
      "Setting Shader Parameters",
      "7. MultiMesh for Mass Instancing",
      "Bulk Transform Updates",
      "8. RenderingDevice and Compute Shaders",
      "Basic Compute Shader Workflow",
      "The Compute Shader (GLSL)",
      "Compute Shader Use Cases",
      "9. Lifecycle and Cleanup",
      "10. C# Equivalents",
      "11. Performance Guidelines",
      "12. Common Mistakes"
    ]
  },
  {
    "id": "G48",
    "title": "G48 — Audio Middleware Integration (FMOD & Wwise)",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 17793,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. When to Use Audio Middleware",
      "2. FMOD Studio Integration",
      "Installation",
      "Project Structure",
      "Configuring Banks",
      "Load additional banks at runtime",
      "3. Wwise Integration",
      "Installation",
      "Project Structure",
      "Wwise Nodes",
      "4. Core Concepts: Events, Parameters, and Banks",
      "Event-Driven Audio",
      "5. Playing Events in GDScript",
      "FMOD",
      "One-shot (fire and forget) — good for UI clicks, impacts",
      "Persistent instance — good for looping sounds, music",
      "Using FMOD Nodes",
      "Attach an FmodEventEmitter3D to a CharacterBody3D",
      "The emitter automatically updates its 3D position to match the node",
      "Wwise",
      "Post an event using Wwise IDs (auto-generated)",
      "Post with a callback",
      "6. Spatial Audio and 3D Positioning",
      "FMOD 3D Events",
      "Wwise Spatial Audio",
      "Attach AkEvent3D to a moving enemy",
      "The Wwise integration automatically sends position updates",
      "For listener setup, add AkListener3D to your camera:",
      "Camera3D",
      "└── AkListener3D    ← listener follows camera automatically",
      "Occlusion",
      "FMOD occlusion via raycast",
      "7. Adaptive Music Systems",
      "FMOD Music Transitions",
      "music_manager.gd — Autoload",
      "Wwise Interactive Music",
      "Wwise uses States and Switches for music transitions",
      "8. Real-Time Parameter Control (RTPC)",
      "FMOD Parameters",
      "Vehicle engine that responds to RPM and speed",
      "Wwise Game Parameters",
      "Design Pattern: Audio Parameter Bridge",
      "audio_bridge.gd — Autoload that syncs game state to middleware params",
      "9. Snapshots and Mixing States",
      "FMOD Snapshots",
      "Wwise States",
      "10. Performance and Memory Management",
      "Bank Loading Strategy",
      "Load/unload banks when changing game areas",
      "Voice Limits",
      "Profiling",
      "In your FMOD initialization",
      "11. Export and Licensing",
      "FMOD Licensing",
      "Wwise Licensing",
      "Export Checklist",
      "12. Common Mistakes"
    ]
  },
  {
    "id": "G49",
    "title": "G49 — Tweening and Procedural Animation",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 22349,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Tween Fundamentals",
      "Creating a Tween",
      "Tween vs AnimationPlayer",
      "2. Tweener Types",
      "tween_property()",
      "tween_interval()",
      "tween_callback()",
      "tween_method()",
      "3. Sequential vs Parallel Execution",
      "Sequential (default)",
      "Parallel with `set_parallel()`",
      "Mixing with `parallel()` and `chain()`",
      "4. Easing and Transition Curves",
      "Transition Types (`TransitionType`)",
      "Ease Types (`EaseType`)",
      "Applying Easing",
      "Setting Default Easing",
      "Custom Curves",
      "5. Common Recipes",
      "Screen Shake",
      "Hit Flash",
      "Score Counter",
      "UI Slide-In",
      "Floating / Bobbing Effect",
      "Damage Number Popup",
      "6. Tween Lifecycle and Management",
      "Automatic Cleanup",
      "Killing Active Tweens",
      "Looping",
      "Pausing and Resuming",
      "Tween Signals",
      "7. Procedural Animation Patterns",
      "Spring Animation",
      "Smooth Damp (Unity-style)",
      "Attempt a smooth-damp towards a target value. Returns [new_value, new_velocity].",
      "Squash and Stretch",
      "8. Integrating with Signals and Coroutines",
      "Awaiting Tweens",
      "Chaining Multiple Awaited Sequences",
      "9. Reusable Tween Libraries",
      "Autoload Pattern",
      "10. C# Examples",
      "Basic Tween in C#",
      "Reusable Extension Methods",
      "11. Performance Considerations",
      "Tween Count",
      "Process Mode",
      "Avoiding Tween Stacking",
      "12. Common Pitfalls",
      "Tween on Freed Node",
      "`from()` Must Be Called on the PropertyTweener",
      "Tweening Physics Properties",
      "Loop + Parallel Gotcha",
      "Summary"
    ]
  },
  {
    "id": "godot-arch/G4",
    "title": "G4 — Input Handling",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 43245,
    "sections": [
      "What This Guide Covers",
      "Architecture Decision: Polling vs Events",
      "Polling (`_physics_process` / `_process`)",
      "Events (`_input` / `_unhandled_input`)",
      "When to Use Which",
      "The Input Pipeline",
      "InputMap Actions",
      "Defining Actions in Code",
      "Registers input actions programmatically.",
      "Call once at startup (e.g., in an autoload's _ready).",
      "Standard Action Naming Convention",
      "Deadzone Configuration",
      "Movement Patterns",
      "Basic 2D Platformer Movement",
      "Horizontal movement speed in pixels/sec.",
      "How quickly the player reaches max speed (higher = snappier).",
      "How quickly the player stops (higher = less slidey).",
      "Upward velocity applied on jump.",
      "Downward acceleration in pixels/sec².",
      "Cached project gravity for consistency with RigidBody2D objects.",
      "Variable Jump Height",
      "Gravity multiplier when falling (heavier descent feels better).",
      "Gravity multiplier when ascending with jump released (cuts jump short).",
      "Coyote Time + Jump Buffering",
      "Grace period after leaving a ledge where jump still works (seconds).",
      "How early before landing a jump press is remembered (seconds).",
      "Top-Down 8-Direction Movement",
      "4-Direction Grid Movement",
      "Size of one grid cell in pixels.",
      "Movement speed in pixels/sec.",
      "True while the character is moving between cells.",
      "Grid position in cell coordinates.",
      "World-space target position.",
      "Input Buffering (Advanced)",
      "General-Purpose Input Buffer",
      "How long buffered inputs remain valid (seconds).",
      "Dictionary of action_name → time remaining.",
      "Returns true and consumes the buffer if the action was recently pressed.",
      "Returns true without consuming (peek).",
      "Clears all buffered inputs. Call on state transitions where old inputs",
      "should not carry over (e.g., death, cutscene start).",
      "Rebindable Controls",
      "Save/Load Key Bindings",
      "Path to the keybind save file.",
      "Actions that can be rebound by the player.",
      "Saves current InputMap bindings to disk.",
      "Loads saved bindings and applies them to InputMap.",
      "Starts listening for a new binding for the given action.",
      "Returns the InputEvent that was pressed.",
      "Waits for the next valid input event (ignores mouse motion, joystick drift).",
      "Resets a single action to its default binding from ProjectSettings.",
      "Resets all actions to project defaults.",
      "Rebind UI Widget",
      "The input action this button rebinds.",
      "Which device to filter for (0 = keyboard, all negative = any).",
      "Gamepad Support",
      "Detecting Controller Connection",
      "Emitted when the active input device changes.",
      "Maps connected gamepad device IDs to names.",
      "Showing Correct Button Prompts",
      "Action to display the prompt for.",
      "Keyboard/mouse icon.",
      "Xbox-style gamepad icon.",
      "Vibration / Haptic Feedback",
      "Trigger controller rumble. Weak motor = subtle buzz, strong motor = heavy rumble.",
      "Duration in seconds. Only works on gamepads that support it.",
      "Predefined rumble patterns for common game events.",
      "Touch Input",
      "Virtual Joystick",
      "Maximum drag distance in pixels from center.",
      "Deadzone as a fraction of max_radius (0.0–1.0).",
      "Normalized output direction (-1 to 1 per axis).",
      "Touch Action Buttons",
      "The InputMap action to simulate when pressed.",
      "Local Multiplayer",
      "Device-Split Input Manager",
      "Maximum number of local players.",
      "Player action prefix format: \"p1_move_left\", \"p2_move_left\", etc.",
      "Base actions that get duplicated per player.",
      "Maps player index (1-based) to device ID (-1 = keyboard).",
      "Creates per-player actions: p1_move_left, p2_move_left, etc.",
      "Assigns a device to a player and maps their inputs.",
      "Gets the action name for a specific player.",
      "Usage: Input.is_action_pressed(mp_input.action(1, \"move_left\"))",
      "Player index (1-4). Set by the spawner.",
      "Join Screen (Press Start)",
      "Combo / Sequence Detection",
      "Maximum time between inputs in a combo sequence (seconds).",
      "Each combo is: name → array of action strings.",
      "Recent action presses with timestamps.",
      "Registers a combo sequence.",
      "Example: register(\"hadouken\", [\"move_down\", \"move_right\", \"attack_primary\"])",
      "Input Recording & Replay",
      "Actions to record.",
      "Recorded frames: array of {tick: int, states: Dictionary}.",
      "Save recording to file.",
      "Load recording from file.",
      "Accessibility Patterns",
      "Hold-to-Toggle Conversion",
      "Actions that can be toggled instead of held.",
      "Whether toggle mode is active (set from accessibility options).",
      "Check if an action is currently toggled on.",
      "Input Sensitivity Scaling",
      "Global input sensitivity multipliers (0.1 = very slow, 2.0 = very fast).",
      "Apply in your movement code: direction * sensitivity_scale",
      "Mouse look / aim sensitivity.",
      "Analog stick sensitivity.",
      "How long a press must be held to register (anti-tremor). Seconds.",
      "For anti-tremor: call instead of is_action_just_pressed.",
      "Common Mistakes",
      "❌ Using `_process` for Physics Movement",
      "❌ Not Normalizing Diagonal Input",
      "❌ Using `_input` for Gameplay Actions",
      "❌ Forgetting `set_input_as_handled()`",
      "❌ Polling `is_action_just_pressed` in `_process` for Physics Actions",
      "Tuning Reference",
      "Platformer Input Values",
      "Input Buffer Windows by Genre",
      "Combo Window by Game Speed",
      "Cross-References"
    ]
  },
  {
    "id": "G50",
    "title": "G50 — Advanced UI: Custom Controls and Theming",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 20430,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Building Custom Controls",
      "Anatomy of a Custom Control",
      "Maximum health value.",
      "Current health value.",
      "Bar fill color.",
      "Bar background color.",
      "Key Virtual Methods",
      "Minimum Size",
      "Input Handling",
      "2. The Theme System In Depth",
      "How Theme Lookup Works",
      "Theme Items",
      "Using Theme Items in Custom Controls",
      "Responding to Theme Changes",
      "3. Theme Type Variations",
      "Creating a Variation in the Theme Editor",
      "Applying a Variation",
      "Variation Hierarchy",
      "4. Runtime Theme Switching",
      "Dark Mode / Light Mode",
      "Smooth Theme Transitions",
      "5. StyleBox Deep Dive",
      "StyleBox Types",
      "StyleBoxFlat Properties",
      "Nine-Slice Textures",
      "Button State StyleBoxes",
      "6. Responsive and Multi-Resolution UI",
      "Anchor Presets",
      "Container-Based Layouts",
      "Size Flags",
      "Handling Different Aspect Ratios",
      "7. Focus and Keyboard Navigation",
      "Focus Neighbors",
      "Grabbing Focus",
      "Custom Focus Drawing",
      "Focus Groups (Tab Containers)",
      "Cycle focus within a set of controls",
      "8. Custom Drawing with _draw()",
      "Drawing Primitives",
      "Circular Progress Bar Example",
      "9. Performance Patterns for Complex UIs",
      "Avoid Unnecessary Redraws",
      "Visibility Culling",
      "Use ItemList or Tree for Large Lists",
      "Deferred Layout Updates",
      "10. C# Examples",
      "Custom Control",
      "Theme Switching",
      "11. Common Patterns and Recipes",
      "Tooltip with Rich Content",
      "Animated Menu Buttons",
      "12. Common Pitfalls",
      "Forgetting `update_minimum_size()`",
      "Theme Type String Mismatch",
      "Overdrawing",
      "Control Outside Viewport",
      "Summary"
    ]
  },
  {
    "id": "G51",
    "title": "G51 — Entity-Component Patterns and Composition",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 22128,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Inheritance vs Composition in Godot",
      "The Inheritance Approach",
      "The Composition Approach",
      "When to Use Each",
      "The Pragmatic Middle Ground",
      "2. The Entity-Component Pattern",
      "Core Concepts (Godot-Adapted)",
      "Base Component Class",
      "The entity this component is attached to.",
      "Cached on _ready for fast access.",
      "Override in subclasses for component-specific setup.",
      "3. Building Behavior Components",
      "Health Component",
      "Movement Component",
      "Hitbox / Hurtbox Component",
      "4. Data Components with Custom Resources",
      "Separating Data from Behavior",
      "Using Data Resources in Components",
      "Variant Entities via Swapped Resources",
      "5. Component Communication",
      "A. Signals (Loosely Coupled)",
      "B. Direct Node Access (Tightly Coupled)",
      "C. Component Registry (Middle Ground)",
      "Recommended Approach",
      "6. Entity Assembly Patterns",
      "Scene Inheritance",
      "Scene Composition (Nested Scenes)",
      "Runtime Assembly",
      "7. The System Layer",
      "Group-Based Systems",
      "When Systems Make Sense",
      "8. When to Use a Full ECS Framework",
      "Available ECS Frameworks for Godot 4",
      "9. C# Examples",
      "Component Base Class",
      "Health Component",
      "Interface-Based Component Discovery",
      "10. Performance Considerations",
      "Node Count",
      "Signal Overhead",
      "Component Lookup Caching",
      "When Composition Hurts Performance",
      "11. Real-World Architecture Examples",
      "Action RPG",
      "Tower Defense Tower",
      "Platformer Pickup",
      "12. Common Pitfalls",
      "Over-Engineering Small Games",
      "Components That Know Too Much",
      "Initialization Order",
      "Missing Components at Runtime",
      "Summary"
    ]
  },
  {
    "id": "G52",
    "title": "G52 — Combat & Damage Systems",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 24746,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Architecture Overview",
      "2. The Hitbox / Hurtbox Pattern",
      "Collision Layer Setup",
      "Hitbox Component",
      "The damage this hitbox deals when it connects.",
      "Owner of this hitbox (to prevent self-damage).",
      "Hurtbox Component",
      "Emitted when this hurtbox receives a hit.",
      "When true, hits are ignored (invincibility frames).",
      "Called by a Hitbox when it overlaps us.",
      "3. Damage Data Resource",
      "Base damage amount before resistances.",
      "Type of damage (determines which resistance applies).",
      "Knockback force applied to the target.",
      "Whether this hit causes hitstun (brief freeze on the target).",
      "Duration of hitstun in seconds.",
      "Optional status effect to apply on hit.",
      "Critical hit multiplier (1.0 = no crit).",
      "4. Health Component",
      "Wiring It Together on an Entity",
      "5. Invincibility Frames",
      "The Hurtbox to disable during i-frames.",
      "Optional: a Sprite2D or AnimatedSprite2D to flash.",
      "Usage in the Player",
      "6. Knockback and Hit Reactions",
      "How quickly knockback decays (higher = snappier).",
      "Hitstop (Freeze Frames)",
      "7. Melee Attack Pipeline",
      "AnimationPlayer Method Calls",
      "Attack State Example",
      "8. Ranged / Projectile Attacks",
      "Spawning Projectiles",
      "9. Damage Types and Resistances",
      "Maps DamageType → multiplier.",
      "0.0 = immune, 0.5 = resistant, 1.0 = normal, 1.5 = weak, 2.0 = very weak.",
      "10. Status Effects",
      "Currently active effects: EffectType → { effect, timer, tick_timer }",
      "The HealthComponent to apply tick damage to.",
      "11. C# Examples",
      "DamageData",
      "Hitbox",
      "HealthComponent",
      "12. Common Pitfalls",
      "Hitbox stays active after animation",
      "Self-damage",
      "Multi-hit on a single swing",
      "Modifying collision shapes during physics callbacks",
      "Damage numbers don't match expectations"
    ]
  },
  {
    "id": "G53",
    "title": "G53 — Data-Driven Design & Game Databases",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 19513,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Why Data-Driven?",
      "2. Custom Resources as Data Containers",
      "Defining a Data Resource",
      "Creating Data in the Editor",
      "Referencing Other Resources",
      "3. Building an Item Database",
      "File-System-Based Database",
      "All items, keyed by their StringName id.",
      "Usage Anywhere in Your Game",
      "4. The Data Registry Pattern",
      "5. JSON for External / Moddable Data",
      "Load a JSON file and return parsed data.",
      "Example: Loading Enemy Wave Data from JSON",
      "When to Use JSON vs Resources",
      "6. CSV Import Workflows",
      "Runtime CSV Parser",
      "Parse a CSV file into an array of dictionaries.",
      "First row is treated as headers (keys).",
      "Example: Importing Enemy Stats from CSV",
      "Editor Import Plugin (for automatic CSV → Resource conversion)",
      "7. Data Validation",
      "8. Editor Workflows for Designers",
      "Resources-as-Sheets Plugin",
      "@export Hints for Better UX",
      "Range slider in the Inspector.",
      "File picker filtered to .png files.",
      "Dropdown from an enum.",
      "Color picker.",
      "Multi-line text area.",
      "Flags (bitfield checkboxes).",
      "9. Balancing Tables and Curves",
      "XP / Level Curves with Godot's Curve Resource",
      "In a LevelData resource or AutoLoad:",
      "Damage Scaling Formula",
      "Common RPG damage formula:",
      "final = base_atk × (atk / (atk + def)) × random_variance",
      "Loot Drop Tables",
      "10. C# Examples",
      "ItemData",
      "Database Loader",
      "11. Choosing the Right Format",
      "12. Common Pitfalls",
      "Resource sharing (unintended mutation)",
      "String IDs vs integer IDs",
      "Loading order dependencies",
      "Massive data directories are slow to scan"
    ]
  },
  {
    "id": "G54",
    "title": "G54 — Quest & Objective Systems",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 28379,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Architecture Overview",
      "2. Quest Data Model",
      "Unique identifier for this quest.",
      "Display name shown to the player.",
      "Description shown in the quest log.",
      "Quest category.",
      "Recommended player level (for UI display).",
      "Objectives that must be completed to finish this quest.",
      "Optional objectives (tracked but not required for completion).",
      "Rewards given on completion.",
      "Bonus rewards for completing optional objectives.",
      "Quest IDs that must be completed before this quest becomes available.",
      "If true, this quest can be accepted again after completion.",
      "Time limit in seconds (0 = no limit).",
      "NPC who gives this quest (for UI / dialogue integration).",
      "3. Objective Data Model",
      "Unique ID within the quest.",
      "Human-readable description (\"Kill 5 slimes\").",
      "What type of objective this is.",
      "Target identifier (enemy type, item id, area id, npc id).",
      "How many are required (1 for REACH/TALK).",
      "Whether this objective is optional (bonus).",
      "Objectives that must be complete before this one activates.",
      "(For sequential objective ordering within a quest.)",
      "4. QuestManager AutoLoad",
      "Signals for UI and other systems to react to.",
      "All quest definitions, loaded from data files.",
      "Runtime state.",
      "5. Signal-Driven Progress Tracking",
      "Runtime State Classes",
      "Connecting Gameplay Events",
      "6. Quest Chains and Prerequisites",
      "7. Branching and Optional Objectives",
      "Sequential Objectives (within a quest)",
      "Optional Bonus Objectives",
      "Branching Quests",
      "8. Reward Distribution",
      "9. Save/Load Integration",
      "10. Quest UI Patterns",
      "Quest Log Panel",
      "HUD Objective Tracker",
      "11. C# Examples",
      "QuestData",
      "QuestManager (partial)",
      "12. Common Pitfalls",
      "Quest progress lost on scene change",
      "Objectives track progress before they're active",
      "Objective progress exceeds required count",
      "Removing quests from data breaks saves",
      "NPC dialogue doesn't reflect quest state",
      "Timed quests don't fail when time runs out"
    ]
  },
  {
    "id": "G55",
    "title": "G55 — Day/Night Cycles & Weather Systems",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 20694,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Architecture Overview",
      "2. TimeManager AutoLoad",
      "autoload: TimeManager",
      "Signals",
      "Time scale: how many in-game seconds pass per real second",
      "Current state",
      "Internal accumulator",
      "Time periods — boundaries in hours",
      "Normalized time: 0.0 = midnight, 0.5 = noon, 1.0 = next midnight",
      "Why an AutoLoad?",
      "3. 3D Day/Night — Sun, Sky, and Ambient Light",
      "Scene Setup",
      "DayNightController Script",
      "Sun energy curve: X = normalized time (0–1), Y = energy",
      "Sun color gradient: left = midnight, right = next midnight",
      "Ambient energy curve",
      "Sun rotation: full 360° over one day around X axis",
      "Recommended Curve Values",
      "4. 2D Day/Night — CanvasModulate and Lighting",
      "Recommended 2D Gradient",
      "5. Weather State Machine",
      "autoload: WeatherManager (or per-scene node)",
      "Weather type definitions as Resources for data-driven design",
      "WeatherConfig Resource",
      "6. Rain and Snow with GPUParticles3D",
      "Rain ParticleProcessMaterial Settings",
      "Snow — Differences from Rain",
      "2D Rain (GPUParticles2D)",
      "7. Volumetric Fog and Mist",
      "Called by WeatherManager when weather changes",
      "8. Audio Integration",
      "9. Gameplay Hooks",
      "Example: crop growth speed modifier",
      "Example: enemy spawn table modifiers",
      "10. Data-Driven Configuration",
      "Different biomes can have different lighting",
      "desert_preset.tres, forest_preset.tres, arctic_preset.tres",
      "11. C# Examples",
      "TimeManager (C#)",
      "12. Performance Considerations",
      "Common Pitfalls"
    ]
  },
  {
    "id": "G56",
    "title": "G56 — Economy & Loot Table Systems",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 20630,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Architecture Overview",
      "2. CurrencyManager",
      "autoload: CurrencyManager",
      "Main wallet — supports multiple currency types",
      "Get current balance for a currency",
      "Add currency (faucet). Returns new balance.",
      "Remove currency (sink). Returns true if successful.",
      "Check if player can afford a cost",
      "Atomic multi-currency transaction (all-or-nothing)",
      "For save/load",
      "Why `int` instead of `float`?",
      "3. Loot Table Design",
      "LootEntry Resource",
      "Optional: conditions for this entry to be eligible",
      "LootTable Resource",
      "Optional nested tables",
      "4. Weighted Random Selection",
      "Roll a loot table and return an array of dropped items",
      "How Weights Work",
      "5. Rarity Tiers and Pity Systems",
      "Rarity Tier Resource",
      "Standard tiers (example weights)",
      "Common: 100, Uncommon: 40, Rare: 15, Epic: 5, Legendary: 1",
      "Pity System",
      "Pity thresholds: after N rolls without this rarity, guarantee it",
      "6. Nested and Chained Tables",
      "Pattern: Tiered Table Composition",
      "Conditional Tables",
      "7. Shop Systems",
      "Buy/sell ratio: sell price = buy price × this",
      "Dynamic Pricing (Optional)",
      "Supply/demand pricing — price rises if player buys a lot, drops if they sell",
      "Call periodically (e.g., each in-game day) to decay prices toward 1.0",
      "8. Economy Balance — Faucets and Sinks",
      "Common Faucets",
      "Common Sinks",
      "Tracking Economy Health",
      "autoload: EconomyTracker (debug/analytics)",
      "9. Save/Load Integration",
      "In your save system:",
      "10. C# Examples",
      "CurrencyManager (C#)",
      "Weighted Pick (C#)",
      "11. Designer Workflow",
      "Setting Up Loot Tables in the Editor",
      "Balancing Spreadsheet Workflow",
      "Import CSV loot table: item_id, weight, min_qty, max_qty, rarity",
      "Common Pitfalls"
    ]
  },
  {
    "id": "G57",
    "title": "G57 — Debug Tools & In-Game Console",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 25165,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Architecture Overview",
      "2. Developer Console — Core",
      "autoload: DebugManager",
      "3. Command Registration",
      "For help text",
      "Registration API",
      "In DebugManager:",
      "Any system can register commands:",
      "DebugManager.register_command(&\"god\", _toggle_god_mode, \"Toggle god mode\")",
      "DebugManager.register_command(&\"give\", _give_item, \"Give item to player\", [",
      "DebugCommand.DebugArg.new(\"item_id\", TYPE_STRING),",
      "DebugCommand.DebugArg.new(\"quantity\", TYPE_INT, false, 1),",
      "])",
      "4. Argument Parsing and Validation",
      "In DebugManager:",
      "5. Autocomplete",
      "In DevConsoleUI:",
      "6. Built-in Commands",
      "7. Debug Overlay HUD",
      "Registering Custom Stats",
      "In your EnemyManager:",
      "In your NetworkManager:",
      "8. Debug Draw System",
      "Singleton pattern — add as child of DebugManager",
      "Usage Examples",
      "Visualize AI navigation path",
      "Visualize raycast hit",
      "Visualize area of effect",
      "9. Feature Flags and Cheat Protection",
      "Feature Flags",
      "Feature flags — set via console command or config file",
      "Cheat Protection for Multiplayer",
      "10. Stripping Debug Tools from Release Builds",
      "Using `OS.is_debug_build()`",
      "Using `@tool` and Export Features",
      "Only compiled into debug builds",
      "Preprocessor-Style Approach (GDScript)",
      "11. C# Examples",
      "Command Registration (C#)",
      "Common Pitfalls"
    ]
  },
  {
    "id": "G58",
    "title": "G58 — Cutscene & Cinematic Systems",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 22362,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Architecture Overview",
      "2. Timeline-Driven Cutscenes with AnimationPlayer",
      "Setup",
      "Animating Multiple Nodes",
      "Triggering the Cutscene",
      "3. Call-Method Tracks for Side Effects",
      "Adding a Call Method Track",
      "Practical Uses",
      "Limitation",
      "4. Script-Driven Cutscenes: The CutsceneDirector Pattern",
      "Core Director",
      "Emitted when any single action completes.",
      "Emitted when the full cutscene finishes (or is skipped).",
      "Writing a Cutscene Script",
      "5. Cutscene Actions Library",
      "6. Cinematic Camera Rig",
      "Scene Tree for the Rig",
      "7. Letterboxing and Screen Effects",
      "8. Skippable Cutscenes",
      "9. Blending Gameplay ↔ Cinematic Cameras",
      "10. Trigger Zones and Sequencing",
      "Chaining Multiple Cutscenes",
      "11. C# Examples",
      "CutsceneDirector in C#",
      "Using the Director",
      "12. Common Pitfalls"
    ]
  },
  {
    "id": "G59",
    "title": "G59 — Replay & Rewind Systems",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 25982,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Architecture Overview",
      "Choosing Your Approach",
      "2. State Recording — The Snapshot Approach",
      "Marking Entities as Rewindable",
      "The Rewindable Interface",
      "Attach as a child of any node you want to record.",
      "3. FrameData and RecordingManager",
      "Maximum frames to keep in memory (at 60fps = ~5 minutes).",
      "4. Playback System",
      "Slow Motion Replay",
      "5. Time-Rewind Mechanics",
      "Rewind Energy UI",
      "6. Input Recording — The Deterministic Approach",
      "Actions to record — configure per game",
      "Replaying Inputs",
      "Override input for a specific node during playback.",
      "7. Ghost Replay System",
      "8. Memory Management",
      "Circular Buffer",
      "Delta Compression",
      "Keyframe + Interpolation",
      "9. Serialization and Replay Files",
      "10. C# Examples",
      "State Recording in C#",
      "Time Rewind in C#",
      "11. Common Pitfalls"
    ]
  },
  {
    "id": "godot-arch/G5",
    "title": "G5 — Physics & Collision",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 33222,
    "sections": [
      "What This Guide Covers",
      "Physics Body Types — When to Use Each",
      "Collision Shapes",
      "Shape Types",
      "Shape Performance (cheapest to most expensive)",
      "Compound Shapes",
      "Collision Layers and Masks",
      "Recommended Layer Setup",
      "Setting Layers in Code",
      "Hitbox/Hurtbox Layer Pattern",
      "CharacterBody2D — Kinematic Movement",
      "Core API",
      "move_and_slide() vs move_and_collide()",
      "Floor Detection Properties",
      "Accessing Collision Data After move_and_slide()",
      "Platformer Character (Complete)",
      "Movement",
      "Jumping",
      "State",
      "Top-Down Character",
      "RigidBody2D — Physics-Driven Objects",
      "Force vs Impulse",
      "Freeze Modes",
      "Physics Material",
      "Custom Integration",
      "Breakable Crate Example",
      "Area2D — Overlap Detection",
      "Signals",
      "Monitoring vs Monitorable",
      "Pickup Item",
      "Damage Zone (Continuous Damage)",
      "Raycasting",
      "RayCast2D Node",
      "Direct Space Queries (One-Shot Raycasts)",
      "Shape Queries (Area Checks)",
      "One-Way Platforms",
      "Inspector Setup",
      "Drop-Through",
      "Moving Platforms",
      "AnimatableBody2D (Preferred)",
      "Platform On Leave Behavior",
      "Physics Layers in Practice — Full Setup",
      "Layer constants for readability",
      "Expected collision matrix:",
      "Player body → sees World, Enemy",
      "Enemy body → sees World, Player",
      "Player hitbox → sees Enemy hurtbox",
      "Enemy hitbox → sees Player hurtbox",
      "Player projectile → sees World, Enemy hurtbox",
      "Pickup → monitorable only, Player area detects it",
      "Common Mistakes",
      "1. No CollisionShape2D",
      "2. Scaling CollisionShape2D",
      "3. Moving RigidBody2D with position",
      "4. Querying Physics in _process",
      "5. Forgetting Exclude Self in Raycasts",
      "6. Area2D body_entered Not Firing",
      "7. Using ConcavePolygonShape2D for Moving Bodies",
      "Performance Considerations",
      "Collision Shape Costs",
      "Sleeping Bodies",
      "Reducing Physics Checks",
      "Physics Tick Rate",
      "Tuning Reference Tables",
      "Platformer Physics",
      "Top-Down Movement",
      "RigidBody2D Materials",
      "Related Guides"
    ]
  },
  {
    "id": "G60",
    "title": "G60 — Utility AI & Goal-Oriented Action Planning (GOAP)",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 31761,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Choosing Your AI Architecture",
      "2. Utility AI — Concepts",
      "3. Response Curves",
      "When to Use Each Curve",
      "4. Implementing Utility AI in Godot",
      "Core Classes",
      "The Decision Maker",
      "5. Utility AI — Practical Example: Survival NPC",
      "Action Configuration (in the editor via Resources)",
      "6. GOAP — Concepts",
      "7. World State and Actions",
      "World state is a dictionary of string keys to boolean values.",
      "Override in subclass to check dynamic runtime conditions.",
      "Override to perform the actual action. Return true when done.",
      "Called when the action starts.",
      "Called when the action is interrupted or completed.",
      "8. The GOAP Planner",
      "9. GOAP Agent and Action Execution",
      "10. GOAP — Practical Example: Village NPC",
      "Define Actions as Resources",
      "The Villager NPC",
      "11. Hybrid Approaches",
      "Utility AI for Goal Selection + GOAP for Execution",
      "Behavior Tree with Utility Selector",
      "12. C# Examples",
      "Utility Brain in C#",
      "GOAP Planner in C#",
      "13. Common Pitfalls"
    ]
  },
  {
    "id": "G61",
    "title": "G61 — Async Resource Loading & Scene Streaming",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 18063,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. How Resource Loading Works in Godot",
      "2. The Threaded Loading Pipeline",
      "GDScript",
      "Key parameters for `load_threaded_request()`",
      "Status values",
      "3. Building a Loading Screen",
      "4. Sub-Thread Acceleration",
      "5. Streaming Open Worlds — Chunk-Based Loading",
      "Chunk Streaming Manager",
      "Design tips for chunk streaming",
      "6. Cache Management and Memory",
      "Monitoring memory",
      "Forcing resource release",
      "7. Error Handling",
      "8. Platform Caveats — Web, Mobile, Console",
      "Web (HTML5)",
      "Mobile (Android/iOS)",
      "Console",
      "9. C# Equivalents",
      "10. Common Mistakes"
    ]
  },
  {
    "id": "G62",
    "title": "G62 — Procedural Mesh Generation",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 19366,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. The Four Mesh Tools",
      "2. Vertex Data Fundamentals",
      "3. SurfaceTool — The Builder Pattern",
      "Basic quad",
      "Using indices (shared vertices)",
      "Auto-generating normals and tangents",
      "4. ArrayMesh — Maximum Control",
      "Heightmap terrain chunk",
      "5. MeshDataTool — Modify Existing Meshes",
      "Runtime mesh deformation",
      "Querying mesh topology",
      "6. ImmediateMesh — Debug Visualization",
      "7. Generating Collision Shapes",
      "From mesh geometry",
      "Simplified collision for terrain",
      "Convex hull for dynamic objects",
      "8. Practical Patterns",
      "Trail / ribbon mesh",
      "9. Performance Guidelines",
      "10. C# Equivalents",
      "11. Common Mistakes"
    ]
  },
  {
    "id": "G63",
    "title": "G63 — SubViewport Techniques",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 18644,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. How SubViewports Work",
      "2. SubViewport vs SubViewportContainer",
      "With SubViewportContainer (for UI display)",
      "Without container (for texture access)",
      "3. Worlds — Shared vs Isolated",
      "Canvas Cull Mask (2D layer filtering)",
      "4. Minimap",
      "Scene tree structure",
      "2D minimap implementation",
      "Adding minimap-only icons",
      "3D minimap (top-down camera)",
      "Minimap border and mask",
      "5. Split-Screen Multiplayer",
      "Two-player horizontal split",
      "Setup in code",
      "Dynamic split — merge when players are close",
      "6. 3D Model Preview in 2D UI",
      "Scene tree",
      "Rotating preview",
      "Mouse interaction — drag to rotate",
      "7. Render-to-Texture — Security Cameras & Portals",
      "Security camera on a 3D monitor",
      "Performance tip — reduce update frequency",
      "8. Pixel-Perfect Rendering",
      "Configuration",
      "9. Performance Management",
      "Cost factors",
      "Practical limits",
      "Reducing cost",
      "10. C# Equivalents",
      "11. Common Mistakes"
    ]
  },
  {
    "id": "G64",
    "title": "G64 — Character Controller Patterns",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 22943,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. CharacterBody API Overview",
      "The Move Loop",
      "Core Methods",
      "2. Motion Modes — Grounded vs Floating",
      "Grounded (default — `MOTION_MODE_GROUNDED`)",
      "Floating (`MOTION_MODE_FLOATING`)",
      "3. Key Properties Explained",
      "4. 2D Platformer Controller",
      "Movement tuning — tweak these in the Inspector",
      "Why These Choices",
      "5. 2D Top-Down Controller",
      "Eight-Direction Variant",
      "6. 3D First-Person Controller",
      "Scene Tree Setup",
      "Why `_unhandled_input` for Mouse Look",
      "7. 3D Third-Person Controller",
      "Scene Tree Setup",
      "Camera Orbit Script (on CameraPivot)",
      "8. Coyote Time and Input Buffering",
      "Coyote Time",
      "Jump Buffering",
      "9. Slopes, Stairs, and Edge Cases",
      "Preventing Slope Sliding",
      "Constant Speed on Slopes",
      "Stairs (3D)",
      "One-Way Platforms (2D)",
      "10. C# Equivalents",
      "11. Common Mistakes"
    ]
  },
  {
    "id": "G65",
    "title": "G65 — Unity to Godot Migration Guide",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 17427,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Mental Model — The Big Shift",
      "2. Concept Mapping Table",
      "3. Project Structure",
      "Unity",
      "Godot",
      "4. Scripting — C# and GDScript",
      "Lifecycle Methods",
      "Variable Export",
      "Node References",
      "Instantiation",
      "5. Scene and Node Architecture",
      "Unity's Prefab vs Godot's Scene",
      "Composition Pattern",
      "6. Physics Translation",
      "Raycasting Comparison",
      "7. UI — Unity UI vs Godot Control",
      "Theme System",
      "8. Audio",
      "9. Animation",
      "10. Assets and Import",
      "3D Models",
      "Textures",
      "Shaders",
      "11. Signals vs Unity Events",
      "12. Common Gotchas"
    ]
  },
  {
    "id": "G66",
    "title": "G66 — Analytics and Player Telemetry",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 20247,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Core Architecture — The Event Singleton",
      "Configuration",
      "─── Public API ───────────────────────────────────────────────",
      "─── Internals ────────────────────────────────────────────────",
      "Usage From Any Node",
      "2. Event Design — What to Track",
      "The Essential 10 Events",
      "Funnel Events",
      "Position Heatmaps",
      "3. Batching and Network Transport",
      "Why Batch?",
      "Batch Strategy",
      "Flush on Scene Change",
      "4. Third-Party Integrations",
      "Talo (Game-Specific Analytics)",
      "Google Analytics 4 (via HTTP)",
      "Firebase (Android/iOS)",
      "Self-Hosted Options",
      "5. Custom Backend with HTTPRequest",
      "Server (Node.js Example)",
      "Query with SQLite",
      "6. Privacy and Consent",
      "Legal Requirements",
      "Implementation",
      "Best Practices",
      "7. Offline Queuing and Retry",
      "8. Performance Considerations",
      "9. Playtesting-Specific Telemetry",
      "In-Game Feedback Button",
      "10. C# Equivalents",
      "11. Common Mistakes"
    ]
  },
  {
    "id": "G67",
    "title": "G67 — C# Best Practices in Godot 4",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 27217,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. When to Use C# vs GDScript",
      "Choosing C# for Performance",
      "Ecosystem Access",
      "2. Project Setup & Requirements",
      ".NET Runtime",
      "Partial Classes (CRITICAL)",
      "Project Structure (.csproj)",
      "Build Workflow",
      "3. Signals in C#",
      "Basic Signal Declaration",
      "Connecting with the += Operator",
      "Comparing GDScript and C# Signals",
      "Signal Naming Convention",
      "4. Exports and Inspector Integration",
      "Basic Exports",
      "Export Hints and Ranges",
      "Export Groups",
      "Exporting Node References",
      "5. Variant and Marshalling",
      "GodotObject vs System.Object",
      "Variant Type Conversions",
      "Boxing and GC Pressure",
      "Numeric Types in Godot",
      "6. Callable and StringName",
      "Creating Callables from Methods",
      "StringName for Performance",
      "7. Node Access Patterns",
      "GetNode&lt;T&gt;() for Typed Lookups",
      "GetNodeOrNull&lt;T&gt;() for Optional References",
      "Exporting Node References (Preferred)",
      "Unique Names (%) in GetNode",
      "8. Autoloads in C#",
      "Registering C# Autoloads",
      "Better: Static Class Pattern",
      "Register in Autoload",
      "9. Async Patterns",
      "Awaiting Signals with ToSignal()",
      "Task-Based Async Sequences",
      "Important Caveat: Single-Threaded Scene Tree",
      "10. NuGet Packages and .NET Libraries",
      "Adding Packages",
      "Packages That Work Well",
      "Packages That Don't Work",
      "Test What Works",
      "11. Testing",
      "xUnit or NUnit with Godot",
      "GdUnit4 for Scene Testing",
      "12. Performance Tips",
      "Prefer Struct for Lightweight Data",
      "Object Pooling in C#",
      "Minimize Variant Conversions",
      "Use Span&lt;T&gt; for Array Processing",
      "13. Common Mistakes",
      "Forgetting `partial` Keyword",
      "Using System.Object Instead of GodotObject",
      "Not Calling base._Ready()",
      "Signal Names Not Ending with EventHandler",
      "Web Export Surprise",
      "Node Freed During Async",
      "Using `String` Instead of `StringName` Repeatedly",
      "Summary"
    ]
  },
  {
    "id": "G68",
    "title": "G68 — Destructible Environments",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 22733,
    "sections": [
      "Table of Contents",
      "What This Guide Covers",
      "Approaches Overview",
      "Pre-Fractured Mesh Destruction (3D)",
      "Setup: Importing Fractured Meshes",
      "GDScript Implementation",
      "C# Implementation",
      "Key Points",
      "CSG Boolean Destruction",
      "GDScript Implementation",
      "C# Implementation",
      "Performance Warning",
      "2D Sprite Destruction",
      "Sprite Replacement (GDScript)",
      "Image-Based Erosion (Worms-Style)",
      "Health and Damage System Integration",
      "Damageable Interface (GDScript)",
      "Area-of-Effect Damage",
      "Physics Debris Management",
      "Object Pooling for Debris",
      "Freeze Settled Debris",
      "Maximum Active Debris Cap",
      "Visual Effects & Polish",
      "Impact Particles",
      "Screen Shake on Large Destruction",
      "Networking Considerations",
      "Server-Authoritative Damage",
      "Syncing Debris (Option: State vs. Simulation)",
      "Common Mistakes",
      "Summary"
    ]
  },
  {
    "id": "G69",
    "title": "G69 — Fog of War and Visibility Systems",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 23302,
    "sections": [
      "Table of Contents",
      "What This Guide Covers",
      "Fog of War Concepts",
      "Three States",
      "Vision Sources",
      "Use Cases",
      "Tile-Based Fog of War (2D)",
      "Core Manager",
      "Rendering Fog Overlay",
      "Optimization: Dirty Flags",
      "Shader-Based Fog of War",
      "Setup",
      "Fog Shader",
      "Explored Texture (Never Goes Dark)",
      "Shadow Casting & Line of Sight",
      "Raycasting Approach",
      "Efficient Shadow Casting (Octant-Based)",
      "3D Fog of War",
      "Vision Source Component",
      "Performance Optimization",
      "Update Frequency",
      "Spatial Hashing",
      "GPU Compute (Large Maps)",
      "LOD: Reduce Resolution for Distant Areas",
      "Hiding Game Objects",
      "Hide Enemies in Fog",
      "Minimap Integration",
      "Target & Ability Restrictions",
      "Audio Occlusion",
      "Multiplayer Fog of War",
      "Common Mistakes",
      "Summary"
    ]
  },
  {
    "id": "godot-arch/G6",
    "title": "G6 — Camera Systems",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 52527,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "Camera2D Fundamentals",
      "Scene Tree Placement",
      "Essential Properties",
      "Making a Camera Current",
      "Camera Pipeline",
      "Follow Modes",
      "Instant Follow (Child Camera)",
      "Smooth Follow (Lerp)",
      "Exponential Smoothing (Framerate-Independent)",
      "The node this camera follows.",
      "How quickly the camera catches up. Higher = faster. 0 = no movement.",
      "Using Built-in Smoothing",
      "Smoothing & Damping",
      "Axis-Independent Smoothing",
      "Vertical Snap (Platformer Pattern)",
      "Vertical position only updates when grounded.",
      "Velocity-Based Damping",
      "Deadzone",
      "Built-in Deadzone",
      "Custom Deadzone with Directional Bias",
      "Deadzone half-size in pixels.",
      "Visualizing the Deadzone (Debug)",
      "Camera Limits",
      "Built-in Limits",
      "Auto-Limits from TileMapLayer",
      "Small Room Centering",
      "Look-Ahead",
      "Direction-Based Look-Ahead",
      "How far ahead to look (pixels).",
      "How quickly the look-ahead shifts.",
      "Mouse-Based Look-Ahead",
      "How much the cursor influences camera position (0.0 to 1.0).",
      "Maximum offset from cursor (pixels).",
      "Combined Look-Ahead (Velocity + Facing)",
      "Screen Shake",
      "Noise-Based Shake (Recommended)",
      "The camera to shake. Auto-detects parent Camera2D if not set.",
      "Maximum shake offset in pixels.",
      "Maximum rotation in radians.",
      "How quickly trauma decays.",
      "Noise frequency (higher = more jittery).",
      "Trauma exponent (2.0 = quadratic falloff, feels natural).",
      "Add trauma (clamped to 1.0). Call this from gameplay code.",
      "Directional Shake",
      "Add directional trauma. Direction is normalized internally.",
      "Example: enemy hit from the right",
      "Shake Presets",
      "Preset shake amounts for consistent game feel",
      "Zoom System",
      "Smooth Zoom",
      "Zoom to Cursor",
      "Context-Sensitive Zoom",
      "Multi-Target Camera",
      "Basic Multi-Target",
      "Nodes to keep in frame. Assign via editor or code.",
      "Extra padding around targets (pixels at zoom=1).",
      "Boss-Fight Framing",
      "Dynamic Split/Merge (Co-op)",
      "Cinematic Camera",
      "Waypoint Sequence",
      "Camera Waypoint Resource",
      "Triggering Cinematics",
      "Camera Transitions",
      "Tween-Based Transition",
      "Transition the viewport from one camera to another with a smooth blend.",
      "Fade Transition",
      "Must be on a CanvasLayer above everything else.",
      "Transition Types Summary",
      "Camera Zones",
      "Area2D Camera Zone",
      "Target zoom when player enters this zone.",
      "Override camera limits within this zone. Leave at 0 to inherit.",
      "Lock camera to a fixed position (useful for arena rooms).",
      "Custom offset applied to camera while in zone.",
      "Priority when zones overlap. Higher wins.",
      "Camera Zone Manager",
      "Level Design with Camera Zones",
      "Pixel-Perfect Camera",
      "Project Settings for Pixel Art",
      "Pixel Snap Camera",
      "Size of one pixel in your game's native resolution.",
      "Handling Smooth Movement with Pixel Snap",
      "Split Screen",
      "Two-Player Horizontal Split",
      "Camera State Machine",
      "Camera States",
      "Reference to the camera this state controls.",
      "Called when this state becomes active.",
      "Called when this state is deactivated.",
      "Called every physics frame while active.",
      "Called every frame while active.",
      "Follow State",
      "Cinematic State",
      "Game Camera (State Machine Host)",
      "Common Mistakes",
      "1. Camera Jitter from Process vs Physics Mismatch",
      "2. Smoothing Fights Camera Limits",
      "3. Zoom Changes Effective Limits",
      "4. Shake Gets Eaten at Map Edges",
      "5. Child Camera Inherits Rotation",
      "6. Multiple Active Cameras",
      "7. Pixel Jitter with Built-in Smoothing",
      "Performance Considerations",
      "Camera2D is Lightweight",
      "Optimizing What the Camera Sees",
      "Camera Change Signals",
      "Tuning Reference",
      "Smoothing Speed by Genre",
      "Shake Amounts by Event",
      "Zoom Ranges by Game Type",
      "See Also"
    ]
  },
  {
    "id": "G70",
    "title": "G70 — Ragdoll Physics & Physical Bones",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 19494,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Ragdoll Architecture",
      "2. Setting Up a Ragdoll",
      "Step 1 — Import a Rigged Model",
      "Step 2 — Generate Physical Bones",
      "Step 3 — Prune Unnecessary Bones",
      "Step 4 — Adjust Collision Shapes",
      "Step 5 — Set Collision Layers",
      "3. Joint Types and Configuration",
      "Available Joint Types",
      "Recommended Joint Setup for Humanoids",
      "Practical Tips",
      "4. Starting and Stopping Simulation",
      "Basic Toggle",
      "Preserving Momentum",
      "Delayed Cleanup",
      "5. Partial Ragdolls",
      "Simulating Specific Bones",
      "Influence Blending",
      "6. Animation-to-Ragdoll Blending",
      "Death Sequence Pattern",
      "Get-Up Animation",
      "7. Active Ragdolls",
      "Approach 1: Influence-Based (Simple)",
      "Approach 2: Joint Motor Targets (Advanced)",
      "8. Applying Forces and Impulses",
      "Directional Hit Knockback",
      "Explosion Radial Force",
      "9. Ragdolls with Jolt Physics",
      "10. Performance and Optimization",
      "Cost Breakdown",
      "Optimization Strategies",
      "Budget Guidelines",
      "11. Common Mistakes",
      "Ragdoll Explodes on Start",
      "Limbs Stretch or Separate",
      "Ragdoll Falls Through Floor",
      "Character Pops When Returning to Animation",
      "12. C# Examples",
      "Basic Ragdoll Toggle",
      "Partial Ragdoll Hit Reaction",
      "Next Steps"
    ]
  },
  {
    "id": "G71",
    "title": "G71 — Adaptive Music & Interactive Audio",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 20109,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Adaptive Music Concepts",
      "Horizontal Re-sequencing",
      "Vertical Layering (Stems)",
      "Playlists",
      "2. AudioStreamSynchronized — Layered Stems",
      "Creating a Layered Music Resource",
      "Resource Setup",
      "Controlling Layers via Script",
      "Maps intensity levels to which stems are active",
      "Each stem: [drums, bass, melody, strings]",
      "Best Practices for Stems",
      "3. AudioStreamInteractive — State-Based Transitions",
      "Setting Up Clips",
      "Transition Table",
      "Transition Types",
      "Fade Modes",
      "Switching Clips via Script",
      "Setting BPM and Beat Size",
      "4. AudioStreamPlaylist — Sequential and Shuffle Playback",
      "Setup",
      "Use Cases",
      "5. Combining Systems",
      "Example: Layered Combat with Exploration Transitions",
      "Controller Script",
      "6. Beat and Bar Synchronization",
      "Setting Musical Properties",
      "Querying Beat Position",
      "Syncing Visual Effects to Beats",
      "7. Connecting Music to Game State",
      "Signal-Driven Music Manager",
      "Connect to game signals to drive music state",
      "8. Audio Bus Setup for Music Layers",
      "9. Performance and Memory",
      "Memory Considerations",
      "CPU Cost",
      "Optimization Tips",
      "10. Common Mistakes",
      "Stems Drift Out of Sync",
      "Transitions Sound Abrupt",
      "Music Doesn't Loop",
      "Beat-Synced Transitions Fire at Wrong Time",
      "11. C# Examples",
      "Basic Interactive Music Controller",
      "Stem Volume Controller",
      "Next Steps"
    ]
  },
  {
    "id": "G72",
    "title": "G72 — Multiplayer State Synchronization & Client Prediction",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 23845,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Authority Models",
      "Server-Authoritative (Recommended)",
      "Client-Authoritative (Simple but Exploitable)",
      "Hybrid Authority",
      "Setting Authority in Godot",
      "2. MultiplayerSynchronizer Deep Dive",
      "Configuration",
      "Replication Modes",
      "Replication Interval",
      "Spawn Synchronization",
      "3. MultiplayerSpawner Patterns",
      "Setup",
      "Server-Side Spawning",
      "Custom Spawn Functions",
      "4. Client-Side Prediction",
      "How It Works",
      "Implementation Pattern",
      "5. Server Reconciliation",
      "Smoothing Corrections",
      "6. Entity Interpolation",
      "Snapshot Buffer",
      "Stores recent state snapshots from the server",
      "Why Render in the Past?",
      "7. Input Synchronization",
      "Dedicated Input Node Pattern",
      "Input Reliability",
      "8. Visibility and Interest Management",
      "MultiplayerSynchronizer Visibility",
      "Per-Peer Visibility",
      "Area-Based Interest Zones",
      "9. Delta Compression and Bandwidth",
      "Bandwidth Budget",
      "Reducing Bandwidth",
      "Godot 4.6 Delta Patching",
      "10. Common Architectures",
      "Architecture A: Simple Co-op (Client-Authoritative)",
      "Architecture B: Competitive Action (Server-Authoritative + Prediction)",
      "Architecture C: MMO-Lite (Server-Authoritative + Interest Management)",
      "11. Debugging Multiplayer State",
      "Built-In Multiplayer Debugger",
      "Debug Overlay",
      "Simulating Latency",
      "12. Common Mistakes",
      "Everyone Moves Everyone",
      "Desync After Alt-Tab",
      "RPC Spam Crashes Server",
      "Authority Not Transferred",
      "13. C# Examples",
      "Server-Authoritative Character",
      "Input Synchronizer",
      "Next Steps"
    ]
  },
  {
    "id": "G73",
    "title": "G73 — Stencil Buffer Techniques",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 16161,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. How the Stencil Buffer Works",
      "Stencil Test Logic",
      "2. Enabling Stencil in Godot 4.5+",
      "Spatial Shader Stencil Parameters",
      "Stencil Compare Operations",
      "3. Stencil Operations Reference",
      "4. Pattern: Object Outlining",
      "GDScript Setup",
      "Outline Shader (stencil_outline.gdshader)",
      "5. Pattern: Portal / Window Effects",
      "Step-by-Step",
      "The MeshInstance3D that defines the portal shape",
      "The SubViewport rendering the destination scene",
      "6. Pattern: X-Ray / See-Through",
      "7. Pattern: Decal Masking",
      "8. 2D Stencil Techniques",
      "Spotlight / Fog of War",
      "9. Performance Considerations",
      "10. Common Mistakes",
      "11. C# Integration Examples",
      "Outline Controller in C#",
      "Portal Manager in C#",
      "Summary"
    ]
  },
  {
    "id": "G74",
    "title": "G74 — LibGodot: Embedding the Engine",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 19783,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. What LibGodot Is (and Isn't)",
      "What it IS",
      "What it ISN'T",
      "2. Architecture Overview",
      "3. Building LibGodot",
      "Build Variants",
      "4. C++ Host Integration",
      "Minimal C++ Host",
      "Building the Host",
      "5. C# Host Integration",
      "Usage in a WPF Application",
      "6. Engine Lifecycle Control",
      "Initialization",
      "Iteration",
      "Shutdown",
      "Frame Timing",
      "7. Scene Loading and Management",
      "Loading Scenes from GDScript (Inside LibGodot)",
      "Dynamic Scene Switching from Host",
      "8. Rendering Integration",
      "Offscreen / Headless Mode",
      "Rendering to Texture",
      "9. Input Forwarding",
      "C# Host — Input Forwarding",
      "10. Communication: Host ↔ Godot",
      "Option 1: File-Based Commands",
      "Option 2: GDExtension Bridge",
      "Option 3: Network Socket",
      "11. Use Cases and Architectures",
      "12. Limitations",
      "13. Common Mistakes",
      "Summary"
    ]
  },
  {
    "id": "G75",
    "title": "G75 — Shader Baking and Precompilation",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 19362,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. The Shader Compilation Problem",
      "Why Shaders Create So Many Variants",
      "2. How Shader Baking Works",
      "3. Enabling the Shader Baker",
      "In the Export Dialog",
      "Via Export Presets Config",
      "Via Command Line (CI/CD)",
      "4. Platform-Specific Behavior",
      "Vulkan (Linux, Android, Windows fallback)",
      "Metal (macOS, iOS, visionOS)",
      "D3D12 (Windows, Xbox)",
      "GLES3 / Compatibility (Mobile, Web)",
      "5. Shader Warm-Up Strategies",
      "Loading Screen Warm-Up",
      "Array of PackedScenes containing representative meshes/materials",
      "Progressive Warm-Up (No Loading Screen)",
      "6. Pipeline Integration",
      "CI/CD Export with Shader Baking",
      "Incremental Baking",
      "7. Monitoring and Debugging",
      "Checking for Runtime Misses",
      "Verbose Export Logging",
      "8. Advanced: Custom Shader Variants",
      "Forcing Variant Generation",
      "Excluding Unused Variants",
      "9. Performance Impact",
      "Export Time Impact",
      "Load Time Impact (Measured on TPS Demo)",
      "Runtime Hitch Elimination",
      "10. Common Mistakes",
      "11. C# Examples",
      "Shader Monitor in C#",
      "Loading Screen Warm-Up in C#",
      "Progressive Warm-Up in C#",
      "Summary"
    ]
  },
  {
    "id": "G76",
    "title": "G76 — GDExtension with Rust (gdext)",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 18649,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Prerequisites and Toolchain",
      "2. Project Setup",
      "Directory Structure",
      "Cargo.toml",
      "src/lib.rs — Entry Point",
      "3. Your First Rust Node",
      "Key Concepts",
      "4. Properties and the Editor",
      "5. Methods, Signals, and Constants",
      "Exposing Methods",
      "Declaring Signals",
      "Constants",
      "6. The .gdextension File",
      "7. Calling Between Rust and GDScript",
      "GDScript → Rust",
      "Rust → GDScript",
      "8. Working with Godot Types",
      "Gd<T> — The Core Smart Pointer",
      "9. Typed Collections (4.4+)",
      "10. Singletons and Autoloads",
      "Registering a Rust Singleton",
      "11. Hot Reloading",
      "12. Performance Patterns",
      "Use Rust for Computational Inner Loops",
      "Rayon for Parallel Work",
      "Avoid Variant Conversion in Hot Paths",
      "13. Cross-Platform Builds",
      "Build Script Example",
      "CI/CD with GitHub Actions",
      "14. Testing",
      "Unit Tests (Pure Rust)",
      "Integration Tests (with Godot)",
      "15. Common Mistakes",
      "Calling Godot APIs from Rust Threads",
      "Forgetting `base: Base<T>`",
      "String Type Confusion",
      "Not Setting `crate-type = [\"cdylib\"]`",
      "Ignoring the Borrow Checker with Gd<T>",
      "16. C# Interop Notes",
      "Summary — When to Reach for Rust"
    ]
  },
  {
    "id": "G77",
    "title": "G77 — VisualShader Patterns and Custom Shader Nodes",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 17697,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. VisualShader Basics",
      "Creating a VisualShader",
      "Shader Modes",
      "Processing Functions",
      "2. Node Categories Reference",
      "3. Common Effect Recipes",
      "Dissolve Effect (CanvasItem or Spatial)",
      "Scrolling UV (Water, Lava, Conveyors)",
      "Rim Lighting (Spatial)",
      "Pixelation (CanvasItem)",
      "4. Expressions and Inline GLSL",
      "5. Creating Custom Nodes",
      "Minimal Custom Node (GDScript)",
      "How It Works",
      "6. Custom Node: Voronoi Noise",
      "7. Custom Node: Outline Detection",
      "8. Packaging Nodes as Addons",
      "9. Performance Considerations",
      "Node Count vs Performance",
      "What Actually Costs Performance",
      "Checking Generated Code",
      "10. VisualShader to Text Conversion",
      "11. C# Workflow Notes",
      "12. Common Mistakes",
      "Forgetting @tool",
      "Mismatched Port Types",
      "Using Reserved GLSL Variable Names",
      "Not Handling Unconnected Inputs",
      "Overly Complex Graphs"
    ]
  },
  {
    "id": "G78",
    "title": "G78 — Pixel-Perfect 2D and Advanced Camera Techniques",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 17649,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. The Pixel-Perfect Problem",
      "2. Project Settings for Pixel Art",
      "Display/Window",
      "Stretch",
      "Rendering/Textures",
      "Rendering/2D",
      "3. Stretch Modes and Aspect Ratios",
      "4. Snap Settings: Pixel Snapping in Practice",
      "Transform Snapping",
      "Fixing Slow-Movement Jitter",
      "5. Camera2D Pixel Snapping",
      "Camera Smoothing at Pixel Scale",
      "6. Room-Based Camera Transitions",
      "Using Camera Limits",
      "Set by room trigger areas",
      "Room Trigger Areas",
      "C# Equivalent",
      "7. Cinematic Camera Triggers",
      "8. Split-Screen with SubViewport",
      "Setup Script",
      "C# Equivalent",
      "9. Parallax Layers at Pixel Scale",
      "10. UI at Native Resolution Over Pixel Viewport",
      "Architecture",
      "Setup",
      "11. Multi-Resolution Strategy",
      "Decision Tree",
      "Testing Across Resolutions",
      "12. Common Mistakes",
      "Using \"Linear\" Texture Filter for Pixel Art",
      "Non-Integer Viewport Sizes",
      "Forgetting Camera Pixel Snapping",
      "Parallax Mirroring Mismatch",
      "Mixing Filtered and Unfiltered Textures",
      "Zooming to Non-Integer Values"
    ]
  },
  {
    "id": "G79",
    "title": "G79 — Input Remapping and Rebinding Systems",
    "description": "Runtime input remapping lets players reassign controls to their preference — a baseline expectation for shipped games...",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 17766,
    "sections": [
      "Table of Contents",
      "1. How InputMap Works at Runtime",
      "2. Reading the Current Binding",
      "GDScript",
      "Returns the first keyboard event bound to an action, or null.",
      "Returns a human-readable label like \"W\" or \"Space\".",
      "C#",
      "3. Listening for New Input",
      "GDScript",
      "Rebind listener — attach to your Settings scene.",
      "C#",
      "4. Swapping a Binding",
      "GDScript",
      "Enum for grouping input device types.",
      "C#",
      "5. Conflict Detection and Resolution",
      "GDScript",
      "Returns the action name that already uses this event, or empty string.",
      "6. Persisting Remapped Bindings",
      "GDScript",
      "C#",
      "7. Building a Rebind UI",
      "GDScript",
      "RebindMenu.gd — attach to a VBoxContainer",
      "Actions the player can rebind (skip engine/UI actions).",
      "8. Gamepad and Keyboard Coexistence",
      "GDScript",
      "DeviceDetector.gd — autoload",
      "9. Restoring Defaults",
      "GDScript",
      "C#",
      "10. Accessibility Considerations",
      "11. Common Mistakes"
    ]
  },
  {
    "id": "godot-arch/G7",
    "title": "G7 — TileMap & Terrain Systems",
    "description": "A complete guide to building tile-based worlds in Godot using the modern TileMapLayer node (Godot 4.3+), TileSet reso...",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 80414,
    "sections": [
      "Table of Contents",
      "1. Architecture Overview",
      "TileMap Pipeline",
      "Godot 4.3+ Migration: TileMap → TileMapLayer",
      "2. TileSet Resource Configuration",
      "Creating a TileSet in Code",
      "Programmatic TileSet creation for procedural or modded content.",
      "TileSet with Physics and Custom Data",
      "Atlas Source Organization",
      "3. TileMapLayer Fundamentals",
      "Basic Setup",
      "Manages a tile-based game level with multiple layers.",
      "Placing and Reading Tiles",
      "Place a tile from atlas source 0, at atlas coords (2, 0), no alternative",
      "Read what tile is at a position",
      "Erase a tile",
      "Convert world position to tile coordinates",
      "Convert tile coordinates to world center position",
      "Coordinate Conversion Pipeline",
      "Iterating Over Tiles",
      "Get all non-empty cells in a layer",
      "Get cells matching a specific tile",
      "Get the bounding rectangle of used tiles",
      "Iterate with bounds check",
      "4. Multi-Layer Architecture",
      "Recommended Layer Setup",
      "Layer Manager",
      "Manages multiple TileMapLayers with convenience methods.",
      "Map enum → TileMapLayer node names",
      "Place a tile on a specific layer",
      "Check if any layer has a solid tile at this position",
      "Get spawn points from the meta layer",
      "Toggle decoration visibility (useful for debug or performance)",
      "When to Use Multiple Layers vs One Layer",
      "5. Terrain System & Auto-Tiling",
      "How Terrain Works",
      "Setting Up Terrain in Code",
      "Programmatic terrain configuration.",
      "Painting Terrain at Runtime",
      "Runtime terrain painting with auto-tile resolution.",
      "Paint a single cell with a terrain, then update neighbors",
      "Paint a region of cells (more efficient than one-by-one)",
      "Paint without affecting neighbors (useful for borders)",
      "Erase terrain and update neighbors",
      "Fill a rectangular region",
      "Terrain Auto-Tile Lookup",
      "Get the terrain ID at a cell",
      "Get the terrain set ID at a cell",
      "Check if a cell has a specific terrain",
      "Get all cells with a specific terrain",
      "Minimum Tile Counts for Full Terrain Coverage",
      "6. Custom Data Layers",
      "Defining Metadata",
      "Read tile metadata from custom data layers.",
      "Get movement cost for pathfinding",
      "Check if tile is destructible",
      "Get hazard damage (0 = safe)",
      "Get tile type as string",
      "Using Custom Data for Game Logic",
      "Process tile interactions for the player character.",
      "Called by the character controller each physics frame",
      "7. Physics & Collision Tiles",
      "Physics Layer Setup",
      "Standard physics layer configuration",
      "One-Way Platforms",
      "Check one-way platform setup via TileData",
      "Runtime Collision Queries Against Tiles",
      "Check if a world position is inside a solid tile",
      "Raycast against tilemap collision",
      "8. Navigation Tiles",
      "Navigation Layer Setup",
      "Building Navigation from Tiles",
      "Builds navigation regions from tilemap data.",
      "Bake navigation mesh from tile data",
      "9. Runtime Tile Manipulation",
      "Tile Modification System",
      "Handles runtime tile changes: digging, building, damage.",
      "History for undo support",
      "Replace a tile and record the change",
      "Destroy a tile (erase it)",
      "Undo the last tile change",
      "Batch Tile Operations",
      "Efficient bulk tile operations.",
      "Fill a rectangle with a single tile",
      "Clear a rectangular region",
      "Copy a region from one layer/position to another",
      "Replace all instances of one tile with another",
      "10. Procedural Generation",
      "BSP Dungeon Generator",
      "Binary Space Partitioning dungeon generator.",
      "Apply the generated dungeon to TileMapLayers",
      "Cellular Automata Cave Generator",
      "Generates organic cave systems using cellular automata.",
      "Apply cave to tilemap",
      "Wave Function Collapse (Simplified)",
      "Simplified Wave Function Collapse for constrained tile placement.",
      "Uses adjacency rules to generate valid tile arrangements.",
      "Adjacency rules: tile_id → { direction → [allowed_neighbor_ids] }",
      "Directions: 0=right, 1=down, 2=left, 3=up",
      "11. Chunk-Based Infinite Worlds",
      "Chunk Manager",
      "Loads and unloads tile chunks around the camera for infinite worlds.",
      "Noise-Based Chunk Generator",
      "Generates chunk tile data using noise functions.",
      "12. Animated Tiles",
      "Animation Setup",
      "Configure an animated water tile programmatically",
      "Speed Modifiers at Runtime",
      "Adjust animation speed based on game state (e.g., time slow-down)",
      "13. Isometric & Hex Tilemaps",
      "Isometric Setup",
      "Isometric tilemap configuration.",
      "Convert screen position to isometric tile coords",
      "Get the world center of an isometric tile",
      "Get neighbors in isometric grid",
      "Hexagonal Setup",
      "Hexagonal tilemap for strategy games.",
      "Hex TileSet configuration:",
      "tile_shape = TILE_SHAPE_HEXAGON",
      "tile_layout = TILE_LAYOUT_STACKED (flat-top) or TILE_OFFSET_AXIS (pointy-top)",
      "tile_size = Vector2i(72, 64) — adjust to your hex sprite size",
      "Get the 6 hex neighbors",
      "Hex distance (cube coordinates)",
      "Get all cells within a hex radius",
      "Hex-based area of effect",
      "14. Y-Sorting & Depth",
      "Y-Sort with TileMapLayer",
      "Configure Y-sorting for top-down games with tall objects.",
      "Scene tree setup for Y-sorting:",
      "Level (Node2D)",
      "├── GroundLayer (TileMapLayer) — y_sort_enabled: false (flat, below everything)",
      "├── YSortRoot (Node2D, y_sort_enabled: true)",
      "│   ├── WallsLayer (TileMapLayer, y_sort_enabled: true)",
      "│   ├── Player (CharacterBody2D)",
      "│   ├── Enemies (Node2D)",
      "│   └── Props (Node2D)",
      "└── OverlayLayer (TileMapLayer) — always above (tree canopy, roofs)",
      "Per-Tile Y-Sort Origin",
      "15. Fog of War on Tilemaps",
      "Tile-Based Fog of War",
      "Tile-based fog of war using a dedicated TileMapLayer.",
      "Atlas coords for fog tiles",
      "Visible = no fog tile (erased)",
      "Update fog based on viewer positions",
      "Check if a cell is currently visible",
      "Check if a cell has been explored",
      "16. Destructible Terrain",
      "Destructible Tile System",
      "Handles tile destruction with health, debris, and respawn.",
      "Deal damage to a tile. Returns true if destroyed.",
      "Damage all tiles in an explosion radius",
      "17. Pathfinding Integration",
      "A* Pathfinding on Tilemaps",
      "A* pathfinding integrated with tilemap data.",
      "Find a path between two tile coordinates",
      "Find path using world positions",
      "Check if a cell is walkable",
      "Update a single cell (after tile changes)",
      "Update multiple cells efficiently (after batch changes)",
      "18. Performance Optimization",
      "Performance Guidelines",
      "Batch Cell Updates",
      "WRONG — triggers quadrant rebuild after EACH set_cell",
      "BETTER — use terrain connect for grouped updates",
      "Reducing Draw Calls",
      "TileMapLayer uses quadrant-based rendering",
      "Each quadrant = one draw call. Default quadrant size = 16 tiles.",
      "Tune quadrant size based on your game:",
      "- Large open worlds: increase to 32 (fewer draw calls)",
      "- Frequently changing tiles: decrease to 8 (smaller rebuild area)",
      "- Default (16): good balance for most games",
      "Culling Strategy",
      "Monitor tile rendering performance.",
      "Memory Optimization",
      "19. Common Mistakes & Troubleshooting",
      "❌ Using Deprecated TileMap Instead of TileMapLayer",
      "WRONG — TileMap is deprecated in Godot 4.3+",
      "RIGHT — Use TileMapLayer (one node per layer)",
      "❌ Forgetting Coordinate Space Conversion",
      "WRONG — global_position is world space, local_to_map expects local space",
      "RIGHT — convert to local first",
      "❌ Checking Source ID -1 Without Null Guard on TileData",
      "WRONG — get_cell_tile_data returns null for empty cells",
      "RIGHT — null check first",
      "❌ Terrain Paint Not Updating Neighbors",
      "WRONG — set_cell with terrain atlas coords doesn't auto-tile",
      "RIGHT — use terrain connect methods",
      "❌ Y-Sort Origin Not Set for Tall Tiles",
      "❌ Physics Shapes Not Showing in Game",
      "❌ Navigation Not Working After Tile Changes",
      "After modifying tiles at runtime, you must rebake navigation",
      "Method 1: Full rebake (simple but expensive)",
      "Method 2: Update the pathfinder grid (for AStarGrid2D)",
      "20. Tuning Reference Tables",
      "Tile Size by Game Type",
      "Chunk Size by World Scale",
      "Terrain Tile Count Requirements",
      "Procedural Generation Algorithm Selection",
      "Layer Count Budget",
      "Related Guides"
    ]
  },
  {
    "id": "G80",
    "title": "G80 — Event Bus and Decoupled Messaging",
    "description": "Godot's built-in signals are excellent for parent-child and sibling communication, but they create tight coupling whe...",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 13792,
    "sections": [
      "Table of Contents",
      "1. Direct Signals vs Event Bus — When to Use Each",
      "2. Basic Event Bus (Autoload)",
      "GDScript — `events.gd`",
      "events.gd — Project > Autoload > \"Events\" (Global Variable: On)",
      "Emitting from any script",
      "In enemy.gd — when the enemy dies",
      "Subscribing from any script",
      "In score_tracker.gd",
      "3. Typed Payloads with Resources",
      "GDScript",
      "damage_event.gd",
      "In events.gd",
      "In weapon.gd",
      "In damage_numbers_ui.gd — only reads the fields it cares about",
      "C#",
      "4. Scoped Event Channels",
      "GDScript — `combat_events.gd`",
      "5. One-Shot and Deferred Connections",
      "One-shot connections",
      "Wait for the player to reach the checkpoint, then trigger once.",
      "Deferred connections",
      "Disconnecting",
      "6. Event Bus in C#",
      "C# — `Events.cs` (Autoload)",
      "Emitting",
      "Subscribing",
      "Alternative: Pure C# Events",
      "7. Suppressing Editor Warnings (4.3+)",
      "Option A: Per-signal annotation",
      "Option B: File-level suppression",
      "Option C: Project-level",
      "8. Performance Considerations",
      "9. Debugging Event Flow",
      "Print-based tracing",
      "In events.gd — debug helper",
      "Godot Debugger",
      "Logging autoload",
      "event_logger.gd — autoload, load AFTER Events",
      "10. Anti-Patterns and the God Object Trap",
      "Too many responsibilities",
      "BAD — bus contains logic",
      "Circular dependencies",
      "Over-bussing",
      "11. Architecture Decision Matrix"
    ]
  },
  {
    "id": "G81",
    "title": "G81 — Advanced Noise and Procedural World Generation",
    "description": "Godot ships FastNoiseLite — a built-in noise generator supporting Simplex, Perlin, Cellular (Worley), and Value noise...",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 20727,
    "sections": [
      "Table of Contents",
      "1. FastNoiseLite Overview",
      "GDScript — Basic setup",
      "C#",
      "Key properties",
      "2. Noise Types and When to Use Each",
      "3. Fractal Settings Explained",
      "GDScript",
      "C#",
      "Fractal types",
      "Tuning guide",
      "4. Domain Warp for Organic Shapes",
      "GDScript",
      "To sample with warp applied:",
      "First warp the coordinate, then sample at the warped position.",
      "C#",
      "5. Biome Mapping with Multiple Noise Layers",
      "GDScript",
      "BiomeMapper.gd",
      "Returns biome for a world-space coordinate.",
      "C#",
      "6. 2D TileMap World Generation",
      "GDScript",
      "WorldGenerator2D.gd — attach to a TileMapLayer node",
      "7. 3D Heightmap Terrain",
      "GDScript",
      "TerrainChunk3D.gd",
      "C#",
      "8. Chunk-Based Infinite Worlds",
      "GDScript",
      "ChunkManager.gd",
      "9. Cave and Dungeon Generation",
      "GDScript",
      "CaveGenerator.gd — creates a voxel-style boolean grid",
      "Marching-cubes or greedy meshing",
      "10. Seeded Determinism",
      "Rules for determinism",
      "GDScript — Seedable world",
      "11. Performance and Threading",
      "GDScript — Threaded chunk generation",
      "12. Common Mistakes"
    ]
  },
  {
    "id": "G82",
    "title": "Backend Services: Cloud Saves, Achievements, and Leaderboards",
    "description": "Integrate online backend services into Godot 4.x games — cloud save synchronization, achievement tracking, leaderboar...",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 24659,
    "sections": [
      "Architecture Overview",
      "1. Authentication",
      "GDScript — Platform Token Authentication",
      "auth_service.gd — Abstract authentication service",
      "Override in platform-specific subclasses",
      "steam_auth.gd — Steam authentication adapter (requires GodotSteam)",
      "C# — REST-Based Authentication",
      "2. Cloud Saves",
      "Conflict Resolution Strategies",
      "GDScript — Cloud Save Manager",
      "cloud_save_manager.gd",
      "How long to wait (seconds) before retrying a failed sync",
      "Maximum retry attempts before giving up",
      "Save locally first, then push to cloud.",
      "Local-first ensures the player never loses progress to a network failure.",
      "Load from cloud, falling back to local if offline.",
      "Steam Cloud Saves (GodotSteam)",
      "steam_cloud_save.gd — Uses Steam Remote Storage API via GodotSteam",
      "Write save data to Steam Cloud. Steam handles sync automatically.",
      "Read save data from Steam Cloud.",
      "Delete save data from Steam Cloud.",
      "3. Achievements",
      "GDScript — Achievement Manager with Platform Abstraction",
      "achievement_manager.gd",
      "Emitted when an achievement unlocks (for in-game UI)",
      "Internal tracking: achievement_id -> { unlocked: bool, progress: float }",
      "Platform adapter reference — set during initialization",
      "Register an achievement definition before use.",
      "Unlock an achievement immediately.",
      "Increment progress toward an achievement.",
      "Automatically unlocks when progress >= max_progress.",
      "C# — Steam Achievements Adapter",
      "4. Leaderboards",
      "GDScript — REST Leaderboard Client",
      "leaderboard_client.gd",
      "Submit a score. The server decides whether to keep or replace.",
      "Fetch top scores for a leaderboard.",
      "GDScript — Steam Leaderboard Integration",
      "steam_leaderboard.gd — Steam leaderboard via GodotSteam",
      "Find or create a Steam leaderboard by name.",
      "Must be called before upload/download.",
      "Upload a score to the current leaderboard.",
      "Download entries around the player.",
      "5. Unified Service Facade",
      "GDScript — Backend Autoload",
      "backend.gd — Autoload singleton tying services together",
      "6. Security Considerations",
      "GDScript — Save File Integrity Check",
      "save_integrity.gd — HMAC-based tamper detection for local saves",
      "Secret key — in production, derive from a machine-specific value",
      "or retrieve from a secure server. Hard-coded keys can be extracted.",
      "7. Testing Backend Integration",
      "test_backend_mock.gd — Mock backend for offline testing",
      "Best Practices",
      "Common Pitfalls"
    ]
  },
  {
    "id": "G83",
    "title": "DLC and Content Pack Distribution",
    "description": "Distribute post-launch content in Godot 4.x using pack files (PCK/ZIP), delta patching (4.6+), Steam DLC integration,...",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 19704,
    "sections": [
      "How Godot Pack Files Work",
      "1. Creating Content Packs",
      "From the Editor",
      "From the Command Line (CI/CD Friendly)",
      "GDScript — Runtime PCK Generation (Advanced)",
      "pck_builder.gd — Build a PCK from a directory of resources at runtime.",
      "Useful for modding tools or user-generated content export.",
      "Pack a directory into a PCK file.",
      "source_dir: absolute path to a directory of Godot resources",
      "output_path: where to write the .pck file",
      "2. Loading Content Packs at Runtime",
      "GDScript — DLC Loader",
      "dlc_loader.gd — Autoload for managing downloadable content packs",
      "Registry of loaded packs: pack_id -> metadata",
      "Directory where DLC packs are stored on the user's machine",
      "Scan for and load all available DLC packs.",
      "Call this on game startup after the main menu is ready.",
      "Load a specific DLC pack by file path.",
      "Check if a specific DLC is available and loaded.",
      "Get list of all loaded DLC IDs.",
      "Load a DLC manifest file that declares what content the pack provides.",
      "C# — DLC Loading",
      "3. DLC Manifest Pattern",
      "GDScript — Manifest Validation",
      "dlc_manifest.gd — Parse and validate DLC manifest files",
      "Check if this DLC is compatible with the current game version.",
      "Simple semver comparison. Returns -1, 0, or 1.",
      "4. Delta Patching (Godot 4.6+)",
      "How Delta Patching Works",
      "Command Line — Generating a Delta Pack",
      "GDScript — Applying a Patch Pack",
      "patch_manager.gd — Apply delta patches to the running game",
      "Apply all pending patches in version order.",
      "5. Steam DLC Integration",
      "GDScript — Steam DLC Ownership Check",
      "steam_dlc.gd — Check Steam DLC ownership via GodotSteam",
      "Map of DLC App IDs to internal pack names.",
      "Configure these to match your Steamworks DLC App IDs.",
      "Check which DLCs the player owns and return their pack IDs.",
      "Install a DLC that the player owns but hasn't downloaded yet.",
      "6. Content Registration Pattern",
      "GDScript — DLC Content Registry",
      "dlc_content_registry.gd — Central registry for DLC-provided content",
      "category -> id -> resource_path",
      "Register a piece of DLC content with the game.",
      "Called by DLC initialization scripts after their pack loads.",
      "Get all registered content in a category.",
      "Check if specific content is available (DLC loaded).",
      "Load and return a registered resource.",
      "GDScript — DLC Initialization Script (Inside the Pack)",
      "res://dlc/chapter_2/init.gd — Runs when the Chapter 2 DLC pack loads.",
      "The DLC loader calls this after successfully loading the pack.",
      "7. Project Organization for DLC",
      "Best Practices",
      "Common Pitfalls"
    ]
  },
  {
    "id": "G84",
    "title": "Memory Management and Optimization",
    "description": "Understand and control memory usage in Godot 4.x games — reference counting, manual resource lifecycle, object poolin...",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 23683,
    "sections": [
      "How Godot Manages Memory",
      "Reference Counting in Detail",
      "Reference counting example",
      "The `Object` Leak Trap",
      "LEAK: Object subclass never freed",
      "1. Monitoring Memory Usage",
      "GDScript — Memory Statistics",
      "memory_monitor.gd — Display runtime memory statistics",
      "Print a snapshot of current memory usage to the console.",
      "Format byte count as human-readable string.",
      "C# — Memory Monitoring",
      "2. Resource Lifecycle Management",
      "Preloading vs. Runtime Loading",
      "PRELOAD: Loaded at script parse time. Fast access, but increases",
      "initial load time and memory. Use for always-needed resources.",
      "LOAD: Loaded on first call. Blocks the thread until complete.",
      "Godot caches the result — subsequent load() calls return the cache.",
      "RESOURCELOADER: Async loading. Does not block. Best for large resources.",
      "Releasing Cached Resources",
      "resource_unloader.gd — Force-unload resources from cache",
      "Unload a resource by clearing all references.",
      "This only works if no other code holds a reference.",
      "Unload all resources matching a prefix (e.g., a level's folder).",
      "3. Texture Memory Management",
      "Texture Compression Formats",
      "GDScript — Texture Budget Tracker",
      "texture_budget.gd — Track VRAM usage from textures",
      "Target VRAM budget in megabytes. Adjust per platform.",
      "Estimate VRAM usage of a texture.",
      "This is an approximation — actual VRAM depends on GPU compression format.",
      "Get current VRAM usage reported by the rendering server.",
      "Check if we are within budget.",
      "Print VRAM usage report.",
      "Mipmaps and Streaming",
      "Mipmaps trade ~33% extra memory for dramatically better visual quality",
      "at distance and improved GPU cache performance. Almost always worth it.",
      "Enable in Import dock: Mipmaps → Generate = true",
      "For very large textures (terrain splat maps, world textures), consider",
      "loading lower mip levels first and upgrading when the player gets close.",
      "Manual mip level control is available through RenderingServer:",
      "4. Node Tree Optimization",
      "Deferred Freeing",
      "Safe pattern: queue_free() during gameplay",
      "Orphan Node Detection",
      "orphan_detector.gd — Periodic orphan check for development builds",
      "5. Object Pooling",
      "GDScript — Generic Object Pool",
      "object_pool.gd — Reusable object pool for any PackedScene",
      "Acquire an object from the pool. Returns null if pool is exhausted.",
      "Return an object to the pool for reuse.",
      "Free all pooled objects. Call on scene transitions.",
      "C# — Object Pool",
      "6. Platform Memory Budgets",
      "GDScript — Platform-Aware Quality Settings",
      "platform_memory.gd — Adjust quality based on available memory",
      "Detect the memory tier for the current platform.",
      "Apply quality settings based on memory tier.",
      "7. GDScript-Specific Memory Tips",
      "Variant Size Awareness",
      "For large data sets, prefer PackedArrays over Array[Variant]",
      "PackedFloat32Array stores floats contiguously — no per-element overhead",
      "Dictionary vs Custom Resource",
      "Dictionaries are flexible but each key-value pair carries Variant overhead.",
      "For structured data repeated thousands of times, use a Resource subclass.",
      "Instead of:",
      "Prefer:",
      "Resources are typed, editor-friendly, and have no per-field Variant boxing",
      "8. Scene Transition Memory Management",
      "GDScript — Memory-Safe Scene Transition",
      "scene_transition.gd — Transition scenes with controlled memory usage",
      "Transition to a new scene with a loading screen in between.",
      "The loading screen lets us fully free the old scene before",
      "allocating the new one, keeping peak memory low.",
      "Debugging Memory Issues",
      "Best Practices",
      "Common Pitfalls"
    ]
  },
  {
    "id": "G85",
    "title": "G85 — Global Illumination Systems",
    "description": "Godot 4 provides three global illumination (GI) systems — LightmapGI, VoxelGI, and SDFGI — each with different tradeo...",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 14739,
    "sections": [
      "Table of Contents",
      "1. GI at a Glance",
      "2. WorldEnvironment Setup",
      "GDScript",
      "C#",
      "3. LightmapGI — Baked Indirect Lighting",
      "When to Use",
      "Setup",
      "GDScript — Configuring Bake Quality",
      "C#",
      "Light Probes for Dynamic Objects",
      "Limitations",
      "4. VoxelGI — Real-Time Volumetric GI",
      "When to Use",
      "Setup",
      "GDScript",
      "C#",
      "Runtime Light Changes",
      "Limitations",
      "5. SDFGI — Signed Distance Field GI",
      "When to Use",
      "Setup",
      "GDScript",
      "C#",
      "How Cascades Work",
      "Limitations",
      "6. Comparison Table",
      "7. Light Probes and Dynamic Objects",
      "GeometryInstance3D.gi_mode",
      "8. Combining GI Techniques",
      "Indoor + Outdoor Hybrid",
      "9. Performance Tuning",
      "LightmapGI",
      "VoxelGI",
      "SDFGI",
      "Monitoring Performance",
      "10. Common Mistakes and Fixes",
      "Light leaking through thin walls",
      "Dynamic objects appear unlit",
      "SDFGI shows no effect",
      "Baked lightmaps look blotchy",
      "VoxelGI shows GI outside its volume"
    ]
  },
  {
    "id": "G86",
    "title": "G86 — Multiplayer Security and Authority Patterns",
    "description": "Godot's multiplayer API makes it easy to send data between peers, but easy networking without security is a recipe fo...",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 17925,
    "sections": [
      "Table of Contents",
      "1. The Trust Problem",
      "2. Authority Models",
      "Server-Authoritative (Recommended)",
      "C#",
      "Client-Authoritative (Avoid for Competitive Games)",
      "3. RPC Security Annotations",
      "Access Modes",
      "Transfer Modes",
      "The Golden Rules",
      "4. Server-Side Input Validation",
      "Validation Template",
      "C#",
      "5. Movement Validation",
      "Server-side movement validator",
      "6. Combat and Damage Validation",
      "Server-side damage calculation",
      "7. Rate Limiting RPCs",
      "Per-player rate limiter",
      "Call this at the top of every any_peer RPC handler",
      "Usage in RPC handlers",
      "8. Authentication and Session Management",
      "Connection Authentication",
      "Server setup with authentication",
      "9. Anti-Cheat Patterns",
      "Server-Side State Ownership",
      "Sanity Checks",
      "Periodic server-side consistency checks",
      "Client-Side Prediction with Server Reconciliation",
      "10. Common Mistakes and Fixes",
      "Using `@rpc(\"any_peer\")` for damage RPCs",
      "Forgetting `multiplayer.is_server()` guard",
      "Reliable RPCs for position sync",
      "Not validating `get_remote_sender_id()`",
      "Client-owned currency or score",
      "No rate limiting on RPCs"
    ]
  },
  {
    "id": "G87",
    "title": "G87 — Color Management, Tone Mapping, and HDR Pipeline",
    "description": "Godot 4 renders in linear HDR color space internally and applies tone mapping to compress the wide dynamic range into...",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 13256,
    "sections": [
      "Table of Contents",
      "1. The HDR Pipeline",
      "Why Tone Mapping Matters",
      "2. Tone Mapping Modes",
      "Visual Comparison",
      "3. AGX — The Modern Default",
      "Key Properties",
      "When to Use AGX",
      "Compensating for AGX Desaturation",
      "4. Configuring Tone Mapping",
      "GDScript",
      "C#",
      "Tonemap White",
      "5. Color Adjustments and Grading",
      "GDScript",
      "C#",
      "Creating a Color Correction LUT",
      "6. White Balance and Exposure",
      "Auto Exposure (Eye Adaptation)",
      "C#",
      "When to Use Auto Exposure",
      "7. Post-Processing Stack",
      "Glow Configuration",
      "8. Practical Workflows by Genre",
      "Horror / Dark Atmospheric",
      "Colorful Stylized",
      "Photorealistic Outdoor",
      "9. Common Mistakes and Fixes",
      "Scene looks washed out with AGX",
      "Bright lights appear as flat white blobs",
      "Auto-exposure makes the scene too dark/bright",
      "Colors look different in editor vs. export",
      "Glow has no effect",
      "Emissive materials don't bloom"
    ]
  },
  {
    "id": "G88",
    "title": "G88 — Multiplayer Lobbies and Matchmaking",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 22787,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Lobby Architecture Overview",
      "Three Common Architectures",
      "Separation of Concerns",
      "2. In-Engine Lobby with ENet",
      "Lobby Server (GDScript)",
      "Tracks connected players: { peer_id: { name, ready, team, ... } }",
      "Called by the joining client to register their info",
      "Lobby Client (GDScript)",
      "C# Equivalent (Server)",
      "3. WebSocket Lobby for Web Exports",
      "4. Lobby State Machine",
      "Validates whether a transition is legal",
      "5. Player Session Management",
      "Session Tokens",
      "Maps session_token -> { peer_id, player_data, disconnect_time }",
      "6. Matchmaking Patterns",
      "Simple Skill-Based Matchmaking",
      "{ peer_id: { skill_rating, queue_time, ... } }",
      "Call periodically (e.g., every 1-2 seconds) to attempt forming matches",
      "Region-Based Matchmaking",
      "7. Steam Lobby Integration",
      "Handoff: Steam Lobby → ENet Gameplay",
      "8. Host Migration",
      "Deterministic: lowest peer_id becomes new host",
      "9. Relay Servers and NAT Traversal",
      "The NAT Problem",
      "Godot's Built-In Relay",
      "External Relay Pattern",
      "10. Security Considerations",
      "11. Common Mistakes"
    ]
  },
  {
    "id": "G89",
    "title": "G89 — Platform-Specific Optimization Strategies",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 19263,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Platform Performance Budgets",
      "2. Choosing the Right Renderer",
      "Setting Renderer Per Export",
      "Runtime Renderer Detection",
      "3. Draw Call Optimization",
      "Techniques by Impact",
      "MultiMesh Example",
      "4. LOD Systems",
      "Automatic LOD with `visibility_range`",
      "Adjusting LOD Distances Per Platform",
      "Scale LOD distances based on platform capability",
      "5. Texture and Asset Optimization",
      "Texture Compression by Platform",
      "Mipmap Streaming (Godot 4.x)",
      "Asset Size Budgets",
      "Maximum texture resolution per quality tier",
      "Shadow atlas size per tier",
      "6. Shader Complexity Management",
      "Mobile Shader Guidelines",
      "Platform Shader Variants",
      "Setting Shader Quality at Runtime",
      "7. Adaptive Quality System",
      "8. Mobile-Specific Techniques",
      "Battery and Thermal Management",
      "Touch Input Overhead",
      "Mobile Rendering Checklist",
      "9. Web-Specific Techniques",
      "SharedArrayBuffer and Threading",
      "Web Export Checklist",
      "Reducing Download Size",
      "10. Desktop Scaling (Steam Deck, Low-End PCs)",
      "Steam Deck Specifics",
      "11. Profiling Per Platform",
      "Quick Profiling Script",
      "12. Common Mistakes"
    ]
  },
  {
    "id": "godot-arch/G8",
    "title": "G8 — Animation Systems",
    "description": "Complete guide to Godot's animation pipeline: AnimationPlayer for keyframe animation, AnimationTree for blending and ...",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 50567,
    "sections": [
      "Table of Contents",
      "1. Animation Pipeline Overview",
      "Which System to Use",
      "Execution Order",
      "2. AnimationPlayer Fundamentals",
      "Basic Setup",
      "Playing Animations",
      "Playback Control",
      "RESET Animation (Critical Pattern)",
      "3. Keyframing Anything",
      "Property Tracks",
      "Method Call Tracks",
      "Bezier Tracks",
      "Audio Tracks",
      "4. Animation Callbacks & Signals",
      "Built-in Signals",
      "Await Pattern",
      "Frame-Accurate Events via Method Tracks",
      "5. AnimatedSprite2D — Frame-by-Frame",
      "Setup",
      "SpriteFrames Resource",
      "Playback",
      "When to Use AnimatedSprite2D vs AnimationPlayer",
      "6. AnimationTree — Blend Trees",
      "Setup",
      "BlendTree Nodes",
      "Common Blend Tree Patterns",
      "7. AnimationTree — State Machines",
      "Setup",
      "Controlling the State Machine",
      "travel() vs start()",
      "Transition Configuration",
      "Advance Conditions (Parameter-Driven Transitions)",
      "8. Blend Spaces (1D & 2D)",
      "1D Blend Space — Speed-Based",
      "2D Blend Space — Directional Movement",
      "Practical: 4-Direction Top-Down Character",
      "9. Root Motion & Transform Tracks",
      "Root Motion (3D Primarily)",
      "2D Position Animation for Attack Lunges",
      "10. Tween System — Procedural Animation",
      "Basic Tweens",
      "Easing & Transitions",
      "Relative & Incremental Tweens",
      "Tween Callbacks & Method Interpolation",
      "11. Tween Chaining & Parallel Execution",
      "Sequential (Default)",
      "Parallel",
      "Looping",
      "Killing & Managing Tweens",
      "Practical: Collect Item Animation",
      "12. Hit Effects — Flash, Shake, Freeze",
      "White Flash (Shader-Based)",
      "Hit Freeze (Frame Pause)",
      "Freezes the scene tree for [param duration] seconds.",
      "Uses [method SceneTree.create_timer] which respects [code]process_always[/code].",
      "Freezes this node and its children for [param duration] seconds.",
      "Knockback Flash + Shake Combo",
      "13. Sprite Sheet Animation Pipeline",
      "Importing Sprite Sheets",
      "AnimationPlayer with Sprite Sheets",
      "Aseprite Integration",
      "Variable Frame Timing",
      "14. State Machine Integration",
      "State-Driven Animation",
      "Base state class with animation support.",
      "Play animation with optional blend override.",
      "Example: Platformer States with Animation",
      "Animation Events → State Transitions",
      "15. Animation Layers & Overrides",
      "Upper/Lower Body Split (2D Approach)",
      "AnimationTree with OneShot Overlay",
      "Animation Override for Variants",
      "16. Cutscene & Dialogue Animation",
      "AnimationPlayer as Cutscene Director",
      "Cutscene Animation Tracks",
      "Dialogue with Typewriter Effect",
      "17. Performance Considerations",
      "AnimationPlayer vs Tween Overhead",
      "Optimization Tips",
      "Animation LOD",
      "Reduce animation quality for distant/offscreen entities.",
      "18. Common Mistakes & Fixes",
      "Mistake 1: Calling play() Every Frame",
      "Mistake 2: Tween Stacking",
      "Mistake 3: AnimationTree Not Active",
      "Mistake 4: Wrong Process Mode",
      "Mistake 5: No RESET Animation",
      "Mistake 6: AnimationTree travel() to Non-Existent State",
      "Mistake 7: Tween on Freed Node",
      "19. Tuning Reference Tables",
      "Animation Speed by Genre",
      "Hit Effect Timing",
      "Squash & Stretch Values",
      "Tween Presets for Common Effects",
      "Related Guides"
    ]
  },
  {
    "id": "G90",
    "title": "G90 — Dependency Injection and Testable Architecture",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 19337,
    "sections": [
      "What This Guide Covers",
      "Table of Contents",
      "1. Why DI in a Game Engine?",
      "2. The Autoload Problem",
      "3. Service Locator Pattern (GDScript)",
      "Registry of service instances by type name",
      "Register a service implementation",
      "Retrieve a service by name. Returns null if not found.",
      "Remove a service (for cleanup or hot-swap)",
      "Clear all services (useful between test runs)",
      "Registering Services at Startup",
      "4. Constructor Injection via _init (GDScript)",
      "Testing with Controlled Dependencies",
      "5. Node-Based Injection (Scene Tree)",
      "Walk up the tree to find the nearest ancestor (or sibling) of a given type",
      "Advantage of Tree-Based Injection",
      "6. C# Dependency Injection",
      "Interface Definition",
      "Service Locator (C#)",
      "Registration and Usage",
      "Using Chickensoft AutoInject (Community Library)",
      "7. Interface Contracts",
      "GDScript \"Interfaces\" via duck typing and class_name",
      "8. Testing with Mock Services",
      "GDScript Test Example (GdUnit4)",
      "C# Test Example (xUnit)",
      "9. Practical Example: Swappable Save System",
      "10. When NOT to Use DI",
      "11. Common Mistakes"
    ]
  },
  {
    "id": "G91",
    "title": "G91 — Multi-Window Games & DisplayServer",
    "description": "Godot 4 introduced first-class multi-window support through the Window node and the DisplayServer singleton. Unlike G...",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 15517,
    "sections": [
      "Table of Contents",
      "1. Architecture: Window, Viewport, and DisplayServer",
      "2. Creating Windows via the Scene Tree",
      "GDScript",
      "Creating a Window at Runtime",
      "3. Creating Windows via DisplayServer",
      "GDScript",
      "4. Embedded vs. Native Windows",
      "GDScript — Toggling Mode",
      "5. Sharing a World Between Windows",
      "GDScript",
      "The main viewport whose world we want to share.",
      "6. Multi-Monitor Positioning",
      "GDScript",
      "7. Input Routing Across Windows",
      "GDScript — Cross-Window Communication",
      "8. Practical Pattern: Inventory in a Separate Window",
      "GDScript",
      "9. Practical Pattern: Mini-Map Window",
      "GDScript",
      "10. C# Examples",
      "Creating and Configuring a Window",
      "Multi-Monitor Placement in C#",
      "11. Platform Considerations",
      "12. Performance Tips",
      "13. Common Mistakes"
    ]
  },
  {
    "id": "G92",
    "title": "G92 — Server Extensions & Custom Backends",
    "description": "Godot 4 uses a server architecture — singletons like PhysicsServer3D, RenderingServer, and AudioServer handle engine ...",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 17607,
    "sections": [
      "Table of Contents",
      "1. Server Architecture Overview",
      "2. Available Extension Classes",
      "3. When to Write a Custom Server",
      "4. Building a PhysicsServer2DExtension (C++)",
      "Project Setup",
      "Extension Header",
      "Minimal Implementation",
      "Registration",
      "5. Registering Your Server Backend",
      "1. The `.gdextension` File",
      "2. The Project Setting",
      "6. GDScript Interaction with Custom Servers",
      "GDScript",
      "Detecting the Active Backend",
      "7. PhysicsServer3DExtension Overview",
      "Key Differences from 2D",
      "Minimal 3D Registration",
      "8. C# Integration",
      "Using PhysicsServer2D from C#",
      "Detecting the Backend in C#",
      "9. Testing Your Custom Server",
      "Strategy",
      "GDScript Integration Test",
      "10. Real-World Examples",
      "11. Performance Considerations",
      "12. Common Mistakes"
    ]
  },
  {
    "id": "G93",
    "title": "G93 — Godot 3.x to 4.x Migration",
    "description": "Godot 4.0 was a ground-up rewrite of core systems — rendering, physics, GDScript, the editor, and the module/plugin a...",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 18940,
    "sections": [
      "Table of Contents",
      "1. Should You Migrate?",
      "2. Before You Start",
      "3. The Automatic Conversion Tool",
      "What It Does",
      "What It Doesn't Do",
      "Running the Converter",
      "4. GDScript 2.0 Changes",
      "Annotations Replace Keywords",
      "Typed Arrays and Dictionaries",
      "`setget` → Inline Properties",
      "`yield` → `await`",
      "`funcref` → `Callable`",
      "Random Number Changes",
      "String Formatting",
      "5. Node and Class Renames",
      "Core Nodes",
      "Properties",
      "6. Signal Syntax Changes",
      "Declaring Signals",
      "Connecting Signals",
      "Emitting Signals",
      "Disconnecting",
      "7. Physics Changes",
      "CharacterBody Movement",
      "Physics Material",
      "Jolt Physics (4.6 Default)",
      "8. Rendering and Shader Changes",
      "Renderer Selection",
      "Shader Language Changes",
      "Environment and Lighting",
      "9. Input System Changes",
      "10. Audio Changes",
      "11. Tween System Rewrite",
      "Key Differences",
      "Chaining and Parallel",
      "12. C# / Mono Changes",
      "Key Changes",
      "Signal Connection in C#",
      "Exported Properties",
      "13. Resource and File Format Changes",
      "File System",
      "14. Migration Strategy by Project Size",
      "Small Projects (< 50 scripts)",
      "Medium Projects (50–200 scripts)",
      "Large Projects (200+ scripts)",
      "15. Post-Migration Checklist",
      "16. Common Pitfalls"
    ]
  },
  {
    "id": "G94",
    "title": "G94 — GraphEdit & Visual Graph Tools",
    "description": "Build custom visual node editors — dialogue trees, skill graphs, ability systems, shader graphs — using Godot's built...",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 24822,
    "sections": [
      "Table of Contents",
      "1. When to Use GraphEdit",
      "2. Core Architecture",
      "3. Setting Up a Basic Graph Editor",
      "GDScript",
      "C#",
      "4. Defining Custom Graph Nodes",
      "GDScript — Multi-Slot Node",
      "C# — Multi-Slot Node",
      "5. Port Types and Connection Rules",
      "6. Handling Connections",
      "Reacting to Deletion",
      "7. GraphFrame for Grouping",
      "8. Serialization and Save/Load",
      "GDScript — Resource-Based Serialization",
      "Saving / Loading",
      "9. Undo/Redo Integration",
      "10. Context Menus and Node Creation",
      "11. Minimap and Navigation",
      "12. Building a Dialogue Tree Editor",
      "13. Runtime Graph Evaluation",
      "C# — Graph Evaluation",
      "14. Packaging as an Editor Plugin",
      "15. Performance Considerations",
      "16. Common Mistakes"
    ]
  },
  {
    "id": "G95",
    "title": "G95 — Custom Import Plugins & Asset Pipelines",
    "description": "Build custom file importers, post-import processors, and automated asset pipelines in Godot 4.x. This guide covers Ed...",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 21640,
    "sections": [
      "Table of Contents",
      "1. How Godot's Import System Works",
      "2. EditorImportPlugin — Custom File Formats",
      "GDScript — Importing a Custom Tileset Format",
      "C# — EditorImportPlugin",
      "3. Import Options and Presets",
      "4. EditorScenePostImportPlugin — 3D Post-Processing",
      "GDScript — Auto-Configure Imported 3D Scenes",
      "Register in Plugin",
      "C# — Scene Post-Import",
      "5. Blender Integration Pipeline",
      "Naming Conventions for Auto-Import",
      "Post-Import Script (per-file)",
      "Advanced: Hot-Reload Workflow",
      "6. Resource Post-Import Scripts",
      "7. Batch Asset Processing",
      "8. Custom Texture Importers",
      "9. Reimport Automation and File Watchers",
      "Watching for External File Changes",
      "10. Production Pipeline Architecture",
      "11. Common Mistakes"
    ]
  },
  {
    "id": "G96",
    "title": "G96 — Animation Libraries, Blend Spaces & Retargeting",
    "description": "Share animations across multiple characters using AnimationLibrary, build smooth locomotion with BlendSpace2D in Anim...",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 23156,
    "sections": [
      "Table of Contents",
      "1. Animation Libraries — Core Concepts",
      "How It Fits Together",
      "2. Creating and Loading Animation Libraries",
      "GDScript — Creating a Library in Code",
      "C# — Creating a Library in Code",
      "Building a Library from Imported GLTF",
      "3. AnimationTree and State Machines",
      "GDScript — State Machine Setup",
      "C# — State Machine Setup",
      "4. BlendSpace1D — Speed-Based Blending",
      "Setup in AnimationTree (Editor)",
      "GDScript — Driving BlendSpace1D",
      "C#",
      "5. BlendSpace2D — Directional Locomotion",
      "Setup in AnimationTree (Editor)",
      "GDScript — Driving BlendSpace2D",
      "C#",
      "6. Skeleton Retargeting",
      "How Retargeting Works",
      "Built-In Profile: SkeletonProfileHumanoid",
      "Setting Up Retargeting in the Editor",
      "GDScript — Runtime BoneMap Setup",
      "C# — Runtime BoneMap Setup",
      "7. Retargeting Workflow: Blender to Godot",
      "Recommended Pipeline",
      "Handling Mixamo Animations",
      "8. Animation Callbacks and Events",
      "9. Layered Animation with Add/Blend Nodes",
      "Upper-Body Override (Aiming While Running)",
      "Filtering Bones",
      "10. Root Motion",
      "GDScript — Root Motion Setup",
      "C#",
      "11. Runtime Animation Sharing",
      "12. Performance Considerations",
      "13. Common Mistakes"
    ]
  },
  {
    "id": "G97",
    "title": "G97 — Deterministic Simulation & Lockstep Multiplayer",
    "description": "Deterministic simulation ensures that given identical inputs, every client produces byte-identical game state — enabl...",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 23001,
    "sections": [
      "Table of Contents",
      "1. Why Deterministic Simulation",
      "2. Lockstep vs State Sync vs Rollback",
      "3. Sources of Non-Determinism in Godot",
      "Floating-Point Arithmetic",
      "Node Processing Order",
      "Random Number Generation",
      "Dictionary Iteration Order",
      "Engine Internals",
      "4. Fixed-Point Math in GDScript",
      "fixed_point.gd — Fixed-point math utilities (Q16.16)",
      "Convert float to fixed-point (use only at boundaries — input, display)",
      "Convert fixed-point back to float (use only for rendering)",
      "Multiply two fixed-point values",
      "Divide two fixed-point values",
      "Fixed-point square root (integer Newton's method)",
      "Fixed-point distance between two points",
      "Deterministic \"random\" using a seeded LCG",
      "Returns value in [0, ONE) range",
      "Usage Pattern",
      "Entity positions stored as fixed-point",
      "Deterministic movement (called in _physics_process)",
      "Convert to float only for rendering",
      "5. Fixed-Point Math in C\\#",
      "Usage in a Godot Node",
      "6. Deterministic Game Loop",
      "lockstep_manager.gd — Drives deterministic simulation",
      "All entities register here for deterministic processing",
      "Input buffer: tick_number -> Dictionary[peer_id, InputFrame]",
      "Called when all inputs for a tick are received",
      "Key Rules",
      "7. Jolt Physics Determinism (4.6+)",
      "What Jolt Guarantees",
      "What Jolt Does NOT Guarantee",
      "Practical Approach",
      "For lockstep with Jolt: pin your Godot version exactly.",
      "Use Jolt for 3D physics but validate with checksums every N ticks.",
      "If you need cross-platform determinism, skip Jolt entirely:",
      "- Use fixed-point math for your own collision detection",
      "- Or use a GDExtension wrapping a deterministic physics lib",
      "2D Games — Custom Collision",
      "Integer AABB collision — fully deterministic, no floats",
      "Integer circle collision",
      "8. Avoiding Engine-Level Non-Determinism",
      "Dictionary Ordering",
      "BAD — dictionary iteration order depends on insertion order",
      "GOOD — sort keys for deterministic iteration",
      "Signal Ordering",
      "GOOD — connect signals in _ready() with deterministic ordering,",
      "or don't rely on signal order for game state changes.",
      "Use the lockstep tick to process events instead.",
      "Node Tree Modifications",
      "BAD — adding nodes mid-tick changes processing order",
      "GOOD — queue additions, apply between ticks",
      "9. Input Collection & Serialization",
      "input_frame.gd — Compact input representation",
      "Pack inputs into a single integer (bitfield)",
      "Bit 0: up, 1: down, 2: left, 3: right, 4: action1, 5: action2",
      "Analog stick as fixed-point Q8.8 (-128..127 range)",
      "Helper accessors",
      "10. Lockstep Networking Architecture",
      "lockstep_network.gd — Peer-to-peer lockstep coordination",
      "Buffer of received inputs: tick -> { peer_id: InputFrame }",
      "How many ticks ahead we allow local input to buffer",
      "11. Checksum Validation & Desync Detection",
      "checksum.gd — CRC32-based state validation",
      "Generate a checksum of all entity positions",
      "Example entity implementation",
      "In your game entity script:",
      "In lockstep_manager.gd — validate every 60 ticks (~3 seconds at 20 Hz)",
      "12. Replay Systems",
      "replay_recorder.gd",
      "13. Performance Considerations",
      "14. Common Mistakes"
    ]
  },
  {
    "id": "G98",
    "title": "G98 — Custom Export Templates & Build Optimization",
    "description": "Custom export templates let you compile Godot's runtime with only the features your game uses — stripping unused node...",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 17236,
    "sections": [
      "Table of Contents",
      "1. Why Custom Export Templates",
      "2. Prerequisites & Toolchain Setup",
      "Required Tools",
      "Get the Source",
      "3. Build Profiles — The Engine Compilation Configuration Editor",
      "Creating a Build Profile in the Editor",
      "What Build Profiles Control",
      "Using the Build Profile",
      "Godot 4.5+ Additions",
      "4. SCons Build System Fundamentals",
      "Key SCons Parameters",
      "The custom.py File",
      "5. Module Stripping",
      "Disable All, Enable Selectively",
      "Module Reference — What's Safe to Disable",
      "C# Considerations",
      "6. Feature Tags & Platform Overrides",
      "Built-In Feature Tags",
      "Defining Custom Feature Tags",
      "Override Files",
      "7. Link-Time Optimization (LTO)",
      "LTO Impact",
      "8. Size Optimization Recipes",
      "Recipe: Minimal 2D Game (GDScript)",
      "Recipe: 3D Game with Networking",
      "Post-Build Stripping",
      "9. Building for Each Platform",
      "Windows",
      "Linux",
      "macOS (Universal Binary)",
      "Web",
      "Android",
      "10. Using Custom Templates in the Editor",
      "Per-Project",
      "Global (All Projects)",
      "11. CI/CD Automation with GitHub Actions",
      "12. Measuring & Validating Results",
      "Before/After Size Comparison",
      "Functional Validation",
      "validation_scene.gd — Run this in your exported build to verify",
      "all required features work after stripping.",
      "13. Common Mistakes"
    ]
  },
  {
    "id": "G99",
    "title": "G99 — ObjectDB Profiling & Advanced Debugging",
    "description": "Godot 4.6 introduced the ObjectDB Profiler — a debugger tool that captures snapshots of every live object in your gam...",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 21598,
    "sections": [
      "Table of Contents",
      "1. The Memory Leak Problem",
      "2. ObjectDB Profiler Overview (4.6+)",
      "What It Does",
      "When to Use It",
      "3. Taking and Viewing Snapshots",
      "Step-by-Step Workflow",
      "Reading a Snapshot",
      "Snapshot Storage",
      "4. Diffing Snapshots to Find Leaks",
      "The Two-Snapshot Method",
      "Reading the Diff",
      "What to Look For",
      "5. Common Leak Patterns & Fixes",
      "Pattern 1: Forgotten queue_free()",
      "BAD — node removed from tree but never freed",
      "GOOD — always free nodes you're done with",
      "Pattern 2: Signal Connections Preventing Cleanup",
      "BAD — enemy connects to a global signal, preventing GC",
      "GOOD — use CONNECT_ONE_SHOT or disconnect explicitly",
      "ALSO GOOD — use Object.CONNECT_REFERENCE_COUNTED flag (4.x)",
      "or simply use the node's tree_exiting signal for cleanup",
      "Pattern 3: Lambda / Callable Capturing",
      "BAD — lambda captures 'self', preventing garbage collection",
      "GOOD — check validity or use a WeakRef pattern",
      "Pattern 4: Unbounded Array Growth",
      "BAD — history grows forever",
      "GOOD — ring buffer with fixed capacity",
      "Pattern 5: Dynamic Resource Duplication",
      "BAD — creates a new material every frame",
      "GOOD — create once, modify in place",
      "6. Programmatic Object Tracking in GDScript",
      "memory_tracker.gd — Runtime leak detector",
      "Captures object counts by class name",
      "Track specific objects you create",
      "Use Performance monitors for aggregate data",
      "Using the Tracker",
      "In your game manager",
      "Call periodically or after scene transitions",
      "7. Programmatic Object Tracking in C\\#",
      "8. Remote Debugger & Performance Monitors",
      "Built-In Performance Monitors",
      "Custom Performance Monitors",
      "Register in _ready() of an autoload",
      "Remote Debugging",
      "9. Debugging Orphaned Nodes",
      "orphan_detector.gd — Autoload that warns about orphan growth",
      "Finding the Culprit",
      "10. Signal Connection Debugging",
      "Print all outgoing signal connections for an object",
      "11. Advanced: Custom Debug Overlays",
      "debug_overlay.gd — Press F3 to toggle",
      "12. Debugging in Exported Builds",
      "Debug Template",
      "Logging to File",
      "file_logger.gd — Captures push_error/push_warning to a log file",
      "Crash Dumps",
      "13. Workflow Checklists",
      "Pre-Release Leak Audit",
      "Continuous Integration Leak Check",
      "ci_leak_test.gd — Run with --headless for automated testing",
      "Quick Triage Flowchart"
    ]
  },
  {
    "id": "godot-arch/G9",
    "title": "G9 — UI & Control Systems",
    "description": "",
    "category": "guide",
    "module": "godot-arch",
    "engine": "Godot",
    "tier": "pro",
    "sizeBytes": 54991,
    "sections": [
      "What This Guide Covers",
      "Control Node Hierarchy — The Foundation",
      "Anchors, Margins, and Layout",
      "Anchor Presets",
      "HUD element pinned to top-left",
      "Full-screen overlay (e.g., pause menu background)",
      "Bottom-center element (dialogue box)",
      "Common Anchor Presets Reference",
      "Container-Based Layout",
      "Inventory grid — 5 columns, auto-sized cells",
      "Stat list — vertical with consistent spacing",
      "Size Flags",
      "Theme System — Consistent Styling",
      "Creating a Theme",
      "theme_setup.gd — Autoload or called once at startup",
      "Applying Themes",
      "Apply to entire scene tree — set on root Control or use Project Settings",
      "Theme lookup order (highest to lowest priority):",
      "StyleBox Types",
      "HUD Design — In-Game Information Display",
      "HUD Architecture",
      "Animated Health Bar",
      "health_bar.gd — Smooth health bar with damage preview",
      "Animated Counter (Score, Coins)",
      "animated_counter.gd — Smoothly counts up/down to target value",
      "Ability Cooldown Slot",
      "ability_slot.gd — Radial cooldown display with input hint",
      "Damage Numbers (Floating Text)",
      "damage_number.gd — Floating damage popup that rises and fades",
      "Spawner — call from your damage system",
      "DamageNumberSpawner.gd (Autoload)",
      "Menu Systems — Navigation and Flow",
      "Screen Manager (Stack-Based)",
      "screen_manager.gd — Manages UI screen stack with transitions",
      "Attach to a root Control node that parents all screen scenes.",
      "Push a new screen on top (previous stays in stack)",
      "Pop current screen, return to previous",
      "Replace current screen (no stack history)",
      "Main Menu",
      "main_menu.gd",
      "Pause Menu",
      "pause_menu.gd — Overlay pause screen with resume/settings/quit",
      "Settings Screen",
      "settings_screen.gd — Audio, video, and controls settings",
      "Inventory UI — Slot-Based Grid",
      "Inventory Data (Separate from UI)",
      "item_data.gd — Resource-based item definition",
      "inventory.gd — Pure data, no UI",
      "Inventory Slot UI",
      "inventory_slot_ui.gd — Single slot visual",
      "Inventory Grid (Container)",
      "inventory_ui.gd — Grid of inventory slots with drag-and-drop",
      "Dialogue Display",
      "Typewriter Text Box",
      "dialogue_box.gd — Typewriter effect with BBCode support",
      "Dialogue System (Simple Linear)",
      "dialogue_runner.gd — Drives dialogue sequences through the dialogue box",
      "Usage:",
      "dialogue_runner.start_dialogue([",
      "{ \"speaker\": \"Elder\", \"text\": \"The forest has been corrupted.\" },",
      "{ \"speaker\": \"Elder\", \"text\": \"You must find the three crystals to restore balance.\" },",
      "{ \"speaker\": \"Player\", \"text\": \"I'll do whatever it takes.\" },",
      "])",
      "Shop / Vendor UI",
      "shop_ui.gd — Buy/sell interface with price display",
      "Tooltips and Popups",
      "Tooltip on Hover",
      "tooltip_manager.gd — Global tooltip that follows the mouse",
      "Register as Autoload.",
      "Confirmation Dialog",
      "confirm_dialog.gd — Reusable yes/no confirmation popup",
      "Gamepad & Keyboard UI Navigation",
      "Focus Architecture",
      "Focus moves between Controls via:",
      "- Arrow keys / D-pad (automatic if focus neighbors set)",
      "- Tab / Shift+Tab (by default)",
      "- ui_up / ui_down / ui_left / ui_right actions",
      "Set focus neighbors in code:",
      "Focus the first element when a screen becomes visible:",
      "Focus Styling",
      "Theme the focus indicator so players know where they are",
      "Input Method Switching",
      "input_icon_manager.gd — Switch between keyboard and gamepad icons",
      "Register as Autoload.",
      "Icon mappings",
      "Screen Transitions",
      "Fade Transition (Reusable)",
      "screen_transition.gd — Global fade-to-black transition",
      "Register as Autoload. Attach a ColorRect child that covers the full viewport.",
      "Usage from anywhere:",
      "ScreenTransition.transition_to_scene(\"res://scenes/level_2.tscn\")",
      "Resolution Scaling & Multi-Resolution Support",
      "Project Settings for Pixel Art Games",
      "Set in Project Settings → Display → Window:",
      "- Viewport Width: 320 (your pixel art resolution)",
      "- Viewport Height: 180",
      "- Window Width Override: 1280 (display window size)",
      "- Window Height Override: 720",
      "- Stretch → Mode: \"viewport\" (pixel-perfect scaling)",
      "- Stretch → Aspect: \"keep\" (letterbox to preserve ratio)",
      "For HD/Vector games:",
      "- Stretch → Mode: \"canvas_items\" (UI scales with window)",
      "- Stretch → Aspect: \"expand\" (fill available space)",
      "Safe Area for Mobile / Ultrawide",
      "safe_area.gd — Keep HUD within safe margins",
      "RichTextLabel — Formatted Text Display",
      "Common BBCode tags:",
      "[b]bold[/b]  [i]italic[/i]  [u]underline[/u]",
      "[color=red]colored text[/color]",
      "[font_size=24]large text[/font_size]",
      "[wave amp=20 freq=3]wavy text[/wave]",
      "[shake rate=10 level=5]shaking text[/shake]",
      "[rainbow freq=0.5 sat=0.8 val=0.8]rainbow[/rainbow]",
      "[img]res://icon.png[/img]",
      "[url=https://example.com]clickable link[/url]",
      "Item description with rarity coloring",
      "Notification / Toast System",
      "notification_manager.gd — Toast notifications that stack and auto-dismiss",
      "Register as Autoload. Attach a VBoxContainer child at the top of the viewport.",
      "Usage:",
      "NotificationManager.show_notification(\"Quest Complete!\", quest_icon, Color.GOLD)",
      "NotificationManager.show_notification(\"New item acquired: Iron Sword\")",
      "Common Mistakes",
      "1. Using CanvasLayer for Everything",
      "2. Not Handling Focus for Gamepad",
      "3. Scaling CollisionShapes with UI",
      "4. Hardcoding Screen Positions",
      "5. Rebuilding UI Every Frame",
      "6. Blocking Input Behind UI Panels",
      "7. Mixing Pixel Sizes Across Resolutions",
      "Performance",
      "Tuning Reference",
      "Font Sizes by Game Type",
      "Minimum Touch Target Sizes",
      "Animation Timing Guide",
      "Container Choice Guide",
      "Related Guides"
    ]
  },
  {
    "id": "haxeflixel-arch/E1",
    "title": "E1 — HaxeFlixel Architecture Overview",
    "description": "",
    "category": "architecture",
    "module": "haxeflixel-arch",
    "engine": "HaxeFlixel",
    "tier": "pro",
    "sizeBytes": 9589,
    "sections": [
      "Philosophy: The Flash Game Renaissance, Natively",
      "Technology Stack",
      "Core Architecture",
      "The Game Loop",
      "FlxBasic: The Root",
      "FlxObject: Physics and Collision",
      "FlxSprite: The Visual Workhorse",
      "FlxGroup: The Container",
      "FlxState: The Scene",
      "Asset Pipeline",
      "Cross-Platform Considerations",
      "Performance Characteristics",
      "Compiler Conditionals",
      "Known Platform Gotchas",
      "When to Choose HaxeFlixel"
    ]
  },
  {
    "id": "haxeflixel-arch/G1",
    "title": "G1 — Getting Started with HaxeFlixel",
    "description": "This guide walks through installing HaxeFlixel, creating a project, and building a minimal working game that compiles...",
    "category": "guide",
    "module": "haxeflixel-arch",
    "engine": "HaxeFlixel",
    "tier": "pro",
    "sizeBytes": 12140,
    "sections": [
      "Prerequisites",
      "Step 1: Install Haxe",
      "Step 2: Install HaxeFlixel and Dependencies",
      "Step 3: Set Up Your Editor",
      "Creating Your First Project",
      "Generate from Template",
      "Understanding Main.hx",
      "Understanding PlayState.hx",
      "Building a Minimal Game",
      "Run It",
      "Understanding the Cross-Compilation Model",
      "HashLink Alternative",
      "Project Configuration (Project.xml)",
      "Adding Assets",
      "Images",
      "Audio",
      "Tilemaps (with Tiled Editor)",
      "Common First-Project Mistakes",
      "Next Steps",
      "Further Reading"
    ]
  },
  {
    "id": "haxeflixel-arch/G2",
    "title": "G2 — HaxeFlixel Tilemaps, Level Design, and Pathfinding",
    "description": "HaxeFlixel provides a robust tilemap system with built-in collision, integration with external editors (Tiled, Ogmo),...",
    "category": "guide",
    "module": "haxeflixel-arch",
    "engine": "HaxeFlixel",
    "tier": "pro",
    "sizeBytes": 11428,
    "sections": [
      "FlxTilemap Basics",
      "Creating a Tilemap from CSV",
      "Creating a Tilemap from an Array",
      "Tile Collision Types",
      "Collision Direction Flags",
      "Collision Callbacks on Tiles",
      "Tiled Map Editor Integration",
      "Setup",
      "Loading a Tiled Map",
      "Using the Level in a State",
      "Ogmo Editor Integration",
      "Grid-Based Pathfinding",
      "Basic Pathfinding",
      "Path Configuration",
      "Diagonal Pathfinding",
      "Custom Pathfinding",
      "Object Pooling with Tilemaps",
      "Runtime Tile Manipulation",
      "Performance Tips",
      "Common Mistakes"
    ]
  },
  {
    "id": "haxeflixel-arch/G3",
    "title": "G3 — HaxeFlixel Physics, Collision, and Gameplay Patterns",
    "description": "HaxeFlixel ships a built-in physics and collision system that handles the vast majority of 2D game needs without exte...",
    "category": "guide",
    "module": "haxeflixel-arch",
    "engine": "HaxeFlixel",
    "tier": "pro",
    "sizeBytes": 10681,
    "sections": [
      "The Collision Model",
      "Basic Collision: collide()",
      "How Separation Works",
      "Built-in Physics Properties",
      "Overlap Detection: overlap()",
      "Process Callbacks for Filtering",
      "Groups and Quadtree Optimization",
      "FlxGroup and FlxTypedGroup",
      "Nesting Groups",
      "Object Pooling via Groups",
      "Pixel-Perfect Collision",
      "Alpha Threshold",
      "Tilemap Collision",
      "Common Gameplay Patterns",
      "Platformer Movement",
      "Top-Down RPG Movement",
      "Damage Zone with Knockback",
      "Moving Platform",
      "Collision Debugging",
      "Performance Tips"
    ]
  },
  {
    "id": "haxeflixel-arch/G4",
    "title": "G4 — Animation and Sprites",
    "description": "HaxeFlixel's sprite system is built around FlxSprite and its FlxAnimationController. This guide covers loading sprite...",
    "category": "guide",
    "module": "haxeflixel-arch",
    "engine": "HaxeFlixel",
    "tier": "pro",
    "sizeBytes": 9780,
    "sections": [
      "FlxSprite Basics",
      "Static Sprite",
      "Inline Colored Rectangle (No Image)",
      "Sprite Sheet Animation",
      "Loading an Animated Sprite Sheet",
      "Adding Animations",
      "Texture Atlas Animation",
      "Loading an Atlas",
      "Adding Animations from an Atlas",
      "Selecting Specific Frames with addByIndices",
      "Animation Playback Control",
      "Basic Playback",
      "Checking State",
      "Animation Callbacks",
      "Common Character Animation Pattern",
      "Performance Tips"
    ]
  },
  {
    "id": "haxeflixel-arch-rules",
    "title": "HaxeFlixel — AI Rules",
    "description": "Engine-specific rules for projects using HaxeFlixel. These supplement the engine-agnostic rules in docs/core/ai-workf...",
    "category": "reference",
    "module": "haxeflixel-arch",
    "engine": "HaxeFlixel",
    "tier": "pro",
    "sizeBytes": 9605,
    "sections": [
      "Architecture Context",
      "Tech Stack",
      "What HaxeFlixel Is (and Is Not)",
      "Cross-Compilation Model",
      "Project Structure Conventions",
      "Core Class Hierarchy",
      "HaxeFlixel-Specific Code Rules",
      "Entry Point Pattern",
      "State Management",
      "Sprites and Animation",
      "Collision Detection",
      "Object Pooling with Groups",
      "Tilemaps",
      "Camera",
      "FlxG Global Utilities",
      "Build and Run",
      "Common Mistakes to Catch"
    ]
  },
  {
    "id": "haxeflixel-arch/R1",
    "title": "R1 — Cross-Compilation Model",
    "description": "HaxeFlixel's defining feature is cross-compilation: a single Haxe codebase compiles to native C++ binaries, JavaScrip...",
    "category": "reference",
    "module": "haxeflixel-arch",
    "engine": "HaxeFlixel",
    "tier": "pro",
    "sizeBytes": 11634,
    "sections": [
      "The Compilation Pipeline",
      "Target Reference",
      "Desktop Targets (C++ via hxcpp)",
      "HTML5 Target (JavaScript)",
      "Mobile Targets",
      "Platform Conditionals",
      "Available Conditional Flags",
      "Project.xml Configuration",
      "Key Sections",
      "Asset Handling by Target",
      "Build Modes",
      "Neko Target (Rapid Iteration)",
      "HashLink (Alternative VM Target)",
      "Common Cross-Platform Issues",
      "Audio Formats",
      "Input Differences",
      "Filesystem Access",
      "Threading"
    ]
  },
  {
    "id": "haxeflixel-arch/R2",
    "title": "R2 — Audio and UI Systems",
    "description": "HaxeFlixel provides a built-in audio system through FlxG.sound and multiple approaches to UI — from core FlxText/FlxB...",
    "category": "reference",
    "module": "haxeflixel-arch",
    "engine": "HaxeFlixel",
    "tier": "pro",
    "sizeBytes": 12481,
    "sections": [
      "Audio System Overview",
      "Architecture",
      "Playing Sound Effects",
      "Quick Play (Fire-and-Forget)",
      "Managed Sounds (Keep a Reference)",
      "Preloading",
      "Music",
      "Music Properties",
      "Volume Control",
      "Global Volume",
      "Sound Groups",
      "FlxSound Properties and Methods",
      "Proximity / Positional Audio",
      "Cross-Platform Audio Formats",
      "UI with Core HaxeFlixel",
      "FlxText",
      "FlxButton",
      "HUD Pattern with FlxGroup",
      "UI with flixel-ui Addon",
      "Installation",
      "XML-Driven Layouts",
      "Loading XML UI in Code",
      "Code-Only flixel-ui (No XML)",
      "Key flixel-ui Widgets",
      "Dialogue Systems",
      "Common Patterns",
      "Settings Screen with Volume Sliders",
      "Fade Between Music Tracks"
    ]
  },
  {
    "id": "heaps-arch/E1",
    "title": "Heaps Architecture Overview",
    "description": "Heaps is a cross-platform 2D/3D game framework written in Haxe, created by Nicolas Cannasse (creator of the Haxe lang...",
    "category": "architecture",
    "module": "heaps-arch",
    "engine": "Heaps",
    "tier": "pro",
    "sizeBytes": 10023,
    "sections": [
      "Design Philosophy",
      "High-Level Architecture",
      "Package Structure",
      "hxd — Platform Layer and Application Lifecycle",
      "h2d — 2D Scene Graph",
      "h3d — 3D Scene Graph",
      "hxsl — Heaps Shader Language",
      "Compilation Targets",
      "Resource Pipeline",
      "Ecosystem Tools",
      "Performance Characteristics",
      "Comparison with HaxeFlixel"
    ]
  },
  {
    "id": "heaps-arch/G1",
    "title": "G1 — Heaps Getting Started",
    "description": "Heaps is a cross-platform 2D/3D game framework for Haxe, created by Nicolas Cannasse (the Haxe language creator) and ...",
    "category": "guide",
    "module": "heaps-arch",
    "engine": "Heaps",
    "tier": "pro",
    "sizeBytes": 10176,
    "sections": [
      "Prerequisites",
      "Installing Heaps",
      "Project Structure",
      "build.hxml — Compiler Configuration",
      "Building and Running",
      "Minimal Application",
      "Drawing a Sprite",
      "Resource Directory Setup",
      "Sprite Sheet Animation",
      "Handling Input",
      "Keyboard Input",
      "Mouse Input",
      "Playing Audio",
      "Compilation Targets",
      "Web Build Example",
      "Native Release Build (HashLink/C)",
      "Project Checklist",
      "Next Steps"
    ]
  },
  {
    "id": "heaps-arch/G2",
    "title": "G2 — Heaps 2D Scene Graph and Rendering",
    "description": "Heaps organizes all 2D rendering through a scene graph — a tree of h2d.Object nodes rooted in an h2d.Scene. Every vis...",
    "category": "guide",
    "module": "heaps-arch",
    "engine": "Heaps",
    "tier": "pro",
    "sizeBytes": 10696,
    "sections": [
      "The Object Tree",
      "Parent-Child Relationships",
      "Removing and Reparenting",
      "Core Drawable Types",
      "h2d.Bitmap — Static Images",
      "h2d.Anim — Sprite Animation",
      "Splitting Sprite Sheets",
      "h2d.Text — Text Rendering",
      "h2d.Graphics — Procedural Shapes",
      "Layers and Draw Order",
      "Option 1: h2d.Layers",
      "Option 2: Manual ysort",
      "Interactivity: h2d.Interactive",
      "Common Interactive Events",
      "Camera: h2d.Camera",
      "SpriteBatch: High-Performance Rendering",
      "When to Use Each",
      "Practical Pattern: Game Scene Structure"
    ]
  },
  {
    "id": "heaps-arch/G3",
    "title": "G3 — Heaps Resource Management and Asset Loading",
    "description": "Heaps provides a compile-time-checked, macro-powered resource system that eliminates string-based asset paths and cat...",
    "category": "guide",
    "module": "heaps-arch",
    "engine": "Heaps",
    "tier": "pro",
    "sizeBytes": 9110,
    "sections": [
      "How hxd.Res Works",
      "Directory Mapping Rules",
      "Custom Resource Path",
      "Initializing the Resource Loader",
      "LocalFileSystem (Development)",
      "EmbedFileSystem (Small Games / Jams)",
      "PAK FileSystem (Production)",
      "Resource Types and Conversions",
      "Loading Images",
      "Loading Sounds",
      "Loading Fonts",
      "Loading Data Files",
      "Caching Behavior",
      "Texture Sharing",
      "Disposing Cached Resources",
      "The PAK Packaging System",
      "Building a PAK File",
      "PAK vs. Embed vs. Local",
      "Multi-PAK for DLC or Streaming",
      "Hot-Reloading in Development",
      "Best Practices"
    ]
  },
  {
    "id": "heaps-arch/G4",
    "title": "G4 — Shaders and Post-Processing in Heaps",
    "description": "Heaps uses a custom shader system built on HXSL (Haxe Shader Language), a type-safe, compile-time-checked shading lan...",
    "category": "guide",
    "module": "heaps-arch",
    "engine": "Heaps",
    "tier": "pro",
    "sizeBytes": 10999,
    "sections": [
      "HXSL vs GLSL",
      "Writing a Basic HXSL Shader",
      "Color Tint Shader",
      "Applying to a 2D Object",
      "Applying to a 3D Mesh Material",
      "HXSL Variable Types",
      "Built-in Pipeline Variables",
      "Vertex Shaders",
      "Wave Distortion Shader",
      "Texture Sampling in Shaders",
      "Full-Screen Post-Processing",
      "Simple Grayscale Post-Process (2D)",
      "h2d.filter — Built-in Filters",
      "3D Post-Processing with ScreenFx",
      "Shader Composition",
      "Removing a Shader",
      "Performance Tips",
      "Common Pitfalls"
    ]
  },
  {
    "id": "heaps-arch-rules",
    "title": "Heaps — AI Rules",
    "description": "Engine-specific rules for projects using Heaps (Haxe game framework by Shiro Games). These supplement the engine-agno...",
    "category": "reference",
    "module": "heaps-arch",
    "engine": "Heaps",
    "tier": "pro",
    "sizeBytes": 10130,
    "sections": [
      "Architecture Context",
      "Tech Stack",
      "What Heaps Is (and Is Not)",
      "Cross-Compilation Model",
      "Notable Games",
      "Project Structure Conventions",
      "Module Architecture",
      "h2d Key Classes",
      "h3d Key Classes",
      "hxd Key Classes",
      "Heaps-Specific Code Rules",
      "Application Lifecycle (hxd.App)",
      "Scene Graph — Add Objects to Scenes",
      "Resource Management (hxd.Res)",
      "Compile Configuration (.hxml)",
      "Shaders (HXSL)",
      "Input Handling",
      "Build and Run",
      "Common Mistakes to Catch"
    ]
  },
  {
    "id": "heaps-arch/R1",
    "title": "R1 — Heaps h3d: 3D Rendering, Materials, and Lighting",
    "description": "Heaps provides a complete 3D rendering pipeline through the h3d package. This reference covers mesh creation, FBX mod...",
    "category": "reference",
    "module": "heaps-arch",
    "engine": "Heaps",
    "tier": "pro",
    "sizeBytes": 11153,
    "sections": [
      "The h3d Scene Graph",
      "Key h3d.scene Classes",
      "Creating Meshes from Primitives",
      "Built-in Primitives",
      "Loading FBX Models",
      "ModelCache (Recommended)",
      "Manual Loading (Advanced)",
      "Animation Playback",
      "Basic Materials",
      "Color and Texture",
      "Enabling Lighting",
      "Blend Modes",
      "PBR Materials",
      "PBR Setup (Required Once)",
      "Applying PBR Properties",
      "PBR Lighting",
      "PBR Key Classes",
      "Shadows",
      "Enabling Shadows",
      "Shadow Map Quality",
      "Shadow Requirements Checklist",
      "3D Camera",
      "Simple Orbit Camera",
      "GPU Particles (3D)",
      "Common Patterns",
      "Minimal 3D Scene with Lighting"
    ]
  },
  {
    "id": "kaplay-arch/E1",
    "title": "E1 — Kaplay Architecture Overview",
    "description": "",
    "category": "architecture",
    "module": "kaplay-arch",
    "engine": "Kaplay",
    "tier": "pro",
    "sizeBytes": 13065,
    "sections": [
      "Core Philosophy: Functions, Components, and Tags",
      "Initialization: The `kaplay()` Function",
      "Key Config Decisions",
      "Game Objects and Components: The Core Model",
      "How Components Work",
      "Tags: The Identification System",
      "Scene Management",
      "Scene Lifecycle",
      "Asset Loading",
      "Supported Asset Types",
      "Input Handling",
      "Physics and Collision",
      "Recommended Project Structure",
      "Custom Components",
      "Comparison with Other Web Frameworks",
      "Mobile and Deployment",
      "Mobile Considerations",
      "Deployment",
      "Key Takeaways for AI Code Generation"
    ]
  },
  {
    "id": "kaplay-arch/G10",
    "title": "G10 — Kaplay Mobile Support & Deployment",
    "description": "",
    "category": "guide",
    "module": "kaplay-arch",
    "engine": "Kaplay",
    "tier": "pro",
    "sizeBytes": 11000,
    "sections": [
      "Overview",
      "Canvas Scaling with Letterbox",
      "Basic Letterbox Setup",
      "Without Letterbox (Stretch)",
      "Pixel Art Games",
      "Fullscreen",
      "Touch Input",
      "Detecting Touch vs Mouse",
      "Virtual D-Pad for Mobile",
      "Action Buttons",
      "Detecting Mobile",
      "Performance on Mobile",
      "Keep the Canvas Small",
      "Object Count",
      "Texture Guidelines",
      "Audio on Mobile",
      "Deployment: Static Hosting",
      "Build with Vite",
      "Without a Bundler",
      "Hosting Options",
      "Deployment: Desktop with Neutralinojs",
      "Deployment: Native Mobile with Capacitor",
      "PWA Setup",
      "manifest.json",
      "Service Worker",
      "Deployment Checklist",
      "Framework Comparison: Mobile Readiness"
    ]
  },
  {
    "id": "kaplay-arch/G11",
    "title": "G11 — Kaplay Camera Systems & Viewport",
    "description": "",
    "category": "guide",
    "module": "kaplay-arch",
    "engine": "Kaplay",
    "tier": "pro",
    "sizeBytes": 11402,
    "sections": [
      "Overview",
      "Camera Position",
      "Legacy API (camPos / camScale / camRot)",
      "Modern API (setCamPos / getCamPos)",
      "Following a Target",
      "Basic Follow (Instant Lock)",
      "Smooth Follow (Lerp)",
      "Look-Ahead Follow",
      "Deadzone Follow",
      "Camera Bounds",
      "Bounds with Zoom",
      "Zoom",
      "Rotation",
      "Camera Effects",
      "Screen Shake",
      "Flash",
      "Coordinate Conversion",
      "Camera Transform Matrix",
      "Component-Based Camera & Viewport (v4000+)",
      "Named Cameras",
      "Viewports",
      "Switching Cameras at Runtime",
      "Post-Processing per Viewport",
      "Common Patterns",
      "Zelda-Style Room Transitions",
      "Boss Reveal Cutscene",
      "Damage Feedback",
      "Cross-Framework Comparison",
      "Performance Notes"
    ]
  },
  {
    "id": "kaplay-arch/G12",
    "title": "G12 — Kaplay Debugging & Development Tools",
    "description": "",
    "category": "guide",
    "module": "kaplay-arch",
    "engine": "Kaplay",
    "tier": "pro",
    "sizeBytes": 12332,
    "sections": [
      "Overview",
      "Enabling Debug Mode",
      "Keyboard Toggle",
      "Programmatic Toggle",
      "The Inspect Overlay",
      "What the Overlay Shows",
      "On-Screen Logging",
      "When to Use `debug.log()` vs `console.log()`",
      "Time Manipulation",
      "Keyboard Shortcuts",
      "Programmatic Time Control",
      "Practical Slow-Motion Debugging",
      "Debug Configuration Options",
      "Building Custom Debug Tools",
      "FPS / Performance Monitor",
      "Object Counter",
      "Clickable Object Inspector",
      "State Change Logger",
      "Debug Workflow Patterns",
      "The \"Debug Scene\" Pattern",
      "Conditional Debug Code",
      "Default Debug Keyboard Shortcuts",
      "Troubleshooting Common Issues",
      "\"F1 doesn't work in Chrome\"",
      "\"Hitboxes don't match my sprites\"",
      "\"Too many objects are slowing down the game\"",
      "Framework Comparison",
      "Next Steps"
    ]
  },
  {
    "id": "kaplay-arch/G13",
    "title": "G13 — Kaplay Performance Optimization",
    "description": "",
    "category": "guide",
    "module": "kaplay-arch",
    "engine": "Kaplay",
    "tier": "pro",
    "sizeBytes": 13500,
    "sections": [
      "Overview",
      "Understanding the Cost of Game Objects",
      "The Object vs. Draw-Call Spectrum",
      "When to Use Each",
      "Example: Efficient Tilemap Rendering",
      "Draw-Call Batching",
      "What Breaks Batching",
      "How to Preserve Batching",
      "Collision Detection: Choosing the Right Algorithm",
      "Available Algorithms",
      "Configuring the Broadphase",
      "Narrow-Phase: GJK vs. SAT",
      "Reducing Collision Checks",
      "Off-Screen Culling",
      "The `offscreen()` Component",
      "Manual Culling for Draw-Loop Rendering",
      "Particles: Use the Built-in System",
      "Object Pooling",
      "Texture and Asset Optimization",
      "Use Spritesheets Over Individual Images",
      "Keep Textures Power-of-Two",
      "Compress Audio",
      "Profiling Your Game",
      "Built-in Debug Mode",
      "Browser DevTools",
      "Quick Checklist",
      "Framework Comparison: Performance Strategies",
      "Summary"
    ]
  },
  {
    "id": "kaplay-arch/G1",
    "title": "G1 — Kaplay Components & Game Objects",
    "description": "",
    "category": "guide",
    "module": "kaplay-arch",
    "engine": "Kaplay",
    "tier": "pro",
    "sizeBytes": 17972,
    "sections": [
      "Overview",
      "Creating Game Objects with `add()`",
      "How Composition Works",
      "Built-In Component Reference",
      "Transform & Position",
      "Rendering",
      "Physics & Collision",
      "Gameplay",
      "Sprites and Animation",
      "Loading a Spritesheet with Animations",
      "Playing Animations",
      "Tags: The Identification System",
      "Tag Naming Conventions",
      "Parent-Child Hierarchies",
      "Key Hierarchy Rules",
      "Custom Components",
      "Custom Component Lifecycle Hooks",
      "Advanced: Component with Custom Methods",
      "The `state()` Component: Built-In State Machine",
      "The `stay()` Component: Surviving Scene Transitions",
      "Practical Patterns",
      "Platformer Player",
      "Collectible Coin",
      "Spawner Pattern",
      "Comparison: Game Object Models Across Frameworks",
      "Key Takeaways"
    ]
  },
  {
    "id": "kaplay-arch/G2",
    "title": "G2 — Kaplay Scenes & Navigation",
    "description": "",
    "category": "guide",
    "module": "kaplay-arch",
    "engine": "Kaplay",
    "tier": "pro",
    "sizeBytes": 12105,
    "sections": [
      "Overview",
      "Defining Scenes with `scene()`",
      "Key Rules",
      "Navigating with `go()` and Passing Data",
      "What Happens During `go()`",
      "Persistent Objects with `stay()`",
      "Limiting `stay()` to Specific Scenes",
      "`stay()` Caveats",
      "Scene Architecture Patterns",
      "Pattern 1: Linear Flow (Menu → Game → Game Over)",
      "Pattern 2: Pause Overlay with `stay()`",
      "Pattern 3: Level Select with Dynamic Scenes",
      "Pattern 4: Shared State Manager with `stay()`",
      "Comparison: Scene Navigation Across Frameworks",
      "Debugging Scene Issues",
      "\"My objects disappeared after `go()`\"",
      "\"Event handlers stopped working after switching scenes\"",
      "\"Data is `undefined` in my scene function\"",
      "Key Takeaways"
    ]
  },
  {
    "id": "kaplay-arch/G3",
    "title": "G3 — Kaplay Input Handling",
    "description": "",
    "category": "guide",
    "module": "kaplay-arch",
    "engine": "Kaplay",
    "tier": "pro",
    "sizeBytes": 12191,
    "sections": [
      "Overview",
      "Keyboard Input",
      "Event-Based: onKeyPress / onKeyDown / onKeyRelease",
      "Listening to Any Key",
      "Polling: isKeyDown / isKeyPressed / isKeyReleased",
      "Mouse Input",
      "Event-Based",
      "Polling",
      "Touch Input",
      "Disabling Touch-to-Mouse Translation",
      "Gamepad Input",
      "Standard Gamepad Button Names",
      "Buttons API (Input Bindings)",
      "Defining Bindings",
      "Using Button Events",
      "Polling Buttons",
      "Dynamic Rebinding",
      "Simulated Input",
      "Per-Object Input: area() + onClick / onHover",
      "Practical Patterns",
      "Top-Down 8-Direction Movement",
      "Mobile Virtual Joystick",
      "Input Buffering for Responsive Controls",
      "Framework Comparison",
      "Mobile & Browser Considerations",
      "Next Steps"
    ]
  },
  {
    "id": "kaplay-arch/G4",
    "title": "G4 — Kaplay Physics and Collisions",
    "description": "",
    "category": "guide",
    "module": "kaplay-arch",
    "engine": "Kaplay",
    "tier": "pro",
    "sizeBytes": 13796,
    "sections": [
      "Overview",
      "Core Components",
      "`area()` — Collision Shape",
      "`body()` — Physics Body",
      "Body Properties",
      "Gravity",
      "Collision Events",
      "Global Collision Events",
      "Per-Object Collision Events",
      "Manual Collision Checks",
      "Jumping and Grounding",
      "`onGround()` and `onFall()`",
      "Effectors",
      "Area Effector",
      "Buoyancy Effector",
      "Point Effector",
      "Surface Effector",
      "Collision Layers and Ignoring",
      "Common Patterns",
      "Pattern 1: Platformer Physics",
      "Pattern 2: Top-Down Physics (No Gravity)",
      "Pattern 3: Trigger Zones (Area Without Body)",
      "Comparison: Physics Across Frameworks",
      "Key Takeaways"
    ]
  },
  {
    "id": "kaplay-arch/G5",
    "title": "G5 — Kaplay Sprites and Animation",
    "description": "",
    "category": "guide",
    "module": "kaplay-arch",
    "engine": "Kaplay",
    "tier": "pro",
    "sizeBytes": 9793,
    "sections": [
      "Overview",
      "Loading Sprites",
      "Single-Image Sprite",
      "Spritesheet with Animations",
      "Sprite Atlases",
      "The `sprite()` Component",
      "Component Options",
      "Key Properties",
      "Key Methods",
      "Playing Animations",
      "Basic Playback",
      "Playback Options",
      "Checking Animation State",
      "Animation Events",
      "Common Patterns",
      "Direction-Based Sprite Flipping",
      "State-Driven Animation",
      "One-Shot Attack Animation",
      "Browser and Mobile Notes",
      "Cross-Framework Comparison"
    ]
  },
  {
    "id": "kaplay-arch/G6",
    "title": "Audio and Sound",
    "description": "Kaplay provides a lightweight audio API built on the Web Audio API. Sounds are loaded with loadSound() or loadMusic()...",
    "category": "guide",
    "module": "kaplay-arch",
    "engine": "Kaplay",
    "tier": "pro",
    "sizeBytes": 9300,
    "sections": [
      "Loading Audio",
      "Sound Effects — `loadSound()`",
      "Background Music — `loadMusic()`",
      "Playing Sounds",
      "The `AudioPlay` Handle",
      "End-of-Playback Callback",
      "Global Volume Control",
      "Browser Autoplay Policy",
      "The `burp()` Helper",
      "Common Patterns",
      "Separate Music and SFX Volume",
      "Scene-Based Music Transitions",
      "Collision Sound Effects",
      "Positional Audio (Manual Pan)",
      "Performance and Mobile Notes",
      "Cross-Framework Comparison"
    ]
  },
  {
    "id": "kaplay-arch/G7",
    "title": "Tilemaps and Level Design",
    "description": "Kaplay provides addLevel() for building tile-based levels from ASCII string maps. Each character maps to a factory fu...",
    "category": "guide",
    "module": "kaplay-arch",
    "engine": "Kaplay",
    "tier": "pro",
    "sizeBytes": 14205,
    "sections": [
      "addLevel() — ASCII Map Levels",
      "Basic Example",
      "LevelOpt Configuration",
      "Level Object Methods",
      "Tile Component",
      "Pathfinding",
      "Tiled Editor Integration",
      "Loading a Tiled JSON Map",
      "Tiled Workflow Tips",
      "Dynamic Level Manipulation",
      "Destroying and Spawning Tiles",
      "Procedural Level Generation",
      "Camera and Scrolling",
      "Performance Tips",
      "Common Patterns",
      "One-Way Platforms",
      "Moving Platforms",
      "Level Transitions",
      "Cross-Framework Comparison"
    ]
  },
  {
    "id": "kaplay-arch/G8",
    "title": "Asset Loading and Resources",
    "description": "Kaplay loads all assets — sprites, sounds, fonts, shaders, JSON data — through a global asset manager. You call load(...",
    "category": "guide",
    "module": "kaplay-arch",
    "engine": "Kaplay",
    "tier": "pro",
    "sizeBytes": 8110,
    "sections": [
      "Core Concept — Load Then Use",
      "Loading Sprites",
      "Basic Sprites — `loadSprite()`",
      "Sprite Atlases — `loadSpriteAtlas()`",
      "Aseprite Integration — `loadAseprite()`",
      "Built-in Debug Sprite — `loadBean()`",
      "Loading Fonts",
      "TrueType / OpenType / WOFF — `loadFont()`",
      "Bitmap Fonts — `loadBitmapFont()`",
      "Loading Other Assets",
      "JSON Data — `loadJSON()`",
      "Shaders — `loadShader()` / `loadShaderURL()`",
      "Load Configuration",
      "Base Path — `loadRoot()`",
      "Custom Async Loaders — `load()`",
      "Loading Progress",
      "Querying Progress — `loadProgress()`",
      "Custom Loading Screen",
      "Retrieving Assets at Runtime",
      "Best Practices",
      "Organize by Category",
      "Use `loadRoot()` for Portability",
      "Prefer Sprite Atlases for Production",
      "Preload Versus Lazy Load",
      "Browser and Mobile Considerations",
      "Cross-Framework Comparison"
    ]
  },
  {
    "id": "kaplay-arch/G9",
    "title": "UI and HUD",
    "description": "Kaplay builds UI from the same game objects and components used for everything else — there is no separate UI system....",
    "category": "guide",
    "module": "kaplay-arch",
    "engine": "Kaplay",
    "tier": "pro",
    "sizeBytes": 10828,
    "sections": [
      "Text Rendering",
      "The `text()` Component",
      "`TextCompOpt` Properties",
      "Dynamic Text Updates",
      "Per-Character Effects",
      "Fixed HUD Elements — The `fixed()` Component",
      "Persisting UI Across Scenes — The `stay()` Component",
      "Interactive Buttons",
      "Virtual Buttons with `setButton()`",
      "Health Bars",
      "Dialog Boxes and Typewriter Text",
      "HTML Overlay UI",
      "Z-Ordering for UI Layers",
      "Best Practices",
      "Centralize HUD in a Factory",
      "Use `fixed()` on Everything UI",
      "Avoid Deep Nesting",
      "Mobile Touch Targets",
      "Cross-Framework Comparison"
    ]
  },
  {
    "id": "kaplay-arch-rules",
    "title": "Kaplay — AI Rules",
    "description": "Engine-specific rules for projects using Kaplay (successor to Kaboom.js). These supplement the engine-agnostic rules ...",
    "category": "reference",
    "module": "kaplay-arch",
    "engine": "Kaplay",
    "tier": "pro",
    "sizeBytes": 4608,
    "sections": [
      "Architecture Context",
      "Tech Stack",
      "Project Structure Conventions",
      "Code Generation Rules",
      "Initialization: Always Store the Context",
      "Game Objects: Use Component Arrays",
      "Tags: Use for Identity and Collision",
      "Scenes: Stateless Functions",
      "Asset Loading: Before k.go()",
      "Custom Components: Return Objects with Lifecycle Hooks",
      "Input: Prefer Unified Buttons",
      "Common Pitfalls"
    ]
  },
  {
    "id": "kaplay-arch/R1",
    "title": "R1 — Kaplay v3001 API Quick Reference",
    "description": "",
    "category": "reference",
    "module": "kaplay-arch",
    "engine": "Kaplay",
    "tier": "pro",
    "sizeBytes": 13129,
    "sections": [
      "Initialization",
      "Asset Loading",
      "Game Objects & Components",
      "Creating Objects",
      "Common Components Reference",
      "Querying Game Objects",
      "Scenes",
      "Input",
      "Keyboard",
      "Unified Button Bindings",
      "Mouse / Touch",
      "Gamepad",
      "Physics & Collisions",
      "Camera",
      "Audio",
      "Timers & Events",
      "Text & UI",
      "Levels (ASCII Maps)",
      "Drawing Primitives",
      "State Machine (Component)",
      "Useful Utilities"
    ]
  },
  {
    "id": "libgdx-arch/E1",
    "title": "E1 — libGDX Architecture Overview",
    "description": "",
    "category": "architecture",
    "module": "libgdx-arch",
    "engine": "libGDX",
    "tier": "pro",
    "sizeBytes": 11384,
    "sections": [
      "What Is libGDX?",
      "Core Architecture",
      "Module Breakdown",
      "Application — Lifecycle and Entry Point",
      "Graphics — Rendering",
      "Audio",
      "Input",
      "Files",
      "Net — Networking",
      "Scene2D — UI Framework",
      "Scene2D Core (scene graph)",
      "Scene2D.ui (widgets)",
      "Event System",
      "Asset Management",
      "AssetManager (Recommended for Production)",
      "Texture Atlases",
      "Kotlin with KTX",
      "Platform Deployment",
      "When to Choose libGDX"
    ]
  },
  {
    "id": "libgdx-arch/G1",
    "title": "G1 — libGDX Getting Started",
    "description": "",
    "category": "guide",
    "module": "libgdx-arch",
    "engine": "libGDX",
    "tier": "pro",
    "sizeBytes": 9393,
    "sections": [
      "Prerequisites",
      "Which IDE?",
      "Creating a New Project with gdx-liftoff",
      "Step 1: Download gdx-liftoff",
      "Step 2: Run It",
      "Step 3: Configure Your Project",
      "Step 4: Generate and Import",
      "Project Structure",
      "Your First Game Class (Java)",
      "The Same Game in Kotlin",
      "Running Your Game",
      "Desktop (fastest iteration)",
      "Android",
      "HTML/Browser",
      "Application Lifecycle",
      "Managing Assets",
      "Kotlin Extensions: ktx Libraries",
      "Java Version Compatibility",
      "Next Steps"
    ]
  },
  {
    "id": "libgdx-arch/G2",
    "title": "G2 — libGDX with Kotlin and KTX",
    "description": "Kotlin is a first-class language for libGDX development. The KTX library (libktx) provides idiomatic Kotlin extension...",
    "category": "guide",
    "module": "libgdx-arch",
    "engine": "libGDX",
    "tier": "pro",
    "sizeBytes": 11886,
    "sections": [
      "Setting Up Kotlin with gdx-liftoff",
      "Manual Setup (Existing Java Project)",
      "KTX Module Overview",
      "Core Modules",
      "Entity Component System Modules",
      "Platform & I/O Modules",
      "Pattern: Application and Screen Lifecycle",
      "Java Approach (Verbose)",
      "Kotlin + KTX Approach (Idiomatic)",
      "Pattern: Type-Safe Scene2D UI",
      "Java Approach",
      "Kotlin + KTX Approach",
      "Pattern: Coroutine-Based Asset Loading",
      "Pattern: Math Operator Overloads",
      "Pattern: Dependency Injection with ktx-inject",
      "Pattern: Box2D DSL",
      "Java-to-Kotlin Interop Notes",
      "Recommended Project Structure",
      "When to Use Kotlin vs. Java with libGDX"
    ]
  },
  {
    "id": "libgdx-arch/G3",
    "title": "G3 — libGDX Box2D Physics Guide",
    "description": "libGDX bundles Box2D as a first-party extension — a thin Java wrapper around the native C++ Box2D engine. It handles ...",
    "category": "guide",
    "module": "libgdx-arch",
    "engine": "libGDX",
    "tier": "pro",
    "sizeBytes": 12450,
    "sections": [
      "Setup",
      "Adding the Dependency",
      "Core Concepts",
      "Creating the World",
      "Creating Bodies",
      "Body Types",
      "Java — Manual Creation",
      "Kotlin KTX — Type-Safe DSL",
      "Common Fixture Shapes",
      "Stepping the Simulation",
      "Collision Detection",
      "Contact Listener",
      "User Data Pattern",
      "Collision Filtering",
      "Debug Rendering",
      "Syncing Physics with Sprites",
      "Destroying Bodies Safely",
      "Cleanup",
      "Common Gotchas"
    ]
  },
  {
    "id": "libgdx-arch/G4",
    "title": "G4 — libGDX Cross-Platform Deployment",
    "description": "",
    "category": "guide",
    "module": "libgdx-arch",
    "engine": "libGDX",
    "tier": "pro",
    "sizeBytes": 9873,
    "sections": [
      "Overview",
      "Project Structure (gdx-liftoff)",
      "Desktop (Windows, Linux, macOS)",
      "Build a Fat JAR",
      "Platform-Specific Packaging",
      "macOS Considerations",
      "Android",
      "Prerequisites",
      "Build a Debug APK",
      "Build a Release APK",
      "Android-Specific Tips",
      "iOS",
      "Backend Options",
      "Prerequisites",
      "Build and Run on Simulator",
      "Build an IPA for Device",
      "Signing for App Store",
      "iOS-Specific Tips",
      "HTML5 / Web (GWT)",
      "How It Works",
      "Build",
      "Serve Locally",
      "GWT Limitations",
      "Deploying to itch.io",
      "Multi-Platform Build Script",
      "Platform Comparison",
      "Troubleshooting"
    ]
  },
  {
    "id": "libgdx-arch/G5",
    "title": "G5 — libGDX 3D Rendering and Shaders",
    "description": "",
    "category": "guide",
    "module": "libgdx-arch",
    "engine": "libGDX",
    "tier": "pro",
    "sizeBytes": 15739,
    "sections": [
      "Overview",
      "Core Architecture",
      "Class Hierarchy",
      "Key Classes",
      "Basic 3D Setup (Java)",
      "Kotlin Equivalent",
      "ModelBatch Deep Dive",
      "Lifecycle",
      "Render Call Sorting",
      "Custom Sorting",
      "Environment and Lighting",
      "Light Types",
      "DefaultShader Light Limits",
      "Materials and Attributes",
      "Custom Shaders",
      "The Shader Interface",
      "Custom ShaderProvider",
      "Writing a Basic Custom Shader",
      "GLSL Shader Example (emissive.frag)",
      "Procedural Geometry with ModelBuilder",
      "Performance Best Practices",
      "Model Formats"
    ]
  },
  {
    "id": "libgdx-arch-rules",
    "title": "libGDX — AI Rules",
    "description": "Engine-specific rules for projects using libGDX. These supplement the engine-agnostic rules in docs/core/ai-workflow/...",
    "category": "reference",
    "module": "libgdx-arch",
    "engine": "libGDX",
    "tier": "pro",
    "sizeBytes": 6040,
    "sections": [
      "Architecture Context",
      "Tech Stack",
      "What libGDX Is",
      "Project Structure Conventions (Gradle Multi-Project)",
      "libGDX-Specific Code Rules",
      "Application Lifecycle",
      "Dispose Everything",
      "Use AssetManager for Production",
      "Screen Pattern for Game States",
      "SpriteBatch: Begin/End Required",
      "Kotlin with KTX",
      "Common Mistakes to Catch"
    ]
  },
  {
    "id": "libgdx-arch/R1",
    "title": "R1 — Scene2D UI System",
    "description": "Scene2D is libGDX's built-in scene graph and UI toolkit. It provides a retained-mode rendering system where Actors ar...",
    "category": "reference",
    "module": "libgdx-arch",
    "engine": "libGDX",
    "tier": "pro",
    "sizeBytes": 12125,
    "sections": [
      "Core Concepts",
      "Stage",
      "Actor",
      "Event System",
      "Table Layout",
      "Basic Table Usage",
      "Cell Properties",
      "Layout Debugging",
      "Skin System",
      "Skin Files",
      "Skin JSON Structure",
      "Skin Composer Tool",
      "Common Widgets",
      "Display Widgets",
      "Input Widgets",
      "Container Widgets",
      "Dialog",
      "Viewport and Multi-Resolution Strategy",
      "Kotlin KTX Scene2D DSL",
      "Lifecycle and Disposal",
      "Common Mistakes"
    ]
  },
  {
    "id": "libgdx-arch/R2",
    "title": "R2 — libGDX Asset Management and Texture Atlases",
    "description": "Asset management is critical in libGDX. Every Texture, Sound, Music, BitmapFont, Skin, and other GPU-backed resource ...",
    "category": "reference",
    "module": "libgdx-arch",
    "engine": "libGDX",
    "tier": "pro",
    "sizeBytes": 12437,
    "sections": [
      "Why AssetManager?",
      "AssetManager Basics",
      "Creating the Manager",
      "Queueing Assets for Loading",
      "Loading with Parameters",
      "Async vs. Blocking Loading",
      "Async Loading (Recommended for Loading Screens)",
      "Blocking Loading (Simple Games / Prototyping)",
      "Waiting for a Specific Asset",
      "Retrieving Assets",
      "Disposal and Reference Counting",
      "TexturePacker and Texture Atlases",
      "Why Atlases?",
      "Using libGDX's Built-in TexturePacker",
      "Gradle Integration (Recommended)",
      "Pack Configuration (pack.json)",
      "Loading and Using a TextureAtlas",
      "Naming Conventions in Atlases",
      "Android Resume Handling",
      "Resume-Safe Loading Pattern",
      "Custom Asset Loaders",
      "Synchronous Loader (Simple)",
      "File Handle Resolvers",
      "Built-in Asset Loaders",
      "Best Practices Summary"
    ]
  },
  {
    "id": "libgdx-arch/R3",
    "title": "Input Handling and Events Reference",
    "description": "libGDX provides two complementary input systems: polling (query state each frame) and event-driven (receive callbacks...",
    "category": "reference",
    "module": "libgdx-arch",
    "engine": "libGDX",
    "tier": "pro",
    "sizeBytes": 13203,
    "sections": [
      "Polling vs Events",
      "Polling — Keyboard",
      "Kotlin",
      "Polling — Mouse and Touch",
      "Polling — Accelerometer and Sensors",
      "Event-Driven — InputProcessor",
      "Return Value Convention",
      "InputAdapter",
      "Kotlin with InputAdapter",
      "InputMultiplexer — Chaining Processors",
      "GestureDetector — Touch Gestures",
      "GestureDetector with InputMultiplexer",
      "Gesture Summary",
      "Combining Polling and Events",
      "Other Input Features",
      "On-Screen Keyboard (Mobile)",
      "Vibration (Mobile)",
      "Cursor Control (Desktop)",
      "Text Input Dialog",
      "Platform-Specific Notes",
      "Controller Support (gdx-controllers)"
    ]
  },
  {
    "id": "love2d-arch/E1",
    "title": "E1 — Architecture Overview",
    "description": "",
    "category": "architecture",
    "module": "love2d-arch",
    "engine": "Love2D",
    "tier": "pro",
    "sizeBytes": 5797,
    "sections": [
      "Core Philosophy: A Framework, Not an Engine",
      "Runtime Model",
      "Module System",
      "What LÖVE Does NOT Provide",
      "Project Structure Conventions",
      "Configuration: conf.lua",
      "Distribution",
      "When to Choose LÖVE"
    ]
  },
  {
    "id": "love2d-arch/G10",
    "title": "G10 — Distribution & Packaging",
    "description": "",
    "category": "guide",
    "module": "love2d-arch",
    "engine": "Love2D",
    "tier": "pro",
    "sizeBytes": 9200,
    "sections": [
      "Overview",
      "The .love File",
      "Creating a .love File",
      "Testing Your .love File",
      "conf.lua for Distribution",
      "Fused Executables",
      "Detecting Fused Mode",
      "Windows (.exe)",
      "macOS (.app)",
      "Linux (AppImage)",
      "Automated Build Tools",
      "Example: makelove",
      "Web Distribution (HTML5)",
      "Distribution Checklist",
      "Custom Error Handler",
      "Save Directory Locations by Platform"
    ]
  },
  {
    "id": "love2d-arch/G11",
    "title": "G11 — Cameras & Tilemaps",
    "description": "",
    "category": "guide",
    "module": "love2d-arch",
    "engine": "Love2D",
    "tier": "pro",
    "sizeBytes": 9647,
    "sections": [
      "Why Cameras Matter",
      "Basic Camera with Transform Stack",
      "Transform Order Matters",
      "Centering the Camera on a Target",
      "Smooth Following (Lerp)",
      "Clamping to Map Bounds",
      "Screen-to-World Conversion",
      "Camera Shake",
      "Popular Camera Libraries",
      "Tilemaps with Simple Tiled Implementation (STI)",
      "Installation",
      "Basic Setup",
      "Key STI API",
      "Integrating STI with a Camera",
      "Custom Layers for Entities",
      "Tile Collision from STI",
      "Parallax Scrolling",
      "Common Pitfalls"
    ]
  },
  {
    "id": "love2d-arch/G12",
    "title": "G12 — UI Patterns",
    "description": "",
    "category": "guide",
    "module": "love2d-arch",
    "engine": "Love2D",
    "tier": "pro",
    "sizeBytes": 8869,
    "sections": [
      "No Built-In UI — By Design",
      "Rolling Your Own: Core Patterns",
      "Button With Hit Testing",
      "Simple Widget Manager",
      "Scaling UI With Window Resize",
      "Immediate-Mode UI With SUIT",
      "Setup",
      "Layout System",
      "When SUIT Works Well",
      "Slab: Richer Immediate-Mode UI",
      "HUD Rendering Tips",
      "Draw Order",
      "Nine-Slice for Scalable Panels",
      "Fonts",
      "Common Pitfalls"
    ]
  },
  {
    "id": "love2d-arch/G13",
    "title": "G13 — Particles and Visual Effects",
    "description": "",
    "category": "guide",
    "module": "love2d-arch",
    "engine": "Love2D",
    "tier": "pro",
    "sizeBytes": 8135,
    "sections": [
      "ParticleSystem Overview",
      "Creation and Buffer Size",
      "Emission Controls",
      "Continuous Emission",
      "Burst Emission",
      "Emission Area",
      "Movement Properties",
      "Speed and Direction",
      "Acceleration",
      "Damping",
      "Visual Properties",
      "Size Over Lifetime",
      "Color Over Lifetime",
      "Rotation and Spin",
      "Managing Multiple Particle Systems",
      "Blend Modes for Effects",
      "Common Effect Recipes",
      "Fire",
      "Explosion Burst",
      "Dust Trail (Following Player)",
      "Performance Considerations",
      "Combining Particles With Shaders"
    ]
  },
  {
    "id": "love2d-arch/G14",
    "title": "Networking and Multiplayer",
    "description": "LÖVE ships with two networking libraries built into the runtime: luasocket (TCP/UDP) and lua-enet (reliable UDP). For...",
    "category": "guide",
    "module": "love2d-arch",
    "engine": "Love2D",
    "tier": "pro",
    "sizeBytes": 9247,
    "sections": [
      "Networking Libraries Bundled with LÖVE",
      "luasocket",
      "lua-enet",
      "Community Libraries",
      "lua-enet Fundamentals",
      "Core Concepts",
      "Creating a Server",
      "Creating a Client",
      "Reliability Flags",
      "Serialization",
      "JSON (simple, human-readable, slower)",
      "String Packing (fast, compact)",
      "love.data.pack / love.data.unpack (binary, efficient)",
      "bitser (used by sock.lua)",
      "Game Loop Integration",
      "Non-Blocking Service Calls",
      "Tick Rate vs Frame Rate",
      "Architecture Patterns",
      "Client-Server (Authoritative)",
      "Client-Server (Client-Predicted)",
      "Peer-to-Peer",
      "Lockstep",
      "Common Pitfalls",
      "Dedicated Server Without a Window",
      "Testing Multiplayer Locally"
    ]
  },
  {
    "id": "love2d-arch/G15",
    "title": "Debugging and Profiling",
    "description": "LÖVE runs on LuaJIT (desktop), which makes Lua code fast but also means standard debugging approaches apply — print d...",
    "category": "guide",
    "module": "love2d-arch",
    "engine": "Love2D",
    "tier": "pro",
    "sizeBytes": 10218,
    "sections": [
      "Built-In Diagnostics",
      "love.graphics.getStats()",
      "love.timer.getFPS()",
      "love.timer.getDelta()",
      "collectgarbage(\"count\")",
      "Profiling Tools",
      "profile.lua (CPU Profiling)",
      "AppleCake (Visual Profiler)",
      "ZeroBrane Studio (Debugger)",
      "RenderDoc (GPU Profiling)",
      "Common Performance Problems and Fixes",
      "Problem: Too Many Draw Calls",
      "Problem: Garbage Collector Stalls",
      "Problem: Slow Physics",
      "Problem: Texture Memory Leak",
      "Debug HUD Pattern",
      "Performance Checklist"
    ]
  },
  {
    "id": "love2d-arch/G16",
    "title": "G16 — Mobile and Touch Development",
    "description": "LÖVE runs on Android and iOS out of the box. The framework is the same — love.load, love.update, love.draw — but mobi...",
    "category": "guide",
    "module": "love2d-arch",
    "engine": "Love2D",
    "tier": "pro",
    "sizeBytes": 12352,
    "sections": [
      "Platform Detection",
      "conf.lua for Mobile",
      "Touch Input API",
      "Callbacks",
      "Polling",
      "Touch vs. Mouse",
      "Virtual Joystick Pattern",
      "Virtual Button Pattern",
      "Resolution Scaling",
      "Safe Areas and Notches",
      "Performance Tips for Mobile",
      "Building for Mobile",
      "Android",
      "iOS",
      "Checklist"
    ]
  },
  {
    "id": "love2d-arch/G17",
    "title": "G17 — Automated Testing & CI",
    "description": "",
    "category": "guide",
    "module": "love2d-arch",
    "engine": "Love2D",
    "tier": "pro",
    "sizeBytes": 8316,
    "sections": [
      "Why Test a LÖVE Game?",
      "Strategy: Separate Logic from Framework",
      "Testing Frameworks",
      "Busted (Recommended for Pure Logic)",
      "Mocking love.* for Busted",
      "Cute (Runs Inside LÖVE)",
      "What to Test (and What Not To)",
      "Project Structure for Testing",
      "CI with GitHub Actions",
      "GitLab CI Alternative",
      "Linting with Luacheck",
      "Tips"
    ]
  },
  {
    "id": "love2d-arch/G18",
    "title": "G18 — Common Game Patterns",
    "description": "",
    "category": "guide",
    "module": "love2d-arch",
    "engine": "Love2D",
    "tier": "pro",
    "sizeBytes": 13555,
    "sections": [
      "Overview",
      "Collision Detection: bump.lua vs Box2D",
      "bump.lua Setup",
      "Pattern 1: Platformer",
      "Gravity and Jump",
      "Collision Filter for One-Way Platforms",
      "Jump Buffering and Coyote Time",
      "Pattern 2: Top-Down RPG / Action",
      "Eight-Direction Movement with Diagonal Normalization",
      "Interaction Zones",
      "Pattern 3: Shoot-'Em-Up / Bullet Patterns",
      "Object Pool for Bullets",
      "SpriteBatch for Bullet Rendering",
      "Pattern 4: Tile-Based Games",
      "Grid Movement with Tweened Animation",
      "Putting It Together: Minimal Platformer",
      "Common Pitfalls",
      "Libraries by Genre"
    ]
  },
  {
    "id": "love2d-arch/G19",
    "title": "G19 — Accessibility and Localization",
    "description": "",
    "category": "guide",
    "module": "love2d-arch",
    "engine": "Love2D",
    "tier": "pro",
    "sizeBytes": 11201,
    "sections": [
      "Overview",
      "Localization Architecture",
      "Key-Based String Lookup",
      "Locale Manager Module",
      "Usage in Game Code",
      "Pluralization",
      "UTF-8 Text Handling",
      "LÖVE's Built-In UTF-8 Module",
      "Font Loading for Non-Latin Scripts",
      "Right-to-Left (RTL) Text",
      "Accessibility Patterns",
      "Colorblind-Safe Rendering",
      "Shader-Based Colorblind Simulation",
      "Scalable UI and Text Size",
      "Input Remapping",
      "Screen Shake and Motion Sensitivity",
      "Putting It Together: Accessible Game Template",
      "Checklist"
    ]
  },
  {
    "id": "love2d-arch/G1",
    "title": "G1 — Game Loop & Callbacks",
    "description": "",
    "category": "guide",
    "module": "love2d-arch",
    "engine": "Love2D",
    "tier": "pro",
    "sizeBytes": 7974,
    "sections": [
      "The Default Game Loop",
      "Core Callbacks",
      "love.load(arg)",
      "love.update(dt)",
      "love.draw()",
      "Input Callbacks",
      "Callback Style (Event-Driven)",
      "Polling Style (State-Based)",
      "Window & Lifecycle Callbacks",
      "Fixed Timestep Pattern",
      "State Management Pattern",
      "Error Handling",
      "Summary: Callback Checklist"
    ]
  },
  {
    "id": "love2d-arch/G20",
    "title": "G20 — Error Handling and Resilience",
    "description": "",
    "category": "guide",
    "module": "love2d-arch",
    "engine": "Love2D",
    "tier": "pro",
    "sizeBytes": 10658,
    "sections": [
      "Overview",
      "Lua's Error Model: pcall and xpcall",
      "pcall — Basic Protected Call",
      "xpcall — Protected Call with Stack Trace",
      "When to Use Each",
      "Wrapping Callbacks for Resilience",
      "Customizing the Error Screen (love.errorhandler)",
      "How love.errorhandler Works",
      "Key Rules for Error Handlers",
      "Crash Log with System Info",
      "Defensive Data Loading",
      "Safe JSON Parsing",
      "Save File Validation",
      "Defensive Table Access",
      "Assertions for Development",
      "Common Error Patterns and Fixes",
      "1. Nil Callback",
      "2. Missing Module",
      "3. Type Coercion Errors",
      "4. Event Handler Ordering",
      "Summary"
    ]
  },
  {
    "id": "love2d-arch/G21",
    "title": "G21 — Animation & Spritesheets",
    "description": "Sprite animation is fundamental to 2D games. LÖVE provides the low-level building blocks — Quads and draw calls — but...",
    "category": "guide",
    "module": "love2d-arch",
    "engine": "Love2D",
    "tier": "pro",
    "sizeBytes": 9655,
    "sections": [
      "Core Concept: Quads",
      "Manual Spritesheet Animation",
      "Step 1: Build a Quad Table",
      "Step 2: Track Time and Current Frame",
      "Step 3: Draw the Current Frame",
      "Handling Multi-Row Spritesheets",
      "Using anim8",
      "Installation",
      "Creating a Grid",
      "Selecting Frames",
      "Creating an Animation",
      "Animation Methods",
      "Flipping for Direction",
      "Animation State Machine",
      "Tweening and Interpolation",
      "Performance Tips",
      "Common Pitfalls"
    ]
  },
  {
    "id": "love2d-arch/G22",
    "title": "G22 — Resolution Handling & Pixel Art Scaling",
    "description": "",
    "category": "guide",
    "module": "love2d-arch",
    "engine": "Love2D",
    "tier": "pro",
    "sizeBytes": 12459,
    "sections": [
      "The Problem",
      "Core Concepts",
      "Filter Modes",
      "Canvas Scaling (Manual Approach)",
      "Step 1: Define Your Game Resolution",
      "Step 2: Create and Render to the Canvas",
      "Step 3: Convert Mouse Coordinates",
      "Integer vs. Fractional Scaling",
      "Integer Scaling",
      "Fractional Scaling",
      "Hybrid Approach",
      "Using the Push Library",
      "Setup",
      "Coordinate Conversion with Push",
      "Push Options Reference",
      "Alternative: Shöve Library",
      "Fullscreen and Window Modes",
      "conf.lua Setup",
      "Toggling Fullscreen",
      "Querying Display Size",
      "High-DPI Displays",
      "Common Pitfalls",
      "1. Loading Images Before Setting the Filter",
      "2. Drawing at Sub-Pixel Positions",
      "3. Camera Sub-Pixel Jitter",
      "4. Forgetting love.resize",
      "5. Mixing Canvas and Direct Drawing",
      "Quick Reference: Minimal Pixel Art Setup"
    ]
  },
  {
    "id": "love2d-arch/G2",
    "title": "G2 — Graphics & Rendering",
    "description": "",
    "category": "guide",
    "module": "love2d-arch",
    "engine": "Love2D",
    "tier": "pro",
    "sizeBytes": 10722,
    "sections": [
      "The love.graphics Module",
      "Loading & Drawing Images",
      "love.graphics.newImage(path)",
      "Quads (Sprite Sheets)",
      "Animation with Quads",
      "SpriteBatches (Draw Call Optimization)",
      "Usage Hints",
      "Canvases (Render Targets)",
      "Canvas Settings",
      "Multiple Render Targets (MRT)",
      "Shaders (GLSL)",
      "Pixel Shader (Fragment)",
      "Vertex Shader",
      "Sending Data to Shaders",
      "Shader Applied to Canvas (Post-Processing)",
      "Transform Stack",
      "Nested Transforms",
      "Drawing Primitives",
      "Blend Modes",
      "Stencil Buffer",
      "Performance Tips"
    ]
  },
  {
    "id": "love2d-arch/G3",
    "title": "G3 — Physics & Box2D",
    "description": "",
    "category": "guide",
    "module": "love2d-arch",
    "engine": "Love2D",
    "tier": "pro",
    "sizeBytes": 12356,
    "sections": [
      "Overview",
      "Core Concepts",
      "World",
      "Body",
      "Shape",
      "Fixture",
      "Complete Example: Ball on a Platform",
      "Collision Callbacks",
      "Identifying Colliders",
      "Sensors",
      "Joints",
      "Collision Filtering",
      "One-Way Platforms",
      "Performance Tips",
      "Debug Drawing",
      "Common Pitfalls"
    ]
  },
  {
    "id": "love2d-arch/G4",
    "title": "G4 — Audio",
    "description": "",
    "category": "guide",
    "module": "love2d-arch",
    "engine": "Love2D",
    "tier": "pro",
    "sizeBytes": 11474,
    "sections": [
      "Overview",
      "Sources: The Core Playback Object",
      "Loading Sources",
      "Basic Playback",
      "Playing Overlapping Sound Effects",
      "Volume Management",
      "Global Volume",
      "Volume Categories",
      "Spatial / Positional Audio",
      "Attenuation Control",
      "Audio Effects (love.audio 11.0+)",
      "Available Effect Types",
      "Using Effects",
      "Source Filters",
      "Recording (love.audio 11.0+)",
      "Queueable Sources (Procedural Audio)",
      "Common Patterns",
      "Crossfading Music Tracks",
      "Randomized Sound Variations",
      "Performance Tips",
      "Common Pitfalls"
    ]
  },
  {
    "id": "love2d-arch/G5",
    "title": "G5 — Input Handling",
    "description": "",
    "category": "guide",
    "module": "love2d-arch",
    "engine": "Love2D",
    "tier": "pro",
    "sizeBytes": 9221,
    "sections": [
      "Two Input Models",
      "Keyboard",
      "Polling",
      "Callbacks",
      "Key Repeat",
      "Mouse",
      "Polling",
      "Callbacks",
      "Mouse Capture and Visibility",
      "Touch (Mobile)",
      "Gamepad / Joystick",
      "Detecting Controllers",
      "Polling Gamepad State",
      "Gamepad Callbacks",
      "Standard Axis Names",
      "Input Abstraction Pattern",
      "Common Pitfalls"
    ]
  },
  {
    "id": "love2d-arch/G6",
    "title": "G6 — Shaders & GLSL",
    "description": "",
    "category": "guide",
    "module": "love2d-arch",
    "engine": "Love2D",
    "tier": "pro",
    "sizeBytes": 7997,
    "sections": [
      "How Shaders Work in LÖVE",
      "Creating a Shader",
      "Entry Point Functions",
      "Pixel Shader: `effect`",
      "Vertex Shader: `position`",
      "Sending Data to Shaders",
      "Type Mapping",
      "Built-in Shader Variables",
      "Applying a Shader",
      "Practical Examples",
      "Grayscale",
      "Flash White (Damage Effect)",
      "CRT Scanlines",
      "Vertex Wobble",
      "Using Canvases as Shader Inputs",
      "Performance Tips",
      "Common Pitfalls"
    ]
  },
  {
    "id": "love2d-arch/G7",
    "title": "G7 — Scene Management & ECS Patterns",
    "description": "",
    "category": "guide",
    "module": "love2d-arch",
    "engine": "Love2D",
    "tier": "pro",
    "sizeBytes": 8719,
    "sections": [
      "Why You Need Patterns",
      "Part 1 — Game-State / Scene Management",
      "The Core Idea",
      "Pattern A — Manual State Table (No Library)",
      "Pattern B — State Stack",
      "Pattern C — hump.gamestate (Popular Library)",
      "Which Pattern to Choose",
      "Part 2 — Entity-Component-System (ECS)",
      "Why ECS in Love2D?",
      "Core Concepts",
      "Popular ECS Libraries",
      "ECS + Game States",
      "Tips",
      "Related Libraries"
    ]
  },
  {
    "id": "love2d-arch/G8",
    "title": "G8 — Filesystem & Save Data",
    "description": "",
    "category": "guide",
    "module": "love2d-arch",
    "engine": "Love2D",
    "tier": "pro",
    "sizeBytes": 7647,
    "sections": [
      "How the Sandbox Works",
      "Essential Functions",
      "Reading and Writing",
      "File and Directory Info",
      "Creating and Removing",
      "Save-Data Patterns",
      "Pattern 1 — Simple Key-Value (Settings)",
      "Pattern 2 — JSON (Structured Data)",
      "Pattern 3 — Binary (High-Performance)",
      "Mounting External Archives",
      "Dropped Files",
      "Common Pitfalls",
      "Autosave on Quit"
    ]
  },
  {
    "id": "love2d-arch/G9",
    "title": "G9 — Threading & Channels",
    "description": "",
    "category": "guide",
    "module": "love2d-arch",
    "engine": "Love2D",
    "tier": "pro",
    "sizeBytes": 9407,
    "sections": [
      "Why Threads in LÖVE?",
      "Core Concepts",
      "Threads Are Isolated Lua States",
      "Channels Are Thread-Safe Queues",
      "Creating and Starting a Thread",
      "Channel API",
      "Getting a Channel",
      "Additional Channel Methods",
      "What Can Be Sent Through Channels?",
      "Common Patterns",
      "Worker Pool",
      "Background Asset Loader",
      "Request-Response with supply/demand",
      "Error Handling",
      "Thread Lifecycle",
      "Performance Tips",
      "Gotchas",
      "Quick Reference"
    ]
  },
  {
    "id": "love2d-arch-rules",
    "title": "Love2D — AI Rules",
    "description": "Engine-specific rules for projects using LÖVE (Love2D). These supplement the engine-agnostic rules in docs/core/ai-wo...",
    "category": "reference",
    "module": "love2d-arch",
    "engine": "Love2D",
    "tier": "pro",
    "sizeBytes": 7065,
    "sections": [
      "Architecture Context",
      "Tech Stack",
      "Project Structure Conventions",
      "Code Generation Rules",
      "Game Loop: Never Fight the Callbacks",
      "Lua Style",
      "Physics (love.physics)",
      "Graphics",
      "Audio",
      "Filesystem",
      "Threading",
      "Common Patterns",
      "State Management",
      "Entity Management",
      "Resolution Independence",
      "Anti-Patterns to Avoid",
      "Documentation Index"
    ]
  },
  {
    "id": "love2d-arch/R1",
    "title": "R1 — Module Reference",
    "description": "LÖVE is organized into modules, each covering a specific domain. Every module is accessed via the love namespace. Mod...",
    "category": "reference",
    "module": "love2d-arch",
    "engine": "Love2D",
    "tier": "pro",
    "sizeBytes": 11259,
    "sections": [
      "Module Overview",
      "love.audio",
      "Source Types",
      "Key Functions",
      "love.physics",
      "Body Types",
      "Shape Types",
      "Collision Callbacks",
      "Joint Types",
      "love.filesystem",
      "Key Functions",
      "love.keyboard",
      "love.mouse",
      "love.math",
      "love.timer",
      "love.window",
      "love.thread",
      "love.system",
      "love.touch",
      "Enabling/Disabling Modules"
    ]
  },
  {
    "id": "love2d-arch/R2",
    "title": "Common Libraries & Ecosystem",
    "description": "LÖVE is intentionally minimal — it provides a solid foundation (rendering, audio, physics, input, filesystem) and lea...",
    "category": "reference",
    "module": "love2d-arch",
    "engine": "Love2D",
    "tier": "pro",
    "sizeBytes": 11490,
    "sections": [
      "OOP & Class Systems",
      "Entity Component Systems",
      "Utility Collections",
      "Collision Detection",
      "Tilemaps",
      "UI Libraries",
      "Animation",
      "Camera & Resolution",
      "Networking",
      "Serialization & Data",
      "Sound & Music",
      "Choosing Libraries: Decision Framework",
      "Community Resources"
    ]
  },
  {
    "id": "love2d-arch/R3",
    "title": "R3 — Performance Optimization",
    "description": "LÖVE's immediate-mode rendering and Lua's garbage-collected runtime give you flexibility, but both require care to ma...",
    "category": "reference",
    "module": "love2d-arch",
    "engine": "Love2D",
    "tier": "pro",
    "sizeBytes": 10481,
    "sections": [
      "Draw Call Reduction",
      "SpriteBatch",
      "Batch-Breaking Operations",
      "Texture Atlases",
      "Spatial Partitioning — Draw and Update Less",
      "Grid-Based Culling",
      "Quadtree or Spatial Hash",
      "Memory & Garbage Collection",
      "Common Allocation Sources",
      "Object Pooling",
      "GC Tuning",
      "Releasing Heavy Objects",
      "Rendering Pipeline Tricks",
      "Canvas Caching",
      "Shader Optimization",
      "Geometry Reduction",
      "CPU-Side Performance",
      "Hot-Path Lua Patterns",
      "Delta-Time Accumulator",
      "Profiling Tools",
      "Quick Checklist"
    ]
  },
  {
    "id": "love2d-arch/R4",
    "title": "R4 — Migrating to LÖVE 12",
    "description": "",
    "category": "reference",
    "module": "love2d-arch",
    "engine": "Love2D",
    "tier": "pro",
    "sizeBytes": 7468,
    "sections": [
      "Overview",
      "Breaking Changes",
      "Renamed List Functions",
      "Mesh Vertex Format Changes",
      "Removed Deprecated Functions",
      "Screenshot API Change",
      "New Features Worth Adopting",
      "LuaJIT 2.1",
      "New Pixel Formats",
      "Texture Coordinates in Shape Shaders",
      "New Callbacks",
      "Native arm64 macOS",
      "Migration Checklist",
      "Compatibility Shim",
      "Further Reading"
    ]
  },
  {
    "id": "macroquad-arch/E1",
    "title": "E1 — Architecture Overview",
    "description": "",
    "category": "architecture",
    "module": "macroquad-arch",
    "engine": "Macroquad",
    "tier": "pro",
    "sizeBytes": 12058,
    "sections": [
      "The Two-Layer Stack",
      "Miniquad (Bottom Layer)",
      "Macroquad (Top Layer)",
      "The Async Game Loop",
      "How It Works Under the Hood",
      "Why Async Instead of Callbacks?",
      "Rendering Model: Immediate Mode",
      "Frame Lifecycle",
      "Automatic Batching",
      "Resource Management (0.4 Changes)",
      "Textures Are Smart Pointers",
      "RenderingBackend Ownership",
      "Coordinate Systems",
      "Screen Space (Default)",
      "World Space (Camera)",
      "Threading Model",
      "Cross-Platform Architecture",
      "WASM Architecture",
      "When to Drop Down to Miniquad",
      "Comparison with Bevy's Architecture",
      "Key Architectural Decisions Explained"
    ]
  },
  {
    "id": "macroquad-arch/E2",
    "title": "E2 — Audio & Resource Management",
    "description": "",
    "category": "architecture",
    "module": "macroquad-arch",
    "engine": "Macroquad",
    "tier": "pro",
    "sizeBytes": 11714,
    "sections": [
      "Overview",
      "Resource Lifecycle",
      "The Smart-Pointer Model",
      "0.3 → 0.4 Migration Note",
      "Audio System",
      "Enabling Audio",
      "Module Import",
      "Loading Sounds",
      "Supported Formats",
      "Playing Audio",
      "PlaySoundParams",
      "Audio Patterns for Games",
      "Pattern: Audio Manager",
      "Pattern: Distance-Based Volume (Pseudo-Spatial Audio)",
      "Pattern: WASM Audio Unlock",
      "Texture & Font Resource Patterns",
      "Loading Screen Pattern",
      "Texture Configuration",
      "Render Textures (Off-Screen Rendering)",
      "Memory Management Tips",
      "Key Cargo Dependencies",
      "Further Reading"
    ]
  },
  {
    "id": "macroquad-arch/E3",
    "title": "E3 — Structuring Larger Games Without ECS",
    "description": "",
    "category": "architecture",
    "module": "macroquad-arch",
    "engine": "Macroquad",
    "tier": "pro",
    "sizeBytes": 15022,
    "sections": [
      "Overview",
      "The Growth Problem",
      "Pattern 1: Module-Per-Domain",
      "Pattern 2: The World Struct with Split Borrows",
      "Pattern 3: Trait-Based Game Objects",
      "Static Dispatch (Enums) — Preferred for Game Entities",
      "Dynamic Dispatch (Trait Objects) — For Extensible Systems",
      "Pattern 4: Resource Manager",
      "When to Add an ECS Crate",
      "Project Template for a Medium-Sized Game",
      "Summary of Patterns"
    ]
  },
  {
    "id": "macroquad-arch/E4",
    "title": "E4 — Testing & Debugging Patterns",
    "description": "",
    "category": "architecture",
    "module": "macroquad-arch",
    "engine": "Macroquad",
    "tier": "pro",
    "sizeBytes": 10704,
    "sections": [
      "The Challenge",
      "1. Separating Logic from Rendering",
      "Project Structure",
      "2. Debug Drawing",
      "3. Egui Dev Panel",
      "4. Cargo Profile Optimization",
      "Build Profiles Cheat Sheet",
      "5. Logging and Tracing",
      "6. Common Debugging Scenarios",
      "Texture Appears White / Missing",
      "Game Freezes / Infinite Loop",
      "Collision Not Detecting",
      "7. Snapshot / Replay Testing",
      "Summary",
      "Next Steps"
    ]
  },
  {
    "id": "macroquad-arch/G10",
    "title": "G10 — Save/Load & Persistence Patterns",
    "description": "",
    "category": "guide",
    "module": "macroquad-arch",
    "engine": "Macroquad",
    "tier": "pro",
    "sizeBytes": 9663,
    "sections": [
      "Overview",
      "Approach 1: `quad-storage` (Simple Key-Value)",
      "Approach 2: `serde` + JSON/RON (Full Game State)",
      "Define Serializable Game State",
      "Save to File (Desktop)",
      "Cross-Platform Save (Desktop + WASM)",
      "Approach 3: Binary Format (Compact Saves)",
      "Macroquad's Built-in `storage` Module",
      "Save System Architecture",
      "Save Slot Management",
      "Coroutine Limitation",
      "Ownership & Borrowing Gotchas",
      "Recommended Crate Combinations"
    ]
  },
  {
    "id": "macroquad-arch/G11",
    "title": "Common 2D Game Patterns",
    "description": "Practical patterns for the most common 2D game types built with Macroquad — platformers, top-down games, and arcade-s...",
    "category": "guide",
    "module": "macroquad-arch",
    "engine": "Macroquad",
    "tier": "pro",
    "sizeBytes": 10372,
    "sections": [
      "Platformer Pattern",
      "Using macroquad-platformer (Recommended)",
      "Top-Down Movement Pattern",
      "AABB Collision Detection (Manual)",
      "Circle Collision",
      "Entity Collection Pattern",
      "Simple Acceleration / Deceleration",
      "Cargo Dependencies"
    ]
  },
  {
    "id": "macroquad-arch/G12",
    "title": "G12 — CI/CD and Automated Builds",
    "description": "",
    "category": "guide",
    "module": "macroquad-arch",
    "engine": "Macroquad",
    "tier": "pro",
    "sizeBytes": 11186,
    "sections": [
      "Overview",
      "CI Pipeline (Lint + Test)",
      "Basic CI Workflow",
      "Testing Macroquad Games",
      "Release Pipeline",
      "Multi-Platform Build Workflow",
      "WASM Host Page",
      "Publishing to itch.io",
      "Manual Upload",
      "Automated itch.io Upload (CI)",
      "Speeding Up Docker Android Builds",
      "Release Profile Optimization",
      "Checklist"
    ]
  },
  {
    "id": "macroquad-arch/G1",
    "title": "G1 — Getting Started with Macroquad",
    "description": "",
    "category": "guide",
    "module": "macroquad-arch",
    "engine": "Macroquad",
    "tier": "pro",
    "sizeBytes": 11981,
    "sections": [
      "What is Macroquad?",
      "Prerequisites",
      "Create a New Project",
      "Minimal Game Loop",
      "Window Configuration",
      "Drawing",
      "Shapes",
      "Text",
      "Textures and Sprites",
      "Spritesheet Animation",
      "Input Handling",
      "Keyboard",
      "Mouse",
      "Touch (Mobile)",
      "Audio",
      "Camera",
      "Built-in UI (Immediate Mode)",
      "Coroutines",
      "WASM / Web Builds",
      "Collision Detection (Manual)",
      "Project Structure Convention",
      "Common Pitfalls"
    ]
  },
  {
    "id": "macroquad-arch/G2",
    "title": "G2 — WASM Deployment & egui Integration",
    "description": "",
    "category": "guide",
    "module": "macroquad-arch",
    "engine": "Macroquad",
    "tier": "pro",
    "sizeBytes": 11649,
    "sections": [
      "Why WASM with Macroquad?",
      "Building for WASM",
      "Prerequisites",
      "Compile",
      "HTML Wrapper",
      "Hosting the JS Bundle Locally",
      "Deploying to itch.io",
      "Folder structure for itch.io:",
      "Optimizing WASM Size",
      "Loading Assets in WASM",
      "Bundling Assets with `include_bytes!`",
      "egui Integration",
      "Setup",
      "Basic Usage",
      "How It Works",
      "egui in WASM",
      "Common UI Patterns with egui",
      "In-Game Console",
      "Performance Overlay",
      "Platform Differences: Native vs. WASM",
      "Persistent Storage in WASM",
      "Common Pitfalls"
    ]
  },
  {
    "id": "macroquad-arch/G3",
    "title": "G3 — Camera, Textures & Coroutines",
    "description": "",
    "category": "guide",
    "module": "macroquad-arch",
    "engine": "Macroquad",
    "tier": "pro",
    "sizeBytes": 10737,
    "sections": [
      "Overview",
      "Camera System",
      "Basic 2D Camera",
      "Camera Zoom",
      "Screen-to-World Conversion",
      "Camera-Aware Font Rendering",
      "Texture & Font Loading",
      "Loading Textures",
      "Texture Parameters",
      "Sprite Sheets",
      "Loading Custom Fonts",
      "Coroutines & Loading Screens",
      "The Problem",
      "Solution: Coroutines",
      "How Coroutines Work",
      "Global Storage",
      "Putting It Together: Scrolling Game with Loaded Assets",
      "Key Cargo Dependencies"
    ]
  },
  {
    "id": "macroquad-arch/G4",
    "title": "G4 — Scene Management & Game States",
    "description": "",
    "category": "guide",
    "module": "macroquad-arch",
    "engine": "Macroquad",
    "tier": "pro",
    "sizeBytes": 11437,
    "sections": [
      "Overview",
      "Approach 1: Enum State Machine (Recommended)",
      "Why This Works Well",
      "Approach 2: Trait-Based Scenes",
      "Approach 3: Experimental Scene Module",
      "When to Use experimental::scene",
      "Sharing Data Between Scenes",
      "With Enum State Machine",
      "With Trait-Based Scenes",
      "With Experimental Scene Nodes",
      "Performance Notes"
    ]
  },
  {
    "id": "macroquad-arch/G5",
    "title": "G5 — Particles, Custom Shaders & Tilemaps",
    "description": "",
    "category": "guide",
    "module": "macroquad-arch",
    "engine": "Macroquad",
    "tier": "pro",
    "sizeBytes": 13991,
    "sections": [
      "Particle Effects with macroquad-particles",
      "Setup",
      "EmitterConfig — Defining Particle Behavior",
      "Example: Explosion Effect",
      "Managing Emitters at Runtime",
      "Example: Continuous Smoke Trail",
      "Custom Shaders & Materials",
      "Architecture",
      "Built-in Uniforms",
      "Creating a Custom Material",
      "Post-Processing with Render Targets",
      "Loading Shaders from Files",
      "Rust Ownership Gotcha — Materials",
      "Tilemap Rendering",
      "Basic Tilemap from a Spritesheet",
      "Loading Tiled/LDtk Maps",
      "Performance: Batching Tile Draws",
      "Tile Collision",
      "Combining All Three",
      "Further Reading"
    ]
  },
  {
    "id": "macroquad-arch/G6",
    "title": "G6 — Networking & Multiplayer",
    "description": "",
    "category": "guide",
    "module": "macroquad-arch",
    "engine": "Macroquad",
    "tier": "pro",
    "sizeBytes": 12937,
    "sections": [
      "Overview",
      "Approach 1: quad-net (Low-Level WebSockets & HTTP)",
      "Cargo Setup",
      "WebSocket Client",
      "HTTP Requests",
      "quad-net Limitations",
      "Approach 2: Nakama (Managed Game Server)",
      "Architecture",
      "Cargo Setup",
      "Basic Nakama Integration",
      "Fish Game Reference",
      "Approach 3: Custom Networking with Rust Crates",
      "Option A: naia (Real-Time Game Networking)",
      "Option B: matchbox (Peer-to-Peer via WebRTC)",
      "Option C: Raw TCP/UDP (Native Only)",
      "Network Architecture Patterns",
      "Client-Server (Authoritative)",
      "Relayed (via Nakama or WebSocket Server)",
      "Peer-to-Peer (via matchbox/WebRTC)",
      "Serialization",
      "Integrating with Macroquad's Game Loop",
      "Rust Ownership Gotcha",
      "WASM Networking Considerations",
      "Cargo Dependencies Summary",
      "Common Pitfalls",
      "Further Reading"
    ]
  },
  {
    "id": "macroquad-arch/G7",
    "title": "G7 — Animation & Sprite Sheets",
    "description": "",
    "category": "guide",
    "module": "macroquad-arch",
    "engine": "Macroquad",
    "tier": "pro",
    "sizeBytes": 11430,
    "sections": [
      "Overview",
      "Sprite Sheet Basics",
      "Manual Animation (No Dependencies)",
      "Why Manual?",
      "Built-in AnimatedSprite (Experimental)",
      "AnimatedSprite API",
      "Limitations",
      "Animation State Machine",
      "Loading Sprite Sheets at Runtime",
      "Texture Filtering",
      "Performance Tips",
      "Cargo Dependencies",
      "Common Pitfalls"
    ]
  },
  {
    "id": "macroquad-arch/G8",
    "title": "G8 — 3D Rendering & Models",
    "description": "",
    "category": "guide",
    "module": "macroquad-arch",
    "engine": "Macroquad",
    "tier": "pro",
    "sizeBytes": 12031,
    "sections": [
      "Overview",
      "Setup",
      "Camera3D",
      "Camera3D Fields",
      "3D Primitives",
      "Cubes",
      "Spheres",
      "Planes",
      "Lines in 3D",
      "Grid",
      "Textured 3D Objects",
      "Custom Meshes",
      "Vertex Fields",
      "Camera Movement (First-Person Style)",
      "Mixing 2D and 3D",
      "Limitations",
      "Complete Example: Spinning Crate",
      "Further Reading"
    ]
  },
  {
    "id": "macroquad-arch/G9",
    "title": "G9 — Cross-Platform Deployment (Android, iOS, WASM)",
    "description": "",
    "category": "guide",
    "module": "macroquad-arch",
    "engine": "Macroquad",
    "tier": "pro",
    "sizeBytes": 12825,
    "sections": [
      "Overview",
      "Shared Cargo.toml Setup",
      "Asset Path Compatibility",
      "Android Deployment",
      "Option 1: Docker (Recommended)",
      "Option 2: Manual Setup",
      "Android Cargo.toml Configuration",
      "High-DPI Support",
      "App Icon",
      "Signing for Google Play",
      "Android Debugging",
      "iOS Deployment",
      "Prerequisites",
      "App Bundle Structure",
      "Info.plist",
      "Simulator Build & Run",
      "Real Device Build & Run",
      "Simulator Logging",
      "WASM Quick Reference",
      "Performance Tips Across Platforms",
      "Texture Atlases",
      "Release Profile Optimization",
      "Platform-Specific Code",
      "Touch Input",
      "Build Matrix Summary",
      "Rust Ownership Gotcha: Async Asset Loading"
    ]
  },
  {
    "id": "macroquad-arch-rules",
    "title": "Macroquad — AI Rules",
    "description": "Engine-specific rules for projects using the Macroquad game library. These supplement the engine-agnostic rules in do...",
    "category": "reference",
    "module": "macroquad-arch",
    "engine": "Macroquad",
    "tier": "pro",
    "sizeBytes": 5630,
    "sections": [
      "Architecture Context",
      "Tech Stack",
      "Project Structure Conventions",
      "Code Generation Rules",
      "Game Loop: Always Async",
      "State Management: Structs, Not ECS",
      "Asset Loading: Once, Before the Loop",
      "Delta Time: Always Use get_frame_time()",
      "Critical Macroquad Conventions",
      "1. Drawing Order Matters",
      "2. Screen Space Coordinates",
      "3. Collision Is Manual",
      "4. No Built-in Scene/State Machine",
      "5. WASM Is First-Class",
      "Rust-Specific Gotchas",
      "Ownership of Textures",
      "Lifetimes Avoided by Design",
      "Vec-Based Entity Management",
      "Version Compatibility"
    ]
  },
  {
    "id": "macroquad-arch/R1",
    "title": "R1 — Drawing, Input & Audio Reference",
    "description": "",
    "category": "reference",
    "module": "macroquad-arch",
    "engine": "Macroquad",
    "tier": "pro",
    "sizeBytes": 8195,
    "sections": [
      "Drawing Primitives",
      "Shapes",
      "Text",
      "Textures",
      "Screen & Clear",
      "Input",
      "Keyboard",
      "Mouse",
      "Touch (Mobile / WASM)",
      "Audio",
      "Audio Tips",
      "Camera",
      "Screen-to-World Conversion",
      "Frame Timing",
      "Putting It Together: Minimal Game Loop"
    ]
  },
  {
    "id": "macroquad-arch/R2",
    "title": "R2 — Physics & Collision Detection",
    "description": "",
    "category": "reference",
    "module": "macroquad-arch",
    "engine": "Macroquad",
    "tier": "pro",
    "sizeBytes": 10448,
    "sections": [
      "Overview",
      "Built-in: Rect Collision",
      "Rect Methods",
      "Hand-Rolled: Circle Collision",
      "Circle-vs-Rect Collision",
      "Collision Response Patterns",
      "Bounce (Reflect Velocity)",
      "Push-Out (Separation)",
      "Tilemap Collision",
      "Rapier Integration",
      "Cargo Dependencies",
      "Basic Setup",
      "Coordinate System Gotcha",
      "Collision Events",
      "Performance Guidelines",
      "Spatial Hash Example",
      "Quick Reference"
    ]
  },
  {
    "id": "macroquad-arch/R3",
    "title": "R3 — Ecosystem & Common Crates",
    "description": "",
    "category": "reference",
    "module": "macroquad-arch",
    "engine": "Macroquad",
    "tier": "pro",
    "sizeBytes": 7827,
    "sections": [
      "Overview",
      "First-Party Companion Crates",
      "macroquad-tiled",
      "macroquad-particles",
      "macroquad-platformer",
      "macroquad-profiler",
      "The miniquad Foundation",
      "Key miniquad Ecosystem Crates",
      "Community Libraries",
      "UI",
      "Physics",
      "Audio",
      "Networking",
      "Cargo Feature Flags",
      "WASM Deployment Crates",
      "Finding More Crates"
    ]
  },
  {
    "id": "monogame-arch/E1",
    "title": "E1 — Architecture Overview",
    "description": "",
    "category": "architecture",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 6828,
    "sections": [
      "Core Philosophy: Library Composition, Not a Monolith",
      "One Entity Model: Arch ECS for Everything",
      "Arch NuGet Packages",
      "When Arch ECS Shines Most",
      "Architecture Stack",
      "The Composed Library Stack",
      "Custom Glue Code (~1,000 lines total)",
      "What You Gain",
      "Cross-Platform Validation"
    ]
  },
  {
    "id": "monogame-arch/E2",
    "title": "E2 — Why Nez Was Dropped",
    "description": "",
    "category": "architecture",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 11416,
    "sections": [
      "What Nez Was",
      "Why It Was Dropped",
      "1. Monolithic dependency, single maintainer",
      "2. Nez's ECS wasn't actually an ECS",
      "3. Tightly coupled systems",
      "4. Update and maintenance concerns",
      "5. Architecture decisions made for you",
      "Feature-by-Feature Replacement Map",
      "Migration Path: Nez → Composed Stack",
      "Phase 1: ECS Migration (highest impact)",
      "Phase 2: Rendering",
      "Phase 3: Systems",
      "Phase 4: Remove Nez",
      "Estimated effort",
      "Lessons Learned: Framework vs Library Composition",
      "The framework trap",
      "The composition advantage",
      "The real cost comparison",
      "The broader principle"
    ]
  },
  {
    "id": "monogame-arch/E3",
    "title": "E3 — Engine Alternatives Evaluated",
    "description": "",
    "category": "architecture",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 11917,
    "sections": [
      "Why This Document Exists",
      "Evaluation Criteria",
      "Murder Engine",
      "What it is",
      "Strengths",
      "Why it didn't fit",
      "FlatRedBall",
      "What it is",
      "Strengths",
      "Why it didn't fit",
      "Monofoxe",
      "What it is",
      "Strengths",
      "Why it didn't fit",
      "Other Alternatives Considered",
      "MLEM",
      "Noppes Engine",
      "Raw MonoGame (no libraries)",
      "Decision Matrix",
      "Why Composed Libraries Won",
      "The \"no editor\" tradeoff",
      "The meta-lesson"
    ]
  },
  {
    "id": "monogame-arch/E8",
    "title": "E8 — MonoGameStudio Post-Mortem",
    "description": "",
    "category": "architecture",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 6430,
    "sections": [
      "What Was MonoGameStudio?",
      "Timeline",
      "What Went Right",
      "1. ImGui + Docking Is the Right Foundation",
      "2. ECS as the Scene Model",
      "3. Knowledge Extraction Was the Real Value",
      "What Went Wrong",
      "1. The Tool-Building Trap",
      "2. Scope Escalation Was Invisible",
      "3. No Shipping Pressure",
      "4. Reimplementing Solved Problems",
      "The Decision to Delete",
      "Lessons Applied",
      "When TO Build a Custom Editor",
      "Summary"
    ]
  },
  {
    "id": "monogame-arch/G100",
    "title": "G100 — MonoGame 3.8.5 Content Builder Project",
    "description": "How to set up and migrate to the new Content Builder Project system introduced in MonoGame 3.8.5. This replaces the M...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 11140,
    "sections": [
      "Why the Change?",
      "Creating a Content Builder Project",
      "From Template",
      "Project Structure",
      "Builder.cs: The Entry Point",
      "Minimal Example",
      "Custom Importer/Processor Configuration",
      "Explicit Per-File Rules",
      "Integrating with Your Game Project",
      "Step 1: Clean Up Legacy References",
      "Step 2: Add the Build Target",
      "Step 3: Platform-Specific Output (Mobile)",
      "Migration from MGCB Editor",
      "Translation Table: .mgcb → Builder.cs",
      "Migration Steps",
      "ContentBuilderParams (Advanced)",
      "Known Issues (3.8.5-preview.2)",
      "CI/CD Integration",
      "Further Reading"
    ]
  },
  {
    "id": "monogame-arch/G101",
    "title": "G101 — MonoGame 3.8.3 & 3.8.4 Release Guide",
    "description": "What changed in MonoGame 3.8.3 (April 2025) and 3.8.4 (June 2025), how to upgrade, and what to watch for. These two r...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 8739,
    "sections": [
      "Overview",
      "3.8.3 — April 2025",
      "3.8.4 — June 2025",
      "Upgrading from 3.8.2",
      "Step 1 — Update NuGet References",
      "Step 2 — Verify Content Pipeline",
      "Step 3 — Validate Input Mappings",
      "Step 4 — Test AOT / Trimmed Builds",
      "SDL 2.32.2 — What It Means for Your Game",
      "Preview Release Pipeline (3.8.4+)",
      "CI Integration with the Samples Test Pipeline",
      "Quick Migration Checklist",
      "Where to Go Next"
    ]
  },
  {
    "id": "monogame-arch/G102",
    "title": "G102 — Screen-Space 2D Shader Techniques",
    "description": "Advanced 2D shader patterns that operate on the full screen rather than individual sprites. Covers dissolve transitio...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 13146,
    "sections": [
      "Prerequisites",
      "The Screen-Space Pattern",
      "Technique 1 — Texture-Driven Dissolve",
      "The Gradient Texture",
      "HLSL — Dissolve Shader",
      "C# — Driving the Dissolve",
      "Technique 2 — CRT / Retro Post-Effect",
      "HLSL — CRT Shader",
      "C# Integration",
      "Technique 3 — Vignette with Colour Tinting",
      "HLSL — Vignette Shader",
      "Example — Damage Flash",
      "Chaining Multiple Screen Effects",
      "Performance Considerations",
      "Content Pipeline Setup",
      "Where to Go Next"
    ]
  },
  {
    "id": "monogame-arch/G103",
    "title": "G103 — Mobile Platform Deployment (Android & iOS)",
    "description": "End-to-end guide for shipping a MonoGame game on Android and iOS: project setup, signing, store configuration, touch ...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 13843,
    "sections": [
      "Prerequisites",
      "Project Setup",
      "Creating a Mobile Project",
      ".csproj Essentials — Android",
      ".csproj Essentials — iOS",
      "Touch Input",
      "Raw Touch Input",
      "Gesture Recognition",
      "High-Frequency Touch Events (Android)",
      "Virtual Controls Pattern",
      "Signing & Store Preparation",
      "Android — Keystore Signing",
      "iOS — Code Signing",
      "Mobile Performance Tuning",
      "Texture Compression",
      "Draw Call Budget",
      "Memory Budget",
      "Frame Rate Targeting",
      "CI/CD for Mobile Builds",
      "GitHub Actions — Android",
      "GitHub Actions — iOS",
      "Common Pitfalls",
      "Deployment Checklist",
      "Where to Go Next"
    ]
  },
  {
    "id": "monogame-arch/G104",
    "title": "G104 — MSDF Font Rendering",
    "description": "How to render resolution-independent, crisp text in MonoGame using Multi-Channel Signed Distance Field (MSDF) fonts. ...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 20497,
    "sections": [
      "Why MSDF Over SpriteFont?",
      "When to Use MSDF",
      "Atlas Generation",
      "Installing msdf-atlas-gen",
      "Generating an Atlas",
      "Atlas JSON Layout",
      "Content Pipeline Integration",
      "Option A: Raw File Loading (No MGCB)",
      "Option B: Custom Content Pipeline Processor",
      "The MSDF Shader",
      "MsdfFont.fx",
      "Shader Notes",
      "Text Layout & SpriteBatch Rendering",
      "MsdfTextRenderer",
      "Usage in Game",
      "Advanced Techniques",
      "Text Effects via Shader Parameters",
      "Drop Shadow",
      "Batching Multiple Fonts",
      "Performance Considerations",
      "When SpriteFont Is Still Better",
      "Troubleshooting",
      "Community Libraries",
      "Further Reading"
    ]
  },
  {
    "id": "monogame-arch/G105",
    "title": "G105 — MonoGame 3.8.5 Preview Updates (Preview.2 & Preview.3)",
    "description": "What's new and changed across MonoGame 3.8.5-preview.2 (January 2, 2026) and 3.8.5-preview.3 (January 2026). Covers ....",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 12910,
    "sections": [
      "Preview Release Timeline",
      ".NET 10 Support (Preview.3)",
      "What This Means for Your Project",
      "Practical Guidance",
      "8-Gamepad Input Support",
      "API Changes",
      "Integration Pattern",
      "Backward Compatibility",
      "Content Pipeline Caching",
      "How It Works",
      "Enabling Content Caching",
      "Cache Location",
      "CI/CD Considerations",
      "Impact",
      "StarterKit Templates (Preview.2)",
      "Available Templates",
      "StarterKit Structure",
      "Choosing a Backend",
      "Vulkan & DX12 Backend Updates",
      "What Works",
      "Known Issues (as of preview.2)",
      "API Surface",
      "Other Notable Changes",
      "Over 100 Fixes Since 3.8.4",
      "Deprecation Notices",
      "Upgrade Checklist",
      "Further Reading"
    ]
  },
  {
    "id": "monogame-arch/G106",
    "title": "G106 — Game Telemetry & Analytics",
    "description": "How to instrument a MonoGame game with telemetry and analytics: tracking player behavior, performance metrics, and ga...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 17649,
    "sections": [
      "Why Telemetry Matters for Game Dev",
      "Architecture Overview",
      "Design Principles",
      "Core Implementation",
      "Event Model",
      "Telemetry Collector",
      "Transport Interface",
      "Transports",
      "Local JSON File Transport",
      "HTTP Transport (Optional)",
      "Common Event Schemas",
      "Session Events",
      "Gameplay Events",
      "Performance Events",
      "Performance Sampling",
      "Integration with MonoGame",
      "Registering the Collector",
      "ECS Integration (Arch)",
      "Privacy & Opt-Out",
      "Principles",
      "Settings Integration",
      "Platform Considerations",
      "Analysis Patterns",
      "Quick Analysis with Python",
      "DuckDB for Larger Datasets",
      "Troubleshooting",
      "Further Reading"
    ]
  },
  {
    "id": "monogame-arch/G107",
    "title": "G107 — Custom Vertex Types & GPU Instancing",
    "description": "How to define custom vertex structures with IVertexType, build vertex/index buffers, and render thousands of objects ...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 18243,
    "sections": [
      "Why Custom Vertices?",
      "Defining a Custom Vertex Type",
      "Example: 2D Sprite Vertex with Tint + Atlas Index",
      "VertexElement Rules",
      "Matching HLSL Input",
      "Building and Drawing with Vertex Buffers",
      "Static Geometry",
      "Drawing",
      "Dynamic Geometry (Per-Frame Updates)",
      "Hardware Instancing",
      "Step 1: Define the Instance Data Struct",
      "Step 2: Create the Instance Buffer",
      "Step 3: Upload Instance Data Each Frame",
      "Step 4: Draw",
      "Step 5: HLSL Shader for Instancing",
      "Practical Pattern: Instanced Bullet System",
      "Performance Tips",
      "Batch Size Sweet Spots",
      "Reducing Instance Data Size",
      "Avoiding Common Pitfalls",
      "When to Use What",
      "Arch ECS Integration",
      "Further Reading"
    ]
  },
  {
    "id": "monogame-arch/G108",
    "title": "G108 — Custom Content Pipeline Extensions",
    "description": "A deep-dive guide to building custom content pipeline importers, processors, writers, and readers in MonoGame. Covers...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 18565,
    "sections": [
      "Architecture: The Four Pipeline Classes",
      "Project Setup",
      "1. Create the Pipeline Extension Library",
      "2. Reference from MGCB",
      "3. Reference from Content Builder Project (3.8.5+)",
      "Example 1: JSON Data Importer (Game Config / Level Data)",
      "Intermediate Type (shared)",
      "Importer",
      "Processor",
      "Writer (Build-Time Serialization)",
      "Reader (Runtime Deserialization — lives in game project)",
      "Loading at Runtime",
      "Example 2: Custom Sprite Sheet Metadata",
      "Importer — Multiple File Dependencies",
      "Processor — Building External References",
      "Processor Parameters",
      "Extending Built-In Processors",
      "Debugging Pipeline Extensions",
      "Method 1: Attach to MSBuild (Recommended)",
      "Method 2: Debugger.Launch()",
      "Method 3: Logging",
      "Versioning and Rebuild Triggers",
      "AOT / Trimming Considerations",
      "Content Builder Project Compatibility (3.8.5+)",
      "Common Pitfalls",
      "Further Reading"
    ]
  },
  {
    "id": "monogame-arch/G109",
    "title": "G109 — MonoGame.Extended 4.x–5.x Migration & New Features",
    "description": "What changed in MonoGame.Extended from 4.0 (July 2024) through 5.4 (February 2026): the package consolidation, namesp...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 11857,
    "sections": [
      "Version Timeline",
      "Package Consolidation (4.0)",
      "Namespace Changes (4.0)",
      "Quick Fix Strategy",
      "Content Pipeline Path Fix (4.0+)",
      "New Features in 5.x",
      "Arc and Pie Drawing (5.4)",
      "Outline Parameters on Solid Shapes (5.4)",
      "Tweening Improvements (5.4)",
      "Screen Lifecycle (5.4)",
      "Triangulator Rewrite (5.4)",
      "Zero-Allocation Vertex Handling",
      "Correct Winding Order Detection",
      "Collision Layer Self-Collision Fix (5.4)",
      "AOT / Trimming Compatibility (5.4)",
      "Batcher2D Deprecation (5.4)",
      "Arch ECS Integration Notes",
      "Content Builder Compatibility Warning (3.8.5)",
      "Further Reading"
    ]
  },
  {
    "id": "monogame-arch/G10",
    "title": "G10 — Custom Game Systems",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 88501,
    "sections": [
      "1. Inventory System",
      "Components",
      "Item Registry",
      "Inventory Logic",
      "Inventory ECS System",
      "2. Dialogue System",
      "Data Model",
      "Variable Store",
      "Dialogue Manager",
      "ECS Integration",
      "Example Dialogue JSON",
      "3. Save/Load System",
      "Components & Interfaces",
      "Save Serializer",
      "Save Manager",
      "World Restoration",
      "4. Procedural Generation Suite",
      "Shared Types",
      "4a. BSP Dungeon Generation",
      "4b. Cellular Automata (Cave Generation)",
      "4c. Wave Function Collapse (Tile Constraint Propagation)",
      "4d. Perlin/Simplex Noise",
      "ECS Integration — Procgen System",
      "5. Crafting System",
      "Data Model",
      "Recipe Registry",
      "Crafting ECS System",
      "6. Quest / Objective System",
      "Data Model",
      "Quest Manager",
      "ECS Integration",
      "7. Status Effect / Buff System",
      "Components",
      "Effect Application",
      "Status Effect ECS System",
      "Visual Indicator Integration",
      "8. Undo/Redo — Command Pattern",
      "Core Framework",
      "Concrete Commands",
      "ECS Components & System",
      "9. Wave / Spawn System",
      "Data Model",
      "Wave Manager System",
      "Example Wave JSON",
      "10. Day/Night Cycle & Weather",
      "Components",
      "Ambient Lighting Curves",
      "Day/Night System",
      "Weather System",
      "Gameplay Effects",
      "Integration Patterns",
      "System Pipeline (Recommended Order)",
      "Shared Services Container",
      "Cross-System Event Wiring",
      "Save/Load Integration",
      "Architecture Decision Guide"
    ]
  },
  {
    "id": "monogame-arch/G110",
    "title": "G110 — Hierarchical Scene Lifecycle with Arch ECS",
    "description": "Advanced patterns for managing multiple Arch ECS worlds across a scene hierarchy. Covers world-per-scene ownership, s...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 19383,
    "sections": [
      "Table of Contents",
      "1. World-Per-Scene Ownership Model",
      "Why One World Per Scene",
      "Scene Base with World Ownership",
      "2. Scene Stack with Independent Worlds",
      "3. Shared Services Across Scenes",
      "When to use the global EventBus vs. Arch queries",
      "4. Async Scene Preloading",
      "5. Overlay Scenes with Transparent Worlds",
      "6. Safe World Disposal and Entity Cleanup",
      "Disposal Checklist",
      "Common Mistakes",
      "7. Scene Transitions with World Handoff",
      "8. Practical Example: RPG Scene Flow",
      "Integration in Game1.cs",
      "Summary"
    ]
  },
  {
    "id": "monogame-arch/G111",
    "title": "G111 — Content Builder Project: Custom Importers & Processor Migration",
    "description": "How to migrate custom ContentImporter<T> and ContentProcessor<T, TOutput> implementations from the MGCB Editor workfl...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 15441,
    "sections": [
      "Table of Contents",
      "1. What Changed in 3.8.5",
      "What to Remove from Your Game Project",
      "2. The Breaking Change: Deprecated BuildContent Path",
      "What Breaks",
      "Why It Broke",
      "3. Migration Strategy Overview",
      "4. Porting a Custom Importer",
      "Before (3.8.4 — MGCB Referenced DLL)",
      "After (3.8.5 — Content Builder Project Reference)",
      "Changes to Watch For",
      "5. Porting a Custom Processor",
      "6. Registering Custom Pipeline Extensions in the Builder",
      "Builder Project Structure",
      "ContentBuilder.csproj",
      "Builder.cs — Registering Custom Extensions",
      "7. Common Migration Issues",
      "Issue: Custom importer not found at build time",
      "Issue: `IntermediateDirectory` path mismatch",
      "Issue: MonoGame.Extended Tiled importer crashes",
      "8. MonoGame.Extended Compatibility",
      "9. Testing Custom Pipeline Extensions",
      "Summary"
    ]
  },
  {
    "id": "monogame-arch/G112",
    "title": "G112 — Arch ECS 2.x: Source Generators, Bulk Operations & Event Bus",
    "description": "Covers features introduced in Arch 2.0–2.1: the Arch.System.SourceGenerator for zero-boilerplate system authoring, bu...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 19040,
    "sections": [
      "Table of Contents",
      "1. Package Overview (Arch 2.x Ecosystem)",
      "Installation",
      "2. Source-Generated Systems",
      "Before (Manual Query — Arch 1.x Style)",
      "After (Source-Generated — Arch 2.x)",
      "How It Works",
      "Filtering: All, Any, None",
      "Accessing the Entity Reference",
      "3. Bulk Entity Operations",
      "Bulk Creation",
      "Bulk Destruction",
      "Bulk Add/Remove Components",
      "Performance Comparison",
      "4. Event Bus (Arch.Bus)",
      "Defining Events",
      "Subscribing to Events",
      "Publishing Events",
      "Instance vs. Static Event Bus",
      "5. Relationships Between Entities",
      "6. AOT Compatibility (Arch.AOT)",
      "Setup",
      "Usage",
      "Verifying AOT Compatibility",
      "Fallback for Manual Queries",
      "7. Serialization (Arch.Persistence)",
      "Selective Serialization",
      "JSON Format (for Debugging)",
      "8. Performance Patterns",
      "Command Buffers for Thread-Safe Structural Changes",
      "Parallel Queries (Multithreaded Iteration)",
      "Query Caching",
      "9. Putting It Together: MonoGame Integration",
      "Summary"
    ]
  },
  {
    "id": "monogame-arch/G113",
    "title": "G113 — MonoGame 3.8.4 Stable, 3.8.4.1 Patch & 3.8.5 Preview Changelog",
    "description": "Comprehensive changelog covering MonoGame 3.8.4 (June 2025), the 3.8.4.1 hotfix (October 2025), and the 3.8.5 preview...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 8821,
    "sections": [
      "Table of Contents",
      "1. 3.8.4 Stable — June 2025",
      "Bug Fixes",
      "New Features & Improvements",
      "Upgrading to 3.8.4",
      "2. 3.8.4.1 Hotfix — October 2025",
      "Changes",
      "Upgrading",
      "3. 3.8.5 Preview.1 — December 2025",
      "Headline Features",
      "Framework Improvements",
      "New Templates",
      "4. 3.8.5 Preview.2 — January 2026",
      "5. Upgrade Path",
      "From 3.8.3 → 3.8.4",
      "From 3.8.4 → 3.8.5-preview",
      "NuGet Source for Previews",
      "6. Known Issues & Workarounds",
      "Quick Reference: Version Timeline"
    ]
  },
  {
    "id": "G114",
    "title": "G114 — Coroutines & Async Game Patterns",
    "description": "How to implement Unity-style coroutines in MonoGame using C# iterators, and when to use async/await vs. coroutines fo...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 16185,
    "sections": [
      "Table of Contents",
      "1. Why Coroutines?",
      "2. C# Iterators as Coroutines",
      "3. Building a Coroutine Runner",
      "Yield Instruction Interface",
      "Core Runner",
      "Coroutine Handle",
      "4. Yield Instructions",
      "WaitForSeconds",
      "WaitForFrames",
      "WaitUntil",
      "WaitForCoroutine",
      "5. Using Coroutines in Game Code",
      "Setup",
      "Sequenced Screen Fade",
      "Timed Spawn Wave",
      "Dialog Sequence",
      "6. Nested Coroutines",
      "7. Cancellation & Lifecycle",
      "Cancel on Scene Change",
      "Cancel Individual Coroutines",
      "Dispose Safety",
      "8. Async/Await in MonoGame",
      "When Async/Await IS Appropriate",
      "Thread Safety with Async",
      "MonoGame's Legacy Async API",
      "9. Coroutines vs. Async: Decision Guide",
      "10. Performance Considerations",
      "Struct Yield to Avoid Boxing (Advanced)"
    ]
  },
  {
    "id": "G115",
    "title": "G115 — Custom HLSL Effect Pipeline (End-to-End)",
    "description": "Complete walkthrough for authoring, compiling, loading, and debugging custom HLSL effects in MonoGame. Covers the MGF...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 17898,
    "sections": [
      "Table of Contents",
      "1. How MonoGame Compiles Shaders",
      "2. File Setup & Content Pipeline",
      "Adding an Effect to Content",
      "Directory Convention",
      "3. HLSL Effect Structure",
      "1. Platform Defines",
      "2. Parameters (Uniforms)",
      "3. Vertex & Pixel Shader Functions",
      "4. Technique Block",
      "4. Cross-Platform Compatibility",
      "Shader Model Constraints",
      "Rules for Cross-Platform Shaders",
      "Platform-Specific Code Paths",
      "5. Parameter Binding in C#",
      "Loading and Caching Parameters",
      "Parameter Type Mapping",
      "6. Multi-Pass Techniques",
      "HLSL: Two-Pass Blur",
      "C#: Applying Multi-Pass",
      "7. SpriteBatch Integration",
      "SpriteBatch Vertex Format",
      "MatrixTransform",
      "8. 3D Mesh Effects",
      "9. Compiling with MGFXC Directly",
      "Loading Pre-Compiled Effects",
      "MGFXC in CI (3.8.5+)",
      "10. Debugging Shaders",
      "Visual Studio Graphics Debugger",
      "RenderDoc (OpenGL / Vulkan)",
      "Printf Debugging",
      "Common Compile Errors",
      "11. Common Pitfalls"
    ]
  },
  {
    "id": "G116",
    "title": "G116 — External Level Editor Integration (LDtk, Tiled, Ogmo)",
    "description": "How to load, render, and interact with levels authored in external 2D level editors — LDtk, Tiled, and Ogmo Editor — ...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 12500,
    "sections": [
      "Table of Contents",
      "1. Why Use an External Level Editor?",
      "2. Editor Comparison",
      "3. Path A — LDtkMonogame (Standalone)",
      "Installation",
      "Loading a World",
      "Rendering Levels",
      "Accessing Entities",
      "Codegen Setup",
      "4. Path B — MonoGame.Extended 6.0 Tilemaps",
      "Key Concepts",
      "Installation",
      "Loading",
      "Rendering",
      "Accessing Objects and Properties",
      "World Maps",
      "5. Path C — Manual JSON Loading",
      "6. Entity & Object Mapping",
      "7. Collision from Editor Layers",
      "8. Hot-Reload Workflow",
      "9. Content Pipeline vs. Runtime Loading",
      "10. Common Pitfalls",
      "Coordinate system mismatch",
      "Tileset texture paths",
      "Layer draw order",
      "Large worlds — don't load everything",
      "MonoGame.Extended 6.0 breaking changes",
      "Summary"
    ]
  },
  {
    "id": "G117",
    "title": "G117 — Chunk-Based World Streaming",
    "description": "How to implement chunk-based world streaming in MonoGame for large 2D or 3D worlds that cannot fit in memory at once....",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 14380,
    "sections": [
      "Table of Contents",
      "1. When You Need Streaming",
      "2. Chunk Grid Design",
      "Choosing Chunk Size",
      "3. ChunkManager Architecture",
      "4. Async Loading & Thread Safety",
      "Why Not Load Textures on Background Threads?",
      "5. Memory Budget & Unloading",
      "Chunk Disposal",
      "6. Rendering Loaded Chunks",
      "2D Tilemap Chunks",
      "Reducing Draw Calls",
      "7. Entity Streaming",
      "8. Editor Integration",
      "LDtk Multi-Level as Chunks",
      "Tiled .world Files",
      "9. Voxel World Variant",
      "10. Performance Checklist",
      "Architecture Summary"
    ]
  },
  {
    "id": "G118",
    "title": "G118 — MonoGame 3.8.2 Migration & .NET 8 Upgrade",
    "description": "Step-by-step migration guide for upgrading MonoGame projects from 3.8.0/3.8.1 to 3.8.2. Covers the .NET 8 target fram...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 10483,
    "sections": [
      "Table of Contents",
      "1. What Changed in 3.8.2",
      "2. Pre-Migration Checklist",
      "3. Step 1 — Update Target Framework",
      "4. Step 2 — Switch MGCB to Local Tool",
      "4a. Uninstall Global Tools",
      "4b. Create Local Tool Manifest",
      "4c. Restore Local Tools",
      "4d. Verify",
      "5. Step 3 — Update NuGet Packages",
      "6. Step 4 — Remove UWP References",
      "7. Step 5 — Verify Content Pipeline",
      "8. Step 6 — Test & Fix Build",
      "Common Build Errors After Migration",
      "9. Visual Studio 2022 Setup",
      "VS Code / JetBrains Rider",
      "10. Troubleshooting",
      "\"Multiple MGCB versions found\"",
      "Content builds work in CLI but not in VS",
      "NativeAOT compatibility",
      "Linux/macOS MGCB Editor",
      "11. Post-Migration — Path to 3.8.3+",
      "Migration Checklist Summary"
    ]
  },
  {
    "id": "G119",
    "title": "G119 — 3D Camera Systems",
    "description": "How to implement 3D camera systems in MonoGame: first-person, third-person, orbit, and free-fly cameras. Covers the v...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 18585,
    "sections": [
      "Table of Contents",
      "1. View & Projection Fundamentals",
      "View Matrix — Where the Camera Is",
      "Projection Matrix — How the Camera Sees",
      "2. Base Camera Class",
      "3. First-Person Camera",
      "4. Third-Person Follow Camera",
      "5. Orbit Camera",
      "6. Free-Fly / Debug Camera",
      "7. Smooth Interpolation & Damping",
      "Framerate-Independent Smoothing",
      "Spring Damping",
      "8. Camera Collision",
      "9. Screen Shake in 3D",
      "10. ECS Integration",
      "11. Common Pitfalls",
      "See Also"
    ]
  },
  {
    "id": "monogame-arch/G11",
    "title": "G11 — Programming Principles",
    "description": "Foundational principles applied to game development with MonoGame + Arch ECS.",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 5832,
    "sections": [
      "SOLID Principles",
      "Single Responsibility Principle (SRP)",
      "Open/Closed Principle (OCP)",
      "Liskov Substitution Principle (LSP)",
      "Interface Segregation Principle (ISP)",
      "Dependency Inversion Principle (DIP)",
      "DRY, KISS, YAGNI",
      "Composition Over Inheritance"
    ]
  },
  {
    "id": "G120",
    "title": "G120 — Adaptive & Dynamic Audio Systems",
    "description": "How to build adaptive music and dynamic audio systems in MonoGame. Covers layered music stems with crossfading, inten...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 19465,
    "sections": [
      "Table of Contents",
      "1. When You Need Adaptive Audio",
      "2. MonoGame Audio Constraints",
      "3. Layered Music System (Vertical Orchestration)",
      "Concept",
      "Implementation",
      "Usage",
      "Audio Preparation Tips",
      "4. Crossfading Between Tracks",
      "5. Horizontal Re-Sequencing",
      "6. Ambient Soundscapes",
      "7. FMOD Integration for Advanced Audio",
      "Setup",
      "FMOD Studio Events",
      "When to Use FMOD vs. Built-In",
      "8. Audio State Machine",
      "9. ECS Integration",
      "10. Performance & Memory",
      "11. Checklist",
      "See Also"
    ]
  },
  {
    "id": "G121",
    "title": "G121 — MonoGame.Reload: Runtime Hot Reload Workflow",
    "description": "How to use the MonoGame.Reload NuGet library (v0.3.3+) to hot-reload textures, effects, sounds, and data files at run...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 13466,
    "sections": [
      "Table of Contents",
      "1. Why Runtime Hot Reload",
      "2. Installation & Setup",
      "Install the NuGet Package",
      "Initialize the Reloader",
      "Content Directory Configuration",
      "3. How It Works",
      "4. Reloading Textures",
      "5. Reloading Effects / Shaders",
      "Manual Shader Hot Reload (Alternative)",
      "6. Reloading Sounds & Music",
      "7. Reloading Data Files",
      "8. File Callbacks & Events",
      "9. Filtering & Ignoring Asset Types",
      "10. Integration Patterns",
      "Pattern 1: Debug Overlay",
      "Pattern 2: Conditional Compilation",
      "Pattern 3: MonoGame.Aseprite Integration",
      "11. Troubleshooting",
      "Platform Notes",
      "See Also"
    ]
  },
  {
    "id": "monogame-arch/G12",
    "title": "G12 — Design Patterns",
    "description": "Game-specific design patterns with full implementations for the MonoGame + Arch ECS stack.",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 8628,
    "sections": [
      "Observer Pattern / Event System",
      "Event Bus (Decoupled Communication)",
      "Command Pattern",
      "State Machines",
      "Service Locator (Singleton Alternative)",
      "Strategy Pattern",
      "Flyweight Pattern",
      "Factory Pattern"
    ]
  },
  {
    "id": "monogame-arch/G13",
    "title": "G13 — C# Performance",
    "description": "Performance techniques for C# game code. The goal: zero bytes allocated per frame in steady-state gameplay.",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 10043,
    "sections": [
      "Zero-Allocation Techniques",
      "Span\\<T> and stackalloc",
      "ArrayPool\\<T>",
      "CollectionsMarshal",
      "FrozenDictionary (.NET 8+)",
      "Value Type Best Practices",
      "String Handling",
      "Source Generators",
      "GC Pressure Elimination",
      "SIMD Acceleration",
      "Cache Efficiency",
      "Custom Allocators",
      "Async/Await Pitfalls",
      "Common Memory Leak Sources"
    ]
  },
  {
    "id": "monogame-arch/G14",
    "title": "G14 — Data Structures",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 30408,
    "sections": [
      "1. Ring Buffer (Circular Buffer)",
      "Generic Implementation",
      "Usage Patterns",
      "2. Priority Queue (.NET 6+)",
      "A* Pathfinding (Primary Use)",
      "Event Scheduling System",
      "Turn-Based Initiative",
      "3. Bit Flags & Collision Layers",
      "Collision Layer Setup",
      "Collision Matrix",
      "ECS Component Masks",
      "Bit Manipulation Utilities",
      "4. Spatial Data Structures",
      "Choosing the Right One",
      "Spatial Hash (Full Implementation)",
      "Uniform Grid (Fixed-Size World)",
      "Quadtree",
      "Spatial Structure Comparison",
      "5. Object Pools",
      "Generic Object Pool",
      "Pooled Bullet System (ECS Pattern)",
      "Array-Based Pool (Zero GC)",
      "6. ECS-Friendly Data Layouts",
      "Structure of Arrays (SoA) vs Array of Structures (AoS)",
      "Why This Matters in Arch",
      "Hot/Cold Splitting",
      "Avoiding Archetype Fragmentation",
      "7. Specialized Game Structures",
      "Sparse Set",
      "Free List (Index Recycling)",
      "Flat 2D Array Helpers",
      "8. When to Use What — Decision Guide",
      "Performance Rules of Thumb"
    ]
  },
  {
    "id": "monogame-arch/G15",
    "title": "G15 — Game Loop",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 8103,
    "sections": [
      "Fixed Timestep with Accumulator",
      "MonoGame Integration",
      "Interpolation (Optional)",
      "Culling and Batching",
      "Mobile-Specific Optimization",
      "iOS Game Lifecycle",
      "Variable Render Rate (ProMotion / High Refresh)",
      "Why",
      "How It Works",
      "Platform Callback Pattern",
      "iOS: CADisplayLink Reflection",
      "Desktop: Sleep-Based Limiting",
      "Final Principles"
    ]
  },
  {
    "id": "monogame-arch/G16",
    "title": "G16 — Debugging",
    "description": "Systematic debugging methodology, visual symptom diagnosis, MonoGame + Arch ECS debugging, ImGui tooling, structured ...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 29240,
    "sections": [
      "Debugging as a Systematic Process",
      "The TRAFFIC Framework",
      "Agans' Nine Rules",
      "Kernighan and Pike",
      "What Separates Expert Debuggers from Novices",
      "Reading Visual Symptoms",
      "Rendering Artifacts",
      "Sprite Flickering in MonoGame",
      "Physics Glitches",
      "State Machine Errors",
      "Logic Errors",
      "The Complete Debugging Toolkit",
      "Breakpoint Strategies in Visual Studio",
      "Binary Search Debugging",
      "Delta Debugging & Saff Squeeze",
      "Rubber Duck Debugging",
      "Print vs Breakpoint Debugging",
      "Graceful Degradation Over Crashes",
      "Game-Specific Debugging (MonoGame + Arch ECS)",
      "Debug Infrastructure Priority",
      "ECS Debugging with Arch",
      "MonoGame-Specific Pitfalls",
      "In-Game Debug Tooling (ImGui.NET)",
      "Frame-by-Frame Stepping",
      "Time Manipulation",
      "Structured Logging",
      "From Symptoms to Root Cause",
      "The Systematic Approach",
      "The Debugging Manifesto",
      "Symptom → Technique Table",
      "The Obra Methodology",
      "Assertions and Sentinel Values",
      "Common C# Pitfalls in Game Code"
    ]
  },
  {
    "id": "monogame-arch/G17",
    "title": "G17 — Testing",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 31551,
    "sections": [
      "1. xUnit Project Setup for MonoGame",
      "Project Structure",
      "Test Project (.csproj)",
      "Running Tests",
      "Key Principle: Separate Logic from Framework",
      "2. Unit Testing Pure Game Logic",
      "Testing Components",
      "Testing Math Utilities",
      "Testing State Machines",
      "3. Mocking & Testing Arch ECS Systems",
      "Creating Test Worlds",
      "Testing Systems That Query Multiple Archetypes",
      "Testing CommandBuffer Usage",
      "Asserting Entity Counts with Queries",
      "4. Integration Testing Patterns",
      "Service Interfaces for Testability",
      "Mock Implementations",
      "Full System Integration Test",
      "5. Testing Game Systems In Depth",
      "Physics & Collision",
      "AI Decision Testing",
      "Inventory Operations",
      "6. Test Fixtures & Helpers",
      "MonoGame Type Helpers",
      "World Fixture (Shared Across Tests in a Class)",
      "Custom xUnit Assertions",
      "7. Deterministic Testing Patterns",
      "Seeded Random for Reproducible Tests",
      "Frame-Stepping for Time-Dependent Logic",
      "8. Serialization & Save/Load Testing",
      "9. Performance & Benchmark Testing",
      "BenchmarkDotNet Setup",
      "Benchmarking Spatial Queries",
      "Benchmarking ECS System Throughput",
      "Running Benchmarks",
      "10. Test Organization & Best Practices",
      "Naming Convention",
      "Test Categories with Traits",
      "What to Test — Decision Guide",
      "CI Integration",
      "Quick Reference"
    ]
  },
  {
    "id": "monogame-arch/G18",
    "title": "G18 — Game Programming Patterns",
    "description": "20 game programming patterns from Robert Nystrom's Game Programming Patterns, adapted for MonoGame + Arch ECS develop...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 33632,
    "sections": [
      "Pattern Overview",
      "Design Patterns Revisited",
      "Command",
      "Flyweight",
      "Observer",
      "Prototype",
      "Singleton",
      "State",
      "Sequencing Patterns",
      "Double Buffer",
      "Game Loop",
      "Update Method",
      "Behavioral Patterns",
      "Bytecode",
      "Subclass Sandbox",
      "Type Object",
      "Decoupling Patterns",
      "Component",
      "Event Queue",
      "Service Locator",
      "Optimization Patterns",
      "Data Locality",
      "Dirty Flag",
      "Object Pool",
      "Spatial Partition",
      "Pattern Relationships & Synergies",
      "Implementation Priority Matrix",
      "Architecture Guidelines",
      "Simplicity First",
      "Performance Awareness",
      "Decoupling Over Coupling",
      "Data-Driven Design",
      "Know When to Break the Rules"
    ]
  },
  {
    "id": "monogame-arch/G19",
    "title": "G19 — Display, Resolution & Viewports",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 17699,
    "sections": [
      "The Core Problem",
      "Design Resolution vs Display Resolution",
      "Scaling Strategies",
      "Strategy 1: Viewport Scaling (Pixel Art)",
      "Strategy 2: Letterbox / Pillarbox (Fixed Aspect Ratio)",
      "Strategy 3: Expand (Show More World)",
      "Strategy 4: Canvas Scaling (UI-First)",
      "Decision Table",
      "MonoGame Implementation",
      "Virtual Resolution Class — Expand Mode (~80 lines)",
      "Usage in GameApp",
      "Integer Scaling for Pixel Art",
      "Pixel Art: SamplerState Matters",
      "Mobile Display Handling",
      "iOS Device Resolutions",
      "MonoGame on iOS",
      "HiDPI / Retina Displays",
      "Fullscreen vs Windowed",
      "Aspect Ratio Decision Tree",
      "Common Pitfalls",
      "See Also"
    ]
  },
  {
    "id": "monogame-arch/G1",
    "title": "G1 — Custom Code Recipes",
    "description": "These are the ~1,000 lines of custom code that replace Nez's framework features. Each module is self-contained and ca...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 11086,
    "sections": [
      "1. Scene Manager (~150 lines)",
      "2. Render Layer System (~200 lines)",
      "3. SpatialHash Broadphase (~80 lines)",
      "4. Collision Shapes (~150 lines)",
      "5. Tween System (~100 lines)",
      "6. Screen Transitions (~100 lines)",
      "7. Post-Processor Pipeline (~150 lines)",
      "8. Object Pool (~60 lines)",
      "9. Line Renderer (~50 lines)"
    ]
  },
  {
    "id": "monogame-arch/G20",
    "title": "G20 — Camera Systems",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 47833,
    "sections": [
      "Table of Contents",
      "Camera Pipeline Overview",
      "MonoGame.Extended OrthographicCamera",
      "Passing to SpriteBatch",
      "Built-in Methods",
      "Coordinate System Reminder",
      "Camera Follow Patterns",
      "1. Direct Follow (Lock to Target)",
      "2. Smoothed Follow (Lerp)",
      "3. Deadzone (Only Move When Target Exits Region)",
      "4. Look-Ahead (Offset in Movement Direction)",
      "5. Platformer-Style Vertical Snap",
      "Combining Patterns",
      "Camera Limits (Clamping to Map Bounds)",
      "Correct Approach (with VirtualResolution)",
      "Without VirtualResolution (Fixed Resolution)",
      "Small Maps (View Larger Than Map)",
      "Camera Shake",
      "Basic Shake (Random Offset + Decay)",
      "Perlin Noise Shake (Smooth, Cinematic Feel)",
      "Shake Comparison",
      "Directional Shake",
      "Camera Zoom",
      "Smooth Zoom",
      "Scroll Wheel Zoom (Desktop)",
      "Zoom to Point",
      "Zoom Levels for Genre",
      "Multi-Target Camera",
      "Cinematic Camera",
      "Camera Transitions",
      "Fade Transition",
      "Smooth Camera Cut (Instant Reposition with Smoothing)",
      "Split Screen (Multiple Cameras)",
      "Frustum Culling with Camera",
      "Camera Priority Stack",
      "ECS Integration",
      "Components",
      "CameraFollowSystem",
      "CameraZoneSystem",
      "Troubleshooting",
      "Camera jitters or vibrates",
      "Camera shows black/empty space at edges",
      "Camera shake doesn't work at map edges",
      "Zoom changes visible area unexpectedly",
      "Split screen performance is poor",
      "Camera snaps when entering new room/zone",
      "Integer vs float position confusion",
      "See Also"
    ]
  },
  {
    "id": "monogame-arch/G21",
    "title": "G21 — Coordinate Systems & Transforms",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 10070,
    "sections": [
      "The Four Coordinate Spaces",
      "1. Screen Space",
      "2. Viewport Space",
      "3. World Space",
      "4. Local Space",
      "MonoGame's Coordinate System",
      "Conversion Functions",
      "Screen → World (The Full Chain)",
      "World → Screen (The Reverse)",
      "Viewport ↔ World (No Virtual Resolution)",
      "Transform Matrices",
      "The Camera View Matrix",
      "The Scale Matrix (Virtual Resolution)",
      "Manual Point Transformation",
      "Touch Input on Scaled Viewports (Mobile)",
      "Local Space and Parent-Child Transforms",
      "Common Conversion Scenarios",
      "Coordinate Debugging Tips",
      "See Also"
    ]
  },
  {
    "id": "monogame-arch/G22",
    "title": "G22 — Parallax & Depth Layers",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 11145,
    "sections": [
      "What Parallax Does",
      "The Scroll Factor Formula",
      "Implementation with RenderLayerSystem",
      "Approach 1: Modified SpriteBatch Transform per Layer",
      "Approach 2: Offset Positions Directly",
      "RenderLayer with ScrollFactor",
      "Typical Layer Setup",
      "Infinite Scrolling / Tiling",
      "Texture Wrapping (GPU)",
      "Manual Tiling (Multiple Draws)",
      "Y-Sort Rendering (Top-Down Games)",
      "SpriteBatch Y-Sort",
      "ECS-Based Y-Sort",
      "Z-Index Within Layers",
      "Common Z-Index Assignments",
      "Combining Parallax + Y-Sort + Z-Index",
      "Performance Notes",
      "See Also"
    ]
  },
  {
    "id": "monogame-arch/G23",
    "title": "G23 — Particles",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 19172,
    "sections": [
      "Two Approaches",
      "Approach 1: Struct Pool Particle System",
      "Particle Struct",
      "ParticlePool",
      "Emitter Patterns",
      "Approach 2: ECS Particle Entities",
      "Components",
      "ParticleLifetimeSystem",
      "Blending Modes",
      "Particle Textures",
      "Common Effects (Parameter Recipes)",
      "Explosion",
      "Fire",
      "Smoke",
      "Blood Splatter",
      "Sparkle / Collect",
      "Trail (Behind Moving Entity)",
      "Performance Guidelines",
      "Integration with ObjectPool",
      "Production Particle Systems",
      "Budget-Based Emission",
      "Alternating Iteration Direction",
      "Kill Bounds",
      "Tagged Particles and Cross-System Queries",
      "Frustum-Culled Draw",
      "Velocity Delay Ramp",
      "Cached Interpolation",
      "See Also"
    ]
  },
  {
    "id": "monogame-arch/G24",
    "title": "G24 — Window & Display Management",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 11190,
    "sections": [
      "GraphicsDeviceManager Setup",
      "Window Size vs Backbuffer Size",
      "Fullscreen Modes",
      "Borderless Windowed Fullscreen (Recommended)",
      "Exclusive Fullscreen",
      "Windowed",
      "Toggle at Runtime",
      "Window Resize Handling",
      "VSync and Frame Timing",
      "VSync On (Default)",
      "VSync Off",
      "Relationship to Game Loop",
      "Graphics Profiles",
      "Multi-Monitor (Desktop)",
      "iOS-Specific Display",
      "What MonoGame Handles Automatically",
      "What You Handle",
      "ProMotion Display Rate",
      "Desktop Window Configuration Recipes",
      "Development Window (Small, Resizable)",
      "Release Window (Borderless Fullscreen Default)",
      "Pixel Art (Fixed Aspect, Integer Scale)",
      "Common Pitfalls",
      "See Also"
    ]
  },
  {
    "id": "monogame-arch/G25",
    "title": "G25 — Safe Areas & Adaptive Layout",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 13516,
    "sections": [
      "What Are Safe Areas?",
      "Safe Area Insets (iOS)",
      "Getting Insets in MonoGame",
      "Typical Inset Values",
      "Converting Insets to Game Coordinates",
      "Safe Rectangle in Virtual Coordinates",
      "What to Place in the Safe Area",
      "Critical (Must Be in Safe Area)",
      "Acceptable Outside Safe Area",
      "Rule of Thumb",
      "HUD Anchoring Patterns",
      "Drawing HUD with Safe Area",
      "Aspect Ratio Differences",
      "Handling Variable Aspect Ratios",
      "What This Means for Game Design",
      "Gum UI and Safe Areas",
      "Testing Different Devices on Desktop",
      "Debug Safe Area Overlay",
      "Common Pitfalls",
      "See Also"
    ]
  },
  {
    "id": "monogame-arch/G26",
    "title": "G26 — Resource Loading & Caching",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 14692,
    "sections": [
      "Resource Types in MonoGame",
      "MGCB Assets (Content.Load)",
      "Automatic Caching",
      "Disposal",
      "Scoped ContentManagers",
      "What MGCB Handles",
      "Runtime JSON Data",
      "Loading from Content Directory",
      "Source Generator for AOT Compatibility",
      "Caching JSON Data",
      "FontStashSharp Fonts",
      "Bundling Fonts",
      "Texture Atlases",
      "Loading Atlases",
      "Atlas Strategies",
      "Scene-Scoped vs Global Resources",
      "Architecture Pattern",
      "Loading Screens",
      "Synchronous Loading (Simple)",
      "Async Loading (Background Thread)",
      "Memory Management",
      "What to Dispose",
      "Common Leaks",
      "Memory Budgets (Rough Guidelines)",
      "Comparison to Godot's Resource System",
      "Common Pitfalls",
      "See Also"
    ]
  },
  {
    "id": "monogame-arch/G27",
    "title": "G27 — Shaders & Visual Effects",
    "description": "Production-ready HLSL shader code and C# integration patterns for elemental effects (fire, water, wind, earth, lightn...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 28300,
    "sections": [
      "MonoGame Shader Pipeline",
      "C# Integration",
      "Three Critical Gotchas",
      "Passing Extra Textures",
      "Procedural Noise Primitives",
      "Hash-Based Value Noise",
      "Fractal Brownian Motion (FBM)",
      "Voronoi (Cellular) Noise",
      "Fire: Noise-Driven Flames with Color Gradient Mapping",
      "Color Gradient Mapping",
      "Heat Haze Distortion",
      "Additive Glow",
      "Water: Layered Distortion with Reflections and Caustics",
      "Top-Down Reflections",
      "Caustics",
      "Ripple Effects",
      "Shoreline Foam",
      "Wind: Traveling Sway Waves Across Vegetation",
      "Visible Wind Gusts",
      "Earth: Terrain Blending, Cracks, and Impact Shockwaves",
      "Splatmap Terrain Blending",
      "Height-Based Blending",
      "Ground Cracks",
      "Ground Impact Shockwaves",
      "Lightning: Jagged Bolts with Exponential Glow",
      "Noise-Displaced Arc",
      "Screen Flash",
      "Branching Lightning",
      "Ice & Frost: Voronoi Crystals with Spreading Freeze",
      "Freezing Spread Effect",
      "Ice Crystal Patterns",
      "Cracking Ice",
      "Post-Processing & Screen Effects",
      "Render Target Pattern",
      "Bloom",
      "Palette Manipulation",
      "Dithering",
      "Flash White",
      "Performance & Batching",
      "SpriteBatch Batching",
      "Vertex Color Encoding",
      "Render Target Management",
      "When to Avoid Shaders",
      "ECS Integration",
      "Resources & Shadertoy Conversion",
      "Essential Repositories",
      "Shadertoy-to-MonoGame HLSL Mapping"
    ]
  },
  {
    "id": "monogame-arch/G28",
    "title": "G28 — 3/4 Top-Down Perspective",
    "description": "The 3/4 top-down view — used by Stardew Valley, Chrono Trigger, CrossCode, and dozens of landmark RPGs — relies on a ...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 23733,
    "sections": [
      "How shipped games solved the 3/4 view problem",
      "Three approaches to depth illusion",
      "The engine patterns that 3/4 art demands",
      "Y-sorting: sort by feet, not by center",
      "Collision shapes must represent the ground plane",
      "Wall and building rendering through split sprites",
      "Camera systems and pixel-perfect rendering",
      "2.5D techniques that elevate flat sprites",
      "Normal maps are the highest-ROI visual upgrade",
      "LUT color grading transforms mood cheaply",
      "The HD-2D approach and 3D-to-2D pipelines",
      "Post-processing stack for pixel art",
      "How art constraints shape the engine architecture",
      "Implementation patterns for MonoGame + Arch ECS",
      "Render pipeline architecture",
      "Component design for the 3/4 view",
      "Tiled map integration",
      "Aseprite integration",
      "Developer resources and further reading",
      "Conclusion"
    ]
  },
  {
    "id": "monogame-arch/G29",
    "title": "G29 — Game Editor",
    "description": "ImGui.NET with docking is the proven path to building a Godot-class 2D editor on MonoGame + Arch ECS, requiring rough...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 34599,
    "sections": [
      "Part 1: Godot's editor is its own best advertisement",
      "The Inspector: Godot's most sophisticated subsystem",
      "Scene system: composition as the core abstraction",
      "2D-specific tools form a deep feature set",
      "Plugin system enables deep editor extension",
      "Part 2: The MonoGame/C# implementation roadmap",
      "ImGui.NET with docking is the clear winner for editor UI",
      "Bridging Arch ECS with a scene hierarchy",
      "Reflection-based property inspector maps directly to ImGui",
      "2D gizmos are simpler than they appear",
      "Tilemap editor: the highest-value tool",
      "Animation timeline demands the most development time",
      "Asset pipeline: bypass MGCB in the editor",
      "Scene serialization with JSON and GUIDs",
      "The feature-to-implementation mapping",
      "Architecture: game-first with ImGui overlay",
      "What's uniquely free in this architecture",
      "Realistic scope for a game developer",
      "Conclusion: the 80/20 path forward",
      "Implementation Notes from MonoGameStudio",
      "Hexa.NET.ImGui specifics (not ImGui.NET)",
      "Arch ECS 2.x specifics",
      "OpenGL Y-flip for RenderTarget2D in ImGui",
      "Update/Draw loop order",
      "Input routing priority",
      "Scene serialization: two-pass GUID linking",
      "Component descriptor pattern",
      "macOS native integration"
    ]
  },
  {
    "id": "monogame-arch/G2",
    "title": "G2 — Rendering & Graphics",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 34064,
    "sections": [
      "1. SpriteBatch Deep Dive",
      "1.1 Begin/End Sort Modes",
      "1.2 BlendState Options",
      "1.3 SamplerState",
      "2. Render Target Management",
      "2.1 Creating RenderTarget2D",
      "2.2 Ping-Pong Buffering for Post-Processing",
      "2.3 Resize Handling",
      "2.4 Memory Management",
      "3. Sprite Batching Optimization",
      "3.1 How SpriteBatch Auto-Batching Works",
      "3.2 What Breaks a Batch",
      "3.3 Texture Atlas Benefits",
      "3.4 Manual Batch Management Strategy",
      "4. Render Layer System",
      "4.1 Layer Architecture",
      "4.2 Typical Layer Stack",
      "4.3 Integration with Arch ECS",
      "4.4 Y-Sorting for Depth",
      "5. Animation System",
      "5.1 MonoGame.Aseprite Deep Dive",
      "5.2 Animation State Machine",
      "5.3 Animation Events (Sound on Frame)",
      "6. Sprite Trails and Afterimages",
      "6.1 Ring Buffer Implementation",
      "6.2 Use Cases",
      "7. Normal Mapping for 2D",
      "7.1 Concept",
      "7.2 Generating Normal Maps",
      "7.3 Custom Shader Implementation",
      "8. Render Pipeline Ordering",
      "8.1 Complete Frame Sequence",
      "8.2 Premultiplied Alpha — Getting It Right",
      "9. Pixel-Perfect Rendering",
      "9.1 The Setup",
      "9.2 Camera Snapping",
      "9.3 Entity Position Snapping",
      "9.4 Checklist for Pixel-Perfect",
      "10. Debug Rendering",
      "10.1 Drawing Collision Shapes",
      "10.2 Velocity Vectors",
      "10.3 Grid Overlay",
      "10.4 ImGui Integration",
      "11. MonoGame.Extended Rendering Features",
      "11.1 Feature Overview",
      "11.2 When to Use vs Custom Code",
      "11.3 Extended Particle System Example",
      "Quick Reference Tables",
      "BlendState Decision Matrix",
      "Performance Checklist"
    ]
  },
  {
    "id": "monogame-arch/G30",
    "title": "G30 — Game Feel Tooling",
    "description": "Game feel is the one area where AI can't replace human judgment. But you can build tools that compress the iteration ...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 21609,
    "sections": [
      "Architecture: Data-Driven Feel",
      "Feel Profile (Pure Data)",
      "Loading the Profile",
      "JSON Serialization",
      "ImGui Tuning Panel",
      "Panel Implementation",
      "Visual Debug Overlays",
      "Velocity Vector",
      "Input Timing Visualizer",
      "Hitbox/Hurtbox Overlay",
      "Ghost/Replay System",
      "ImGui Controls for Ghost System",
      "Frame-by-Frame Advance",
      "Curve Visualizer",
      "Putting It Together",
      "Integration into Your Game",
      "Debug Hotkeys",
      "Conditional Compilation",
      "Line Count Budget",
      "What AI Can Generate Here",
      "Presets as Design Language",
      "Production Workflow"
    ]
  },
  {
    "id": "monogame-arch/G31",
    "title": "G31 — Animation & Sprite State Machines",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 73046,
    "sections": [
      "1. MonoGame.Aseprite Animation Playback",
      "1.1 Key Types",
      "1.2 Loading and Creating Animations",
      "1.3 Playback Control",
      "1.4 Animation Events",
      "1.5 Accessing Tag & Frame Data",
      "1.6 Aseprite Workflow Tips",
      "2. Animation Component for Arch ECS",
      "2.1 Core Animation Components",
      "2.2 Entity Creation",
      "2.3 Why Separate `AnimationState` from `AnimationRenderer`?",
      "3. Animation State Machine",
      "3.1 State Definition",
      "3.2 Transition Rules",
      "3.3 The State Machine",
      "3.4 Building a Platformer State Machine",
      "3.5 State Machine as a Shared Component",
      "4. Directional Animations",
      "4.1 Naming Conventions in Aseprite",
      "4.2 Direction Resolution",
      "4.3 Directional Animation Resolution",
      "4.4 Side-Scroller Horizontal Flip",
      "5. Animation Events & Callbacks",
      "5.1 Event Definition",
      "5.2 Event Map",
      "5.3 Building an Event Map",
      "5.4 ECS Event Component",
      "6. Blend Trees & Layered Animation",
      "6.1 Layer Architecture",
      "6.2 Layered Animation Component",
      "6.3 Common Layer Patterns",
      "6.4 When NOT to Use Layers",
      "7. AnimationSystem for Arch ECS",
      "7.1 The Complete Animation System",
      "7.2 Event Dispatch System",
      "7.3 Animation Render System",
      "7.4 System Execution Order",
      "7.5 Per-Entity Context (Multi-Character)",
      "8. Common Animation Patterns",
      "8.1 Hit Flash (White Shader)",
      "8.2 Squash & Stretch",
      "8.3 Anticipation Frames",
      "8.4 Animation Canceling",
      "8.5 Speed-Based Animation Playback",
      "8.6 Screen Shake on Animation Events",
      "9. MonoGame.Extended Alternative (Non-Aseprite)",
      "9.1 SpriteSheet + AnimatedSprite (Extended)",
      "9.2 Creating Animations from Atlas Regions",
      "9.3 Playback",
      "9.4 When to Use Extended vs Aseprite",
      "10. Practical Example — Complete Platformer Character",
      "10.1 Aseprite File Setup",
      "10.2 Component Setup",
      "10.3 State Machine Definition",
      "10.4 Event Map",
      "10.5 Gameplay Integration System",
      "10.6 Full System Registration",
      "Quick Reference",
      "State Machine Transition Diagram",
      "Component Architecture Summary",
      "System Execution Order",
      "Aseprite Tag Naming Conventions",
      "Performance Notes"
    ]
  },
  {
    "id": "monogame-arch/G32",
    "title": "G32 — Deployment & Platform Builds",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 49302,
    "sections": [
      "1. Critical .NET Publish Flags",
      "1.1 The Essential Command",
      "1.2 Why ReadyToRun Hurts Games",
      "1.3 Why TieredCompilation Hurts Games",
      "1.4 Self-Contained vs Framework-Dependent",
      "1.5 Trimming (Optional)",
      "1.6 .csproj Defaults",
      "2. DesktopGL vs WindowsDX",
      "2.1 Comparison",
      "2.2 When to Use Which",
      "2.3 DirectX Runtime Requirement",
      "2.4 Switching Between Backends",
      "3. dotnet publish Per Platform",
      "3.1 Windows (win-x64)",
      "3.2 macOS (osx-x64 and osx-arm64)",
      "3.3 Universal macOS Binary (lipo)",
      "3.4 Linux (linux-x64)",
      "3.5 Build Script (All Platforms)",
      "4. macOS Specifics",
      "4.1 App Bundle Structure",
      "4.2 Creating the App Bundle",
      "4.3 Creating .icns Icon",
      "4.4 Code Signing",
      "4.5 Notarization",
      "4.6 DMG Distribution",
      "5. Linux Specifics",
      "5.1 Library Dependencies",
      "5.2 AppImage Packaging",
      "5.3 .desktop File",
      "5.4 Steam Runtime",
      "6. iOS Deployment",
      "6.1 Project Setup",
      "6.2 Provisioning & Signing",
      "6.3 Building for Device",
      "6.4 TestFlight",
      "6.5 App Store Submission",
      "6.6 Required Info.plist Entries",
      "6.7 iOS Gotchas",
      "7. Android Deployment",
      "7.1 Project Setup",
      "7.2 APK vs AAB",
      "7.3 Signing",
      "7.4 Target SDK Requirements",
      "7.5 Google Play Submission",
      "7.6 Android Gotchas",
      "8. Steam Integration",
      "8.1 Steamworks.NET Setup",
      "8.2 Initialization",
      "8.3 steam_appid.txt",
      "8.4 Steam Overlay",
      "8.5 Achievements",
      "8.6 Cloud Saves",
      "8.7 Depot Configuration",
      "9. itch.io Publishing",
      "9.1 butler CLI",
      "9.2 Channel Naming Convention",
      "9.3 Pushing Builds",
      "9.4 Versioning",
      "9.5 Build Script for itch.io",
      "9.6 itch.io Page Setup",
      "10. Version Management",
      "10.1 Assembly Versioning",
      "10.2 Git-Based Version Injection",
      "10.3 Displaying Version In-Game",
      "10.4 Build Numbers for Mobile",
      "11. CI/CD Pipeline",
      "11.1 GitHub Actions — Multi-Platform Build",
      "11.2 itch.io Deploy Step",
      "11.3 Steam Deploy Step",
      "12. Distribution Checklist",
      "12.1 Pre-Release Testing",
      "12.2 Files to Include",
      "12.3 Third-Party License Compliance",
      "12.4 Minimum System Requirements",
      "13. Troubleshooting",
      "13.1 Common Deployment Failures",
      "13.2 Diagnosing Missing Content",
      "13.3 Platform-Specific Debugging",
      "13.4 Content Build Errors in CI",
      "13.5 Self-Contained Build Size Reduction",
      "Quick Reference",
      "Publish Commands Cheat Sheet",
      "Distribution Targets",
      "Critical Flags Summary"
    ]
  },
  {
    "id": "monogame-arch/G33",
    "title": "G33 — Profiling & Optimization Workflow",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 68421,
    "sections": [
      "1. Frame Budget Fundamentals",
      "1.1 The 16.67ms Budget",
      "1.2 CPU-Bound vs GPU-Bound Identification",
      "1.3 Frame Time vs FPS",
      "2. Built-in Profiling",
      "2.1 Stopwatch-Based System Timing",
      "2.2 Timed System Runner",
      "2.3 ImGui System Timing Overlay",
      "2.4 MonoGame Built-in Metrics",
      "3. .NET Profiling Tools",
      "3.1 dotnet-counters (Live Monitoring)",
      "3.2 dotnet-trace (Detailed Profiling)",
      "3.3 PerfView (Windows, Deep GC Analysis)",
      "3.4 JetBrains dotTrace",
      "3.5 Visual Studio Diagnostic Tools",
      "4. GC Pressure Tracking",
      "4.1 In-Game GC Monitor",
      "4.2 Allocation Hot Path Finder",
      "4.3 Zero-Allocation Patterns Recap",
      "4.4 GC Latency Mode for Games",
      "5. Draw Call Analysis",
      "5.1 SpriteBatch Batch Counting",
      "5.2 Texture Swap Tracking",
      "5.3 Batching Efficiency Targets",
      "6. Memory Profiling",
      "6.1 JetBrains dotMemory",
      "6.2 Finding Texture Leaks",
      "6.3 Event Handler Leak Detection",
      "6.4 Content Manager Scoping",
      "7. Custom Profiling Framework",
      "7.1 ProfilingScope Struct",
      "7.2 ProfilerService with Ring Buffer History",
      "7.3 ImGui Profiler Panel with Flame Graph",
      "7.4 Integration into Game Loop",
      "8. Common Bottlenecks in 2D Games",
      "8.1 SpriteBatch Sort Overhead",
      "8.2 Render Target Overuse",
      "8.3 Shader Compilation Stalls",
      "8.4 Off-Screen Drawing (No Culling)",
      "8.5 Large Texture Atlases",
      "8.6 Overdraw",
      "9. Optimization Workflow",
      "9.1 The Measure → Identify → Fix → Verify Cycle",
      "9.2 A/B Benchmarking Pattern",
      "9.3 Regression Detection",
      "10. Mobile-Specific Profiling",
      "10.1 Xcode Instruments (iOS)",
      "10.2 Android GPU Inspector (AGI)",
      "10.3 Thermal Throttling Detection",
      "10.4 Adaptive Quality System",
      "10.5 Battery Impact Considerations",
      "11. ECS-Specific Optimization",
      "11.1 Query Cost",
      "11.2 Archetype Fragmentation",
      "11.3 System Ordering for Cache Locality",
      "11.4 Parallel Queries",
      "11.5 Hot/Cold Component Splitting",
      "12. Performance Testing",
      "12.1 Automated Frame Time Tests",
      "12.2 Stress Test Scenes",
      "12.3 Entity Count Scaling Tests",
      "12.4 CI Integration",
      "Quick Reference",
      "Profiling Tool Decision Matrix",
      "Optimization Priority Order",
      "The Cardinal Rules"
    ]
  },
  {
    "id": "monogame-arch/G34",
    "title": "G34 — Localization & Internationalization",
    "description": "Localization is the difference between a game that sells in one market and a game that sells globally. This guide cov...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 16161,
    "sections": [
      "Core Concepts",
      "String Externalization",
      "JSON String Tables",
      "Key Naming Convention",
      ".resx Resource Files (Alternative)",
      "LocalizationManager Implementation",
      "Registering as an ECS Resource",
      "Hot-Reload in Development",
      "Font Support",
      "FontStashSharp for Unicode",
      "Font Fallback Chain",
      "Font Size and Readability",
      "Text Rendering Challenges",
      "Variable Text Length",
      "Text Wrapping",
      "Dynamic Layout",
      "Asset Localization",
      "Text in Images",
      "Audio Localization",
      "Date, Number, and Currency Formatting",
      "RTL (Right-to-Left) Support",
      "Text Rendering",
      "UI Mirroring",
      "Translation Workflow",
      "1. String Extraction",
      "2. Translator Handoff",
      "3. Translation Testing",
      "Community Translation Support",
      "Discoverable Format",
      "Load Order",
      "Translation Template",
      "Pluralization and Gender",
      "Checklist",
      "Further Reading"
    ]
  },
  {
    "id": "monogame-arch/G35",
    "title": "G35 — Accessibility",
    "description": "Making your game accessible isn't charity — it's good design. Around 15–20% of players have some form of disability. ...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 13719,
    "sections": [
      "Visual Accessibility",
      "Colorblind Modes",
      "High Contrast Mode",
      "Text Scaling",
      "Motor Accessibility",
      "Remappable Controls",
      "One-Handed Modes",
      "Hold vs Toggle",
      "Adjustable Timing Windows",
      "Auto-Aim / Aim Assist",
      "Cognitive Accessibility",
      "Difficulty Options",
      "Clear UI Principles",
      "Save Anywhere",
      "Audio Accessibility",
      "Visual Alternatives for Audio Cues",
      "Subtitle System",
      "Implementation: Accessibility Settings Manager",
      "Integrating with Arch ECS",
      "Scalable UI with Gum",
      "Case Study: Celeste's Assist Mode",
      "Xbox Accessibility Guidelines (XAG) — Indie 2D Checklist",
      "The Business Case",
      "Audience Numbers",
      "Platform Requirements",
      "ROI",
      "Quick-Start Checklist",
      "Further Reading"
    ]
  },
  {
    "id": "monogame-arch/G36",
    "title": "G36 — Publishing & Distribution",
    "description": "You built the game. Now ship it. This guide covers platform-specific publishing, build automation, marketing, and pos...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 17606,
    "sections": [
      "Steam (Steamworks)",
      "Steamworks SDK Integration",
      "Key Steamworks Features",
      "Cloud Save Setup",
      "Store Page Optimization",
      "Launch Visibility",
      "itch.io",
      "Butler CLI for Uploads",
      "Pricing Strategies",
      "Community Building",
      "iOS App Store",
      "MonoGame iOS Pipeline",
      "Submission Process",
      "App Review Guidelines — Key Points for Games",
      "In-App Purchases",
      "Console Ports",
      "MonoGame on Consoles",
      "Build Automation",
      "GitHub Actions for Multi-Platform Builds",
      "Versioning",
      "Marketing",
      "Timeline",
      "Devlog Cadence",
      "Press Kit",
      "Trailer Tips",
      "Streamer/Content Creator Keys",
      "Legal Essentials",
      "EULA",
      "Privacy Policy",
      "Age Ratings",
      "Post-Launch",
      "Patch Cadence",
      "Community Management",
      "DLC Planning",
      "Sales Events",
      "Checklist",
      "Further Reading"
    ]
  },
  {
    "id": "monogame-arch/G37",
    "title": "G37 — Tilemap Systems & Tiled Integration",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 117883,
    "sections": [
      "Table of Contents",
      "Overview",
      "Tilemap Pipeline Overview",
      "1 — Tiled (.tmx) Loading",
      "1.1 Content Pipeline Setup",
      "1.2 Loading via MonoGame.Extended",
      "1.3 Manual XML Parsing (Pipeline-Free)",
      "1.4 JSON Format Loading",
      "2 — Tilemap Rendering",
      "2.1 ECS Components",
      "2.2 MonoGame.Extended Renderer (Quick Start)",
      "2.3 Manual SpriteBatch Rendering with Viewport Culling",
      "2.4 Culling Math Helper",
      "3 — Autotiling",
      "3.1 Concepts",
      "3.2 ECS Components",
      "3.3 4-Bit Bitmask Computation",
      "3.4 8-Bit Bitmask Computation",
      "3.5 Wang Tile Support",
      "3.6 Autotile System (Full ECS Integration)",
      "4 — Tile Collision",
      "4.1 ECS Collision Components",
      "4.2 Extracting Collision from Tiled Object Layers",
      "4.3 Tile-Based Collision Queries",
      "5 — Chunk-Based Streaming",
      "5.1 Components",
      "5.2 Chunk Streaming System",
      "5.3 Async Chunk Loading",
      "6 — Animated Tiles",
      "6.1 Components",
      "6.2 Parsing Tiled Animation Data",
      "6.3 Animation System",
      "6.4 Integration into Rendering",
      "7 — Tile Properties & Metadata",
      "7.1 Custom Properties in Tiled",
      "7.2 ECS Components for Metadata",
      "7.3 Reading Properties from Tiled Objects",
      "8 — ECS Integration",
      "8.1 Tilemap as a Singleton / Resource",
      "8.2 Map Loading System",
      "8.3 The MapSeed Pattern",
      "9 — Multiple Tile Layers",
      "9.1 Layer Conventions",
      "9.2 Layer-Aware Rendering System",
      "9.3 Entity-Tile Interleaving (Y-Sort)",
      "10 — Isometric & Hexagonal Tilemaps",
      "10.1 Isometric Coordinate Conversion",
      "10.2 Isometric Rendering Order",
      "10.3 Hexagonal Coordinate Conversion",
      "10.4 Hexagonal Rendering",
      "10.5 Hex Pathfinding Integration",
      "Performance Checklist",
      "RenderTarget Caching for Static Layers",
      "Quick Reference: Tiled Layer Naming Convention",
      "11 — Procedural Generation",
      "11.1 BSP Dungeon Generator",
      "11.2 Cellular Automata Caves",
      "11.3 Noise-Based Terrain (Overworld)",
      "12 — A* Pathfinding Integration",
      "12.1 Building Cost Grids from Tilemaps",
      "12.2 A* on Tile Grid",
      "12.3 Incremental Cost Updates",
      "13 — Runtime Tile Modification",
      "13.1 Tile Modification Manager",
      "13.2 Destructible Terrain",
      "13.3 Tile Placement (Level Editor / Building)",
      "14 — Fog of War & Tile Visibility",
      "14.1 Visibility Grid",
      "14.2 Bresenham Line-of-Sight Reveal",
      "14.3 Fog Rendering Overlay",
      "15 — Common Mistakes & Troubleshooting",
      "❌ 1. Tile Bleeding / Edge Lines Between Tiles",
      "❌ 2. Off-By-One in Viewport Culling",
      "❌ 3. Collision Grid Doesn't Match Visuals",
      "❌ 4. Entities Spawn at Wrong Positions",
      "❌ 5. Chunk Boundaries Have Seams",
      "❌ 6. Animated Tiles Desync Across Map",
      "❌ 7. Memory Spike When Loading Large Maps",
      "Quick Diagnostic Checklist",
      "Performance Checklist"
    ]
  },
  {
    "id": "monogame-arch/G38",
    "title": "G38 — Scene & Game State Management",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 49182,
    "sections": [
      "Table of Contents",
      "1. Scene Architecture",
      "What a Scene Owns",
      "Base Scene Class",
      "GameServices — Shared Across All Scenes",
      "2. Scene Manager",
      "Scene Stack Model",
      "SceneManager Implementation",
      "Key Design Decisions",
      "3. Game State Machine",
      "State Enum",
      "State-to-Scene Mapping",
      "Registration at Startup",
      "Typical Flow",
      "4. Scene Transitions",
      "Transition Base Class",
      "Fade-to-Black Transition",
      "Usage",
      "5. ECS World Per Scene",
      "World Lifecycle",
      "ECS Components (Record Structs)",
      "System Registration Per Scene Type",
      "Shared Services vs. Scene-Local State",
      "6. Loading Screens",
      "Thread-Safe Progress Tracker",
      "LoadingScene",
      "Kicking Off a Loading Screen",
      "7. Scene Communication",
      "SceneContext",
      "Persistent vs. Scene-Local Data",
      "Passing Context Through the State Machine",
      "8. Pause System",
      "Time Scale Pattern",
      "Overlay Approach (Preferred)",
      "9. Overlay Scenes",
      "Overlay Base",
      "Dialogue Overlay Example",
      "HUD Overlay (Updates Below)",
      "Scene Layering",
      "10. Practical Example",
      "Game1 — Entry Point",
      "SplashScene",
      "MainMenuScene",
      "GameplayScene",
      "GameOverScene",
      "Complete Flow Diagram",
      "11. Composable Scene Subsystems",
      "Benefits",
      "DrawOverlay for HUD",
      "Summary"
    ]
  },
  {
    "id": "monogame-arch/G39",
    "title": "G39 — 2D Lighting & Shadows",
    "description": "Complete 2D lighting and shadow system built on MonoGame + Arch ECS. Covers the lightmap compositing approach, point/...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 50281,
    "sections": [
      "Table of Contents",
      "The Lightmap Approach",
      "How It Works",
      "Lightmap Render Target Setup",
      "Lightmap Compositing Shader (Alternative)",
      "Point Lights",
      "Light Gradient Texture",
      "Falloff Curves",
      "Drawing Point Lights to Lightmap",
      "Spot Lights",
      "Spot Light Shader",
      "C# Spot Light Drawing",
      "Ambient Light",
      "Day/Night Cycle Integration",
      "Indoor Ambient Override",
      "2D Shadow Casting",
      "Shadow Geometry: Occluder Edges",
      "Visibility Polygon Algorithm",
      "Rendering the Visibility Polygon to the Lightmap",
      "Tilemap Shadow Extraction",
      "Normal Map Lighting",
      "How Normal Maps Work in 2D",
      "Normal Map Lighting Shader",
      "Multi-Light Normal Map Shader",
      "Creating Normal Maps for Pixel Art",
      "Light Masking / Light Cookies",
      "Cookie Texture Application",
      "Torch Flicker via Noise",
      "Performance",
      "1. Cull Lights Outside Camera",
      "2. Limit Active Light Count",
      "3. Lower-Resolution Lightmap",
      "4. Light LOD (Level of Detail)",
      "5. Cache Shadow Geometry",
      "ECS Integration",
      "Components",
      "Light Render System",
      "Flicker Update System",
      "Practical Examples",
      "Example 1: Dungeon with Torchlight and Shadows",
      "Example 2: Outdoor Day/Night Lighting",
      "Example 3: Flashlight in a Dark Room",
      "Summary Checklist"
    ]
  },
  {
    "id": "monogame-arch/G3",
    "title": "G3 — Physics & Collision",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 77405,
    "sections": [
      "Physics Pipeline Overview",
      "1. Collision Primitives & Detection",
      "AABB Overlap + MTV (Minimum Translation Vector)",
      "Circle vs Circle",
      "Circle vs AABB",
      "SAT for Convex Polygons (MTV)",
      "Choosing the Right Collider Shape",
      "2. Broad Phase: Spatial Partitioning",
      "Spatial Hash Grid",
      "Uniform Grid (For Tilemaps)",
      "Quadtree",
      "When to Use Which",
      "3. Raycasting",
      "Tilemap Raycasting (DDA Algorithm)",
      "Entity Raycasting (Against Spatial Hash)",
      "Common Raycast Use Cases",
      "4. Platformer Character Controller (Arch ECS)",
      "Components",
      "Ground Detection System",
      "Jump System with Buffering",
      "Slope Handling",
      "One-Way Platforms",
      "Moving Platform Attachment",
      "5. Tile-Based Collision",
      "Efficient Tilemap Collision",
      "Slope Tiles",
      "6. Continuous Collision Detection (CCD)",
      "Swept AABB",
      "Practical CCD for Bullets",
      "When to Use CCD",
      "7. Physics Interpolation",
      "Fixed Timestep with Render Interpolation",
      "Arch ECS System Ordering",
      "8. Trigger Zones & Sensors",
      "ECS Trigger System",
      "Trigger Response System",
      "9. Top-Down Physics",
      "Top-Down Character Movement",
      "Wall Sliding (Top-Down)",
      "Top-Down Dash",
      "10. Verlet Integration (Soft-Body Physics)",
      "Core Verlet Particle",
      "Distance Constraint (Ropes, Chains)",
      "Complete Rope/Chain System",
      "2D Cloth (Grid Mesh)",
      "Verlet Collision with World",
      "11. Aether.Physics2D v2.2.0",
      "World Setup",
      "Stepping (Fixed Timestep)",
      "Contact Listeners",
      "Sensor Bodies (Triggers)",
      "Joint Examples",
      "Collision Categories & Filtering",
      "Common Gotchas",
      "12. MonoGame.Extended v5.3.1 Collision",
      "Collision System Architecture",
      "Using Extended Collision with Arch ECS",
      "When to Use Extended vs Aether vs Custom",
      "13. Fixed-Point Math for Deterministic Physics",
      "Why Fixed-Point?",
      "Q16.16 Implementation",
      "Fixed-Point Vector2",
      "Libraries to Consider",
      "Deterministic Physics Checklist",
      "14. Common Mistakes & Troubleshooting",
      "Problem: Character gets stuck on tile corners",
      "Problem: Character falls through floor at high speed",
      "Problem: Jittery movement on moving platforms",
      "Problem: Objects \"teleport\" through walls when pushed by other objects",
      "Problem: Coyote time allows double-jump",
      "Problem: Aether bodies move erratically or explode",
      "Problem: Verlet rope stretches and never recovers",
      "Problem: Spatial hash returns duplicates",
      "Quick Reference: Tuning Tables",
      "Platformer Feel Presets",
      "Top-Down Movement Presets",
      "Physics System Budgets",
      "Aether.Physics2D Quick Reference",
      "Cross-References"
    ]
  },
  {
    "id": "monogame-arch/G40",
    "title": "G40 — Pathfinding",
    "description": "Pathfinding is the backbone of any AI that needs to move through a world. This guide covers everything from basic A o...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 44650,
    "sections": [
      "Table of Contents",
      "1 — A* Algorithm",
      "1.1 — Heuristics",
      "1.2 — A* Node",
      "1.3 — Full A* Implementation",
      "1.4 — Terrain Weights",
      "2 — Grid Graph",
      "2.1 — Core Grid Graph",
      "2.2 — Building from Tilemap Data",
      "2.3 — Dynamic Obstacles",
      "3 — Jump Point Search (JPS)",
      "3.1 — When to Use JPS vs A*",
      "3.2 — JPS Implementation Sketch",
      "4 — Flow Fields",
      "4.1 — Algorithm Overview",
      "4.2 — Implementation",
      "4.3 — When Flow Fields Beat A*",
      "5 — Hierarchical Pathfinding (HPA*)",
      "5.1 — Concept",
      "5.2 — Implementation Sketch",
      "6 — Navigation Mesh (2D)",
      "6.1 — When to Use Navmesh vs Grid",
      "6.2 — Data Structures",
      "6.3 — Funnel Algorithm (Simple String Pulling)",
      "7 — Path Smoothing",
      "7.1 — Line-of-Sight Smoothing",
      "7.2 — Catmull-Rom Spline for Curved Paths",
      "8 — Steering Behaviors",
      "8.1 — Core Steering Forces",
      "8.2 — Path Following",
      "8.3 — Combining Steering Forces",
      "9 — BrainAI Integration",
      "9.1 — AstarGridGraph",
      "9.2 — BreadthFirstPathfinder",
      "9.3 — When to Use Library vs Custom",
      "10 — ECS Integration",
      "10.1 — Components",
      "10.2 — PathfindingSystem (Time-Sliced)",
      "10.3 — MovementSystem (Following Waypoints)",
      "10.4 — Flow Field Movement System",
      "10.5 — Requesting a Path",
      "11 — Debug Visualization",
      "11.1 — Drawing Paths",
      "11.2 — Drawing Grid Overlays (Walkability + Costs)",
      "11.3 — Drawing Flow Field Arrows",
      "11.4 — Drawing NavMesh Polygons",
      "11.5 — Drawing A* Open/Closed Sets",
      "11.6 — Toggling Debug Modes",
      "Quick Reference — Algorithm Selection",
      "Performance Tips"
    ]
  },
  {
    "id": "monogame-arch/G41",
    "title": "G41 — Tweening & Easing",
    "description": "Tweening (short for \"in-betweening\") interpolates values over time with configurable easing curves. This guide covers...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 35103,
    "sections": [
      "1 — Easing Functions",
      "Delegate alias",
      "2 — Tween Engine",
      "2.1 — Core Tween",
      "2.2 — Object Pool",
      "2.3 — TweenManager",
      "Usage",
      "3 — Tween Targets",
      "3.1 — Multi-type interpolation delegates",
      "3.2 — Generic Tween\\<T\\>",
      "3.3 — Property tweens via Action setter",
      "4 — Tween Sequences",
      "4.1 — Sequential chains",
      "4.2 — Parallel (group) tweens",
      "5 — Tween Controls",
      "Pause / Resume / Cancel / Reverse",
      "Looping examples",
      "6 — Common Game Uses",
      "6.1 — UI slide in / out",
      "6.2 — Damage number float-up",
      "6.3 — Entity knockback",
      "6.4 — Camera zoom",
      "6.5 — Screen shake decay",
      "6.6 — Health bar smooth drain",
      "6.7 — Pickup magnet arc",
      "7 — ECS Integration",
      "7.1 — TweenComponent",
      "7.2 — Multi-tween support",
      "7.3 — TweenSystem",
      "7.4 — Helper to add tweens to entities",
      "8 — Comparison with Coroutines",
      "When to use tweens",
      "When to use coroutines",
      "Hybrid: coroutine that fires tweens",
      "9 — Visual Reference: Easing Curves",
      "Quick Reference"
    ]
  },
  {
    "id": "monogame-arch/G42",
    "title": "G42 — Screen Transitions & Loading Screens",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 41559,
    "sections": [
      "Overview",
      "Simpler Alternative: Progress-Based Transitions",
      "1 — Transition Architecture",
      "1.1 Lifecycle",
      "1.2 Core Types",
      "1.3 TransitionManager",
      "2 — Fade Transition",
      "3 — Crossfade",
      "4 — Wipe Transitions",
      "4.1 Directional Wipe (Horizontal / Vertical / Diagonal)",
      "4.2 Circle Wipe (Iris In/Out)",
      "4.3 Diamond Wipe",
      "5 — Shader-Based Transitions",
      "5.1 Dissolve Transition (Noise Texture)",
      "5.2 Pixelate Transition",
      "5.3 Custom Shader Transitions (Generic Wrapper)",
      "6 — Stencil / Mask Transitions",
      "7 — Loading Screens",
      "7.1 Async Loading Pattern",
      "7.2 Reporting Progress From Scene Loading",
      "7.3 Integrating Loading Screen With Transitions",
      "8 — Transition Presets",
      "9 — Integration With Scene Manager",
      "9.1 Scene Manager Extension",
      "9.2 Game Loop Integration",
      "9.3 Triggering Transitions From Gameplay (Arch ECS)",
      "Quick Reference"
    ]
  },
  {
    "id": "monogame-arch/G43",
    "title": "G43 — Entity Prefabs & Blueprint System",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 30827,
    "sections": [
      "1 — What's a Prefab / Blueprint?",
      "2 — Blueprint Data Model",
      "2.1 — JSON Schema",
      "2.2 — Blueprint Record",
      "2.3 — Blueprint Registry",
      "3 — Component Serialization",
      "3.1 — Type Registry",
      "3.2 — Example Components",
      "3.3 — Source-Generated JSON Context",
      "3.4 — Deserializing a Component from JsonElement",
      "4 — Entity Factory",
      "4.1 — Usage",
      "5 — Blueprint Inheritance & Composition",
      "5.1 — Base Enemy Blueprint",
      "5.2 — Slime (extends enemy_base)",
      "5.3 — Boss Slime (extends slime)",
      "5.4 — Resolution Order",
      "6 — Tiled Object Integration",
      "6.1 — Tiled Object Properties",
      "6.2 — Spawner Code",
      "6.3 — Level Load Flow",
      "7 — Runtime Blueprint Editing",
      "7.1 — ImGui Blueprint Inspector",
      "7.2 — Hot-Reload with File Watcher",
      "8 — Spawn Tables & Weighted Random",
      "8.1 — Spawn Table Data Model",
      "8.2 — Example JSON",
      "8.3 — Weighted Random Roller",
      "9 — Prefab Pooling",
      "9.1 — Blueprint-Aware Pool",
      "9.2 — Usage in an Enemy Death System",
      "10 — Practical Example: Complete Enemy Blueprint System",
      "10.1 — Blueprint JSON Files",
      "10.2 — Startup Wiring",
      "Quick Reference"
    ]
  },
  {
    "id": "monogame-arch/G44",
    "title": "G44 — Version Control for Game Dev",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 27611,
    "sections": [
      "Why This Matters",
      "1 — Git Basics for Game Dev",
      "Why Solo Devs Need Version Control",
      "Commit Frequency",
      "Commit Messages That Actually Help",
      "2 — .gitignore for MonoGame",
      "Complete .gitignore",
      "What TO Track",
      "3 — Git LFS (Large File Storage)",
      "The Problem",
      "Installation",
      "Setting Up LFS for Your Project",
      "Migrating an Existing Repo to LFS",
      "What to LFS-Track vs Regular Git",
      "Storage & Bandwidth Considerations",
      "4 — Branching Strategy",
      "For Solo Devs: Keep It Simple",
      "When Branches Actually Help",
      "Merge vs Rebase (Solo)",
      "5 — Asset Management",
      "Source Assets vs Built Assets",
      "What Source Assets to Track",
      "The Aseprite Workflow",
      "Content Pipeline Rebuild",
      "6 — Commit Strategies for Games",
      "Atomic Commits",
      "Staging Selectively",
      "Tagging Milestones",
      "Versioning Scheme",
      "7 — Backup & Remote",
      "Setting Up a Remote",
      "Push Frequency",
      "Multiple Remotes for Redundancy",
      "Automated Push Script",
      "8 — Common Pitfalls",
      "1. Committing Build Artifacts",
      "2. Forgetting Git LFS",
      "3. Massive Repos from Binary Bloat",
      "4. Merge Conflicts in Content.mgcb",
      "5. Accidentally Committing Secrets",
      "6. \"It Works on My Machine\"",
      "9 — Git Bisect for Game Bugs",
      "The Scenario",
      "Manual Bisect",
      "Automated Bisect",
      "10 — Collaboration",
      "When You're No Longer Solo",
      "Branch Protection",
      "PR Workflow",
      "Code Review for Game Code",
      "Handling Shared Content.mgcb",
      "Git Hooks for Teams",
      "11 — Recovery",
      "Recovering Deleted Files",
      "Reverting a Bad Commit",
      "Stashing WIP",
      "Cherry-Picking Fixes",
      "The Reflog — Your Safety Net",
      "\"I Broke Everything\" Emergency Playbook",
      "Quick Reference",
      "Daily Workflow (Solo)",
      "New Project Setup",
      "Useful Aliases",
      "TL;DR"
    ]
  },
  {
    "id": "monogame-arch/G45",
    "title": "G45 — Cutscenes & Scripted Sequences",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 33657,
    "sections": [
      "1 — What Cutscenes Are in 2D Games",
      "Common Cutscene Types",
      "2 — Timeline System",
      "2.1 — CutsceneAction Base",
      "2.2 — Timeline Data Structure",
      "2.3 — Timeline Player",
      "3 — Cutscene Actions",
      "3.1 — Wait / WaitForInput",
      "3.2 — Entity Actions",
      "3.3 — Camera Actions",
      "3.4 — Screen & Audio Actions",
      "3.5 — Dialogue Action",
      "4 — Data-Driven Cutscenes",
      "4.1 — JSON Schema",
      "4.2 — JSON Loader",
      "5 — Camera Choreography",
      "5.1 — Catmull-Rom Helper",
      "5.2 — Spline Camera Path Action",
      "5.3 — Focus-On-Entity",
      "6 — Entity Choreography",
      "6.1 — ECS Components",
      "6.2 — Facing Action",
      "6.3 — Path-Following Action",
      "7 — Integration with Dialogue System",
      "8 — Player Control Lock",
      "8.1 — CutsceneMode Component",
      "8.2 — Letterbox Bars",
      "8.3 — Transition In / Out",
      "9 — Skip System",
      "9.1 — CutsceneSystem with Skip",
      "9.2 — State Correctness After Skip",
      "10 — Trigger System",
      "10.1 — ECS Components",
      "10.2 — Trigger System",
      "10.3 — One-Shot vs Repeatable",
      "11 — Coroutine-Based Alternative",
      "11.1 — When to Use Which",
      "11.2 — Setup",
      "11.3 — Scripted Sequence Example",
      "11.4 — Skip Support for Coroutines",
      "Quick Reference"
    ]
  },
  {
    "id": "monogame-arch/G46",
    "title": "G46 — Modding Support",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 41552,
    "sections": [
      "Why Support Modding",
      "Data-Driven Architecture",
      "What Should Be Data",
      "The Content Root",
      "Entity Definition Example",
      "Asset Override System",
      "Virtual File System",
      "Load Order Priority",
      "Mod Loading Pipeline",
      "Mod Manifest",
      "Discovery & Dependency Resolution",
      "Content Hot-Loading",
      "Subscribing to Reloads",
      "Scriptable Mods (Lua Integration)",
      "Sandboxed Script Engine",
      "Example Lua Mod Script",
      "Available Event Hooks",
      "Custom Entity / Item Definitions",
      "Blueprint Merging",
      "UI Mods",
      "Mod Compatibility & Versioning",
      "API Versioning",
      "Conflict Detection",
      "Security Considerations",
      "Threat Model",
      "Why Lua-First",
      "If You Must Support .NET Plugins",
      "Steam Workshop Integration",
      "Workflow",
      "Key Steamworks Calls",
      "Practical Example — Complete Minimal Mod System",
      "Integration Point",
      "Wiring Into Your Game",
      "Example Mod File Structure",
      "Complete mod.json",
      "Summary"
    ]
  },
  {
    "id": "monogame-arch/G47",
    "title": "G47 — Achievements & Progression Systems",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 34127,
    "sections": [
      "Overview",
      "1 — Achievement System Architecture",
      "Core Components",
      "Achievement Definition",
      "Achievement State",
      "2 — Achievement Types",
      "Counter-Based vs Boolean",
      "3 — Event-Driven Tracking",
      "Game Event Bus",
      "Standard Event Keys",
      "Publishing from Game Logic (No Achievement Coupling)",
      "4 — Achievement Data Model",
      "JSON Definition (`Content/Data/achievements.json`)",
      "Loading Definitions",
      "Save / Load Progress",
      "5 — Achievement UI",
      "Toast Notification",
      "Achievement List Screen",
      "6 — Platform Integration",
      "Steam via Steamworks.NET",
      "iOS Game Center",
      "Platform Abstraction",
      "7 — Progression Systems",
      "XP & Leveling",
      "Unlock System",
      "New Game+ / Prestige",
      "8 — Statistics Tracking",
      "Stat Tracker Service",
      "Standard Stat Keys",
      "Wiring Stats to Events",
      "Using Stats as Achievement Inputs",
      "9 — Reward Systems",
      "Reward Definitions (JSON)",
      "Reward Dispatcher",
      "10 — ECS Integration",
      "AchievementManager as a World Service",
      "Registering in the ECS World",
      "ECS Systems Publishing Events",
      "StatTracker Update System",
      "Quick-Start Checklist",
      "Common Pitfalls"
    ]
  },
  {
    "id": "monogame-arch/G48",
    "title": "G48 — Online Services",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 34801,
    "sections": [
      "Overview",
      "Leaderboards",
      "Steam Leaderboards via Steamworks.NET",
      "Local Leaderboard Fallback",
      "Score Validation",
      "Cloud Saves",
      "Steam Cloud (ISteamRemoteStorage)",
      "Conflict Resolution",
      "Designing Cloud-Compatible Save Data",
      "Matchmaking",
      "Steam Lobbies",
      "Host Migration",
      "When You Need Matchmaking",
      "Rich Presence",
      "Steam Rich Presence",
      "Discord Rich Presence",
      "Unified Presence Updates",
      "Analytics & Telemetry",
      "What to Track",
      "Privacy Considerations",
      "Simple Custom Analytics Endpoint",
      "Heatmap Data Collection",
      "Player Authentication",
      "Steam Auth Tickets",
      "Cross-Platform Identity Linking",
      "Anti-Cheat Basics",
      "What's Realistic for Indie Games",
      "Server-Authoritative Design",
      "Basic Integrity Checks",
      "Offline Fallback",
      "Local-First Architecture",
      "Graceful Degradation Checklist",
      "Platform Service Abstraction",
      "The Interface",
      "Steam Implementation",
      "Null Implementation (itch.io / DRM-Free)",
      "Wiring It Up",
      "Summary"
    ]
  },
  {
    "id": "monogame-arch/G49",
    "title": "G49 — Isometric Perspective",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 33650,
    "sections": [
      "1 — What Is Isometric?",
      "True Isometric vs Dimetric",
      "Visual Characteristics",
      "2 — Coordinate Systems",
      "The Projection",
      "Tile Origin Convention",
      "3 — Diamond vs Staggered Layout",
      "Diamond Layout (Rotated Grid)",
      "Staggered Layout",
      "When to Use Which",
      "4 — Tile Rendering",
      "ECS Components",
      "Tile Dimensions",
      "Draw Order: Painter's Algorithm",
      "5 — Depth Sorting",
      "Basic Rule",
      "Sorting Entities Among Tiles",
      "Multi-Tile Objects",
      "Z-Height Sorting",
      "Sort-Stable Tie-Breaking",
      "6 — Mouse Picking / Click Detection",
      "Step 1: Screen → World (Coarse)",
      "Step 2: Pixel-Perfect Picking",
      "7 — Isometric Movement",
      "The Diagonal Illusion",
      "8-Direction Mapping",
      "Speed Correction",
      "8 — Elevation / Height",
      "Height Model",
      "Rendering with Height",
      "Visual Elements",
      "Sorting with Height",
      "Jumping Between Elevations",
      "9 — Isometric Pathfinding",
      "A* on Diamond Grids",
      "Neighbors for Diamond Grids",
      "Height-Aware Pathfinding",
      "10 — Camera for Isometric",
      "Isometric Camera Bounds",
      "Tile Culling",
      "Minimap",
      "11 — Common Pitfalls",
      "Seam Artifacts Between Tiles",
      "Sorting Edge Cases with Large Sprites",
      "Off-By-One in Coordinate Conversion",
      "Performance with Large Visible Tile Counts",
      "Tile Dimensions Don't Match Art",
      "Quick Reference"
    ]
  },
  {
    "id": "monogame-arch/G4",
    "title": "G4 — AI Systems",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 90472,
    "sections": [
      "AI System Pipeline Overview",
      "AI Tick Rate Throttling",
      "1. Finite State Machines (FSM)",
      "Core Implementation",
      "Arch ECS Integration",
      "Hierarchical FSM (HFSM)",
      "Pushdown Automaton (State Stack)",
      "2. Behavior Trees",
      "Node Types",
      "Execution Model",
      "Custom Implementation",
      "Decorator Nodes",
      "Parallel Node",
      "Blackboard Pattern",
      "Builder API",
      "3. GOAP (Goal-Oriented Action Planning)",
      "When to Use GOAP vs BT",
      "Data Model",
      "A* Planner",
      "Guard AI Example",
      "GOAP with Plan Caching",
      "4. Utility AI",
      "Response Curves",
      "Consideration Architecture",
      "Scoring & Selection with Momentum",
      "Practical Example: NPC Daily Routine",
      "5. Steering Behaviors",
      "Core Behaviors",
      "Flocking (Boids)",
      "Steering Combination (Priority-Based)",
      "SpatialHash for Neighbor Queries",
      "6. Perception Systems",
      "Vision Cone (Field of View)",
      "Hearing (Sound Propagation)",
      "Line-of-Sight Raycasting (Tile Map)",
      "Threat Memory System",
      "Perception ECS System",
      "7. Pathfinding",
      "A* on Grids",
      "Path Smoothing",
      "Flow Fields (RTS)",
      "Jump Point Search",
      "Hierarchical Pathfinding (HPA*)",
      "8. Influence Maps",
      "Implementation",
      "Multi-Layer Influence Maps",
      "9. Squad & Group Tactics",
      "Squad Formation",
      "Squad Coordinator",
      "Tactical Role Assignment",
      "10. Dynamic Difficulty Adjustment (DDA)",
      "Player Performance Tracking",
      "Difficulty Modifiers",
      "Integration with AI Systems",
      "DDA Tuning Table",
      "11. Boss Pattern Design",
      "Phase-Based State Machine",
      "Telegraph & Windup System",
      "Boss Design Tuning Table",
      "12. ECS-Specific AI Patterns (Arch)",
      "Component Decomposition",
      "System Pipeline",
      "CommandBuffer for Safe Structural Changes",
      "Query Filtering for AI Archetypes",
      "13. AI Debugging & Visualization",
      "Debug Overlay System",
      "Behavior Tree Visualizer",
      "Performance Profiling",
      "14. Common Mistakes & Troubleshooting",
      "❌ Mistake 1: AI Updates Every Frame",
      "❌ Mistake 2: Pathfinding Every Frame",
      "❌ Mistake 3: Perfect AI Aim",
      "❌ Mistake 4: State Machine Flickering",
      "❌ Mistake 5: GOAP Planner Runs Forever",
      "❌ Mistake 6: Steering Forces Cancel Out",
      "❌ Mistake 7: Monolithic AI Component",
      "Architecture Decision Guide",
      "Combining Patterns (Real-World Example)",
      "Genre-Specific AI Patterns",
      "Platformer",
      "Top-Down Shooter / Action RPG",
      "RTS / Strategy",
      "Tower Defense",
      "Survival / Sandbox",
      "Cross-References"
    ]
  },
  {
    "id": "monogame-arch/G50",
    "title": "G50 — Hot Reload & Live Editing",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 31240,
    "sections": [
      "Why Hot Reload Matters",
      "FileSystemWatcher for Data Files",
      "JSON Data Hot Reload",
      "Texture Hot Reload",
      "Shader Hot Reload",
      "Tiled Map Reload",
      "Audio Hot Reload",
      "Hot Reload Manager",
      ".NET Hot Reload Limitations",
      "Development Workflow",
      "ImGui Integration",
      "Wiring It All Together"
    ]
  },
  {
    "id": "monogame-arch/G51",
    "title": "G51 — Crash Reporting & Production Error Handling",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 32692,
    "sections": [
      "Why Production Error Handling",
      "Global Exception Handler",
      "Crash Dump Files",
      "Local Crash Log System",
      "Remote Crash Reporting",
      "Sentry Integration",
      "Graceful Degradation in Production",
      "Error Recovery Strategies",
      "Platform-Specific Considerations",
      "Post-Launch Monitoring",
      "Player-Facing Error Messages",
      "Testing Crash Handling",
      "Putting It All Together"
    ]
  },
  {
    "id": "monogame-arch/G52",
    "title": "G52 — 2D Platformer Character Controller",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 141410,
    "sections": [
      "Table of Contents",
      "1 — Controller Philosophy",
      "Kinematic vs Physics-Based",
      "The \"Game Feel First\" Approach",
      "Why ECS?",
      "2 — Controller Pipeline Overview",
      "Why This Order Matters",
      "3 — Core Components",
      "Position & Velocity",
      "Collider",
      "Grounded State",
      "Player Controller",
      "Auxiliary Tag Components",
      "4 — Ground Detection",
      "Multi-Ray Approach",
      "IsGrounded State Management",
      "Edge Detection for Ledge Hang",
      "5 — Basic Movement",
      "Horizontal Acceleration Model",
      "Why Separate Air/Ground Values?",
      "Speed Curves: Linear vs Exponential",
      "6 — Jump System",
      "Deriving Gravity from Designer Values",
      "Gravity Zones Diagram",
      "Variable-Height Jump",
      "Apex Float",
      "Multi-Jump (Double/Triple Jump)",
      "Double-Jump Visual Differentiation",
      "7 — Coyote Time",
      "What It Does",
      "Implementation",
      "Typical Values",
      "8 — Jump Buffering",
      "What It Does",
      "Implementation",
      "Timer vs Ring Buffer",
      "Generic Input Buffer",
      "Typical Values",
      "9 — Wall Mechanics",
      "Wall Detection",
      "Wall Slide",
      "Wall Jump",
      "Wall Jump Input Lock",
      "Wall Cling",
      "Ledge Grab",
      "10 — Slopes",
      "Ground Normal and Slope Angle",
      "Slope Movement",
      "Key Slope Problems & Solutions",
      "Slope Speed Modifiers",
      "11 — One-Way Platforms",
      "Detection Logic",
      "Drop-Through",
      "12 — Moving Platforms",
      "The Core Problem",
      "Velocity Transfer Approach",
      "Position Parenting Approach",
      "Attach / Detach",
      "Crushing Detection",
      "13 — Ladders & Climbing",
      "Ladder State Machine",
      "Ladder Design Considerations",
      "14 — Dash / Dodge",
      "Core Dash Implementation",
      "Dash Variants",
      "Invincibility Frames",
      "Ghost Trail Effect",
      "15 — Corner Correction",
      "The Problem",
      "The Fix",
      "16 — Collision Resolution",
      "AABB Sweep Test",
      "Sub-Pixel Accumulation",
      "Why Axis-Separated?",
      "Tunneling Prevention",
      "17 — Crouching & Sliding",
      "Basic Crouch",
      "Crouch Slide",
      "Design Decisions",
      "18 — Swimming & Water Physics",
      "Water Zone Detection",
      "Water Entry/Exit",
      "Water Interaction Table",
      "19 — Top-Down Character Controller",
      "Core Differences from Platformer",
      "Top-Down Components",
      "8-Direction Movement with Diagonal Normalization",
      "Top-Down Collision (Full AABB)",
      "Top-Down Dash (Omnidirectional)",
      "20 — State Machine Integration",
      "Controller State Enum",
      "State Transition Table",
      "State Machine Pattern",
      "State Machine Host",
      "When to Use a State Machine",
      "21 — Camera Integration",
      "Camera Events from Controller",
      "Look-Ahead Integration",
      "Vertical Camera Snap",
      "22 — Debug Visualization",
      "Controller Debug Overlay",
      "Input History Visualizer",
      "Trajectory Prediction",
      "23 — Complete ECS System",
      "Input State Helper",
      "RectF Helper",
      "System Registration",
      "24 — Common Mistakes & Troubleshooting",
      "❌ 1. Jittery Movement on Slopes",
      "❌ 2. Jump Doesn't Fire / \"Eaten\" Inputs",
      "❌ 3. Player Sticks to Ceilings",
      "❌ 4. Wall Jump Doesn't Push Away",
      "❌ 5. Moving Platform Desync",
      "❌ 6. Sub-Pixel Drift",
      "❌ 7. Crouch Can't Stand Up Under Low Ceiling",
      "❌ 8. Ice / Slippery Surfaces Feel Identical to Normal Ground",
      "❌ 9. Grapple Rope Stretches or Clips Through Walls",
      "❌ 10. Conveyor Belt Momentum Stacks Infinitely",
      "Quick Diagnostic Checklist",
      "25 — Surface Types & Friction Modifiers",
      "Surface Component",
      "Surface Detection",
      "Applying Surface Modifiers to Movement",
      "Surface Presets",
      "Surface Type Reference Table",
      "26 — Rope & Grappling Hook",
      "Approach Decision",
      "Pendulum Grapple (Point-and-Swing)",
      "Verlet Rope (Segmented, Wraps Geometry)",
      "Rope Rendering",
      "Grapple State Machine Integration",
      "Grapple Tuning Reference",
      "27 — Tuning Reference Tables",
      "Gravity Derivation Quick Reference",
      "Game Feel Profiles",
      "Timer Duration Reference",
      "Speed & Distance Quick Math",
      "Gravity & Jump Height Quick Math",
      "28 — Cross-Reference Guide"
    ]
  },
  {
    "id": "monogame-arch/G53",
    "title": "G53 — Procedural Generation",
    "description": "Procedural generation turns algorithms into content — dungeons, terrain, loot, enemy encounters. This guide covers th...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 51909,
    "sections": [
      "Table of Contents",
      "1 — Seeded Random",
      "Core Wrapper",
      "Seed Display for Players",
      "2 — Noise Functions",
      "Perlin Noise (2D)",
      "Fractal / Octave Noise",
      "When to Use Each Noise Type",
      "3 — BSP Dungeon Generation",
      "4 — Cellular Automata",
      "5 — Wave Function Collapse (WFC)",
      "Extracting Adjacency Rules from Example Maps",
      "6 — Room Templates & Handcrafted Chunks",
      "Room Template Definition",
      "Room Graph Stitcher",
      "7 — Random Walk / Drunkard's Walk",
      "8 — Terrain Generation",
      "Heightmap Terrain for Side-Scrollers",
      "Biome Assignment from Dual Noise Layers",
      "Chunk-Based Infinite Terrain",
      "9 — Item & Loot Generation",
      "Rarity Tiers & Weighted Drops",
      "Affix-Based Item Generation",
      "10 — Enemy Placement",
      "Population Budgets",
      "11 — Validation & Guarantees",
      "Reachability Check",
      "Generation with Retry",
      "12 — ECS Integration",
      "Components",
      "Level Generation Service",
      "Usage in Game Initialization",
      "Deterministic Replay Seed Component",
      "13 — Island / Archipelago Generation",
      "Layout Templates",
      "Distance Field Composition",
      "Multi-Pass Terrain Pipeline",
      "Biased Drunkard's Walk for Paths",
      "Terrain Hierarchy Enforcement",
      "Quick Reference"
    ]
  },
  {
    "id": "monogame-arch/G54",
    "title": "G54 — Fog of War & Visibility Systems",
    "description": "Fog of war hides parts of the map the player hasn't seen or can't currently see. It's essential for strategy games (R...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 35297,
    "sections": [
      "1 — Visibility States",
      "The Fog Grid",
      "2 — Line-of-Sight (Raycasting)",
      "Bresenham's Line",
      "Brute-Force Raycast FOV",
      "Symmetric vs Asymmetric Visibility",
      "3 — Shadowcasting Algorithm",
      "How It Works",
      "Full Implementation",
      "4 — Vision Range & Shape",
      "Circular Vision",
      "Cone-Shaped Vision (Stealth Games)",
      "Multiple Vision Sources",
      "Elevation Blocking",
      "5 — Fog Rendering",
      "The Naive Approach (Don't)",
      "The Good Approach: Fog RenderTarget + Blur",
      "Render Pipeline Order",
      "6 — Fog Shader (HLSL)",
      "Gaussian Blur Shader",
      "Fog Composite Shader",
      "Smooth Transitions",
      "7 — Dynamic Updates",
      "When to Recalculate",
      "Incremental Updates",
      "Throttling Updates",
      "8 — Entity Visibility",
      "Visibility Query System",
      "Rendering Ghosts",
      "9 — Minimap Integration",
      "Minimap Entity Dots",
      "10 — Strategy Game Patterns",
      "Team-Based Shared Vision",
      "Competitive Fog (Re-closing)",
      "Building Sight Ranges",
      "Co-op Shared Exploration",
      "11 — ECS Integration",
      "Components",
      "FogOfWarGrid Resource",
      "FogUpdateSystem",
      "AI That Respects Fog",
      "Full Render Integration",
      "Quick Reference",
      "Performance Budget (Approximate)"
    ]
  },
  {
    "id": "monogame-arch/G55",
    "title": "G55 — Settings & Options Menu",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 39756,
    "sections": [
      "1 — Settings Data Model",
      "2 — Settings Persistence",
      "3 — Audio Settings",
      "4 — Video Settings",
      "4.1 Enumerating Resolutions",
      "4.2 Applying Video Changes",
      "5 — Input Rebinding",
      "5.1 Rebinding Flow",
      "5.2 Displaying Bindings in UI",
      "6 — Accessibility Settings",
      "7 — Gameplay Settings",
      "8 — Settings UI Layout",
      "8.1 Gum Widget Patterns",
      "8.2 Tab Controller",
      "9 — Apply / Revert Pattern",
      "10 — Platform Defaults",
      "11 — Practical Example: Wiring It All Together",
      "Example `settings.json` on Disk",
      "Bootstrap in Game1",
      "Design Checklist"
    ]
  },
  {
    "id": "monogame-arch/G56",
    "title": "G56 — Side-Scrolling Perspective",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 33131,
    "sections": [
      "1 — Side-Scroller Fundamentals",
      "What Makes It Different from Top-Down",
      "Classic References",
      "Core ECS Components",
      "2 — Level Design Principles",
      "Horizontal Flow with Vertical Variation",
      "Platforming Rhythm",
      "Teaching Through Level Design",
      "Visual Landmarks",
      "3 — Tile Layout for Platformers",
      "Common Tile Sizes",
      "Tile Type Components",
      "Slope Handling",
      "One-Way Platforms",
      "Layer Separation",
      "4 — Parallax Backgrounds",
      "Parallax Layer Component",
      "Parallax Rendering System",
      "Typical Layer Setup",
      "5 — Camera for Side-Scrollers",
      "Side-Scroller Camera Component",
      "Camera Update System",
      "Speed-Based Look-Ahead",
      "6 — Level Transitions",
      "Room Structure",
      "Screen Lock for Boss Fights",
      "Fade Transition Helper",
      "7 — Common Platformer Hazards",
      "Hazard Components",
      "Crusher Update",
      "Checkpoint / Respawn System",
      "8 — Environmental Mechanics",
      "Moving Platforms",
      "Environmental Effect Components",
      "Water Zone Physics",
      "9 — Enemy Patterns for Side-Scrollers",
      "Enemy Type Components",
      "Patrol System",
      "Flyer System (Sine-Wave Movement)",
      "Charger System (Telegraph → Dash)",
      "Spawn Triggers and Arena Locks",
      "10 — Metroidvania Structure",
      "World Map Architecture",
      "Map / Minimap System",
      "Save Rooms and Fast Travel",
      "Ability Gating Design Principles",
      "11 — Endless Runner Variant",
      "Core Components",
      "Chunk-Based Procedural Spawning",
      "Score System",
      "Quick Reference — Component Summary"
    ]
  },
  {
    "id": "monogame-arch/G57",
    "title": "G57 — Weather & Environmental Effects",
    "description": "Weather transforms a flat 2D world into a living place. Rain hammering rooftops, fog creeping through a swamp, lightn...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 36804,
    "sections": [
      "Table of Contents",
      "1. Weather System Architecture",
      "Weather States",
      "WeatherState Resource",
      "WeatherManager",
      "Time-Based vs Event-Driven",
      "2. Rain",
      "Raindrop Particle",
      "Particle Pool",
      "Splash Particles",
      "Puddle Sprites",
      "Screen-Space Rain Overlay",
      "Sound Layering",
      "3. Snow",
      "Snowflake Particle",
      "Drift Motion",
      "Accumulation",
      "Blizzard Variant",
      "Snow Depth Affecting Movement",
      "4. Wind",
      "Wind State",
      "Leaf / Debris Particles",
      "Tree & Grass Sway Shader (HLSL)",
      "5. Fog",
      "Fog Overlay Shader (HLSL)",
      "Distance-Based Fog",
      "Fog Color Palette",
      "6. Lightning & Thunder",
      "Lightning Controller",
      "Screen Flash Rendering",
      "Silhouette Effect",
      "7. Sandstorm / Dust",
      "Sandstorm Particles",
      "Visibility Reduction",
      "Gameplay Damage",
      "8. Environmental Ambiance",
      "Ambient Particle Definitions",
      "Behavior per Type",
      "Firefly Glow",
      "9. Water Effects",
      "Rain Ripples",
      "Flowing Water Texture Scrolling",
      "Reflection Shimmer",
      "10. Weather Impact on Gameplay",
      "Slippery Surfaces",
      "Visibility Radius",
      "Wind Affecting Projectiles",
      "Fire Extinguished by Rain",
      "Design Hooks Summary",
      "11. ECS Integration",
      "Components and Resources",
      "WeatherParticleSystem",
      "WeatherRenderSystem",
      "Weather Affecting Other Systems",
      "12. Practical Example — Full Weather Cycle",
      "Weather Schedule",
      "Wiring It All Together",
      "What's Happening Each Hour",
      "Performance Notes",
      "Checklist"
    ]
  },
  {
    "id": "monogame-arch/G58",
    "title": "G58 — Minimap Systems",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 27906,
    "sections": [
      "Overview",
      "1 — Minimap Types",
      "2 — Minimap Rendering",
      "Pixel-Per-Tile Approach",
      "Color-Coding Tiles",
      "Building the Minimap Texture",
      "3 — Minimap Camera",
      "Following the Player",
      "4 — Icons & Markers",
      "ECS Component",
      "Drawing Markers",
      "Player Arrow",
      "Pulsing Effect",
      "Icon Scaling",
      "5 — Fog of War Integration",
      "Applying Fog to the Minimap Texture",
      "Filtering Markers by Fog",
      "6 — Room-Based Maps",
      "Drawing the Room Grid",
      "7 — Minimap Shapes",
      "Rectangular (Default)",
      "Circular (Stencil Masking)",
      "8 — Full-Screen Map",
      "State",
      "Pan & Scroll Input",
      "Drawing the Full-Screen Map",
      "9 — Dynamic Updates",
      "Strategy: Incremental vs Full Rebuild",
      "Incremental Update",
      "Dirty Region Approach",
      "10 — ECS Integration",
      "Components",
      "MinimapRenderSystem",
      "11 — Practical Example: Dungeon Crawler Minimap",
      "Wiring It Up",
      "Design Notes"
    ]
  },
  {
    "id": "monogame-arch/G59",
    "title": "G59 — 2D Skeletal Animation",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 30958,
    "sections": [
      "1 — Skeletal vs Sprite Animation",
      "2 — How 2D Skeletal Animation Works",
      "Bone Hierarchy",
      "Skinning (Mesh Deformation)",
      "Forward Kinematics (FK)",
      "Inverse Kinematics (IK)",
      "Keyframe Interpolation",
      "3 — Spine Runtime for MonoGame",
      "NuGet / Setup",
      "Loading Skeleton Data",
      "Creating a Skeleton Instance",
      "Rendering with SkeletonRenderer",
      "Animation State Management",
      "4 — DragonBones Alternative",
      "When to Choose DragonBones vs Spine",
      "DragonBones in Practice",
      "5 — Animation Blending",
      "Crossfading",
      "Track-Based Layering",
      "Blend Weights Over Time",
      "6 — Mesh Deformation (FFD)",
      "Use Cases",
      "How It Works in Spine",
      "Performance Note",
      "7 — Runtime Bone Manipulation",
      "Aiming at a Target",
      "IK Constraints for Aiming",
      "Following Mouse/Touch",
      "8 — Events & Triggers",
      "Common Event Types",
      "Listening for Events",
      "9 — Skins & Equipment",
      "How Skins Work",
      "Swapping Skins at Runtime",
      "Equipment System Integration",
      "10 — Performance",
      "Rendering Cost",
      "Batching",
      "Culling Off-Screen Skeletons",
      "LOD for Distant Skeletons",
      "Memory Considerations",
      "11 — ECS Integration",
      "Components",
      "Spine Update System",
      "Spine Render System",
      "Skin Update System",
      "Querying Animation State for Gameplay",
      "12 — Art Pipeline",
      "Workflow Overview",
      "File Formats",
      "Export Settings",
      "Version Compatibility",
      "Content Pipeline Integration",
      "Quick Reference"
    ]
  },
  {
    "id": "monogame-arch/G5",
    "title": "G5 — UI Framework",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 10502,
    "sections": [
      "1 Setup & Initialization",
      "2 Layout System",
      "3 Forms Controls",
      "4 Theming & Custom Visuals",
      "5 Screen Management Pattern",
      "6 Touch & Gamepad Navigation",
      "7 Performance Tips",
      "8 Framework Comparison",
      "9 UI Prototyping with Google Stitch"
    ]
  },
  {
    "id": "monogame-arch/G60",
    "title": "G60 — Trail & Line Rendering",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 23956,
    "sections": [
      "1 — Trail Rendering Basics",
      "2 — Point-Based Trail System",
      "3 — Triangle Strip Generation",
      "Corner handling",
      "4 — Trail Rendering with DrawUserPrimitives",
      "5 — Trail Fading",
      "6 — Textured Trails",
      "Scrolling UVs for animated trails",
      "Texture ideas",
      "7 — Line Rendering",
      "8 — Laser Beams",
      "9 — Rope / Chain Rendering",
      "Verlet integration",
      "Rendering as a triangle strip",
      "Grapple mechanics",
      "10 — Lightning / Electric Arcs",
      "Midpoint displacement algorithm",
      "Branching",
      "Animation",
      "Rendering",
      "11 — Ghost Trail / After-Image",
      "12 — ECS Integration",
      "Components",
      "TrailEmitSystem — record positions each frame",
      "TrailRenderSystem — build mesh and draw",
      "RopePhysicsSystem",
      "Wiring it up in Game1",
      "Quick Reference",
      "Performance Notes"
    ]
  },
  {
    "id": "monogame-arch/G61",
    "title": "G61 — Tutorial & Onboarding Systems",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 30870,
    "sections": [
      "1 — Tutorial Design Philosophy",
      "2 — Tutorial Trigger System",
      "ECS Components",
      "Trigger Detection System",
      "Event-Based Triggers",
      "3 — Prompt System",
      "Components and Data",
      "Controller-Aware Icon Mapping",
      "Prompt Render System",
      "4 — UI Highlighting",
      "5 — Gating / Forced Tutorials",
      "6 — Tooltip System",
      "Tooltip Positioning",
      "Rich Tooltips with Stats",
      "7 — Tutorial State Machine",
      "Driving the State Machine",
      "8 — First-Time-User Experience (FTUE)",
      "The FTUE Loop",
      "FTUE Manager",
      "9 — Contextual Help",
      "10 — Tutorial Data Model",
      "Tutorial Definition Format",
      "Loading and Persistence",
      "Save Data JSON",
      "11 — ECS Integration",
      "TutorialManager Service",
      "System Registration",
      "Entity Setup Example",
      "Quick Reference"
    ]
  },
  {
    "id": "monogame-arch/G62",
    "title": "G62 — Narrative & Branching Story Systems",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 34744,
    "sections": [
      "Overview",
      "1 — Narrative Architecture",
      "Why Data-Driven?",
      "Story Data Formats",
      "Narrative Manager Service",
      "2 — Branching Dialogue",
      "Dialogue Node Structure",
      "Example Dialogue JSON",
      "Evaluating Conditions",
      "3 — Story Flags & World State",
      "The Flag Store",
      "Common Flag Patterns",
      "Persistence",
      "4 — Consequence System",
      "Immediate vs Delayed Consequences",
      "Processing Consequences",
      "Branching Story Graph with Merge Points",
      "5 — Yarn Spinner / Ink Integration",
      "Yarn Spinner with MonoGame",
      "Yarn Runtime Bridge",
      "Ink Alternative",
      "6 — Journal / Codex / Lore",
      "Journal Entry Model",
      "Example Journal JSON",
      "7 — Reputation & Relationship Systems",
      "Reputation Store",
      "Reputation-Gated Content",
      "8 — Quest Narrative Integration",
      "Wiring Quests to Narrative",
      "9 — Multiple Endings",
      "Decision Tracking",
      "Epilogue Slides",
      "New Game+ Story Carryover",
      "10 — Narrative UI",
      "Dialogue Box Component",
      "Typewriter Effect with Markup",
      "Supported Text Markup",
      "11 — Barks & Ambient Dialogue",
      "Bark Data Model",
      "Bark Emitter Component",
      "Bark Selection System",
      "12 — ECS Integration",
      "Core ECS Components",
      "StoryState Resource",
      "NarrativeEventSystem",
      "System Registration Order",
      "Design Checklist",
      "Further Reading"
    ]
  },
  {
    "id": "monogame-arch/G63",
    "title": "G63 — 2D Water Simulation",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 27974,
    "sections": [
      "Overview",
      "1 — Water Surface Simulation",
      "2 — Spring Physics",
      "3 — Rendering the Water Surface",
      "4 — Splash Effects",
      "5 — Buoyancy",
      "6 — Water Shader (HLSL)",
      "7 — Tile-Based Water",
      "8 — Water Current / Flow",
      "9 — Underwater Physics",
      "10 — Lava / Acid Variants",
      "11 — ECS Integration",
      "Components",
      "WaterSurfaceSystem — physics tick",
      "WaterRenderSystem — draw pass",
      "BuoyancySystem",
      "Splash detection via WaterTrigger",
      "Factory helper",
      "Quick-Reference: Recommended Parameters",
      "Summary",
      "Performance Notes"
    ]
  },
  {
    "id": "monogame-arch/G64",
    "title": "G64 — Combat & Damage Systems",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 52663,
    "sections": [
      "Table of Contents",
      "1 — Design Philosophy",
      "Data-Driven, Not Hard-Coded",
      "The Damage Pipeline",
      "ECS Fit",
      "2 — Health & Damage Components",
      "Core Components",
      "Health Regen System",
      "3 — Hitbox/Hurtbox System",
      "Components",
      "World-Space Bounds Helper",
      "Collision Detection System",
      "4 — Damage Pipeline",
      "Damage Event",
      "Damage Resolution System",
      "5 — Invincibility Frames",
      "Visual Flashing",
      "6 — Knockback & Hit Reactions",
      "Impulse Knockback (Simple)",
      "Curve-Based Knockback (Polished)",
      "7 — Hitstop & Screen Shake",
      "Hitstop (Frame Freeze)",
      "Integration in Game Loop",
      "Screen Shake",
      "8 — Projectile System",
      "Components",
      "Projectile Movement & Collision System",
      "9 — Object Pooling",
      "Generic Object Pool",
      "ECS Entity Pool Pattern",
      "10 — Melee Attack System",
      "Attack Definition",
      "Attack State Machine",
      "Melee Attack System",
      "Example: Defining Attacks",
      "11 — Damage Types & Resistances",
      "Example: Monster with Resistances",
      "12 — Critical Hits & Damage Variance",
      "13 — Turn-Based Combat Adapter",
      "14 — Death & Respawn",
      "Death Processing System",
      "Respawn System",
      "15 — Damage Numbers & Feedback",
      "16 — Combat Tuning Reference",
      "Timing (at 60 FPS)",
      "Damage Balance Starting Points",
      "Knockback",
      "GameFeedback Interface",
      "System Execution Order",
      "Related Guides"
    ]
  },
  {
    "id": "monogame-arch/G65",
    "title": "G65 — Economy & Shop Systems",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 54423,
    "sections": [
      "Table of Contents",
      "1 — Design Philosophy",
      "Why a Dedicated Economy System?",
      "Core Principles",
      "2 — Currency Components",
      "Currency Definition",
      "Currency Registry",
      "Example Currency Data (JSON)",
      "ECS Components",
      "3 — Wallet & Currency Manager",
      "4 — Transaction Pipeline",
      "Transaction Modifiers",
      "5 — Item Pricing & Price Modifiers",
      "Price Table",
      "Dynamic Pricing Examples",
      "6 — Shop System",
      "Shop Inventory",
      "Shop Transaction Logic",
      "Example Shop Data (JSON)",
      "7 — Tower Defense Economy",
      "TD-Specific Components",
      "Tower Economy System",
      "Tower Cost Data (JSON)",
      "8 — Survival & Trading Economy",
      "Barter System",
      "Reputation & Unlock System",
      "9 — Loot & Drop Tables",
      "Example Drop Table (JSON)",
      "10 — Economy Sinks & Faucets",
      "Monitoring System",
      "Common Economy Patterns",
      "Balance Guidelines",
      "11 — Save/Load Integration",
      "12 — UI Integration",
      "HUD Currency Display",
      "Shop UI Helpers",
      "13 — Economy Tuning Reference",
      "Quick-Start Values by Genre",
      "Economy Red Flags",
      "Formulas",
      "Putting It Together",
      "Minimal Tower Defense Setup",
      "Minimal Survival Setup"
    ]
  },
  {
    "id": "monogame-arch/G66",
    "title": "G66 — Building & Placement Systems",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 86478,
    "sections": [
      "Table of Contents",
      "1 — Design Philosophy",
      "Why a Dedicated Building System?",
      "Core Principles",
      "2 — Building Definition & Registry",
      "Building Definition",
      "Building Registry",
      "Example Building Definitions",
      "3 — Grid System",
      "Grid Component & Manager",
      "Tilemap Terrain Layer",
      "4 — Ghost Preview & Cursor",
      "Placement Mode Components",
      "Ghost Update System",
      "Entering & Exiting Build Mode",
      "Multi-Tile Ghost Rendering",
      "5 — Placement Validation",
      "Placement Rules",
      "Built-In Rule Implementations",
      "Placement Validator",
      "6 — Placement Execution",
      "Building Components",
      "Placement Executor",
      "Input Handling — Click to Place",
      "7 — Free-Form Placement",
      "Radius-Based Placement",
      "8 — Construction & Build Time",
      "Construction System",
      "Worker-Based Construction (Strategy Games)",
      "Construction Queue (Build Multiple)",
      "9 — Building Upgrades",
      "Upgrade System",
      "10 — Building Health & Destruction",
      "Damage System Integration",
      "Repair System",
      "11 — Snapping & Attachment",
      "Wall Auto-Connect",
      "12 — Pathfinding Integration",
      "Updating the Navigation Grid",
      "Tower Defense: Path Validation Before Placement",
      "13 — Save/Load Integration",
      "Serialization",
      "14 — UI Integration",
      "Build Menu",
      "Building Info Panel",
      "Health Bar Over Buildings",
      "Construction Progress Bar",
      "15 — Genre-Specific Patterns",
      "Survival: Base Building",
      "Tower Defense: Tower Placement",
      "Strategy/RTS: Base Construction",
      "16 — Tuning Reference",
      "Survival Building Tuning",
      "Tower Defense Tower Tuning",
      "RTS Building Tuning",
      "Placement Feel Tuning",
      "Quick Reference — System Wiring"
    ]
  },
  {
    "id": "monogame-arch/G67",
    "title": "G67 — Object Pooling & Recycling",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 89046,
    "sections": [
      "Table of Contents",
      "1 — Why Pool?",
      "The GC Problem",
      "What Pooling Solves",
      "What to Pool",
      "The Three Pool Strategies",
      "2 — Generic Object Pool",
      "Core Implementation",
      "Usage: Damage Number Pool",
      "Usage: Pathfinding Node Pool",
      "`IPoolable` Interface",
      "3 — Keyed / Multi-Type Pool",
      "Keyed Pool Implementation",
      "Usage: Multi-Bullet Pool",
      "Usage: Multi-VFX Pool",
      "4 — ECS Entity Recycling",
      "The Pooled Tag Pattern",
      "Generic ECS Pool",
      "Complete Projectile System with ECS Pooling",
      "Projectile Movement + Lifetime System",
      "Query Filter — The Critical Part",
      "5 — Struct Pools (Array-Based)",
      "Fixed-Size Struct Pool",
      "Usage: Trail Points",
      "Usage: Blood / Debris Decals",
      "When to Use Struct Pools vs Object Pools",
      "6 — Audio Source Pooling",
      "Audio Pool",
      "Integration with Combat",
      "Positional Audio with Pooling",
      "7 — VFX & Particle Pool Integration",
      "Particle Burst Pool",
      "8 — Spawn & Wave Pooling",
      "Wave-Aware Pool Manager",
      "Staggered Pre-Warming",
      "Usage in Wave Controller",
      "9 — UI Element Pooling",
      "List Item Pool",
      "Inventory Slot Pool",
      "10 — Pool Warming Strategies",
      "Strategy Comparison",
      "Scene-Based Pool Warming",
      "Loading Screen Integration",
      "11 — Pool Monitoring & Diagnostics",
      "Pool Diagnostic System",
      "Usage: Registering Pools for Monitoring",
      "GC Monitoring",
      "12 — Automatic Pool Sizing",
      "Adaptive Pool",
      "13 — Thread Safety",
      "Thread-Safe Object Pool",
      "When to Use Thread-Safe Pools",
      "Per-Thread Pool (Best Performance)",
      "14 — Genre-Specific Patterns",
      "Bullet Hell",
      "Tower Defense",
      "Survival / Crafting",
      "Roguelike / Dungeon Crawler",
      "15 — Common Mistakes & Anti-Patterns",
      "❌ Forgetting to Return",
      "❌ Using Pooled Object After Return",
      "❌ Missing Pooled Filter in ECS Queries",
      "❌ Resetting Partially",
      "❌ Pooling Everything",
      "❌ Enormous Initial Pools",
      "❌ Double-Return",
      "16 — Tuning Reference",
      "Pool Size Guidelines",
      "Memory Budget",
      "Performance Characteristics",
      "Decision Flowchart",
      "Integration Checklist",
      "Related Guides"
    ]
  },
  {
    "id": "monogame-arch/G68",
    "title": "G68 — Puzzle Game Systems",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 106411,
    "sections": [
      "Table of Contents",
      "1 — Design Philosophy",
      "Puzzles Are State Machines",
      "Why Not Just Use G10 §8?",
      "ECS Fit for Puzzles",
      "The Puzzle Frame Pipeline",
      "2 — Grid & Board Components",
      "Core Grid",
      "Piece Components",
      "Board Metadata (Singleton)",
      "3 — Puzzle State Snapshots",
      "Snapshot Structure",
      "Delta Compression (Large Boards)",
      "Memory Budget",
      "4 — Advanced Undo/Redo System",
      "Snapshot History Manager",
      "Undo/Redo ECS System",
      "Undo Timeline UI",
      "5 — Level Data & Level Loading",
      "Level File Format",
      "Level Data Model",
      "Level Pack & World Structure",
      "Level Loader",
      "Level-to-ECS Loader",
      "String-Based Level Format (Compact)",
      "6 — Level Select & Progression",
      "Progression Data",
      "Level Select Screen",
      "7 — Move Counter & Scoring",
      "Move Tracking System",
      "Scoring Models",
      "8 — Star Rating & Par System",
      "Star Calculation",
      "Victory Screen",
      "9 — Puzzle Validation & Win Detection",
      "Generic Win Condition System",
      "Win Check ECS System",
      "Deadlock Detection (Sokoban)",
      "10 — Hint System",
      "Hint Provider",
      "11 — Replay & Ghost System",
      "Move Replay",
      "Ghost Comparison",
      "12 — Timer & Time Pressure",
      "Puzzle Timer System",
      "Timer Display",
      "13 — Animated Piece Movement",
      "Movement Animator",
      "Easing Functions",
      "14 — Puzzle Reset & Restart",
      "Reset Strategies",
      "15 — Genre: Sokoban / Push-Block",
      "Sokoban Move System",
      "Sokoban Level Packs",
      "16 — Genre: Match-3 / Tile-Matching",
      "Match-3 Core",
      "Related Guides"
    ]
  },
  {
    "id": "monogame-arch/G69",
    "title": "G69 — Save/Load & Serialization Systems",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 112830,
    "sections": [
      "Table of Contents",
      "1 — Design Philosophy",
      "The Save Paradox",
      "Core Principles",
      "Save Pipeline Overview",
      "ECS Fit",
      "2 — Saveable Component Registry",
      "Component Serializer Interface",
      "Generic Implementation",
      "The Registry",
      "Custom Serializer Example — Entity References",
      "Auto-Discovery with Attributes (Optional)",
      "3 — ECS World Serialization",
      "Entity Snapshot",
      "World Serializer",
      "World Restorer",
      "Persistent Tag and Exclusions",
      "4 — Save File Format & Versioning",
      "Save File Structure",
      "JSON Serialization Options",
      "MonoGame Type Converters",
      "Why JSON (Not Binary)?",
      "5 — Version Migration Pipeline",
      "Migration Interface",
      "Migration Registry",
      "Example Migrations",
      "Migration Testing",
      "6 — Save Slot Manager",
      "Slot-Based Architecture",
      "Platform-Specific Save Directories",
      "7 — Autosave System",
      "Trigger-Based Autosave",
      "Autosave UI Indicator",
      "Rotating Autosave Slots",
      "8 — Quicksave / Quickload",
      "Implementation",
      "Quicksave During Combat",
      "9 — Async Save/Load",
      "Why Async?",
      "Save Pipeline (Background Thread)",
      "Thread Safety Rules",
      "10 — Save Thumbnails & Screenshots",
      "Capturing the Thumbnail",
      "Displaying Thumbnails in Save Menu",
      "11 — Save Integrity & Validation",
      "CRC32 Checksum",
      "Full Validation Pipeline",
      "12 — Encryption & Anti-Tamper",
      "When to Encrypt",
      "AES-256 Encryption",
      "Anti-Tamper Layers",
      "13 — Save Data Compression",
      "GZip Compression",
      "When to Compress",
      "Integration with Save Pipeline",
      "14 — Scene & Level State Persistence",
      "The Scene Problem",
      "Scene State Data",
      "Scene Persistence Manager",
      "Scene Transition Integration",
      "15 — Settings vs Profile vs Game State",
      "Three Separate Files",
      "Settings File",
      "Player Profile",
      "16 — Cloud Save Integration",
      "Architecture",
      "Cloud Save Provider Interface",
      "Steam Cloud Implementation",
      "Cloud Sync Manager",
      "Conflict Resolution UI",
      "17 — Testing Save Systems",
      "Test Categories",
      "Save System Smoke Test Checklist",
      "18 — Genre-Specific Patterns",
      "Roguelike — Permadeath Saves"
    ]
  },
  {
    "id": "monogame-arch/G6",
    "title": "G6 — Audio",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 8992,
    "sections": [
      "1 MonoGame Built-in Audio",
      "2 Audio Manager Pattern",
      "3 Sound Pooling",
      "4 Music Crossfading",
      "5 FMOD via FmodForFoxes",
      "6 2D Spatial Audio",
      "7 Vertical Layering (Dynamic Music)",
      "8 Sound Variation & Audio Feel"
    ]
  },
  {
    "id": "monogame-arch/G70",
    "title": "G70 — Replay & Recording Systems",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 110383,
    "sections": [
      "Table of Contents",
      "1 — Design Philosophy",
      "Why Replay Systems Matter",
      "The Two Fundamental Approaches",
      "ECS Fit",
      "2 — Recording Architecture Overview",
      "System Pipeline",
      "Core Components",
      "Recording Manager",
      "3 — Input Recording",
      "The Principle",
      "Compact Input Encoding",
      "Compression Results",
      "Multi-Player Input Interleaving",
      "4 — Deterministic Simulation",
      "Why Determinism Matters",
      "Sources of Non-Determinism",
      "Deterministic Random",
      "Deterministic Entity Processing",
      "Fixed-Point Math for Critical Paths",
      "5 — State Snapshot Recording",
      "When to Use State Snapshots",
      "Snapshot Structure",
      "Snapshot Capture System",
      "Snapshot Compression",
      "6 — Hybrid Recording",
      "The Best of Both Worlds",
      "Hybrid Replay Manager",
      "Choosing Snapshot Interval",
      "7 — Ghost Replay System",
      "Design",
      "Ghost Components",
      "Ghost Recording System",
      "Ghost Playback System",
      "Ghost vs Player Time Delta Display",
      "Ghost File Serialization",
      "8 — Killcam & Highlight System",
      "Design",
      "Rolling Buffer",
      "Killcam Playback Controller",
      "Highlight Detection",
      "9 — Spectator & Free Camera",
      "Spectator Mode Components",
      "Free Camera Controller",
      "Spectator Mode Switcher",
      "10 — Demo File Format",
      "File Structure",
      "Demo File Reader/Writer",
      "11 — Replay Playback Engine",
      "Playback Architecture",
      "State-Based Playback (Non-Deterministic Games)",
      "12 — Time Control (Slow-Mo, Rewind, Seek)",
      "Time Control Manager",
      "Seek Bar Integration",
      "13 — Replay Validation & Anti-Cheat",
      "Checksum Validation",
      "Related Guides"
    ]
  },
  {
    "id": "monogame-arch/G71",
    "title": "G71 — Spatial Partitioning & Entity Queries",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 101742,
    "sections": [
      "Table of Contents",
      "1 — Why Spatial Partitioning?",
      "The Brute-Force Problem",
      "What Spatial Partitioning Solves",
      "Who Needs This",
      "2 — Choosing the Right Structure",
      "Decision Tree",
      "Comparison Table",
      "3 — Uniform Grid",
      "When to Use",
      "Core Implementation",
      "Optimal Cell Size",
      "Frame Lifecycle",
      "4 — Spatial Hash Grid",
      "When to Use",
      "Core Implementation",
      "Uniform Grid vs Spatial Hash — Real Numbers",
      "5 — Quadtree",
      "When to Use",
      "Core Implementation",
      "RectangleF Helper",
      "Quadtree Gotchas",
      "6 — Loose Quadtree",
      "Why Loose?",
      "When to Use Loose vs Standard",
      "7 — Sweep-and-Prune (SAP)",
      "When to Use",
      "Core Implementation (1D SAP)",
      "2D SAP with Dual-Axis",
      "SAP vs Grid for Collision",
      "8 — K-D Tree",
      "When to Use",
      "Core Implementation",
      "K-D Tree Rebuild Strategy",
      "9 — Multi-Resolution Grid",
      "Architecture",
      "Implementation",
      "Usage",
      "10 — ECS Integration — The SpatialIndex System",
      "Components",
      "The Spatial Index System",
      "System Execution Order",
      "11 — Range Queries",
      "Circle Range Query with Narrow Phase",
      "Filtered Queries with Component Masks",
      "12 — Nearest-Neighbor Queries",
      "Grid-Based Nearest Neighbor",
      "AI Targeting with Nearest Neighbor",
      "13 — Ray Queries",
      "DDA Ray March on Grid",
      "Line-of-Sight Check",
      "14 — Frustum Culling & Camera Queries",
      "Camera Viewport Query",
      "Culling Statistics",
      "15 — Collision Broad Phase",
      "ECS Collision Pipeline",
      "Collision Layer Management",
      "16 — AI Perception & Awareness",
      "Staggered Perception Updates",
      "17 — Dynamic Entity Tracking",
      "Rebuild vs Incremental Update",
      "Dirty-Flag Tracking",
      "Entity Lifetime Integration",
      "18 — Thread Safety & Parallel Queries",
      "Read-Many, Write-Once Pattern",
      "Per-Thread Query Lists",
      "19 — Debugging & Visualization",
      "Grid Debug Overlay",
      "Diagnostic HUD"
    ]
  },
  {
    "id": "monogame-arch/G72",
    "title": "G72 — MonoGame 3.8.5 Content Builder & Graphics Backend Migration",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 13477,
    "sections": [
      "Table of Contents",
      "1 — What Changed in 3.8.5",
      "Why This Matters for ECS Projects",
      "2 — Migration Path Overview",
      "Pre-Migration Checklist",
      "Migration Order",
      "3 — Content Builder Migration",
      "The Old Way (3.8.2–3.8.4)",
      "The New Way (3.8.5+)",
      "Step-by-Step Conversion",
      "What Stays the Same",
      "4 — Vulkan Graphics Backend",
      "What Vulkan Provides",
      "Switching to Vulkan",
      "What Changes for Your Rendering Systems",
      "5 — DirectX 12 Graphics Backend",
      "What DX12 Provides",
      "When to Choose DX12",
      "6 — Choosing a Graphics Backend",
      "Recommendation for Arch ECS Projects",
      "7 — Shader Compatibility",
      "MGFX Shaders Need Recompilation",
      "Keeping Shaders Cross-Backend",
      "What This Means for Shader Components",
      "8 — Content Pipeline Differences",
      "Format Changes",
      "Custom Importers and Processors",
      "9 — ECS Integration Notes",
      "Your Arch World Is Untouched",
      "The Only System That Might Change",
      "10 — Common Migration Pitfalls",
      "Pitfall 1: Changing Everything at Once",
      "Pitfall 2: Forgetting to Remove Old Tool References",
      "Pitfall 3: Shader Mismatch After Backend Switch",
      "Pitfall 4: Preview API Instability",
      "Pitfall 5: MoltenVK on macOS",
      "11 — Testing Your Migration",
      "Minimum Test Matrix",
      "Automated Verification",
      "12 — Rollback Strategy"
    ]
  },
  {
    "id": "monogame-arch/G73",
    "title": "G73 — Cross-Platform Deployment",
    "description": "A comprehensive guide to building, packaging, and distributing MonoGame games across Windows, Linux, macOS, Android, ...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 16500,
    "sections": [
      "Table of Contents",
      "1 — Platform Overview",
      "2 — DesktopGL — One Project, Three Platforms",
      "Base Publish Command",
      "Runtime Identifiers",
      "3 — Publishing for Windows",
      "Hiding the Console Window",
      "Windows Distribution Options",
      "4 — Publishing for Linux",
      "Linux-Specific Considerations",
      "Linux Distribution Options",
      "5 — Publishing for macOS",
      "Creating a Universal Binary (Optional)",
      "Creating a macOS `.app` Bundle",
      "Code Signing and Notarization",
      "6 — Publishing for Android",
      "Build and Sign",
      "Android-Specific Considerations",
      "7 — Publishing for iOS",
      "iOS-Specific Considerations",
      "8 — NativeAOT Compilation",
      "NativeAOT Project Configuration",
      "NativeAOT Restrictions",
      "Verifying AOT Compatibility",
      "9 — Content Pipeline Considerations",
      "Content Is Platform-Agnostic (Mostly)",
      "MonoGame 3.8.5 Content Builder",
      "10 — Third-Party Packaging Tools",
      "GameBundle",
      "MonoPack",
      "11 — Distribution Checklist",
      "All Platforms",
      "Windows",
      "Linux",
      "macOS",
      "Mobile",
      "12 — Common Deployment Issues",
      "\"Game works in Debug but crashes in Release\"",
      "\"Content not found in published build\"",
      "\"DllNotFoundException on Linux\"",
      "\"macOS says the app is damaged\"",
      "\"NativeAOT build crashes at runtime\"",
      "\"Android APK is too large\""
    ]
  },
  {
    "id": "monogame-arch/G74",
    "title": "G74 — Multiplayer State Synchronization",
    "description": "State synchronization is the hard problem of multiplayer games. You have 60 physics simulations running in parallel —...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 38102,
    "sections": [
      "Table of Contents",
      "1 — Design Philosophy",
      "Authority Models",
      "Why Server Authority Wins",
      "The Latency Problem",
      "2 — Network Architecture Components",
      "2.1 Core Components",
      "2.2 Authority and Ownership",
      "3 — State Snapshot System",
      "3.1 Snapshot Structure",
      "3.2 Change Detection via Dirty Flags",
      "3.3 Snapshot Ring Buffer",
      "4 — Client-Side Prediction",
      "4.1 Input Buffering and Command Pattern",
      "4.2 Sending Inputs to Server",
      "5 — Server Reconciliation",
      "5.1 Reconciliation on State Mismatch",
      "5.2 World State History",
      "6 — Entity Interpolation",
      "6.1 Interpolation Buffer",
      "7 — Lag Compensation",
      "7.1 Server-Side Rewind",
      "7.2 Alternate: Advantage and Disadvantage",
      "8 — Interest Management",
      "8.1 Area of Interest (AoI)",
      "8.2 Dynamic Interest Set Changes",
      "9 — Bandwidth Optimization",
      "9.1 Quantization",
      "9.2 Variable-Rate Updates",
      "9.3 Priority Accumulator",
      "10 — Clock Synchronization",
      "10.1 RTT Estimation",
      "10.2 Client-Side Tick Counting",
      "11 — Networked Physics",
      "11.1 Non-Deterministic (Server-Authoritative)",
      "11.2 Deterministic (Peer-Authoritative)",
      "12 — ECS Replication Pipeline",
      "12.1 Marking Components for Replication",
      "12.2 Serialization and Deserialization",
      "12.3 Snapshot Building Pipeline",
      "13 — Common Pitfalls",
      "13.1 Floating-Point Determinism",
      "13.2 Entity Spawn Order",
      "13.3 Feedback Loops from Reconciliation",
      "13.4 Bandwidth Spikes on Player Join",
      "13.5 Cheating via Input Manipulation",
      "14 — Testing & Debugging",
      "14.1 Simulating Latency and Packet Loss",
      "14.2 Network Visualization Overlay",
      "14.3 Determinism Verification",
      "Further Reading"
    ]
  },
  {
    "id": "monogame-arch/G75",
    "title": "G75 — MonoGame.Extended Library Integration",
    "description": "MonoGame.Extended is the most widely-used community library for MonoGame, providing production-ready implementations ...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 16684,
    "sections": [
      "Table of Contents",
      "1 — What is MonoGame.Extended?",
      "What it provides",
      "When to use it vs. building custom",
      "2 — Installation and Setup",
      "NuGet packages",
      "Version compatibility",
      "Minimal setup in Game1",
      "3 — OrthographicCamera",
      "Viewport adapters",
      "Camera usage",
      "Screen-to-world conversion",
      "4 — Sprite Animations",
      "SpriteSheet and AnimatedSprite",
      "Aseprite integration",
      "5 — Screen Management",
      "Setup",
      "Defining screens",
      "Screen transitions",
      "6 — Tilemap System (v6.0)",
      "Key improvements over the legacy system",
      "Loading a Tiled map (v6.0)",
      "Accessing tile data",
      "Object layers",
      "Legacy Tiled support",
      "7 — Collision Detection",
      "8 — Particles",
      "9 — Tweening",
      "Common easing functions",
      "10 — ECS Integration Patterns",
      "Camera as a shared resource",
      "AnimatedSprite as a component wrapper",
      "When NOT to wrap in ECS",
      "11 — Performance Considerations",
      "12 — Common Pitfalls"
    ]
  },
  {
    "id": "monogame-arch/G76",
    "title": "G76 — Inventory & Item Systems",
    "description": "Inventory systems are a core gameplay feature in RPGs, survival games, looters, and many other genres. This guide cov...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 24723,
    "sections": [
      "Table of Contents",
      "1 — Architecture Overview",
      "2 — Item Definition Database",
      "Loading from JSON",
      "Example JSON data file",
      "3 — Item Instance vs Definition",
      "4 — Slot-Based Inventory Container",
      "5 — Item Stacking",
      "Splitting Stacks",
      "Merging Stacks",
      "6 — Equipment Slots",
      "7 — ECS Integration with Arch",
      "8 — Inventory UI Patterns",
      "9 — Drag-and-Drop & Slot Swapping",
      "10 — Persistence & Serialization",
      "11 — Loot Tables & Item Generation",
      "12 — Common Pitfalls"
    ]
  },
  {
    "id": "monogame-arch/G77",
    "title": "G77 — ECS Event & Messaging Systems",
    "description": "How to decouple ECS systems using event channels, tag components, and deferred command buffers in MonoGame + Arch ECS...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 14263,
    "sections": [
      "The Problem: System-to-System Communication",
      "Strategy 1: Tag Components as Events",
      "Event Definition",
      "Producer System (adds the tag)",
      "Consumer System (reacts to the tag)",
      "Pros and Cons",
      "Strategy 2: Event Components with Data",
      "Producer",
      "Consumer",
      "Strategy 3: World-Level Event Queues",
      "Event Queue Implementation",
      "Registration as World Resource",
      "Event Swap System (runs first every frame)",
      "Publishing Events",
      "Consuming Events",
      "Strategy 4: Deferred Command Buffers",
      "When to Use CommandBuffer vs Direct World Operations",
      "System Execution Order",
      "Registering System Order in Arch",
      "Common Mistakes",
      "1. Consuming Events Before They're Produced",
      "2. Forgetting to Clean Up Event Tags",
      "3. Modifying Entities During Query Iteration",
      "4. Event Storms",
      "5. Using C# Events/Delegates in ECS",
      "Choosing the Right Strategy"
    ]
  },
  {
    "id": "monogame-arch/G78",
    "title": "G78 — Gum Hot Reload & Editor Workflow",
    "description": "How to use the Gum visual editor and GumCLI alongside your MonoGame project for rapid UI iteration. Covers the editor...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 9996,
    "sections": [
      "Why an Editor Workflow Matters",
      "Setting Up the Gum Tool",
      "Installation",
      "Project Structure",
      "Loading a Gum Project in MonoGame",
      "Hot Reload Setup",
      "Enabling Hot Reload",
      "Workflow",
      "What Hot Reload Handles",
      "Performance Consideration",
      "GumCLI",
      "Installation",
      "Common Commands",
      "NineSlice Tiling",
      "Basic NineSlice Setup",
      "Middle Tiling (March 2026)",
      "Editor-to-Code Roundtrip Patterns",
      "Pattern 1: Editor Layout, Code Behavior",
      "Pattern 2: Component Library in Editor, Assembly in Code",
      "Pattern 3: States for Animation in Editor",
      "Production Checklist",
      "Common Pitfalls"
    ]
  },
  {
    "id": "monogame-arch/G79",
    "title": "G79 — Content Builder Project System (MonoGame 3.8.5+)",
    "description": "How to use MonoGame's new Content Builder Project system introduced in 3.8.5. This replaces the MGCB Editor and the M...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 9787,
    "sections": [
      "What Changed and Why",
      "The Old Way (MGCB Editor + Builder Task)",
      "The New Way (Content Builder Project)",
      "Creating a Content Builder Project",
      "Scaffold the Project",
      "Add to Your Solution",
      "Project Structure After Setup",
      "The Builder Class",
      "Glob Patterns",
      "Processor Parameters",
      "Building Content",
      "Configuring Output Directory",
      "Migrating from MGCB Editor",
      "Step 1: Remove Old References",
      "Step 2: Create the Content Builder Project",
      "Step 3: Move Assets",
      "Step 4: Translate Your .mgcb File",
      "Step 5: Uninstall the MGCB Editor Tool",
      "Integrating with Your Build",
      "Option A: Manual Build Step",
      "Option B: MSBuild Target",
      "Option C: CI Pipeline",
      "Advantages Over MGCB Editor",
      "Common Importers and Processors",
      "Availability"
    ]
  },
  {
    "id": "monogame-arch/G7",
    "title": "G7 — Input Handling",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 11185,
    "sections": [
      "1 Setup & Core API",
      "2 Input Abstraction Layer",
      "3 Key Rebinding System",
      "4 Gamepad: Dead Zones & Analog",
      "5 Touch Input",
      "6 Input Recording & Playback",
      "7 Simultaneous Keyboard + Gamepad",
      "8 Input Priority & Consumption"
    ]
  },
  {
    "id": "monogame-arch/G80",
    "title": "G80 — CI/CD & Automated Builds",
    "description": "How to set up continuous integration and delivery pipelines for MonoGame games. Covers GitHub Actions, GitLab CI, and...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 11040,
    "sections": [
      "Why CI/CD for Game Projects?",
      "GitHub Actions: Complete Pipeline",
      "Basic Build + Test",
      "Content Pipeline in CI",
      "OpenGL/Vulkan on Headless Linux",
      "GitLab CI: Complete Pipeline",
      "Platform-Specific Build Configurations",
      "Multi-Platform Project Structure",
      "Build Matrix for All Platforms",
      "NativeAOT Builds in CI",
      "NativeAOT Trimming Issues",
      "Automated Release Workflow",
      "Content Pipeline Caching",
      "Common CI Pitfalls",
      "1. Missing MGCB Tool Version",
      "2. Font Compilation on Linux",
      "3. Effect/Shader Compilation",
      "4. Large Binary Assets"
    ]
  },
  {
    "id": "monogame-arch/G81",
    "title": "G81 — NativeAOT Publishing & Trimming",
    "description": "How to publish MonoGame games as NativeAOT-compiled single-file executables. Covers project configuration, trimming c...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 10873,
    "sections": [
      "Why NativeAOT for Games?",
      "Enabling NativeAOT",
      "Project Configuration",
      "Publishing",
      "Content Pipeline Compatibility",
      "The Reflection Problem",
      "Explicit Reader Registration",
      "MonoGame.Extended Trimming Support",
      "Trimming Analysis",
      "Enabling Warnings",
      "Common Warning Patterns and Fixes",
      "Rd.xml for Preserving Types",
      "Platform-Specific Considerations",
      "Windows",
      "Linux",
      "macOS",
      "Console Targets",
      "Build Size Optimization",
      "Baseline Comparison",
      "Further Size Reduction",
      "Testing NativeAOT Builds",
      "What to Watch For",
      "Development Workflow"
    ]
  },
  {
    "id": "monogame-arch/G82",
    "title": "G82 — MonoGame 3.8.5 StarterKit Templates & New APIs",
    "description": "What's new in MonoGame 3.8.5 beyond the Content Builder and Vulkan/DX12 backends (covered in G72). This guide covers ...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 10161,
    "sections": [
      "StarterKit Templates",
      "What's Included",
      "Installing Templates",
      "Solution Format: slnx",
      "Extended GamePad Support (Up to 8 Controllers)",
      "What Changed",
      "Practical Pattern: Dynamic Player Join",
      "Migration Note",
      "HSL/HSV Color Conversion APIs",
      "Why HSL/HSV Matters for Games",
      "API Usage",
      "Pattern: Damage Flash with HSL",
      "NetStandard 2.1 Support",
      "Project Setup",
      "New Random Implementation",
      "When to Use",
      "Known Issues (Preview Status)",
      "Summary"
    ]
  },
  {
    "id": "monogame-arch/G83",
    "title": "G83 — Vulkan & DirectX 12 Backend Preview (DesktopVK / DesktopDX)",
    "description": "MonoGame 3.8.5 introduces preview support for two new rendering backends: DesktopVK (Vulkan) and DesktopDX (DirectX 1...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 9240,
    "sections": [
      "Why New Backends?",
      "Creating a Project",
      "Using StarterKit Templates (Recommended)",
      "From Source (Advanced)",
      "DesktopVK (Vulkan) — Current Status",
      "What Works",
      "Known Limitations (as of March 2026)",
      "Vulkan Validation Layer Setup",
      "DesktopDX (DirectX 12) — Current Status",
      "Shader Compilation",
      "Custom Shader Workflow",
      "Migration from DesktopGL",
      "Step-by-Step",
      "What Might Break",
      "Performance Expectations",
      "Recommendations",
      "Timeline"
    ]
  },
  {
    "id": "monogame-arch/G83",
    "title": "G83 — Vulkan & DirectX 12 Graphics Backends",
    "description": "MonoGame 3.8.5 introduces native Vulkan and DirectX 12 graphics backends alongside the existing OpenGL and DirectX 11...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 8582,
    "sections": [
      "Backend Overview",
      "Creating a New Project with VK/DX12",
      "Using StarterKit Templates",
      "Using Source/Binary References",
      "Switching an Existing Project",
      "Step 1 — Update NuGet References",
      "Step 2 — Update Content Pipeline",
      "Step 3 — Test Rendering",
      "Vulkan Backend Details",
      "Requirements",
      "What Works",
      "Known Issues (Preview.2)",
      "DirectX 12 Backend Details",
      "Requirements",
      "Architecture Differences from DX11",
      "What Changes for Game Code",
      "Multi-Backend Projects",
      "Performance Considerations",
      "When to Use Which Backend",
      "Troubleshooting"
    ]
  },
  {
    "id": "monogame-arch/G84",
    "title": "G84 — Compute Shaders: GPU Particles, Culling & Post-Processing",
    "description": "MonoGame's DesktopVK (Vulkan) and DesktopDX (DirectX 12) backends unlock compute shaders — general-purpose GPU progra...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 12521,
    "sections": [
      "Prerequisites",
      "Core Concepts",
      "Writing an HLSL Compute Shader",
      "C# API: Buffers, Dispatch, and Readback",
      "Creating a StructuredBuffer",
      "Dispatching the Compute Shader",
      "Reading Data Back to CPU (When Needed)",
      "Pattern: GPU Particle System",
      "Pattern: GPU Frustum Culling",
      "Pattern: Compute Post-Processing",
      "Performance Guidelines",
      "Common Pitfalls",
      "When to Use Compute vs CPU"
    ]
  },
  {
    "id": "monogame-arch/G85",
    "title": "G85 — Headless Testing & CI Pipeline Patterns",
    "description": "Running MonoGame tests in CI/CD environments without a GPU. Covers headless GraphicsDevice patterns, test fixture str...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 12021,
    "sections": [
      "The Headless Problem",
      "Project Structure for Testable Separation",
      "Logic Test Project (.csproj)",
      "Render Test Project (.csproj)",
      "Designing Graphics-Free Game Systems",
      "Pattern: Separate Logic from Rendering",
      "Pattern: Interface Abstraction for Testable Services",
      "Headless GraphicsDevice Fixture (Windows DirectX)",
      "GitHub Actions Configuration",
      "GitLab CI Configuration",
      "Content Pipeline Testing",
      "Strategy 1: Test Content Build Only",
      "Strategy 2: Mock ContentManager for Logic Tests",
      "Test Categories and Filtering",
      "Summary"
    ]
  },
  {
    "id": "monogame-arch/G86",
    "title": "G86 — Async Content Loading & Texture Streaming",
    "description": "How to load game content asynchronously in MonoGame without stalling the game loop. Covers background thread loading ...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 11612,
    "sections": [
      "The Problem: Main-Thread Loading Stalls",
      "Architecture: Split I/O from GPU Upload",
      "Phase 1: Background I/O and Decoding",
      "Phase 2: Main-Thread GPU Upload",
      "Why Not Texture2D.FromStream on a Background Thread?",
      "ContentManager Thread Safety",
      "Streaming Large Worlds: Zone-Based Loading",
      "Zone Manager Pattern",
      "Loading Priority",
      "Loading Screens and Progress Tracking",
      "Placeholder Assets and LOD Transitions",
      "Memory Budget and Disposal",
      "Platform-Specific Notes",
      "Checklist"
    ]
  },
  {
    "id": "monogame-arch/G87",
    "title": "G87 — 3D Spatial Audio & Audio Middleware Integration",
    "description": "How to implement true 3D positional audio in MonoGame using the built-in Apply3D API and FMOD Studio's 3D event syste...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 15316,
    "sections": [
      "MonoGame Built-in 3D Audio (Apply3D)",
      "Core API",
      "Critical Requirements",
      "2D Game Coordinate Mapping",
      "Strategy: Flatten onto the XY Plane",
      "Why Not Just Use Pan + Volume?",
      "Managing Many Spatial Sources",
      "Hybrid Pool with Distance Culling",
      "Priority System",
      "FMOD 3D Event Positioning",
      "Setting 3D Attributes on Events",
      "FMOD Advantages over Built-in Apply3D",
      "Occlusion (Walls Blocking Sound)",
      "Raycast-Based Occlusion",
      "Reverb Zones (FMOD)",
      "ECS Integration Pattern (Arch)",
      "Performance Guidelines",
      "Decision Guide: Built-in vs FMOD"
    ]
  },
  {
    "id": "monogame-arch/G88",
    "title": "G88 — Dependency Injection & Service Architecture",
    "description": "How to structure service dependencies in a MonoGame project. Covers MonoGame's built-in GameServiceContainer, modern ...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 13914,
    "sections": [
      "The Problem: Wiring Services Together",
      "Option 1: GameServiceContainer (Built-in)",
      "Registration",
      "Retrieval",
      "Strengths and Weaknesses",
      "When to Use",
      "Option 2: Microsoft.Extensions.DependencyInjection",
      "Setup",
      "Configuration",
      "Constructor Injection",
      "Service Implementation with Dependencies",
      "Strengths and Weaknesses",
      "Option 3: IHostedService (Full .NET Host)",
      "Setup",
      "Implementation",
      "When to Use IHostedService",
      "Hybrid Approach: DI at the Edges, Direct References in Hot Paths",
      "Principle: DI for Setup, Direct Access for Gameplay",
      "What NOT to Inject",
      "What TO Inject",
      "ECS System Factory with DI (Arch)",
      "Testing with DI",
      "Decision Matrix",
      "Common Pitfalls"
    ]
  },
  {
    "id": "monogame-arch/G89",
    "title": "G89 — Post-Processing Pipeline",
    "description": "How to build a composable post-processing stack in MonoGame using render target chains. Covers the architecture for a...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 13580,
    "sections": [
      "The Problem: Bolting Effects Onto SpriteBatch",
      "Architecture: Render Target Chain",
      "Base Types",
      "The Pipeline Manager",
      "Common Effects",
      "Gaussian Blur",
      "Bloom",
      "Vignette",
      "Color Grading (LUT-based)",
      "Integration with Game Loop",
      "Performance Considerations",
      "Extending the Pipeline"
    ]
  },
  {
    "id": "monogame-arch/G8",
    "title": "G8 — Content Pipeline",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 55459,
    "sections": [
      "1. MGCB Setup & Configuration",
      "1.1 Installing the MGCB Tools",
      "1.2 The .mgcb File Format",
      "1.3 MGCB Editor GUI",
      "1.4 CLI Build Commands",
      "1.5 .csproj Integration",
      "2. Content Importers & Processors Explained",
      "2.1 Built-in Importers",
      "2.2 Built-in Processors",
      "2.3 TextureProcessor Parameters",
      "3. Writing Custom Content Importers",
      "3.1 Pipeline Extension Project Setup",
      "3.2 Custom Importer Example — Tiled Collision Data",
      "3.3 Custom Processor",
      "3.4 Custom Content Writer",
      "3.5 Runtime Content Reader",
      "3.6 Registering the Pipeline Extension",
      "4. Aseprite Pipeline",
      "4.1 MonoGame.Aseprite Setup",
      "4.2 Adding Aseprite Files to Content",
      "4.3 Runtime Loading — Key Types",
      "4.4 Loading and Creating Animations",
      "4.5 Animation Playback",
      "4.6 Animation Events",
      "4.7 ECS Integration Pattern",
      "4.8 Aseprite Workflow Tips",
      "5. Tiled Map Pipeline",
      "5.1 MonoGame.Extended Tiled Setup",
      "5.2 Adding Tiled Maps to Content",
      "5.3 Loading and Rendering Tiled Maps",
      "5.4 Rendering Specific Layers",
      "5.5 Object Layers — Spawn Points, Triggers, Regions",
      "5.6 Collision from Tiled",
      "5.7 Tiled Workflow Tips",
      "6. Texture Atlas Packing",
      "6.1 Why Use Texture Atlases",
      "6.2 MonoGame.Extended Texture Atlas (JSON Hash)",
      "6.3 TexturePacker Workflow",
      "6.4 Manual Atlas with Source Rectangles",
      "6.5 Atlas Organization Strategy",
      "7. Font Pipeline",
      "7.1 Option A: MGCB SpriteFont (Build-Time)",
      "7.2 Option B: FontStashSharp (Runtime — Recommended)",
      "7.3 FontStashSharp — Multiple Font Weights",
      "7.4 Comparison Table",
      "7.5 FontStashSharp Gotchas",
      "8. Audio Content",
      "8.1 Audio Formats in MonoGame",
      "8.2 Sound Effects (.wav → SoundEffect)",
      "8.3 Music (.ogg → Song)",
      "8.4 .wav vs .ogg Decision Guide",
      "8.5 Audio Content Organization",
      "9. JSON/XML Data Loading",
      "9.1 Pattern: Copy + Runtime Deserialize",
      "9.2 Loading JSON with System.Text.Json",
      "9.3 Dialogue System Example",
      "9.4 Wave/Spawn Data Example",
      "9.5 XML Loading (Legacy or XNA Content)",
      "9.6 Resources Folder Pattern",
      "10. Hot-Reload Patterns",
      "10.1 File Watcher for Rapid Iteration",
      "10.2 JSON Data Hot-Reload",
      "10.3 Limitations",
      "11. Content Organization Best Practices",
      "11.1 Recommended Folder Structure",
      "11.2 Naming Conventions",
      "11.3 Content Pipeline Decisions",
      "12. iOS & Android Content Differences",
      "12.1 What's the Same (Almost Everything)",
      "12.2 File Access — The Critical Difference",
      "12.3 Platform-Specific Content Settings",
      "12.4 iOS-Specific Notes",
      "12.5 Android-Specific Notes",
      "13. Build Automation",
      "13.1 MSBuild Targets for Content",
      "13.2 Texture Atlas Build Automation",
      "13.3 Content Build in CI/CD",
      "13.4 Platform Matrix Build",
      "14. Common Content Pipeline Issues",
      "14.1 Troubleshooting Table",
      "14.2 Debugging Content Builds",
      "Quick Reference",
      "Content Loading Cheat Sheet",
      "Pipeline Strategy Summary"
    ]
  },
  {
    "id": "monogame-arch/G90",
    "title": "G90 — ImGui Debug Overlay & Entity Inspector",
    "description": "How to integrate Dear ImGui into a MonoGame project for runtime debug tools, entity inspectors, and performance overl...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 11493,
    "sections": [
      "Why ImGui for Game Debugging",
      "Setup",
      "NuGet Packages",
      "Initialization",
      "Render Loop Integration",
      "Building Debug Panels",
      "Performance Overlay",
      "Tweakable Parameters",
      "ECS Entity Inspector (Arch)",
      "Entity List",
      "Component Inspector",
      "Reflection-Based Auto-Inspector (Optional)",
      "Input Handling",
      "Organizing Debug Panels",
      "Stripping from Release Builds"
    ]
  },
  {
    "id": "monogame-arch/G91",
    "title": "G91 — MonoGame 3.8.5 Migration Guide",
    "description": "How to migrate an existing MonoGame project from 3.8.2–3.8.4 to the 3.8.5 release series. Covers the new Content Buil...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 10232,
    "sections": [
      "Release Timeline",
      "Step 1: Update NuGet Packages",
      "Standard Desktop (OpenGL)",
      "Windows DirectX (existing DX11)",
      "Preview Backends (Vulkan / DX12)",
      "Installing Preview Packages",
      "Step 2: Migrate to the Content Builder Project",
      "What Changes",
      "Migration Steps",
      "Step 3: Platform-Specific Changes",
      "Android",
      "NativeAOT",
      "Step 4: Opting Into Vulkan or DX12 (Optional)",
      "Creating a Multi-Backend Solution",
      "API Differences",
      "Common Migration Pitfalls",
      "Rollback Plan",
      "Checklist"
    ]
  },
  {
    "id": "monogame-arch/G92",
    "title": "G92 — Input Action Mapping & Rebinding",
    "description": "How to build a hardware-agnostic input action mapping layer in MonoGame. Covers defining logical actions, binding the...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 16938,
    "sections": [
      "The Problem: Hardcoded Input",
      "Architecture Overview",
      "Step 1: Define Logical Actions",
      "Step 2: Input Binding Data",
      "Step 3: The Action Map",
      "Usage in Game Logic",
      "Step 4: Runtime Rebinding",
      "Step 5: Serialization (Save/Load Bindings)",
      "Example JSON Output",
      "Step 6: Default Binding Profiles",
      "Analog Axis Support",
      "Integration with ECS (Arch)",
      "Rebinding UI Flow",
      "Gotchas",
      "Summary"
    ]
  },
  {
    "id": "monogame-arch/G93",
    "title": "G93 — ECS Library Integration (Arch & Frent)",
    "description": "How to integrate dedicated C# ECS libraries into a MonoGame project. Covers the two dominant storage strategies (arch...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 13788,
    "sections": [
      "Why a Dedicated ECS Library?",
      "Archetype vs. Sparse Set: The Core Trade-off",
      "Archetype Storage",
      "Sparse Set Storage",
      "Library Overview",
      "Arch (Archetype + Chunks)",
      "Frent (Hybrid Archetype + Sparse Set)",
      "Arch: Setup & Integration",
      "World Creation",
      "Component Design",
      "Creating Entities",
      "Writing Systems with Queries",
      "Structural Changes (Add/Remove Components)",
      "MonoGame Game Loop Integration",
      "Frent: Setup & Integration",
      "World and Entity Creation",
      "System Iteration",
      "Choosing Between Them",
      "Decision Heuristic",
      "Component Design Guidelines",
      "Shared Resources (Non-Entity Data)",
      "Performance Tips",
      "Gotchas",
      "Summary"
    ]
  },
  {
    "id": "monogame-arch/G94",
    "title": "G94 — Runtime Texture Atlas & SpriteBatch Optimization",
    "description": "How to pack sprites into texture atlases at runtime, minimize draw calls via SpriteBatch batching, and diagnose GPU-b...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 15520,
    "sections": [
      "Why Atlases Matter",
      "Build-Time Atlases (Content Pipeline)",
      "Manual Atlas with XML Descriptor",
      "Atlas Loader",
      "Usage",
      "Runtime Atlas Packing",
      "Rectangle Packing Algorithm",
      "Usage",
      "SpriteBatch Sort Modes & Batching",
      "The Golden Rule",
      "Practical Batching Strategy",
      "Measuring Draw Calls",
      "Performance Targets",
      "Atlas Size Guidelines",
      "Multi-Atlas Strategy",
      "Gotchas",
      "Combining with ECS",
      "Summary"
    ]
  },
  {
    "id": "monogame-arch/G95",
    "title": "G95 — Render Target Management & Off-Screen Rendering",
    "description": "How to manage RenderTarget2D objects in MonoGame for off-screen rendering scenarios: minimaps, split-screen, resoluti...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 12937,
    "sections": [
      "Why Render Targets?",
      "RenderTarget2D Lifecycle",
      "Creation",
      "Disposal",
      "The SetRenderTarget Pattern",
      "Common Pitfalls",
      "1. Auto-Clearing on Bind",
      "2. Depth Buffer Sharing",
      "3. Reading Back Pixel Data",
      "Resolution-Independent Rendering",
      "Usage in Game",
      "Split-Screen Pattern",
      "Render Target Pool",
      "Performance Guidelines",
      "When to Use Render Targets vs. Viewports"
    ]
  },
  {
    "id": "monogame-arch/G96",
    "title": "G96 — Graphics State Management",
    "description": "How to manage GraphicsDevice render state in MonoGame — BlendState, DepthStencilState, RasterizerState, and SamplerSt...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 11555,
    "sections": [
      "The Four State Objects",
      "Built-In Presets",
      "BlendState",
      "DepthStencilState",
      "RasterizerState",
      "SamplerState",
      "Setting State via SpriteBatch",
      "Creating Custom States",
      "Custom BlendState: Multiply Blending",
      "Custom RasterizerState: Scissor Test",
      "Custom SamplerState: Wrapping Tile Background",
      "Common Bugs and Fixes",
      "1. Mutating a Bound State",
      "2. SpriteBatch Overwriting Your States",
      "3. Sampler State on Wrong Slot",
      "State Change Minimization",
      "Sorting Strategy (2D)",
      "SpriteBatch Sort Modes",
      "State Snapshot Helper",
      "Quick Reference: Choosing States"
    ]
  },
  {
    "id": "monogame-arch/G97",
    "title": "G97 — Multiple Render Targets (MRT) & Deferred Rendering",
    "description": "How to render to multiple textures simultaneously using MonoGame's SetRenderTargets() (plural) API. Covers the MRT bi...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 12108,
    "sections": [
      "What Are Multiple Render Targets?",
      "MonoGame MRT API",
      "Binding Multiple Targets",
      "Binding with RenderTargetBinding",
      "HLSL: Writing to Multiple Targets",
      "Output Structure",
      "G-Buffer Fill Shader",
      "2D Deferred Lighting with MRT",
      "G-Buffer Layout (2D)",
      "2D G-Buffer Fill",
      "2D Lighting Pass",
      "Full Deferred Pipeline (Draw Order)",
      "Performance Considerations",
      "Platform Compatibility",
      "Debugging MRT"
    ]
  },
  {
    "id": "monogame-arch/G98",
    "title": "G98 — SpriteBatch Custom Shader Batching",
    "description": "How to apply per-sprite shader parameters without breaking SpriteBatch batching. Covers the core limitation, workarou...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 9638,
    "sections": [
      "The Problem: One Effect Per Batch",
      "Strategy 1: Multiple Begin/End Pairs (Simple, Low Count)",
      "Strategy 2: Master Effect with Branching (Medium Complexity)",
      "Encoding Sub-Effect ID in Vertex Color",
      "Encoding in Vertex Color Channels",
      "Strategy 3: Custom Vertex Type with DrawUserIndexedPrimitives",
      "Define a Custom Vertex",
      "Build Quad Vertices Per Sprite",
      "Draw Call",
      "Strategy 4: Render-Target Compositing (Post-Process Per Layer)",
      "Decision Matrix",
      "Performance Notes",
      "Further Reading"
    ]
  },
  {
    "id": "monogame-arch/G99",
    "title": "G99 — Source Generators & AOT-Safe Serialization",
    "description": "How to use C# source generators to eliminate reflection-based serialization in MonoGame projects. Covers AOT-safe JSO...",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 10348,
    "sections": [
      "Why This Matters for MonoGame",
      "System.Text.Json Source Generation",
      "Step 1: Define Your Save Data Types",
      "Step 2: Create a Serialization Context",
      "Step 3: Serialize and Deserialize",
      "Handling MonoGame Types",
      "Option A: DTOs at the Boundary (Recommended)",
      "Option B: Custom JsonConverter with Source Gen",
      "Option C: MemoryPack (Zero-Copy, Source-Generated)",
      "Source Generators for Game Configuration",
      "Auto-Generating Content Manifest Entries",
      "Enum-to-String Without Reflection",
      "Trimming and Publish Configuration",
      "Checklist: AOT-Safe Serialization",
      "Further Reading"
    ]
  },
  {
    "id": "monogame-arch/G9",
    "title": "G9 — Networking",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 79201,
    "sections": [
      "1. LiteNetLib Setup",
      "1.1 Server Setup",
      "1.2 Client Setup",
      "1.3 Packet Type Enums",
      "1.4 Delivery Methods",
      "2. Packet Serialization",
      "2.1 NetDataWriter / NetDataReader Patterns",
      "2.2 INetSerializable Interface",
      "2.3 NetPacketProcessor for Typed Packets",
      "2.4 Input Bitmask Encoding",
      "3. Client-Server Authority Model",
      "3.1 Server Game Loop",
      "3.2 Server Authority Validation Patterns",
      "4. Client-Side Prediction and Server Reconciliation",
      "4.1 The Problem",
      "4.2 Full Prediction System",
      "4.3 Usage in Client Game Loop",
      "5. Interpolation and Extrapolation",
      "5.1 Snapshot Interpolation Buffer",
      "5.2 RemoteEntity Wrapper",
      "5.3 Extrapolation with Velocity",
      "6. Rollback Netcode (Fighting Games)",
      "6.1 Core Concepts",
      "6.2 Ring Buffer for Game State",
      "6.3 Game State Snapshot",
      "6.4 Full Rollback Manager",
      "6.5 Deterministic Simulation Function",
      "6.6 Network Transport for Rollback",
      "7. Bandwidth Reduction Techniques",
      "7.1 Delta Compression",
      "7.2 Quantization",
      "7.3 Interest Management",
      "7.4 Adaptive Send Rate",
      "8. Lobby and Matchmaking",
      "8.1 Simple Lobby Server",
      "8.2 Client Lobby Screen",
      "8.3 Simple Matchmaking (Relay Server Pattern)",
      "9. NAT Traversal",
      "9.1 LiteNetLib NAT Punch-Through",
      "9.2 Fallback: Relay Server",
      "10. Fixed-Point Math for Deterministic Networking",
      "10.1 Why Fixed-Point?",
      "10.2 Fix64 Implementation (Q31.32)",
      "10.3 Fixed-Point Vector",
      "10.4 When to Use",
      "11. Arch ECS Integration",
      "11.1 Network Components",
      "11.2 NetworkSyncSystem (Server)",
      "11.3 ClientNetworkReceiveSystem",
      "11.4 InterpolationSystem",
      "11.5 Entity Spawn/Despawn Synchronization",
      "12. Genre-Specific Networking Patterns",
      "12.1 Fighting Game (Peer-to-Peer Rollback)",
      "12.2 Co-op Action Game (Client-Server)",
      "12.3 RTS (Deterministic Lockstep)",
      "12.4 Turn-Based Game (Request/Response)",
      "13. Complete Integration Example",
      "Quick Reference Tables",
      "Delivery Method Decision Matrix",
      "Bandwidth Budget (Per Entity Per Second)",
      "Genre Networking Summary",
      "Performance Checklist"
    ]
  },
  {
    "id": "monogame-arch/P12",
    "title": "P12 — Performance Budget Template",
    "description": "",
    "category": "guide",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 35014,
    "sections": [
      "Table of Contents",
      "1 — Why Budget Performance",
      "The Real Reasons to Budget",
      "The Rule",
      "2 — Target Hardware Specs",
      "Hardware Tiers",
      "What Each Tier Means for 2D",
      "3 — Frame Budget Breakdown",
      "The Budget",
      "Why These Numbers?",
      "Sub-Budgets Within Update (4ms total)",
      "Sub-Budgets Within Draw (8ms total)",
      "4 — Entity Count Budget",
      "Rough Entity Guidelines",
      "What Affects Entity Performance",
      "Practical Targets for a 2D Game",
      "5 — Draw Call Budget",
      "MonoGame's SpriteBatch",
      "Draw Call Targets",
      "How to Minimize Draw Calls",
      "6 — Memory Budget",
      "Texture Memory",
      "Texture Budget by Tier",
      "Atlas Sizing Strategy",
      "Audio Memory",
      "GC Pressure in C#",
      "7 — Content Budgets by Type",
      "Per-Screen / Per-Room Limits",
      "Per-Game Limits",
      "8 — Profiling Workflow",
      "When to Profile",
      "Profiling Tools",
      "Simple In-Game Profiling",
      "What to Look For",
      "9 — Common Performance Pitfalls in 2D",
      "🗑️ GC Allocations in Hot Loops",
      "🔗 LINQ in Update/Draw",
      "📝 String Concatenation",
      "🎨 Unnecessary SpriteBatch Flushes",
      "👻 Drawing Off-Screen Entities",
      "📦 Loading Content Every Frame",
      "🔄 Large Texture Swaps",
      "10 — Optimization Techniques",
      "Spatial Hashing for Collision",
      "Frustum / Camera Culling",
      "Object Pooling",
      "Texture Atlases",
      "Dirty Flag Pattern",
      "LOD for Particles",
      "Reducing State Changes",
      "11 — Platform-Specific Budgets",
      "Steam Deck",
      "Mobile (if targeting via FNA or similar)",
      "Web (if targeting via WASM)",
      "Older Hardware / Potato PCs",
      "12 — Performance Testing Checklist",
      "Regular Testing Routine",
      "13 — Budget Template",
      "Target Spec",
      "Frame Budget (16.67ms total)",
      "Entity Budget",
      "Draw Call Budget",
      "Memory Budget",
      "Content Budget",
      "Per-Screen Budgets",
      "Profiling Log",
      "Status Key",
      "Summary"
    ]
  },
  {
    "id": "monogame-arch-rules",
    "title": "MonoGame + Arch ECS — AI Rules",
    "description": "Engine-specific rules for projects using MonoGame with the Arch ECS framework. These supplement the engine-agnostic r...",
    "category": "reference",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 7281,
    "sections": [
      "Architecture Context",
      "Tech Stack",
      "Project Structure Conventions",
      "ECS Code Generation Rules",
      "Components: Pure Data Only",
      "Systems: Logic Lives Here",
      "Arch ECS Type Signatures",
      "C# Conventions",
      "Naming",
      "Patterns",
      "String and Logging",
      "Build and Run Commands",
      "MonoGame-Specific File Boundaries",
      "Content Pipeline",
      "File Responsibilities",
      "MonoGame Lifecycle",
      "Integration with Core Rules"
    ]
  },
  {
    "id": "monogame-arch/R1",
    "title": "R1 — Library Stack & Install Commands",
    "description": "",
    "category": "reference",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 6470,
    "sections": [
      "Tier 0: Core Architecture (always install)",
      "Tier 1: Essential Infrastructure (install for any game)",
      "Tier 2: Genre-Specific (install when needed)",
      "Tier 3: Nice-to-Have (optional)",
      "Serialization Note",
      "Custom Code (No Package Needed)",
      "Platform-Specific Packages",
      "iOS"
    ]
  },
  {
    "id": "monogame-arch/R2",
    "title": "R2 — Capability Matrix",
    "description": "Quick lookup: what provides what.",
    "category": "reference",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 5131,
    "sections": []
  },
  {
    "id": "monogame-arch/R3",
    "title": "R3 — Project Structure",
    "description": "",
    "category": "reference",
    "module": "monogame-arch",
    "engine": "MonoGame",
    "tier": "pro",
    "sizeBytes": 14262,
    "sections": [
      "Solution Layout",
      "Key Principles",
      "iOS Platform Details",
      "AppDelegate Pattern",
      "MyGame.iOS.csproj",
      "iCloud Drive Codesign Workaround",
      "LaunchScreen.storyboard",
      "Info.plist",
      "Build & Deploy Commands"
    ]
  },
  {
    "id": "phaser-arch/E1",
    "title": "E1 — Phaser 3 Architecture Overview",
    "description": "",
    "category": "architecture",
    "module": "phaser-arch",
    "engine": "Phaser",
    "tier": "pro",
    "sizeBytes": 11937,
    "sections": [
      "Core Philosophy: Scenes, Game Objects, and Config-Driven Design",
      "The Game Config: How Phaser Boots",
      "Key Config Decisions",
      "Scene Lifecycle: The Heart of Phaser",
      "Lifecycle Flow",
      "Multi-Scene Architecture",
      "Recommended Project Structure",
      "Rendering Architecture",
      "Physics Systems Comparison",
      "Asset Loading Strategy",
      "Input Handling",
      "Mobile and Deployment",
      "Mobile Considerations",
      "Deployment Options",
      "Key Takeaways for AI Code Generation"
    ]
  },
  {
    "id": "phaser-arch/G10",
    "title": "G10 — Phaser 3 Camera Systems & Effects",
    "description": "",
    "category": "guide",
    "module": "phaser-arch",
    "engine": "Phaser",
    "tier": "pro",
    "sizeBytes": 14702,
    "sections": [
      "Overview",
      "Accessing & Creating Cameras",
      "Viewport vs. World View",
      "Viewport (Canvas Space)",
      "World View (Game World Space)",
      "Scrolling & Centering",
      "Following a Target",
      "Lerp Values Explained",
      "Follow Update Event",
      "Bounds",
      "Common Bounds Pattern — Tilemap World",
      "Deadzones",
      "When to Use Deadzones",
      "Zoom",
      "Zoom + Bounds Interaction",
      "Rotation",
      "Camera Effects",
      "Fade",
      "Flash",
      "Shake",
      "Pan",
      "Zoom Effect (Animated)",
      "Rotate Effect (Animated)",
      "Effect Rules",
      "Multiple Cameras",
      "Split-Screen",
      "UI Camera Overlay",
      "Minimap Camera",
      "Coordinate Conversion",
      "Pixel Rounding",
      "Ignoring Game Objects",
      "Common Patterns",
      "Scene Transition with Fade",
      "Boss Reveal Pan",
      "Damage Feedback",
      "Cross-Framework Comparison",
      "Performance Notes"
    ]
  },
  {
    "id": "phaser-arch/G11",
    "title": "G11 — Phaser 3 Particle Effects & Visual FX",
    "description": "",
    "category": "guide",
    "module": "phaser-arch",
    "engine": "Phaser",
    "tier": "pro",
    "sizeBytes": 13484,
    "sections": [
      "Overview",
      "Creating a Particle Emitter",
      "Configuration Properties",
      "Value Formats",
      "Core Properties Reference",
      "Emitter Modes: Flow vs Explode",
      "Flow Mode (default)",
      "Explode Mode",
      "Emit Zones",
      "Random Zone",
      "Edge Zone",
      "Death Zones",
      "Gravity Wells",
      "Emitter Bounds",
      "Common VFX Recipes",
      "Fire / Torch",
      "Coin / Pickup Sparkle",
      "Smoke Trail (following a moving object)",
      "Particle Tinting and Colour Interpolation",
      "Performance Tips",
      "Blend Modes",
      "Controlling Emitters at Runtime",
      "Framework Comparison",
      "Next Steps"
    ]
  },
  {
    "id": "phaser-arch/G12",
    "title": "G12 — Phaser 3 Save/Load & Game State Persistence",
    "description": "",
    "category": "guide",
    "module": "phaser-arch",
    "engine": "Phaser",
    "tier": "pro",
    "sizeBytes": 14652,
    "sections": [
      "Overview",
      "Runtime State: Registry & Data Manager",
      "Using the Registry for Global State",
      "Reacting to State Changes",
      "Scene Data for Local State",
      "Designing Your Save Data",
      "Step 1: Define State Interfaces",
      "Step 2: Extract State from Game Objects",
      "Step 3: Restore State to Game Objects",
      "Storage Layer: localStorage",
      "Save Manager",
      "Wiring Save/Load into Scenes",
      "Autosave Pattern",
      "IndexedDB for Larger Data",
      "Settings Persistence (Separate from Saves)",
      "Mobile & Cross-Platform Considerations",
      "Framework Comparison: Save/Load",
      "Summary"
    ]
  },
  {
    "id": "phaser-arch/G13",
    "title": "G13 — Phaser 3 Tweens, Chains & Timelines",
    "description": "",
    "category": "guide",
    "module": "phaser-arch",
    "engine": "Phaser",
    "tier": "pro",
    "sizeBytes": 13663,
    "sections": [
      "Overview",
      "Basic Tweens",
      "Key Config Properties",
      "Tweening Multiple Properties",
      "Tweening From a Value",
      "Easing Functions",
      "Tween Events & Callbacks",
      "Promise-Based Completion",
      "TweenChains (Sequenced Animations)",
      "Chain Config Options",
      "Overlapping Tweens in a Chain",
      "Stagger (Group Animations)",
      "Stagger Variants",
      "Common Game Patterns",
      "Screen Shake",
      "Damage Flash",
      "Floating Pickup / Coin",
      "Score Pop-Up Text",
      "Controlling Tweens",
      "Killing All Tweens on a Target",
      "Performance Tips",
      "Migration: Timeline → TweenChain"
    ]
  },
  {
    "id": "phaser-arch/G14",
    "title": "G14 — Finite State Machines & Game Logic Patterns",
    "description": "",
    "category": "guide",
    "module": "phaser-arch",
    "engine": "Phaser",
    "tier": "pro",
    "sizeBytes": 17320,
    "sections": [
      "Overview",
      "The Problem: Conditional Spaghetti",
      "A Reusable FSM Class",
      "Why This Design?",
      "Player Character FSM",
      "Key Principles",
      "Enemy / AI State Machine",
      "Game Phase / Flow FSM",
      "Syncing Animations with States",
      "Hierarchical State Machines",
      "Debugging FSMs",
      "When NOT to Use an FSM",
      "Best Practices"
    ]
  },
  {
    "id": "phaser-arch/G15",
    "title": "G15 — Phaser 3 Multiplayer & Networking",
    "description": "",
    "category": "guide",
    "module": "phaser-arch",
    "engine": "Phaser",
    "tier": "pro",
    "sizeBytes": 21195,
    "sections": [
      "Overview",
      "Architecture: Authoritative Server",
      "Why Authoritative?",
      "The Trade-Off: Latency",
      "Server Libraries",
      "Project Setup",
      "Shared Types",
      "Client: NetworkManager",
      "Server: Minimal Game Loop",
      "Client: Game Scene with Networking",
      "Key Networking Techniques",
      "1. Client-Side Prediction",
      "2. Server Reconciliation",
      "3. Entity Interpolation",
      "Colyseus Integration",
      "Bandwidth Optimization",
      "Delta Compression",
      "Binary Serialization",
      "Tick Rate Tuning",
      "Common Pitfalls",
      "Testing Multiplayer Locally",
      "Further Reading"
    ]
  },
  {
    "id": "phaser-arch/G16",
    "title": "G16 — Phaser 3 Groups, Object Pooling & Containers",
    "description": "",
    "category": "guide",
    "module": "phaser-arch",
    "engine": "Phaser",
    "tier": "pro",
    "sizeBytes": 10275,
    "sections": [
      "Overview",
      "Groups",
      "Creating a Group",
      "Key Group Methods",
      "Physics Group Collisions",
      "Object Pooling with Groups",
      "The Pattern",
      "Custom Pooled Game Object",
      "Pooling Checklist",
      "Containers",
      "When to Use Containers",
      "When NOT to Use Containers",
      "Container Basics",
      "Container with Physics (Workaround)",
      "Container Size for Input",
      "Layers",
      "Comparison Table",
      "Common Mistakes"
    ]
  },
  {
    "id": "phaser-arch/G17",
    "title": "G17 — Phaser 3 Built-in FX & Custom Shader Pipelines",
    "description": "",
    "category": "guide",
    "module": "phaser-arch",
    "engine": "Phaser",
    "tier": "pro",
    "sizeBytes": 10114,
    "sections": [
      "Overview",
      "Pre FX vs Post FX",
      "Built-in Effects",
      "Glow",
      "Bloom",
      "Shadow",
      "Blur",
      "Other Built-in Effects",
      "Managing FX at Runtime",
      "Toggling Effects",
      "Stacking Multiple Effects",
      "Animating FX Properties",
      "Camera-Level FX",
      "Custom PostFX Pipelines",
      "Step 1: Write the Fragment Shader",
      "Step 2: Create the Pipeline Class",
      "Step 3: Register and Apply",
      "Step 4: Remove / Toggle",
      "Uniform Types Reference",
      "Performance Guidelines",
      "Common Mistakes"
    ]
  },
  {
    "id": "phaser-arch/G18",
    "title": "G18 — Phaser 3 Performance Optimization & Debugging",
    "description": "",
    "category": "guide",
    "module": "phaser-arch",
    "engine": "Phaser",
    "tier": "pro",
    "sizeBytes": 12592,
    "sections": [
      "Overview",
      "Measuring Performance",
      "FPS Counter",
      "Browser DevTools Profiling",
      "Rendering Optimizations",
      "1. Use Texture Atlases (Not Individual Images)",
      "2. Minimize Game Objects on the Display List",
      "3. Use Layers for Render Batching",
      "4. Prefer Sprites over Text",
      "Memory & GC Optimizations",
      "5. Object Pooling",
      "6. Cache References",
      "7. Clean Up on Scene Shutdown",
      "8. Avoid Creating Objects in update()",
      "CPU / Logic Optimizations",
      "9. Throttle Expensive Operations",
      "10. Spatial Partitioning for Large Worlds",
      "11. Use `runChildUpdate` Wisely",
      "Debugging Tools",
      "Built-in Physics Debug",
      "Scene Plugin Inspector",
      "Tracking Down Memory Leaks",
      "Performance Checklist",
      "Common Mistakes"
    ]
  },
  {
    "id": "phaser-arch/G1",
    "title": "G1 — Phaser 3 Scene Lifecycle & Management",
    "description": "",
    "category": "guide",
    "module": "phaser-arch",
    "engine": "Phaser",
    "tier": "pro",
    "sizeBytes": 13408,
    "sections": [
      "Overview",
      "Lifecycle Methods in Order",
      "1. constructor()",
      "2. init(data)",
      "3. preload()",
      "4. create()",
      "5. update(time, delta)",
      "Scene States",
      "When to Use Each",
      "Scene Transitions",
      "start vs. launch vs. switch",
      "Scene Order (Depth)",
      "Cross-Scene Communication",
      "Pattern 1: Scene Events (Recommended)",
      "Pattern 2: Event Bus (For Complex Games)",
      "Pattern 3: Scene Data Manager",
      "Cleanup and Memory Management",
      "The shutdown Event",
      "The destroy Event",
      "Common Memory Leak Sources",
      "Common Scene Architectures",
      "Linear Flow (Most Games)",
      "Multi-Level with Data Passing",
      "Persistent HUD with Parallel Scenes",
      "Comparison: Phaser Scenes vs. Other Frameworks",
      "Key Takeaways"
    ]
  },
  {
    "id": "phaser-arch/G2",
    "title": "G2 — Phaser 3 Physics Systems",
    "description": "",
    "category": "guide",
    "module": "phaser-arch",
    "engine": "Phaser",
    "tier": "pro",
    "sizeBytes": 19602,
    "sections": [
      "Overview",
      "Choosing a Physics System",
      "Arcade Physics",
      "Enabling Arcade Physics",
      "Body Types: Dynamic vs Static",
      "Velocity, Acceleration, and Drag",
      "Gravity",
      "Collision Shapes",
      "Colliders and Overlaps",
      "collider — Physical Collision Response",
      "overlap — Detection Only (No Physics Response)",
      "processCallback — Conditional Collision",
      "Physics Groups",
      "Static Groups (Platforms, Walls)",
      "Dynamic Groups (Enemies, Projectiles, Coins)",
      "Group vs Group Collision",
      "Tilemap Collision",
      "One-Way Platforms",
      "Matter.js Physics",
      "Enabling Matter.js",
      "Creating Matter Bodies",
      "Matter Collision Detection",
      "Constraints (Joints)",
      "Common Platformer Patterns",
      "Basic Platformer Controller (Arcade)",
      "Coyote Time and Jump Buffering",
      "Moving Platforms (Arcade)",
      "Running Both Systems Together",
      "Performance Tips",
      "Comparison: Physics Across Web Frameworks",
      "Key Takeaways"
    ]
  },
  {
    "id": "phaser-arch/G3",
    "title": "G3 — Phaser Input Handling",
    "description": "",
    "category": "guide",
    "module": "phaser-arch",
    "engine": "Phaser",
    "tier": "pro",
    "sizeBytes": 17946,
    "sections": [
      "Overview",
      "Architecture: How Input Flows",
      "Keyboard Input",
      "Cursor Keys (Arrow Keys + Shift/Space)",
      "Custom Key Bindings with `addKey()`",
      "Batch Key Registration with `addKeys()`",
      "Key Events (Event-Driven Approach)",
      "Preventing Default Browser Behavior",
      "Pointer Input (Mouse + Touch)",
      "Scene-Level Pointer Events",
      "Making Game Objects Interactive",
      "Interactive Events on Game Objects",
      "Drag and Drop",
      "Full Drag Lifecycle",
      "Gamepad Input",
      "Detecting Connection",
      "Reading Sticks and Buttons",
      "Gamepad Button Events",
      "Vibration / Haptic Feedback",
      "Multi-Input Patterns",
      "Pattern 1: Unified Movement (Keyboard + Gamepad)",
      "Pattern 2: Virtual Joystick (Mobile Touch)",
      "Pattern 3: Input Action Map",
      "Comparison: Input Systems Across Frameworks",
      "Key Takeaways"
    ]
  },
  {
    "id": "phaser-arch/G4",
    "title": "G4 — Phaser Sprites & Animation",
    "description": "",
    "category": "guide",
    "module": "phaser-arch",
    "engine": "Phaser",
    "tier": "pro",
    "sizeBytes": 16672,
    "sections": [
      "Overview",
      "Loading Sprite Sheets",
      "Loading Texture Atlases",
      "Creating Frame Animations",
      "From a Sprite Sheet",
      "From a Texture Atlas",
      "Playing Animations on Sprites",
      "Controlling Playback",
      "Preventing Animation Restart",
      "Animation Events",
      "Per-Sprite Events",
      "Global Events",
      "Animation Chaining",
      "Tweens",
      "Basic Tween",
      "Common Tween Properties",
      "Common Easing Functions",
      "Tween Chains (Timeline)",
      "Practical Patterns",
      "State-Based Animation Controller",
      "Sprite Flash on Damage",
      "Animated Coin Pickup with Tween",
      "Explosion with One-Shot Animation",
      "Framework Comparison",
      "Performance Tips",
      "Next Steps"
    ]
  },
  {
    "id": "phaser-arch/G5",
    "title": "Audio and Sound Management",
    "description": "Phaser's built-in Sound Manager provides a unified API across Web Audio and HTML5 Audio backends. The framework auto-...",
    "category": "guide",
    "module": "phaser-arch",
    "engine": "Phaser",
    "tier": "pro",
    "sizeBytes": 8014,
    "sections": [
      "Loading Audio Assets",
      "Playing Sounds",
      "Fire-and-Forget",
      "Persistent Sound Instances",
      "Browser Autoplay Policy",
      "Sound Instance Controls",
      "Sound Events",
      "Audio Sprites",
      "Markers",
      "Spatial Audio (Web Audio Only)",
      "Global Sound Manager Controls",
      "Audio Analysis and Visualization",
      "Disabling Audio",
      "Best Practices"
    ]
  },
  {
    "id": "phaser-arch/G6",
    "title": "Tilemaps and Level Design",
    "description": "Phaser has deep, built-in tilemap support. It reads JSON maps exported from the Tiled editor (or from Phaser Editor 2...",
    "category": "guide",
    "module": "phaser-arch",
    "engine": "Phaser",
    "tier": "pro",
    "sizeBytes": 10604,
    "sections": [
      "Tiled Editor Setup",
      "Loading Tilemap Assets",
      "Creating the Tilemap",
      "Tilemap Collision",
      "Collision by Tile Index",
      "Collision by Tiled Property",
      "Connecting to Arcade Physics",
      "Debug Rendering",
      "Object Layers",
      "Dynamic Tile Manipulation",
      "Camera and Layer Scrolling",
      "Parallax Scrolling",
      "Isometric, Hexagonal, and Staggered Maps",
      "Performance Tips",
      "Common Patterns",
      "Breakable Blocks",
      "One-Way Platforms",
      "Level Transitions",
      "Cross-Framework Comparison"
    ]
  },
  {
    "id": "phaser-arch/G7",
    "title": "UI and HUD Systems",
    "description": "Phaser provides three complementary approaches for building game UI: canvas-rendered game objects (Text, BitmapText, ...",
    "category": "guide",
    "module": "phaser-arch",
    "engine": "Phaser",
    "tier": "pro",
    "sizeBytes": 15723,
    "sections": [
      "Canvas-Based UI (Game Objects)",
      "Text",
      "BitmapText",
      "Containers for Composite UI",
      "Health Bars and Progress Indicators",
      "Simple Health Bar",
      "Entity Health Bar (Follows a Sprite)",
      "DOM Element UI",
      "Enabling DOM Elements",
      "Creating DOM Elements",
      "Referencing Existing HTML",
      "Dedicated HUD Scene (Overlay Pattern)",
      "rexUI Plugin",
      "Installation",
      "Plugin Registration",
      "Dialog Example",
      "Available rexUI Components",
      "Mobile and Touch Considerations",
      "Common Patterns",
      "Minimap",
      "Floating Damage Numbers",
      "Pause Menu",
      "Cross-Framework Comparison"
    ]
  },
  {
    "id": "phaser-arch/G8",
    "title": "G8 — Phaser Asset Loading & Preloader Scenes",
    "description": "",
    "category": "guide",
    "module": "phaser-arch",
    "engine": "Phaser",
    "tier": "pro",
    "sizeBytes": 27134,
    "sections": [
      "Overview",
      "The Preload Lifecycle",
      "Basic Asset Loading",
      "Images & Textures",
      "Audio",
      "Tilemaps",
      "Fonts & Text",
      "Data Files",
      "HTML & Other",
      "Building a Preloader Scene",
      "Load Events",
      "Texture Atlases",
      "JSON Hash Format (TexturePacker default)",
      "JSON Array Format",
      "Multi-Atlas Loading",
      "Pack Files",
      "Lazy Loading (Load on Demand)",
      "Per-Scene Loading",
      "On-Demand Loading in create() or update()",
      "Background Pre-Loading",
      "Unloading & Memory Management",
      "Error Handling & Fallbacks",
      "Asset Compression & Optimization",
      "Image Optimization",
      "Audio Optimization",
      "Loading Configuration",
      "Sprite Sheet Packing Tips",
      "Performance Tips",
      "Progressive Asset Loading Strategy",
      "Cross-Framework Comparison",
      "Phaser vs. Other HTML5 Frameworks",
      "Recommendation Matrix",
      "Summary"
    ]
  },
  {
    "id": "phaser-arch/G9",
    "title": "G9 — Phaser 3 Mobile Support & Deployment",
    "description": "",
    "category": "guide",
    "module": "phaser-arch",
    "engine": "Phaser",
    "tier": "pro",
    "sizeBytes": 12284,
    "sections": [
      "Overview",
      "Scale Manager Configuration",
      "Scale Modes",
      "Responding to Resize Events",
      "Fullscreen Support",
      "Mobile Touch Optimization",
      "Enable Multi-Touch",
      "Virtual Joystick Pattern",
      "Safe Area Insets",
      "Mobile Performance",
      "Renderer Selection",
      "Key Optimization Strategies",
      "Deployment: Static Web Hosting",
      "Build with Vite",
      "Recommended Hosts",
      "Deployment: Progressive Web App (PWA)",
      "Manifest File",
      "Service Worker",
      "Deployment: Native Apps with Capacitor",
      "Setup",
      "Key Considerations",
      "Alternative: Cordova",
      "Orientation Locking",
      "Deployment Checklist",
      "Framework Comparison: Scaling Approaches"
    ]
  },
  {
    "id": "phaser-arch-rules",
    "title": "Phaser 3 — AI Rules",
    "description": "Engine-specific rules for projects using Phaser 3. These supplement the engine-agnostic rules in docs/core/ai-workflo...",
    "category": "reference",
    "module": "phaser-arch",
    "engine": "Phaser",
    "tier": "pro",
    "sizeBytes": 4446,
    "sections": [
      "Architecture Context",
      "Tech Stack",
      "Project Structure Conventions",
      "Code Generation Rules",
      "Scenes: Always Extend Phaser.Scene",
      "Asset Loading: Only in preload()",
      "Physics: Prefer Arcade",
      "Audio: Provide Dual Formats",
      "Cross-Scene Communication: Use Events",
      "TypeScript: Use Phaser's Types",
      "Game Objects: Extend Phaser Classes",
      "Common Pitfalls"
    ]
  },
  {
    "id": "phaser-arch/R1",
    "title": "R1 — Phaser 3 API Quick Reference",
    "description": "",
    "category": "reference",
    "module": "phaser-arch",
    "engine": "Phaser",
    "tier": "pro",
    "sizeBytes": 12904,
    "sections": [
      "Game Configuration",
      "Scene Lifecycle",
      "Scene Manager (from within a Scene)",
      "Cross-Scene Data",
      "Asset Loading (in preload)",
      "Game Objects (in create/update)",
      "Sprites & Images",
      "Animations",
      "Text",
      "Graphics (shapes, lines, fills)",
      "Groups",
      "Physics (Arcade)",
      "Input",
      "Keyboard",
      "Pointer (Mouse / Touch)",
      "Tweens",
      "Camera",
      "Tilemaps",
      "Audio",
      "Timers & Events",
      "Useful Utilities"
    ]
  },
  {
    "id": "pixijs-arch/E1",
    "title": "E1 — PixiJS v8 Architecture Overview",
    "description": "",
    "category": "architecture",
    "module": "pixijs-arch",
    "engine": "PixiJS",
    "tier": "pro",
    "sizeBytes": 14573,
    "sections": [
      "Core Philosophy: Renderer First, Game Framework Second",
      "Application Bootstrap",
      "Key Bootstrap Decisions",
      "Scene Graph: Containers All the Way Down",
      "Parent-Child Transform Cascade",
      "Type-Safe Containers (v8 Feature)",
      "Asset Loading with Assets API",
      "Bundles and Manifests for Larger Games",
      "The Ticker: Game Loop",
      "Building a Game Loop Pattern",
      "Interaction and Input",
      "Pointer Events",
      "Event Modes",
      "Keyboard Input (DIY)",
      "Ecosystem: What You Pair with PixiJS",
      "Recommended Project Structure",
      "Rendering Architecture",
      "Dual Backend (WebGPU + WebGL)",
      "Smart Rendering",
      "Texture Atlases",
      "Mobile and Deployment",
      "Mobile Considerations",
      "Deployment Options",
      "Key Takeaways for AI Code Generation"
    ]
  },
  {
    "id": "pixijs-arch/G10",
    "title": "G10 — PixiJS v8 Performance Optimization",
    "description": "",
    "category": "guide",
    "module": "pixijs-arch",
    "engine": "PixiJS",
    "tier": "pro",
    "sizeBytes": 17243,
    "sections": [
      "Overview",
      "Draw Calls and Batching",
      "How Batching Works",
      "Batch Optimization Rules",
      "Spritesheets and Texture Atlases",
      "Spritesheet Tips",
      "Cache as Texture",
      "When to Cache",
      "ParticleContainer",
      "ParticleContainer Limitations",
      "Graphics Performance",
      "Graphics Optimization Strategies",
      "Text Performance",
      "Text Type Comparison",
      "Masks",
      "Filters",
      "Filter Performance Tips",
      "Event System Optimization",
      "Culling",
      "Culling Tradeoffs",
      "Object Pooling",
      "Texture Memory Management",
      "Mobile-Specific Optimizations",
      "Mobile Checklist",
      "Profiling Techniques",
      "Frame Time Monitoring",
      "Browser DevTools",
      "Performance Checklist",
      "Cross-Framework Comparison"
    ]
  },
  {
    "id": "pixijs-arch/G11",
    "title": "G11 — PixiJS Camera & Viewport Systems",
    "description": "",
    "category": "guide",
    "module": "pixijs-arch",
    "engine": "PixiJS",
    "tier": "pro",
    "sizeBytes": 13522,
    "sections": [
      "Overview",
      "Approach 1: Manual Container Camera",
      "Basic Setup",
      "Scrolling",
      "Smooth Follow",
      "Zoom",
      "Bounds Clamping",
      "Coordinate Conversion",
      "Approach 2: pixi-viewport Library",
      "Installation",
      "Basic Setup",
      "Plugin System",
      "Following a Target",
      "Snap to Position",
      "Animate",
      "Managing Plugins at Runtime",
      "Events",
      "Approach 3: Render Groups (PixiJS v8)",
      "Multi-Layer Setup with Render Groups",
      "Camera Effects",
      "Screen Shake",
      "Fade Transition",
      "Common Patterns",
      "Platformer Camera",
      "Room-Based Camera (Zelda-style)",
      "Cross-Framework Comparison",
      "Performance Notes"
    ]
  },
  {
    "id": "pixijs-arch/G12",
    "title": "G12 — PixiJS v8 Text & Typography",
    "description": "",
    "category": "guide",
    "module": "pixijs-arch",
    "engine": "PixiJS",
    "tier": "pro",
    "sizeBytes": 13094,
    "sections": [
      "Overview",
      "The Three Text Types",
      "Text (Canvas-based)",
      "BitmapText",
      "HTMLText",
      "Quick Comparison",
      "Text Styling in Depth",
      "TextStyle Properties",
      "Tinting BitmapText",
      "Tagged Text — Inline Styles (v8.16+)",
      "SplitText — Per-Character Animation (v8.11+)",
      "SplitText with Tag Styles (v8.17+)",
      "Access Levels",
      "Common Game Patterns",
      "Floating Damage Numbers",
      "Typewriter Dialogue",
      "Score Counter with Rolling Numbers",
      "Loading Custom Fonts",
      "Web Fonts (for Text / HTMLText)",
      "Bitmap Fonts (for BitmapText)",
      "Performance Tips",
      "Framework Comparison",
      "Next Steps"
    ]
  },
  {
    "id": "pixijs-arch/G13",
    "title": "G13 — PixiJS v8 Particles & Visual Effects",
    "description": "",
    "category": "guide",
    "module": "pixijs-arch",
    "engine": "PixiJS",
    "tier": "pro",
    "sizeBytes": 15485,
    "sections": [
      "Overview",
      "Approach 1: Built-in ParticleContainer (Raw Speed)",
      "Key Concepts",
      "Creating a ParticleContainer",
      "Adding and Removing Particles",
      "Game Loop Integration",
      "Static vs. Dynamic Properties (Performance Tuning)",
      "Approach 2: @pixi/particle-emitter (Behavior-Driven)",
      "Installation",
      "Basic Emitter Setup",
      "Built-in Behavior Types",
      "Controlling Emitters at Runtime",
      "Common VFX Recipes",
      "Explosion Burst (ParticleContainer)",
      "Rain (ParticleContainer)",
      "Smoke Trail (particle-emitter)",
      "Choosing Between Approaches",
      "Performance Tips",
      "Framework Comparison: Particles",
      "Summary"
    ]
  },
  {
    "id": "pixijs-arch/G1",
    "title": "G1 — PixiJS v8 Asset Loading & Management",
    "description": "",
    "category": "guide",
    "module": "pixijs-arch",
    "engine": "PixiJS",
    "tier": "pro",
    "sizeBytes": 14419,
    "sections": [
      "Overview",
      "Quick Start: Loading a Single Asset",
      "Loading Multiple Assets",
      "Using Aliases",
      "Bundles: Organizing Assets by Game State",
      "Why Bundles Matter",
      "Manifests: The Production Approach",
      "Format Resolution with `{webp,png}` Syntax",
      "Background Loading",
      "Cache Management",
      "When to Unload",
      "Spritesheets and Texture Atlases",
      "Spritesheet JSON Format",
      "Loading Bitmap Fonts",
      "Web Fonts (TTF/OTF/WOFF2)",
      "Complete Loading Screen Pattern",
      "Common Mistakes",
      "Comparison: Asset Loading Across Frameworks",
      "Key Takeaways"
    ]
  },
  {
    "id": "pixijs-arch/G2",
    "title": "G2 — PixiJS v8 Sprites & Animation",
    "description": "",
    "category": "guide",
    "module": "pixijs-arch",
    "engine": "PixiJS",
    "tier": "pro",
    "sizeBytes": 16872,
    "sections": [
      "Overview",
      "Sprites: The Basic Visual Unit",
      "Creating a Sprite",
      "Anchor Point",
      "Transform Properties",
      "Z-Order (Draw Order)",
      "Containers: Grouping Sprites",
      "Layer Pattern",
      "AnimatedSprite: Frame-by-Frame Animation",
      "From a Spritesheet Atlas",
      "From a Spritesheet with Named Animations",
      "AnimatedSprite Properties and Methods",
      "Understanding animationSpeed",
      "Tiling Sprites",
      "Parallax Scrolling with Multiple Layers",
      "The Ticker: Game Loop Integration",
      "deltaTime vs elapsedMS",
      "Practical Patterns",
      "State Machine for Character Animation",
      "Damage Flash Effect",
      "Object Pool for Particles/Projectiles",
      "Performance Best Practices",
      "Comparison: Sprites and Animation Across Frameworks",
      "Key Takeaways"
    ]
  },
  {
    "id": "pixijs-arch/G3",
    "title": "G3 — PixiJS Scene & State Management",
    "description": "",
    "category": "guide",
    "module": "pixijs-arch",
    "engine": "PixiJS",
    "tier": "pro",
    "sizeBytes": 16627,
    "sections": [
      "Overview",
      "The Scene Graph as Your Foundation",
      "Approach 1: Visibility Toggling (Simplest)",
      "Pros and Cons",
      "Approach 2: Add/Remove Pattern (Memory Efficient)",
      "When to `destroy()` vs. Just Remove",
      "Approach 3: Scene Manager Class",
      "Implementing Screens",
      "Screen Transitions",
      "Fade Transition",
      "Game State Machine",
      "Using the State Machine in a Screen",
      "Layered UI with Persistent Containers",
      "Important v8 Change: Leaf Nodes Cannot Have Children",
      "Comparison: Scene Management Across Frameworks",
      "Key Takeaways"
    ]
  },
  {
    "id": "pixijs-arch/G4",
    "title": "G4 — PixiJS Input Handling",
    "description": "",
    "category": "guide",
    "module": "pixijs-arch",
    "engine": "PixiJS",
    "tier": "pro",
    "sizeBytes": 14589,
    "sections": [
      "Overview",
      "Architecture: How Events Flow",
      "Event Modes",
      "Performance Tip",
      "Pointer Events (Mouse + Touch)",
      "Basic Click/Tap",
      "Available Pointer Events",
      "v8 Behavior Change — Move Events",
      "Hover Effects",
      "Custom Hit Areas",
      "Drag and Drop",
      "Keyboard Input",
      "Community Library: pixijs-input-devices",
      "Gamepad Input",
      "Multi-Input Action Map",
      "Mobile Considerations",
      "Comparison: Input Systems Across Frameworks",
      "Key Takeaways"
    ]
  },
  {
    "id": "pixijs-arch/G5",
    "title": "Physics Integration",
    "description": "PixiJS is a rendering engine, not a game engine — it has no built-in physics. For collision detection, rigid body dyn...",
    "category": "guide",
    "module": "pixijs-arch",
    "engine": "PixiJS",
    "tier": "pro",
    "sizeBytes": 10197,
    "sections": [
      "Choosing a Physics Library",
      "Installation",
      "Matter.js Integration",
      "Core Setup",
      "Creating Physics Bodies with Sprites",
      "The Game Loop — Sync Physics to Rendering",
      "Collision Events",
      "Constraints and Joints",
      "Planck.js Integration",
      "Core Setup",
      "Bodies and Fixtures",
      "Fixed Timestep with Interpolation",
      "Contact Events",
      "Removing Bodies",
      "Performance Tips",
      "Comparison: Phaser vs PixiJS Physics Approach"
    ]
  },
  {
    "id": "pixijs-arch/G6",
    "title": "Audio Integration with @pixi/sound",
    "description": "PixiJS does not include audio in its core rendering library. The official @pixi/sound package provides a WebAudio-bas...",
    "category": "guide",
    "module": "pixijs-arch",
    "engine": "PixiJS",
    "tier": "pro",
    "sizeBytes": 11033,
    "sections": [
      "Installation",
      "Loading and Adding Sounds",
      "Via the `sound` Singleton",
      "Via `Sound.from()` for More Control",
      "Via PixiJS Assets Loader",
      "Playing Sounds",
      "Fire-and-Forget",
      "Getting a Playback Instance",
      "Playback Instance Controls",
      "Sound-Level Controls",
      "Global Controls",
      "Sound Sprites",
      "Audio Filters (WebAudio Only)",
      "Available Filters",
      "Applying Filters to a Sound",
      "Applying Filters Globally",
      "Stereo Panning Example",
      "Browser Autoplay Policy",
      "Common Patterns",
      "Separate Music and SFX Volume",
      "Pause Audio on Tab Hidden",
      "Integrating with a PixiJS Game Loop",
      "Performance and Mobile Notes",
      "Cross-Framework Comparison"
    ]
  },
  {
    "id": "pixijs-arch/G7",
    "title": "Tilemaps and Level Design",
    "description": "PixiJS is a rendering engine, not a full game framework, so it has no built-in tilemap system. Instead, you use the o...",
    "category": "guide",
    "module": "pixijs-arch",
    "engine": "PixiJS",
    "tier": "pro",
    "sizeBytes": 12450,
    "sections": [
      "@pixi/tilemap Package",
      "Installation",
      "Basic Usage",
      "CompositeTilemap vs Tilemap",
      "Clearing and Rebuilding",
      "Loading Tiled Editor Maps",
      "Tiled JSON Structure",
      "Manual Tiled Loader",
      "Extracting Object Layers",
      "Manual Tile Rendering (No Plugin)",
      "Collision and Physics",
      "Grid-Based Collision",
      "Integration with matter.js",
      "Camera Scrolling",
      "Performance Tips",
      "Cross-Framework Comparison"
    ]
  },
  {
    "id": "pixijs-arch/G8",
    "title": "G8 — PixiJS v8 UI & HUD Systems",
    "description": "",
    "category": "guide",
    "module": "pixijs-arch",
    "engine": "PixiJS",
    "tier": "pro",
    "sizeBytes": 24353,
    "sections": [
      "Overview",
      "Text Rendering",
      "Text Class and TextStyle",
      "Font Loading with Assets",
      "BitmapText for Performance-Critical Displays",
      "Building a Basic HUD",
      "Health Bars and Progress Bars",
      "The @pixi/ui Library",
      "Key Components",
      "FancyButton with Hover and Press States",
      "ProgressBar from @pixi/ui",
      "ScrollBox for Long Lists",
      "Interactive Buttons",
      "Dialog and Menu Systems",
      "Responsive UI",
      "Performance Tips",
      "Use BitmapText for Frequent Updates",
      "Cache Static UI to RenderTexture",
      "Minimize Draw Calls",
      "Visibility Over Removal",
      "Cross-Framework Comparison",
      "Key Takeaways"
    ]
  },
  {
    "id": "pixijs-arch/G9",
    "title": "G9 — PixiJS v8 Mobile Support & Deployment",
    "description": "",
    "category": "guide",
    "module": "pixijs-arch",
    "engine": "PixiJS",
    "tier": "pro",
    "sizeBytes": 14262,
    "sections": [
      "Overview",
      "Responsive Canvas Scaling",
      "The ResizePlugin",
      "Fixed-Ratio Scaling (Letterboxing)",
      "Resolution and Device Pixel Ratio",
      "Mobile Touch Input",
      "Event Modes",
      "Multi-Touch",
      "Global Pointer Tracking",
      "Performance Optimization for Mobile",
      "Renderer Settings",
      "Texture Optimization",
      "Text Performance",
      "Memory Management",
      "CacheAsTexture for Complex Containers",
      "Deployment Strategies",
      "Static Web Hosting",
      "Progressive Web App (PWA)",
      "Native Wrapping with Capacitor",
      "Native Wrapping with Tauri",
      "Mobile Checklist"
    ]
  },
  {
    "id": "pixijs-arch-rules",
    "title": "PixiJS v8 — AI Rules",
    "description": "Engine-specific rules for projects using PixiJS v8. These supplement the engine-agnostic rules in docs/core/ai-workfl...",
    "category": "reference",
    "module": "pixijs-arch",
    "engine": "PixiJS",
    "tier": "pro",
    "sizeBytes": 6601,
    "sections": [
      "Architecture Context",
      "Tech Stack",
      "Project Structure Conventions",
      "Code Generation Rules",
      "Application Init: Always Async",
      "Asset Loading: Always Load Before Use",
      "Containers: Use for Scene Management",
      "Game Loop: Use Ticker with deltaTime",
      "Interaction: Set eventMode Explicitly",
      "Keyboard Input: Use DOM Events",
      "Physics: Integrate Externally",
      "Audio: Use @pixi/sound",
      "TypeScript: Use PixiJS Types",
      "Common Pitfalls"
    ]
  },
  {
    "id": "pixijs-arch/R1",
    "title": "R1 — PixiJS v8 API Quick Reference",
    "description": "",
    "category": "reference",
    "module": "pixijs-arch",
    "engine": "PixiJS",
    "tier": "pro",
    "sizeBytes": 12580,
    "sections": [
      "Application Setup",
      "Asset Loading",
      "Display Objects",
      "Container (parent for grouping)",
      "Sprite",
      "AnimatedSprite",
      "TilingSprite",
      "Graphics (shapes, lines, fills)",
      "Text",
      "Events / Interaction",
      "Filters & Effects",
      "Masks",
      "Render Textures",
      "CacheAsTexture (Performance)",
      "Common Patterns",
      "Game Loop with Fixed Timestep",
      "Object Pool",
      "Screen Shake",
      "Cleanup & Destruction"
    ]
  },
  {
    "id": "playcanvas-arch/E1",
    "title": "PlayCanvas Architecture Overview",
    "description": "PlayCanvas is an open-source 3D game engine built on WebGL 2 and WebGPU. It differentiates from Three.js and Babylon....",
    "category": "architecture",
    "module": "playcanvas-arch",
    "engine": "PlayCanvas",
    "tier": "pro",
    "sizeBytes": 10582,
    "sections": [
      "Core Architecture",
      "Application Lifecycle",
      "Key Design Decisions",
      "Entity Component System",
      "Entity",
      "Component",
      "System",
      "GraphNode (Scene Graph)",
      "Rendering Architecture",
      "Clustered Forward Rendering",
      "Layers and Render Order",
      "WebGPU Support",
      "Editor vs Engine-Only",
      "Input System",
      "Audio",
      "Performance Characteristics",
      "Optimization Tools",
      "Ecosystem",
      "Comparison: PlayCanvas vs Three.js vs Babylon.js"
    ]
  },
  {
    "id": "playcanvas-arch/engine-overview",
    "title": "PlayCanvas Engine Architecture Overview",
    "description": "PlayCanvas is an open-source, cloud-friendly 3D game engine built on WebGL2 and WebGPU. It combines a high-performanc...",
    "category": "architecture",
    "module": "playcanvas-arch",
    "engine": "PlayCanvas",
    "tier": "pro",
    "sizeBytes": 9888,
    "sections": [
      "Core Architecture",
      "Entity-Component System (ECS)",
      "Built-in Components",
      "Application Lifecycle",
      "Script Component System",
      "Rendering Pipeline",
      "Material System",
      "Physics: Ammo.js Integration",
      "WebGPU Support",
      "Performance Considerations for Games",
      "Asset Loading",
      "Development Modes",
      "Comparison Summary"
    ]
  },
  {
    "id": "playcanvas-arch/G10",
    "title": "UI System",
    "description": "PlayCanvas provides a built-in entity-component UI system for building game interfaces — HUDs, menus, dialogs, and in...",
    "category": "guide",
    "module": "playcanvas-arch",
    "engine": "PlayCanvas",
    "tier": "pro",
    "sizeBytes": 14088,
    "sections": [
      "Core Concepts",
      "Screen Component",
      "Screen Space (2D Overlay)",
      "World Space (3D UI)",
      "Responsive Scaling",
      "Element Component",
      "Text Element",
      "Image Element",
      "Group Element",
      "Anchoring and Pivots",
      "Anchor (Vec4)",
      "Pivot (Vec2)",
      "Layout Groups",
      "Buttons and Input Handling",
      "Button Component",
      "Event Handling",
      "Common UI Patterns for Games",
      "HUD with Score and Health",
      "Pause Menu Overlay",
      "Performance Considerations",
      "Draw Call Batching",
      "Render Order",
      "MSDF Fonts",
      "Mobile Considerations"
    ]
  },
  {
    "id": "playcanvas-arch/G11",
    "title": "Networking & Multiplayer for PlayCanvas Games",
    "description": "PlayCanvas does not ship a built-in networking layer, but its Entity-Component-Script architecture integrates cleanly...",
    "category": "guide",
    "module": "playcanvas-arch",
    "engine": "PlayCanvas",
    "tier": "pro",
    "sizeBytes": 15592,
    "sections": [
      "Approach 1: Colyseus Integration",
      "How Colyseus State Sync Works",
      "Server Setup",
      "PlayCanvas Client Script",
      "Approach 2: Raw WebSocket (Custom Protocol)",
      "PlayNetwork: Server-Side Engine",
      "Client-Side Prediction in PlayCanvas",
      "Binary Serialization for Bandwidth",
      "Performance Considerations",
      "Choosing Your Approach",
      "Integration Checklist"
    ]
  },
  {
    "id": "playcanvas-arch/G12",
    "title": "G12 — Custom Shaders & Shader Chunks",
    "description": "PlayCanvas provides two approaches to custom rendering: ShaderMaterial (full custom vertex/fragment shaders) and shad...",
    "category": "guide",
    "module": "playcanvas-arch",
    "engine": "PlayCanvas",
    "tier": "pro",
    "sizeBytes": 10479,
    "sections": [
      "Approach 1 — ShaderMaterial (Full Custom Shaders)",
      "Basic Setup",
      "Adding WGSL for WebGPU",
      "Textures in ShaderMaterial",
      "Approach 2 — Shader Chunks (Override Parts of StandardMaterial)",
      "How Chunks Work",
      "Basic Chunk Override",
      "Common Chunks to Override",
      "Dissolve Effect (Practical Example)",
      "GLSL vs WGSL — Key Differences",
      "Shader Chunk Migrations",
      "Performance Considerations",
      "Further Reading"
    ]
  },
  {
    "id": "playcanvas-arch/G1",
    "title": "G1 — Scripting System (ESM Scripts)",
    "description": "PlayCanvas games are built by attaching Script components to entities. Scripts define behavior — movement, combat, AI...",
    "category": "guide",
    "module": "playcanvas-arch",
    "engine": "PlayCanvas",
    "tier": "pro",
    "sizeBytes": 14909,
    "sections": [
      "Basic Script Structure",
      "Attaching Scripts via Code",
      "Script Lifecycle",
      "Lifecycle Methods",
      "Enable/Disable",
      "Script Attributes",
      "Supported Attribute Types",
      "Entity Communication Patterns",
      "1. Direct Reference (via Attributes)",
      "2. Application Events (Global Bus)",
      "3. Entity Events (Local Bus)",
      "4. Finding Entities by Name or Tag",
      "Input Handling Pattern",
      "Physics Integration in Scripts",
      "State Machine Pattern",
      "Hot Reloading (Editor Development)",
      "Performance Considerations"
    ]
  },
  {
    "id": "playcanvas-arch/G2",
    "title": "G2 — Physics with Ammo.js",
    "description": "PlayCanvas uses Ammo.js as its physics engine — a WebAssembly port of the open-source C++ Bullet physics library. Phy...",
    "category": "guide",
    "module": "playcanvas-arch",
    "engine": "PlayCanvas",
    "tier": "pro",
    "sizeBytes": 13273,
    "sections": [
      "Enabling Physics",
      "In the PlayCanvas Editor",
      "Engine-Only (No Editor)",
      "Rigidbody + Collision Components",
      "Rigid Body Types",
      "Moving Kinematic Bodies",
      "Collision Shapes",
      "Compound Shapes",
      "Applying Forces and Impulses",
      "Collision Events",
      "Trigger Volumes (Sensors)",
      "Common Trigger Uses in Games",
      "Raycasting",
      "Common Raycast Uses",
      "Accessing the Ammo.js API Directly",
      "Performance Considerations",
      "Common Mistakes"
    ]
  },
  {
    "id": "playcanvas-arch/G3",
    "title": "PlayCanvas WebGPU Support — Migration & Best Practices",
    "description": "PlayCanvas is one of the first production 3D game engines to ship WebGPU support alongside its existing WebGL2 backen...",
    "category": "guide",
    "module": "playcanvas-arch",
    "engine": "PlayCanvas",
    "tier": "pro",
    "sizeBytes": 11355,
    "sections": [
      "Current State (2026)",
      "Enabling WebGPU",
      "In the PlayCanvas Editor",
      "In Engine-Only Projects (No Editor)",
      "Device Type Constants",
      "What Changes with WebGPU",
      "For Most Game Code: Nothing",
      "Key Differences Under the Hood",
      "Shader Authoring",
      "Compute Shaders (WebGPU Only)",
      "Compute Shader Use Cases for Games",
      "FrameGraph Architecture",
      "Performance: WebGPU vs WebGL2",
      "Where WebGPU Helps Most",
      "Where It Doesn't Help (Yet)",
      "Optimization Tips (Both Backends)",
      "Writing Cross-Backend Code",
      "Feature Detection Pattern",
      "Things to Avoid",
      "Migration Checklist (WebGL2 → WebGPU-Ready)",
      "Known Limitations (Beta)"
    ]
  },
  {
    "id": "playcanvas-arch/G4",
    "title": "PlayCanvas Audio System — Spatial Sound for Games",
    "description": "PlayCanvas provides a component-based audio system built on the Web Audio API. The SoundComponent and AudioListenerCo...",
    "category": "guide",
    "module": "playcanvas-arch",
    "engine": "PlayCanvas",
    "tier": "pro",
    "sizeBytes": 10267,
    "sections": [
      "Core Concepts",
      "Setting Up the Listener",
      "SoundComponent Basics",
      "Adding a 2D Sound (Non-Positional)",
      "Adding a 3D Positional Sound",
      "Distance Models",
      "Controlling Playback",
      "Events",
      "Game Audio Patterns",
      "Sound Pooling for Frequent Effects",
      "Music Crossfade",
      "Audio Zones (Reverb / Environment)",
      "Performance Considerations",
      "WebGPU Notes"
    ]
  },
  {
    "id": "playcanvas-arch/G5",
    "title": "PlayCanvas Asset Loading — glTF, Compression & Production Pipelines",
    "description": "PlayCanvas uses glTF 2.0 / GLB as its primary 3D asset format. The engine's ContainerResource system loads GLB files ...",
    "category": "guide",
    "module": "playcanvas-arch",
    "engine": "PlayCanvas",
    "tier": "pro",
    "sizeBytes": 8904,
    "sections": [
      "Asset Loading Fundamentals",
      "The Asset Registry",
      "Loading a GLB at Runtime",
      "Preloading Assets via the Editor",
      "ContainerResource API",
      "Instantiation Methods",
      "Material Variants (glTF extension)",
      "Animations from GLB",
      "glTF Compression Pipeline",
      "GLB vs JSON Performance",
      "Draco Mesh Compression",
      "Basis Universal Texture Compression",
      "Asset Tags and Group Loading",
      "Production Optimization Patterns",
      "1. Streaming by Distance",
      "2. Instance Reuse",
      "3. Cleanup",
      "Performance Considerations"
    ]
  },
  {
    "id": "playcanvas-arch/G6",
    "title": "G6 — Input Handling & Controls",
    "description": "PlayCanvas provides input APIs for keyboard, mouse, touch, and gamepad. Each device type has its own class, all acces...",
    "category": "guide",
    "module": "playcanvas-arch",
    "engine": "PlayCanvas",
    "tier": "pro",
    "sizeBytes": 11135,
    "sections": [
      "Input Device Access",
      "Keyboard Input",
      "Polling (in update loop)",
      "Event-Based",
      "Mouse Input",
      "Pointer Lock",
      "Mouse Position",
      "Touch Input",
      "Touch Availability",
      "Virtual Joystick",
      "Gamepad Input",
      "Gamepad Button Map (Standard Layout)",
      "Cross-Device Input Pattern",
      "Preventing Default Browser Behavior",
      "Performance Tips"
    ]
  },
  {
    "id": "playcanvas-arch/G7",
    "title": "PlayCanvas Optimization & Performance Guide",
    "description": "Draw calls are the primary performance bottleneck in web 3D games. PlayCanvas provides batching, hardware instancing,...",
    "category": "guide",
    "module": "playcanvas-arch",
    "engine": "PlayCanvas",
    "tier": "pro",
    "sizeBytes": 12498,
    "sections": [
      "The Draw Call Budget",
      "Batching",
      "Static Batching (BatchGroup)",
      "Dynamic Batching",
      "Hardware Instancing",
      "Basic Instancing (Transforms Only)",
      "When to Use Instancing vs Batching",
      "Frustum Culling",
      "Enabling/Disabling",
      "When to Disable",
      "Level of Detail (LOD)",
      "Entity Name Convention",
      "Manual LOD Switching",
      "LOD Budget Guidelines",
      "Material & Shader Optimization",
      "Reduce Material Count",
      "Shader Complexity",
      "Texture Optimization",
      "Runtime Profiling",
      "Built-In Stats",
      "Profiler Overlay",
      "Chrome DevTools + WebGL",
      "Mobile-Specific Optimization",
      "Optimization Checklist",
      "Common Pitfalls"
    ]
  },
  {
    "id": "playcanvas-arch/G8",
    "title": "Lighting & PBR Materials",
    "description": "PlayCanvas uses physically based rendering (PBR) as its default material model, combined with a clustered lighting sy...",
    "category": "guide",
    "module": "playcanvas-arch",
    "engine": "PlayCanvas",
    "tier": "pro",
    "sizeBytes": 9350,
    "sections": [
      "Clustered Lighting Architecture",
      "Configuring the Cluster Grid",
      "Light Types",
      "Directional Light",
      "Point Light (Omni)",
      "Spot Light",
      "Area Lights",
      "StandardMaterial PBR Properties",
      "Basic Setup",
      "Common Material Presets",
      "Clear Coat and Sheen",
      "Environment Lighting",
      "Lightmapping",
      "Shadow Best Practices",
      "Performance Considerations",
      "WebGPU Notes"
    ]
  },
  {
    "id": "playcanvas-arch/G9",
    "title": "PlayCanvas Animation System — State Graphs, Layers, and Blend Trees",
    "description": "PlayCanvas uses a state-machine-based animation system built on the AnimComponent. You define states (Idle, Walk, Jum...",
    "category": "guide",
    "module": "playcanvas-arch",
    "engine": "PlayCanvas",
    "tier": "pro",
    "sizeBytes": 9400,
    "sections": [
      "Core Concepts",
      "AnimComponent",
      "AnimStateGraph Asset",
      "Animation Assets",
      "Setting Up Animations",
      "Step 1 — Assign a State Graph",
      "Step 2 — Assign Animation Clips to States",
      "Step 3 — Drive Parameters from Game Logic",
      "Parameters",
      "Transitions",
      "Layers — Animating Body Parts Independently",
      "Creating Layers",
      "Blend Modes",
      "Adjusting Layer Weight at Runtime",
      "Weight Normalization",
      "Blend Trees — Parameter-Driven Animation Mixing",
      "Assigning Blend Tree Nodes",
      "Blend Tree Types",
      "Animation Events",
      "Common Game Patterns",
      "Locomotion Controller",
      "Hit Reaction with Layer Override",
      "Root Motion",
      "Performance Notes"
    ]
  },
  {
    "id": "playcanvas-arch-rules",
    "title": "PlayCanvas Architecture Module Rules",
    "description": "",
    "category": "reference",
    "module": "playcanvas-arch",
    "engine": "PlayCanvas",
    "tier": "pro",
    "sizeBytes": 2760,
    "sections": [
      "Module Purpose",
      "Document Standards",
      "Coverage Plan",
      "architecture/",
      "guides/",
      "reference/"
    ]
  },
  {
    "id": "playcanvas-rules",
    "title": "PlayCanvas — AI Code Generation Rules",
    "description": "Engine-specific rules for PlayCanvas Engine 1.70+ / 2.x projects using JavaScript/TypeScript. These supplement the en...",
    "category": "reference",
    "module": "playcanvas-arch",
    "engine": "PlayCanvas",
    "tier": "pro",
    "sizeBytes": 9782,
    "sections": [
      "⚠️ Legacy vs Modern API — Critical Differences",
      "API Changes That Break Code",
      "Import Style",
      "Entity Component System (ECS)",
      "Core Concepts",
      "Built-in Components",
      "Entity Hierarchy",
      "Script Component (Custom Behavior)",
      "Physics (Ammo.js)",
      "Asset Loading",
      "Camera Setup",
      "Performance Rules",
      "Common Mistakes"
    ]
  },
  {
    "id": "playcanvas-arch/R1",
    "title": "PlayCanvas Particle & VFX Systems for Games",
    "description": "PlayCanvas provides a GPU-accelerated particle system through the ParticleSystemComponent. Particles are simulated on...",
    "category": "reference",
    "module": "playcanvas-arch",
    "engine": "PlayCanvas",
    "tier": "pro",
    "sizeBytes": 15326,
    "sections": [
      "ParticleSystemComponent Overview",
      "Core Properties Reference",
      "Emission",
      "Emitter Shape",
      "Velocity",
      "Appearance",
      "Rendering",
      "Curve System (Animation Over Lifetime)",
      "Runtime Control via Scripts",
      "Game VFX Recipes",
      "Campfire (Looping Ambient)",
      "Explosion (One-Shot Burst)",
      "Rain (Weather System)",
      "Sprite Sheet Animation",
      "Soft Particles (Depth Softening)",
      "Object Pooling for Particle Entities",
      "Performance Budget",
      "WebGPU Notes"
    ]
  },
  {
    "id": "playcanvas-arch/R2",
    "title": "PlayCanvas ESM Engine & Modern Development Workflows",
    "description": "PlayCanvas has undergone a major modernization: the engine is now a proper ESM npm package (playcanvas), scripts use ...",
    "category": "reference",
    "module": "playcanvas-arch",
    "engine": "PlayCanvas",
    "tier": "pro",
    "sizeBytes": 11029,
    "sections": [
      "Classic vs. ESM Scripts",
      "ESM Script Anatomy",
      "Script Lifecycle Methods",
      "Attribute Types",
      "Attribute Getters/Setters (Reactive Properties)",
      "Standalone Engine Setup (Code-Only with Vite)",
      "Project Scaffolding",
      "Minimal Game Entry Point",
      "Registering ESM Scripts in Code-Only Mode",
      "Editor-Based vs. Code-Only Workflow",
      "Migration from Classic to ESM Scripts",
      "Manual Migration Checklist",
      "Before (Classic)",
      "After (ESM)",
      "Performance Notes"
    ]
  },
  {
    "id": "playcanvas-arch/R3",
    "title": "R3 — Editor Workflows for Game Development",
    "description": "PlayCanvas is unique among web 3D engines because its visual Editor is a core part of the development workflow, not a...",
    "category": "reference",
    "module": "playcanvas-arch",
    "engine": "PlayCanvas",
    "tier": "pro",
    "sizeBytes": 12865,
    "sections": [
      "Project Setup",
      "Creating a Project",
      "Editor Layout",
      "Keyboard Shortcuts",
      "Scene Composition",
      "Entity-Component Architecture",
      "Adding Components via Editor",
      "Adding Components via Script",
      "Templates (Prefabs)",
      "Creating a Template",
      "Instantiating Templates via Script",
      "Template Best Practices",
      "Scripting Workflow",
      "ESM Scripts (Recommended)",
      "VS Code Extension",
      "Script Attributes",
      "Asset Pipeline",
      "Importing Assets",
      "Asset Preloading",
      "Collaboration",
      "Team Workflow Recommendations",
      "Publishing",
      "One-Click Publish",
      "Build Optimization",
      "Custom Build Pipeline",
      "Performance Considerations"
    ]
  },
  {
    "id": "playcanvas-arch/R4",
    "title": "Camera Systems & Controls",
    "description": "PlayCanvas uses an entity-component architecture where cameras are entities with a camera component attached. Camera ...",
    "category": "reference",
    "module": "playcanvas-arch",
    "engine": "PlayCanvas",
    "tier": "pro",
    "sizeBytes": 11594,
    "sections": [
      "Camera Component Basics",
      "First-Person Camera",
      "Entity Setup",
      "Third-Person Orbit Camera",
      "Smooth Follow Camera",
      "Collision Avoidance",
      "Camera Switching",
      "Performance Considerations"
    ]
  },
  {
    "id": "playcanvas-arch/R5",
    "title": "R5 — WebXR Immersive Experiences",
    "description": "PlayCanvas has deep, first-party WebXR integration supporting VR, AR, and Mixed Reality across headsets, mobile devic...",
    "category": "reference",
    "module": "playcanvas-arch",
    "engine": "PlayCanvas",
    "tier": "pro",
    "sizeBytes": 14123,
    "sections": [
      "Platform Support",
      "Session Lifecycle",
      "Starting a Session",
      "Session Types",
      "Reference Space Types",
      "Ending a Session",
      "Input Sources",
      "Hand Tracking",
      "Pinch Detection (Game Interaction)",
      "Hit Testing (AR)",
      "Controller-Based Hit Testing",
      "Anchors",
      "Depth Sensing (AR)",
      "Mesh Detection & Plane Detection (MR)",
      "Plane Detection",
      "Mesh Detection",
      "Light Estimation (AR)",
      "DOM Overlay (AR)",
      "Performance Considerations for XR Games",
      "Frame Budget",
      "Optimization Tips",
      "Common Pitfalls"
    ]
  },
  {
    "id": "playcanvas-arch/R6",
    "title": "Procedural Generation",
    "description": "PlayCanvas provides a procedural Mesh API for generating geometry at runtime — terrain from heightmaps, infinite leve...",
    "category": "reference",
    "module": "playcanvas-arch",
    "engine": "PlayCanvas",
    "tier": "pro",
    "sizeBytes": 13689,
    "sections": [
      "The Procedural Mesh API",
      "Basic Procedural Quad",
      "Attaching to an Entity",
      "Terrain Generation from Heightmaps",
      "Adding Physics Collision to Terrain",
      "Infinite Terrain with Chunk Streaming",
      "Procedural Level Geometry",
      "Dynamic Mesh Updates",
      "Performance for Dynamic Meshes",
      "Noise-Based Generation",
      "Common Pitfalls"
    ]
  },
  {
    "id": "game-loop-and-state",
    "title": "Pygame Game Loop and State Management",
    "description": "Pygame does not impose an application framework — you build your own game loop and state machine. This doc covers the...",
    "category": "architecture",
    "module": "pygame-arch",
    "engine": "Pygame",
    "tier": "pro",
    "sizeBytes": 9164,
    "sections": [
      "The Core Game Loop",
      "Why delta time matters",
      "Fixed timestep with accumulator",
      "State Management Patterns",
      "Pattern 1: Enum-Based State Machine (Simple Games)",
      "Pattern 2: Scene Stack (Recommended)",
      "Input Handling",
      "Event-based vs Polling",
      "Gamepad Support",
      "Asset Management",
      "Timing and Cooldowns"
    ]
  },
  {
    "id": "resource-management",
    "title": "Pygame Resource Management and Asset Loading",
    "description": "Pygame provides low-level asset loading functions but no built-in resource manager. This doc covers the patterns, cac...",
    "category": "architecture",
    "module": "pygame-arch",
    "engine": "Pygame",
    "tier": "pro",
    "sizeBytes": 10350,
    "sections": [
      "Why You Need a Resource Manager",
      "Surface Conversion — The Single Most Important Optimization",
      "When to Use Each",
      "Dictionary-Based Asset Cache",
      "Usage",
      "Sprite Sheet Extraction",
      "Lazy Loading Pattern",
      "Project Directory Layout",
      "Music Streaming vs. Sound Effects",
      "pygame-ce Differences",
      "Common Pitfalls"
    ]
  },
  {
    "id": "ai-and-pathfinding",
    "title": "AI and Pathfinding",
    "description": "Enemy AI and pathfinding are essential for games with NPCs, enemies, or any autonomous agents. Pygame doesn't include...",
    "category": "guide",
    "module": "pygame-arch",
    "engine": "Pygame",
    "tier": "pro",
    "sizeBytes": 11761,
    "sections": [
      "Grid-Based A\\* Pathfinding",
      "The Grid",
      "Heuristic Function",
      "A\\* Implementation",
      "Using A\\* with Pygame Sprites",
      "Performance Tips for A\\*",
      "Steering Behaviors",
      "Seek and Flee",
      "Arrive (Slow Down Near Target)",
      "Wander",
      "Finite State Machine (FSM) for Enemy AI",
      "Line of Sight",
      "Putting It Together"
    ]
  },
  {
    "id": "animation-and-spritesheets",
    "title": "Animation and Spritesheets",
    "description": "How to load spritesheets, extract frames, and animate sprites with delta-time in Pygame and pygame-ce — from a basic ...",
    "category": "guide",
    "module": "pygame-arch",
    "engine": "Pygame",
    "tier": "pro",
    "sizeBytes": 8587,
    "sections": [
      "Loading a Spritesheet",
      "Spritesheet Loader Class",
      "Loading with Transparency",
      "Frame-Based Animation",
      "AnimatedSprite Class",
      "Wiring It Up",
      "Animation State Machine",
      "Texture Atlas (JSON) Loading",
      "pygame-ce Differences",
      "Performance Checklist"
    ]
  },
  {
    "id": "audio-and-mixer",
    "title": "Audio & Mixer System",
    "description": "Pygame's audio system is split into two subsystems: pygame.mixer for sound effects (short clips loaded fully into mem...",
    "category": "guide",
    "module": "pygame-arch",
    "engine": "Pygame",
    "tier": "pro",
    "sizeBytes": 8154,
    "sections": [
      "Initialization",
      "Parameter guidance",
      "Sound Effects (pygame.mixer.Sound)",
      "Loading sounds",
      "Playback",
      "Volume",
      "Background Music (pygame.mixer.music)",
      "End-of-track events",
      "Channels",
      "Audio Manager Pattern",
      "pygame-ce Differences",
      "Format Recommendations",
      "Common Pitfalls"
    ]
  },
  {
    "id": "camera-and-scrolling",
    "title": "Camera and Scrolling Systems",
    "description": "Pygame has no built-in camera. Every sprite is drawn at an absolute pixel position, so \"scrolling\" means shifting eve...",
    "category": "guide",
    "module": "pygame-arch",
    "engine": "Pygame",
    "tier": "pro",
    "sizeBytes": 8165,
    "sections": [
      "The Offset Pattern",
      "CameraGroup Approach",
      "Dead Zones",
      "Smooth (Lerp) Following",
      "Parallax Scrolling",
      "World Boundaries (Clamping)",
      "Zoom (Scaling)",
      "Screen Shake",
      "Common Pitfalls"
    ]
  },
  {
    "id": "custom-events-and-timers",
    "title": "Custom Events, Timers, and Inter-Object Communication",
    "description": "Pygame's event queue isn't just for keyboard and mouse input — it's a powerful messaging bus you can use for timers, ...",
    "category": "guide",
    "module": "pygame-arch",
    "engine": "Pygame",
    "tier": "pro",
    "sizeBytes": 8922,
    "sections": [
      "Defining Custom Event Types",
      "The Modern Way: `custom_type()`",
      "Organizing Event Constants",
      "Posting Events",
      "Immediate Events with `event.post()`",
      "Timed / Repeating Events with `set_timer()`",
      "Timer Pattern: Difficulty Ramp",
      "Event Filtering for Performance",
      "Blocking Unwanted Events",
      "Allow-List Approach",
      "Selective `get()` Calls",
      "Architecture: Event Bus Pattern",
      "pygame-ce Differences",
      "Common Pitfalls"
    ]
  },
  {
    "id": "debugging-and-profiling",
    "title": "Debugging & Profiling Pygame Games",
    "description": "How to find and fix performance bottlenecks, memory leaks, and logic bugs in",
    "category": "guide",
    "module": "pygame-arch",
    "engine": "Pygame",
    "tier": "pro",
    "sizeBytes": 8692,
    "sections": [
      "FPS Monitoring",
      "Built-in Clock.get_fps()",
      "Manual Frame-Time Measurement",
      "CPU Profiling with cProfile",
      "Profiling the whole game",
      "Profiling a specific section",
      "Visualizing with snakeviz",
      "Line-Level Profiling with line_profiler",
      "Memory Debugging",
      "tracemalloc — finding allocation sources",
      "Comparing snapshots to find leaks",
      "Common Pygame memory pitfalls",
      "Visual Debugging Helpers",
      "Drawing collision rects",
      "Frame-step mode",
      "Logging Best Practices",
      "Quick Reference — Tools at a Glance"
    ]
  },
  {
    "id": "input-and-events",
    "title": "Input Handling & Event System",
    "description": "Pygame provides two complementary input systems: an event queue for discrete actions (key press, mouse click, window ...",
    "category": "guide",
    "module": "pygame-arch",
    "engine": "Pygame",
    "tier": "pro",
    "sizeBytes": 8904,
    "sections": [
      "The Event Queue",
      "Filtering Events",
      "Custom Events",
      "State Polling (Continuous Input)",
      "Keyboard Polling",
      "Mouse Polling",
      "Mouse Events vs Polling",
      "Combining Events and Polling",
      "Joystick / Gamepad Input",
      "Reading Joystick State",
      "Joystick Events",
      "Delta-Time Movement",
      "Detecting Press/Release from Polling",
      "Text Input",
      "Common Pitfalls"
    ]
  },
  {
    "id": "networking-and-multiplayer",
    "title": "Networking and Multiplayer",
    "description": "A practical guide to adding multiplayer networking to Pygame games — covering client-server architecture, protocol ch...",
    "category": "guide",
    "module": "pygame-arch",
    "engine": "Pygame",
    "tier": "pro",
    "sizeBytes": 17170,
    "sections": [
      "Architecture: Client-Server vs Peer-to-Peer",
      "Protocol Choice: TCP vs UDP",
      "TCP (Reliable, Ordered)",
      "UDP (Fast, Unordered)",
      "When to Use Which",
      "Server Structure",
      "Client Structure",
      "Wire Protocol Design",
      "Compact Binary Protocol Example",
      "Latency Compensation",
      "Client-Side Prediction",
      "Entity Interpolation",
      "Community Libraries",
      "PodSixNet Example",
      "asyncio + websockets (for pygbag/web deployment)",
      "Common Pitfalls",
      "Quick Reference: Choosing Your Approach"
    ]
  },
  {
    "id": "particle-systems",
    "title": "Particle Systems and Visual Effects",
    "description": "How to build particle systems in Pygame for effects like explosions, trails, smoke, fire, and ambient dust — from a m...",
    "category": "guide",
    "module": "pygame-arch",
    "engine": "Pygame",
    "tier": "pro",
    "sizeBytes": 13235,
    "sections": [
      "Core Particle Structure",
      "Minimal Particle Class",
      "Particle Emitter",
      "Particle System Manager",
      "Wiring It Into the Game Loop",
      "Common Effect Recipes",
      "Movement Trail (Dust)",
      "Explosion Burst",
      "Fire / Torch",
      "Ambient Floating Dust / Snow",
      "Performance Optimisation",
      "1. Particle Pool (Object Reuse)",
      "2. Surface Batching (pygame-ce)",
      "3. Cap and Prioritise",
      "pygame vs pygame-ce Differences",
      "Architecture Tips"
    ]
  },
  {
    "id": "performance-and-pygame-ce",
    "title": "Performance Optimization & pygame-ce",
    "description": "Practical performance techniques for Pygame games, plus a migration guide for",
    "category": "guide",
    "module": "pygame-arch",
    "engine": "Pygame",
    "tier": "pro",
    "sizeBytes": 9480,
    "sections": [
      "Surface & Blitting Performance",
      "Always convert loaded surfaces",
      "Use `Surface.fblits()` for batch drawing (pygame-ce only)",
      "Dirty-rect updates vs full flip",
      "Frame Rate & Delta Time",
      "Cap the frame rate",
      "Avoid per-frame allocations",
      "Sprite Group Optimization",
      "Use `LayeredUpdates` or `LayeredDirty` for draw-order control",
      "Spatial partitioning for collision",
      "Rendering Tricks",
      "Off-screen surface caching",
      "Use `transform` sparingly at runtime",
      "pygame-ce Migration Guide",
      "What is pygame-ce?",
      "Key pygame-ce additions",
      "Performance differences",
      "Compatibility notes",
      "Future: pygame-ce 3.0 + SDL3",
      "Quick Checklist"
    ]
  },
  {
    "id": "physics-and-movement",
    "title": "Physics and Movement Patterns",
    "description": "Practical physics and movement patterns for Pygame games — from basic velocity/acceleration to platformer gravity, fr...",
    "category": "guide",
    "module": "pygame-arch",
    "engine": "Pygame",
    "tier": "pro",
    "sizeBytes": 15683,
    "sections": [
      "Delta Time Fundamentals",
      "Vector2 for All Movement",
      "Movement Models",
      "1. Constant Velocity (Top-Down)",
      "2. Acceleration + Friction (Smooth Movement)",
      "3. Platformer Gravity",
      "Coyote Time and Jump Buffering",
      "Collision Response",
      "Axis-Separated Collision",
      "Simple Physics System",
      "Fixed Timestep with Interpolation",
      "Common Pitfalls"
    ]
  },
  {
    "id": "project-structure-and-organization",
    "title": "Project Structure & Organization",
    "description": "A well-organized Pygame project separates assets from code, isolates game systems into focused modules, and keeps a c...",
    "category": "guide",
    "module": "pygame-arch",
    "engine": "Pygame",
    "tier": "pro",
    "sizeBytes": 11323,
    "sections": [
      "Starter Layout (Prototypes & Jams)",
      "Scalable Layout (Full Games)",
      "Why This Structure Works",
      "Centralized Asset Loader",
      "Dependency Flow",
      "Asset Organization",
      "pygame-ce Compatibility",
      "Virtual Environments",
      "Testing Pygame Code"
    ]
  },
  {
    "id": "save-load-and-persistence",
    "title": "Save/Load and Data Persistence",
    "description": "Pygame provides no built-in save system — you design your own. This guide covers the standard patterns for serializin...",
    "category": "guide",
    "module": "pygame-arch",
    "engine": "Pygame",
    "tier": "pro",
    "sizeBytes": 10487,
    "sections": [
      "Choosing a Serialization Format",
      "Core Pattern: to_dict / from_dict",
      "Why not pickle the objects directly?",
      "Save Manager",
      "Key design decisions",
      "Composing the Save Snapshot",
      "Save-File Versioning and Migration",
      "Settings / Configuration File",
      "Autosave",
      "Quick Reference"
    ]
  },
  {
    "id": "scene-management-patterns",
    "title": "Scene Management Patterns",
    "description": "How to organise a Pygame project into clean, swappable scenes (menu, gameplay, pause, game-over) using a state machin...",
    "category": "guide",
    "module": "pygame-arch",
    "engine": "Pygame",
    "tier": "pro",
    "sizeBytes": 10609,
    "sections": [
      "Why Scenes?",
      "Pattern 1: Simple Scene Switcher",
      "Scene Base Class",
      "Scene Manager",
      "Example Scenes",
      "Entry Point",
      "Pattern 2: Scene Stack",
      "Stack Manager",
      "Pause Overlay",
      "Pattern 3: Enum-Based States (Lightweight)",
      "Scene Transitions",
      "Passing Data Between Scenes",
      "pygame-ce Differences",
      "Which Pattern to Choose"
    ]
  },
  {
    "id": "sprites-and-collision",
    "title": "Sprites and Collision Detection",
    "description": "A practical guide to managing sprites, sprite groups, and collision detection in Pygame and pygame-ce — from basic gr...",
    "category": "guide",
    "module": "pygame-arch",
    "engine": "Pygame",
    "tier": "pro",
    "sizeBytes": 13064,
    "sections": [
      "Sprite Lifecycle",
      "Creating a Sprite",
      "Sprite Memory: When kill() Isn't Enough",
      "Sprite Groups In-Depth",
      "Group Types",
      "Organizing Groups by Purpose",
      "Batch Operations",
      "LayeredUpdates: Depth Sorting",
      "pygame-ce: Batch Blitting with fblits()",
      "Collision Detection",
      "Built-in Collision Functions",
      "Collision Callbacks",
      "Two-Phase Collision Strategy",
      "Spatial Hash Grid",
      "Quadtree (Alternative Broadphase)",
      "Common Patterns",
      "Invincibility Frames (i-frames)",
      "Collision Response: Sliding Along Walls",
      "Hitbox vs. Visual Rect",
      "Performance Checklist"
    ]
  },
  {
    "id": "testing-pygame-games",
    "title": "Testing Pygame Games",
    "description": "Pygame games are Python programs, so they benefit from the same testing tools as any Python project. The main challen...",
    "category": "guide",
    "module": "pygame-arch",
    "engine": "Pygame",
    "tier": "pro",
    "sizeBytes": 10041,
    "sections": [
      "Headless Display Setup",
      "Limitations of the dummy driver",
      "Separating Logic from Rendering",
      "Bad: logic coupled to rendering",
      "Good: logic and rendering separated",
      "Testing Collision Detection",
      "Simulating Input Events",
      "Testing Audio (Mixer)",
      "Testing State Machines and Scenes",
      "Project Layout for Testable Pygame Games",
      "pyproject.toml test configuration",
      "pygame-ce (Community Edition) Notes",
      "CI Configuration Example (GitHub Actions)"
    ]
  },
  {
    "id": "text-rendering-and-ui",
    "title": "Text Rendering and UI",
    "description": "Pygame treats text as bitmap surfaces — you render a string into a Surface through a font object, then blit that surf...",
    "category": "guide",
    "module": "pygame-arch",
    "engine": "Pygame",
    "tier": "pro",
    "sizeBytes": 9468,
    "sections": [
      "Two Font Modules",
      "`pygame.font` (SDL_ttf wrapper)",
      "`pygame.freetype` (FreeType2 wrapper)",
      "Which to Use",
      "Caching Rendered Text",
      "Word Wrapping",
      "Building a Button",
      "Simple Menu System",
      "HUD / Overlay Pattern",
      "Third-Party UI Libraries",
      "Performance Tips"
    ]
  },
  {
    "id": "tilemaps-and-level-design",
    "title": "Tilemaps and Level Design",
    "description": "Use the Tiled map editor with pytmx and pyscroll to build, load, and render tile-based levels in Pygame. This guide c...",
    "category": "guide",
    "module": "pygame-arch",
    "engine": "Pygame",
    "tier": "pro",
    "sizeBytes": 11101,
    "sections": [
      "Dependencies",
      "Tiled Map Setup",
      "Recommended Tiled settings",
      "Layer conventions",
      "Custom properties in Tiled",
      "Loading Maps with pytmx",
      "Iterating tile layers",
      "Reading tile properties",
      "Reading object layers",
      "Rendering with pyscroll (Camera Scrolling)",
      "Player sprite with world-coordinate positioning",
      "Game loop with camera following",
      "Manual Rendering (Without pyscroll)",
      "Optimized rendering: only draw visible tiles",
      "Collision from Tile Properties",
      "Spawning Entities from Object Layers",
      "Performance Tips"
    ]
  },
  {
    "id": "window-and-display-management",
    "title": "Window & Display Management",
    "description": "Managing windows and display modes is one of the first things you'll do in a Pygame project — and one of the trickies...",
    "category": "guide",
    "module": "pygame-arch",
    "engine": "Pygame",
    "tier": "pro",
    "sizeBytes": 10893,
    "sections": [
      "Setting Up the Display",
      "Display Flags",
      "The SCALED Flag (Pygame 2.0+)",
      "Fullscreen Strategies",
      "1. Exclusive Fullscreen",
      "2. Borderless Windowed (Fake Fullscreen)",
      "3. Scaled Fullscreen",
      "Toggling Fullscreen at Runtime",
      "Handling Resizable Windows",
      "VSync",
      "Multi-Monitor Support",
      "Display Info and Querying Capabilities",
      "pygame-ce: The Window Class",
      "Key Differences from `set_mode()`",
      "When to Use Which",
      "Resolution Strategy Pattern",
      "Common Pitfalls"
    ]
  },
  {
    "id": "pygame-arch-rules",
    "title": "Pygame — AI Rules",
    "description": "Engine-specific rules for projects using Pygame (and pygame-ce). These supplement the engine-agnostic rules in docs/c...",
    "category": "reference",
    "module": "pygame-arch",
    "engine": "Pygame",
    "tier": "pro",
    "sizeBytes": 8156,
    "sections": [
      "Architecture Context",
      "Tech Stack",
      "Pygame vs pygame-ce",
      "Project Structure Conventions",
      "Code Generation Rules",
      "Game Loop: Fixed Timestep with Delta Time",
      "Surface Loading: Always convert()",
      "Sprites: Subclass pygame.sprite.Sprite",
      "Collision Detection: Use Built-in Methods",
      "Audio: Mixer Initialization",
      "Drawing: Minimize draw calls",
      "Performance Guidelines",
      "Common Pitfalls"
    ]
  },
  {
    "id": "distribution-and-packaging",
    "title": "Distribution and Packaging",
    "description": "How to package a Pygame game into standalone executables for Windows, macOS, and Linux. Covers PyInstaller (default c...",
    "category": "reference",
    "module": "pygame-arch",
    "engine": "Pygame",
    "tier": "pro",
    "sizeBytes": 8802,
    "sections": [
      "Tool Comparison",
      "Project Structure for Packaging",
      "PyInstaller",
      "Install",
      "Basic build",
      "Including assets",
      "Spec file for complex builds",
      "Pygame-specific hidden imports",
      "pygame-gui integration",
      "Nuitka",
      "Install",
      "Basic build",
      "Nuitka advantages for games",
      "Nuitka build times",
      "cx_Freeze",
      "Install",
      "Setup script",
      "Build",
      "Platform-Specific Notes",
      "Windows",
      "macOS",
      "Linux",
      "Distribution Checklist"
    ]
  },
  {
    "id": "ecs-patterns",
    "title": "Entity Component System (ECS) Patterns",
    "description": "How to structure Pygame games using the Entity Component System pattern — covering when ECS is the right choice, a mi...",
    "category": "reference",
    "module": "pygame-arch",
    "engine": "Pygame",
    "tier": "pro",
    "sizeBytes": 12482,
    "sections": [
      "Why ECS in Pygame?",
      "When to Use ECS",
      "Minimal Hand-Rolled ECS",
      "Components: Plain Data",
      "World: Entity Storage",
      "Systems: Logic",
      "Wiring It All Together",
      "Using Esper (Popular ECS Library)",
      "Installation",
      "Esper v3.x API (Breaking Change from v2)",
      "Esper Processors (Systems)",
      "Esper World Contexts",
      "Esper Events",
      "Bridging ECS and Pygame Sprite Groups",
      "Performance Notes",
      "Query Optimisation",
      "When to Avoid ECS"
    ]
  },
  {
    "id": "genre-implementation-patterns",
    "title": "Genre Implementation Patterns",
    "description": "Different game genres share common structural patterns. This reference covers the key architectural decisions and cod...",
    "category": "reference",
    "module": "pygame-arch",
    "engine": "Pygame",
    "tier": "pro",
    "sizeBytes": 14611,
    "sections": [
      "Platformer",
      "Core Architecture",
      "Gravity and Jumping",
      "Key Decisions",
      "Top-Down RPG",
      "Core Architecture",
      "Free Movement with Tile Collision",
      "Dialogue System Skeleton",
      "Key Decisions",
      "Twin-Stick Shooter",
      "Core Architecture",
      "Player with Mouse Aiming",
      "Bullet with Lifetime",
      "Key Decisions",
      "Puzzle / Match-3",
      "Core Architecture",
      "Board Representation",
      "Key Decisions",
      "General Patterns Across All Genres",
      "Scene / State Manager",
      "Delta-Time Movement",
      "Draw Order (Depth Sorting)"
    ]
  },
  {
    "id": "surfaces-and-drawing",
    "title": "Surfaces & Drawing Reference",
    "description": "Everything visible in Pygame is a Surface. The display window is a Surface. Sprites hold Surfaces. UI elements are dr...",
    "category": "reference",
    "module": "pygame-arch",
    "engine": "Pygame",
    "tier": "pro",
    "sizeBytes": 11140,
    "sections": [
      "Creating Surfaces",
      "The SRCALPHA Flag",
      "Format Conversion (Critical for Performance)",
      "When to use which",
      "Blitting (Drawing Surfaces onto Surfaces)",
      "Batch Blitting",
      "Blend Modes (special_flags)",
      "Transparency",
      "1. Colorkey Transparency",
      "2. Surface Alpha (Blanket Transparency)",
      "3. Per-Pixel Alpha",
      "Compatibility Matrix",
      "Drawing Primitives",
      "Subsurfaces and Clipping",
      "Subsurfaces — shared pixel data",
      "Clipping — restrict drawing area",
      "Display Updates",
      "Dirty Rect Pattern",
      "Pixel-Level Access",
      "pygame-ce Specific Features",
      "Performance Checklist"
    ]
  },
  {
    "id": "third-party-ecosystem",
    "title": "Third-Party Ecosystem Reference",
    "description": "Pygame's core library handles display, input, audio, and basic drawing — but the ecosystem of third-party packages fi...",
    "category": "reference",
    "module": "pygame-arch",
    "engine": "Pygame",
    "tier": "pro",
    "sizeBytes": 7774,
    "sections": [
      "Physics: pymunk",
      "Integration with Pygame",
      "Tilemaps: pytmx + pyscroll",
      "Rendering and Camera",
      "UI: pygame_gui",
      "ECS: esper",
      "Networking: pygame.net Alternatives",
      "Other Notable Libraries",
      "numpy + Surfaces",
      "pygame vs pygame-ce Compatibility"
    ]
  },
  {
    "id": "raylib-arch/E1",
    "title": "E1 — Raylib Architecture Overview",
    "description": "",
    "category": "architecture",
    "module": "raylib-arch",
    "engine": "raylib",
    "tier": "pro",
    "sizeBytes": 6773,
    "sections": [
      "Philosophy: Simplicity as a Feature",
      "Module Architecture",
      "rcore — Platform Layer",
      "rlgl — OpenGL Abstraction",
      "rshapes — 2D Shape Drawing",
      "rtextures — Image and Texture Management",
      "rtext — Font and Text",
      "rmodels — 3D Models and Animation",
      "raudio — Sound and Music",
      "Rendering Pipeline",
      "Custom Shaders",
      "Input Handling",
      "Build System",
      "When to Choose Raylib"
    ]
  },
  {
    "id": "raylib-arch/G1",
    "title": "G1 — Raylib Multi-Language Bindings Guide",
    "description": "",
    "category": "guide",
    "module": "raylib-arch",
    "engine": "raylib",
    "tier": "pro",
    "sizeBytes": 7621,
    "sections": [
      "Why Bindings Matter for Raylib",
      "Tier 1: Actively Maintained, Production-Ready",
      "C# — Raylib-CsLo / Raylib-cs",
      "Python — raylib-python-cffi",
      "Go — raylib-go",
      "Rust — raylib-rs",
      "Zig — raylib-zig",
      "Tier 2: Well-Maintained, Smaller Communities",
      "Tier 3: Experimental / Less Active",
      "Choosing a Binding",
      "Decision Factors",
      "Binding Architecture Patterns",
      "Common Patterns Across Bindings",
      "Tips for Working with Bindings"
    ]
  },
  {
    "id": "raylib-arch/G2",
    "title": "G2 — Raylib 2D Game Patterns",
    "description": "This guide covers common 2D game development patterns in raylib: sprite animation, Camera2D, tilemap rendering, and s...",
    "category": "guide",
    "module": "raylib-arch",
    "engine": "raylib",
    "tier": "pro",
    "sizeBytes": 10676,
    "sections": [
      "Sprite Sheet Animation",
      "Loading and Drawing a Single Frame",
      "Frame Advancement with Timing",
      "Grid-Based Sprite Sheets",
      "Camera2D",
      "Basic Setup",
      "Drawing with the Camera",
      "Smooth Camera Follow",
      "Camera Bounds Clamping",
      "Screen-to-World Conversion",
      "Tilemap Rendering",
      "Simple Tilemap from Array",
      "Culling Off-Screen Tiles",
      "Parallax Scrolling",
      "Screen Management",
      "Performance Tips for 2D"
    ]
  },
  {
    "id": "raylib-arch/G3",
    "title": "G3 — Raylib 3D Basics Guide",
    "description": "Raylib makes 3D surprisingly approachable. The same simplicity that defines its 2D API extends to 3D — a camera, a Be...",
    "category": "guide",
    "module": "raylib-arch",
    "engine": "raylib",
    "tier": "pro",
    "sizeBytes": 10686,
    "sections": [
      "Camera System",
      "Camera3D Setup",
      "Projection Types",
      "Built-In Camera Controls",
      "Rendering 3D Scenes",
      "The BeginMode3D / EndMode3D Block",
      "3D Primitive Shapes",
      "Loading and Drawing 3D Models",
      "Supported Formats",
      "Basic Model Loading",
      "Model Transformations",
      "Skeletal Animation",
      "Basic Lighting",
      "Setting Up Lights",
      "Light Types",
      "Collision Detection",
      "Bounding Box Collisions",
      "Ray Casting (Mouse Picking)",
      "Other Collision Checks",
      "Putting It Together: Minimal 3D Game Loop",
      "Tips and Gotchas"
    ]
  },
  {
    "id": "raylib-arch/G4",
    "title": "G4 — Raylib Shaders and Textures",
    "description": "This guide covers raylib's shader and texture pipeline: loading GLSL shaders, setting uniforms, render-to-texture wit...",
    "category": "guide",
    "module": "raylib-arch",
    "engine": "raylib",
    "tier": "pro",
    "sizeBytes": 10893,
    "sections": [
      "Texture Fundamentals",
      "Loading and Drawing Textures",
      "Texture Filtering and Wrapping",
      "Generating Textures from Images in Memory",
      "Shader Basics",
      "Loading a Shader",
      "GLSL Version Notes",
      "Setting Shader Uniforms",
      "Getting Locations and Setting Values",
      "Uniform Type Tags",
      "Binding Additional Textures",
      "Drawing with Shaders",
      "Applying a Shader to a Sprite",
      "Applying a Shader to Shapes",
      "Render Textures (Render-to-Texture)",
      "Basic Render Texture Usage",
      "Why Flip the Texture?",
      "Post-Processing Pipeline Pattern",
      "Example: CRT Scanline Effect",
      "Multi-Pass Rendering",
      "Common Pitfalls"
    ]
  },
  {
    "id": "raylib-arch/G5",
    "title": "G5 — Raylib Physics & Collision Patterns",
    "description": "Raylib has no built-in physics engine — collision detection is a set of pure CPU math functions in the rshapes module...",
    "category": "guide",
    "module": "raylib-arch",
    "engine": "raylib",
    "tier": "pro",
    "sizeBytes": 10230,
    "sections": [
      "Built-In Collision Functions",
      "The Full 2D Collision API",
      "3D Collision Functions",
      "Pattern: AABB Collision Response",
      "Why Minimum Penetration?",
      "Pattern: Circle Collision Response",
      "Pattern: Sweep-Based Movement",
      "Pattern: Simple Spatial Grid",
      "When to Use a Physics Library",
      "Integrating a Physics Library with Raylib",
      "Common Mistakes"
    ]
  },
  {
    "id": "raylib-arch/G6",
    "title": "G6 — Raylib Web Export & Cross-Platform Building",
    "description": "",
    "category": "guide",
    "module": "raylib-arch",
    "engine": "raylib",
    "tier": "pro",
    "sizeBytes": 7632,
    "sections": [
      "Overview",
      "Desktop Builds (Windows, Linux, macOS)",
      "CMake (Recommended)",
      "Makefile",
      "Linux: Wayland Support",
      "Web Builds (HTML5 / WebAssembly)",
      "Prerequisites: Emscripten SDK",
      "Step 1: Build Raylib for Web",
      "Step 2: Adapt Your Game Loop",
      "Step 3: Compile with emcc",
      "Essential Emscripten Flags",
      "Step 4: Serve and Test",
      "Web Build Gotchas",
      "File I/O",
      "Audio",
      "Window Sizing",
      "Memory",
      "Threading",
      "Cross-Compilation Tips",
      "Conditional Code Pattern",
      "Asset Pipeline",
      "CI/CD for Multi-Platform",
      "Quick Reference: Build Commands"
    ]
  },
  {
    "id": "raylib-arch/G7",
    "title": "G7 — Game State Management and ECS Patterns",
    "description": "Raylib provides no built-in state management, scene system, or ECS. This is by design — raylib is a rendering and inp...",
    "category": "guide",
    "module": "raylib-arch",
    "engine": "raylib",
    "tier": "pro",
    "sizeBytes": 12477,
    "sections": [
      "Pattern 1: Game State Machine",
      "Minimal Implementation",
      "Pattern 2: Scene System with Function Pointers",
      "Implementing a Scene",
      "Pattern 3: Entity Component System (ECS)",
      "When to Use ECS",
      "Option A: DIY Minimal ECS (C)",
      "Option B: Flecs (Recommended Library)",
      "Flecs Setup",
      "Other ECS Libraries Compatible with Raylib",
      "Choosing the Right Pattern"
    ]
  },
  {
    "id": "raylib-arch/G8",
    "title": "Audio Programming with Raylib",
    "description": "Raylib's audio module (raudio) provides a minimal, zero-dependency audio system built on top of miniaudio. It support...",
    "category": "guide",
    "module": "raylib-arch",
    "engine": "raylib",
    "tier": "pro",
    "sizeBytes": 10490,
    "sections": [
      "Audio System Initialization",
      "Device Control",
      "Sound — Short Clips",
      "Loading and Playback",
      "Sound Aliases",
      "Sound Controls",
      "Music — Streamed Playback",
      "Loading and Playback",
      "Music Controls",
      "AudioStream — Procedural Audio",
      "Push-Based Approach",
      "Callback-Based Approach",
      "AudioStream Controls",
      "DSP Processors",
      "Wave — Raw Audio Data",
      "Supported Formats",
      "Common Patterns",
      "Audio Manager Pattern",
      "Pitch Variation for Sound Effects",
      "Performance Tips"
    ]
  },
  {
    "id": "raylib-arch-rules",
    "title": "Raylib — AI Rules",
    "description": "Engine-specific rules for projects using Raylib. These supplement the engine-agnostic rules in docs/core/ai-workflow/...",
    "category": "reference",
    "module": "raylib-arch",
    "engine": "raylib",
    "tier": "pro",
    "sizeBytes": 5472,
    "sections": [
      "Architecture Context",
      "Tech Stack",
      "What Raylib Is (and Is Not)",
      "Popular Language Bindings",
      "Project Structure Conventions",
      "Module Architecture",
      "Raylib-Specific Code Rules",
      "Game Loop Pattern",
      "Drawing Must Be Between BeginDrawing/EndDrawing",
      "Resource Loading After InitWindow",
      "Prefer Built-in Types",
      "Screen Management Pattern",
      "Common Mistakes to Catch"
    ]
  },
  {
    "id": "raylib-arch/R1",
    "title": "R1 — Raylib Language Bindings Reference",
    "description": "",
    "category": "reference",
    "module": "raylib-arch",
    "engine": "raylib",
    "tier": "pro",
    "sizeBytes": 8175,
    "sections": [
      "Why 70+ Language Bindings Exist",
      "Tier 1: Mature Bindings (Updated to Raylib 5.5+)",
      "C# — `Raylib-CSharp`",
      "Python — `raylib-python-cffi`",
      "Rust — `raylib-rs`",
      "Go — `raylib-go`",
      "Zig — `raylib-zig`",
      "Nim — `naylib`",
      "Odin — Built-in",
      "Tier 2: Active Bindings (Updated to 5.0+)",
      "Tier 3: Experimental / Niche",
      "Choosing a Binding",
      "API Translation Pattern",
      "Building Raylib from Source for Custom Bindings",
      "Companion Libraries"
    ]
  },
  {
    "id": "raylib-arch/R2",
    "title": "R2 — Raylib Audio & Input Systems Reference",
    "description": "Raylib's audio module (raudio.c) and input system (part of rcore.c) are designed for simplicity. This reference cover...",
    "category": "reference",
    "module": "raylib-arch",
    "engine": "raylib",
    "tier": "pro",
    "sizeBytes": 12685,
    "sections": [
      "Audio System",
      "Audio Device Lifecycle",
      "Sound API",
      "Music API",
      "Supported Audio Formats",
      "Input System",
      "Keyboard Input",
      "Mouse Input",
      "Gamepad Input",
      "Touch Input (Mobile / Web)",
      "Gesture Detection",
      "Common Patterns",
      "Input Abstraction Layer",
      "Audio Manager Pattern",
      "Common Mistakes"
    ]
  },
  {
    "id": "raylib-arch/R3",
    "title": "R3 — Raylib GUI and Tooling Reference",
    "description": "",
    "category": "reference",
    "module": "raylib-arch",
    "engine": "raylib",
    "tier": "pro",
    "sizeBytes": 9974,
    "sections": [
      "raygui: Immediate-Mode GUI for Raylib",
      "How Immediate-Mode GUI Works",
      "Complete Control Inventory",
      "Version 5.0 Upcoming Features",
      "Style and Theming System",
      "Loading Custom Styles",
      "Style Properties",
      "Built-in Icon System",
      "Companion Tools",
      "rGuiStyler — Visual Style Editor",
      "rGuiIcons — Icon Editor",
      "rGuiLayout — Visual Layout Editor",
      "Integration Pattern: Single-Header Include",
      "Common Patterns for Game Dev Tools",
      "In-Game Debug Panel",
      "Level Editor Toolbar",
      "Alternatives: Other GUI Options for Raylib"
    ]
  },
  {
    "id": "engine-lifecycle",
    "title": "Engine Lifecycle & Phases",
    "description": "Ren'Py follows a well-defined lifecycle from launch to quit. Understanding these phases helps you know when your code...",
    "category": "architecture",
    "module": "renpy-arch",
    "engine": "Ren'Py",
    "tier": "pro",
    "sizeBytes": 11935,
    "sections": [
      "Phase Overview",
      "Phase 1: Early/Parse Phase",
      "Phase 2: Init Phase",
      "What Happens During Init",
      "`define` vs `default`",
      "Phase 3: Splashscreen",
      "Phase 4: Main Menu",
      "Phase 5: In-Game Phase",
      "The Interaction Model",
      "The Rollback System",
      "Contexts",
      "Phase 6: Quit",
      "Configuration Hooks by Phase",
      "Lifecycle Diagram",
      "Common Patterns",
      "Running Code at Game Start (Not Init)",
      "Migrating Saves Across Versions",
      "Phase-Aware Debug Logging"
    ]
  },
  {
    "id": "image-and-layering-system",
    "title": "Image and Layering System",
    "description": "How Ren'Py organises, composes, and displays images — from basic image statements to the layered image system and dyn...",
    "category": "architecture",
    "module": "renpy-arch",
    "engine": "Ren'Py",
    "tier": "pro",
    "sizeBytes": 9975,
    "sections": [
      "Image Fundamentals",
      "Defining Images",
      "Automatic Image Definition",
      "Displayables for Image Composition",
      "Composite",
      "ConditionSwitch",
      "DynamicDisplayable",
      "Fixed, Crop, HBox, VBox",
      "Layered Image System",
      "Core Concept",
      "Layer Types",
      "Auto-Discovery",
      "The `image_format` Property",
      "Conditional Layers with `when`",
      "Conditional Layers with `if`",
      "Groups with Variants",
      "Multiple (Non-Exclusive) Groups",
      "LayeredImageProxy",
      "Attribute Pipeline",
      "Example: Dynamic Colour Variants",
      "Practical Architecture Decisions",
      "When to Use Layered Images vs. Composite",
      "File Organisation",
      "Performance Notes"
    ]
  },
  {
    "id": "rollback-system",
    "title": "Rollback System",
    "description": "Ren'Py's rollback system lets players rewind the game to earlier states, functioning like an undo/redo system. It is ...",
    "category": "architecture",
    "module": "renpy-arch",
    "engine": "Ren'Py",
    "tier": "pro",
    "sizeBytes": 9039,
    "sections": [
      "How Rollback Works",
      "What gets captured",
      "What does NOT get captured",
      "Revertable Types",
      "When revertability breaks",
      "Variable Change Detection",
      "Controlling Rollback",
      "Blocking rollback",
      "Fixed rollback",
      "Disabling rollback entirely",
      "The NoRollback Class",
      "Rollback and Screens",
      "Rollback and Save/Load Interaction",
      "Common Pitfalls",
      "Summary"
    ]
  },
  {
    "id": "screenplay-scripting",
    "title": "Screenplay Scripting Architecture",
    "description": "How Ren'Py's screenplay scripting language works under the hood — execution model, statement types, control flow, and...",
    "category": "architecture",
    "module": "renpy-arch",
    "engine": "Ren'Py",
    "tier": "pro",
    "sizeBytes": 9163,
    "sections": [
      "Execution Model",
      "Key Runtime Properties",
      "Compilation Order",
      "Statement Reference",
      "Labels — Named Entry Points",
      "Navigation: jump vs. call",
      "Dialogue and Narration",
      "Menus — Player Choices",
      "Conditional Flow",
      "Loops (Ren'Py 7.5+)",
      "Image Layer System",
      "Image Tags and Attributes",
      "Transitions",
      "Variable Scoping",
      "File Organization for Large Projects",
      "Debugging Script Flow"
    ]
  },
  {
    "id": "store-and-namespace-system",
    "title": "Ren'Py Store and Namespace System",
    "description": "How Ren'Py organizes Python variables into stores, how the default store interacts with save/load and rollback, and h...",
    "category": "architecture",
    "module": "renpy-arch",
    "engine": "Ren'Py",
    "tier": "pro",
    "sizeBytes": 8714,
    "sections": [
      "What Is a Store?",
      "define vs. default vs. $ Assignment",
      "define — Constant-Like, Init-Time Only",
      "default — Save-Aware, Runtime Variable",
      "$ Assignment — Inline Python, Runtime Only",
      "Decision Table",
      "Named Stores — Module-Like Organization",
      "Declaring Variables in a Named Store",
      "Python Block in Named Store",
      "Named Store Behavior",
      "How Stores Interact with Save/Load",
      "What Ren'Py Saves",
      "What Ren'Py Does NOT Save",
      "The Serialization Constraint",
      "Rollback and Stores",
      "Rollback-Safe Patterns",
      "Rollback-Breaking Patterns",
      "Accessing Stores from Python",
      "From a python block (default store):",
      "From a `python in` block (named store):",
      "From an external `.py` module:",
      "Common Pitfalls"
    ]
  },
  {
    "id": "accessibility-and-testing",
    "title": "Accessibility & Testing",
    "description": "Ren'Py has built-in accessibility features that make visual novels playable for vision-impaired, motor-impaired, and ...",
    "category": "guide",
    "module": "renpy-arch",
    "engine": "Ren'Py",
    "tier": "pro",
    "sizeBytes": 9608,
    "sections": [
      "Self-Voicing Mode",
      "Alt Text for Custom Displayables",
      "Alt Text on Characters",
      "Descriptive Text (Visual Scene Descriptions)",
      "Descriptive Text Character",
      "Accessibility Configuration",
      "High Contrast and Font Scaling",
      "Accessibility Best Practices",
      "Developer Mode & Debug Tools",
      "Keyboard Shortcuts (Developer Mode)",
      "Debug Console (`Shift+O`)",
      "Style Inspector (`Shift+I`)",
      "Lint (Script Checking)",
      "Warp-to-Line (Skip to Any Point)",
      "Automated Testing",
      "Test Cases (testcase statement)",
      "CI/CD with Lint",
      "Manual Testing Strategy"
    ]
  },
  {
    "id": "atl-animation-transforms",
    "title": "ATL: Animation and Transformation Language",
    "description": "ATL is Ren'Py's built-in language for animating and positioning displayables — images, characters, UI elements, and a...",
    "category": "guide",
    "module": "renpy-arch",
    "engine": "Ren'Py",
    "tier": "pro",
    "sizeBytes": 7876,
    "sections": [
      "Where ATL Lives",
      "Core Transform Properties",
      "Warpers (Timing Functions)",
      "Sequential and Parallel Blocks",
      "Repeat and Looping",
      "Events",
      "Composing Transforms",
      "Frame-Based Animation",
      "Using ATL from Python",
      "Practical Patterns",
      "Character Entrance (Visual Novel)",
      "Attention Shake",
      "Breathing Idle Animation",
      "Choice Button Hover Effect",
      "Common Mistakes"
    ]
  },
  {
    "id": "audio-and-transitions",
    "title": "Audio System & Transitions",
    "description": "Ren'Py provides a channel-based audio system for music, sound effects, and voice, plus a rich transition system (incl...",
    "category": "guide",
    "module": "renpy-arch",
    "engine": "Ren'Py",
    "tier": "pro",
    "sizeBytes": 8289,
    "sections": [
      "Audio Channels",
      "Playing Music",
      "Intro-to-Loop Pattern",
      "Sound Effects",
      "Voice",
      "Custom Channels",
      "Volume Control",
      "Audio Formats",
      "Transitions",
      "Built-in Transitions",
      "Custom Dissolves and Fades",
      "Image Dissolve (Custom Wipe Patterns)",
      "ATL (Animation and Transformation Language)",
      "Basic Transforms",
      "ATL Properties",
      "Interpolation Warps",
      "Looping and Sequencing",
      "Combining Transforms",
      "Parallel Animation",
      "Python-Driven ATL",
      "Audio + Transition Synchronization",
      "Common Pitfalls"
    ]
  },
  {
    "id": "character-and-dialogue",
    "title": "Character Definition & Dialogue System",
    "description": "Ren'Py's dialogue system is the backbone of every visual novel. Characters are first-class objects that control how t...",
    "category": "guide",
    "module": "renpy-arch",
    "engine": "Ren'Py",
    "tier": "pro",
    "sizeBytes": 12393,
    "sections": [
      "Defining Characters",
      "Character Parameters",
      "Dynamic Names",
      "Writing Dialogue",
      "Basic Say Statements",
      "Dialogue with Expressions",
      "ADV Mode vs NVL Mode",
      "ADV Mode (Default)",
      "NVL Mode",
      "Key NVL Concepts",
      "Switching Between ADV and NVL",
      "Text Tags",
      "Common Text Tags",
      "Escaping Curly Braces",
      "Text Tag Interpolation",
      "Side Images",
      "Transforming Side Images",
      "Narration Patterns",
      "Silent Narrator",
      "Named Narrator",
      "Thought Bubbles",
      "Character-Attributed Narration",
      "Voice and Audio with Characters",
      "Auto-Voice",
      "Callbacks",
      "Character Groups and Inheritance",
      "Common Pitfalls"
    ]
  },
  {
    "id": "choices-and-branching",
    "title": "Choices, Branching & Variables",
    "description": "The menu statement is the core mechanic for player agency in Ren'Py visual",
    "category": "guide",
    "module": "renpy-arch",
    "engine": "Ren'Py",
    "tier": "pro",
    "sizeBytes": 10825,
    "sections": [
      "Basic Choices",
      "Ren'Py script",
      "How control flows",
      "Variables and State Tracking",
      "Modifying variables from choices",
      "Conditional Choices",
      "Showing disabled choices (greyed out)",
      "Complex conditions",
      "Affinity / Point Systems",
      "Setup",
      "Accumulating points through choices",
      "Branching on accumulated points",
      "Menu Sets (Exhaustive Choices)",
      "Nested Menus",
      "Boolean Flags for Story Branches",
      "Python Integration for Complex Logic",
      "Common Pitfalls"
    ]
  },
  {
    "id": "creator-defined-displayables",
    "title": "Creator-Defined Displayables (CDD)",
    "description": "Creator-Defined Displayables let you bypass Ren'Py's built-in images, transforms, and screen language to render arbit...",
    "category": "guide",
    "module": "renpy-arch",
    "engine": "Ren'Py",
    "tier": "pro",
    "sizeBytes": 10679,
    "sections": [
      "When to Use a CDD",
      "Basic Structure",
      "Using It in Script",
      "The Core Methods",
      "`render(self, width, height, st, at)`",
      "`event(self, ev, x, y, st)`",
      "`visit(self)`",
      "`per_interact(self)`",
      "Composing Child Displayables",
      "Save/Load Compatibility",
      "Performance Tips",
      "Complete Example: Simple Minigame"
    ]
  },
  {
    "id": "gallery-replay-musicroom",
    "title": "Gallery, Replay, and Music Room Systems",
    "description": "How to implement unlockable CG galleries, scene replay systems, and music rooms in Ren'Py — covering the built-in Gal...",
    "category": "guide",
    "module": "renpy-arch",
    "engine": "Ren'Py",
    "tier": "pro",
    "sizeBytes": 11618,
    "sections": [
      "Gallery (CG Viewer)",
      "Basic Setup",
      "Key Gallery Properties",
      "Gallery Actions for Screens",
      "Applying Transforms",
      "Music Room",
      "Setup",
      "Music Room Screen",
      "MusicRoom Actions Reference",
      "Scene Replay",
      "Marking Replayable Scenes",
      "Replay Screen Integration",
      "Passing State into Replays",
      "Detecting Replay Mode",
      "Putting It All Together: Extras Menu",
      "Achievement-Style Unlock Tracking",
      "Completion Percentage",
      "Common Pitfalls"
    ]
  },
  {
    "id": "gui-customization",
    "title": "GUI Customization & Screen Language",
    "description": "Ren'Py's UI system is built on the screen language — a declarative DSL for composing interactive interfaces. Every me...",
    "category": "guide",
    "module": "renpy-arch",
    "engine": "Ren'Py",
    "tier": "pro",
    "sizeBytes": 10412,
    "sections": [
      "The Three Customization Tiers",
      "Tier 1: gui.rpy Variables (Easiest)",
      "-- gui.rpy --",
      "Tier 2: Modifying screens.rpy (Intermediate)",
      "Customize the say screen (dialogue display)",
      "Tier 3: Custom Screens from Scratch (Advanced)",
      "Core Displayables",
      "Layout Containers",
      "Interactive Elements",
      "Scrollable Content",
      "Screen Actions",
      "Navigation Actions",
      "Data Actions",
      "Audio Actions",
      "Conditional Sensitivity",
      "Screen Composition with `use`",
      "Tags and Modal Screens",
      "Tags — prevent stacking",
      "Modal — block background interaction",
      "Styling Screens",
      "Style Properties",
      "Transforms on Screen Elements",
      "Important Rules",
      "Common Pitfalls"
    ]
  },
  {
    "id": "inventory-and-rpg-mechanics",
    "title": "Inventory and RPG Mechanics",
    "description": "Many visual novels incorporate light RPG elements: inventories, character stats, currency, equipment, and skill check...",
    "category": "guide",
    "module": "renpy-arch",
    "engine": "Ren'Py",
    "tier": "pro",
    "sizeBytes": 14320,
    "sections": [
      "Foundational Rule: Use `default` for All Mutable State",
      "Simple Inventory (List-Based)",
      "Preventing duplicates",
      "Structured Inventory (Class-Based)",
      "Using the structured inventory in script",
      "Inventory Screen",
      "Character Stats",
      "Simple stat block",
      "Stat checks in dialogue",
      "Leveling up",
      "Equipment System",
      "Equipment screen",
      "Currency and Shops",
      "Rollback and Save Safety",
      "Persistent Unlocks Across Playthroughs",
      "Common Pitfalls"
    ]
  },
  {
    "id": "minigame-integration",
    "title": "Minigame Integration with Creator-Defined Displayables",
    "description": "How to build interactive minigames inside Ren'Py using Creator-Defined",
    "category": "guide",
    "module": "renpy-arch",
    "engine": "Ren'Py",
    "tier": "pro",
    "sizeBytes": 9335,
    "sections": [
      "When to Use a CDD",
      "Anatomy of a Creator-Defined Displayable",
      "Minimal CDD skeleton",
      "Showing a CDD in Script",
      "Delta Time and Frame-Rate Independence",
      "Rendering Child Displayables",
      "Declaring children for prediction",
      "Handling Input",
      "Mouse clicks",
      "Keyboard — continuous movement",
      "Save/Load and Rollback Compatibility",
      "Integrating with Ren'Py Variables",
      "Performance Tips for CDDs",
      "Alternative: Renpygame Framework"
    ]
  },
  {
    "id": "nvl-mode-and-text-formatting",
    "title": "NVL Mode and Text Formatting",
    "description": "Ren'Py supports two dialogue presentation modes: ADV (one line at a time in a textbox) and NVL (multiple lines fillin...",
    "category": "guide",
    "module": "renpy-arch",
    "engine": "Ren'Py",
    "tier": "pro",
    "sizeBytes": 10811,
    "sections": [
      "NVL Mode Basics",
      "Declaring NVL Characters",
      "Character Name Styles",
      "Page Management",
      "`nvl clear` Statement",
      "`{clear}` Text Tag (Monologue Mode)",
      "`config.nvl_list_length`",
      "Switching Between ADV and NVL",
      "Per-Character Switching",
      "Window Show/Hide Control",
      "NVL-Mode Menus",
      "Click-to-Continue (CTC) Indicators",
      "Configuration",
      "Custom CTC Displayable",
      "Text Tags Reference",
      "Formatting Tags",
      "Spacing and Layout Tags",
      "Timing and Flow Tags",
      "Interactive Tags",
      "Ruby Text (Furigana)",
      "Accessibility Tags",
      "Paged Rollback",
      "NVL Screen Customization",
      "Common Pitfalls"
    ]
  },
  {
    "id": "python-integration",
    "title": "Python Integration in Ren'Py",
    "description": "How to use Python within Ren'Py projects — from single-line expressions to full class hierarchies, custom screens bac...",
    "category": "guide",
    "module": "renpy-arch",
    "engine": "Ren'Py",
    "tier": "pro",
    "sizeBytes": 12576,
    "sections": [
      "Python Entry Points",
      "1. Single-Line Python (`$`)",
      "2. Multi-Line Python Block (`python:`)",
      "3. Init-Time Python (`init python:`)",
      "4. Init Priority",
      "Variables: define vs. default vs. $",
      "`define` — Constants (Not Saved)",
      "`default` — Mutable State (Saved)",
      "Runtime Assignment (`$`)",
      "Common Mistake: define with Mutable State",
      "Custom Classes and Save Compatibility",
      "Reloadable Classes",
      "Using `__getstate__` / `__setstate__`",
      "Screens Backed by Python",
      "Data-Driven Screens",
      "Screen Actions Calling Python",
      "Third-Party Libraries",
      "Safe to Use Directly",
      "Importing Libraries",
      "Caveats",
      "Rollback and Python",
      "Rollback-Safe Patterns",
      "Rollback-Unsafe Patterns",
      "Protecting Unsafe Code",
      "Debugging Python in Ren'Py",
      "Developer Console (Shift+O)",
      "Logging",
      "Common Python Errors"
    ]
  },
  {
    "id": "save-system-and-persistence",
    "title": "Save System and Persistence",
    "description": "Ren'Py's save system handles most persistence automatically, but game developers need to understand what gets saved, ...",
    "category": "guide",
    "module": "renpy-arch",
    "engine": "Ren'Py",
    "tier": "pro",
    "sizeBytes": 13773,
    "sections": [
      "Three Layers of Persistence",
      "Layer 1: Game Variables (`default`)",
      "Declaring game variables",
      "What gets saved",
      "What does NOT get saved",
      "Making custom classes save-compatible",
      "Layer 2: Persistent Data",
      "Basic usage",
      "Where persistent data is stored",
      "Clearing persistent data",
      "Custom merge logic",
      "Layer 3: Multi-Game Persistence",
      "Save/Load API",
      "Saving programmatically",
      "Loading programmatically",
      "Querying save metadata",
      "Adding custom JSON callbacks",
      "Save Migration (`after_load`)",
      "Basic migration",
      "Version-based migration",
      "Using `config.after_load_callbacks`",
      "Rollback Control",
      "Block rollback entirely",
      "Fix rollback (view-only)",
      "Retain data after load",
      "Common Patterns",
      "New Game Plus",
      "Achievement system",
      "Auto-save on chapter transitions",
      "Common Pitfalls"
    ]
  },
  {
    "id": "screen-language-and-actions",
    "title": "Screen Language and Actions",
    "description": "Ren'Py's screen language is a mostly-declarative DSL for building user interfaces — menus, HUDs, inventories, minigam...",
    "category": "guide",
    "module": "renpy-arch",
    "engine": "Ren'Py",
    "tier": "pro",
    "sizeBytes": 13376,
    "sections": [
      "Declaring a Screen",
      "Parameters",
      "Showing vs Calling",
      "Layout Containers",
      "vbox / hbox — Linear Layout",
      "frame — Windowed Container",
      "grid — Row/Column Layout",
      "fixed — Absolute Positioning",
      "viewport / vpgrid — Scrollable Areas",
      "Interactive Displayables",
      "textbutton",
      "imagebutton",
      "bar / vbar",
      "input",
      "Actions Reference",
      "Navigation",
      "Data Manipulation",
      "File Operations",
      "Audio",
      "Utility",
      "The use Statement",
      "Scope rules with use",
      "Screen Variables (default / SetScreenVariable)",
      "Tooltips",
      "Conditional and Looping Displayables",
      "Common Screen Patterns",
      "Confirmation Dialog",
      "Notification Toast",
      "Quick Menu (During Dialogue)",
      "Screen vs Python Screens",
      "Quick Reference"
    ]
  },
  {
    "id": "variables-and-data-management",
    "title": "Variables and Data Management",
    "description": "A comprehensive guide to how Ren'Py stores, saves, and persists data — covering define vs default, the store namespac...",
    "category": "guide",
    "module": "renpy-arch",
    "engine": "Ren'Py",
    "tier": "pro",
    "sizeBytes": 12045,
    "sections": [
      "define vs default",
      "define — Constants (Not Saved)",
      "default — Mutable State (Saved)",
      "Side-by-Side Comparison",
      "Rule of Thumb",
      "The Store Namespace",
      "Accessing Store Variables",
      "Named Stores (Namespacing)",
      "Persistent Data",
      "Basic Usage",
      "Persistent Properties",
      "Checking Persistent State for New Game+ Features",
      "Resetting Persistent Data",
      "Screen Actions for Variables",
      "SetVariable / ToggleVariable",
      "SetField / ToggleField (for Object Attributes)",
      "Action Chaining",
      "Common Patterns",
      "Affinity / Relationship Points",
      "Inventory System",
      "Tracking Visited Labels",
      "Variable Lifecycle and Save Compatibility",
      "Common Pitfalls"
    ]
  },
  {
    "id": "config-and-preferences",
    "title": "Configuration & Preferences Reference",
    "description": "Ren'Py's behavior is controlled by two systems: config variables (developer settings, set once in options.rpy) and pr...",
    "category": "reference",
    "module": "renpy-arch",
    "engine": "Ren'Py",
    "tier": "pro",
    "sizeBytes": 7259,
    "sections": [
      "Config Variables (`config.*`)",
      "Project Identity",
      "Display & Window",
      "Text & Dialogue",
      "Rollback & History",
      "Image & Performance",
      "Save System",
      "Developer Mode",
      "Preference Variables (`preferences.*`)",
      "Audio",
      "Display",
      "Accessibility",
      "Accessing Config and Preferences in Code",
      "Reading Values",
      "Setting Preferences in Screens",
      "Custom Config Variables",
      "Common Pitfalls"
    ]
  },
  {
    "id": "distribution-and-localization",
    "title": "Distribution & Localization Reference",
    "description": "How to build, package, and distribute a Ren'Py game across platforms, and how to add multi-language support using Ren...",
    "category": "reference",
    "module": "renpy-arch",
    "engine": "Ren'Py",
    "tier": "pro",
    "sizeBytes": 9063,
    "sections": [
      "Building Distributions",
      "Supported Platforms",
      "Build Configuration",
      "Archives",
      "Android Builds (RAPT)",
      "iOS Builds (Renios)",
      "Web Builds (Renpyweb)",
      "Localization (Translation)",
      "Generating Translation Files",
      "Translating Dialogue",
      "Translating UI Strings",
      "Translate Python Strings",
      "Font and Style Overrides",
      "Language Switching",
      "Auto-Detection",
      "Translation Workflow Tips",
      "Save / Load and Persistent Data",
      "Save Compatibility",
      "Persistent Data Across Versions",
      "Save Location",
      "Common Pitfalls"
    ]
  },
  {
    "id": "layered-images",
    "title": "Ren'Py Layered Images",
    "description": "Layered images compose character sprites from interchangeable parts — base body, outfit, hairstyle, expression — with...",
    "category": "reference",
    "module": "renpy-arch",
    "engine": "Ren'Py",
    "tier": "pro",
    "sizeBytes": 10794,
    "sections": [
      "The layeredimage Statement",
      "Core Statements Inside layeredimage",
      "always — Permanent Layers",
      "group — Mutually Exclusive Attributes",
      "attribute — Individual Layer Options",
      "if — Conditional Layers",
      "The auto Keyword",
      "auto at the Top Level",
      "Transforms and Positioning",
      "Common Transform Properties",
      "Attribute Conditions with when",
      "Programmatic Attribute Control with adjust_attributes",
      "Defining Layered Images in Python",
      "Migration from LiveComposite / ConditionSwitch",
      "LiveComposite → layeredimage",
      "ConditionSwitch → if statement",
      "File Organization for Layered Sprites",
      "Performance Notes",
      "Common Pitfalls"
    ]
  },
  {
    "id": "style-properties-and-theming",
    "title": "Style Properties and Theming",
    "description": "Ren'Py's style system controls how every displayable looks — text size, button backgrounds, window padding, colors, a...",
    "category": "reference",
    "module": "renpy-arch",
    "engine": "Ren'Py",
    "tier": "pro",
    "sizeBytes": 10113,
    "sections": [
      "Style Basics",
      "Style Inheritance",
      "Style Inspector (Shift+I)",
      "Property Categories",
      "Position Properties",
      "Size Properties",
      "Text Properties",
      "Window Properties",
      "Box (Layout) Properties",
      "State Prefixes",
      "The `gui` Namespace",
      "Style Preferences (Player-Adjustable Styles)",
      "Theming Patterns",
      "Dark Theme / Light Theme Toggle",
      "Consistent Button Styling",
      "Using `Frame()` for Scalable Backgrounds",
      "Common Pitfalls"
    ]
  },
  {
    "id": "renpy-arch-rules",
    "title": "Ren'Py — AI Rules",
    "description": "Engine-specific rules for projects using Ren'Py 8+. These supplement the engine-agnostic rules in docs/core/ai-workfl...",
    "category": "reference",
    "module": "renpy-arch",
    "engine": "Ren'Py",
    "tier": "pro",
    "sizeBytes": 10730,
    "sections": [
      "Architecture Context",
      "Tech Stack",
      "Core Concepts",
      "Project Structure Conventions",
      "Code Generation Rules",
      "Script Basics: Labels, Dialogue, Narration",
      "Character Definitions",
      "Image Display: show, scene, hide",
      "Branching: Menus and Conditions",
      "Python Integration",
      "Screens: Custom UI",
      "Transitions and Transforms",
      "Audio",
      "Save/Load and Persistent Data",
      "Distribution",
      "Common Pitfalls"
    ]
  },
  {
    "id": "rpgmaker-arch/E1",
    "title": "E1 — RPG Maker MZ/MV Architecture Overview",
    "description": "",
    "category": "architecture",
    "module": "rpgmaker-arch",
    "engine": "RPG Maker",
    "tier": "pro",
    "sizeBytes": 15763,
    "sections": [
      "Core Philosophy: Database, Events, and Plugins",
      "Project Structure",
      "Core Class Hierarchy",
      "1. Manager Classes (Singletons)",
      "2. Scene Classes (Game Screens)",
      "3. Game Objects (State Layer)",
      "4. Sprite Classes (Visual Layer)",
      "5. Window Classes (UI Layer)",
      "The Game Loop",
      "The Event System",
      "Page Conditions",
      "Event Commands (Partial List)",
      "Game_Interpreter: The Event Virtual Machine",
      "The Plugin System",
      "Plugin Header (MZ Format)",
      "Plugin Commands (MZ)",
      "Aliasing (Safe Method Override)",
      "Accessing Game Data from Plugins",
      "Rendering Pipeline",
      "Tileset System",
      "When to Choose RPG Maker"
    ]
  },
  {
    "id": "rpgmaker-arch/G1",
    "title": "G1 — Plugin Development for RPG Maker MZ",
    "description": "",
    "category": "guide",
    "module": "rpgmaker-arch",
    "engine": "RPG Maker",
    "tier": "pro",
    "sizeBytes": 13266,
    "sections": [
      "How the Plugin System Works",
      "Plugin Load Order",
      "Minimal Plugin Template",
      "What This Template Demonstrates",
      "The Alias Pattern (Method Overriding)",
      "Why Aliasing Matters",
      "Core Class Hierarchy",
      "Scene Tree",
      "Window Tree",
      "Game Object Tree",
      "Plugin Command Parameters",
      "Available Parameter Types",
      "Rendering Layer: PIXI.js Integration",
      "Adding Custom Visual Effects",
      "Common Mistakes"
    ]
  },
  {
    "id": "rpgmaker-arch/G2",
    "title": "G2 — Event System Mastery",
    "description": "",
    "category": "guide",
    "module": "rpgmaker-arch",
    "engine": "RPG Maker",
    "tier": "pro",
    "sizeBytes": 10459,
    "sections": [
      "Overview",
      "Map Events",
      "Page Conditions",
      "Multi-Page Pattern: NPC Quest",
      "Trigger Types",
      "Autorun vs. Parallel — Critical Differences",
      "Common Events",
      "Three Start Modes",
      "Calling a Common Event",
      "Parallel Events: Performance and Safety",
      "Performance Rules",
      "Important Limitation",
      "Useful Event Commands",
      "Variables and Switches",
      "Flow Control",
      "Movement and Timing",
      "Screen Effects",
      "Transfer and Map Control",
      "Advanced Patterns",
      "Self-Disabling Autorun (One-Time Cutscene)",
      "Proximity Detection Without Parallel Events",
      "Chained Common Events for Modular Dialogue",
      "Variable-Driven Difficulty Scaling",
      "Common Pitfalls"
    ]
  },
  {
    "id": "rpgmaker-arch/G3",
    "title": "G3 — Scene and Window System in RPG Maker MZ",
    "description": "",
    "category": "guide",
    "module": "rpgmaker-arch",
    "engine": "RPG Maker",
    "tier": "pro",
    "sizeBytes": 13995,
    "sections": [
      "Architecture Overview",
      "The Scene Class Hierarchy",
      "Scene Lifecycle Methods",
      "Creating a Custom Scene",
      "Navigating to a Custom Scene",
      "The Window Class Hierarchy",
      "Window_Base — The Foundation",
      "Window_Selectable — Interactive Lists",
      "Window_Command — Menu Commands",
      "Creating a Custom Window",
      "The Rendering Layer: PIXI.js Under the Hood",
      "Key PIXI Wrapper Classes",
      "Creating Custom PIXI-Level Visuals",
      "PIXI.js Version Compatibility",
      "Scene/Window Communication Patterns",
      "Pattern: Window → Scene via Handlers",
      "Pattern: Scene → Window via Direct Calls",
      "Pattern: Multi-Window Focus",
      "Quick Reference"
    ]
  },
  {
    "id": "rpgmaker-arch/G4",
    "title": "Save/Load System and Data Persistence",
    "description": "RPG Maker MZ's save/load system serializes all game state ($game objects) to JSON, compresses it, and stores it via S...",
    "category": "guide",
    "module": "rpgmaker-arch",
    "engine": "RPG Maker",
    "tier": "pro",
    "sizeBytes": 12531,
    "sections": [
      "Default Save/Load Flow",
      "Save Pipeline",
      "Load Pipeline",
      "What Gets Saved",
      "Persisting Custom Plugin Data",
      "Option 1: Attach to $gameSystem (Simplest)",
      "Option 2: Alias makeSaveContents / extractSaveContents",
      "Option 3: Custom Game Object (Full Pattern)",
      "Global (Cross-Save) Data",
      "Using ConfigManager (Settings-Style Globals)",
      "Using StorageManager Directly",
      "Storage Backends",
      "Save File Naming",
      "Autosave",
      "Save File Metadata (Save Info)",
      "Common Pitfalls"
    ]
  },
  {
    "id": "rpgmaker-arch/G5",
    "title": "G5 — Audio System in RPG Maker MZ",
    "description": "",
    "category": "guide",
    "module": "rpgmaker-arch",
    "engine": "RPG Maker",
    "tier": "pro",
    "sizeBytes": 11919,
    "sections": [
      "Architecture Overview",
      "The Four Audio Channels",
      "AudioManager API",
      "Playback",
      "Stopping",
      "Fading",
      "Save and Restore (used by the battle system and scene transitions)",
      "The WebAudio Class",
      "Key Properties",
      "Key Methods",
      "How Fading Works Internally",
      "Audio in Events (No Code Required)",
      "ME Ducking Behaviour",
      "Audio File Formats and Directories",
      "Plugin Development Patterns",
      "Custom Volume Control Per Channel",
      "Cross-Fade Between BGMs",
      "Hooking into Save/Load for Custom Audio State",
      "Looping with Intro Sections",
      "Performance and Troubleshooting"
    ]
  },
  {
    "id": "rpgmaker-arch/G6",
    "title": "G6 — Map Design and Tileset Management in RPG Maker MZ",
    "description": "Maps are the foundational content unit in RPG Maker MZ. Every area the player explores is a tile-based map built from...",
    "category": "guide",
    "module": "rpgmaker-arch",
    "engine": "RPG Maker",
    "tier": "pro",
    "sizeBytes": 14134,
    "sections": [
      "Tileset Architecture",
      "Tab A — Autotiles (A1–A5)",
      "Tabs B–E — Standard Tiles",
      "Tileset Image Specifications",
      "Map Editor Basics",
      "Creating a Map",
      "Drawing Layers",
      "Passability",
      "Terrain Tags",
      "Common Uses",
      "Reading Terrain Tags in Events",
      "Regions",
      "Common Uses",
      "Region Conditions in Events",
      "Parallax Mapping",
      "How It Works",
      "Basic Setup",
      "Parallax Mapping Plugins",
      "Parallax Tips",
      "Map Design Best Practices",
      "Common Pitfalls",
      "Next Steps"
    ]
  },
  {
    "id": "rpgmaker-arch/G7",
    "title": "G7 — Animation and Sprite Customization in RPG Maker MZ",
    "description": "RPG Maker MZ renders everything through a sprite class hierarchy built on top of PIXI.js. Understanding how sprites, ...",
    "category": "guide",
    "module": "rpgmaker-arch",
    "engine": "RPG Maker",
    "tier": "pro",
    "sizeBytes": 13085,
    "sections": [
      "Spritesheet Format Conventions",
      "Character Spritesheets (Map Characters)",
      "Filename Prefixes",
      "Side-View Battler Spritesheets",
      "Sprite Class Hierarchy",
      "Core Sprite Class",
      "Sprite_Character",
      "Sprite_Battler / Sprite_Actor / Sprite_Enemy",
      "Database Animations",
      "Animation Database Structure",
      "Playing Animations from Events",
      "Playing Animations from Plugins",
      "MV-Compatible Animations",
      "Plugin Customization Patterns",
      "Adding Custom Motions to Battlers",
      "Changing Character Walk Speed Animation",
      "Adding PIXI Filters to Sprites",
      "Custom Sprite Class Example",
      "Spritesheet Creation Tips",
      "Dimensions and Grid",
      "Custom Frame Sizes",
      "Character Vertical Offset",
      "Common Pitfalls",
      "Next Steps"
    ]
  },
  {
    "id": "rpgmaker-arch/G8",
    "title": "Damage Formulas & Custom Skills",
    "description": "RPG Maker MZ's damage formula box is a JavaScript expression evaluated at runtime. It looks like a single text field,...",
    "category": "guide",
    "module": "rpgmaker-arch",
    "engine": "RPG Maker",
    "tier": "pro",
    "sizeBytes": 10706,
    "sections": [
      "The Formula Box Basics",
      "Available Variables",
      "Battler Properties (accessible via `a.` or `b.`)",
      "Formula Tiers: Simple to Advanced",
      "Tier 1: Basic Arithmetic",
      "Tier 2: Scaling and Capping",
      "Tier 3: Conditional Formulas",
      "Tier 4: Multi-Statement Formulas",
      "Useful Game_Battler Methods",
      "Parameter IDs (for `paramBuffRate`)",
      "Common Skill Archetypes",
      "Healing Skill",
      "Drain Skill",
      "Fixed % HP Attack",
      "Multi-Hit with Diminishing Returns",
      "Level Difference Scaling",
      "Plugin Notetag Systems",
      "How Notetags Work",
      "VisuStella MZ (Successor to Yanfly MV)",
      "Tyruswoo Battle Mechanics",
      "Writing Your Own Notetag Parser",
      "Yanfly's Advice: Don't Put Mechanics in Formulas",
      "Debugging Formulas",
      "Console Logging",
      "Common Errors",
      "Testing Approach",
      "Quick Reference: Formula Patterns"
    ]
  },
  {
    "id": "rpgmaker-arch/G9",
    "title": "G9 — Input and Controls System",
    "description": "",
    "category": "guide",
    "module": "rpgmaker-arch",
    "engine": "RPG Maker",
    "tier": "pro",
    "sizeBytes": 11236,
    "sections": [
      "Overview",
      "The Input Class",
      "Input.keyMapper — Keyboard Bindings",
      "Input.gamepadMapper — Gamepad Bindings",
      "Checking Input State",
      "Usage in Events (Conditional Branch)",
      "Usage in Plugins",
      "The TouchInput Class",
      "Key Methods",
      "Reading Position",
      "Adding Custom Key Bindings",
      "Pattern: Extend keyMapper in a Plugin",
      "Pattern: Custom Gamepad Bindings",
      "Common Event Integration",
      "Key Code Reference",
      "Player-Configurable Key Remapping",
      "Mobile and Touch UI Patterns",
      "Pattern: Virtual Joystick Region",
      "Built-In Touch UI",
      "Troubleshooting"
    ]
  },
  {
    "id": "rpgmaker-arch/R1",
    "title": "R1 — Database Configuration Reference",
    "description": "",
    "category": "reference",
    "module": "rpgmaker-arch",
    "engine": "RPG Maker",
    "tier": "pro",
    "sizeBytes": 11115,
    "sections": [
      "Overview",
      "Database Tabs",
      "Actors (`Actors.json`)",
      "Classes (`Classes.json`)",
      "Skills (`Skills.json`)",
      "Items (`Items.json`)",
      "Weapons (`Weapons.json`) and Armors (`Armors.json`)",
      "Enemies (`Enemies.json`)",
      "Troops (`Troops.json`)",
      "States (`States.json`)",
      "Animations (`Animations.json`)",
      "Tilesets (`Tilesets.json`)",
      "Common Events (`CommonEvents.json`)",
      "System (`System.json`)",
      "The Traits System",
      "Trait Categories",
      "How Traits Stack",
      "The Damage Formula",
      "Effects System",
      "The Note Field and Notetags",
      "Convention",
      "Parsing from Plugins",
      "Max Values and Limits"
    ]
  },
  {
    "id": "rpgmaker-arch/R2",
    "title": "R2 — Battle System Customization in RPG Maker MZ",
    "description": "",
    "category": "reference",
    "module": "rpgmaker-arch",
    "engine": "RPG Maker",
    "tier": "pro",
    "sizeBytes": 13485,
    "sections": [
      "Battle System Architecture",
      "The Four Layers",
      "Key Classes in Detail",
      "BattleManager (Static)",
      "Game_BattlerBase — The Stat Foundation",
      "Game_Action — Skill and Item Execution",
      "Damage Formula System",
      "Formula Variables",
      "Common Formula Patterns",
      "Important: Don't Put Game Mechanics in Damage Formulas",
      "Customizing via Plugins: The Alias Pattern",
      "Basic Alias",
      "Adding New Battle Commands",
      "Custom Damage Types",
      "Notetag System for Data-Driven Customization",
      "Battle System Variants",
      "Common Modifications",
      "Popular Plugin Ecosystems",
      "Debugging Battle Plugins",
      "Console Access During Battle",
      "Common Plugin Conflicts"
    ]
  },
  {
    "id": "rpgmaker-arch/R3",
    "title": "Rendering Pipeline & PIXI.js Integration",
    "description": "RPG Maker MZ renders everything through PIXI.js (v5). Understanding the rendering pipeline is essential for writing p...",
    "category": "reference",
    "module": "rpgmaker-arch",
    "engine": "RPG Maker",
    "tier": "pro",
    "sizeBytes": 8682,
    "sections": [
      "Architecture Overview",
      "The Frame Loop",
      "Key Classes",
      "Graphics (rmmz_core.js)",
      "Bitmap (rmmz_core.js)",
      "Sprite (rmmz_core.js)",
      "Spriteset_Map / Spriteset_Battle",
      "Custom Sprites in Plugins",
      "Adding a HUD sprite to a scene",
      "Using PIXI directly",
      "Accessing PIXI textures from ImageManager",
      "Effekseer Integration",
      "Playing an effect from a plugin",
      "Performance Considerations",
      "PIXI Version Reference"
    ]
  },
  {
    "id": "rpgmaker-arch/R4",
    "title": "R4 — Custom Scenes and Windows Reference",
    "description": "",
    "category": "reference",
    "module": "rpgmaker-arch",
    "engine": "RPG Maker",
    "tier": "pro",
    "sizeBytes": 15463,
    "sections": [
      "Overview",
      "Class Hierarchy",
      "Scene Lifecycle",
      "Key Methods to Override",
      "Scene Navigation",
      "Window Class Hierarchy",
      "Creating a Custom Window (Display Only)",
      "Window_Base Drawing Methods",
      "Creating a Command Window",
      "Wiring Commands in the Scene",
      "Creating a Selectable List Window",
      "Window Sizing and Layout",
      "Adding to the Main Menu",
      "Input Handling in Scenes",
      "Default Input Mappings",
      "Plugin Registration Pattern",
      "Common Pitfalls"
    ]
  },
  {
    "id": "rpgmaker-arch-rules",
    "title": "RPG Maker (MZ/MV) — AI Rules",
    "description": "Engine-specific rules for projects using RPG Maker MZ or MV. These supplement the engine-agnostic rules in docs/core/...",
    "category": "reference",
    "module": "rpgmaker-arch",
    "engine": "RPG Maker",
    "tier": "pro",
    "sizeBytes": 1572,
    "sections": [
      "Architecture Context",
      "Tech Stack",
      "Key Concepts",
      "Conventions"
    ]
  },
  {
    "id": "sdl3-arch/E1",
    "title": "E1 — SDL3 Architecture Overview",
    "description": "",
    "category": "architecture",
    "module": "sdl3-arch",
    "engine": "SDL3",
    "tier": "pro",
    "sizeBytes": 5850,
    "sections": [
      "What Is SDL3?",
      "Subsystem Architecture",
      "New in SDL3 (Not in SDL2)",
      "Application Models",
      "1. Traditional Main Loop (SDL2 Compatible)",
      "2. Main Callbacks (Recommended for New Projects)",
      "Rendering Architecture",
      "SDL_Renderer (2D, Simple)",
      "SDL_GPU (3D, Modern)",
      "Audio Architecture",
      "Platform Support",
      "When to Choose SDL3"
    ]
  },
  {
    "id": "sdl3-arch/G1",
    "title": "G1 — SDL3 Getting Started",
    "description": "",
    "category": "guide",
    "module": "sdl3-arch",
    "engine": "SDL3",
    "tier": "pro",
    "sizeBytes": 8114,
    "sections": [
      "Prerequisites",
      "Installing SDL3",
      "Application Model: Main Callbacks (Recommended)",
      "Minimal Example — Main Callbacks",
      "Callback Return Values",
      "Using App State",
      "Alternative: Traditional Main Loop",
      "CMake Project Setup",
      "Key Differences from SDL2",
      "Function Naming Convention Change",
      "Adding Input Handling",
      "Next Steps"
    ]
  },
  {
    "id": "sdl3-arch/G2",
    "title": "G2 — SDL3 GPU API: Modern Rendering",
    "description": "",
    "category": "guide",
    "module": "sdl3-arch",
    "engine": "SDL3",
    "tier": "pro",
    "sizeBytes": 11046,
    "sections": [
      "What Is SDL_GPU?",
      "Object Hierarchy",
      "Frame Rendering Workflow",
      "Step 1: Acquire a Command Buffer",
      "Step 2: Get the Swapchain Texture",
      "Step 3: Begin a Render Pass",
      "Step 4: Bind Pipeline and Draw",
      "Step 5: End Pass and Submit",
      "Creating Resources",
      "Vertex Buffers",
      "Textures",
      "Uploading Data (CPU → GPU)",
      "Shader Cross-Compilation",
      "Graphics Pipeline Configuration",
      "Compute Passes",
      "Coordinate Conventions",
      "SDL_Renderer vs SDL_GPU",
      "Common Pitfalls",
      "Next Steps"
    ]
  },
  {
    "id": "sdl3-arch/G3",
    "title": "G3 — Migrating from SDL2 to SDL3",
    "description": "SDL3 (first stable release: v3.2.0, January 2025) is a major rewrite of SDL2, not a drop-in upgrade. This guide cover...",
    "category": "guide",
    "module": "sdl3-arch",
    "engine": "SDL3",
    "tier": "pro",
    "sizeBytes": 10102,
    "sections": [
      "Overview of Breaking Changes",
      "Application Structure: Main Loop vs. Callbacks",
      "SDL2 (Traditional Main Loop)",
      "SDL3 (Callback Model — Recommended)",
      "Event System Changes",
      "Window Events Are Now Top-Level",
      "Renamed Event Constants",
      "Audio System Rewrite",
      "SDL2 (Audio Callback)",
      "SDL3 (AudioStream Binding)",
      "I/O and File Access",
      "SDL_RWops → SDL_IOStream",
      "Renderer API Changes",
      "Gamepad and Haptics",
      "Properties System",
      "Quick Reference: Common Renames",
      "Migration Checklist",
      "Further Reading"
    ]
  },
  {
    "id": "sdl3-arch/G4",
    "title": "G4 — SDL3 Threading and Async Patterns",
    "description": "This guide covers SDL3's threading primitives and concurrency patterns: creating threads, synchronization with mutexe...",
    "category": "guide",
    "module": "sdl3-arch",
    "engine": "SDL3",
    "tier": "pro",
    "sizeBytes": 11916,
    "sections": [
      "Threading Overview",
      "Creating Threads",
      "Basic Thread Creation",
      "Detached Threads",
      "Thread Identification",
      "Mutexes",
      "Basic Mutex Usage",
      "Read-Write Locks",
      "Condition Variables",
      "Producer-Consumer Pattern",
      "Timed Waits",
      "Atomic Operations",
      "SDL_AtomicInt",
      "Atomic Pointers",
      "When to Use Atomics vs Mutexes",
      "SDL_RunOnMainThread (New in SDL3)",
      "Basic Usage",
      "Fire-and-Forget vs Blocking",
      "When Called from the Main Thread",
      "Main Thread Definition",
      "Game Architecture: Asset Loading Thread",
      "Common Pitfalls"
    ]
  },
  {
    "id": "sdl3-arch/G5",
    "title": "G5 — SDL3 Gamepad, Haptics & Sensors",
    "description": "SDL3 provides a high-level Gamepad API that maps physical controllers to a standard Xbox-style layout, plus a lower-l...",
    "category": "guide",
    "module": "sdl3-arch",
    "engine": "SDL3",
    "tier": "pro",
    "sizeBytes": 10211,
    "sections": [
      "Gamepad vs Joystick",
      "Initialization",
      "Opening a Gamepad",
      "Opening All Connected Gamepads at Startup",
      "Reading Buttons and Axes",
      "Polling (Per-Frame)",
      "Standard Button Names (SDL3)",
      "Axis Dead Zones",
      "Event-Driven Input",
      "Rumble (Force Feedback)",
      "Trigger Rumble (Xbox Impulse Triggers / DualSense Adaptive)",
      "Important Rumble Notes",
      "Advanced Haptics (SDL_Haptic)",
      "Sensor Access (Gyroscope & Accelerometer)",
      "Touchpad (DualShock 4 / DualSense)",
      "LED Color (DualSense / DualShock 4)",
      "Gamepad Type Detection",
      "Common Mistakes"
    ]
  },
  {
    "id": "sdl3-arch/G6",
    "title": "G6 — SDL3 Storage & Filesystem APIs",
    "description": "",
    "category": "guide",
    "module": "sdl3-arch",
    "engine": "SDL3",
    "tier": "pro",
    "sizeBytes": 9982,
    "sections": [
      "Overview",
      "SDL_Storage: The High-Level API",
      "Two Storage Types",
      "Title Storage (Read-Only Game Assets)",
      "User Storage (Save Data)",
      "Checking Available Space",
      "SDL_IOStream: The Mid-Level API",
      "Key Changes from SDL2",
      "Basic File I/O with SDL_IOStream",
      "Custom IOStream (Replacing Custom SDL_RWops)",
      "SDL_Filesystem: Low-Level Path Queries",
      "Which API to Use",
      "Migration Checklist (from SDL2)"
    ]
  },
  {
    "id": "sdl3-arch/G7",
    "title": "G7 — SDL3 Camera and Pen APIs",
    "description": "",
    "category": "guide",
    "module": "sdl3-arch",
    "engine": "SDL3",
    "tier": "pro",
    "sizeBytes": 12310,
    "sections": [
      "Overview",
      "Camera API",
      "Core Types",
      "Device Discovery",
      "Opening a Camera and Capturing Frames",
      "Permission Handling",
      "Frame Acquisition Loop",
      "Cleanup",
      "Pen API",
      "Core Types",
      "Pen Axes",
      "Event-Driven Input",
      "Pen vs. Mouse Coexistence",
      "Game Dev Use Cases",
      "Camera: AR Card Game Overlay",
      "Pen: Pressure-Sensitive Drawing Tool",
      "Platform Notes",
      "Camera API Platform Support",
      "Pen API Platform Support",
      "Migration Note (SDL2 → SDL3)"
    ]
  },
  {
    "id": "sdl3-arch/G8",
    "title": "G8 — SDL3 Audio Programming",
    "description": "SDL3 completely redesigned the audio subsystem around SDLAudioStream. The old SDL2 audio callback model is gone. This...",
    "category": "guide",
    "module": "sdl3-arch",
    "engine": "SDL3",
    "tier": "pro",
    "sizeBytes": 12182,
    "sections": [
      "Core Concept: Everything Is an AudioStream",
      "Why the Change from SDL2?",
      "Quick Start: Playing a WAV File",
      "Manual Stream Setup (More Control)",
      "Volume Control Per Stream",
      "Callback-Based Audio (Procedural Generation)",
      "Audio Recording (Capture)",
      "Hot-Plug and Device Migration",
      "Format Conversion Without a Device",
      "Common Audio Patterns for Games",
      "Fire-and-Forget Sound Effects",
      "Background Music Streaming",
      "SDL2 → SDL3 Audio Migration Checklist",
      "Key Functions Reference"
    ]
  },
  {
    "id": "sdl3-arch/R1",
    "title": "R1 — SDL3 Audio & Input Reference",
    "description": "SDL3 redesigned both the audio and input subsystems compared to SDL2. Audio is now entirely stream-based (no more aud...",
    "category": "reference",
    "module": "sdl3-arch",
    "engine": "SDL3",
    "tier": "pro",
    "sizeBytes": 14157,
    "sections": [
      "Audio Subsystem",
      "Core Concept: Everything is an AudioStream",
      "Opening an Audio Device",
      "Creating and Binding Audio Streams",
      "Convenience: SDL_OpenAudioDeviceStream",
      "Querying Stream State",
      "Cleanup",
      "Event System",
      "The SDL_Event Union",
      "Keyboard Input",
      "Key Events",
      "Polling Keyboard State",
      "Best Practices",
      "Mouse Input",
      "Mouse Events",
      "Polling Mouse State",
      "Relative Mouse Mode (FPS Camera)",
      "Gamepad Input",
      "Gamepad Lifecycle",
      "Button and Axis Input",
      "Gamepad Features",
      "Touch Input",
      "Common Patterns",
      "Input Abstraction Layer",
      "Audio: Simple Sound Effect Player",
      "Quick Migration Cheat Sheet (SDL2 → SDL3)"
    ]
  },
  {
    "id": "sdl3-arch/R2",
    "title": "R2 — SDL3 Events & Window Management Reference",
    "description": "SDL3 overhauled its event system and window management compared to SDL2. Window events are now top-level event types ...",
    "category": "reference",
    "module": "sdl3-arch",
    "engine": "SDL3",
    "tier": "pro",
    "sizeBytes": 10163,
    "sections": [
      "Event System Overview",
      "The Event Loop",
      "Event Retrieval Functions",
      "Event Watches (Callbacks)",
      "SDL3 vs. SDL2: Window Events Are Top-Level",
      "Common Window Event Types",
      "Identifying Which Window",
      "Window Creation",
      "Basic Window",
      "Common Window Flags",
      "High-DPI Handling",
      "Multi-Window Support",
      "Creating Additional Windows",
      "Popup and Utility Windows",
      "Custom Events",
      "Common Patterns",
      "Graceful Shutdown",
      "Pause on Focus Loss",
      "Handling Resize for Rendering",
      "Quick Migration Checklist (SDL2 → SDL3 Events & Windows)"
    ]
  },
  {
    "id": "sdl3-arch/R3",
    "title": "SDL3 GPU API Reference",
    "description": "The SDLGPU API is SDL3's flagship addition — a modern, cross-platform GPU abstraction layer that targets Vulkan, Dire...",
    "category": "reference",
    "module": "sdl3-arch",
    "engine": "SDL3",
    "tier": "pro",
    "sizeBytes": 12866,
    "sections": [
      "Core Architecture",
      "Device Management",
      "Creating a Device",
      "Key Functions",
      "Command Buffer Lifecycle",
      "Render Passes",
      "Load/Store Operations",
      "Draw Commands",
      "Render State",
      "Graphics Pipelines",
      "Shader Management",
      "Buffer and Texture Operations",
      "Buffers",
      "Textures",
      "Uploading Data (Transfer Buffers)",
      "Resource Cycling",
      "Compute Passes",
      "Synchronization",
      "Typical Frame Structure",
      "Performance Guidelines",
      "Migration from SDL2 SDL_Renderer"
    ]
  },
  {
    "id": "sdl3-arch-rules",
    "title": "SDL3 — AI Rules",
    "description": "Engine-specific rules for projects using SDL3 (Simple DirectMedia Layer 3). These supplement the engine-agnostic rule...",
    "category": "reference",
    "module": "sdl3-arch",
    "engine": "SDL3",
    "tier": "pro",
    "sizeBytes": 5401,
    "sections": [
      "Architecture Context",
      "Tech Stack",
      "What SDL3 Is (and Is Not)",
      "Project Structure Conventions",
      "SDL3-Specific Code Rules",
      "Use the Callback Model (Not a Manual Main Loop)",
      "Audio: Use SDL_AudioStream, Not Callbacks",
      "GPU API: Modern Cross-Platform Rendering",
      "SDL_IOStream Replaces SDL_RWops",
      "Naming Conventions Changed",
      "Migration from SDL2",
      "Common Mistakes to Catch"
    ]
  },
  {
    "id": "sfml-arch/E1",
    "title": "E1 — SFML 3 Architecture Overview",
    "description": "",
    "category": "architecture",
    "module": "sfml-arch",
    "engine": "SFML",
    "tier": "pro",
    "sizeBytes": 8711,
    "sections": [
      "Philosophy: Simple and Fast",
      "Module Architecture",
      "System — Foundation Layer",
      "Window — Platform Abstraction",
      "Graphics — 2D Rendering",
      "Audio — Sound and Music",
      "Network — TCP/UDP and Protocols",
      "Platform Abstraction Model",
      "Key SFML 3 Changes from SFML 2",
      "Rendering Pipeline",
      "When to Choose SFML"
    ]
  },
  {
    "id": "sfml-arch/G1",
    "title": "G1 — Getting Started with SFML 3",
    "description": "This guide walks through setting up a new SFML 3 project from scratch, covering installation, project configuration, ...",
    "category": "guide",
    "module": "sfml-arch",
    "engine": "SFML",
    "tier": "pro",
    "sizeBytes": 10645,
    "sections": [
      "Prerequisites",
      "Project Setup with CMake FetchContent",
      "CMakeLists.txt",
      "Build Commands",
      "Hello Window — Minimal SFML 3 Program",
      "src/main.cpp",
      "Adding Shapes and Text",
      "Handling Input",
      "Event-Based Input",
      "Real-Time Input Polling",
      "Loading and Drawing Sprites",
      "Fixed Timestep Game Loop",
      "Playing Audio",
      "Module Reference (What to Link)",
      "Next Steps",
      "Common Setup Issues"
    ]
  },
  {
    "id": "sfml-arch/G2",
    "title": "G2 — Game Architecture Patterns with SFML 3",
    "description": "SFML provides windowing, rendering, audio, and input but no game architecture. You build your own structure on top. T...",
    "category": "guide",
    "module": "sfml-arch",
    "engine": "SFML",
    "tier": "pro",
    "sizeBytes": 12828,
    "sections": [
      "Pattern 1: The Game Class",
      "Fixed Timestep Variant",
      "Pattern 2: State Stack",
      "State Interface",
      "State Manager",
      "Example State",
      "Pattern 3: ECS with EnTT",
      "Setup with CMake",
      "Components (Data Only)",
      "Systems (Logic Only)",
      "Wiring It Together",
      "When to Use ECS vs. Simpler Patterns",
      "Resource Manager Pattern",
      "Combining the Patterns"
    ]
  },
  {
    "id": "sfml-arch/G3",
    "title": "G3 — SFML 3 Shaders & Custom Rendering",
    "description": "SFML 3 uses OpenGL under the hood and exposes GLSL shaders through sf::Shader. This guide covers loading and applying...",
    "category": "guide",
    "module": "sfml-arch",
    "engine": "SFML",
    "tier": "pro",
    "sizeBytes": 9440,
    "sections": [
      "How Shaders Work in SFML",
      "Loading Shaders",
      "From Files",
      "From Strings (In-Memory)",
      "From Streams",
      "Setting Uniforms",
      "Supported Types",
      "The CurrentTexture Special Value",
      "Applying Shaders to Drawables",
      "Example: Flash-White Hit Effect",
      "Post-Processing with RenderTexture",
      "Setup",
      "Render Loop",
      "Example: CRT Scanline Effect",
      "Multi-Pass Rendering",
      "Custom Vertex Shaders",
      "Performance Notes"
    ]
  },
  {
    "id": "sfml-arch/G4",
    "title": "G4 — SFML 3 Networking & Multiplayer Foundations",
    "description": "SFML 3 includes a networking module (sf::Network) that provides TCP and UDP sockets, a packet serialization system, H...",
    "category": "guide",
    "module": "sfml-arch",
    "engine": "SFML",
    "tier": "pro",
    "sizeBytes": 11160,
    "sections": [
      "Socket Fundamentals",
      "TCP: Reliable Communication",
      "Client — Connecting to a Server",
      "Server — Accepting Connections",
      "Sending and Receiving Data",
      "UDP: Fast, Unreliable Communication",
      "Binding and Sending",
      "Receiving",
      "Datagram Size Limit",
      "Packets: Type-Safe Serialization",
      "Packet Safety",
      "Non-Blocking Sockets",
      "Game Loop Integration",
      "Socket Selectors: Multiplexing Without Threads",
      "TLS Support (SFML 3 — New)",
      "TLS Client",
      "TLS Server",
      "Multiplayer Architecture Patterns",
      "Client-Server (Authoritative)",
      "Hybrid: TCP + UDP",
      "Client-Side Prediction",
      "Message Protocol Design",
      "Performance Tips"
    ]
  },
  {
    "id": "sfml-arch/G5",
    "title": "G5 — Resource Management Patterns in SFML 3",
    "description": "SFML doesn't include a built-in resource manager. Textures, fonts, sound buffers, and shaders are plain C++ objects t...",
    "category": "guide",
    "module": "sfml-arch",
    "engine": "SFML",
    "tier": "pro",
    "sizeBytes": 12086,
    "sections": [
      "Why Resource Management Matters",
      "SFML 3 Resource Loading API",
      "Pattern 1: Default Construct + Load Method",
      "Pattern 2: Constructor That Throws",
      "SFML 3 Method Names (Changed from SFML 2)",
      "Basic Resource Holder (Template)",
      "Type Aliases",
      "Adapting for sf::Font (openFromFile)",
      "Using the Resource Holder",
      "Loading Resources at Startup",
      "Passing Resources to Game Objects",
      "Enum-Based Identifiers",
      "Per-Level Resource Loading",
      "Two-Tier Pattern",
      "Lazy Loading",
      "sf::Music — Streaming (Not Cached)",
      "Thread Safety",
      "Common Lifetime Bugs",
      "Recommended Project Layout"
    ]
  },
  {
    "id": "sfml-arch/R1",
    "title": "R1 — SFML 3 API Reference and Migration",
    "description": "SFML 3.0.0 was released in December 2024 — the first major version since SFML 2 in 2013. It modernizes the library to...",
    "category": "reference",
    "module": "sfml-arch",
    "engine": "SFML",
    "tier": "pro",
    "sizeBytes": 8445,
    "sections": [
      "C++17 Requirement",
      "Compiler Minimums",
      "Removed: Threading and Synchronization Primitives",
      "Migration Example",
      "Vector API Changes",
      "New Vector Operations",
      "Migration Example",
      "Strong Types: sf::Angle",
      "std::optional for Nullable Returns",
      "Rectangle Intersection",
      "Resource Loading",
      "Audio Backend: miniaudio",
      "Migration",
      "CMake and Dependency Changes",
      "FetchContent (No Bundled Dependencies)",
      "Target Names Changed",
      "Other Notable Changes",
      "Renamed and Removed APIs",
      "Event Handling Migration",
      "Rect Changes",
      "Quick Migration Checklist"
    ]
  },
  {
    "id": "sfml-arch/R2",
    "title": "R2 — SFML 3 Audio and Networking Reference",
    "description": "Quick reference for SFML 3's audio module (backed by miniaudio) and networking module. Covers the main classes, commo...",
    "category": "reference",
    "module": "sfml-arch",
    "engine": "SFML",
    "tier": "pro",
    "sizeBytes": 12012,
    "sections": [
      "Audio Module Overview",
      "sf::SoundBuffer — In-Memory Audio Data",
      "sf::Sound — Playing Buffered Audio",
      "sf::Music — Streaming Audio",
      "sf::SoundStream — Custom Streaming",
      "sf::Listener — Global Audio Listener",
      "Key Audio Changes from SFML 2",
      "Networking Module Overview",
      "sf::TcpSocket — Reliable Connections",
      "sf::TcpListener — Accept Connections",
      "sf::UdpSocket — Fast, Unreliable Datagrams",
      "sf::Packet — Type-Safe Serialization",
      "sf::SocketSelector — Multiplexing",
      "Non-Blocking Sockets",
      "sf::Http — Simple HTTP Client",
      "Key Networking Changes from SFML 2",
      "Combining Audio and Networking",
      "Common Pitfalls"
    ]
  },
  {
    "id": "sfml-arch-rules",
    "title": "SFML 3 — AI Rules",
    "description": "Engine-specific rules for projects using SFML 3 (Simple and Fast Multimedia Library). These supplement the engine-agn...",
    "category": "reference",
    "module": "sfml-arch",
    "engine": "SFML",
    "tier": "pro",
    "sizeBytes": 7107,
    "sections": [
      "Architecture Context",
      "Tech Stack",
      "What SFML Is (and Is Not)",
      "Project Structure Conventions",
      "Module Dependency Hierarchy",
      "SFML 3-Specific Code Rules",
      "C++17 Required",
      "Strong Type: sf::Angle",
      "Events Use std::optional",
      "Game Loop Pattern",
      "Resource Loading",
      "Audio: miniaudio Backend",
      "CMake FetchContent for Dependencies",
      "Migration from SFML 2",
      "Common Mistakes to Catch"
    ]
  },
  {
    "id": "stride-arch/G01",
    "title": "G01 — Getting Started with Stride",
    "description": "Stride is a free, open-source C# game engine with an integrated editor (Game Studio), PBR rendering, physics, and a f...",
    "category": "guide",
    "module": "stride-arch",
    "engine": "Stride",
    "tier": "pro",
    "sizeBytes": 16158,
    "sections": [
      "Table of Contents",
      "1 — Installation",
      "Prerequisites",
      "Install via Stride Launcher",
      "Install via NuGet (code-only)",
      "2 — Creating a Project",
      "From Game Studio",
      "Project Templates",
      "3 — Project Structure",
      "Key Files",
      "4 — Entity-Component Model",
      "Core Concepts",
      "Entity Hierarchy",
      "Built-in Components",
      "5 — Script Types",
      "SyncScript — Per-Frame Logic",
      "AsyncScript — Coroutine-Style Logic",
      "StartupScript — One-Time Initialization",
      "6 — Your First Script — Player Movement",
      "Attaching the Script",
      "7 — Working with Input",
      "Keyboard",
      "Mouse",
      "Gamepad",
      "8 — Loading and Managing Scenes",
      "Loading a Scene",
      "Scene Composition",
      "9 — Code-Only Projects (No Editor)",
      "10 — Building and Running",
      "From Game Studio",
      "From Command Line",
      "Hot Reload",
      "11 — Key Differences from MonoGame/FNA",
      "Coming from MonoGame?",
      "12 — Next Steps"
    ]
  },
  {
    "id": "stride-arch/G02",
    "title": "G02 — Bepu Physics Fundamentals",
    "description": "A comprehensive guide to Bepu Physics in Stride 4.3, covering installation, configuration, rigid body dynamics, colli...",
    "category": "guide",
    "module": "stride-arch",
    "engine": "Stride",
    "tier": "pro",
    "sizeBytes": 28958,
    "sections": [
      "Table of Contents",
      "1 — Why Bepu Physics?",
      "Why Bepu?",
      "When to Use Bepu",
      "Bullet Physics Still Available",
      "2 — Adding Bepu to Your Project",
      "Via Game Studio (Recommended)",
      "Via Command Line",
      "Community Toolkit (Pre-Release)",
      "Verifying Installation",
      "3 — Bepu Configuration",
      "Setting Up Bepu Configuration",
      "Key Configuration Parameters",
      "Example: Tuning for a Fast-Paced Game",
      "Understanding Solver Iterations",
      "4 — Static Bodies",
      "Creating a Static Body in the Editor",
      "Example: Static Ground in Code",
      "Mesh Colliders",
      "5 — Dynamic Bodies",
      "Creating a Dynamic Body in the Editor",
      "Example: A Bouncing Ball",
      "Key BodyComponent Properties",
      "Applying Forces",
      "Setting Velocity Directly",
      "6 — Kinematic Bodies",
      "Creating a Kinematic Body",
      "Moving a Kinematic Body",
      "7 — Collision Detection",
      "Collision Events",
      "ContactInfo Details",
      "Collision Layers",
      "Trigger Volumes (Sensor Colliders)",
      "8 — Raycasting and Queries",
      "Raycast Basics",
      "RaycastHit Details",
      "Ground Detection",
      "Shape Casts and Overlap Tests",
      "9 — Constraints and Joints",
      "Example: Hinge Joint (Door)",
      "Example: Ball Socket (Rope Physics)",
      "Creating a Spring",
      "10 — Code-Only Physics with Community Toolkit",
      "Setup and Installation",
      "Full Code-Only Example",
      "Benefits of Community Toolkit",
      "11 — Migration from Bullet Physics",
      "Component Mapping",
      "Example: Before and After",
      "Key Differences in Bepu",
      "Migration Checklist",
      "12 — Performance Tips",
      "1. Use Appropriate Shapes",
      "2. Compound Shapes for Complex Objects",
      "3. Simulation Substeps",
      "4. Sleeping Bodies",
      "5. Broad-Phase Optimization",
      "6. Solver Iterations Trade-Off",
      "7. Profile with Game Studio",
      "Next Steps"
    ]
  },
  {
    "id": "stride-arch/G03",
    "title": "G03 — Code-Only Game Development with Stride Community Toolkit",
    "description": "Stride's editor-free, code-only development path lets you build full games using only C#, NuGet packages, and your pr...",
    "category": "guide",
    "module": "stride-arch",
    "engine": "Stride",
    "tier": "pro",
    "sizeBytes": 17055,
    "sections": [
      "Table of Contents",
      "1 — Why Code-Only?",
      "Who is code-only for?",
      "2 — Prerequisites",
      "3 — Project Setup",
      "Using the Community Toolkit template",
      "Manual setup (from scratch)",
      "4 — The Game Bootstrap Pattern",
      "Understanding `SetupBase3DScene()`",
      "Game lifecycle callbacks",
      "5 — Scene Construction",
      "Entity creation pattern",
      "Hierarchical entities",
      "Removing entities",
      "6 — 3D Primitives and Materials",
      "Custom materials",
      "7 — Input Handling",
      "Key vs. KeyDown vs. KeyReleased",
      "8 — Camera and Lighting",
      "Manual camera setup (without `SetupBase3DScene`)",
      "Lighting",
      "9 — Adding Physics with Bepu",
      "Manual Bepu body creation",
      "10 — Custom Scripts in Code-Only",
      "AsyncScript for sequences",
      "11 — Loading External Assets",
      "Procedural generation",
      "Raw file loading",
      "Using the asset compiler standalone",
      "Hybrid approach",
      "12 — UI in Code-Only Projects",
      "13 — Limitations and Workarounds",
      "Creating a \"prefab\" pattern in code",
      "14 — When to Choose Code-Only vs. Editor",
      "Choose code-only when",
      "Choose the editor when",
      "Hybrid approach"
    ]
  },
  {
    "id": "stride-arch/G04",
    "title": "G04 — SDSL Shader Development",
    "description": "Stride Shading Language (SDSL) is Stride's shader system — a superset of HLSL that adds object-oriented features like...",
    "category": "guide",
    "module": "stride-arch",
    "engine": "Stride",
    "tier": "pro",
    "sizeBytes": 21857,
    "sections": [
      "Table of Contents",
      "1 — Why SDSL?",
      "2 — SDSL vs. Plain HLSL",
      "Plain HLSL Approach",
      "SDSL Approach",
      "3 — Shader Classes and Inheritance",
      "Key Rules",
      "Calling Base Implementations",
      "4 — Stream Variables",
      "Declaring Stream Variables",
      "How Streams Work Internally",
      "Built-in Stream Variables",
      "5 — Mixins and Multiple Inheritance",
      "Basic Mixin Example",
      "Mixin Linearization Order",
      "Practical Mixin Pattern — Feature Layering",
      "6 — Composition",
      "Declaring a Composition",
      "Providing a Composition Implementation",
      "When to Use Composition vs. Inheritance",
      "7 — The `stage` and `clone` Keywords",
      "`stage` Keyword",
      "`clone` Keyword",
      "8 — Built-in Shader Library",
      "Essential Base Shaders",
      "Inheritance Hierarchy (Simplified)",
      "9 — Custom Material Shaders",
      "Creating a Simple Custom Effect",
      "Using Custom Shaders in the Editor",
      "Using Custom Shaders in Code-Only Projects",
      "10 — Post-Processing Effects",
      "Simple Post-Processing Shader",
      "Registering as a Post-Processing Step",
      "11 — Shader Compilation Pipeline",
      "How SDSL Becomes GPU Code",
      "Compilation Modes",
      "Shader Permutations",
      "12 — Debugging Shaders",
      "Visual Studio / Rider Integration",
      "Debugging Techniques",
      "13 — Common Pitfalls",
      "Pitfall 1: Missing `stage` on Override Methods",
      "Pitfall 2: Mixin Order Matters",
      "Pitfall 3: Stream Variable Not Interpolated",
      "Pitfall 4: Shader Permutation Explosion",
      "Pitfall 5: SDSL File Not Compiling",
      "Pitfall 6: `base.Method()` Returns Unexpected Results",
      "14 — Comparison with Other Shader Systems"
    ]
  },
  {
    "id": "stride-arch/G05",
    "title": "G05 — UI System",
    "description": "Stride includes a built-in UI framework with layout panels, controls, input handling, and both editor-based and code-...",
    "category": "guide",
    "module": "stride-arch",
    "engine": "Stride",
    "tier": "pro",
    "sizeBytes": 19028,
    "sections": [
      "Table of Contents",
      "1 — Architecture Overview",
      "Comparison with MonoGame",
      "2 — UI Assets: UIPage and UILibrary",
      "UIPage",
      "UILibrary",
      "3 — UIComponent Setup",
      "Screen-Space HUD Setup",
      "World-Space UI (e.g., Floating Health Bar)",
      "4 — Layout Panels",
      "StackPanel",
      "Grid",
      "Canvas",
      "UniformGrid",
      "ScrollViewer",
      "5 — Controls",
      "TextBlock (Read-Only Text)",
      "Button",
      "EditText (Text Input)",
      "ImageElement",
      "Slider",
      "ToggleButton",
      "6 — Accessing UI Elements from Scripts",
      "FindVisualChildOfType Behavior",
      "7 — Building UI Entirely in Code",
      "8 — Input and Event Handling",
      "Routed Events",
      "Touch and Mouse Events",
      "Keyboard Focus",
      "9 — Styling and Theming",
      "10 — World-Space UI",
      "11 — Resolution Independence",
      "12 — Performance Considerations",
      "13 — Common Pitfalls",
      "Pitfall 1: UIComponent Without a Page",
      "Pitfall 2: FindVisualChildOfType Returns Null",
      "Pitfall 3: Click Events Not Firing",
      "Pitfall 4: Text Not Visible",
      "Pitfall 5: Virtual Resolution Mismatch"
    ]
  },
  {
    "id": "stride-arch/G06",
    "title": "G06 — Animation System",
    "description": "Stride's animation system handles skeletal animation, property animation, blending, crossfading, additive layers, and...",
    "category": "guide",
    "module": "stride-arch",
    "engine": "Stride",
    "tier": "pro",
    "sizeBytes": 21886,
    "sections": [
      "Table of Contents",
      "1 — Architecture Overview",
      "How It Works",
      "Comparison with MonoGame",
      "2 — Animation Clips and Curves",
      "Curve Interpolation Types",
      "Property Path Format",
      "Importing Animations",
      "3 — AnimationComponent API",
      "Key Properties",
      "Core Methods",
      "PlayingAnimation Properties",
      "4 — Playing Animations",
      "Simple Playback",
      "Guarded Playback (Avoid Restarting)",
      "5 — Crossfading",
      "How Crossfade Works Internally",
      "6 — Blending and Additive Layers",
      "Weight-Based Blending",
      "Additive Animation",
      "AnimationBlendOperation Values",
      "7 — Playback Control",
      "Speed Control",
      "Seeking",
      "Repeat Modes",
      "Awaiting Completion (AsyncScript)",
      "8 — Animation Scripts Pattern",
      "9 — Procedural Animation",
      "Rotating an Entity",
      "Animating Non-Skeleton Properties",
      "10 — Animation Events and Callbacks",
      "11 — Root Motion",
      "12 — Performance Considerations",
      "13 — Common Pitfalls",
      "Pitfall 1: Animation Frozen on First Frame",
      "Pitfall 2: Crossfade Pops to New Animation",
      "Pitfall 3: Animation Clip Not Found",
      "Pitfall 4: Additive Animation Produces Wild Results",
      "Pitfall 5: Procedural Clip Duration Mismatch",
      "Pitfall 6: Awaiting Ended() on a Looping Animation"
    ]
  },
  {
    "id": "stride-arch/G07",
    "title": "G07 — Custom Render Features",
    "description": "How to extend Stride's rendering pipeline by creating custom RootRenderFeature and RenderObject classes. Covers the f...",
    "category": "guide",
    "module": "stride-arch",
    "engine": "Stride",
    "tier": "pro",
    "sizeBytes": 15089,
    "sections": [
      "When You Need a Custom Render Feature",
      "Architecture: The Four Phases",
      "Step 1: Define a Custom RenderObject",
      "Step 2: Create a Component to Attach to Entities",
      "Step 3: Create an EntityProcessor",
      "Step 4: Implement the RootRenderFeature",
      "Step 5: Write the SDSL Shader",
      "SDSL Key Concepts",
      "Step 6: Register in the Graphics Compositor",
      "Via Game Studio (Editor)",
      "Via Code (Code-Only Projects)",
      "Render Stages",
      "Performance Considerations",
      "Common Mistakes",
      "Forgetting to Register the RenderObject with VisibilityGroup",
      "Mismatching SupportedRenderObjectType",
      "Disposing Buffers Mid-Frame",
      "Missing SDSL Compilation"
    ]
  },
  {
    "id": "stride-arch/G08",
    "title": "G08 — Stride 4.3 Migration & .NET 10 Upgrade",
    "description": "How to migrate a Stride project from 4.2 (.NET 8) to 4.3 (.NET 10, C# 14). Covers the .NET SDK upgrade, Bepu Physics ...",
    "category": "guide",
    "module": "stride-arch",
    "engine": "Stride",
    "tier": "pro",
    "sizeBytes": 9527,
    "sections": [
      "What Changed in 4.3",
      "Step 1: Update the .NET SDK",
      "Step 2: Update Stride NuGet Packages",
      "Step 3: Migrate Physics from Bullet to Bepu",
      "Why Migrate",
      "Package Changes",
      "Component Migration",
      "Code Example: Before and After",
      "Key Bepu Differences",
      "Step 4: Vulkan Compute Shaders",
      "What the Compiler Handles",
      "If You Had D3D11-Only Compute Shaders",
      "Step 5: IDE Setup (Rider / VSCode)",
      "Rider",
      "VSCode",
      "Step 6: Custom Asset Types",
      "Breaking Changes Checklist",
      "Performance Improvements in 4.3"
    ]
  },
  {
    "id": "stride-arch/G09",
    "title": "G09 — Networking & Multiplayer in Stride",
    "description": "How to implement multiplayer networking in a Stride game. Covers architecture choices, Stride's built-in networking p...",
    "category": "guide",
    "module": "stride-arch",
    "engine": "Stride",
    "tier": "pro",
    "sizeBytes": 11938,
    "sections": [
      "Stride's Networking Landscape",
      "Your Options",
      "Architecture: Client-Server vs Peer-to-Peer",
      "Authoritative Server (Recommended)",
      "Peer-to-Peer (Lockstep)",
      "Setting Up LiteNetLib",
      "Installation",
      "Server Script",
      "Client Script",
      "Message Serialization",
      "Delivery Methods",
      "State Synchronization Patterns",
      "Snapshot Interpolation",
      "Client-Side Prediction",
      "Headless Server",
      "Common Pitfalls",
      "Testing Multiplayer Locally",
      "Checklist"
    ]
  },
  {
    "id": "stride-arch/G10",
    "title": "G10 — Custom Assets Pipeline",
    "description": "How to create custom asset types in Stride 4.3+. Covers the three-class pattern (runtime, asset, compiler), editor te...",
    "category": "guide",
    "module": "stride-arch",
    "engine": "Stride",
    "tier": "pro",
    "sizeBytes": 14239,
    "sections": [
      "Why Custom Assets?",
      "Architecture: The Three-Class Pattern",
      "Step 1: Project Setup",
      "Step 2: Runtime Class",
      "Attribute Breakdown",
      "Step 3: Asset Class",
      "Key Points",
      "Step 4: Compiler Class",
      "Handling Asset Dependencies",
      "Step 5: Editor Template",
      "Create the Template Directory",
      "Template File (`.sdtpl`)",
      "Register in Package Descriptor (`.sdpkg`)",
      "Step 6: Loading at Runtime",
      "Multi-Project Considerations",
      "Rebuilding After Changes",
      "Practical Use Cases"
    ]
  },
  {
    "id": "stride-arch/G11",
    "title": "G11 — Stride Community Toolkit & Bepu Physics",
    "description": "How to use the Stride Community Toolkit for rapid code-only game development with Bepu physics in Stride 4.3+. Covers...",
    "category": "guide",
    "module": "stride-arch",
    "engine": "Stride",
    "tier": "pro",
    "sizeBytes": 11400,
    "sections": [
      "Why the Community Toolkit?",
      "Project Setup",
      "1. Create a Console Application",
      "2. Add NuGet Packages",
      "3. Minimal Entry Point",
      "Toolkit Extension Methods",
      "Scene Setup",
      "Primitive Creation",
      "Primitive Options",
      "Adding Gameplay Logic",
      "Script Components",
      "Async Scripts for Sequenced Logic",
      "Bepu Physics Interaction",
      "Applying Forces",
      "Collision Detection",
      "Static vs Dynamic Bodies",
      "Scene Composition Patterns",
      "Factory Functions",
      "Game State in Start Callback",
      "When to Use Code-Only vs Game Studio",
      "Bepu vs Bullet: Which Physics Backend?"
    ]
  },
  {
    "id": "stride-arch/G12",
    "title": "G12 — VR & OpenXR Development in Stride",
    "description": "How to build VR applications with Stride, covering the built-in VR rendering pipeline, supported headsets (Oculus Rif...",
    "category": "guide",
    "module": "stride-arch",
    "engine": "Stride",
    "tier": "pro",
    "sizeBytes": 10945,
    "sections": [
      "VR Architecture in Stride",
      "Enabling VR in Game Studio",
      "Step-by-Step Setup",
      "Configuration Properties",
      "Performance Requirements",
      "Mandatory Game Loop Settings",
      "Rendering Optimizations for VR",
      "VR Input Handling",
      "Head Tracking",
      "Controller Input",
      "The Dummy VR Provider",
      "OpenXR Status",
      "Current State in Stride (as of 4.3)",
      "What This Means for New Projects",
      "VR Comfort Best Practices",
      "Camera Movement",
      "Comfort Settings to Ship",
      "Scale and Distance",
      "Summary"
    ]
  },
  {
    "id": "stride-arch/G13",
    "title": "G13 — Cross-Platform Builds: Developing on Linux & macOS",
    "description": "Stride 4.3 adds first-class cross-platform build support — you can now compile Stride games on Linux and macOS, not j...",
    "category": "guide",
    "module": "stride-arch",
    "engine": "Stride",
    "tier": "pro",
    "sizeBytes": 8999,
    "sections": [
      "What Changed in 4.3",
      "Setting Up a Linux Build Environment",
      "Prerequisites",
      "Clone and Build",
      "Running Without Game Studio",
      "Setting Up a macOS Build Environment",
      "Prerequisites",
      "Metal Backend",
      "What Works Cross-Platform",
      "What Doesn't Work Yet",
      "Hybrid Workflow: Editor on Windows, Build on Linux",
      "CI/CD Pipeline Example",
      "GitHub Actions (Linux Build)",
      "GitLab CI",
      "IDE Support on Linux/macOS",
      "JetBrains Rider",
      "Visual Studio Code",
      "Troubleshooting"
    ]
  },
  {
    "id": "stride-arch/G14",
    "title": "G14 — .NET 10 & C# 14 Performance Patterns in Stride 4.3",
    "description": "Stride 4.3 targets .NET 10 and C# 14, a significant runtime upgrade from the .NET 8 / C# 12 baseline of Stride 4.2. T...",
    "category": "guide",
    "module": "stride-arch",
    "engine": "Stride",
    "tier": "pro",
    "sizeBytes": 12649,
    "sections": [
      "What You Get for Free",
      "C# 14 Features for Game Development",
      "Field-Backed Properties (`field` keyword)",
      "Extension Members (Preview)",
      "`params` Collections",
      "Performance Patterns",
      "Pattern: FrozenDictionary for Static Lookups",
      "Pattern: Ref Structs in Hot Paths",
      "Pattern: Vectorized Batch Updates",
      "Migration from Stride 4.2",
      "Project File Changes",
      ".NET 10 SDK",
      "IDE Support",
      "Breaking Changes to Watch",
      "Physics Migration: Bullet to Bepu",
      "Profiling .NET 10 Improvements",
      "Summary of Actionable Steps"
    ]
  },
  {
    "id": "stride-arch/G15",
    "title": "G15 — Mesh Buffer Helpers & Procedural Geometry",
    "description": "Stride 4.3 introduced VertexBufferHelper and IndexBufferHelper — standardized utilities for reading and writing mesh ...",
    "category": "guide",
    "module": "stride-arch",
    "engine": "Stride",
    "tier": "pro",
    "sizeBytes": 13805,
    "sections": [
      "The Problem: Non-Standardized Vertex Layouts",
      "VertexBufferHelper",
      "Reading Vertex Data",
      "Writing Vertex Data",
      "Checking Available Elements",
      "IndexBufferHelper",
      "Procedural Geometry with MeshBuilder",
      "Basic Triangle",
      "Procedural Grid (Terrain Base)",
      "Runtime Mesh Modification",
      "Terrain Deformation Example",
      "Debug Visualization Meshes",
      "Performance Considerations",
      "Summary"
    ]
  },
  {
    "id": "stride-arch/G16",
    "title": "G16 — Audio System & Spatial Sound",
    "description": "Stride's audio subsystem provides sound playback, 3D spatialization, streaming, and real-time parameter control throu...",
    "category": "guide",
    "module": "stride-arch",
    "engine": "Stride",
    "tier": "pro",
    "sizeBytes": 11828,
    "sections": [
      "Audio Architecture Overview",
      "Importing Audio Assets",
      "Setting Up 3D Audio in the Editor",
      "1. Add an Audio Listener",
      "2. Create an Audio Emitter",
      "Runtime Sound Control",
      "Key AudioEmitterSoundController API",
      "Music and Non-Spatial Audio",
      "3D Spatialization Details",
      "Distance Attenuation",
      "HRTF (Head-Related Transfer Function)",
      "Apply3D Manual Control",
      "Dynamic Sound Sources",
      "Performance Considerations",
      "Common Patterns",
      "Audio Bus / Category Volumes",
      "Trigger-Based Audio",
      "Next Steps"
    ]
  },
  {
    "id": "stride-arch/G17",
    "title": "G17 — Particle Systems",
    "description": "Stride ships with a full-featured GPU-accelerated particle system that supports billboard sprites, mesh particles, ri...",
    "category": "guide",
    "module": "stride-arch",
    "engine": "Stride",
    "tier": "pro",
    "sizeBytes": 13103,
    "sections": [
      "Particle System Architecture",
      "Creating Particles in the Editor",
      "Quick Setup",
      "Emitter Configuration",
      "Shape Builders",
      "Billboard (Default)",
      "Oriented Quad",
      "Ribbon / Trail",
      "Mesh Particles",
      "Materials and Shaders",
      "Built-in Particle Materials",
      "Flipbook Animation",
      "Custom Particle Shaders",
      "Runtime API",
      "Controlling Emitters at Runtime",
      "Resetting a Particle System",
      "Custom Spawners and Updaters",
      "Custom Spawner Example",
      "Custom Updater Example",
      "Performance Optimization",
      "Particle Budgeting",
      "Reducing Overdraw",
      "LOD for Particles",
      "Sorting",
      "Common Effect Recipes",
      "Fire",
      "Sparks",
      "Magic Trail (Ribbon)",
      "Next Steps"
    ]
  },
  {
    "id": "stride-arch/G18",
    "title": "G18 — Scripting Patterns & Best Practices",
    "description": "How to choose and structure scripts in Stride 4.3. Covers SyncScript, AsyncScript, and StartupScript lifecycle, real-...",
    "category": "guide",
    "module": "stride-arch",
    "engine": "Stride",
    "tier": "pro",
    "sizeBytes": 13980,
    "sections": [
      "Script Types Overview",
      "StartupScript",
      "When to Use StartupScript",
      "SyncScript",
      "SyncScript Best Practices",
      "AsyncScript",
      "AsyncScript Patterns",
      "AsyncScript Threading Rules",
      "Inter-Script Communication",
      "Direct Reference (Editor-Linked)",
      "Entity.Get<T>() Lookup",
      "Event-Based Communication",
      "Common Pitfalls",
      "1. Forgetting to Unsubscribe Events",
      "2. Blocking in AsyncScript",
      "3. Accessing Stride APIs from Background Threads",
      "4. Heavy SyncScript Updates",
      "5. Script Execution Order",
      "Performance Tips",
      "Choosing the Right Script Type"
    ]
  },
  {
    "id": "stride-arch/G19",
    "title": "G19 — Input System & Virtual Buttons",
    "description": "How to handle input in Stride 4.3 — keyboard, mouse, gamepad, and touch. Covers direct state queries, event-based inp...",
    "category": "guide",
    "module": "stride-arch",
    "engine": "Stride",
    "tier": "pro",
    "sizeBytes": 15845,
    "sections": [
      "Input Architecture",
      "Device Availability",
      "Keyboard Input",
      "State Queries (Held Keys)",
      "State Change Detection (Pressed/Released)",
      "Modifier Keys",
      "Event List",
      "Mouse Input",
      "Mouse Lock for First-Person Games",
      "Gamepad Input",
      "Multiple Gamepads",
      "Virtual Buttons — Remappable Input",
      "Setup",
      "Querying Virtual Buttons",
      "Limitations of Built-In Virtual Buttons",
      "Touch & Pointer Input",
      "Gesture Recognition",
      "Common Patterns",
      "Input Context Switching",
      "Input Buffering",
      "Performance Notes"
    ]
  },
  {
    "id": "stride-arch/G20",
    "title": "G20 — Scene Management & Composition",
    "description": "How to structure, load, and compose scenes in Stride 4.3. Covers the scene hierarchy, child scene loading and unloadi...",
    "category": "guide",
    "module": "stride-arch",
    "engine": "Stride",
    "tier": "pro",
    "sizeBytes": 12778,
    "sections": [
      "Scene Architecture Overview",
      "Loading and Unloading Child Scenes",
      "Using UrlReference (Recommended)",
      "Using String Paths (Code-Only)",
      "Attaching Child Scenes: Two Equivalent Approaches",
      "Removing Child Scenes",
      "Scene Offset and Positioning",
      "Scene Transitions (Swapping the Root Scene)",
      "Restart Current Scene",
      "Prefab Instantiation",
      "Loading and Instantiating",
      "Loading Prefabs from Code (Without Editor)",
      "Prefab Without Parent Entity",
      "Architectural Patterns",
      "Pattern 1: Persistent Scene + Transient Scenes",
      "Pattern 2: Additive Scene Composition",
      "Pattern 3: Scene-Based State Machine",
      "Code-Only Scene Setup (No Game Studio)",
      "Performance Considerations",
      "Checklist"
    ]
  },
  {
    "id": "stride-arch/G21",
    "title": "G21 — Stride 4.3: .NET 10, Interface Processing & Cross-Platform Builds",
    "description": "A practical overview of the major new capabilities in Stride 4.3 (November 2025) beyond the items covered in existing...",
    "category": "guide",
    "module": "stride-arch",
    "engine": "Stride",
    "tier": "pro",
    "sizeBytes": 8848,
    "sections": [
      "Interface-Based Component Processing",
      "The Problem It Solves",
      "Interface-Driven Updates",
      "Registering Custom Processors",
      "When to Use This Pattern",
      "Cross-Platform Asset Compilation",
      "What Changed",
      "Building on Linux/macOS",
      "Limitations",
      "Practical Approach",
      "IDE Integration: Rider and VSCode Support",
      "Setting Up",
      "Rider-Specific Notes",
      "VSCode-Specific Notes",
      "HDR Rendering Support",
      "User-Defined Gizmos",
      "OpenXR Enhancements",
      "Summary: What to Adopt First"
    ]
  },
  {
    "id": "stride-arch/G22",
    "title": "G22 — Navigation and Pathfinding",
    "description": "Stride includes a built-in navigation system based on navigation meshes (navmeshes). Entities with a NavigationCompon...",
    "category": "guide",
    "module": "stride-arch",
    "engine": "Stride",
    "tier": "pro",
    "sizeBytes": 13639,
    "sections": [
      "Table of Contents",
      "1 — Core Concepts",
      "2 — Navigation Mesh Setup (Editor)",
      "Creating a Navigation Mesh Asset",
      "Visualizing the Navmesh",
      "Build Settings",
      "3 — Navigation Groups and Agent Settings",
      "Multiple Groups",
      "4 — Adding Navigation to Entities",
      "In the Editor",
      "In Code",
      "5 — Pathfinding in Code",
      "Basic Pathfinding",
      "Key API Methods",
      "6 — Dynamic Navigation Meshes",
      "Enabling Dynamic Navigation",
      "How It Works",
      "Performance Notes",
      "7 — Navigation Bounding Boxes",
      "8 — Performance Considerations",
      "9 — Common Patterns",
      "Periodic Re-pathing",
      "Click-to-Move",
      "10 — Troubleshooting",
      "See Also"
    ]
  },
  {
    "id": "stride-arch/G23",
    "title": "G23 — Profiling and Performance Optimization",
    "description": "Stride ships with a built-in Game Profiler that displays CPU, GPU, and memory metrics as an in-game overlay. Combined...",
    "category": "guide",
    "module": "stride-arch",
    "engine": "Stride",
    "tier": "pro",
    "sizeBytes": 12520,
    "sections": [
      "Table of Contents",
      "1 — Game Profiler Setup",
      "Adding the Profiler Script",
      "Enabling at Startup",
      "2 — Runtime Controls",
      "3 — Profiler Modes and Metrics",
      "FPS Mode",
      "CPU Mode",
      "GPU Mode",
      "4 — External Profiling Tools",
      "Visual Studio Performance Profiler",
      "RenderDoc",
      "dotnet-counters and dotnet-trace",
      "5 — Profiling API",
      "Enabling Profiling in Code",
      "Custom Profiling Keys",
      "Accessing ProfilingKey from Scripts",
      "6 — CPU Optimization",
      "Script Performance",
      "Example: Caching Component References",
      "Entity Processing",
      "7 — GPU and Rendering Optimization",
      "Draw Call Reduction",
      "Shader Optimization",
      "Post-Processing",
      "Resolution and Render Targets",
      "8 — Memory Optimization",
      "Texture Memory",
      "GC Pressure",
      "9 — Physics Performance",
      "10 — Common Bottlenecks",
      "Quick Optimization Checklist",
      "See Also"
    ]
  },
  {
    "id": "stride-arch/G24",
    "title": "G24 — Material System and PBR Workflow",
    "description": "Stride uses a Physically Based Rendering (PBR) material system with a metallic/roughness workflow. Materials define h...",
    "category": "guide",
    "module": "stride-arch",
    "engine": "Stride",
    "tier": "pro",
    "sizeBytes": 15641,
    "sections": [
      "Table of Contents",
      "1 — Material System Overview",
      "Architecture",
      "2 — PBR Workflow — Metallic/Roughness",
      "Energy Conservation",
      "Typical Material Maps for Common Surfaces",
      "3 — Material Attributes",
      "Geometry Attributes",
      "Shading Attributes",
      "Misc Attributes",
      "4 — Material Maps",
      "Texture Import Settings",
      "5 — Material Layers",
      "How Layers Work",
      "Creating Layers in the Editor",
      "Use Cases",
      "6 — Creating Materials in the Editor",
      "New Material",
      "Assigning Textures",
      "Live Preview",
      "Material Templates",
      "7 — Materials in Code",
      "Accessing Materials at Runtime",
      "Modifying Material Parameters at Runtime",
      "Creating Materials from Code",
      "8 — Material Slots and Models",
      "Multi-Material Models",
      "9 — Clear-Coat and Special Effects",
      "Clear-Coat",
      "Transparency",
      "10 — Performance and Best Practices",
      "Material Instancing",
      "See Also"
    ]
  },
  {
    "id": "stride-arch/G25",
    "title": "G25 — Compute Shaders",
    "description": "Stride supports compute shaders across its rendering backends — DirectX 11/12, OpenGL, and (as of 4.2.1) Vulkan. Comp...",
    "category": "guide",
    "module": "stride-arch",
    "engine": "Stride",
    "tier": "pro",
    "sizeBytes": 12133,
    "sections": [
      "Table of Contents",
      "1 — When to Use Compute Shaders",
      "2 — Stride's Compute Architecture",
      "Where Compute Fits in the Pipeline",
      "3 — Writing a Compute Shader in SDSL",
      "Key SDSL Compute Concepts",
      "4 — ComputeEffectShader API",
      "Key Properties",
      "5 — Dispatching Compute Work",
      "From a Custom RenderFeature",
      "From a Script (Less Common)",
      "6 — Buffers and Textures",
      "Structured Buffers",
      "Read-Write Textures",
      "7 — Vulkan Compute Support",
      "What Changed",
      "Cross-Platform Considerations",
      "8 — Practical Patterns",
      "Pattern: GPU Particle System",
      "Pattern: Post-Process Compute",
      "Pattern: Procedural Terrain",
      "9 — Performance Considerations",
      "10 — Common Pitfalls"
    ]
  },
  {
    "id": "stride-arch/G26",
    "title": "G26 — Lighting and Environment Setup",
    "description": "Stride's PBR rendering pipeline requires properly configured lighting to produce realistic visuals. Unlike rasterized...",
    "category": "guide",
    "module": "stride-arch",
    "engine": "Stride",
    "tier": "pro",
    "sizeBytes": 14765,
    "sections": [
      "Table of Contents",
      "1 — Lighting System Overview",
      "2 — Direct Light Types",
      "Directional Light",
      "Point Light",
      "Spot Light",
      "Ambient Light",
      "3 — Shadow Mapping",
      "Cascaded Shadow Maps (Directional Lights)",
      "Shadow Filtering",
      "Omnidirectional Shadows (Point Lights)",
      "4 — Light Probes — Indirect Illumination",
      "How Light Probes Work",
      "Placement Guidelines",
      "Configuring Bounces",
      "Light Probe Limitations",
      "5 — Environment Lighting",
      "Skybox Component",
      "HDR Environment Maps",
      "Environment Lighting vs. Light Probes",
      "6 — Local Reflections",
      "How SSR Works",
      "Limitations",
      "Configuration",
      "7 — Post-Processing Stack",
      "Key Effects",
      "Compositor Setup",
      "8 — Lighting in Code",
      "Adding a Directional Light Programmatically",
      "Adding a Point Light",
      "Community Toolkit Helpers",
      "9 — Performance Tuning",
      "10 — Common Lighting Mistakes"
    ]
  },
  {
    "id": "stride-arch/G27",
    "title": "G27 — Game Studio Editor Workflow",
    "description": "Stride Game Studio is the integrated development environment for Stride projects. Unlike code-first frameworks (MonoG...",
    "category": "guide",
    "module": "stride-arch",
    "engine": "Stride",
    "tier": "pro",
    "sizeBytes": 12603,
    "sections": [
      "Table of Contents",
      "1 — Game Studio Layout",
      "Navigation Controls",
      "2 — Scene Editing Workflow",
      "Creating and Populating a Scene",
      "Transform Tools",
      "Dynamic Snapping",
      "Entity Hierarchy",
      "3 — The Prefab System",
      "Creating a Prefab",
      "Editing Prefabs",
      "Prefab Overrides",
      "Nested Prefabs",
      "Archetype System",
      "4 — Asset Management",
      "Importing Assets",
      "Auto-Copy to Resources",
      "Asset Naming Conventions",
      "Asset Dependencies",
      "5 — Script Integration and Hot Reload",
      "Writing Scripts",
      "Hot Reload",
      "Exposing Properties to the Editor",
      "6 — Graphics Compositor",
      "7 — Subscenes and Large Worlds",
      "Setting Up Subscenes",
      "8 — Editor Tips and Shortcuts",
      "9 — Multi-User Collaboration",
      "Recommended Workflow",
      "10 — Common Editor Issues"
    ]
  },
  {
    "id": "stride-arch/G28",
    "title": "G28 — Entity Processors and Custom ECS Patterns",
    "description": "A deep-dive into Stride's entity-component-processor architecture: creating custom EntityComponents, writing EntityPr...",
    "category": "guide",
    "module": "stride-arch",
    "engine": "Stride",
    "tier": "pro",
    "sizeBytes": 17674,
    "sections": [
      "Table of Contents",
      "1 — Stride's ECS Model",
      "Architecture Overview",
      "2 — EntityComponent Basics",
      "Key Attributes",
      "ExecutionMode Options",
      "3 — EntityProcessor Fundamentals",
      "Processor Lifecycle Methods",
      "4 — Auto-Registration with DefaultEntityComponentProcessor",
      "5 — Requiring Multiple Components",
      "Rules for Required Components",
      "6 — EntityProcessor with Custom TData",
      "When to Use Custom TData",
      "7 — Managing Processor Lifecycle",
      "8 — Manual Processor Registration",
      "9 — Script vs Processor — When to Use Each",
      "10 — Building a Custom Damage System (Worked Example)",
      "Step 1: Data Components",
      "Step 2: Processor",
      "Step 3: Inflicting Damage from a Script",
      "11 — Performance Considerations",
      "12 — Common Pitfalls"
    ]
  },
  {
    "id": "stride-arch/G29",
    "title": "G29 — Prefabs and Archetypes",
    "description": "Stride's prefab system lets you define reusable entity templates in the editor and instantiate them at runtime from C...",
    "category": "guide",
    "module": "stride-arch",
    "engine": "Stride",
    "tier": "pro",
    "sizeBytes": 11036,
    "sections": [
      "Table of Contents",
      "1 — What Is a Prefab?",
      "Key Properties",
      "2 — Creating Prefabs in Game Studio",
      "From an Existing Entity",
      "From Scratch",
      "Prefab Editor vs Scene Editor",
      "3 — Using Prefab Instances in Scenes",
      "4 — Nested Prefabs",
      "Rules for Nesting",
      "5 — Property Overrides",
      "Managing Overrides",
      "What Can Be Overridden",
      "6 — Runtime Instantiation from C#",
      "Important Details",
      "7 — Prefab Pooling Pattern",
      "8 — Prefab vs Scene — When to Use Each",
      "9 — Archetype Pattern with Prefabs",
      "Folder Structure",
      "How to Implement",
      "10 — Common Pitfalls"
    ]
  },
  {
    "id": "stride-arch/G30",
    "title": "G30 — Asset Pipeline and Custom Compilers",
    "description": "A deep-dive into Stride's asset build pipeline: how source assets flow through importers, compilers, and the dependen...",
    "category": "guide",
    "module": "stride-arch",
    "engine": "Stride",
    "tier": "pro",
    "sizeBytes": 16152,
    "sections": [
      "Table of Contents",
      "1 — Pipeline Overview",
      "Key Concepts",
      "2 — Asset Lifecycle",
      "Design-Time vs Runtime",
      "3 — Built-In Asset Types",
      "4 — Importers — IAssetImporter",
      "How Import Works",
      "Built-In Importers",
      "5 — Compilers — IAssetCompiler",
      "Anatomy of a Compiler",
      "Build Commands",
      "6 — Thumbnail Compilers",
      "7 — Incremental Compilation and Dependencies",
      "Dependency Types",
      "How Incremental Builds Work",
      "Declaring Dependencies",
      "8 — Building a Custom Asset Type (Worked Example)",
      "Step 1: Define the Asset Class",
      "Step 2: Define the Runtime Data",
      "Step 3: Implement the Compiler",
      "Step 4: Register and Use",
      "9 — Asset Compilation Context and Parameters",
      "10 — Debugging the Asset Pipeline",
      "11 — Performance Tips",
      "12 — Common Pitfalls"
    ]
  },
  {
    "id": "stride-arch/G31",
    "title": "G31 — Scene Streaming & Large Worlds",
    "description": "Stride's scene streaming system lets you break a game world into smaller sub-scenes and load/unload them at runtime, ...",
    "category": "guide",
    "module": "stride-arch",
    "engine": "Stride",
    "tier": "pro",
    "sizeBytes": 10334,
    "sections": [
      "Table of Contents",
      "1 — Scene Hierarchy & Child Scenes",
      "When to Use Child Scenes",
      "2 — Scene Streaming at Runtime",
      "3 — Streaming Scripts — Load/Unload on Trigger",
      "4 — Texture & Resource Streaming",
      "5 — Community Terrain Solutions",
      "StrideTerrain (johang88/StrideTerrain)",
      "Integration Pattern",
      "6 — Performance Considerations",
      "7 — Practical Pattern — Zone-Based Streaming",
      "8 — Common Pitfalls"
    ]
  },
  {
    "id": "stride-arch/G32",
    "title": "G32 — Service Registry & Dependency Injection",
    "description": "Stride provides a built-in service locator (IServiceRegistry) that game systems, scripts, and custom modules use to d...",
    "category": "guide",
    "module": "stride-arch",
    "engine": "Stride",
    "tier": "pro",
    "sizeBytes": 11412,
    "sections": [
      "Table of Contents",
      "1 — How Stride's Service Registry Works",
      "2 — Accessing the Registry from Scripts",
      "Service Access from Non-Script Code",
      "3 — Registering Custom Services",
      "Registration Timing",
      "4 — GameSystemBase — Creating Engine-Level Services",
      "GameSystemBase vs. SyncScript",
      "5 — Community DI Libraries",
      "Stride.DependencyInjection (Nicogo1705)",
      "When to Use a DI Library",
      "6 — Architecture Patterns",
      "Composition Root Pattern",
      "Interface Segregation",
      "Service Lifetime Awareness",
      "7 — Testing with Service Substitution",
      "8 — Common Pitfalls"
    ]
  },
  {
    "id": "stride-arch/G33",
    "title": "G33 — Debugging & Diagnostics",
    "description": "Stride provides several layers of debugging support: an in-game profiler, integration with Visual Studio / Rider debu...",
    "category": "guide",
    "module": "stride-arch",
    "engine": "Stride",
    "tier": "pro",
    "sizeBytes": 11823,
    "sections": [
      "Table of Contents",
      "1 — Script Debugging with IDE Breakpoints",
      "Visual Studio",
      "Rider",
      "VS Code",
      "Hot Reload",
      "2 — Stride's Built-In Game Profiler",
      "Enabling the Profiler",
      "Profiler Display",
      "Profiling Keys",
      "3 — Logging System",
      "Log Levels",
      "Viewing Logs",
      "Custom Log Modules",
      "4 — Roslyn Diagnostic Analyzers",
      "Serialization Analyzers",
      "Example",
      "Configuring Analyzers",
      "5 — GPU Debugging with RenderDoc",
      "Capture Workflow",
      "What to Look For",
      "Programmatic Capture",
      "6 — Visual Studio Diagnostic Tools",
      "Performance Profiler (Alt + F2)",
      "Memory Diagnostic",
      "Common Performance Patterns to Watch",
      "7 — Common Debugging Scenarios",
      "Script Not Running",
      "Physics Collisions Not Firing",
      "Asset Not Loading",
      "Shader Compilation Errors",
      "8 — Debugging Code-Only Projects"
    ]
  },
  {
    "id": "stride-arch/G34",
    "title": "G34 — Custom Gizmos & Editor Extensions",
    "description": "Stride Game Studio supports user-defined gizmos — visual overlays in the scene editor that help designers understand ...",
    "category": "guide",
    "module": "stride-arch",
    "engine": "Stride",
    "tier": "pro",
    "sizeBytes": 11416,
    "sections": [
      "Table of Contents",
      "1 — Gizmo Architecture Overview",
      "2 — Creating a Basic Gizmo",
      "3 — The IEntityGizmo Interface",
      "4 — Rendering Gizmo Geometry",
      "Solid Primitives",
      "Line-Based Wireframes",
      "Emissive Gizmo Materials",
      "5 — Scene Picking and Selection",
      "6 — Responding to Component State",
      "7 — Performance Considerations",
      "8 — Common Gizmo Patterns",
      "Trigger Volume Visualizer",
      "AI Waypoint Path",
      "Audio Source Range",
      "Camera Frustum Preview",
      "Light Cone/Radius"
    ]
  },
  {
    "id": "stride-arch/G35",
    "title": "G35 — HDR Rendering Pipeline",
    "description": "Stride supports High Dynamic Range (HDR) rendering, allowing color values to exceed the standard 0–1 range for more r...",
    "category": "guide",
    "module": "stride-arch",
    "engine": "Stride",
    "tier": "pro",
    "sizeBytes": 10760,
    "sections": [
      "Table of Contents",
      "1 — HDR vs LDR Rendering",
      "Requirements",
      "2 — Enabling HDR in Stride",
      "In Game Studio",
      "In Code (Code-Only Projects)",
      "3 — The HDR Pipeline Flow",
      "4 — Tone Mapping",
      "Configuring Tone Mapping in Game Studio",
      "Available Operators",
      "Exposure Control",
      "5 — HDR Display Output (Stride 4.3+)",
      "Requirements",
      "How It Works",
      "Design Considerations",
      "6 — Post-Processing in HDR",
      "Bloom",
      "Depth of Field",
      "Light Shafts (God Rays)",
      "7 — HDR-Aware Materials and Lighting",
      "Light Intensity Units",
      "Emissive Materials",
      "8 — Common Pitfalls",
      "Using Direct3D 9",
      "Forgetting Tone Mapping",
      "sRGB vs Linear Color Space",
      "Overbright UI",
      "Auto-Exposure Flicker"
    ]
  },
  {
    "id": "stride-arch/G36",
    "title": "G36 — VR Haptics & OpenXR Passthrough",
    "description": "Stride 4.3 adds two VR features that improve immersion: haptic feedback integration for VR controllers and an API for...",
    "category": "guide",
    "module": "stride-arch",
    "engine": "Stride",
    "tier": "pro",
    "sizeBytes": 12057,
    "sections": [
      "Table of Contents",
      "1 — Haptic Feedback Overview",
      "How It Works",
      "2 — Triggering Haptics from Scripts",
      "Basic Haptic Pulse",
      "Haptic Parameters",
      "Async Haptic Patterns",
      "3 — Haptic Design Patterns",
      "Match Haptics to Visual/Audio Events",
      "Use Amplitude and Duration, Not Frequency",
      "Keep Vibrations Brief",
      "Offer a Haptic Intensity Setting",
      "Haptic Feedback Table (Suggested Starting Points)",
      "4 — OpenXR Passthrough Overview",
      "Supported Hardware",
      "5 — Enabling Passthrough",
      "In Game Studio",
      "In Code",
      "Passthrough Lifecycle",
      "6 — Mixed Reality Rendering",
      "Transparent Background",
      "Occlusion of Real-World Objects",
      "Lighting Considerations",
      "7 — Platform Compatibility",
      "Graceful Degradation"
    ]
  },
  {
    "id": "stride-arch-rules",
    "title": "Stride Architecture Rules",
    "description": "",
    "category": "reference",
    "module": "stride-arch",
    "engine": "Stride",
    "tier": "pro",
    "sizeBytes": 9045,
    "sections": [
      "Architecture Context",
      "Tech Stack",
      "Key Differences from Framework-Based Engines",
      "Project Structure Conventions",
      "Code-Only Projects",
      "Entity-Component System",
      "Script Types",
      "Key Architectural Difference",
      "Physics — Bepu Physics v2",
      "Key Bepu Concepts in Stride",
      "Migration from Bullet",
      "Code-Only Bepu Setup",
      "Rendering Pipeline",
      "Stride Shading Language (SDSL)",
      "Build Commands",
      "Editor Workflow",
      "When to Choose Stride",
      "C# Conventions",
      "Module Coverage Plan"
    ]
  },
  {
    "id": "threejs-arch/E1",
    "title": "Three.js Architecture Overview",
    "description": "Three.js is a JavaScript/TypeScript library that abstracts WebGL and WebGPU into a high-level scene graph API. It is ...",
    "category": "architecture",
    "module": "threejs-arch",
    "engine": "Three.js",
    "tier": "pro",
    "sizeBytes": 7816,
    "sections": [
      "Core Architecture",
      "Rendering Pipeline",
      "Key Subsystems",
      "Scene Graph",
      "Transform Propagation",
      "Rendering Backends",
      "WebGPURenderer (Recommended — r166+)",
      "WebGLRenderer (Legacy)",
      "TSL (Three Shading Language)",
      "Game Architecture Patterns",
      "1. Component-Based (Recommended for Games)",
      "2. State Machine (For Game States)",
      "3. ECS Libraries",
      "Performance Characteristics",
      "Optimization Tools",
      "Ecosystem"
    ]
  },
  {
    "id": "threejs-arch/engine-overview",
    "title": "Three.js Engine Architecture Overview",
    "description": "Three.js is the dominant open-source 3D library for the web, providing a high-level abstraction over WebGL and WebGPU...",
    "category": "architecture",
    "module": "threejs-arch",
    "engine": "Three.js",
    "tier": "pro",
    "sizeBytes": 7150,
    "sections": [
      "Core Architecture",
      "Key Subsystems",
      "Rendering Pipeline",
      "WebGPU and TSL",
      "Performance Considerations for Games",
      "Asset Loading",
      "What Three.js Does NOT Provide (Game Dev Must-Haves)",
      "Version Notes"
    ]
  },
  {
    "id": "threejs-arch/G10",
    "title": "Lighting & PBR Materials",
    "description": "Three.js implements a metallic-roughness PBR workflow through MeshStandardMaterial and its advanced sibling MeshPhysi...",
    "category": "guide",
    "module": "threejs-arch",
    "engine": "Three.js",
    "tier": "pro",
    "sizeBytes": 10950,
    "sections": [
      "Light Types",
      "AmbientLight",
      "DirectionalLight",
      "PointLight",
      "SpotLight",
      "HemisphereLight",
      "MeshStandardMaterial — The Workhorse PBR Material",
      "Core Properties",
      "Texture Maps",
      "Typical Game Material Setup",
      "MeshPhysicalMaterial — Advanced PBR Effects",
      "Clearcoat",
      "Transmission (Physically-Based Glass)",
      "Sheen",
      "Iridescence",
      "Anisotropy",
      "Dispersion",
      "Environment Maps",
      "Using PMREMGenerator",
      "Lightweight Alternatives",
      "Performance Considerations for Games",
      "Material Cost Hierarchy",
      "Shadow Optimization",
      "Texture Tips",
      "Mobile GPU Limits",
      "Tone Mapping and Color Space"
    ]
  },
  {
    "id": "threejs-arch/G11",
    "title": "Networking & Multiplayer for Three.js Games",
    "description": "Three.js handles rendering only — networking is a bring-your-own layer. This guide covers the dominant patterns for a...",
    "category": "guide",
    "module": "threejs-arch",
    "engine": "Three.js",
    "tier": "pro",
    "sizeBytes": 12019,
    "sections": [
      "Transport Options",
      "WebSocket (TCP-based)",
      "WebRTC DataChannel (UDP-like)",
      "Transport Comparison",
      "Authoritative Server Architecture",
      "Server Game Loop",
      "Input Packaging",
      "Client-Side Prediction & Server Reconciliation",
      "The Three Loops",
      "Entity Interpolation for Remote Players",
      "Binary Serialization",
      "Performance Considerations",
      "Recommended Libraries",
      "Architecture Checklist"
    ]
  },
  {
    "id": "threejs-arch/G12",
    "title": "G12 — Particle & VFX Systems",
    "description": "Three.js offers three tiers of particle/VFX capability: Points (CPU, simple), InstancedMesh sprites (CPU, flexible), ...",
    "category": "guide",
    "module": "threejs-arch",
    "engine": "Three.js",
    "tier": "pro",
    "sizeBytes": 10643,
    "sections": [
      "Tier 1 — Points (CPU Particles)",
      "CPU Update Loop",
      "Tier 2 — InstancedMesh Sprites (CPU, Flexible)",
      "Tier 3 — TSL Compute Particles (GPU, Massive Scale)",
      "Architecture Overview",
      "Setting Up Storage Buffers",
      "Writing the Compute Shader (TSL)",
      "Rendering with SpriteNodeMaterial",
      "The Render Loop",
      "Choosing the Right Tier",
      "Common VFX Patterns",
      "Fire / Embers",
      "Explosions",
      "Trails",
      "Rain / Snow",
      "Performance Tips",
      "Further Reading"
    ]
  },
  {
    "id": "threejs-arch/G1",
    "title": "G1 — Physics Integration with Rapier",
    "description": "Three.js is a rendering library — it has no built-in physics. The recommended physics engine for Three.js games is Ra...",
    "category": "guide",
    "module": "threejs-arch",
    "engine": "Three.js",
    "tier": "pro",
    "sizeBytes": 16582,
    "sections": [
      "Installing Rapier",
      "Approach 1: Official RapierPhysics Addon",
      "userData.physics Properties",
      "Approach 2: Manual Integration (Recommended for Games)",
      "Architecture Overview",
      "Step 1: Create the Physics World",
      "Step 2: Create Rigid Bodies and Colliders",
      "Rigid Body Types",
      "Collider Shapes",
      "Step 3: Sync Physics → Three.js Each Frame",
      "Step 4: Fixed Timestep Game Loop",
      "Applying Forces and Impulses",
      "Raycasting",
      "Common Raycast Uses in Games",
      "Collision Events",
      "Joints and Constraints",
      "Collision Groups and Filtering",
      "Performance Considerations",
      "Complete Minimal Example"
    ]
  },
  {
    "id": "threejs-arch/G2",
    "title": "G2 — TSL & Node Materials",
    "description": "Three.js is transitioning from GLSL shader strings to TSL (Three Shading Language) — a JavaScript-based node material...",
    "category": "guide",
    "module": "threejs-arch",
    "engine": "Three.js",
    "tier": "pro",
    "sizeBytes": 12148,
    "sections": [
      "Why TSL?",
      "Node Material Classes",
      "TSL Basics: Nodes and Imports",
      "Assigning Nodes to Material Slots",
      "Available Material Slots (MeshStandardNodeMaterial)",
      "Uniforms: CPU → GPU Communication",
      "Custom Functions with Fn",
      "Game-Relevant Shader Patterns",
      "Dissolve / Disintegration Effect",
      "Scrolling Lava / Water UV",
      "Rim Lighting (Fresnel Glow)",
      "Triplanar Mapping (Terrain Without UV Seams)",
      "MeshPhysicalNodeMaterial: Advanced PBR",
      "Post-Processing with TSL",
      "WebGPU Compute Shaders (Advanced)",
      "Performance Considerations",
      "Common Mistakes"
    ]
  },
  {
    "id": "threejs-arch/G3",
    "title": "Three.js Asset Loading — glTF, Compression & Production Pipelines",
    "description": "Loading 3D assets efficiently is critical for web games where every kilobyte impacts load time. Three.js standardizes...",
    "category": "guide",
    "module": "threejs-arch",
    "engine": "Three.js",
    "tier": "pro",
    "sizeBytes": 10822,
    "sections": [
      "Why glTF / GLB",
      "Basic Loading (TypeScript)",
      "Callback Style (for progress bars)",
      "Draco Mesh Compression",
      "Setup",
      "Creating Draco-Compressed Files",
      "Performance Notes",
      "KTX2 / Basis Universal Texture Compression",
      "Setup",
      "Creating KTX2 Textures",
      "When to Use KTX2",
      "Meshopt Compression",
      "Draco vs Meshopt",
      "Combined Compression Pipeline",
      "Build Pipeline (gltf-transform)",
      "Loading Manager & Multi-Asset Loading",
      "glTF Extensions Supported by Three.js",
      "Performance Checklist"
    ]
  },
  {
    "id": "threejs-arch/G4",
    "title": "Three.js Camera Systems for Games",
    "description": "Cameras define how players see the world. Three.js provides two core camera classes — PerspectiveCamera and Orthograp...",
    "category": "guide",
    "module": "threejs-arch",
    "engine": "Three.js",
    "tier": "pro",
    "sizeBytes": 9733,
    "sections": [
      "Camera Types",
      "PerspectiveCamera",
      "OrthographicCamera",
      "Handling Resize",
      "Built-in Controls (three/addons)",
      "OrbitControls — Third-Person / Debug",
      "MapControls — RTS / Top-Down",
      "PointerLockControls — First-Person",
      "FlyControls — Free Camera / Spectator",
      "Community Alternative: camera-controls",
      "Game Camera Patterns",
      "Third-Person Follow Camera",
      "Isometric Camera (fixed angle)",
      "Camera Shake",
      "Performance Considerations",
      "WebGPU Notes"
    ]
  },
  {
    "id": "threejs-arch/G5",
    "title": "Three.js Audio System — Spatial Sound for Games",
    "description": "Three.js wraps the Web Audio API into a scene-graph-aware audio system. An AudioListener attached to the camera acts ...",
    "category": "guide",
    "module": "threejs-arch",
    "engine": "Three.js",
    "tier": "pro",
    "sizeBytes": 7020,
    "sections": [
      "Core Classes",
      "AudioListener",
      "Audio (Non-Positional)",
      "PositionalAudio (3D Spatial)",
      "Distance Models",
      "Directional Audio (Cones)",
      "Audio Management Patterns for Games",
      "Sound Pool (Avoid Overlapping One-Shots)",
      "Audio Bus with Filters",
      "Preloading Audio Assets",
      "Debugging",
      "Performance Considerations"
    ]
  },
  {
    "id": "threejs-arch/G6",
    "title": "G6 — Optimization & Performance",
    "description": "Three.js scenes can easily exceed GPU budgets on mid-range hardware — especially on mobile. The three biggest levers ...",
    "category": "guide",
    "module": "threejs-arch",
    "engine": "Three.js",
    "tier": "pro",
    "sizeBytes": 11807,
    "sections": [
      "Measuring First",
      "InstancedMesh — Same Geometry, Many Copies",
      "Per-Instance Frustum Culling",
      "BatchedMesh — Different Geometries, One Draw Call",
      "BatchedMesh Options",
      "LOD — Level of Detail",
      "LOD Tips for Games",
      "Texture Optimization",
      "KTX2 / Basis Universal Compression",
      "Texture Atlases",
      "Mipmap & Anisotropy",
      "Geometry Optimization",
      "Draco Compression",
      "Geometry Merging",
      "Renderer Settings",
      "WebGPURenderer (r171+)",
      "Key Renderer Tuning",
      "Performance Checklist for Games",
      "Common Pitfalls"
    ]
  },
  {
    "id": "threejs-arch/G7",
    "title": "Three.js Input Handling for Games",
    "description": "Three.js does not include a built-in input manager — it relies on the browser's native DOM event system for keyboard,...",
    "category": "guide",
    "module": "threejs-arch",
    "engine": "Three.js",
    "tier": "pro",
    "sizeBytes": 13895,
    "sections": [
      "Input Architecture Overview",
      "Keyboard Input",
      "Event-Driven Capture, Polling Read",
      "Detecting Press vs Hold",
      "Pointer & Mouse Input",
      "Normalised Device Coordinates (NDC)",
      "Raycaster for Object Picking",
      "Raycaster Layers",
      "Pointer Lock (FPS-Style)",
      "Touch Input",
      "Virtual Joystick Pattern",
      "Gamepad API",
      "Built-In Controls Reference",
      "Combining Controls with Game Input",
      "Unified Input Manager Pattern",
      "WebXR Input (VR/AR Controllers)",
      "Performance Considerations",
      "Common Pitfalls"
    ]
  },
  {
    "id": "threejs-arch/G8",
    "title": "Animation System",
    "description": "Three.js provides a complete keyframe animation system built around four core classes: KeyframeTrack, AnimationClip, ...",
    "category": "guide",
    "module": "threejs-arch",
    "engine": "Three.js",
    "tier": "pro",
    "sizeBytes": 8901,
    "sections": [
      "Core Architecture",
      "KeyframeTrack and AnimationClip",
      "Track Types",
      "Crossfading Between Animations",
      "Additive Animation Blending",
      "Weight Control for Additive Layers",
      "Animation State Machine Pattern",
      "Morph Target Animation",
      "Loop Modes and Playback Control",
      "Performance Considerations",
      "WebGPU Notes"
    ]
  },
  {
    "id": "threejs-arch/G9",
    "title": "Three.js WebGPU Renderer — Modern Rendering with Automatic Fallback",
    "description": "Since r171 (September 2025) Three.js ships WebGPURenderer as the recommended renderer for new projects. It automatica...",
    "category": "guide",
    "module": "threejs-arch",
    "engine": "Three.js",
    "tier": "pro",
    "sizeBytes": 7077,
    "sections": [
      "Quick Start",
      "Import Path",
      "Constructor Options",
      "Backend Selection & Detection",
      "Migrating from WebGLRenderer",
      "Step 1 — Swap the Renderer",
      "Step 2 — Replace GLSL ShaderMaterial",
      "Step 3 — Fix Render Target Names",
      "Step 4 — Adjust Shadow Bias",
      "Compute Shaders (WebGPU Only)",
      "Performance Considerations for Games",
      "Draw Call Overhead",
      "Instancing",
      "Mobile GPU Limits",
      "Frame Timing",
      "Checklist: New Game Project Setup"
    ]
  },
  {
    "id": "threejs-arch/R1",
    "title": "Three.js UI & HUD Overlay Patterns for Games",
    "description": "Three.js has no built-in UI system. Game developers choose between HTML overlays (fastest to build), in-scene 3D UI (...",
    "category": "reference",
    "module": "threejs-arch",
    "engine": "Three.js",
    "tier": "pro",
    "sizeBytes": 13725,
    "sections": [
      "Strategy Comparison",
      "Pattern 1: HTML/CSS Overlay (Most Common for 2D HUD)",
      "Pattern 2: CSS2DRenderer (World-Space HTML Labels)",
      "Pattern 3: Orthographic Scene Overlay (In-WebGL HUD)",
      "Pattern 4: troika-three-text (GPU SDF Text)",
      "Pattern 5: Minimap with Viewport / Scissor",
      "Damage Number Pool (Complete Pattern)",
      "WebGPU Compatibility",
      "Choosing the Right Approach"
    ]
  },
  {
    "id": "threejs-arch/R2",
    "title": "React Three Fiber (R3F) Game Development Patterns",
    "description": "React Three Fiber (R3F) is a React renderer for Three.js maintained by pmndrs. It maps Three.js objects to JSX compon...",
    "category": "reference",
    "module": "threejs-arch",
    "engine": "Three.js",
    "tier": "pro",
    "sizeBytes": 11878,
    "sections": [
      "Ecosystem Overview",
      "Canvas Setup",
      "Core Hooks",
      "useFrame — The Game Loop",
      "useThree — Access Renderer State",
      "useLoader — Asset Loading with Suspense",
      "Physics with @react-three/rapier",
      "Collider Types",
      "Sensor Colliders (Triggers)",
      "Useful Drei Components for Games",
      "State Management Pattern (Zustand)",
      "Performance Checklist",
      "Project Structure (Recommended)"
    ]
  },
  {
    "id": "threejs-arch/R3",
    "title": "R3 — Procedural Generation for Games",
    "description": "Procedural generation creates game content algorithmically — terrain, dungeons, vegetation, textures — instead of han...",
    "category": "reference",
    "module": "threejs-arch",
    "engine": "Three.js",
    "tier": "pro",
    "sizeBytes": 15288,
    "sections": [
      "Noise Functions",
      "Recommended Libraries",
      "Basic Noise Heightmap",
      "Octave Layering (Fractal Brownian Motion)",
      "Terrain Mesh Generation",
      "Creating a Terrain from a Heightmap",
      "Chunked Terrain for Large Worlds",
      "Dungeon & Level Generation",
      "Binary Space Partition (BSP) Rooms",
      "Converting BSP to Three.js Geometry",
      "Vegetation & Object Scattering",
      "GPU-Side Procedural Generation with TSL",
      "Seeded Randomness",
      "Performance Considerations"
    ]
  },
  {
    "id": "threejs-arch/R4",
    "title": "Scene & State Management for Games",
    "description": "Three.js provides no built-in game state machine or scene lifecycle. Game developers must implement their own pattern...",
    "category": "reference",
    "module": "threejs-arch",
    "engine": "Three.js",
    "tier": "pro",
    "sizeBytes": 9807,
    "sections": [
      "Game Loop Architecture",
      "Finite State Machine",
      "Example States",
      "Resource Tracking & Disposal",
      "ResourceTracker Pattern",
      "What Must Be Disposed",
      "Disposal Checklist for Scene Transitions",
      "Scene Transition Effects",
      "Performance Notes"
    ]
  },
  {
    "id": "threejs-arch/R5",
    "title": "R5 — Post-Processing & Effects Pipeline",
    "description": "Post-processing transforms a rendered frame before it reaches the screen — bloom, ambient occlusion, color grading, d...",
    "category": "reference",
    "module": "threejs-arch",
    "engine": "Three.js",
    "tier": "pro",
    "sizeBytes": 12465,
    "sections": [
      "Architecture Overview",
      "Built-in EffectComposer (three/addons)",
      "pmndrs/postprocessing (Recommended for Games)",
      "Installation",
      "Built-in Passes",
      "pmndrs/postprocessing",
      "Built-in EffectComposer Setup",
      "Key EffectComposer API",
      "pmndrs/postprocessing Setup (Recommended)",
      "Common Effects Reference",
      "Built-in Passes (three/addons)",
      "pmndrs/postprocessing Effects",
      "Selective Bloom (Emissive-Only Glow)",
      "Approach: Emissive Materials + Luminance Threshold",
      "Approach: Layers (Built-in Composer)",
      "HDR Pipeline Setup",
      "Performance Considerations",
      "Budget Guidelines",
      "Optimization Tips",
      "WebGPU Compatibility Note",
      "Quick-Start: Game-Ready Post-Processing Stack"
    ]
  },
  {
    "id": "threejs-arch/R6",
    "title": "ECS & Game Architecture Patterns",
    "description": "Three.js provides rendering primitives but no built-in game architecture. For anything beyond a demo, you need a patt...",
    "category": "reference",
    "module": "threejs-arch",
    "engine": "Three.js",
    "tier": "pro",
    "sizeBytes": 9375,
    "sections": [
      "Why ECS for Three.js Games",
      "bitECS — High-Performance SoA Architecture",
      "Core Concepts",
      "Systems",
      "Game Loop Integration",
      "Spawning Entities",
      "When to Use bitECS",
      "Limitations",
      "Miniplex — Developer-Friendly Entity Management",
      "Core Concepts",
      "Adding Entities",
      "Systems as Plain Functions",
      "React Three Fiber Integration",
      "When to Use Miniplex",
      "Choosing Between bitECS and Miniplex",
      "Hybrid Approaches",
      "Performance Considerations",
      "Common Pitfalls"
    ]
  },
  {
    "id": "threejs-arch-rules",
    "title": "Three.js Architecture Module Rules",
    "description": "",
    "category": "reference",
    "module": "threejs-arch",
    "engine": "Three.js",
    "tier": "pro",
    "sizeBytes": 2487,
    "sections": [
      "Module Purpose",
      "Document Standards",
      "Coverage Plan",
      "architecture/",
      "guides/",
      "reference/"
    ]
  },
  {
    "id": "threejs-rules",
    "title": "Three.js — AI Code Generation Rules",
    "description": "Engine-specific rules for Three.js r160+ projects using TypeScript. These supplement the engine-agnostic rules in doc...",
    "category": "reference",
    "module": "threejs-arch",
    "engine": "Three.js",
    "tier": "pro",
    "sizeBytes": 7240,
    "sections": [
      "⚠️ WebGLRenderer vs WebGPURenderer — Critical Differences",
      "API Changes That Break Everything",
      "Import Style (ES Modules Only)",
      "Scene Graph Rules",
      "Hierarchy",
      "Object Lifecycle",
      "Camera Rules",
      "Animation & Game Loop",
      "Asset Loading",
      "Physics Integration",
      "Performance Rules",
      "Common Mistakes"
    ]
  },
  {
    "id": "unity-arch/E1",
    "title": "E1 — Unity 6 Architecture Overview",
    "description": "Unity 6 is a general-purpose 2D/3D game engine using C# and .NET. This document explains the core architectural conce...",
    "category": "architecture",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 10844,
    "sections": [
      "Engine Architecture at a Glance",
      "Two Programming Models",
      "1. GameObject / Component (MonoBehaviour)",
      "2. DOTS / ECS (Data-Oriented Technology Stack)",
      "Hybrid: Using Both Together",
      "Core Subsystems",
      "Scene Management",
      "Physics",
      "Rendering",
      "Audio",
      "UI Toolkit",
      "Input System",
      "Lifecycle & Execution Order",
      "Performance Mindset"
    ]
  },
  {
    "id": "unity-arch/E2",
    "title": "E2 — Project Structure & Organization in Unity 6",
    "description": "A well-organized project structure is the difference between a codebase that scales to release and one that collapses...",
    "category": "architecture",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 10723,
    "sections": [
      "Why Structure Matters Early",
      "Recommended Folder Layout",
      "Key Principles",
      "Naming Conventions",
      "Files",
      "Rules",
      "Assembly Definitions",
      "Recommended Assembly Structure",
      "Assembly Definition Setup",
      "Version Control Setup",
      ".gitignore Essentials",
      "Serialization Settings",
      "Smart Merge Tool",
      "Scaling Strategies",
      "Small Project (Solo / Jam)",
      "Medium Project (Small Team, 6–18 months)",
      "Large Project (Studio, 2+ years)",
      "Anti-Patterns to Avoid",
      "Quick-Start Checklist"
    ]
  },
  {
    "id": "unity-arch/G10",
    "title": "G10 — Rendering Pipeline: URP & HDRP",
    "description": "Unity 6 ships two Scriptable Render Pipelines (SRPs): the Universal Render Pipeline (URP) for cross-platform performa...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 13438,
    "sections": [
      "Choosing Between URP and HDRP",
      "URP — The Default Choice for Most Projects",
      "HDRP — Photorealistic Fidelity",
      "Pipeline Comparison",
      "URP Architecture",
      "The Rendering Loop",
      "Key URP Concepts",
      "Creating a Custom Renderer Feature (URP)",
      "Shader Graph Integration",
      "HDRP Architecture",
      "Custom Passes and Volume Overrides",
      "Custom Pass Volume Setup",
      "Render Graph API (Unity 6+)",
      "Why Render Graph Matters",
      "Render Graph Pass Pattern (URP)",
      "Common Pitfalls",
      "1. Switching Pipelines Mid-Project",
      "2. SRP Batcher Compatibility",
      "3. Obsolete APIs in Unity 6",
      "Further Reading"
    ]
  },
  {
    "id": "unity-arch/G11",
    "title": "G11 — Debugging and Profiling",
    "description": "Unity 6 ships a comprehensive profiling toolkit for diagnosing CPU, GPU, and memory performance issues. This guide co...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 14384,
    "sections": [
      "The Profiling Toolkit at a Glance",
      "Unity Profiler",
      "Opening the Profiler",
      "Profiling on Target Devices",
      "Key Profiler Modules",
      "Profiler Markers (Custom Instrumentation)",
      "ProfilerRecorder for In-Game Metrics",
      "Memory Profiler",
      "Workflow: Finding Memory Leaks",
      "Common Memory Issues",
      "Frame Debugger",
      "When to Use Frame Debugger",
      "Profile Analyzer",
      "Workflow: Before/After Optimization",
      "Project Auditor",
      "What It Catches",
      "Performance Debugging Workflow",
      "Common Optimization Patterns",
      "Avoid Per-Frame Allocations",
      "Cache Component References",
      "Object Pooling",
      "Further Reading"
    ]
  },
  {
    "id": "unity-arch/G12",
    "title": "AI & Navigation (NavMesh)",
    "description": "Unity's AI Navigation package (2.0+) provides a high-level pathfinding system built on NavMesh — a simplified mesh re...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 11972,
    "sections": [
      "Core Architecture",
      "Why NavMesh instead of grid-based pathfinding?",
      "Setting Up Navigation",
      "1. Install the Package",
      "2. Add a NavMeshSurface",
      "3. Add a NavMeshAgent",
      "Common Patterns",
      "Patrol Between Waypoints",
      "Dynamic Obstacle Avoidance",
      "NavMeshLink for Jumps / Ladders",
      "Runtime NavMesh Building",
      "Querying the NavMesh Directly",
      "Performance & Debugging",
      "Profiler Markers",
      "Optimization Checklist",
      "Visual Debugging",
      "Integration with Behavior Systems",
      "Version Notes"
    ]
  },
  {
    "id": "unity-arch/G13",
    "title": "G13 — ECS and DOTS in Unity 6",
    "description": "The Data-Oriented Technology Stack (DOTS) is Unity's performance-focused architecture built on three pillars: the Ent...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 20290,
    "sections": [
      "Why DOTS?",
      "The Three Pillars",
      "1. Entity Component System (ECS)",
      "2. C# Job System",
      "3. Burst Compiler",
      "Defining Components",
      "Component Type Summary",
      "Writing Systems",
      "Querying Patterns",
      "Entity Command Buffers (ECB)",
      "Baking: Converting GameObjects to Entities",
      "Managed vs Unmanaged Components",
      "Common Patterns",
      "Enableable Components (Toggling State Without Archetype Changes)",
      "Singleton / Unique Components",
      "Aspect: Grouping Component Access",
      "Migration Strategy: MonoBehaviour → DOTS",
      "When to Use DOTS vs. MonoBehaviour",
      "Performance Tips",
      "Package Dependencies",
      "Quick Reference",
      "Further Reading"
    ]
  },
  {
    "id": "unity-arch/G14",
    "title": "G14 — ScriptableObject Architecture in Unity 6",
    "description": "ScriptableObjects are Unity's most powerful tool for separating data from logic, building modular systems, and elimin...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 17073,
    "sections": [
      "Why ScriptableObjects Matter",
      "Core Concept: ScriptableObjects Are Assets, Not Scene Objects",
      "Pattern 1: Data Containers",
      "Runtime Copies for Mutable State",
      "Pattern 2: Event Channels",
      "Typed Event Channels",
      "Pattern 3: ScriptableObject Variables",
      "Pattern 4: Runtime Sets",
      "Pattern 5: Enum-like Definitions",
      "Unity 6 Improvements for ScriptableObject Workflows",
      "Common Pitfalls",
      "1. Modifying SO assets at runtime (without cloning)",
      "2. Null references on domain reload",
      "3. Circular event chains",
      "4. Forgetting to unregister",
      "5. Over-engineering",
      "When to Use Each Pattern",
      "Recommended Project Structure"
    ]
  },
  {
    "id": "unity-arch/G15",
    "title": "G15 — Shader Graph & VFX Graph",
    "description": "Shader Graph lets you author vertex and fragment shaders visually without writing code, while VFX Graph is a GPU-acce...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 15468,
    "sections": [
      "Part 1 — Shader Graph",
      "What Shader Graph Does",
      "Creating a Shader Graph",
      "The Master Stack",
      "Essential Node Categories",
      "Sub Graphs — Reusable Shader Logic",
      "Custom Function Nodes — Escape Hatch to HLSL",
      "Shader Graph Best Practices",
      "Part 2 — VFX Graph",
      "What VFX Graph Does",
      "VFX Graph Architecture — The Four Contexts",
      "GPU Events — Particle Cascades",
      "Integrating VFX Graph with Shader Graph",
      "VFX Graph Performance Guidelines",
      "Common Patterns for Game Developers",
      "Pattern: Dissolve Effect (Shader Graph)",
      "Pattern: Hit Flash (Shader Graph)",
      "Pattern: Campfire (VFX Graph)",
      "Quick Reference",
      "Further Reading"
    ]
  },
  {
    "id": "unity-arch/G16",
    "title": "G16 — Performance Optimization & Memory Management",
    "description": "Unity 6 manages memory across four domains — Native, Managed (C# heap), GPU, and Untracked (plugins). Understanding w...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 19685,
    "sections": [
      "Memory Architecture Overview",
      "Garbage Collection — Understanding the Cost",
      "Enabling Incremental GC",
      "The Golden Rule: Allocate Less",
      "Object Pooling with ObjectPool\\<T\\>",
      "Collection Pools",
      "Native Containers & Burst Jobs",
      "Asset Memory Optimization",
      "Texture Compression",
      "Shader Variant Stripping",
      "Addressables Memory Pattern",
      "CPU Performance Patterns",
      "Avoid Expensive Per-Frame Operations",
      "Stagger Heavy Work",
      "Profiling on Target Hardware",
      "Quick Profiling Workflow",
      "Memory Profiler Snapshot Workflow",
      "Memory Budget Guidelines",
      "Memory Leak Detection Checklist",
      "Quick Reference: Optimization Priority Order"
    ]
  },
  {
    "id": "unity-arch/G17",
    "title": "Localization System",
    "description": "Ship your game in multiple languages using Unity's official Localization package (com.unity.localization 1.5+). This ...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 11805,
    "sections": [
      "Why Use the Official Package?",
      "Installation",
      "Core Concepts",
      "Locales",
      "String Tables",
      "Asset Tables",
      "Smart Strings",
      "Pluralization Example",
      "Conditional Formatting",
      "C# Scripting API",
      "Subscribing to Localized Strings",
      "Smart String Arguments at Runtime",
      "Runtime Locale Switching",
      "UI Toolkit Integration",
      "Asset Localization (Audio, Textures, Fonts)",
      "Translation Workflow (CSV / XLIFF Export)",
      "Font Management for CJK",
      "Testing in Editor",
      "Common Pitfalls",
      "Checklist: Localization-Ready Project"
    ]
  },
  {
    "id": "unity-arch/G18",
    "title": "G18 — Automated Testing with the Unity Test Framework",
    "description": "The Unity Test Framework (com.unity.test-framework) integrates NUnit into the editor, giving you two complementary te...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 14303,
    "sections": [
      "Why Test Games?",
      "Setup: Assembly Definitions",
      "Step 1 — Install the Package",
      "Step 2 — Create Test Assemblies",
      "Step 3 — Open the Test Runner",
      "Edit Mode Tests",
      "Basic Example",
      "Testing ScriptableObjects",
      "Play Mode Tests",
      "Coroutine-Based Tests (UnityTest)",
      "Async Tests (Task-Based)",
      "Scene-Based Tests",
      "What to Test (and What Not to Test)",
      "High-Value Test Targets",
      "Low-Value Test Targets (Skip These)",
      "Running Tests from the Command Line",
      "GitHub Actions Example",
      "Common Pitfalls",
      "1. Tests Pass in Isolation but Fail Together",
      "2. Play Mode Tests Are Flaky",
      "3. Assembly Reference Errors",
      "4. Tests Don't Appear in Test Runner",
      "Project Structure Recommendation"
    ]
  },
  {
    "id": "unity-arch/G19",
    "title": "G19 — Procedural Content Generation in Unity 6",
    "description": "Procedural Content Generation (PCG) lets you create game worlds, levels, items, and systems from algorithms and rules...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 22663,
    "sections": [
      "When to Use PCG",
      "Noise-Based Terrain Generation",
      "Heightmap Terrain",
      "Dungeon Generation with Binary Space Partitioning",
      "Wave Function Collapse for Tilemap Generation",
      "Runtime Mesh Generation",
      "Performance Considerations",
      "Use Jobs + Burst for Heavy Generation",
      "Async Generation with Coroutines",
      "ScriptableObject Configuration",
      "Choosing an Algorithm"
    ]
  },
  {
    "id": "unity-arch/G1",
    "title": "G1 — Scene Management in Unity 6",
    "description": "Scene management is the backbone of how your game loads, unloads, and transitions between gameplay states. Unity 6 of...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 14575,
    "sections": [
      "Why Scene Management Matters",
      "Core Concepts",
      "Scene Loading Modes",
      "The Additive Bootstrap Pattern",
      "Implementation: SceneManager API",
      "Basic Additive Loading",
      "Editor Auto-Bootstrap",
      "Implementation: Addressables",
      "Loading Scenes via Addressables",
      "When to Use Which",
      "Loading Screens",
      "Multi-Scene Editing in the Editor",
      "Common Pitfalls",
      "Summary: Recommended Architecture"
    ]
  },
  {
    "id": "unity-arch/G20",
    "title": "G20 — Cinemachine & Camera Systems in Unity 6",
    "description": "Cinemachine (com.unity.cinemachine) is Unity's smart camera system — it manages camera position, rotation, lens setti...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 17155,
    "sections": [
      "Why Cinemachine?",
      "Architecture Overview",
      "Key Concepts",
      "Setup: Your First Cinemachine Camera",
      "Step 1 — Install the Package",
      "Step 2 — Create a Virtual Camera",
      "Step 3 — Assign a Target",
      "Step 4 — Choose Procedural Behaviors",
      "Common Camera Rigs",
      "Third-Person Follow Camera",
      "First-Person Camera",
      "2D Side-Scroller Camera",
      "Orbital Follow (Isometric / Top-Down)",
      "Camera Transitions & Blending",
      "Priority-Based Switching",
      "Configuring Blends",
      "Blend Hints",
      "Screen Shake with Impulse",
      "Setup",
      "Timeline Integration",
      "Cinemachine 2.x → 3 Migration",
      "Performance Tips",
      "Common Pitfalls",
      "Further Reading"
    ]
  },
  {
    "id": "unity-arch/G21",
    "title": "G21 — Build Profiles & Cross-Platform Deployment in Unity 6",
    "description": "Unity 6 introduces Build Profiles — a system for managing multiple platform configurations as first-class assets in y...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 15637,
    "sections": [
      "Why Build Profiles?",
      "Architecture Overview",
      "Creating Your First Build Profile",
      "Step 1 — Open the Build Profiles Window",
      "Step 2 — Add a Platform via the Platform Browser",
      "Step 3 — Configure the Profile",
      "Step 4 — Set as Active and Build",
      "Managing Multiple Profiles",
      "Profile Variants",
      "Duplicating Profiles",
      "Cross-Platform Scripting",
      "Scripting Define Symbols",
      "Platform-Specific Code with Unity's Built-In Defines",
      "Managed Packages",
      "Quality Settings & Adaptive Performance",
      "Per-Profile Quality Tiers",
      "Adaptive Performance (Mobile)",
      "CI/CD Integration",
      "Command-Line Builds",
      "Build Script",
      "Unity Build Automation (Cloud)",
      "Platform-Specific Considerations",
      "Desktop (Windows, macOS, Linux)",
      "Mobile (Android, iOS)",
      "Web (WebGL)",
      "Common Pitfalls",
      "Further Reading"
    ]
  },
  {
    "id": "unity-arch/G22",
    "title": "Sentis: On-Device AI/ML Inference",
    "description": "Sentis (package com.unity.ai.inference, formerly com.unity.sentis) is Unity's neural network inference library. It le...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 12373,
    "sections": [
      "Why On-Device Inference Matters for Games",
      "Installation",
      "Core Workflow",
      "Step 1: Import an ONNX Model",
      "Step 2: Create a Worker (Inference Engine)",
      "Step 3: Prepare Input and Execute",
      "Step 4: Read the Output",
      "Async Readback (Recommended for Real-Time Games)",
      "Practical Example: NPC Threat Assessment",
      "Model Warm-Up",
      "Performance Guidelines",
      "Model Size and Complexity",
      "Memory Management Checklist",
      "Choosing Between CPU and GPU",
      "Supported Model Sources",
      "Common Pitfalls",
      "Next Steps"
    ]
  },
  {
    "id": "unity-arch/G23",
    "title": "G23 — Timeline & Cinematic Sequencing in Unity 6",
    "description": "Unity Timeline (com.unity.timeline) is a visual sequencing tool for authoring cutscenes, gameplay sequences, audio co...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 16327,
    "sections": [
      "Why Timeline?",
      "Architecture Overview",
      "Key Separation: Asset vs Instance",
      "The PlayableDirector Component",
      "Update Modes",
      "Built-In Track Types",
      "Animation Track",
      "Audio Track",
      "Activation Track",
      "Signal Track",
      "Control Track",
      "Playable Track",
      "Cinemachine Integration",
      "Custom Tracks and Clips",
      "Production Patterns",
      "Pattern 1: Cutscene-Per-Prefab",
      "Pattern 2: Additive Scene Loading",
      "Pattern 3: Skip Support",
      "Common Pitfalls",
      "Performance Considerations",
      "Quick Reference: When to Use What"
    ]
  },
  {
    "id": "unity-arch/G24",
    "title": "G24 — Mobile Development & Optimization in Unity 6",
    "description": "Mobile remains the largest gaming platform by install base, and Unity 6 is the most mobile-optimized release yet. Thi...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 21007,
    "sections": [
      "Platform Setup",
      "Build Profiles (Unity 6)",
      "Scripting Backend & Architecture",
      "Minimum API Levels",
      "Rendering for Mobile",
      "URP Mobile Configuration",
      "Graphics API Selection",
      "GPU Resident Drawer",
      "Draw Call Optimization",
      "Memory Management",
      "Memory Budgets",
      "Texture Compression",
      "Addressables for Mobile",
      "Object Pooling",
      "Adaptive Performance",
      "Setup",
      "Scalers",
      "Manual Quality Tiers",
      "Touch Input on Mobile",
      "New Input System for Touch",
      "Safe Area Handling",
      "Battery & Thermal Management",
      "Profiling on Device",
      "Publishing Checklist",
      "Android (Google Play)",
      "iOS (App Store)",
      "Common Mobile Pitfalls",
      "Quick Reference"
    ]
  },
  {
    "id": "unity-arch/G25",
    "title": "G25 — 2D Game Development in Unity 6",
    "description": "Unity 6 provides a comprehensive 2D toolchain: Tilemap for grid-based levels, SpriteShape for organic terrain, 2D Phy...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 21155,
    "sections": [
      "Project Setup for 2D",
      "Template Selection",
      "Camera Setup",
      "Pixel Perfect Camera",
      "Tilemap System",
      "Architecture",
      "Tile Types",
      "Tilemap Colliders & Performance",
      "Painting Tilemaps from Code",
      "SpriteShape",
      "When to Use Tilemap vs SpriteShape",
      "Setup",
      "Combining Tilemap + SpriteShape",
      "2D Physics",
      "Core Components",
      "Effectors (Platformer Mechanics)",
      "2D Character Controller",
      "2D Lighting (URP)",
      "Sprite Atlas",
      "2D Animation",
      "Sprite Animation (Frame-by-Frame)",
      "Skeletal Animation (2D Animation Package)",
      "Performance Tips for 2D",
      "Quick Reference"
    ]
  },
  {
    "id": "unity-arch/G26",
    "title": "G26 — Splines & World Building in Unity 6",
    "description": "The Unity Splines package (com.unity.splines v2.8.x) provides a runtime and editor API for creating, editing, and que...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 21735,
    "sections": [
      "Package Overview",
      "Installation",
      "Core Concepts",
      "SplineContainer",
      "BezierKnot",
      "Evaluating Points on a Spline",
      "SplineAnimate — Moving Objects Along Paths",
      "SplineExtrude — Procedural Mesh Generation",
      "Road Generation Example",
      "SplineInstantiate — Object Placement Along Paths",
      "SplineData — Custom Data Per Spline (Unity 6)",
      "Spline Editing in the Scene View",
      "Editor Tools (Unity 6 Enhancements)",
      "Linking Knots",
      "World Building Workflows",
      "Terrain + Splines for Rivers",
      "Procedural Fence/Wall Placement",
      "Camera Fly-Through with Splines + Cinemachine",
      "Performance Considerations",
      "Quick Reference"
    ]
  },
  {
    "id": "unity-arch/G27",
    "title": "G27 — WebGPU & Web Deployment in Unity 6",
    "description": "WebGPU is Unity's next-generation graphics backend for the Web platform, introduced as experimental in Unity 6.1 (600...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 12877,
    "sections": [
      "What WebGPU Unlocks",
      "Browser Support (as of early 2026)",
      "Enabling WebGPU in Your Project",
      "Step 1 — Verify Unity Version",
      "Step 2 — Configure Graphics APIs",
      "Step 3 — Set URP as Render Pipeline",
      "Step 4 — Build a Web Player",
      "Detecting WebGPU at Runtime",
      "Compute Shaders on WebGPU",
      "Compute Shader (ParticleCompute.compute)",
      "C# Dispatcher",
      "Known Limitations (Unity 6.1–6.3)",
      "Optimization Tips for Web Builds",
      "Reduce Build Size",
      "Strip Unused Code",
      "Memory Budget",
      "Texture Compression",
      "Dual-Path Architecture Pattern",
      "Testing WebGPU Builds",
      "Summary"
    ]
  },
  {
    "id": "unity-arch/G28",
    "title": "G28 — XR & VR Development in Unity 6",
    "description": "Unity 6 is the foundation for modern XR development, supporting VR headsets (Meta Quest, PlayStation VR2, Apple Visio...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 16008,
    "sections": [
      "Package Stack Overview",
      "Project Setup",
      "Step 1 — Install Packages",
      "Step 2 — Configure XR Plug-in Management",
      "Step 3 — Add Interaction Profiles",
      "Step 4 — Enable Feature Groups",
      "Step 5 — Render Pipeline",
      "The XR Origin (Camera Rig)",
      "Interaction Model — Interactors & Interactables",
      "Interactors (the hands/controllers)",
      "Interactables (the objects)",
      "Grab Example",
      "Locomotion",
      "Teleportation (Comfort: High)",
      "Continuous Movement (Comfort: Low–Medium)",
      "Comfort Best Practices",
      "Hand Tracking",
      "Hand Tracking + XRI Integration",
      "VR Performance Guidelines",
      "Key Optimizations",
      "Platform-Specific Notes",
      "Meta Quest (3, 3S, Pro)",
      "SteamVR (PC)",
      "Apple Vision Pro (visionOS)",
      "PlayStation VR2",
      "Testing Without a Headset",
      "Summary"
    ]
  },
  {
    "id": "unity-arch/G29",
    "title": "G29 — Unity Gaming Services: Multiplayer (Lobby, Relay, Matchmaker, Vivox)",
    "description": "Unity Gaming Services (UGS) provides managed backend infrastructure for multiplayer games. This guide covers the Mult...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 20875,
    "sections": [
      "Architecture Overview",
      "Why Use UGS Instead of Raw Netcode?",
      "Prerequisites",
      "1. Unity Dashboard Setup",
      "2. Install Packages",
      "3. Initialize Services",
      "Lobby Service",
      "Create a Lobby",
      "Browse and Join Lobbies",
      "Relay Service",
      "Host: Allocate Relay + Start Netcode",
      "Client: Join Relay + Start Netcode",
      "Putting It Together: Lobby + Relay Flow",
      "Vivox Voice & Text Chat",
      "Matchmaker Service (Advanced)",
      "Pricing & Limits (as of 2025)",
      "Error Handling & Resilience",
      "Summary"
    ]
  },
  {
    "id": "unity-arch/G2",
    "title": "G2 — The Input System in Unity 6",
    "description": "The Input System package (com.unity.inputsystem) replaces Unity's legacy UnityEngine.Input API with a data-driven, de...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 23207,
    "sections": [
      "Why the Input System Package?",
      "Architecture Overview",
      "Core Concepts",
      "Input Actions",
      "Action Maps",
      "Bindings",
      "Control Schemes",
      "Action Lifecycle & Phases",
      "Processors",
      "Processor Pipeline Example",
      "Interactions",
      "Implementation Approaches",
      "Approach 1: Direct References (Small Projects)",
      "Approach 2: Generated C# Class (Recommended for Most Projects)",
      "Approach 3: PlayerInput Component (Local Multiplayer / Designer-Friendly)",
      "Action Map Switching (Context Changes)",
      "Runtime Rebinding",
      "Debugging Input",
      "Common Pitfalls",
      "Quick Reference: Which Approach to Use"
    ]
  },
  {
    "id": "unity-arch/G30",
    "title": "G30 — Async Programming with Awaitable",
    "description": "Unity 6 introduces the Awaitable class — a pooled, allocation-friendly async return type purpose-built for game devel...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 11563,
    "sections": [
      "Why Awaitable Exists",
      "Core API Reference (Unity 6000.3+)",
      "Frame-Timing Methods",
      "Thread-Switching Methods",
      "AwaitableCompletionSource",
      "Cancellation Patterns",
      "destroyCancellationToken (MonoBehaviour)",
      "Application.exitCancellationToken",
      "Combining Tokens",
      "Coroutine → Awaitable Migration",
      "Before (Coroutine)",
      "After (Awaitable)",
      "Quick Reference",
      "Threading Best Practices",
      "Do: Offload CPU-Heavy Work",
      "Don't: Call Unity APIs from Background Threads",
      "Thread-Switch Latency",
      "Awaitable vs UniTask",
      "Common Pitfalls",
      "1. Awaiting Twice",
      "2. Fire-and-Forget Without Cancellation",
      "3. async void vs async Awaitable",
      "Performance Notes",
      "Further Reading"
    ]
  },
  {
    "id": "unity-arch/G31",
    "title": "G31 — Behavior Trees with Unity Behavior",
    "description": "Unity Behavior (package com.unity.behavior, v1.0.15+) is Unity's official graph-based behavior tree system. It provid...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 13595,
    "sections": [
      "When to Use Behavior Trees",
      "Installation",
      "Architecture Overview",
      "Node Types",
      "Action Nodes (Leaves)",
      "Sequencing Nodes (Composites)",
      "Modifier Nodes (Decorators)",
      "Join Nodes",
      "Conditional Nodes",
      "Blackboard Variables",
      "Creating Variables",
      "Variable Options",
      "Implicit Type Casting",
      "Runtime Access from C#",
      "Creating Custom Nodes",
      "Via the Graph Editor (Recommended)",
      "Manual C# Custom Action",
      "Custom Modifier Example",
      "Runtime Integration",
      "Setting Up in the Scene",
      "Controlling the Graph from Code",
      "Subgraphs for Reuse",
      "Debugging",
      "Real-Time Visualization",
      "Common Issues",
      "Best Practices",
      "Example: Patrol + Chase NPC",
      "Further Reading"
    ]
  },
  {
    "id": "unity-arch/G32",
    "title": "G32 — Editor Scripting & Custom Tools",
    "description": "Custom editor tools accelerate development by exposing game-specific workflows directly in the Unity Editor. This gui...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 17271,
    "sections": [
      "UI Toolkit vs IMGUI",
      "Custom EditorWindow",
      "Basic Structure (UI Toolkit)",
      "Hot Reload Support",
      "Custom Inspector",
      "UI Toolkit Inspector",
      "Key Principle: Always Use SerializedProperty",
      "PropertyDrawer",
      "Example: A Clamped Range Attribute",
      "Scene View Tools & Gizmos",
      "Custom Gizmos",
      "Handles (Interactive Scene Tools)",
      "Menu Items & Shortcuts",
      "Context Menu Items",
      "Shortcut Key Reference",
      "ScriptableObject-Based Tool Data",
      "Project Organization",
      "Best Practices",
      "Further Reading"
    ]
  },
  {
    "id": "unity-arch/G33",
    "title": "G33 — Object Pooling & Spawn Management in Unity 6",
    "description": "Object pooling is a critical optimization pattern for games that frequently create and destroy objects — bullets, par...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 18173,
    "sections": [
      "Why Pool?",
      "The UnityEngine.Pool API",
      "Basic Usage: ObjectPool\\<T\\>",
      "Pooling GameObjects (Bullets)",
      "The Bullet Returns Itself",
      "Collection Pools: Zero-Alloc Temporary Lists",
      "LinkedPool vs ObjectPool",
      "Pre-warming Pools",
      "Pooling with Addressables",
      "Spawn Manager Pattern",
      "Common Pitfalls",
      "Performance Checklist",
      "Further Reading"
    ]
  },
  {
    "id": "unity-arch/G34",
    "title": "G34 — Dependency Injection & Architecture Patterns in Unity 6",
    "description": "As Unity projects grow, managing dependencies between systems becomes the dominant source of complexity. Hard-coded G...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 19291,
    "sections": [
      "The Problem: Dependency Spaghetti",
      "Level 0: Constructor / Method Injection (No Framework)",
      "Level 1: Service Locator Pattern",
      "Bootstrap Registration",
      "Trade-offs",
      "Level 2: VContainer (Recommended DI Framework)",
      "Installation",
      "Core Concepts",
      "Basic Setup",
      "Entry Points: Pure C# Game Logic",
      "Scene-Scoped Dependencies",
      "Injecting into MonoBehaviours",
      "Architecture Patterns for Unity",
      "Event Bus (Decoupled Communication)",
      "Model-View-Presenter (MVP)",
      "When to Use What",
      "Common Pitfalls",
      "Further Reading"
    ]
  },
  {
    "id": "unity-arch/G35",
    "title": "G35 — Terrain & Large World Environments in Unity 6",
    "description": "Unity's terrain system combines a height-map-based landscape editor with detail object scattering, tree placement, an...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 19649,
    "sections": [
      "Terrain System Overview",
      "Setting Up Terrain",
      "Creating a Terrain",
      "Terrain Layers (Textures)",
      "Terrain Tools Package",
      "Detail Objects (Grass and Small Props)",
      "Detail Types",
      "Detail Performance Settings",
      "Tree Placement and SpeedTree 9",
      "SpeedTree 9 Integration (Unity 6)",
      "Tree Performance Tips",
      "GPU Resident Drawer",
      "Enabling GPU Resident Drawer",
      "How It Works",
      "Requirements and Limitations",
      "Combining with Terrain",
      "Large World Strategies",
      "Terrain Tiling",
      "Additive Scene Streaming",
      "Procedural Terrain Generation",
      "Performance Checklist",
      "Further Reading"
    ]
  },
  {
    "id": "unity-arch/G36",
    "title": "G36 — LiveOps: Remote Config, Cloud Save & Cloud Code",
    "description": "Unity Gaming Services (UGS) includes a suite of LiveOps services that let you tune, persist, and extend your game wit...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 20650,
    "sections": [
      "Architecture Overview",
      "When to Use LiveOps Services",
      "Prerequisites",
      "1. Install Packages",
      "2. Dashboard Setup",
      "3. Shared Initialization (Unity 6+)",
      "Remote Config",
      "Core Concepts",
      "Fetching Config Values",
      "Best Practices",
      "Cloud Save",
      "Data Types",
      "Saving and Loading Player Data",
      "Saving Complex Objects",
      "Best Practices",
      "Cloud Code",
      "When to Use Cloud Code",
      "Calling a Cloud Code Module from the Client",
      "Server-Side C# Module Example (deployed to UGS)",
      "Combining Services: A LiveOps Pattern",
      "Error Handling Patterns",
      "Quick Reference",
      "See Also"
    ]
  },
  {
    "id": "unity-arch/G37",
    "title": "G37 — Event-Driven Architecture & Messaging Patterns",
    "description": "Games are reactive systems — a coin is collected, a door opens, a boss dies, the UI updates. Wiring these interaction...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 15451,
    "sections": [
      "Pattern Comparison",
      "Pattern 1: C# Events and Delegates",
      "When to Use",
      "Gotchas",
      "Pattern 2: UnityEvents (Inspector-Wired)",
      "When to Use",
      "When NOT to Use",
      "Pattern 3: ScriptableObject Event Channels (Recommended)",
      "The Channel Asset",
      "Generic Channel for Data",
      "Broadcaster (Raises the Event)",
      "Listener (Responds to the Event)",
      "Designer-Friendly Listener (with UnityEvent)",
      "Why This Pattern Wins",
      "Pattern 4: Static Event Bus (Global Events)",
      "Caution",
      "Choosing the Right Pattern",
      "Performance Considerations",
      "Common Mistakes",
      "See Also"
    ]
  },
  {
    "id": "unity-arch/G38",
    "title": "G38 — State Machine Patterns for Gameplay Logic",
    "description": "State machines are the most battle-tested pattern in game development. A player is idle, running, jumping, or attacki...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 21097,
    "sections": [
      "Pattern Comparison",
      "Pattern 1: Enum + Switch (Quick and Simple)",
      "When to Outgrow Enum-Switch",
      "Pattern 2: Class-Based FSM (Scalable, Code-First)",
      "The Framework",
      "Using the Framework: Player Controller",
      "Benefits",
      "Pattern 3: ScriptableObject States (Designer-Modular)",
      "Why Designers Love This",
      "Pattern 4: Animator as a State Machine",
      "Animator FSM Tips",
      "Hierarchical State Machines (HFSM)",
      "Choosing the Right Pattern",
      "Common Mistakes",
      "See Also"
    ]
  },
  {
    "id": "unity-arch/G39",
    "title": "G39 — Render Graph: Custom Render Passes",
    "description": "The Render Graph is Unity 6's framework for extending URP (and HDRP) with custom rendering logic. It replaces the old...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 15999,
    "sections": [
      "Why Render Graph Exists",
      "Core Concepts",
      "The Two Phases",
      "Resource Handles",
      "Frame Data",
      "Raster Render Passes",
      "Anatomy of a Custom Raster Pass",
      "Key Builder Methods (Raster)",
      "Compute Render Passes",
      "Full Compute Pass Example",
      "Matching HLSL Compute Shader",
      "Resource Management Patterns",
      "Creating Temporary Textures",
      "Importing External Textures",
      "Reading Back Compute Results to CPU",
      "Subpass Merging (Mobile Optimization)",
      "Debugging",
      "Frame Debugger",
      "Render Graph Viewer",
      "Common Pitfalls",
      "Migration from Legacy ScriptableRenderPass",
      "Version Notes"
    ]
  },
  {
    "id": "unity-arch/G3",
    "title": "G3 — Physics & Collision in Unity 6",
    "description": "Unity ships two completely separate physics engines: 3D Physics (NVIDIA PhysX 5) and 2D Physics (Box2D). They share c...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 16955,
    "sections": [
      "3D vs 2D: Which to Use",
      "Rigidbody Fundamentals",
      "Body Types",
      "Critical Rule: Don't Mix Transform and Rigidbody Movement",
      "Colliders",
      "Collider Selection Guide (3D)",
      "Compound Colliders",
      "Collision Layers and the Layer Matrix",
      "Raycasting and Physics Queries",
      "Common Query Types",
      "Performance: NonAlloc Variants",
      "2D Raycasting",
      "Joints",
      "Physics Materials",
      "Collision Detection Modes",
      "Common Pitfalls",
      "1. Collision Callbacks Not Firing",
      "2. Moving Objects via Transform",
      "3. Mixing 2D and 3D Physics",
      "4. Expensive Mesh Colliders on Moving Objects",
      "5. Too Many Physics Queries Per Frame",
      "Performance Checklist",
      "Further Reading"
    ]
  },
  {
    "id": "unity-arch/G40",
    "title": "G40 — GPU-Driven Rendering & Upscaling",
    "description": "Unity 6 introduced a suite of GPU-driven rendering features that shift work from the CPU to the GPU, dramatically red...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 10418,
    "sections": [
      "GPU Resident Drawer",
      "What It Does",
      "What It Supports",
      "Setup (URP)",
      "Verifying It Works",
      "HDRP Setup",
      "GPU Occlusion Culling",
      "How It Works",
      "Enabling GPU Occlusion Culling",
      "When It Helps Most",
      "Spatial-Temporal Post-Processing (STP)",
      "Why Use STP",
      "Enabling STP",
      "STP vs Other Upscalers",
      "Limitations",
      "Camera History API",
      "Accessing History Textures",
      "Use Cases",
      "Adaptive Probe Volumes (APV) — Unity 6 Improvements",
      "Lighting Scenario Blending",
      "Sky Occlusion",
      "Disk Streaming",
      "Mobile Optimization",
      "Performance Decision Tree",
      "Version Notes"
    ]
  },
  {
    "id": "unity-arch/G41",
    "title": "G41 — Accessibility: Screen Readers & Inclusive Design",
    "description": "Unity 6 includes a native accessibility API that integrates with platform screen readers — TalkBack on Android, Voice...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 13709,
    "sections": [
      "Why Accessibility Matters for Games",
      "Platform Support",
      "Core API: The Accessibility Hierarchy",
      "Mental Model",
      "Building the Hierarchy",
      "Key API Reference",
      "Navigation Order",
      "Updating the Hierarchy at Runtime",
      "Accessibility Settings API",
      "Debugging with the Hierarchy Viewer",
      "Beyond Screen Readers: Inclusive Game Design",
      "Visual",
      "Motor",
      "Auditory",
      "Cognitive",
      "Testing Checklist",
      "Version Notes"
    ]
  },
  {
    "id": "unity-arch/G42",
    "title": "G42 — Burst Compiler & C# Jobs System Deep Dive",
    "description": "The Burst Compiler and C# Job System are the performance foundation of Unity's Data-Oriented Technology Stack (DOTS)....",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 18741,
    "sections": [
      "How Burst Works",
      "Burst Entry Points",
      "1. Jobs (The Classic Path)",
      "2. Direct Call — Burst Without Jobs (Burst 1.8+)",
      "3. Function Pointers — Dynamic Dispatch with Burst",
      "Job Types Reference",
      "Scheduling and Completing Jobs",
      "Job Dependencies — Chaining Without Blocking",
      "Native Collections Reference",
      "Allocator Lifetimes",
      "BurstCompile Configuration",
      "Float Precision and Mode",
      "Disable Safety Checks (Release Only)",
      "Burst Restrictions — What You Can't Do",
      "Fixed-Size Strings in Burst",
      "SIMD Intrinsics — Manual Vectorization",
      "Profiling and Debugging Burst Code",
      "Burst Inspector",
      "Profiler Markers",
      "Common Performance Pitfalls",
      "Best Practices Checklist",
      "Version Notes",
      "Further Reading"
    ]
  },
  {
    "id": "unity-arch/G43",
    "title": "G43 — Compute Shaders & GPU Programming",
    "description": "Compute shaders run arbitrary code on the GPU outside the rendering pipeline. They are the tool of choice when you ne...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 17975,
    "sections": [
      "When to Use Compute Shaders",
      "Compute Shader Anatomy (HLSL)",
      "Key HLSL Concepts",
      "C# Dispatch Pattern",
      "Using GraphicsBuffer (Unity 6 Recommended)",
      "Async GPU Readback — Getting Data Back to CPU",
      "Render Graph Integration (Unity 6.1+ URP)",
      "Shared Memory (groupshared)",
      "Textures in Compute Shaders",
      "Performance Optimization",
      "Thread Group Sizing",
      "Common Pitfalls",
      "Memory Bandwidth Rules",
      "Platform Support",
      "Cross-Platform Pragma",
      "Further Reading"
    ]
  },
  {
    "id": "unity-arch/G44",
    "title": "G44 — Unity 6 Migration & New Features Guide",
    "description": "Unity 6 (internal version 6000.x) launched October 2024 as the successor to Unity 2022 LTS. It consolidates features ...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 15203,
    "sections": [
      "Versioning Changes",
      "Major New Features",
      "1. GPU Resident Drawer",
      "2. Build Profiles System",
      "3. Multiplayer Center & Netcode 2.0",
      "4. Rendering Improvements",
      "5. UI Toolkit Improvements",
      "6. Audio Random Container",
      "7. Awaitable API Enhancements",
      "Breaking API Changes",
      "Object Discovery (Must Fix)",
      "Graphics Format Changes",
      "Enlighten Removal",
      "Render Pipeline API Changes",
      "Android Breaking Changes",
      "Environment Lighting",
      "Platform Updates",
      "Web Platform (WebAssembly)",
      "visionOS (Apple Vision Pro)",
      "iOS",
      "Migration Checklist",
      "Before Upgrading",
      "During Upgrade",
      "After Upgrade",
      "Feature Adoption Priority",
      "Version Timeline",
      "Further Reading"
    ]
  },
  {
    "id": "unity-arch/G45",
    "title": "G45 — Source Generators & Compile-Time Code Generation",
    "description": "C# Source Generators run at compile time inside Roslyn and emit new .cs files that become part of your assembly — no ...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 14040,
    "sections": [
      "Why Source Generators Matter for Game Dev",
      "How Unity Integrates Source Generators",
      "Built-in Generators in Unity 6",
      "Consuming a Third-Party Source Generator",
      "Step 1: Build or Obtain the DLL",
      "Step 2: Import into Unity",
      "Step 3: Verify",
      "Authoring a Custom Source Generator",
      "Project Setup",
      "Example: Auto-Generate GetComponent Caching",
      "Debugging Source Generators",
      "Attaching a Debugger",
      "Practical Use Cases for Game Development",
      "1. Singleton Registration",
      "2. Event Bus Wiring",
      "3. Save System Serialization",
      "4. Inspector Validation",
      "5. Netcode Ghost Components",
      "Best Practices",
      "Limitations",
      "Further Reading"
    ]
  },
  {
    "id": "unity-arch/G46",
    "title": "G46 — Unity AI Editor Tools (Unity AI / Muse Successor)",
    "description": "Unity AI is the editor-integrated AI toolset introduced in Unity 6.2 (August 2025), replacing the separate Unity Muse...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 12481,
    "sections": [
      "Overview: Three Pillars",
      "Pricing & Access",
      "Pillar 1: Assistant (AI Chat)",
      "Capabilities",
      "Using the Assistant Effectively",
      "Agentic Capabilities (Unity 6.3+)",
      "Pillar 2: Generators (Asset Creation)",
      "Supported Asset Types (as of Unity 6.3)",
      "Best Practices for Generation Prompts",
      "Copyright & Licensing Considerations",
      "Pillar 3: Inference Engine (Runtime ML)",
      "What Changed from Sentis to Inference Engine",
      "Integration with External AI Tools",
      "Practical Workflow: Prototyping with Unity AI",
      "Limitations & Gotchas",
      "Further Reading"
    ]
  },
  {
    "id": "unity-arch/G47",
    "title": "G47 — DirectStorage & High-Performance Asset Loading",
    "description": "Microsoft DirectStorage is a Windows API that bypasses the traditional OS I/O stack, allowing assets to stream direct...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 12786,
    "sections": [
      "How DirectStorage Works",
      "Key Benefits",
      "Requirements",
      "Hardware",
      "Software",
      "Enabling DirectStorage",
      "Step 1: Enable in Player Settings",
      "Step 2: Ensure DirectX 12 is Active",
      "Step 3: Verify at Runtime",
      "What Gets Accelerated",
      "Automatically Accelerated",
      "NOT Accelerated (as of 6.4 beta)",
      "Working with AsyncReadManager",
      "Optimizing Your Project for DirectStorage",
      "1. Use Addressables, Not Resources",
      "2. Enable Texture Streaming",
      "3. Batch Asset Loads",
      "4. Keep Assets Contiguous on Disk",
      "5. Profile with the Profiler",
      "Fallback Behavior",
      "Known Limitations (Unity 6.4 Beta)",
      "Migration Checklist",
      "Further Reading"
    ]
  },
  {
    "id": "unity-arch/G48",
    "title": "G48 — Unity Gaming Services: Economy, Leaderboards & Analytics",
    "description": "Unity Gaming Services (UGS) provides managed backend services for live games. This guide covers three complementary s...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 24902,
    "sections": [
      "Architecture Overview",
      "When to Use Each Service",
      "Prerequisites",
      "Economy",
      "Core Concepts",
      "Configuration (Dashboard)",
      "Reading Player Balances",
      "Modifying Balances",
      "Player Inventory",
      "Virtual Purchases (Server-Validated)",
      "Real Money Purchases (IAP Integration)",
      "Listening for Balance Changes",
      "Leaderboards",
      "Core Concepts",
      "Submitting Scores",
      "Submitting Scores with Metadata",
      "Querying Top Scores",
      "Getting Scores Around the Current Player",
      "Getting the Current Player's Score",
      "Leaderboard Versioning (Seasonal Resets)",
      "Analytics",
      "Core Concepts",
      "Recording Custom Events",
      "Creating Reusable Event Classes",
      "Consent & GDPR",
      "Flushing Events Manually",
      "Combining Services: Practical Example",
      "Error Handling Best Practices",
      "Production Checklist",
      "Breadcrumbs"
    ]
  },
  {
    "id": "unity-arch/G49",
    "title": "G49 — Adaptive Probe Volumes & Global Illumination",
    "description": "Adaptive Probe Volumes (APV) is Unity 6's replacement for the legacy Light Probe Group workflow. APV automatically pl...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 15319,
    "sections": [
      "Why APV Replaces Legacy Light Probes",
      "Architecture Overview",
      "Key Terminology",
      "Setup (URP)",
      "Step 1: Enable APV in the Render Pipeline Asset",
      "Step 2: Add an Adaptive Probe Volume to the Scene",
      "Step 3: Configure Light Sources",
      "Step 4: Mark Static Geometry",
      "Step 5: Bake",
      "Setup (HDRP)",
      "Lighting Scenarios (Day/Night Blending)",
      "Baking Multiple Scenarios",
      "Runtime Scenario Blending",
      "Streaming for Large Worlds",
      "Disk Streaming (Unity 6.1+)",
      "Debug Visualization",
      "Performance Tuning",
      "Memory Budget",
      "Common Performance Pitfalls",
      "APV vs. Legacy Light Probes: Migration",
      "Production Checklist",
      "Breadcrumbs"
    ]
  },
  {
    "id": "unity-arch/G4",
    "title": "G4 — Audio System in Unity 6",
    "description": "Unity's audio system is built on three pillars: AudioSource (plays sound), AudioListener (receives sound), and AudioM...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 17717,
    "sections": [
      "Core Architecture",
      "AudioSource and AudioListener",
      "Basic Setup",
      "One-Shot Audio Without a Persistent Source",
      "Spatial Audio (3D Sound)",
      "Rolloff Modes",
      "Spatial Audio for 2D Games",
      "AudioMixer",
      "Setting Up a Mixer Hierarchy",
      "Exposed Parameters (Volume Sliders)",
      "Snapshots",
      "Ducking with Send Effects",
      "Audio Clip Import Settings",
      "Common Patterns",
      "Background Music with Crossfade",
      "Ambient Sound Zones",
      "Performance Checklist",
      "Further Reading"
    ]
  },
  {
    "id": "unity-arch/G50",
    "title": "G50 — Platform Toolkit: Cross-Platform Achievements, Saves & Accounts",
    "description": "Platform Toolkit is Unity's official cross-platform abstraction layer, introduced in Unity 6.3 (December 2025). It pr...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 21913,
    "sections": [
      "Why Platform Toolkit?",
      "Supported Platforms (Unity 6.3+)",
      "Architecture Overview",
      "Key Design Principles",
      "Installation",
      "Accounts",
      "Capability Check Pattern",
      "Getting an Account",
      "Multi-User Support (Local Multiplayer)",
      "Achievements",
      "Configuration (Achievement Editor)",
      "Unlocking Achievements",
      "Retry Pattern for Network Failures",
      "Save Data",
      "DataStore API (Simple Key-Value Saves)",
      "File-Based API (Complex Saves)",
      "Deleting Saves",
      "Platform-Specific Considerations",
      "Steam",
      "Consoles (PlayStation, Xbox, Nintendo Switch)",
      "Platform Toolkit vs. UGS Cloud Save",
      "Complete Example: Game Bootstrap",
      "Production Checklist",
      "Breadcrumbs"
    ]
  },
  {
    "id": "unity-arch/G51",
    "title": "G51 — CoreCLR & .NET Modernization: Preparing for Unity 6.7–6.8",
    "description": "Unity is replacing its Mono scripting runtime with Microsoft CoreCLR over the course of 2026. Unity 6.7 ships an expe...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 13506,
    "sections": [
      "Timeline",
      "What CoreCLR Changes",
      "1. Runtime Performance",
      "2. Build System: Mono → MSBuild",
      "3. Serialization Changes",
      "4. Domain Reload Elimination",
      "Preparation Checklist — Start Today (Unity 6.4+)",
      "Step 1: Enable \"Enter Play Mode Settings\" Without Domain Reload",
      "Step 2: Eliminate BinaryFormatter Usage",
      "Step 3: Audit Reflection-Heavy Code",
      "Step 4: Update Source Generators",
      "Step 5: Replace Obsolete APIs",
      "Step 6: Test With IL2CPP Regularly",
      "Modern C# Features Available Under CoreCLR",
      "Plugin & Asset Store Compatibility",
      "FAQ",
      "Further Reading"
    ]
  },
  {
    "id": "unity-arch/G52",
    "title": "G52 — ECS Core Integration (Unity 6.4+)",
    "description": "Starting with Unity 6.4 (March 2026), the Entity Component System packages — Entities, Collections, Mathematics, and ...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 13168,
    "sections": [
      "What Changed in 6.4",
      "Core Package Promotion",
      "EntityId Replaces InstanceID",
      "URP Compatibility Mode Removal",
      "The Unification Roadmap: GameObjects + Entities",
      "What Unified Transforms Mean",
      "Incremental Adoption Strategy",
      "New ECS Patterns in 6.4",
      "Using Project Auditor for ECS",
      "Runtime Sprite Atlases (2D + ECS)",
      "Improved Animation Entry Transitions",
      "Querying Entities: Modern Patterns",
      "Basic Query with Multiple Components",
      "Shared Component Filtering",
      "Enableable Components (Zero-Cost Toggling)",
      "Migration from Entities 1.3 → 1.4 (Core)",
      "Performance Rules for ECS in 6.4",
      "Further Reading"
    ]
  },
  {
    "id": "unity-arch/G53",
    "title": "G53 — Deferred+ Rendering & Variable Rate Shading (VRS)",
    "description": "Unity 6.1 introduces two major rendering features in URP: Deferred+, a cluster-based deferred rendering path that han...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 16946,
    "sections": [
      "Deferred+ Rendering Path",
      "What Problem Does It Solve?",
      "When to Use Deferred+",
      "Setup",
      "G-Buffer Layout",
      "Custom Shaders for Deferred+",
      "Performance Tips",
      "Variable Rate Shading (VRS)",
      "What Is VRS?",
      "Platform Support (Unity 6.1+)",
      "Key API: `ShadingRateInfo`",
      "Implementing a VRS Renderer Feature",
      "Shading Rate Image Generation (Render Graph)",
      "VRS Strategies for Games",
      "Performance Expectations",
      "Profiling VRS",
      "Combining Deferred+ and VRS",
      "Troubleshooting",
      "Version History"
    ]
  },
  {
    "id": "unity-arch/G54",
    "title": "G54 — Build Automation & CI/CD DevOps",
    "description": "Shipping a game means building it reliably and repeatedly. This guide covers Unity's build automation ecosystem: Unit...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 15420,
    "sections": [
      "Architecture Overview",
      "Decision: Cloud vs. Self-Hosted",
      "Unity Build Profiles (Unity 6+)",
      "Creating a Build Profile",
      "Profile Organization",
      "Unity Build Automation (Cloud)",
      "Quick Start",
      "Build Manifest (Runtime)",
      "Pre/Post-Build Scripts",
      "Self-Hosted CI with Build Server",
      "GitHub Actions Example",
      "GitLab CI Example",
      "Running Tests in CI",
      "Build Optimization for CI",
      "Cache Strategy",
      "Build Time Reduction Checklist",
      "Build Automation REST API",
      "Troubleshooting",
      "Version History"
    ]
  },
  {
    "id": "unity-arch/G55",
    "title": "G55 — Foldable & Large Screen Adaptive Layout",
    "description": "Unity 6.1 adds first-class support for foldable Android devices and large-format screens (tablets, Chromebooks, deskt...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 17836,
    "sections": [
      "Why This Matters",
      "Platform Requirements",
      "Resizable Activity",
      "Minimum API Level",
      "Core API: Configuration Change Detection",
      "Key `AndroidConfiguration` Properties",
      "Safe Area Handling",
      "Screen.safeArea API",
      "Safe Area with UI Toolkit",
      "Screen.cutouts (Advanced)",
      "Multi-Window Mode",
      "Handling Window Resize",
      "Pausing in Background",
      "Adaptive Layout Strategies",
      "Strategy 1: Breakpoint-Based (Recommended)",
      "Strategy 2: Camera Adaptation",
      "Testing Foldable Layouts",
      "Unity Editor: Device Simulator",
      "Android Emulator",
      "Physical Device Checklist",
      "Troubleshooting",
      "Version History"
    ]
  },
  {
    "id": "unity-arch/G56",
    "title": "G56 — Procedural Mesh Generation",
    "description": "Procedural mesh generation creates geometry at runtime via code rather than importing pre-made models. This is essent...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 19714,
    "sections": [
      "When to Use Procedural Meshes",
      "Architecture Decision: Three Mesh Authoring Paths",
      "Path 1: Simple Mesh API (Prototyping / Small Meshes)",
      "Path 2: Advanced Mesh API with NativeArrays (No GC, Main Thread)",
      "Path 3: MeshDataArray + Jobs + Burst (Multi-threaded, Zero GC)",
      "MeshUpdateFlags — Controlling Recalculation",
      "Vertex Format Optimization",
      "Multi-Stream Vertex Buffers",
      "Read-Only Mesh Access with Jobs",
      "Physics Mesh Synchronization",
      "Common Pitfalls",
      "Performance Guidelines"
    ]
  },
  {
    "id": "unity-arch/G57",
    "title": "G57 — Animation Rigging & Procedural Animation",
    "description": "The Animation Rigging package (com.unity.animation.rigging 1.x) layers runtime procedural constraints on top of baked...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 15139,
    "sections": [
      "Why Animation Rigging?",
      "Architecture: Rig Builder & Constraint Pipeline",
      "Setup Steps",
      "Component Hierarchy in the Inspector",
      "Built-in Constraint Types",
      "Pattern: Foot IK on Uneven Terrain",
      "Pattern: Aim Constraint for Weapons",
      "Pattern: Procedural Secondary Motion",
      "Custom Constraints",
      "Performance Considerations",
      "LOD Strategy for Rigs",
      "Unity 6 Compatibility Notes",
      "Common Pitfalls"
    ]
  },
  {
    "id": "unity-arch/G58",
    "title": "G58 — 2D Physics: Box2D v3 & Low-Level API",
    "description": "Unity 6.3 integrates Box2D v3 (by Erin Catto) as the foundation for 2D physics, replacing the Box2D 2.x backend used ...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 15190,
    "sections": [
      "What Changed from Box2D 2.x to v3",
      "What This Means for Your Game",
      "High-Level API (Existing Components — Still Recommended)",
      "New High-Level Features in 6.3",
      "Low-Level 2D Physics API",
      "PhysicsWorld: The Core Object",
      "Deterministic Simulation",
      "Visual Debugging (Runtime)",
      "Multi-Threading Details",
      "What This Means in Practice",
      "Migration from Unity ≤ 6.2",
      "Automatic (No Action Required)",
      "Behavioral Changes to Watch For",
      "Testing Checklist",
      "Common Patterns",
      "One-Way Platforms (Platform Effector 2D)",
      "Physics-Based Rope (Distance Joints)",
      "Performance Guidelines",
      "Profiling 2D Physics",
      "Common Pitfalls"
    ]
  },
  {
    "id": "unity-arch/G59",
    "title": "G59 — Visual Scripting in Unity 6",
    "description": "Unity Visual Scripting (package com.unity.visualscripting v1.9.x) provides a node-based programming environment where...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 17668,
    "sections": [
      "When to Use Visual Scripting",
      "Core Concepts",
      "Script Graphs",
      "State Graphs",
      "Variable Scopes",
      "Custom Events (C# ↔ Visual Scripting Bridge)",
      "Triggering Visual Scripting from C#",
      "Accessing Visual Scripting Variables from C#",
      "Triggering C# from Visual Scripting",
      "Creating Custom Nodes",
      "Super Units (Reusable Subgraphs)",
      "Performance Considerations",
      "Project Organization",
      "Type Options Configuration",
      "Debugging Visual Scripts",
      "Migration: Visual Scripting to C#",
      "Key Takeaways"
    ]
  },
  {
    "id": "unity-arch/G5",
    "title": "G5 — UI Toolkit for Runtime Game UI",
    "description": "UI Toolkit is Unity 6's recommended system for building runtime game interfaces — HUDs, menus, inventories, and dialo...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 17058,
    "sections": [
      "Why UI Toolkit Over uGUI?",
      "Setup: UIDocument + PanelSettings",
      "PanelSettings Configuration",
      "UXML: Structuring Your Layout",
      "Key Elements",
      "USS: Styling Your UI",
      "USS Selector Reference",
      "C#: Querying and Controlling UI",
      "Querying Elements",
      "Event Handling",
      "Data Binding (Unity 6)",
      "Binding Modes",
      "Setting Up Bindings in C#",
      "Efficient Change Notification",
      "ListView: Virtualized Lists for Inventories & Logs",
      "Creating UI Dynamically from Code",
      "Performance Best Practices",
      "Common Patterns",
      "Screen Manager (Show/Hide Panels)",
      "Responsive Layout"
    ]
  },
  {
    "id": "unity-arch/G60",
    "title": "G60 — Custom Package Development (UPM)",
    "description": "Unity Package Manager (UPM) lets you create reusable, versioned modules that install cleanly alongside other packages...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 18222,
    "sections": [
      "When to Create a Package",
      "Package Layout",
      "Package Manifest (package.json)",
      "Manifest Field Reference",
      "Assembly Definitions (.asmdef)",
      "Runtime Assembly",
      "Editor Assembly",
      "Version Defines for Optional Dependencies",
      "Developing Locally",
      "Embedding a Package for Development",
      "Writing Package Code",
      "Public API Design",
      "Static State and Domain Reload",
      "Testing Your Package",
      "Publishing",
      "Option 1: Git Repository (Private Teams)",
      "Option 2: OpenUPM (Open Source)",
      "Option 3: Private npm Registry (Enterprise)",
      "Package Signing (Unity 6.3+)",
      "Versioning Strategy",
      "[1.3.0] - 2026-04-01",
      "Added",
      "Fixed",
      "Common Pitfalls",
      "Key Takeaways"
    ]
  },
  {
    "id": "unity-arch/G61",
    "title": "G61 — Graph Toolkit: Custom Node-Based Editor Tools",
    "description": "Unity Graph Toolkit (com.unity.graphtoolkit, experimental in 6.2, module in 6.4+) is a framework for building custom ...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 22221,
    "sections": [
      "When to Use Graph Toolkit",
      "Graph Toolkit vs. Legacy GraphView",
      "Architecture Overview",
      "Getting Started: A Minimal Custom Graph",
      "Step 1: Assembly Definition",
      "Step 2: Define the Graph Asset",
      "Step 3: Define Custom Nodes",
      "Step 4: Runtime Interpretation (Your Responsibility)",
      "Built-In Features You Get for Free",
      "Blackboard (Graph Variables)",
      "Inspector Panel",
      "Minimap",
      "Search / Fuzzy Finder",
      "Subgraphs",
      "Undo/Redo",
      "Copy/Paste",
      "Missing Node Recovery",
      "Export Pipeline: Editor → Runtime",
      "Performance and Scalability",
      "Common Pitfalls",
      "Version History",
      "Key Takeaways"
    ]
  },
  {
    "id": "unity-arch/G62",
    "title": "G62 — Serialization Deep Dive",
    "description": "Unity's serialization system underpins scenes, prefabs, assets, the Inspector, undo/redo, and hot-reload. Understandi...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 14228,
    "sections": [
      "How Unity Serialization Works",
      "What Unity Can Serialize (by default)",
      "What Unity Cannot Serialize Directly",
      "`[SerializeField]` vs `[SerializeReference]`",
      "`[SerializeField]` — Value Serialization (Default)",
      "`[SerializeReference]` — Reference Serialization",
      "When to Use Which",
      "`ISerializationCallbackReceiver` — Bridging the Gap",
      "Usage",
      "Important Threading Caveat",
      "Serialization Rules Analyzer (Unity 6)",
      "What It Detects",
      "Configuration (Unity 6.3+)",
      "JSON Serialization for Save Data",
      "JsonUtility Limitations",
      "When to Use What",
      "ScriptableObject Serialization Patterns",
      "Common Pitfalls",
      "1. Missing `[Serializable]` on Custom Classes",
      "2. Properties Are Not Serialized",
      "3. Struct Reference Semantics with `[SerializeReference]`",
      "4. Hot Reload Breaking State",
      "Version Compatibility Notes"
    ]
  },
  {
    "id": "unity-arch/G63",
    "title": "G63 — Enter Play Mode & Fast Iteration",
    "description": "Entering Play Mode in Unity triggers domain reload (recompiling and reinitializing all scripts) and scene reload (rel...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 12079,
    "sections": [
      "The Problem: Slow Iteration",
      "Configuration",
      "Writing Domain-Reload-Safe Code",
      "Rule 1: Reset All Static State",
      "RuntimeInitializeLoadType Execution Order",
      "Rule 2: Guard Event Subscriptions",
      "Rule 3: Reset Singletons",
      "Writing Scene-Reload-Safe Code",
      "Pattern: Explicit Scene Initialization",
      "Automated Compliance Checking",
      "Assembly Definitions for Faster Compilation",
      "Asmdef Tips",
      "Performance Comparison",
      "Checklist: Enabling Fast Enter Play Mode",
      "Version Notes"
    ]
  },
  {
    "id": "unity-arch/G64",
    "title": "G64 — ScriptedImporters & Asset Import Pipeline",
    "description": "Unity's asset import pipeline transforms raw files (textures, models, audio, custom formats) into engine-ready assets...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 16791,
    "sections": [
      "How the Asset Import Pipeline Works",
      "Asset Database V2 (Default in Unity 6)",
      "Writing a Basic ScriptedImporter",
      "Example: CSV Data Importer",
      "Advanced: Multiple Sub-Assets",
      "Advanced: Import Dependencies",
      "Dependency Types",
      "AssetPostprocessor: Modifying Built-in Imports",
      "Custom Import Settings UI",
      "Batch Processing with AssetDatabase",
      "Performance Tips",
      "Common Pitfalls",
      "1. Extension Conflicts",
      "2. Forgetting to Increment Version",
      "3. Missing Meta Files in Version Control",
      "Version Notes"
    ]
  },
  {
    "id": "unity-arch/G65",
    "title": "G65 — Audio Middleware Integration: FMOD & Wwise",
    "description": "Unity's built-in audio system (AudioSource/AudioMixer) works for simple projects, but professional game audio demands...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 19040,
    "sections": [
      "Why Audio Middleware?",
      "Architecture Overview",
      "FMOD Integration",
      "Installation (FMOD for Unity 2.03+)",
      "Core API: RuntimeManager",
      "StudioEventEmitter Component",
      "3D Spatial Audio",
      "Wwise Integration",
      "Installation (Wwise Unity Integration 2024+)",
      "Core API: AkSoundEngine",
      "AkEvent Component",
      "Adaptive Music Patterns",
      "Vertical Layering (Intensity Stacking)",
      "Horizontal Resequencing (Section Transitions)",
      "Audio Occlusion & Obstruction",
      "Raycast-Based Occlusion",
      "Bank / SoundBank Management",
      "FMOD Bank Strategy",
      "Wwise SoundBank Strategy",
      "Performance Budget",
      "Compression Guidelines",
      "Migration from Unity AudioSource",
      "Common Pitfalls",
      "Choosing Between FMOD and Wwise"
    ]
  },
  {
    "id": "unity-arch/G66",
    "title": "G66 — Cloud Content Delivery (CCD) with Addressables",
    "description": "Unity's Cloud Content Delivery (CCD) is a managed CDN service that hosts and delivers asset bundles to players withou...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 16577,
    "sections": [
      "Why CCD + Addressables?",
      "Architecture Overview",
      "Key Concepts",
      "Setup",
      "Prerequisites",
      "Step 1: Configure Addressable Groups",
      "Step 2: Configure Profile for CCD",
      "Step 3: Build & Release",
      "Runtime: Catalog Updates & Downloads",
      "Checking for Updates",
      "Download Size Estimation",
      "Downloading with Progress",
      "Runtime Environment Switching (CcdManager)",
      "Content Organization Strategy",
      "Bucket-per-Platform",
      "Multi-Environment Pipeline",
      "Best Practices",
      "Bundle Sizing",
      "Caching",
      "Error Handling",
      "Common Pitfalls",
      "Pricing (as of 2025)"
    ]
  },
  {
    "id": "unity-arch/G67",
    "title": "G67 — Dialogue & Narrative Systems",
    "description": "Most games with story elements need a dialogue system — branching conversations, character lines, player choices, and...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 24720,
    "sections": [
      "Choosing an Approach",
      "Architecture: Separation of Concerns",
      "Yarn Spinner Integration",
      "Installation",
      "Yarn Script Basics",
      "Unity Setup",
      "Custom Yarn Commands",
      "Custom Dialogue View (UI Toolkit)",
      "ink Integration",
      "Installation",
      "ink Script Basics",
      "Unity Runtime",
      "Custom Lightweight System",
      "Localization Integration",
      "Common Patterns",
      "Dialogue Triggering",
      "Typewriter Effect",
      "Saving Dialogue State",
      "Common Pitfalls"
    ]
  },
  {
    "id": "unity-arch/G68",
    "title": "G68 — HDRP Environmental Effects: Water, Volumetric Clouds & Fog",
    "description": "HDRP ships with physically-based environmental systems — water surfaces with scriptable buoyancy, volumetric clouds d...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 16579,
    "sections": [
      "Water System",
      "Overview",
      "Setup",
      "Water Surface Properties",
      "Scripting: Buoyancy with Height Queries",
      "Batch Buoyancy with Jobs + Burst",
      "Volumetric Clouds",
      "Overview",
      "Setup",
      "Cloud Configuration",
      "Cloud Map Textures",
      "Performance Considerations",
      "Interaction with Water",
      "Volumetric Fog",
      "Overview",
      "Global Fog Setup",
      "Key Fog Properties",
      "Local Volumetric Fog (Density Volumes)",
      "Scripting Fog Parameters",
      "Combining Environmental Effects",
      "Weather Transition Pattern",
      "Performance Summary",
      "Common Pitfalls"
    ]
  },
  {
    "id": "unity-arch/G69",
    "title": "G69 — UI Toolkit Advanced: Data Binding & Custom Controls",
    "description": "Unity 6 introduced a runtime data binding system for UI Toolkit that automatically synchronizes C# data with UI eleme...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 20873,
    "sections": [
      "Why Data Binding?",
      "Data Source Setup",
      "Using ScriptableObjects as Data Sources",
      "Using Plain C# Classes",
      "Binding in C# Code",
      "Basic Binding Setup",
      "Binding Modes",
      "Data Source Inheritance",
      "Binding in UXML (UI Builder)",
      "Type Converters",
      "Custom Controls with UxmlElement & UxmlAttribute",
      "Before (Legacy — Unity 2021–2022)",
      "After (Unity 6 — UxmlElement)",
      "Using Custom Controls in UXML",
      "Combining Custom Controls with Data Binding",
      "ListView Binding",
      "Production Patterns",
      "Pattern 1: ViewModel Layer",
      "Pattern 2: Panel Manager with Dynamic Data Sources",
      "Performance Tips",
      "Migration from uGUI",
      "Common Pitfalls"
    ]
  },
  {
    "id": "unity-arch/G6",
    "title": "G6 — Save & Load System in Unity 6",
    "description": "Persisting game state — player progress, world data, settings — is fundamental to almost every game. Unity 6 provides...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 21859,
    "sections": [
      "Choosing a Persistence Strategy",
      "Core Architecture: Separating Data from Logic",
      "Step 1: Define the Save Data Class",
      "Key Rules for Save Data Classes",
      "Step 2: Build the Save Manager",
      "Step 3: Populate and Apply Save Data",
      "Step 4: Orchestrate Save/Load from a Game Manager",
      "Async Save/Load (Preventing Frame Hitches)",
      "Calling Async from MonoBehaviour",
      "PlayerPrefs: Only for Settings",
      "Save Data Encryption (Optional)",
      "Common Pitfalls",
      "Autosave Pattern",
      "Quick Reference: When to Use What"
    ]
  },
  {
    "id": "unity-arch/G70",
    "title": "G70 — Netcode for Entities: ECS Multiplayer Networking",
    "description": "Netcode for Entities is Unity's multiplayer framework built on the Entity Component System (ECS). It provides server-...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 23750,
    "sections": [
      "Architecture Overview",
      "Key Concepts",
      "Package Setup",
      "Ghost Components: Defining Networked Data",
      "Basic Ghost Component",
      "GhostField Options",
      "GhostComponent Attribute (Component-Level Settings)",
      "SendToOwner Control",
      "Dynamic Buffers (Synchronized Lists)",
      "Input Handling with IInputComponentData",
      "Input Collection System",
      "RPCs: One-Shot Messages",
      "Defining an RPC",
      "Sending an RPC",
      "Receiving an RPC",
      "RPCs vs Ghosts: When to Use Each",
      "Ghost Variants",
      "Ghost Optimization",
      "Relevancy (Interest Management)",
      "Importance Scaling",
      "World Setup: Server, Client, and Thin Clients",
      "Host Migration (Experimental)",
      "Common Pitfalls",
      "Performance Comparison: NGO vs NFE"
    ]
  },
  {
    "id": "unity-arch/G71",
    "title": "G71 — Unified Ray Tracing API",
    "description": "The UnifiedRayTracing API (shipped in com.unity.render-pipelines.core 17.3+, Unity 6.3 / 6000.3) lets you write ray t...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 16670,
    "sections": [
      "Why Unified Ray Tracing?",
      "Prerequisites",
      "Core API",
      "1. RayTracingContext — The Entry Point",
      "2. IRayTracingAccelStruct — Describing Geometry",
      "3. IRayTracingShader — Ray Tracing Logic",
      "4. Dispatching Rays from C#",
      "Practical Patterns",
      "Ambient Occlusion Pass",
      "Dynamic Scene Updates",
      "Quality Tier Scaling",
      "Performance Guidelines",
      "Limitations vs. Hardware-Only API",
      "Integration with Render Graph",
      "Checklist"
    ]
  },
  {
    "id": "unity-arch/G72",
    "title": "G72 — PSO Tracing & Shader Warming",
    "description": "Shader compilation stutters are one of the most common complaints in shipped Unity games. The first time a shader var...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 15665,
    "sections": [
      "The Problem: First-Use Compilation Stutters",
      "How PSO Tracing and Warming Works",
      "Phase 1: Tracing (Development)",
      "Phase 2: Warming (Runtime)",
      "Cache Miss Tracking",
      "Profiling Shader Compilation",
      "Supported Graphics APIs",
      "Build Pipeline Integration",
      "Per-Platform Collections",
      "Stripping Collections at Build Time",
      "Combining Collections",
      "Common Pitfalls",
      "Complete Loading Screen Integration",
      "Checklist"
    ]
  },
  {
    "id": "unity-arch/G73",
    "title": "G73 — Async Instantiation & Content Streaming",
    "description": "Instantiating complex prefabs — especially those with deep hierarchies, multiple components, and serialized reference...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 17279,
    "sections": [
      "Object.InstantiateAsync",
      "Basic Usage",
      "Batch Instantiation",
      "Positioned Batch with Spans",
      "Cancellation",
      "InstantiateParameters",
      "AsyncInstantiateOperation Properties",
      "Combining with Object Pooling",
      "Async Scene Loading Patterns",
      "Progressive Scene Loading with Progress",
      "Additive Scene Streaming (Open World)",
      "Addressables + InstantiateAsync",
      "Performance Comparison",
      "Best Practices",
      "Common Pitfalls",
      "Checklist"
    ]
  },
  {
    "id": "unity-arch/G74",
    "title": "G74 — Spatial-Temporal Post-Processing (STP) Upscaling",
    "description": "Spatial-Temporal Post-Processing (STP) is Unity's built-in software upscaler, introduced in Unity 6.0 (URP 17 / HDRP ...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 10209,
    "sections": [
      "How STP Works",
      "Platform-Adaptive Quality",
      "Requirements",
      "Enabling STP in URP",
      "Via Inspector (recommended)",
      "Via C# (runtime toggling)",
      "Via C# in HDRP",
      "Render Scale Guidelines",
      "Debugging STP",
      "Common Issues",
      "STP vs. Other Upscalers",
      "Performance Tips",
      "Version History"
    ]
  },
  {
    "id": "unity-arch/G75",
    "title": "G75 — Scriptable Audio Processors",
    "description": "Unity 6.3 LTS introduces the Scriptable Audio Pipeline — a framework for extending the Unity audio engine with custom...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 14273,
    "sections": [
      "Architecture Overview",
      "Processor Types",
      "Communication Between Control & Real-time",
      "Pipes (Real-time Safe)",
      "Messages (Structured, Blocking)",
      "Example 1: Sine Wave Generator",
      "Real-time Part (Audio Thread)",
      "Control Part (Main Thread)",
      "MonoBehaviour Driver",
      "Example 2: Root Output (Master Bus Processing)",
      "Lifecycle Driver for Root Output",
      "Dynamic Parameters with Pipes",
      "When to Use Scriptable Processors vs. Alternatives",
      "Best Practices",
      "Version History"
    ]
  },
  {
    "id": "unity-arch/G76",
    "title": "G76 — Distributed Authority Networking",
    "description": "Traditional Unity multiplayer uses a client-server topology where one authoritative server (or host) owns all game st...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 16753,
    "sections": [
      "When to Use Distributed Authority",
      "Architecture",
      "Setup",
      "Prerequisites",
      "NetworkManager Configuration",
      "Connection Manager",
      "Player Controller with Distributed Authority",
      "RPCs in Distributed Authority",
      "RPC Targets Reference",
      "Ownership & Authority Transfer",
      "Testing Locally",
      "Session Owner Responsibilities",
      "Common Pitfalls",
      "Distributed Authority vs. Client-Server Quick Reference",
      "Version History"
    ]
  },
  {
    "id": "unity-arch/G7",
    "title": "Animation System",
    "description": "Unity's animation system (Mecanim) drives character animation through Animator Controllers — state machines that blen...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 12994,
    "sections": [
      "Architecture Overview",
      "Setting Up the Animator Controller",
      "Creating States and Transitions",
      "Parameter Types",
      "Blend Trees",
      "1D Blend Tree (Speed-Based Locomotion)",
      "2D Blend Tree (Directional Movement)",
      "Animation Layers",
      "Layer Blending Modes",
      "Controlling Layer Weight at Runtime",
      "Hub-and-Spoke Pattern",
      "Animation Events",
      "StateMachineBehaviour",
      "Performance Best Practices",
      "1. Avoid Scale Animations",
      "2. Use Culling Modes",
      "3. Optimize Transitions",
      "4. Reduce Animator Overhead for Crowds",
      "5. Unity 6 Performance Gains",
      "Common Pitfalls",
      "Further Reading"
    ]
  },
  {
    "id": "unity-arch/G8",
    "title": "G8 — Networking with Netcode for GameObjects",
    "description": "Netcode for GameObjects (NGO) is Unity's official high-level networking library for multiplayer games built on the Ga...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 18070,
    "sections": [
      "Why Netcode for GameObjects?",
      "Architecture Overview",
      "Key Concepts",
      "Setting Up NetworkManager",
      "Required Components on the NetworkManager GameObject",
      "NetworkVariables — Automatic State Sync",
      "When to Use NetworkVariables vs RPCs",
      "RPCs — Remote Procedure Calls",
      "RPC Send Targets (NGO 2.x)",
      "Object Spawning",
      "Spawn Checklist",
      "Synchronized Scene Loading",
      "Connection Management",
      "Integration with Unity Gaming Services",
      "Common Pitfalls and Solutions",
      "1. \"Object not in prefab list\"",
      "2. Writing to NetworkVariables from clients",
      "3. RPCs before spawn",
      "4. Large NetworkVariable payloads",
      "5. Physics desynchronization",
      "Production Checklist",
      "Further Reading"
    ]
  },
  {
    "id": "unity-arch/G9",
    "title": "G9 — Addressables & Asset Management",
    "description": "The Addressable Asset System (com.unity.addressables) is Unity's modern approach to loading, unloading, and organizin...",
    "category": "guide",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 17485,
    "sections": [
      "Why Addressables?",
      "Architecture Overview",
      "Key Concepts",
      "Setup",
      "Install the Package",
      "Mark Assets as Addressable",
      "Organize Groups",
      "Loading Assets",
      "By Address (String Key)",
      "By AssetReference (Inspector-Assigned)",
      "By Label (Batch Loading)",
      "Scene Loading via Addressables",
      "Memory Management",
      "The Reference Counting Model",
      "Common Memory Mistakes",
      "Preloading and Releasing Patterns",
      "Group Strategy",
      "Recommended Group Layout",
      "Packing Modes",
      "Remote Content & Updates",
      "Profiling with the Event Viewer",
      "Production Checklist",
      "Further Reading"
    ]
  },
  {
    "id": "unity-arch/R1",
    "title": "R1 — Unity 6 Capability Matrix",
    "description": "A quick-reference table of Unity 6's major subsystems, the recommended approach for each, legacy alternatives to avoi...",
    "category": "reference",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 8262,
    "sections": [
      "Subsystem Decision Matrix",
      "Programming Model",
      "Rendering",
      "UI",
      "Input",
      "Physics",
      "Audio",
      "Scene & Asset Management",
      "Animation",
      "Networking",
      "Build & Tooling",
      "Platform Support Quick Reference",
      "Package Essentials",
      "Version Reference"
    ]
  },
  {
    "id": "unity-arch/R2",
    "title": "R2 — Unity 6 Library & Package Stack",
    "description": "A curated map of Unity 6's package ecosystem — built-in modules, verified packages, and essential third-party librari...",
    "category": "reference",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 11484,
    "sections": [
      "How Unity's Package System Works",
      "Core Built-in Modules",
      "Essential Verified Packages",
      "Input & Control",
      "Asset Management",
      "Rendering & Visual",
      "UI",
      "Multiplayer & Networking",
      "Animation & Cinematics",
      "Data & Performance",
      "Platform & Services",
      "Testing & Debugging",
      "Popular Third-Party Libraries",
      "Decision Flowchart: Choosing Packages",
      "Package Management Tips",
      "Installing Packages",
      "Scoped Registries (OpenUPM)",
      "Version Pinning"
    ]
  },
  {
    "id": "unity-arch-rules",
    "title": "Unity 6 — AI Code Generation Rules",
    "description": "Engine-specific rules for Unity 6 (6000.x) projects using C#. These supplement the engine-agnostic rules in docs/core...",
    "category": "reference",
    "module": "unity-arch",
    "engine": "Unity",
    "tier": "pro",
    "sizeBytes": 38084,
    "sections": [
      "⚠️ Unity Version Pitfalls — Critical Differences",
      "Key API Changes in Unity 6",
      "Rendering Pipeline",
      "Architecture Rules",
      "Project Structure Conventions",
      "Two Architecture Paths",
      "MonoBehaviour Code Generation Rules",
      "Component Responsibilities",
      "ScriptableObjects for Data",
      "Event-Driven Communication",
      "DOTS / ECS Code Generation Rules",
      "Components: IComponentData Structs",
      "Systems: Use ISystem + SystemAPI",
      "Input System Rules",
      "Action Map Best Practices",
      "Object Pooling Rules",
      "Dependency Management Rules",
      "Terrain Rules",
      "Render Graph Rules (Unity 6.1+)",
      "GPU-Driven Rendering Rules",
      "Accessibility Rules",
      "Procedural Mesh Rules",
      "Animation Rigging Rules",
      "2D Physics Rules (Box2D v3 — Unity 6.3+)",
      "Common Pitfalls to Avoid",
      "Unity 6 Migration",
      "Source Generators",
      "Unity AI Editor Tools (6.2+)",
      "DirectStorage & Asset Loading (6.4+)",
      "ECS as Core Package (6.4+)",
      "CoreCLR & .NET Modernization (6.7–6.8)",
      "Prepare Now (6.4+)",
      "Modern C# Features (Available Under CoreCLR / .NET 10 / C# 14)",
      "Visual Scripting Rules",
      "Custom Package (UPM) Rules",
      "Graph Toolkit Rules (6.2+)",
      "Unity 6.4 Additional Breaking Changes",
      "Unified Ray Tracing Rules (6.3+)",
      "PSO Tracing & Shader Warming Rules (6.0+, Experimental)",
      "Async Instantiation Rules (6.0+)",
      "STP Upscaling Rules (6.0+)",
      "Scriptable Audio Processor Rules (6.3+)",
      "Distributed Authority Networking Rules"
    ]
  },
  {
    "id": "unreal-arch/E1",
    "title": "E1 — Unreal Engine 5 Architecture Overview",
    "description": "Unreal Engine 5 is a full-featured 3D game engine using C++ and a visual scripting system called Blueprints. This doc...",
    "category": "architecture",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 12088,
    "sections": [
      "Engine Architecture at a Glance",
      "The Gameplay Framework",
      "Class Hierarchy & Responsibilities",
      "Rendering Technologies (UE5)",
      "Nanite — Virtual Geometry",
      "Lumen — Dynamic Global Illumination",
      "Virtual Shadow Maps",
      "MegaLights (UE5.5+, Experimental)",
      "Module System",
      "Plugin Architecture",
      "Key Subsystems",
      "Physics — Chaos",
      "AI — Behavior Trees + Environment Query System",
      "Niagara — Particle System",
      "World Partition (Open Worlds)",
      "Networking",
      "Build & Iteration",
      "Compilation Modes",
      "Live Coding (Hot Reload)",
      "Key Console Commands for Development"
    ]
  },
  {
    "id": "unreal-arch/E2",
    "title": "E2 — Project Structure & Organization in Unreal Engine 5",
    "description": "A well-organized UE5 project structure prevents broken references, minimizes merge conflicts, and lets your project s...",
    "category": "architecture",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 13753,
    "sections": [
      "Why Structure Matters in Unreal",
      "On-Disk Directory Layout",
      "Content Folder Layout",
      "Organize by Feature, Not by Asset Type",
      "Naming Prefixes",
      "C++ Source Organization",
      "Module Structure",
      "Class Naming Conventions",
      "Scaling: From Flat Folders to Game Feature Plugins",
      "Stage 1 — Single Module (Prototype / Jam)",
      "Stage 2 — Multiple Modules (Mid-size)",
      "Stage 3 — Game Feature Plugins (Large / Live Service)",
      "Version Control Best Practices",
      ".gitignore Essentials",
      "Git LFS for Binary Assets",
      "Perforce / UnrealGameSync",
      "Common Pitfalls",
      "Quick-Start Checklist"
    ]
  },
  {
    "id": "unreal-arch/G10",
    "title": "G10 — Debugging and Profiling",
    "description": "Unreal Engine 5 provides a layered profiling system: quick console stat commands for live diagnostics, the GPU Visual...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 16198,
    "sections": [
      "Profiling Tiers",
      "Tier 1: Console Stat Commands",
      "Essential Commands",
      "Reading `stat unit` Output",
      "Tier 2: GPU Visualizer",
      "What It Shows",
      "Common GPU Bottlenecks",
      "Tier 3: Unreal Insights",
      "Recording a Trace",
      "Insights Windows",
      "Finding Hitches in Insights",
      "C++ Debugging Techniques",
      "Scope Timing with TRACE Macros",
      "Custom Stat Groups",
      "Log-Based Debugging",
      "Blueprint Debugging",
      "Breakpoints and Watch Values",
      "Blueprint Profiler",
      "Common Blueprint Performance Traps",
      "Memory Debugging",
      "Console Commands for Memory",
      "Finding Memory Leaks",
      "Performance Debugging Workflow",
      "Useful Console Commands Reference",
      "Further Reading"
    ]
  },
  {
    "id": "unreal-arch/G11",
    "title": "AI & Behavior Trees",
    "description": "Unreal Engine's AI framework centers on Behavior Trees for decision-making, Blackboards for shared memory, and AI Con...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 16005,
    "sections": [
      "Architecture Overview",
      "Why Behavior Trees instead of FSMs?",
      "Setting Up the AI Stack",
      "1. Create a Blackboard",
      "2. Create a Behavior Tree",
      "3. Create an AI Controller",
      "Node Types",
      "Tasks (Leaf Nodes — Execute Actions)",
      "Decorators (Conditional Gates)",
      "Services (Periodic Updates)",
      "Composite Nodes",
      "Observer Aborts",
      "Environment Query System (EQS)",
      "Quick Setup (Blueprint)",
      "Running EQS from C++",
      "StateTree (UE 5.0+ — Newer Alternative)",
      "When to Use StateTree vs. Behavior Tree",
      "AI Perception System",
      "Debugging",
      "Visual Logger",
      "Gameplay Debugger",
      "BT Editor Debugging",
      "Performance Tips"
    ]
  },
  {
    "id": "unreal-arch/G12",
    "title": "World Partition & Asset Streaming",
    "description": "World Partition is UE5's system for managing large worlds. It replaces UE4's manual Level Streaming with an automatic...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 11169,
    "sections": [
      "Why World Partition?",
      "Core Concepts",
      "1. Streaming Grid",
      "2. Streaming Sources",
      "3. One File Per Actor (OFPA)",
      "4. Data Layers",
      "5. Is Spatially Loaded",
      "Hierarchical Level of Detail (HLOD)",
      "HLOD Setup",
      "HLOD Configuration",
      "Editor Workflow",
      "Minimap & Region Loading",
      "Loading Regions",
      "Runtime Streaming Architecture",
      "Controlling Streaming Priority",
      "Multiplayer Considerations",
      "Migration from Level Streaming",
      "Performance & Debugging",
      "Console Commands",
      "Optimization Checklist",
      "Profiling",
      "Version Notes"
    ]
  },
  {
    "id": "unreal-arch/G13",
    "title": "G13 — Gameplay Ability System (GAS) in Unreal Engine 5",
    "description": "The Gameplay Ability System (GAS) is Epic's built-in framework for building abilities, attributes, status effects, co...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 17228,
    "sections": [
      "Why Use GAS?",
      "Architecture Overview",
      "Core Classes",
      "Project Setup",
      "1. Enable the Plugin",
      "2. Create an Attribute Set",
      "3. Add the ASC to Your Character",
      "Creating a Gameplay Ability",
      "Ability Tags (The Control System)",
      "Gameplay Effects",
      "Duration Types",
      "Modifier Structure",
      "Stacking",
      "Gameplay Effect Components (UE 5.4+)",
      "Gameplay Cues: Visual/Audio Feedback",
      "Multiplayer Considerations",
      "Prediction",
      "Where to Put the ASC",
      "Replication Rules",
      "Common Patterns",
      "Damage Pipeline",
      "Cooldowns",
      "Costs (Mana, Stamina, etc.)",
      "GAS Setup Checklist",
      "Further Reading"
    ]
  },
  {
    "id": "unreal-arch/G14",
    "title": "G14 — Asset Management and Async Loading in Unreal Engine 5",
    "description": "Asset management determines how your game loads content into memory, when it loads, and when it releases. Poor asset ...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 13883,
    "sections": [
      "Why Asset Management Matters",
      "Hard vs Soft References",
      "Declaring Soft References",
      "Async Loading with FStreamableManager",
      "Basic Async Load",
      "Loading Multiple Assets",
      "Handle Lifetime and Memory Release",
      "The Asset Manager (UAssetManager)",
      "Primary Assets",
      "Configuring Asset Manager Rules",
      "Loading Primary Assets",
      "Asset Bundles",
      "Common Patterns",
      "Preloading During Loading Screens",
      "Reference Auditing with the Size Map",
      "The Golden Rule",
      "Memory Management Checklist",
      "Reference vs Loading Strategy Matrix",
      "Further Reading"
    ]
  },
  {
    "id": "unreal-arch/G15",
    "title": "G15 — Blueprint vs C++ Workflow in Unreal Engine 5",
    "description": "Unreal Engine gives you two programming languages — Blueprints (visual scripting) and C++ — and expects you to use bo...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 17191,
    "sections": [
      "Why Two Languages?",
      "The Hybrid Architecture",
      "When to Use C++",
      "Always use C++ for:",
      "C++ base class example:",
      "When to Use Blueprints",
      "Always use Blueprints for:",
      "The UPROPERTY Specifier Cheat Sheet",
      "Categories and Metadata",
      "The UFUNCTION Specifier Cheat Sheet",
      "Choosing the right specifier:",
      "Delegates: C++ Events That Blueprint Can Bind",
      "Performance: What Actually Matters",
      "Profiling Blueprint Cost",
      "Migration Strategy: Blueprint → C++",
      "Project Setup: Always Start as a C++ Project",
      "Common Pitfalls",
      "1. \"Pure Blueprint\" projects that hit performance walls",
      "2. Overexposing everything to Blueprint",
      "3. Blueprint spaghetti",
      "4. Forgetting `Super::` calls in overrides",
      "5. Not using interfaces for cross-system communication",
      "Decision Flowchart"
    ]
  },
  {
    "id": "unreal-arch/G16",
    "title": "G16 — Procedural Content Generation (PCG) Framework",
    "description": "The PCG Framework is Unreal Engine's built-in toolset for procedural content generation. It provides a node-based gra...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 18047,
    "sections": [
      "Why PCG Matters for Game Dev",
      "Core Concepts",
      "PCG Graph",
      "PCG Component",
      "PCG Data Types",
      "Essential Nodes",
      "Generation Nodes — Creating Point Clouds",
      "Filter Nodes — Refining the Point Cloud",
      "Modification Nodes — Transforming Points",
      "Output Nodes — Spawning Assets",
      "Subgraphs — Reusable PCG Logic",
      "Blueprint Integration",
      "Execute Blueprint Node",
      "C++ Custom Nodes",
      "GPU Processing (UE 5.5+)",
      "Biome Core Plugin",
      "Performance Best Practices",
      "1. Use HISM and Set Cull Distances",
      "2. Partition Your Generation Volumes",
      "3. Minimize Spawn Actor Usage",
      "4. Self-Prune Early in the Graph",
      "5. Use Deterministic Seeds",
      "6. Profile with PCG Debug Visualization",
      "Common Patterns",
      "Pattern: Forest Floor (Multi-Layer Scatter)",
      "Pattern: Road Exclusion Zone",
      "Pattern: Landscape Layer-Driven Biomes",
      "Quick Reference",
      "Further Reading"
    ]
  },
  {
    "id": "unreal-arch/G17",
    "title": "G17 — Niagara VFX System",
    "description": "Niagara is Unreal Engine 5's modular, data-driven particle system that replaced Cascade. It uses a stack-based simula...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 16166,
    "sections": [
      "Architecture Overview",
      "Key Concepts",
      "Simulation Pipeline",
      "Stage Details",
      "Renderer Types",
      "GPU vs. CPU Simulation",
      "Common Effect Recipes",
      "Fire Effect (3-Emitter System)",
      "C++ Integration",
      "Spawning a Niagara System",
      "Setting Parameters from C++",
      "Custom Data Interface (Advanced)",
      "Optimization Best Practices",
      "1. Fewer Emitters = Better Performance",
      "2. Set Fixed Bounds",
      "3. Use Scalability Settings",
      "4. Use Lightweight Emitters (UE 5.4+)",
      "5. Material Optimization for Particles",
      "6. Particle Count Budgets",
      "7. Object Pooling for Niagara Components",
      "Debugging Niagara Effects",
      "Niagara Debugger",
      "Performance HUD",
      "Common Pitfalls"
    ]
  },
  {
    "id": "unreal-arch/G18",
    "title": "G18 — Material System & Shaders",
    "description": "Unreal Engine's Material system is a visual shader authoring pipeline built on top of HLSL. Materials control how eve...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 17974,
    "sections": [
      "Material Architecture",
      "Shading Models",
      "Blend Modes",
      "Material Domains",
      "The Master Material Pattern",
      "Creating a Master Material",
      "Static Switch Parameters",
      "Key Material Expressions",
      "Texture Sampling",
      "Math Operations",
      "World Data",
      "Material Functions",
      "Nanite & Lumen Material Constraints",
      "Nanite Requirements",
      "Lumen Considerations",
      "C++ Integration",
      "Creating Dynamic Material Instances at Runtime",
      "Setting Material Parameters from Blueprint",
      "Optimization Best Practices",
      "1. Minimize Shader Instruction Count",
      "2. Use Material Instances Everywhere",
      "3. Reduce Texture Samples",
      "4. LOD Material Simplification",
      "5. Avoid Expensive Nodes in Common Materials",
      "6. Shader Complexity View",
      "Common Material Techniques",
      "Dissolve Effect",
      "Triplanar Mapping (No UV Seams)",
      "Distance-Based Detail Fade"
    ]
  },
  {
    "id": "unreal-arch/G19",
    "title": "Localization and Text System",
    "description": "Localize your Unreal Engine game using the built-in text system: FText, LOCTEXT macros, String Tables, plural/gender ...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 12407,
    "sections": [
      "Why FText Matters",
      "Text Macros",
      "NSLOCTEXT",
      "LOCTEXT with LOCTEXT_NAMESPACE",
      "INVTEXT (Invariant Text)",
      "String Tables",
      "CSV Format",
      "Loading String Tables in C++",
      "Retrieving Strings at Runtime",
      "Blueprints",
      "Text Formatting",
      "Simple Substitution",
      "Named Arguments (UE5 Preferred)",
      "Plural Forms",
      "Gender Forms",
      "Localization Dashboard",
      "Setup",
      "Workflow",
      "Automation with Python",
      "Blueprint Localization",
      "Font Management for CJK",
      "Packaging and Distribution",
      "Testing Localization",
      "Culture Preview",
      "Pseudo-Localization",
      "Common Pitfalls",
      "Checklist: Localization-Ready UE5 Project"
    ]
  },
  {
    "id": "unreal-arch/G1",
    "title": "G1 — The Gameplay Framework in Unreal Engine 5",
    "description": "The Gameplay Framework is Unreal's opinionated class hierarchy that answers \"where does this logic go?\" for every gam...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 16200,
    "sections": [
      "Why the Framework Exists",
      "Class Hierarchy Overview",
      "Each Class in Detail",
      "UGameInstance — The Application Singleton",
      "AGameModeBase — The Server-Side Referee",
      "AGameStateBase — The Replicated Scoreboard",
      "APlayerController — The Player's Brain",
      "APlayerState — Per-Player Replicated Data",
      "APawn / ACharacter — The Physical Body",
      "Decision Table: Where Does This Logic Go?",
      "Common Mistakes",
      "Practical Example: Putting It All Together"
    ]
  },
  {
    "id": "unreal-arch/G20",
    "title": "G20 — Performance Optimization & Memory Management in UE5",
    "description": "Performance optimization in Unreal Engine is a structured process: measure the bottleneck, identify the system causin...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 13993,
    "sections": [
      "The Golden Rule: Profile Before You Optimize",
      "Stat Commands — Your First-Line Diagnostic",
      "Essential Commands",
      "Reading `stat unit`",
      "Unreal Insights — Deep Profiling",
      "Capturing a Trace",
      "What to Look For",
      "Adding Custom Stat Counters",
      "CPU Optimization",
      "Tick Optimization",
      "Tick Rate Reduction for Distant Actors",
      "Memory Management",
      "UObject Garbage Collection",
      "Smart Pointer Guide",
      "Object Pooling",
      "GPU Optimization",
      "Draw Call Reduction",
      "Lumen Optimization",
      "Texture Streaming Budget",
      "Frame Budget Reference",
      "Common Optimization Checklist",
      "Quick Wins (Check These First)",
      "Medium Effort",
      "Architecture-Level"
    ]
  },
  {
    "id": "unreal-arch/G21",
    "title": "G21 — Automated Testing in Unreal Engine 5",
    "description": "Unreal Engine ships with a multi-layered testing infrastructure that ranges from fast C++ unit tests to full multipla...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 19644,
    "sections": [
      "Testing Layers at a Glance",
      "Layer 1: Low Level Tests (Catch2)",
      "When to Use",
      "Setup",
      "Writing a Low Level Test",
      "Running",
      "Layer 2: Automation Tests (Macro-Based)",
      "Test Types",
      "Test Flags",
      "Writing a Simple Test",
      "Writing a Complex (Parameterized) Test",
      "Available Assertions",
      "Running Tests",
      "Layer 3: Spec Tests (BDD-Style)",
      "File Convention",
      "Writing a Spec",
      "Async / Latent Tests",
      "Layer 4: Functional Tests (In-World)",
      "Setup",
      "Blueprint Functional Test",
      "C++ Functional Test",
      "Running Functional Tests",
      "Layer 5: Gauntlet (CI Orchestration)",
      "Architecture",
      "Writing a Gauntlet Controller",
      "Running Gauntlet from Command Line",
      "Test Organization Best Practices",
      "File Layout",
      "Module Dependencies",
      "Choosing the Right Layer",
      "CI Integration",
      "Headless Test Execution",
      "JUnit-Compatible Output",
      "Recommended CI Pipeline",
      "Common Pitfalls",
      "Further Reading"
    ]
  },
  {
    "id": "unreal-arch/G22",
    "title": "Motion Matching Animation System",
    "description": "Motion Matching replaces traditional animation state machines with a database-driven approach: instead of manually wi...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 13227,
    "sections": [
      "Why Motion Matching Over State Machines",
      "Plugin Setup",
      "Core Concepts",
      "Pose Search Database",
      "Schema and Channels",
      "Feature Vector",
      "Step-by-Step Setup",
      "1. Create the Schema",
      "2. Create the Database",
      "3. Add the Trajectory Component",
      "4. Wire Up the Animation Blueprint",
      "Tuning and Debugging",
      "Pose Search Debugger",
      "Common Tuning Parameters",
      "Procedural Fixup",
      "C++ Integration",
      "Custom Trajectory Provider",
      "Gameplay Tags for Context Switching",
      "Performance Considerations",
      "Common Pitfalls",
      "Next Steps"
    ]
  },
  {
    "id": "unreal-arch/G23",
    "title": "MassEntity: ECS Framework for Large-Scale Simulations",
    "description": "MassEntity is Unreal Engine's archetype-based Entity Component System (ECS). Originally built by Epic's AI team for t...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 17178,
    "sections": [
      "When to Use MassEntity vs. Actors",
      "Plugin Setup",
      "Core Architecture",
      "Entities",
      "Fragments (Components in ECS terminology)",
      "Shared Fragments",
      "Tags",
      "Archetypes",
      "Processors (Systems in ECS terminology)",
      "Traits (Entity Templates)",
      "Mass Entity Config (Data Asset)",
      "Spawning Entities",
      "From a Mass Spawner Actor",
      "Programmatically",
      "Visualization: Mass Representation",
      "Integration with AI (StateTree)",
      "Performance Tips",
      "Memory Layout",
      "Processor Optimization",
      "Scaling Guidelines",
      "Common Pitfalls",
      "Next Steps"
    ]
  },
  {
    "id": "unreal-arch/G24",
    "title": "G24 — MetaSounds: Procedural Audio Engine in Unreal Engine 5",
    "description": "MetaSounds is Unreal Engine's next-generation procedural audio system, replacing the legacy SoundCue node graph with ...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 14409,
    "sections": [
      "Why MetaSounds?",
      "Asset Hierarchy",
      "When to Use Each",
      "The Graph Editor",
      "Creating Your First MetaSound Source",
      "Core Concepts",
      "Essential Node Types",
      "Playback Nodes",
      "Synthesis Nodes",
      "Envelope & Dynamics",
      "Filters & Effects",
      "Logic & Control",
      "Practical Example: Randomized Footstep System",
      "Why This Design Works",
      "Blueprint Integration",
      "Playing a MetaSound Source in the World",
      "C++ Integration",
      "MetaSounds + Attenuation & Spatialization",
      "MetaSounds vs SoundCues: Migration Guide",
      "Migration Strategy",
      "Common Pitfalls",
      "Performance Considerations"
    ]
  },
  {
    "id": "unreal-arch/G25",
    "title": "G25 — StateTree: Hierarchical State Machine for AI and Logic in Unreal Engine 5",
    "description": "StateTree is Unreal Engine's modern alternative to Behavior Trees for authoring AI behaviors and general-purpose game...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 18523,
    "sections": [
      "Why StateTree Over Behavior Trees?",
      "Architecture Overview",
      "Core Components",
      "States",
      "Tasks",
      "Transitions",
      "Evaluators",
      "Conditions",
      "Schemas: AI vs General Purpose",
      "Writing Tasks in C++",
      "Key Return Values",
      "Writing Tasks in Blueprint",
      "Practical Example: Patrol / Chase / Attack AI",
      "Setting It Up in the Editor",
      "Running the StateTree",
      "StateTree vs Behavior Tree: When to Use Which",
      "Debugging StateTree",
      "Visual Debugger",
      "Unreal Insights",
      "Common Debug Strategies",
      "Common Pitfalls",
      "Performance Considerations"
    ]
  },
  {
    "id": "unreal-arch/G26",
    "title": "G26 — Control Rig in Unreal Engine 5",
    "description": "Control Rig is Unreal Engine's node-based rigging and procedural animation framework. It runs on RigVM, a lightweight...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 12372,
    "sections": [
      "Architecture Overview",
      "Key Classes",
      "Forward Solve vs Backward Solve",
      "Forward Solve",
      "Backward Solve",
      "Core Rig Unit Nodes",
      "Transform Manipulation",
      "IK Solvers",
      "Constraints",
      "Procedural",
      "Using Control Rig in Animation Blueprints",
      "Setup Steps",
      "C++ Integration",
      "UControlRigComponent (Actor-Level)",
      "Procedural Animation Recipes",
      "Foot IK (Ground Adaptation)",
      "Look-At / Aim",
      "Procedural Turret / Mechanical",
      "Sequencer Integration",
      "Performance Considerations",
      "Common Pitfalls",
      "Further Reading"
    ]
  },
  {
    "id": "unreal-arch/G27",
    "title": "G27 — Lyra Starter Game Architecture",
    "description": "Lyra Starter Game is Epic's reference architecture for production-quality UE5 projects. It demonstrates Modular Game ...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 14269,
    "sections": [
      "Why Lyra Matters",
      "High-Level Architecture",
      "Core Classes",
      "Game Framework",
      "Experience System",
      "Pawn & Input",
      "Game Feature Plugins — The Modular Pattern",
      "What Is a Game Feature Plugin?",
      "UGameFeatureAction — Extension Points",
      "Modular Gameplay Component Manager",
      "Creating Your Own Game Feature Plugin",
      "Experience Flow — From Map Load to Gameplay",
      "Lyra's GAS Integration",
      "ASC on PlayerState",
      "Ability Granting via Game Features",
      "Input → Ability Binding",
      "Networking Patterns in Lyra",
      "Naming Conventions",
      "Extending Lyra — Best Practices",
      "Common Pitfalls",
      "Further Reading"
    ]
  },
  {
    "id": "unreal-arch/G28",
    "title": "G28 — MetaHuman Integration in Unreal Engine 5",
    "description": "MetaHuman is Epic's framework for creating and integrating photorealistic digital humans in Unreal Engine. It provide...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 15101,
    "sections": [
      "Architecture Overview",
      "Key Components",
      "Integration Workflow",
      "Method 1: MetaHuman Creator (Cloud / In-Editor)",
      "Method 2: Mesh to MetaHuman",
      "Method 3: Automation API (UE 5.4+)",
      "MetaHuman Character Structure",
      "Leader Pose Component Pattern",
      "Animation Integration",
      "Facial Animation — Control Rig",
      "Body Animation",
      "Live Link Setup",
      "Performance & Optimization",
      "LOD System",
      "Hair Optimization",
      "Rendering Cost Breakdown",
      "Practical Budget",
      "Gameplay Integration Patterns",
      "Using MetaHuman as a Player Character",
      "Driving Facial Expressions from Gameplay",
      "Lip Sync",
      "Common Pitfalls",
      "Version History",
      "Further Reading"
    ]
  },
  {
    "id": "unreal-arch/G29",
    "title": "G29 — Mover Component: Next-Gen Character Movement",
    "description": "The Mover plugin (UMoverComponent) is Unreal Engine's next-generation character movement system, introduced experimen...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 18570,
    "sections": [
      "Why Mover Over CharacterMovementComponent?",
      "Architecture Overview",
      "Key Classes",
      "Basic Setup in C++",
      "Step 1: Enable the Plugin",
      "Step 2: Create a Mover-Based Pawn",
      "Step 3: Feed Input to the Mover",
      "Movement Modes via Gameplay Tags",
      "Switching Modes",
      "Creating a Custom Movement Mode",
      "Registering the Mode",
      "Networking with Mover",
      "Network Prediction Flow",
      "UE 5.5+ Additions",
      "Spring-Based Walking Modes",
      "NavMoverComponent for AI",
      "Migrating from CharacterMovementComponent",
      "Common Pitfalls"
    ]
  },
  {
    "id": "unreal-arch/G2",
    "title": "G2 — Enhanced Input System in Unreal Engine 5",
    "description": "The Enhanced Input System is UE5's replacement for the legacy BindAction/BindAxis input system. It separates the what...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 18013,
    "sections": [
      "Why Enhanced Input?",
      "Architecture Overview",
      "Step-by-Step Setup",
      "Step 1: Create Input Action Assets",
      "Step 2: Create Input Mapping Context",
      "Step 3: Declare C++ References",
      "Step 4: Register the Mapping Context",
      "Step 5: Bind Actions to Functions",
      "Step 6: Implement Handler Functions",
      "Input Modifiers",
      "Modifier Pipeline Example",
      "Input Triggers",
      "Context Switching",
      "Priority Rules",
      "Runtime Key Rebinding",
      "Module Dependencies",
      "Common Pitfalls"
    ]
  },
  {
    "id": "unreal-arch/G30",
    "title": "G30 — Online Subsystem & Epic Online Services (EOS)",
    "description": "Unreal Engine's Online Subsystem (OSS) is an abstraction layer that separates your game code from specific platform b...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 17373,
    "sections": [
      "Architecture: The Online Subsystem Abstraction",
      "Why This Abstraction Matters",
      "Configuring EOS",
      "Step 1: Create an EOS Application",
      "Step 2: Engine Configuration",
      "Step 3: Module Dependencies",
      "Authentication",
      "Authentication Types",
      "Session Management",
      "Creating a Session",
      "Finding and Joining Sessions",
      "Dedicated Server Setup",
      "Server Configuration",
      "Server Session Registration",
      "Cross-Platform with EOS Connect",
      "Lobby System",
      "Session Lifecycle",
      "Cleanup",
      "Common Pitfalls"
    ]
  },
  {
    "id": "unreal-arch/G31",
    "title": "G31 — Chaos Destruction System Deep Dive",
    "description": "The Chaos Destruction system enables real-time, cinematic-quality destruction using Geometry Collections — fractured ...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 18030,
    "sections": [
      "Core Concepts",
      "What is a Geometry Collection?",
      "The Destruction Pipeline",
      "Fracture Modes",
      "Multi-Level Fracturing",
      "Damage Thresholds and Clustering",
      "Configuring Damage Thresholds",
      "Damage Types",
      "Runtime C++ Control",
      "Direct Component Access",
      "Physics Field System",
      "Anchor Fields",
      "Niagara Integration",
      "Niagara Data Interface Setup",
      "Chaos Cache (Pre-Recorded Destruction)",
      "When to Use Chaos Cache",
      "Recording a Cache",
      "Networking Destruction",
      "Strategy 1: Server-Authoritative Damage, Client-Side Fracture",
      "Strategy 2: Replicated Geometry Collection State",
      "Best Practice: Tiered Destruction",
      "Optimization",
      "Performance Budget",
      "Key Optimization Techniques",
      "Common Pitfalls"
    ]
  },
  {
    "id": "unreal-arch/G32",
    "title": "G32 — Gameplay Tags & Data-Driven Design in Unreal Engine 5",
    "description": "Gameplay Tags (FGameplayTag) are Unreal Engine's hierarchical labelling system — lightweight, editor-friendly identif...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 13077,
    "sections": [
      "Why Gameplay Tags?",
      "Core Concepts",
      "FGameplayTag",
      "FGameplayTagContainer",
      "FGameplayTagQuery",
      "Tag Registration Methods",
      "1. Project Settings (DefaultGameplayTags.ini)",
      "2. Data Table Import",
      "3. Native C++ Tags (Recommended for Code)",
      "4. GameplayTagsSettings.ini (Plugin Tags)",
      "Hierarchy Best Practices",
      "UPROPERTY Meta Filtering",
      "Data-Driven Patterns",
      "Pattern 1: DataAsset with Tags",
      "Pattern 2: DataTable-Driven Loot",
      "Pattern 3: Tag-Based Event Routing",
      "GAS Integration",
      "Multiplayer Replication",
      "Performance Notes",
      "Common Mistakes",
      "Quick-Start Checklist",
      "Further Reading"
    ]
  },
  {
    "id": "unreal-arch/G33",
    "title": "G33 — Game Features & Modular Gameplay in Unreal Engine 5",
    "description": "The Game Features and Modular Gameplay plugins provide Unreal Engine 5's architecture for building self-contained, ho...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 14612,
    "sections": [
      "Why Modular Gameplay?",
      "Architecture Overview",
      "Plugin Structure",
      "The .uplugin File",
      "UGameFeatureData",
      "Built-In Feature Actions",
      "UGameFeatureAction_AddComponents",
      "UGameFeatureAction_AddAbilities",
      "UGameFeatureAction_AddInputContextMapping",
      "UGameFeatureAction_AddWorldSystem",
      "UGameFeatureAction_AddSpawnedActors",
      "UGameFeatureAction_AddLevelInstances",
      "UGameFeatureAction_DataRegistry",
      "Actor Opt-In: UGameFrameworkComponentManager",
      "Feature Lifecycle",
      "States",
      "Controlling State from C++",
      "Controlling State from Blueprints",
      "Writing Custom Feature Actions",
      "Lyra Pattern: Experience System",
      "Practical Patterns",
      "Pattern 1: Weapon as a Game Feature",
      "Pattern 2: Seasonal Content",
      "Pattern 3: Feature Flags via Tags",
      "Common Mistakes",
      "Setup Checklist",
      "Further Reading"
    ]
  },
  {
    "id": "unreal-arch/G34",
    "title": "G34 — Smart Objects System in Unreal Engine 5",
    "description": "The Smart Objects system is Unreal Engine 5's framework for defining interactable slots in the world — places where A...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 17509,
    "sections": [
      "Why Smart Objects?",
      "Architecture Overview",
      "Core Concepts",
      "USmartObjectDefinition",
      "USmartObjectComponent",
      "USmartObjectSubsystem",
      "FSmartObjectClaimHandle",
      "Slot Configuration",
      "Multiple Slots",
      "Behavior Definitions",
      "USmartObjectGameplayBehaviorDefinition",
      "Custom Behavior Definitions",
      "Finding and Claiming Slots (C++)",
      "Basic Query Flow",
      "Claim Lifecycle",
      "StateTree Integration",
      "USmartObjectTask_FindAndClaim",
      "USmartObjectTask_UseClaimedObject",
      "Example StateTree Flow",
      "Behavior Tree Integration",
      "Player Interactions",
      "Tag-Based Filtering",
      "Activity Tags",
      "User Tags",
      "Preconditions",
      "World Partition Integration",
      "Performance Considerations",
      "Common Mistakes",
      "Setup Checklist",
      "Further Reading"
    ]
  },
  {
    "id": "unreal-arch/G35",
    "title": "G35 — MegaLights",
    "description": "MegaLights is a stochastic direct lighting system introduced as an experimental feature in Unreal Engine 5.5. It enab...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 9041,
    "sections": [
      "Prerequisites & Hardware Requirements",
      "Enabling MegaLights",
      "Project Settings (UE 5.5+)",
      "Post Process Volume Override (UE 5.6+)",
      "How MegaLights Works",
      "Stochastic Direct Lighting",
      "Shadow Methods",
      "Key Console Variables",
      "Supported Light Types",
      "Performance Guidelines",
      "Budget Awareness",
      "Optimization Strategies",
      "Scalability Strategy",
      "Common Use Cases",
      "Interior Architectural Visualization",
      "Open-World Night Scenes",
      "Animated / Textured Area Lights",
      "Known Limitations (UE 5.5 Experimental)",
      "C++ Integration",
      "Checking MegaLights Availability at Runtime",
      "Toggling MegaLights via Device Profiles",
      "Migration from Traditional Lights",
      "Further Reading"
    ]
  },
  {
    "id": "unreal-arch/G36",
    "title": "G36 — Substrate Material System",
    "description": "Substrate (formerly Strata) is Unreal Engine's next-generation material authoring framework, available as a beta feat...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 11418,
    "sections": [
      "Why Substrate?",
      "Limitations of Legacy Shading Models",
      "What Substrate Solves",
      "Enabling Substrate",
      "Project Settings (UE 5.5+)",
      "Console Variable",
      "Core Concepts",
      "The Slab",
      "Slab Node Inputs",
      "Key Insight: F0 Replaces Metallic",
      "Substrate Operators",
      "Substrate Vertical Layer",
      "Substrate Horizontal Mix",
      "Substrate Coverage",
      "Substrate Add",
      "Substrate Weight",
      "Practical Patterns",
      "Pattern 1: Metallic Paint with Clear Coat",
      "Pattern 2: Wet / Dry Surface Blend",
      "Pattern 3: Subsurface Skin",
      "Pattern 4: Rusted Metal (Wear)",
      "Migration from Legacy Materials",
      "Automatic Conversion",
      "Manual Considerations",
      "Performance Considerations",
      "Shader Compilation",
      "Runtime Cost",
      "Best Practices",
      "C++ Interaction",
      "Checking if Substrate is Enabled",
      "Setting Material Parameters (Unchanged)",
      "Known Limitations (UE 5.5 Beta)",
      "Further Reading"
    ]
  },
  {
    "id": "unreal-arch/G37",
    "title": "G37 — Editor Scripting & Automation",
    "description": "Unreal Engine provides three complementary approaches to editor automation: Python scripting, Editor Utility Blueprin...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 14726,
    "sections": [
      "Choosing Your Approach",
      "Python Editor Scripting",
      "Setup",
      "Key Python Modules",
      "Example: Batch-Set Nanite on All Static Meshes",
      "Example: Validate Assets Before Build",
      "Startup Scripts",
      "Editor Utility Blueprints (Blutilities)",
      "Editor Utility Widget (EUW)",
      "Editor Utility Blueprint (EUB)",
      "Example: Bulk Rename Tool (EUW)",
      "Registering Blutilities in Menus (UE 5.5+)",
      "C++ Editor Modules",
      "When to Use C++",
      "Module Setup",
      "Example: Custom Asset Action",
      "Registering Editor Menu Extensions (C++)",
      "CI / Build Automation",
      "Running Python Scripts in CI",
      "Custom Commandlets (C++)",
      "Common Automation Patterns",
      "Asset Pipeline Automation",
      "Level Automation",
      "Debugging Editor Scripts",
      "Python",
      "Blutilities",
      "C++",
      "Best Practices",
      "Further Reading"
    ]
  },
  {
    "id": "unreal-arch/G38",
    "title": "Iris Replication System",
    "description": "Iris is Unreal Engine's next-generation opt-in replication system designed to replace the legacy UNetDriver-based rep...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 7668,
    "sections": [
      "Why Iris?",
      "Architecture Overview",
      "1. ReplicationSystem",
      "2. ReplicationBridge",
      "3. DataStream",
      "4. Spatial Filtering (ReplicationFilter)",
      "Enabling Iris (UE 5.7+)",
      "Step 1: Enable the Plugin",
      "Step 2: Update Project Configuration",
      "Step 3: Configure the Net Driver",
      "Step 4: Verify in Editor",
      "Key Concepts",
      "Object Replication",
      "Prioritization and Frequency",
      "Dormancy",
      "Performance Characteristics",
      "Migration Guide",
      "Common Pitfalls",
      "Version History",
      "Further Reading"
    ]
  },
  {
    "id": "unreal-arch/G39",
    "title": "Motion Design Plugin",
    "description": "The Motion Design plugin (originally codenamed \"Project Avalanche\") brings real-time motion graphics capabilities to ...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 8243,
    "sections": [
      "Core Concepts",
      "Cloners",
      "Effectors",
      "Effector Forces",
      "Sequencer Integration",
      "Material Designer",
      "Broadcast Graphics (Transition Logic)",
      "Typical Broadcast Workflow",
      "Setting Up Motion Design",
      "Enable the Plugin",
      "Switch to Motion Design Mode",
      "Recommended Project Settings",
      "Performance Tips",
      "Common Patterns",
      "Score Bug (Broadcast)",
      "Data Visualization Grid",
      "Title Sequence Reveal",
      "Version History",
      "Further Reading"
    ]
  },
  {
    "id": "unreal-arch/G3",
    "title": "G3 — UMG and Common UI in Unreal Engine 5",
    "description": "Unreal Motion Graphics (UMG) is UE5's UI framework — a retained-mode widget system for HUDs, menus, and in-world inte...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 19559,
    "sections": [
      "Why Two Systems?",
      "Part 1: UMG Fundamentals",
      "Creating Widgets in C++",
      "Widget Binding with `BindWidget`",
      "Widget Lifecycle",
      "Input Modes",
      "Part 2: Common UI",
      "Setup",
      "Core Classes",
      "Activatable Widgets",
      "Widget Stacks",
      "Layer System (Lyra Pattern)",
      "Common UI Buttons",
      "Tabs and Switchers",
      "Input Routing with CommonUI",
      "Debugging UMG and Common UI",
      "UMG Debugging",
      "Common UI Debugging",
      "Common Pitfalls",
      "Decision Table: When to Use What"
    ]
  },
  {
    "id": "unreal-arch/G40",
    "title": "Verse Programming Language",
    "description": "Verse is a new programming language developed by Epic Games for use in Unreal Editor for Fortnite (UEFN) and, eventua...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 10384,
    "sections": [
      "Why Verse?",
      "Language Fundamentals",
      "Variables and Types",
      "Core Types",
      "Functions and Effects",
      "Effect Specifiers",
      "Concurrency Model",
      "`sync` — Wait for All",
      "`race` — Wait for First",
      "`branch` — Fire and Forget",
      "`rush` — Wait for First, Let Others Finish",
      "Transactional Memory",
      "Classes and Interfaces",
      "UEFN Integration",
      "Devices",
      "UEFN API Modules",
      "2026 Updates (UEFN v39.50+)",
      "Verse vs. C++ vs. Blueprints",
      "Roadmap: Verse in Unreal Engine",
      "Best Practices",
      "Common Pitfalls",
      "Further Reading"
    ]
  },
  {
    "id": "unreal-arch/G41",
    "title": "Nanite Foliage & Procedural Vegetation Editor",
    "description": "Unreal Engine 5.7 introduces Nanite Foliage (Experimental) — a geometry rendering system purpose-built for dense, ani...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 8005,
    "sections": [
      "Nanite Foliage Overview (UE 5.7 — Experimental)",
      "Nanite Assemblies",
      "Nanite Skinning",
      "Nanite Voxel",
      "Procedural Vegetation Editor (PVE) — UE 5.7 Experimental",
      "Node Graph Architecture",
      "Typical Workflow",
      "Integration with PCG",
      "Quixel Megaplants",
      "Performance Considerations",
      "What Nanite Foliage Handles Well",
      "Current Limitations (Experimental — UE 5.7)",
      "Profiling Tips",
      "Project Setup",
      "Enabling Nanite Foliage",
      "Recommended Project Settings",
      "Best Practices",
      "Version History",
      "Further Reading"
    ]
  },
  {
    "id": "unreal-arch/G42",
    "title": "Pixel Streaming & Remote Rendering",
    "description": "Pixel Streaming renders your Unreal Engine application on a powerful server and streams the output to lightweight cli...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 11106,
    "sections": [
      "Architecture Overview",
      "Rendering Server",
      "Signaling Server",
      "Browser Client",
      "Supported Platforms (UE 5.5+)",
      "GPU Requirements",
      "Setup Guide",
      "1. Enable the Plugin",
      "2. Launch Arguments",
      "3. Start the Signaling Server",
      "4. Connect from a Browser",
      "Deployment Architectures",
      "Single Server (Development / Small Scale)",
      "Matchmaker (Multi-Session Scale-Out)",
      "Multi-Region (Production / Cloud Gaming)",
      "Performance Best Practices",
      "Frame Rate",
      "Encoding Settings",
      "Resolution & Quality",
      "Network",
      "Input Optimization",
      "Custom Frontend Integration",
      "Common Use Cases",
      "Troubleshooting",
      "Version History",
      "Further Reading"
    ]
  },
  {
    "id": "unreal-arch/G43",
    "title": "Source Control & Team Collaboration",
    "description": "Unreal Engine projects present unique version control challenges: multi-gigabyte binary assets (.uasset, .umap), merg...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 12771,
    "sections": [
      "Choosing a Version Control System",
      "Perforce (Helix Core)",
      "Git (with Git LFS)",
      "Decision Matrix",
      "Perforce Setup for Unreal Engine",
      "Stream Architecture",
      "Editor Integration",
      "Workspace Configuration",
      "Recommended Typemap",
      "Git + LFS Setup for Unreal Engine",
      ".gitattributes",
      ".gitignore Essentials",
      "File Locking Workflow",
      "Editor Integration (Git)",
      "Branching Strategies",
      "For Perforce",
      "For Git",
      "Epic's Collaboration Tools (Perforce Only)",
      "UnrealGameSync (UGS)",
      "Robomerge",
      "Horde",
      "Team Workflow Best Practices",
      "Asset Naming Conventions",
      "Reducing Merge Conflicts",
      "Code Review for UE Projects",
      "CI/CD Integration",
      "Build Automation",
      "Common CI Pipelines",
      "Version History",
      "Further Reading"
    ]
  },
  {
    "id": "unreal-arch/G44",
    "title": "Heterogeneous Volumes & Sparse Volume Textures",
    "description": "Unreal Engine's Heterogeneous Volumes system renders physically-based volumetric media — smoke, fire, clouds, fog, an...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 11201,
    "sections": [
      "Core Concepts",
      "Sparse Volume Textures (SVTs)",
      "Importing SVTs",
      "Rendering Approaches",
      "1. Heterogeneous Volume Actor (Recommended for General Use)",
      "2. Volumetric Fog Integration",
      "3. Volumetric Cloud Actor",
      "4. Path Tracer",
      "Niagara Fluids Integration",
      "Pipeline",
      "Creating a Niagara Fluid Effect",
      "Real-Time vs. Baked",
      "Volume-Domain Materials",
      "Basic Smoke Material",
      "Substrate Volume Materials (UE 5.7+)",
      "Performance Optimization",
      "Memory Management",
      "Rendering Cost",
      "Scalability",
      "Console Variables",
      "Common Patterns",
      "Environmental Smoke / Fog Banks",
      "Cinematic Explosions",
      "Interactive Fire (Runtime)",
      "Plugin Requirements",
      "Version History"
    ]
  },
  {
    "id": "unreal-arch/G45",
    "title": "PCG Production Workflow & Custom Nodes",
    "description": "The Procedural Content Generation (PCG) framework reached production-ready status in UE 5.7 after graduating from bet...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 13783,
    "sections": [
      "What Changed in 5.6 and 5.7",
      "UE 5.6 — Beta Exit",
      "UE 5.7 — Production-Ready",
      "PCG Editor Mode",
      "Built-in Tool Types",
      "Creating Custom Tools",
      "Custom Node Authoring",
      "Blueprint Custom Nodes",
      "C++ Custom Nodes",
      "Procedural Vegetation Editor (PVE)",
      "What PVE Does",
      "Workflow",
      "Production Patterns",
      "Pattern 1 — Landscape Biome System",
      "Pattern 2 — Road / River Networks with Spline Operators",
      "Pattern 3 — Runtime PCG Generation",
      "Performance Best Practices",
      "Graph Execution",
      "Data Volume",
      "Profiling",
      "Migration Notes",
      "Plugin Requirements",
      "Version History"
    ]
  },
  {
    "id": "unreal-arch/G46",
    "title": "Substrate Production Guide",
    "description": "Substrate reached production-ready status in UE 5.7 and is enabled by default for new projects. This guide builds on ...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 12672,
    "sections": [
      "Production Status Summary",
      "Operator Reference",
      "Substrate Slab BSDF",
      "Vertical Layer Operator",
      "Horizontal Blend Operator",
      "Coverage Weight Operator",
      "Add Operator",
      "Production Material Recipes",
      "Recipe 1 — Automotive Paint (3-Layer)",
      "Recipe 2 — Weathered Wood",
      "Recipe 3 — Character Skin",
      "Migration from Legacy Materials",
      "When to Migrate",
      "Migration Steps",
      "Automated Conversion",
      "Performance Considerations",
      "Cost Model",
      "Optimization Strategies",
      "Console Variables",
      "Substrate + Lumen Integration",
      "Common Pitfalls",
      "Resources"
    ]
  },
  {
    "id": "unreal-arch/G47",
    "title": "Nanite Tessellation & Displacement",
    "description": "Nanite Tessellation lets the engine subdivide low-polygon Nanite meshes at render time and apply displacement maps to...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 8686,
    "sections": [
      "When to Use Nanite Tessellation",
      "Setup: Engine Configuration",
      "DefaultEngine.ini",
      "Plugin Requirement",
      "Setup: Material Configuration",
      "Step-by-Step",
      "Material Graph Example",
      "Blending Multiple Layers",
      "Landscape-Specific Setup",
      "Common Pitfall",
      "Static Mesh Setup",
      "Per-Mesh Tessellation Control",
      "Performance Considerations",
      "GPU Cost Model",
      "Optimization Tips",
      "Console Variables for Debugging",
      "Limitations (as of UE 5.5)",
      "Quick-Start Checklist"
    ]
  },
  {
    "id": "unreal-arch/G48",
    "title": "Data Layers & Packed Level Actors",
    "description": "Data Layers and Packed Level Actors (PLAs) are two World Partition features that go beyond basic proximity-based stre...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 11558,
    "sections": [
      "Data Layers",
      "What They Are",
      "Layer Types",
      "Creating Data Layers",
      "How Data Layers Interact with Spatial Loading",
      "Runtime Control — C++",
      "Runtime Control — Blueprints",
      "EDataLayerRuntimeState Values",
      "Nesting and Hierarchies",
      "Packed Level Actors (PLAs)",
      "What They Are",
      "Why Use PLAs",
      "Creating a PLA",
      "PLAs and World Partition Streaming",
      "PLAs and HLODs",
      "Performance Tips",
      "Combining Data Layers and PLAs",
      "Common Pitfalls",
      "Quick-Start Checklist",
      "Data Layers",
      "Packed Level Actors"
    ]
  },
  {
    "id": "unreal-arch/G49",
    "title": "Virtual Shadow Maps",
    "description": "Virtual Shadow Maps (VSM) are UE5's shadow rendering system designed to pair with Nanite's virtualized geometry. VSM ...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 10624,
    "sections": [
      "How Virtual Shadow Maps Work",
      "Architecture Overview",
      "Two Shadow Map Types",
      "Caching System",
      "Performance Optimization",
      "Shadow Cache Invalidation Behavior",
      "World Position Offset (WPO) and Shadows",
      "Foliage Shadow Optimization",
      "LOD Shadow Optimization",
      "Console Variables Reference",
      "Core VSM Controls",
      "Resolution and Quality",
      "Debugging and Profiling",
      "Performance Tuning",
      "VSM and Nanite Integration",
      "Common Pitfalls",
      "Quick-Start Checklist"
    ]
  },
  {
    "id": "unreal-arch/G4",
    "title": "G4 — Animation System in Unreal Engine 5",
    "description": "Unreal Engine's animation system is built around Animation Blueprints — specialized Blueprints that drive a Skeletal ...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 20954,
    "sections": [
      "Architecture Overview",
      "Animation Blueprints",
      "Setting Up an Animation Blueprint",
      "The EventGraph: Reading Gameplay State",
      "State Machines",
      "Typical Locomotion State Machine",
      "Transition Rules Best Practices",
      "Blend Spaces",
      "1D Blend Space",
      "2D Blend Space",
      "Creating a Blend Space in C++ / Blueprint",
      "Animation Montages",
      "Key Concepts",
      "Playing a Montage from C++",
      "Animation Notifies",
      "Slot Nodes and Layering",
      "Basic Setup",
      "Layered Slots (Upper Body / Lower Body)",
      "Linked Anim Layers",
      "Performance Optimization",
      "Animation Budget",
      "Common Performance Pitfalls",
      "Common Pitfalls",
      "1. Montage Not Playing",
      "2. Root Motion Not Working",
      "3. Animation Pops on State Transitions",
      "4. Variables Not Updating in AnimGraph",
      "Further Reading"
    ]
  },
  {
    "id": "unreal-arch/G50",
    "title": "G50 — Sequencer & Cinematics",
    "description": "The Sequencer is Unreal Engine's non-linear cinematic editor for creating in-game cutscenes, trailers, and gameplay-d...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 11616,
    "sections": [
      "Core Concepts",
      "Level Sequences vs. Master Sequences",
      "Possessables vs. Spawnables",
      "C++ Playback API",
      "Module Dependencies",
      "Playing a Sequence at Runtime",
      "Controlling Playback",
      "Cine Camera Actor",
      "Key Properties",
      "Creating a Cine Camera in C++",
      "Event Tracks — Triggering Gameplay from Sequences",
      "Blueprint Workflow",
      "C++ Event Receiver",
      "Camera Cuts Track",
      "Movie Render Queue — Offline Rendering",
      "Key Classes",
      "Triggering MRQ from C++",
      "Sequencer Workflow Best Practices",
      "Organize with Master Sequences",
      "Use Sub-Sequences for Reusable Animation",
      "Cinematic Assembly Tips (UE 5.5+)",
      "Performance in Gameplay Sequences",
      "Common Pitfalls"
    ]
  },
  {
    "id": "unreal-arch/G51",
    "title": "G51 — Landscape & Terrain System",
    "description": "The Landscape system is Unreal Engine's primary terrain solution, designed for large outdoor environments. It uses a ...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 11095,
    "sections": [
      "Architecture Overview",
      "Key Classes",
      "Creating a Landscape",
      "Editor Workflow",
      "Sizing Guidelines",
      "Landscape Materials",
      "Material Setup",
      "Physical Materials per Layer",
      "Edit Layers (UE 5.5+ — Production Ready)",
      "Use Cases",
      "Enabling Edit Layers",
      "C++ API",
      "Landscape Splines",
      "Components",
      "Workflow",
      "Grass and Foliage on Landscape",
      "World Partition Integration",
      "Landscape LOD Settings",
      "Runtime Landscape Queries",
      "Height Queries",
      "Layer Weight Queries",
      "Performance Considerations",
      "Common Pitfalls"
    ]
  },
  {
    "id": "unreal-arch/G52",
    "title": "G52 — Water System & Buoyancy",
    "description": "The Water plugin is Unreal Engine's built-in system for creating oceans, lakes, rivers, and custom water bodies with ...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 12926,
    "sections": [
      "Architecture Overview",
      "Key Classes",
      "Enabling the Water Plugin",
      "Water Body Types",
      "Ocean",
      "Lake",
      "River",
      "Water Queries at Runtime",
      "Querying Water Height",
      "Checking if a Point Is Underwater",
      "Buoyancy Component",
      "Setup",
      "Buoyancy Parameters",
      "Pontoon Configuration",
      "Landscape Integration",
      "Enabling Automatic Landscape Modification",
      "Exclusion Volumes",
      "Water Rendering",
      "Water Mesh System",
      "Material Customization",
      "Post-Process for Underwater",
      "Networking Considerations",
      "Performance Considerations",
      "Common Pitfalls"
    ]
  },
  {
    "id": "unreal-arch/G53",
    "title": "G53 — Movie Render Graph",
    "description": "The Movie Render Graph (MRG) is Unreal Engine's node-based cinematic rendering pipeline, introduced experimentally in...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 9876,
    "sections": [
      "Why Movie Render Graph?",
      "Core Concepts",
      "Graph Assets",
      "Node Categories",
      "Execution Flow",
      "Setting Up a Basic Render",
      "Step 1 — Create the Graph Asset",
      "Step 2 — Configure Nodes",
      "Step 3 — Queue the Job",
      "Multi-Layer Rendering",
      "Render Layers with Stencil Mattes",
      "Buffer Outputs (UE 5.4+)",
      "Automation with C++ and Python",
      "C++ — Programmatic Queue Submission",
      "Python — Editor Utility Scripting",
      "UE 5.6+ Improvements",
      "Transitioning from Legacy MRQ Settings",
      "Best Practices",
      "Graph Organization",
      "Performance",
      "Pipeline Integration",
      "Common Pitfalls"
    ]
  },
  {
    "id": "unreal-arch/G54",
    "title": "G54 — Lumen Hardware Ray Tracing Optimization",
    "description": "Lumen is Unreal Engine 5's fully dynamic global illumination (GI) and reflections system. Starting with UE 5.5, Hardw...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 11601,
    "sections": [
      "Lumen Architecture Overview",
      "SWRT vs. HWRT",
      "Essential Console Variables",
      "Global Illumination (Screen Probe Gather)",
      "Reflections",
      "Hardware Ray Tracing Specific",
      "Scene Representation",
      "Optimization Strategies",
      "1. Profile Before Tuning",
      "2. Reduce Screen Probe Gather Cost",
      "3. Optimize Reflections",
      "4. Manage the Lumen Scene",
      "5. BVH Optimization",
      "Version-Specific Improvements",
      "UE 5.5",
      "UE 5.6",
      "UE 5.7",
      "Scalability Presets",
      "Debugging Lumen Issues",
      "Black or Noisy GI",
      "Light Leaking",
      "GI Flickering",
      "Performance Spikes",
      "Best Practices"
    ]
  },
  {
    "id": "unreal-arch/G55",
    "title": "G55 — Unreal Insights & Performance Profiling",
    "description": "Unreal Insights is Unreal Engine's standalone trace-based profiling and analysis tool. It replaces the legacy Unreal ...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 12018,
    "sections": [
      "Architecture",
      "Getting Started",
      "Recording a Trace",
      "Opening a Trace",
      "Trace Channels",
      "Channel Presets",
      "Custom Channel Combinations",
      "Analysis Views",
      "Timing View (Frame Timeline)",
      "Counters View",
      "Loading View",
      "Custom Instrumentation",
      "C++ Trace Scopes",
      "Custom Counters",
      "Bookmarks",
      "Profiling Workflows",
      "Workflow 1 — Hunting Frame Spikes",
      "Workflow 2 — Investigating Hitches",
      "Workflow 3 — Memory Budget Validation",
      "Workflow 4 — Loading Time Optimization",
      "Integration with Other Profiling Tools",
      "Best Practices",
      "Common Pitfalls"
    ]
  },
  {
    "id": "unreal-arch/G56",
    "title": "Nanite Skeletal Meshes",
    "description": "Nanite's virtualized geometry system, originally designed for static meshes, gained experimental skeletal mesh suppor...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 6580,
    "sections": [
      "Why It Matters",
      "Engine Version Requirements",
      "Enabling Nanite Skeletal Meshes",
      "Project Settings (DefaultEngine.ini)",
      "Per-Asset Setup",
      "C++ Runtime Check",
      "Performance Characteristics",
      "When Nanite Skeletal Meshes Excel",
      "When to Stick with Traditional LODs",
      "Displacement Tessellation on Skeletal Meshes (UE 5.5+)",
      "Material Setup",
      "Known Limitations (as of UE 5.7)",
      "Console Variables Reference",
      "Profiling Nanite Skeletal Meshes",
      "Migration Checklist",
      "Further Reading"
    ]
  },
  {
    "id": "unreal-arch/G57",
    "title": "Online Services v2 (OSSv2)",
    "description": "The Online Services framework (commonly called OSSv2) is Unreal Engine's modern replacement for the legacy Online Sub...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 9526,
    "sections": [
      "OSSv1 vs OSSv2 — Why the Rewrite?",
      "Architecture Overview",
      "Key Service Interfaces",
      "Getting Started",
      "Plugin Setup",
      "Configuration (DefaultEngine.ini)",
      "C++ — Authenticating a Player",
      "C++ — Creating a Lobby",
      "Migration from OSSv1",
      "Step-by-Step",
      "Key API Differences",
      "Lobbies vs Sessions",
      "Platform-Specific Backends",
      "Current Status (as of UE 5.7)",
      "Best Practices",
      "Further Reading"
    ]
  },
  {
    "id": "unreal-arch/G58",
    "title": "Multi-User Editing (Concert)",
    "description": "Multi-User Editing allows multiple Unreal Editor instances on different machines to connect to a shared session and c...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 8745,
    "sections": [
      "Architecture",
      "Client-Server Model",
      "Enabling the Plugin",
      "Starting a Session",
      "From the Editor UI",
      "From the Command Line (Headless Server)",
      "What Synchronizes in Real Time",
      "Immediate Sync (Transaction-Based)",
      "Deferred Sync (Requires Manual Persist)",
      "Network Configuration",
      "Default Settings",
      "Custom Configuration (DefaultEngine.ini)",
      "Remote / WAN Setup",
      "Collaboration Best Practices",
      "Divide the World",
      "Use Presence Awareness",
      "Session Management",
      "Conflict Resolution",
      "Sequencer Integration",
      "Limitations (as of UE 5.7)",
      "Console Commands",
      "Typical Workflow",
      "Further Reading"
    ]
  },
  {
    "id": "unreal-arch/G59",
    "title": "Dedicated Server Setup & Architecture",
    "description": "How to build, configure, and deploy an Unreal Engine dedicated server — covering source builds, target files, GameMod...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 9403,
    "sections": [
      "Prerequisites",
      "Source Build Checklist",
      "Server Target Configuration",
      "Creating the Server Target",
      "Build Target Types",
      "Server GameMode Architecture",
      "Conditional Compilation",
      "Network Configuration",
      "DefaultEngine.ini — Server Settings",
      "DefaultGame.ini — Map Configuration",
      "Packaging the Server",
      "From Editor (UE 5.5+)",
      "From Command Line (RunUAT)",
      "Cross-Compilation for Linux",
      "Running the Server",
      "Essential Server Command-Line Arguments",
      "Client Connection",
      "Production Deployment Patterns",
      "Containerized (Docker)",
      "Cloud Hosting Services",
      "Health Monitoring",
      "Debugging Tips",
      "Common Pitfalls"
    ]
  },
  {
    "id": "unreal-arch/G5",
    "title": "G5 — Networking & Replication",
    "description": "Unreal Engine has a built-in, server-authoritative networking model designed for real-time multiplayer games. This gu...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 17007,
    "sections": [
      "The Server-Authoritative Model",
      "Network Roles",
      "Property Replication",
      "Step 1: Mark Properties as Replicated",
      "Step 2: Register in GetLifetimeReplicatedProps",
      "Step 3: Handle OnRep Callbacks",
      "Common Replication Conditions",
      "Remote Procedure Calls (RPCs)",
      "Three RPC Types",
      "RPC Implementation",
      "Reliable vs. Unreliable",
      "Ownership",
      "Relevancy",
      "Key Relevancy Properties",
      "Custom Relevancy",
      "Net Dormancy",
      "Dormancy Modes",
      "Common Architecture Patterns",
      "Pattern 1: Client-Side Prediction",
      "Pattern 2: Gameplay State Replication (GameState + PlayerState)",
      "Pattern 3: Replicated Struct with Fast TArray Replication",
      "Optimization Checklist",
      "Quick Reference: Where Networking Logic Lives"
    ]
  },
  {
    "id": "unreal-arch/G60",
    "title": "Packaging, Cooking & Deployment Pipeline",
    "description": "End-to-end guide for building, cooking, packaging, and deploying Unreal Engine projects — covering build configuratio...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 10061,
    "sections": [
      "Build Configurations",
      "Choosing a Configuration",
      "The Cooking Pipeline",
      "What Cooking Does",
      "Cook Methods",
      "Iterative Cooking",
      "Zen Server (UE 5.5 — Production Ready)",
      "Packaging",
      "From the Editor",
      "From Command Line (RunUAT)",
      "Staging Directory Structure",
      "Pak Files and IoStore",
      "Pak Files (`.pak`)",
      "IoStore (`.ucas` / `.utoc`)",
      "Platform-Specific Packaging",
      "Windows",
      "Linux",
      "Android",
      "iOS",
      "Consoles (PlayStation, Xbox, Nintendo Switch)",
      "Build Size Optimization",
      "Strategies to Reduce Package Size",
      "Troubleshooting Common Issues",
      "\"Cook Failed\" Errors",
      "Build Configuration Mismatch (UE 5.5–5.6)",
      "\"Package Too Large\" for Mobile",
      "Slow Cook Times"
    ]
  },
  {
    "id": "unreal-arch/G61",
    "title": "Session Management & Matchmaking",
    "description": "How to implement multiplayer session creation, discovery, joining, and matchmaking using Unreal Engine's Online Subsy...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 16012,
    "sections": [
      "Architecture Overview",
      "Session Lifecycle",
      "1. Creating a Session",
      "2. Finding Sessions",
      "3. Joining a Session",
      "4. Session Destruction",
      "FOnlineSessionSettings — Key Properties",
      "Lobby System (UE 5.x)",
      "Lobby vs. Session",
      "Using Lobbies",
      "Platform Matchmaking",
      "Integration with Dedicated Servers",
      "Server-Side Session Creation",
      "AGameSession Override",
      "Online Subsystem Backends",
      "Configuration (DefaultEngine.ini)",
      "Backend Capabilities",
      "Blueprint Integration",
      "Delegate Management Best Practices",
      "Handling Failures",
      "Common Pitfalls"
    ]
  },
  {
    "id": "unreal-arch/G62",
    "title": "G62 — Gameplay Message Subsystem: Decoupled Event Messaging",
    "description": "The Gameplay Message Subsystem (UGameplayMessageSubsystem) is a World Subsystem that enables decoupled, tag-based com...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 11415,
    "sections": [
      "Architecture",
      "Core Concepts",
      "Enabling the Plugin",
      "Defining a Message Struct",
      "Broadcasting a Message (C++)",
      "Key Points",
      "Listening for Messages (C++)",
      "Listener Options",
      "Blueprint Usage",
      "Broadcasting",
      "Listening",
      "Production Patterns",
      "1. Tag Hierarchy for Filtering",
      "2. Avoid Heavy Work in Listeners",
      "3. Combine with Gameplay Ability System",
      "4. Networking Considerations",
      "Common Mistakes",
      "When to Use (vs. Alternatives)",
      "Version Notes"
    ]
  },
  {
    "id": "unreal-arch/G63",
    "title": "G63 — In-Editor Animation Authoring (UE 5.6+)",
    "description": "Unreal Engine 5.6 introduced a set of in-editor animation authoring tools that reduce the need for DCC round-tripping...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 11649,
    "sections": [
      "What Changed",
      "Morph Target Sculpting in the Skeletal Mesh Editor",
      "Overview",
      "Enabling the Feature",
      "Sculpting Workflow",
      "Available Brush Types",
      "Creating a New Morph Target",
      "Corrective Morph Targets",
      "UE 5.7 Improvements",
      "Sequencer Anim Mixer Plugin (UE 5.6+)",
      "Problem",
      "Solution",
      "Enabling",
      "How It Works",
      "Integration Points",
      "MetaHuman In-Editor Authoring (UE 5.6+)",
      "UE 5.7: MetaHuman Blueprint/Python API",
      "Blueprint API",
      "Production Workflow: DCC-Free Character Iteration",
      "When to Use In-Editor vs. DCC",
      "Common Pitfalls",
      "Version Compatibility"
    ]
  },
  {
    "id": "unreal-arch/G64",
    "title": "G64 — Pose Warping & Runtime IK Retargeting",
    "description": "Pose Warping dynamically adjusts a character's animated pose to align with capsule movement at runtime, reducing the ...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 13535,
    "sections": [
      "Why Pose Warping?",
      "Stride Warping",
      "How It Works",
      "Animation Blueprint Setup",
      "Best Practice: The 15–20% Rule",
      "C++ Access",
      "Orientation Warping",
      "How It Works",
      "AnimGraph Node Parameters",
      "Calculating Locomotion Angle",
      "Slope Warping",
      "Integration with Foot IK",
      "AnimGraph Layering",
      "Runtime IK Retargeting",
      "Overview",
      "Architecture",
      "Setting Up an IK Rig",
      "Runtime Retargeting API",
      "UE 5.7 LOD Optimization",
      "GASP Locomotion Architecture (UE 5.7)",
      "GASP 5.7 Additions",
      "Common Mistakes",
      "Version Notes"
    ]
  },
  {
    "id": "unreal-arch/G65",
    "title": "G65 — UMG Viewmodel (MVVM Pattern) in Unreal Engine 5",
    "description": "The UMG Viewmodel plugin is Epic's built-in implementation of the Model-View-ViewModel (MVVM) pattern for Unreal Engi...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 13632,
    "sections": [
      "Why MVVM for Game UI?",
      "Architecture Overview",
      "Plugin Setup",
      "1. Enable the Plugin",
      "2. Module Dependencies (C++)",
      "Creating a ViewModel (C++)",
      "Key Macros",
      "Creating a ViewModel (Blueprint)",
      "Binding Views to ViewModels",
      "In the Widget Blueprint Editor",
      "In C++",
      "ViewModel Lifecycle and Initialization",
      "Initialization Sources",
      "Global Viewmodel Collection",
      "Practical Patterns",
      "Pattern: Updating ViewModel from Gameplay",
      "Pattern: ViewModel Aggregating Multiple Sources",
      "Pattern: Child ViewModels",
      "Performance Considerations",
      "Common Pitfalls",
      "When to Use (and When Not To)",
      "Further Reading"
    ]
  },
  {
    "id": "unreal-arch/G66",
    "title": "G66 — Gameplay Interactions Plugin in Unreal Engine 5",
    "description": "The Gameplay Interactions plugin is Epic's experimental framework (UE 5.4+) for building contextual, data-driven inte...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 13321,
    "sections": [
      "Why a Unified Interaction System?",
      "Plugin Setup",
      "Enable Required Plugins",
      "Module Dependencies (C++)",
      "Core Concepts",
      "Interaction Definitions (Data Assets)",
      "Smart Object Slots as Interaction Points",
      "Interaction Flow",
      "Implementation Patterns",
      "Pattern: Player Interaction Component",
      "Pattern: Duration-Based (Hold) Interactions",
      "Pattern: AI-Driven Interactions with StateTree",
      "Interaction Types",
      "Instant Interactions",
      "Sustained Interactions",
      "Conditional Interactions",
      "UI Integration",
      "Networking Considerations",
      "Performance Tips",
      "Common Pitfalls",
      "Further Reading"
    ]
  },
  {
    "id": "unreal-arch/G67",
    "title": "G67 — Accessibility and Screen Reader Support in Unreal Engine 5",
    "description": "Unreal Engine includes built-in accessibility features that allow games to support screen readers, keyboard/gamepad-o...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 14671,
    "sections": [
      "Why Accessibility Matters for Games",
      "Architecture Overview",
      "Enabling Accessibility",
      "Project Settings",
      "Platform Notes",
      "Making UMG Widgets Accessible",
      "Per-Widget Settings (Designer)",
      "Example: Icon-Only Button",
      "Example: Health Bar",
      "Custom Accessible Widgets (C++)",
      "Keyboard and Gamepad Navigation",
      "Focus Navigation",
      "Tab Order and Focus Groups",
      "Skip Navigation for Decorative Elements",
      "Text and Visual Accessibility",
      "Font Scaling",
      "Colorblind Modes",
      "High Contrast and Icon Accessibility",
      "Audio and Haptic Accessibility",
      "Subtitle System",
      "Haptic Feedback as Audio Alternative",
      "Testing Accessibility",
      "Screen Reader Testing Checklist",
      "Automated Testing",
      "UE5 Widget Reflector",
      "Shipping Accessibility Settings",
      "Common Pitfalls",
      "Further Reading"
    ]
  },
  {
    "id": "unreal-arch/G68",
    "title": "Mocap Manager & Performance Capture Workflow",
    "description": "The Mocap Manager is a first-party plugin introduced in UE 5.6 as part of the Performance Capture Workflow Plugin. It...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 8588,
    "sections": [
      "Plugin Activation",
      "Core Concepts",
      "1. Sessions",
      "2. Performers & Characters",
      "3. Live Link Subjects",
      "Typical Workflow",
      "Step 1 — Connect Live Link Sources",
      "Step 2 — Configure Performer-to-Character Mapping",
      "Step 3 — Preview & Calibrate",
      "Step 4 — Record with Take Recorder",
      "Step 5 — Edit in Sequencer",
      "C++ Integration Points",
      "Adding a Custom Live Link Source",
      "Driving a Character from C++",
      "Blueprint Workflow",
      "Performance Considerations",
      "Troubleshooting",
      "Version History",
      "Next Steps"
    ]
  },
  {
    "id": "unreal-arch/G69",
    "title": "Fast Geometry Streaming",
    "description": "Fast Geometry Streaming (FastGeo) is an experimental plugin introduced in UE 5.6, developed as a collaboration betwee...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 9627,
    "sections": [
      "What Problem Does FastGeo Solve?",
      "How It Works",
      "Architecture Overview",
      "What Qualifies for FastGeo?",
      "Enabling FastGeo",
      "Step 1 — Enable the Plugin",
      "Step 2 — Project Settings",
      "Step 3 — Console Variables",
      "Step 4 — Cook & Package",
      "World Partition Integration",
      "C++ Integration",
      "Streaming Source Component",
      "Querying FastGeo Status",
      "Debugging & Profiling",
      "Visual Debug Tools",
      "Unreal Insights",
      "Performance Impact",
      "Limitations & Caveats",
      "Best Practices",
      "Version History",
      "Next Steps"
    ]
  },
  {
    "id": "unreal-arch/G6",
    "title": "G6 — Physics & Collision in Unreal Engine 5",
    "description": "Unreal Engine 5 uses the Chaos physics engine as its default simulation backend, replacing PhysX from UE4. Chaos powe...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 14074,
    "sections": [
      "Physics Engine Options in UE5",
      "Core Concepts",
      "Physics Bodies (Body Instances)",
      "When to Enable CCD",
      "Collision System",
      "Collision Channels (Object Types & Trace Channels)",
      "Custom Collision Channels",
      "Collision Profiles (Presets)",
      "Line Traces and Sweeps",
      "Line Trace (Raycast)",
      "Shape Sweep (Sphere / Capsule / Box)",
      "Trace in Blueprints",
      "Physics Materials",
      "Physics Constraints",
      "Chaos Destruction",
      "Setup Pipeline",
      "Applying Damage",
      "Destruction Performance Tips",
      "Common Pitfalls",
      "Quick Reference: Collision Setup Checklist"
    ]
  },
  {
    "id": "unreal-arch/G70",
    "title": "UE 5.7 Production-Ready Systems: PCG, Substrate & Nanite Foliage",
    "description": "Unreal Engine 5.7 (released December 2025) marks a major milestone: three foundational systems — PCG, Substrate, and ...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 12040,
    "sections": [
      "System Status Overview",
      "1. PCG Framework — Production-Ready",
      "What Changed in 5.7",
      "Migration from 5.5/5.6",
      "C++ API Changes",
      "Best Practices",
      "2. Substrate — Production-Ready",
      "What Changed in 5.7",
      "Enabling Substrate",
      "Material Authoring",
      "Migration from Legacy Materials",
      "Performance Considerations",
      "3. Nanite Foliage — Experimental (Major Update)",
      "What's New in 5.7",
      "Enabling Nanite Foliage",
      "Integration with PCG",
      "Current Limitations (Experimental)",
      "Using All Three Together: Open-World Workflow",
      "Environment Art Pipeline",
      "Performance Budget (60 FPS target, current-gen)",
      "Migration Checklist: Upgrading to UE 5.7",
      "Version History",
      "Next Steps"
    ]
  },
  {
    "id": "unreal-arch/G71",
    "title": "G71 — Geometry Script & Procedural Mesh Generation",
    "description": "Geometry Script is an Unreal Engine plugin providing 150+ Blueprint-exposed functions for procedural mesh generation,...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 12364,
    "sections": [
      "Plugin Architecture",
      "Key Classes",
      "Enabling the Plugin",
      "Blueprint Workflow",
      "AGeneratedDynamicMeshActor",
      "Triggering Rebuilds",
      "C++ Workflow",
      "Direct API Usage",
      "Key Function Library Headers",
      "Boolean Operations",
      "Runtime Procedural Generation",
      "Enabling Runtime Support",
      "Runtime Best Practices",
      "Converting to Static Mesh",
      "Integration with PCG Framework",
      "Limitations",
      "Common Patterns",
      "Procedural Building Generator",
      "Terrain Deformation Tool",
      "Mesh Merging Utility",
      "Version History"
    ]
  },
  {
    "id": "unreal-arch/G72",
    "title": "G72 — Unreal Animation Framework (UAF / AnimNext)",
    "description": "The Unreal Animation Framework (UAF), also known as AnimNext, is Epic's next-generation animation system designed to ...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 11970,
    "sections": [
      "Why UAF?",
      "Core Architecture",
      "Key Components",
      "Module System",
      "Core Modules",
      "Module Architecture",
      "Workspace Editor",
      "UAF vs. Animation Blueprints",
      "Integration with Mover 2.0",
      "Getting Started (UE 5.7)",
      "Enable Required Plugins",
      "Basic Setup Steps",
      "Exploring the Game Animation Sample",
      "Migration Planning",
      "Preparing Now",
      "Current Limitations (UE 5.7)",
      "Resources"
    ]
  },
  {
    "id": "unreal-arch/G73",
    "title": "G73 — UE 5.6 Production Workflow Updates",
    "description": "Unreal Engine 5.6 is a significant production-focused release that embeds MetaHuman Creator directly in the editor, a...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 9057,
    "sections": [
      "MetaHuman Creator — Now Embedded in Editor",
      "What Changed",
      "Key Features",
      "Architecture Notes",
      "Migration from 5.5",
      "Sequencer Improvements",
      "Sequencer Navigation Tool",
      "Real-Time Audio Scrubbing",
      "Relative Audio Scaling (Experimental)",
      "Curve Editor Improvements",
      "Animation Workflow Updates",
      "Motion Trail Editing",
      "In-Editor Morph Target Sculpting",
      "PCG Biome Core v2",
      "Per-Biome Blending",
      "Biome Layering",
      "Multithreaded PCG Execution",
      "GPU Performance: Open-World 60 Hz",
      "Instance Management Improvements",
      "CPU Overhead Reduction",
      "Benchmarks (Epic's cited numbers)",
      "Upgrade Checklist: 5.5 → 5.6",
      "Version Context"
    ]
  },
  {
    "id": "unreal-arch/G74",
    "title": "Horde & UBA: Distributed Build System",
    "description": "Horde is Epic's scalable, cloud-ready distributed build framework for Unreal Engine projects. Paired with the Unreal ...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 7780,
    "sections": [
      "Architecture Overview",
      "Enabling UBA for Local Distributed Compilation",
      "Step 1: Enable the UBA Executor",
      "Step 2: Configure Engine.ini (UE 5.5+)",
      "BuildGraph Integration",
      "Setting Up a Horde Server",
      "Building the Server Image",
      "Docker Deployment (UE 5.5+)",
      "Agent Registration",
      "What UBA Distributes",
      "Performance Expectations",
      "Troubleshooting",
      "Common Issues",
      "Visualizer",
      "Best Practices",
      "Cloud Deployment",
      "Version Notes"
    ]
  },
  {
    "id": "unreal-arch/G75",
    "title": "Virtual Production with nDisplay & ICVFX",
    "description": "Unreal Engine's Virtual Production toolkit enables real-time rendering on LED volumes for film, broadcast, and live e...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 9029,
    "sections": [
      "Core Concepts",
      "nDisplay",
      "ICVFX (In-Camera VFX)",
      "Architecture Diagram",
      "Key Classes and Components",
      "ADisplayClusterRootActor",
      "UDisplayClusterICVFXCameraComponent",
      "Switchboard",
      "Setup Workflow",
      "1. Enable Required Plugins",
      "2. Create nDisplay Configuration",
      "3. Configure ICVFX Camera",
      "4. LiveLink Camera Tracking",
      "5. Launch via Switchboard",
      "ICVFX Editor (UE 5.1+)",
      "Light Cards",
      "Multi-GPU and Performance",
      "Rendering Pipeline",
      "Performance Targets",
      "Optimization Strategies",
      "UE Version Highlights",
      "Common Pitfalls"
    ]
  },
  {
    "id": "unreal-arch/G76",
    "title": "Chaos Vehicles System",
    "description": "The Chaos Vehicles plugin provides a full vehicle physics simulation built on Unreal's Chaos physics engine. It repla...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 9964,
    "sections": [
      "Architecture Overview",
      "Getting Started",
      "Enable the Plugin",
      "Create a Vehicle Blueprint",
      "AWheeledVehiclePawn (C++)",
      "Core Components",
      "UChaosWheeledVehicleMovementComponent",
      "UChaosVehicleWheel",
      "Suspension Tuning",
      "Input Setup",
      "Chaos Modular Vehicles (UE 5.5+)",
      "Key Differences from Classic Chaos Vehicles",
      "Modular Setup",
      "Physical Surfaces & Tire Friction",
      "Networking",
      "Debugging & Profiling",
      "Console Commands",
      "Common Issues",
      "Version History"
    ]
  },
  {
    "id": "unreal-arch/G7",
    "title": "Audio System (MetaSounds & Sound Management)",
    "description": "Unreal Engine 5's audio system centers on MetaSounds — a node-based DSP (Digital Signal Processing) graph that replac...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 12055,
    "sections": [
      "Audio Architecture Overview",
      "MetaSounds Fundamentals",
      "Core Concepts",
      "Key Interfaces",
      "Building a Basic MetaSound",
      "Randomization Pattern",
      "Spatial Audio and Attenuation",
      "Sound Attenuation Settings",
      "Applying Attenuation in C++",
      "Persistent Audio with AudioComponent",
      "Setting MetaSound Parameters from C++",
      "Sound Classes and Sound Mixes",
      "Sound Classes",
      "Sound Mixes",
      "Sound Concurrency",
      "MetaSounds Pages (UE 5.5+)",
      "Performance Best Practices",
      "1. Voice Budget",
      "2. Virtualization",
      "3. Audio Thread Performance",
      "4. Attenuation Optimization",
      "5. Preloading",
      "Common Pitfalls",
      "Further Reading"
    ]
  },
  {
    "id": "unreal-arch/G8",
    "title": "Save / Load System",
    "description": "Unreal Engine provides a built-in save system through the USaveGame class and UGameplayStatics helper functions. This...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 13954,
    "sections": [
      "Architecture Overview",
      "Basic USaveGame Setup",
      "1. Define Your Save Game Class",
      "2. Synchronous Save and Load",
      "3. Asynchronous Save and Load",
      "GameInstance Subsystem Pattern",
      "Slot Management",
      "Multiple Save Slots",
      "Backup Slot Pattern",
      "Save Versioning and Migration",
      "Chunked Saves for Open-World Games",
      "Multiplayer Considerations",
      "Common Pitfalls",
      "Further Reading"
    ]
  },
  {
    "id": "unreal-arch/G9",
    "title": "G9 — Rendering with Nanite & Lumen",
    "description": "Nanite and Lumen are UE5's two flagship rendering technologies. Nanite is a virtualized geometry system that renders ...",
    "category": "guide",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 13465,
    "sections": [
      "Nanite — Virtualized Geometry",
      "What Nanite Does",
      "When to Use Nanite",
      "Enabling Nanite on a Static Mesh",
      "Querying Nanite Status at Runtime",
      "Nanite Material Constraints",
      "Lumen — Dynamic Global Illumination & Reflections",
      "What Lumen Does",
      "Lumen Modes",
      "Material Best Practices for Lumen",
      "C++ — Controlling Lumen at Runtime",
      "Virtual Shadow Maps",
      "Profiling and Optimization",
      "Essential Console Commands",
      "Optimization Strategies",
      "Common Pitfalls",
      "1. Nanite mesh appears invisible",
      "2. Dark or incorrect GI",
      "3. Lumen \"light leaks\" through thin walls",
      "4. Shadow flickering / noise",
      "5. Performance regression on older hardware",
      "Platform Support Matrix",
      "Further Reading"
    ]
  },
  {
    "id": "unreal-arch/R1",
    "title": "R1 — Unreal Engine 5 Capability Matrix",
    "description": "A quick-reference table of Unreal Engine 5's major subsystems, the recommended approach for each, legacy alternatives...",
    "category": "reference",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 12133,
    "sections": [
      "Subsystem Decision Matrix",
      "Programming Model",
      "Rendering",
      "World & Level Design",
      "Input",
      "Physics & Collision",
      "Animation",
      "Audio",
      "Networking & Multiplayer",
      "UI",
      "Save / Persistence",
      "Asset Management",
      "Platform Support (UE 5.5)",
      "Feature Availability by UE5 Version",
      "Migration Guide: UE4 → UE5"
    ]
  },
  {
    "id": "unreal-arch/R2",
    "title": "R2 — Unreal Engine 5 Module & Plugin Stack",
    "description": "A curated map of Unreal Engine 5's module and plugin ecosystem — built-in subsystems, engine plugins, and essential t...",
    "category": "reference",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 13857,
    "sections": [
      "How UE5's Module System Works",
      "Core Engine Modules",
      "Gameplay Foundation",
      "Physics & Collision",
      "Rendering",
      "UI",
      "Audio",
      "Networking",
      "Animation",
      "Sequencer & Cinematics",
      "Essential Engine Plugins",
      "Highly Recommended",
      "Specialized",
      "Fab Marketplace — Essential Third-Party Plugins",
      "Open-Source & Community Tools",
      ".Build.cs Quick Reference",
      "Decision Flowchart: Choosing Modules & Plugins",
      "Tips for Managing Dependencies"
    ]
  },
  {
    "id": "unreal-arch-rules",
    "title": "Unreal Engine 5 — AI Code Generation Rules",
    "description": "Engine-specific rules for Unreal Engine 5.4+ projects using C++ and Blueprints. These supplement the engine-agnostic ...",
    "category": "reference",
    "module": "unreal-arch",
    "engine": "Unreal Engine",
    "tier": "pro",
    "sizeBytes": 13034,
    "sections": [
      "⚠️ UE4 vs UE5 — Critical Differences",
      "Key API Changes",
      "Deprecated Systems to Avoid",
      "Architecture Rules",
      "The Gameplay Framework",
      "Where to Put Logic — Decision Table",
      "Project Structure Conventions",
      "C++ / Blueprint Division of Labor",
      "Use C++ For",
      "Use Blueprints For",
      "The C++ Base + Blueprint Child Pattern",
      "Enhanced Input System Rules",
      "Memory & Reference Rules",
      "Soft References for Content",
      "UPROPERTY Is Mandatory",
      "Common Pitfalls to Avoid"
    ]
  }
]