bmad-game-dev-studio 0.1.0

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 (56) hide show
  1. package/.markdownlint-cli2.yaml +35 -0
  2. package/.nvmrc +1 -0
  3. package/.prettierignore +9 -0
  4. package/LICENSE +26 -0
  5. package/README.md +41 -0
  6. package/eslint.config.mjs +152 -0
  7. package/package.json +92 -0
  8. package/prettier.config.mjs +32 -0
  9. package/src/_module-installer/installer.js +110 -0
  10. package/src/_module-installer/platform-specifics/claude-code.js +23 -0
  11. package/src/_module-installer/platform-specifics/windsurf.js +18 -0
  12. package/src/agents/game-architect.agent.yaml +40 -0
  13. package/src/agents/game-designer.agent.yaml +45 -0
  14. package/src/agents/game-dev.agent.yaml +49 -0
  15. package/src/agents/game-qa.agent.yaml +63 -0
  16. package/src/agents/game-scrum-master.agent.yaml +56 -0
  17. package/src/agents/game-solo-dev.agent.yaml +49 -0
  18. package/src/agents/tech-writer/tech-writer.agent.yaml +45 -0
  19. package/src/gametest/qa-index.csv +18 -0
  20. package/src/module-help.csv +26 -0
  21. package/src/module.yaml +65 -0
  22. package/src/teams/default-party.csv +12 -0
  23. package/src/teams/team-gamedev.yaml +29 -0
  24. package/src/workflows/1-preproduction/brainstorm-game/game-brain-methods.csv +26 -0
  25. package/src/workflows/1-preproduction/brainstorm-game/workflow.yaml +62 -0
  26. package/src/workflows/1-preproduction/game-brief/workflow.yaml +67 -0
  27. package/src/workflows/2-design/gdd/game-types.csv +25 -0
  28. package/src/workflows/2-design/gdd/workflow.yaml +101 -0
  29. package/src/workflows/2-design/narrative/workflow.yaml +77 -0
  30. package/src/workflows/3-technical/game-architecture/architecture-patterns.yaml +321 -0
  31. package/src/workflows/3-technical/game-architecture/decision-catalog.yaml +222 -0
  32. package/src/workflows/3-technical/game-architecture/pattern-categories.csv +13 -0
  33. package/src/workflows/3-technical/game-architecture/workflow.yaml +98 -0
  34. package/src/workflows/4-production/code-review/instructions.xml +226 -0
  35. package/src/workflows/4-production/code-review/workflow.yaml +64 -0
  36. package/src/workflows/4-production/correct-course/workflow.yaml +65 -0
  37. package/src/workflows/4-production/create-story/instructions.xml +345 -0
  38. package/src/workflows/4-production/create-story/workflow.yaml +61 -0
  39. package/src/workflows/4-production/dev-story/instructions.xml +410 -0
  40. package/src/workflows/4-production/dev-story/workflow.yaml +27 -0
  41. package/src/workflows/4-production/retrospective/workflow.yaml +58 -0
  42. package/src/workflows/4-production/sprint-planning/sprint-status-template.yaml +55 -0
  43. package/src/workflows/4-production/sprint-planning/workflow.yaml +54 -0
  44. package/src/workflows/4-production/sprint-status/workflow.yaml +35 -0
  45. package/src/workflows/document-project/documentation-requirements.csv +12 -0
  46. package/src/workflows/document-project/templates/project-scan-report-schema.json +160 -0
  47. package/src/workflows/document-project/workflow.yaml +30 -0
  48. package/src/workflows/document-project/workflows/deep-dive.yaml +31 -0
  49. package/src/workflows/document-project/workflows/full-scan.yaml +31 -0
  50. package/src/workflows/gametest/automate/workflow.yaml +50 -0
  51. package/src/workflows/gametest/e2e-scaffold/workflow.yaml +145 -0
  52. package/src/workflows/gametest/performance/workflow.yaml +48 -0
  53. package/src/workflows/gametest/playtest-plan/workflow.yaml +59 -0
  54. package/src/workflows/gametest/test-design/workflow.yaml +47 -0
  55. package/src/workflows/gametest/test-framework/workflow.yaml +48 -0
  56. package/src/workflows/gametest/test-review/workflow.yaml +48 -0
