Estazz commited on
Commit
e70ed9e
·
verified ·
1 Parent(s): 1b863e7

Upload 3 files

Browse files
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
- 2. **双源参考库 (Dual Source Reference)**:
 
 
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 玩法引入的机制(如买马、抓鸟、特殊赖子),必须在 `special_mechanics` 中注册
 
 
 
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
- - 阶段名只用短枚举,允许 `*_phase`;合法阶段:`setup/deal/choose_que/exchange_three/play/settle`
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
- - 所有创新机制(幺鸡/红中/皮子/翻马/承包等)必须在 `special_mechanics` 中注册
133
- - 每个注册项必须包含:`name`、`category`、`enabled`、`description`、`transfer_path`
 
 
 
 
 
 
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
- - [ ] `(special_mechanics ...)` - 特殊机制(如启用幺鸡/红中必须在此定义)
 
 
 
 
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
- - [ ] Phase :`setup/deal/choose_que/exchange_three/play/settle`不得出现 `*_phase`
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.yaoji |
471
- | 例:红中杠 | special_mechanics.hongzhong.each_discard_count_as_kong |
472
  | 例:抢杠胡 | win_rules.allow_rob_kong |
473
 
474
  **强制要求:**
475
  1. `NAT_name` 为自然语言部分出现的全部机制/能力/道具的**去重后**集合
476
  2. `mGDL_path` 必须指向以下任一合法位置:
477
- - `special_mechanics.<mechanic_name>`
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
- (special_mechanics
494
- ; 示例1:幺鸡赖子机制
495
- (mechanic "YaojiWild"
496
- (category "wildcard")
497
- (implementation_path "special_mechanics.yaoji")
498
- (phase "setup")
499
- (enabled true)
500
- (description "幺鸡(1条)可作为赖子替代任意牌")
501
- (transfer_path none))
502
- ; 示例2:红中杠机制
503
- (mechanic "HongzhongKong"
504
- (category "scoring")
505
- (implementation_path "special_mechanics.hongzhong")
506
- (phase "settlement")
507
- (enabled true)
508
- (description "每打出一张红中算作一个明杠,结算时计分")
509
- (transfer_path none))
510
- ; 示例3:换三张机制
511
- (mechanic "ExchangeThree"
512
- (category "phase_rule")
513
- (implementation_path "setup.exchange_three")
514
- (phase "exchange_three")
515
- (enabled true)
516
- (description "定缺后,每位玩家选择3张牌与下家交换")
517
- (transfer_path from: hand:<PID> to: hand:<NextPID>))
 
 
 
 
 
 
 
 
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.2.txt的规则和 幺鸡血战_mGDL.txt 示例的详细程度,你的输出必须至少达到相同的细节水平:
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
- 5. 行为规则(actions)
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. (special_mechanics ...) - 特殊机制
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.2
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
- | 机制名称 | implementation_path | category | enabled |
978
- |---------|-------------------|----------|---------|
979
- | [M1] | [path1] | [cat1] | true |
980
- | [M2] | [path2] | [cat2] | true |
 
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 [...]) 列表禁止使 *_phasestate_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) ; 是否有豆/通行证系统 [v1.3新增]
 
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
- ;; ---- 自定义扩展 (Extensions) ----
470
- ;; 用于存放特定玩法的特殊机制,如妙手七星的公共牌、海底捞月的月轮等
471
- (extensions
472
- (moon_mechanics ...)
473
- (fan_compare ...)
474
- (round_structure_details ...)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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:外部策略引用