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
package/package.json
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "evomeme-dev",
|
|
3
|
+
"version": "0.1.7",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "evomemeplugin_client (DEV). Install: npx -y evomeme-dev@latest install --ide cursor. Init: npx -y evomeme-dev@latest init.",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"evomeme": "bin/evomeme"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist/index.js",
|
|
12
|
+
"dist/canvas-public",
|
|
13
|
+
"bin/evomeme",
|
|
14
|
+
"skills"
|
|
15
|
+
],
|
|
16
|
+
"engines": {
|
|
17
|
+
"node": ">=18.14.1"
|
|
18
|
+
},
|
|
19
|
+
"scripts": {
|
|
20
|
+
"version:sync": "node scripts/sync-version.mjs",
|
|
21
|
+
"prepare:prod": "node scripts/prepare-channel.mjs --channel prod",
|
|
22
|
+
"prepare:dev": "node scripts/prepare-channel.mjs --channel dev",
|
|
23
|
+
"prebuild": "npm run version:sync",
|
|
24
|
+
"build": "node scripts/bundle.mjs",
|
|
25
|
+
"start": "node bin/evomeme",
|
|
26
|
+
"dev": "tsx src/index.ts",
|
|
27
|
+
"canvas:dev": "tsx watch src/index.ts canvas --no-open",
|
|
28
|
+
"mcp:list": "node scripts/call-mcp.mjs --list",
|
|
29
|
+
"mcp:call": "node scripts/call-mcp.mjs",
|
|
30
|
+
"mcp:image:demo": "node scripts/call-mcp.mjs --demo-image",
|
|
31
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
32
|
+
"test": "jest",
|
|
33
|
+
"prepublishOnly": "npm run build",
|
|
34
|
+
"pack:local": "npm run prepare:prod && npm run build && npm pack",
|
|
35
|
+
"pack:dev": "npm run prepare:dev && npm run build && npm pack && npm run prepare:prod",
|
|
36
|
+
"publish:prod": "npm run prepare:prod && npm run build && npm publish --access public && npm run prepare:prod",
|
|
37
|
+
"publish:dev": "npm run prepare:dev && npm run build && npm publish --access public && npm run prepare:prod"
|
|
38
|
+
},
|
|
39
|
+
"publishConfig": {
|
|
40
|
+
"access": "public"
|
|
41
|
+
},
|
|
42
|
+
"keywords": [
|
|
43
|
+
"mcp",
|
|
44
|
+
"model-context-protocol",
|
|
45
|
+
"evomeme",
|
|
46
|
+
"codex",
|
|
47
|
+
"evomeme-dev"
|
|
48
|
+
],
|
|
49
|
+
"license": "UNLICENSED",
|
|
50
|
+
"dependencies": {
|
|
51
|
+
"@ffmpeg-installer/ffmpeg": "^1.1.0",
|
|
52
|
+
"@ffprobe-installer/ffprobe": "^2.1.2",
|
|
53
|
+
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
54
|
+
"semver": "^7.8.5",
|
|
55
|
+
"update-notifier": "^7.3.1"
|
|
56
|
+
},
|
|
57
|
+
"devDependencies": {
|
|
58
|
+
"@types/jest": "^29.5.14",
|
|
59
|
+
"@types/node": "^20.14.0",
|
|
60
|
+
"@types/semver": "^7.8.0",
|
|
61
|
+
"@types/update-notifier": "^6.0.8",
|
|
62
|
+
"esbuild": "^0.27.0",
|
|
63
|
+
"jest": "^29.7.0",
|
|
64
|
+
"painterro": "^1.2.92",
|
|
65
|
+
"ts-jest": "^29.2.5",
|
|
66
|
+
"tsx": "^4.20.6",
|
|
67
|
+
"typescript": "^5.6.3"
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: evomeme-cloud-fs
|
|
3
|
+
description: 讲解 evomeme工作区 init、.evomemeignore,以及源码提交等云端文件 MCP。在执行 npx -y evomeme@latest init、编辑忽略规则,或调用 evomeme_submit_game_code / evomeme_upload_game_asset 时使用。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# evomeme云端文件系统
|
|
7
|
+
|
|
8
|
+
讲解本地工作区初始化、提交忽略规则,以及源码提交 / 二进制上传相关 MCP。
|
|
9
|
+
|
|
10
|
+
鉴权失败后再加载 `../evomeme-login/SKILL.md`;不要预防性加载登录技能。
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## `npx -y evomeme@latest init`
|
|
15
|
+
|
|
16
|
+
### 用途
|
|
17
|
+
|
|
18
|
+
在项目工作区根目录初始化 evomeme本地环境,让后续提交与技能编排可用:
|
|
19
|
+
|
|
20
|
+
- 若不存在则生成默认 **`.evomemeignore`**
|
|
21
|
+
- 把包内 skill 复制到工作区 **`.codex/skills/`**
|
|
22
|
+
- 确认本机登录态(供后续 MCP 使用)
|
|
23
|
+
|
|
24
|
+
npm 包名为 **`evomeme`**(可执行入口 `evomeme`)。
|
|
25
|
+
|
|
26
|
+
### 用法
|
|
27
|
+
|
|
28
|
+
在**项目工作区根目录**执行:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
npx -y evomeme@latest init
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
可选:用 `--cwd <路径>` 指定工作区;用 `--name <名称>` 在需要新建云端作品时提供作品名。
|
|
35
|
+
|
|
36
|
+
安装插件到 IDE(写入 MCP 配置,与 init 不同)使用:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
npx -y evomeme@latest install --ide codex
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### 注意
|
|
43
|
+
|
|
44
|
+
- init 是**工作区准备**(忽略规则、skills、登录态),不是做游戏前必须完成的门槛。
|
|
45
|
+
- 开发过程中不必为了作品绑定去跑 init;需要提交时直接调用 `evomeme_submit_game_code` 即可(见下文)。
|
|
46
|
+
- 已存在的 `.evomemeignore` **不会被覆盖**;skills 会按包内内容复制/更新到 `.codex/skills/`。
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## `.evomemeignore`
|
|
51
|
+
|
|
52
|
+
### 用途
|
|
53
|
+
|
|
54
|
+
控制 `evomeme_submit_game_code` 收集源码时**忽略哪些路径**,避免把依赖、密钥、二进制或本地缓存提交到云端。
|
|
55
|
+
|
|
56
|
+
### 用法
|
|
57
|
+
|
|
58
|
+
- 文件位置:工作区根目录的 **`.evomemeignore`**
|
|
59
|
+
- **语法**:与 `.gitignore` 相同(`#` 注释、目录尾 `/`、`!` 取反等)
|
|
60
|
+
- **作用范围**:只影响提交时的文件收集;与 git 无关,即使项目未使用 git 也会生效
|
|
61
|
+
- **谁写入**:`npx -y evomeme@latest init` 在文件不存在时生成默认内容;**已存在则不覆盖**。未跑过 init 时,客户端提交仍会套用内置默认规则
|
|
62
|
+
- **默认会忽略的典型项**:`assets/`(包含其全部后代文件)、`node_modules/`、`.env` / `.env.*`(保留 `!.env.example`)、日志、`.DS_Store` / `Thumbs.db`、`.vscode/` / `.idea/`、`.git/`、`.evomeme/`、`.evomemeignore` 自身、`.codex/`(含 init 复制的 skills)等
|
|
63
|
+
- **目录规则递归生效**:以 `/` 结尾的目录规则会忽略目录本身及其中任意层级的全部内容;根目录 `dist/` 及其内容是强制提交的唯一例外
|
|
64
|
+
- **二进制资源**:**任何二进制文件都不得**经 `evomeme_submit_game_code` 作为源码上传。被游戏引用的本地二进制必须先走 TOS(见提交前检查),再以 `public/config.json` 中的 URL 引用。
|
|
65
|
+
|
|
66
|
+
### `dist/` 硬性规则(不可违反)
|
|
67
|
+
|
|
68
|
+
平台预览 / 草稿运行依赖构建产物。**必须上传工作区根目录下的 `dist/`**,不得把它排除在提交之外。
|
|
69
|
+
|
|
70
|
+
1. **必须提交 `dist/`**:调用 `evomeme_submit_game_code` 前,先完成项目构建(通常 `npm run build` / `pnpm build`),确认存在可用的 `dist/`(至少含 `dist/index.html`);提交收集结果中**必须包含** `dist/` 下文件。
|
|
71
|
+
2. **禁止写入 ignore**:不得将 `dist`、`dist/`、`/dist`、`/dist/**`、`**/dist/**` 等任何会排除构建产物目录的规则加入 `.evomemeignore`(也不得用等价写法绕过)。
|
|
72
|
+
3. **发现已忽略时必须先改回来**:若现有 `.evomemeignore`(或等价规则)已忽略 `dist/`,提交前**必须删除这些规则**,再构建、再提交。未解除忽略前**禁止**调用 `evomeme_submit_game_code`。
|
|
73
|
+
4. **不要用 ignore 解决 dist 内二进制**:若 `dist/` 内出现不能走源码提交的二进制,应回到源码侧处理(本地资源先 TOS + `public/config.json` URL,再重新构建),使新的 `dist/` 可提交;**禁止**为此把整个 `dist/` 加进 ignore。
|
|
74
|
+
5. **`dist/` 必须零二进制**:递归检查 `dist/` 中的每个文件;只允许可严格按 UTF-8 解码的文本文件。图片、音频、视频、字体、模型、WASM、压缩包、可执行文件等二进制一律禁止,文件扩展名伪装成文本也不例外。
|
|
75
|
+
6. **`dist/` 必须自包含且可移植**:包内运行时依赖只能指向 `dist/` 内文件,并使用相对于引用文件的 `./` 或 `../` 路径;不得依赖工作区、源码目录、开发服务器或部署站点根路径。
|
|
76
|
+
|
|
77
|
+
修改 `.evomemeignore` 后,下次 `evomeme_submit_game_code` 才会按新规则收集。
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## 文件系统相关 MCP 工具
|
|
82
|
+
|
|
83
|
+
需要云端文件能力时**直接调用**下列工具,不要绕开 MCP 用 curl / 脚本代替。
|
|
84
|
+
|
|
85
|
+
| 工具名 | 功能 |
|
|
86
|
+
| --- | --- |
|
|
87
|
+
| `evomeme_submit_game_code` | **游戏发布**(非纯源码上传):按 `.evomemeignore` 收集并全量覆盖云端作品,**必须包含可运行的 `dist/`**;不可撤销。 |
|
|
88
|
+
| `evomeme_upload_game_asset` | 将受支持的本地图片、音频或视频交给服务端上传 TOS;内容审核通过后才返回公开 `asset_url`。其他类型禁止上传。 |
|
|
89
|
+
|
|
90
|
+
### `evomeme_submit_game_code`
|
|
91
|
+
|
|
92
|
+
把当前工作区里按 `.evomemeignore` 收集到的 **utf-8 文本源码**,全量同步到云端作品。
|
|
93
|
+
|
|
94
|
+
**硬性约束:任何二进制文件都不得通过本工具上传**(含图片、模型、音视频、字体、压缩包等)。源码提交只收集文本;受支持的图片、音频和视频只能经 `evomeme_upload_game_asset` 上 TOS,模型、字体、压缩包和其他类型不支持上传。提交前还必须通过下文的发布产物门禁;发现任一二进制或绝对本地依赖时,禁止调用本工具。
|
|
95
|
+
|
|
96
|
+
可选参数:
|
|
97
|
+
|
|
98
|
+
- `name`:作品显示名称。
|
|
99
|
+
- `cover_url`:游戏封面(公开图片 URL)。
|
|
100
|
+
|
|
101
|
+
#### 提交时必须强调的两点
|
|
102
|
+
|
|
103
|
+
1. **名称:最好每次提交都附带 `name`(传当前正式名,不是每次改名)**
|
|
104
|
+
接口层 `name` 可选,但 Agent **应默认每次**调用都带上游戏**当前正式名称**(与策划案 / 封面标题 / 用户认可的名字一致)。意图是让云端始终收到这份名称并保持同步,**不是**要求每次改成新名字。用户未要求改名时,反复传同一个旧名称即可。只有用户明确说「本次不要带名称」时才省略。
|
|
105
|
+
|
|
106
|
+
2. **封面:首次提交必须有封面**
|
|
107
|
+
- **首次**向云端提交该作品(本地尚无成功提交记录 / 尚未带过封面)时,**必须**带上 `cover_url`,不得空提交。
|
|
108
|
+
- 提交前先读 `public/config.json` 的 **`_game_cover_url`**:
|
|
109
|
+
- 若存在且 `value` 为可用图片 URL → **直接使用**该值作为 `cover_url`;
|
|
110
|
+
- 若不存在或无效 → **必须**加载并遵循 `../evomeme-cover/SKILL.md` 生成 9:16 封面,写入 `_game_cover_url` 后再提交(勿跳过封面技能硬编 URL)。
|
|
111
|
+
|
|
112
|
+
调用前应用一两句话告知用户:本次提交会**全量覆盖**云端已有代码,且不可撤销;若用户明确反对,则不要提交。
|
|
113
|
+
|
|
114
|
+
#### 提交前代码安全复检(简单过一遍即可)
|
|
115
|
+
|
|
116
|
+
在调用 `evomeme_submit_game_code` **之前**,Agent 应自行快速阅读本次将提交的主要源码(重点看用户改过或新增的文件;时间紧时可抽样入口、`package.json`、脚本与网络相关文件),确认没有明显危险代码后再提交。
|
|
117
|
+
|
|
118
|
+
重点留意(发现任一则**拒绝提交**并告知用户原因,不要调用本工具):
|
|
119
|
+
|
|
120
|
+
- 下载并执行:`curl … | bash`、`Invoke-Expression` + 远程下载、`certutil` / `bitsadmin` 拉文件等
|
|
121
|
+
- 反弹壳 / 远控痕迹、挖矿脚本或矿池地址
|
|
122
|
+
- `eval(atob(…))` / `Function(atob(…))` 等长编码执行链;`powershell -enc` 长载荷
|
|
123
|
+
- `package.json` 的 `preinstall` / `postinstall` / `prepare` 里拉远程或执行不明命令
|
|
124
|
+
|
|
125
|
+
这是**浅层人工(Agent)复检**,不替代服务端检查;正常游戏逻辑里的 `fetch`、常规构建脚本不必当成危险。
|
|
126
|
+
|
|
127
|
+
#### 提交前发布产物门禁(不可跳过)
|
|
128
|
+
|
|
129
|
+
在调用 `evomeme_submit_game_code` **之前**:
|
|
130
|
+
|
|
131
|
+
1. 确认 `.evomemeignore` **没有**忽略 `dist/`(见上文「`dist/` 硬性规则」);有则先删规则。
|
|
132
|
+
2. 运行生产构建,确认工作区根目录的 `dist/` 已生成,至少包含 `dist/index.html`。
|
|
133
|
+
3. **递归检查 `dist/` 的全部文件内容,而不是只看扩展名**:每个文件都必须能严格按 UTF-8 文本读取;只要存在一个二进制文件,立即停止提交,报告准确路径,并按下文流程迁移资源后重新构建。
|
|
134
|
+
4. **扫描本次提交的源码、配置和 `dist/` 文本中的依赖引用**,重点检查 HTML 的 `src` / `href`、CSS `url()`、JS/TS 的 `import` / `require` / 动态导入、`fetch`、Worker、`new URL(...)` 以及配置中的资源路径。禁止出现:
|
|
135
|
+
- Windows 盘符路径(如 `C:\\...`)、UNC 路径(如 `\\\\server\\...`)或 POSIX 本地绝对路径(如 `/Users/...`、`/home/...`、`/tmp/...`);
|
|
136
|
+
- `file://`,以及任何指向当前工作区或工作区外本地文件的路径;
|
|
137
|
+
- 以 `/` 开头的站点根路径(如 `/assets/a.js`、`/config.json`)。游戏可能发布在子路径,运行时包内引用必须使用 `./` 或 `../`;
|
|
138
|
+
- `localhost`、`127.0.0.1`、`0.0.0.0`、开发服务器地址,或对 `src/`、`public/`、项目根目录、未构建 `.ts` / `.tsx` 文件的运行时依赖。
|
|
139
|
+
5. **允许的例外只有有意使用且公开可访问的 `https://` 外部 URL**,例如 TOS 资源、CDN 或正式 API;它们不是本地绝对依赖。不得把 `http://`、本机 URL 或偶然残留的开发地址当作例外。源码中的第三方包名只能作为构建期输入存在,生产构建必须将其解析或打包,不能在 `dist/` 留下浏览器无法解析的依赖。
|
|
140
|
+
6. 以 `dist/` 作为静态服务器根目录进行预览,不得让服务器回退读取源码或工作区其他目录;确认页面与关键游戏流程能运行,且请求不逃出 `dist/`(有意使用的公开 `https://` 外部请求除外)。
|
|
141
|
+
7. 确认本次提交收集结果包含完整 `dist/`。若任一检查失败,必须列出准确文件及命中的路径 / 依赖,修复、重新构建并从第 1 步重检;**门禁通过前禁止提交**。
|
|
142
|
+
|
|
143
|
+
#### 提交前必须检查本地二进制引用(不可跳过)
|
|
144
|
+
|
|
145
|
+
在调用 `evomeme_submit_game_code` **之前**,必须主动检查工作区是否仍存在**被代码或配置引用的本地二进制文件**(例如源码里的相对路径指向 `.png` / `.jpg` / `.webp` / `.gif` / `.glb` / `.mp3` 等,或配置里写了本地路径而非公开 `https://` URL)。
|
|
146
|
+
|
|
147
|
+
若存在此类引用,必须先全部处理完再提交,顺序固定为:
|
|
148
|
+
|
|
149
|
+
1. 用 `evomeme_upload_game_asset` 把该本地二进制上传到 TOS,拿到公开 `asset_url`;
|
|
150
|
+
2. 把该本地路径加入 `.evomemeignore`,确保不会进入源码收集(**不得**因此忽略 `dist/`);
|
|
151
|
+
3. 将运行时引用改为写入 `public/config.json`(扁平可见参数,`type` 为 `image` / `audio` 等,`value` 为上述 `asset_url`),游戏代码只从配置读 URL;
|
|
152
|
+
4. 重新构建以刷新 `dist/`;确认源码、配置与 `dist/` 中不再依赖本地二进制路径,且新的 `dist/` 内没有任何二进制文件后,再调用 `evomeme_submit_game_code`。
|
|
153
|
+
|
|
154
|
+
未完成上述检查与处理前,**禁止**提交。若刚改过 `.evomemeignore`,以改完后的规则为准。
|
|
155
|
+
|
|
156
|
+
调用结果:
|
|
157
|
+
|
|
158
|
+
- **成功**:工具返回**纯文本多行**说明(例如包含 `thread_id`、`checkpoint_id` 等),不是带 `success` 字段的 JSON。按正文向用户复述关键信息。成功后**必须**把 evomeme草稿箱链接交给用户,并引导其打开浏览刚提交的作品:
|
|
159
|
+
|
|
160
|
+
https://www.evomeme.com/profile/works/draft
|
|
161
|
+
|
|
162
|
+
同时告知:可在该页面查看草稿,并在 evomeme中自行将游戏发布出来。不要只报「提交成功」而不给链接。
|
|
163
|
+
- **失败**:MCP 结果带 `isError`,正文为错误说明。把原文展示给用户;若错误指向登录 / token 失效,再加载 `../evomeme-login/SKILL.md` 恢复后重试原提交。
|
|
164
|
+
|
|
165
|
+
### `evomeme_upload_game_asset`
|
|
166
|
+
|
|
167
|
+
将受支持的本地图片、音频或视频交给服务端上传 TOS,内容安全审核通过后才返回公开 `asset_url`;其他类型禁止上传。提交源码前处理媒体资源时优先用本工具;说明见 `../evomeme-tos-upload/SKILL.md`。
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## References
|
|
172
|
+
|
|
173
|
+
- 主入口与开发编排:`../game-director/SKILL.md`、`../game-develop/SKILL.md`
|
|
174
|
+
- 游戏封面:`../evomeme-cover/SKILL.md`
|
|
175
|
+
- 登录恢复(仅鉴权报错后):`../evomeme-login/SKILL.md`
|
|
176
|
+
- TOS 上传:`../evomeme-tos-upload/SKILL.md`
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: evomeme-cover
|
|
3
|
+
description: 用生图 MCP 生成 9:16 竖屏游戏封面(含大字标题、玩法相关背景、与游戏美术一致),成功后必须把 URL 写入 public/config.json 的 _game_cover_url。在需要作品封面、提交 cover_url,或用户要做宣传图/商店封面时使用。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 游戏封面生成
|
|
7
|
+
|
|
8
|
+
## 概述
|
|
9
|
+
|
|
10
|
+
为 evomeme作品生成**一张**竖屏封面图,供提交云端(`evomeme_submit_game_code` 的 `cover_url`)或展示使用。
|
|
11
|
+
|
|
12
|
+
**必须**通过 MCP `evomeme_generate_game_image` 生成;禁止用本地 SVG、截图拼贴、或非 MCP 渠道冒充封面。
|
|
13
|
+
|
|
14
|
+
鉴权失败后再加载 `../evomeme-login/SKILL.md`;不要预防性加载登录技能。
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 硬性要求(缺一不可)
|
|
19
|
+
|
|
20
|
+
| 要求 | 说明 |
|
|
21
|
+
| --- | --- |
|
|
22
|
+
| **比例** | 必须是 **9:16 竖屏**。MCP `size` **固定**为 `1440x2560`(唯一精确 9:16 的允许预设)。禁止用方形、横屏或其它尺寸。 |
|
|
23
|
+
| **大字标题** | 画面上必须有清晰可读的**游戏中文大字标题**(或用户指定的正式名),居中或视觉重心明确,字号足够大,像商店/商店页封面,而不是角落小字。 |
|
|
24
|
+
| **背景强相关** | 背景场景 / 主体构图必须直接体现该游戏的核心玩法、角色或世界(例如跑酷就出现奔跑与障碍,三消就出现宝石盘面氛围)。禁止无关风景、通用抽象渐变。 |
|
|
25
|
+
| **美术风格一致** | 风格、配色、线条/渲染质感必须与当前游戏(`../game-art/SKILL.md` 或已定美术规范)一致,不能另起一套风格。 |
|
|
26
|
+
|
|
27
|
+
与运行时素材技能的区别:`../game-asset-image-generator/SKILL.md` 常要求背景「无字」;**封面必须有大字标题**,不要套用其 `no text` 禁令。
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 生成前准备
|
|
32
|
+
|
|
33
|
+
1. 确认游戏**正式名称**(用于画面大字;勿用临时占位如「未命名游戏」)。
|
|
34
|
+
2. 从策划案 / `game-art` / 现有画面归纳:
|
|
35
|
+
- 一句话玩法与视觉主体;
|
|
36
|
+
- 美术风格关键词(如像素、扁平卡通、赛博等);
|
|
37
|
+
- 主色与氛围。
|
|
38
|
+
3. 可选:若已有强风格参考图的公开 URL,可作为 `reference_image_url`(须与本游戏一致)。
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## MCP 调用(固定参数)
|
|
43
|
+
|
|
44
|
+
调用 **一次** `evomeme_generate_game_image`:
|
|
45
|
+
|
|
46
|
+
| 参数 | 值 |
|
|
47
|
+
| --- | --- |
|
|
48
|
+
| `image_type` | `background`(封面为整幅竖构图,不要用 `asset` 抠图类型) |
|
|
49
|
+
| `size` | **`1440x2560`**(强制,对应 9:16) |
|
|
50
|
+
| `image_model` | **`asset-pro`**(封面用质量档;不要用 `asset-lite`) |
|
|
51
|
+
| `prompt` | 见下方提示词结构 |
|
|
52
|
+
| `reference_image_url` | 可选 |
|
|
53
|
+
|
|
54
|
+
禁止传入未在工具枚举中的 size(如 `1080x1920`)。`image_model` 仅允许 `asset-pro` / `asset-lite`。
|
|
55
|
+
|
|
56
|
+
### 提示词结构(必须覆盖)
|
|
57
|
+
|
|
58
|
+
用中文或中英混合均可,但须明确写出下列要素:
|
|
59
|
+
|
|
60
|
+
1. **竖屏构图**:`9:16 vertical poster` / `mobile portrait cover`,主体纵向铺满。
|
|
61
|
+
2. **大字标题**:写明要渲染在画面上的**确切游戏名**,并要求 `large bold title text`、高对比、清晰可读、无乱码。
|
|
62
|
+
3. **玩法相关背景**:描述与游戏主体强相关的场景与关键物件/角色姿态(只服务封面叙事,勿堆砌 UI)。
|
|
63
|
+
4. **美术风格**:与游戏一致的风格句(对齐 `game-art`);配色与氛围一句话。
|
|
64
|
+
5. **质量**:`high detail`、`game store cover`、`no watermark`、`no UI chrome`、`no small unreadable text`。
|
|
65
|
+
|
|
66
|
+
不要写 `no text`(与大字标题冲突)。
|
|
67
|
+
|
|
68
|
+
### 成功返回与永久保存(必须)
|
|
69
|
+
|
|
70
|
+
工具会自行轮询到任务终态并返回文本元数据与 MCP `image` 内容块。从文本解析 `tos_url`(及 `job_id`、`local_path` 等);`tos_url` 即封面公开地址。
|
|
71
|
+
|
|
72
|
+
**Agent 在生图成功后必须立刻**把该 URL 写入工作区 `public/config.json` 的固定键 **`_game_cover_url`**,作为封面永久记录。未写入不得视为封面流程完成。
|
|
73
|
+
|
|
74
|
+
写入约定:
|
|
75
|
+
|
|
76
|
+
1. 若 `public/config.json` 不存在则创建合法 JSON 对象后再写。
|
|
77
|
+
2. 键名必须为 **`_game_cover_url`**(勿改名、勿写到其它键)。
|
|
78
|
+
3. 建议结构(与其它素材项一致,便于工具与提交读取):
|
|
79
|
+
|
|
80
|
+
```json
|
|
81
|
+
{
|
|
82
|
+
"_game_cover_url": {
|
|
83
|
+
"value": "https://...",
|
|
84
|
+
"type": "image",
|
|
85
|
+
"image_type": "Cover",
|
|
86
|
+
"size": "1440x2560",
|
|
87
|
+
"label": "游戏封面"
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
4. 若项目已有其它配置项,**合并写入**,不得覆盖清空整个文件。
|
|
93
|
+
5. 重新生成封面时**覆盖** `_game_cover_url` 的 `value` 为新 `tos_url`。
|
|
94
|
+
6. 写完后确认 JSON 可解析,再向用户汇报。
|
|
95
|
+
|
|
96
|
+
后续提交时从 `public/config.json` → `_game_cover_url` → `value` 读取封面链接,填入 `evomeme_submit_game_code` 的 `cover_url`(见 `../evomeme-cloud-fs/SKILL.md`)。
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## 交付与后续
|
|
101
|
+
|
|
102
|
+
1. 已写入 `public/config.json` 的 `_game_cover_url`,并向用户展示封面 URL,说明已按 9:16、含标题、风格与玩法相关生成。
|
|
103
|
+
2. 若用于云端提交:读取 `_game_cover_url.value` 作为 `cover_url`;`name` 建议与封面上的游戏名一致。
|
|
104
|
+
3. 用户不满意时:根据反馈收紧风格/主体/标题排版后**重新调用**生图 MCP,并用新 URL **覆盖** `_game_cover_url`,不要本地改图糊弄。
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## 检查清单
|
|
109
|
+
|
|
110
|
+
调用前:
|
|
111
|
+
|
|
112
|
+
- [ ] `size` 是否为 `1440x2560`
|
|
113
|
+
- [ ] `image_type` 是否为 `background`
|
|
114
|
+
- [ ] `image_model` 是否为 `asset-pro`
|
|
115
|
+
- [ ] prompt 是否含**确切游戏名**且要求大字标题
|
|
116
|
+
- [ ] prompt 背景是否与玩法/主体强相关
|
|
117
|
+
- [ ] prompt 风格是否与当前游戏美术一致
|
|
118
|
+
- [ ] 未误用 `no text` / 横屏 size / `asset` 抠图类型
|
|
119
|
+
|
|
120
|
+
调用成功后(必须):
|
|
121
|
+
|
|
122
|
+
- [ ] 已将 `tos_url` 写入 `public/config.json` 的 `_game_cover_url`
|
|
123
|
+
- [ ] JSON 合法,且未误删其它配置项
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## References
|
|
128
|
+
|
|
129
|
+
- 生图细节与其它 size:`../game-asset-image-generator/SKILL.md`
|
|
130
|
+
- 美术风格:`../game-art/SKILL.md`
|
|
131
|
+
- 提交封面:`../evomeme-cloud-fs/SKILL.md`
|
|
132
|
+
- 登录恢复(仅鉴权报错后):`../evomeme-login/SKILL.md`
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: evomeme-game-maker
|
|
3
|
+
description: 指导 Agent 创作 evomeme手机平台游戏,在开发过程中应用竖屏触控、工程结构、public/config.json、素材托管和生产构建要求,并根据游戏需要使用发布、封面、原生能力与登录恢复等平台能力。当为 evomeme创建、迁移、扩展或发布手机游戏时使用。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# evomeme手机游戏创作
|
|
7
|
+
|
|
8
|
+
## Goal
|
|
9
|
+
|
|
10
|
+
指导 Agent 创作符合 evomeme平台要求的竖屏触控手机游戏,并在开发过程中根据当前需求选择相应的平台能力。
|
|
11
|
+
|
|
12
|
+
**具体游戏开发计划**:制定、拆解或更新具体的游戏开发计划时,必须参照`game-maker`开发技能。本技能只提供evomeme平台对游戏的特殊要求。如果用户需要发布到EvoMeme平台,游戏必须满足本技能的要求。
|
|
13
|
+
|
|
14
|
+
## 平台要求
|
|
15
|
+
|
|
16
|
+
### 游戏形态
|
|
17
|
+
|
|
18
|
+
evomeme平台只支持竖屏手机游戏。开发的游戏必须适配竖屏 UI 布局,并支持触屏操作。
|
|
19
|
+
|
|
20
|
+
#### 竖屏全屏适配
|
|
21
|
+
|
|
22
|
+
手机端游玩界面必须适配所有竖屏屏幕尺寸和宽高比,并始终占满整个可视屏幕:
|
|
23
|
+
|
|
24
|
+
- 禁止使用固定宽高比容器、留黑边、上下或左右加黑条等方式维持设计稿比例。
|
|
25
|
+
- 游戏根容器、渲染画布和背景必须覆盖完整 visual viewport;页面不得因默认边距、固定尺寸或父容器约束产生未覆盖区域。
|
|
26
|
+
- 当屏幕宽高比与设计稿不同时,通过响应式布局、相机缩放、背景 `cover` 或允许裁切的扩展区域完成适配,不得把整个游玩画面等比缩小后留出黑边。
|
|
27
|
+
- HUD、按钮和关键交互内容必须根据屏幕尺寸动态布局。安全区只用于调整关键 UI 的内边距,不得缩小游戏画面或背景的覆盖范围。
|
|
28
|
+
- Web 页面应设置正确的移动端 viewport,并让 `html`、`body`、应用根节点及游戏容器占满视口;需要兼容动态浏览器栏时使用动态视口高度并提供合理回退。
|
|
29
|
+
- 完成开发后必须在多种竖屏尺寸和宽高比下验证:游玩区域全屏覆盖、无黑边、无页面滚动条,且关键 UI 不被裁切或遮挡。
|
|
30
|
+
|
|
31
|
+
### Demo 图片素材
|
|
32
|
+
|
|
33
|
+
制作 evomeme游戏 Demo 时,所有需要的游戏图片素材必须通过图片生成获得并实际接入:
|
|
34
|
+
|
|
35
|
+
- 禁止使用任何 SVG 素材,包括 SVG 文件、内联 SVG 和 `data:image/svg+xml`。
|
|
36
|
+
- 禁止使用 Canvas、Phaser 或 CSS 的线条、几何轮廓和程序绘图冒充角色、场景、道具、图标、特效等游戏图片素材。
|
|
37
|
+
- 禁止将大面积纯色块或纯色背景作为正式游戏素材或视觉占位。
|
|
38
|
+
- 背景、角色、敌人、道具、地块、装饰、图标和视觉特效等 Demo 所需图片必须使用图片生成。代码工作可以与生图并行,但首次可视交付前必须接入所需生成图片。
|
|
39
|
+
- 素材尚未完成时继续生成或缩小 Demo 素材范围,不得用 SVG、线条绘制或大面积纯色临时替代。
|
|
40
|
+
- 首批生成图片可以作为可迭代资产,后续在保持资源配置和加载接口稳定的前提下逐渐替换。
|
|
41
|
+
|
|
42
|
+
### 工程结构
|
|
43
|
+
|
|
44
|
+
提交的游戏工程包含以下文件和目录:
|
|
45
|
+
|
|
46
|
+
```text
|
|
47
|
+
/
|
|
48
|
+
├── dist/
|
|
49
|
+
├── public/
|
|
50
|
+
│ └── config.json
|
|
51
|
+
├── src/
|
|
52
|
+
└── index.html
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
- `dist/`:存放最新的生产构建产物,并随游戏工程一同提交。
|
|
56
|
+
- `public/config.json`:集中记录游戏使用的二进制素材链接及其他运行时配置。
|
|
57
|
+
- `src/`:存放主要开发代码。
|
|
58
|
+
- `index.html`:作为游戏工程的网页入口。
|
|
59
|
+
|
|
60
|
+
#### 代码依赖与发布路径
|
|
61
|
+
|
|
62
|
+
- 项目内代码依赖必须使用相对路径,源码模块之间使用 `./` 或 `../` 引用;禁止写入本机绝对路径、工作区绝对路径、`file://` 地址或只能由开发服务器解析的源码 URL。
|
|
63
|
+
- 构建工具必须使用相对发布基路径;Vite 项目设置 `base: "./"`,其他构建工具使用等价配置。运行时资源与配置使用 `./` 开头的相对 URL,例如 `fetch("./config.json")`,禁止假设游戏部署在域名根路径。
|
|
64
|
+
- `dist/` 必须是可以独立部署的完整运行目录。`dist/index.html`、构建后的 JavaScript、CSS 和配置只能依赖 `dist/` 内文件或可公开访问的 `http://` / `https://` 资源。
|
|
65
|
+
- 严禁 `dist/` 中任何运行时代码或页面回指 `src/`、`public/`、项目根目录、工作区文件、`localhost`、Vite 开发服务器或其他仅在开发环境存在的路径;禁止从 `dist/` 动态导入 `.ts`、`.tsx` 或其他未构建源码。
|
|
66
|
+
- `dist/`内禁止存在任何二进制文件,包括图片、视频、音频、模型等。
|
|
67
|
+
- 禁止通过复制源码到 `dist/` 来规避构建。源码依赖必须在生产构建时完成解析、打包或复制为真正的发布资源。
|
|
68
|
+
- 发布前必须以 `dist/` 为静态服务根目录启动预览,并在该地址验证启动、资源加载和完整核心流程。开发服务器可以用于开发,但不能作为发布可用性的验收证据。
|
|
69
|
+
|
|
70
|
+
#### `/public/config.json` 规则
|
|
71
|
+
|
|
72
|
+
`/public/config.json` 是游戏运行时外置配置文件。构建后将其原样输出为 `/dist/config.json`。
|
|
73
|
+
|
|
74
|
+
##### 存储规则
|
|
75
|
+
|
|
76
|
+
1. 所有用户可调颜色、玩法参数、平衡数值和资源 URL 写入 `/public/config.json` 或 `game/content`。
|
|
77
|
+
2. 游戏代码通过 `fetch("./config.json")` 或项目封装的 `loadConfig()` 读取配置。
|
|
78
|
+
3. 将 `/public/config.json` 保持为运行时外置文件,`src` 中的代码仅通过运行时加载方式访问配置。
|
|
79
|
+
4. 将用户可调值集中在单一配置来源中,React、Phaser 和 CSS 使用同一份配置数据。
|
|
80
|
+
|
|
81
|
+
##### 可见参数
|
|
82
|
+
|
|
83
|
+
key 不以 `_` 开头的参数会暴露给用户编辑,并保持扁平结构:
|
|
84
|
+
|
|
85
|
+
```json
|
|
86
|
+
"player_speed": {
|
|
87
|
+
"value": 220,
|
|
88
|
+
"type": "int",
|
|
89
|
+
"label": "移动速度",
|
|
90
|
+
"max": 400,
|
|
91
|
+
"min": 50
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
规则:
|
|
96
|
+
|
|
97
|
+
- `type` 的取值范围为 `int`、`float`、`color`、`bool`、`string`、`audio`、`image`、`video`。
|
|
98
|
+
- `label` 使用用户语言,长度不超过 10 个字符。
|
|
99
|
+
- `max` 和 `min` 专用于 `int` 与 `float` 类型。
|
|
100
|
+
- `type: "color"` 使用十六进制颜色字符串。
|
|
101
|
+
- `type: "image"` 必须声明 `image_type: "Asset"`。
|
|
102
|
+
- `image_type: "Asset"` 必须额外声明 `size`,格式为 `"宽x高"`,例如 `"1440x2560"`。
|
|
103
|
+
|
|
104
|
+
##### 参数类型样例
|
|
105
|
+
|
|
106
|
+
`/public/config.json` 中的可见参数按以下结构书写。实际项目按需选择参数类型和 key,生成配置时保持相同 schema。
|
|
107
|
+
|
|
108
|
+
```json
|
|
109
|
+
{
|
|
110
|
+
"_game_name": "示例游戏",
|
|
111
|
+
"_config_version": 1,
|
|
112
|
+
"move_speed": {
|
|
113
|
+
"value": 220,
|
|
114
|
+
"type": "int",
|
|
115
|
+
"label": "移动速度",
|
|
116
|
+
"min": 50,
|
|
117
|
+
"max": 400
|
|
118
|
+
},
|
|
119
|
+
"gravity_scale": {
|
|
120
|
+
"value": 1.2,
|
|
121
|
+
"type": "float",
|
|
122
|
+
"label": "重力倍率",
|
|
123
|
+
"min": 0.2,
|
|
124
|
+
"max": 3
|
|
125
|
+
},
|
|
126
|
+
"theme_background_color": {
|
|
127
|
+
"value": "#10131f",
|
|
128
|
+
"type": "color",
|
|
129
|
+
"label": "背景色"
|
|
130
|
+
},
|
|
131
|
+
"enable_shake": {
|
|
132
|
+
"value": true,
|
|
133
|
+
"type": "bool",
|
|
134
|
+
"label": "震屏开关"
|
|
135
|
+
},
|
|
136
|
+
"start_button_text": {
|
|
137
|
+
"value": "开始游戏",
|
|
138
|
+
"type": "string",
|
|
139
|
+
"label": "开始文案"
|
|
140
|
+
},
|
|
141
|
+
"bgm_main": {
|
|
142
|
+
"value": "https://example.com/bgm.mp3",
|
|
143
|
+
"type": "audio",
|
|
144
|
+
"label": "背景音乐"
|
|
145
|
+
},
|
|
146
|
+
"image_background": {
|
|
147
|
+
"value": "https://example.com/background.png",
|
|
148
|
+
"type": "image",
|
|
149
|
+
"image_type": "Asset",
|
|
150
|
+
"size": "1440x2560",
|
|
151
|
+
"label": "背景图"
|
|
152
|
+
},
|
|
153
|
+
"image_player": {
|
|
154
|
+
"value": "https://example.com/player.png",
|
|
155
|
+
"type": "image",
|
|
156
|
+
"image_type": "Asset",
|
|
157
|
+
"size": "1024x1024",
|
|
158
|
+
"label": "角色图"
|
|
159
|
+
},
|
|
160
|
+
"video_intro": {
|
|
161
|
+
"value": "https://example.com/intro.mp4",
|
|
162
|
+
"type": "video",
|
|
163
|
+
"label": "开场视频"
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
生成正式项目配置时:
|
|
169
|
+
|
|
170
|
+
- `audio`、`image` 和 `video` 的 `value` 使用真实 URL。图片由上游异步生成时,URL 短暂返回 404 不代表素材失效。
|
|
171
|
+
- `image` 类型写明尺寸元数据,`Asset` 使用 `size`,供 Codex 在无法读取真实图片时判断显示尺寸。
|
|
172
|
+
- `string` 用于用户可编辑文案、主题名、资源键等短文本。
|
|
173
|
+
- `bool` 用于开关项,值为 `true` 或 `false`。
|
|
174
|
+
- `int` 使用整数,`float` 可以使用小数;两者均包含 `min` 和 `max`。
|
|
175
|
+
- `_game_name`、`_config_version`、`_comment` 等内部字段直接存储内部值,不使用可见参数 schema。
|
|
176
|
+
|
|
177
|
+
##### 不可见参数
|
|
178
|
+
|
|
179
|
+
key 以 `_` 开头,用于内部配置、资源映射、版本号和调试开关,不暴露给用户编辑。
|
|
180
|
+
|
|
181
|
+
### 文件提交
|
|
182
|
+
|
|
183
|
+
提交文件集合由 UTF-8 文本文件构成。图片、音频、视频、字体、模型、压缩包等二进制素材使用 evomemeTOS 链接接入游戏,并通过 `public/config.json` 引用。对应的本地二进制文件路径记录在 `.evomemeignore` 中。
|
|
184
|
+
|
|
185
|
+
`dist/` 始终处于提交范围内,并包含完成资源链接替换后的最新生产构建。
|
|
186
|
+
|
|
187
|
+
### 发布前检查
|
|
188
|
+
|
|
189
|
+
仅在准备提交或发布游戏时检查以下事项:
|
|
190
|
+
|
|
191
|
+
- [ ] 游戏使用竖屏 UI 布局,并支持触屏操作。
|
|
192
|
+
- [ ] 在不同竖屏尺寸和宽高比下,游玩界面均占满整个可视屏幕,无任何黑边或未覆盖区域,关键 UI 保持可见可操作。
|
|
193
|
+
- [ ] Demo 不包含 SVG、线条绘制或大面积纯色游戏素材;所需游戏图片均已通过图片生成获得并实际接入。
|
|
194
|
+
- [ ] 根目录包含 `dist/`、`public/config.json`、`src/` 和 `index.html`。
|
|
195
|
+
- [ ] `public/config.json` 可解析、符合配置 schema,并在构建后原样输出为 `dist/config.json`。
|
|
196
|
+
- [ ] `public/config.json` 以公开链接记录游戏使用的二进制素材。
|
|
197
|
+
- [ ] 本地二进制文件路径已加入 `.evomemeignore`。
|
|
198
|
+
- [ ] `.evomemeignore` 保持 `dist/` 在提交范围内。
|
|
199
|
+
- [ ] `dist/` 来自完成资源链接替换后的最新生产构建。
|
|
200
|
+
- [ ] 构建使用相对发布基路径;运行时配置和资源使用相对 URL,不依赖域名根路径。
|
|
201
|
+
- [ ] `dist/` 可独立部署,且其中没有对 `src/`、`public/`、项目根目录、`localhost`、开发服务器或未构建源码的运行时依赖。
|
|
202
|
+
- [ ] 已以 `dist/` 为静态服务根目录完成预览,游戏能够启动、加载资源并跑通核心流程。
|
|
203
|
+
- [ ] 提交文件集合只包含 UTF-8 文本文件。
|
|
204
|
+
- [ ] 发布过程遵循 `evomeme-cloud-fs`。
|
|
205
|
+
|
|
206
|
+
## 平台能力
|
|
207
|
+
|
|
208
|
+
根据当前任务选择所需能力。各项能力独立生效:
|
|
209
|
+
|
|
210
|
+
- **二进制素材托管**:需要将本地图片、音频、视频、字体或模型转换为公开链接时,加载并遵循 [`evomeme-tos-upload`](../evomeme-tos-upload/SKILL.md)。取得的 `asset_url` 可写入 `public/config.json`,本地二进制文件路径可写入 `.evomemeignore`。
|
|
211
|
+
- **游戏发布**:需要准备工作区、检查提交内容或发布游戏时,加载并遵循 [`evomeme-cloud-fs`](../evomeme-cloud-fs/SKILL.md)。
|
|
212
|
+
- **游戏封面**:需要添加游戏封面或提供 `cover_url` 时,加载并遵循 [`evomeme-cover`](../evomeme-cover/SKILL.md)。
|
|
213
|
+
- **手机端原生能力**:游戏需要使用摄像头、相册、麦克风、陀螺仪、震动或其他宿主能力时,加载并遵循 [`evomeme-native-bridge-sdk`](../evomeme-native-bridge-sdk/SKILL.md)。
|
|
214
|
+
- **登录恢复**:evomeme操作返回登录或鉴权错误后,加载并遵循 [`evomeme-login`](../evomeme-login/SKILL.md),恢复登录后继续原操作。
|