bmad-method 6.0.0-alpha.17 → 6.0.0-alpha.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/CHANGELOG.md +117 -0
  2. package/package.json +1 -1
  3. package/src/modules/bmgd/_module-installer/installer.js +160 -0
  4. package/src/modules/bmgd/_module-installer/platform-specifics/claude-code.js +23 -0
  5. package/src/modules/bmgd/_module-installer/platform-specifics/windsurf.js +18 -0
  6. package/src/modules/bmgd/agents/game-architect.agent.yaml +23 -8
  7. package/src/modules/bmgd/agents/game-designer.agent.yaml +38 -18
  8. package/src/modules/bmgd/agents/game-dev.agent.yaml +30 -14
  9. package/src/modules/bmgd/agents/game-qa.agent.yaml +64 -0
  10. package/src/modules/bmgd/agents/game-scrum-master.agent.yaml +27 -39
  11. package/src/modules/bmgd/agents/game-solo-dev.agent.yaml +56 -0
  12. package/src/modules/bmgd/docs/README.md +180 -0
  13. package/src/modules/bmgd/docs/agents-guide.md +407 -0
  14. package/src/modules/bmgd/docs/game-types-guide.md +503 -0
  15. package/src/modules/bmgd/docs/glossary.md +294 -0
  16. package/src/modules/bmgd/docs/quick-flow-guide.md +288 -0
  17. package/src/modules/bmgd/docs/quick-start.md +250 -0
  18. package/src/modules/bmgd/docs/troubleshooting.md +259 -0
  19. package/src/modules/bmgd/docs/workflow-overview.jpg +0 -0
  20. package/src/modules/bmgd/docs/workflows-guide.md +463 -0
  21. package/src/modules/bmgd/gametest/knowledge/balance-testing.md +220 -0
  22. package/src/modules/bmgd/gametest/knowledge/certification-testing.md +319 -0
  23. package/src/modules/bmgd/gametest/knowledge/compatibility-testing.md +228 -0
  24. package/src/modules/bmgd/gametest/knowledge/godot-testing.md +376 -0
  25. package/src/modules/bmgd/gametest/knowledge/input-testing.md +315 -0
  26. package/src/modules/bmgd/gametest/knowledge/localization-testing.md +304 -0
  27. package/src/modules/bmgd/gametest/knowledge/multiplayer-testing.md +322 -0
  28. package/src/modules/bmgd/gametest/knowledge/performance-testing.md +204 -0
  29. package/src/modules/bmgd/gametest/knowledge/playtesting.md +384 -0
  30. package/src/modules/bmgd/gametest/knowledge/qa-automation.md +190 -0
  31. package/src/modules/bmgd/gametest/knowledge/regression-testing.md +280 -0
  32. package/src/modules/bmgd/gametest/knowledge/save-testing.md +280 -0
  33. package/src/modules/bmgd/gametest/knowledge/smoke-testing.md +404 -0
  34. package/src/modules/bmgd/gametest/knowledge/test-priorities.md +271 -0
  35. package/src/modules/bmgd/gametest/knowledge/unity-testing.md +383 -0
  36. package/src/modules/bmgd/gametest/knowledge/unreal-testing.md +388 -0
  37. package/src/modules/bmgd/gametest/qa-index.csv +17 -0
  38. package/src/modules/bmgd/module.yaml +25 -9
  39. package/src/modules/bmgd/teams/default-party.csv +2 -0
  40. package/src/modules/bmgd/teams/team-gamedev.yaml +12 -1
  41. package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/steps/step-01-init.md +164 -0
  42. package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/steps/step-02-context.md +210 -0
  43. package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/steps/step-03-ideation.md +289 -0
  44. package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/steps/step-04-complete.md +275 -0
  45. package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/workflow.md +49 -0
  46. package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/workflow.yaml +29 -8
  47. package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-01-init.md +223 -0
  48. package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-01b-continue.md +151 -0
  49. package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-02-vision.md +218 -0
  50. package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-03-market.md +218 -0
  51. package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-04-fundamentals.md +231 -0
  52. package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-05-scope.md +242 -0
  53. package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-06-references.md +224 -0
  54. package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-07-content.md +282 -0
  55. package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-08-complete.md +296 -0
  56. package/src/modules/bmgd/workflows/1-preproduction/game-brief/workflow.md +62 -0
  57. package/src/modules/bmgd/workflows/1-preproduction/game-brief/workflow.yaml +40 -9
  58. package/src/modules/bmgd/workflows/2-design/gdd/steps/step-01-init.md +248 -0
  59. package/src/modules/bmgd/workflows/2-design/gdd/steps/step-01b-continue.md +173 -0
  60. package/src/modules/bmgd/workflows/2-design/gdd/steps/step-02-context.md +332 -0
  61. package/src/modules/bmgd/workflows/2-design/gdd/steps/step-03-platforms.md +245 -0
  62. package/src/modules/bmgd/workflows/2-design/gdd/steps/step-04-vision.md +229 -0
  63. package/src/modules/bmgd/workflows/2-design/gdd/steps/step-05-core-gameplay.md +258 -0
  64. package/src/modules/bmgd/workflows/2-design/gdd/steps/step-06-mechanics.md +249 -0
  65. package/src/modules/bmgd/workflows/2-design/gdd/steps/step-07-game-type.md +266 -0
  66. package/src/modules/bmgd/workflows/2-design/gdd/steps/step-08-progression.md +272 -0
  67. package/src/modules/bmgd/workflows/2-design/gdd/steps/step-09-levels.md +264 -0
  68. package/src/modules/bmgd/workflows/2-design/gdd/steps/step-10-art-audio.md +255 -0
  69. package/src/modules/bmgd/workflows/2-design/gdd/steps/step-11-technical.md +275 -0
  70. package/src/modules/bmgd/workflows/2-design/gdd/steps/step-12-epics.md +284 -0
  71. package/src/modules/bmgd/workflows/2-design/gdd/steps/step-13-metrics.md +250 -0
  72. package/src/modules/bmgd/workflows/2-design/gdd/steps/step-14-complete.md +335 -0
  73. package/src/modules/bmgd/workflows/2-design/gdd/workflow.md +61 -0
  74. package/src/modules/bmgd/workflows/2-design/gdd/workflow.yaml +27 -7
  75. package/src/modules/bmgd/workflows/2-design/narrative/steps/step-01-init.md +228 -0
  76. package/src/modules/bmgd/workflows/2-design/narrative/steps/step-01b-continue.md +163 -0
  77. package/src/modules/bmgd/workflows/2-design/narrative/steps/step-02-foundation.md +262 -0
  78. package/src/modules/bmgd/workflows/2-design/narrative/steps/step-03-story.md +238 -0
  79. package/src/modules/bmgd/workflows/2-design/narrative/steps/step-04-characters.md +297 -0
  80. package/src/modules/bmgd/workflows/2-design/narrative/steps/step-05-world.md +262 -0
  81. package/src/modules/bmgd/workflows/2-design/narrative/steps/step-06-dialogue.md +250 -0
  82. package/src/modules/bmgd/workflows/2-design/narrative/steps/step-07-environmental.md +244 -0
  83. package/src/modules/bmgd/workflows/2-design/narrative/steps/step-08-delivery.md +264 -0
  84. package/src/modules/bmgd/workflows/2-design/narrative/steps/step-09-integration.md +254 -0
  85. package/src/modules/bmgd/workflows/2-design/narrative/steps/step-10-production.md +262 -0
  86. package/src/modules/bmgd/workflows/2-design/narrative/steps/step-11-complete.md +331 -0
  87. package/src/modules/bmgd/workflows/2-design/narrative/workflow.md +57 -0
  88. package/src/modules/bmgd/workflows/2-design/narrative/workflow.yaml +53 -8
  89. package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-01-init.md +223 -0
  90. package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-01b-continue.md +153 -0
  91. package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-02-context.md +262 -0
  92. package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-03-starter.md +290 -0
  93. package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-04-decisions.md +300 -0
  94. package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-05-crosscutting.md +319 -0
  95. package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-06-structure.md +304 -0
  96. package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-07-patterns.md +349 -0
  97. package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-08-validation.md +293 -0
  98. package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-09-complete.md +302 -0
  99. package/src/modules/bmgd/workflows/3-technical/game-architecture/workflow.md +55 -0
  100. package/src/modules/bmgd/workflows/3-technical/game-architecture/workflow.yaml +50 -21
  101. package/src/modules/bmgd/workflows/4-production/code-review/checklist.md +23 -0
  102. package/src/modules/bmgd/workflows/4-production/code-review/instructions.xml +225 -0
  103. package/src/modules/bmgd/workflows/4-production/code-review/workflow.yaml +18 -15
  104. package/src/modules/bmgd/workflows/4-production/correct-course/checklist.md +1 -1
  105. package/src/modules/bmgd/workflows/4-production/correct-course/instructions.md +1 -1
  106. package/src/modules/bmgd/workflows/4-production/correct-course/workflow.yaml +11 -6
  107. package/src/modules/bmgd/workflows/4-production/create-story/checklist.md +332 -214
  108. package/src/modules/bmgd/workflows/4-production/create-story/instructions.xml +298 -0
  109. package/src/modules/bmgd/workflows/4-production/create-story/template.md +3 -5
  110. package/src/modules/bmgd/workflows/4-production/create-story/workflow.yaml +12 -7
  111. package/src/modules/bmgd/workflows/4-production/dev-story/checklist.md +65 -23
  112. package/src/modules/bmgd/workflows/4-production/dev-story/instructions.xml +409 -0
  113. package/src/modules/bmgd/workflows/4-production/dev-story/workflow.yaml +13 -3
  114. package/src/modules/bmgd/workflows/4-production/retrospective/instructions.md +4 -4
  115. package/src/modules/bmgd/workflows/4-production/retrospective/workflow.yaml +12 -7
  116. package/src/modules/bmgd/workflows/4-production/sprint-planning/instructions.md +32 -41
  117. package/src/modules/bmgd/workflows/4-production/sprint-planning/sprint-status-template.yaml +13 -13
  118. package/src/modules/bmgd/workflows/4-production/sprint-planning/workflow.yaml +6 -1
  119. package/src/modules/bmgd/workflows/4-production/sprint-status/instructions.md +229 -0
  120. package/src/modules/bmgd/workflows/4-production/sprint-status/workflow.yaml +35 -0
  121. package/src/modules/bmgd/workflows/bmgd-quick-flow/create-tech-spec/instructions.md +140 -0
  122. package/src/modules/bmgd/workflows/bmgd-quick-flow/create-tech-spec/workflow.yaml +27 -0
  123. package/src/modules/bmgd/workflows/bmgd-quick-flow/quick-dev/checklist.md +37 -0
  124. package/src/modules/bmgd/workflows/bmgd-quick-flow/quick-dev/instructions.md +220 -0
  125. package/src/modules/bmgd/workflows/bmgd-quick-flow/quick-dev/workflow.yaml +45 -0
  126. package/src/modules/bmgd/workflows/bmgd-quick-flow/quick-prototype/checklist.md +26 -0
  127. package/src/modules/bmgd/workflows/bmgd-quick-flow/quick-prototype/instructions.md +156 -0
  128. package/src/modules/bmgd/workflows/bmgd-quick-flow/quick-prototype/workflow.yaml +36 -0
  129. package/src/modules/bmgd/workflows/gametest/automate/checklist.md +93 -0
  130. package/src/modules/bmgd/workflows/gametest/automate/instructions.md +317 -0
  131. package/src/modules/bmgd/workflows/gametest/automate/workflow.yaml +50 -0
  132. package/src/modules/bmgd/workflows/gametest/performance/checklist.md +96 -0
  133. package/src/modules/bmgd/workflows/gametest/performance/instructions.md +323 -0
  134. package/src/modules/bmgd/workflows/gametest/performance/performance-template.md +256 -0
  135. package/src/modules/bmgd/workflows/gametest/performance/workflow.yaml +48 -0
  136. package/src/modules/bmgd/workflows/gametest/playtest-plan/checklist.md +93 -0
  137. package/src/modules/bmgd/workflows/gametest/playtest-plan/instructions.md +297 -0
  138. package/src/modules/bmgd/workflows/gametest/playtest-plan/playtest-template.md +208 -0
  139. package/src/modules/bmgd/workflows/gametest/playtest-plan/workflow.yaml +59 -0
  140. package/src/modules/bmgd/workflows/gametest/test-design/checklist.md +98 -0
  141. package/src/modules/bmgd/workflows/gametest/test-design/instructions.md +280 -0
  142. package/src/modules/bmgd/workflows/gametest/test-design/test-design-template.md +205 -0
  143. package/src/modules/bmgd/workflows/gametest/test-design/workflow.yaml +47 -0
  144. package/src/modules/bmgd/workflows/gametest/test-framework/checklist.md +103 -0
  145. package/src/modules/bmgd/workflows/gametest/test-framework/instructions.md +348 -0
  146. package/src/modules/bmgd/workflows/gametest/test-framework/workflow.yaml +48 -0
  147. package/src/modules/bmgd/workflows/gametest/test-review/checklist.md +87 -0
  148. package/src/modules/bmgd/workflows/gametest/test-review/instructions.md +272 -0
  149. package/src/modules/bmgd/workflows/gametest/test-review/test-review-template.md +203 -0
  150. package/src/modules/bmgd/workflows/gametest/test-review/workflow.yaml +48 -0
  151. package/src/modules/bmgd/workflows/workflow-status/init/instructions.md +299 -0
  152. package/src/modules/bmgd/workflows/workflow-status/init/workflow.yaml +29 -0
  153. package/src/modules/bmgd/workflows/workflow-status/instructions.md +395 -0
  154. package/src/modules/bmgd/workflows/workflow-status/paths/gamedev-brownfield.yaml +65 -0
  155. package/src/modules/bmgd/workflows/workflow-status/paths/gamedev-greenfield.yaml +71 -0
  156. package/src/modules/bmgd/workflows/workflow-status/paths/quickflow-brownfield.yaml +29 -0
  157. package/src/modules/bmgd/workflows/workflow-status/paths/quickflow-greenfield.yaml +39 -0
  158. package/src/modules/bmgd/workflows/workflow-status/project-levels.yaml +63 -0
  159. package/src/modules/bmgd/workflows/workflow-status/workflow-status-template.yaml +24 -0
  160. package/src/modules/bmgd/workflows/workflow-status/workflow.yaml +30 -0
  161. package/tools/cli/commands/install.js +9 -0
  162. package/tools/cli/installers/lib/core/installer.js +140 -592
  163. package/tools/cli/installers/lib/modules/manager.js +15 -3
  164. package/tools/cli/lib/agent/compiler.js +99 -0
  165. package/tools/cli/lib/ui.js +78 -27
  166. package/src/modules/bmgd/workflows/2-design/gdd/instructions-gdd.md +0 -502
  167. package/src/modules/bmgd/workflows/4-production/code-review/instructions.md +0 -398
  168. package/src/modules/bmgd/workflows/4-production/create-story/instructions.md +0 -256
  169. package/src/modules/bmgd/workflows/4-production/dev-story/instructions.md +0 -267
  170. package/src/modules/bmgd/workflows/4-production/epic-tech-context/checklist.md +0 -17
  171. package/src/modules/bmgd/workflows/4-production/epic-tech-context/instructions.md +0 -164
  172. package/src/modules/bmgd/workflows/4-production/epic-tech-context/template.md +0 -76
  173. package/src/modules/bmgd/workflows/4-production/epic-tech-context/workflow.yaml +0 -58
  174. package/src/modules/bmgd/workflows/4-production/story-context/checklist.md +0 -16
  175. package/src/modules/bmgd/workflows/4-production/story-context/context-template.xml +0 -34
  176. package/src/modules/bmgd/workflows/4-production/story-context/instructions.md +0 -209
  177. package/src/modules/bmgd/workflows/4-production/story-context/workflow.yaml +0 -63
  178. package/src/modules/bmgd/workflows/4-production/story-done/instructions.md +0 -111
  179. package/src/modules/bmgd/workflows/4-production/story-done/workflow.yaml +0 -28
  180. package/src/modules/bmgd/workflows/4-production/story-ready/instructions.md +0 -117
  181. package/src/modules/bmgd/workflows/4-production/story-ready/workflow.yaml +0 -25
  182. /package/src/modules/bmgd/workflows/1-preproduction/game-brief/{template.md → templates/game-brief-template.md} +0 -0
  183. /package/src/modules/bmgd/workflows/2-design/gdd/{gdd-template.md → templates/gdd-template.md} +0 -0
  184. /package/src/modules/bmgd/workflows/2-design/narrative/{narrative-template.md → templates/narrative-template.md} +0 -0
  185. /package/src/modules/bmgd/workflows/3-technical/game-architecture/{architecture-template.md → templates/architecture-template.md} +0 -0
