Compare commits

...
141 Commits
Author SHA1 Message Date
DKChan dfd3a9e29c 合并(架构审查5.1+5.2文档批·用户令): 处置记录(5.1设计讨论裁决+普查五处+19符号总表+取证现址)+code-conventions §1.6拆分交接与封装边界两条(本批修复与闸件共同依据)+architecture.md v1.35(主角账三件HeroStats/GainJournal/GpWallet与刷新账件RefreshBank四行补登记替代失效HeroLedger行+MetaProgression基础层补登记行+拆件定稿节冻结计数摘除+CurioStop/RunLedger旧指称订正; EC8热重载规格经用户裁决保留原状,一度摘除已撤回); 已并master(fa7e759b)解冲突; 文档域闸全绿
ci / gates (push) Failing after 12m1s
2026-11-04 00:27:49 +08:00
DKChan 644c56939a Merge branch 'master' into arch51-docs
# Conflicts:
#	design/engineering/architecture/architecture.md
2026-11-04 00:05:53 +08:00
DKChan e614773aec 文档设计(架构审查5.2·EC8撤回·用户裁): 热重载规格恢复原状——用户裁决近期将完善实装(实装去向=用户另立待办条目+他会话写卡,规格即实装底稿),本批一度摘除的GDD侧规格全部撤回:三份GDD(数据配置/战斗结算/棋盘生成)checkout回退至本批前原状(版本行随内容归位v1.2/v1.6/v1.2),architecture.md抗热重载快照句恢复原措辞+最近更新行如实注记撤回;本文档批净效果=主角账三件与刷新账件补登记+MetaProgression补行+冻结计数摘除+CurioStop/RunLedger旧指称订正(architecture.md v1.32); 文档域闸全绿 2026-11-03 23:50:52 +08:00
DKChan fa7e759b73 合并(架构审查P1余项·收口补笔): §四相关账全部补齐(4.1表 presentation 行零动作句/4.2表 S7 行私有成员面移交 §5.1/4.4末低覆盖四件零动作句+文首处置状态行改写)+待办清单「架构审查余项」专条状态推进「文档设计中」缺口只剩④架构文档漂移; pipeline_gate PASS 红项0; §四至此无未落笔项,§五 P2 仍未处置(报告禁退役)
ci / gates (push) Successful in 36s
2026-11-03 21:57:15 +08:00
DKChan 80c68ac444 文档(架构审查P1余项·收口补笔): §四相关账全部补齐——①审计报告三处未落笔子项补处置句:4.1表 presentation 行(main.gd randi 建种子,零动作,豁免通道限定用途已在册 code-conventions §4 第10条)、4.2表 S7 行「不管私有成员直取面」尾巴(§四对 S7 只裁扫描面与清单并点已闭合;私有成员面无静态判据可造且真做要改 core/settlement 协作契约属需求改动,缺口在册移交 §5.1)、4.4末「低覆盖另计四件」(零动作,hero_stats/skill_lottery/shop_session/curio_deck 各有能力行代表用例承接,skill_lottery 已由1件升2件,已满足新落 §8.3 登记义务) ②文首处置状态行改写为§四全部闭合含三子项、§五未处置禁退役、登记位改指待办清单专条 ③待办清单「架构审查余项」专条(迭代50收尾新立,原「架构审查优化讨论」条目已随状态机出口删除)状态由「待文档设计」推进「文档设计中」,缺口改写为只剩④架构文档漂移三处并写明同族 §5.1/§5.3/§5.4 随批入册,实况段补 2026-11-03 三组裁决记录含读数订正与已落地闸件凭据——状态行按 pipeline_gate 现行判据只写状态词(括号凭据已废止,§12.1),证据落实况段。验证:pipeline_gate PASS 红项0(28条目·50总表行·卡片口径2张全过) 2026-11-03 21:57:08 +08:00
DKChan 6640711758 合并(架构审查P1余项·闸件落地): §四待执行三项做完( S8 目录域反向对账+S7/S8 清单并单点 B1_SET+文案派生; S9/S10 扫描面空转自检)+architecture v1.34 S 表同步+审计报告改判已落地; static_scan 13条规则绿退出码0; §四 P1 四条全部闭合,第五节P2与待办清单未动
ci / gates (push) Successful in 7m50s
2026-11-03 20:37:48 +08:00
DKChan c40db898aa 工程(架构审查P1余项·闸件落地): §四待执行三项同批做完并同步文档——①static_scan.sh 的 S8 加 settlement/ 目录域反向对账(实有 .gd 未登记进清单即红,只覆盖该目录并写明根下四件结算码不在目录域内、仍归「模块归属」B1 登记面),S7 的 S7_B1_SET 与 S8_FILES 两份14文件抄本合一为单点 B1_SET(两份靠人工同步必漂),绿文案「10 个 .gd」改派生计数并申报反向对账已在案 ②audit_type_hints.py/audit_file_headers.py 各补扫描面空转自检(缺目录或零个 .gd 即红、绿时打印面件数;原实现 rglob 空集与 is_dir continue 两处静默绿,违背 test-conventions §7 零命中自检辅证与脚本前言自立纪律) ③architecture S 表 S8 行登记单点与反向对账判据、S9/S10 偏差句改判已清偿、版本1.33→1.34 ④审计报告 §4.2 待执行清单改判已落地并记验证口径。验证:static_scan 全量13条规则绿退出码0;两件负证(面清单改成不存在目录各返回1)正证(真实面158个 .gd 归零PASS)。§四 P1 四条至此全部闭合;零需求卡片(纯闸件属工程改动),待办清单与第五节P2按用户令未动 2026-11-03 20:37:31 +08:00
DKChan 47c752eaf3 合并(CI追绿·迭代50收尾): gdd_lint R3措辞+能力行回表+capability_audit sim锚面扩入
ci / gates (push) Successful in 26s
2026-11-03 20:00:07 +08:00
DKChan 6add37b68c 修复(CI追绿·迭代50收尾): run29两闸红因三处——①roadmap下一步「2026-11-03 新条」措辞触发gdd_lint R3正文修订注记,改「在册」去日期式叙述 ②能力行敌方增益自体落点代表用例名实断裂(_test_enemy_buff_targets_self→_smoke_enemy_buff_targets_self,实况=实现侧_smoke定名,iter50批末核对漏检此行,卡片退役后卡在通道消失即暴露) ③capability_audit真实入口锚面结构性缺口——入口宿主在game/sim/(battle_driver/auto_player)而扫描面排除sim,卡片退役后无持久锚即红; 锚面扩入sim测量件(判据面有意放宽:被锚入口本在库内,补的是卡片死后的持久锚通道,非放水),头注与报错文案同步; 本地复核gdd_lint 0不通过+capability_audit strict红项0 2026-11-03 20:00:06 +08:00
DKChan 276252fc5d 合并(架构审查P1余项·裁决落文): 四份规约与审计报告标注;第四节四条定案(RNG不扩面改文字纪律/S9-S10-S13三面不扩+S8反向对账与S9-S10空面自检列待执行归工程批/S3维持warning/4.3结案/4.4改判为无登记惯例并落覆盖登记义务);待办清单与roadmap未动(第五节P2未处置,整份审计未闭合)
ci / gates (push) Failing after 25s
# Conflicts:
#	design/engineering/architecture/architecture.md
2026-11-03 19:53:00 +08:00
DKChan abfd70549b 文档(架构审查P1余项·裁决落文): 第四节四条定案进规约与审计报告标注——①code-conventions §4 新增第13条按来源分档(S系扫描面一律止于产品码三目录;tests/probe/sim 各由运行期通道承接:闸00/01/02、闸03/04/05〔含同目录 type_glow_shot_probe 人工取证件与 probe_ui_util 共用面两件不入闸〕、不入CI的手动调参批量;三目录允许自建 RandomNumberGenerator 条件=必须显式定种,禁的是不定种形态;该禁止无机器闸、由文字纪律+独立验收审计人工评审承载;并废止「测量面」一词对本文件统称用途,保留 run_all_gates 选闸原义)②architecture S 表补齐登记面(标题 S1–S8→S1–S13、S11/S12/S13 三行入表、S1/S2 加适用域注、S3 加维持warning裁定、S9/S10 缺空面自检查登记为已知偏差)、版本1.31→1.32 ③test-conventions §8.3 新增「新增core件的覆盖登记义务」(点名或申报经宿主链覆盖,明示非覆盖率要求;立每core件点名闸与补11件空套件两案裁否,凭 test-conventions §7「覆盖率不是目标」)+process-conventions §3 第6条加承接指向 ④审计报告四处标注:4.1不扩面裁定与读数订正(8处→7处,experiment_density 随迭代50 T9 退役;randomize() 两处命中均在注释、实际调用零命中)、4.2三面不扩(三层存量实跑≈2162处:S9 1070/S10 117/S13 975,其中禁调试打印274与循环内await70属工具码功能需要;产品码面归零不可换存量红)+S8现14文件非9+纯目录域方案证伪(四件结算码在core根下)+待执行清单三项归工程改动批零卡片、4.3结案(三处豁免2026-10-31迭代44已清偿,基线现5键)、4.4定性改判为「无按文件登记惯例」+读数4件→11件(后一档三件全是迭代44/46/49拆件产物=复发模式)。待办清单与roadmap按用户裁不动(整份审计未闭合),报告顶部加禁退役注记防收尾误删 2026-11-03 19:52:03 +08:00
DKChan 990bdf9fdd 合并(迭代50·批后收尾): 反馈落文+目检登记+账面换代+产出物退役六件
ci / gates (push) Failing after 31s
2026-11-03 19:51:29 +08:00
DKChan e41339b7bb 收尾(迭代50·批后收尾): 反哺点十条处置闭合(增益状态v1.6删过时实装行/architecturev1.32 preview_reveal登记+tree_rules换代/奇物v1.5 cap必填与取值域/覆盖域表减动效行翻已覆盖/SPAWN_AREA_CELLS+spend_discount表字段+battle_driver签名三处零登记零落点/五份零反哺确认)+目检五项登记体验验证清单㊿(实现报告原编㊾撞号改㊿)+MC锚代表性注记落sim-data/README(重跑归一档用户发起)+产出物退役六件(三需求卡片+反哺点+实现报告+验收审计——吸收即死+证据只留最新)+待办清单三卡条目删除(架构审查余项未决先迁再死另立新条)+roadmap迭代50行已完成与当前位换代 2026-11-03 19:51:06 +08:00
DKChan 942b23cda8 合并(CI追绿·run27修复): verdict豁免扫描判定反转纠正
ci / gates (push) Successful in 15s
2026-11-03 17:17:05 +08:00
DKChan 9ea5c93f44 修复(CI追绿·run27): verdict豁免条件错误扫描判定写反——error_scan语义=干净时exit 0(与verdict主路径!error_scan=命中互为镜像),豁免要求扫描净应直接调正不带!; 上笔补丁逻辑反转致豁免永不生效(run27十探针仍124红) 2026-11-03 17:17:05 +08:00
DKChan b6305e35bb 合并(CI追绿·run26修复): probe退出段挂死受控例外+render_gate工件锚与python3×5+基线登记05b/03/05绿位; 预期run27首次全绿
ci / gates (push) Failing after 7m57s
2026-11-03 17:05:26 +08:00
DKChan ace7b45841 工程(ci追绿·基线登记): game/tests/.gates/baseline.json全绿版入库——含05b色板闸条目(此前提交版缺05b致「无基线记录」判红)与03/05绿位(mac全量目标态); 原件=本地在飞脏件(另一追绿会话产出,待提交面),本批随修复合入 2026-11-03 17:04:16 +08:00
DKChan c9b16b7f34 修复(CI追绿·run26): 三残余根因——①probe_gate verdict加macOS退出段挂死受控例外(PASS签名+错误扫描双证齐全按完成判定,headless探针同样挂死run26实证) ②render_gate三探针if-124首分支拆除改工件锚(上轮半补丁只删了elif漏了if首分支,board PASS后仍被拦红) ③裸python×5→python3(scan_log/shot_checker/crop/compare,runner无python别名——与run16/23同族末例) 2026-11-03 17:03:27 +08:00
DKChan 2bf23d0e05 合并(ci远端化·mac基线建基): golden/mac四张基线入库(棋盘三图+menu_boot,Mac图形会话窗口化生成,跨run读数逐位一致;触发原因=迁远端后渲染闸需mac平台基线,按平台各存windows/不动)
ci / gates (push) Failing after 8m31s
2026-11-03 16:44:20 +08:00
DKChan ea59ac78ba 素材(ci远端化·mac基线建基): golden按平台各存的mac/四张基线入库——棋盘三图(board_L1_dungeon/L2_underdark/L3_deep_underdark,裁剪区900x760)+启动态菜单(menu_boot全屏1280x800); 生成=baseline-mac工作流(run25,Mac图形会话窗口化渲染,tools/golden_baseline_refresh.sh); 触发原因=CI迁远端Mac runner后渲染闸需mac平台基线(2026-11-03用户裁按平台各存,跨平台逐像素必失配),windows/基线不动; 预检=四张人工目检无字形回退/无渲染异常,探针双帧取证三关全PASS且跨run读数逐位一致(1912/3816/3792) 2026-11-03 16:44:19 +08:00
DKChan 24365a383a 合并(CI追绿·run23): refresh裁剪步python→python3
ci / gates (push) Successful in 14s
2026-11-03 16:37:29 +08:00
DKChan 2ba0949f0b 修复(CI追绿·run23): golden_baseline_refresh裁剪步python→python3——runner无python别名(与run16 static_scan同类,上轮修了static_scan漏了本件) 2026-11-03 16:37:29 +08:00
DKChan d8ca0a7453 合并(CI追绿·竞态修复): 窗口化探针判定改锚工件——quit-after与quit(0)竞速124非真红(run21实证),refresh两处+render_gate三处改工件判定
ci / gates (push) Successful in 14s
2026-11-03 16:11:07 +08:00
DKChan 75ae8d58d8 修复(CI追绿·run19/21竞态): 窗口化探针判定改锚工件——quit-after 3000帧与探针quit(0)竞速,GPU加速下12s即耗尽帧限,quit-after胜出时Godot以124离场被误判超时红(run21实证:探针12s完活PASS+meta齐全后124); refresh两处+render_gate三处判定改meta/PASS签名/取证文件/问题=0工件锚,124非真红不再判闸; 退出码权威判据让位于可观测工件面(退出通道被平台竞速污染的受控例外,判据面收窄有实证依据) 2026-11-03 16:10:20 +08:00
DKChan b39fcdc90c 合并(CI追绿·补): baseline-mac导出步落yml
ci / gates (push) Successful in 14s
2026-11-03 15:55:37 +08:00
DKChan 180ba8c9a9 修复(CI追绿·补): baseline-mac导出步落yml(上笔提交时Edit工具对worktree路径误报漏装,commit实际只含两sh) 2026-11-03 15:55:37 +08:00
DKChan 484382ae54 合并(CI追绿·run17修复): 探针守卫预算提额(360/420)+baseline-mac基线导出步(/Users/Shared/baseline_out)
ci / gates (push) Successful in 16s
2026-11-03 15:54:20 +08:00
DKChan ab87285945 修复(CI追绿·run17): 窗口化探针守卫预算提额——Intel Mac上quit-after 3000帧排空需100-200s叠加探针本体逼近180s上限(run12实证:PASS打印后被守卫击杀于退出段,124误报meta缺失); golden_baseline_refresh菜单240→420棋盘180→360,render_gate三探针180→360; baseline-mac.yml加基线导出步(复制到/Users/Shared/baseline_out供人工取回,作业工作区会被清理) 2026-11-03 15:54:19 +08:00
DKChan 53e62bfafe 合并(CI追绿·fix-ci-obs续2): static_scan解释器回落(python→python3)——runner无python别名致三审计127静默判红; 提交版基线无05b条目(在飞批脏件待提交面)确认05b红因=基线登记缺失; 预期run17:02保持绿(POSIX已验)+09三审计真面首曝
ci / gates (push) Failing after 8m44s
2026-11-03 08:35:30 +08:00
DKChan be1f3c07f0 修复(CI追绿·fix-ci-obs续): static_scan解释器回落——runner PATH只有python3(闸脚本横幅python:python3为证),硬编码python三处调用=127 command not found审计零输出静默判红(run15实证:S9/S10/S13三FAIL零明细行); 加PY_BIN解析(python→python3→无则显式红),三调用改$PY_BIN; 本地全量跑复核 2026-11-03 08:35:16 +08:00
DKChan 82b9c9f533 合并(CI追绿·fix-ci-obs续): run_all套件执行器平台分派(Windows cmd.exe逐位保留/POSIX sh -c同步串行+pkill树杀)——run15根因77套件全数秒死=cmd.exe mac不存在; 可观测性三件已先行合入(红态回显加宽/关键行grep/失败清单打印); 合回推送后run16读02真面与远端S9/S10/S13明细
ci / gates (push) Failing after 8m2s
2026-11-03 08:23:44 +08:00
DKChan 03d53b1fc4 修复(CI追绿·fix-ci-obs续): run_all套件执行器平台分派——Windows cmd.exe形态逐位保留(/V:ON延迟展开+ERRORLEVEL落盘+taskkill树杀),POSIX新支(/bin/sh -c同步串行:引擎退出再落$?,create_process拿sh pid供存活轮询;截止杀pkill -P子进程先于kill父防孤儿); 根因=run15远端77套件全数秒死(24/18/18/17四分片)=cmd.exe在mac不存在create_process失败pid<0逐套件判红; Windows回归单套验证绿+S9/gdstyle绿 2026-11-03 08:22:55 +08:00
DKChan 8c53948737 合并(CI可观测性·fix-ci-obs): 红态诊断三件——gate()回显加宽/gate_unit关键行grep/run_all失败超时清单打印; 动机=run14的17套件崩死清单与远端静态扫描明细滞留runner,下一轮CI回执即可读取定位
ci / gates (push) Failing after 3m37s
2026-11-03 08:13:32 +08:00
DKChan 574f202405 工程(CI可观测性·fix-ci-obs): 远端红因诊断三件——gate()红态回显加宽(明细行[Rx]/[Sxx]/违规/存量形态入grep,tail 12→60——static_scan明细行不匹配旧词表致红因滞留runner)+gate_unit红态改关键行grep(套件FAIL清单/超时/ABORT/汇总,tail 12→80)+run_all失败汇总补打印failed_paths与timed_out_paths清单(原先只有计数无名单); 动机=run14的17套件崩死与远端S9/S10/S13违例明细全部滞留runner侧不可诊断,远端回传唯一通道=终端日志回显; 本地77套面单套验证+S9归零+gdstyle ok 2026-11-03 08:13:23 +08:00
DKChan 20a4b3d5bc 合并(CI红态修复·fix-ci-mac): S9三处R1参数化补齐(迭代50新码hit/expect/dom)+闸脚本分片空数组bash bug修复(mac bash3.2 unbound variable四分片秒挂——02全闸未跑即红的根因); 遗留红项归属在飞CI迁移工程批:03/05探针mac退出挂两形态+mac golden基线缺失+05b基线登记+远端S10/S13差异; 本地77套件复核全绿+S9归零+gdstyle ok; 合回后post-merge钩子推送复验
ci / gates (push) Failing after 3m40s
2026-11-03 08:03:33 +08:00
DKChan 64ed22a9f5 修复(CI红态追绿·fix-ci-mac续): 闸脚本run_all_gates.sh:367空数组展开bash bug——_user_args[@]在mac bash3.2×set -u下unbound variable四分片秒挂(测试未跑即红),改安全展开惯用法(空参归零不越set -u,非空照常传参); bash -n 过 2026-11-03 08:03:24 +08:00
DKChan c6fab7e9a5 修复(CI红态追绿·fix-ci-mac): S9三处R1参数化补齐(hit/expect/dom字典数组注解——迭代50新码,本地audit_type_hints PASS归零)+闸脚本run_all_gates.sh:367空数组展开bash bug修复(_user_args[@]在mac bash3.2×set -u下unbound variable,四分片秒挂测试未跑——改${var:+${var[@]}}惯用法); 遗留红项归属在飞CI迁移工程批不在本笔:03/05探针mac退出挂(headless与窗口化两形态,render侧--quit-after已修仍挂124=判别实验结论待收编)+mac golden基线目录缺失(需mac侧golden_baseline_refresh生成)+05b新闸基线登记+远端S10/S13与本地差异(runner缓存疑); 77套件全绿复核(config_db_test素材导入补刷后29 checks绿) 2026-11-03 08:02:22 +08:00
DKChan 8d3a12ec9c 合并(迭代50·三卡): 敌方状态个体化(owner_key多桶/增益技自体落点/死亡即清/呈现逐卡,V1-V8)+断言补齐(四域V1-V16,新件settings_store_test与boss_gate_test)+架构审查3.1+3.2整改(乙丙戊丁甲A类庚己组C组D全落,V1-V15,新件4含负面件); 独立验收审计两轮(首轮不通过→缺漏三条整改→复验通过,报告reports/iter50-验收审计-2026-11-03.md); 单元77套件+冒烟15项+gdstyle全绿; 合回后post-merge钩子自动跑CI全量域闸,回执后台挂ci_watch
ci / gates (push) Failing after 3m26s
2026-11-03 07:11:16 +08:00
DKChan bd64a0e4ac 审计归档补全(迭代50): 首轮不通过全文回填(前笔476a32a3仅含复验轮—输出文件提取源缺首轮段,从审计体hand-back文本重建)+终判通过注记 2026-11-03 07:10:55 +08:00
DKChan 476a32a3ad 审计归档(迭代50): 首轮不通过全文(缺漏三条:V14未落地虚假绿/V2名实断裂/报告第九节失实)+复验通过全文(三条闭合实证)+终判通过(L2归档路径随本件落盘闭合) 2026-11-03 07:07:49 +08:00
DKChan 63fc3e74c4 文档设计(架构审查5.2文档漂移订正·用户授权直改): 四项漂移归真——①architecture.md失效HeroLedger行删除,主角账三件(HeroStats/GainJournal/GpWallet)与刷新账件RefreshBank四行按盘上实件补登记(附CurioStop行落账指称随拆件改指HeroStats+GainJournal+RefreshBank、RunLedger退役叙述两处HeroLedger指称改现行件名)②拆件定稿节冻结计数摘除(1313行/50成员——活体清单不冻结计数,历史读数查git)③EC8热重载死链规格退役(用户总判据3死代码不保留·2026-11-02先例,依2026-11-03会话授权):数据配置.md v1.3八处摘除(管线行/热重载段——软着陆例外消失fail-fast全域统一/下游两行/HUD行删除/验收#6删除重编号/P2行删除/调参表热重载门行删除/计数器纪律句订正)+战斗结算.md v1.7两处(开张序列去关门步/上游行)+棋盘生成.md v1.3一处(热重载从句删)+architecture.md抗热重载句改授予时定格——set_reload_gate/reload代码面退役留待P2卡,architecture.md:88公开面登记与:386-387序列现态保留④MetaProgression基础层补登记行(四Autoload唯一跨Autoload依赖件,构造双形态+注册顺序即依赖序)——架构文档v1.32; 文档域闸全绿 2026-11-03 07:02:25 +08:00
DKChan 6cb1cf5efc 审计整改(迭代50·缺漏三条补齐): V14落地minesweeper_rules_test(_test_preview_reveal_readonly五断言:形态A/B零状态写入+实挖差集F2同口径逐位+preview前后cell_revealed零增量—根因=t8b patch脚本漏写落盘调用文件零触碰,12→17 checks绿)+V2具名承接件落地level_shop_economy_test(_test_spend_discount_from_rule_key:shop.tres零诊断+字段不在位+折后价discount_pct推导+未激活原价—192→195 checks绿)+实现报告第九节订正与第十节审计整改记录+决定记录#10(forge_table闭集钉数34→32补账—R3摘名必然连带强度不减) 2026-11-03 07:00:44 +08:00
DKChan 07caad9d54 文档设计(架构审查5.1封装修复·补录): 取证注意行追加一笔——godot-master 终审补查普查漏项 SlotStore→SaveManagerCore 反向私取约13处(slot_store.gd:26-28/38-39/61-76/92-97/119/129/134/159-162, 直用 _save._read_only/_reset_to_default/_data/_rename_overwrite/_peek_summary_at), 与普查处3(save_manager→SlotStore)同一对类相反方向, 处置并入需求卡片T3存档面(卡片已折入); 方向已抽查核实(slot_store.gd _save._* 实存); 其余零改动; 文档域闸复跑全绿(8闸) 2026-11-03 06:37:26 +08:00
DKChan a2886a5336 iter50-卡3:卡C(架构审查3.1+3.2整改): T0基线对账+乙案规则键参数字典全库贯通+丙案节点图三参数入表域并单点+戊案出生区入表+丁案经济三件+甲案死效果通道退役+A类①双写四处置+庚案驱动循环收敛+己案sim信息面出口(preview_reveal+0格连锁)+组D退役+组C确认; 断言V1-V15+负面件+新件4; 77套件+gdstyle 0新增全绿; 产出物实现报告与反哺点清单落位 2026-11-03 06:31:05 +08:00
DKChan cd133932f9 iter50-卡2:卡B(断言补齐): 四域13新断言+2处既有扩展——①增益结算链V1-V5 ②设置存储V6-V8 ⑤Boss门控V9/V10 ⑥锻造V11-V16; 新件settings_store_test与boss_gate_test; manifest+2; 73套件全绿 2026-11-03 06:31:05 +08:00
DKChan e658492703 iter50-卡1:卡A(敌方状态个体化): 容器换代owner_key多桶(个体键单点/授予写点3处/死亡清/消费面随动/呈现逐卡)+断言V1-V8+armor_roll申报换代(个体键读数语义保留)+主角侧回归绿; 单元71套件+冒烟15项全绿 2026-11-03 06:31:04 +08:00
DKChan ab5d75a208 合并(CI红态修复·退出挂死): 窗口化探针五处加--quit-after 3000(macOS quit后主循环不退实证+判别实验收编)
ci / gates (push) Successful in 14s
2026-11-03 06:27:35 +08:00
DKChan d9bc158756 修复(CI红态·退出挂死收编): golden_baseline_refresh与render_gate五处窗口化探针调用加--quit-after 3000——macOS窗口化quit(0)后主循环不退出(判别实验diag_rc=0实证:有quit-after即正常退出,无则124超时); 判据不受影响(签名串+meta+错误扫描三闸保留,探针真失败quit(1)先于兜底) 2026-11-03 06:27:34 +08:00
DKChan 67bf8f9332 合并(工程批·诊断): baseline-mac加quit-after判别实验步
ci / gates (push) Successful in 14s
2026-11-03 06:23:59 +08:00
DKChan 8dc24b3c17 工程(ci远端化·诊断): baseline-mac加quit-after判别实验步——board_shot_probe PASS后quit(0)挂死实证(run6=124),判别主循环退出丢失vs迭代内卡死 2026-11-03 06:23:58 +08:00
DKChan e44c72a6c3 合并(工程批·基线工作流): baseline-mac.yml手动触发型——mac基线生成走runner图形会话,只生成不提交(Q6),人工目检后入库
ci / gates (push) Successful in 13s
2026-11-03 06:11:28 +08:00
DKChan 7cb4cc7ec1 工程(ci远端化): 新增baseline-mac手动触发工作流——mac平台golden基线生成(runner图形会话窗口化渲染); Q6纪律=只生成不提交,人工目检后显式入库; host模式无node故纯shell步骤 2026-11-03 06:11:27 +08:00
DKChan 1c3f38b5de 合并(CI红态修复·地雷批): 全库20处$变量紧邻多字节字符加花括号——C-locale bash并入变量名失败路径必炸set -u(golden基线重制line70实证)
ci / gates (push) Failing after 2m33s
2026-11-03 06:04:43 +08:00
DKChan 953447e1d5 修复(CI红态·基线刷新脚本地雷): 全库20处$变量紧邻多字节字符批量加花括号——C-locale bash把多字节字符并入变量名,失败路径遇set -u必炸(golden基线重制board刷新FAIL分支line70实证,真因被掩盖); 覆盖golden_baseline_refresh/probe_gate/render_gate/run_all_gates/static_scan/mac_setup 2026-11-03 06:04:42 +08:00
DKChan 277ca158db 文档设计(架构审查5.1封装修复·修正): 处置记录两笔订正——①接收方卡片实名补「批」字(reports/需求卡片-架构审查5.1封装修复批-2026-11-03.md, 写卡代理落盘核实); ②普查处2 adventure_runner→BreakpointStore 读数按写卡代理实核改 37处/32行(首版记37行——5行各含2处访问), 取证注意行同步登记; 其余零改动; 文档域闸复跑全绿(8闸) 2026-11-03 06:03:38 +08:00
DKChan 19c990b11b 合并(CI红态修复·run4追绿): 检出改纯shell克隆——actions/checkout@v4为JS系动作需node运行时,host模式runner无node即败(run4实证); 作业自带github.token克隆,ci.yml头注立规禁JS系Actions动作
ci / gates (push) Successful in 15s
2026-11-03 05:58:51 +08:00
DKChan cf2fea3432 修复(CI红态·run4): 检出改纯shell克隆——actions/checkout@v4为JS系动作需node运行时,host模式runner无node即败(run4实证Cannot find node in PATH); 作业自带github.token克隆本仓,全库禁用JS系Actions动作并在ci.yml头注立规(引入Actions前必须核对执行器形态) 2026-11-03 05:58:42 +08:00
DKChan cc561d7ced 合并(工程批·CI迁远端·用户令): 素材回git(2026-11-03裁推翻0929裁定,256件+边车入库,仓库自包含)+闸脚本跨平台化(gate_platform.sh单点封装,cygpath/taskkill/PowerShell/裸timeout全收编,引擎定位GODOT_BIN环境变量优先)+golden基线按平台各存(windows/迁入,比较器平台子目录,fail-closed)+远端CI触发链(.gitea/workflows/ci.yml master推送触发+domain_route.sh乙案域分流+ci_watch.sh改Gitea API轮询+post-merge钩子改推送触发,push失败落push_failed防静默)+mac_setup.sh自举件(ci-runner专用账户+自动登录图形会话+LaunchAgent+Godot/gdstyle/Pillow系统装,bundle形态保签名,镜像路线退役)+三规约文档换代(本地CI→远端CI)+目检清单㊾登记; 本地跑批件ci_runner.sh与post-commit追绿钩子退役; 端到端验收随本合并触发
ci / gates (push) Failing after 5s
2026-11-03 05:56:08 +08:00
DKChan 3be3f3e7c1 文档设计(架构审查5.1封装修复·用户裁): 设计讨论结论落档两交付——①处置记录 reports/处置-架构审查5.1封装修复-2026-11-03.md(总判据六条/根因定稿三无叠加/普查五处 core 105行107处19符号+presentation 227行出卡/逐项裁决记录/19符号行为归属总表/架构锚点; 接收方=需求卡片-架构审查5.1封装修复-2026-11-03.md+待办清单架构审查优化讨论条目, 卡片成立即退役); ②code-conventions.md 新增 §1.6 拆分交接与封装边界(条一拆分交接定义=职责边界+交接定义双齐备才算拆分合格, 先例=BoardInstaller 引用束注入; 条二封装边界=跨对象禁访问下划线成员只走公开面)——本批修复与后续闸件共同依据; GDD 零改动; 文档域闸全绿(8闸 all_green) 2026-11-03 05:39:07 +08:00
DKChan b55e676121 工程(ci远端化·修复): Pillow第四轮根因=ci-runner家目录从未创建(sysadminctl只登记不创建,首次运行输出not created在案未被接住)——账户段后补家目录兜底(mkdir+chown+createhomedir), Pillow改系统级安装绕开--user与家目录时序; Godot wrapper实测已通过(4.7.2.stable.official rc=0) 2026-11-03 05:23:10 +08:00
DKChan 88cdef09aa 工程(ci远端化·修复): Godot安装前mkdir -p /usr/local/lib(cp -R父目录缺失近失) 2026-11-03 04:33:50 +08:00
DKChan e154479532 工程(ci远端化·修复): Godot安装改整bundle形态——官方签名封bundle Info.plist,抽裸二进制被taskgated判Code Signature Invalid SIGKILL(实证:codesign invalid Info.plist+bundle形态rc=0); 装/usr/local/lib/Godot_ci.app+/usr/local/bin/godot包装转发; Pillow安装加-H修sudo -u的HOME污染(缓存误写调用者目录) 2026-11-03 04:33:31 +08:00
DKChan c35b0ecf4f 工程(ci远端化·修复): 第三轮两根因——SRC_ZIP路径漏v前缀致复用探测落空(下载URL修了路径没跟)+macOS BSD mktemp禁X后带后缀(GNU允许可缀尾,首轮404的字面残留文件致File exists); 三处mktemp模板改尾X形态+脚本头部加字面残留清理+gate_platform同型地雷同修; 全部分支条件已在Mac本机实测(复用命中/mktemp形态/包完整性/目标目录) 2026-11-03 04:25:31 +08:00
DKChan 17352f85b0 工程(ci远端化·修复): mac_setup gdstyle支持本地预置包复用+tar结构校验; 自举前置件全部由SSH预置(用户sudo运行零下载等待——Godot 170MB+gdstyle已落Mac共享位) 2026-11-03 04:22:32 +08:00
DKChan fb5f2d42e5 工程(ci远端化·修复): mac_setup Godot URL模板修正(双stable+漏v前缀致404)+镜像假zip校验(200错误页体当失败, unzip -tq守卫双处)+chunk_dl.py收编(分片并行断点续传下载器,已实证方案仓库化) 2026-11-03 04:16:48 +08:00
DKChan f5c3fa935d 工程(ci远端化·修复): mac_setup变量引用紧跟全角标点被C-locale bash并入变量名致unbound——,root改${PW_FILE},root; 全库同型地雷扫描清零 2026-11-03 04:13:40 +08:00
DKChan 3d4173774f 工程(ci远端化·阶段四改版): mac_setup按专用账户图形会话形态重写——LaunchDaemon改LaunchAgent(挂ci-runner会话)+自动登录(/etc/kcpassword编码+autoLoginUser,密码root600)+保留全部隔离设计(随机密码不可登录/无admin/可写面限定); 渲染闸窗口来源=ci-runner图形会话(快速用户切换与日常使用并存); 依据=用户裁专用账户方案+渲染硬需求,WindowServer只在已登录会话存在的机制约束 2026-11-03 04:05:03 +08:00
DKChan 65ffd7f1d8 工程(ci远端化): ci.yml触发范围收紧为master分支推送——开发分支推送不触发远端(防worktree批推送空烧引擎时长; 分支级验证=开发期手动档), 与「分支级验证=开发期手动跑批」既有口径对齐 2026-11-03 03:22:02 +08:00
DKChan 165a28f6d1 工程(ci远端化·件核修复): doc_term退役词「随批」一处改写(目检清单㊾判据列); run_all_gates头注本地CI表述换代(件核grep残留归零); architecture.md车道分层节验证口径换代远端CI 2026-11-03 03:21:53 +08:00
DKChan 79b87119fb 工程(ci远端化·阶段六): 文档换代——AGENTS.md运行与验证首条+车道铁律+硬性红线+改动四类四处换代(本地CI→远端CI,分流语义,runner依赖注记); process-conventions §1第1/3/4条+§3第8/9条+§4换远端CI口径(ci_runner/post-commit退役在案,导入刷新归工作流); test-conventions §4换代; 体验验证清单㊾登记Mac端渲染基线目检两项(基线正确性+渲染闸全链,登记不阻塞); 依据=2026-11-03用户裁CI迁远端 2026-11-03 03:19:04 +08:00
DKChan 0019ef1514 工程(ci远端化·阶段四五): 远端CI触发链落地——新增.gitea/workflows/ci.yml(push触发,runs-on=ci-mac,域分流经tools/ci/domain_route.sh:游戏码批=全量/文档批=--docs秒级/纯闸件批=skip,乙案语义); ci_watch.sh整体重写为远端模式(轮询Gitea commit-status API,python urllib,令牌GITEA_TOKEN或git凭据库,回执合同不变:ci-status.json+ci-history.jsonl,红态red_gates=失败job名单); post-merge钩子改推送触发(push失败落push_failed判定防静默)+后台挂ci_watch; 退役本地CI件(ci_runner.sh+post-commit钩子,git rm); 新增tools/ci/mac_setup.sh自举件(专用账户ci-runner随机密码不可登录/Godot4.7.2+gdstyle v0.4.0 darwin装/usr/local/bin+Pillow+LaunchDaemon系统级常驻,镜像路线退役后环境配方的仓库化); 依据=用户裁CI迁远端Mac host模式 2026-11-03 03:15:03 +08:00
DKChan c28d01ccb0 工程(ci远端化·阶段三): golden基线按平台各存——四张现行基线(棋盘三图+menu_boot)迁入windows/子目录, mac/待Mac端重制后入库; golden_compare.py按sys.platform自动拼平台子目录(缺本平台基线=fail-closed显式红并给重制指引, 禁静默绿); render_gate基线断言路径与golden_baseline_refresh写入落点全改平台子目录; gate_platform.sh新增gate_platform_id; 依据=用户裁跨平台逐像素必失配(字形/抗锯齿机制差异), 平台内部严格度不降 2026-11-03 03:09:27 +08:00
DKChan b3928f8167 工程(ci远端化·阶段二): 闸脚本跨平台化——新增tools/gate_platform.sh单点封装(平台探测/路径形式/纯bash带超时执行/孤儿清杀/进程计数,双平台双栖); run_all_gates cygpath×2换封装+PY解析加存在性守卫(修非Windows误选幽灵venv路径); probe_gate/render_gate/golden_baseline_refresh的cygpath/taskkill/PowerShell/tasklist/裸timeout全部收编封装,Windows侧原逻辑保留走平台分支; run_smoke/run_system_test DEFAULT_GODOT改GODOT_BIN环境变量优先; gdstyle_gate DEFAULT_BIN平台化(macOS=/usr/local/bin/gdstyle,自举件装v0.4.0 darwin包); 依据=第七轮容器实测断点清单+runner迁移Mac host模式裁决 2026-11-03 03:07:10 +08:00
DKChan 0e7fdfb84c 工程(ci远端化·阶段一): 素材回git(2026-11-03用户裁推翻2026-09-29裁定)——256件运行时美术+导入边车入库, .gitignore撤game/assets/art拦阻块加.import例外; 闸脚本执行位+100755(tools/*.sh+game/tests/*.sh, Linux/macOS直启所需); 依据=仓库自包含原则, 修复新克隆缺素材闸预检必红的根因 2026-11-03 03:01:05 +08:00
DKChan 6261b36ecd 合并(迭代50编排·用户令): 三卡合批编入——敌方状态个体化(2.25)/断言补齐(2.75)/架构审查3.1+3.2整改(中值7.875), 合计≈12.875个工作日〔用户特批2026-11-03超10〕; 卡序=个体化先行→断言补齐(T0按个体键新API落笔)→架构审查殿后; 三条目状态推进已编迭代50; pipeline_gate PASS(30条目/50总表行/交叉核3链/卡片5张全过); 编排批零代码面, 文档域闸随commit点 2026-11-03 02:55:32 +08:00
DKChan d12063a24f 编排(迭代50·用户令): 三卡合批编入——敌方状态个体化(2.25)/断言补齐(2.75)/架构审查3.1+3.2整改(中值7.875), 合计≈12.875个工作日〔用户特批2026-11-03超10〕; 卡序=个体化先行(StatusContainer换代owner_key多桶为下游API依赖)→断言补齐(T0按换代后个体键API落笔)→架构审查殿后(取证表#8/#10锚点受前批漂移最小); 三条目状态推进已编迭代50; pipeline_gate PASS(30条目/50总表行/交叉核3链/卡片5张全过) 2026-11-03 02:55:23 +08:00
DKChan 5529617d7e 合并(用语强标准对齐批·用户令): 两处「一句白话定义」弱标准换成「展开成完整白话句」——doc-conventions §4:46 与 00-游戏概念:44, 与 §4:57 通行检验标准并成单口径(spec-AC); 禁用词表与冻结机制保留(强标准=人工质量线, 词表=机器执法线); .qoder STC 副本经用户确认在用保留; 合回后post-merge钩子自动跑CI全量域闸, 回执后台挂ci_watch 2026-11-03 02:52:44 +08:00
DKChan f2ea8adabe 规则(用语强标准对齐·用户令): 两处弱标准「首现处附一句白话定义」对齐 §4:57 强标准「展开成完整白话句」——doc-conventions §4:46(加「同通行检验标准」指针, 术语表登记保留)与 00-游戏概念:44(词句直换); 同一输入两标准违反 spec-AC 红线(AGENTS.md:114), 弱说法全仓清零(grep 核过现行文件仅此两处); 禁用词表与冻结机制不动, .qoder STC 副本经用户确认在用保留 2026-11-03 02:52:36 +08:00
DKChan 974d6487fb 合并(CI追绿·fix-archreview-ci): 红闸两件清零——08e能力审计两行能力行真实入口改可核形态(ShopSession.shop_shelf()/Main._on_refresh_confirmed()+sweep双锚)+08 doc_term退役词订正(待办清单:19 裁决台账→逐项裁决记录); 红件最小单元复跑零红后文档域闸全绿(7a674a00); 合回后post-merge钩子复验全量 2026-11-03 02:31:47 +08:00
DKChan 7a674a0045 修(CI追绿·fix-archreview-ci): 红闸两件清零——08e能力审计两行真实入口改可核类.方法形态(货架位数行=ShopSession.shop_shelf()/刷新文案行=Main._on_refresh_confirmed()+sweep双锚)+08 doc_term退役词「裁决台账」改「逐项裁决记录」(待办清单:19); 红件最小单元复跑两闸零红 2026-11-03 02:31:17 +08:00
DKChan 7d88e109ed 合并(架构审查3.1+3.2整改批·设计落文与写卡): 五份GDD落文(天赋树v0.12规则键参数表+失实句订正/关卡节点图生成v1.4/冒险结构v1.4/地形变异v1.2/棋盘生成v1.2)+处置记录落档(总判据六条+裁决台账+方案甲~庚+取证18处现址)+需求卡片v1.2(15节全/11卡估时8工日/R1-R15对照表/削弱申报9条/零待裁点; grilling一轮19条+终审4条全折入)+待办两条目(架构审查条推进已写卡+charge_layers无属主数据游离专条待写卡); 讨论段裁决=用户逐项亲裁,总判据=机制数据长在所属封装实体内部属性/零缺省/死代码不保留/sim零规则副本; CI红不回滚——红项修复走fix-分支追绿 2026-11-03 02:23:26 +08:00
DKChan 3748ac66b6 合并(回答风格换代批·用户令): 对话输出规则重构合回——用词封闭(先描述后命名/删已立名豁免/同物同名)+判断挂依据(三种合法依据/结论行后必须跟依据清单)+交出前自检三新规替换旧不自造黑话条款; eli5 与 simplified-technical-chinese 两技能接线(2026-10-15 已装全仓零引用, 本次起对话第1条为其对话面最小集); doc-conventions §4 沟通面收敛为书面件、对话面划归 AGENTS.md; 合回后post-merge钩子自动跑CI全量域闸, 回执后台挂ci_watch 2026-11-03 02:17:53 +08:00
DKChan f17f2614f5 规则(回答风格换代·用户令): AGENTS.md 回答风格重构——三条核心原则扩为四条(用词封闭:先完整描述后短说法/删已立名豁免/同物同名; 判断挂依据:三种合法依据+结论行后必须跟依据清单+无据标推测), 新增交出前自检清单与重讲改写工具节(接线 eli5 与 simplified-technical-chinese); doc-conventions §4 沟通面收敛为书面件、对话面指向 AGENTS.md; 依据=本场对话病历(结论无链/现造词替代描述/规则零自检)+ASD-STE100 与核查链调研 2026-11-03 02:16:33 +08:00
DKChan e9761e7189 待办条目状态推进(架构审查优化讨论): 文档设计已闭合+待写卡 → 文档设计已闭合+已写卡(卡片v1.2路径), 写卡凭据段补记(grilling 19条+终审4条折入, 11卡估时8工日, 能力行10增5改1删); 未闭合余项④⑤⑥⑦维持 2026-11-03 01:37:30 +08:00
DKChan 2f43b81ddc 修卡(架构审查3.1+3.2整改批·godot-master终审折入): v1.1→v1.2——阻断三处(B10/B11 测试适配面改闭合判据:meta_progression_forge 17触点+feat_vouchers 3处+adventure_feats rebuild 30处全列,削弱申报追加第9条,B12 全卡签名统一参数化泛型 Dictionary[Variant, Variant]/Array[Variant]防S9 R1A/R3,新增红线条款)+建议一处(S11 .uid收口步入T10); 验修19条销号全过+三份grep对账闭合+工程五点三过一风险一缺口已修; 闸PASS 2026-11-03 01:36:40 +08:00
DKChan a05fd7b8aa 需求卡片(架构审查3.1+3.2整改批) v1.1: 15节全+11张T卡估时8工日+对照表R1-R15+能力行10增5改1删+削弱申报8条+零待裁点开工门U0; v1.0→v1.1 折入grilling一轮19条(B1battle_fx_host签名/B2测试适配11处/B3削弱申报7·8条/B4注入序/B5manifest+4行/B6口径A四处/B7level_gen_params_test/B8基线25件口径/B9断言案挂R1+S1-S10)及追认meta_forge_test:737; pipeline_gate PASS 2026-11-03 01:21:18 +08:00
DKChan 82c5487e04 合并(敌方个体化卡批·用户令): 写卡批合回——需求卡片成文(V1-V8+断言换代申报两件, godot-master终审通过+grilling零待裁点)+README两能力行+待办条目→已写卡; pipeline_gate PASS(4张卡口径); 合回后post-merge钩子自动跑CI全量域闸, 回执后台挂ci_watch 2026-11-02 23:58:30 +08:00
DKChan 87385b41ec 写卡(敌方状态个体化批): 需求卡片成文——容器按个体多桶换代(hero/e生成序键,单点约定)+3写点(combat_segment增益技归施放者/reward_grant全体循环逐体发/damage_controller被命中者)+消费面随动(clamped_pool带owner_key/defender_ac/nest_count/结算快照)+死亡即清(unit_died→purge_owner)+呈现投影各读各的; V1-V8八断言挂四既有测试宿主,零新增文件; 断言换代申报两件(armor_roll V1-V3个体键重写语义保留/settlement_segments衰减相位逐桶等价换代); godot-master终审通过(架构四查全过,P3一处S9类型标注句折入T0-1); grilling零待裁点; README两能力行入表+覆盖域表增益状态行随动; 待办条目→已写卡; pipeline_gate PASS(卡片口径4张) 2026-11-02 23:58:22 +08:00
DKChan 639a399f5b 合并(敌方状态个体化设计批·用户令): 四件GDD落文——硬规矩改个体归属+目标规则词表四词+增益技归施放者自己+警觉/AC合流/呈现随动; 存储方案A案(逐个体授予,权威调研背书); 待办新条目登记+单体寻址条目并入退役; 设计讨论会话内闭合(用户四裁:A案/词表宽度/自增技目标/数量上限语境); pipeline_gate PASS; --docs全绿; 合回后post-merge钩子自动跑CI全量域闸, 回执后台挂ci_watch 2026-11-02 23:28:32 +08:00
DKChan cf26c1c49c 文档(敌方状态个体化设计批·用户令): 四件落文——增益状态v1.5(硬规矩「敌方侧共享」改「实例按个体归属」,〈单体寻址扩展位〉节重写为〈目标规则与个体归属〉通则节:目标规则封闭词表四词/合并匹配认个体/个体死亡即清/呈现各读各的/实装随该批) 敌人系统v1.5(增益技落点=施放者自己——现行一只施放全体受益属实现错误随批纠正,警觉授予随动) 战斗结算v1.6(警觉side-wide句与AC合流句个体化) battle.md(敌方增益呈现行个体化); 存储方案=逐个体授予独立实例(用户裁A案,权威调研十余案例同构——StS/ITB/CataclysmDDA/GAS;阵营桶仅服务换人继承,本项目敌人开战一次性入场无此路径); 词表收四词,种类级不预收(不预先建面); 待办清单新条目登记(文档设计已闭合+待写卡)+原单体寻址条目并入退役; pipeline_gate PASS; --docs全绿 2026-11-02 23:28:21 +08:00
DKChan 6562e41902 处置记录+条目状态推进(架构审查3.1+3.2): 处置-架构审查3.1+3.2整改-2026-11-02.md 落档(接收方=架构审查优化讨论条; 总判据六条/裁决台账/设计方案甲~庚/取证18处现址表/sim组A-E要点/GDD闭合凭据/不在本卡范围); 待办条目状态 待文档设计→文档设计已闭合+待写卡(缺口属性删,未闭合余项④⑤⑥⑦移实况) 2026-11-02 23:19:56 +08:00
DKChan 15352170db 文档(架构审查整改·3.1+3.2 设计落文): 五份 owner 文档为硬编码数值入表立事实源——天赋树 v0.12(新增『规则键参数表』六键参数名与取值域/订正三处『限次值事实源=meta_tree.tres』与『机制硬编码无表行』失实句/economy_spend 折价参数自 shop 表收回节点行/验收标准补参数字典校验) · 关卡节点图生成 v1.4(调参表补三行: 岔口取三去路概率/同深度节点宽度上限/填充交替起始; 产出约束宽度行改指针) · 冒险结构 v1.4(调参表补货架位数行/GP 参数行标注聚散两参数归天赋树/『每次抽 3』改指针) · 地形变异 v1.2(调参表改取值域+指针形态, 补 pack_min 行; 订正 per_level_bonus 文档 +2 ↔ 表值 0 漂移; 公式与形状句改指针) · 棋盘生成 v1.2(调参表补出生区边长行; 两条布雷公式『−9』改指针; r0_max_cap 域下限改指针); 文档域闸全绿(cb92ab10) 2026-11-02 23:05:13 +08:00
DKChan cb92ab1036 登记(架构审查讨论发现): EffectPort biz_fact 键 charge_layers 无属主数据游离处置条——闭面五键四键各有领域实体持数据,唯 charge_layers 背后为 action_economy 裸账本(_charge_layers),全仓零内容件注册停手转蓄力订阅,厚积薄发/铁壁仅存注释假想面; 缺口=闭面收窄四键+转蓄框架退役或豁免的写卡裁决(会话已裁删除方向,含『机制数据长在所属封装实体内部属性』总判据); 状态待写卡; 蓄力周转专长(swap_charge_layers)不受影响 2026-11-02 15:14:33 +08:00
DKChan 51ad632945 合并(收尾·迭代49批后收尾·用户令): 反哺点九条落文闭合(architecture v1.31轴戊两件与四行已建件现状+ui_registry三域句柄分域换代/术语表v1.26立效果端口件掷格件〔用户裁〕/camp v2.6窗壳已实装注记/08-Alpha v1.25营地行窗壳注记/体验验证清单㊽目检两项/static_scan S8头注计数订正); 能力审计闸件补探针通道〔用户令〕(代表用例代码在渠道扩game/probe/, 对齐test-conventions §8.9双通道——迭代49三卡退役暴露潜伏缺陷, 13红/9行清零且核对比卡在更严); 产出物退役六件(三需求卡片+反哺点+实现报告+验收审计, 吸收即死+证据只留最新, 549683a5可考); 账面换代(待办清单三卡条目整条删除+roadmap迭代49行已完成+当前位换代: 迭代1-49全完成, 下一步=迭代50编排待发令); worktree --docs全绿(ecdd77e1); 合回后post-merge钩子自动跑CI全量域闸, 回执后台挂ci_watch 2026-11-02 08:58:40 +08:00
DKChan ecdd77e15f 收尾(迭代49批后收尾·用户令): ①反哺点九条落文——architecture v1.31(轴戊两件换代已建件现状[EffectPort六Callable路由/掷格件roll批束四键/选行算子返表行]+功能层action/reward/fx_host/damage四行端口接线与类变量实数10/11/15/12+ui_registry行三域句柄分域换代[run/menu两子容器新建/ModalFlow升格注册面直驻/register_layer迁驻]+寻址ui.flow两处换代+UiCampModals行平铺面清零)+术语表v1.26立「效果端口件」「掷格件」两条〔用户裁〕+camp.md v2.6叠层与开合补窗壳形态已实装注记+08-Alpha v1.25三·界面营地行补窗壳形态在役注记+体验验证清单㊽登记目检两项(五窗观感/窗内滚动手感)+static_scan.sh S8头注计数句订正10→14(入批前存量漂移); ②能力审计闸件补探针通道〔用户令〕: 代表用例「代码在」渠道扩game/probe/探针件(文件在库+func在件内即认), 对齐test-conventions §8.9双通道原文——迭代49三卡退役暴露潜伏缺陷(探针行向来只靠卡片正文字符串作保,13条代表用例红/9行), 修后13行全经代码在锚定且核对比卡在更严; ③产出物退役六件(吸收即死+证据只留最新): 三需求卡片+iter49反哺点+实现报告+验收审计(审计通过缺漏0例外1在案,合并提交549683a5可考; shot_career读数盯守经CI渲染闸绿0782d46c了结); ④账面: 待办清单三卡条目整条删除(状态机出口)+roadmap迭代49行已完成(2026-11-02)两列退役保留字+当前位换代(迭代1-49全完成,下一步=迭代50编排待发令,候选=断言补齐批卡)+README两能力行「计划用例」锚随卡退役摘除(用例已落地,断言尾缀标记保留); C4生涯.md核查零义务仅记录; 修复区审计红0; --docs全绿后合并回master 2026-11-02 08:58:00 +08:00
DKChan 50dd6d8c43 合并(状态表批注退役): 删 status_effects.tres 表尾 99-141 八段历史批次叙事批注(2026-09-13 减伤墙调参批 至 2026-09-20 只续时不叠层批)——refresh 叙事两段与现行行值(全 accumulate)相反; 2026-11-02 用户裁整段删不留头注/指路行, 行值/schema 零改动(44 行纯删除); 防护核查=四扫描域(game/tests/tools/design/schemas)对批注字面零引用; 两闸=流水线闸 PASS+code 域闸验收通过无新增红; 待办清单同名条目整条删除; 回执后台挂 ci_watch 2026-11-02 08:35:11 +08:00
DKChan 504ad5129b 状态表批注退役:删除 status_effects.tres 表尾 99-141 行八段历史批次叙事批注(2026-09-13 减伤墙调参批 至 2026-09-20 主角增益只续时不叠层批),diff=44 行纯删除零新增,行值/字段/schema 零改动,文件以 rows 数组收尾行干净结束
裁决依据:2026-11-02 用户裁整段删除、不留任何头注或指路行——refresh 叙事两段(weaken 续时、attack_up/ac_up 只续时不叠层)已与现行行值相反(现行全 accumulate)

防护核查:全仓 grep 批注段八批名+特征字面片段,指定扫描域 game/tests/、tools/、design/、game/data/schemas/ 零引用;换装护栏测试只断言行值不触注释;doc_term_audit 扫描域不含 .tres;其他数据表同名批注块系各表自身历史注记,不指向本段

两闸结果:pipeline_gate PASS(待办清单 32 条目);run_all_gates --code 验收通过、闸况与基线一致无新增红(00 冒烟/01 系统/02 单元集成 4 分片/03 探针/05 渲染/05b 色板/09 静态扫描/10 熵增全绿);回执 dirty_game 注记系批内先闸后提交顺序所致,属开发期参考件,合回验收=合回后 post-merge CI 全量

待办清单同步:「status_effects.tres 陈旧批注处置——refresh 叙事批注段」条目按直改序列整条删除
2026-11-02 08:34:55 +08:00
DKChan 0782d46ca6 合并(修红·断言补齐卡批): 覆盖域表四行缺口句补回待办清单指路——能力审计四红清零; error_scan/render_gate两红判缓存失配假红(EffectPort/RewardRoller类在树可证,本批零代码触面),合并后CI起手刷缓存复验追绿; fix区审计红0+pipeline_gate PASS; 合回后post-merge钩子自动跑CI全量域闸, 回执后台挂ci_watch 2026-11-02 07:42:07 +08:00
DKChan b956dd7c6c 修红(断言补齐卡批): CI能力审计四红修复——覆盖域表四行(难度/增益/设置/锻造)缺口句补回「见待办清单」指路(闸判据:部分覆盖行缺口须指待办清单,写卡批删指路句致红); fix区capability_audit红0+pipeline_gate PASS; 另两红(error_scan打EffectPort/RewardRoller解析+render_gate取证缺失)为缓存失配假红——两类别名在树可证,本批零代码触面,CI起手--editor --quit刷缓存后复验 2026-11-02 07:42:01 +08:00
DKChan 549683a54b 合并(迭代49·效果端口与掷格分件+模态句柄分域+营地五界面真窗口化三卡): 轴戊两件建件(EffectPort六Callable路由/闭面五键/RewardRoller掷格面迁出/受理账面留守/行为零变化round_flow逐位134检查主证)+句柄册三域化(UiModals 14→3纯字段/run menu两子容器/ModalFlow升格注册面直驻/全仓寻址换代529命中+V1结构断言)+营地五窗真窗口化(WINDOW_SIZE 720×640单点/modal_shell窗壳/career同壳/探针V1-V8); 三卡各里程碑步代码域闸全绿+独立验收审计通过(缺漏0例外1在案); S13只降不升全达成; CI全量归post-merge钩子后台跑 2026-11-02 07:39:05 +08:00
DKChan 5f5e7a0029 iter49-收尾:iter49实现报告+反哺点清单 2026-11-02 07:38:54 +08:00
DKChan 2f450f4b25 合并(断言补齐卡批·用户令): 写卡批合回——需求卡片成文(reports/需求卡片-断言补齐批-2026-11-02.md, V1-V16十六断言四域零行为改动)+README五行能力行入表+覆盖域表五处缺口句订正+待办条目8→已写卡; grilling两问两裁零待裁点; pipeline_gate PASS(6张卡口径); 合回后post-merge钩子自动跑CI全量域闸, 回执后台挂ci_watch 2026-11-02 07:34:40 +08:00
DKChan f41903a3b0 写卡(断言补齐批): 需求卡片成文——①增益状态结算链V1-V5(迭代48已盖叠层续时,余衰减逐值/全清/满层拒/独立并存/首授快照) ②减动效存储契约V6-V8(探针已盖全链,余store本体单元) ⑤Boss出场门控V9-V10(每区域恰一终点+端到端boss行集;Σ×r_boss无运行时承载不造断言) ⑥锻造工坊V11-V16(全路线价格梯/多级购买/拒购零副作用/祝福零泄漏/默认值解耦/甲型双轴); 13新函数+2扩展零行为改动, 两新文件落位预检与规范预算在案; README五行能力行入表+覆盖域表五处缺口句订正(④除名终态口径); 待办条目8→已写卡(凭据=卡路径)+增益状态凭据v1.1→v1.4订正; grilling两问两裁(单卡四域+审计子代理通道)零待裁点; pipeline_gate PASS(卡片口径6张) 2026-11-02 07:34:34 +08:00
DKChan 041d509b4d iter49-卡3:营地五界面真窗口化批(窗壳形态换装):WINDOW_SIZE 720×640单点+modal_shell窗壳骨架+career同壳+screen_flow_probe V1-V8窗壳形态段 2026-11-02 07:30:34 +08:00
DKChan 240f1a1769 iter49-卡2:模态句柄分域批(句柄册三域化):UiModals 14→3纯字段容器+run/menu两新子容器+ModalFlow升格注册面直驻+全仓寻址换代+V1结构断言 2026-11-02 07:30:33 +08:00
DKChan 11beb4fc59 iter49-卡1:效果端口与掷格分件批(轴戊两件建件):EffectPort六Callable路由+RewardRoller掷格面迁出+两业务类零引擎直连+effect_port_test V1-V3 2026-11-02 07:30:33 +08:00
DKChan 926b05a61c 合并(锻造验收节批·用户令): 两件直改——①锻造工坊.md补验收标准节九条(判据绑结构不绑值,豁免件同步移除,能力审计回绿) ②待办清单条目8推进: ④战斗表现除名+范围收窄五类+状态→文档设计已闭合+待写卡; 文档批写面=design/+待办清单+capability_audit豁免行(闸令连带); 设计闭合凭据=锻造工坊.md v0.11; pipeline_gate PASS; --docs八闸全绿; 合回后post-merge钩子自动跑CI全量域闸, 回执后台挂ci_watch 2026-11-02 07:07:59 +08:00
DKChan 38e08f6c2d 文档(锻造验收节批·用户令): 锻造工坊.md补验收标准节九条——柜台解锁与默认值解耦/路线解锁双通道并联/窗口内容/单选注入与树零攻防/切换语义/定价结构/存档闭合/祝福件负断言/甲型双轴可感, 判据全绑结构与关系不绑provisional值, 状态行v0.10→v0.11; capability_audit豁免件移除锻造工坊(闸令:豁免件已有验收标准节); 待办清单条目8推进: ④除名(用户裁灰化碎裂纯表现锦上添花,探针+人工目检已合规,呈现与battle.md零触碰), 范围收窄五类(②多语言③音频⑤数值落带三延期面注明归属), 实况补四件关联文档凭据, 改动面补工具代码档, 状态待执行→文档设计已闭合+待写卡; 设计闭合=会话内九条清单用户点头, pipeline_gate PASS(33条目/49行), --docs八闸全绿 2026-11-02 07:07:54 +08:00
DKChan cdc50e06de 合并(工程清理批·用户令): 六件直改——①palette_check基线建档+双门②机检化+05b色板闸 ②extract_checks补check_quiet(1719→2133三重自证) ③样张S1b四色墨断言(31/31全绿) ④main.gd死preload清理10条 ⑤ui_kit/path_check注释换代 ⑥CAMP_HEADER_BAND评估=改名中性化归ui_kit令牌批; run_all_gates02传参核查=d32ff342已完成漏删; 待办清单7条目删除; pipeline_gate PASS; 合回后post-merge钩子自动跑CI全量域闸(含新05b色板闸), 回执后台挂ci_watch 2026-11-02 06:29:36 +08:00
DKChan 9c36c7a237 工程(工程清理批·用户令): 六件直改合批——①palette_check基线建档+双门②机检化: golden/palette_baseline两PNG(token92色∪素材快照1274色=并集1346色)+gen_palette_baseline.py建档刷新件+闸脚本05b色板闸(code域,quick/影响面SKIP)+头注基线纪律, 门①语义检查与48计数上限不承载(口径归art-bible owner,呈报); ②extract_checks补check_quiet静默通道: CALL_RE/DEF_RE扩双通道+collect_call按匹配长偏移+quiet列记channel:check_quiet, 自证三重(双计等式2155==2155/新旧对拍1719→2133=+414入账/往返--diff PASS零差异), test-conventions§5.2局限备案句随批换代; ③样张S1b四色墨×PANEL_DATA垫牌≥4.5:1色值对表断言(读数4.97–5.62与审计复算逐位一致, 样张31/31全绿; V10基线对拍图artwork环境件--save-baseline重建); ④main.gd死preload清理10条(登记8条复核多出2条, 7具名消费面已迁main_ui_build拆件自持, 逐条grep复核零代码使用), presentation 17套件全绿+冒烟15项0失败兜底; ⑤注释换代: ui_kit TEX_HERO_PORTRAIT「48px档」→原稿分辨率+显示档读PORTRAIT_DISPLAY_H, path_check头注删日期批注记; ⑥CAMP_HEADER_BAND退役评估: 4处消费面核过(关卡屏2/商店1/KeystoneBadge工厂1), 退役删除不成立, 处置=改名中性化归ui_kit令牌批顺带(零值变化); ⑦run_all_gates 02传参核查=d32ff342已完成漏删零改动; 待办清单7条目整条删除(状态机出口), pipeline_gate PASS(33条目/49总表行); 产出物=reports/工程改动报告-工程清理批-2026-11-02.md 2026-11-02 06:29:27 +08:00
DKChan 7e9e57fd3a 合并(修卡批·营地五界面真窗口化·godot-master终审): 需求卡片v1.0→v1.1——阻断一处(生涯标题墨WARM→INK_TITLE随石板皮亮底订正,契约9范围限定)+建议三处(收闭点名生涯窗/V3V2容差口径/V7 await帧)全折入; 审裁决=修后即可开工; grilling四轮零待裁点不变; pipeline_gate PASS; 迭代49行卡片路径不变 2026-11-02 05:06:46 +08:00
DKChan 4de6111c56 修卡(营地五界面真窗口化批·godot-master终审折入): v1.0→v1.1——阻断一处(生涯标题「生 涯」墨token WARM压亮石板皮≈1.1:1静默违§7.2: T1明写订正WARM→INK_TITLE设置/状态面板先例,契约9「token零改」范围限定=BG_BRIGHT内容板文字)+建议三处(T2段尾收闭点名生涯窗on_camp_closed名单不含career_overlay防残留泄段/V3裸等值改V1容差0.01判等+V2恰等80注记/V7喂入后await帧再断防陈旧布局值); 审裁决=修后即可开工; grilling四轮零待裁点 2026-11-02 05:06:45 +08:00
DKChan df80bfb38d 合并(修卡批·效果端口与掷格分件·godot-master终审): 需求卡片v1.0→v1.1——阻断三处(契约2闭面改五键+biz_fact补答rider两键/S7_B1_SET补登reward_roller/白盒指址申报改符号族全量约17行21处)+建议五处(复位五拍/T3清单补四件/V1期望输出锚/V3合成行零推表/combat_segment写点时序论证)+README:87代表用例补V2; 审裁决=修后即可开工; grilling三轮零待裁点不变; pipeline_gate PASS; 迭代49行卡片路径不变 2026-11-02 04:58:10 +08:00
DKChan 29295bd75e 修卡(效果端口与掷格分件批·godot-master终审折入): v1.0→v1.1——阻断三处(①rider_tier两键三方矛盾:契约2闭面改五键声明三when事实+两rider运行态读数,biz_fact规格补答两rider键,V3阴性对照守卫不变;②S7_B1_SET漏登reward_roller.gd:T2步与§7结构图补齐,轴戊S7/S8随动两新件全登;③variant_placement白盒指址申报漏计:四处→economy内部符号族全量约17行21处五符号(_rollable_rows/_pool_weight/_biased_cell_rows/board_skew/luck_bias_query),F12/§3.1/§7/T2/§9申报表五处同改)+建议五处(复位五拍/T3套件清单补四件/V1期望输出补订阅锚与读数面/V3合成行effect段逐字抄铁壁行零推表/combat_segment等价论证换唯一写点时序)+README:87能力行代表用例补V2三函数并列; 审裁决=修后即可开工; grilling三轮零待裁点 2026-11-02 04:58:09 +08:00
DKChan 937ba1075f 合并(修卡批·模态句柄分域·godot-master终审): 需求卡片v1.0→v1.1——阻断两处(T1期望串补modals.段·R6同改/T0验证①收窄presentation域+全仓零残留移T1验证④)+建议六处(24键口径/§8补camp容器头注随批/flow枚举补两点/混行概括句/architecture行号v1.30/正检grep拆三条)全折入; 审裁决=修毕可直接开工; grilling四轮零待裁点不变; pipeline_gate PASS; 迭代49行卡片路径不变 2026-11-02 04:53:37 +08:00
DKChan 881f96f56b 修卡(模态句柄分域批·godot-master终审折入): v1.0→v1.1——阻断两处(①T1期望串漏modals.段:ui.menu.debug_overlay→ui.modals.menu.debug_overlay,R6同改;②T0验证①grep排程不可满足:收窄game/presentation当步域,全仓零残留grep移T1新增验证④)+建议六处(node()24键与平铺区间剔76行/§8补ui_camp_modals头注两句随批/flow枚举补:123:251/营地混行概括句口径/architecture行号换代v1.30现行:169:170:201/正检grep拆三条各限include); 审裁决=修毕可直接开工; grilling四轮在案零待裁点 2026-11-02 04:53:35 +08:00
DKChan 4b5e311d1d 合并(fix-doc-term·CI追绿): 体验验证清单.md:577 退役词「报错」→「错误」——迭代48收尾批引入的08 doc_term红(名词岗退役词,2026-10-15口径); 红态修复走fix worktree免重塑免数卡; 本地术语闸复验疑似现行1→0; 合回后post-merge钩子自动跑CI全量域闸复验追绿, 回执后台挂ci_watch 2026-11-02 04:48:23 +08:00
DKChan 90b74fcd0a 修复(doc_term红·CI追绿): 体验验证清单.md:577 退役词「报错」→「错误」(名词岗,2026-10-15退役口径)——迭代48收尾批(64c675f9)登记目检项引入,aa396eb9尖CI 08 doc_term红; 本地复验疑似现行1→0,fix-doc-term免重塑免数卡 2026-11-02 04:48:22 +08:00
DKChan aa396eb987 合并(收尾·迭代48批后收尾·用户令): 反哺点十六条处置闭合——落文13处(art-bible v3.36背景实装化与STAGE_BG退役改指/art-prompts v2.14/battle-stage-prompts v1.9/battle.md/HUD框架/数据配置v1.2/增益状态v1.4词表累加+十行补护身defensive_stance存量漏登/08-Alpha v1.24立绘行换在役〔用户裁〕/术语表立「显示档」条〔用户裁〕/美术两清单站桩行已交付)+architecture v1.30 SCHEMA_VERSION失真句订正(迭代41测试债批遗留义务); 目检十项登记㊻+迭代41测试债三项补登记㊼; 产出物退役九件(五件iter48+三需求卡片+迭代41测试债批实现报告,遗留义务全清); 待办清单三卡条目删除+两条新登记(tres批注处置待裁/ui_kit注释顺带件)+roadmap迭代48行已完成+当前位换代(迭代1-48全完成,下一步=三写卡批待编排); pipeline_gate PASS; 合回后post-merge钩子自动跑CI全量域闸, 回执后台挂ci_watch
# Conflicts:
#	roadmap.md
2026-11-02 04:38:31 +08:00
DKChan 64c675f96f 收尾(迭代48批后收尾): 反哺点十六条处置闭合——①落文: art-bible v3.36(§6.1背景实装化三句+§4.1换色合并登记③STAGE_BG退役改指SLOT_BACKDROP)+art-prompts v2.14(组四按档派生已落位+组一已实装消费)+battle-stage-prompts v1.9(ground_h已回填100+四柱已退役)+battle.md(布局字段补ground_h+光柱氛围层退役句)+HUD框架(B区行补三关背景与连续地面层+布局几何清单补地面层高)+数据配置v1.2(布局表用途句补地面层高)+增益状态v1.4(stack_policy词表换代accumulate+现行九行→十行补护身defensive_stance行〔迭代39存量漏登补录〕+累加行六→七行)+08-Alpha v1.24(立绘显示清晰度行换在役〔用户裁〕)+术语表立「显示档」条〔用户裁〕+美术两清单站桩行已交付换代; architecture v1.30(ConfigDB行SCHEMA_VERSION失真句订正——迭代41测试债批遗留义务,现役=save_manager SAVE_FORMAT_VERSION); ②目检十项登记体验验证清单㊻+迭代41测试债批三项补登记㊼(原报告漏登补齐); ③产出物退役九件(吸收即死+证据只留最新): iter48反哺点/实现报告/验收审计/停机呈报/代拍板追认单+三需求卡片(合回4c94eee3)+迭代41测试债批实现报告(遗留义务已清:闸基线换代随工程小件批落地/SCHEMA_VERSION本批落文/目检㊼); ④账面: 待办清单三卡条目整条删除(状态机出口)+status_effects.tres陈旧批注处置(待文档设计)与ui_kit.gd注释顺带换代(待执行)两条新登记(未决先迁)+roadmap迭代48行已完成(2026-11-02)与两列退役保留字+当前位换代(迭代1-48全完成,下一步=三写卡批待编排) 2026-11-02 04:35:56 +08:00
DKChan 5d1a27de68 合并(编排批·迭代49·用户令): 三卡编入迭代49——①效果端口与掷格分件(中值2.625天)②模态句柄分域(1.875天)③营地五界面真窗口化(2.75天), 合计≈7.25个工作日常规带零特批; 卡序=核心域先行(EV锚逐位主证早曝,表现两卡殿后集中目检,用户裁); 三条目状态推进已编迭代49; pipeline_gate PASS(41条目/49总表行/交叉核6链/卡片8张全过); 编入不等于开工,实现段待/iter 49发令; 合回后post-merge钩子自动跑CI全量域闸, 回执后台挂ci_watch 2026-11-02 04:33:52 +08:00
DKChan 9728391098 编排(迭代49·用户令): 三卡编入——效果端口与掷格分件(中值2.625)/模态句柄分域(1.875)/营地五界面真窗口化(2.75), 合计≈7.25个工作日常规带零特批; 卡序=核心域先行(端口分件EV锚逐位主证早曝,表现两卡殿后集中目检,用户裁); 三条目状态推进已编迭代49; pipeline_gate PASS(41条目/49总表行/交叉核6链/卡片8张全过) 2026-11-02 04:33:40 +08:00
DKChan 9bdcaa4dc0 合并(工程+文档批·B7色板整屏总闸·用户令): art-bible v3.36 §4.1色板第三层「整屏有效色数总闸」——裁判面=成片出现的颜色数(有效色数),上限128待定现用,构成推导源32x2+48+16,超限先合并压缩禁加色绕行,测量口径归闸件; shot_checker判据换代——有效色数=面积≥0.25%成片颜色(锯齿/字缘/阴影环/渐变中间带不判断,用户裁降噪口径),地板40整屏口径不变,上限128; 阈值四档扫描实测定0.25%(现役七屏有效24~74全绿,无治理面); 待办条目完成整条删除; pipeline_gate PASS(41条目); 合回后post-merge钩子自动跑CI全量域闸, 回执后台挂ci_watch 2026-11-02 04:27:38 +08:00
DKChan e3d362b767 工程+文档(B7色数治理·用户令): 色板整屏总闸三件落地——art-bible v3.36 §4.1色板分层增第三层「整屏有效色数总闸」(裁判面=成片出现的颜色数,上限128待定现用,构成推导源32x2+48+16,超限先合并禁加色,测量口径归闸件不载圣经)+shot_checker判据(有效色数=面积≥0.25%成片颜色,锯齿/字缘/阴影环/渐变中间带不判断·2026-11-02用户裁降噪口径;地板40整屏口径不变;上限128)+待办条目「正常屏唯一色数收敛」完成整条删除(双轨口径/上限/落点三点用户裁决闭合,现役七屏有效24~74全绿无治理面,吸收即死); 阈值扫描四档实测定0.25%(1-4Kpx中间带=阴影环渐变居所整带滤净,0.5%+连icon级token色都漏); 闸烟测camp eff=24与扫描一致 2026-11-02 04:27:27 +08:00
DKChan 5999cc7ba4 合并(写卡批·效果端口与掷格分件·用户令): 需求卡片-效果端口与掷格分件批-2026-11-02 v1.0 落 master——按 architecture v1.29 轴戊建 EffectPort(业务类唯一效果发射出口窄门面)+RewardRoller(装配期格面资源摇号)两件, 业务类零引擎直连零账面触碰/受理账面留守, 行为零变化(同种子逐位+结构断言+S13只降不升); T0-T4估2.63工作日, 对照表9行七格(variant_placement四处白盒指址换代=唯一削弱申报,判据零删改); grilling三轮零待裁点(开工门=U0, 签名级缺陷一轮修正); pipeline_gate PASS(卡片8张全过); README能力行「效果发射端口单点」+待办条目推进已写卡; 合回后post-merge钩子自动跑CI全量域闸, 回执后台挂ci_watch 2026-11-02 04:19:42 +08:00
DKChan 575cdb116c 写卡(效果端口与掷格分件批·用户令): 需求卡片v1.0 零待裁点+README能力行维护+待办条目推进已写卡 2026-11-02 04:19:07 +08:00
DKChan 54f73e4f33 合并(文档批·B5战斗域结构深拆设计闭合·用户令): architecture.md v1.29拆件定稿节轴戊——效果端口件(暂名EffectPort: 业务类唯一效果发射出口,EffectEngine/EffectContext/计数器账面收归宿主侧,单实现零接口抽象)+掷格件(暂名RewardRoller: 装配期格面资源摇号,受理账面留RewardEconomy,衔接=格→身份映射); 行为零变化红线全款(命中序=声明序/明细行词表零触碰/deferred观测面不回退/EV·MC锚逐位零漂移); 功能层四行随动注记; 待办条目文档设计已闭合+缺口删除; pipeline_gate PASS; 合回后post-merge钩子自动跑CI全量域闸, 回执后台挂ci_watch 2026-11-02 03:45:09 +08:00
DKChan 61229cee49 文档设计(B5战斗域结构深拆·用户令): architecture.md v1.29拆件定稿节轴戊——效果端口件(暂名EffectPort,业务类唯一效果发射出口,引擎/上下文/计数器账面归宿主侧,单实现零接口抽象)+掷格件(暂名RewardRoller,装配期摇号面,受理账面留RewardEconomy,衔接=格→身份映射)两件设计定稿; 行为零变化红线全款(命中序/明细行词表/deferred观测面不回退/EV·MC锚逐位); 功能层四行随动注记(action_economy/reward_economy/BattleFxHost/damage_controller); 待办条目设计闭合+缺口删除+状态推进; 用户两点裁决(端口形态甲/分件切向甲)会话在案,待裁点清零 2026-11-02 03:44:57 +08:00
DKChan f50a078ea6 合并(写卡批·营地五界面真窗口化·用户令): 需求卡片-营地五界面真窗口化批-2026-11-02 v1.0 落 master——五界面从近全屏面板/全屏深色叠层换统一居中定尺寸窗壳(起点720x640·遮罩0.6·内容超高窗内滚动·生涯页同壳,窗板panel_skinned石板皮+生涯页BG_BRIGHT内容板两契约随grilling落卡), 开合路由/互斥/关闭钮/ESC序行为面零改; T0-T3估2.75工作日, 对照表8行七格+削弱申报零删改; grilling四轮零待裁点(开工门=U0); pipeline_gate PASS(卡片7张全过); README能力行「营地五窗统一窗壳形态」+待办条目推进已写卡; 合回后post-merge钩子自动跑CI全量域闸, 回执后台挂ci_watch 2026-11-02 02:45:17 +08:00
DKChan 8a889bfcd0 写卡(营地五界面真窗口化批·用户令): 需求卡片v1.0 零待裁点+README能力行维护+待办条目推进已写卡 2026-11-02 02:44:33 +08:00
DKChan 01f57139b6 合并(文档批·营地五界面真窗口化定稿·用户令): camp.md v2.5叠层开合节——五窗统一居中定尺寸窗壳(起点720x640,窗明显小于屏场景大面积可见,终值随样张目检校准,内容超高窗内滚动)+生涯页同壳同形态(全屏深色叠层退役); 遮罩0.6/互斥/关闭钮/ESC序维持三点裁决; 待办条目凭据换代v2.5+改动面补游戏代码档; pipeline_gate PASS; 合回后post-merge钩子自动跑CI全量域闸, 回执后台挂ci_watch 2026-11-02 02:16:14 +08:00
DKChan a848c4f280 文档设计(营地五界面窗口化·用户令重开): camp.md v2.5叠层开合节真窗口化定稿——五窗统一居中定尺寸窗壳(起点720x640,窗明显小于屏场景大面积可见,终值随样张目检校准,内容超高窗内滚动)+生涯页同壳同形态(全屏深色叠层退役); 遮罩0.6/互斥单开/各窗关闭钮/ESC优先序维持2026-11-01三点裁决不变; 待办条目实况补记两点补裁+凭据换代v2.5+改动面补游戏代码档; 用户两点裁决(窗口几何/生涯页形态)会话在案,待裁点清零 2026-11-02 02:16:04 +08:00
DKChan 4b626261d6 合并(fix-iter48ci·CI红三项修复): S11注释退役词换代+08c卡①R7能力行README在册全称+02显示档红=主区纹理缓存陈旧(修复区新鲜环境自证,合回后CI导入刷新自愈); 修复区窄验三件全绿 2026-11-02 02:09:36 +08:00
DKChan 857c80e0ba fix-iter48ci: CI红三项修复——S11注释退役词「单元套件」→「单元测试」(stage_background_test:2)+08c流水线闸卡①R7能力行格换README在册全称「战斗屏三区几何与棋盘格边长(分辨率两档×四档板型)」(0657370b先例格式修)+02显示档14红=主区.godot纹理缓存陈旧(合并后素材落递晚于CI导入刷新,九键全红为陈旧签名;修复区新鲜环境50PASS自证)——窄验stage_background 20绿/standee 50绿/pipeline PASS 2026-11-02 02:09:26 +08:00
DKChan 4c94eee369 合并(迭代48·状态合并累加制+立绘显示档+战斗区背景替换三卡): 卡①六行accumulate+累加臂+V1–V4断言+甲案裁决随动(deferred自描述键+相位分类归绿,EV三锚零漂移)/卡②九件原稿分辨率入包+显示档九键钉值+V13–V18+样张30/30+三面对照图/卡③ground_h单源+背景三关选图+连续地面层+光柱与STAGE_BG/BEAM_LIGHT退役+V1–V6含审计补差源码锚; 独立验收审计通过(首轮窄口径不通过三项缺漏修齐后复审通过); 合回后post-merge钩子自动跑CI全量域闸 2026-11-02 01:58:40 +08:00
DKChan 84e3d46a6a iter48-收尾:产出物终态——实现报告(三卡全收口+实际对照表结果列+读数留痕+目检十项)+反哺点16条+停机呈报(甲案裁决闭合记载留根因)+独立验收审计(首轮窄口径不通过三项缺漏修齐,复审通过——审计报告§九)+代拍板追认单(三卡白名单全用零超出) 2026-11-02 01:58:26 +08:00
DKChan 3b60048b1a iter48-卡3:卡③(战斗区背景替换批,含审计补差V6源码锚): ground_h单源回填100+schema地面校验拆辅助+背景三关变体层(TEX_STAGE_BG_FMT+set_board_type选图单点,空串归dungeon,缺图回退链)+连续地面层(TEX_STAGE_GROUND底贴B区底高读表)+两处接板同步守卫行+四柱光柱层与BEAM_LIGHT/STAGE_BG退役(菜单_beams_rect不动)+两对比锚改读SLOT_BACKDROP(阈值不变)+stage_background_test 20checks全绿(V1–V6含审计补差两源码锚断言)+layout_probe追加断言两档PASS+ui_contrast 36测点绿 2026-11-02 01:58:24 +08:00
DKChan 4c3f0f6082 iter48-卡2:卡②(立绘显示档批): 九件素材原稿分辨率入包(紧裁零降采样,STANDEE_SRC_H九键+产物计数自证)+standee_motion显示档PORTRAIT_DISPLAY_H九键钉值(_place_portrait按档算倍率,缺键push_error按1×)+portrait_probe扩display_size/display_scale+闸件standee_asset_check换口径(源高==原稿表值/显示宽≤150酋长157例外逐字)+样张站桩段按显示档取数(A4解冻重校88×92,V10并排30/30)+V13–V18全绿(50checks)+三面对照图 2026-11-02 01:58:23 +08:00
DKChan 1e35ab947b iter48-卡1:卡①(状态合并累加制批): 六行stack_policy refresh→accumulate+schema词表换代+容器累加臂(_apply_accumulate只加时长,层数快照不变)+roll_multiplier五段式探针(V1/V2/V3)+table_structure_guard V4+damage_controller标签换代+甲案裁决随动(2026-11-02用户裁): _ineffective_row载荷deferred自描述键(非行为改动)+round_flow _row_phase分类补deferred→战斗段——相位单调断言归绿,EV三锚0.9148/1.0012/1.1948逐位不变 2026-11-02 01:58:22 +08:00
DKChan 26f00af7a8 合并(写卡批·模态句柄分域·用户令): 需求卡片-模态句柄分域批-2026-11-02 v1.0 落 master——UiModals 平铺12句柄按域抽 run/menu 两子容器(营地六件先例不动)+ModalFlow 升格 UiRegistry 直驻+register_layer 注册面随迁, 行为零变化纯句柄搬家(类变量 14→3, 旧寻址形全仓零命中, 换代面529行钉file:line); grilling四轮零待裁点(开工门=U0)+代拍板白名单5项在卡; pipeline_gate PASS(44条目/48总表行/卡片6张)+capability_audit零红; README能力行新增「模态句柄分域寻址面」4行+既有「模态覆盖层编排与输入锁」2行换代+覆盖域表HUD框架行补名; 待办清单条目推进已写卡; 合回后post-merge钩子自动跑CI全量域闸, 回执后台挂ci_watch 2026-11-02 01:49:04 +08:00
DKChan e575de2344 写卡(模态句柄分域批·用户令): 需求卡片v1.0 零待裁点——12平铺句柄分域抽容器(run/menu)+ModalFlow升格注册面直驻+register_layer随迁, 行为零变化纯句柄搬家, 全仓寻址换代面529行实测钉file:line; T0-T2估1.9工作日; 对照表六行七格(新增能力行=模态句柄分域寻址面已入README+覆盖域表HUD框架行); grilling四轮裁决全落(.uid落库+合同表零改动静态判据申报); pipeline_gate PASS+capability_audit零红; 待办条目推进已写卡(卡片路径入实况) 2026-11-02 01:47:57 +08:00
474 changed files with 10814 additions and 3203 deletions

No files matched your search

+53
View File
@@ -0,0 +1,53 @@
# mac 平台 golden 基线生成工作流(workflow_dispatch 手动触发型,2026-11-03)。
# 用途:渲染基线按平台各存——mac 基线必须在 Mac 的图形会话里窗口化渲染产出(Windows 基线不可跨平台替代)。
# 纪律(Q6):本工作流只「生成」候选基线文件(落在 runner 作业工作区,不提交不入库);
# 入库走人工通道:人工目检四张基线(体验验证清单㊾)→ 取回文件显式提交并写明触发原因。
# 禁由 CI 自动提交基线(防静默重制掩盖视觉回归)。
# 运行形态:runs-on=ci-mac(host 模式,作业活在 ci-runner 图形会话内——窗口可开、截图可用)。
name: baseline-mac
on:
workflow_dispatch:
jobs:
refresh:
runs-on: ci-mac
timeout-minutes: 30
steps:
- name: 检出(纯 shell 克隆)
env:
TOKEN: ${{ github.token }}
run: |
git clone -q "https://${TOKEN}@git.kuaimeo.com/${GITHUB_REPOSITORY}.git" "$GITHUB_WORKSPACE/repo"
cd "$GITHUB_WORKSPACE/repo" && git log --oneline -1
- name: 导入缓存刷新
run: |
cd "$GITHUB_WORKSPACE/repo"
/usr/local/bin/godot --headless --path game --editor --quit
- name: 退出判别实验(quit-after 能否解 macOS 窗口化退出挂死)
run: |
cd "$GITHUB_WORKSPACE/repo"
mkdir -p /tmp/shots_diag
/usr/local/bin/godot --path game --quit-after 3000 res://probe/board_shot_probe.tscn -- /tmp/shots_diag
echo "diag_rc=$?"
ls -la /tmp/shots_diag/ | head -8
- name: 基线生成(棋盘三图)
run: |
cd "$GITHUB_WORKSPACE/repo"
GODOT_BIN=/usr/local/bin/godot bash tools/golden_baseline_refresh.sh "$GITHUB_WORKSPACE/repo/game"
ls -la game/tests/golden/mac/ || true
- name: 基线生成(菜单全屏)
run: |
cd "$GITHUB_WORKSPACE/repo"
GODOT_BIN=/usr/local/bin/godot bash tools/golden_baseline_refresh.sh "$GITHUB_WORKSPACE/repo/game" --menu
ls -la game/tests/golden/mac/ || true
- name: 基线导出(/Users/Shared 不随作业清理,供人工取回目检)
run: |
mkdir -p /Users/Shared/baseline_out
cp -f "$GITHUB_WORKSPACE/repo/game/tests/golden/mac/"*.png /Users/Shared/baseline_out/
chmod 644 /Users/Shared/baseline_out/*
ls -la /Users/Shared/baseline_out/
+51
View File
@@ -0,0 +1,51 @@
# 远端 CI 工作流(2026-11-03 用户裁:CI 迁远端 Mac runner,host 模式直跑)。
# 触发:master 收到 push(post-merge 钩子合回自动推,或人手推 master)——分支推送不触发
# (开发分支不烧远端引擎时长;分支级验证=开发期手动跑批档)。
# 跑什么由 tools/ci/domain_route.sh 按改动域分流(乙案)——
# 游戏码批=两域全量(含渲染闸);文档批=文档域秒级闸;纯闸件/管线批=零触发。
# 运行环境:Mac host 模式(tools/ci/mac_setup.sh 自举),GODOT_BIN/GDSTYLE_BIN 由自举件安装到位。
# 检出用纯 shell 克隆:host 模式执行 JS 系动作(actions/checkout)需要 node 运行时,
# runner 机器无 node——首跑实证「Cannot find: node in PATH」即败(run 4),本仓禁用 JS 系动作,
# 引入新 Actions 前必须确认其执行器形态(shell/composite 可,node/docker 不可)。
# 闸清单与域划分唯一出处 = tools/run_all_gates.sh(本文件只负责触发与分流,不另列闸件)。
name: ci
on:
push:
branches: [master]
jobs:
gates:
runs-on: ci-mac
timeout-minutes: 90
steps:
- name: 检出(纯 shell 克隆)
env:
TOKEN: ${{ github.token }}
run: |
git clone -q "https://${TOKEN}@git.kuaimeo.com/${GITHUB_REPOSITORY}.git" "$GITHUB_WORKSPACE/repo"
cd "$GITHUB_WORKSPACE/repo"
git log --oneline -1
- name: 域分流(乙案)
id: route
run: |
cd "$GITHUB_WORKSPACE/repo"
bash tools/ci/domain_route.sh "${{ github.event.before }}" "${{ github.sha }}"
- name: 导入缓存刷新(闸前置——.godot 不入 git,冷检出一付)
if: steps.route.outputs.mode != 'skip'
run: |
cd "$GITHUB_WORKSPACE/repo"
/usr/local/bin/godot --headless --path game --editor --quit
- name: 跑闸
if: steps.route.outputs.mode != 'skip'
env:
GODOT_BIN: /usr/local/bin/godot
GDSTYLE_BIN: /usr/local/bin/gdstyle
run: |
cd "$GITHUB_WORKSPACE/repo"
MODE="${{ steps.route.outputs.mode }}"
if [ "$MODE" = "full" ]; then ARGS=""; else ARGS="--docs"; fi
echo "[ci] 域=$MODE 跑闸参数=$ARGS"
bash tools/run_all_gates.sh $ARGS
+3 -4
View File
@@ -53,10 +53,9 @@ archive/
# === 在途图像素材(2026-10-02 用户裁:artwork/ 整目录不入库,取消 md 例外——此前文本指引入库留痕的口子关闭)===
artwork/
# === 游戏包美术素材(2026-09-29 裁定维持:素材不入 git,运行时资源本地生成不入库)===
game/assets/art/**
!game/assets/art/**/*.md
!game/assets/art/**/
# === 游戏包美术素材(2026-11-03 用户裁:素材回 git,推翻 2026-09-29 不入库裁定——
# 仓库自包含原则:远端 CI 与任何新克隆必须拉到完整可跑素材)===
!game/assets/art/**/*.import
# === 模拟数据缓存层(2026-10-03 用户裁:sim-data/ 数据件不入库——最新 MC 锚常驻留盘作分析缓存,无数值调整不重跑;同日二裁:README+分析工具三件留库,其余留盘)===
sim-data/*
+23 -13
View File
@@ -16,7 +16,7 @@
## 运行与验证(工作目录 = 含 project.godot 的切片目录)
- **合回验证 = 本地 CI(2026-10-30 用户裁)**:git merge 合回 master 落地后,post-merge 钩子(`tools/hooks/post-merge`)后台触发 `tools/ci_runner.sh` 跑一次全量域闸(调 `tools/run_all_gates.sh` 不带参数档,02 全套件),结果落 `game/tests/.gates/ci-status.json`(commit/绿红/红闸名单+关键日志行/耗时)+`ci-history.jsonl` 流水账;CI 红态下修复合回落地即由 post-merge 钩子复验追绿(红态修复走新开修复 worktree,`fix-<任务名>` 分支,免重塑免数卡;post-commit 钩子保留为红态主区直提兜底触发,绿态与无状态零触发)——批内提交零钩子检查、合回只验一次,同一份字节禁止第二次人手跑。CI 红不回滚合并,红项在案、修复合回追绿;开工先读 CI 状态,红未修不开新批。跑批起手自动 `--editor --quit` 刷类名缓存(.godot 缓存不入 git,防合并后失配假红)。`tools/run_all_gates.sh` 仍是全部验证闸的**唯一入口与唯一清单,域划分与选闸算法只写在它这一个地方**,闸件增减与分域调整都只改它,文档禁另列清单;`--code`/`--docs`/`--quick` 手动档只服务开发期按域跑批(开发期窄测纪律见 process-conventions §6),不构成验收;全量回归由用户自发发起。**回执等待一律后台(2026-11-02 用户裁)**:合回落地先向用户呈报本批总结,随即 run_in_background 运行 `tools/ci_watch.sh <合并提交>` 等回执、唤醒后再续,禁前台 sleep/轮询等 CI(细则=process-conventions §1 第 3 条)
- **合回验证 = 远端 CI(2026-11-03 用户裁,取代 2026-10-30 本地 CI)**:git merge 合回 master 落地后,post-merge 钩子(`tools/hooks/post-merge`)自动 `git push origin master` 触发远端 CI(Gitea Actions,runner=Mac 本机 host 模式,环境自举件=`tools/ci/mac_setup.sh`),工作流(`.gitea/workflows/ci.yml`)按改动域分流(分流算法单点=`tools/ci/domain_route.sh`):游戏码批=两域全量含渲染闸,文档批=文档域秒级闸,纯闸件/管线批=零触发。回执由 `tools/ci_watch.sh remote` 轮询 Gitea API 写回 `game/tests/.gates/ci-status.json`(合同不变:commit/绿红/红闸(job 级)+job 日志链接/耗时)+`ci-history.jsonl` 流水账;**回执等待一律后台(2026-11-02 用户裁)**:合回落地先向用户呈报本批总结,随即 run_in_background 运行 `tools/ci_watch.sh remote <合并提交>`,禁前台 sleep/轮询等 CI(细则=process-conventions §1 第 3 条)。CI 红态不回滚合并——红项在案、修复批合回即再推再验追绿;开工先读 CI 状态,红未修不开新批。同一份字节禁止第二次人手跑。`tools/run_all_gates.sh` 仍是全部验证闸的**唯一入口与唯一清单,域划分与选闸算法只写在它这一个地方**,文档禁另列清单;`--code`/`--docs`/`--quick` 手动档只服务开发期按域跑批(开发期窄测纪律见 process-conventions §6),不构成验收;全量回归由用户自发发起。**runner 依赖**:Mac 需开机在线(关机=远端任务排队延后);换机/重装按 `tools/ci/mac_setup.sh` 自举
- 单件直跑(调试期最窄确认用,**不构成验收**):冒烟测试 `python tools/run_smoke.py`(`game/tests/smoke_boot.tscn` 极小启动场景)· 系统测试 `python tools/run_system_test.py`(宿主 `game/tests/system_test.gd`)· 场景探针 `…console.exe --headless --path . res://probe/ui_probe.tscn` · 单元与集成 `… --script res://tests/run_all.gd`
- 调参批量:`--script res://sim/adventure_monte_carlo.gd`(全冒险期望)· `res://sim/reward_expectation.gd`(奖励期望);关卡完成率/难度类测量一律走全冒险
- 数值验证:`python tools/balance_verifier.py`(采集端 `res://sim/verifier_batch.gd`,报告与原始数据落 `sim-data/`)
@@ -40,7 +40,7 @@
| 时机 | 权威文档 |
|---|---|
| 批次开工 / 流程纪律 | `design/engineering/process-conventions.md`——车道铁律(一切改动走独立 worktree,主区只作合并落点)、合回后本地 CI、五段流水线、批次清单、测试两入口与 MC/闸机细则、像素纪律 |
| 批次开工 / 流程纪律 | `design/engineering/process-conventions.md`——车道铁律(一切改动走独立 worktree,主区只作合并落点)、合回后远端 CI、五段流水线、批次清单、测试两入口与 MC/闸机细则、像素纪律 |
| 流水线段入口 | 技能对照——doc-design=文档设计(兼任反哺点落文)/asset-ingest=美术录入/req-card=写卡/iter-plan=迭代编排/iter=实现(五者均装于项目 `.zcode/skills/`);登记不立技能;批后收尾与中间文档退役=batch-closure(同一目录);格式与状态机权威=`design/engineering/doc-conventions.md` §12 |
| 定代码方案 / 写代码 / 改代码前 | `design/engineering/code-conventions.md`——结构/契约/语言/数值/流程五类硬纪律(反例库 = 同目录 code-conventions-cases.md) |
| 定测试方案 / 写测试 / 改测试前 | `design/engineering/test-conventions.md`——探针标配 / 回归断言 / 提交前验证 / 验收清单落码 |
@@ -53,28 +53,38 @@
## 回答风格规则(只管对话输出;文档写作归 doc-conventions §2–§4)
### 三条核心原则(按优先级)
### 四条核心原则(按优先级)
1. 不自造黑话、不自创词语。项目文档已立名与行业通用词=已有词;其余必须引入时当场一句白话定义(三形态表与判据见 doc-conventions 第 4 节)。为省字压出的新短语按造词处理,宁可多两字用现成说法。
2. 简洁。同一意思只说一遍;能用一句不说两句。硬约束、数字、前提条件不参与压缩;信息完整与简洁冲突时保信息。
3. 介绍一个物体、一个概念、一个问题,多角度讲清楚;每角度信息点 ≤3 个,禁止违背第 2 条。
1. **用词封闭**:对话里可用的词=日常汉语+用户先用过的+当场展开过的。展开=先完整描述再给短说法,描述交代三样:指什么对象、怎么运作、带来什么后果。短说法只认两个来源:用户用过的直接跟用;自己提议的必须等用户回话里用过一次才成立。项目文档定过名的词不豁免,对话里首次出现照样先展开。同物同名:同一东西从头到尾一个叫法,不换词;一个词不指两个东西。起名的固定顺序=先描述、再命名、后沿用,禁止颠倒。
2. **判断挂依据**:判断=「X 是/不是/造成了/应该」类陈述;每个判断后面必须跟依据。依据只认三种:仓库文件+行号或逐字引用(给行号就必须真读过那几行);本对话的消息号或原话;外部链接。三种都拿不出的判断必须当场标「这是推测」;说不出依据就答「不知道/没查过」,禁止编造。答复形状=结论行→依据清单→细节。
3. **简洁**:同一意思只说一遍;能用一句不说两句。硬约束、数字、前提条件不参与压缩;信息完整与简洁冲突时保信息。
4. **多角度**:介绍一个物体、一个概念、一个问题,多角度讲清楚;每角度信息点 ≤3 个,禁止违背第 3 条。
### 简洁细则
- 禁换说法重复:同一判断换个措辞再说一遍 = 违规。
- 禁换说法重复:同一判断换个措辞再说一遍=违规。依据与展开不算重复——依据是支撑判断的材料,展开是第一次给出来历,都是新信息。
- 禁铺垫、过渡句、客套话、总结句。认领责任的一句(如「是我的失误」)不算客套;所禁是铺垫与重复道歉。
- 禁填充句式:其实/说白了/本质上来说——直接给结论。
- 短句为主,一行一个意思;装不下拆成短句,不算啰嗦。
- 短句为主,一行一个意思;一句只说一件事。装不下拆成短句,不算啰嗦。
- 答完即止。所禁是无新信息的客套邀约;回答含待用户决断的分叉或待授权动作时,末尾一句决策请求不受限。
### 多角度细则
- 触发:解释概念、评估方案、回答「X 好不好」。事实型问题判据=答案能否一句装下:装得下一句直答;装不下按格式优先级上清单,不算硬凑角度。
- 评估与呈报类第一行=结论行:判断+一句主理由;角度列表随后。
- 评估与呈报类第一行=结论行:判断+一句主理由;结论行之后必须紧跟依据清单(核心原则第 2 条),依据不齐不出结论;角度列表随后。
- 角度池(示例集非封闭集,按问题选 2~5 个;机制与流程题可自造稳定轴命名):现状(现在是什么、缺什么)· 本质(是什么、解决什么)· 代价(要什么前提)· 边界(何时不成立)· 对比(与替代方案差异)· 风险(最常见失败方式)。
- 每个角度 = 关键词 + 一个判断 + 至多一句理由。
- 每个角度=关键词+一个判断+至多一句理由;角度里的判断按核心原则第 2 条挂依据。
- 角度之间用编号,不用「另外、此外、同时」串联。
### 交出前自检
长答复(三段以上或含多个判断)交出前过一遍清单:一、每个判断都挂依据了吗?二、每个非日常汉语的词都先展开了吗?三、有没有只有自己知道来路的内容?哪项不过改哪项,改完再交。自检不产出一节文字,产出是改过的答复本身;用户质疑时必须能复述自检过程。
### 重讲与改写工具
- 把一个主题讲成零基础图解:/eli5。
- 简明技术中文(STC)技能:限定用词与句式的中文写法规范,含词表与检查脚本;写或改写中文技术说明、把回答改写得更清楚时调用(/simplified-technical-chinese)。核心原则第 1 条是它的对话面最小集。
### 格式优先级
能画图的内容一律画图说明,图是第一优先载体;枚举用列表,二维对照用表格;散文是最后手段。
@@ -93,11 +103,11 @@
## 硬性红线(勿违反;操作细则在 process-conventions.md 与各规约)
- 车道铁律(2026-10-31 用户裁恢复)——主工作区只作合并落点,一切开发/设计改动走独立 worktree:`git worktree add ../g-plan2-<任务名> -b <任务分支>`(建区即跑 `tools/setup_worktree_userdir.sh`),收口=冻结→件核→并 master→重塑→主区 `git merge --no-ff`→删区(合回即删,2026-09-19 原裁),CI 红不回滚合并——新开修复 worktree(`fix-<任务名>` 分支,免重塑免数卡)修复合回追绿;主区唯一合法写动作=合并,agent 侧由 worktree-guard 拦主区 Edit/Write 与非 merge 提交;豁免面仅 `.zcode/`、`.qoder/`(不入 git,主区直改);commit 点零钩子检查(pre-commit 直改闸已退役),全量验证归合回后本地 CI(`tools/hooks/post-merge` 触发,见「运行与验证」首条);`--no-verify` 仅属用户,agent 禁用(细则见 process-conventions §1)
- 车道铁律(2026-10-31 用户裁恢复)——主工作区只作合并落点,一切开发/设计改动走独立 worktree:`git worktree add ../g-plan2-<任务名> -b <任务分支>`(建区即跑 `tools/setup_worktree_userdir.sh`),收口=冻结→件核→并 master→重塑→主区 `git merge --no-ff`→删区(合回即删,2026-09-19 原裁),CI 红不回滚合并——新开修复 worktree(`fix-<任务名>` 分支,免重塑免数卡)修复合回追绿;主区唯一合法写动作=合并,agent 侧由 worktree-guard 拦主区 Edit/Write 与非 merge 提交;豁免面仅 `.zcode/`、`.qoder/`(不入 git,主区直改);commit 点零钩子检查(pre-commit 直改闸已退役),全量验证归合回后远端 CI(post-merge 钩子推送触发,见「运行与验证」首条);`--no-verify` 仅属用户,agent 禁用(细则见 process-conventions §1)
- **仓库根禁止设会话状态文件**(`active.md` 已废除)——现状看 roadmap「当前位」,待办看待办清单,过程看 git 提交信息,产出物看 `reports/`;任何文档禁止另设「当前状态快照」节,两处记同一件事必然漂移(细则见 doc-conventions 第 10 节)
- 测试执行两入口铁规——只有迭代 loop 开发与用户点名两个触发入口;其余会话零测试,需测试支撑先请示并注明未跑测
- 合回后验证 = 本地 CI 全量域闸全绿(唯一强制验证点;唯一入口、唯一闸清单、唯一域划分与选闸算法仍只在 `tools/run_all_gates.sh`,禁在文档另列;触发与追绿语义见「运行与验证」首条与 process-conventions §1)。开发期手动跑批按需选档(`--code` 关联档选测——02 跑「卡片申报 ∪ diff 推导」并集套件、三件保险恒跑、横切面回落全量——算法只在闸脚本内定义),手动跑不构成验收;全量回归由用户自发发起。文档面批与代码面批验收同走合回 CI 全量(`--docs` 仅属开发期手动档,process-conventions §1)
- **改动四类**——**需求改动**(游戏代码,含随逻辑写/改的测试代码):唯一走「写需求卡片+编入迭代批次」通道;迭代实现批禁写 `design/` 整个目录、两份根流程清单(`待办清单.md`/`体验验证清单.md`)与 `game/tests/README.md`(能力清单,归写卡段维护)(含新增/修改/删除),设计文档对它只读、是写测试与实现代码的输入依据;两份流程清单的条目状态只由流水线各段推进,实现批禁止顺手改;产出物只准写 `reports/`;合回后由本地 CI 全量验证(红项修复合回追绿,process-conventions §1)。**工程改动**(tools/、闸件、模拟测量工具、纯测试维护——不改变游戏行为的配套代码)、**文档设计改动**、**美术素材改动**:不写需求卡片、不编迭代批次,由用户发令走独立 worktree 直改+合回(车道铁律,commit 点零钩子检查);大体量改动(含触及代码面的工程改动如纯测试维护)同车道无特殊通道;文档设计类写入走 doc-design 技能(登记条目格式由流水线闸强制)
- 合回后验证 = 远端 CI 闸全绿(唯一强制验证点;唯一入口、唯一闸清单、唯一域划分与选闸算法仍只在 `tools/run_all_gates.sh`,禁在文档另列;触发与追绿语义见「运行与验证」首条与 process-conventions §1)。开发期手动跑批按需选档(`--code` 关联档选测——02 跑「卡片申报 ∪ diff 推导」并集套件、三件保险恒跑、横切面回落全量——算法只在闸脚本内定义),手动跑不构成验收;全量回归由用户自发发起。远端按改动域分流:文档面批走文档域秒级闸,代码面批走两域全量(分流算法单点=`tools/ci/domain_route.sh`)
- **改动四类**——**需求改动**(游戏代码,含随逻辑写/改的测试代码):唯一走「写需求卡片+编入迭代批次」通道;迭代实现批禁写 `design/` 整个目录、两份根流程清单(`待办清单.md`/`体验验证清单.md`)与 `game/tests/README.md`(能力清单,归写卡段维护)(含新增/修改/删除),设计文档对它只读、是写测试与实现代码的输入依据;两份流程清单的条目状态只由流水线各段推进,实现批禁止顺手改;产出物只准写 `reports/`;合回后由远端 CI 验证(红项修复合回追绿,process-conventions §1)。**工程改动**(tools/、闸件、模拟测量工具、纯测试维护——不改变游戏行为的配套代码)、**文档设计改动**、**美术素材改动**:不写需求卡片、不编迭代批次,由用户发令走独立 worktree 直改+合回(车道铁律,commit 点零钩子检查);大体量改动(含触及代码面的工程改动如纯测试维护)同车道无特殊通道;文档设计类写入走 doc-design 技能(登记条目格式由流水线闸强制)
- 五段流水线铁律——**需求改动**(游戏代码)按「登记 → 文档设计/美术设计 → 写需求卡片 → 迭代编排 → 实现」五段推进,段间不自动流转、每段转进由用户发令;编入迭代的卡片必须设计闭合+零待裁点——需求卡片任何工作量皆可写、皆可编入迭代,工作量限制只属迭代层(迭代估时总量 <5 个工作日=「冻结待凑批」、不可开工);流水线闸 `tools/pipeline_gate.py` 强制(已注册进 run_all_gates.sh 文档域);实现段零裁断——卡片没写清=上游缺陷,停该卡退回上游,禁内联求裁(process-conventions §2,格式与状态机=doc-conventions §12)。工程/文档设计/美术素材三类改动不走写卡与编排段:(如需设计讨论)→ 用户发令 → 独立 worktree 直改 → 合回 CI(车道细则=process-conventions §1)
- MC/模拟:无数值改动零跑;档位硬闸见 `sim-data/README.md`「MC 采集档位表」,一档只能由用户发起
- 闸机轮次纪律:新码先孤立验证 → 出红只跑红件最小单元 → 长批先最小参数试车 → 开工扫坑册(process-conventions §6)
+2 -2
View File
@@ -59,14 +59,14 @@
## 2. P1 —— 角色级(样张通过后开工,ComfyUI)
> 提示词规格卡 art-prompts.md 现行为 **v2.13**(主角三态+八敌种逐卡提示词仍在册;站桩立绘走 §5.4 按档派生、不重画)。
> 提示词规格卡 art-prompts.md 现行为 **v2.14**(主角三态+八敌种逐卡提示词仍在册;站桩立绘走 §5.4 按档派生、不重画)。
### 2.1 主角战斗小人
- **要什么**:待机 / 攻击 / 受击 三态起步(移动态样张后定);透明底 PNG。
- **风格/规格**:小人原型——**窄、直立、对称,轮廓凹凸 ≤2**;2~3 头身两档下剪影均成立;主色小人蓝 `#2E86DE`(候选值,样张冻结终稿);格内占位最窄、不吞数字位。
- **来源**:✦ ComfyUI(prompt 卡 v2.0 §2);剪影原型是设计载荷(宽≥高/凹凸计数/甲档/紫赤独占),素材站无对的,不复用。
- **现状**:战斗三态在役(迭代 6 T3 落位);2026-11-01 显示档改中档 144,按档派生落位归立绘显示档实装批。
- **现状**:战斗三态在役(迭代 6 T3 落位);2026-11-01 显示档改中档 144;2026-11-02 迭代 48 落位:三态原稿分辨率入包、显示按档缩放。
### 2.2 八敌种形象(键集事实源 = `data/tables/enemy.tres` 行键)
+5 -4
View File
@@ -1,6 +1,6 @@
# 美术圣经(Art Bible)— Dungeon Sweeper
> 项目:Dungeon Sweeper(扫雷 × 自动战斗 闯关 Roguelike)· 状态:**第 1–9 节定稿**;现行为 v3.35,历次修订明细见 git 提交史
> 项目:Dungeon Sweeper(扫雷 × 自动战斗 闯关 Roguelike)· 状态:**第 1–9 节定稿**;现行为 v3.37,历次修订明细见 git 提交史
>
> **Art Director Sign-Off(AD-ART-BIBLE)**:历次批均未签核——此为 Lean/Solo 模式(非 PHASE-GATE)下的现行治理状态;full 门禁签核时机待用户表态。
> 风格基调:地牢题材但**非暗黑风**——轻快明亮的幻想冒险风,全年龄;像素风;角色 2~3 头身。
@@ -213,7 +213,7 @@
- **重甲冷灰金属材质色 `#868C9A`(ARMOR_PLATE_COLD,token 名暂拟、随实装批登记)**|语义/UI token 板(**分层①**,占 1 枚额度,**余量 2→1**;用户裁):重甲档甲材质色;character-design §5.3 通道 = 甲面覆盖率 × 甲材质色,甲材质色按甲档统一,故石君王岩石板甲**同引本枚、不另计额度**;材质色跨屏恒定,落分层①不落分层②(环境色才随场景走)。过门情况:第二道门按宽松口径(禁止三通道全 <8)与在册色逐一比对,**无三通道全 <8 的对 → 过门**;§4.2 语义检查过门(色相 222°,不占红/金/蓝/紫赤/绿语义段、不在 300°–345° 禁入带;材质色不进信息层与语义物件岗)。对比实测:对深素底 `#282220` 4.65:1、对舞台底 `#3E362C` 3.52:1(图形 ≥3:1 门槛);相对亮度 L≈0.261 落 §2 世界中层 0.22–0.45 带。验收:机检〈本值入板后全板色对中三通道差全部 <8/255 的对数 = 0〉
- **卓尔浅紫灰皮 `#A79CB8`(DRIDER_SKIN,token 名暂拟、随实装批登记)**|语义/UI token 板(**分层①**,占 1 枚额度,**余量 1→0,额度用尽**;用户裁):蛛化卓尔精灵上体皮色(体块主色,L≈0.355 落 §2 世界中层带)。过门情况:第二道门同上行口径,**无三通道全 <8 的对 → 过门**;§4.2 语义检查过门(色相 264°,避开 300°–345° 禁入带,紫赤独占仍归 `#8F2F6A`;不占本节五语义段)。对比实测:对深素底 `#282220` **6.04:1**、对舞台底 `#3E362C` **4.57:1**——**两处均过图形 ≥3:1 门槛**(本轮新算)。验收:机检〈本值入板后全板色对中三通道差全部 <8/255 的对数 = 0〉
- **换色合并登记五处(用户裁,部件色落值)**|按本表「不过门即触发换色合并、禁加色绕行」执行,五处**零新增额度**(各件原拟新增候选一律不取):① 主角铲刃浅铁灰(原拟 `#A8AEB8`)→ 并入 `FOG_MEMORY_INK #C4C4C4`,**部件取值 = `#C4C4C4`**;② 主角提灯铜色(原拟 `#C08A3A`)→ 并入 `GOLD_DEEP #B07A14`,**部件取值 = `#B07A14`**;③ 食人魔酋长暖褐皮(原拟 `#B08050` / `#A97C4E`)→ 并入 `暖石 #B8A582`,**部件取值 = `#B8A582`**;④ 石君王灰皮(原拟 `#9A968C` / `#949089`,按**次级皮**口径——板甲视同体块主色、灰皮属次级皮故不受 L 0.22–0.45 约束)→ 并入 `STONE #786E62`,**部件取值 = `#786E62`**;⑤ 轻甲护甲图标木色 `#8A5A34`(深素底下 2.72:1 不过门;原拟新增木色亮档 `#C49A5E`)→ 并入 `WARM_FAINT #CDB88C`,**部件取值 = `#CDB88C`**(8.08:1)。**一色两岗代价已随裁定接受**:① 的 `#C4C4C4` 语义岗 = 迷雾记忆墨(§6.5)、② 的 `#B07A14` 属金族(§4.2 金只说收益与兑现)——两者均作角色随身件材质色用,不进信息层与语义物件岗;③④⑤ 无语义岗冲突。验收:机检〈五处部件取值点全部改指合并目标色,四枚原拟新增候选值零入板〉
- **换色合并登记三处**|按本表「不过门即触发换色合并、禁加色绕行」执行,三处零新增额度:①地台顶缘受光线 `#C4AC84` 已并入 `#C9AF83`(掩尘枚 `BRICK`,与 §8.2 高墙口沿高光同枚)——源常量已删除(全仓零引用,退役断言测试串为预期例外),绘制点全部改指 `#C9AF83`;②地台描边 `#5A4C3A` 已并入 `#4C4038`(代码 `PLAZA_EDGE`,ui_kit 唯一落点)——源常量已删除,绘制点全部改指;③舞台底 `#3E342A`(代码 `STAGE_BG`)→ 并入 `#3E362C`(状态槽底)——随 §6.1 舞台背景插画批一并处置:背景资产接管该绘制面时本常量随绘制点退役或改指,禁单独为改值出批。程序化回退绘制与已落合并值的贴图保持一致。验收:机检〈①②两枚源常量全仓零引用,绘制点全部改指合并目标色〉
- **换色合并登记三处**|按本表「不过门即触发换色合并、禁加色绕行」执行,三处零新增额度:①地台顶缘受光线 `#C4AC84` 已并入 `#C9AF83`(掩尘枚 `BRICK`,与 §8.2 高墙口沿高光同枚)——源常量已删除(全仓零引用,退役断言测试串为预期例外),绘制点全部改指 `#C9AF83`;②地台描边 `#5A4C3A` 已并入 `#4C4038`(代码 `PLAZA_EDGE`,ui_kit 唯一落点)——源常量已删除,绘制点全部改指;③舞台底 `#3E342A`(代码 `STAGE_BG`)→ 并入 `#3E362C`(状态槽底)——已随 §6.1 舞台背景插画批处置完毕(2026-11-02 迭代 48):源常量已删除(常量表零键),背景资产接管该绘制面,程序化平色缺图回退改指 `SLOT_BACKDROP`(`#3E362C`)。程序化回退绘制与已落合并值的贴图保持一致。验收:机检〈①②两枚源常量全仓零引用,绘制点全部改指合并目标色〉
**对比硬指标(可测)**:数字可读性由**格底明度分档**承载——棋盘数字亮墨 **L≥0.75** 对**已开格底 L 0.08–0.14** ⇒ 直画对比 **≥4.5:1 恒成立**(WCAG AA,样张逐组合抽测冻结);**色牌后备**:色牌素色恒定 **L≥0.70**、牌上数字深墨 **L≤0.027** ⇒ 任意牌墨组合 ≥4.5:1(实测样例:#33261B/#F5EAD3 = 12.3:1)。未开格底槽(含全部图类型)相对亮度 **L≥0.30**(墙顶面受光档)、HSV 饱和 **≤0.55**、避 Boss 禁入色相带;已开格底走世界底层档(见上)。物件识别不依赖格底(§5.1 轮廓通道),旗面、金色不作识别依赖。验收:机检〈亮墨对已开格底 ≥4.5:1;未开格底 L≥0.30、饱和 ≤0.55;任意牌墨组合 ≥4.5:1〉 ←原二;地形变异 AC-9
@@ -222,6 +222,7 @@
- **换色合并欠账清单(全板重扫 6 对不达标,逐对清偿)**:`#18120C` ↔ `#181410`、`#33261B` ↔ `#362B20`、`#362B20` ↔ `#3A2E22`、`#3E362C` ↔ `#3E3731`、`#3E4048` ↔ `#3F4147`、`#453723` ↔ `#4A3B2A`——六对按「不过门即换色合并」纪律逐对清偿(并进最近既有色);清偿前该对不视作合规,清偿动作落本节修订。**本节所举反例 `#3A2E22` ↔ `#362B20` 正在这 6 对之内**,与本口径自洽。验收:机检〈全板色对中三通道差全部 <8/255 的对数 = 0〉
- **色板分层**:色板分两层管理——① **语义/UI token 板**:全作共享,硬上限 **48 色**,管 UI 语义色、墨色、材质色,跨屏恒定;② **场景环境子板**:**每屏一套,≤32 色,允许跨屏不共享**(环境色 = 天空、地面、植被、石材、火焰等随场景走的颜色)。新增环境色仍须过两道门(§4.2 语义检查 + 与既有任一色 RGB 三通道差禁止全部 <8/255),但**不占用 48 token 额度**;不过门照旧走「换色合并」,**禁加色绕行**。单张 PNG 的像素域色数上限 **≤32 色**另由 `standee_asset_check` 执法(按单图像素域取值方式计数,与本表 token 计数互不干扰)。额度不足时向作者报告,由作者决定压缩或合并既有色。验收:机检〈token 板 ≤48;每屏环境子板 ≤32〉
- **整屏有效色数总闸(色板第三层,2026-11-02 用户裁)**|整屏的色板纪律裁判面=**画面上成片出现的颜色数(有效色数)**,不是逐像素去重总数:多源并集与程序混合(压暗遮罩/软阴影/渐变/tween 中间帧)使逐像素色数随素材与渲染状态大幅漂移(实测同屏不同时点差一至九倍),不可治理也不承载观感。整屏唯一色数只保留「渲染真实发生」的存在性地板(地板值归闸件承载);**色板纪律的上限闸=每屏有效色数 ≤128**(**待定现用**——现行即执法、修订走登记,释义同色板增量纪律条)。构成推导源:双环境层 32×2+token 板 48+混合容差 16(←本条色板分层;推导源非额度分配,各层额度照旧独立执法)。超限处置沿色板增量纪律:先合并压缩既有色再进,禁加色绕行。有效色的测量口径(面积阈值等实现参数)归色数检查器承载,本圣经不载。验收:机检〈各屏有效色数 ≤128,口径=色数检查器现行定义〉
### 4.2 语义色彩规则
@@ -381,8 +382,8 @@
- **明度分层适用**:空间纵深与洞穴感走明度分层——世界底层档、光照氛围、色相饱和与形体承载(§3.2 同款逻辑)。验收:方向性
- **图类型联动**:背景层按 `board_type` 选三张变体(`scene_stage_bg_dungeon.png` / `scene_stage_bg_underdark.png` / `scene_stage_bg_deep_underdark.png`,方向取 §6.3 三关色板候选);**背景不再走 §4.3 `wall_ambient` tint**(该槽保留给棋盘/世界的墙雾氛围,避免对三张背景二次染色)。紫赤仅 Boss 战允许短暂进入背景氛围纹样(§2.6 色相独占的舞台侧延伸,高饱和独占不变),非 Boss 战高饱和紫赤禁入。验收:机检〈背景吸色无非 Boss 高饱和紫赤;背景素材不引用 `wall_ambient` 槽〉
- **场景构成(2026-10-31 用户裁)**:B 区舞台从远到近分三段——**顶部空区**:洞顶以上的昏暗空间,只留深色空区,**不画钟乳石、吊锥、悬挂物或任何可辨形状**;**远景(纵深洞厅)**:不是贴墙的后壁,按远/中/近三层组织——远层暗剪影(远处洞口/通道、层叠岩体、洞底轮廓)、中层主要细节层(岩台、岩柱、凹壁、裂缝)、近层左右暗色岩框;剪影被中层部分遮挡、不贴顶、不孤立,**禁贴墙感、禁单件圆柱贴顶、禁砖石墙/规则砌缝/方整石块**;三关母题(地精=支洞/木栈道/木桩围栏;卓尔=巨柱/石笋/蛛网/螺旋塔剪影/巨菇/石桥;灰矮人=石笋城郭/棱角石厅/石桥/矿道口/烟囱塔)见 `battle-stage-prompts.md` §3.2;**分隔带**:远壁根部与近景地面之间一条不规则碎石带/阴影缝,边界清楚但不笔直,**禁瓷砖缝、踢脚线、规则台阶**;**近景地面**:干净压实泥土为主,全幅只零星几颗小石、散点分布,中央平缓留空给角色站位,**禁成排/成堆碎石、满铺砂砾、泥点噪声、瓷砖、规则铺装、草、木地板**。纵深与三段构图归 §1.4 样张;逐条要素、分层提示词与否定后缀 = `battle-stage-prompts.md`(本文件不重复维护)。验收:目检〈顶部无钟乳石/吊锥;远景有纵深、非贴墙;无孤立圆柱贴顶;近景为泥土碎石;分隔带不规则;中央无大障碍〉
- **图层归属(2026-10-31 用户裁)**:背景层 = 三关变体 `scene_stage_bg_dungeon/_underdark/_deep_underdark.png`(顶部空区+纵深洞厅远景,不画近景地面;按 `board_type` 选一张);近景地面 = **独立连续地面层** `scene_stage_ground.png`(泥土/砂砾/碎石地面,全宽、底边贴 B 区底、顶缘即分隔带;高度读布局表 `ground_h`,字段由地面层实装批新增并回填,本批终稿高 100、代码批落表);现有每角色小石台 `scene_stage_plaza.png` 保留,叠在连续地面之上。连续地面层与小石台**三关共用**、跨关恒定、**不吃 `wall_ambient` tint**(世界中层承载面随关卡换明度会破 §2 层间关系);背景三张变体各自带关卡色族,不再叠 tint。验收:机检〈三张背景文件名带 board_type 后缀;地面层/小石台文件名无 board_type 后缀;背景与地面层均不引用 `wall_ambient` 槽〉
- **资产渠道与契约**:✦ 插画级(演出类场景贴图,清单 §4 联动登记);战斗一屏样张(§1.4 清单 1.2)含背景出样。**背景层 = 三张按关卡变体** `scene_stage_bg_dungeon.png` / `scene_stage_bg_underdark.png` / `scene_stage_bg_deep_underdark.png`(源 = 基准屏宽 × `stage_h`,读布局表 `game/data/tables/battle_layout.tres`;显示 1×;按 `board_type` 选图;**不走 `wall_ambient` tint**);三张共用本节构图规则,仅岩体形态与色族按 §6.3 三关方向不同。**背景只画顶部空区+纵深洞厅远景,不画近景地面**:结算期明细带整条压住 B 区底带(带高 = `log_band_h_settle`,读布局表),近景地面在独立层;画进背景等于画一件永远看不见、且会随背景变体重复的东西。**连续地面层** = `scene_stage_ground.png`(源 = 基准屏宽 × `ground_h`,读布局表;显示 1×;三关共用、跨关恒定、不吃 tint);地面层是极宽薄条,出图与后处理按 `battle-stage-prompts.md` §2.2 的工艺(可平铺纹理条/最宽档裁切,禁横向拉伸)。**光柱不迁入背景**:三张背景均不画光柱/光带/光束/光晕与任何光源实体,明暗只由岩体层理与暗部承载;现行四柱程序层是临时占位,资产到位后直接退役(代码批)。资产已入包(2026-10-31),四柱程序层与平色底由代码批退役/改指;出图工单 = `battle-stage-prompts.md`,交付记录见本节「B 区舞台背景与共用地面的交付绑定」。验收:目检〈三关背景可辨为不同洞窟,非同一图换色;远景有纵深、非贴墙;无孤立圆柱贴顶;背景无地台/地面结构件、无砖石墙、无瓷砖地面、无光柱/光带;地面层为泥土/砂砾/碎石〉
- **图层归属(2026-10-31 用户裁)**:背景层 = 三关变体 `scene_stage_bg_dungeon/_underdark/_deep_underdark.png`(顶部空区+纵深洞厅远景,不画近景地面;按 `board_type` 选一张);近景地面 = **独立连续地面层** `scene_stage_ground.png`(泥土/砂砾/碎石地面,全宽、底边贴 B 区底、顶缘即分隔带;高度读布局表 `ground_h`,字段已由实装批回填 100〔2026-11-02 迭代 48〕);现有每角色小石台 `scene_stage_plaza.png` 保留,叠在连续地面之上。连续地面层与小石台**三关共用**、跨关恒定、**不吃 `wall_ambient` tint**(世界中层承载面随关卡换明度会破 §2 层间关系);背景三张变体各自带关卡色族,不再叠 tint。验收:机检〈三张背景文件名带 board_type 后缀;地面层/小石台文件名无 board_type 后缀;背景与地面层均不引用 `wall_ambient` 槽〉
- **资产渠道与契约**:✦ 插画级(演出类场景贴图,清单 §4 联动登记);战斗一屏样张(§1.4 清单 1.2)含背景出样。**背景层 = 三张按关卡变体** `scene_stage_bg_dungeon.png` / `scene_stage_bg_underdark.png` / `scene_stage_bg_deep_underdark.png`(源 = 基准屏宽 × `stage_h`,读布局表 `game/data/tables/battle_layout.tres`;显示 1×;按 `board_type` 选图;**不走 `wall_ambient` tint**);三张共用本节构图规则,仅岩体形态与色族按 §6.3 三关方向不同。**背景只画顶部空区+纵深洞厅远景,不画近景地面**:结算期明细带整条压住 B 区底带(带高 = `log_band_h_settle`,读布局表),近景地面在独立层;画进背景等于画一件永远看不见、且会随背景变体重复的东西。**连续地面层** = `scene_stage_ground.png`(源 = 基准屏宽 × `ground_h`,读布局表;显示 1×;三关共用、跨关恒定、不吃 tint);地面层是极宽薄条,出图与后处理按 `battle-stage-prompts.md` §2.2 的工艺(可平铺纹理条/最宽档裁切,禁横向拉伸)。**光柱不迁入背景**:三张背景均不画光柱/光带/光束/光晕与任何光源实体,明暗只由岩体层理与暗部承载;原四柱程序层与平色底已退役(2026-11-02 迭代 48:背景资产接管该绘制面,平色缺图回退改指状态槽底色)。资产已入包(2026-10-31);出图工单 = `battle-stage-prompts.md`,交付记录见本节「B 区舞台背景与共用地面的交付绑定」。验收:目检〈三关背景可辨为不同洞窟,非同一图换色;远景有纵深、非贴墙;无孤立圆柱贴顶;背景无地台/地面结构件、无砖石墙、无瓷砖地面、无光柱/光带;地面层为泥土/砂砾/碎石〉
- **B 区舞台背景与共用地面的交付绑定(2026-10-31 入包)**:三张背景与一张地面已按本节契约入包 `game/assets/art/scene/`——`scene_stage_bg_dungeon.png` / `scene_stage_bg_underdark.png` / `scene_stage_bg_deep_underdark.png` 均 1280×252、不透明全幅、单张 ≤32 色、按 `board_type` 选图;`scene_stage_ground.png` 1280×100、顶缘以上透明、单张 ≤32 色、三关共用。地面按作者 2026-10-31 裁保留候选 v12b 原亮度(实测不透明域 L≈0.132,低于 §2 世界中层 0.22–0.45,登记为作者例外;后续调亮归调参/替换,不重开设计);背景实测 L:dungeon 0.0148、underdark 0.0132、deep_underdark 0.0111(后两者低于世界底层下沿带下限 0.014 不超过 0.003,登记读数)。验收:机检〈四件文件名与尺寸逐位相符;地面顶缘以上 alpha=0、不透明域 ≤32 色;背景不透明全幅 ≤32 色〉+目检〈三关可辨、无光柱、地面读作泥土〉。参考指针:`asset-path-map.md` `scene/` 行、`battle-stage-prompts.md` §2/§4。
- **近景地面与地台走独立件**:连续地面层 `scene_stage_ground.png` 与角色脚下小石台 `scene_stage_plaza.png` 均为独立层,三关共用、跨关恒定。小石台源 48×12、九宫格横向拉伸、顶缘受光线 2px 不随拉伸变形(规格见 §8.2);连续地面层的顶缘即分隔带(不规则碎石/阴影缝,不是直线亮边)。独立的两条理由——① 三张背景按关卡变体,地面若画进任一背景就得三张各画一遍、且三关站位面会漂移;② 结算期明细带整条压住底带(带高读 `log_band_h_settle`),地面在独立层才能跨关恒定并保持世界中层承载面不变。小石台先保留,是否退役归实装批/后续裁决。验收:机检〈地台件按九宫格拉伸后顶缘受光线宽度恒为 2px〉+目检〈连续地面为泥土碎石、顶缘不规则〉
+2 -2
View File
@@ -1,4 +1,4 @@
# 生图提示词卡(角色级资产)v2.13
# 生图提示词卡(角色级资产)v2.14
> **性质**:美术清单生图通道(✦ 用户自跑,现走线上 API)的执行侧文件——每资产一段**自包含完整提示词**:正向 = 通用底座+主体+动作已拼妥、负向 = 通用底座+增补已并妥,整段复制直接贴进工作流即可,**不需要读其他文件、不需要拼装**。人物规格转写自 [character-design.md](character-design.md)(人物设计 v1.0,自 art-bible §5 迁出,圣经 §5 为存根),风格/色彩条款转写自 [art-bible](art-bible.md)(§4.1 主色板 / §4.2 语义色规则);冲突时人物规格以 character-design 为准、色彩以 art-bible 为准。
> **边界**:本文件只管**角色级**资产的生图通道。图标/格面/样张走脚本管线(⚙ 代理出),规格在 art-bible §4.6 与 [art-assets-checklist](art-assets-checklist.md),不需要提示词。**场景级资产(营地场景图的背景层与八个物件层)另立 [camp-scene-prompts](camp-scene-prompts.md);战斗舞台背景层与连续地面层另立 [battle-stage-prompts](battle-stage-prompts.md),本文件不覆盖**;两卡的角色/场景分工以「谁的资产谁出卡」为界,同一段提示词不两处维护。战斗舞台的小石台件与护甲类型图标三枚的**出图工单**登记在本文件 §5;§5 只把各权威节的定值收进逐件工单,不立新值。意图动画三档是动画资产,等一屏样张锁方案后另立规格卡,本文件不覆盖。
@@ -290,7 +290,7 @@ Seamless tileable pixel art texture of dry dirt ground, top-down, for a dungeon
> **定值纪律(§8 头注 定值单点纪律)**:本节**指路不立值**——色值 = 圣经 §4.1(含场景环境子板)、尺寸与缩放 = §8.2、明度带 = §2、甲档 = character-design §5.3、命名 = §8.3 + asset-path-map。本节新增零定值;凡圣经未定的值,一律进本节 §5.5 缺口,不在本节填空。
> **验收标注纪律**:逐条按三档标 `←机检: <断言>` / `←目检: <判据>` / `←方向性`,照圣经头注 2026-10-06 用户拍板的写法。
> **流程**:出图前后一律走 §0 五步;出图登记义务照 remote-gen-prompts 头注轻量口径(用途+生成时间必注,其余参数有则记),随候选图存 `artwork/candidates/<资产名>/`;登记不作正稿遴选前置。
> **产出状态**:组二地台件与组三护甲三枚已按各节 ⑤「程序化产出即终稿」产出入包(`scene_stage_plaza.png` 48×12、`ui_armor_light/ward/heavy.png` 24×24,路径见各组 ① 字段;登记=战斗一屏样张批,合并提交 3b66d1a6);组一背景插画见 [battle-stage-prompts](battle-stage-prompts.md)(三张背景+共用地面已入包,四柱/平色底退役归代码批),组四改按档派生(不重画,待实装批落位)。
> **产出状态**:组二地台件与组三护甲三枚已按各节 ⑤「程序化产出即终稿」产出入包(`scene_stage_plaza.png` 48×12、`ui_armor_light/ward/heavy.png` 24×24,路径见各组 ① 字段;登记=战斗一屏样张批,合并提交 3b66d1a6);组一背景插画见 [battle-stage-prompts](battle-stage-prompts.md)(三张背景+共用地面已入包并已实装消费——按关选图+连续地面层落码,四柱光柱层与平色底已退役),组四改按档派生(不重画)已落位:九件按原稿分辨率入包、显示按三档绝对高缩放(定值单点=art-bible §8.2,派生管线见 §5.4 工单)。
### 5.1 组一 · B 区舞台背景插画(1 件)
+2 -2
View File
@@ -17,8 +17,8 @@
| 素材 | 状态 | 需求文档 |
|---|---|---|
| 主角战斗小人(待机/攻击/受击三态) | ✅ B区站桩三态全接(2026-09-29 迭代 6 T3:normal/attack/hit 48px 档入包+挂事件切换+结算回 idle,短驻自回;棋盘 1.5×/脚锚25%/椭圆影在役不变;hit 态源=new-hit.pxo 已程序导出;2026-11-01 显示档改中档 144(源=手修 2× 三态稿,art-bible §8.2 v3.32),按档派生落位归本条实装批) | [character-design](character-design.md) + [art-prompts](art-prompts.md) §2 |
| 八敌种形象(L2 熊地精=bugbear 复用,不单列) | ✅ B区站桩八敌真图服役(2026-09-29 迭代 6 T1/T2:pixel-1 源→48px 档统一比例/底中锚/众数投票降采样,character_enemy_<键>.png 按常量入位,字形回退退役为缺位兜底;素材不入 git 本地在盘)。2026-11-01 显示档换代=三档绝对高 96/144/188(art-bible §8.2 v3.32),源 = 原稿不降采样,按档派生落位归本条实装批 | [art-bible](art-bible.md) §5 + [art-prompts](art-prompts.md) §3 |
| 主角战斗小人(待机/攻击/受击三态) | ✅ B区站桩三态全接(2026-09-29 迭代 6 T3:normal/attack/hit 48px 档入包+挂事件切换+结算回 idle,短驻自回;棋盘 1.5×/脚锚25%/椭圆影在役不变;hit 态源=new-hit.pxo 已程序导出;2026-11-01 显示档改中档 144(源=手修 2× 三态稿,art-bible §8.2 v3.32))✅ 已交付(2026-11-02 迭代 48:三态按原稿分辨率入包、显示按档缩放落位,机检全绿) | [character-design](character-design.md) + [art-prompts](art-prompts.md) §2 |
| 八敌种形象(L2 熊地精=bugbear 复用,不单列) | ✅ B区站桩八敌真图服役(2026-09-29 迭代 6 T1/T2:pixel-1 源→48px 档统一比例/底中锚/众数投票降采样,character_enemy_<键>.png 按常量入位,字形回退退役为缺位兜底;素材不入 git 本地在盘)。2026-11-01 显示档换代=三档绝对高 96/144/188(art-bible §8.2 v3.32)✅ 已交付(2026-11-02 迭代 48:八件源 = 原稿不降采样入包、显示按档缩放落位,闸件新口径全绿) | [art-bible](art-bible.md) §5 + [art-prompts](art-prompts.md) §3 |
| 意图准备动画三档 | ◐ | [art-bible](art-bible.md) §4.6.4 |
## P2 图标与格面(可与样张并行)
+6 -6
View File
@@ -1,7 +1,7 @@
# 战斗舞台背景 · 分层生图提示词卡 v1.8
# 战斗舞台背景 · 分层生图提示词卡 v1.9
> **性质**:B 区战斗舞台背景(顶部空区+远景天然洞壁+近景连续泥土地面+分隔带)的出图执行侧文件。背景按三关出三张变体,地面三关共用一张;场景级资产,与角色级 [art-prompts](art-prompts.md) 并列,两文件互不覆盖。
> **依据**:场景构成与图层归属 = [art-bible](art-bible.md) §6.1;三关方向 = art-bible §6.3;色板 = art-bible §4.1(战斗屏场景环境子板);尺寸 = `game/data/tables/battle_layout.tres`(背景读 `stage_h`;地面读 `ground_h`,该字段由地面层实装批新增并回填);命名与路径 = [asset-path-map](asset-path-map.md);后处理 = [art-pipeline-tools](art-pipeline-tools.md)。
> **依据**:场景构成与图层归属 = [art-bible](art-bible.md) §6.1;三关方向 = art-bible §6.3;色板 = art-bible §4.1(战斗屏场景环境子板);尺寸 = `game/data/tables/battle_layout.tres`(背景读 `stage_h`;地面读 `ground_h`,字段已回填 100〔2026-11-02 迭代 48 落表〕);命名与路径 = [asset-path-map](asset-path-map.md);后处理 = [art-pipeline-tools](art-pipeline-tools.md)。
> **边界**:只管三张背景变体与一张共用地面的提示词与验收;角色、格面、图标、小石台 `scene_stage_plaza.png` 与样张走 art-prompts 与脚本管线,不在本卡。
> **建立**:2026-10-31 · 状态:三关背景变体与共用地面已按本工单出图并入包(选定=dungeon v10c/underdark v10c/deep_underdark v10c/ground v12b,落点与读数见 art-bible §6.1「B 区舞台背景与共用地面的交付绑定」);出图通道由作者自定(参考候选可用内置 ImageGen,水印可留;入包终稿须干净)。
@@ -12,7 +12,7 @@
1. **出图**:按 §2 把提示词贴进生图渠道;每次出图先放 §1 的风格参考图。**先只出 dungeon 背景 1 张**,作者确认风格前缀后,再出 underdark / deep_underdark 两张变体与连续地面层。
2. **入库**:候选原图放 `artwork/candidates/scene_stage_bg/`(三关变体用 `dungeon_*` / `underdark_*` / `deep_underdark_*` 命名)与 `artwork/candidates/scene_stage_ground/`;`_登记.txt` 记用途与生成时间。
3. **后处理**:三张背景不去底(不透明全幅);连续地面层去底转透明(顶缘以上键控)+最近邻降采样+色板量化+底测试条;工具清单与已知边界见 [art-pipeline-tools](art-pipeline-tools.md)。
4. **转正**:终稿转入 `game/assets/art/scene/`;三张背景按 `board_type` 选图、连续地面层接线与布局表 `ground_h` 字段由实装批落码。
4. **转正**:终稿转入 `game/assets/art/scene/`;三张背景按 `board_type` 选图、连续地面层接线与布局表 `ground_h` 字段均已实装落码〔2026-11-02 迭代 48〕。
---
@@ -92,7 +92,7 @@ Do not add any of the following: realistic, photorealistic or 3D rendering; pain
**画什么**:全宽近景地面——**干净压实泥土为主**,整片平整、中低明度;全幅只保留**零星 3–5 颗小石**,散点分布、不成排不成堆;顶缘为不规则泥土边+阴影缝,可带 2–3 颗小石;中央平缓留空;地面跨三关恒定。
**不画什么**:瓷砖、砖缝、规则铺装、石板块、踢脚线/直亮边;草、木地板;远景/洞壁/天空;角色、生物、道具、火把/灯;中央大石或碎石堆挡站位;满铺碎石、密集砂砾、成排/成堆碎石、亮色浅棕大片、泥点噪声、垃圾杂物。
**出图画布**:终稿 = 基准屏宽 × `ground_h`(`battle_layout.tres` 新增字段,地面层实装批回填);本件是极宽薄条,平台无对应宽高比时按横向可平铺纹理条出图(左右无缝,宽度取平台方档,高度取 `ground_h` 的整数倍),终稿裁/平铺到目标宽高比,禁横向拉伸。试片阶段可按构图比例先出,终稿尺寸读表。
**出图画布**:终稿 = 基准屏宽 × `ground_h`(`battle_layout.tres` 字段已回填 100);本件是极宽薄条,平台无对应宽高比时按横向可平铺纹理条出图(左右无缝,宽度取平台方档,高度取 `ground_h` 的整数倍),终稿裁/平铺到目标宽高比,禁横向拉伸。试片阶段可按构图比例先出,终稿尺寸读表。
**正向提示词**:
@@ -167,11 +167,11 @@ Do not add any of the following: realistic, photorealistic or 3D rendering; pain
## 5. 待裁与待办(不阻塞提示词成文)
1. **三张背景按 `board_type` 选图**——游戏代码改动,走需求卡片+迭代;背景 `wall_ambient` tint 退役,棋盘/世界的该槽保留。
2. **`ground_h` 字段**——布局表新增字段,地面层实装批回填;本卡试片按构图比例,终稿读表。
2. **`ground_h` 字段**——布局表新增字段,已由实装批回填 100〔2026-11-02 迭代 48〕;本卡试片按构图比例,终稿读表。
3. **冷/灰色入板**——underdark / deep_underdark 需要的冷蓝灰、灰黑与矿脉色按 art-bible §4.1 战斗屏场景环境子板两道门入板;三张背景共用该子板 ≤32 色。
4. **地面层出图工艺**——极宽薄条;默认横向可平铺纹理条(左右无缝);若作者要整幅不拼接,另议。
5. **小石台 `scene_stage_plaza.png`**——先保留;是否退役归实装批/后续裁决。
6. **四柱光柱程序层退役**——光柱不迁入背景;背景资产入包后该程序层退役(代码批)。
6. **四柱光柱程序层退役**——光柱不迁入背景;该程序层已随背景实装批退役〔2026-11-02 迭代 48〕。
7. **风格前缀**——首张 dungeon 背景试片后由作者确认,确认后才出另外两张与地面层。
8. **可选要素池**——按 §3.2 可选项本版关闭;要加走本卡修订。
+31 -24
View File
@@ -2,8 +2,8 @@
## 文档状态
- 版本:1.28
- 最近更新:2026-11-02(迭代 47 反哺点落文——营地域六件归属行增补〔UiCampModals/CampSceneView/营地四子界面视图族/camp_esc_overlay+MainEscFlow/CampHudBand/CampRefreshBus〕+D1 营地面现状化+ui_registry 行子容器与合同槽换代;沿革查 git)
- 版本:1.35
- 最近更新:2026-11-04(架构审查 5.2 文档漂移订正并入 P1 余项批之后——主角账三件与刷新账件四行补登记替代失效的 HeroLedger 行、MetaProgression 基础层补登记行(四 Autoload 唯一跨 Autoload 依赖件)、拆件定稿节冻结计数摘除(活体清单不冻结计数)、CurioStop 行落账指称随拆件改指;EC8 热重载规格经用户裁决保留原状(实装排期另立待办条目)、一度摘除已撤回,「抗热重载」快照句随规格保留;沿革查 git)
- 引擎:Godot 4.7.2-stable(GDScript 单语言;2026-09-07 锁定)
- 评审模式:solo(`review-mode.txt`,2026-09-12 用户拍板——TD/LP 门禁按 solo 跳过,用户授权架构产出自主推进、迭代期回调)
- 覆盖 GDD:现行全集(根索引=`design/gdd/02-系统清单.md`,文档树构成以根索引为准)
@@ -85,11 +85,12 @@
| 模块 | 独占职责 | 对外暴露 | 消费依赖 | 引擎 API |
|---|---|---|---|---|
| **ConfigDB**(autoload,D2) | 全部玩法数值表与表现层布局配置表(`data/tables/*.tres` + `data/schemas/*.gd`);SCHEMA_VERSION;加载/校验/override/诊断状态机。**行族访问器归位各 schema 表类(表管自己的行查询),本类只留加载/校验/override/诊断门面;表持有成员按域收进四张域容器 Resource(`config_domain_combat/run/crossrun/presentation.gd`——前三件迭代 41 已建件,第四件表现层布局域 2026-10-30 建件,类型化成员 7/7/5/1);三张 resolver 表(board_gen.resolve_row/enemy.resolve_rowset/difficulty.resolve_modifiers)经 `load_tables` 装配段注入各容器,resolver 文件与键零搬移**——红线不变:本类仍是唯一加载与持有单点,"经 ConfigDB 单点读取"=经其持有的表对象 | 类型化域容器属性(每域一张容器);公开面 8(push_diag/is_fatal/reset_diagnostics/diagnostics/diagnostics_count/load_tables/set_reload_gate/reload)、类变量 10 | 无(基础层顶点) | Resource/.tres 加载、autoload 生命周期——LOW |
| **ConfigDB**(autoload,D2) | 全部玩法数值表与表现层布局配置表(`data/tables/*.tres` + `data/schemas/*.gd`);加载/校验/override/诊断状态机。**行族访问器归位各 schema 表类(表管自己的行查询),本类只留加载/校验/override/诊断门面;表持有成员按域收进四张域容器 Resource(`config_domain_combat/run/crossrun/presentation.gd`——前三件迭代 41 已建件,第四件表现层布局域 2026-10-30 建件,类型化成员 7/7/5/1);三张 resolver 表(board_gen.resolve_row/enemy.resolve_rowset/difficulty.resolve_modifiers)经 `load_tables` 装配段注入各容器,resolver 文件与键零搬移**——红线不变:本类仍是唯一加载与持有单点,"经 ConfigDB 单点读取"=经其持有的表对象 | 类型化域容器属性(每域一张容器);公开面 8(push_diag/is_fatal/reset_diagnostics/diagnostics/diagnostics_count/load_tables/set_reload_gate/reload)、类变量 10 | 无(基础层顶点) | Resource/.tres 加载、autoload 生命周期——LOW |
| **SlotStore**(`core/slot_store.gd`,D3 存档槽位域件,已建件——迭代 41 存量债批) | 存档三槽位文件域唯一所有者(自 save_manager 收编槽位族):槽位挂载与模板、激活与建删、槽位摘要窥视(peek 族);改名覆盖原语(_rename_overwrite)留 save_manager(IO 原语单点) | 槽位读写原语族+摘要投影(公开 10/类变量 4;SaveManager 与菜单消费方经 `save.slots.` 直连) | save_manager(注入路径与模板配置);FileAccess——LOW |
| **MetaStateStore**(`core/meta_state_store.gd`,D3 存档内元进度数据件,已建件——迭代 41 存量债批) | 存档内元进度数据的读写唯一层(自 save_manager 收编 accessor 族:钥石/道具解锁/树节点与叉侧/锻造路线/同调/真视/计数器/摘要——数据读写原语,不含业务规则);save_manager 与 meta_progression 双 God Class 的共同病根=该数据域摊在两文件,本件即其归一 | 写口原语 13+只读投影 6(tree_state/forge_state/attune_state/career_state 四投影+keystone_balance/item_unlocked)=公开 19(add_keystone 私有 `_add_keystone`),零 _data 副本零缓存;MetaProgression 业务层与营地/锻造 UI 消费方经 `save.meta_state.` 直连(meta 的纯转发读方法已退役) | save_manager(序列化接线);FileAccess——LOW |
| **MetaProgression**(autoload,`core/meta_progression.gd`,D3 元进度业务层) | 元进度账本服务:钥石收束入账、营地消费定价与秘宝解锁判定的纯被动服务,零信号零外发;数据读写全经注入的 MetaStateStore(`save.meta_state.` 直连);hero_override() 现算不写表(全零=白板合法态——生效注入只走冒险开始参数面显式传参) | 写口族(天赋树购买/叉侧切换/锻造解锁与升级与选中/同调装配切换等)+解锁判定与读投影;**构造双形态**=autoload 装配走 `.new()` 零参+`_ready` 从 autoload 链取依赖(工程序 ConfigDB→RngService→SaveManager→MetaProgression,注册顺序即依赖序),单测/工具走 `.new(db, save)` 直构形态(不入树零 _ready)——**四个 Autoload 中唯一有跨 Autoload 依赖的件(ConfigDB/SaveManager)** | ConfigDB(定价与档位表值);SaveManager(存档访问器,经节点路径延迟取用) | autoload 生命周期——LOW |
| **RngService**(autoload,D2) | master_seed、各流 scope 计数器(封闭流词表现值以 `RngServiceCore.PURPOSE_TAGS` 为准;增流走 P1 评审) | `set_master_seed()`(唯一调用方 C2);`open_stream(stream)` 有状态门面;`derive_at(stream, scope)` 纯函数;只读计数器 | ConfigDB(无) | 无——纯逻辑 |
| **action_economy**(A3) | AP/RAP 账本、last_round_end、轮次相位机 {Idle, Active, Waiting}、结束仲裁;dig_paid 命中施加抽私有单点(_apply_dig_paid_hits——矿脉储能入池面) | 意图与通知布尔面:notify_round_start / request_dig / request_stop / request_refresh(收折后价入参——折价计算归 BattleRefreshFlow 单点)/ notify_settlement_done / notify_combat_end;预授权通道:grant_reserve_ap / finish_round_stop;ap/rap/phase 只读 | ConfigDB(ActionEconomyTable);effect_engine(事件发射 dispatch——基础层内同层引用);B1 回发 next_round_mode/battle_over | 无 |
| **action_economy**(A3) | AP/RAP 账本、last_round_end、轮次相位机 {Idle, Active, Waiting}、结束仲裁;dig_paid 命中施加抽私有单点(_apply_dig_paid_hits——矿脉储能入池面) | 意图与通知布尔面:notify_round_start / request_dig / request_stop / request_refresh(收折后价入参——折价计算归 BattleRefreshFlow 单点)/ notify_settlement_done / notify_combat_end;预授权通道:grant_reserve_ap / finish_round_stop;ap/rap/phase 只读;实测类变量 10 | ConfigDB(ActionEconomyTable);EffectPort(效果端口件——发射经端口单点;2026-11-02 轴戊设计闭合、迭代 49 卡① 建件,effect_engine 直连退役);B1 回发 next_round_mode/battle_over | 无 |
| **variation 定义**(A4) | VariationTable schema(现行 6 行:六 region——贫矿脉 global 行 2026-10-16 用户令屏蔽删行,global 型机制代码保留)与 F1 候选池门控谓词 | `variant_pool(level_index, board_type, node_type="")`(门控三维:unlock+board_types+节点身份——global 行仅 boss/elite 入池,缺省跳过零扰动);`global_variant_row(level_index, board_type, node_type)`(全局型单行决议访问器) | ConfigDB(VariationTable) | 无 |
| **status_container**(B3) | 状态实例容器(战斗域生命周期、跨轮跨图延续) | 5 API:notify_battle_start / apply_effect / query_active / decay_round / notify_battle_end | ConfigDB(StatusEffectTable) | 无(RefCounted) |
| **effect_engine**(内容数据驱动扩展批 iter17 建域) | 零运行时可变状态的系统(见「架构原则」条 8):全同步解释器——事件由宿主在明确代码点位显式调 dispatch 进件,命中序=装载声明序(feats→treasure→树规则)写死保种子复放,不是事件总线/事件循环;事件/事实/效果类型/算子四词表封闭 + 树规则合成订阅六键(posture 每关首轮窗/sense 两组限次 counter 闸·adv_ 前缀走冒险桶跨战斗持久) | rebuild(每战重建订阅表)/`dispatch(ctx, event, payload, facts)`/`validate_trigger_row` + 静态计数口 `counter`·`counter_add`·`counter_spend`·`bucket_of`·`counter_id_legal`(计数器读写只经 EffectContext 引用束,无导出/灌入接口) | ConfigDB(feats/treasure 行集)、EffectContext(四桶引用由宿主持有:round/battle 桶归编排器、level 桶归关卡域、adventure 桶归应用层——RunLedger 已随迭代 39 拆件批退役,桶字典由 adventure_runner 持有) | 无(零随机全确定) |
@@ -101,15 +102,18 @@
| 模块 | 独占职责 | 对外暴露 | 消费依赖 | 引擎 API |
|---|---|---|---|---|
| **board_generator**(A1) | 生成算法(五阶段管线)、BoardGenTable 回填、生成期指标集、合法性谓词(clearable / R₀≠S / min_safe)、可推理率度量(metric_version);生成姿态 = MVP 同步生成 + 加载幕(切片实证 10×10/12×12 同步可接受,WorkerThread 留扩展) | `generate(L, D, rng) -> Board`;度量独立入口×3(推理器 / F3 度量 / 合法性谓词——独立纯函数、同一实现) | ConfigDB(BoardGenTable/VariationTable);board_gen 流(一次 open_stream = 一张图);dig_ap_cost 只读 | 无 |
| **minesweeper_rules**(A2) | 棋盘状态(已开集 O / 封印集 G / 小人位)、三事件面、批次仲裁、install 四不变式 | `install_board(board)`;`settle_batch(intents)`(唯一提交入口);查询只读面(current_board / hero_pos / is_revealed / has_seal 等);`compute_move_path(cell)` 只读;`retire_board()`;三源拒绝(board_face / resource_face / phase)+ sub_reason 封闭枚举 | A1 产物(Board class_name 数据契约);A3 try_spend / last_round_end(迭代 41 由属性改方法)/ 相位 | 无(零表读取、零 UI——切片实证) |
| **minesweeper_rules**(A2) | 棋盘状态(已开集 O / 封印集 G / 小人位)、三事件面、批次仲裁、install 四不变式 | `install_board(board)`;`settle_batch(intents)`(唯一提交入口);查询只读面(current_board / hero_pos / is_revealed / has_seal 等);`compute_move_path(cell)` 只读;`preview_reveal(cell)` 只读预览口(零写入零事件——0 格连锁传播闭包;迭代 50 己案建口);`retire_board()`;三源拒绝(board_face / resource_face / phase)+ sub_reason 封闭枚举 | A1 产物(Board class_name 数据契约);A3 try_spend / last_round_end(迭代 41 由属性改方法)/ 相位 | 无(零表读取、零 UI——切片实证) |
| **unit_container**(B2) | hero/enemy 单位实例(hp/atk/实例池:池快照+冷却+摇定动作+保底计数)、行值快照 | spawn / query_alive / rollable_skills / special_skills / check_trigger_unlocks / set_pending_action / pending_action / basic_streak / commit_action / tick_cooldowns / apply_damage / heal / default_target / check_skill_unlocks / despawn_all(2026-09-16 敌人技能池批:query_beat/query_attack/advance 随行为环退役;rollable_skills/special_skills/check_trigger_unlocks 带 facts 参——2026-10-27 情境条件触发器实装,事实缺键=条件假拦下,百分比事实走阈值式折算) | ConfigDB(EnemyTable/SkillTable/HeroTable) | 无 |
| **reward_economy**(B4) | 格面资源身份映射(install 期预分配、Ready 只读、换图映射消亡)、极性路由字典面((类型, 极性)→ 字典行查询;路由执行归 B1 授予段)、F6 当量供给投影 | 封闭 API:roll_board / query_identity / query_full_snapshot / grant / grant_clear / retire_mapping / polarity_row / phase / weighted_pick;另有 is_mapped 静默布尔投影(批量工具用) | ConfigDB(RewardTable);BattleFxHost 经注入 Callable `luck_bias_query` 取偏运合计(reward_roll 发射与 bias_rewards 求和移至效果层完成);reward_roll 流(scope = 每次 install 批) | 无 |
| **reward_economy**(B4) | 格面资源身份映射(install 期预分配、Ready 只读、换图映射消亡)、极性路由字典面((类型, 极性)→ 字典行查询;路由执行归 B1 授予段)、F6 当量供给投影;装配期摇号面已拆出掷格件 RewardRoller(2026-11-02 轴戊设计闭合、迭代 49 卡① 建件——roll_board 装配序=守卫→复位→委托→收纳→ready;受理账面留守) | 封闭 API:roll_board / query_identity / query_full_snapshot / grant / grant_clear / retire_mapping / polarity_row / phase(weighted_pick 退役——返行选行算子迁掷格件);另有 is_mapped 静默布尔投影(批量工具用);实测类变量 11 | ConfigDB(RewardTable);BattleFxHost 经注入 Callable `luck_bias_query` 取偏运合计(reward_roll 发射与 bias_rewards 求和移至效果层完成);reward_roll 流(scope = 每次 install 批,取号经掷格件) | 无 |
| **helper_items**(A5,切片已实装秘宝域) | HelperItemTable、探测显影语义 | (契约规范源:`../../gdd/systems/跨局循环/秘宝.md`——桥接位:A2 查询接口 + A4 counter_item_ids) | A2 / A4 / B4 | 无 |
| **CurioDeck**(`core/curio_deck.gd`,A5 秘宝域令牌池件,迭代 37 自 AdventureRunner 拆出) | 三选一/商店共享池的持久多重集、抽签(候选抽取)、cap 库存与专长凭证三计数与判定唯一所有者——件只管池与判定,停点编排与兑付推进留冒险编排器 | `draw_candidates(channel)` 抽签;`consume_deck_token` / `consume_pool_purchase` 池消耗;`cap_ok` 上限判定;`feat_ticket_consider` 凭证判定;`stock_snapshot` / `pool_stock` 只读投影;商店购买消费经注入 Callable 链至 CurioStop 兑付单点(迭代 39 起转纯池——bind_handlers 反向回调已退役) | ConfigDB(秘宝令牌行集);注入 RngServiceCore(reward_pick 封闭流,禁自建随机) | 无(RefCounted 纯逻辑) |
| **ShopSession**(`core/shop_session.gd`,商店会话件,迭代 37 自 LevelRunner 拆出) | 关卡商店双模式(legacy 固定三件加定价/pool 共享令牌池)的货架、定价、购买与刷新唯一宿主——账本/钱包/装配集归宿主 LevelRunner(共享引用经 `bind` 注入,出账直接落同一引用改写宿主账本);legacy 模式零 RNG 零池消费(off 对照承载) | 货架与定价只读面(`shop_products` / `shop_shelf` / `current_price` / `shop_refresh_cost`)+写入口(`buy_product` / `buy_pool_item` / `shop_refresh` / `player_request_refresh` / `open_pool`);外部调用面=调用方经宿主 LevelRunner 公开成员 `shop` 直连(调用直连不留委托壳,2026-10-26 Middle Man 裁定;迭代 42 拆除),直连消费的方法=`shop_products`/`current_price`/`purchased_tier`/`buy_product`/`player_request_refresh`/`set_shop_pool`/`pool_price`/`shop_shelf`/`shop_refresh_free_left`/`shop_refresh_cost`/`shop_refresh`/`spend_gp`/`buy_pool_item`/`is_shop_pool`/`shop_bp_shelf`/`shop_bp_visit_buys`(另白盒两入口仅测试侧:`_draw_shelf`/`_spend_discounted`);set_shop_pool 调用面=pool 注入经 LevelRunner 构造 ctx 供给(构造期内部直调,原委托块注释「AdventureRunner._start_current_level 唯一调用方」系陈旧表述、随壳删除作废),测试面直连 `shop.set_shop_pool` | ConfigDB(商店行集);注入 RngServiceCore;宿主钱包/账本引用;pool 模式令牌消耗与判定经注入 Callable 转 CurioDeck | 无 |
| **HeroLedger**(`core/hero_ledger.gd`,冒险域主角实体账,已实装(2026-10-27 迭代 39 拆件批)) | 冒险生命周期主角数值与获得记录唯一所有者:生命与 GP 钱包(gain/spend/clear 单写原语,钱包事件发射点归件)、锻造强化快照、调试百分比、攻击/甲类型轴快照、特性持有集(活引用注入——关内兑付当关生效)、本局钥石增量与逐杀明细、真视使用记录;获得记录三层结构=获得记录列表(三选一件/商店购买/战末奖励各一条)→属性增益明细(带来源指回)→四轴汇总(由明细推导);生效上限与回血封顶公式单点归件 | 构造注入;单写原语族+只读投影;断点自交片段(账本键+获得日记键) | ConfigDB(表值读取);由 AdventureRunner 冒险开始创建、注入 CurioStop/level_runner/ShopSession/战斗 encounter | 无(RefCounted 纯逻辑) |
| **HeroStats**(`core/hero_stats.gd`,主角数值账件,已实装(2026-10-27 迭代 39 拆件批——原 HeroLedger 登记行拆件替代)) | 冒险生命周期主角数值域唯一所有者:生命账与特性持有集(活引用注入——关内兑付当关生效)、锻造强化快照、调试百分比通道、攻击/甲类型轴快照、生效上限/攻击/护甲公式与回血封顶公式单点、续玩生命钳制收口;生效公式经注入 GainJournal 只读引用取加算区汇总(无反向引用不成环) | 构造注入;单写原语族+只读投影;断点自交片段(账本键) | ConfigDB(表值读取);注入 GainJournal(只读);由 AdventureRunner 冒险开始创建、注入战斗 encounter | 无(RefCounted 纯逻辑) |
| **GainJournal**(`core/gain_journal.gd`,加算日记件,已实装(2026-10-27 迭代 39 拆件批)) | 统一冒险加算区与获得记录唯一所有者:获得记录三层结构=记录列表(三选一件/商店购买/战末奖励各一条)→属性增益明细(带来源指回)→四轴汇总(由明细同步维护);三写通道统一走 gain_bonus 单写原语(source_class=curio_pick/shop_product/battle_export);本局钥石增量与逐杀明细、真视使用记录、商店已购档数记账同域 | gain_bonus 单写原语;记录与汇总只读投影;断点自交片段(获得日记键) | 由 AdventureRunner 冒险开始创建、注入 CurioStop/level_runner/ShopSession/战斗 encounter(战末 bonus 四轴经 gain_bonus 汇入) | 无(RefCounted 纯逻辑) |
| **GpWallet**(`core/gp_wallet.gd`,GP 钱包件,已实装(2026-10-27 迭代 39 拆件批)) | 冒险局内货币唯一所有者(LevelRunner 与 ShopSession 读写全指此单点;冒险开始=0、收束清零,不入存档不入摘要) | gain/spend/clear 单写原语 | 由 AdventureRunner 冒险开始创建;宿主与商店经注入引用读写 | 无(RefCounted 纯逻辑) |
| **RefreshBank**(`core/refresh_bank.gd`,刷新账件,已实装(2026-10-27 迭代 39 拆件批)) | 三选一刷新三源账唯一所有者:X 刷新件每碰三选一重给(优先消耗不结转)/Y 营地升级行冒险周期池(用完即无)/刷新券存量账(冒险级跨停点持久)+GP 付费刷计数与报价公式;零停点态依赖(免费/付费支出的编排归 CurioStop,本件只记账) | 支出与余量原语+报价公式;断点自交片段(refresh_stock/attune_refresh_y 两键,Y 缺键回退参数面) | ConfigDB(刷新件与营地升级行表值);注入 CurioStop 支出路径 | 无(RefCounted 纯逻辑) |
| **AttuneLoadout**(`core/attune_loadout.gd`,同调配装件,已实装(2026-10-27 迭代 39 拆件批)) | 装备中的秘宝件对象集唯一所有者(每件内含充能单位与重置周期);同调充能的物化行为唯一事实源——种行/补行改写时同步(RunLedger 充能字典轨与差额对账函数退役);旧档 aux_items 同调行迁移归件 | 构造注入;充能查询/消耗/按周期重置原语;断点自交片段(attunement_charges 键,键名与策略不变) | ConfigDB(秘宝行集);TreasureItems(同调行投放面);注入战斗使用路径 | 无 |
| **CurioStop**(`core/curio_stop.gd`,三选一停点件,已实装(2026-10-27 迭代 39 拆件批)) | 三选一停点编排唯一所有者(架构原则 9 本域承载):停点三态(关卡完成三选一在途/已兑付待推进/奖励节点三选一在途)、刷新三源账(刷新件 X/营地池 Y/刷新券存量/付费刷新计数)、兑付方法族(pick/refresh/redeem/skip)、凭证出箱(RAP/时沙待注入);三选一信号面自带;零自动推进停点语义承载 | 对外=开停点/刷新/兑付/放行谓词/交断点片段五组入口+信号面(curio_choice_presented/curio_resolved);由 AdventureRunner 关卡完成受理时调用 | ConfigDB;注入 CurioDeck(抽签/摘牌)与 HeroLedger(落账);随机只经 CurioDeck 的 reward_pick 封闭流 | 无 |
| **CurioStop**(`core/curio_stop.gd`,三选一停点件,已实装(2026-10-27 迭代 39 拆件批)) | 三选一停点编排唯一所有者(架构原则 9 本域承载):停点三态(关卡完成三选一在途/已兑付待推进/奖励节点三选一在途)、刷新编排(三源账面归 RefreshBank 件、查停点态→支出→重抽重发编排留本件)、兑付方法族(pick/refresh/redeem/skip)、凭证出箱(RAP/时沙待注入);三选一信号面自带;零自动推进停点语义承载 | 对外=开停点/刷新/兑付/放行谓词/交断点片段五组入口+信号面(curio_choice_presented/curio_resolved);由 AdventureRunner 关卡完成受理时调用 | ConfigDB;注入 CurioDeck(抽签/摘牌)、HeroStats 与 GainJournal(兑付落账单写原语)、RefreshBank(刷新支出);随机只经 CurioDeck 的 reward_pick 封闭流 | 无 |
| **breakpoint_store**(`core/breakpoint_store.gd`,冒险域·断点组装与回放件,已建件——迭代 45) | 存档断点组装与回放唯一承载(自 adventure_runner 收编 6 成员+函数族):断点快照拼盘、回放回填、读侧策略分发;`BREAKPOINT_FIELDS` 27 键登记单源随件(键名/策略标签/键序冻结) | 构造=引用束注入(九引用束成员解包为原名成员——保迁移函数体逐字);`resume_adventure` 留宿主(壳+宿主侧回填语句——R2 所有权缝分家);断点键面零变化;实测类变量 15(贴顶禁再增) | adventure_runner(宿主);注入主角账三件与 curio/stop/bank/loadout 引用 | 无(RefCounted 纯逻辑) |
### 功能层
@@ -117,9 +121,9 @@
| 模块 | 独占职责 | 对外暴露 | 消费依赖 | 引擎 API |
|---|---|---|---|---|
| **battle_orchestrator**(B1) | 段序骨架(七段结构冻结)、轮 facts 缓冲、可回放步骤流、[明细行协议](../../gdd/systems/战斗循环/战斗结算.md#明细流水每一行都能指回你刚才的哪一步棋)(基础行型+扩展行两层 + 字段分层,词表以 owner「明细流水」节为准)、条款③⑤闭合对账、**战斗域全部跨系统调用权**、效果引擎宿主面与树规则挂点施加面(**已拆出 BattleFxHost 并实装(2026-10-28 迭代 40——battle_fx_host.gd/reward_grant.gd 两件在库,效果引擎宿主面归 BattleFxHost 行承载,拆件细则见「战斗编排域拆件定稿」节);2026-10-29 零豁免裁设计闭合:RoundCycle/BattleFacts 两新件随批(宿主 38→15、S13 豁免第三条注销——见下两行与定稿节轴丁)**) | `begin_battle(encounter)`;窗口/刷新意图提交面(扮演 D1);`level_clear()`;步骤流(输出契约) | B2/B3/B4 全调用面(**唯一调用方=B1 域文件集:battle_orchestrator.gd + settlement/ 五段段类 + damage_controller + 拆件后三新件**);A3 request_refresh 代理 + 回发;A2 install/retire + 三事件订阅;A1 generate(attempt 非 scope 事件);D2 SettlementTable + set_reload_gate | 无(零随机、禁 await——切片 88 冒烟实证可回放) |
| **BattleFxHost**(`core/battle_fx_host.gd`,B1 域·效果引擎宿主件,2026-10-26 编排域拆件设计定稿——实现批建件) | 效果引擎挂点施加面唯一承载(自 battle_orchestrator 收编 fx 族):事件发射与事实判定(_fx_emit/_fx_fact)、主角 AC 基线与本轮/本战 AC 累积、bonus_delta 四轴累积(战末宿主 drain 汇入账本)、揭示待兑队列与兑付(含 _fx_revealing 再入闸——同步信号回环防二次缓冲二次兑付)、树规则合成订阅的 round/battle 桶计数器持有(桶随编排器生灭语义不变) | 构造=引用束注入(防 _init max-parameters 新键);bind 时注入 emit Callable(行发射经宿主协议面单点)与兑付 Callable(RewardGrant 授予面——揭示队列 flush 回调);只读投影分两类消费方:AC 累积/bonus_delta 供宿主呈现快照与战末 drain,揭示态供宿主 A2 订阅旁路判定;`luck_bias_for(cell_count) -> int` 偏运合计查询口(体内三参形 dispatch——reward_roll 发射与 bias_rewards 求和自 RewardEconomy 收回本件,RewardEconomy 经注入 Callable 消费) | EffectEngine(EffectContext 引用束);RngServiceCore(fx_reveal 封闭流——除该流外零随机);A2 minesweeper(板读与 fx_reveal 调用);A3 action_economy(queue_ap_delta/charge_layers 读);B3 status_container 读;B2 unit_container 读(hp_ratio);DamageController(set_hero_ac_override);ConfigDB;encounter 引用 | 无(零 await——效果引擎全同步解释器) |
| **BattleFxHost**(`core/battle_fx_host.gd`,B1 域·效果引擎宿主件,2026-10-26 编排域拆件设计定稿——已建件(迭代 40 实装)) | 效果引擎挂点施加面唯一承载(自 battle_orchestrator 收编 fx 族):事件发射与事实判定(_fx_emit/_fx_fact)、主角 AC 基线与本轮/本战 AC 累积、bonus_delta 四轴累积(战末宿主 drain 汇入账本)、揭示待兑队列与兑付(含 _fx_revealing 再入闸——同步信号回环防二次缓冲二次兑付)、树规则合成订阅的 round/battle 桶计数器持有(桶随编排器生灭语义不变);2026-11-02 轴戊设计闭合落地(迭代 49 卡①):效果端口件为业务类朝向机房的窄门面——端口在本件组建、bind_port 组装期转注两业务类,计数器账面收归本件;实测类变量 15 | 构造=引用束注入(防 _init max-parameters 新键);bind 时注入 emit Callable(行发射经宿主协议面单点)与兑付 Callable(RewardGrant 授予面——揭示队列 flush 回调);只读投影分两类消费方:AC 累积/bonus_delta 供宿主呈现快照与战末 drain,揭示态供宿主 A2 订阅旁路判定;`luck_bias_for(cell_count) -> int` 偏运合计查询口(体内三参形 dispatch——reward_roll 发射与 bias_rewards 求和自 RewardEconomy 收回本件,RewardEconomy 经注入 Callable 消费) | EffectEngine(EffectContext 引用束);RngServiceCore(fx_reveal 封闭流——除该流外零随机);A2 minesweeper(板读与 fx_reveal 调用);A3 action_economy(queue_ap_delta/charge_layers 读);B3 status_container 读;B2 unit_container 读(hp_ratio);DamageController(set_hero_ac_override);ConfigDB;encounter 引用 | 无(零 await——效果引擎全同步解释器) |
| **RewardGrant**(`core/reward_grant.gd`,B1 域·奖励授予件,2026-10-26 编排域拆件设计定稿——实现批建件) | 奖励授予唯一兑付管线(自 battle_orchestrator 收编 grant 族):极性字典路由与封印溢价兑付(_grant_routed)、三种行应用(flat/percent/gp)、伤害单据提交面(_submit 族)、清图奖励与身份授予、秘宝使用编排(use_treasure 四步)、战斗域 GP 缓冲 escrow 与授予段暂存伤害闸(_defer_board_damage/_deferred_board) | use_treasure 编排入口(treasure_interact_controller 经组合根现值回调直连);授予入口(结算段类直调);只读投影(escrow 读与 GP 掉落合计——宿主呈现快照与 _roll_gp_drop 消费) | B4 RewardEconomy(polarity_row/grant);B1 域 DamageController(开单);BattleFxHost 引用(treasure_used 事件发射与计数器消耗);A2 minesweeper(校验回调/fx_reveal/remove_mines_in);A3 action_economy(相位闸/grant_ap/queue_ap_delta);B3 status_container(apply_effect/池读);B2 unit_container(hero_unit/heal);ConfigDB;注入 emit Callable、宿主 fatal Callable(battle_result 状态机唯一写点留宿主)、宿主 attune 读投影(_attune_safe_seen)、encounter 账本引用;TreasureItems 经宿主 setter 转发注入(库存注入时序在宿主构造之后) | 无(零随机零 await——授予期零随机口径,roll 值授予前已定) |
| **damage_controller**(B1 域·伤害单据管线) | 伤害单据唯一兑现管线(单据九栏目声明→分量掷点/克制修正/伤害下限归一→明细行发射;双方同规);`damage_taken` 唯一发射口(_emit_hero_damage_taken)+唯一消费族(_apply_hero_damage_effects)——敌方攻击/地形/危险格/错误封印直伤四路径统一发射,board_flat_hero 结账前统一发射 | 兑付入口(编排侧开单)+ fx 揭示回调注入位 | B2 单位实例(单据目标传入);B1 注入(EffectContext 引用束与编排回调) | 无 |
| **damage_controller**(B1 域·伤害单据管线) | 伤害单据唯一兑现管线(单据九栏目声明→分量掷点/克制修正/伤害下限归一→明细行发射;双方同规);`damage_taken` 唯一发射口(_emit_hero_damage_taken)+唯一消费族(_apply_hero_damage_effects)——敌方攻击/地形/危险格/错误封印直伤四路径统一发射,board_flat_hero 结账前统一发射 | 兑付入口(编排侧开单)+ fx 揭示回调注入位;实测类变量 12 | B2 单位实例(单据目标传入);B1 注入(EffectPort 端口引用——轴戊设计闭合改经端口发射,迭代 49 卡① 建件;EffectContext 引用束与编排回调收归宿主侧 BattleFxHost 域,业务类零引擎直连) | 无 |
| **BattleRefreshFlow**(`core/battle_refresh_flow.gd`,B1 域·换图刷新流程件,已建件——迭代 46) | 弃图刷新流程唯一承载(自编排器收编):刷新可用性门(相位/每轮上限/储备门槛)、折后价单点(_effective_refresh_cost——专长行声明序第一命中、floor 取整、can 与执行同源)、换图执行序(扣储备→used+1→旧资源退役→旧板退役→装新板→board_refreshed 成功事实登记) | can_refresh/execute 两公开入口;调用路径呈现层→编排器两公开方法单行转发→本件;A3 request_refresh 收折后价入参 | 编排器(宿主,B1 域内唯一调用方约束同族适用);A3 action_economy(折价扣费与拒绝判据);A2 装板壳(装板与退役);RewardGrant(apply_board_refreshed 成功事实消费);feats 折价行经 ConfigDB;static_scan S7_B1_SET 已增补本件(判据口径不变) | 无(零随机零 await) |
| **BoardInstaller**(`core/board_installer.gd`,B1 域·装板域件,2026-10-29 尾波清偿批设计闭合——实现批建件,细则见「战斗编排域拆件定稿」节轴丙) | 棋盘安装与变异布置域唯一承载(自 battle_orchestrator 收编装板族六函数):生成受理、全局作用域变异决议、资源摇号资格域组装(roll_board 恰一次)、region 变异决议与连通片布置;BoardGenerator 实例随件自建自接线(宿主成员退役)——宿主侧装板后状态复位(封印/完美计数清零、板序推进、board_changed 发射、秘宝叠加层退役)留宿主薄壳,时序逐字保持 | `install(during_round) -> bool` 单入口;构造=引用束注入(rng/db/minesweeper/reward_economy/encounter 只读引用+宿主 fatal Callable——防 _init max-parameters 新键) | A1 board_generator(件内持有);A2 install_board;B4 roll_board/board_skew 写;A4 变异决议行集经 ConfigDB;board_gen/variant_place 两封闭流随件、流名与开流时点零漂移 | 无(零 await——装板全同步) |
| **RoundCycle**(`core/round_cycle.gd`,B1 域·轮循环驱动件,已建件——迭代 44) | 轮循环驱动域唯一承载(自宿主收编 7 成员):结算五段段件持有与驱动、重入门闸、开轮摇号、踩雷账 | 三参直构(host/fx_host_ref/reward_grant_ref——五段构造透传不落成员);段驱动入口由宿主接线调用;实测类变量 8/公开方法 3 | B1 宿主;settlement/ 五段段类;A3 相位读 | 无 |
@@ -128,7 +132,7 @@
| **level_runner**(C1-lite,切片已建) | 关卡域生命周期(节点链推进、共享 B4 + HP 携带、关卡末 level_clear) | 节点推进接口;LevelTable(`level.tres`——节点 enum {battle,reward,rest,boss}、末节点必须 Boss、ConfigDB 跨表校验⑧) | B1(直构 BattleOrchestrator 接线战斗)、ConfigDB LevelTable | 无 |
| **run_structure**(C2) | 冒险/关卡序列、失败重开、**master_seed 唯一接线方** | (契约规范源:`../../gdd/systems/冒险循环/冒险结构.md`) | RngService.set_master_seed、C3/D2 | 无 |
| **difficulty**(C3) | DifficultyTable 回填、全部曲线数值调参所有权、战斗期望表(切片 monte_carlo 为工具原型) | 调参输出(经 D2 R1 解析/编排器传递,禁反向调用生成) | ConfigDB、B1 对账输出(调参约束清单)、A1 报告 C | 无 |
| **meta_progression**(C4,Alpha) | MetaTable、钥石账本、天赋树域(MetaTreeTable 12 节点 v0.8——Fork 一节点双态/row 字段退役/RULE_KEYS 六键/彩蛋特化觉醒,迭代 21 T1 换代)+ 同调位槽位判定(树点亮数单源——T4 槽位收编)。**存档内元进度数据读写原语归 MetaStateStore——已落地(迭代 41):本类纯转发读已退役(消费方直连 meta_state),业务规则与写口编排留本类;hero_override 内联锻造加值与树淬炼 flat;并组三组(forge_select(kind,route_id)/hero_type_axes()→{attack,armor}/tree_camp_status()→{rows,fork_groups});补 meta_state 成员装配** | 公开面 20 定稿:buy_treasure_unlock / refresh_treasure_unlocks / treasure_shop_status / forge_buy_level / forge_buy_unlock / forge_select / hero_type_axes / forge_shop_status / settle_adventure / hero_override / tree_can_buy / tree_buy / tree_toggle_fork / tree_buy_fork / tree_rule_keys / tree_camp_status / toggle_attunement / attune_camp_status / attune_refresh_charges / buy_attune_refresh | D3、C2、ConfigDB | 无 |
| **meta_progression**(C4,Alpha) | MetaTable、钥石账本、天赋树域(MetaTreeTable 12 节点 v0.8——Fork 一节点双态/row 字段退役/RULE_KEY_PARAMS 六键参数字典(迭代 50 键值字典化)/彩蛋特化觉醒,迭代 21 T1 换代)+ 同调位槽位判定(树点亮数单源——T4 槽位收编)。**存档内元进度数据读写原语归 MetaStateStore——已落地(迭代 41):本类纯转发读已退役(消费方直连 meta_state),业务规则与写口编排留本类;hero_override 内联锻造加值与树淬炼 flat;并组三组(forge_select(kind,route_id)/hero_type_axes()→{attack,armor}/tree_camp_status()→{rows,fork_groups});补 meta_state 成员装配** | 公开面 20 定稿:buy_treasure_unlock / refresh_treasure_unlocks / treasure_shop_status / forge_buy_level / forge_buy_unlock / forge_select / hero_type_axes / forge_shop_status / settle_adventure / hero_override / tree_can_buy / tree_buy / tree_toggle_fork / tree_buy_fork / tree_rules(返参数字典——迭代 50 R1 换代)/ tree_camp_status / toggle_attunement / attune_camp_status / attune_refresh_charges / buy_attune_refresh | D3、C2、ConfigDB | 无 |
### 战斗域装配现状(迭代 27——2026-10-17 用户裁写入;RunLedger 段已随迭代 39 拆件批退役,四账去向见下「冒险域拆分(现状登记)」节)
@@ -136,9 +140,10 @@
### 战斗编排域拆件定稿(2026-10-26 用户裁写入——gdstyle 存量债波 1 设计闭合;同日独立审查(grilling+godot-master 双子代理)阻断 8 条去重 6 组全折入本节,v1.18;2026-10-28 迭代 40 实现批合回(合并提交 514457d1),本节为现状登记)
- **轴甲两件**:battle_orchestrator(1313 行/50 成员,S13 全库单文件最大户)按变化原因拆出 BattleFxHost(效果引擎宿主域)与 RewardGrant(奖励授予域)两协作件;宿主保留架构在册职责全部——战斗状态机与生命周期、轮 facts 缓冲(_facts_reveals/seals/path)、A2 三事件订阅、结算五段驱动、attune 族原位、行发射基建(_emit_row/_assert_row_source/_fatal)、呈现投影(presentation/diagnostic_snapshot 唯一出口不变)、刷新面、nest_preview_count(巢穴预告读数口——外部直读面 main.gd 与 treasure_effects_test 随批点名冻结)。拆件动机与残留债口径见待办清单「gdstyle 存量债全量清偿」条目。
- **轴甲两件**:battle_orchestrator(拆件时 S13 全库单文件最大户——行数与成员数为历史读数,冻结计数不登记,查 git)按变化原因拆出 BattleFxHost(效果引擎宿主域)与 RewardGrant(奖励授予域)两协作件;宿主保留架构在册职责全部——战斗状态机与生命周期、轮 facts 缓冲(_facts_reveals/seals/path)、A2 三事件订阅、结算五段驱动、attune 族原位、行发射基建(_emit_row/_assert_row_source/_fatal)、呈现投影(presentation/diagnostic_snapshot 唯一出口不变)、刷新面、nest_preview_count(巢穴预告读数口——外部直读面 main.gd 与 treasure_effects_test 随批点名冻结)。拆件动机与残留债口径见待办清单「gdstyle 存量债全量清偿」条目。
- **轴丙一件(2026-10-29 尾波清偿批设计闭合——实现批建件)**:battle_orchestrator 装板域六函数(`_install_new_board`/`_resolve_global_variant`/`_place_variants`/`_place_variants_apply`/`_variants_fringe`/`_adjacent_to_packs`,约 140 行;全仓仅宿主三调用点——begin_battle/中途刷新受理/player_request_refresh,实查零外部调用)按变化原因拆出 BoardInstaller,职责语句「棋盘安装与变异布置域」(生成→全局变异决议→装板受理→资源摇号→变异布置;单一变化原因=棋盘设置顺序与变异布置算法)。形态两修正(实测裁,与初案「逐字搬运」之差):①宿主复位块不随件——`_install_new_board` 体内五处计数清零、板序推进、board_changed 发射与秘宝叠加层退役留宿主薄壳 `_install_and_reset`,三调用点改调薄壳、时序逐字;②`_board_generator` 全文件仅装板族使用——实例随件自建自接线(fatal 经注入 Callable),宿主成员退役(类变量 38→37,禁无效成员义务)。encounter(23 处跨宿主)与 _reward_economy(18 处)确认留宿主、经引用束注入。文件长键(1035/1000)随本件迁出归绿;attune 族与 begin_battle 受理段序禁动不变。
- **轴丁两件(2026-10-29 零豁免裁设计闭合——实现批建件)**:RoundCycle(轮循环驱动件)与 BattleFacts(战斗事实件)见功能层表两行——宿主 38(轴丙落地后 37)→15,S13 豁免第三条注销;宿主保留面改登记为「战斗状态机与生命周期、行发射基建(_emit_row/_assert_row_source/_fatal)、呈现投影(两快照出口签名不变)、刷新面、nest_preview_count」;attune 族处置由下一条改判;treasure_inventory 注入改址追认——原「外部赋值路径零改址」句失效,level_runner 经 RewardGrant 出口直注;成员级对账以需求卡片为卡内契约(开工 T0 复核)。
- **轴戊两件(2026-11-02 用户裁甲案设计闭合——已建件,迭代 49 卡① 合回,git 提交 848723b5)**:①**效果端口件 EffectPort**(`core/effect_port.gd`)——职责语句「战斗业务类唯一的效果发射出口:收事件与载荷、交效果引擎结算、取回命中批」;实测形态=六 Callable 路由、bind_port 组装期转注、闭面五键 biz_fact、未绑零扰动缺省;`DamageController`/`ActionEconomy` 各持端口引用(同一实例、构造注入),`EffectEngine`/`EffectContext` 引用与计数器账面(value_counter 层值读后清零)收归宿主侧(BattleFxHost 域),业务类零引擎直连、零账面触碰;facts 取值束(dig_streak/charge_layers/rider_tier_*)与入站回调束(reveal/ac)随发射契约归宿主侧注入面;端口**单实现零接口抽象**(无基类无多态——GDScript 无 interface,本案不需要);端口与宿主经注入 Callable 束协作、零宿主对象引用(跨件单向接线条款适用,禁双向强引用)。②**掷格件 RewardRoller**(`core/reward_roller.gd`)——职责语句「装配期格面资源摇号:池行装配、区间行 roll、权重合成(偏运硬币/board_skew 两路投影)」;实测形态=roll 批束四键(mapping/power_roll/clear_identity/clear_power)、选行算子 `_weighted_pick_row` 返表行、fatal 经构造 Callable 链;受理账面(grant/身份查询/快照/retire/polarity_row)留 `RewardEconomy`,衔接面=格→奖励身份映射(掷格件产出、受理件接收);掷格件经注入 RngServiceCore 取号(roll_board 流 scope=每次 install 批不变、取号序零漂移)。行为零变化红线沿本节「验收红线」全款:命中序=声明序、明细行协议词表零触碰、`_ineffective_row` 载荷 deferred 自描述键观测面不回退(2026-11-02 迭代 48 卡① 甲案在案)、EV/MC 锚同种子逐位零漂移——round_flow 逐位回放 134 检查为主证(红线成立);两新件 S13 预算随卡「实现规范预算」三查已过(新件全默认阈值内、gdstyle 基线外新违规 0),`RewardEconomy` 类变量随掷格面迁出 15→11;S7 B1 域文件集与 S8 await 文件集已随批增行。
- **跨件单向接线**:RewardGrant 持 BattleFxHost 引用(treasure_used 事件发射与计数器消耗);BattleFxHost 对授予面走 bind 时注入的兑付 Callable(揭示队列 flush 回调)——禁双向强引用(两件均 RefCounted,环引用随每战新建泄漏)。行发射经 bind 时注入的 emit Callable(协议面单点留宿主——CurioDeck bind_handlers 同款先例,禁件回调宿主私有族);轮 facts 缓冲留宿主、fx 件经注入取值;_seal_consumed 留宿主(与 A2 seal_judged 订阅同域);fatal 经注入 Callable 转宿主 _fatal(battle_result 状态机唯一写点不变)。注入 Callable 亦属接线面、同单向纪律——禁为省参数改持对象引用。授予件对账本零强引用:战斗期消费经 `battle_hooks` 三键回调束(attune_consume/vision_add/negative_blast,bind_battle 缺键 assert),宿主侧三单点记账(2026-10-28 迭代 40 合并适配实装——RunLedger 类已随迭代 39 退役,直持对象引用无处可指)。
- **战斗域读面(RunLedger 退役后)**:账本读经编排器 `_journal()`/`_attune_loadout()` 现值派生(GainJournal/AttuneLoadout,enc 派生、无成员接收);冒险桶经 `enc["adv_bucket"]` 下传 `battle_fx_host.mount_buckets`;战末 bonus 四轴经 `GainJournal.gain_bonus` 汇入(2026-10-27 迭代 39 主角账三件落地、迭代 40 合并适配承接)。
- **settlement/ 段类随动**:段类构造注入直持宿主+两新件三引用(Middle Man 禁令封转发壳——调用点改指),授予段读写面点名:_grant_routed×5/_submit×6/escrow 写/_fx_new_resource_types/_feat_first_dig_used/_fx_bonus_delta 写/_apply_ac_bonus/_fx_enqueue_reveal/_flush_pending_reveals/_grant_clear_reward/counters_ctx;战斗段 _defer_board_damage 复位与 _deferred_board 结账改指 RewardGrant。四个授予段 helper(_feat_yield_adjust/_harmful_variants/_harmful_adjacent/_hits_of)与 _pool_effective/perfect_sweep_earned 留宿主(段类经宿主引用直调,现状形态)。
@@ -150,9 +155,9 @@
### 冒险域拆分(现状登记——2026-10-26 设计闭合,2026-10-27 迭代 39 拆件批实装,本节各条即现行形态)
- **应用层形态**:adventure_runner 退出上帝对象、转薄应用层(DDD 应用层形态)——只留冒险状态机、关序推进、结算受理、建件接线、效果引擎冒险桶字典持有(桶=效果引擎域数据,应用层只锚定生命周期);零领域决策。核心层表三新件行(HeroLedger/AttuneLoadout/CurioStop)即本拆分目标。
- **应用层形态**:adventure_runner 退出上帝对象、转薄应用层(DDD 应用层形态)——只留冒险状态机、关序推进、结算受理、建件接线、效果引擎冒险桶字典持有(桶=效果引擎域数据,应用层只锚定生命周期);零领域决策。核心层表新件行(主角账三件与刷新账件/AttuneLoadout/CurioStop——见基础层与功能层登记)即本拆分目标。
- **CurioDeck 转纯池**:bind_handlers 反向回调退役;商店购买消费经注入 Callable 链至 CurioStop 兑付单点——牌库只管抽签/消耗/cap 判定/凭证计数。
- **RunLedger 退役**:四账各归其主——加算区/购买记录/钥石增量/特性集/真视记录归 HeroLedger,充能归 AttuneLoadout,冒险桶字典归应用层持有;战斗侧 encounter 注入面由单一账类引用改为多路(桶字典+实体账+配装件);ShopSession 账本引用面同步换代,商店属性商品加算改经 HeroLedger 单写原语。
- **RunLedger 退役**:四账各归其主——加算区/购买记录/钥石增量/真视记录归 GainJournal、特性集归 HeroStats(GP 钱包归 GpWallet),充能归 AttuneLoadout,冒险桶字典归应用层持有;战斗侧 encounter 注入面由单一账类引用改为多路(桶字典+实体账+配装件);ShopSession 账本引用面同步换代,商店属性商品加算改经 GainJournal 单写原语。
- **level_runner**:依赖改构造注入一次给齐(后置 setter 群与商店重绑机制退役;注入活引用禁快照——特性集共享引用语义保留);商店白盒转发属性撤除;战斗→关卡信号转发族保留(战斗实例每节点新建,关卡层做战斗域稳定面)。
- **断点片段化**:各件自写自读自己的键(关卡层交关卡域五键片段:node_id/visited_ids/aux_items/shop_shelf/shop_visit_buys),缺键回退策略随领域知识归各件;应用层唯一落盘口(收齐各件片段拼成顶层快照后写盘),写触发点不变(五处);既有 27 键逐键冻结;新增获得日记键沿扩列不升版先例——旧档缺日记回退汇总键直载并跳过比对,日记在档时由日记推导汇总、与留存值不符即报错中止(迁移正确性自检)。2026-10-29 零豁免裁随动:拼盘与读侧策略机组拆出 breakpoint_store(核心层表新行),应用层落盘口与写触发点不变——宿主经件组装快照后写盘,27 键冻结不变。
- **信号直连**:adventure_runner 六转发信号族(node_entered/choices_presented/step_row/round_started/board_changed/wallet_changed)退役;呈现层在 level_started 重取点重订阅关卡对象信号(旧实例连接随引用释放消亡);「关卡开始信号前零发射」契约写进关卡件头注;「恰好连接一次」断言用 is_connected 守卫(release 模板剥 assert);三选一信号面归 CurioStop。
@@ -165,8 +170,8 @@
|---|---|---|---|---|
| **D1 HUD**(呈现面拆分持续换代:组合根 main.gd + 三屏壳(MenuScreen/CampScreen/AdventureScreen)+ views/ 视图单元(现行承载面见「呈现层装配与会话生命周期」节;早期 9 单元清单与 LevelStripView 已随场景换代退役);营地面=场景根+四子界面功能窗口+Esc 浮窗+顶栏 HUD 栏〔迭代 21 四柜台覆盖层已随迭代 47 卡④⑤ 退役〕) | 全部 Control/CanvasLayer(例外:BoardView 棋盘本体与 BattleStageView 站桩本体 = Control 壳 + SubViewportContainer + SubViewport + Node2D 世界〔BoardWorld/CellUnit;StageWorld/StandeeBody——B 区 slot_row 伴随件留壳层〕,探针契约面不变——棋盘 Node2D 迁移批 Phase A 2026-09-23 / 战斗舞台 Phase B 2026-09-26)、输入→意图翻译(**唯一提交路径 = settle_batch,不直调 A3**)、呈现义务状态记录(A2×6 / B2×4 / B3×4 / B4×5 / B1×3) | 视图单元接口(信号外发、setter 只读注入) | A2 compute_move_path / ActionOutcome;A3 ap/rap;B1 步骤流行协议(数据源);ConfigDB display_name | **MEDIUM**:Control / CanvasLayer / draw_* / InputEvent / RichTextLabel——对照 breaking-changes.md 4.5–4.7 条目(CanvasItem 线条无抗锯齿羽化、设备 ID 常量、RichTextLabel 图片参数两轮变化) |
| **组合根拆件**(呈现侧写口子件:curio_interact_controller / camp_shop_presenter / treasure_interact_controller) | 代组合根执行核心写调用(冒险节点后续推进/营地购买与刷新/道具使用——依赖与回调由 main 构造注入) | 各拆件的写入口(仅组合根装配面可达;视图零直连) | 构造注入的核心写引用(推进/商店/道具各域——详见各拆件头注) | 无 |
| **ui_registry**(`presentation/ui_registry.gd`,界面注册面,已建件——迭代 44) | 呈现层接口面唯一承载:层序合同(LAYER_CONTRACT)迁驻与合同寻址、三域句柄容器 ui_screens(9 屏壳与覆盖层句柄)/ui_battle(5 战区句柄)/ui_modals(平铺模态句柄+营地域 UiCampModals 子容器〔六句柄、两段式寻址 `modals.camp.*`——迭代 47 卡⑥〕+ModalFlow;层序合同营地槽换代=camp_overlay 退役、换 camp_scene+四子界面+camp_esc_overlay——迭代 47 卡④⑤);组合根经其一级寻址接线,探针挂载假设迁移为 `main.ui.<域容器>.<句柄>`;七个探针别名/转发成员随批消灭 | 三容器属性+合同寻址口(RefCounted 门面,不挂树、零会话期引用);四件(UiRegistry/UiScreens/UiBattle/UiModals)类变量 3/9/5/14,ModalFlow 随 UiModals 容器构造即建;UiCampModals 营地域子容器随卡⑥(ui_modals 类变量 14→14——删六平铺增一子容器引用) | 构造注入:三屏壳、覆盖层、战区句柄、ModalFlow(main_ui_build 交付随之改型) | 无(RefCounted) |
| **UiCampModals**(`presentation/ui_camp_modals.gd`,营地域句柄子容器,已建件——迭代 47 卡⑥) | ui_modals 营地域六句柄唯一容器(场景根/四子界面/Esc 浮窗/HUD 栏),句柄寻址两段式 `modals.camp.*`;ui_modals 平铺面收窄 | 子容器属性+六句柄只读投影;main_ui_build 装配交付 | 构造注入(六视图句柄);ui_modals(父容器挂载) | 无(RefCounted) |
| **ui_registry**(`presentation/ui_registry.gd`,界面注册面,已建件——迭代 44) | 呈现层接口面唯一承载:层序合同(LAYER_CONTRACT)迁驻与合同寻址、三域句柄容器 ui_screens(9 屏壳与覆盖层句柄)/ui_battle(5 战区句柄)/ui_modals(模态句柄按域分三子容器——局内冒险域 run/菜单与跨语境域 menu〔两子容器迭代 49 卡② 新建〕/营地域 camp=既有 UiCampModals〔六句柄、两段式寻址 `modals.camp.*`——迭代 47 卡⑥〕,三子容器纯字段、两段式寻址 `modals.run.*`/`modals.menu.*`/`modals.camp.*`)+模态编排件 ModalFlow 直驻本面(自 UiModals 升格 UiRegistry 直持——迭代 49 卡②);层序合同营地槽换代=camp_overlay 退役、换 camp_scene+四子界面+camp_esc_overlay——迭代 47 卡④⑤;组合根经其一级寻址接线,探针挂载假设迁移为 `main.ui.<域容器>.<句柄>`;七个探针别名/转发成员随批消灭 | 三容器属性+flow+合同寻址口(RefCounted 门面,不挂树、零会话期引用);register_layer 迁驻注册面;四件类变量 UiRegistry 4/UiScreens 9/UiBattle 5/UiModals 3(run/menu/camp 三子容器纯字段——ui_modals 平铺面清零,12 平铺句柄全数迁 run/menu 两子容器,分域纪律册级化);ModalFlow 随 UiRegistry 构造建立(构造时点与原形态等价——注册面构造点先于装配,迭代 49 卡②) | 构造注入:三屏壳、覆盖层、战区句柄、ModalFlow(main_ui_build 交付随之改型) | 无(RefCounted) |
| **UiCampModals**(`presentation/ui_camp_modals.gd`,营地域句柄子容器,已建件——迭代 47 卡⑥) | ui_modals 营地域六句柄唯一容器(场景根/四子界面/Esc 浮窗/HUD 栏),句柄寻址两段式 `modals.camp.*`;ui_modals 平铺面已清零(12 平铺句柄全数迁 run/menu 两子容器——分域纪律册级化,迭代 49 卡②) | 子容器属性+六句柄只读投影;main_ui_build 装配交付 | 构造注入(六视图句柄);ui_modals(父容器挂载) | 无(RefCounted) |
| **CampSceneView**(`views/camp_scene_view.gd`,营地场景根视图,已建件——迭代 47 卡④) | 营地场景图唯一呈现件:十层贴图铺底(层序按 layout 表 z 序;`camp_scene_layout.tres` fail-fast 校验+七命中区几何红线——camp_scene_layout_test 承载)、七物件命中区命中即发 object_pressed(组合根路由大门/篝火/笔记本/四界面)、反参照纪律(场景根零文字按钮)、登记模态初始隐(boot 态不盖菜单) | 构造注入(贴图经 `UiKit.TEX_CAMP_*`、layout 表经 ConfigDB 表现域容器);object_pressed 信号外发;open/close 经营地域子容器寻址 | camp_screen(宿主挂载);ConfigDB;组合根(路由消费) | Control+TextureRect 树 |
| **营地四子界面视图**(`views/camp_sub_view_base.gd`+forge_view/tree_view/treasure_view/codex_view,功能窗口公共壳+四件,已建件——迭代 47 卡④) | 营地五功能窗口的四个承载视图(锻造工坊/天赋树/秘宝匣/图鉴)+公共壳(窗口壳/行板/关闭钮;生涯页挂笔记本路由不经此族);模态栈单口 open/close、五窗互斥单开;presenter 承接面零回表(树购买/锻造三意图经既有写口族) | 各 view open/close+意图信号外发;关闭钮 pressed | camp_shop_presenter/MetaProgression 写口(经组合根);CampRefreshBus(刷新广播消费) | Control |
| **camp_esc_overlay+MainEscFlow**(`views/camp_esc_overlay.gd`+`presentation/main_esc_flow.gd`,Esc 浮窗视图+四态路由件,已建件——迭代 47 卡⑤) | Esc 浮窗三钮视图(返回主菜单/设置/退出)+Esc 四态路由静态件(根态唤起/再按关窗/功能窗开着先关最上层窗〔camp.md v2.3 定稿覆盖卡面 Q1 甲〕/设置开态不误关;菜单语境不唤起);**main._unhandled_input=产品码首个键盘输入入口**(契约 9——事件驱动、禁 Input 轮询、不挂 ui_cancel、pressed 非 echo) | flow.open/close 路由口;三钮 pressed 意图信号(经组合根接线) | 组合根(_unhandled_input 前置与意图消费);模态栈(关窗单口);screen_flow(设置/返回动线) | Control+静态件 |
@@ -179,7 +184,7 @@
| **board_resolvers**(`presentation/board_resolvers.gd`,迭代 37 拆出) | 棋盘每格渲染数据的只读解析回调四函数(奖励徽章身份——挖掘期 Active 相位内、地形变异数字遮蔽与角标、调试加成生效值)——有态绑定件,与无态静态投影族 HudPresenter 职责互斥 | 构造注入 db、调试浮窗与结算活态取值,产出绑定 Callable 供组合根接线 | ConfigDB / DebugOverlay / 结算活态取值 Callable | 无(纯投影) |
| **main_ui_build**(`presentation/main_ui_build.gd`,迭代 37 拆出) | `_build_ui` 八步拆分件——组合根 UI 装配分步承接(三屏壳实例化、视图句柄接线、覆盖层装配与模态编排注入按步拆开);main 侧留同名薄委托,装配序与 z 序零改动 | 分步静态函数(成员访问经 root 显式传入) | 层序逻辑不在此件——唯一事实源=`ui_registry.LAYER_CONTRACT`+`ui.apply_layer_contract(root)`(迭代 44 迁驻注册面) | 同 D1(Control 装配面) |
| **main_adventure_flow**(`presentation/main_adventure_flow.gd`,迭代 37 拆出) | main 冒险流程族——菜单开局/续玩后的冒险编排接线、节点事件分发、终局面与选路屏开合;逐字搬运,main 侧留同名薄委托(探针 `main.X` 路径零迁移) | 流程静态函数(root 显式) | 局态全局住 run_scope 节点——本件零成员态、零新增信号连接(连接语句随原段搬运) | 无 |
| **main_overlay_flow**(`presentation/main_overlay_flow.gd`,迭代 37 拆出) | main 浮层流程族——设置/状态面板/生涯页/选档界面/图例/钱包事件的开合与数据投喂;逐字搬运,main 侧留同名薄委托 | 流程静态函数(root 显式) | 全部开合走组合根模态编排口(`root.ui.modals.flow.open/close`)——本件零成员态 | 同 D1 |
| **main_overlay_flow**(`presentation/main_overlay_flow.gd`,迭代 37 拆出) | main 浮层流程族——设置/状态面板/生涯页/选档界面/图例/钱包事件的开合与数据投喂;逐字搬运,main 侧留同名薄委托 | 流程静态函数(root 显式) | 全部开合走组合根模态编排口(`root.ui.flow.open/close`——ModalFlow 自 UiModals 升格 UiRegistry 直驻,迭代 49 卡②)——本件零成员态 | 同 D1 |
| **main_debug_flow**(`presentation/main_debug_flow.gd`,迭代 37 拆出) | main 调试流程族——调试浮窗开合与上下文同步、批量模拟入口、两层调试对局起手、诊断转储;逐字搬运,main 侧留同名薄委托 | 流程静态函数(root 显式) | 调试会话状态机归 debug_session.gd——本件只接线与出 UI,零成员态 | 同 D1 |
| **TilePalette**(`presentation/views/tile_palette.gd`,迭代 37 拆出) | 瓦片排版/装载:高墙/地面瓦片整批装载与运行时镜像合成、地板明度归一、数字墨族按板自适应判据、格坐标确定性散列与十六正交情形墙瓦片查表 | 查表族(读件持棋盘引用——棋盘视图 rebuild 经 `bind_board` 同步);装载缓存七成员持于件内(同板型零重载、换板重载时序同源) | 零绘制面、零玩法数据写入(绘制调用面留棋盘视图);纹理路径单点在件内 | Resource 纹理加载——LOW |
| **HeroSprite**(`presentation/views/hero_sprite.gd`,迭代 37 拆出) | 英雄精灵四态与落位装配(落位与位移演出、撞墙帧闪、挖掘弹跳、脚底锚与持握手位出口) | 由棋盘视图 `_init` 建为子件(注入世界根与壳层容器引用)——精灵本体经世界根 ensure_hero 建于 SubViewport 世界内,本件只驱动其状态 | BoardWorld 世界根;素材缺位=零精灵(棋盘视图字形「人」回退路径在役) | Node2D / create_tween(Tween 系 Node 方法——MEDIUM 域对照 breaking-changes.md) |
@@ -197,7 +202,7 @@
### 三屏壳与组合根句柄面
- 呈现场景拆为三屏壳:MenuScreen(开始菜单屏)/CampScreen(营地屏)/AdventureScreen(冒险屏——内含关卡地图与战斗两容器)。
- 屏成员寻址自实现批起迁经界面注册面(**已建件——迭代 44**):探针挂载假设 `main.X` 迁移为 `main.ui.<域容器>.<句柄>`(ui_screens/ui_battle/ui_modals 三域容器,约 867 处探针与系统测试引用随批改址);原 S13 豁免登记〔2026-10-27「组合根类变量面即探针契约面」〕注销;main.gd 类变量 49→15,注册面形态见「模块归属·呈现层」表 ui_registry 行;ModalFlow 实例随 UiModals 容器构造建立(装配早期注入点依赖其先在座);取证探针 shot_probe/fx_shot_probe 随批改址;局态一律住 RunScope 节点,禁在屏/视图侧持有局态引用。
- 屏成员寻址自实现批起迁经界面注册面(**已建件——迭代 44**):探针挂载假设 `main.X` 迁移为 `main.ui.<域容器>.<句柄>`(ui_screens/ui_battle/ui_modals 三域容器,约 867 处探针与系统测试引用随批改址);原 S13 豁免登记〔2026-10-27「组合根类变量面即探针契约面」〕注销;main.gd 类变量 49→15,注册面形态见「模块归属·呈现层」表 ui_registry 行;ModalFlow 实例随 UiRegistry 构造建立(构造时点与原 UiModals 形态等价——注册面构造点先于装配,迭代 49 卡② 升格直驻);取证探针 shot_probe/fx_shot_probe 随批改址;局态一律住 RunScope 节点,禁在屏/视图侧持有局态引用。
- **组合根拆件**=组合根构造注入、代组合根执行核心写调用的呈现侧子件(现行三件:curio_interact_controller/camp_shop_presenter/treasure_interact_controller——冒险节点后续推进、营地购买与刷新、道具使用)。视图禁直连拆件;核心写调用的可达路径仍是「视图→信号→组合根(含拆件)→核心」,依赖规则与组合根单点装配不变。成员见「模块归属·呈现层」表。
### 视觉层装配合同
@@ -266,7 +271,7 @@
|---|---|---|---|
| **worktree-guard**(ZCode PreToolUse) | `.zcode/hooks/worktree-guard.sh`(本机件,不入 git) | agent 侧车道纪律:主工作区 Edit/Write 与主区非 merge `git commit` 拦截(豁免 `.zcode/`、`.qoder/`;worktree 内目标快速放行;合并收尾提交凭 MERGE_HEAD 豁免);`git commit --no-verify` 拦截(该旗标仅属用户);iter 分支合回一卡一提交数卡校验;规则闸 | 路径性质+分支名+MERGE_HEAD+git 图 |
验证收拢为合回后本地 CI 全量(post-merge 触发),commit 点零执法;主工作区防污染由 ZCode 层守卫承担——只约束 agent,用户手工改动不受限。子代理覆盖面(2026-10-26 冷启动评估实测):子代理的工具调用不经过 ZCode 层守卫——ZCode 层实际只覆盖主会话工具调用;残余暴露面=子代理写主工作区与蓄意 `--no-verify`(该旗标整族跳过 git 层钩子),属故意越权而非遗忘型失误,与防遗忘的设计目标正交。
验证收拢为合回后远端 CI(post-merge 钩子推送 origin master 触发 Gitea Actions,runner=Mac 本机 host 模式;按改动域分流,分流单点=tools/ci/domain_route.sh),commit 点零执法;主工作区防污染由 ZCode 层守卫承担——只约束 agent,用户手工改动不受限。子代理覆盖面(2026-10-26 冷启动评估实测):子代理的工具调用不经过 ZCode 层守卫——ZCode 层实际只覆盖主会话工具调用;残余暴露面=子代理写主工作区与蓄意 `--no-verify`(该旗标整族跳过 git 层钩子),属故意越权而非遗忘型失误,与防遗忘的设计目标正交。
### 三条判定硬闸现行状态
@@ -278,22 +283,24 @@
背景事实(run_smoke 头注在案):GDScript 运行时脚本错误不改进程退出码、不计入冒烟失败数、且静默中断所在函数剩余断言——2026-09-19 状态记录 83 实证「309 项 0 失败」实为断言未跑全。这是 SCRIPT ERROR 扫描必须存在于判定层的原因。
### 静态扫描域 S1–S8 承接清单
### 静态扫描域 S1–S13 承接清单
静态扫描域规则(2026-09-12 立,沿革见 git commit log;下表为现行事实登记):
| # | 规则 | 状态 |
|---|---|---|
| S1 | 玩法代码禁 `randomize()`、自建 `RandomNumberGenerator`(D2 Rule 5) | **在位**(硬失败;扫描面 game/core + game/presentation) |
| S1 | 玩法代码禁 `randomize()`、自建 `RandomNumberGenerator`(D2 Rule 5) | **在位**(硬失败;扫描面 game/core + game/presentation)。非产品码三目录(`game/tests`/`game/probe`/`game/sim`)不进本闸与 S2——它们自建且**显式定种**的随机源是合法测量口径(同种子对拍改前改后读数),禁的是不定种形态;适用域分档与无机器闸的理由见 code-conventions §4 第 13 条(2026-11-03 架构审查 P1 余项裁:不扩扫描面,人工评审承载) |
| S2 | 禁全局随机函数 `randi()` / `randf()` / `randf_range()`——全局 RNG 绕开 RngService(specialist 补登) | **在位**(与 S1 同段硬失败;实例方法 `.randi()` 排除、`rng-seed-exempt` 豁免注记在案) |
| S3 | core/ 禁 ConfigDB 外 data 表加载(`load(` / `preload(` / `ResourceLoader.load`;schema class_name 直引豁免)(D2 Rule 2) | **在位**(warning 级——class_name 直引误报需人工复核;路径已由裸 `core` 修正为 `game/core`,此前恒零命中静默空转;豁免 config_db.gd 自身=数值单一事实源的正主) |
| S3 | core/ 禁 ConfigDB 外 data 表加载(`load(` / `preload(` / `ResourceLoader.load`;schema class_name 直引豁免)(D2 Rule 2) | **在位**(warning 级——class_name 直引误报需人工复核;路径已由裸 `core` 修正为 `game/core`,此前恒零命中静默空转;豁免 config_db.gd 自身=数值单一事实源的正主)。2026-11-03 架构审查 P1 余项裁**维持 warning 级不升硬**:升硬的前提是先有可靠的直引误报排除判据,该判据未立;本行状态即事实源,禁在别处另列 |
| S4 | core/ 禁 `extends Control/Node2D`、禁 `.tscn` preload(D2 Rule 7) | **在位**(硬失败) |
| S5 | core/ 禁裸引用 autoload 全局标识符(`ConfigDB` / `RngService` 直接写 = --script 模式 parse error)——构造注入 only(specialist 升格) | **在位**(硬失败;形态=标识符后紧跟 `.` 的成员访问,排除注释行与字符串字面量) |
| S6 | core↔core 信号连接只许方法 Callable(禁 lambda 捕获 self);发射者禁持有订阅者反向引用 | **在位**(2026-10-25 落闸:内联 lambda 禁令机器闸——同行与跨行两形态、豁免注记 `s6-signal-exempt`、盘面零存量;「发射者禁反向引用」句静态判据不成熟,归人工评审面承接、不造弱判据) |
| S7 | B1 编排唯一性:B2/B3/B4 API 符号命中文件 ⊆ B1 文件集;A2/B3/B4 零相互直调(B1 AC-43) | **在位**(2026-10-25 落闸:符号清单×B1 域文件集,族内自调用豁免、豁免注记 `s7-b1-exempt`、缺位自检;全符号形态盘面零存量) |
| S8 | 结算路径 `await` 零命中(B1 结算/编排文件集);字面量扫描 = warning 级 + 人工三要素复核(D2 AC-14 口径) | **在位**(2026-10-25 落闸:B1 域文件集 await 零命中,文件集缺位自检、排除注释与字符串;盘面零存量。本行后半句「字面量扫描=warning 级+人工三要素复核」为独立子项、仍归人工面) |
| S8 | 结算路径 `await` 零命中(B1 结算/编排文件集);字面量扫描 = warning 级 + 人工三要素复核(D2 AC-14 口径) | **在位**(2026-10-25 落闸:B1 域文件集 await 零命中,排除注释与字符串;盘面零存量。清单单点=`static_scan.sh` 的 `B1_SET`,S7 的豁免名单由它派生(原两份 14 文件抄本已并点,2026-11-03 架构审查 P1 裁)。自检两件:①清单内文件缺位即红;②**目录域反向对账**——`game/core/settlement/` 实有 `.gd` 未登记进 `B1_SET` 即红(新段类忘登记=await 面静默失效,2026-11-03 补)。反向对账只覆盖 settlement/:装板/授予/效果端口/掷格四件结算码住 `game/core` 根下,纯目录域覆盖不住,根下新增仍由本行「模块归属」B1 登记面+写卡段申报承接。本行后半句「字面量扫描=warning 级+人工三要素复核」为独立子项、仍归人工面 |
域外扩充两件(均硬失败在位):**S9** 类型闸(`tools/audit_type_hints.py`,迭代 27 T5——产品码无类型容器/有值返回缺类型/参数缺类型);**S10** 文件头闸(`tools/audit_file_headers.py`——头注 ≤8 行 + 日期/变更叙事黑名单)。
域外扩充五件(S11/S12/S13 自 2026-09-29 起陆续落闸,本表原先只登记到 S10,2026-11-03 补齐登记面):**S9** 类型闸(`tools/audit_type_hints.py`,迭代 27 T5——产品码无类型容器/有值返回缺类型/参数缺类型;扫描面=产品码三目录);**S10** 文件头闸(`tools/audit_file_headers.py`——头注 `##` 载体+日期/变更叙事黑名单;扫描面=产品码三目录);**S11** 代码注释禁用词闸(扫描面=`game/` 全域 `.gd`/`.tres`/`.md`/`.json`/`.sh`,词表单点取 `design/gdd/术语表.md`);**S12** 效果引擎无状态化旧件零残留闸(扫描面=`game/` 全域 `.gd`/`.tres`,旧符号与旧 id 字面清单为脚本字面值);**S13** 第三方质量规则闸(`tools/gdstyle_gate.py`,钉 gdstyle v0.4.0;扫描面=产品码三目录,存量以 `tools/gdstyle_baseline.txt` 欠账簿登记,判定=基线外新键红、同键数值恶化红)。
S11/S12 扫描面覆盖全域,故 sim/probe/tests 的术语与旧件面**在册**;其余十一闸(S1–S10、S13)扫描面止于产品码,非产品码三目录不受约束——分档理由与各目录的运行期承接通道见 code-conventions §4 第 13 条。**防空转自检现行状态**(本文「三层承载与判定原则」要求扫描面为空即判红):S1–S8 与 S11/S12/S13 各自带空面或缺位自检;**S9/S10 两件已补齐同款自检**(`tools/audit_type_hints.py` 与 `tools/audit_file_headers.py` 缺目录或扫描面零个 `.gd` 一律判红,并绿时打印扫描面件数供核;2026-11-03 架构审查 P1 余项的工程改动批落地,本表此前登记的「静默零命中即 PASS」偏差已清偿)。
### 三层承载与判定原则
+9 -2
View File
@@ -34,6 +34,12 @@
### 1.5 禁止事实约定
任何"大家默认这么做"的惯例必须成文进本文件(或 AGENTS.md)才算存在。写代码时发现未成文但必须遵守的约定 → 当场补条文,不许靠惯性延续。
### 1.6 拆分交接与封装边界
本节管拆分类改动的交接面与封装面,与 §1.1 拆分判据(职责轴)配合使用:§1.1 管怎么切,本节管切完之后件与件之间怎么往来。
1. **拆分交接定义**:拆出一个新类时,交付物必须同时写明职责边界与交接定义——新类构造时需要哪些依赖,由拆出它的类在构造它时一次交给它;新类需要回调拆出它的类的哪些方法,以 Callable 形式交付。两者齐备才算拆分合格。为什么:只切职责不定义交接,新件会伸手回原类内部拿东西,封装从拆件那天起就破了。正面先例=装板件的引用束注入(表数据、随机流、装板所需对象与出错回调一次性交付——架构文档「战斗编排域拆件定稿」节 BoardInstaller 行在册)。
2. **封装边界**:任何代码不得访问其他对象的下划线成员;跨对象往来只走公开方法与属性。为什么:下划线只是命名约定,语言不设防、无编译期检查——此条是封装硬纪律,违者即红。
---
## 2. 契约纪律——跨层/跨类调用的语义
@@ -66,12 +72,13 @@
4. **lambda 捕获循环变量按创建时值**——循环内先落地局部变量再捕获,或用 `bind`。
5. **重命名脚本必须同步 `.uid` 文件**;新增 `class_name` 后必须跑一次编辑器扫描刷新全局类缓存,否则 `--headless --script` 模式解析失败。
6. **`print` 格式占位符与实参类型必须匹配**(`%d` 配 String = 静默输出字面量)。
7. **语言纪律已机器化为 S9 类型闸**——`tools/audit_type_hints.py`,执行载体=静态扫描域 S9(`game/tests/static_scan.sh`),退出码 0=归零。扫描面=产品码(`game/core`+`game/data`+`game/presentation`;probe/sim/tests 不在扫描面——测量面容器直构是既有惯例)。三规则:R1 无类型容器(显式非参数化 `Dictionary`/`Array` 注解)/R2 有值返回缺返回类型(纯副作用缺 `-> void` 属写法面不入闸)/R3 参数缺类型(`_init` 豁免——构造注入面形态自由)。
7. **语言纪律已机器化为 S9 类型闸**——`tools/audit_type_hints.py`,执行载体=静态扫描域 S9(`game/tests/static_scan.sh`),退出码 0=归零。扫描面=产品码三目录(`game/core`+`game/data`+`game/presentation`);非产品码三目录的适用域分档见本节第 13 条。三规则:R1 无类型容器(显式非参数化 `Dictionary`/`Array` 注解)/R2 有值返回缺返回类型(纯副作用缺 `-> void` 属写法面不入闸)/R3 参数缺类型(`_init` 豁免——构造注入面形态自由)。
8. **`:= {}` 推断形态不算债**——`var x := {}` 类赋值推断属类型推断合法面,不入 R1 扫描;只有显式写的非参数化容器注解才算无类型容器。
9. **行级白名单通道 `# type-hint: ignore`**——豁免该行不入 S9;豁免理由必须随行注明(现行例:`board_generator` 四函数的 db 参鸭子型——typed 参拒冒烟夹具 `_BoardRowStub` 注入)。
10. **`# rng-seed-exempt` 标记豁免通道**——S1/S2 随机函数扫描对该行豁免;限定用途=非玩法 RNG 消费面的引擎熵(现行例:组合根种子编辑框空态取 `randi()`——建种子不进玩法封闭流)。
10. **`# rng-seed-exempt` 标记豁免通道**——S1/S2 随机函数扫描对该行豁免;限定用途=非玩法 RNG 消费面的引擎熵(现行例:组合根种子编辑框空态取 `randi()`——建种子不进玩法封闭流);非产品码三目录自建随机源的定种要求见第 13 条。
11. **`--script` 模式禁裸 autoload 标识符**——`ConfigDB`/`RngService` 等 autoload 名在 `--headless --script` 模式编译器不解析(parse error);产品码与测试夹具一律经节点路径取用(`get_node("/root/…")`/`AUTOLOAD_PATH_*` 常量);静态扫描域 S5 硬失败承载在位。
12. **Variant 参数化现行口径**——账本类字典/数组标注 `Dictionary[Variant, Variant]`/`Array[Variant]` 即合格(满足 R1);元素类型精化列后续事项、不入硬纪律,口径变更须用户裁决后续批次另行写入。
13. **静态扫描适用域按来源分档(2026-11-03 架构审查 P1 余项裁)**——S 系静态扫描(S1–S13)的扫描面一律止于产品码三目录,`game/tests`/`game/probe`/`game/sim` 不进任何 S 系扫描面;这三目录的可靠性由运行期通道承接,各通道是:`game/tests`=闸 00/01/02(冒烟·单元与集成·系统测试)、`game/probe`=闸 03/04/05(场景探针与渲染 golden;同目录内 `type_glow_shot_probe` 是人工取证件、`probe_ui_util` 是探针共用面,两者不入闸)、`game/sim`=不入 CI,属用户手动发起的调参与数值测量批量。三目录**允许**自建 `RandomNumberGenerator`,条件=**必须显式定种**(改前改后读数要用同种子对拍,这是全项目测量口径);三目录真正禁止的形态是不定种随机——`randomize()` 与全局 `randi()`/`randf()`/`randf_range()`,一旦命中那次运行结果不可复现,读数与取证一并失效。这条对三目录的部分目前**无机器闸**(S1/S2 扫描面不含它们):扩面需给每处合法定种挂 `rng-seed-exempt` 注记、只拦得住新增,2026-11-03 用户裁不扩,改由本条文字+批末独立验收审计的人工评审承载。术语口径:`tools/run_all_gates.sh` 里的「测量面」指 `game/tests`+`game/sim`(影响面选闸用语,`game/probe` 不在其中——改探针必须跑 03/05),与本条分档无关;本文不再用「测量面」统称这三个目录。
---
+2 -2
View File
@@ -40,10 +40,10 @@
**正面总则**:见名知意——每个名字(概念名、术语、文档与目录名)本身就说清所指,起不出这样的名字多半是概念还没想清;所见即所得——字面意思就是规则的完整意思,有隐含前提就写进句子。两句管语义透明,不与第 8 节指路存根冲突。
文档、评审输出、日志与一切沟通中**禁止自造黑话**——比喻性生造词、只有作者自己懂的缩略语:
文档、评审输出、日志中**禁止自造黑话**——比喻性生造词、只有作者自己懂的缩略语(对话输出面的用语与证据规则归 AGENTS.md「回答风格规则」,不在本节范围):
- 只能使用:(a)人人可懂的直白语言,或(b)游戏行业通用术语(如 flood fill、战争迷雾、连锁展开、结算、增益/减伤)。
- 指代新概念用直白描述性短语(正例:"实测可推理率");确需命名时:首现处附一句白话定义,并登记进 `design/gdd/术语表.md`。
- 指代新概念用直白描述性短语(正例:"实测可推理率");确需命名时:首现处展开成完整白话句(同「通行检验标准」),并登记进 `design/gdd/术语表.md`。
- 唯一例外:玩家在游戏里也会看到的专属名词(道具名、界面用语)。文档内部的机制概念不得造词。
**自造词的三种固定形态(全部禁止)**:
+7 -7
View File
@@ -7,12 +7,12 @@
## 1. 分支纪律(worktree 铁律)
主工作区(master 检出)只作合并落点,一切开发/设计改动禁止直接发生在主工作区(2026-10-31 用户裁恢复;2026-10-30 的「主区直改+直提」车道与 commit 点 pre-commit 直改闸随之退役;验证模型不动——合回后本地 CI 仍是唯一强制验证点):
主工作区(master 检出)只作合并落点,一切开发/设计改动禁止直接发生在主工作区(2026-10-31 用户裁恢复;2026-10-30 的「主区直改+直提」车道与 commit 点 pre-commit 直改闸随之退役;验证模型同构——合回后远端 CI 是唯一强制验证点,2026-11-03 用户裁,细则见本节第 3 条):
1. **worktree 车道(一切面)**:每批先建独立 worktree:`git worktree add ../g-plan2-<任务名> -b <任务分支>`;建区后立刻跑 `tools/setup_worktree_userdir.sh`——给该区独立 Godot user 目录(测试夹具、试玩日志、截图产物不与其他区共用;主区不生成,真实档保持原位)。所有改动与提交都在 worktree 内自由进行——commit 点零钩子检查(`tools/hooks/pre-commit` 已删除)。豁免面仅 `.zcode/`(钩子与配置)与 `.qoder/`(本机 harness 配置)允许主工作区直改——两份实测均不入 git(走 worktree 反而带不进去,改动只对本机生效)
2. **收口顺序(固定)**:**冻结 → 件核 → 并 master → 重塑 → 主区合回 → 删区**——代码与断言改完即冻结,全仓件核 grep 查残留;master 已被别的批次推进时先在 worktree 内 `git merge master` 解冲突(必须在合回之前,合回后才并=CI 验的是中间态);**重塑**=迭代分支(iter<N> 形)合回前执行 `python tools/reshape_cards.py`,把分支线性史按卡末态快照压成一卡一笔(可选追加一笔纯文档收尾),master 台账由此每卡一行——工具自带「重塑前后树逐字节一致」断言与 backup 分支,不改任何文件内容;非迭代批免重塑;然后主工作区 `git merge --no-ff <任务分支>`——这是主区唯一合法写动作(合回守卫对迭代分支数卡校验,未归卡提交拦下)。**合回落地即 `git worktree remove`+删分支(合回即删,2026-09-19 原裁);post-merge 钩子已在合回落地时自动触发 CI,红态不回滚合并——新开修复 worktree(`fix-<任务名>` 分支,非 iter<N> 形免重塑免数卡)修复提交再合,落地复验追绿后删修复区**。游戏类测试(冒烟/单测/MC/探针)批内默认零执行(两入口铁规,见 §4),用户点名或当场问才跑
3. **合回后验证(本地 CI,2026-10-30 用户裁)**:git merge 合回 master 落地后 post-merge 钩子(`tools/hooks/post-merge`)后台触发 `tools/ci_runner.sh merge` 对 master 尖跑一次全量域闸——唯一强制全量验证点;CI 红态下修复合回落地即由 post-merge 钩子复验追绿(红态修复走新开修复 worktree,`fix-<任务名>` 分支,非 iter<N> 形免重塑免数卡;post-commit 钩子保留为红态主区直提兜底触发,绿态与无状态零触发)。重跑判据:同一份字节禁止第二次人手跑;有意义的重跑只剩「验证修复」一类。CI 红不回滚合并——红项记 `game/tests/.gates/ci-status.json`,开工先读 CI 状态,红未修不开新批。跑批起手 `--editor --quit` 刷类名缓存(在册坑:.godot 缓存不入 git,合并后失配假红假绿)。并跑语义=跑完补跑(coalesce):跑批期间新触发不中断当前轮,轮尾对最新尖端补跑,绝不逐笔各跑一轮。**回执等待纪律(2026-11-02 用户裁)**:合回落地即向用户呈报本批总结,回执等待一律以 run_in_background 后台任务运行 `tools/ci_watch.sh <合并提交>`(认领判据与容错细则=该件头注),禁前台 sleep/轮询循环等 CI;后台任务唤醒会话后按回执续行——绿即删区收口,红或超时即呈报走修复批。闸重跑等一切分钟级跑批等待同此纪律
4. **执法分层(全机械,零自觉依赖)**:①`.zcode/hooks/worktree-guard.sh`(PreToolUse,本机件不入 git)——agent 侧:主工作区 Edit/Write 与主区非 merge `git commit` 拦截(豁免 `.zcode/`、`.qoder/`;worktree 内目标快速放行;合并收尾提交凭 MERGE_HEAD 豁免)、`git commit --no-verify` 拦截(该旗标仅属用户)、iter<N> 分支合回的一卡一提交数卡校验、规则闸(写 design//game/ 前核对会话规约读取记录)。②post-merge/post-commit 钩子——本地 CI 触发(仅主工作区;任务 worktree 内的合并不触发)。③git 层不设车道钩子(pre-commit 直改闸已退役)——用户手工改动不受限;ZCode 层只约束 agent(子代理不经守卫层)
3. **合回后验证(远端 CI,2026-11-03 用户裁取代本地 CI)**:git merge 合回 master 落地后 post-merge 钩子(`tools/hooks/post-merge`)自动 `git push origin master` 触发远端 CI(Gitea Actions,runner=Mac 本机 host 模式),工作流按改动域分流(分流算法单点=`tools/ci/domain_route.sh`:游戏码批=两域全量含渲染闸,文档批=文档域秒级闸,纯闸件/管线批=零触发)——唯一强制验证点。回执由 `tools/ci_watch.sh remote` 轮询 Gitea API 写回 `game/tests/.gates/ci-status.json`(合同不变:commit/verdict/red_gates/key_lines/note),agent 开工先读 CI 状态的纪律不变,红未修不开新批。CI 红态不回滚合并——修复走新开修复 worktree(`fix-<任务名>` 分支,非 iter<N> 形免重塑免数卡),修复合回落地即再推再验追绿(追绿同链;本地跑批件 `ci_runner.sh` 与本地追绿钩子 post-commit 已退役)。导入缓存刷新(.godot 不入 git 的在册坑)由工作流「导入缓存刷新」步接管。**回执等待纪律(2026-11-02 用户裁)**:合回落地即向用户呈报本批总结,回执等待一律以 run_in_background 后台任务运行 `tools/ci_watch.sh remote <合并提交>`(认领判据与容错细则=该件头注),禁前台 sleep/轮询循环等 CI;后台任务唤醒会话后按回执续行——绿即删区收口,红或超时即呈报走修复批。闸重跑等一切分钟级跑批等待同此纪律
4. **执法分层(全机械,零自觉依赖)**:①`.zcode/hooks/worktree-guard.sh`(PreToolUse,本机件不入 git)——agent 侧:主工作区 Edit/Write 与主区非 merge `git commit` 拦截(豁免 `.zcode/`、`.qoder/`;worktree 内目标快速放行;合并收尾提交凭 MERGE_HEAD 豁免)、`git commit --no-verify` 拦截(该旗标仅属用户)、iter<N> 分支合回的一卡一提交数卡校验、规则闸(写 design//game/ 前核对会话规约读取记录)。②post-merge 钩子——远端 CI 触发(推送+挂回执等待;仅主工作区,任务 worktree 内的合并不触发)。③git 层不设车道钩子(pre-commit 直改闸已退役)——用户手工改动不受限;ZCode 层只约束 agent(子代理不经守卫层)
## 2. 五段流水线
@@ -44,12 +44,12 @@
5. **涉数值改动先采改前读数**——与改后同随机种子配对比较并写明逐项比对口径;无数值改动禁跑模拟
**实施**
6. **新功能必配新测试**——新增玩法/机制必须配套新测试套件进 `tests/run_all`;没有对应测试的变更不许合并;并按 test-conventions §8 挂进改动—验收对照表,没有对照表行的行为改动同样不许合并
6. **新功能必配新测试**——新增玩法/机制必须配套新测试套件进 `tests/run_all`;没有对应测试的变更不许合并;并按 test-conventions §8 挂进改动—验收对照表,没有对照表行的行为改动同样不许合并。拆件/重构产出的新 core 件不属新增玩法,由 test-conventions §8.3「新增 core 件的覆盖登记义务」承接(被 tests 面点名,或在能力行申报「经宿主链覆盖」),核对动作归本清单第 10 条的收尾提交
7. **验收改动先行声明**——验收变化(基线换代/探针增改/旧断言改判)预先写进需求卡片,禁事后补
**完成**
8. **合回后 CI 验证(唯一强制验证点)**——主工作区 `git merge --no-ff <任务分支>` 落地后 post-merge 钩子自动跑全量域闸(不带参数档,02 全套件),判定与红项落 `game/tests/.gates/ci-status.json`。全量是唯一强制档:跨卡触面、探针与未申报套件的消费漏网只有全量闸能抓(迭代 44 实证),关联档选测的盲区由它兜底。合回前独立验收审计通过(iter 技能第 5 步),未过不合回。该脚本是全部验证闸的**唯一入口、唯一清单与唯一域划分(含选闸算法与套件族映射表)**,闸件增减、分域调整都只改它;**本文与其他文档禁另列闸件清单**(清单散落多处正是 iter27 漏跑 `probe_gate --full` 的成因)。开发期手动跑批按需选档(按文件性质判域:代码面→`--code`,文档件→`--docs`,两类都有→全量;`--code` 关联档选测——02 只跑「需求卡片申报 ∪ diff 推导」并集套件、00 冒烟/01 系统测试/09 静态扫描三件保险恒跑、横切面回落全量——算法见闸脚本),手动跑不构成验收。闸件(`tools/` 下机检脚本与闸壳)自身的改动不占 CI 全量——其质量义务=落批时人工确认闸可跑通且判据口径未变;闸真崩溃时 CI 判红在案(跑不出回执=verdict 红,fail-closed 语义保留)
9. **重跑语义(2026-10-30 用户裁,取代原「每批一次/合并后零复跑」口径)**——同一份字节禁止第二次人手跑;允许的重跑只剩两类:① CI 红后的修复合回(post-merge 钩子复验,每轮修复至多触发一轮);② 用户自发发起的全量回归。「跑都跑了再跑一遍保险」「顺手改点再补一跑」都不构成重跑理由。类名缓存刷新与开机确认由 CI 跑批起手接管(§1 第 2 条),合并后无手工动作
8. **合回后 CI 验证(唯一强制验证点)**——主工作区 `git merge --no-ff <任务分支>` 落地后 post-merge 钩子自动推送 origin master 触发远端 CI;远端按改动域分流(§1 第 3 条),游戏码批跑全量域闸(不带参数档,02 全套件),判定与红项由 `ci_watch.sh remote` 写回 `game/tests/.gates/ci-status.json`。全量是游戏码批的强制档:跨卡触面、探针与未申报套件的消费漏网只有全量闸能抓(迭代 44 实证),关联档选测的盲区由它兜底。合回前独立验收审计通过(iter 技能第 5 步),未过不合回。`tools/run_all_gates.sh` 是全部验证闸的**唯一入口、唯一清单与唯一域划分(含选闸算法与套件族映射表)**,闸件增减、分域调整都只改它;**本文与其他文档禁另列闸件清单**(清单散落多处正是 iter27 漏跑 `probe_gate --full` 的成因)。开发期手动跑批按需选档(按文件性质判域:代码面→`--code`,文档件→`--docs`,两类都有→全量;`--code` 关联档选测——02 只跑「需求卡片申报 ∪ diff 推导」并集套件、00 冒烟/01 系统测试/09 静态扫描三件保险恒跑、横切面回落全量——算法见闸脚本),手动跑不构成验收。闸件(`tools/` 下机检脚本与闸壳)自身的改动不占 CI 全量——其质量义务=落批时人工确认闸可跑通且判据口径未变;闸真崩溃时远端 CI 判红在案(job 失败=verdict 红,fail-closed 语义保留)
9. **重跑语义(2026-10-30 用户裁,取代原「每批一次/合并后零复跑」口径)**——同一份字节禁止第二次人手跑;允许的重跑只剩两类:① CI 红后的修复合回(post-merge 钩子再推再验,每轮修复至多触发一轮);② 用户自发发起的全量回归。「跑都跑了再跑一遍保险」「顺手改点再补一跑」都不构成重跑理由。导入缓存刷新由远端工作流「导入缓存刷新」步接管,合并后无手工动作
10. **批次完成后的登记义务**——合回 master 后按 doc-conventions §12.1 推进待办清单条目状态(做完整条删除),涉及迭代编排的在 roadmap 迭代总表与顶部「当前位」节换代——执行入口=项目技能 batch-closure(批后收尾与中间文档退役),跨会话教训写记忆库。批次过程与结论由 git 提交信息承载,禁止再写会话状态文件(见 doc-conventions 第 10 节)。`design/` 与根规则文件(`AGENTS.md`/`roadmap.md`/`待办清单.md`/`体验验证清单.md`)实现批禁写,见 §12
11. **文档同步闸(实现批禁写文档)**——实现批**禁写 `design/` 整个目录与根规则文件**,**另禁写 `game/tests/README.md`(能力清单,归写卡段维护,test-conventions §8.9)**,要往外交代的东西一律落 `reports/`:实现报告 `reports/iter<N>-实现报告-<日期>.md`(各卡状态+实机目检总清单+遗留读数义务+实现决定记录——超白名单/超卡片明列范围事项逐条记「决了什么/为什么/代价/撤销方式」,全部按卡执行时只写一行「零拍板」)、GDD 反哺点清单 `reports/iter<N>-反哺点-<日期>.md`(每条写清哪个文件哪一节、改成什么、依据是什么)。设计权威文档(GDD/art-bible)**任何批都不直改**:用户在会话中逐点裁决后,由工程/文档设计改动批(直改类)写入 `design/`(执行入口=doc-design 技能),并把反哺条目从 `reports/` 清掉(吸收即死;退役执行=batch-closure 技能)。机械面文档(roadmap 行/术语表/README 工具注)同样归工程/文档设计改动批在合并前更新。反哺点未落地期间相关 GDD 节视为待反哺,读前先查 `reports/` 与待办清单;需求卡片必列「关联文档同步面」按两层标注
12. **实机目检归用户,只登记不阻塞**——真人检测项登记进实现报告目检总清单与体验验证清单即完成批内义务;禁把等目检当停工理由或完成前置
@@ -62,7 +62,7 @@
**MC/verifier 触发细则**:仅在数值验证场景触发(改数值前后取证);normal 档为主、perfect 按需;**无数值改动的会话禁跑 MC**;结构位移类「存档锚」须先向用户请示定性再跑;需求卡片预设步骤的前提消失时(如「带值裁定后重锚」实际未投值)停问勿照字面执行。
**分级周期口径**:全部验证闸收编在 `tools/run_all_gates.sh` 一个入口下(**脚本即清单,且即域划分的唯一出处**),分三档——`--code`/`--docs` 按本批改动域只跑该域闸(闸件清单与域划分只写在脚本头部注释,本文不重列);`--quick` 是全量档的中段自检形态(跳过渲染闸与静态扫描);**不带参数=两域全量**。强制验证点=合回后本地 CI 的全量档(§1 第 2 条);分档只服务开发期手动跑批。真人实机目检归用户不进自动闸。
**分级周期口径**:全部验证闸收编在 `tools/run_all_gates.sh` 一个入口下(**脚本即清单,且即域划分的唯一出处**),分三档——`--code`/`--docs` 按本批改动域只跑该域闸(闸件清单与域划分只写在脚本头部注释,本文不重列);`--quick` 是全量档的中段自检形态(跳过渲染闸与静态扫描);**不带参数=两域全量**。强制验证点=合回后远端 CI(游戏码批走全量档,细则见 §1 第 3 条);分档只服务开发期手动跑批。真人实机目检归用户不进自动闸。
## 5. MC 采集档位细则
+5 -3
View File
@@ -25,9 +25,9 @@
每个缺陷修复必须在探针或冒烟中留下能抓住该缺陷的断言(例:封印动作耗尽 AP → 必须进入第 2 轮;
选用道具 → 库存态必须变 Used)。没有回归断言的修复视为未完成。
## 4. 验证时机(合回后本地 CI 制,2026-10-30 换代)
## 4. 验证时机(合回后远端 CI 制,2026-11-03 换代)
开发期窄测义务不变:每批开发中,本批新增/改动的验收测试自己跑绿即收口(卡内只测自己改的东西,process-conventions §6)。全量验证归合回后的本地 CI:git merge 合回 master 触发 post-merge 钩子跑 `tools/run_all_gates.sh` 不带参数档(两域全量,02 全套件——跨卡触面与关联档选测的盲区由全量兜底),结果落 `game/tests/.gates/ci-status.json`;CI 红态下修复合回落地即由 post-merge 钩子复验追绿(修复走新开 `fix-<任务名>` 修复 worktree,process-conventions §1)。同一份字节禁止第二次人手跑。该脚本是全部验证闸的唯一入口与唯一清单,域划分与选闸算法只写在脚本里,本文禁另列闸件清单。
开发期窄测义务不变:每批开发中,本批新增/改动的验收测试自己跑绿即收口(卡内只测自己改的东西,process-conventions §6)。全量验证归合回后的远端 CI:git merge 合回 master 落地后 post-merge 钩子推送 origin master,远端按改动域分流跑 `tools/run_all_gates.sh`(游戏码批=不带参数档两域全量、02 全套件——跨卡触面与关联档选测的盲区由全量兜底;文档批=文档域秒级闸;分流算法单点=`tools/ci/domain_route.sh`),回执由 `tools/ci_watch.sh remote` 轮询写回 `game/tests/.gates/ci-status.json`;CI 红态下修复合回落地即再推再验追绿(修复走新开 `fix-<任务名>` 修复 worktree,process-conventions §1;本地跑批件 ci_runner.sh 与本地追绿钩子 post-commit 已退役)。同一份字节禁止第二次人手跑。该脚本是全部验证闸的唯一入口与唯一清单,域划分与选闸算法只写在脚本里,本文禁另列闸件清单。
行为探针使用随机化玩家行为(封印/停手/刷新/无效点击)——自动玩家不做的动作就是测试盲区。
## 5. 测试函数怎么写——验收清单条目的落码规范
@@ -35,7 +35,7 @@
需求卡片 §8「改动—验收对照表」每一条都要落成可执行的验证;本文定统一写法,卡里定每批的具体内容(测什么/注入哪里)。写卡期查不出执行载体的条目=不可测,当场呈报,禁拖到实现期。
1. **执行载体五选一,逐条声明**:单元测试(`tests/run_all`)/系统测试断言(`tests/system_test.gd`)/场景探针(`probe/` 下 `*_probe`)/MC 同种子逐项比对/人工核对(仅限无法自动化的纪律类需求点,如命名锁定、数值占位)。行为类条目以自动化载体为主。
2. **粒度与对应关系**:每条清单条目至少一个自动断言,且断言必须从该条目的真实入口进入;多条条目可合用一个测试函数,但每条都要有自己单独可判红的判据(取证口径见 §8.4 唯一口径——禁变异/禁撤销)。断言失败消息末尾带编号尾缀〔卡短名 Vn〕(如〔秘宝批 V3〕)——断言与卡片清单可互相 grep 查找。**工具面局限备案(2026-10-27 迭代 39 验收审计)**:`Kit.check_quiet` 静默收集形态(计数不入判定即打印、失败消息进 problems 汇总)的断言消息不进 `tools/extract_checks.py` 扫描面——验收尾缀 grep 对该通道失效;如需覆盖属提取器改版(工程批)。
2. **粒度与对应关系**:每条清单条目至少一个自动断言,且断言必须从该条目的真实入口进入;多条条目可合用一个测试函数,但每条都要有自己单独可判红的判据(取证口径见 §8.4 唯一口径——禁变异/禁撤销)。断言失败消息末尾带编号尾缀〔卡短名 Vn〕(如〔秘宝批 V3〕)——断言与卡片清单可互相 grep 查找。`Kit.check_quiet` 静默收集形态(计数不入判定即打印、失败消息进 problems 汇总)的断言已入 `tools/extract_checks.py` 扫描面(2026-11-02 提取器改版:三通道同口径提取,静默通道条目 quiet 列记 `channel:check_quiet`),验收尾缀 grep 对该通道有效。
3. **断言词汇按验证对象五选一**:
| 词汇 | 适用场景 |
@@ -99,6 +99,8 @@
**能力清单维护锚(2026-10-29 用户裁改版定稿)**:`game/tests/README.md`「能力清单」是**实现指导+阅读导航+义务声明**——只宣布「要验证什么」,不记「是否已验证/是否跑过」;落地账归现行验收闭合链(改动—验收对照表逐条挂断言+合回前独立验收审计),本清单不承载验证状态。表为四列:能力|系统|真实入口|代表用例(`文件:函数`)。**维护归写卡段,当场入表**:写需求卡片时,本批新增能力当场写入能力行——真实入口取自设计文档已定的入口,代表用例=卡里定死的计划测试(`文件:函数`);受影响存量行(入口/用例名变更)同批更新;能力退役删行。**实现照单落名**:测试函数名以清单为唯一依据,名实不符=卡片没写清=停卡退回。**收尾核对**:批末收尾只核对表上名字与实际落地一致(改名则回表),不刷任何批次字段;实现批禁写该文件的现行红线不变(process-conventions §3 第 11 条),核对义务归收尾提交。三层模型见 §8.9。改动—验收对照表纪律不变:新增或改写的每条断言仍须挂一行(上文「测试侧」);断言改判仍受 §8.4 真实入口口径约束。
**新增 core 件的覆盖登记义务(2026-11-03 架构审查 P1 余项裁)**:拆件或重构产出的新 core 文件不触发 process-conventions §3 第 6 条「新功能必配新测试」(那条只管新增玩法/机制),因此单由本条承接——新 core 件要么被 `game/tests/` 某套件按文件名或 `class_name` 点名,要么在承接它的能力行「代表用例」里申报「经宿主链覆盖(宿主=<件>)」;两者都无=批末收尾核对时补登。本条**不是覆盖率要求**,与 §7「覆盖率不是目标」同轨:登记的是能力义务的归属,不做文件计数——「每个 core 件必须被点名一次」的机器闸已裁否(它逼出为点名而点名的空套件,且与 §7 正面冲突)。落笔面沿用现行分工:申报行由写卡段入能力清单(实现批禁写该文件),核对归批末收尾提交。
### 8.4 真实入口断言(验收闭合的主判据)
- **唯一口径(2026-10-24/2026-10-28 用户两裁)**:每个需求点与每个行为改动的验收=一条从真实入口进入的断言,可 grep 定位、在当轮真实跑批中执行并通过。**禁变异类测试**(把生产码或数据表改成错值看断言抓不抓得到);**禁撤销类取证**(回退本批改动或该 hunk 看断言红不红)——两者都是人为制造红,属伪造证据,一律禁止。
+1 -1
View File
@@ -41,7 +41,7 @@
本项目用语分两层,纪律如下:
1. **玩家可见专属名词**——道具名、界面用语、敌种名、层名。允许起专名,以 [术语表](术语表.md) 登记为准。界面用语"危险格 / 控制 / 坍塌显形"同属本层,见上节。
2. **文档内部机制概念**——一律直白描述,禁止造词(比喻性生造词、只有作者懂的缩略语均在禁列)。确需命名时,首次出现处附一句白话定义并登记进 [术语表](术语表.md)。
2. **文档内部机制概念**——一律直白描述,禁止造词(比喻性生造词、只有作者懂的缩略语均在禁列)。确需命名时,首次出现处展开成完整白话句并登记进 [术语表](术语表.md)。
当前已登记的玩家可见专名(名称值均为 provisional,出处为 [术语表](术语表.md)):
+3 -3
View File
@@ -2,7 +2,7 @@
> **一句话定位**:本文定义这个项目的 **Alpha 版本包含哪些东西**——它是里程碑 M3 的完成标准,也是判断"还差什么"的对照表。
> **本文只列条目,不写内容**:每样东西是什么、规则怎么走,一律归各自的权威文档,本文只给指路链接。想知道某样东西的定义,请点链接,不要在本文里找解释。
> **状态**:**已定稿(v1.23)**——2026-10-13 用户令定稿,历次升版明细见 git 提交史。Alpha 的内容范围自此冻结:增删条目一律须经用户裁决。
> **状态**:**已定稿(v1.25)**——2026-10-13 用户令定稿,历次升版明细见 git 提交史。Alpha 的内容范围自此冻结:增删条目一律须经用户裁决。
> **成文**:2026-10-13。
## 本文怎么用
@@ -103,7 +103,7 @@ Alpha 内以玩法循环本身的内容与表现为主(棋盘、关卡、战
| 主菜单 | —— | 在役(迭代 33 卡②三入口化:进入存档/设置/退出游戏——入口拓扑=进入存档→选档界面→进档/新档→营地覆盖层→〔营地交互重做卡④〕营地场景图与生涯笔记本;2026-10-22 用户裁换代〔反哺 #13〕) |
| 开始覆盖层 | —— | 在役 |
| 选档界面(3 存档位) | —— | 在役(迭代 33 卡③——空槽新档/有档进档/删档二次确认+摘要三项;2026-10-22 用户裁增行〔反哺 #8〕) |
| 营地(天赋树 / 锻造工坊 / 秘宝匣 / 图鉴) | [camp](ux/camp.md) | 在役(迭代 47 卡④⑤ 落地——场景图+七物件点选+Esc 浮窗与顶栏,2026-11-01 合回) |
| 营地(天赋树 / 锻造工坊 / 秘宝匣 / 图鉴) | [camp](ux/camp.md) | 在役(迭代 47 卡④⑤ 落地——场景图+七物件点选+Esc 浮窗与顶栏,2026-11-01 合回;五功能页呈现=居中定尺寸功能窗口、场景根留底、窗内滚动——窗壳形态 2026-11-02 迭代 49 卡③实装) |
| 营地交互重做(五卡:存档制数据层/主菜单三入口/选档界面/营地场景图/Esc 浮窗与营地顶栏) | [camp](ux/camp.md) | 在役(五卡全部落地——卡①②③ 迭代 33 批合回、卡④⑤ 迭代 47 批合回,卡⑥ 句柄子容器为同批前置基建卡。设计过程件已按吸收即死退役,沿革查 git 提交史。2026-10-21 用户裁:五卡整体列入 Alpha。出口=五卡各自验收标准通过+营地屏用户目检〔登记体验验证清单 ㊺〕) |
| 生涯页 | [生涯](systems/跨局循环/生涯.md) | 在役(期一) |
| 关卡地图屏 | [level-map](ux/level-map.md) | 在役 |
@@ -147,7 +147,7 @@ Alpha 内以玩法循环本身的内容与表现为主(棋盘、关卡、战
| 棋盘瓦片与格面资源图标 | [美术圣经](../art/art-bible.md) | 在役 |
| 未开格类型微光(五组色相+明度档) | [HUD框架](systems/表现与支撑/HUD框架.md) | 在役(明度档 provisional 值登记见 art-bible 的 git 提交史,复核转正归战斗一屏样张) |
| 棋盘观感(第二 / 三关亮度与对比度) | [待办清单](../../待办清单.md) | 待做(开工前置=先做素材轴/UI 轴对照截图定性,再按定轴修复;旧卡 v1.4 存 reports/ 作素材、非已写卡状态,重启须重新立卡;出口=用户实机目检第二、三关不再判「看着费劲」) |
| 立绘显示清晰度(原稿分辨率+三档显示) | [角色设计](../art/character-design.md) | 待做(评估已结——不回退高清、维持像素风;终态方案=保留原稿分辨率、入包禁降采样、显示按三档绝对高 96/144/188 缩放、现有形象即终稿;裁决录=待办清单本条+art-bible §8.2;出口=9 件按档落位+用户目检清晰度与同屏体量顺序通过) |
| 立绘显示清晰度(原稿分辨率+三档显示) | [角色设计](../art/character-design.md) | 在役(九件已按档落位+机检全绿——原稿分辨率入包禁降采样、显示按三档绝对高 96/144/188 缩放、现有形象即终稿;定值单点=art-bible §8.2;实机目检清晰度与同屏体量顺序登记体验验证清单 ㊻) |
| 敌人立绘(全敌种) | [角色设计](../art/character-design.md) | 在役 |
| 主角立绘三态 | [角色设计](../art/character-design.md) | 在役 |
| 状态图标 | [美术圣经](../art/art-bible.md) | 在役 |
@@ -1,7 +1,7 @@
# 关卡节点图生成
> 一句话:一关的节点图从哪来——生成器按参数长出一张合法图
> 状态:现行为 v1.3
> 状态:现行为 v1.4
## 设计目的
@@ -43,7 +43,7 @@
| 约束 | 内容 |
|---|---|
| 道路系统 | 图=主路+支路;除岔口节点(两条以上去路的节点)外每个节点恰一条去路;岔口去路 2–3 条 |
| 宽度=分叉生长 | 不摆平行层;同深度节点数由岔口自然长出(1→2→3→4……) |
| 宽度=分叉生长 | 不摆平行层;同深度节点数由岔口自然长出,至宽度上限为止(上限读参数档,见调参表) |
| 层高=沿路步数 | 入口到终点的最长路径步数;第一关 ≥6,逐关递增且增幅变大 |
| 出口归属锁定 | 多终点时由大岔口把图分成互不连达的分支区域,各区域只通向自己的终点;每个终点前一层节点的去路集合恰含一个终点——选路=提前承诺打谁 |
| 战斗节点保底 | 奖励/恢复/商店占位后战斗节点量不被挤没(保底数进调参表) |
@@ -111,6 +111,9 @@
| 层深 L1 | ≥6(步) | 第一关不再是零选择短链——够长才有岔口与取舍 | 已锁下限 |
| 层深 L2/L3 | >前一关且增幅变大 | 后期关显著更长,推进感随冒险加深 | provisional |
| 岔口去路数 | 2–3 | 每次取舍在 2–3 条里选:少了没选择,多了不过脑 | 已锁 |
| 岔口取三去路概率 | percent [0, 100] | 允许三去路的岔口中,实际长出第三条去路的比例——控制宽图出现频率 | provisional |
| 同深度节点宽度上限 | int [2, 6] | 同一深度最多并排几个节点;岔口生长到此即止,不再加宽 | provisional |
| 填充交替起始 | percent [0, 100] | 恢复/奖励节点交替填充时,先放恢复节点的概率(50 为对称) | provisional |
| 分支密度 | 待定值 | 一局遇到多少次取舍(目标量级=一局十几次,待设计验证) | provisional |
| 入口个数 | 1 起 | 多入口给「从哪进场」的第一层选择 | provisional |
| 出口个数 | L1 恒 1;L2/L3 1–3 | 多终点让「走哪条=打谁」成立;大岔口自第二关起 | 已锁范围 |
@@ -1,7 +1,7 @@
# 冒险结构
> 一句话:整局冒险的关卡序列、失败与大奖励
> 状态:已定稿(自旧体系迁移);现行为 v1.3
> 状态:已定稿(自旧体系迁移);现行为 v1.4
## 设计目的
@@ -150,7 +150,7 @@ GP(显示名「GP」)是冒险内的一次性属性提升货币:战斗胜
**统一冒险加算区**:商店购买的属性提升与奖励节点三选一的属性件记**同一笔**——加算区四轴 {攻击, 生命上限, 护甲等级, 行动点},入战参数 = 基础表值 + 加算区累加,经战斗开始入参的覆盖值通道生效(与生命的上参同一条通道)。购买生命上限时:pool 模式(v0.13——货架件=奖励件本体)只加上限不回当前生命(与三选一件同语义);legacy 模式当前生命与上限同步 +Δ(生命的连带写入口)。属性轴累加源 = 商店购买与奖励节点三选一属性件两类;行动点轴累加源 = 奖励节点三选一 AP 件与商店 AP 件两类(每场战斗开始的首轮行动点基线 +1,语义细节归[行动经济](../排雷循环/行动经济.md)跨冒险加成轴节;~~全冒险获取次数上限最紧 provisional 2 次~~——v0.14 次数上限退役,池消耗即上限,pool 模式下商店购买与三选一共用令牌库,见下)。
掉落掷定消费 gp_drop 封闭随机流(主种子派生、可回放)。**商店货架抽签消费 shop_draw 封闭随机流**(v0.13 扩签——每次抽 3〔进店+每次买后重抽〕恰一 scope,与三选一抽签分签防取数序互扰)。掉落与价格的现行行值读商店表,数值所有权归[难度曲线与Boss](难度曲线与Boss.md)曲线调参批——本批骨架先行,全部数值 provisional。
掉落掷定消费 gp_drop 封闭随机流(主种子派生、可回放)。**商店货架抽签消费 shop_draw 封闭随机流**(v0.13 扩签——每次抽一批〔进店+每次买后重抽〕恰一 scope,批大小=货架位数读商店表,与三选一抽签分签防取数序互扰)。掉落与价格的现行行值读商店表,数值所有权归[难度曲线与Boss](难度曲线与Boss.md)曲线调参批——本批骨架先行,全部数值 provisional。
**共享池账本(v0.13 P1 共享池单点;v0.14 令牌库换代;迭代 20 案D 四级 104 张——池机制事实源=[奇物](奇物.md)「池结构与抽取」节)**:商店货架与奖励节点三选一是**同一个池**——货架候选 = 池∖{GP 袋, 刷新件}∪{凭证} = {攻击, 生命上限, 护甲, 行动点, 回复, 凭证} 六种(GP 袋计价物不自售切边、刷新件不上货架、秘宝件已随同调批出池;凭证与回复随迭代15② 入架——shop.tres pool_shelf 六行);**库存 = 剩余令牌数**(TP0——「池消耗即上限」,种类次数上限退役,与奖励兑付摘牌同一令牌库承载,全冒险一次性跨关卡不补给):商店买一件,奖励面就少一枚;「无限购买」收敛为**钱尽或池空为止**(池空=硬闸、A 链爬价=软闸),空货架合法态。货架 = **令牌级抽签**(同 kind 去重每 kind 至多一卡,价格公式 tier-blind 维持批②裁定,购买消费在架令牌本体 kind+tier)。禁止两渠道各自私记库存——消费走同一入口写同一令牌库(令牌多重集单点:池与判定归该单点持有,各 kind 的派生计数与断点附随件同在这一点上承载)。**货架独立刷新(v0.15 MC-1 2026-10-04——P-C2+Q2 裁)**:进店免费刷新次数(基础 0,天赋/营地侧增益位预留)用尽后 GP 付费刷新(ceil(20×1.8^已付费刷) provisional——调参表旋钮 shop_refresh_*);重抽=共享池抽签(shop_draw 恰一新 scope),池空=不可刷新合法态;进店/离开双向清零付费刷计数。**三选一同款付费档(v0.16 2026-10-06 用户令——刷新对齐商店)**:三选一免费双源(刷新件与冒险池两笔,机制现行事实源=[秘宝](../跨局循环/秘宝.md)三选一刷新双源节)用尽后 GP 付费刷新——读同 shop_refresh_* 两旋钮(单点调参)、扣同一 GP 冒险账本(同一扣账入口)、重抽同三选一共享池抽签;付费刷计数每停点清零(与进店清零同构);钮常驻选择态、免费与付费两源皆穷=禁用。
@@ -271,7 +271,8 @@ GP(显示名「GP」)是冒险内的一次性属性提升货币:战斗胜
| 关卡完成回血比例 | int [0,100],冒险表单行全局 | adventure_table clear_heal_pct(provisional 20) | 关卡完成部分回血回复生效上限的百分比;封顶上限不回满 |
| ~~同调位过渡键~~(已退役——迭代 11 第①批 T7,过渡键随表退役) | — | 同调位读数源 = attunement_growth.tres 谓词表实时求值(slot_cap 3) | 切换义务已随 2026-10-03 同调实施批清偿 |
| Boss 钥石掉落 | int [0,999],meta 表逐关行 | meta.tres boss_keystone 首杀 3 / 复杀 2(provisional) | 逐杀实时入账;精英怪掉 1 预留;消费方归元进度 |
| GP 经济参数 | 商店表逐行 | 见 shop.tres gp_drops / level_gp_bonus / pool_shelf / price_a / price_b(provisional,以 shop.tres 为准;legacy products / price_level_bonus 随对照模式保留) | 掉落均值与区间(普通/精英/Boss)、关级掉落加值、货架基价、A/b 价格因子;公式语义归本文,数值所有权归难度曲线与Boss曲线调参批 |
| GP 经济参数 | 商店表逐行 | 见 shop.tres gp_drops / level_gp_bonus / pool_shelf / price_a / price_b(provisional,以 shop.tres 为准;legacy products / price_level_bonus 随对照模式保留) | 掉落均值与区间(普通/精英/Boss)、关级掉落加值、货架基价、A/b 价格因子;公式语义归本文,数值所有权归难度曲线与Boss曲线调参批。财富之道「聚」的掉落乘数与「散」的消费折价两参数归[天赋树](../跨局循环/天赋树.md)规则键参数表(长在节点行,商店表不持) |
| 货架位数 | int [1, 6],商店表单行全局 | 见 shop.tres shelf_size(provisional) | 进店与每次购买后重抽时,货架同时陈列的商品件数;池余令牌不足时按余量陈列,空架合法 |
结构冻结(非调参项):序列线性无跳关、终点恒为 Boss(终点可多个、各在路径最深处)、倒下即冒险终、大奖励构成 = 关卡完成部分回血 + 专长三选一(按档配比加权抽取)、一冒险一主种子、收束点先清库后宣布的次序。
+2 -2
View File
@@ -11,7 +11,7 @@
>
> **兑付频率(先看这条,它是三条渠道的共同前提)**:奇物**不是打一场战斗给一份**。关内的普通战斗节点打完了什么也不给;一关之内奇物**只兑付一次**,触发点是**关底 Boss 被击败**——而按 [冒险结构](冒险结构.md) 的定义,打掉关底 Boss 恰好就等于"通过这一关",这两件事是同一个时刻,不是一条链上的两步。
>
> 状态:**已实现**(2026-10-04 双层 BD 实施批落地);现行为 v1.4。本文件是奇物的唯一定义文档。
> 状态:**已实现**(2026-10-04 双层 BD 实施批落地);现行为 v1.5。本文件是奇物的唯一定义文档。
>
> 数值纪律:本文件只写概念、取值域与指路;每件给多少、效果是什么一律不进正文,事实源是 `data/tables/feats.tres` 与 `data/tables/adventure.tres`。
@@ -164,7 +164,7 @@
> 令牌牌库(奖励节点与商店共用)的组织与三选一抽取规则(2026-10-07 用户裁案D——归档打底做翼 + 曝光槽)。
- **令牌=出现次数上限**:每个成员在牌库里有 N 张令牌——拿了消耗、**没拿回池**(刷新重抽同样不消耗),所以「最多被拿 N 次」= 池里放 N 张,天然成立,不另设计数器;「只刷出、没拿」不计次数(现行 TP0 语义沿用)。
- **概率与上限解耦**(设计约束,新内容必检):每个成员标注**两个独立属性**——概率位(档+权重/令牌数)与已拿上限(cap;拿了才计、刷出不计)。概率不决定上限、上限不影响概率。
- **概率与上限解耦**(设计约束,新内容必检):每个成员标注**两个独立属性**——概率位(档+权重/令牌数)与已拿上限(cap;拿了才计、刷出不计。cap 必填——成员行缺 cap 声明=数据错误、拒绝加载,取值域 [1,99];2026-11-02 用户裁「不要任何缺省值」总判据)。概率不决定上限、上限不影响概率。
- **已知耦合问题(实装批选型注意)**:现行令牌模型里「N 张令牌」同时承担概率与上限两个职责,无法独立设定(例:档概率需 3 张 vs 单件限拿 2 次——3 张压不住上限、2 张保不住概率)。实现路径候选三案:①抽象权重表+独立已拿计数器(解耦彻底;代价=推翻 TP0 实体牌库模型、「池耗即上限」语义改写)②令牌池+提前退役计数器(保留模型;代价=名义概率与有效概率两层、对账复杂化)③维持耦合(设计自我设限——用户已否)。选型归实装批;影响面=MC 对账模型与断点存档(已拿计数器须进断点附随件)。
- **内容归档(打底+做翼)**:普通档=属性件+小额钱(每拿都有底的面粉);优秀/稀有档=功能凭证与改手感件(期待位);传说档=惊喜位。归档按决策影响力、不按数值大小;面值数值归调参批。
- **曝光槽**:每次三选一呈现 = **2 格按全池抽 + 1 格按「优秀档以上」子池抽**;高档子池空 → 该格回退按全池抽(池空直通同族兜底)。格数与档配比归调参批。
+22 -14
View File
@@ -1,7 +1,7 @@
# 增益状态
> 一句话:增益/减益的状态池、叠层与衰减
> 状态:已定稿(自旧体系迁移);现行为 v1.3
> 状态:已定稿(自旧体系迁移);现行为 v1.6
## 设计目的
@@ -52,7 +52,7 @@
| 寿命 = 一场战斗 | 战斗开始时状态池为空,结束全部清空,不跨到下一场战斗 |
| 跨轮跨图延续 | 同一场战斗里换新雷图、弃图刷新都不清空——状态跟着战斗走,不跟图走 |
| 全程零随机 | 授予、合并、衰减、列举顺序全部确定,可回放 |
| 敌方侧共享 | 对敌效果默认对全体存活敌人生效,层数全体共享一份;"只作用于其中一只"的例外见〈单体寻址扩展位〉节,随首个单体效果的内容批进游戏 |
| 实例按个体归属 | 每条状态实例归属到一个个体:主角方归主角,敌方每只敌人各持自己的实例集,个体之间互不共享、互不可见。"对全体"=对每个存活敌各发一条实例,各自独立合并与衰减;发给谁由授予路径按目标规则定,见〈目标规则与个体归属〉节 |
举证:本节为状态池结构规则,无计算。
@@ -83,7 +83,7 @@
| 合并策略 | 重复授予时发生什么 | 说明 |
|---|---|---|
| 叠加 | 层数加一;剩余结算次数不动——只有首次授予定钟 | 现行内容行多数用叠加(逐行合并策略读 `status_effects.tres`) |
| 累加 | 剩余结算次数加上本次授予的时长——技能施放行带覆盖时长时按覆盖值加;层数不变 | 现行内容行六行用累加(削弱行 weaken、增益技行 empower / fortify、主角增益行 attack_up / ac_up);重复拿一次就多攒一段时长,同一轮拿几份攒几段,停手后按剩余次数逐轮耗完;逐行读 `status_effects.tres` |
| 累加 | 剩余结算次数加上本次授予的时长——技能施放行带覆盖时长时按覆盖值加;层数不变 | 现行内容行七行用累加(削弱行 weaken、增益技行 empower / fortify / defensive_stance、主角增益行 attack_up / ac_up);重复拿一次就多攒一段时长,同一轮拿几份攒几段,停手后按剩余次数逐轮耗完;逐行读 `status_effects.tres` |
| 并存 | 新建一份独立实例,两份各算各的 | 同上 |
并存分支没有满层上限,但状态池规模天然有界:实例数的上界就是受理过的授予数——多受理一份就多一份实例,多少份在授予那一刻就完全确定,不会无限膨胀。
@@ -94,23 +94,30 @@
举证:本节为合并分支规则,无计算——满层判定就是一次"层数等于上限"的比较。
### 单体寻址扩展位:只作用于其中一个敌人
### 目标规则与个体归属:效果发给谁
对敌效果默认全体共享(硬规矩见「一个状态池管全部方向」);要"只削弱其中一只"时,走本节定好的扩展位。本节是接口定稿:目标字段与五条语义都已裁定,实现随首个单体效果的内容批一起进游戏——在那之前,全部对敌效果照旧全体共享,状态池里不会出现单体实例。
状态实例按个体归属(硬规矩见「一个状态池管全部方向」);一笔授予发给谁,由授予路径在授予那一刻按目标规则定。目标规则是封闭词表,现行四词:
| 目标规则 | 语义 | 现行消费者 |
|---|---|---|
| 全体存活敌 | 对每个存活敌各发一条实例,各自独立合并、衰减、随体清亡 | 封印标中削弱、踩雷增强、警觉加层 |
| 自己 | 归施放者个体 | 敌方增益技(蓄力/硬化/护身) |
| 单体 | 点名一只:认生成序号(开战逐只编号、整场不变),不认名字——混编遭遇里同名敌种可多只 | 暂无消费者,随首个单体效果内容批启用 |
| 顺位最前 | 取生成序最前的存活个体 | 主角先手攻击、单目标克制直伤 |
词表扩充随首个用到新词的内容批进行,不预先建面。禁随机摇目标("全程零随机"硬规矩沿用)。
| 规矩 | 内容 |
|---|---|
| 目标记在实例上 | 状态实例多一个可选的目标字段:不填 = 全体共享(现行唯一形态),填了 = 只作用于这一只敌人。目标认敌人的生成序号(开战逐只编号、整场战斗不变),不认名字——混编遭遇里同名敌种可以多只 |
| 单体与否由授予方定 | 这次发全体还是发单体,由发效果的路径在授予那一刻定(敌方技能行、封印、清图奖励各自带各自的目标规则),状态定义表不加列——同一个状态名允许既有全体来源又有单体来源。选哪只由授予方规则点名(如自己、顺位最前),禁随机摇目标("全程零随机"硬规矩沿用) |
| 共享与单体并存,独立结算 | 同名效果的共享实例与单体实例互不合并,各算各的:各自叠层、各自衰减,兑付时逐行相加。合并匹配从"只认状态名"扩为"状态名与目标都相同才合并" |
| 目标死亡即移除 | 单体实例跟着目标走:目标死亡当场移除该实例,不转移给别人、也不变回全体——"挪给别人"本就是已退役的转移接口决定,单体实例同样不豁免 |
| 呈现挂目标立绘 | 共享效果维持"各立绘同值";单体效果只有目标那一只的立绘挂状态图标(血条正下方既有位置),结算明细行的归因照旧,并写明目标是哪一只 |
| 合并匹配认个体 | 同名状态只在同一个体名下按合并策略结算;不同个体同名实例互不相干、互不可见 |
| 个体死亡即清 | 个体死亡,其名下实例全部随体移除,不转移、不并回别处 |
| 呈现各读各的 | 每只立绘的状态图标行只读它自己名下的实例;结算明细行归因照旧,单体授予写明目标是哪一只 |
举证:本节为结构规则与语义裁定,无计算。
### 剩余次数怎么倒数:按结算次数衰减
每个状态实例自带一个倒数计数——剩余结算次数(本文说的"衰减"就是它逐次递减、归零消失)。它不承诺"活几轮",而是数"经历过几次轮末结算":每轮结算先让状态起作用,随后计数减一,减到零状态即被移除。持续 1 的状态就是"一次性":在授予它的那轮结算里生效一次,轮末消失。现行累加行里主角增益两行持续 1、削弱与敌方增益技行持续 2——累加语义下重复拿一次就按本次授予时长多攒一段,同一轮拿几份攒几段;跨轮持续的状态,寿命由表行初始值表达,给几就活几次结算。
每个状态实例自带一个倒数计数——剩余结算次数(本文说的"衰减"就是它逐次递减、归零消失)。它不承诺"活几轮",而是数"经历过几次轮末结算":每轮结算先让状态起作用,随后计数减一,减到零状态即被移除。持续 1 的状态就是"一次性":在授予它的那轮结算里生效一次,轮末消失。现行累加行里主角增益两行持续 1、削弱与敌方增益技行(含护身)持续 2——累加语义下重复拿一次就按本次授予时长多攒一段,同一轮拿几份攒几段;跨轮持续的状态,寿命由表行初始值表达,给几就活几次结算。
```
一轮结算:查询生效清单 → 逐行兑付(层数 × 行值)→ 轮末衰减(全部实例剩余次数 −1)→ 归零实例移除
@@ -145,9 +152,9 @@
状态池还有一条快照纪律:实例的幅度、初始次数、量纲在授予那一刻从表行拷贝。战斗中配置表即使被重载,已授予实例不受任何影响,只影响后续授予。
### 现在有哪些状态:现行九行内容
### 现在有哪些状态:现行十行内容
现行状态表恰有九行:主角侧四行(增伤/盾牌加护两增益 + 失衡/乏力两减益)、敌方侧五行(削弱/暴走/警觉/蓄力/硬化——警觉为 blast 型负向踩雷载体,2026-09-20 伏击退役后进表)。全部用同构实例承载;数值全部 provisional(临时值,过锚验收后才定稿)。
现行状态表恰有十行:主角侧四行(增伤/盾牌加护两增益 + 失衡/乏力两减益)、敌方侧六行(削弱/暴走/警觉/蓄力/硬化/护身——警觉为 blast 型负向踩雷载体,2026-09-20 伏击退役后进表;护身 defensive_stance 为敌方低血防御增益〔地精池情境技「孤注守势」载体,2026-10-27 迭代 39 投放——本行当时漏登,2026-11-02 随状态合并累加制批考证补录〕)。全部用同构实例承载;数值全部 provisional(临时值,过锚验收后才定稿)。
| 字段 | 取值 | 说明 |
|---|---|---|
@@ -157,7 +164,7 @@
| magnitude | 整数 | 幅度:百分比行 ∈ [−100,100] 且非 0;固定值行 ≥ 1;护甲等级行 ∈ [−20,20] 且非 0 |
| unit | percent / flat / ac | 百分比修正 / 固定值 / 护甲等级(掷点折扣判定阈值轴——2026-09-16 护甲等级掷点批新增) |
| duration_settlements | 整数 [1,99] | 授予时初始剩余结算次数(1 = 一次性) |
| stack_policy | stack / refresh / independent | 同名再授予的合并策略 |
| stack_policy | stack / accumulate / independent | 同名再授予的合并策略(叠加 / 累加 / 并存) |
| max_stack | 整数 [1,16] | 叠层上限,仅叠加策略消费 |
| 状态 | 效果一句话 | 发给谁 | 幅度(现行值) | 时限 / 合并 | 来源类别 |
@@ -171,6 +178,7 @@
| sapped 乏力 | 主角输出降低(weaken 型负向,主角输出池) | 主角 | 见 `status_effects.tres` sapped 行 | 时限/上限读表 / 叠加 | 危险格负向 / 标空封印(2026-09-15 格面资源批)/ 敌方妨害技(大地脉动——L3 Boss 石君王独占,2026-09-20 第三关内容批) |
| empower 蓄力 | 敌方输出倍率增益(敌方输出池——蓄力技载体;幅度读表) | 敌方 | 见 `status_effects.tres` empower 行 | duration 读表 = 1 个有效增益拍 / 累加 | 敌方技能施放(2026-09-16 敌人技能池批) |
| fortify 硬化 | 敌方防御提升(**敌方防御池**——硬化技载体;负值入池 = 主角攻击折半,2026-09-18 符号纠正——旧正值实际翻倍) | 敌方 | 见 `status_effects.tres` fortify 行 | duration 读表 = 1 个有效增益拍 / 累加 | 敌方技能施放(2026-09-16 敌人技能池批) |
| defensive_stance 护身 | 敌方输出降低(敌方输出池——敌方低血防御增益;地精池情境技「孤注守势」载体,血量阈值触发施放,duration 由技能行覆盖) | 敌方 | 见 `status_effects.tres` defensive_stance 行 | duration 读表 / 累加 | 敌方技能施放(2026-10-27 迭代 39 触发条件批投放——行值随卡①累加制批改累加) |
empower 与 fortify 是敌方技能池增益技在状态池侧的数据落点(技能行 buff_ref 引用,施放时长由技能行覆盖——技能冷却与增益持续是两个计时器):两行 duration 表值(读表)的口径是"先兑付后衰减含施放当轮"——施放发生在第 N 结算战斗段,存活到第 N+1 结算战斗段才兑付"下一拍",即"持续 1 个有效结算"(proposal 语义的状态池落地)。敌方防御池是第四个乘区池:敌方作为防守方的百分比修正池,消费面 = [战斗结算](战斗结算.md)主角攻击的池乘区——四池对称(敌打主角 = 主角防御池 × 敌方输出池,主角打敌 = 主角输出池 × 敌方防御池),状态池语义零延伸:仍是同构实例、side-wide 加算、不封顶不保底。
@@ -1,7 +1,7 @@
# 战斗结算
> 一句话:轮末结算的编排与逐行兑现
> 状态:已定稿(自旧体系迁移);现行为 v1.5
> 状态:已定稿(自旧体系迁移);现行为 v1.6
## 设计目的
@@ -160,7 +160,7 @@ percent 类(每结算、每层): E = |层数 × 行值| ÷ 100 ×
| GP 缓冲(flat) | gp 正 / 负向 | GP 袋 / 破财按 power 记入战斗内 GP 缓冲(+power / −power);缓冲随战斗完成折进战斗结束信号的 GP 掉落统一到账(GP 归[冒险结构](../冒险循环/冒险结构.md)) | 无拒收态——缓冲只在战斗边界与钱包结算,战斗域零钱包状态 |
| 行动点修正 | action 正/负向 | 下轮行动点 ±power(行动经济排队,下一轮开始兑现后清零;下限 0) | 排队净值不跨轮保留;明细记效果行(effect_id=ap_delta) |
警觉(blast 负向——2026-09-20 八型批伏击退役换装)为敌方 side-wide 状态:多个敌人共享同一状态值、互不消耗,只活一轮、轮末清零;战斗段由防守方护甲等级读数消费(我打敌 = 敌方 armor_class + Σ敌方侧 ac 型状态)。其余各型负向受池 clamp 与叠层上限承载。
警觉(blast 负向——2026-09-20 八型批伏击退役换装)按个体归属:每个存活敌各发一条自己的实例(全体存活敌规则,见[增益状态](增益状态.md)〈目标规则与个体归属〉节),只活一轮、轮末随体清零;战斗段由防守方护甲等级读数消费(我打敌 = 该敌 armor_class + 它名下的 ac 型状态合计)。其余各型负向受池 clamp 与叠层上限承载。
标中资格认雷不认封印:兑付资格以危险格实例为键——封印印记无任何移除手段(移除动作已退役,重复封印被"已有封印"拒绝)、同一颗雷跨轮不重复兑付;换图后新雷是新实例,资格自然重置。同一处封印一直落在雷上,每轮都会重新上报标中,去重是本系统的职责。
@@ -364,7 +364,7 @@ EV 参考数不入正文(派生读数,需要时按判定式与现行表值
- 挖封印格兑付改判(封印不可逆批 2026-09-19):有封印格直接挖开被受理——封印安全格直挖零奖励(作废归因行恰一次)、封印危险格直挖只吃挖雷惩罚;被挖开的封印不入轮末判定(零标中 / 标空兑付);开格事实不可撤。
- 每事实恰一次:每格受理、每封印判定恰好一次;重复投递不改变结果。
- 极性路由正确:开安全格 / 封印标中只兑正向、开危险格 / 标错封印只兑负向;兑付效果与该格资源类型的字典行一一对应。
- 警觉共享:敌方全体共享同一警觉状态值;blast 负向逐层直授无上限(伏击退役换装——2026-09-20 八型批)。
- 警觉按个体:每只敌各持自己的警觉实例、互不共享;blast 负向逐层直授无上限(伏击退役换装——2026-09-20 八型批;个体化——2026-11-02 用户裁)。
- 完美封印:零误标且至少一面标中时第二份兑付恰一次并发高光行;出现误标或零标中则无高光;计数换图重置。
- 开轮摇号:每轮恰摇一次(首轮同样;轮内刷新换图不重摇);摇定后兑现前死亡 → 本拍技能作废(零敌方行动行)、不进冷却不进保底计数;已兑现技能进冷却、保底计数按执行结果更新。
- 战斗段次序:主角先手后逐敌"按摇定技能行兑现、结算伤害、执行上报"各恰一次;主角倒下立即短路,剩余敌人不行动。
@@ -1,7 +1,7 @@
# 敌人系统
> 一句话:敌人数据、技能池出招、意图呈现
> 状态:已定稿(自旧体系迁移);现行为 v1.4
> 状态:已定稿(自旧体系迁移);现行为 v1.5
## 设计目的
@@ -115,7 +115,7 @@
| damage_mult | 仅伤害 | 伤害倍率;域 [1.1, 16] provisional。普通攻击恒 1、不可配 |
| rider_mult | 仅伤害、可省 | **必中附加分量(2026-09-19 新增)**:域 (0, 1],缺省无字段 = 无附加;分量值 = max(伤害下限, floor(攻击基线 × rider_mult))——随施放者攻击基线缩放,后置加法、必中全额、不进乘区、不出暴击(后置加法同族);价位锚 0.75 = AC 折扣档最轻档"不掉档的稳定伤害" |
| cooldown_beats | 全部 | 施放后连续 N 拍不可摇中;普通攻击恒 0、不可配 |
| buff_ref / buff_duration | 仅增益与妨害 | 效果引用(指向状态效果行)与持续回合数;**落点由状态行 target_side 路由**(增益 → 敌方侧 / 妨害 → 主角侧,施放类 side 守卫加载拒绝)——妨害技零新授予通道 |
| buff_ref / buff_duration | 仅增益与妨害 | 效果引用(指向状态效果行)与持续回合数;**落点:增益技归施放者自己(每只敌是独立个体,一只施放只强化自己——2026-11-02 用户裁),妨害技归主角**;施放类 side 守卫加载拒绝——妨害技零新授予通道 |
| trigger(触发条件) | 全部,可省 | {fact, op, value, latch} 四键——fact 与 op 取「触发条件」节封闭词表,value 类型与域随 fact,出域加载期拒绝;缺省无字段=无条件技,旧行为零变化(2026-10-26 情境条件触发器批立列、2026-10-27 迭代 39 实装落地;原池条目的血量百分比字段收编为本字段闩型首用例) |
| P1 字段位 | — | 命中段数、目标数——随对应后置批加列(触发条件位已由 trigger 立列收编——2026-10-26 立列、2026-10-27 实装;原"固定值分量"位已由 rider_mult 实装收编——2026-09-19;多段命中「命中段数」保留以防复活) |
@@ -309,7 +309,7 @@ Boss 专属身份 = 专属池承载:独占技能 + 权重轮廓(**技能错
- 死亡即不动手:摇定后、兑现前被杀——本拍技能作废(零行动明细行),不进冷却、不进保底计数;行动完成后才死——已兑付已进账;对已死亡单位上报受击被拒绝且状态不变。
- 空池不可能:每池恰一行普通攻击(域校验),普攻冷却恒 0 → 任意实例任意拍可摇集合恒非空。
- 伤害拍读值:读值 = 基线 × 倍率;普攻 = 倍率 1 特例;施放拍恒为 0(原伏击读值条随伏击退役作废——2026-09-20 八型批)。
- 警觉授予:踩 N 颗雷叠 N 层、逐层直授无上限;敌方全体共享同一状态值(side-wide)。
- 警觉授予:踩 N 颗雷叠 N 层、逐层直授无上限;按个体归属——每个存活敌各发一条自己的实例(全体存活敌规则,见[增益状态](增益状态.md)〈目标规则与个体归属〉节)。
- 目标顺位:多敌时单体目标恒为生成序最前存活者,杀最前后顺延;杀至空返回空;单敌时顺位与范围效果重合。
- 快照抗改表:实例化后修改敌人表,已生成单位的数值投影与实例池逐字不变;新实例才用新表值。
- 表校验:越域值、池权重 ≤ 0、空池、普攻配倍率/冷却、池增益 > 1、skill_id 悬空、行集构成违例(行集内同敌种第二行 / 同带键多行不相邻)均在加载期返回错误并止动;域内合法极端(攻击基线 0)不拒;主角表恰一行、攻击配 0 拒绝。
@@ -1,7 +1,7 @@
# 地形变异
> 一句话:格子的非雾变异(荆棘丛/藤蔓缠绕/岩浆/烬覆/落石/矿尘)与 Boss 图整图变异(贫矿脉),挖掘中可遭遇的地貌偏离
> 状态:已定稿(首批类型随 2026-09-19 定稿批落地,第三关一对随 2026-09-20 第三关内容批落地;首个整图变异随 2026-10-04 全局作用域变异首发批落地);现行为 v1.1
> 状态:已定稿(首批类型随 2026-09-19 定稿批落地,第三关一对随 2026-09-20 第三关内容批落地;首个整图变异随 2026-10-04 全局作用域变异首发批落地);现行为 v1.2
## 设计目的
@@ -91,8 +91,8 @@ region 型变异是「格子级」的:布置段往候选格域写格子快照
变异在战斗初始化末段布置:初始展开完成、地图战斗资源格设置之后,由战斗结算的编排段执行。候选池非空时从池内均匀选一类型,按布置参数生长连通片写入格子快照:
- 数量 = round(候选池格数 × percent_of_cells / 100) + (关卡序号 − 1) × per_level_bonus(当前 5% + 每关 +2——百分比的基数是候选池格数而非总格数:初始展开通常占全板过半,按总格数取数会使变异在剩余可挖格中的实际密度远超配置值(2026-09-21 用户拍板基数修正);percent 承载"占可挖格比例",关卡递增由 per_level_bonus 绝对格数承载"越深越险";provisional 归难度曲线与Boss)。
- 形状 = 全连通生长(8 邻),单片 ≤ pack_max(当前 4:2×2 / 1×4 / 1×3+1 等形;2026-09-19 用户拍板)。
- 数量 = round(候选池格数 × percent_of_cells / 100) + (关卡序号 − 1) × per_level_bonus(两参数现行值读变异表——百分比的基数是候选池格数而非总格数:初始展开通常占全板过半,按总格数取数会使变异在剩余可挖格中的实际密度远超配置值(2026-09-21 用户拍板基数修正);percent 承载"占可挖格比例",关卡递增由 per_level_bonus 绝对格数承载"越深越险";provisional 归难度曲线与Boss)。
- 形状 = 全连通生长(8 邻),单片格数落在 [pack_min, pack_max] 内(两端读变异表;2026-09-19 用户拍板形状约束)。
- 候选格域 = 安全格 − 初始展开区,且排除危险格。
- 布置取数走专用随机流(variant_place,一板恰一 scope),换图/轮内刷新图各取号一次,确定性可复放。
- 生成器管线不布置变异(产物恒零变异格)——布置域的"未开"语义由设置顺序保障。
@@ -137,11 +137,12 @@ region 型变异是「格子级」的:布置段往候选格域写格子快照
## 调参表
| 参数 | 现行值 | 归属 |
| 参数 | 取值域 | 归属 |
|---|---|---|
| 布置数量基数 percent_of_cells | 5(候选池格数百分比,2026-09-21 基数修正) | 难度曲线与Boss(provisional) |
| 关卡递增 per_level_bonus | +2 格/关 | 难度曲线与Boss(provisional) |
| 连通片上限 pack_max | 4 | 定稿值(2026-09-19 用户拍板形状约束) |
| 布置数量基数 percent_of_cells | percent [0, 50](候选池格数百分比,2026-09-21 基数修正);现行值读 `variation.tres` 表头 | 难度曲线与Boss(provisional) |
| 关卡递增 per_level_bonus | int [0, 9] 格/关;现行值读 `variation.tres` 表头 | 难度曲线与Boss(provisional) |
| 连通片下限 pack_min | int [1, pack_max];现行值读 `variation.tres` 表头 | 形状约束:单片至少几格连通成片,与 pack_max 合为成包尺寸域 |
| 连通片上限 pack_max | int [pack_min, 9];现行值读 `variation.tres` 表头 | 定稿值(2026-09-19 用户拍板形状约束) |
| 直伤量 effect_value | 荆棘丛 1 / 岩浆 2 / 落石 3 | 难度曲线与Boss(provisional,加法核 [1,9]) |
| 资源面偏斜 effect_value | 贫矿脉 30(生存族下调百分比;0=中性 off 锚;总期望微降 3-5% 为 provisional 设计目标——精确方向与幅度归读数批判读只测不判) | 难度曲线与Boss(provisional,域 [0,50]——2026-10-04 首发批投值) |
@@ -152,6 +153,6 @@ region 型变异是「格子级」的:布置段往候选格域写格子快照
- 候选池空合法:门控筛空(池空或候选域碎片化不足)时静默零布置,配置加载零错误、零警告。
- 零特判(负验收):排雷玩法的挖格、封印、连锁展开执行路径中不存在任何按变异类型分支的代码;读取方按 effect/trigger/placement 枚举路由。
- 数据生命周期:格子携带的变异是只读数据——战斗初始化末段布置、随图消亡,布置后零运行时写入,无跨图存续;生成器产物恒零变异格。
- 布置域:变异格全在初始展开区外(伤害型 closed_only 由设置顺序结构保障)且不吃危险格;每图至多一种类型;连通片 ≤ pack_max。
- 布置域:变异格全在初始展开区外(伤害型 closed_only 由设置顺序结构保障)且不吃危险格;每图至多一种类型;连通片格数落在 [pack_min, pack_max] 内。
- 配套义务闭环(**已作废,2026-10-03 终裁**):原「定稿批须含反制兑现条目否则验收不通过」随反制道具配套义务一并作废;counter_items 恒空为合法态。
- 全局作用域型(2026-10-04 首发批):替换制生效——Boss 图恰一行整图变异+零格子级变异标记;普通图 region 路径逐位不变(同种子布置/摇号快照与批前基线逐项比对);off 态零扰动(effect_value=0 资源摇号与无偏斜逐位相同,白名单三行任何状态逐位不动);L1 Boss 零全局变异;Boss 图全局池空回落 region;全局取用零取号(确定性,不消费布置随机流);资源面偏斜正向池合计恒 77。
@@ -1,7 +1,7 @@
# 棋盘生成
> 一句话:棋盘怎么生成、怎么保证可推理可清图
> 状态:已定稿(自旧体系迁移);现行为 v1.1
> 状态:已定稿(自旧体系迁移);现行为 v1.2
## 设计目的
@@ -52,7 +52,7 @@
生成(关卡序号, 节点深度, 种子) → 棋盘 + 生成期指标集
① 参数解析 ─── 读对应参数行,生成开始时单次读取并快照
▼
② 布雷 ─────── 雷数 N = round(雷密度 × (宽×高 − 9))(先定数;9 = 出生 3×3 恒排除)
② 布雷 ─────── 雷数 N = round(雷密度 × (宽×高 − 出生格数))(先定数;出生格数 = 出生区边长²,读表,出生区恒排除)
│ 在"全格 − 出生 3×3"范围均匀布雷
│ 开局免费展开域外扩一圈,圈内的雷移除(只减不增、不重投、无迭代)
▼
@@ -79,7 +79,7 @@
**结论**:雷数先定数、再落位;零雷板与安全格不足的参数组合在加载期就被拒绝。
```
布雷数 N = round(mine_density × (board_width × board_height − 9)) (9 = 出生 3×3 恒排除)
布雷数 N = round(mine_density × (board_width × board_height − 出生格数)) (出生格数 = 出生区边长²,读表;出生区恒排除)
下限校验:N ≥ 1(零雷板加载期拒绝)
计数可行:board_width × board_height − N ≥ min_safe_count(加载期校验)
产物断言:实际安全格数 ≥ min_safe_count;实际雷数 ≤ N(先布后删只减不增)
@@ -211,7 +211,8 @@
| max_gen_attempts | int [1, 32] | 域 [1, 32],现行按行取值见 board_gen.tres | 生成-验证重试上限;受成本闸联合约束 |
| board_type | String,词表 {dungeon, underdark, deep_underdark} | 现行值见 board_gen.tres(词表 v1.1,2026-09-20 第三关内容批增补) | 图类型标签(玩家侧「地图类型」);域校验 = 词表成员检查 |
| shave_ring_radius | int [0, 2] | 现行 1(board_gen.tres 全行) | 先布后删剃雷半径:剃雷域=距出生中心切比雪夫距离 ≤1+r 的格(r=1 → 5×5=25 格;r=0 即只剃出生 3×3 本身=无环剃雷)。**2026-10-05 初始展开收窄批新参数**(调参项非结构冻结) |
| r0_max_cap | int [出生格数 9, 板格数一半](护栏,违例加载期致命) | 现行按板形:10×10=45 / 12×12=43 / 13×13=51 / 14×14=59(board_gen.tres) | 自然 R₀(开局免费展开格数)上限闸=合法性门;超阈整板重掷、耗尽走三分出口。板面 30% 锚(30/43/51/59)经 S1 停机呈报用户裁上调:10×10→45(r=1 自然均值 39>30 结构性倒挂;其余行 30% 锚维持)。**2026-10-05 初始展开收窄批新参数** |
| r0_max_cap | int [出生格数, 板格数一半](护栏,违例加载期致命;出生格数=出生区边长自乘,读出生区行) | 现行按板形:10×10=45 / 12×12=43 / 13×13=51 / 14×14=59(board_gen.tres) | 自然 R₀(开局免费展开格数)上限闸=合法性门;超阈整板重掷、耗尽走三分出口。板面 30% 锚(30/43/51/59)经 S1 停机呈报用户裁上调:10×10→45(r=1 自然均值 39>30 结构性倒挂;其余行 30% 锚维持)。**2026-10-05 初始展开收窄批新参数** |
| 出生区边长 | int [3, 5],奇数(中心对称,side = 2r+1);现行值读 board_gen.tres 表头 | 表头全局单值(非逐行) | 玩家出生区为以出生中心对称的 side×side 方区,区内恒无雷;布雷域基与 r0_max_cap 护栏下限均由它导出(格数 = side²)。**2026-11-02 架构整改批新参数**(原为代码常量,入表后格数零字面量) |
结构冻结(非调参项):键结构与每关深度 0 锚行、四阶段顺序(变异布置段 2026-09-20 已移出管线)、solver_rules、可推理率的合法信息源枚举、及格线域下限 0.85、成本闸常数(结构护栏,登记在案,调整走文档修订)、先布后删语义。
@@ -57,7 +57,7 @@ HUD框架站在玩家与全部玩法系统之间:挖掘期它是输入的翻
| 区 | 位置与几何 | 管什么 |
|---|---|---|
| B 战斗画面 | 全宽,高读布局表 `stage_h` | 主角站桩立绘、敌人站桩立绘 ×1–3(**全站桩形态,2026-09-20 用户拍板:无框立绘+底座、状态小图标挂血条下,英雄卡/敌人卡退役**)、轮次阶段指示、结算明细带 |
| B 战斗画面 | 全宽,高读布局表 `stage_h`(背景三关变体+连续地面层高另读 `ground_h`) | 三关舞台背景+连续地面层、主角站桩立绘、敌人站桩立绘 ×1–3(**全站桩形态,2026-09-20 用户拍板:无框立绘+底座、状态小图标挂血条下,英雄卡/敌人卡退役**)、轮次阶段指示、结算明细带 |
| C 角色信息 | 左下,宽读 `info_panel_w`,高 = 基准屏高 − B 区高 | 生命 / 攻击 / 储备数据框、状态效果槽、小人立绘 |
| D 扫雷图 | 中下,宽 = 基准屏宽 − C 区宽 − 列间距(原右下面板删除后横向加宽),高同 C 区 | 行动点条与按钮组、棋盘本体、toast 槽 |
@@ -244,7 +244,7 @@ HUD框架站在玩家与全部玩法系统之间:挖掘期它是输入的翻
## 调参表
本系统的参数全部是呈现节奏与可读性常量,不是玩法数值——玩法数值一律归[数据配置](数据配置.md)的表,与本表无关。修订本文常量走文档修订流程。**本表常量无数据表承载,为文档面唯一事实源;入驻 .tres 时本列改指路。** 布局几何(B 区高 / C 区宽 / AP 条高 / 明细带两态高)已入驻 `game/data/tables/battle_layout.tres`,不在本表重复。
本系统的参数全部是呈现节奏与可读性常量,不是玩法数值——玩法数值一律归[数据配置](数据配置.md)的表,与本表无关。修订本文常量走文档修订流程。**本表常量无数据表承载,为文档面唯一事实源;入驻 .tres 时本列改指路。** 布局几何(B 区高 / B 区连续地面层高 / C 区宽 / AP 条高 / 明细带两态高)已入驻 `game/data/tables/battle_layout.tres`,不在本表重复。
| 参数 | 域 | 现行值(文档自持,无表承载) | 说明 |
|---|---|---|---|
@@ -1,7 +1,7 @@
# 数据配置
> 一句话:数值表与单一事实源管线
> 状态:已定稿(自旧体系迁移);现行为 v1.1
> 状态:已定稿(自旧体系迁移);现行为 v1.2
## 设计目的
@@ -70,7 +70,7 @@
| 关卡表 | 逐关节点图与层名 | [冒险结构](../冒险循环/冒险结构.md) |
| 冒险表 | 关卡大奖励与钥石入账(单行全局) | [冒险结构](../冒险循环/冒险结构.md) |
| 元进度表 | 元进度字段(已建表 2026-09-21——现行五行族:属性锻造 / Boss 钥石 / 工坊阈值 / 换算率 / 同调刷新升级行族,顺带扩列) | [元进度](../跨局循环/元进度.md) |
| 战斗屏布局表(`battle_layout.tres`) | 分区几何与明细带两态高(单行;呈现层布局配置,非玩法数值——供呈现层与样张工具同源读取) | [战斗屏规格](../../ux/battle.md)(结构)/[HUD框架](HUD框架.md)(呈现常量) |
| 战斗屏布局表(`battle_layout.tres`) | 分区几何、B 区连续地面层高与明细带两态高(单行;呈现层布局配置,非玩法数值——供呈现层与样张工具同源读取) | [战斗屏规格](../../ux/battle.md)(结构)/[HUD框架](HUD框架.md)(呈现常量) |
举证:本节为数据纪律约定,无计算。违规检测 = 静态扫描加人工复核,随各表回填定稿与里程碑检查执行。
+21 -8
View File
@@ -1,9 +1,9 @@
# 天赋树
> 一句话:营地本身——跨局成长的结构承载:钥石逐节点点亮一棵树,属性淬炼、工作间解锁、规则抉择与同调挂载全部组织在树上
> 状态:**已定稿(现行为 v0.11)**——12 节点结构在役(脊柱=生命/命中一线一节点,Fork 三节点双态);「等级阈值前置」为机制位(前置节点等级 ≥ n 才可购;键悬空 / 阈值 <1 / 类型错加载即拒;未达标节点锁标 + 悬停门槛文案),现役 12 行零配置=零行为影响;全部数值行 provisional,归数值批。
> 状态:**已定稿(现行为 v0.12)**——12 节点结构在役(脊柱=生命/命中一线一节点,Fork 三节点双态);「等级阈值前置」为机制位(前置节点等级 ≥ n 才可购;键悬空 / 阈值 <1 / 类型错加载即拒;未达标节点锁标 + 悬停门槛文案),现役 12 行零配置=零行为影响;全部数值行 provisional,归数值批。
> **📖 节点状态记录指引(读这份文档先看这里)**:本树全部 12 个节点=下方「核心规则 → 节点总表」,逐节点列名称/脉/类型/前置/效果方向;**全部数值行(价格 / 等级上限 / 每级效果取值 / 限次值)不在本文**,事实源 = 配置文件 `data/tables/meta_tree.tres`(provisional 归数值批)。要查"有哪些节点、怎么连"看本文总表,要查"多少钱、加多少"开配置文件。
> **📖 节点状态记录指引(读这份文档先看这里)**:本树全部 12 个节点=下方「核心规则 → 节点总表」,逐节点列名称/脉/类型/前置/效果方向;**全部数值行(价格 / 等级上限 / 每级效果取值 / 规则键效果参数)不在本文**,事实源 = 配置文件 `data/tables/meta_tree.tres`(provisional 归数值批)。要查"有哪些节点、怎么连"看本文总表,要查"多少钱、加多少"开配置文件。
## 设计目的
@@ -29,7 +29,7 @@
| 不负责 | 归谁 |
|---|---|
| 节点数值行(价格 / 等级上限 / effects 取值 / 限次值) | [数据配置](../表现与支撑/数据配置.md)——行值读 `meta_tree.tres`,全 provisional 归数值批;本文只定规则与键结构 |
| 节点数值行(价格 / 等级上限 / effects 取值 / 规则键效果参数) | [数据配置](../表现与支撑/数据配置.md)——行值读 `meta_tree.tres`,全 provisional 归数值批;本文只定规则与键结构 |
| 钥石 | [元进度](元进度.md)——树是永久强化的承载结构,钥石余额是消费来源;旧柜台框架与退役面亦在对方登记 |
| 锻造工坊工作间内的路线升级设计 | [锻造工坊](锻造工坊.md)——武器三路线+护甲三路线的等级、定价、满级特效现行事实源在彼;攻/AC 数值唯一来源在彼(所有权切分) |
| 秘宝目录、同调装配与同调位求值 | [秘宝](../跨局循环/秘宝.md)——树只持同调位节点挂载位与秘宝匣钥匙 |
@@ -112,7 +112,20 @@ Fork 组是封闭词表三组(2026-10-11 裁:克制专精整组砍除,类
「每关限次」的计数生命周期(2026-10-11 歧义扫描裁甲):限次计数随单次冒险持久、按关重置、新冒险清零、断点续玩保留。
A/B 态只放规则面:节点行持 a/b 双效果键(封闭规则键词表六键——**已随迭代 21 T3 扩签落地**:posture 双键收每关首轮窗、sense 锋/守双键限次按关重置、economy 聚/散双键接线),效果按激活态取值,不接数值线。两侧的设计判据是「不同强、非强弱」:MC 配对锚验收两侧关卡完成率差 <~3pp(**迭代 21 V19 已验:perfect+max 档三组配对差全部 0.0pp 在带**)。
A/B 态只放规则面:节点行持 a/b 双效果键(封闭规则键词表六键——**已随迭代 21 T3 扩签落地**:posture 双键收每关首轮窗、sense 锋/守双键限次按关重置、economy 聚/散双键接线),效果按激活态取值,不接数值线。**规则键的效果参数长在节点行的效果键值里**(每键一个参数字典,键集与取值域由 schema 按键声明;六键参数见下方「规则键参数表」),效果引擎只读参数、不持字面量。两侧的设计判据是「不同强、非强弱」:MC 配对锚验收两侧关卡完成率差 <~3pp(**迭代 21 V19 已验:perfect+max 档三组配对差全部 0.0pp 在带**)。
**规则键参数表**(参数名与取值域本文 owner;现行值读 `meta_tree.tres` 对应节点行 effects_a / effects_b):
| 规则键 | 态 | 参数 | 取值域 | 语义 |
|---|---|---|---|---|
| posture_first_strike | 开局姿态 A 先手压制 | ap_bonus | int [1, 4] | 每关首轮行动点加成 |
| posture_bulwark | 开局姿态 B 稳健拓荒 | shield | int [1, 9] | 每关首轮窗内受击时的盾值 |
| sense_sharp | 危险直觉 A 锋 | halve_pct / cap_per_level | percent [1, 99] / int [1, 9] | 踩中危险格伤害按百分比折减 / 每关触发次数上限 |
| sense_guard | 危险直觉 B 守 | ap_refund / cap_per_level | int [1, 4] / int [1, 9] | 标记错误返还的行动点数 / 每关触发次数上限 |
| economy_hoard | 财富之道 A 聚 | mult_pct | percent [101, 300] | 战斗掉落 GP 乘数(仅战斗掉落渠道) |
| economy_spend | 财富之道 B 散 | discount_pct | percent [1, 99] | GP 消费折价系数(全部 GP 消费面;商品购买价适用,刷新类支出不折——定义边界见上表) |
「每关限次」两键的 cap_per_level 共用同一计数生命周期(随单次冒险持久、按关重置、新冒险清零、断点续玩保留)。
层级纪律(红线):局外树只放全局规则件——effects 禁 archetype 键(schema 加载致命);规则改写型特性(流派件)只走局内随机渠道,永不入树。
@@ -153,7 +166,7 @@ A/B 态只放规则面:节点行持 a/b 双效果键(封闭规则键词表
| 上游 | [锻造工坊](锻造工坊.md) | 武器/护甲路线升级现行事实源在彼——树持钥匙节点(无前置),工作间柜台=钥匙展开面板;攻/AC 数值唯一来源在彼(所有权切分红线) |
| 下游 | [冒险结构](../冒险循环/冒险结构.md) | 冒险开始参数面——树生命/命中淬炼 flat(叠加进覆盖值通道)与规则键集的注入通道 |
| 下游 | [HUD 框架](../表现与支撑/HUD框架.md) | 营地四柜台并排呈现——树淬炼柜台=树脊柱界面形态(案甲);信号 = 树上购买意图 / 树上分叉切换意图 |
| 下游 | 战斗侧效果引擎 | 规则键消费面——每场战斗开始时重建合成订阅(机制硬编码,无表行) |
| 下游 | 战斗侧效果引擎 | 规则键消费面——每场战斗开始时按激活态效果键及其参数重建合成订阅(参数读节点行,引擎零字面量) |
## P0 最小闭环
@@ -174,14 +187,14 @@ A/B 态只放规则面:节点行持 a/b 双效果键(封闭规则键词表
| 表 / 常量 | 键结构归属 | 数值行 |
|---|---|---|
| 节点表 `data/tables/meta_tree.tres`(换代后 12 行:价格 / 等级上限 / requires(点亮前置)/ **requires_level(等级阈值前置——R1 机制位,现役零配置)** / effects 取值(Fork 行持 a/b 双效果键)/ 限次值;row 字段随一线一节点退役) | schema 声明,本文 owner | 全 provisional,归数值批投值 |
| 节点表 `data/tables/meta_tree.tres`(换代后 12 行:价格 / 等级上限 / requires(点亮前置)/ **requires_level(等级阈值前置——R1 机制位,现役零配置)** / effects 取值(Fork 行持 a/b 双效果键,每键值=参数字典,参数名与取值域见「规则键参数表」); row 字段随一线一节点退役) | schema 声明,本文 owner | 全 provisional,归数值批投值 |
| 脊柱行门槛 = 4 | 节点表结构声明持有,本文 owner | 规则即门槛(节点第 N 级需全树总等级 ≥ 4×(N−1)) |
| Fork 组词表(三组)/ 规则键词表(换代后六键,扩表随实装批) | 三组 Fork 词表与六键规则词表由节点表结构声明持有(封闭词表) | 词表即规则;规则键效果值由效果引擎合成 |
| Fork 组词表(三组)/ 规则键词表(换代后六键,扩表随实装批) | 三组 Fork 词表与六键规则词表由节点表结构声明持有(封闭词表) | 词表即规则;规则键效果参数读节点行,效果引擎按参数合成 |
| 钥石产出、刷新升级行族 | 现行事实源 = [元进度](元进度.md)调参表 | `data/tables/meta.tres` |
## 验收标准
- 结构封闭:meta_tree.tres 通过 schema 校验零违例——12 节点、脉 / 类型 / 币词表出域即拒、Fork 三组每组恰一节点且持 a/b 双效果键、彩蛋 ≤3、effects 键封闭、零 archetype 键。
- 结构封闭:meta_tree.tres 通过 schema 校验零违例——12 节点、脉 / 类型 / 币词表出域即拒、Fork 三组每组恰一节点且持 a/b 双效果键、彩蛋 ≤3、effects 键封闭、零 archetype 键;六键效果键值均持参数字典且参数名/取值域合规(见「规则键参数表」),缺参数或越域加载期致命。
- 行门槛可判:全树已购总等级 < 4×(N−1) 时脊柱节点第 N 级不可购;总等级达标当刻该级开放购买。
- 前置可判(点亮前置):requires 任一未点亮则节点不可购,逐一点亮后可购;锻造工坊钥匙无前置——初始即可点亮(free 零币)。**等级阈值前置:配置了该键的节点,指定前置节点等级 < n 时不可购、达标当刻开放(现役零配置,判定面已单独验证)。**
- 工作间可判:钥匙节点(锻造工坊 / 秘宝匣)未点亮时对应柜台锁定态、工作间不可进入;点亮后展开;图鉴无门槛常开。
@@ -1,7 +1,7 @@
# 锻造工坊
> 一句话:营地的武器与护甲成长——武器锻造区三条路线、护甲锻造区三条路线各练各的,钥石消费,一次冒险各选一件,满级特效留位本期不做
> 状态:**v0.10(2026-10-29 实现内容清理:删「现役代码事实」「实装边界」两节与正文代码指证,规则与数值零变化)**——全部数值 provisional,终值归 Alpha 收官 M4 数值批〔未排期〕
> 状态:**v0.11(2026-11-02 补验收标准节:九条结构面判据落文,规则与数值零变化)**——全部数值 provisional,终值归 Alpha 收官 M4 数值批〔未排期〕
## 设计目的
用户原案(playnote 2026-10-06):把现役"营地花钱买攻击 +1"改造成有等级、有成长、有满级特效的**武器升级路线**;新增长枪(穿刺)与法杖(魔法)实现武器间差异化;护甲同理——初始只有轻甲(升级只提 AC),最高等级后解锁重甲/魔法护甲,基础 AC 各异、各带满级特效。
@@ -209,3 +209,17 @@
### 10 · 数值与验证
全部数值 provisional 归 Alpha 收官 M4 数值批;实装批必须带改前 / 改后同随机种子配对读数验证难度影响。
## 验收标准
本节判据全部绑结构与关系、不绑具体数值:价格、增量、等级上限等行值 provisional 归 M4 数值批,改值不推翻判据;判据失效只发生在结构关系本身被改时。
- **柜台解锁与默认值解耦**:天赋树的锻造工坊钥匙节点(见[天赋树](天赋树.md))点亮后本柜台开放、可购买;未点亮时柜台锁定、不存在任何购买途径;未点亮期间武器/甲默认值照常经参数面注入冒险,不存在「未解锁就读不到默认值」的窗口(2026-10-11 树侧钥匙裁)。
- **路线解锁双通道并联**:长枪、法杖、重甲、魔法护甲四条路线的解锁条件全部在本系统内部、与关卡进度零绑定;每条路线同时开两条互不影响的通道——练满前一档、或支付一次性解锁价直购——任一通道成立即解锁(4b/4b-1 裁)。
- **窗口内容**:营地四柜台并排呈现;本柜台分武器、护甲两区,各列三条路线行,行名=件名+锻造;出场行显示当前选中(武器+甲);满级特效无窗口入口、无文案(本期不做)。
- **单选注入与树零攻防**:攻击加值唯一来源=当前选中武器路线、AC 加值唯一来源=当前选中甲路线;0 级=未练合法态、零加值;天赋树淬炼对攻击与 AC 零贡献;开局注入按「账号层基础值+树淬炼 flat+锻造加值+局内加算区」分层可加,锻造加值只取当前选中(2026-10-11 所有权切分裁)。
- **切换语义**:营地内任意武器×甲组合切换免费、即时生效;换装不丢级不生效——旧选中等级保留、加值待命;一次冒险=一个武器类型+一个甲型;冒险开始后锁死、局内不存在任何换装途径(1a/1b/1c 裁)。
- **定价结构**:每级价格随已购级数几何递增(第 N+1 级价格 > 第 N 级价格,基价与公比读表单点);路线解锁价一次性收取;钥石不足时购买被拒、余额与等级零变化;GP 全程不可用于本柜台(5b 裁)。
- **存档闭合**:六条路线等级+当前武器/甲选中标记写入存档,读档恢复与写入前一致;存档域无特效域(6 裁连带)。
- **祝福件负断言**:局内商店购买攻击/护甲祝福后,本柜台路线等级与选中态零变化(8a 裁连带——货架行名带「攻击」「护甲」字样,属性祝福与锻造升级是两条互不相通的通道)。
- **甲型双轴可感**:切换甲型后基础 AC 与挨普通攻击的克制修正(轻甲 0/重甲 −1/魔法护甲 +1)双轴同时变化(3b 裁;现行敌方攻击全部按普通处理,断言条件当下即成立)。
+3 -3
View File
@@ -2,7 +2,7 @@
> **Status**: Complete(现行)
> **Author**: user + ux-designer
> **Last Updated**: 2026-11-01
> **Last Updated**: 2026-11-02
> **Platform Target**: PC (Steam)——Keyboard/Mouse 主(全部操作纯鼠标可完成)、Gamepad Partial 非 MVP、Touch None(同 technical-preferences)
> **上游修订依赖**: 弃图刷新挖掘期受理已随布局决策 4 落稿上游(2026-09-12:行动经济 Active 受理 + 每轮上限 2 次、排雷玩法 Active·仅刷新路径装板、战斗结算的挖掘期刷新编排 + 恒同盘不变、系统索引的刷新规则同步——见 OQ11)
> **Template**: UX Spec
@@ -115,7 +115,7 @@
### Layout Zones
采用用户拍板的布局图(2026-09-12),按 1280×800 基座落尺寸。**分区几何的唯一事实源 = `game/data/tables/battle_layout.tres`**(经 `ConfigDb.presentation.battle_layout` 读取;字段 `stage_h` / `info_panel_w` / `ap_bar_h` / `log_band_h_dig` / `log_band_h_settle`)。本节只写结构关系与内容职责,不复写数值;任何文档与代码不另立第二份布局值。
采用用户拍板的布局图(2026-09-12),按 1280×800 基座落尺寸。**分区几何的唯一事实源 = `game/data/tables/battle_layout.tres`**(经 `ConfigDb.presentation.battle_layout` 读取;字段 `stage_h` / `ground_h`(B 区连续地面层高)/ `info_panel_w` / `ap_bar_h` / `log_band_h_dig` / `log_band_h_settle`)。本节只写结构关系与内容职责,不复写数值;任何文档与代码不另立第二份布局值。
| 区 | 位置与几何 | 内容 |
|---|---|---|
@@ -152,7 +152,7 @@
| 区 | 组件 | 类型 | 内容 | 交互 | 载体 |
|---|---|---|---|---|---|
| B | 主角站桩立绘 | 站桩(无框立绘+落影) | HP 条落底盘(2026-10-06 方案二拍板:站桩排式 = **立绘→血条→状态**,全场血条对齐一线;血条嵌石板位、台缘线留作地面线;原「悬浮头顶」退役——高盒下血条-立绘空洞,用户点名否决)、状态效果小图标一排挂血条正下方(形状+色相双通道、层数角标;空态不占位退化为空行)——**HP 与状态效果的唯一展示面(2026-09-26 信息归属拍板,原 C 区状态槽职责〔悬停 tooltip 来源+语义+剩余结算次数〕并入本组件)**;攻击值等规划数据仍归 C 区数据框(2026-09-20 全站桩拍板,英雄卡退役) | 悬停状态小图标看 tooltip | HUD 视图拆分改造 |
| B | 敌人站桩立绘 ×1–3 | 站桩(无框立绘+落影) | 血条+顺位徽标落底盘(同主角排式,2026-10-06 方案二;**大体档〔显示 >150px 级:drider/duergar_king〕允许向上溢出盒顶 N px(N 由实装批 C0 实算,与背景/光柱无关——现行溢出区为临时光柱氛围层,正式舞台背景插画到位后该层退役,判定不变),血条仍落底**)、状态小图标挂血条正下方(敌方 side-wide 增益各立绘同值呈现——蓄力/硬化/削弱/暴走/警觉;伏击层数通道随 2026-09-20 八型批退役——数据源 = 战斗结算流水经增益状态投影,敌人系统×4④;2026-09-16 敌人技能池批改型:行为环点拆除〔proposal §2.4〕,意图占位 = 本拍摇定结果的动画占位——普通攻击零表示 / 特殊技类型级提示,**意图徽标悬浮头顶上方,探顶档压胸**,敌方增益〔蓄力/硬化〕入状态图标行);死亡灰化加碎裂退场直接演在立绘上(2026-09-20 全站桩拍板,敌人卡退役);血条下名字行 = 纯名字 + 护甲类型图标(形状+色相双通道,与状态图标同行共存,状态空时为纯名字;原「底座下」随石板退位改落底排),AC 数值不展示——2026-09-26 终裁(用户口径:HP 信息已足够,攻防数值不直接写上;护甲类型图标保留克制对策可读性——类型可读、数值隐藏) | 只读 | 新建 |
| B | 敌人站桩立绘 ×1–3 | 站桩(无框立绘+落影) | 血条+顺位徽标落底盘(同主角排式,2026-10-06 方案二;**大体档〔显示 >150px 级:drider/duergar_king〕允许向上溢出盒顶 N px(N 由实装批 C0 实算,与背景无关——原临时光柱氛围层已随舞台背景实装批退役〔2026-11-02 迭代 48〕,溢出判定不变),血条仍落底**)、状态小图标挂血条正下方(敌方增益按个体呈现——各立绘只显示它自己名下的状态实例〔蓄力/硬化/削弱/暴走/警觉,2026-11-02 个体化裁〕;伏击层数通道随 2026-09-20 八型批退役——数据源 = 战斗结算流水经增益状态投影,敌人系统×4④;2026-09-16 敌人技能池批改型:行为环点拆除〔proposal §2.4〕,意图占位 = 本拍摇定结果的动画占位——普通攻击零表示 / 特殊技类型级提示,**意图徽标悬浮头顶上方,探顶档压胸**,敌方增益〔蓄力/硬化〕入状态图标行);死亡灰化加碎裂退场直接演在立绘上(2026-09-20 全站桩拍板,敌人卡退役);血条下名字行 = 纯名字 + 护甲类型图标(形状+色相双通道,与状态图标同行共存,状态空时为纯名字;原「底座下」随石板退位改落底排),AC 数值不展示——2026-09-26 终裁(用户口径:HP 信息已足够,攻防数值不直接写上;护甲类型图标保留克制对策可读性——类型可读、数值隐藏) | 只读 | 新建 |
| B | 轮次·阶段指示 | 标签 | "第 N 轮 · 挖掘中/结算中"(终局定格「战斗结束」;Boss 变体附 Boss 名) | 只读 | 新建 |
| B | 结算明细带 | 滚动列表 | 结算期逐行流水([战斗结算](../systems/战斗循环/战斗结算.md#明细流水每一行都能指回你刚才的哪一步棋) 9 类行协议);挖掘期收起为上轮摘要 1 行 | 点击展开明细回看 overlay(2026-10-04 P-C7 退役——带保留单行摘要,回看归「生涯」) | 改造 |
| B | ~~结算明细回看~~(已退役) | —— | 2026-10-04 P-C7 裁:冒险中回看退役归「生涯」——回看覆盖层为未接线遗留件(待办清单登记) | —— | 未接线 |
+2 -2
View File
@@ -1,6 +1,6 @@
# 营地场景 UX spec(camp)
> 状态:v2.4(现行)
> 状态:v2.6(现行)
> 事实源:本 spec(呈现)+ [元进度](../systems/跨局循环/元进度.md)(机制)
> 美术画法:[art-bible](../../art/art-bible.md) §6.2/§7.5;素材命名与路径:[asset-path-map](../../art/asset-path-map.md)
> 相邻:[level-map.md](level-map.md)(主菜单语境)
@@ -42,7 +42,7 @@
## 叠层与开合
各界面开合走模态栈单口,层序按模态栈契约登记。**承载形态已定稿(2026-11-01 用户裁)**:五个功能界面(锻造工坊/秘宝匣/天赋树/奖励格图鉴/生涯记录)各以**功能窗口**打开——场景根留底可见,窗口之下垫半透明压暗遮罩(交互聚焦用,复用既有模态遮罩件,现值锚黑色 0.6;观感随样张目检校准,属普通设计决策)。**五窗互斥单开**(模态栈深恒 1,不开窗叠窗);各窗自带关闭钮。ESC 优先序:有功能窗口开着 → 先关最上层窗;无窗 → 才进 ESC 浮窗(返回主菜单/设置/退出游戏)。
各界面开合走模态栈单口,层序按模态栈契约登记。**承载形态已定稿**:五个功能界面(锻造工坊/秘宝匣/天赋树/奖励格图鉴/生涯记录)各以**功能窗口**打开——窗口为统一居中定尺寸窗壳(起点 720×640,窗明显小于屏、营地场景大面积可见;终值随样张目检校准,属普通设计决策)——**该窗壳形态已实装**(2026-11-02 迭代 49 卡③落码:窗壳几何单点定值、五窗共用同一石板皮窗板;起点值 720×640 为实装现值,样张目检校准意见回填终值〔登记体验验证清单 ㊽〕),窗之下垫半透明压暗遮罩(交互聚焦用,复用既有模态遮罩件,现值锚黑色 0.6;观感随样张目检校准,属普通设计决策),内容超高时窗内滚动;生涯页与四子界面同壳同形态。**五窗互斥单开**(模态栈深恒 1,不开窗叠窗);各窗自带关闭钮。ESC 优先序:有功能窗口开着 → 先关最上层窗;无窗 → 才进 ESC 浮窗(返回主菜单/设置/退出游戏)。
## 口径
+4 -1
View File
@@ -1,7 +1,7 @@
# 术语表
> 全库专用术语的唯一对照表(2026-10-11 用户令建立)。规矩:新术语先登记本表、再在文档使用;退役词见文末对照表,文档正文一律使用现行词。文档中遇到看不懂的词,查本表。用词纪律(禁用词、替换值、豁免范围)见「用语规范」节。
> 状态:**现行 v1.25**——2026-10-11 建立;历次升版明细见 git 提交史。
> 状态:**现行 v1.26**——2026-10-11 建立;历次升版明细见 git 提交史。
## 格与棋盘
@@ -94,6 +94,8 @@
| 术语 | 定义 |
|---|---|
| 效果端口件 | 战斗业务类(伤害管线/行动经济)唯一的效果发射出口:收事件与载荷、交效果引擎结算、取回命中批——业务类零引擎直连(机制归属见架构文档「战斗编排域拆件定稿」节轴戊;实现类 EffectPort) |
| 掷格件 | 装配期格面资源摇号的承载件:池行装配、区间行 roll、权重合成(偏运硬币/board_skew 两路投影);受理账面留守地图战斗资源件(机制归属同上;实现类 RewardRoller) |
| `seal_missed` | 封印落空事件(旧名已换代):封印动作落在安全格上时发出,订阅面据此做限次与豁免判定(迭代 31 卡② 落地) |
| `forgive_seal_miss` | 本场首次封印落空豁免——专长「完美保险」的效果类型,`domain=battle` 首例;有效误标=误标总数 − 豁免数,豁免不改写误标账(迭代 31 卡② 落地) |
@@ -109,6 +111,7 @@
| 图类型 | 棋盘生成产物 `board_type` 的中文名——三关换皮的单位(同款地砖换色板) |
| 方向稿 | 冻结前的方向性候选稿,供气质目检;过目检后才进机检冻结 |
| 站桩 | 战斗画面区(B 区)里角色直立立绘的显示形态(配血条与状态行) |
| 显示档 | 站桩立绘的显示尺寸规则——源用原稿分辨率入包(禁降采样),显示按三档绝对高(小型 96/中型 144/大型 188)缩放、宽随源比例;定值单点见[美术圣经](../art/art-bible.md) §8.2 站桩立绘显示档条 |
| 徽章 | 库存条与结算明细用的小图标(与格面类型微光预读相区分) |
## 开发流程
+1 -1
View File
@@ -50,7 +50,7 @@ Godot_v4.7.2-stable_win64_console.exe --headless --path . --script res://sim/adv
**试玩画像口径(2026-09-19 用户拍板固化——全项目试玩/扫描/面板模拟一律只用以下两档,随机策略口径退役)**:`policy="normal"` = **普通画像·基础定式**(单数字满足规则——满足即标/满足即开,无处可推盲挖边界格、不刷新;教学后正常玩家的下限近似);`policy="perfect"` = **完美画像**(single+subset 全推理零盲挖/卡死刷新——技能上界仪)。实现单一出口 = `sim/auto_player.gd`(novice_action / perfect_action)经 `sim/level_autoplay.gd`,调试浮窗批量模拟与各扫描工具自动同口径;战斗层冒烟夹具与调试转储的 `choose_dig` 直调是机制测试夹具、不承载画像语义。分级依据与新旧读数(乱点 0%/5% → 基础定式 65%/90%)见 auto_player.gd 普通策略档节与台账 77。
单关诊断工具(level_debug.gd)随单关直入口口径退役(2026-09-23)——败退归因走 balance_verifier 冒险段(层/节点/敌人人读归因)。
战斗级工具(v1 遗产):`dump_battle.gd`(结算流水)/ `monte_carlo.gd`(战斗期望)/ `experiment_density.gd`(密度调参)。
战斗级工具(v1 遗产):`dump_battle.gd`(结算流水)/ `monte_carlo.gd`(战斗期望)。
## 范围(v1 范围 + v2 追加,用户 2026-09-10/11 确认)
Binary file not shown.

After

Width:  |  Height:  |  Size: 123 B

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://7mgi36hqrvej"
path="res://.godot/imported/seal_mark.png-4e00c69f08466c44d297a28c90752754.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/art/board/seal_mark.png"
dest_files=["res://.godot/imported/seal_mark.png-4e00c69f08466c44d297a28c90752754.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bqvh7631mcuaj"
path="res://.godot/imported/terrain_floor_deep_underdark_1.png-c1b190b8e4b3895184bdd0ee6bd74f82.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/art/board/terrain_floor_deep_underdark_1.png"
dest_files=["res://.godot/imported/terrain_floor_deep_underdark_1.png-c1b190b8e4b3895184bdd0ee6bd74f82.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://x6sl5ht6n2uc"
path="res://.godot/imported/terrain_floor_deep_underdark_2.png-c0469b1cf1af026328686618be34f5d3.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/art/board/terrain_floor_deep_underdark_2.png"
dest_files=["res://.godot/imported/terrain_floor_deep_underdark_2.png-c0469b1cf1af026328686618be34f5d3.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://blj41w52x8poi"
path="res://.godot/imported/terrain_floor_deep_underdark_3.png-f159b9c2d516f78ef7d19b05a4631d11.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/art/board/terrain_floor_deep_underdark_3.png"
dest_files=["res://.godot/imported/terrain_floor_deep_underdark_3.png-f159b9c2d516f78ef7d19b05a4631d11.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b3bwubcxsl5jq"
path="res://.godot/imported/terrain_floor_deep_underdark_4.png-f5f15b985679a255ff00e1b8688e15b2.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/art/board/terrain_floor_deep_underdark_4.png"
dest_files=["res://.godot/imported/terrain_floor_deep_underdark_4.png-f5f15b985679a255ff00e1b8688e15b2.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cv07q7w556bwy"
path="res://.godot/imported/terrain_floor_deep_underdark_5.png-143a53136daea878fff67d8ac9e05c42.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/art/board/terrain_floor_deep_underdark_5.png"
dest_files=["res://.godot/imported/terrain_floor_deep_underdark_5.png-143a53136daea878fff67d8ac9e05c42.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b65onwkof3wsy"
path="res://.godot/imported/terrain_floor_dungeon_1.png-40bb7fc26d6ced997a8f1cc9005b6f18.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/art/board/terrain_floor_dungeon_1.png"
dest_files=["res://.godot/imported/terrain_floor_dungeon_1.png-40bb7fc26d6ced997a8f1cc9005b6f18.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ddqxia2sv5ktq"
path="res://.godot/imported/terrain_floor_dungeon_2.png-c4869c7b250ede2771251e1c17af6563.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/art/board/terrain_floor_dungeon_2.png"
dest_files=["res://.godot/imported/terrain_floor_dungeon_2.png-c4869c7b250ede2771251e1c17af6563.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bieystjeu21q4"
path="res://.godot/imported/terrain_floor_dungeon_3.png-148125c305ac1d93b24d178431bf294e.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/art/board/terrain_floor_dungeon_3.png"
dest_files=["res://.godot/imported/terrain_floor_dungeon_3.png-148125c305ac1d93b24d178431bf294e.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://q5eko1txuoq5"
path="res://.godot/imported/terrain_floor_dungeon_4.png-3fe81a46ece4b02dc031045919a12259.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/art/board/terrain_floor_dungeon_4.png"
dest_files=["res://.godot/imported/terrain_floor_dungeon_4.png-3fe81a46ece4b02dc031045919a12259.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bvyjsdrcsysi1"
path="res://.godot/imported/terrain_floor_dungeon_5.png-de6614fc89049d19ea41225a836f9d75.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/art/board/terrain_floor_dungeon_5.png"
dest_files=["res://.godot/imported/terrain_floor_dungeon_5.png-de6614fc89049d19ea41225a836f9d75.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://tql72osnj7b4"
path="res://.godot/imported/terrain_floor_underdark_1.png-f600aa8d0e421e81abdeacc2ca1e684d.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/art/board/terrain_floor_underdark_1.png"
dest_files=["res://.godot/imported/terrain_floor_underdark_1.png-f600aa8d0e421e81abdeacc2ca1e684d.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b5wep4y81o1jw"
path="res://.godot/imported/terrain_floor_underdark_2.png-af44e8e4b98a05a2d39075dbcd9d4e01.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/art/board/terrain_floor_underdark_2.png"
dest_files=["res://.godot/imported/terrain_floor_underdark_2.png-af44e8e4b98a05a2d39075dbcd9d4e01.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dui4ogsp407gh"
path="res://.godot/imported/terrain_floor_underdark_3.png-2b02c10af1a0cdae05a3e6c4b62383db.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/art/board/terrain_floor_underdark_3.png"
dest_files=["res://.godot/imported/terrain_floor_underdark_3.png-2b02c10af1a0cdae05a3e6c4b62383db.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cmhm5txfhgwx3"
path="res://.godot/imported/terrain_floor_underdark_4.png-f1fdca02c60c236ff6c7656d2c63a42e.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/art/board/terrain_floor_underdark_4.png"
dest_files=["res://.godot/imported/terrain_floor_underdark_4.png-f1fdca02c60c236ff6c7656d2c63a42e.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://l2rq0unla3uv"
path="res://.godot/imported/terrain_floor_underdark_5.png-b581b01cb084ee52178ca96663e73933.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/art/board/terrain_floor_underdark_5.png"
dest_files=["res://.godot/imported/terrain_floor_underdark_5.png-b581b01cb084ee52178ca96663e73933.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://rgaccyhfmihw"
path="res://.godot/imported/terrain_wall_center_crack_deep_underdark.png-2d56722bbd6050f6b795a625b3edaa6c.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/art/board/terrain_wall_center_crack_deep_underdark.png"
dest_files=["res://.godot/imported/terrain_wall_center_crack_deep_underdark.png-2d56722bbd6050f6b795a625b3edaa6c.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cgr1rjgu7yw3v"
path="res://.godot/imported/terrain_wall_center_crack_dungeon.png-df45d525c0fd838550460540defe30f2.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/art/board/terrain_wall_center_crack_dungeon.png"
dest_files=["res://.godot/imported/terrain_wall_center_crack_dungeon.png-df45d525c0fd838550460540defe30f2.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bv36y7mva45uy"
path="res://.godot/imported/terrain_wall_center_crack_underdark.png-8ca77a6201e1431a0db830c2275ad51e.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/art/board/terrain_wall_center_crack_underdark.png"
dest_files=["res://.godot/imported/terrain_wall_center_crack_underdark.png-8ca77a6201e1431a0db830c2275ad51e.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dvhyhx04wiouj"
path="res://.godot/imported/terrain_wall_center_deep_underdark.png-21dba86720ce186d7016925f8a498d80.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/art/board/terrain_wall_center_deep_underdark.png"
dest_files=["res://.godot/imported/terrain_wall_center_deep_underdark.png-21dba86720ce186d7016925f8a498d80.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://qxf2g7lov6th"
path="res://.godot/imported/terrain_wall_center_dungeon.png-658b0d351ec8a12f85a4143d159fb3fd.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/art/board/terrain_wall_center_dungeon.png"
dest_files=["res://.godot/imported/terrain_wall_center_dungeon.png-658b0d351ec8a12f85a4143d159fb3fd.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://l7y5j2ksy8ax"
path="res://.godot/imported/terrain_wall_center_speckle_deep_underdark.png-18c3524fcd66d9ed2ed95e2e87467104.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/art/board/terrain_wall_center_speckle_deep_underdark.png"
dest_files=["res://.godot/imported/terrain_wall_center_speckle_deep_underdark.png-18c3524fcd66d9ed2ed95e2e87467104.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cf8sm7ryxvgph"
path="res://.godot/imported/terrain_wall_center_speckle_dungeon.png-2ccd555fef371b488c3dc218ae241295.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/art/board/terrain_wall_center_speckle_dungeon.png"
dest_files=["res://.godot/imported/terrain_wall_center_speckle_dungeon.png-2ccd555fef371b488c3dc218ae241295.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://db0pevpne83kk"
path="res://.godot/imported/terrain_wall_center_speckle_underdark.png-a6e4207e2f82bef11f1ec867f81aeef8.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/art/board/terrain_wall_center_speckle_underdark.png"
dest_files=["res://.godot/imported/terrain_wall_center_speckle_underdark.png-a6e4207e2f82bef11f1ec867f81aeef8.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cvo0jytgh8bgh"
path="res://.godot/imported/terrain_wall_center_underdark.png-4586560d6659927249e74c4aef1c55db.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/art/board/terrain_wall_center_underdark.png"
dest_files=["res://.godot/imported/terrain_wall_center_underdark.png-4586560d6659927249e74c4aef1c55db.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ebb36udrrlco"
path="res://.godot/imported/terrain_wall_end_n_deep_underdark.png-953a459c1d7d70cb54ff21d6e65e947e.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/art/board/terrain_wall_end_n_deep_underdark.png"
dest_files=["res://.godot/imported/terrain_wall_end_n_deep_underdark.png-953a459c1d7d70cb54ff21d6e65e947e.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bjkoixrqxyfvi"
path="res://.godot/imported/terrain_wall_end_n_dungeon.png-0292ee08e0a9524fae5fce50c83e27a0.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/art/board/terrain_wall_end_n_dungeon.png"
dest_files=["res://.godot/imported/terrain_wall_end_n_dungeon.png-0292ee08e0a9524fae5fce50c83e27a0.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dwisuhgfosirs"
path="res://.godot/imported/terrain_wall_end_n_underdark.png-623c49a4e05a066226c2dfb6e066d735.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/art/board/terrain_wall_end_n_underdark.png"
dest_files=["res://.godot/imported/terrain_wall_end_n_underdark.png-623c49a4e05a066226c2dfb6e066d735.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c3jin8ytakl8a"
path="res://.godot/imported/terrain_wall_end_s_deep_underdark.png-6c06ef145e41ecfc9bbdfc330ea28e29.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/art/board/terrain_wall_end_s_deep_underdark.png"
dest_files=["res://.godot/imported/terrain_wall_end_s_deep_underdark.png-6c06ef145e41ecfc9bbdfc330ea28e29.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dxu6my20xmrcw"
path="res://.godot/imported/terrain_wall_end_s_dungeon.png-57e9f35af5ee5188529d19914d6ca77c.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/art/board/terrain_wall_end_s_dungeon.png"
dest_files=["res://.godot/imported/terrain_wall_end_s_dungeon.png-57e9f35af5ee5188529d19914d6ca77c.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b4vqrhnwi6dt"
path="res://.godot/imported/terrain_wall_end_s_underdark.png-bc9e276e09623b0334da8ed6dfe0eab1.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/art/board/terrain_wall_end_s_underdark.png"
dest_files=["res://.godot/imported/terrain_wall_end_s_underdark.png-bc9e276e09623b0334da8ed6dfe0eab1.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bii82y3sk4grg"
path="res://.godot/imported/terrain_wall_end_w_deep_underdark.png-d8d8a5cb939f178b0b824311d090e725.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/art/board/terrain_wall_end_w_deep_underdark.png"
dest_files=["res://.godot/imported/terrain_wall_end_w_deep_underdark.png-d8d8a5cb939f178b0b824311d090e725.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b65l0bhfd558i"
path="res://.godot/imported/terrain_wall_end_w_dungeon.png-3aad2e0c1657cf6eebf27b020b395b2c.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/art/board/terrain_wall_end_w_dungeon.png"
dest_files=["res://.godot/imported/terrain_wall_end_w_dungeon.png-3aad2e0c1657cf6eebf27b020b395b2c.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cd5s6k3b7im7e"
path="res://.godot/imported/terrain_wall_end_w_underdark.png-9186bc905359de8487544281666215d5.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/art/board/terrain_wall_end_w_underdark.png"
dest_files=["res://.godot/imported/terrain_wall_end_w_underdark.png-9186bc905359de8487544281666215d5.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Loaded 100 of 474 files, more files were not shown because too many files have changed in this diff. Show more