⑦T1: 种子三分判定单点落码——_seed_value() 改三分(显式合法整数全场景优先含首局/首局存档布尔判定恒42 P5甲/非首局空框引擎全局熵randi() 不走rng_service封闭流ADR-0007豁免面);调试浮窗种子框默认文本42改空框+占位提示「留空=随机 · 首局恒 42」(代拍板白名单);五探针种子钉死审计🔴(ui_input/ui_layout/ui_click/ui_probe/ui_struct 显式填42禁依赖默认分支——ui_probe系审计三件外同病灶随批修复);ui_click_probe 调试入口断言改向P2甲迁宿主(开始层角标退役断言+DS_DEBUG未设不默认开断言——暂态红待T2落码消);冒烟811/0三闸全过=S2确定性反证通过
This commit is contained in:
1 parent
adadf56376
commit
40fb4a5c1b
7 files changed
+24
-6
No files matched your search
@@ -1208,6 +1208,15 @@ func _on_tune_simulate(n: int) -> void:
|
|||||||
# ==================== 工具 ====================
|
# ==================== 工具 ====================
|
||||||
|
|
||||||
func _seed_value() -> int:
|
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():
|
if _seed_edit.text.is_valid_int():
|
||||||
return int(_seed_edit.text)
|
return int(_seed_edit.text)
|
||||||
|
if save_manager != null and not save_manager.is_first_adventure_done():
|
||||||
|
return randi()
|
||||||
return 42
|
return 42
|
||||||
@@ -158,12 +158,14 @@ func _build() -> void:
|
|||||||
fx_btn.text = "纹章拼合" if UiKit.victory_fx_style == "crest" else "尘金粒子")
|
fx_btn.text = "纹章拼合" if UiKit.victory_fx_style == "crest" else "尘金粒子")
|
||||||
fx_row.add_child(fx_btn)
|
fx_row.add_child(fx_btn)
|
||||||
|
|
||||||
# 区块①随机种子(原开始覆盖层种子行迁入——非法定值回退 42 的口径归组合根 _seed_value)
|
# 区块①随机种子(原开始覆盖层种子行迁入——种子三分判定归组合根 _seed_value 单点):
|
||||||
|
# 默认空框(迭代 18 卡⑦ C1——空=随全局规则:首局恒 42/非首局随机;显式填入全场景优先)
|
||||||
var seed_row := HBoxContainer.new()
|
var seed_row := HBoxContainer.new()
|
||||||
list.add_child(seed_row)
|
list.add_child(seed_row)
|
||||||
seed_row.add_child(UiKit.label("随机种子",UiKit.FS_BODY, false))
|
seed_row.add_child(UiKit.label("随机种子",UiKit.FS_BODY, false))
|
||||||
seed_edit = LineEdit.new()
|
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_edit.custom_minimum_size = Vector2(120, 0)
|
||||||
seed_row.add_child(seed_edit)
|
seed_row.add_child(seed_edit)
|
||||||
list.add_child(HSeparator.new())
|
list.add_child(HSeparator.new())
|
||||||
|
|||||||
@@ -131,10 +131,12 @@ func _ready() -> void:
|
|||||||
_problems.append("音量滑杆未实时生效(master bus db %f ≠ %f)" % [AudioServer.get_bus_volume_db(master_idx), expect_db])
|
_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:
|
if absf(iso_s.volume_linear - 0.3) > 0.001:
|
||||||
_problems.append("音量未入 store(%f ≠ 0.3)" % iso_s.volume_linear)
|
_problems.append("音量未入 store(%f ≠ 0.3)" % iso_s.volume_linear)
|
||||||
# 调试入口默认隐藏门控(卡④ AC④——探针环境 DS_DEBUG 未设)
|
# 调试入口断言改向(迭代 18 卡⑦ P2 甲——开始层角标退役迁宿主两屏;探针环境 DS_DEBUG 未设
|
||||||
var dbg_btn: Button = ProbeUiUtil.find_button(main._start_overlay, "调试", "prefix")
|
# =浮窗不默认开〔P3 门控〕、DS_DEBUG 门控由开始层角标移两屏角标)
|
||||||
if dbg_btn != null and dbg_btn.visible:
|
if ProbeUiUtil.find_button(main._start_overlay, "调试", "prefix") != null:
|
||||||
_problems.append("调试入口未隐藏(DS_DEBUG 门控失守——卡④ AC④)")
|
_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")
|
var settings_close: Button = ProbeUiUtil.find_button(main.settings_overlay, "返回", "prefix")
|
||||||
if settings_close == null:
|
if settings_close == null:
|
||||||
_problems.append("设置面返回按钮缺失")
|
_problems.append("设置面返回按钮缺失")
|
||||||
@@ -160,6 +162,7 @@ func _ready() -> void:
|
|||||||
elif resume_btn0.visible:
|
elif resume_btn0.visible:
|
||||||
_problems.append("无断点态继续上局按钮未隐藏(卡② AC①——新档合法空态)")
|
_problems.append("无断点态继续上局按钮未隐藏(卡② AC①——新档合法空态)")
|
||||||
main.debug_overlay.set_sliders(400, 200) # 高加成保 L1 可通关——L2 岔路选路段只能经冒险推进到达(单关直入口退役)
|
main.debug_overlay.set_sliders(400, 200) # 高加成保 L1 可通关——L2 岔路选路段只能经冒险推进到达(单关直入口退役)
|
||||||
|
main.debug_overlay.seed_edit.text = "42" # 种子钉死(迭代 18 卡⑦审计🔴——种子框默认改空后空框=非首局随机,行为走查确定性禁依赖默认分支)
|
||||||
var t1 := Time.get_ticks_msec()
|
var t1 := Time.get_ticks_msec()
|
||||||
main._start_adventure_from_menu()
|
main._start_adventure_from_menu()
|
||||||
await get_tree().process_frame
|
await get_tree().process_frame
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ func _ready() -> void:
|
|||||||
# 同 ui_click_probe 隔离纪律。首次冒险布尔位置位=对齐真实档游玩史口径,模板抽签路径不变;
|
# 同 ui_click_probe 隔离纪律。首次冒险布尔位置位=对齐真实档游玩史口径,模板抽签路径不变;
|
||||||
# isolate_save 先删后建——上次运行的残留断点会触发互斥确认早退)
|
# isolate_save 先删后建——上次运行的残留断点会触发互斥确认早退)
|
||||||
ProbeUiUtil.isolate_save(main, "smoke_input_probe_save", true, false, true)
|
ProbeUiUtil.isolate_save(main, "smoke_input_probe_save", true, false, true)
|
||||||
|
main.debug_overlay.seed_edit.text = "42" # 种子钉死(迭代 18 卡⑦审计🔴——种子框默认改空后空框=非首局随机,探针确定性禁依赖默认分支)
|
||||||
main._start_adventure_from_menu()
|
main._start_adventure_from_menu()
|
||||||
await get_tree().process_frame
|
await get_tree().process_frame
|
||||||
# ---- ⑫ 图上命中真实输入(关卡画面实装批 2026-09-28 回归闸):入口停点候选节点中心
|
# ---- ⑫ 图上命中真实输入(关卡画面实装批 2026-09-28 回归闸):入口停点候选节点中心
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ func _ready() -> void:
|
|||||||
# 存档隔离(迭代 8 卡①②——停点断点写盘随 main.save_manager;探针禁碰真实档,同族探针隔离纪律;
|
# 存档隔离(迭代 8 卡①②——停点断点写盘随 main.save_manager;探针禁碰真实档,同族探针隔离纪律;
|
||||||
# isolate_save 先删后建——上次运行的残留断点会触发互斥确认早退)
|
# isolate_save 先删后建——上次运行的残留断点会触发互斥确认早退)
|
||||||
ProbeUiUtil.isolate_save(main, "smoke_layout_probe_save", true, false, true)
|
ProbeUiUtil.isolate_save(main, "smoke_layout_probe_save", true, false, true)
|
||||||
|
main.debug_overlay.seed_edit.text = "42" # 种子钉死(迭代 18 卡⑦审计🔴——种子框默认改空后空框=非首局随机,探针确定性禁依赖默认分支)
|
||||||
main._start_adventure_from_menu()
|
main._start_adventure_from_menu()
|
||||||
for i in range(3):
|
for i in range(3):
|
||||||
await get_tree().process_frame
|
await get_tree().process_frame
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ func _ready() -> void:
|
|||||||
problems.append("营地关闭后未恢复开始层(开合往返失守)")
|
problems.append("营地关闭后未恢复开始层(开合往返失守)")
|
||||||
# 换回全新零档(营地段购买态不泄入后续冒险段——确定性;先删后建防陈旧档泄入)
|
# 换回全新零档(营地段购买态不泄入后续冒险段——确定性;先删后建防陈旧档泄入)
|
||||||
ProbeUiUtil.isolate_save(main, "smoke_ui_probe_camp", true, false, true)
|
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()
|
main._start_adventure_from_menu()
|
||||||
await get_tree().process_frame
|
await get_tree().process_frame
|
||||||
await get_tree().process_frame
|
await get_tree().process_frame
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ func _ready() -> void:
|
|||||||
|
|
||||||
# ---- 冒险簇(真流推进:开冒险→地图选路态→选战斗节点→战斗 HUD)----
|
# ---- 冒险簇(真流推进:开冒险→地图选路态→选战斗节点→战斗 HUD)----
|
||||||
ProbeUiUtil.isolate_save(main, "smoke_ui_struct_probe_adv", true, false, true)
|
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()
|
main._start_adventure_from_menu()
|
||||||
_settle(4)
|
_settle(4)
|
||||||
await _audit("level_map", [main.level_screen])
|
await _audit("level_map", [main.level_screen])
|
||||||
|
|||||||
Reference in new issue
Block a user