@@ -0,0 +1,388 @@
1
+ # Unreal Engine Automation Testing Guide
2
+
3
+ ## Overview
4
+
5
+ Unreal Engine provides a comprehensive automation system for testing games, including:
6
+
7
+ - **Automation Framework** - Low-level test infrastructure
8
+ - **Functional Tests** - In-game scenario testing
9
+ - **Gauntlet** - Extended testing and automation
10
+
11
+ ## Automation Framework
12
+
13
+ ### Test Types
14
+
15
+ | Type | Flag | Use Case |
16
+ | ------------- | --------------- | -------------------------- |
17
+ | Unit Tests | `SmokeFilter` | Fast, isolated logic tests |
18
+ | Feature Tests | `ProductFilter` | Feature validation |
19
+ | Stress Tests | `StressFilter` | Performance under load |
20
+ | Perf Tests | `PerfFilter` | Benchmark comparisons |
21
+
22
+ ### Basic Test Structure
23
+
24
+ ```cpp
25
+ // MyGameTests.cpp
26
+ #include "Misc/AutomationTest.h"
27
+
28
+ IMPLEMENT_SIMPLE_AUTOMATION_TEST(
29
+ FDamageCalculationTest,
30
+ "MyGame.Combat.DamageCalculation",
31
+ EAutomationTestFlags::ApplicationContextMask |
32
+ EAutomationTestFlags::ProductFilter
33
+ )
34
+
35
+ bool FDamageCalculationTest::RunTest(const FString& Parameters)
36
+ {
37
+ // Arrange
38
+ float BaseDamage = 100.f;
39
+ float CritMultiplier = 2.f;
40
+
41
+ // Act
42
+ float Result = UDamageCalculator::Calculate(BaseDamage, CritMultiplier);
43
+
44
+ // Assert
45
+ TestEqual("Critical hit doubles damage", Result, 200.f);
46
+
47
+ return true;
48
+ }
49
+ ```
50
+
51
+ ### Complex Test with Setup/Teardown
52
+
53
+ ```cpp
54
+ IMPLEMENT_COMPLEX_AUTOMATION_TEST(
55
+ FInventorySystemTest,
56
+ "MyGame.Systems.Inventory",
57
+ EAutomationTestFlags::ApplicationContextMask |
58
+ EAutomationTestFlags::ProductFilter
59
+ )
60
+
61
+ void FInventorySystemTest::GetTests(
62
+ TArray<FString>& OutBeautifiedNames,
63
+ TArray<FString>& OutTestCommands) const
64
+ {
65
+ OutBeautifiedNames.Add("AddItem");
66
+ OutTestCommands.Add("AddItem");
67
+
68
+ OutBeautifiedNames.Add("RemoveItem");
69
+ OutTestCommands.Add("RemoveItem");
70
+
71
+ OutBeautifiedNames.Add("StackItems");
72
+ OutTestCommands.Add("StackItems");
73
+ }
74
+
75
+ bool FInventorySystemTest::RunTest(const FString& Parameters)
76
+ {
77
+ // Setup
78
+ UInventoryComponent* Inventory = NewObject<UInventoryComponent>();
79
+
80
+ if (Parameters == "AddItem")
81
+ {
82
+ UItemData* Sword = NewObject<UItemData>();
83
+ Sword->ItemID = "sword_01";
84
+
85
+ bool bAdded = Inventory->AddItem(Sword);
86
+
87
+ TestTrue("Item added successfully", bAdded);
88
+ TestEqual("Inventory count", Inventory->GetItemCount(), 1);
89
+ }
90
+ else if (Parameters == "RemoveItem")
91
+ {
92
+ // ... test logic
93
+ }
94
+ else if (Parameters == "StackItems")
95
+ {
96
+ // ... test logic
97
+ }
98
+
99
+ return true;
100
+ }
101
+ ```
102
+
103
+ ### Latent Actions (Async Tests)
104
+
105
+ ```cpp
106
+ DEFINE_LATENT_AUTOMATION_COMMAND_ONE_PARAMETER(
107
+ FWaitForActorSpawn,
108
+ FString, ActorName
109
+ );
110
+
111
+ bool FWaitForActorSpawn::Update()
112
+ {
113
+ UWorld* World = GEngine->GetWorldContexts()[0].World();
114
+ AActor* Actor = nullptr;
115
+
116
+ for (TActorIterator<AActor> It(World); It; ++It)
117
+ {
118
+ if (It->GetName() == ActorName)
119
+ {
120
+ Actor = *It;
121
+ break;
122
+ }
123
+ }
124
+
125
+ return Actor != nullptr; // Return true when complete
126
+ }
127
+
128
+ bool FSpawnTest::RunTest(const FString& Parameters)
129
+ {
130
+ // Spawn enemy
131
+ ADD_LATENT_AUTOMATION_COMMAND(FSpawnEnemy("Goblin"));
132
+
133
+ // Wait for spawn
134
+ ADD_LATENT_AUTOMATION_COMMAND(FWaitForActorSpawn("Goblin"));
135
+
136
+ // Verify
137
+ ADD_LATENT_AUTOMATION_COMMAND(FVerifyEnemyState("Goblin", "Idle"));
138
+
139
+ return true;
140
+ }
141
+ ```
142
+
143
+ ## Functional Tests
144
+
145
+ Functional tests run inside the game world and can test gameplay scenarios.
146
+
147
+ ### Setup
148
+
149
+ 1. Create a test map (`TestMap_Combat.umap`)
150
+ 2. Add `AFunctionalTest` actors to the map
151
+ 3. Configure test parameters in Details panel
152
+
153
+ ### Blueprint Functional Test
154
+
155
+ ```cpp
156
+ // In Blueprint:
157
+ // 1. Create child of AFunctionalTest
158
+ // 2. Override "Start Test" event
159
+ // 3. Call "Finish Test" when complete
160
+ ```
161
+
162
+ ### C++ Functional Test
163
+
164
+ ```cpp
165
+ UCLASS()
166
+ class APlayerCombatTest : public AFunctionalTest
167
+ {
168
+ GENERATED_BODY()
169
+
170
+ public:
171
+ virtual void StartTest() override;
172
+
173
+ protected:
174
+ UPROPERTY(EditAnywhere)
175
+ TSubclassOf<AEnemy> EnemyClass;
176
+
177
+ UPROPERTY(EditAnywhere)
178
+ float ExpectedDamage = 50.f;
179
+
180
+ private:
181
+ void OnEnemyDamaged(float Damage);
182
+ };
183
+
184
+ void APlayerCombatTest::StartTest()
185
+ {
186
+ Super::StartTest();
187
+
188
+ // Spawn test enemy
189
+ AEnemy* Enemy = GetWorld()->SpawnActor<AEnemy>(EnemyClass);
190
+ Enemy->OnDamaged.AddDynamic(this, &APlayerCombatTest::OnEnemyDamaged);
191
+
192
+ // Get player and attack
193
+ APlayerCharacter* Player = Cast<APlayerCharacter>(
194
+ UGameplayStatics::GetPlayerCharacter(this, 0));
195
+ Player->Attack(Enemy);
196
+ }
197
+
198
+ void APlayerCombatTest::OnEnemyDamaged(float Damage)
199
+ {
200
+ if (FMath::IsNearlyEqual(Damage, ExpectedDamage, 0.1f))
201
+ {
202
+ FinishTest(EFunctionalTestResult::Succeeded, "Damage correct");
203
+ }
204
+ else
205
+ {
206
+ FinishTest(EFunctionalTestResult::Failed,
207
+ FString::Printf(TEXT("Expected %f, got %f"),
208
+ ExpectedDamage, Damage));
209
+ }
210
+ }
211
+ ```
212
+
213
+ ## Gauntlet Framework
214
+
215
+ Gauntlet extends automation for large-scale testing, performance benchmarking, and multi-client scenarios.
216
+
217
+ ### Gauntlet Test Configuration
218
+
219
+ ```cpp
220
+ // MyGameTest.cs (Gauntlet config)
221
+ namespace MyGame.Automation
222
+ {
223
+ public class PerformanceTestConfig : UnrealTestConfig
224
+ {
225
+ [AutoParam]
226
+ public string MapName = "TestMap_Performance";
227
+
228
+ [AutoParam]
229
+ public int Duration = 300; // 5 minutes
230
+
231
+ public override void ApplyToConfig(UnrealAppConfig Config)
232
+ {
233
+ base.ApplyToConfig(Config);
234
+ Config.AddCmdLineArg("-game");
235
+ Config.AddCmdLineArg($"-ExecCmds=open {MapName}");
236
+ }
237
+ }
238
+ }
239
+ ```
240
+
241
+ ### Running Gauntlet
242
+
243
+ ```bash
244
+ # Run performance test
245
+ RunUAT.bat RunUnreal -project=MyGame -platform=Win64 \
246
+ -configuration=Development -build=local \
247
+ -test=MyGame.PerformanceTest -Duration=300
248
+ ```
249
+
250
+ ## Blueprint Testing
251
+
252
+ ### Test Helpers in Blueprint
253
+
254
+ Create a Blueprint Function Library with test utilities:
255
+
256
+ ```cpp
257
+ UCLASS()
258
+ class UTestHelpers : public UBlueprintFunctionLibrary
259
+ {
260
+ GENERATED_BODY()
261
+
262
+ public:
263
+ UFUNCTION(BlueprintCallable, Category = "Testing")
264
+ static void AssertTrue(bool Condition, const FString& Message);
265
+
266
+ UFUNCTION(BlueprintCallable, Category = "Testing")
267
+ static void AssertEqual(int32 A, int32 B, const FString& Message);
268
+
269
+ UFUNCTION(BlueprintCallable, Category = "Testing")
270
+ static AActor* SpawnTestActor(
271
+ UObject* WorldContext,
272
+ TSubclassOf<AActor> ActorClass,
273
+ FVector Location);
274
+ };
275
+ ```
276
+
277
+ ## Performance Testing
278
+
279
+ ### Frame Time Measurement
280
+
281
+ ```cpp
282
+ bool FFrameTimeTest::RunTest(const FString& Parameters)
283
+ {
284
+ TArray<float> FrameTimes;
285
+ float TotalTime = 0.f;
286
+
287
+ // Collect frame times
288
+ ADD_LATENT_AUTOMATION_COMMAND(FCollectFrameTimes(
289
+ FrameTimes, 1000 // frames
290
+ ));
291
+
292
+ // Analyze
293
+ ADD_LATENT_AUTOMATION_COMMAND(FAnalyzeFrameTimes(
294
+ FrameTimes,
295
+ 16.67f, // Target: 60fps
296
+ 0.99f // 99th percentile threshold
297
+ ));
298
+
299
+ return true;
300
+ }
301
+ ```
302
+
303
+ ### Memory Tracking
304
+
305
+ ```cpp
306
+ bool FMemoryLeakTest::RunTest(const FString& Parameters)
307
+ {
308
+ SIZE_T BaselineMemory = FPlatformMemory::GetStats().UsedPhysical;
309
+
310
+ // Perform operations
311
+ for (int i = 0; i < 100; i++)
312
+ {
313
+ UObject* Obj = NewObject<UMyObject>();
314
+ // ... use object
315
+ Obj->MarkAsGarbage(); // UE5 API (was MarkPendingKill in UE4)
316
+ }
317
+
318
+ CollectGarbage(GARBAGE_COLLECTION_KEEPFLAGS);
319
+
320
+ SIZE_T FinalMemory = FPlatformMemory::GetStats().UsedPhysical;
321
+ SIZE_T Leaked = FinalMemory - BaselineMemory;
322
+
323
+ TestTrue("No significant leak", Leaked < 1024 * 1024); // 1MB tolerance
324
+
325
+ return true;
326
+ }
327
+ ```
328
+
329
+ ## CI Integration
330
+
331
+ ### Command Line
332
+
333
+ ```bash
334
+ # Run all tests (UE5)
335
+ UnrealEditor.exe MyGame -ExecCmds="Automation RunTests Now" -unattended -nopause
336
+
337
+ # Run specific test
338
+ UnrealEditor.exe MyGame -ExecCmds="Automation RunTests MyGame.Combat" -unattended
339
+
340
+ # Run with report
341
+ UnrealEditor.exe MyGame \
342
+ -ExecCmds="Automation RunTests Now; Automation ReportResults" \
343
+ -ReportOutputPath=TestResults.xml
344
+
345
+ # Note: For UE4, use UE4Editor.exe instead of UnrealEditor.exe
346
+ ```
347
+
348
+ ### GitHub Actions
349
+
350
+ ```yaml
351
+ test:
352
+ runs-on: [self-hosted, windows, unreal]
353
+ steps:
354
+ - name: Run Tests
355
+ run: |
356
+ # UE5: UnrealEditor-Cmd.exe, UE4: UE4Editor-Cmd.exe
357
+ & "$env:UE_ROOT/Engine/Binaries/Win64/UnrealEditor-Cmd.exe" `
358
+ "${{ github.workspace }}/MyGame.uproject" `
359
+ -ExecCmds="Automation RunTests Now" `
360
+ -unattended -nopause -nullrhi
361
+ ```
362
+
363
+ ## Best Practices
364
+
365
+ ### DO
366
+
367
+ - Use `SmokeFilter` for fast CI tests
368
+ - Create dedicated test maps for functional tests
369
+ - Clean up spawned actors after tests
370
+ - Use latent commands for async operations
371
+ - Profile tests to keep CI fast
372
+
373
+ ### DON'T
374
+
375
+ - Don't test engine functionality
376
+ - Don't rely on specific tick order
377
+ - Don't leave test actors in production maps
378
+ - Don't ignore test warnings
379
+ - Don't skip garbage collection in tests
380
+
381
+ ## Troubleshooting
382
+
383
+ | Issue | Cause | Fix |
384
+ | -------------- | --------------- | ---------------------------- |
385
+ | Test not found | Wrong flags | Check `EAutomationTestFlags` |
386
+ | Crash in test | Missing world | Use proper test context |
387
+ | Flaky results | Timing issues | Use latent commands |
388
+ | Slow tests | Too many actors | Optimize test setup |
@@ -0,0 +1,17 @@
1
+ id,name,description,tags,fragment_file
2
+ playtesting,Playtesting Fundamentals,"Core principles and methods for playtesting game builds","testing-methods,playtesting,design-validation",knowledge/playtesting.md
3
+ qa-automation,QA Automation,"Automated testing strategies for games including unit and integration tests","automation,unit-tests,integration",knowledge/qa-automation.md
4
+ performance-testing,Performance Testing,"Frame rate profiling and optimization testing strategies","performance,profiling,fps",knowledge/performance-testing.md
5
+ balance-testing,Balance Testing,"Methods for testing game balance and tuning","design-validation,balance,economy",knowledge/balance-testing.md
6
+ compatibility-testing,Compatibility Testing,"Platform and device compatibility testing approaches","compatibility,platforms,hardware",knowledge/compatibility-testing.md
7
+ regression-testing,Regression Testing,"Strategies for catching regressions in game builds","regression,ci,automation",knowledge/regression-testing.md
8
+ unity-testing,Unity Test Framework,"Unity-specific testing with Test Framework, Play Mode, and Edit Mode tests","unity,unit-tests,integration",knowledge/unity-testing.md
9
+ unreal-testing,Unreal Automation,"Unreal Engine automation system, functional tests, and Gauntlet","unreal,automation,gauntlet",knowledge/unreal-testing.md
10
+ godot-testing,Godot GUT Testing,"Godot Unit Test framework patterns and best practices","godot,gut,unit-tests",knowledge/godot-testing.md
11
+ save-testing,Save System Testing,"Strategies for testing save/load systems and data integrity","save-system,data,persistence",knowledge/save-testing.md
12
+ multiplayer-testing,Multiplayer Testing,"Network testing, sync validation, and lag simulation","multiplayer,networking,sync",knowledge/multiplayer-testing.md
13
+ input-testing,Input Testing,"Controller, keyboard, and touch input validation","input,controllers,accessibility",knowledge/input-testing.md
14
+ localization-testing,Localization Testing,"Text, audio, and cultural validation for international releases","localization,i18n,text",knowledge/localization-testing.md
15
+ certification-testing,Platform Certification,"Console TRC/XR requirements and certification testing","certification,console,trc,xr",knowledge/certification-testing.md
16
+ smoke-testing,Smoke Testing,"Critical path validation for build verification","smoke-tests,bvt,ci",knowledge/smoke-testing.md
17
+ test-priorities,Test Priorities Matrix,"P0-P3 criteria, coverage targets, execution ordering for games","prioritization,risk,coverage",knowledge/test-priorities.md
@@ -10,28 +10,44 @@ default_selected: false
10
10
  ## document_output_language
11
11
  ## output_folder
12
12
 
13
- game_project_name:
13
+ project_name:
14
14
  prompt: "What is the name of your game project?"
15
15
  default: "{directory_name}"
16
16
  result: "{value}"
17
17
 
18
- sprint_artifacts:
19
- prompt: "Where should Sprint Artifacts be stored (stories, epics, temp context, etc...)?"
20
- default: "{output_folder}/sprint-artifacts"
21
- result: "{project-root}/{value}"
22
-
23
18
  game_dev_experience:
24
- prompt: "What is your game development experience level?"
19
+ prompt:
20
+ - "What is your game development experience level?"
21
+ - "This affects how agents explain concepts in chat."
25
22
  default: "intermediate"
26
23
  result: "{value}"
27
24
  single-select:
28
25
  - value: "beginner"
29
- label: "Beginner - New to game development, provide detailed guidance"
26
+ label: "Beginner - New to game development, explain concepts clearly"
30
27
  - value: "intermediate"
31
- label: "Intermediate - Familiar with game dev concepts, balanced approach"
28
+ label: "Intermediate - Familiar with game dev concepts, balance explanation with efficiency"
32
29
  - value: "expert"
33
30
  label: "Expert - Experienced game developer, be direct and technical"
34
31
 
32
+ planning_artifacts:
33
+ prompt: "Where should game planning artifacts be stored?\n(Game Briefs, GDDs, Narrative Designs, Architecture docs)"
34
+ default: "{output_folder}/game-planning-artifacts"
35
+ result: "{project-root}/{value}"
36
+
37
+ implementation_artifacts:
38
+ prompt: "Where should implementation artifacts be stored?\n(sprint status, story files, reviews, retrospectives)"
39
+ default: "{output_folder}/implementation-artifacts"
40
+ result: "{project-root}/{value}"
41
+
42
+ # Alias for workflow compatibility
43
+ sprint_artifacts:
44
+ inherit: "implementation_artifacts"
45
+
46
+ project_knowledge:
47
+ prompt: "Where should non-ephemeral project knowledge be searched for and stored?\n(docs, research, references)"
48
+ default: "docs"
49
+ result: "{project-root}/{value}"
50
+
35
51
  primary_platform:
36
52
  prompt: "Which game development framework or engine do you want to install support for?"
37
53
  default: ["unity", "unreal", "godot", "other"]
@@ -3,6 +3,8 @@ name,displayName,title,icon,role,identity,communicationStyle,principles,module,p
3
3
  "game-designer","Samus Shepard","Game Designer","🎲","Lead Game Designer + Creative Vision Architect","Veteran designer with 15+ years crafting AAA and indie hits. Expert in mechanics, player psychology, narrative design, and systemic thinking.","Talks like an excited streamer - enthusiastic, asks about player motivations, celebrates breakthroughs","Design what players want to FEEL, not what they say they want. Prototype fast. One hour of playtesting beats ten hours of discussion.","bmgd","bmad/bmgd/agents/game-designer.md"
4
4
  "game-dev","Link Freeman","Game Developer","🕹️","Senior Game Developer + Technical Implementation Specialist","Battle-hardened dev with expertise in Unity, Unreal, and custom engines. Ten years shipping across mobile, console, and PC. Writes clean, performant code.","Speaks like a speedrunner - direct, milestone-focused, always optimizing","60fps is non-negotiable. Write code designers can iterate without fear. Ship early, ship often, iterate on player feedback.","bmgd","bmad/bmgd/agents/game-dev.md"
5
5
  "game-scrum-master","Max","Game Dev Scrum Master","🎯","Game Development Scrum Master + Sprint Orchestrator","Certified Scrum Master specializing in game dev workflows. Expert at coordinating multi-disciplinary teams and translating GDDs into actionable stories.","Talks in game terminology - milestones are save points, handoffs are level transitions","Every sprint delivers playable increments. Clean separation between design and implementation. Keep the team moving through each phase.","bmgd","bmad/bmgd/agents/game-scrum-master.md"
6
+ "game-qa","GLaDOS","Game QA Architect","🧪","Game QA Architect + Test Automation Specialist","Senior QA architect with 12+ years in game testing across Unity, Unreal, and Godot. Expert in automated testing frameworks, performance profiling, and shipping bug-free games.","Speaks like GLaDOS from Portal - methodical, data-driven. Trust, but verify with tests.","Test what matters: gameplay feel, performance, progression. Automated tests catch regressions, humans catch fun problems. Profile before optimize, test before ship.","bmgd","bmad/bmgd/agents/game-qa.md"
7
+ "game-solo-dev","Indie","Game Solo Dev","🎮","Elite Indie Game Developer + Quick Flow Specialist","Battle-hardened solo game developer who ships complete games from concept to launch. Expert in Unity, Unreal, and Godot. Lives the Quick Flow workflow.","Direct, confident, gameplay-focused. Uses dev slang. Does it feel good? Ship it.","Prototype fast, fail fast, iterate faster. A playable build beats a perfect design doc. 60fps is non-negotiable. The core loop must be fun first.","bmgd","bmad/bmgd/agents/game-solo-dev.md"
6
8
  "sound-wizard","Zephyr ""Boom"" Chen","Audio Wizard","🎵","Lead Sound Designer + Audio Architect","15 years crafting iconic game audio. Expert in adaptive music systems, procedural audio, and spatial sound. Obsessed with making every action feel impactful.","Talks in onomatopoeia - WHOOSH for swooshes, KABOOM for explosions, describes everything through sound effects","Sound is 50% of the experience. Every footstep tells a story. Silence is the most powerful sound.","bmgd",""
7
9
  "dungeon-keeper","Morthos Grimforge","Level Designer","🗺️","Principal Level Designer + Environment Storyteller","20 years building legendary game spaces from sprawling RPG dungeons to tight FPS arenas. Master of flow, pacing, and environmental storytelling.","Speaks like a dramatic dungeon master - describes spaces theatrically, rolls for initiative on decisions","Every room must teach or test. The best levels don't need tutorials. Players should feel clever, not frustrated.","bmgd",""
8
10
  "narrative-weaver","Ink Sterling","Narrative Designer","📚","Lead Narrative Designer + Interactive Storyteller","Crafted award-winning branching narratives for 10+ titles. Expert in choice architecture, character arcs, and integrating story with mechanics.","Speaks in story beats - everything is Act 1, plot twists, climaxes, and emotional payoffs","Story serves gameplay, gameplay reveals story. Every choice must matter or don't offer it. Kill your darlings ruthlessly.","bmgd",""
@@ -2,17 +2,28 @@
2
2
  bundle:
3
3
  name: Team Game Development
4
4
  icon: 🎮
5
- description: Specialized game development team including Game Designer (creative vision and GDD), Game Developer (implementation and code), Game Architect (technical systems and infrastructure), and Game Dev Scrum Master (sprint coordination). Perfect for game projects across all scales and platforms.
5
+ description: Specialized game development team including Game Designer (creative vision and GDD), Game Developer (implementation and code), Game Architect (technical systems and infrastructure), Game Scrum Master (sprint coordination), Game QA (testing and quality assurance), and Game Solo Dev (quick-flow development). Perfect for game projects across all scales and platforms.
6
6
  agents:
7
7
  - game-designer
8
8
  - game-dev
9
9
  - game-architect
10
10
  - game-scrum-master
11
+ - game-qa
12
+ - game-solo-dev
11
13
 
12
14
  workflows:
13
15
  - brainstorm-game
14
16
  - game-brief
15
17
  - gdd
16
18
  - narrative
19
+ - game-architecture
20
+ - sprint-planning
21
+ - sprint-status
22
+ - create-story
23
+ - dev-story
24
+ - code-review
25
+ - test-framework
26
+ - quick-prototype
27
+ - quick-dev
17
28
 
18
29
  party: "./default-party.csv"
@@ -0,0 +1,164 @@
1
+ ---
2
+ name: 'step-01-init'
3
+ description: 'Initialize the game brainstorming workflow and validate readiness'
4
+
5
+ # Path Definitions
6
+ workflow_path: '{project-root}/_bmad/bmgd/workflows/1-preproduction/brainstorm-game'
7
+
8
+ # File References
9
+ thisStepFile: '{workflow_path}/steps/step-01-init.md'
10
+ nextStepFile: '{workflow_path}/steps/step-02-context.md'
11
+ workflowFile: '{workflow_path}/workflow.md'
12
+ outputFile: '{output_folder}/brainstorming-session-{date}.md'
13
+
14
+ # Context Files
15
+ gameContext: '{workflow_path}/game-context.md'
16
+ gameBrainMethods: '{workflow_path}/game-brain-methods.csv'
17
+ ---
18
+
19
+ # Step 1: Initialize Brainstorming
20
+
21
+ **Progress: Step 1 of 4** - Next: Load Context
22
+
23
+ ## STEP GOAL:
24
+
25
+ Validate workflow readiness, check for workflow status tracking, and prepare for the game brainstorming session.
26
+
27
+ ## MANDATORY EXECUTION RULES (READ FIRST):
28
+
29
+ ### Universal Rules:
30
+
31
+ - NEVER generate content without user input
32
+ - CRITICAL: Read the complete step file before taking any action
33
+ - CRITICAL: When loading next step with 'C', ensure entire file is read
34
+ - YOU ARE A FACILITATOR, not a content generator
35
+ - NEVER mention time estimates
36
+
37
+ ### Role Reinforcement:
38
+
39
+ - You are a creative game design facilitator
40
+ - Focus on drawing out user's ideas
41
+ - Game brainstorming is optional but valuable
42
+
43
+ ### Step-Specific Rules:
44
+
45
+ - Check for workflow status file
46
+ - Initialize session document with proper frontmatter
47
+ - Prepare user for brainstorming mindset
48
+
49
+ ## EXECUTION PROTOCOLS:
50
+
51
+ - Show your analysis before taking any action
52
+ - Wait for user confirmation before proceeding
53
+ - Update frontmatter `stepsCompleted: [1]` before loading next step
54
+
55
+ ## Sequence of Instructions (Do not deviate, skip, or optimize)
56
+
57
+ ### 1. Check Workflow Status
58
+
59
+ **Search for workflow status file:**
60
+
61
+ Check if `{output_folder}/bmm-workflow-status.yaml` exists.
62
+
63
+ **If status file NOT found:**
64
+
65
+ "No workflow status file found. Game brainstorming is optional and can run standalone.
66
+
67
+ Would you like to:
68
+
69
+ 1. Continue in standalone mode (no progress tracking)
70
+ 2. Run `workflow-init` first to set up tracking
71
+
72
+ Your choice:"
73
+
74
+ **If user continues:** Set `standalone_mode = true`
75
+
76
+ **If status file found:**
77
+
78
+ Load the file and check:
79
+
80
+ - Is this a game project? (`project_type == 'game'`)
81
+ - Has brainstorm-game already been completed?
82
+ - Is this the next expected workflow?
83
+
84
+ Handle each scenario appropriately with user prompts.
85
+
86
+ ### 2. Set Brainstorming Mindset
87
+
88
+ "**Welcome to Game Brainstorming!**
89
+
90
+ {{user_name}}, let's explore game ideas together.
91
+
92
+ **Brainstorming Rules:**
93
+
94
+ - There are no bad ideas in brainstorming
95
+ - Quantity over quality initially
96
+ - Build on ideas rather than criticize
97
+ - Wild ideas are welcome
98
+ - Defer judgment until later
99
+
100
+ **What we'll do:**
101
+
102
+ 1. Load game-specific brainstorming techniques
103
+ 2. Explore your game concepts using various methods
104
+ 3. Capture and organize all ideas
105
+ 4. Save results for future refinement
106
+
107
+ Ready to start brainstorming? [Y/N]"
108
+
109
+ ### 3. Initialize Output Document
110
+
111
+ **If user confirms, create the session document:**
112
+
113
+ Create `{outputFile}` with frontmatter:
114
+
115
+ ```markdown
116
+ ---
117
+ title: 'Game Brainstorming Session'
118
+ date: '{{date}}'
119
+ author: '{{user_name}}'
120
+ version: '1.0'
121
+ stepsCompleted: [1]
122
+ status: 'in-progress'
123
+ ---
124
+
125
+ # Game Brainstorming Session
126
+
127
+ ## Session Info
128
+
129
+ - **Date:** {{date}}
130
+ - **Facilitator:** Game Designer Agent
131
+ - **Participant:** {{user_name}}
132
+
133
+ ---
134
+
135
+ _Ideas will be captured as we progress through the session._
136
+ ```
137
+
138
+ ### 4. Proceed to Context Step
139
+
140
+ After initialization:
141
+
142
+ - Update frontmatter: `stepsCompleted: [1]`
143
+ - Load `{nextStepFile}`
144
+
145
+ ---
146
+
147
+ ## SYSTEM SUCCESS/FAILURE METRICS
148
+
149
+ ### SUCCESS:
150
+
151
+ - Workflow status checked appropriately
152
+ - User confirmed ready to brainstorm
153
+ - Output document initialized
154
+ - Brainstorming mindset established
155
+ - Frontmatter updated with stepsCompleted: [1]
156
+
157
+ ### SYSTEM FAILURE:
158
+
159
+ - Starting without user confirmation
160
+ - Not checking workflow status
161
+ - Missing document initialization
162
+ - Not setting brainstorming tone
163
+
164
+ **Master Rule:** Skipping steps, optimizing sequences, or not following exact instructions is FORBIDDEN and constitutes SYSTEM FAILURE.