evomeme-dev 0.1.7
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.
- package/README.md +247 -0
- package/bin/evomeme +28 -0
- package/dist/canvas-public/app.js +5857 -0
- package/dist/canvas-public/cycle-detect.js +166 -0
- package/dist/canvas-public/index.html +395 -0
- package/dist/canvas-public/sequence-sheet.js +59 -0
- package/dist/canvas-public/smart-split.js +185 -0
- package/dist/canvas-public/styles.css +2276 -0
- package/dist/canvas-public/vendor/painterro.min.js +3 -0
- package/dist/index.js +25586 -0
- package/package.json +69 -0
- package/skills/evomeme-cloud-fs/SKILL.md +176 -0
- package/skills/evomeme-cloud-fs/agents/openai.yaml +7 -0
- package/skills/evomeme-cover/SKILL.md +132 -0
- package/skills/evomeme-cover/agents/openai.yaml +7 -0
- package/skills/evomeme-game-maker/SKILL.md +214 -0
- package/skills/evomeme-game-maker/agents/openai.yaml +4 -0
- package/skills/evomeme-login/SKILL.md +92 -0
- package/skills/evomeme-login/agents/openai.yaml +7 -0
- package/skills/evomeme-native-bridge-sdk/SKILL.md +286 -0
- package/skills/evomeme-native-bridge-sdk/agents/openai.yaml +7 -0
- package/skills/evomeme-tos-upload/SKILL.md +46 -0
- package/skills/evomeme-tos-upload/agents/openai.yaml +4 -0
- package/skills/game-art/SKILL.md +121 -0
- package/skills/game-art/agents/openai.yaml +7 -0
- package/skills/game-asset-image-generator/SKILL.md +104 -0
- package/skills/game-asset-image-generator/agents/openai.yaml +7 -0
- package/skills/game-asset-image-generator/references/background.md +32 -0
- package/skills/game-asset-image-generator/references/static-game-assets.md +38 -0
- package/skills/game-audio/SKILL.md +82 -0
- package/skills/game-audio/agents/openai.yaml +4 -0
- package/skills/game-audio/references/bgm-cdn.md +127 -0
- package/skills/game-audio/references/sfx-cdn.md +77 -0
- package/skills/game-demo/SKILL.md +103 -0
- package/skills/game-demo/agents/openai.yaml +7 -0
- package/skills/game-maker/SKILL.md +111 -0
- package/skills/game-maker/agents/openai.yaml +4 -0
- package/skills/game-test/SKILL.md +58 -0
- package/skills/game-test/agents/openai.yaml +7 -0
- package/skills/game-test/references/checklists/playtest-qa.md +12 -0
- package/skills/game-ui/SKILL.md +169 -0
- package/skills/game-ui/agents/openai.yaml +4 -0
- package/skills/game-ui/references/checklists/game-ui-quality.md +14 -0
- package/skills/game-ui/references/checklists/hud-readability.md +12 -0
- package/skills/game-ui/references/checklists/mobile-input.md +12 -0
- package/skills/game-ui/references/checklists/responsive-ui-fit.md +12 -0
- package/skills/game-ui/references/ui-patterns.md +140 -0
- package/skills/game-ui/references/ui-prompt-templates.md +63 -0
- package/skills/phaser-2d-game/SKILL.md +127 -0
- package/skills/phaser-2d-game/agents/openai.yaml +7 -0
- package/skills/phaser-2d-game/references/engine-performance.md +64 -0
- package/skills/phaser-2d-game/references/engine-physics.md +139 -0
- package/skills/phaser-2d-game/references/engine-runtime.md +129 -0
- package/skills/phaser-2d-game/references/engine-spritesheets.md +99 -0
- package/skills/phaser-2d-game/references/engine-tilemaps.md +80 -0
- package/skills/phaser-2d-game/references/file-structure.md +94 -0
- package/skills/phaser-2d-graphics-builder/SKILL.md +68 -0
- package/skills/phaser-2d-graphics-builder/agents/openai.yaml +7 -0
- package/skills/phaser-2d-graphics-builder/assets/scorecard-anchors/scene-1.jpeg +0 -0
- package/skills/phaser-2d-graphics-builder/assets/scorecard-anchors/scene-2.jpeg +0 -0
- package/skills/phaser-2d-graphics-builder/assets/scorecard-anchors/scene-3.jpg +0 -0
- package/skills/phaser-2d-graphics-builder/references/checklists/compose-quality.md +10 -0
- package/skills/phaser-2d-graphics-builder/references/checklists/performance-safe-visual-detail.md +9 -0
- package/skills/phaser-2d-graphics-builder/references/checklists/premium-game-quality-gate.md +15 -0
- package/skills/phaser-2d-graphics-builder/references/checklists/sprite-quality.md +10 -0
- package/skills/phaser-2d-graphics-builder/references/checklists/technical-art-quality.md +9 -0
- package/skills/phaser-2d-graphics-builder/references/checklists/visual-scorecard.md +9 -0
- package/skills/phaser-2d-graphics-builder/references/compose-recipes.md +71 -0
- package/skills/phaser-2d-graphics-builder/references/graphics-prompt-templates.md +33 -0
- package/skills/phaser-2d-graphics-builder/references/implementation-blueprint.md +82 -0
- package/skills/phaser-2d-graphics-builder/references/sprite-recipes.md +90 -0
- package/skills/phaser-2d-graphics-builder/references/technical-art.md +67 -0
- package/skills/phaser-2d-graphics-builder/references/vfx-recipes.md +67 -0
- package/skills/phaser-2d-graphics-builder/references/visual-scorecard.md +129 -0
- package/skills/threejs-3d-game/SKILL.md +113 -0
- package/skills/threejs-3d-game/agents/openai.yaml +7 -0
- package/skills/threejs-3d-game/references/engine-asset-pipeline.md +116 -0
- package/skills/threejs-3d-game/references/engine-audio.md +70 -0
- package/skills/threejs-3d-game/references/engine-input-camera.md +84 -0
- package/skills/threejs-3d-game/references/engine-performance.md +96 -0
- package/skills/threejs-3d-game/references/engine-physics.md +142 -0
- package/skills/threejs-3d-game/references/engine-runtime.md +199 -0
- package/skills/threejs-3d-game/references/file-structure.md +353 -0
- package/skills/threejs-aaa-graphics-builder/SKILL.md +62 -0
- package/skills/threejs-aaa-graphics-builder/agents/openai.yaml +7 -0
- package/skills/threejs-aaa-graphics-builder/assets/scorecard-anchors/scene-1.jpg +0 -0
- package/skills/threejs-aaa-graphics-builder/assets/scorecard-anchors/scene-2.jpg +0 -0
- package/skills/threejs-aaa-graphics-builder/assets/scorecard-anchors/scene-3.jpg +0 -0
- package/skills/threejs-aaa-graphics-builder/references/checklists/aaa-game-quality-gate.md +23 -0
- package/skills/threejs-aaa-graphics-builder/references/checklists/aaa-visual-scorecard.md +19 -0
- package/skills/threejs-aaa-graphics-builder/references/checklists/material-lighting-quality.md +14 -0
- package/skills/threejs-aaa-graphics-builder/references/checklists/performance-safe-visual-detail.md +14 -0
- package/skills/threejs-aaa-graphics-builder/references/checklists/procedural-model-quality.md +15 -0
- package/skills/threejs-aaa-graphics-builder/references/checklists/technical-art-quality.md +17 -0
- package/skills/threejs-aaa-graphics-builder/references/graphics-prompt-templates.md +236 -0
- package/skills/threejs-aaa-graphics-builder/references/implementation-blueprint.md +161 -0
- package/skills/threejs-aaa-graphics-builder/references/model-recipes.md +146 -0
- package/skills/threejs-aaa-graphics-builder/references/render-recipes.md +90 -0
- package/skills/threejs-aaa-graphics-builder/references/shader-cookbook.md +292 -0
- package/skills/threejs-aaa-graphics-builder/references/technical-art.md +167 -0
- package/skills/threejs-aaa-graphics-builder/references/visual-scorecard.md +147 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: game-asset-image-generator
|
|
3
|
+
description: 指导 Agent 正确使用 MCP 提供的各类游戏素材生成与编辑工具。凡涉及生成或编辑游戏概念图和游戏素材(包括图片、模型、视频等),都必须先调用本技能,并确保最终产物按规范保存到当前工作区的 assets/ 目录。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 游戏素材生成
|
|
7
|
+
|
|
8
|
+
## 工作区素材准则
|
|
9
|
+
|
|
10
|
+
必须遵守以下规则:
|
|
11
|
+
|
|
12
|
+
1. 所有 AI 生成的图片和视频都必须保存到当前工作区根目录的 `assets/` 文件夹。不得只保留远程 URL;即使运行时不直接读取本地文件,`assets/` 中仍必须存在对应素材文件。
|
|
13
|
+
2. evomeme平台游戏使用的所有素材都必须把 TOS URL 写入项目配置(通常为 `public/config.json`)。游戏代码必须通过配置项读取素材 URL,禁止从 `assets/` 导入、读取或拼接素材路径。
|
|
14
|
+
|
|
15
|
+
调用素材工具时,始终把当前工作区根目录的绝对路径传给 `workspace_dir`,确保工具把返回文件保存到正确的 `assets/` 文件夹。
|
|
16
|
+
|
|
17
|
+
## 素材工具
|
|
18
|
+
|
|
19
|
+
当前提供两个素材工具:
|
|
20
|
+
|
|
21
|
+
- `evomeme_generate_game_image`:根据文本提示生成图片。
|
|
22
|
+
- `evomeme_cutout_game_image`:对已有图片做透明背景抠图。
|
|
23
|
+
|
|
24
|
+
两个工具都会提交异步任务并自行轮询,直到任务成功或失败。成功后,工具会下载最终 TOS 图片到 `<workspace_dir>/assets/`,同时返回文本元数据和 MCP `image` 多模态内容块。
|
|
25
|
+
|
|
26
|
+
## 并行调用
|
|
27
|
+
|
|
28
|
+
生成多项素材时,尽可能通过异步 MCP 调用并行发起互不依赖的任务,不要逐项等待一个任务完成后才调用下一个。并行前为每项素材固定提示词、参数和标识;每个调用都显式传入相同的正确 `workspace_dir`,结果返回后依据任务与素材的对应关系分别记录 `job_id`、TOS URL 和本地文件。
|
|
29
|
+
|
|
30
|
+
存在输出依赖的步骤必须保持顺序,例如抠图必须等待待处理图片生成完成,后一张图片必须引用前一张结果时也要先取得有效 URL。并行只用于依赖关系允许同时执行的任务;单个 MCP 工具内部的轮询等待不应阻塞其他独立素材任务的发起。
|
|
31
|
+
|
|
32
|
+
## `evomeme_generate_game_image`
|
|
33
|
+
|
|
34
|
+
根据提示词生成游戏图片。
|
|
35
|
+
|
|
36
|
+
生成小石头、独立云朵、固定姿态敌人等无需动画或动态特效的单个静态游戏元素时,使用 `image_type=asset`,并且必须先读取并遵循 [静态游戏元素提示词指南](references/static-game-assets.md)。如果存在游戏概念图或当前元素的设定概念图,必须按该指南将概念图作为 `reference_image_url` 使用。该指南不适用于背景、视差层、tileset、动画、特效、视频或模型。
|
|
37
|
+
|
|
38
|
+
生成铺满游戏画面的完整单层背景时,使用 `image_type=background`,并且必须先读取并遵循 [游戏背景提示词指南](references/background.md)。如果存在游戏概念图或当前场景的设定概念图,必须按该指南将概念图作为 `reference_image_url` 使用。
|
|
39
|
+
|
|
40
|
+
### 入参
|
|
41
|
+
|
|
42
|
+
| 参数 | 必填 | 类型/可选值 | 说明 |
|
|
43
|
+
| --- | --- | --- | --- |
|
|
44
|
+
| `prompt` | 是 | `string` | 生图提示词。 |
|
|
45
|
+
| `image_type` | 否 | `asset`、`background`、`parallax background`、`tileset` | 图片类型,默认 `background`。`asset`、`parallax background`、`tileset` 会自动抠图。 |
|
|
46
|
+
| `size` | 否 | `2048x2048`、`1728x2304`、`2304x1728`、`2560x1440`、`1440x2560`、`1664x2496`、`2496x1664`、`3024x1296` | 输出尺寸,默认 `2048x2048`。 |
|
|
47
|
+
| `reference_image_url` | 否 | `string` | 参考图片的可访问 URL。 |
|
|
48
|
+
| `image_model` | 否 | `asset-lite`、`asset-pro` | 生图模型,默认 `asset-lite`。 |
|
|
49
|
+
| `workspace_dir` | 否 | `string` | Agent 当前工作区根目录的绝对路径。为满足素材准则,调用时必须显式传入。 |
|
|
50
|
+
|
|
51
|
+
### 出参
|
|
52
|
+
|
|
53
|
+
成功结果的 `content` 包含:
|
|
54
|
+
|
|
55
|
+
1. `content[0]`:文本元数据,包括:
|
|
56
|
+
- `job_id`:异步任务 ID。
|
|
57
|
+
- `tos_url`:最终图片的 TOS URL。
|
|
58
|
+
- `asset_url`:与 `tos_url` 相同,便于兼容已有配置逻辑。
|
|
59
|
+
- `status`:终态,成功时为 `SUCCEEDED`。
|
|
60
|
+
- `attempts`:已执行次数与最大尝试次数。
|
|
61
|
+
- `size`:服务端确认的图片尺寸。
|
|
62
|
+
- `image_type`:服务端确认的图片类型。
|
|
63
|
+
- `has_transparent_background`:是否具有透明背景。
|
|
64
|
+
- `local_path`:下载到当前工作区 `assets/` 的本地绝对路径。
|
|
65
|
+
- `multimodal_base64`:Base64 所在内容块及字符数说明。
|
|
66
|
+
- `mime_type`:图片 MIME 类型。
|
|
67
|
+
2. `content[1]`:MCP 多模态图片内容块:
|
|
68
|
+
- `type: "image"`
|
|
69
|
+
- `data`:不带 Data URL 前缀的 Base64 图片数据。
|
|
70
|
+
- `mimeType`:图片 MIME 类型。
|
|
71
|
+
|
|
72
|
+
本地文件名取最终 TOS URL 路径的最后一段,并清理操作系统不允许的字符。失败时结果带 `isError: true`,文本内容为失败或超时信息。
|
|
73
|
+
|
|
74
|
+
## `evomeme_cutout_game_image`
|
|
75
|
+
|
|
76
|
+
把已有图片处理为透明背景图片。
|
|
77
|
+
|
|
78
|
+
### 入参
|
|
79
|
+
|
|
80
|
+
| 参数 | 必填 | 类型 | 说明 |
|
|
81
|
+
| --- | --- | --- | --- |
|
|
82
|
+
| `image_url` | 是 | `string` | 待抠图原图的可访问 URL。 |
|
|
83
|
+
| `workspace_dir` | 否 | `string` | Agent 当前工作区根目录的绝对路径。为满足素材准则,调用时必须显式传入。 |
|
|
84
|
+
|
|
85
|
+
### 出参
|
|
86
|
+
|
|
87
|
+
成功结果的 `content` 包含:
|
|
88
|
+
|
|
89
|
+
1. `content[0]`:文本元数据,包括:
|
|
90
|
+
- `job_id`:异步任务 ID。
|
|
91
|
+
- `tos_url`:最终抠图结果的 TOS URL。
|
|
92
|
+
- `asset_url`:与 `tos_url` 相同,便于兼容已有配置逻辑。
|
|
93
|
+
- `status`:终态,成功时为 `SUCCEEDED`。
|
|
94
|
+
- `attempts`:已执行次数与最大尝试次数。
|
|
95
|
+
- `has_transparent_background`:透明背景标记,成功结果通常为 `true`。
|
|
96
|
+
- `local_path`:下载到当前工作区 `assets/` 的本地绝对路径。
|
|
97
|
+
- `multimodal_base64`:Base64 所在内容块及字符数说明。
|
|
98
|
+
- `mime_type`:图片 MIME 类型。
|
|
99
|
+
2. `content[1]`:MCP 多模态图片内容块:
|
|
100
|
+
- `type: "image"`
|
|
101
|
+
- `data`:不带 Data URL 前缀的 Base64 图片数据。
|
|
102
|
+
- `mimeType`:图片 MIME 类型。
|
|
103
|
+
|
|
104
|
+
本地文件名取最终 TOS URL 路径的最后一段,并清理操作系统不允许的字符。失败时结果带 `isError: true`,文本内容为失败或超时信息。
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# 游戏背景提示词指南
|
|
2
|
+
|
|
3
|
+
游戏背景是铺满游戏画面的完整单层场景图片,例如森林、城市街道、太空区域、地下洞穴或室内空间。每张背景只生成一次,并作为单独的 `background` 图片使用。
|
|
4
|
+
|
|
5
|
+
## 使用概念图作为引用
|
|
6
|
+
|
|
7
|
+
如果存在游戏概念图或当前场景的设定概念图,必须将概念图的可访问 URL 作为 `reference_image_url`:
|
|
8
|
+
|
|
9
|
+
- 优先使用当前场景的设定概念图;没有时再使用整体游戏概念图。
|
|
10
|
+
- 在提示词中明确需要继承的特征,例如世界观、场景结构、配色、材质、光照和画风。
|
|
11
|
+
- 不要复制概念图中的排版、文字、标注、角色展示或其他无关内容。
|
|
12
|
+
|
|
13
|
+
## 提示词
|
|
14
|
+
|
|
15
|
+
编写时遵守:
|
|
16
|
+
|
|
17
|
+
- 写清背景在游戏中的用途、场景地点、时代或主题。
|
|
18
|
+
- 写清横屏或竖屏构图、摄像机视角、地平线位置和主要空间方向。
|
|
19
|
+
- 写清时间、天气、光照、主色调和主要材质,并与已有游戏美术规范保持一致。
|
|
20
|
+
- 根据玩法说明需要保持清晰、低干扰的区域,例如中央移动区、道路、平台区域或角色活动区。
|
|
21
|
+
- 将高细节和视觉重心放在不会遮挡玩法信息的位置,避免整张图细节密度一致。
|
|
22
|
+
- 保持空间层次、透视、光向和尺度统一,使背景能够直接铺满游戏画面。
|
|
23
|
+
- 要求 `full-frame composition, edge-to-edge scene, no border`,不要生成白底、透明底、画框或展示样机。
|
|
24
|
+
- 结尾包含 `no characters, no enemies, no pickups, no UI, no text, no watermark, no logo`。
|
|
25
|
+
|
|
26
|
+
## 禁止写法
|
|
27
|
+
|
|
28
|
+
- 把角色、敌人、道具、拾取物、攻击特效或可交互对象画进背景。
|
|
29
|
+
- 把 HUD、按钮、标题、分数、教程文字、Logo 或水印画进背景。
|
|
30
|
+
- 只描述氛围而不说明具体场景、视角、构图方向和玩法留白。
|
|
31
|
+
- 要求独立元素、透明底、纯白底、素材合集、设定表或多视图。
|
|
32
|
+
- 使用与游戏概念图或既有美术规范冲突的画风、配色、材质和光照。
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# 静态游戏元素提示词指南
|
|
2
|
+
|
|
3
|
+
静态游戏元素是可由一张独立图片直接表现、无需动画帧或动态特效的单个游戏元素,例如小石头、独立云朵、灌木、路牌,以及只使用固定姿态的敌人。每个静态元素只生成一次,并作为单独的 `asset` 图片使用。
|
|
4
|
+
|
|
5
|
+
本指南不适用于:
|
|
6
|
+
|
|
7
|
+
- 完整场景背景、视差背景层或 tileset。
|
|
8
|
+
- 需要行走、攻击、受击等动画帧的角色或敌人。
|
|
9
|
+
- 火焰、爆炸、拖尾等动态特效。
|
|
10
|
+
- 游戏概念图、角色设定图、UI、视频或 3D 模型。
|
|
11
|
+
|
|
12
|
+
## 使用概念图作为引用
|
|
13
|
+
|
|
14
|
+
如果存在游戏概念图或当前元素的设定概念图,必须将概念图的可访问 URL 作为 `reference_image_url`:
|
|
15
|
+
|
|
16
|
+
- 优先使用当前元素的设定概念图;没有时再使用整体游戏概念图。
|
|
17
|
+
- 在提示词中明确需要继承的特征,例如元素造型、轮廓、配色、材质和画风。
|
|
18
|
+
- 不要复制概念图中的排版、文字、标注、多视图或其他无关元素。
|
|
19
|
+
|
|
20
|
+
## 提示词
|
|
21
|
+
|
|
22
|
+
编写时遵守:
|
|
23
|
+
|
|
24
|
+
- 一张图只描述一个静态元素,不得要求合集、多个变体或多视图。
|
|
25
|
+
- 写清元素在游戏中的作用,例如障碍物、固定敌人或环境装饰。
|
|
26
|
+
- 有方向性的元素必须指定唯一朝向;无方向性的元素指定正视图、侧视图或俯视图。
|
|
27
|
+
- 固定敌人只描述一个可直接使用的姿态。
|
|
28
|
+
- 只保留一至三个关键识别特征,确保缩小后仍有清晰轮廓。
|
|
29
|
+
- 要求主体居中、完整显示、四周留白、边缘不裁切。
|
|
30
|
+
- 使用 `pure white background, no ground, no cast shadow, clean edges`,便于自动抠图。
|
|
31
|
+
- 结尾包含 `no text, no watermark, no logo, no UI, no extra objects`。
|
|
32
|
+
|
|
33
|
+
## 禁止写法
|
|
34
|
+
|
|
35
|
+
- `background scene`、`parallax layer`、`tileset`。
|
|
36
|
+
- `character sheet`、`multiple views`、`sprite sheet`、`animation frames`、`turnaround sheet`。
|
|
37
|
+
- 多个元素、多个姿态、多个方向或多个皮肤同时出现在一张图中。
|
|
38
|
+
- 场景叙事、地面、天空、环境光效或其他会妨碍独立抠图的内容。
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: game-audio
|
|
3
|
+
description: 将已托管的 BGM / SFX 接入 Phaser / Three.js 运行时配置。在游戏需要可用的 CDN 音频 URL、配置绑定或加载器接入,且不在本地生成音频时使用。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 游戏音频
|
|
7
|
+
|
|
8
|
+
## 概述
|
|
9
|
+
|
|
10
|
+
将此技能用于已托管在 CDN 或对象存储中的游戏音频。按参考文档中的约定将对象键拼成可加载的 HTTPS URL,并写入 `public/config.json` 或运行时加载器。
|
|
11
|
+
|
|
12
|
+
**不生成新音频**。如果所需音频对象在 CDN 中不存在且用户未提供 URL,停止并请用户确认对象键或更新参考清单,不得编造路径。
|
|
13
|
+
|
|
14
|
+
## 何时使用此技能
|
|
15
|
+
|
|
16
|
+
- 设计文档、配置文件或用户指定了某首 BGM 或 SFX 的文件名/键,需要给出可加载 URL
|
|
17
|
+
- 填写 `bgm_main`、`audio_bgm_gameplay`、`audio_sfx_click`、`backgroundMusic`、`src`、`url` 等音频字段
|
|
18
|
+
- 用户明确说音频来自公司 CDN、对象存储或固定托管 URL
|
|
19
|
+
- 接入点击音、拾取音、碰撞音、射击音、爆炸音、成功/失败音等游戏反馈音效
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 阅读顺序
|
|
24
|
+
|
|
25
|
+
1. 读完本节后,根据任务类型选择并**打开对应参考文档**,不得在未读参考的情况下拼接 URL
|
|
26
|
+
2. **BGM(循环背景音乐)**:`references/bgm-cdn.md`
|
|
27
|
+
3. **SFX(短促触发音效)**:`references/sfx-cdn.md`
|
|
28
|
+
4. 同时涉及 BGM 和 SFX 时,读取两个参考
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## BGM 路由
|
|
33
|
+
|
|
34
|
+
- 加载 BGM 参考文档,从中提取 CDN 根、路径前缀和曲目清单
|
|
35
|
+
- 用于循环背景音乐,对应配置键如 `bgm_main`、`audio_bgm_gameplay`、`audio_bgm_menu`、`backgroundMusic`
|
|
36
|
+
- 曲目不在清单中时,不得编造路径;请用户确认对象键后再配置
|
|
37
|
+
|
|
38
|
+
推荐技能:`game-audio`;BGM 参考 `references/bgm-cdn.md`。
|
|
39
|
+
|
|
40
|
+
## SFX 路由
|
|
41
|
+
|
|
42
|
+
- 加载 `references/sfx-cdn.md`,提取 CDN 根和文件名规则
|
|
43
|
+
- 用于短促触发音效,对应配置键如 `audio_sfx_click`、`audio_sfx_pickup`、`audio_sfx_impact`、`audio_sfx_shoot`、`audio_sfx_explosion`、`audio_sfx_success`、`audio_sfx_fail`
|
|
44
|
+
- 高频触发音效(脚步、拖动、持续碰撞)作为节流或循环播放处理,不逐帧重触发
|
|
45
|
+
|
|
46
|
+
推荐技能:`game-audio`;SFX 参考 `references/sfx-cdn.md`。
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## 工作流
|
|
51
|
+
|
|
52
|
+
1. 确认任务类型:BGM、SFX 或两者
|
|
53
|
+
2. 读取对应参考文档,提取 CDN 根、必需前缀和文件名规则
|
|
54
|
+
3. 从用户、策划案、配置表或参考清单中找到确切的对象键
|
|
55
|
+
4. 拼出完整 HTTPS URL(使用参考中的 CDN 根和前缀,不额外编码整个 URL)
|
|
56
|
+
5. 将 URL 写入对应配置键、清单或运行时加载代码,保留项目现有音频架构
|
|
57
|
+
6. 验证控制标志:BGM 遵守 `audio_music_enabled`,SFX 遵守 `audio_sfx_enabled`;游戏内循环不泄漏到菜单或结算页
|
|
58
|
+
|
|
59
|
+
### 写入 2D 项目配置(`public/config.json`)
|
|
60
|
+
|
|
61
|
+
```json
|
|
62
|
+
"bgm_main": { "value": "https://...", "type": "audio", "label": "背景音乐" },
|
|
63
|
+
"sfx_jump": { "value": "https://...", "type": "audio", "label": "跳跃音效" }
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### 写入 3D 项目配置
|
|
67
|
+
|
|
68
|
+
按项目现有配置结构写入,config 键名遵循 `audio_bgm_*` / `audio_sfx_*` 命名规范。
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## 护栏
|
|
73
|
+
|
|
74
|
+
- 不编造文件名、CDN 域名、目录前缀或百分比编码片段
|
|
75
|
+
- 不静默替换 BGM 和 SFX 的根路径
|
|
76
|
+
- 不以生成音频为由加载已移除的本地音频生成技能
|
|
77
|
+
- 对象键缺失或用户未提供完整 URL 时,停止并要求用户提供或更新参考,不猜测
|
|
78
|
+
|
|
79
|
+
## References
|
|
80
|
+
|
|
81
|
+
- BGM CDN 清单:`references/bgm-cdn.md`
|
|
82
|
+
- SFX CDN 清单:`references/sfx-cdn.md`
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# BGM CDN And URL Catalog
|
|
2
|
+
|
|
3
|
+
This file is the authoritative source for hosted background-music routing. Read `../SKILL.md` first, then use this reference to compose final HTTPS URLs for tracks stored under the BGM bucket path.
|
|
4
|
+
|
|
5
|
+
## CDN Roots
|
|
6
|
+
|
|
7
|
+
Primary public CDN root:
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
https://vibe-writing-dev-public.tos-cn-beijing.volces.com/
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Secondary root that may be used only when the user explicitly provides a full URL or confirms that a track lives there:
|
|
14
|
+
|
|
15
|
+
```text
|
|
16
|
+
https://ppy-test.tos-cn-beijing.volces.com/
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Required Prefix
|
|
20
|
+
|
|
21
|
+
All hosted background music objects live under:
|
|
22
|
+
|
|
23
|
+
```text
|
|
24
|
+
bgm/
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Final URL Shape
|
|
28
|
+
|
|
29
|
+
```text
|
|
30
|
+
{CDN root}bgm/{encoded filename}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
- Keep the CDN root exactly as listed.
|
|
34
|
+
- Keep the `bgm/` prefix exactly as listed.
|
|
35
|
+
- The filename segment includes the extension such as `.mp3` or `.m4a`.
|
|
36
|
+
- Encode the filename segment with UTF-8 percent-encoding when it contains non-ASCII or reserved characters.
|
|
37
|
+
|
|
38
|
+
## Encoding Rule
|
|
39
|
+
|
|
40
|
+
- Use the full stored filename, including extension, as the source string for `encodeURIComponent`.
|
|
41
|
+
- Encode only the filename segment, not the entire URL.
|
|
42
|
+
- Keep spaces encoded as `%20`.
|
|
43
|
+
- Common examples:
|
|
44
|
+
- `–` -> `%E2%80%93`
|
|
45
|
+
- `(` -> `%EF%BC%88`
|
|
46
|
+
- `)` -> `%EF%BC%89`
|
|
47
|
+
|
|
48
|
+
## Track Catalog
|
|
49
|
+
|
|
50
|
+
Final URL = `https://vibe-writing-dev-public.tos-cn-beijing.volces.com/bgm/` + filename fragment below unless the user explicitly confirms the secondary CDN root.
|
|
51
|
+
|
|
52
|
+
| Object key | Filename fragment |
|
|
53
|
+
| --- | --- |
|
|
54
|
+
| `2048.mp3` | `2048.mp3` |
|
|
55
|
+
| `Arrows – Puzzle Escape(箭头逃脱).mp3` | `Arrows%20%E2%80%93%20Puzzle%20Escape%EF%BC%88%E7%AE%AD%E5%A4%B4%E9%80%83%E8%84%B1%EF%BC%89.mp3` |
|
|
56
|
+
| `Ballz 打砖块.mp3` | `Ballz%20%E6%89%93%E7%A0%96%E5%9D%97.mp3` |
|
|
57
|
+
| `Block Blast! 方块消除1.mp3` | `Block%20Blast%21%20%E6%96%B9%E5%9D%97%E6%B6%88%E9%99%A41.mp3` |
|
|
58
|
+
| `Block Blast! 方块消除2.mp3` | `Block%20Blast%21%20%E6%96%B9%E5%9D%97%E6%B6%88%E9%99%A42.mp3` |
|
|
59
|
+
| `DOODLE JUMP2.mp3` | `DOODLE%20JUMP2.mp3` |
|
|
60
|
+
| `Doodle Jump.mp3` | `Doodle%20Jump.mp3` |
|
|
61
|
+
| `Flappy Bird1.mp3` | `Flappy%20Bird1.mp3` |
|
|
62
|
+
| `Flappy Bird2.mp3` | `Flappy%20Bird2.mp3` |
|
|
63
|
+
| `Vita Mahjong 麻将配对1.mp3` | `Vita%20Mahjong%20%E9%BA%BB%E5%B0%86%E9%85%8D%E5%AF%B91.mp3` |
|
|
64
|
+
| `Vita Mahjong 麻将配对2.mp3` | `Vita%20Mahjong%20%E9%BA%BB%E5%B0%86%E9%85%8D%E5%AF%B92.mp3` |
|
|
65
|
+
| `_疯狂的鸽子1.mp3` | `_%E7%96%AF%E7%8B%82%E7%9A%84%E9%B8%BD%E5%AD%901.mp3` |
|
|
66
|
+
| `_疯狂的鸽子2.mp3` | `_%E7%96%AF%E7%8B%82%E7%9A%84%E9%B8%BD%E5%AD%902.mp3` |
|
|
67
|
+
| `三消 _ 二合1.mp3` | `%E4%B8%89%E6%B6%88%20_%20%E4%BA%8C%E5%90%881.mp3` |
|
|
68
|
+
| `三消 _ 二合2.mp3` | `%E4%B8%89%E6%B6%88%20_%20%E4%BA%8C%E5%90%882.mp3` |
|
|
69
|
+
| `人格测试.mp3` | `%E4%BA%BA%E6%A0%BC%E6%B5%8B%E8%AF%95.mp3` |
|
|
70
|
+
| `休闲小镇.mp3` | `%E4%BC%91%E9%97%B2%E5%B0%8F%E9%95%87.mp3` |
|
|
71
|
+
| `休闲轻快.mp3` | `%E4%BC%91%E9%97%B2%E8%BD%BB%E5%BF%AB.mp3` |
|
|
72
|
+
| `休闲拼图1.mp3` | `%E4%BC%91%E9%97%B2%E6%8B%BC%E5%9B%BE1.mp3` |
|
|
73
|
+
| `休闲拼图2.mp3` | `%E4%BC%91%E9%97%B2%E6%8B%BC%E5%9B%BE2.mp3` |
|
|
74
|
+
| `冰壶游戏.mp3` | `%E5%86%B0%E5%A3%B6%E6%B8%B8%E6%88%8F.mp3` |
|
|
75
|
+
| `割绳子(Cut the Rope)1.mp3` | `%E5%89%B2%E7%BB%B3%E5%AD%90%EF%BC%88Cut%20the%20Rope%EF%BC%891.mp3` |
|
|
76
|
+
| `割绳子(Cut the Rope)2.mp3` | `%E5%89%B2%E7%BB%B3%E5%AD%90%EF%BC%88Cut%20the%20Rope%EF%BC%892.mp3` |
|
|
77
|
+
| `割草游戏1.mp3` | `%E5%89%B2%E8%8D%89%E6%B8%B8%E6%88%8F1.mp3` |
|
|
78
|
+
| `割草游戏2.mp3` | `%E5%89%B2%E8%8D%89%E6%B8%B8%E6%88%8F2.mp3` |
|
|
79
|
+
| `割草游戏3.mp3` | `%E5%89%B2%E8%8D%89%E6%B8%B8%E6%88%8F3.mp3` |
|
|
80
|
+
| `华容道 _ 拼图1.mp3` | `%E5%8D%8E%E5%AE%B9%E9%81%93%20_%20%E6%8B%BC%E5%9B%BE1.mp3` |
|
|
81
|
+
| `华容道 _ 拼图_2.mp3` | `%E5%8D%8E%E5%AE%B9%E9%81%93%20_%20%E6%8B%BC%E5%9B%BE_2.mp3` |
|
|
82
|
+
| `发泄暴打.mp3` | `%E5%8F%91%E6%B3%84%E6%9A%B4%E6%89%93.mp3` |
|
|
83
|
+
| `叠房子.mp3` | `%E5%8F%A0%E6%88%BF%E5%AD%90.mp3` |
|
|
84
|
+
| `吃分避障.mp3` | `%E5%90%83%E5%88%86%E9%81%BF%E9%9A%9C.mp3` |
|
|
85
|
+
| `合成大西瓜1.mp3` | `%E5%90%88%E6%88%90%E5%A4%A7%E8%A5%BF%E7%93%9C1.mp3` |
|
|
86
|
+
| `合成大西瓜2.mp3` | `%E5%90%88%E6%88%90%E5%A4%A7%E8%A5%BF%E7%93%9C2.mp3` |
|
|
87
|
+
| `哈吉米南北绿豆.mp3` | `%E5%93%88%E5%9F%BA%E7%B1%B3%E5%8D%97%E5%8C%97%E7%BB%BF%E8%B1%86.mp3` |
|
|
88
|
+
| `场景模拟对话1.mp3` | `%E5%9C%BA%E6%99%AF%E6%A8%A1%E6%8B%9F%E5%AF%B9%E8%AF%9D1.mp3` |
|
|
89
|
+
| `场景模拟对话2.mp3` | `%E5%9C%BA%E6%99%AF%E6%A8%A1%E6%8B%9F%E5%AF%B9%E8%AF%9D2.mp3` |
|
|
90
|
+
| `塔防.mp3` | `%E5%A1%94%E9%98%B2.mp3` |
|
|
91
|
+
| `对抗类.mp3` | `%E5%AF%B9%E6%8A%97%E7%B1%BB.mp3` |
|
|
92
|
+
| `奇幻冒险.m4a` | `%E5%A5%87%E5%B9%BB%E5%86%92%E9%99%A9.m4a` |
|
|
93
|
+
| `愤怒的小鸟.mp3` | `%E6%84%A4%E6%80%92%E7%9A%84%E5%B0%8F%E9%B8%9F.mp3` |
|
|
94
|
+
| `战斗.mp3` | `%E6%88%98%E6%96%97.mp3` |
|
|
95
|
+
| `打地鼠.mp3` | `%E6%89%93%E5%9C%B0%E9%BC%A0.mp3` |
|
|
96
|
+
| `搞笑.mp3` | `%E6%90%9E%E7%AC%91.mp3` |
|
|
97
|
+
| `拧螺丝1.mp3` | `%E6%8B%A7%E8%9E%BA%E4%B8%9D1.mp3` |
|
|
98
|
+
| `拧螺丝2.mp3` | `%E6%8B%A7%E8%9E%BA%E4%B8%9D2.mp3` |
|
|
99
|
+
| `数值生存.mp3` | `%E6%95%B0%E5%80%BC%E7%94%9F%E5%AD%98.mp3` |
|
|
100
|
+
| `数字门跑酷1.mp3` | `%E6%95%B0%E5%AD%97%E9%97%A8%E8%B7%91%E9%85%B71.mp3` |
|
|
101
|
+
| `数字门跑酷2.mp3` | `%E6%95%B0%E5%AD%97%E9%97%A8%E8%B7%91%E9%85%B72.mp3` |
|
|
102
|
+
| `是男人就下 100 层.mp3` | `%E6%98%AF%E7%94%B7%E4%BA%BA%E5%B0%B1%E4%B8%8B%20100%20%E5%B1%82.mp3` |
|
|
103
|
+
| `是男人就下100层2.mp3` | `%E6%98%AF%E7%94%B7%E4%BA%BA%E5%B0%B1%E4%B8%8B100%E5%B1%822.mp3` |
|
|
104
|
+
| `校准类.mp3` | `%E6%A0%A1%E5%87%86%E7%B1%BB.mp3` |
|
|
105
|
+
| `横板过关.mp3` | `%E6%A8%AA%E6%9D%BF%E8%BF%87%E5%85%B3.mp3` |
|
|
106
|
+
| `沙盒模拟类1.mp3` | `%E6%B2%99%E7%9B%92%E6%A8%A1%E6%8B%9F%E7%B1%BB1.mp3` |
|
|
107
|
+
| `沙盒模拟类2.mp3` | `%E6%B2%99%E7%9B%92%E6%A8%A1%E6%8B%9F%E7%B1%BB2.mp3` |
|
|
108
|
+
| `沙盒模拟类3.mp3` | `%E6%B2%99%E7%9B%92%E6%A8%A1%E6%8B%9F%E7%B1%BB3.mp3` |
|
|
109
|
+
| `祖玛1.mp3` | `%E7%A5%96%E7%8E%9B1.mp3` |
|
|
110
|
+
| `祖玛2.mp3` | `%E7%A5%96%E7%8E%9B2.mp3` |
|
|
111
|
+
| `经营养成.mp3` | `%E7%BB%8F%E8%90%A5%E5%85%BB%E6%88%90.mp3` |
|
|
112
|
+
| `经营养成2.mp3` | `%E7%BB%8F%E8%90%A5%E5%85%BB%E6%88%902.mp3` |
|
|
113
|
+
| `背包堆叠(Stack_Backpack).mp3` | `%E8%83%8C%E5%8C%85%E5%A0%86%E5%8F%A0%EF%BC%88Stack_Backpack%EF%BC%89.mp3` |
|
|
114
|
+
| `节奏类(音游点击).mp3` | `%E8%8A%82%E5%A5%8F%E7%B1%BB%EF%BC%88%E9%9F%B3%E6%B8%B8%E7%82%B9%E5%87%BB%EF%BC%89.mp3` |
|
|
115
|
+
| `解绳游戏(Tangled Rope)1.mp3` | `%E8%A7%A3%E7%BB%B3%E6%B8%B8%E6%88%8F%EF%BC%88Tangled%20Rope%EF%BC%891.mp3` |
|
|
116
|
+
| `解绳游戏(Tangled Rope)2.mp3` | `%E8%A7%A3%E7%BB%B3%E6%B8%B8%E6%88%8F%EF%BC%88Tangled%20Rope%EF%BC%892.mp3` |
|
|
117
|
+
| `贪吃蛇.mp3` | `%E8%B4%AA%E5%90%83%E8%9B%87.mp3` |
|
|
118
|
+
| `贪吃蛇2.mp3` | `%E8%B4%AA%E5%90%83%E8%9B%872.mp3` |
|
|
119
|
+
| `跑酷避障.mp3` | `%E8%B7%91%E9%85%B7%E9%81%BF%E9%9A%9C.mp3` |
|
|
120
|
+
| `跳一跳.mp3` | `%E8%B7%B3%E4%B8%80%E8%B7%B3.mp3` |
|
|
121
|
+
| `跳一跳2.mp3` | `%E8%B7%B3%E4%B8%80%E8%B7%B32.mp3` |
|
|
122
|
+
| `连击挑战1.mp3` | `%E8%BF%9E%E5%87%BB%E6%8C%91%E6%88%981.mp3` |
|
|
123
|
+
| `连击挑战2.mp3` | `%E8%BF%9E%E5%87%BB%E6%8C%91%E6%88%982.mp3` |
|
|
124
|
+
| `鉴别伪人.mp3` | `%E9%89%B4%E5%88%AB%E4%BC%AA%E4%BA%BA.mp3` |
|
|
125
|
+
| `雷霆战机.mp3` | `%E9%9B%B7%E9%9C%86%E6%88%98%E6%9C%BA.mp3` |
|
|
126
|
+
| `鬼抓人.mp3` | `%E9%AC%BC%E6%8A%93%E4%BA%BA.mp3` |
|
|
127
|
+
| `黑洞(Tiles In Hole_ Black Hole).mp3` | `%E9%BB%91%E6%B4%9E%EF%BC%88Tiles%20In%20Hole_%20Black%20Hole%EF%BC%89.mp3` |
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# SFX CDN And URL Catalog
|
|
2
|
+
|
|
3
|
+
This file is the authoritative source for hosted sound-effect routing. Read `../SKILL.md` first, then use this reference to compose final HTTPS URLs for short feedback audio stored under the SFX bucket path.
|
|
4
|
+
|
|
5
|
+
This catalog is for audio feedback only. Do not use it for canvas particles, trails, sparks, or other visual VFX implementations.
|
|
6
|
+
|
|
7
|
+
## CDN Root
|
|
8
|
+
|
|
9
|
+
Public CDN root:
|
|
10
|
+
|
|
11
|
+
```text
|
|
12
|
+
https://ppy-test.tos-cn-beijing.volces.com/
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Required Prefix
|
|
16
|
+
|
|
17
|
+
All hosted gameplay and UI sound effects live under:
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
sfx/
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Final URL Shape
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
{CDN root}sfx/{encoded filename}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
- Keep the CDN root exactly as listed.
|
|
30
|
+
- Keep the `sfx/` prefix exactly as listed.
|
|
31
|
+
- The filename segment includes the extension such as `.mp3`, `.m4a`, `.ogg`, or `.mp4`.
|
|
32
|
+
- Encode the filename segment with UTF-8 percent-encoding when required.
|
|
33
|
+
|
|
34
|
+
## Encoding Rule
|
|
35
|
+
|
|
36
|
+
- Use the full stored filename, including extension, as the source string for `encodeURIComponent`.
|
|
37
|
+
- Encode only the filename segment, not the full URL.
|
|
38
|
+
- Keep spaces encoded as `%20`.
|
|
39
|
+
|
|
40
|
+
## Sound Catalog
|
|
41
|
+
|
|
42
|
+
Final URL = `https://ppy-test.tos-cn-beijing.volces.com/sfx/` + filename fragment below.
|
|
43
|
+
|
|
44
|
+
| Object key | Filename fragment |
|
|
45
|
+
| --- | --- |
|
|
46
|
+
| `RUA.mp3` | `RUA.mp3` |
|
|
47
|
+
| `人物冲刺.mp3` | `%E4%BA%BA%E7%89%A9%E5%86%B2%E5%88%BA.mp3` |
|
|
48
|
+
| `人物叫声.mp3` | `%E4%BA%BA%E7%89%A9%E5%8F%AB%E5%A3%B0.mp3` |
|
|
49
|
+
| `人物碰撞.m4a` | `%E4%BA%BA%E7%89%A9%E7%A2%B0%E6%92%9E.m4a` |
|
|
50
|
+
| `人物脚步声.mp3` | `%E4%BA%BA%E7%89%A9%E8%84%9A%E6%AD%A5%E5%A3%B0.mp3` |
|
|
51
|
+
| `僵尸叫声.ogg` | `%E5%83%B5%E5%B0%B8%E5%8F%AB%E5%A3%B0.ogg` |
|
|
52
|
+
| `僵尸死亡.mp3` | `%E5%83%B5%E5%B0%B8%E6%AD%BB%E4%BA%A1.mp3` |
|
|
53
|
+
| `动物脚步声.mp3` | `%E5%8A%A8%E7%89%A9%E8%84%9A%E6%AD%A5%E5%A3%B0.mp3` |
|
|
54
|
+
| `吃金币.mp3` | `%E5%90%83%E9%87%91%E5%B8%81.mp3` |
|
|
55
|
+
| `呼噜.mp3` | `%E5%91%BC%E5%99%9C.mp3` |
|
|
56
|
+
| `壮汉死亡倒地.mp3` | `%E5%A3%AE%E6%B1%89%E6%AD%BB%E4%BA%A1%E5%80%92%E5%9C%B0.mp3` |
|
|
57
|
+
| `失误.mp3` | `%E5%A4%B1%E8%AF%AF.mp3` |
|
|
58
|
+
| `射击-轻.mp3` | `%E5%B0%84%E5%87%BB-%E8%BD%BB.mp3` |
|
|
59
|
+
| `射击-重.mp3` | `%E5%B0%84%E5%87%BB-%E9%87%8D.mp3` |
|
|
60
|
+
| `成功.mp3` | `%E6%88%90%E5%8A%9F.mp3` |
|
|
61
|
+
| `我想上班.mp3` | `%E6%88%91%E6%83%B3%E4%B8%8A%E7%8F%AD.mp3` |
|
|
62
|
+
| `拖拽.mp3` | `%E6%8B%96%E6%8B%BD.mp3` |
|
|
63
|
+
| `拾取.mp3` | `%E6%8B%BE%E5%8F%96.mp3` |
|
|
64
|
+
| `放置.mp3` | `%E6%94%BE%E7%BD%AE.mp3` |
|
|
65
|
+
| `旋转.mp4` | `%E6%97%8B%E8%BD%AC.mp4` |
|
|
66
|
+
| `汽车行驶.mp3` | `%E6%B1%BD%E8%BD%A6%E8%A1%8C%E9%A9%B6.mp3` |
|
|
67
|
+
| `游戏失败.mp3` | `%E6%B8%B8%E6%88%8F%E5%A4%B1%E8%B4%A5.mp3` |
|
|
68
|
+
| `点击.mp3` | `%E7%82%B9%E5%87%BB.mp3` |
|
|
69
|
+
| `爆炸.mp3` | `%E7%88%86%E7%82%B8.mp3` |
|
|
70
|
+
| `爽.mp3` | `%E7%88%BD.mp3` |
|
|
71
|
+
| `猫叫.mp3` | `%E7%8C%AB%E5%8F%AB.mp3` |
|
|
72
|
+
| `碰撞.mp3` | `%E7%A2%B0%E6%92%9E.mp3` |
|
|
73
|
+
| `苏卡不列.mp3` | `%E8%8B%8F%E5%8D%A1%E4%B8%8D%E5%88%97.mp3` |
|
|
74
|
+
| `苏卡不列那惠.mp3` | `%E8%8B%8F%E5%8D%A1%E4%B8%8D%E5%88%97%E9%82%A3%E6%83%A0.mp3` |
|
|
75
|
+
| `谢谢啊.mp3` | `%E8%B0%A2%E8%B0%A2%E5%95%8A.mp3` |
|
|
76
|
+
| `雪地上的脚步声.mp3` | `%E9%9B%AA%E5%9C%B0%E4%B8%8A%E7%9A%84%E8%84%9A%E6%AD%A5%E5%A3%B0.mp3` |
|
|
77
|
+
| `飞行.mp3` | `%E9%A3%9E%E8%A1%8C.mp3` |
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: game-demo
|
|
3
|
+
description: 在明确游戏引擎和技术栈后读取游戏策划案,以代码安全和首次交付成功为优先,搭建最简可运行 Demo 的文件框架、代码框架和核心系统。代码与图片生成同步推进,所有游戏图片素材必须使用生成图片,禁止 SVG、线条绘制或大面积纯色素材。当需要从零创建游戏 Demo、把策划案落实为首个可玩版本,或为后续开发建立基础工程时使用。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Game Demo
|
|
7
|
+
|
|
8
|
+
## Goal
|
|
9
|
+
|
|
10
|
+
读取策划案,将核心玩法实现为可以启动、游玩、结束和重新开始的最简游戏 Demo,并为后续开发建立清晰的工程基础。
|
|
11
|
+
|
|
12
|
+
本 Skill 独立完成工程搭建,主要产物是实际项目文件和一个可持续完善的可运行 Demo。所有游戏图片素材通过图片生成取得,并由统一的资源配置或加载层接入;首批生成素材允许在后续开发中逐渐替换为更高质量版本。
|
|
13
|
+
|
|
14
|
+
## 开始前
|
|
15
|
+
|
|
16
|
+
首先明确当前项目使用的游戏引擎和技术栈。
|
|
17
|
+
|
|
18
|
+
对于已有工程,读取包清单、锁文件、构建配置、入口文件和主要依赖进行确认。对于新工程,由开发者确认技术选择。
|
|
19
|
+
|
|
20
|
+
至少确认:
|
|
21
|
+
|
|
22
|
+
- 游戏引擎及版本;
|
|
23
|
+
- 编程语言;
|
|
24
|
+
- 渲染与 UI 方案;
|
|
25
|
+
- 构建工具和包管理器;
|
|
26
|
+
- 目标平台、画幅和输入方式。
|
|
27
|
+
|
|
28
|
+
随后读取项目根目录的 `/project.md` 或开发者指定的策划案文件,理解核心玩法、Demo 范围、游戏对象、操作方式、胜负条件和一局游戏的完整流程。
|
|
29
|
+
|
|
30
|
+
## 首次交付原则
|
|
31
|
+
|
|
32
|
+
Demo 的首次交付必须以成功启动和完整跑通核心循环为目标。只实现玩法成立所必需的最少对象、系统、状态和界面,让每个新增部分都直接服务于核心体验。
|
|
33
|
+
|
|
34
|
+
代码安全性具有最高优先级。架构完整度、扩展能力、视觉表现、功能数量和技术复杂度都服从于首次交付的稳定性。采用当前技术栈中成熟、直接且容易排查的实现路径,保持依赖精简、模块职责清楚、状态流转明确,并为加载失败和运行时异常提供安全边界。
|
|
35
|
+
|
|
36
|
+
## Demo 制作
|
|
37
|
+
|
|
38
|
+
Demo 作为一个完整任务制作。开始开发后优先发起所需图片素材的生成,并同步搭建文件框架、代码框架和核心游戏系统。能够异步调用生图工具时,提交生成任务后继续代码工作,让两者并行推进。
|
|
39
|
+
|
|
40
|
+
### 图片素材硬性要求
|
|
41
|
+
|
|
42
|
+
- Demo 中禁止出现任何 SVG 素材,包括 SVG 文件、内联 SVG 和 `data:image/svg+xml`。
|
|
43
|
+
- 禁止使用 Canvas/Phaser/CSS 的线条、几何轮廓或程序绘图冒充角色、场景、道具、图标、特效等游戏图片素材。
|
|
44
|
+
- 禁止将大面积纯色块或纯色背景作为正式游戏素材或视觉占位。
|
|
45
|
+
- 背景、角色、敌人、道具、地块、装饰、图标和视觉特效等所有需要的游戏图片素材,都必须通过图片生成获得并实际接入 Demo。
|
|
46
|
+
- 代码开发与图片生成可以并行,但首次可视交付前必须接入所需的生成图片。素材未完成时继续生成或缩小 Demo 素材范围,不得以 SVG、线条绘制或大面积纯色占位替代。
|
|
47
|
+
- 生成素材是可迭代的首版资产,后续可以在保持资源接口稳定的前提下逐渐替换,不需要等待最终美术品质才开始开发。
|
|
48
|
+
|
|
49
|
+
Demo 跑通以下最简完整流程:
|
|
50
|
+
|
|
51
|
+
```text
|
|
52
|
+
启动 → 加载 → 开始 → 游玩 → 成功或失败 → 结算 → 重新开始
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
代码构建完成、核心循环可以运行且本轮所需生成图片已经接入后,启动静态服务并在环境中的浏览器打开 Demo 页面,由开发者直接操作和验收。首次展示不得包含 SVG、线条绘制或大面积纯色游戏素材。
|
|
56
|
+
|
|
57
|
+
## Demo 构造
|
|
58
|
+
|
|
59
|
+
### 文件框架
|
|
60
|
+
|
|
61
|
+
根据游戏引擎和技术栈建立项目入口、源码、配置、游戏系统、实体、场景、输入、资源、UI 和构建产物等目录。让每个目录和关键文件具有明确职责。
|
|
62
|
+
|
|
63
|
+
### 代码框架
|
|
64
|
+
|
|
65
|
+
建立游戏启动、配置加载、资源加载、状态流转、输入映射、游戏循环、渲染同步、UI 通信、重新开始和资源释放等基础代码。
|
|
66
|
+
|
|
67
|
+
将玩法状态、渲染表现、输入和 UI 分为清晰模块,并通过明确的数据、事件或接口连接。
|
|
68
|
+
|
|
69
|
+
### 游戏系统
|
|
70
|
+
|
|
71
|
+
根据策划案搭建核心循环实际需要的系统,例如玩家控制、敌人或障碍、生成、碰撞、伤害、计分、进度、时间、胜负、结算和暂停。
|
|
72
|
+
|
|
73
|
+
只选择当前核心循环必需的系统,通过参数化内容和统一资源接口连接它们。所有图片资源均使用生成图片,并允许后续通过相同接口逐渐替换。
|
|
74
|
+
|
|
75
|
+
## 验收
|
|
76
|
+
|
|
77
|
+
Demo 采用开发者浏览器验收。Agent 不执行自动化玩法测试、端到端测试、视觉回归测试或其他 Agent 端自动化测试。代码完成构建并能够运行后,Agent 负责立即启动静态服务、打开浏览器并将操作权交给开发者;剩余图片在展示后继续生成和接入。
|
|
78
|
+
|
|
79
|
+
交付开发者前确认:
|
|
80
|
+
|
|
81
|
+
- 工程使用已确认的游戏引擎和技术栈;
|
|
82
|
+
- 首次交付保持最简,并能够成功构建和启动;
|
|
83
|
+
- 文件职责和模块边界清晰;
|
|
84
|
+
- 核心游戏循环能够完整运行;
|
|
85
|
+
- 输入、游戏状态、渲染和 UI 正确连接;
|
|
86
|
+
- 成功、失败、结算和重新开始可以重复执行;
|
|
87
|
+
- 新一局能够恢复正确的初始状态;
|
|
88
|
+
- Demo 不包含 SVG、线条绘制或大面积纯色游戏素材及视觉占位;
|
|
89
|
+
- 当前 Demo 所需的所有游戏图片素材均已通过图片生成获得、集中管理并实际接入;
|
|
90
|
+
- 静态服务已经启动,Demo 页面已经在浏览器中打开。
|
|
91
|
+
|
|
92
|
+
## Output
|
|
93
|
+
|
|
94
|
+
实际项目文件和可运行构建是主要交付物。完成后简要说明:
|
|
95
|
+
|
|
96
|
+
- 使用的游戏引擎与技术栈;
|
|
97
|
+
- 建立的主要目录和代码模块;
|
|
98
|
+
- 已搭建的游戏系统;
|
|
99
|
+
- 生成图片素材的集中配置、接入位置与后续替换方式;
|
|
100
|
+
- 图片素材的生成与接入状态;
|
|
101
|
+
- 已跑通的核心游戏循环;
|
|
102
|
+
- 执行的构建与静态服务命令;
|
|
103
|
+
- 浏览器中的开发者验收地址。
|