From 40fb4a5c1b963a51609e58b50be1010d9d568797 Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Wed, 7 Oct 2026 06:36:19 +0800 Subject: [PATCH] =?UTF-8?q?=E2=91=A6T1:=20=E7=A7=8D=E5=AD=90=E4=B8=89?= =?UTF-8?q?=E5=88=86=E5=88=A4=E5=AE=9A=E5=8D=95=E7=82=B9=E8=90=BD=E7=A0=81?= =?UTF-8?q?=E2=80=94=E2=80=94=5Fseed=5Fvalue()=20=E6=94=B9=E4=B8=89?= =?UTF-8?q?=E5=88=86=EF=BC=88=E6=98=BE=E5=BC=8F=E5=90=88=E6=B3=95=E6=95=B4?= =?UTF-8?q?=E6=95=B0=E5=85=A8=E5=9C=BA=E6=99=AF=E4=BC=98=E5=85=88=E5=90=AB?= =?UTF-8?q?=E9=A6=96=E5=B1=80/=E9=A6=96=E5=B1=80=E5=AD=98=E6=A1=A3?= =?UTF-8?q?=E5=B8=83=E5=B0=94=E5=88=A4=E5=AE=9A=E6=81=9242=20P5=E7=94=B2/?= =?UTF-8?q?=E9=9D=9E=E9=A6=96=E5=B1=80=E7=A9=BA=E6=A1=86=E5=BC=95=E6=93=8E?= =?UTF-8?q?=E5=85=A8=E5=B1=80=E7=86=B5randi()=20=E4=B8=8D=E8=B5=B0rng=5Fse?= =?UTF-8?q?rvice=E5=B0=81=E9=97=AD=E6=B5=81ADR-0007=E8=B1=81=E5=85=8D?= =?UTF-8?q?=E9=9D=A2=EF=BC=89=EF=BC=9B=E8=B0=83=E8=AF=95=E6=B5=AE=E7=AA=97?= =?UTF-8?q?=E7=A7=8D=E5=AD=90=E6=A1=86=E9=BB=98=E8=AE=A4=E6=96=87=E6=9C=AC?= =?UTF-8?q?42=E6=94=B9=E7=A9=BA=E6=A1=86+=E5=8D=A0=E4=BD=8D=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E3=80=8C=E7=95=99=E7=A9=BA=3D=E9=9A=8F=E6=9C=BA=20?= =?UTF-8?q?=C2=B7=20=E9=A6=96=E5=B1=80=E6=81=92=2042=E3=80=8D=EF=BC=88?= =?UTF-8?q?=E4=BB=A3=E6=8B=8D=E6=9D=BF=E7=99=BD=E5=90=8D=E5=8D=95=EF=BC=89?= =?UTF-8?q?=EF=BC=9B=E4=BA=94=E6=8E=A2=E9=92=88=E7=A7=8D=E5=AD=90=E9=92=89?= =?UTF-8?q?=E6=AD=BB=E5=AE=A1=E8=AE=A1=F0=9F=94=B4=EF=BC=88ui=5Finput/ui?= =?UTF-8?q?=5Flayout/ui=5Fclick/ui=5Fprobe/ui=5Fstruct=20=E6=98=BE?= =?UTF-8?q?=E5=BC=8F=E5=A1=AB42=E7=A6=81=E4=BE=9D=E8=B5=96=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E5=88=86=E6=94=AF=E2=80=94=E2=80=94ui=5Fprobe?= =?UTF-8?q?=E7=B3=BB=E5=AE=A1=E8=AE=A1=E4=B8=89=E4=BB=B6=E5=A4=96=E5=90=8C?= =?UTF-8?q?=E7=97=85=E7=81=B6=E9=9A=8F=E6=89=B9=E4=BF=AE=E5=A4=8D=EF=BC=89?= =?UTF-8?q?=EF=BC=9Bui=5Fclick=5Fprobe=20=E8=B0=83=E8=AF=95=E5=85=A5?= =?UTF-8?q?=E5=8F=A3=E6=96=AD=E8=A8=80=E6=94=B9=E5=90=91P2=E7=94=B2?= =?UTF-8?q?=E8=BF=81=E5=AE=BF=E4=B8=BB=EF=BC=88=E5=BC=80=E5=A7=8B=E5=B1=82?= =?UTF-8?q?=E8=A7=92=E6=A0=87=E9=80=80=E5=BD=B9=E6=96=AD=E8=A8=80+DS=5FDEB?= =?UTF-8?q?UG=E6=9C=AA=E8=AE=BE=E4=B8=8D=E9=BB=98=E8=AE=A4=E5=BC=80?= =?UTF-8?q?=E6=96=AD=E8=A8=80=E2=80=94=E2=80=94=E6=9A=82=E6=80=81=E7=BA=A2?= =?UTF-8?q?=E5=BE=85T2=E8=90=BD=E7=A0=81=E6=B6=88=EF=BC=89=EF=BC=9B?= =?UTF-8?q?=E5=86=92=E7=83=9F811/0=E4=B8=89=E9=97=B8=E5=85=A8=E8=BF=87=3DS?= =?UTF-8?q?2=E7=A1=AE=E5=AE=9A=E6=80=A7=E5=8F=8D=E8=AF=81=E9=80=9A?= =?UTF-8?q?=E8=BF=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game/presentation/main.gd | 9 +++++++++ game/presentation/views/debug_overlay.gd | 6 ++++-- game/smoke/ui_click_probe.gd | 11 +++++++---- game/smoke/ui_input_probe.gd | 1 + game/smoke/ui_layout_probe.gd | 1 + game/smoke/ui_probe.gd | 1 + game/smoke/ui_struct_probe.gd | 1 + 7 files changed, 24 insertions(+), 6 deletions(-) diff --git a/game/presentation/main.gd b/game/presentation/main.gd index 6bc64d3c..46441180 100644 --- a/game/presentation/main.gd +++ b/game/presentation/main.gd @@ -1208,6 +1208,15 @@ func _on_tune_simulate(n: int) -> void: # ==================== 工具 ==================== func _seed_value() -> int: + # 种子三分判定单点(迭代 18 卡⑦ C1——全工程唯一种子框读取处,禁第二处读框): + # ①显式合法整数全场景优先(含首局——测试/调试接口显式指定;第五路 DebugSession Callable + # 经本函数=调试对局与玩家同口径,P6 甲); + # ②首局固定 42(P5 甲——存档现役布尔 is_first_adventure_done:新档显式 false=教学局, + # 老档缺省 true=有游玩史;教学重放模板 0 即在此种子下标定); + # ③非首局空/非法框=引擎全局熵 randi()(Godot 4 启动自播种子,headless 同;不走 rng_service + # 封闭流、禁 randomize()/自建 RNG——组合根建种子属 ADR-0007 豁免面,不进玩法 RNG 消费) if _seed_edit.text.is_valid_int(): return int(_seed_edit.text) + if save_manager != null and not save_manager.is_first_adventure_done(): + return randi() return 42 diff --git a/game/presentation/views/debug_overlay.gd b/game/presentation/views/debug_overlay.gd index a98143ec..77eb69f3 100644 --- a/game/presentation/views/debug_overlay.gd +++ b/game/presentation/views/debug_overlay.gd @@ -158,12 +158,14 @@ func _build() -> void: fx_btn.text = "纹章拼合" if UiKit.victory_fx_style == "crest" else "尘金粒子") fx_row.add_child(fx_btn) - # 区块①随机种子(原开始覆盖层种子行迁入——非法定值回退 42 的口径归组合根 _seed_value) + # 区块①随机种子(原开始覆盖层种子行迁入——种子三分判定归组合根 _seed_value 单点): + # 默认空框(迭代 18 卡⑦ C1——空=随全局规则:首局恒 42/非首局随机;显式填入全场景优先) var seed_row := HBoxContainer.new() list.add_child(seed_row) seed_row.add_child(UiKit.label("随机种子",UiKit.FS_BODY, false)) seed_edit = LineEdit.new() - seed_edit.text = "42" + seed_edit.text = "" + seed_edit.placeholder_text = "留空=随机 · 首局恒 42" seed_edit.custom_minimum_size = Vector2(120, 0) seed_row.add_child(seed_edit) list.add_child(HSeparator.new()) diff --git a/game/smoke/ui_click_probe.gd b/game/smoke/ui_click_probe.gd index 99b315c9..8e6e03a8 100644 --- a/game/smoke/ui_click_probe.gd +++ b/game/smoke/ui_click_probe.gd @@ -131,10 +131,12 @@ func _ready() -> void: _problems.append("音量滑杆未实时生效(master bus db %f ≠ %f)" % [AudioServer.get_bus_volume_db(master_idx), expect_db]) if absf(iso_s.volume_linear - 0.3) > 0.001: _problems.append("音量未入 store(%f ≠ 0.3)" % iso_s.volume_linear) - # 调试入口默认隐藏门控(卡④ AC④——探针环境 DS_DEBUG 未设) - var dbg_btn: Button = ProbeUiUtil.find_button(main._start_overlay, "调试", "prefix") - if dbg_btn != null and dbg_btn.visible: - _problems.append("调试入口未隐藏(DS_DEBUG 门控失守——卡④ AC④)") + # 调试入口断言改向(迭代 18 卡⑦ P2 甲——开始层角标退役迁宿主两屏;探针环境 DS_DEBUG 未设 + # =浮窗不默认开〔P3 门控〕、DS_DEBUG 门控由开始层角标移两屏角标) + if ProbeUiUtil.find_button(main._start_overlay, "调试", "prefix") != null: + _problems.append("开始层调试角标未退役(迭代 18 卡⑦ P2 甲迁宿主失守)") + if main.debug_overlay.visible: + _problems.append("DS_DEBUG 未设时浮窗默认开(P3 启动门控失守)") var settings_close: Button = ProbeUiUtil.find_button(main.settings_overlay, "返回", "prefix") if settings_close == null: _problems.append("设置面返回按钮缺失") @@ -160,6 +162,7 @@ func _ready() -> void: elif resume_btn0.visible: _problems.append("无断点态继续上局按钮未隐藏(卡② AC①——新档合法空态)") main.debug_overlay.set_sliders(400, 200) # 高加成保 L1 可通关——L2 岔路选路段只能经冒险推进到达(单关直入口退役) + main.debug_overlay.seed_edit.text = "42" # 种子钉死(迭代 18 卡⑦审计🔴——种子框默认改空后空框=非首局随机,行为走查确定性禁依赖默认分支) var t1 := Time.get_ticks_msec() main._start_adventure_from_menu() await get_tree().process_frame diff --git a/game/smoke/ui_input_probe.gd b/game/smoke/ui_input_probe.gd index f4cba8e5..a3291bd5 100644 --- a/game/smoke/ui_input_probe.gd +++ b/game/smoke/ui_input_probe.gd @@ -31,6 +31,7 @@ func _ready() -> void: # 同 ui_click_probe 隔离纪律。首次冒险布尔位置位=对齐真实档游玩史口径,模板抽签路径不变; # isolate_save 先删后建——上次运行的残留断点会触发互斥确认早退) ProbeUiUtil.isolate_save(main, "smoke_input_probe_save", true, false, true) + main.debug_overlay.seed_edit.text = "42" # 种子钉死(迭代 18 卡⑦审计🔴——种子框默认改空后空框=非首局随机,探针确定性禁依赖默认分支) main._start_adventure_from_menu() await get_tree().process_frame # ---- ⑫ 图上命中真实输入(关卡画面实装批 2026-09-28 回归闸):入口停点候选节点中心 diff --git a/game/smoke/ui_layout_probe.gd b/game/smoke/ui_layout_probe.gd index cbdc2538..582f4d6d 100644 --- a/game/smoke/ui_layout_probe.gd +++ b/game/smoke/ui_layout_probe.gd @@ -15,6 +15,7 @@ func _ready() -> void: # 存档隔离(迭代 8 卡①②——停点断点写盘随 main.save_manager;探针禁碰真实档,同族探针隔离纪律; # isolate_save 先删后建——上次运行的残留断点会触发互斥确认早退) ProbeUiUtil.isolate_save(main, "smoke_layout_probe_save", true, false, true) + main.debug_overlay.seed_edit.text = "42" # 种子钉死(迭代 18 卡⑦审计🔴——种子框默认改空后空框=非首局随机,探针确定性禁依赖默认分支) main._start_adventure_from_menu() for i in range(3): await get_tree().process_frame diff --git a/game/smoke/ui_probe.gd b/game/smoke/ui_probe.gd index eed02c8a..43f43e61 100644 --- a/game/smoke/ui_probe.gd +++ b/game/smoke/ui_probe.gd @@ -54,6 +54,7 @@ func _ready() -> void: problems.append("营地关闭后未恢复开始层(开合往返失守)") # 换回全新零档(营地段购买态不泄入后续冒险段——确定性;先删后建防陈旧档泄入) ProbeUiUtil.isolate_save(main, "smoke_ui_probe_camp", true, false, true) + main.debug_overlay.seed_edit.text = "42" # 种子钉死(迭代 18 卡⑦——种子框默认改空后空框=非首局随机;本探针 start_single 第五路同吃此框,确定性禁依赖默认分支) main._start_adventure_from_menu() await get_tree().process_frame await get_tree().process_frame diff --git a/game/smoke/ui_struct_probe.gd b/game/smoke/ui_struct_probe.gd index 370068a3..925e2e61 100644 --- a/game/smoke/ui_struct_probe.gd +++ b/game/smoke/ui_struct_probe.gd @@ -62,6 +62,7 @@ func _ready() -> void: # ---- 冒险簇(真流推进:开冒险→地图选路态→选战斗节点→战斗 HUD)---- ProbeUiUtil.isolate_save(main, "smoke_ui_struct_probe_adv", true, false, true) + main.debug_overlay.seed_edit.text = "42" # 种子钉死(迭代 18 卡⑦——种子框默认改空后空框=非首局随机,结构采样确定性禁依赖默认分支) main._start_adventure_from_menu() _settle(4) await _audit("level_map", [main.level_screen])