@@ -0,0 +1,35 @@
1
+ # markdownlint-cli2 configuration
2
+ # https://github.com/DavidAnson/markdownlint-cli2
3
+
4
+ ignores:
5
+ - node_modules/**
6
+ - test/fixtures/**
7
+ - CODE_OF_CONDUCT.md
8
+ - _bmad/**
9
+ - _bmad*/**
10
+ - .*/**
11
+ - z*/**
12
+
13
+ # Rule configuration
14
+ config:
15
+ # Disable all rules by default
16
+ default: false
17
+
18
+ # Heading levels should increment by one (h1 -> h2 -> h3, not h1 -> h3)
19
+ MD001: true
20
+
21
+ # Duplicate sibling headings (same heading text at same level under same parent)
22
+ MD024:
23
+ siblings_only: true
24
+
25
+ # Trailing commas in headings (likely typos)
26
+ MD026:
27
+ punctuation: ","
28
+
29
+ # Bare URLs - may not render as links in all parsers
30
+ # Should use <url> or [text](url) format
31
+ MD034: true
32
+
33
+ # Spaces inside emphasis markers - breaks rendering
34
+ # e.g., "* text *" won't render as emphasis
35
+ MD037: true
package/.nvmrc ADDED
@@ -0,0 +1 @@
1
+ 22
@@ -0,0 +1,9 @@
1
+ # Test fixtures with intentionally broken/malformed files
2
+ test/fixtures/**
3
+
4
+ # Contributor Covenant (external standard)
5
+ CODE_OF_CONDUCT.md
6
+
7
+ # BMAD runtime folders (user-specific, not in repo)
8
+ _bmad/
9
+ _bmad*/
package/LICENSE ADDED
@@ -0,0 +1,26 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 BMad Code, LLC
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
23
+ TRADEMARK NOTICE:
24
+ BMad™ , BMAD-CORE™ and BMAD-METHOD™ are trademarks of BMad Code, LLC. The use of these
25
+ trademarks in this software does not grant any rights to use the trademarks
26
+ for any other purpose.
package/README.md ADDED
@@ -0,0 +1,41 @@
1
+ # GDS - BMAD Game Development Suite
2
+
3
+ ![](docs/bmgd-logo.png)
4
+
5
+ BMAD Game Development Suite (GDS) brings the power of BMAD's project planning and structured development to game development. Create working prototypes quickly in three of the industry's leading 3D engines (Unity, Unreal, and Godot) or whatever platform you like. GDS will lead you through product research, technical design, narrative design, and a full epic-driven production cycle, developed by game industry veterans off of BMAD Method's core.
6
+
7
+ Sound like *too much* power? You can also use GDS to quickly prototype an idea, skipping most of the planning steps and going straight into breaking things in your engine of choice!
8
+
9
+ ## What can BMGD do?
10
+
11
+ GDS, out of the box, contains support for game development and testing in:
12
+
13
+ * [Unity](https://unity.com)
14
+ * [Unreal](https://www.unrealengine.com/)
15
+ * [Godot](https://godotengine.org/)
16
+
17
+ However, these engines *aren't a requirement* - if you want to make a roguelike in pure C, BMGD can handle it. The GDS process will guide you through every step of creating a game project, all the way to release.
18
+
19
+ As for what kind of games you can create? GDS has support for *21* game types, from turn-based strategy to visual novels to survival games. And if your game idea doesn't fit in any one of those, that's fine, too.
20
+
21
+ ## What can't GDS do?
22
+
23
+ With very few simple exceptions, *GDS cannot create an entire game from scratch for you.*
24
+
25
+ GDS is designed to work with *coding agents* such as Claude Code, Codex, Gemini, or Github Copilot. There are *many* aspects of game development that are outside the scope of these agents - such as art assets such as models and textures, animations, music, and sound effects. GDS can work to integrate these into your chosen engine, but it *can't* create them.
26
+
27
+ As such, it's designed to be part of your development team, not a one-stop solution for creating a game.
28
+
29
+ ## What do I need to do to begin?
30
+
31
+ To install GDS, just select it as part of the BMAD Method install. To update it, simply re-install BMAD Method.
32
+
33
+ * Follow this walkthrough TODO! to install GDS and create your first project.
34
+ * Read this tutorial TODO! on using Quick-Dev to create a prototype quickly
35
+ * Consult the tomes of documentation TODO! on all the functionality GDS has to offer.
36
+
37
+ ## This is a lot! Can I get some help?
38
+
39
+ Absolutely! The best place to get help is on our friendly BMAD Method Discord. There's a specific GDS forum (link TODO!!) where the developers and other GDS users will be glad to help out!
40
+
41
+ *BMAD GDS - If you can dream it, you can do it.*
@@ -0,0 +1,152 @@
1
+ import js from '@eslint/js';
2
+ import eslintConfigPrettier from 'eslint-config-prettier/flat';
3
+ import nodePlugin from 'eslint-plugin-n';
4
+ import unicorn from 'eslint-plugin-unicorn';
5
+ import yml from 'eslint-plugin-yml';
6
+
7
+ export default [
8
+ // Global ignores for files/folders that should not be linted
9
+ {
10
+ ignores: [
11
+ 'dist/**',
12
+ 'coverage/**',
13
+ '**/*.min.js',
14
+ 'test/template-test-generator/**',
15
+ 'test/template-test-generator/**/*.js',
16
+ 'test/template-test-generator/**/*.md',
17
+ 'test/fixtures/**',
18
+ 'test/fixtures/**/*.yaml',
19
+ '_bmad/**',
20
+ '_bmad*/**',
21
+ // Build output
22
+ 'build/**',
23
+ // Website uses ESM/Astro - separate linting ecosystem
24
+ 'website/**',
25
+ // Gitignored patterns
26
+ 'z*/**', // z-samples, z1, z2, etc.
27
+ '.claude/**',
28
+ '.codex/**',
29
+ '.github/chatmodes/**',
30
+ '.agent/**',
31
+ '.agentvibes/**',
32
+ '.kiro/**',
33
+ '.roo/**',
34
+ 'test-project-install/**',
35
+ 'sample-project/**',
36
+ 'tools/template-test-generator/test-scenarios/**',
37
+ 'src/modules/*/sub-modules/**',
38
+ '.bundler-temp/**',
39
+ ],
40
+ },
41
+
42
+ // Base JavaScript recommended rules
43
+ js.configs.recommended,
44
+
45
+ // Node.js rules
46
+ ...nodePlugin.configs['flat/mixed-esm-and-cjs'],
47
+
48
+ // Unicorn rules (modern best practices)
49
+ unicorn.configs.recommended,
50
+
51
+ // YAML linting
52
+ ...yml.configs['flat/recommended'],
53
+
54
+ // Place Prettier last to disable conflicting stylistic rules
55
+ eslintConfigPrettier,
56
+
57
+ // Project-specific tweaks
58
+ {
59
+ rules: {
60
+ // Allow console for CLI tools in this repo
61
+ 'no-console': 'off',
62
+ // Enforce .yaml file extension for consistency
63
+ 'yml/file-extension': [
64
+ 'error',
65
+ {
66
+ extension: 'yaml',
67
+ caseSensitive: true,
68
+ },
69
+ ],
70
+ // Prefer double quotes in YAML wherever quoting is used, but allow the other to avoid escapes
71
+ 'yml/quotes': [
72
+ 'error',
73
+ {
74
+ prefer: 'double',
75
+ avoidEscape: true,
76
+ },
77
+ ],
78
+ // Relax some Unicorn rules that are too opinionated for this codebase
79
+ 'unicorn/prevent-abbreviations': 'off',
80
+ 'unicorn/no-null': 'off',
81
+ },
82
+ },
83
+
84
+ // CLI scripts under tools/** and test/**
85
+ {
86
+ files: ['tools/**/*.js', 'tools/**/*.mjs', 'test/**/*.js'],
87
+ rules: {
88
+ // Allow CommonJS patterns for Node CLI scripts
89
+ 'unicorn/prefer-module': 'off',
90
+ 'unicorn/import-style': 'off',
91
+ 'unicorn/no-process-exit': 'off',
92
+ 'n/no-process-exit': 'off',
93
+ 'unicorn/no-await-expression-member': 'off',
94
+ 'unicorn/prefer-top-level-await': 'off',
95
+ // Avoid failing CI on incidental unused vars in internal scripts
96
+ 'no-unused-vars': 'off',
97
+ // Reduce style-only churn in internal tools
98
+ 'unicorn/prefer-ternary': 'off',
99
+ 'unicorn/filename-case': 'off',
100
+ 'unicorn/no-array-reduce': 'off',
101
+ 'unicorn/no-array-callback-reference': 'off',
102
+ 'unicorn/consistent-function-scoping': 'off',
103
+ 'n/no-extraneous-require': 'off',
104
+ 'n/no-extraneous-import': 'off',
105
+ 'n/no-unpublished-require': 'off',
106
+ 'n/no-unpublished-import': 'off',
107
+ // Some scripts intentionally use globals provided at runtime
108
+ 'no-undef': 'off',
109
+ // Additional relaxed rules for legacy/internal scripts
110
+ 'no-useless-catch': 'off',
111
+ 'unicorn/prefer-number-properties': 'off',
112
+ 'no-unreachable': 'off',
113
+ 'unicorn/text-encoding-identifier-case': 'off',
114
+ },
115
+ },
116
+
117
+ // Module installer scripts use CommonJS for compatibility
118
+ {
119
+ files: ['**/_module-installer/**/*.js'],
120
+ rules: {
121
+ // Allow CommonJS patterns for installer scripts
122
+ 'unicorn/prefer-module': 'off',
123
+ 'n/no-missing-require': 'off',
124
+ 'n/no-unpublished-require': 'off',
125
+ },
126
+ },
127
+
128
+ // ESLint config file should not be checked for publish-related Node rules
129
+ {
130
+ files: ['eslint.config.mjs'],
131
+ rules: {
132
+ 'n/no-unpublished-import': 'off',
133
+ },
134
+ },
135
+
136
+ // GitHub workflow files in this repo may use empty mapping values
137
+ {
138
+ files: ['.github/workflows/**/*.yaml'],
139
+ rules: {
140
+ 'yml/no-empty-mapping-value': 'off',
141
+ },
142
+ },
143
+
144
+ // Other GitHub YAML files may intentionally use empty values and reserved filenames
145
+ {
146
+ files: ['.github/**/*.yaml'],
147
+ rules: {
148
+ 'yml/no-empty-mapping-value': 'off',
149
+ 'unicorn/filename-case': 'off',
150
+ },
151
+ },
152
+ ];
package/package.json ADDED
@@ -0,0 +1,92 @@
1
+ {
2
+ "$schema": "https://json.schemastore.org/package.json",
3
+ "name": "bmad-game-dev-studio",
4
+ "version": "0.1.0",
5
+ "description": "A BMad MEthod Core Module that offers a substantial stand alone module for Game Development across multiple supported platforms",
6
+ "keywords": [
7
+ "bmad",
8
+ "game-dev"
9
+ ],
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "git+https://github.com/bmad-code-org/bmad-module-game-dev-studio.git"
13
+ },
14
+ "license": "MIT",
15
+ "author": "Brian (BMad) Madison",
16
+ "main": "",
17
+ "bin": {},
18
+ "scripts": {
19
+ "format:check": "prettier --check \"**/*.{js,cjs,mjs,json,yaml}\"",
20
+ "format:fix": "prettier --write \"**/*.{js,cjs,mjs,json,yaml}\"",
21
+ "lint": "eslint . --ext .js,.cjs,.mjs,.yaml --max-warnings=0",
22
+ "lint:fix": "eslint . --ext .js,.cjs,.mjs,.yaml --fix",
23
+ "lint:md": "markdownlint-cli2 \"**/*.md\"",
24
+ "prepare": "husky",
25
+ "release": "npm run release:patch",
26
+ "release:major": "npm version major && git push --follow-tags",
27
+ "release:minor": "npm version minor && git push --follow-tags",
28
+ "release:patch": "npm version patch && git push --follow-tags",
29
+ "release:prerelease": "npm version prerelease && git push --follow-tags",
30
+ "test": "npm run test:schemas && npm run validate:schemas && npm run lint && npm run lint:md && npm run format:check",
31
+ "test:schemas": "node test/test-agent-schema.js",
32
+ "validate:schemas": "node test/validate-agent-schema.js"
33
+ },
34
+ "lint-staged": {
35
+ "*.{js,cjs,mjs}": [
36
+ "npm run lint:fix",
37
+ "npm run format:fix"
38
+ ],
39
+ "*.yaml": [
40
+ "eslint --fix",
41
+ "npm run format:fix"
42
+ ],
43
+ "*.json": [
44
+ "npm run format:fix"
45
+ ],
46
+ "*.md": [
47
+ "markdownlint-cli2"
48
+ ]
49
+ },
50
+ "dependencies": {
51
+ "chalk": "^4.1.2",
52
+ "fs-extra": "^11.3.0"
53
+ },
54
+ "devDependencies": {
55
+ "@astrojs/sitemap": "^3.6.0",
56
+ "@astrojs/starlight": "^0.37.0",
57
+ "@eslint/js": "^9.33.0",
58
+ "archiver": "^7.0.1",
59
+ "astro": "^5.16.0",
60
+ "c8": "^10.1.3",
61
+ "csv-parse": "^6.1.0",
62
+ "eslint": "^9.33.0",
63
+ "eslint-config-prettier": "^10.1.8",
64
+ "eslint-plugin-n": "^17.21.3",
65
+ "eslint-plugin-unicorn": "^60.0.0",
66
+ "eslint-plugin-yml": "^1.18.0",
67
+ "figlet": "^1.8.0",
68
+ "glob": "^11.0.3",
69
+ "husky": "^9.1.7",
70
+ "ignore": "^7.0.5",
71
+ "jest": "^30.0.4",
72
+ "js-yaml": "^4.1.0",
73
+ "lint-staged": "^16.1.1",
74
+ "markdownlint-cli2": "^0.19.1",
75
+ "ora": "^5.4.1",
76
+ "prettier": "^3.7.4",
77
+ "prettier-plugin-packagejson": "^2.5.19",
78
+ "semver": "^7.6.3",
79
+ "sharp": "^0.33.5",
80
+ "wrap-ansi": "^7.0.0",
81
+ "xml2js": "^0.6.2",
82
+ "yaml-eslint-parser": "^1.2.3",
83
+ "yaml-lint": "^1.7.0",
84
+ "yaml": "^2.7.0"
85
+ },
86
+ "engines": {
87
+ "node": ">=22.0.0"
88
+ },
89
+ "publishConfig": {
90
+ "access": "public"
91
+ }
92
+ }
@@ -0,0 +1,32 @@
1
+ export default {
2
+ $schema: 'https://json.schemastore.org/prettierrc',
3
+ printWidth: 140,
4
+ tabWidth: 2,
5
+ useTabs: false,
6
+ semi: true,
7
+ singleQuote: true,
8
+ trailingComma: 'all',
9
+ bracketSpacing: true,
10
+ arrowParens: 'always',
11
+ endOfLine: 'lf',
12
+ proseWrap: 'preserve',
13
+ overrides: [
14
+ {
15
+ files: ['*.md'],
16
+ options: { proseWrap: 'preserve' },
17
+ },
18
+ {
19
+ files: ['*.yaml'],
20
+ options: { singleQuote: false },
21
+ },
22
+ {
23
+ files: ['*.json', '*.jsonc'],
24
+ options: { singleQuote: false },
25
+ },
26
+ {
27
+ files: ['*.cjs'],
28
+ options: { parser: 'babel' },
29
+ },
30
+ ],
31
+ plugins: ['prettier-plugin-packagejson'],
32
+ };
@@ -0,0 +1,110 @@
1
+ const fs = require('fs-extra');
2
+ const path = require('node:path');
3
+ const chalk = require('chalk');
4
+
5
+ /**
6
+ * Validate that a resolved path is within the project root (prevents path traversal)
7
+ * @param {string} resolvedPath - The fully resolved absolute path
8
+ * @param {string} projectRoot - The project root directory
9
+ * @returns {boolean} - True if path is within project root
10
+ */
11
+ function isWithinProjectRoot(resolvedPath, projectRoot) {
12
+ const normalizedResolved = path.normalize(resolvedPath);
13
+ const normalizedRoot = path.normalize(projectRoot);
14
+ return normalizedResolved.startsWith(normalizedRoot + path.sep) || normalizedResolved === normalizedRoot;
15
+ }
16
+
17
+ /**
18
+ * BMGD Module Installer
19
+ * Standard module installer function that executes after IDE installations
20
+ *
21
+ * @param {Object} options - Installation options
22
+ * @param {string} options.projectRoot - The root directory of the target project
23
+ * @param {Object} options.config - Module configuration from module.yaml
24
+ * @param {Array<string>} options.installedIDEs - Array of IDE codes that were installed
25
+ * @param {Object} options.logger - Logger instance for output
26
+ * @returns {Promise<boolean>} - Success status
27
+ */
28
+ async function install(options) {
29
+ const { projectRoot, config, installedIDEs, logger } = options;
30
+
31
+ try {
32
+ logger.log(chalk.blue('🎮 Installing BMGD Module...'));
33
+
34
+ // Create planning artifacts directory (for GDDs, game briefs, architecture)
35
+ if (config['planning_artifacts'] && typeof config['planning_artifacts'] === 'string') {
36
+ // Strip project-root prefix variations
37
+ const planningConfig = config['planning_artifacts'].replace(/^\{project-root\}\/?/, '');
38
+ const planningPath = path.join(projectRoot, planningConfig);
39
+ if (!isWithinProjectRoot(planningPath, projectRoot)) {
40
+ logger.warn(chalk.yellow(`Warning: planning_artifacts path escapes project root, skipping: ${planningConfig}`));
41
+ } else if (!(await fs.pathExists(planningPath))) {
42
+ logger.log(chalk.yellow(`Creating game planning artifacts directory: ${planningConfig}`));
43
+ await fs.ensureDir(planningPath);
44
+ }
45
+ }
46
+
47
+ // Create implementation artifacts directory (sprint status, stories, reviews)
48
+ // Check both implementation_artifacts and implementation_artifacts for compatibility
49
+ const implConfig = config['implementation_artifacts'] || config['implementation_artifacts'];
50
+ if (implConfig && typeof implConfig === 'string') {
51
+ // Strip project-root prefix variations
52
+ const implConfigClean = implConfig.replace(/^\{project-root\}\/?/, '');
53
+ const implPath = path.join(projectRoot, implConfigClean);
54
+ if (!isWithinProjectRoot(implPath, projectRoot)) {
55
+ logger.warn(chalk.yellow(`Warning: implementation_artifacts path escapes project root, skipping: ${implConfigClean}`));
56
+ } else if (!(await fs.pathExists(implPath))) {
57
+ logger.log(chalk.yellow(`Creating implementation artifacts directory: ${implConfigClean}`));
58
+ await fs.ensureDir(implPath);
59
+ }
60
+ }
61
+
62
+ // Create project knowledge directory
63
+ if (config['project_knowledge'] && typeof config['project_knowledge'] === 'string') {
64
+ // Strip project-root prefix variations
65
+ const knowledgeConfig = config['project_knowledge'].replace(/^\{project-root\}\/?/, '');
66
+ const knowledgePath = path.join(projectRoot, knowledgeConfig);
67
+ if (!isWithinProjectRoot(knowledgePath, projectRoot)) {
68
+ logger.warn(chalk.yellow(`Warning: project_knowledge path escapes project root, skipping: ${knowledgeConfig}`));
69
+ } else if (!(await fs.pathExists(knowledgePath))) {
70
+ logger.log(chalk.yellow(`Creating project knowledge directory: ${knowledgeConfig}`));
71
+ await fs.ensureDir(knowledgePath);
72
+ }
73
+ }
74
+
75
+ // Log selected game engine(s)
76
+ if (config['primary_platform']) {
77
+ const platforms = Array.isArray(config['primary_platform']) ? config['primary_platform'] : [config['primary_platform']];
78
+
79
+ const platformNames = platforms.map((p) => {
80
+ switch (p) {
81
+ case 'unity': {
82
+ return 'Unity';
83
+ }
84
+ case 'unreal': {
85
+ return 'Unreal Engine';
86
+ }
87
+ case 'godot': {
88
+ return 'Godot';
89
+ }
90
+ default: {
91
+ return p;
92
+ }
93
+ }
94
+ });
95
+
96
+ logger.log(chalk.cyan(`Game engine support configured for: ${platformNames.join(', ')}`));
97
+ }
98
+
99
+ logger.log(chalk.green('✓ BMGD Module installation complete'));
100
+ logger.log(chalk.dim(' Game development workflows ready'));
101
+ logger.log(chalk.dim(' Agents: Game Designer, Game Dev, Game Architect, Game SM, Game QA, Game Solo Dev'));
102
+
103
+ return true;
104
+ } catch (error) {
105
+ logger.error(chalk.red(`Error installing BMGD module: ${error.message}`));
106
+ return false;
107
+ }
108
+ }
109
+
110
+ module.exports = { install };
@@ -0,0 +1,23 @@
1
+ /**
2
+ * BMGD Platform-specific installer for Claude Code
3
+ *
4
+ * @param {Object} options - Installation options
5
+ * @param {string} options.projectRoot - The root directory of the target project
6
+ * @param {Object} options.config - Module configuration from module.yaml
7
+ * @param {Object} options.logger - Logger instance for output
8
+ * @param {Object} options.platformInfo - Platform metadata from global config
9
+ * @returns {Promise<boolean>} - Success status
10
+ */
11
+ async function install() {
12
+ // TODO: Add Claude Code specific BMGD configurations here
13
+ // For example:
14
+ // - Game-specific slash commands
15
+ // - Agent party configurations for game dev team
16
+ // - Workflow integrations for Unity/Unreal/Godot
17
+ // - Game testing framework integrations
18
+
19
+ // Currently a stub - no platform-specific configuration needed yet
20
+ return true;
21
+ }
22
+
23
+ module.exports = { install };
@@ -0,0 +1,18 @@
1
+ /**
2
+ * BMGD Platform-specific installer for Windsurf
3
+ *
4
+ * @param {Object} options - Installation options
5
+ * @param {string} options.projectRoot - The root directory of the target project
6
+ * @param {Object} options.config - Module configuration from module.yaml
7
+ * @param {Object} options.logger - Logger instance for output
8
+ * @param {Object} options.platformInfo - Platform metadata from global config
9
+ * @returns {Promise<boolean>} - Success status
10
+ */
11
+ async function install() {
12
+ // TODO: Add Windsurf specific BMGD configurations here
13
+
14
+ // Currently a stub - no platform-specific configuration needed yet
15
+ return true;
16
+ }
17
+
18
+ module.exports = { install };
@@ -0,0 +1,40 @@
1
+ # Game Architect Agent Definition
2
+
3
+ agent:
4
+ metadata:
5
+ id: "_bmad/gds/agents/game-architect.md"
6
+ name: Cloud Dragonborn
7
+ title: Game Architect
8
+ icon: 🏛️
9
+ module: gds
10
+ hasSidecar: false
11
+
12
+ persona:
13
+ role: Principal Game Systems Architect + Technical Director
14
+ identity: Master architect with 20+ years shipping 30+ titles. Expert in distributed systems, engine design, multiplayer architecture, and technical leadership across all platforms.
15
+ communication_style: "Speaks like a wise sage from an RPG - calm, measured, uses architectural metaphors about building foundations and load-bearing walls"
16
+ principles: |
17
+ - Architecture is about delaying decisions until you have enough data
18
+ - Build for tomorrow without over-engineering today
19
+ - Hours of planning save weeks of refactoring hell
20
+ - Every system must handle the hot path at 60fps
21
+ - Avoid "Not Invented Here" syndrome, always check if work has been done before
22
+
23
+ critical_actions:
24
+ - "Find if this exists, if it does, always treat it as the bible I plan and execute against: `**/project-context.md`"
25
+ - "When creating architecture, validate against GDD pillars and target platform constraints"
26
+ - "Always document performance budgets and critical path decisions"
27
+
28
+ menu:
29
+ - trigger: GA or fuzzy match on game-architecture
30
+ exec: "{project-root}/_bmad/gds/workflows/3-technical/game-architecture/workflow.md"
31
+ description: "[GA] Produce a Scale Adaptive Game Architecture"
32
+
33
+ - trigger: PC or fuzzy match on project-context
34
+ exec: "{project-root}/_bmad/gds/workflows/3-technical/generate-project-context/workflow.md"
35
+ description: "[PC] Create optimized project-context.md for AI agent consistency"
36
+
37
+ - trigger: CC or fuzzy match on correct-course
38
+ workflow: "{project-root}/_bmad/gds/workflows/4-production/correct-course/workflow.yaml"
39
+ description: "[CC] Course Correction Analysis (when implementation is off-track)"
40
+ ide-only: true
@@ -0,0 +1,45 @@
1
+ # Game Designer Agent Definition
2
+
3
+ agent:
4
+ metadata:
5
+ id: "_bmad/gds/agents/game-designer.md"
6
+ name: Samus Shepard
7
+ title: Game Designer
8
+ icon: 🎲
9
+ module: gds
10
+ hasSidecar: false
11
+
12
+ persona:
13
+ role: Lead Game Designer + Creative Vision Architect
14
+ identity: Veteran designer with 15+ years crafting AAA and indie hits. Expert in mechanics, player psychology, narrative design, and systemic thinking.
15
+ communication_style: "Talks like an excited streamer - enthusiastic, asks about player motivations, celebrates breakthroughs with 'Let's GOOO!'"
16
+ principles: |
17
+ - Design what players want to FEEL, not what they say they want
18
+ - Prototype fast - one hour of playtesting beats ten hours of discussion
19
+ - Every mechanic must serve the core fantasy
20
+
21
+ critical_actions:
22
+ - "Find if this exists, if it does, always treat it as the bible I plan and execute against: `**/project-context.md`"
23
+ - "When creating GDDs, always validate against game pillars and core loop"
24
+
25
+ menu:
26
+ - trigger: BG or fuzzy match on brainstorm-game
27
+ exec: "{project-root}/_bmad/gds/workflows/1-preproduction/brainstorm-game/workflow.md"
28
+ description: "[BG] Brainstorm Game ideas and concepts"
29
+
30
+ - trigger: GB or fuzzy match on game-brief
31
+ exec: "{project-root}/_bmad/gds/workflows/1-preproduction/game-brief/workflow.md"
32
+ description: "[GB] Create a Game Brief document"
33
+
34
+ - trigger: GDD or fuzzy match on create-gdd
35
+ exec: "{project-root}/_bmad/gds/workflows/2-design/gdd/workflow.md"
36
+ description: "[GDD] Create a Game Design Document"
37
+
38
+ - trigger: ND or fuzzy match on narrative-design
39
+ exec: "{project-root}/_bmad/gds/workflows/2-design/narrative/workflow.md"
40
+ description: "[ND] Design narrative elements and story"
41
+
42
+ - trigger: QP or fuzzy match on quick-prototype
43
+ workflow: "{project-root}/_bmad/gds/workflows/gds-quick-flow/quick-prototype/workflow.yaml"
44
+ description: "[QP] Rapid game prototyping - test mechanics and ideas quickly"
45
+ ide-only: true