Spaces:
Sleeping
Sleeping
Upload 3 files
Browse files- default_content.py +1 -0
- m_prompt.txt +172 -68
- 麻将游戏mGDL通用语法_v1.3.txt +90 -7
default_content.py
CHANGED
|
@@ -47,6 +47,7 @@ DEFAULT_EXAMPLE_MD_FILES = [
|
|
| 47 |
"经典推倒胡.md",
|
| 48 |
"贵州捉鸡麻将.md",
|
| 49 |
"长沙麻将.md",
|
|
|
|
| 50 |
]
|
| 51 |
|
| 52 |
|
|
|
|
| 47 |
"经典推倒胡.md",
|
| 48 |
"贵州捉鸡麻将.md",
|
| 49 |
"长沙麻将.md",
|
| 50 |
+
"麻将机制说明.md",
|
| 51 |
]
|
| 52 |
|
| 53 |
|
m_prompt.txt
CHANGED
|
@@ -28,8 +28,10 @@
|
|
| 28 |
本 prompt 配套以下 16 个经过严格验证的 mGDL v1.3 标准示例,涵盖了主流麻将机制。**在设计新玩法时,必须遵循mGDL v1.3规范,并优先参考同类机制的现有文件**:
|
| 29 |
|
| 30 |
1. **通用语法规范**:`麻将游戏mGDL通用语法_v1.3.txt`
|
| 31 |
-
|
| 32 |
-
|
|
|
|
|
|
|
| 33 |
|
| 34 |
**核心原则:设计依从 .md (主),语法参考 .txt (辅)**
|
| 35 |
*当 .md 与 .txt 规则不一致时,绝对以 .md 为准。*
|
|
@@ -64,6 +66,16 @@
|
|
| 64 |
- **辅文档(Auxiliary)= mGDL 文件 (.txt)**:它是**语法参考**。仅用于参考如何用合法的 v1.3 语法将 .md 中的规则“翻译”成代码,**严禁**因为 mGDL 文件中缺少某个细节而丢弃 .md 中的设计。
|
| 65 |
- **冲突解决**:若 .md 说“摸2打1”,而 .txt 示例说“摸1打1”,**以 .md 为准**,必须编写出支持“摸2打1”的新 mGDL 代码,而不是照抄旧代码。
|
| 66 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 67 |
## 玩法融合任务指南 (Variant Fusion Guidelines)
|
| 68 |
|
| 69 |
当任务要求**"融合玩法 A 与 玩法 B"**或**"基于 A 玩法增加 B 的机制"**时,请严格遵循以下步骤:
|
|
@@ -79,7 +91,10 @@
|
|
| 79 |
- *示例*:血流麻将(底座) + 红中赖子(插件) = 红中血流
|
| 80 |
- **化学反应(Chemical Reaction)**:融合不应是简单的“A+B”,而应产生新的策略体验。
|
| 81 |
- *提问*:引入的新机制(如+2牌)如何改变原有的出牌策略?如果只是单纯增加运气,请重新设计为策略型机制(如“指定下家打出特定花色”)。
|
| 82 |
-
- **特殊机制注册**:所有从 B 玩法引入的机制(如买马、抓鸟、特殊赖子),必须在
|
|
|
|
|
|
|
|
|
|
| 83 |
|
| 84 |
### 3. 生成要求
|
| 85 |
- 在 **游戏理念** 中明确说明融合了哪些玩法的哪些要素。
|
|
@@ -88,6 +103,61 @@
|
|
| 88 |
|
| 89 |
> ⚠️ **注意**:以下"mGDL 生成硬规范"仅约束第3部分(mGDL描述)的语法与语义,不影响其他部分的自由生成。其他部分仍需遵守通用清晰性、确定性、无模糊词等基本要求。
|
| 90 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 91 |
## 核心设计原则与强制约束
|
| 92 |
|
| 93 |
### mGDL 输出硬规范补充
|
|
@@ -103,7 +173,7 @@
|
|
| 103 |
- 任何操作后必须保持等式成立
|
| 104 |
|
| 105 |
3. **阶段命名规范**:
|
| 106 |
-
- 阶段名只用短枚举,
|
| 107 |
- `turn_order` 必须精确到 PID 序列,或通过 `player_seating` 完成角色→PID 绑定
|
| 108 |
|
| 109 |
4. **计分模式一致性与番数/倍数区分**(v1.3 核心要求):
|
|
@@ -129,10 +199,17 @@
|
|
| 129 |
- 示例:`(default_visibility (state hidden) (to none))` 表示牌墙不可见
|
| 130 |
|
| 131 |
6. **特殊机制统一注册**:
|
| 132 |
-
- 所有创新机制(幺鸡/红中/皮子/翻马/承包等)必须在
|
| 133 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 134 |
- `category` 必须为:`wildcard`/`scoring`/`phase_rule`/`settlement`/`other` 之一
|
| 135 |
|
|
|
|
| 136 |
7. **胡牌事件完整性**:
|
| 137 |
- 必须明确定义 `win_rules.allow_*` 系列(`allow_discard_win`/`allow_self_draw_win`/`allow_rob_kong`/`allow_gang_shoot`/`allow_multi_win`)
|
| 138 |
- 必须在 `post_win_continuation` 中完整定义胡牌后逻辑
|
|
@@ -335,11 +412,16 @@
|
|
| 335 |
**mGDL 输出必须包含以下所有核心模块,缺一不可**:
|
| 336 |
- [ ] `(game_variant "...")` - 玩法大类
|
| 337 |
- [ ] `(players N)` - 玩家数量
|
|
|
|
| 338 |
- [ ] `(tileset ...)` - 牌组定义,必须包含:
|
| 339 |
- `(suits {...})` - 基本花色
|
| 340 |
- `(ranks 1..9)` - 牌点范围
|
| 341 |
- `(total N)` - 总牌数
|
| 342 |
-
- [ ] `(
|
|
|
|
|
|
|
|
|
|
|
|
|
| 343 |
- [ ] `(seats {...})` - 座位定义
|
| 344 |
- [ ] `(turn_order ...)` - 出牌顺序
|
| 345 |
- [ ] `(setup ...)` - 游戏准备,必须包含:
|
|
@@ -366,14 +448,16 @@
|
|
| 366 |
#### 第1-16项:语法与语义检查
|
| 367 |
|
| 368 |
- [ ] Zone 名称正则通过:`^(wall|hand(:[A-Z]\d+)?|meld(:[A-Z]\d+)?|kong(:[A-Z]\d+)?|discard_pile|flip_zone)$`
|
|
|
|
|
|
|
| 369 |
- [ ] 所有动作/机制均有合法 `transfer_path`,包括 `pass` 必须为 `none`
|
| 370 |
-
- [ ]
|
| 371 |
- [ ] **番型定义与计分模式严格兼容**(v1.3 核心检查):
|
| 372 |
- 倍数制 (`multiplier`):所有番型仅使用 `mult`,不使用 `fan`
|
| 373 |
- 番数制 (`fan_system`):所有番型仅使用 `fan`,不使用 `mult`
|
| 374 |
- 混合制 (`hybrid`):使用 `mult` + `category` 区分维度
|
| 375 |
- `stacking` 方式与计分模式匹配
|
| 376 |
-
- [ ] 特殊机制在 `special_mechanics` 中完整注册(v1.3 扩展机制)
|
| 377 |
- [ ] 可见性为标准二元结构 `(state visible/hidden) (to audience)`;弃用 `face_up/face_down` 简写
|
| 378 |
- [ ] 胡牌事件完整定义:所有 `allow_*` 明确设置
|
| 379 |
- [ ] 资源守恒可验算,`invariants.*` 参数齐全
|
|
@@ -387,10 +471,10 @@
|
|
| 387 |
- 机制数量严格相等,一一对应
|
| 388 |
- 每个机制的 `transfer_path` 和 `visibility_change` 正确定义
|
| 389 |
- [ ] **⚠️ 特殊机制统一注册检查通过**(零容忍项):
|
| 390 |
-
- 所有创新机制必须在 `special_mechanics` 中注册
|
| 391 |
- 每个注册项必须包含:`name`、`category`、`implementation_path`、`phase`、`enabled`、`description`
|
| 392 |
- `category` 必须为:`wildcard`/`scoring`/`phase_rule`/`settlement`/`other` 之一
|
| 393 |
-
- 验证:special_mechanics 注册数量 = GDL中所有特殊定义的总和
|
| 394 |
- [ ] **牌型可达性验证**:
|
| 395 |
- 检查大牌型(如十八罗汉/大威天龙)在给定牌组下是否理论可达
|
| 396 |
- 在 `resource_bounds` 中设置合理上限
|
|
@@ -467,14 +551,14 @@
|
|
| 467 |
|
| 468 |
| NAT_name(自然语言机制名) | mGDL_path(实体落点) |
|
| 469 |
|---|---|
|
| 470 |
-
| 例:幺鸡赖子 | special_mechanics.
|
| 471 |
-
| 例:红中杠 | special_mechanics.
|
| 472 |
| 例:抢杠胡 | win_rules.allow_rob_kong |
|
| 473 |
|
| 474 |
**强制要求:**
|
| 475 |
1. `NAT_name` 为自然语言部分出现的全部机制/能力/道具的**去重后**集合
|
| 476 |
2. `mGDL_path` 必须指向以下任一合法位置:
|
| 477 |
-
- `special_mechanics.<
|
| 478 |
- `win_rules.<rule_node>`
|
| 479 |
- `actions.<action_node>`
|
| 480 |
3. 若任一行缺失 `mGDL_path` 或指向不存在的节点 → **FAIL & 自动修复**
|
|
@@ -485,46 +569,55 @@
|
|
| 485 |
|
| 486 |
#### 特殊机制统一注册要求
|
| 487 |
|
| 488 |
-
**核心原则**:`special_mechanics` 作为所有创新机制的"统一注册表/索引目录"
|
| 489 |
-
无论机制实际定义在何处(wildcard / actions / phases.rules / scoring),都**必须**在 `special_mechanics` 中注册。
|
| 490 |
|
| 491 |
**注册格式示例**(mGDL中):
|
| 492 |
```lisp
|
| 493 |
-
(
|
| 494 |
-
|
| 495 |
-
(
|
| 496 |
-
(
|
| 497 |
-
|
| 498 |
-
|
| 499 |
-
|
| 500 |
-
|
| 501 |
-
|
| 502 |
-
|
| 503 |
-
|
| 504 |
-
|
| 505 |
-
|
| 506 |
-
|
| 507 |
-
|
| 508 |
-
|
| 509 |
-
|
| 510 |
-
|
| 511 |
-
|
| 512 |
-
|
| 513 |
-
|
| 514 |
-
|
| 515 |
-
|
| 516 |
-
|
| 517 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 518 |
)
|
| 519 |
|
|
|
|
| 520 |
**自检要求**
|
| 521 |
1. 扫描mGDL所有模块,识别所有非标准定义:
|
| 522 |
-
- special_mechanics 中的所有条目
|
| 523 |
- win_rules 中的特殊胡牌规则
|
| 524 |
- scoring 中的特殊计分规则
|
| 525 |
- fan_table 中的特殊番型
|
| 526 |
-
2. 逐一确认每个特殊定义在 special_mechanics 中有对应注册
|
| 527 |
-
3. 数量验证:special_mechanics 注册数 = 实际特殊机制数
|
| 528 |
4. 若有遗漏 → FAIL & 自动补全注册
|
| 529 |
|
| 530 |
#### 区域与转移路径(强制且可机读)
|
|
@@ -609,6 +702,16 @@
|
|
| 609 |
- FAIL条件:庄家规则模糊
|
| 610 |
- 修复:明确庄家权益与流转规则
|
| 611 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 612 |
#### 最小修改优先级(麻将专用)
|
| 613 |
1. 收敛机制:限制大牌型出现条件/频率,添加互斥规则
|
| 614 |
2. 调整牌组:增减特殊牌数量,调整花色构成
|
|
@@ -670,15 +773,15 @@
|
|
| 670 |
|
| 671 |
### mGDL描述
|
| 672 |
####生成前必读:完整度参照标准
|
| 673 |
-
在开始编写mGDL前,请在心中回顾麻将游戏mGDL通用语法_v1.
|
| 674 |
|
| 675 |
#### 参照示例的完整度标准:
|
| 676 |
1. 牌组定义(tileset)
|
| 677 |
- 禁止:(tileset (suits {"wan" "tong" "tiao"})) ← 只有花色
|
| 678 |
- 参照:示例文件第15-25行,明确列出所有牌类型、数量、特殊牌
|
| 679 |
- 要求:定义时必须包含花色、点数范围、字牌、特殊牌等完整信息
|
| 680 |
-
2. 特殊机制(special_mechanics)
|
| 681 |
-
- 禁止:(special_mechanics (yaoji (enabled true))) ← 只有启用标志
|
| 682 |
- 参照:示例文件第30-45行,每个机制有完整参数
|
| 683 |
- 要求:定义时必须包含详细规则、转移路径、可见性等
|
| 684 |
3. 番型表(fan_table)
|
|
@@ -690,7 +793,7 @@
|
|
| 690 |
- 参照:示例文件第60-80行,每个阶段有详细规则
|
| 691 |
- 要求:每个阶段至少包含5-10行的具体规则定义
|
| 692 |
|
| 693 |
-
|
| 694 |
- 禁止:(actions (allow_chi true)) ← 仅开关无细节
|
| 695 |
- 参照:四川血战示例第120-135行,每个 action 有 transfer_path + hand effect 注释
|
| 696 |
- 要求:每个 action 必须包含:
|
|
@@ -723,7 +826,7 @@ mGDL 必须包含以下所有核心模块(对应硬自检第0项):
|
|
| 723 |
1. (game_variant "...") - 玩法大类
|
| 724 |
2. (players N) - 玩家数量
|
| 725 |
3. (tileset ...) - 牌组定义
|
| 726 |
-
4. (
|
| 727 |
5. (seats {...}) - 座位定义
|
| 728 |
6. (turn_order ...) - 出牌顺序
|
| 729 |
7. (setup ...) - 游戏准备
|
|
@@ -733,7 +836,6 @@ mGDL 必须包含以下所有核心模块(对应硬自检第0项):
|
|
| 733 |
11. (fan_table ...) - 番型与倍数
|
| 734 |
12. (settlement ...) - 结算规则
|
| 735 |
13. (invariants ...) - 守恒不变量
|
| 736 |
-
14. (special_mechanics ...) - 特殊机制注册
|
| 737 |
严禁省略任何核心模块! 即使 mGDL 很长,也必须完整输出。 在 (setup) 或 (tileset) 附近添加牌数验证的中文注释,便于人工核对。
|
| 738 |
|
| 739 |
|
|
@@ -742,13 +844,13 @@ mGDL 必须包含以下所有核心模块(对应硬自检第0项):
|
|
| 742 |
1. 新机制声明(⚠️ 核心创新展示区,必须完整)
|
| 743 |
- 格式要求:必须使用以下表格格式,逐个列出本游戏的所有特殊机制:
|
| 744 |
机制名称 | 核心功能 | 使用阶段 | 触发条件 | 实际定义位置 | mGDL注册路径
|
| 745 |
-
例:幺鸡赖子 | 1条可替代任意牌 | 全局 | 胡牌时 | special_mechanics.yaoji | special_mechanics.YaojiWild
|
| 746 |
-
例:定缺换牌 | 选择缺一门花色后换3张牌 | 准备阶段 | 定缺后 | setup.exchange_three | special_mechanics.ExchangeThree
|
| 747 |
|
| 748 |
- 强制要求:
|
| 749 |
a. 完整性:表格必须包含本游戏的所有创新机制,不得遗漏
|
| 750 |
b. 实际定义位置:标注机制在mGDL中的实际定义位置
|
| 751 |
-
c. mGDL注册路径:标注机制在 special_mechanics 中的注册路径
|
| 752 |
d. 详细展开:表格下方必须对每个机制进行详细说明:
|
| 753 |
- 机制的战略价值和游戏体验影响
|
| 754 |
- 具体的使用方法和限制条件
|
|
@@ -815,7 +917,7 @@ c. 番型计分:详细列出番型与对应分值
|
|
| 815 |
<details>
|
| 816 |
<summary>点击展开,完整的《自检报告》(开发者/审核专用)</summary>
|
| 817 |
|
| 818 |
-
## 麻将mGDL自检报告 v1.
|
| 819 |
|
| 820 |
### 0) **mGDL 模块完整性检查**(零容忍项)
|
| 821 |
|
|
@@ -823,7 +925,7 @@ c. 番型计分:详细列出番型与对应分值
|
|
| 823 |
- game_variant 定义 → [PASS/FAIL]
|
| 824 |
- players 定义 → [PASS/FAIL]
|
| 825 |
- tileset 定义(含 suits/ranks/honors/total) → [PASS/FAIL]
|
| 826 |
-
- special_mechanics 定义 → [PASS/FAIL]
|
| 827 |
- seats 定义 → [PASS/FAIL]
|
| 828 |
- turn_order 定义 → [PASS/FAIL]
|
| 829 |
- setup 定义(含 initial_hand/choose_que/exchange_three) → [PASS/FAIL]
|
|
@@ -959,7 +1061,7 @@ c. 番型计分:详细列出番型与对应分值
|
|
| 959 |
### 8) **特殊机制统一注册检查**(⚠️ 核心防遗漏机制)
|
| 960 |
|
| 961 |
**步骤A:扫描mGDL所有模块,提取所有特殊定义**
|
| 962 |
-
- special_mechanics 中的所有条目
|
| 963 |
- win_rules 中的特殊胡牌规则
|
| 964 |
- scoring 中的特殊计分规则
|
| 965 |
- fan_table 中的特殊番型
|
|
@@ -972,21 +1074,23 @@ c. 番型计分:详细列出番型与对应分值
|
|
| 972 |
|
| 973 |
**总计**:N个
|
| 974 |
|
| 975 |
-
**步骤B:验证 special_mechanics 注册完整性**
|
| 976 |
-
**special_mechanics 中已注册的机制**:
|
| 977 |
-
| 机制
|
| 978 |
-
|---------|-------------------|----------|---------|
|
| 979 |
-
| [M1]
|
| 980 |
-
| [M2]
|
|
|
|
| 981 |
|
| 982 |
**总计**:M个
|
| 983 |
|
| 984 |
**步骤C:对比检查**
|
| 985 |
- mGDL中实际特殊机制数量:N
|
| 986 |
-
- special_mechanics 注册数量:M
|
| 987 |
- 是否一致:N == M → [PASS/FAIL]
|
|
|
|
| 988 |
|
| 989 |
-
**未在 special_mechanics 注册的机制**:
|
| 990 |
- [列出所有遗漏项及其定义位置]
|
| 991 |
|
| 992 |
**最终结论**:[PASS/FAIL]
|
|
@@ -1059,7 +1163,7 @@ c. 番型计分:详细列出番型与对应分值
|
|
| 1059 |
- 牌组兼容性:Tileset 包含所有机制所需的牌(如花牌/月亮牌) → [PASS/FAIL]
|
| 1060 |
|
| 1061 |
**融合插件注册**:
|
| 1062 |
-
- 来源玩法机制完整注册进 special_mechanics → [PASS/FAIL]
|
| 1063 |
- 插件机制与底座玩法无逻辑冲突 → [PASS/FAIL]
|
| 1064 |
|
| 1065 |
### 15) **最终验收**
|
|
@@ -1096,7 +1200,7 @@ c. 番型计分:详细列出番型与对应分值
|
|
| 1096 |
## 常见错误避免
|
| 1097 |
### ⚠️ 零容忍错误(最高优先级)
|
| 1098 |
1. ❌ mGDL 模块不完整是最严重的错误:
|
| 1099 |
-
- 严禁输出缺少核心模块的 mGDL(如缺少 special_mechanics、fan_table、win_rules 等)
|
| 1100 |
- mGDL 必须包含硬自检第0项列出的所有核心模块,缺一不可
|
| 1101 |
- 在第二步自检时,第0项"模块完整性检查"的所有子项必须全部 PASS
|
| 1102 |
2. 牌墙管理错误:
|
|
@@ -1112,7 +1216,7 @@ c. 番型计分:详细列出番型与对应分值
|
|
| 1112 |
- 严禁未定义胡牌后规则
|
| 1113 |
- 严禁胡牌要求与番型体系不一致
|
| 1114 |
5. 特殊机制未注册:
|
| 1115 |
-
- 严禁在 special_mechanics 中漏注册任何创新机制
|
| 1116 |
- 严禁自然语言声明了但 mGDL 未实现的机制
|
| 1117 |
- 严禁 mGDL 实现了但自然语言未说明的机制
|
| 1118 |
6. 新增麻将专用检查项
|
|
@@ -1140,5 +1244,5 @@ c. 番型计分:详细列出番型与对应分值
|
|
| 1140 |
- 严禁自然语言描述中省略“吃/碰/杠后需打牌”这一关键步骤。
|
| 1141 |
9. **玩法融合失败**(融合任务专用):
|
| 1142 |
- 严禁混用计分模式(如在倍数制中使用 `fan` 字段)。
|
| 1143 |
-
- 严禁引入新机制(如买马)但未在 `special_mechanics` 和 `win_rules/scoring` 中完整定义。
|
| 1144 |
- 严禁保留互相冲突的规则(如“血战”与“流局”规则并存)。
|
|
|
|
| 28 |
本 prompt 配套以下 16 个经过严格验证的 mGDL v1.3 标准示例,涵盖了主流麻将机制。**在设计新玩法时,必须遵循mGDL v1.3规范,并优先参考同类机制的现有文件**:
|
| 29 |
|
| 30 |
1. **通用语法规范**:`麻将游戏mGDL通用语法_v1.3.txt`
|
| 31 |
+
2. **创新机制词典 (Mechanism Library)**:`示例玩法md/麻将机制说明.md`
|
| 32 |
+
* **用途**:包含大量经过验证的麻将原子机制(如暴击、换牌、海捞、生肖收集等)。
|
| 33 |
+
* **原则**:在进行“机制创新”或“玩法结合”时,**必须**首先查阅此文档,从中选取适配的机制进行组合。
|
| 34 |
+
3. **双源参考库 (Dual Source Reference)**:
|
| 35 |
|
| 36 |
**核心原则:设计依从 .md (主),语法参考 .txt (辅)**
|
| 37 |
*当 .md 与 .txt 规则不一致时,绝对以 .md 为准。*
|
|
|
|
| 66 |
- **辅文档(Auxiliary)= mGDL 文件 (.txt)**:它是**语法参考**。仅用于参考如何用合法的 v1.3 语法将 .md 中的规则“翻译”成代码,**严禁**因为 mGDL 文件中缺少某个细节而丢弃 .md 中的设计。
|
| 67 |
- **冲突解决**:若 .md 说“摸2打1”,而 .txt 示例说“摸1打1”,**以 .md 为准**,必须编写出支持“摸2打1”的新 mGDL 代码,而不是照抄旧代码。
|
| 68 |
|
| 69 |
+
## 统一约定(强制)
|
| 70 |
+
|
| 71 |
+
- **mGDL 代码**:使用括号嵌套节点结构(S-expression),例如:
|
| 72 |
+
- `(extensions (special_mechanics (mechanic_cards ...)))`
|
| 73 |
+
- **mGDL_path**:仅在表格/自检/说明中使用“点号路径字符串”,例如:
|
| 74 |
+
- `extensions.special_mechanics.mechanic_cards.<Mechanic_ID>`
|
| 75 |
+
- **严禁混用**:
|
| 76 |
+
- ❌ 禁止在 mGDL 代码里写 `(extensions.special_mechanics.mechanic_cards. ...)`
|
| 77 |
+
- ❌ 禁止使用双点 `..`、禁止路径末尾 `.`(统一不带末尾点)
|
| 78 |
+
|
| 79 |
## 玩法融合任务指南 (Variant Fusion Guidelines)
|
| 80 |
|
| 81 |
当任务要求**"融合玩法 A 与 玩法 B"**或**"基于 A 玩法增加 B 的机制"**时,请严格遵循以下步骤:
|
|
|
|
| 91 |
- *示例*:血流麻将(底座) + 红中赖子(插件) = 红中血流
|
| 92 |
- **化学反应(Chemical Reaction)**:融合不应是简单的“A+B”,而应产生新的策略体验。
|
| 93 |
- *提问*:引入的新机制(如+2牌)如何改变原有的出牌策略?如果只是单纯增加运气,请重新设计为策略型机制(如“指定下家打出特定花色”)。
|
| 94 |
+
- **特殊机制注册**:所有从 B 玩法引入的机制(如买马、抓鸟、特殊赖子),必须在机制卡注册表中注册:
|
| 95 |
+
- 代码落点:`(extensions (special_mechanics (mechanic_cards ...)))`
|
| 96 |
+
- 路径引用:`extensions.special_mechanics.mechanic_cards.<Mechanic_ID>`
|
| 97 |
+
|
| 98 |
|
| 99 |
### 3. 生成要求
|
| 100 |
- 在 **游戏理念** 中明确说明融合了哪些玩法的哪些要素。
|
|
|
|
| 103 |
|
| 104 |
> ⚠️ **注意**:以下"mGDL 生成硬规范"仅约束第3部分(mGDL描述)的语法与语义,不影响其他部分的自由生成。其他部分仍需遵守通用清晰性、确定性、无模糊词等基本要求。
|
| 105 |
|
| 106 |
+
## 创新扩展任务指南 (Innovation Extension Guidelines)
|
| 107 |
+
|
| 108 |
+
当任务要求**“在某玩法A基础上,新增若干机制 / 做一个A的创新变体(不指定玩法B)”**时,进入【创新扩展模式】。
|
| 109 |
+
目标不是堆叠条款,而是让新机制成为“改变策略”的主干,并且能被 mGDL v1.3 **实体化**。
|
| 110 |
+
|
| 111 |
+
### A. 一脊一骨架原则(Anti-Stacking)
|
| 112 |
+
1. 只允许 **1 个“主创新机制”(Core Mechanic)**。
|
| 113 |
+
2. 最多允许再配 **1 个“辅机制”(Aux Mechanic)**,且辅机制必须服务于主机制(例如:主机制=收集轨;辅机制=一次性加速/保底触发)。
|
| 114 |
+
3. 每一条新增规则必须同时满足:
|
| 115 |
+
- 绑定到某个【状态变量】(计数器/集合/标记/可见性/全局池/个人池)
|
| 116 |
+
- 影响至少一个【决策点】(摸/打/吃碰杠/宣告/换牌/点炮/结算)
|
| 117 |
+
- 在结算中体现为【奖励/惩罚/上限突破】之一
|
| 118 |
+
否则判定为“装饰性堆叠”→ 必须删掉或重写。
|
| 119 |
+
4. 复杂度预算(防止无限扩张):
|
| 120 |
+
- 主机制新增【状态变量】≤2 个
|
| 121 |
+
- 新增【行动(action)】≤2 个(可用既有 action 的参数化替代)
|
| 122 |
+
- 新增【结算条目/番型】≤3 个(若更多,必须合并成阶梯式阈值)
|
| 123 |
+
|
| 124 |
+
### B. 机制卡(Mechanic Card)模板(必须在脑中生成,输出可简版)
|
| 125 |
+
对每个候选机制,用下列字段快速定型(字段越具体越好):
|
| 126 |
+
- 名称:
|
| 127 |
+
- 设计目的(对应你要强化的体验:加速/做大牌/互动/信息博弈等):
|
| 128 |
+
- 状态变量(存放位置:哪个 zone/状态树;初值;可见性):
|
| 129 |
+
- 触发器列表(trigger_condition:事件+时机+条件):
|
| 130 |
+
- 效果列表(transfer_path / visibility_change / scoring_delta / phase_rule):
|
| 131 |
+
- 反制与风险(对手能做什么?失败代价是什么?):
|
| 132 |
+
- 平衡旋钮(上限、频率、成本、门槛、封顶/破封):
|
| 133 |
+
- mGDL 落点(extensions.special_mechanics.mechanic_cards. / actions / phases.rules / scoring / fan_table):
|
| 134 |
+
|
| 135 |
+
### C. 创新模式的“化学反应”检查(必须过)
|
| 136 |
+
写出一条因果链:
|
| 137 |
+
新机制 → 改变玩家选择 → 形成对抗/博弈 → 在分数/胜负上体现。
|
| 138 |
+
若链路中断(只增加随机性/只是加倍/只是换皮)→ 必须重构为策略机制(带条件/成本/反制)。
|
| 139 |
+
|
| 140 |
+
### D. 常用创新母题(来自已知创新玩法的抽象内核;禁止照抄具体数值)
|
| 141 |
+
从下列母题中选 **1 个作为主机制骨架**,再围绕它做“一处关键扭转”(一个明确的新选择/新代价/新反制):
|
| 142 |
+
1. 信息显隐与交换(暗/明牌、公开承诺、揭示换收益)
|
| 143 |
+
2. 进度/收集轨(点亮/收集集合→阶梯式奖励,阈值触发)
|
| 144 |
+
3. 可扩张目标池(听口/任务池随事件增长;重复触发带来突破)
|
| 145 |
+
4. 回收与二次抽取(弃牌/交换牌回收进池;形成“牌库循环”)
|
| 146 |
+
5. 门槛触发相位切换(全员听牌/全员胡牌后进入“决斗相位”等)
|
| 147 |
+
|
| 148 |
+
6. 宣告-押注(宣告目标换更高收益,失败受惩罚;鼓励对抗和读牌)
|
| 149 |
+
7. **机制库提取(Reference Library)**:基于 `麻将机制说明.md` 中的分类:
|
| 150 |
+
- **速度类**:一炮多响、抢杠胡、封顶加速
|
| 151 |
+
- **策略类**:换牌、海底漫游、海捞、暴击(Win Compare)
|
| 152 |
+
- **社交类**:2v2组队(Shared Info)、团队任务
|
| 153 |
+
- **趣味类**:功能牌(Draw 3 Choose 1)、收集(Zodiac/Items)
|
| 154 |
+
|
| 155 |
+
### E. 选型流程(内部,不要求完整输出)
|
| 156 |
+
1. 先提出 **3 个候选 Mechanic Card**
|
| 157 |
+
2. 用 5 项打分:新颖性 / 契合度 / 可实现性(可落 mGDL) / 复杂度预算 / 反制性
|
| 158 |
+
3. 只实现最高分的 **1 个主机制(+可选 1 个辅机制)**,其余全部丢弃
|
| 159 |
+
|
| 160 |
+
|
| 161 |
## 核心设计原则与强制约束
|
| 162 |
|
| 163 |
### mGDL 输出硬规范补充
|
|
|
|
| 173 |
- 任何操作后必须保持等式成立
|
| 174 |
|
| 175 |
3. **阶段命名规范**:
|
| 176 |
+
- 阶段名只用短枚举,顶层 (phases [...]) 列表禁止使用 *_phase;state_machine / mechanic_cards 内部状态名允许使用 *_phase(但建议仍尽量短名);合法阶段:`setup,choose_que,exchange_three,play,sea_draw,settle`,说明:deal 语义并入 setup(发牌/起手手牌配置属于 setup 细则),如无“海底”机制可让 sea_draw 为空实现或不触发。
|
| 177 |
- `turn_order` 必须精确到 PID 序列,或通过 `player_seating` 完成角色→PID 绑定
|
| 178 |
|
| 179 |
4. **计分模式一致性与番数/倍数区分**(v1.3 核心要求):
|
|
|
|
| 199 |
- 示例:`(default_visibility (state hidden) (to none))` 表示牌墙不可见
|
| 200 |
|
| 201 |
6. **特殊机制统一注册**:
|
| 202 |
+
- 所有创新机制(幺鸡/红中/皮子/翻马/承包等)必须在机制卡注册表中注册:
|
| 203 |
+
- 代码落点:`(extensions (special_mechanics (mechanic_cards ...)))`
|
| 204 |
+
- 路径引用:`extensions.special_mechanics.mechanic_cards.<Mechanic_ID>`
|
| 205 |
+
- 每个机制卡(mechanic)必须包含以下最小字段(零容忍):
|
| 206 |
+
- `name`、`category`、`enabled`、`description`、`stage_scope`
|
| 207 |
+
- `transfer_path`(允许为 `none`,但必须显式给出)
|
| 208 |
+
- 若处于【创新扩展模式】(Innovation Extension):
|
| 209 |
+
- 机制卡必须额外包含闭环四段:`trigger / effect / settle / reset`
|
| 210 |
- `category` 必须为:`wildcard`/`scoring`/`phase_rule`/`settlement`/`other` 之一
|
| 211 |
|
| 212 |
+
|
| 213 |
7. **胡牌事件完整性**:
|
| 214 |
- 必须明确定义 `win_rules.allow_*` 系列(`allow_discard_win`/`allow_self_draw_win`/`allow_rob_kong`/`allow_gang_shoot`/`allow_multi_win`)
|
| 215 |
- 必须在 `post_win_continuation` 中完整定义胡牌后逻辑
|
|
|
|
| 412 |
**mGDL 输出必须包含以下所有核心模块,缺一不可**:
|
| 413 |
- [ ] `(game_variant "...")` - 玩法大类
|
| 414 |
- [ ] `(players N)` - 玩家数量
|
| 415 |
+
- [ ] `(team_mode ...)` - [v1.4] 组队模式(如有)
|
| 416 |
- [ ] `(tileset ...)` - 牌组定义,必须包含:
|
| 417 |
- `(suits {...})` - 基本花色
|
| 418 |
- `(ranks 1..9)` - 牌点范围
|
| 419 |
- `(total N)` - 总牌数
|
| 420 |
+
- [ ] `(extensions ...)` - 扩展机制容器,且必须包含:
|
| 421 |
+
- [ ] `(special_mechanics ...)`
|
| 422 |
+
- [ ] `(mechanic_cards ...)` ; 机制卡统一注册表(零容忍)
|
| 423 |
+
- [ ] (建议)`(motif_bank ...)` 与 `(state_vars ...)`(创新扩展模式推荐启用)
|
| 424 |
+
|
| 425 |
- [ ] `(seats {...})` - 座位定义
|
| 426 |
- [ ] `(turn_order ...)` - 出牌顺序
|
| 427 |
- [ ] `(setup ...)` - 游戏准备,必须包含:
|
|
|
|
| 448 |
#### 第1-16项:语法与语义检查
|
| 449 |
|
| 450 |
- [ ] Zone 名称正则通过:`^(wall|hand(:[A-Z]\d+)?|meld(:[A-Z]\d+)?|kong(:[A-Z]\d+)?|discard_pile|flip_zone)$`
|
| 451 |
+
- [ ] **PID/zone 禁止占位符**:最终导出的 mGDL 中不得出现 `<PID>`、`<NextPID>` 等占位符;
|
| 452 |
+
必须展开为实际 PID(如 A1/A2/A3/A4),zone 使用 `hand:A1`/`meld:A1`/`kong:A1` 等形式。
|
| 453 |
- [ ] 所有动作/机制均有合法 `transfer_path`,包括 `pass` 必须为 `none`
|
| 454 |
+
- [ ] 顶层 (phases [...]) 列表禁止使用 *_phase;state_machine / mechanic_cards 内部状态名允许使用 *_phase(但建议仍尽量短名)。
|
| 455 |
- [ ] **番型定义与计分模式严格兼容**(v1.3 核心检查):
|
| 456 |
- 倍数制 (`multiplier`):所有番型仅使用 `mult`,不使用 `fan`
|
| 457 |
- 番数制 (`fan_system`):所有番型仅使用 `fan`,不使用 `mult`
|
| 458 |
- 混合制 (`hybrid`):使用 `mult` + `category` 区分维度
|
| 459 |
- `stacking` 方式与计分模式匹配
|
| 460 |
+
- [ ] 特殊机制在 `extensions.special_mechanics.mechanic_cards.` 中完整注册(v1.3 扩展机制)
|
| 461 |
- [ ] 可见性为标准二元结构 `(state visible/hidden) (to audience)`;弃用 `face_up/face_down` 简写
|
| 462 |
- [ ] 胡牌事件完整定义:所有 `allow_*` 明确设置
|
| 463 |
- [ ] 资源守恒可验算,`invariants.*` 参数齐全
|
|
|
|
| 471 |
- 机制数量严格相等,一一对应
|
| 472 |
- 每个机制的 `transfer_path` 和 `visibility_change` 正确定义
|
| 473 |
- [ ] **⚠️ 特殊机制统一注册检查通过**(零容忍项):
|
| 474 |
+
- 所有创新机制必须在 `extensions.special_mechanics.mechanic_cards.` 中注册
|
| 475 |
- 每个注册项必须包含:`name`、`category`、`implementation_path`、`phase`、`enabled`、`description`
|
| 476 |
- `category` 必须为:`wildcard`/`scoring`/`phase_rule`/`settlement`/`other` 之一
|
| 477 |
+
- 验证:extensions.special_mechanics.mechanic_cards. 注册数量 = GDL中所有特殊定义的总和
|
| 478 |
- [ ] **牌型可达性验证**:
|
| 479 |
- 检查大牌型(如十八罗汉/大威天龙)在给定牌组下是否理论可达
|
| 480 |
- 在 `resource_bounds` 中设置合理上限
|
|
|
|
| 551 |
|
| 552 |
| NAT_name(自然语言机制名) | mGDL_path(实体落点) |
|
| 553 |
|---|---|
|
| 554 |
+
| 例:幺鸡赖子 | extensions.special_mechanics.mechanic_cards.YaojiWild |
|
| 555 |
+
| 例:红中杠 | extensions.special_mechanics.mechanic_cards.HongzhongKong |
|
| 556 |
| 例:抢杠胡 | win_rules.allow_rob_kong |
|
| 557 |
|
| 558 |
**强制要求:**
|
| 559 |
1. `NAT_name` 为自然语言部分出现的全部机制/能力/道具的**去重后**集合
|
| 560 |
2. `mGDL_path` 必须指向以下任一合法位置:
|
| 561 |
+
- `extensions.special_mechanics.mechanic_cards.<Mechanic_ID>`
|
| 562 |
- `win_rules.<rule_node>`
|
| 563 |
- `actions.<action_node>`
|
| 564 |
3. 若任一行缺失 `mGDL_path` 或指向不存在的节点 → **FAIL & 自动修复**
|
|
|
|
| 569 |
|
| 570 |
#### 特殊机制统一注册要求
|
| 571 |
|
| 572 |
+
**核心原则**:`extensions.special_mechanics.mechanic_cards.` 作为所有创新机制的"统一注册表/索引目录"
|
| 573 |
+
无论机制实际定义在何处(wildcard / actions / phases.rules / scoring),都**必须**在 `extensions.special_mechanics.mechanic_cards.` 中注册。
|
| 574 |
|
| 575 |
**注册格式示例**(mGDL中):
|
| 576 |
```lisp
|
| 577 |
+
(extensions
|
| 578 |
+
...
|
| 579 |
+
(special_mechanics
|
| 580 |
+
(mechanic_cards
|
| 581 |
+
; 示例1:幺鸡赖子机制
|
| 582 |
+
(mechanic "YaojiWild"
|
| 583 |
+
(name "幺鸡赖子")
|
| 584 |
+
(category "wildcard")
|
| 585 |
+
(stage_scope "global")
|
| 586 |
+
(enabled true)
|
| 587 |
+
(description "幺鸡(1条)可作为赖子替代任意牌")
|
| 588 |
+
(implementation_path "extensions.special_mechanics.mechanic_cards.YaojiWild")
|
| 589 |
+
(trigger (hook "on_setup") (when "true"))
|
| 590 |
+
(effect (state_update ...) (tile_ops ...) (action_lock ...) (score_ops ...))
|
| 591 |
+
(settle (mode "end_round") (merge_rule "stack") (notes "..."))
|
| 592 |
+
(reset (hook "end_round") (do ...))
|
| 593 |
+
(transfer_path none))
|
| 594 |
+
|
| 595 |
+
; 示例2:红中杠机制
|
| 596 |
+
(mechanic "HongzhongKong"
|
| 597 |
+
(name "红中杠")
|
| 598 |
+
(category "scoring")
|
| 599 |
+
(stage_scope "scoring")
|
| 600 |
+
(enabled true)
|
| 601 |
+
(description "每打出一张红中算作一个明杠,结算时计分")
|
| 602 |
+
(implementation_path "extensions.special_mechanics.mechanic_cards.HongzhongKong")
|
| 603 |
+
(trigger (hook "on_discard") (when "discarded_tile == HONGZHONG"))
|
| 604 |
+
(effect (score_ops (("additive" "+X"))))
|
| 605 |
+
(settle (mode "end_round") (merge_rule "stack") (notes "..."))
|
| 606 |
+
(reset (hook "end_round") (do ...))
|
| 607 |
+
(transfer_path none))
|
| 608 |
+
)
|
| 609 |
+
)
|
| 610 |
)
|
| 611 |
|
| 612 |
+
|
| 613 |
**自检要求**
|
| 614 |
1. 扫描mGDL所有模块,识别所有非标准定义:
|
| 615 |
+
- extensions.special_mechanics.mechanic_cards. 中的所有条目
|
| 616 |
- win_rules 中的特殊胡牌规则
|
| 617 |
- scoring 中的特殊计分规则
|
| 618 |
- fan_table 中的特殊番型
|
| 619 |
+
2. 逐一确认每个特殊定义在 extensions.special_mechanics.mechanic_cards. 中有对应注册
|
| 620 |
+
3. 数量验证:extensions.special_mechanics.mechanic_cards. 注册数 = 实际特殊机制数
|
| 621 |
4. 若有遗漏 → FAIL & 自动补全注册
|
| 622 |
|
| 623 |
#### 区域与转移路径(强制且可机读)
|
|
|
|
| 702 |
- FAIL条件:庄家规则模糊
|
| 703 |
- 修复:明确庄家权益与流转规则
|
| 704 |
|
| 705 |
+
#### 创新机制闭环自检(避免“罗列堆叠”)
|
| 706 |
+
1. 以 `extensions.special_mechanics.mechanic_cards.` 注册项为准,列出所有新增机制,并逐一写出:状态变量 / 触发器 / 效果 / 奖励(或惩罚) / 反制(或风险)
|
| 707 |
+
2. 若任一机制缺少上述任一要素 → FAIL & 直接删掉该机制或补全闭环
|
| 708 |
+
3. 若主机制 > 1 或辅机制 > 1 → FAIL & 按“最小修改优先级:简化规则”合并/删除
|
| 709 |
+
4. 若新增机制无法在 Crosswalk 找到合法落点 → FAIL & 回退改为可实体化版本(优先用 phase_rule / action 参数化替代)
|
| 710 |
+
|
| 711 |
+
#### 化学反应链路自检(策略增量)
|
| 712 |
+
1. 用 3 句描述:新机制让玩家多了什么选择?对手如何应对?为什么分数/胜负上成立?
|
| 713 |
+
2. 若只增加随机性或只是加倍 → FAIL & 重新设计为策略型触发(带条件/成本/反制)
|
| 714 |
+
|
| 715 |
#### 最小修改优先级(麻将专用)
|
| 716 |
1. 收敛机制:限制大牌型出现条件/频率,添加互斥规则
|
| 717 |
2. 调整牌组:增减特殊牌数量,调整花色构成
|
|
|
|
| 773 |
|
| 774 |
### mGDL描述
|
| 775 |
####生成前必读:完整度参照标准
|
| 776 |
+
在开始编写mGDL前,请在心中回顾麻将游戏mGDL通用语法_v1.3.txt的规则和 幺鸡血战_mGDL.txt 示例的详细程度,你的输出必须至少达到相同的细节水平:
|
| 777 |
|
| 778 |
#### 参照示例的完整度标准:
|
| 779 |
1. 牌组定义(tileset)
|
| 780 |
- 禁止:(tileset (suits {"wan" "tong" "tiao"})) ← 只有花色
|
| 781 |
- 参照:示例文件第15-25行,明确列出所有牌类型、数量、特殊牌
|
| 782 |
- 要求:定义时必须包含花色、点数范围、字牌、特殊牌等完整信息
|
| 783 |
+
2. 特殊机制(extensions.special_mechanics.mechanic_cards.)
|
| 784 |
+
- 禁止:(extensions.special_mechanics.mechanic_cards. (yaoji (enabled true))) ← 只有启用标志
|
| 785 |
- 参照:示例文件第30-45行,每个机制有完整参数
|
| 786 |
- 要求:定义时必须包含详细规则、转移路径、可见性等
|
| 787 |
3. 番型表(fan_table)
|
|
|
|
| 793 |
- 参照:示例文件第60-80行,每个阶段有详细规则
|
| 794 |
- 要求:每个阶段至少包含5-10行的具体规则定义
|
| 795 |
|
| 796 |
+
5. 行为规则(actions)
|
| 797 |
- 禁止:(actions (allow_chi true)) ← 仅开关无细节
|
| 798 |
- 参照:四川血战示例第120-135行,每个 action 有 transfer_path + hand effect 注释
|
| 799 |
- 要求:每个 action 必须包含:
|
|
|
|
| 826 |
1. (game_variant "...") - 玩法大类
|
| 827 |
2. (players N) - 玩家数量
|
| 828 |
3. (tileset ...) - 牌组定义
|
| 829 |
+
4. (extensions ...) - 扩展机制(必须含 special_mechanics + mechanic_cards��
|
| 830 |
5. (seats {...}) - 座位定义
|
| 831 |
6. (turn_order ...) - 出牌顺序
|
| 832 |
7. (setup ...) - 游戏准备
|
|
|
|
| 836 |
11. (fan_table ...) - 番型与倍数
|
| 837 |
12. (settlement ...) - 结算规则
|
| 838 |
13. (invariants ...) - 守恒不变量
|
|
|
|
| 839 |
严禁省略任何核心模块! 即使 mGDL 很长,也必须完整输出。 在 (setup) 或 (tileset) 附近添加牌数验证的中文注释,便于人工核对。
|
| 840 |
|
| 841 |
|
|
|
|
| 844 |
1. 新机制声明(⚠️ 核心创新展示区,必须完整)
|
| 845 |
- 格式要求:必须使用以下表格格式,逐个列出本游戏的所有特殊机制:
|
| 846 |
机制名称 | 核心功能 | 使用阶段 | 触发条件 | 实际定义位置 | mGDL注册路径
|
| 847 |
+
例:幺鸡赖子 | 1条可替代任意牌 | 全局 | 胡牌时 | extensions.special_mechanics.mechanic_cards..yaoji | extensions.special_mechanics.mechanic_cards..YaojiWild
|
| 848 |
+
例:定缺换牌 | 选择缺一门花色后换3张牌 | 准备阶段 | 定缺后 | setup.exchange_three | extensions.special_mechanics.mechanic_cards..ExchangeThree
|
| 849 |
|
| 850 |
- 强制要求:
|
| 851 |
a. 完整性:表格必须包含本游戏的所有创新机制,不得遗漏
|
| 852 |
b. 实际定义位置:标注机制在mGDL中的实际定义位置
|
| 853 |
+
c. mGDL注册路径:标注机制在 extensions.special_mechanics.mechanic_cards. 中的注册路径
|
| 854 |
d. 详细展开:表格下方必须对每个机制进行详细说明:
|
| 855 |
- 机制的战略价值和游戏体验影响
|
| 856 |
- 具体的使用方法和限制条件
|
|
|
|
| 917 |
<details>
|
| 918 |
<summary>点击展开,完整的《自检报告》(开发者/审核专用)</summary>
|
| 919 |
|
| 920 |
+
## 麻将mGDL自检报告 v1.3
|
| 921 |
|
| 922 |
### 0) **mGDL 模块完整性检查**(零容忍项)
|
| 923 |
|
|
|
|
| 925 |
- game_variant 定义 → [PASS/FAIL]
|
| 926 |
- players 定义 → [PASS/FAIL]
|
| 927 |
- tileset 定义(含 suits/ranks/honors/total) → [PASS/FAIL]
|
| 928 |
+
- extensions.special_mechanics.mechanic_cards. 定义 → [PASS/FAIL]
|
| 929 |
- seats 定义 → [PASS/FAIL]
|
| 930 |
- turn_order 定义 → [PASS/FAIL]
|
| 931 |
- setup 定义(含 initial_hand/choose_que/exchange_three) → [PASS/FAIL]
|
|
|
|
| 1061 |
### 8) **特殊机制统一注册检查**(⚠️ 核心防遗漏机制)
|
| 1062 |
|
| 1063 |
**步骤A:扫描mGDL所有模块,提取所有特殊定义**
|
| 1064 |
+
- extensions.special_mechanics.mechanic_cards. 中的所有条目
|
| 1065 |
- win_rules 中的特殊胡牌规则
|
| 1066 |
- scoring 中的特殊计分规则
|
| 1067 |
- fan_table 中的特殊番型
|
|
|
|
| 1074 |
|
| 1075 |
**总计**:N个
|
| 1076 |
|
| 1077 |
+
**步骤B:验证 extensions.special_mechanics.mechanic_cards. 注册完整性**
|
| 1078 |
+
**extensions.special_mechanics.mechanic_cards. 中已注册的机制**:
|
| 1079 |
+
| 机制ID | card_path | implementation_path | category | stage_scope | enabled |
|
| 1080 |
+
|-------|----------|---------------------|----------|------------|---------|
|
| 1081 |
+
| [M1] | extensions.special_mechanics.mechanic_cards.[M1] | extensions.special_mechanics.mechanic_cards.[M1] | [cat1] | [setup/play/scoring/end/global] | true |
|
| 1082 |
+
| [M2] | extensions.special_mechanics.mechanic_cards.[M2] | extensions.special_mechanics.mechanic_cards.[M2] | [cat2] | [setup/play/scoring/end/global] | true |
|
| 1083 |
+
|
| 1084 |
|
| 1085 |
**总计**:M个
|
| 1086 |
|
| 1087 |
**步骤C:对比检查**
|
| 1088 |
- mGDL中实际特殊机制数量:N
|
| 1089 |
+
- extensions.special_mechanics.mechanic_cards. 注册数量:M
|
| 1090 |
- 是否一致:N == M → [PASS/FAIL]
|
| 1091 |
+
- 若处于【创新扩展模式】:逐一检查每条机制卡是否包含 trigger/effect/settle/reset(缺一 FAIL)
|
| 1092 |
|
| 1093 |
+
**未在 extensions.special_mechanics.mechanic_cards. 注册的机制**:
|
| 1094 |
- [列出所有遗漏项及其定义位置]
|
| 1095 |
|
| 1096 |
**最终结论**:[PASS/FAIL]
|
|
|
|
| 1163 |
- 牌组兼容性:Tileset 包含所有机制所需的牌(如花牌/月亮牌) → [PASS/FAIL]
|
| 1164 |
|
| 1165 |
**融合插件注册**:
|
| 1166 |
+
- 来源玩法机制完整注册进 extensions.special_mechanics.mechanic_cards. → [PASS/FAIL]
|
| 1167 |
- 插件机制与底座玩法无逻辑冲突 → [PASS/FAIL]
|
| 1168 |
|
| 1169 |
### 15) **最终验收**
|
|
|
|
| 1200 |
## 常见错误避免
|
| 1201 |
### ⚠️ 零容忍错误(最高优先级)
|
| 1202 |
1. ❌ mGDL 模块不完整是最严重的错误:
|
| 1203 |
+
- 严禁输出缺少核心模块的 mGDL(如缺少 extensions.special_mechanics.mechanic_cards.、fan_table、win_rules 等)
|
| 1204 |
- mGDL 必须包含硬自检第0项列出的所有核心模块,缺一不可
|
| 1205 |
- 在第二步自检时,第0项"模块完整性检查"的所有子项必须全部 PASS
|
| 1206 |
2. 牌墙管理错误:
|
|
|
|
| 1216 |
- 严禁未定义胡牌后规则
|
| 1217 |
- 严禁胡牌要求与番型体系不一致
|
| 1218 |
5. 特殊机制未注册:
|
| 1219 |
+
- 严禁在 extensions.special_mechanics.mechanic_cards. 中漏注册任何创新机制
|
| 1220 |
- 严禁自然语言声明了但 mGDL 未实现的机制
|
| 1221 |
- 严禁 mGDL 实现了但自然语言未说明的机制
|
| 1222 |
6. 新增麻将专用检查项
|
|
|
|
| 1244 |
- 严禁自然语言描述中省略“吃/碰/杠后需打牌”这一关键步骤。
|
| 1245 |
9. **玩法融合失败**(融合任务专用):
|
| 1246 |
- 严禁混用计分模式(如在倍数制中使用 `fan` 字段)。
|
| 1247 |
+
- 严禁引入新机制(如买马)但未在 `extensions.special_mechanics.mechanic_cards.` 和 `win_rules/scoring` 中完整定义。
|
| 1248 |
- 严禁保留互相冲突的规则(如“血战”与“流局”规则并存)。
|
麻将游戏mGDL通用语法_v1.3.txt
CHANGED
|
@@ -20,7 +20,8 @@
|
|
| 20 |
(has_multi_round true|false) ; 是否多回合
|
| 21 |
(has_ting_system true|false) ; 是否有报听/亮倒系统 [v1.3新增]
|
| 22 |
(has_chicken_system true|false) ; 是否有鸡牌系统 [v1.3新增]
|
| 23 |
-
(has_bean_system true|false)
|
|
|
|
| 24 |
)
|
| 25 |
|
| 26 |
;; =========================
|
|
@@ -28,6 +29,11 @@
|
|
| 28 |
;; =========================
|
| 29 |
|
| 30 |
(players 3|4) ; [v1.3扩展] 支持3人和4人玩法
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 31 |
|
| 32 |
;; ---- 牌组定义 ----
|
| 33 |
(tileset
|
|
@@ -263,6 +269,17 @@
|
|
| 263 |
)
|
| 264 |
)
|
| 265 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 266 |
;; ---- 扎鸟/翻马 (Horse Rules) ----
|
| 267 |
(horse_rules
|
| 268 |
(enabled true)
|
|
@@ -466,13 +483,79 @@
|
|
| 466 |
(exclude_from_horse true) ; 不算马分
|
| 467 |
)
|
| 468 |
|
| 469 |
-
|
| 470 |
-
|
| 471 |
-
|
| 472 |
-
|
| 473 |
-
|
| 474 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 475 |
)
|
|
|
|
| 476 |
|
| 477 |
;; =========================
|
| 478 |
;; 6. Policy-Ref:外部策略引用
|
|
|
|
| 20 |
(has_multi_round true|false) ; 是否多回合
|
| 21 |
(has_ting_system true|false) ; 是否有报听/亮倒系统 [v1.3新增]
|
| 22 |
(has_chicken_system true|false) ; 是否有鸡牌系统 [v1.3新增]
|
| 23 |
+
(has_bean_system true|false)
|
| 24 |
+
(has_special_mechanics true|false) ; [v1.3+innovation] 是否启用“创新机制卡”
|
| 25 |
)
|
| 26 |
|
| 27 |
;; =========================
|
|
|
|
| 29 |
;; =========================
|
| 30 |
|
| 31 |
(players 3|4) ; [v1.3扩展] 支持3人和4人玩法
|
| 32 |
+
(team_mode
|
| 33 |
+
(enabled true|false)
|
| 34 |
+
(type "none" | "2v2_fixed" | "1v3_dynamic") ; 2v2固定队/1v3动态(如捉鸡)
|
| 35 |
+
(shared_info "none" | "hand" | "plan") ; [机制说明对应] 组队玩家信息共享
|
| 36 |
+
)
|
| 37 |
|
| 38 |
;; ---- 牌组定义 ----
|
| 39 |
(tileset
|
|
|
|
| 269 |
)
|
| 270 |
)
|
| 271 |
|
| 272 |
+
;; ---- 创新机制库映射 (Mapping to 麻将机制说明.md) ----
|
| 273 |
+
;; [v1.4新增] 支持更多机制说明中的特性
|
| 274 |
+
(mechanics_mapping
|
| 275 |
+
(speed_up ["laizi_any" "mo_san_da_san" "yi_pao_duo_xiang" "qiang_gang_hu"])
|
| 276 |
+
(high_stakes ["high_min_fan" "functional_card_mult" "self_draw_only"])
|
| 277 |
+
(aggression ["blood_war" "ding_que" "cha_da_jiao" "tui_shui"])
|
| 278 |
+
(social ["team_2v2" "shared_info"])
|
| 279 |
+
(fun ["functional_card_draw" "swap_card" "collection_zodiac"])
|
| 280 |
+
(strategy ["swap_card" "compare_card" "haidi_roam" "crit_damage"])
|
| 281 |
+
)
|
| 282 |
+
|
| 283 |
;; ---- 扎鸟/翻马 (Horse Rules) ----
|
| 284 |
(horse_rules
|
| 285 |
(enabled true)
|
|
|
|
| 483 |
(exclude_from_horse true) ; 不算马分
|
| 484 |
)
|
| 485 |
|
| 486 |
+
;; ---- 自定义扩展 (Extensions) ----
|
| 487 |
+
;; 用于存放特定玩法的特殊机制,如妙手七星的公共牌、海底捞月的月轮等
|
| 488 |
+
(extensions
|
| 489 |
+
(moon_mechanics ...)
|
| 490 |
+
(fan_compare ...)
|
| 491 |
+
(round_structure_details ...) ;; 旧占位继续保留
|
| 492 |
+
|
| 493 |
+
;; ==========================================================
|
| 494 |
+
;; [v1.3+ 最小增量扩展] special_mechanics:创新机制表达层
|
| 495 |
+
;; 目标:机制闭环 / 状态机落点 / 母题库(motif)
|
| 496 |
+
;; 注意:本规范的创新机制统一注册表即位于 (extensions (special_mechanics (mechanic_cards ...)));不存在额外“顶层 special_mechanics”。
|
| 497 |
+
;; ==========================================================
|
| 498 |
+
(special_mechanics
|
| 499 |
+
|
| 500 |
+
;; 0) 母题库(Motif Bank)
|
| 501 |
+
(motif_bank
|
| 502 |
+
(motif "COLLECTION_PROGRESS" (desc "收集-成长:越收集越强,带阶段阈值奖励"))
|
| 503 |
+
(motif "MAP_PATTERN" (desc "地图连线:满足图谱/连线/阵型给加成"))
|
| 504 |
+
(motif "HIDDEN_INFO" (desc "暗信息:隐藏/明示/揭示带来博弈"))
|
| 505 |
+
(motif "PHASE_SHIFT" (desc "阶段切换:满足条件进入新子阶段/决斗阶段"))
|
| 506 |
+
(motif "CAP_BREAK" (desc "破封:突破封顶或倍数上限,受约束"))
|
| 507 |
+
(motif "DUEL_MODE" (desc "对决:规则收紧/摸打变化/限制碰杠等"))
|
| 508 |
+
(motif "RISK_REWARD" (desc "风险-收益:加倍伴随更高损失或限制"))
|
| 509 |
+
(motif "ALT_WIN_COMPARE" (desc "比大小:非传统胡牌,走比较结算"))
|
| 510 |
+
)
|
| 511 |
+
;; 1) 状态机落点(State Vars)
|
| 512 |
+
(state_vars
|
| 513 |
+
(var "duel_mode" (type bool) (scope global) (init false) (reset "end_round"))
|
| 514 |
+
(var "round_index" (type int) (scope global) (init 0) (reset "end_game"))
|
| 515 |
+
(var "ting_library" (type multiset) (scope per_player) (init {}) (reset "end_round"))
|
| 516 |
+
(var "opened_gate" (type bool) (scope per_player) (init false) (reset "end_round"))
|
| 517 |
+
(var "collection_set" (type set) (scope per_player) (init {}) (reset "end_game"))
|
| 518 |
+
)
|
| 519 |
+
;; 2) 机制卡片(Mechanic Cards / 闭环)
|
| 520 |
+
(mechanic_cards
|
| 521 |
+
(mechanic "DuelMode"
|
| 522 |
+
(name "决斗时刻")
|
| 523 |
+
(motifs ("PHASE_SHIFT" "DUEL_MODE"))
|
| 524 |
+
(stage_scope "play") ;; 这里填一个具体值:setup/play/scoring/end/global
|
| 525 |
+
|
| 526 |
+
(trigger
|
| 527 |
+
(hook "on_all_players_condition")
|
| 528 |
+
(when "ALL_PLAYERS_TING == true")
|
| 529 |
+
)
|
| 530 |
+
|
| 531 |
+
(effect
|
| 532 |
+
(phase_change (enter "duel_phase") (exit "play_phase"))
|
| 533 |
+
(state_update (set "duel_mode" true) (inc "round_index" 1))
|
| 534 |
+
(action_lock (("peng" false) ("ming_kong" false)))
|
| 535 |
+
(tile_ops (("draw" 3) ("discard" 3)))
|
| 536 |
+
(score_ops ()) ;; 没有就留空
|
| 537 |
+
)
|
| 538 |
+
|
| 539 |
+
(settle
|
| 540 |
+
(mode "end_round")
|
| 541 |
+
(merge_rule "stack")
|
| 542 |
+
(notes "决斗阶段不直接加倍,主要改变摸打节奏与可行动作")
|
| 543 |
+
)
|
| 544 |
+
|
| 545 |
+
(reset
|
| 546 |
+
(hook "end_round")
|
| 547 |
+
(do (set "duel_mode" false))
|
| 548 |
+
)
|
| 549 |
+
|
| 550 |
+
(interactions
|
| 551 |
+
(requires ())
|
| 552 |
+
(excludes ())
|
| 553 |
+
(priority 5)
|
| 554 |
+
)
|
| 555 |
+
)
|
| 556 |
+
)
|
| 557 |
)
|
| 558 |
+
)
|
| 559 |
|
| 560 |
;; =========================
|
| 561 |
;; 6. Policy-Ref:外部策略引用
|