From 13f93c74ff61e9a82d5df939e9493fc2718662ac Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Thu, 24 Sep 2026 04:02:21 +0800 Subject: [PATCH] =?UTF-8?q?chore(structure):=20=E5=9E=82=E7=9B=B4=E5=88=87?= =?UTF-8?q?=E7=89=87=E8=BD=AC=E6=AD=A3=E2=80=94=E2=80=94prototypes/dungeon?= =?UTF-8?q?-sweeper-vertical-slice=20=E8=BF=81=E4=B8=BA=20game/=EF=BC=8C26?= =?UTF-8?q?=20=E6=96=87=E4=BB=B6=E8=B7=AF=E5=BE=84=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=EF=BC=88CLAUDE.md/tools=C3=974/tests=C3=973/QA=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=C3=973/GDD=C3=976/=E6=9E=B6=E6=9E=84=E6=96=87?= =?UTF-8?q?=E6=A1=A3=EF=BC=89=EF=BC=8Cstatic=5Fscan=20S1/S2+S4=20=E8=A7=84?= =?UTF-8?q?=E5=88=99=E9=9B=86=E9=A6=96=E8=B7=91=E6=94=B6=E6=95=9B=EF=BC=88?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=8B=8D=E6=9D=BF=202026-09-24=EF=BC=8C?= =?UTF-8?q?=E5=8F=B0=E8=B4=A6=20148=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CLAUDE.md | 2 +- design/gdd/03-内容规模.md | 2 +- design/gdd/systems/冒险循环/难度曲线与Boss.md | 2 +- design/gdd/systems/战斗循环/地图战斗资源.md | 6 ++-- design/gdd/systems/战斗循环/敌人系统.md | 2 +- design/gdd/systems/排雷循环/排雷玩法.md | 2 +- design/gdd/systems/排雷循环/行动经济.md | 4 +-- .../audit-clear-dominance-2026-09-19.md | 2 +- .../proposal-gp-shop-room-2026-09-20.md | 12 +++---- ...-reward-cell-differentiation-2026-09-17.md | 34 +++++++++--------- docs/acceptance-ap6-ac.md | 4 +-- docs/architecture/architecture.md | 2 +- .../code-architecture-review-2026-09-13.md | 2 +- docs/code-conventions.md | 2 +- .../README.md | 0 .../core/action_economy.gd | 0 .../core/action_economy.gd.uid | 0 .../core/adventure_runner.gd | 0 .../core/adventure_runner.gd.uid | 0 .../core/battle_orchestrator.gd | 0 .../core/battle_orchestrator.gd.uid | 0 .../core/board_data.gd | 0 .../core/board_data.gd.uid | 0 .../core/board_generator.gd | 0 .../core/board_generator.gd.uid | 0 .../core/config_db.gd | 0 .../core/config_db.gd.uid | 0 .../core/damage_math.gd | 0 .../core/damage_math.gd.uid | 0 .../core/level_runner.gd | 0 .../core/level_runner.gd.uid | 0 .../core/meta_progression.gd | 0 .../core/meta_progression.gd.uid | 0 .../core/minesweeper_rules.gd | 0 .../core/minesweeper_rules.gd.uid | 0 .../core/reward_economy.gd | 0 .../core/reward_economy.gd.uid | 0 .../core/rng_service.gd | 0 .../core/rng_service.gd.uid | 0 .../core/save_manager.gd | 0 .../core/save_manager.gd.uid | 0 .../core/skill_lottery.gd | 0 .../core/skill_lottery.gd.uid | 0 .../core/status_container.gd | 0 .../core/status_container.gd.uid | 0 .../core/unit_container.gd | 0 .../core/unit_container.gd.uid | 0 .../data/schemas/action_economy_table.gd | 0 .../data/schemas/action_economy_table.gd.uid | 0 .../data/schemas/adventure_table.gd | 0 .../data/schemas/adventure_table.gd.uid | 0 .../data/schemas/board_gen_table.gd | 0 .../data/schemas/board_gen_table.gd.uid | 0 .../data/schemas/difficulty_table.gd | 0 .../data/schemas/difficulty_table.gd.uid | 0 .../data/schemas/enemy_table.gd | 0 .../data/schemas/enemy_table.gd.uid | 0 .../data/schemas/hero_table.gd | 0 .../data/schemas/hero_table.gd.uid | 0 .../data/schemas/level_table.gd | 0 .../data/schemas/level_table.gd.uid | 0 .../data/schemas/meta_table.gd | 0 .../data/schemas/meta_table.gd.uid | 0 .../data/schemas/reward_table.gd | 0 .../data/schemas/reward_table.gd.uid | 0 .../data/schemas/settlement_table.gd | 0 .../data/schemas/settlement_table.gd.uid | 0 .../data/schemas/shop_table.gd | 0 .../data/schemas/shop_table.gd.uid | 0 .../data/schemas/skill_table.gd | 0 .../data/schemas/skill_table.gd.uid | 0 .../data/schemas/status_effect_table.gd | 0 .../data/schemas/status_effect_table.gd.uid | 0 .../data/schemas/variation_table.gd | 0 .../data/schemas/variation_table.gd.uid | 0 .../data/tables/action_economy.tres | 0 .../data/tables/adventure.tres | 0 .../data/tables/board_gen.tres | 0 .../data/tables/difficulty.tres | 0 .../data/tables/enemy.tres | 0 .../data/tables/hero.tres | 0 .../data/tables/level.tres | 0 .../data/tables/meta.tres | 0 .../data/tables/reward.tres | 0 .../data/tables/settlement.tres | 0 .../data/tables/shop.tres | 0 .../data/tables/skills.tres | 0 .../data/tables/status_effects.tres | 0 .../data/tables/variation.tres | 0 .../presentation/battle_narrator.gd | 0 .../presentation/battle_narrator.gd.uid | 0 .../presentation/debug_session.gd | 0 .../presentation/debug_session.gd.uid | 0 .../presentation/hud_presenter.gd | 0 .../presentation/hud_presenter.gd.uid | 0 .../presentation/main.gd | 0 .../presentation/main.gd.uid | 0 .../presentation/main.tscn | 0 .../presentation/modal_stack.gd | 0 .../presentation/modal_stack.gd.uid | 0 .../presentation/playtest_logger.gd | 0 .../presentation/playtest_logger.gd.uid | 0 .../presentation/tune_sim_controller.gd | 0 .../presentation/tune_sim_controller.gd.uid | 0 .../presentation/ui_assembler.gd | 0 .../presentation/ui_assembler.gd.uid | 0 .../presentation/views/ap_bar_view.gd | 0 .../presentation/views/ap_bar_view.gd.uid | 0 .../presentation/views/battle_end_overlay.gd | 0 .../views/battle_end_overlay.gd.uid | 0 .../presentation/views/battle_log_view.gd | 0 .../presentation/views/battle_log_view.gd.uid | 0 .../presentation/views/battle_stage_view.gd | 0 .../views/battle_stage_view.gd.uid | 0 .../presentation/views/board_cell_unit.gd | 0 .../presentation/views/board_cell_unit.gd.uid | 0 .../presentation/views/board_fx_view.gd | 0 .../presentation/views/board_fx_view.gd.uid | 0 .../presentation/views/board_view.gd | 0 .../presentation/views/board_view.gd.uid | 0 .../presentation/views/board_world.gd | 0 .../presentation/views/board_world.gd.uid | 0 .../presentation/views/board_zone_view.gd | 0 .../presentation/views/board_zone_view.gd.uid | 0 .../presentation/views/camp_overlay_view.gd | 0 .../views/camp_overlay_view.gd.uid | 0 .../presentation/views/desaturation.gdshader | 0 .../views/desaturation.gdshader.uid | 0 .../views/hero_info_panel_view.gd | 0 .../views/hero_info_panel_view.gd.uid | 0 .../presentation/views/legend_overlay.gd | 0 .../presentation/views/legend_overlay.gd.uid | 0 .../presentation/views/node_overlay.gd | 0 .../presentation/views/node_overlay.gd.uid | 0 .../presentation/views/route_overlay.gd | 0 .../presentation/views/route_overlay.gd.uid | 0 .../presentation/views/settlement_fx_view.gd | 0 .../views/settlement_fx_view.gd.uid | 0 .../views/settlement_review_overlay.gd | 0 .../views/settlement_review_overlay.gd.uid | 0 .../presentation/views/shop_overlay_view.gd | 0 .../views/shop_overlay_view.gd.uid | 0 .../presentation/views/standee_view.gd | 0 .../presentation/views/standee_view.gd.uid | 0 .../presentation/views/status_slot_row.gd | 0 .../presentation/views/status_slot_row.gd.uid | 0 .../presentation/views/toast_stack.gd | 0 .../presentation/views/toast_stack.gd.uid | 0 .../presentation/views/tune_panel.gd | 0 .../presentation/views/tune_panel.gd.uid | 0 .../presentation/views/ui_kit.gd | 0 .../presentation/views/ui_kit.gd.uid | 0 .../project.godot | 0 .../route_overlay_preview.png | Bin .../smoke/adventure_monte_carlo.gd | 0 .../smoke/adventure_monte_carlo.gd.uid | 0 .../smoke/auto_player.gd | 0 .../smoke/auto_player.gd.uid | 0 .../smoke/board_stat_probe.gd | 0 .../smoke/board_stat_probe.gd.uid | 0 .../smoke/calibrate_boards.gd | 0 .../smoke/calibrate_boards.gd.uid | 0 .../smoke/config_fatal_probe.gd | 0 .../smoke/config_fatal_probe.gd.uid | 0 .../smoke/damage_probe.gd | 0 .../smoke/damage_probe.gd.uid | 0 .../smoke/defense_scan.gd | 0 .../smoke/defense_scan.gd.uid | 0 .../smoke/dump_battle.gd | 0 .../smoke/dump_battle.gd.uid | 0 .../smoke/experiment_density.gd | 0 .../smoke/experiment_density.gd.uid | 0 .../smoke/level_autoplay.gd | 0 .../smoke/level_autoplay.gd.uid | 0 .../smoke/monte_carlo.gd | 0 .../smoke/monte_carlo.gd.uid | 0 .../smoke/reward_expectation.gd | 0 .../smoke/reward_expectation.gd.uid | 0 .../smoke/rhythm_batch.gd | 0 .../smoke/rhythm_batch.gd.uid | 0 .../smoke/skill_rhythm_probe.gd | 0 .../smoke/skill_rhythm_probe.gd.uid | 0 .../smoke/smoke_all.gd | 0 .../smoke/smoke_all.gd.uid | 0 .../smoke/ui_click_probe.gd | 0 .../smoke/ui_click_probe.gd.uid | 0 .../smoke/ui_click_probe.tscn | 0 .../smoke/ui_input_probe.gd | 0 .../smoke/ui_input_probe.gd.uid | 0 .../smoke/ui_input_probe.tscn | 0 .../smoke/ui_layout_probe.gd | 0 .../smoke/ui_layout_probe.gd.uid | 0 .../smoke/ui_layout_probe.tscn | 0 .../smoke/ui_probe.gd | 0 .../smoke/ui_probe.gd.uid | 0 .../smoke/ui_probe.tscn | 0 .../smoke/ui_tune_probe.gd | 0 .../smoke/ui_tune_probe.gd.uid | 0 .../smoke/ui_tune_probe.tscn | 0 .../smoke/verifier_batch.gd | 0 .../smoke/verifier_batch.gd.uid | 0 .../tools/log_analysis.py | 0 .../tools/指标口径说明.md | 0 .../tools/样例输出_4200批600局.txt | 0 .../tools/样例输出_种子1234局.txt | 0 .../tools/样例输出_种子5678局.txt | 0 production/loop-dashboard.html | 2 +- .../qa/conversion-calibration/collect_all.sh | 2 +- .../recollect_adventure.sh | 2 +- .../conversion-calibration/recollect_armor.sh | 2 +- qa-data/README.md | 2 +- qa-data/实现计划书_PackageB.md | 4 +-- tests/README.md | 2 +- tests/run_all.gd | 2 +- tests/static_scan.sh | 19 +++++----- tests/unit/README.md | 2 +- tools/balance_verifier.py | 2 +- tools/doc_link_audit.py | 4 +-- tools/loop_dashboard.py | 4 +-- tools/run_smoke.py | 2 +- 220 files changed, 66 insertions(+), 63 deletions(-) rename {prototypes/dungeon-sweeper-vertical-slice => game}/README.md (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/core/action_economy.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/core/action_economy.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/core/adventure_runner.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/core/adventure_runner.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/core/battle_orchestrator.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/core/battle_orchestrator.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/core/board_data.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/core/board_data.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/core/board_generator.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/core/board_generator.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/core/config_db.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/core/config_db.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/core/damage_math.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/core/damage_math.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/core/level_runner.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/core/level_runner.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/core/meta_progression.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/core/meta_progression.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/core/minesweeper_rules.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/core/minesweeper_rules.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/core/reward_economy.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/core/reward_economy.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/core/rng_service.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/core/rng_service.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/core/save_manager.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/core/save_manager.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/core/skill_lottery.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/core/skill_lottery.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/core/status_container.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/core/status_container.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/core/unit_container.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/core/unit_container.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/schemas/action_economy_table.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/schemas/action_economy_table.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/schemas/adventure_table.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/schemas/adventure_table.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/schemas/board_gen_table.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/schemas/board_gen_table.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/schemas/difficulty_table.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/schemas/difficulty_table.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/schemas/enemy_table.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/schemas/enemy_table.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/schemas/hero_table.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/schemas/hero_table.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/schemas/level_table.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/schemas/level_table.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/schemas/meta_table.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/schemas/meta_table.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/schemas/reward_table.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/schemas/reward_table.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/schemas/settlement_table.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/schemas/settlement_table.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/schemas/shop_table.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/schemas/shop_table.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/schemas/skill_table.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/schemas/skill_table.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/schemas/status_effect_table.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/schemas/status_effect_table.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/schemas/variation_table.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/schemas/variation_table.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/tables/action_economy.tres (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/tables/adventure.tres (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/tables/board_gen.tres (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/tables/difficulty.tres (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/tables/enemy.tres (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/tables/hero.tres (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/tables/level.tres (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/tables/meta.tres (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/tables/reward.tres (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/tables/settlement.tres (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/tables/shop.tres (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/tables/skills.tres (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/tables/status_effects.tres (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/data/tables/variation.tres (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/battle_narrator.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/battle_narrator.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/debug_session.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/debug_session.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/hud_presenter.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/hud_presenter.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/main.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/main.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/main.tscn (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/modal_stack.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/modal_stack.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/playtest_logger.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/playtest_logger.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/tune_sim_controller.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/tune_sim_controller.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/ui_assembler.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/ui_assembler.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/ap_bar_view.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/ap_bar_view.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/battle_end_overlay.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/battle_end_overlay.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/battle_log_view.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/battle_log_view.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/battle_stage_view.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/battle_stage_view.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/board_cell_unit.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/board_cell_unit.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/board_fx_view.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/board_fx_view.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/board_view.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/board_view.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/board_world.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/board_world.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/board_zone_view.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/board_zone_view.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/camp_overlay_view.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/camp_overlay_view.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/desaturation.gdshader (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/desaturation.gdshader.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/hero_info_panel_view.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/hero_info_panel_view.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/legend_overlay.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/legend_overlay.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/node_overlay.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/node_overlay.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/route_overlay.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/route_overlay.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/settlement_fx_view.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/settlement_fx_view.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/settlement_review_overlay.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/settlement_review_overlay.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/shop_overlay_view.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/shop_overlay_view.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/standee_view.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/standee_view.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/status_slot_row.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/status_slot_row.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/toast_stack.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/toast_stack.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/tune_panel.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/tune_panel.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/ui_kit.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/presentation/views/ui_kit.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/project.godot (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/route_overlay_preview.png (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/adventure_monte_carlo.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/adventure_monte_carlo.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/auto_player.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/auto_player.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/board_stat_probe.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/board_stat_probe.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/calibrate_boards.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/calibrate_boards.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/config_fatal_probe.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/config_fatal_probe.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/damage_probe.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/damage_probe.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/defense_scan.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/defense_scan.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/dump_battle.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/dump_battle.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/experiment_density.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/experiment_density.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/level_autoplay.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/level_autoplay.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/monte_carlo.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/monte_carlo.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/reward_expectation.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/reward_expectation.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/rhythm_batch.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/rhythm_batch.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/skill_rhythm_probe.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/skill_rhythm_probe.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/smoke_all.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/smoke_all.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/ui_click_probe.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/ui_click_probe.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/ui_click_probe.tscn (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/ui_input_probe.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/ui_input_probe.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/ui_input_probe.tscn (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/ui_layout_probe.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/ui_layout_probe.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/ui_layout_probe.tscn (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/ui_probe.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/ui_probe.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/ui_probe.tscn (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/ui_tune_probe.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/ui_tune_probe.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/ui_tune_probe.tscn (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/verifier_batch.gd (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/smoke/verifier_batch.gd.uid (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/tools/log_analysis.py (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/tools/指标口径说明.md (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/tools/样例输出_4200批600局.txt (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/tools/样例输出_种子1234局.txt (100%) rename {prototypes/dungeon-sweeper-vertical-slice => game}/tools/样例输出_种子5678局.txt (100%) diff --git a/CLAUDE.md b/CLAUDE.md index 2773b0bb..4b56a1f3 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -30,7 +30,7 @@ - `design/archive/gdd-2026-09-14/` — 旧版 GDD 归档(只读参考,不作事实引用) - `design/registry/` — 跨系统事实登记(术语规范名、已锁数值) - `production/` — stage、session-state、roadmap、gate-checks、qa -- `prototypes/dungeon-sweeper-vertical-slice/` — 垂直切片(概念 demo 已删,验证报告留档 `docs/prototype-report-minesweeper-battle-concept.md`) +- `game/` — 游戏工程本体(垂直切片转正 2026-09-24 结构批;概念 demo 已删,验证报告留档 `docs/prototype-report-minesweeper-battle-concept.md`) - `docs/` — 规范与参考文档(权威清单见下方导航) ## 规范导航(动手前先查表) diff --git a/design/gdd/03-内容规模.md b/design/gdd/03-内容规模.md index 34ce9ae4..8fb1420f 100644 --- a/design/gdd/03-内容规模.md +++ b/design/gdd/03-内容规模.md @@ -2,7 +2,7 @@ 一句话定位:**三关、按关配置的棋盘、一套格面资源池、一套状态表、一套商店配置**——刚好撑起一次完整的"扫雷决策 → 战斗兑现"循环,除此之外一律不做。 -> **体例说明(2026-09-17 数值纪律收口批)**:本文件只写内容规模的结构框架——几个维度、各分几档、扩展走什么流程。具体种数、行数与幅度数值一律不在此抄录,事实源为准:数据表读 `prototypes/dungeon-sweeper-vertical-slice/data/tables/*.tres`,实体登记读 `design/registry/entities.yaml`;现行行数与面值以表和 registry 为准。 +> **体例说明(2026-09-17 数值纪律收口批)**:本文件只写内容规模的结构框架——几个维度、各分几档、扩展走什么流程。具体种数、行数与幅度数值一律不在此抄录,事实源为准:数据表读 `game/data/tables/*.tres`,实体登记读 `design/registry/entities.yaml`;现行行数与面值以表和 registry 为准。 ## 关卡 diff --git a/design/gdd/systems/冒险循环/难度曲线与Boss.md b/design/gdd/systems/冒险循环/难度曲线与Boss.md index cff274b9..a8c8ae65 100644 --- a/design/gdd/systems/冒险循环/难度曲线与Boss.md +++ b/design/gdd/systems/冒险循环/难度曲线与Boss.md @@ -230,7 +230,7 @@ Boss 战的棋盘用本关最大板形(板形行值读棋盘参数表),板 ## 调参表 -本系统是全项目行值最多的系统。数值纪律(2026-09-17 降级批定稿):**正文与调参表只定规则、取值域与口径,具体行值一律读配置表(切片 `prototypes/dungeon-sweeper-vertical-slice/data/tables/` 的 enemy / skills / hero / board_gen / reward / settlement / status_effects 等),已锁数值以 [registry 的对应条目](../../../registry/entities.yaml) 为准,本文不登记具体数值——防双写失同步**(切片 `.tres` 数值压缩批后文档行值滞后,双写失同步已被实证)。 +本系统是全项目行值最多的系统。数值纪律(2026-09-17 降级批定稿):**正文与调参表只定规则、取值域与口径,具体行值一律读配置表(切片 `game/data/tables/` 的 enemy / skills / hero / board_gen / reward / settlement / status_effects 等),已锁数值以 [registry 的对应条目](../../../registry/entities.yaml) 为准,本文不登记具体数值——防双写失同步**(切片 `.tres` 数值压缩批后文档行值滞后,双写失同步已被实证)。 首发行值几乎全部 provisional,其中加难相关数值处于 provisional-pending-scan(扫描未执行);完整行集读表,不在此整表搬运。 diff --git a/design/gdd/systems/战斗循环/地图战斗资源.md b/design/gdd/systems/战斗循环/地图战斗资源.md index 265d2e4d..1427fa5d 100644 --- a/design/gdd/systems/战斗循环/地图战斗资源.md +++ b/design/gdd/systems/战斗循环/地图战斗资源.md @@ -79,9 +79,9 @@ 清图槽(clear_default 池,clear_blast)独立于格面资源——作用域为整张板,不挂任何一格。 引用(代码事实源): -- `prototypes/dungeon-sweeper-vertical-slice/core/reward_economy.gd#roll_board`:`_rollable_rows()` 第 207-213 行收 `pool_tag=cell & polarity=positive & weight>0` 全集;循环第 65-67 行对 `eligible` 清单(全部非封锁格)一视同仁。 -- `prototypes/dungeon-sweeper-vertical-slice/core/minesweeper_rules.gd#_do_dig` 第 256-264 行:chain/dig 通道 `cell_revealed` 事件 `resource=true` 字段对安全格与雷格一致——注释明确"安全格与雷格一视同仁(雷格亦携带,负向兑付归 战斗结算 极性路由)"。 -- `prototypes/dungeon-sweeper-vertical-slice/data/tables/reward.tres`:9 行正向行 weight 现行值读 `data/tables/reward.tres`。 +- `game/core/reward_economy.gd#roll_board`:`_rollable_rows()` 第 207-213 行收 `pool_tag=cell & polarity=positive & weight>0` 全集;循环第 65-67 行对 `eligible` 清单(全部非封锁格)一视同仁。 +- `game/core/minesweeper_rules.gd#_do_dig` 第 256-264 行:chain/dig 通道 `cell_revealed` 事件 `resource=true` 字段对安全格与雷格一致——注释明确"安全格与雷格一视同仁(雷格亦携带,负向兑付归 战斗结算 极性路由)"。 +- `game/data/tables/reward.tres`:9 行正向行 weight 现行值读 `data/tables/reward.tres`。 候选集合具体行值(power / power_min / power_max / stacks / effect_id)随行更新——以 `data/tables/reward.tres` 为现行值源;GDD 表格只锁行集与权重分布语义。负向 9 行(enrage / off_guard / heal_backlash / enemy_alert / ap_drain / sapped / pierce_snare / magic_recoil / gp_loss——2026-09-20 八型批 ambush_double→enemy_alert 换装 + ap_drain 新增、同日 GP+商店房批 +gp_loss)weight=0 不参与摇号,按(类型, 极性)查表取用,不在候选集合内。 diff --git a/design/gdd/systems/战斗循环/敌人系统.md b/design/gdd/systems/战斗循环/敌人系统.md index 98df980f..9e420176 100644 --- a/design/gdd/systems/战斗循环/敌人系统.md +++ b/design/gdd/systems/战斗循环/敌人系统.md @@ -216,7 +216,7 @@ Boss 专属身份 = 专属池承载:独占技能 + 权重轮廓(现行:酋 ## 调参表 -配置表共三张。数值纪律(2026-09-17 降级批定稿):**本文只锁字段、取值域与规则,行值一律读配置表(切片 `prototypes/dungeon-sweeper-vertical-slice/data/tables/` 的 enemy / skills / hero 表)与 [registry 的 enemy / hero / skill 条目](../../../registry/entities.yaml),不在本文登记具体数值——防双写失同步**;曲线调参所有权归[难度曲线与Boss](../冒险循环/难度曲线与Boss.md)。 +配置表共三张。数值纪律(2026-09-17 降级批定稿):**本文只锁字段、取值域与规则,行值一律读配置表(切片 `game/data/tables/` 的 enemy / skills / hero 表)与 [registry 的 enemy / hero / skill 条目](../../../registry/entities.yaml),不在本文登记具体数值——防双写失同步**;曲线调参所有权归[难度曲线与Boss](../冒险循环/难度曲线与Boss.md)。 敌人表(按关卡坐标存放,每坐标行集恰一敌种): diff --git a/design/gdd/systems/排雷循环/排雷玩法.md b/design/gdd/systems/排雷循环/排雷玩法.md index b8ddf54b..93cc764a 100644 --- a/design/gdd/systems/排雷循环/排雷玩法.md +++ b/design/gdd/systems/排雷循环/排雷玩法.md @@ -46,7 +46,7 @@ ### 挖、插旗、移动:每个动作怎么才算合法 -玩家对棋盘只做三件事:挖未开格、插旗,以及移动小人(玩家摆在棋盘上的探险者棋子)。前两个是付费动作,按标准动作价计费(价目见 `prototypes/dungeon-sweeper-vertical-slice/data/tables/action_economy.tres`;每轮的决策预算,账本归[行动经济](行动经济.md));本文只管棋盘面这一半,总纲只有一条:付费动作只能作用于小人周围一圈 8 格(8 向相邻)之内。 +玩家对棋盘只做三件事:挖未开格、插旗,以及移动小人(玩家摆在棋盘上的探险者棋子)。前两个是付费动作,按标准动作价计费(价目见 `game/data/tables/action_economy.tres`;每轮的决策预算,账本归[行动经济](行动经济.md));本文只管棋盘面这一半,总纲只有一条:付费动作只能作用于小人周围一圈 8 格(8 向相邻)之内。 移动不花行动点:点任何已开格,小人沿已探明区一次走到位,"已探明区"包括踩过的雷格残址。点击已开格的唯一含义就是移动——本作没有经典扫雷里"双击数字格一键翻开周围"的 chord(双击快开),每一格的兑现都必须花行动点。 diff --git a/design/gdd/systems/排雷循环/行动经济.md b/design/gdd/systems/排雷循环/行动经济.md index a4411f13..9ab4020e 100644 --- a/design/gdd/systems/排雷循环/行动经济.md +++ b/design/gdd/systems/排雷循环/行动经济.md @@ -6,7 +6,7 @@ ## 设计目的 -每场战斗里,玩家真正在花的钱只有一种:行动点(AP)。行动经济就是这本账——每轮发给你固定的行动点,挖格、插旗按统一价目计费(价目见 `prototypes/dungeon-sweeper-vertical-slice/data/tables/action_economy.tres`),花完这一轮就结束了。没有这本账,"挖这一格值不值"就没有统一的价格语言。 +每场战斗里,玩家真正在花的钱只有一种:行动点(AP)。行动经济就是这本账——每轮发给你固定的行动点,挖格、插旗按统一价目计费(价目见 `game/data/tables/action_economy.tres`),花完这一轮就结束了。没有这本账,"挖这一格值不值"就没有统一的价格语言。 它还要给"我不想赌了"一个体面的出口:主动停手能把剩余行动点 1:1 存进储备池,攒够了可以当场换掉整张雷图。推理本身不收钱——连锁展开免费——花钱的只是"兑现"这个动作。 @@ -180,7 +180,7 @@ 配置表为单行全局表;已锁数值以 [registry 的 action_economy 条目](../../../registry/entities.yaml) 为准。 -| 参数 | 域 | 现行值(统一见 `prototypes/dungeon-sweeper-vertical-slice/data/tables/action_economy.tres`) | 说明 | +| 参数 | 域 | 现行值(统一见 `game/data/tables/action_economy.tres`) | 说明 | |---|---|---|---| | ap_per_round | int [1, 32] | 表值 | 每轮行动点;兼作停手转存的规模旋钮 | | dig_ap_cost | int [1, 8] | 表值 | 挖单格成本(下限 1:为 0 则预算系统失效) | diff --git a/design/research/audit-clear-dominance-2026-09-19.md b/design/research/audit-clear-dominance-2026-09-19.md index 71c3b2a5..2db88e95 100644 --- a/design/research/audit-clear-dominance-2026-09-19.md +++ b/design/research/audit-clear-dominance-2026-09-19.md @@ -3,7 +3,7 @@ **日期**:2026-09-19 **性质**:只读对账作业——履行 06 待办「清图支配性保守地板缺口」的对账义务(用户指令:从难度曲线调参批提前执行)。本报告不动任何数值;调参建议仅呈报,拍板归用户。 **判式权威**:[registry entities.yaml `clause5_dominance`](../registry/entities.yaml)(挖穿残余池计价,模型本体不变) -**配套工具**:`tools/clear_dominance_audit.py`(重算器,判式全参数可配——难度曲线调参批的常设重跑入口)+ `prototypes/.../smoke/board_stat_probe.gd`(实测板形统计探针) +**配套工具**:`tools/clear_dominance_audit.py`(重算器,判式全参数可配——难度曲线调参批的常设重跑入口)+ `game/smoke/board_stat_probe.gd`(实测板形统计探针) **归属**:[难度曲线与Boss](../gdd/systems/冒险循环/难度曲线与Boss.md)(裁决方)× [地图战斗资源](../gdd/systems/战斗循环/地图战斗资源.md)(清图奖励供给方)× [行动经济](../gdd/systems/排雷循环/行动经济.md)(契约本体)× [战斗结算](../gdd/systems/战斗循环/战斗结算.md)(对账责任方) --- diff --git a/design/research/proposal-gp-shop-room-2026-09-20.md b/design/research/proposal-gp-shop-room-2026-09-20.md index 031f06be..dfecac3d 100644 --- a/design/research/proposal-gp-shop-room-2026-09-20.md +++ b/design/research/proposal-gp-shop-room-2026-09-20.md @@ -140,11 +140,11 @@ | 文件 | 动作 | 内容 | |---|---|---| -| `prototypes/dungeon-sweeper-vertical-slice/data/tables/shop.tres` | 新建 | 商品三行(属性键 / 档位 flat 值 / 首价 / 递增步长 / 刷新费 / 单店刷新限次);行值 provisional 归难度曲线 | -| `prototypes/dungeon-sweeper-vertical-slice/data/schemas/shop_table.gd` | 新建 | schema + 校验(商品属性键 ∈ {atk, max_hp, armor_class};价格域 [1,999];刷新限次域) | -| `prototypes/dungeon-sweeper-vertical-slice/data/tables/level.tres` | 修改 | L2 行集 +1 商店房节点(中段插位、连线 rewiring、六检全绿);L1 零改动 | -| `prototypes/dungeon-sweeper-vertical-slice/data/schemas/level_table.gd` | 修改 | type 词表 {battle, boss, reward, rest} +shop | -| `prototypes/dungeon-sweeper-vertical-slice/data/tables/reward.tres`、`data/schemas/reward_table.gd` | 〔条件〕零改动(推荐)/ 九型扩两行 + 词表(备选) | 推荐方案下本批不碰格面池 | +| `game/data/tables/shop.tres` | 新建 | 商品三行(属性键 / 档位 flat 值 / 首价 / 递增步长 / 刷新费 / 单店刷新限次);行值 provisional 归难度曲线 | +| `game/data/schemas/shop_table.gd` | 新建 | schema + 校验(商品属性键 ∈ {atk, max_hp, armor_class};价格域 [1,999];刷新限次域) | +| `game/data/tables/level.tres` | 修改 | L2 行集 +1 商店房节点(中段插位、连线 rewiring、六检全绿);L1 零改动 | +| `game/data/schemas/level_table.gd` | 修改 | type 词表 {battle, boss, reward, rest} +shop | +| `game/data/tables/reward.tres`、`data/schemas/reward_table.gd` | 〔条件〕零改动(推荐)/ 九型扩两行 + 词表(备选) | 推荐方案下本批不碰格面池 | ### B 集:切片代码(互斥文件集 B) @@ -177,7 +177,7 @@ | 文件 | 动作 | 内容 | |---|---|---| -| `prototypes/dungeon-sweeper-vertical-slice/smoke/smoke_all.gd` | 修改 | 新断言组:GP 入账恰一次/战(普通 2 / Boss 5);购买扣费与覆盖值生效(买攻后攻击合计读数);购血上限与当前生命同步;刷新限次被拒;GP 冒险末清零;L2 图六检全绿含商店房 | +| `game/smoke/smoke_all.gd` | 修改 | 新断言组:GP 入账恰一次/战(普通 2 / Boss 5);购买扣费与覆盖值生效(买攻后攻击合计读数);购血上限与当前生命同步;刷新限次被拒;GP 冒险末清零;L2 图六检全绿含商店房 | | `smoke/level_autoplay.gd` | 修改 | 商店房遍历(进店-购买-离开路径的自动玩家支持 + 贪心购买画像) | | `smoke/level_monte_carlo.gd` | 修改 | shop 开关参数(off/on 双格)+ 确定性购买画像;分层读数列(通关率按 shop 态分列) | | `production/qa/mc-shop-baseline-2026-09-XX.md` | 新建 | 分层基线报告(N、画像、双格对照,对齐 mc-reinvest-baseline 口径) | diff --git a/design/research/proposal-reward-cell-differentiation-2026-09-17.md b/design/research/proposal-reward-cell-differentiation-2026-09-17.md index bddee6f3..9b1a59ea 100644 --- a/design/research/proposal-reward-cell-differentiation-2026-09-17.md +++ b/design/research/proposal-reward-cell-differentiation-2026-09-17.md @@ -28,7 +28,7 @@ ### 2.1 A1:reward 表 11 行逐行行值 -事实源 = `prototypes/dungeon-sweeper-vertical-slice/data/tables/reward.tres`(行号指该文件): +事实源 = `game/data/tables/reward.tres`(行号指该文件): | # | reward_id | cell_type | polarity | power | power_min/max | weight | stacks | effect_id | display_name | pool_tag | tier | |---|---|---|---|---|---|---|---|---|---|---|---| @@ -298,22 +298,22 @@ v0.6 先例用「零改动」避开连带(`reward.tres:134`);v0.7 先例 | 文件(§3 清单) | 本报告引用的关键行 | |---|---| -| `prototypes/dungeon-sweeper-vertical-slice/core/reward_economy.gd` | 6, 36-81(roll_board), 62-67, 70-77, 165-172(polarity_row), 177-190(equivalence_supply/tier_min_buff), 184, 195-213(weighted_pick/_rollable_rows) | -| `prototypes/dungeon-sweeper-vertical-slice/core/minesweeper_rules.gd` | 10(信号), 100-103(initial 通道), 124-137(不变式), 236-274(_do_dig), 258-259, 262-271(resource 通道) | -| `prototypes/dungeon-sweeper-vertical-slice/core/board_data.gd` | 14(variants), 15(biome), 81-86(safe_cells), 90-103(compute_r0) | -| `prototypes/dungeon-sweeper-vertical-slice/core/battle_orchestrator.gd` | 75, 131-161(_install_new_board/roll_board 调用), 166-178(facts 缓冲), 200-260(授予段/极性路由), 253-260, 264-269 | -| `prototypes/dungeon-sweeper-vertical-slice/data/schemas/reward_table.gd` | 13-16(枚举), 53-59(weight/stacks 域), 57, 70-84(区间/中点锚), 86-102(字典完整性/池护栏) | -| `prototypes/dungeon-sweeper-vertical-slice/data/tables/reward.tres` | #7-122(11 行), 124-145(注释段:同池声明 125 / 频次 126 / 换装 133-135 / 压缩批 137-145) | -| `prototypes/dungeon-sweeper-vertical-slice/data/tables/status_effects.tres` | #7-88(九行), 90-113(批注:减伤墙/换装/技能池/压缩) | -| `prototypes/dungeon-sweeper-vertical-slice/data/tables/board_gen.tres` | #7-139(12 行板参数), 141-154(调参登记) | -| `prototypes/dungeon-sweeper-vertical-slice/data/tables/action_economy.tres` | 7-14(行值), 16-23(AP 压速批注——差异化前提注记 18-19) | -| `prototypes/dungeon-sweeper-vertical-slice/smoke/reward_expectation.gd` | 4, 9, 21-72(频次实测/口径注——过期基准 4,71-72) | -| `prototypes/dungeon-sweeper-vertical-slice/smoke/monte_carlo.gd` | 8, 28, 54-68(读数口径) | -| `prototypes/dungeon-sweeper-vertical-slice/smoke/experiment_density.gd` | 59-69(FakeDB——零 reward 耦合) | -| `prototypes/dungeon-sweeper-vertical-slice/smoke/level_monte_carlo.gd` | 45-48, 100-109(带口径/完美档断言) | -| `prototypes/dungeon-sweeper-vertical-slice/smoke/level_autoplay.gd` | 18-21, 85-89(mine_hits 埋点), 122-191(双策略档驱动) | -| `prototypes/dungeon-sweeper-vertical-slice/smoke/smoke_all.gd` | 91, 1244-1321(负向字典直验——1255-1256, 1284), 1326-1367(资源面断言——1347,1349,1365-1367) | -| `prototypes/dungeon-sweeper-vertical-slice/smoke/auto_player.gd` | 7(同种子回放等价性), 31-48(完美策略档) | +| `game/core/reward_economy.gd` | 6, 36-81(roll_board), 62-67, 70-77, 165-172(polarity_row), 177-190(equivalence_supply/tier_min_buff), 184, 195-213(weighted_pick/_rollable_rows) | +| `game/core/minesweeper_rules.gd` | 10(信号), 100-103(initial 通道), 124-137(不变式), 236-274(_do_dig), 258-259, 262-271(resource 通道) | +| `game/core/board_data.gd` | 14(variants), 15(biome), 81-86(safe_cells), 90-103(compute_r0) | +| `game/core/battle_orchestrator.gd` | 75, 131-161(_install_new_board/roll_board 调用), 166-178(facts 缓冲), 200-260(授予段/极性路由), 253-260, 264-269 | +| `game/data/schemas/reward_table.gd` | 13-16(枚举), 53-59(weight/stacks 域), 57, 70-84(区间/中点锚), 86-102(字典完整性/池护栏) | +| `game/data/tables/reward.tres` | #7-122(11 行), 124-145(注释段:同池声明 125 / 频次 126 / 换装 133-135 / 压缩批 137-145) | +| `game/data/tables/status_effects.tres` | #7-88(九行), 90-113(批注:减伤墙/换装/技能池/压缩) | +| `game/data/tables/board_gen.tres` | #7-139(12 行板参数), 141-154(调参登记) | +| `game/data/tables/action_economy.tres` | 7-14(行值), 16-23(AP 压速批注——差异化前提注记 18-19) | +| `game/smoke/reward_expectation.gd` | 4, 9, 21-72(频次实测/口径注——过期基准 4,71-72) | +| `game/smoke/monte_carlo.gd` | 8, 28, 54-68(读数口径) | +| `game/smoke/experiment_density.gd` | 59-69(FakeDB——零 reward 耦合) | +| `game/smoke/level_monte_carlo.gd` | 45-48, 100-109(带口径/完美档断言) | +| `game/smoke/level_autoplay.gd` | 18-21, 85-89(mine_hits 埋点), 122-191(双策略档驱动) | +| `game/smoke/smoke_all.gd` | 91, 1244-1321(负向字典直验——1255-1256, 1284), 1326-1367(资源面断言——1347,1349,1365-1367) | +| `game/smoke/auto_player.gd` | 7(同种子回放等价性), 31-48(完美策略档) | | `design/gdd/systems/战斗循环/地图战斗资源.md` | 9, 52-61(摇号纪律——61 雷安同池行), 70-88(候选集合), 90-100(极性矩阵), 104-118(五型字典), 122-124(负向即时), 128-141(清图), 153, 157, 187, 191-205(调参表指路化), **207(结构冻结七项)**, 209-217(验收标准——212), 225-234(版本历史 v0.4-v0.8) | | `design/gdd/systems/战斗循环/战斗结算.md` | 103(对账唯一责任方), 124(极性路由兑付), 142(伏击溢出), 146(标错类型化), 180(奖励定义分离) | | `design/gdd/systems/战斗循环/增益状态.md` | 132, 138(九行), 154-161(状态行表), 163(四池对称), 165(当量锚), 214-221(调参表) | diff --git a/docs/acceptance-ap6-ac.md b/docs/acceptance-ap6-ac.md index 78dccbe3..fda3ac93 100644 --- a/docs/acceptance-ap6-ac.md +++ b/docs/acceptance-ap6-ac.md @@ -18,7 +18,7 @@ | # | 条件 | 判据 | |---|---|---| | 1 | AC 批 smoke 全绿 | `smoke_all.gd` 零失败(AC 批会话交付后执行) | -| 2 | 日志分析器可用 | `prototypes/dungeon-sweeper-vertical-slice/tools/log_analysis.py` 可运行;对 AC 落批日志能激活掷点面(FIELD_CANDIDATES 命中,或按其数据质量观测面补一行字段适配) | +| 2 | 日志分析器可用 | `game/tools/log_analysis.py` 可运行;对 AC 落批日志能激活掷点面(FIELD_CANDIDATES 命中,或按其数据质量观测面补一行字段适配) | | 3 | MC 双档可跑 | `smoke/level_monte_carlo.gd` 以策略 both 跑通零报错;完美档零踩雷构造断言通过 | | 4 | 工作区无半成品 | git status 干净(`core/rng_service.gd` 等在飞改动已收编提交) | @@ -28,7 +28,7 @@ ### 2.1 模拟批(主数据源) -- 工具:`prototypes/dungeon-sweeper-vertical-slice/smoke/level_monte_carlo.gd` +- 工具:`game/smoke/level_monte_carlo.gd` - 配置:N=30、种子 4200+30(4200–4229,逐局 seed0+i)、策略 both(normal + perfect 双档一次跑齐)——与 2026-09-16 历史坐标同种子同口径。 - 阶段一读数格:基线格 atk+0%/hp+0%(零天赋,生死带判据格)。 - 阶段二加跑满配格 atk+100%/hp+100%(天赋成人态;F4 复验格,已拍板 i①)。 diff --git a/docs/architecture/architecture.md b/docs/architecture/architecture.md index 22b45698..52d613fa 100644 --- a/docs/architecture/architecture.md +++ b/docs/architecture/architecture.md @@ -8,7 +8,7 @@ - Review Mode: solo(`production/review-mode.txt`,2026-09-12 用户拍板——TD/LP 门禁按 solo 跳过,用户授权架构产出自主推进、迭代期回调) - GDDs Covered: game-concept · game-pillars · systems-index · d2-data-config · a3-action-economy · a4-terrain-variation · b3-status-effect · a1-board-generation · a2-minesweeper-rules · b2-enemy-system · b4-reward-item-economy · b1-settlement(12 份;A5/C1–C4/B5/D3–D6 未设计,按 systems-index 依赖分层预留) - ADRs Referenced: 无(0 份现存)——本文档 Phase 5/6 列出的实现期裁决项即为首批 ADR 候选 -- Implementation Evidence: 垂直切片 `prototypes/dungeon-sweeper-vertical-slice/`(2026-09-10 起,冒烟 88/88、三 UI 探针 PASS)——本文档的分层/所有权/数据流均经切片实现验证,非纯纸面设计 +- Implementation Evidence: 垂直切片 `game/`(2026-09-10 起,冒烟 88/88、三 UI 探针 PASS)——本文档的分层/所有权/数据流均经切片实现验证,非纯纸面设计 - Technical Director Sign-Off: 2026-09-12 — APPROVED WITH CONDITIONS(条件:Required ADRs 于正式工程骨架搭建前定稿;`.claude/docs/director-gates.md` 缺失已登记技术债) - Lead Programmer Feasibility: SKIPPED — Solo mode diff --git a/docs/architecture/code-architecture-review-2026-09-13.md b/docs/architecture/code-architecture-review-2026-09-13.md index faa7e9c4..69555a2b 100644 --- a/docs/architecture/code-architecture-review-2026-09-13.md +++ b/docs/architecture/code-architecture-review-2026-09-13.md @@ -1,7 +1,7 @@ # 代码架构审查报告 — 代码组织与封装 > 日期:2026-09-13 -> 载体:`prototypes/dungeon-sweeper-vertical-slice/`(9707 行 GDScript:core 12 文件 / data 11 / presentation 28 / smoke 10) +> 载体:`game/`(9707 行 GDScript:core 12 文件 / data 11 / presentation 28 / smoke 10) > 基线:`docs/architecture/architecture.md` v1.0 + ADR-0001~0005 + `docs/code-conventions.md` > 触发:用户在 code-review 之后要求补充「代码组织问题 + 封装问题」专项审查 > 审查方式:core/presentation 关键文件全读 + S1–S8 静态规则逐条 grep 验证 + 跨层引用面扫描 diff --git a/docs/code-conventions.md b/docs/code-conventions.md index 6bda2ea3..835d158e 100644 --- a/docs/code-conventions.md +++ b/docs/code-conventions.md @@ -2,7 +2,7 @@ > 生效:2026-09-11 · 来源:用户在垂直切片评审中逐一指出的真实陋习与缺陷,全部成文。 > 每条规则附本项目真实反面案例(标注缺陷编号/日期)——规则不是抽象美德,是踩过的坑。 -> 约束范围:`prototypes/` 与正式 `production` 代码同尺度;与 CLAUDE.md「硬性红线」节既有硬约束 +> 约束范围:`game/`(原 prototypes/ 垂直切片,2026-09-24 转正)代码同尺度;与 CLAUDE.md「硬性红线」节既有硬约束 > (数值表单点 / RNG 封闭流 / Core 零 UI / fail-fast / spec-AC 一致性)并行生效,冲突以用户裁决为准。 **写任何代码前必须通读本文件。** diff --git a/prototypes/dungeon-sweeper-vertical-slice/README.md b/game/README.md similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/README.md rename to game/README.md diff --git a/prototypes/dungeon-sweeper-vertical-slice/core/action_economy.gd b/game/core/action_economy.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/core/action_economy.gd rename to game/core/action_economy.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/core/action_economy.gd.uid b/game/core/action_economy.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/core/action_economy.gd.uid rename to game/core/action_economy.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/core/adventure_runner.gd b/game/core/adventure_runner.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/core/adventure_runner.gd rename to game/core/adventure_runner.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/core/adventure_runner.gd.uid b/game/core/adventure_runner.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/core/adventure_runner.gd.uid rename to game/core/adventure_runner.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/core/battle_orchestrator.gd b/game/core/battle_orchestrator.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/core/battle_orchestrator.gd rename to game/core/battle_orchestrator.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/core/battle_orchestrator.gd.uid b/game/core/battle_orchestrator.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/core/battle_orchestrator.gd.uid rename to game/core/battle_orchestrator.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/core/board_data.gd b/game/core/board_data.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/core/board_data.gd rename to game/core/board_data.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/core/board_data.gd.uid b/game/core/board_data.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/core/board_data.gd.uid rename to game/core/board_data.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/core/board_generator.gd b/game/core/board_generator.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/core/board_generator.gd rename to game/core/board_generator.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/core/board_generator.gd.uid b/game/core/board_generator.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/core/board_generator.gd.uid rename to game/core/board_generator.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/core/config_db.gd b/game/core/config_db.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/core/config_db.gd rename to game/core/config_db.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/core/config_db.gd.uid b/game/core/config_db.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/core/config_db.gd.uid rename to game/core/config_db.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/core/damage_math.gd b/game/core/damage_math.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/core/damage_math.gd rename to game/core/damage_math.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/core/damage_math.gd.uid b/game/core/damage_math.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/core/damage_math.gd.uid rename to game/core/damage_math.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/core/level_runner.gd b/game/core/level_runner.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/core/level_runner.gd rename to game/core/level_runner.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/core/level_runner.gd.uid b/game/core/level_runner.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/core/level_runner.gd.uid rename to game/core/level_runner.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/core/meta_progression.gd b/game/core/meta_progression.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/core/meta_progression.gd rename to game/core/meta_progression.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/core/meta_progression.gd.uid b/game/core/meta_progression.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/core/meta_progression.gd.uid rename to game/core/meta_progression.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/core/minesweeper_rules.gd b/game/core/minesweeper_rules.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/core/minesweeper_rules.gd rename to game/core/minesweeper_rules.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/core/minesweeper_rules.gd.uid b/game/core/minesweeper_rules.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/core/minesweeper_rules.gd.uid rename to game/core/minesweeper_rules.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/core/reward_economy.gd b/game/core/reward_economy.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/core/reward_economy.gd rename to game/core/reward_economy.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/core/reward_economy.gd.uid b/game/core/reward_economy.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/core/reward_economy.gd.uid rename to game/core/reward_economy.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/core/rng_service.gd b/game/core/rng_service.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/core/rng_service.gd rename to game/core/rng_service.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/core/rng_service.gd.uid b/game/core/rng_service.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/core/rng_service.gd.uid rename to game/core/rng_service.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/core/save_manager.gd b/game/core/save_manager.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/core/save_manager.gd rename to game/core/save_manager.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/core/save_manager.gd.uid b/game/core/save_manager.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/core/save_manager.gd.uid rename to game/core/save_manager.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/core/skill_lottery.gd b/game/core/skill_lottery.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/core/skill_lottery.gd rename to game/core/skill_lottery.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/core/skill_lottery.gd.uid b/game/core/skill_lottery.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/core/skill_lottery.gd.uid rename to game/core/skill_lottery.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/core/status_container.gd b/game/core/status_container.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/core/status_container.gd rename to game/core/status_container.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/core/status_container.gd.uid b/game/core/status_container.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/core/status_container.gd.uid rename to game/core/status_container.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/core/unit_container.gd b/game/core/unit_container.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/core/unit_container.gd rename to game/core/unit_container.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/core/unit_container.gd.uid b/game/core/unit_container.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/core/unit_container.gd.uid rename to game/core/unit_container.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/schemas/action_economy_table.gd b/game/data/schemas/action_economy_table.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/schemas/action_economy_table.gd rename to game/data/schemas/action_economy_table.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/schemas/action_economy_table.gd.uid b/game/data/schemas/action_economy_table.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/schemas/action_economy_table.gd.uid rename to game/data/schemas/action_economy_table.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/schemas/adventure_table.gd b/game/data/schemas/adventure_table.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/schemas/adventure_table.gd rename to game/data/schemas/adventure_table.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/schemas/adventure_table.gd.uid b/game/data/schemas/adventure_table.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/schemas/adventure_table.gd.uid rename to game/data/schemas/adventure_table.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/schemas/board_gen_table.gd b/game/data/schemas/board_gen_table.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/schemas/board_gen_table.gd rename to game/data/schemas/board_gen_table.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/schemas/board_gen_table.gd.uid b/game/data/schemas/board_gen_table.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/schemas/board_gen_table.gd.uid rename to game/data/schemas/board_gen_table.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/schemas/difficulty_table.gd b/game/data/schemas/difficulty_table.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/schemas/difficulty_table.gd rename to game/data/schemas/difficulty_table.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/schemas/difficulty_table.gd.uid b/game/data/schemas/difficulty_table.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/schemas/difficulty_table.gd.uid rename to game/data/schemas/difficulty_table.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/schemas/enemy_table.gd b/game/data/schemas/enemy_table.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/schemas/enemy_table.gd rename to game/data/schemas/enemy_table.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/schemas/enemy_table.gd.uid b/game/data/schemas/enemy_table.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/schemas/enemy_table.gd.uid rename to game/data/schemas/enemy_table.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/schemas/hero_table.gd b/game/data/schemas/hero_table.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/schemas/hero_table.gd rename to game/data/schemas/hero_table.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/schemas/hero_table.gd.uid b/game/data/schemas/hero_table.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/schemas/hero_table.gd.uid rename to game/data/schemas/hero_table.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/schemas/level_table.gd b/game/data/schemas/level_table.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/schemas/level_table.gd rename to game/data/schemas/level_table.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/schemas/level_table.gd.uid b/game/data/schemas/level_table.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/schemas/level_table.gd.uid rename to game/data/schemas/level_table.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/schemas/meta_table.gd b/game/data/schemas/meta_table.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/schemas/meta_table.gd rename to game/data/schemas/meta_table.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/schemas/meta_table.gd.uid b/game/data/schemas/meta_table.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/schemas/meta_table.gd.uid rename to game/data/schemas/meta_table.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/schemas/reward_table.gd b/game/data/schemas/reward_table.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/schemas/reward_table.gd rename to game/data/schemas/reward_table.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/schemas/reward_table.gd.uid b/game/data/schemas/reward_table.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/schemas/reward_table.gd.uid rename to game/data/schemas/reward_table.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/schemas/settlement_table.gd b/game/data/schemas/settlement_table.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/schemas/settlement_table.gd rename to game/data/schemas/settlement_table.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/schemas/settlement_table.gd.uid b/game/data/schemas/settlement_table.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/schemas/settlement_table.gd.uid rename to game/data/schemas/settlement_table.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/schemas/shop_table.gd b/game/data/schemas/shop_table.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/schemas/shop_table.gd rename to game/data/schemas/shop_table.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/schemas/shop_table.gd.uid b/game/data/schemas/shop_table.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/schemas/shop_table.gd.uid rename to game/data/schemas/shop_table.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/schemas/skill_table.gd b/game/data/schemas/skill_table.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/schemas/skill_table.gd rename to game/data/schemas/skill_table.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/schemas/skill_table.gd.uid b/game/data/schemas/skill_table.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/schemas/skill_table.gd.uid rename to game/data/schemas/skill_table.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/schemas/status_effect_table.gd b/game/data/schemas/status_effect_table.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/schemas/status_effect_table.gd rename to game/data/schemas/status_effect_table.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/schemas/status_effect_table.gd.uid b/game/data/schemas/status_effect_table.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/schemas/status_effect_table.gd.uid rename to game/data/schemas/status_effect_table.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/schemas/variation_table.gd b/game/data/schemas/variation_table.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/schemas/variation_table.gd rename to game/data/schemas/variation_table.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/schemas/variation_table.gd.uid b/game/data/schemas/variation_table.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/schemas/variation_table.gd.uid rename to game/data/schemas/variation_table.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/tables/action_economy.tres b/game/data/tables/action_economy.tres similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/tables/action_economy.tres rename to game/data/tables/action_economy.tres diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/tables/adventure.tres b/game/data/tables/adventure.tres similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/tables/adventure.tres rename to game/data/tables/adventure.tres diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/tables/board_gen.tres b/game/data/tables/board_gen.tres similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/tables/board_gen.tres rename to game/data/tables/board_gen.tres diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/tables/difficulty.tres b/game/data/tables/difficulty.tres similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/tables/difficulty.tres rename to game/data/tables/difficulty.tres diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/tables/enemy.tres b/game/data/tables/enemy.tres similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/tables/enemy.tres rename to game/data/tables/enemy.tres diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/tables/hero.tres b/game/data/tables/hero.tres similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/tables/hero.tres rename to game/data/tables/hero.tres diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/tables/level.tres b/game/data/tables/level.tres similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/tables/level.tres rename to game/data/tables/level.tres diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/tables/meta.tres b/game/data/tables/meta.tres similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/tables/meta.tres rename to game/data/tables/meta.tres diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/tables/reward.tres b/game/data/tables/reward.tres similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/tables/reward.tres rename to game/data/tables/reward.tres diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/tables/settlement.tres b/game/data/tables/settlement.tres similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/tables/settlement.tres rename to game/data/tables/settlement.tres diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/tables/shop.tres b/game/data/tables/shop.tres similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/tables/shop.tres rename to game/data/tables/shop.tres diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/tables/skills.tres b/game/data/tables/skills.tres similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/tables/skills.tres rename to game/data/tables/skills.tres diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/tables/status_effects.tres b/game/data/tables/status_effects.tres similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/tables/status_effects.tres rename to game/data/tables/status_effects.tres diff --git a/prototypes/dungeon-sweeper-vertical-slice/data/tables/variation.tres b/game/data/tables/variation.tres similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/data/tables/variation.tres rename to game/data/tables/variation.tres diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/battle_narrator.gd b/game/presentation/battle_narrator.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/battle_narrator.gd rename to game/presentation/battle_narrator.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/battle_narrator.gd.uid b/game/presentation/battle_narrator.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/battle_narrator.gd.uid rename to game/presentation/battle_narrator.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/debug_session.gd b/game/presentation/debug_session.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/debug_session.gd rename to game/presentation/debug_session.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/debug_session.gd.uid b/game/presentation/debug_session.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/debug_session.gd.uid rename to game/presentation/debug_session.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/hud_presenter.gd b/game/presentation/hud_presenter.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/hud_presenter.gd rename to game/presentation/hud_presenter.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/hud_presenter.gd.uid b/game/presentation/hud_presenter.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/hud_presenter.gd.uid rename to game/presentation/hud_presenter.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/main.gd b/game/presentation/main.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/main.gd rename to game/presentation/main.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/main.gd.uid b/game/presentation/main.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/main.gd.uid rename to game/presentation/main.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/main.tscn b/game/presentation/main.tscn similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/main.tscn rename to game/presentation/main.tscn diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/modal_stack.gd b/game/presentation/modal_stack.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/modal_stack.gd rename to game/presentation/modal_stack.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/modal_stack.gd.uid b/game/presentation/modal_stack.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/modal_stack.gd.uid rename to game/presentation/modal_stack.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/playtest_logger.gd b/game/presentation/playtest_logger.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/playtest_logger.gd rename to game/presentation/playtest_logger.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/playtest_logger.gd.uid b/game/presentation/playtest_logger.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/playtest_logger.gd.uid rename to game/presentation/playtest_logger.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/tune_sim_controller.gd b/game/presentation/tune_sim_controller.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/tune_sim_controller.gd rename to game/presentation/tune_sim_controller.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/tune_sim_controller.gd.uid b/game/presentation/tune_sim_controller.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/tune_sim_controller.gd.uid rename to game/presentation/tune_sim_controller.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/ui_assembler.gd b/game/presentation/ui_assembler.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/ui_assembler.gd rename to game/presentation/ui_assembler.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/ui_assembler.gd.uid b/game/presentation/ui_assembler.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/ui_assembler.gd.uid rename to game/presentation/ui_assembler.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/ap_bar_view.gd b/game/presentation/views/ap_bar_view.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/ap_bar_view.gd rename to game/presentation/views/ap_bar_view.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/ap_bar_view.gd.uid b/game/presentation/views/ap_bar_view.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/ap_bar_view.gd.uid rename to game/presentation/views/ap_bar_view.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/battle_end_overlay.gd b/game/presentation/views/battle_end_overlay.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/battle_end_overlay.gd rename to game/presentation/views/battle_end_overlay.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/battle_end_overlay.gd.uid b/game/presentation/views/battle_end_overlay.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/battle_end_overlay.gd.uid rename to game/presentation/views/battle_end_overlay.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/battle_log_view.gd b/game/presentation/views/battle_log_view.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/battle_log_view.gd rename to game/presentation/views/battle_log_view.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/battle_log_view.gd.uid b/game/presentation/views/battle_log_view.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/battle_log_view.gd.uid rename to game/presentation/views/battle_log_view.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/battle_stage_view.gd b/game/presentation/views/battle_stage_view.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/battle_stage_view.gd rename to game/presentation/views/battle_stage_view.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/battle_stage_view.gd.uid b/game/presentation/views/battle_stage_view.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/battle_stage_view.gd.uid rename to game/presentation/views/battle_stage_view.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/board_cell_unit.gd b/game/presentation/views/board_cell_unit.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/board_cell_unit.gd rename to game/presentation/views/board_cell_unit.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/board_cell_unit.gd.uid b/game/presentation/views/board_cell_unit.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/board_cell_unit.gd.uid rename to game/presentation/views/board_cell_unit.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/board_fx_view.gd b/game/presentation/views/board_fx_view.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/board_fx_view.gd rename to game/presentation/views/board_fx_view.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/board_fx_view.gd.uid b/game/presentation/views/board_fx_view.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/board_fx_view.gd.uid rename to game/presentation/views/board_fx_view.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/board_view.gd b/game/presentation/views/board_view.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/board_view.gd rename to game/presentation/views/board_view.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/board_view.gd.uid b/game/presentation/views/board_view.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/board_view.gd.uid rename to game/presentation/views/board_view.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/board_world.gd b/game/presentation/views/board_world.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/board_world.gd rename to game/presentation/views/board_world.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/board_world.gd.uid b/game/presentation/views/board_world.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/board_world.gd.uid rename to game/presentation/views/board_world.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/board_zone_view.gd b/game/presentation/views/board_zone_view.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/board_zone_view.gd rename to game/presentation/views/board_zone_view.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/board_zone_view.gd.uid b/game/presentation/views/board_zone_view.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/board_zone_view.gd.uid rename to game/presentation/views/board_zone_view.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/camp_overlay_view.gd b/game/presentation/views/camp_overlay_view.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/camp_overlay_view.gd rename to game/presentation/views/camp_overlay_view.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/camp_overlay_view.gd.uid b/game/presentation/views/camp_overlay_view.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/camp_overlay_view.gd.uid rename to game/presentation/views/camp_overlay_view.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/desaturation.gdshader b/game/presentation/views/desaturation.gdshader similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/desaturation.gdshader rename to game/presentation/views/desaturation.gdshader diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/desaturation.gdshader.uid b/game/presentation/views/desaturation.gdshader.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/desaturation.gdshader.uid rename to game/presentation/views/desaturation.gdshader.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/hero_info_panel_view.gd b/game/presentation/views/hero_info_panel_view.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/hero_info_panel_view.gd rename to game/presentation/views/hero_info_panel_view.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/hero_info_panel_view.gd.uid b/game/presentation/views/hero_info_panel_view.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/hero_info_panel_view.gd.uid rename to game/presentation/views/hero_info_panel_view.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/legend_overlay.gd b/game/presentation/views/legend_overlay.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/legend_overlay.gd rename to game/presentation/views/legend_overlay.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/legend_overlay.gd.uid b/game/presentation/views/legend_overlay.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/legend_overlay.gd.uid rename to game/presentation/views/legend_overlay.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/node_overlay.gd b/game/presentation/views/node_overlay.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/node_overlay.gd rename to game/presentation/views/node_overlay.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/node_overlay.gd.uid b/game/presentation/views/node_overlay.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/node_overlay.gd.uid rename to game/presentation/views/node_overlay.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/route_overlay.gd b/game/presentation/views/route_overlay.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/route_overlay.gd rename to game/presentation/views/route_overlay.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/route_overlay.gd.uid b/game/presentation/views/route_overlay.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/route_overlay.gd.uid rename to game/presentation/views/route_overlay.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/settlement_fx_view.gd b/game/presentation/views/settlement_fx_view.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/settlement_fx_view.gd rename to game/presentation/views/settlement_fx_view.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/settlement_fx_view.gd.uid b/game/presentation/views/settlement_fx_view.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/settlement_fx_view.gd.uid rename to game/presentation/views/settlement_fx_view.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/settlement_review_overlay.gd b/game/presentation/views/settlement_review_overlay.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/settlement_review_overlay.gd rename to game/presentation/views/settlement_review_overlay.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/settlement_review_overlay.gd.uid b/game/presentation/views/settlement_review_overlay.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/settlement_review_overlay.gd.uid rename to game/presentation/views/settlement_review_overlay.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/shop_overlay_view.gd b/game/presentation/views/shop_overlay_view.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/shop_overlay_view.gd rename to game/presentation/views/shop_overlay_view.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/shop_overlay_view.gd.uid b/game/presentation/views/shop_overlay_view.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/shop_overlay_view.gd.uid rename to game/presentation/views/shop_overlay_view.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/standee_view.gd b/game/presentation/views/standee_view.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/standee_view.gd rename to game/presentation/views/standee_view.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/standee_view.gd.uid b/game/presentation/views/standee_view.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/standee_view.gd.uid rename to game/presentation/views/standee_view.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/status_slot_row.gd b/game/presentation/views/status_slot_row.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/status_slot_row.gd rename to game/presentation/views/status_slot_row.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/status_slot_row.gd.uid b/game/presentation/views/status_slot_row.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/status_slot_row.gd.uid rename to game/presentation/views/status_slot_row.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/toast_stack.gd b/game/presentation/views/toast_stack.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/toast_stack.gd rename to game/presentation/views/toast_stack.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/toast_stack.gd.uid b/game/presentation/views/toast_stack.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/toast_stack.gd.uid rename to game/presentation/views/toast_stack.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/tune_panel.gd b/game/presentation/views/tune_panel.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/tune_panel.gd rename to game/presentation/views/tune_panel.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/tune_panel.gd.uid b/game/presentation/views/tune_panel.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/tune_panel.gd.uid rename to game/presentation/views/tune_panel.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/ui_kit.gd b/game/presentation/views/ui_kit.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/ui_kit.gd rename to game/presentation/views/ui_kit.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/presentation/views/ui_kit.gd.uid b/game/presentation/views/ui_kit.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/presentation/views/ui_kit.gd.uid rename to game/presentation/views/ui_kit.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/project.godot b/game/project.godot similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/project.godot rename to game/project.godot diff --git a/prototypes/dungeon-sweeper-vertical-slice/route_overlay_preview.png b/game/route_overlay_preview.png similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/route_overlay_preview.png rename to game/route_overlay_preview.png diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/adventure_monte_carlo.gd b/game/smoke/adventure_monte_carlo.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/adventure_monte_carlo.gd rename to game/smoke/adventure_monte_carlo.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/adventure_monte_carlo.gd.uid b/game/smoke/adventure_monte_carlo.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/adventure_monte_carlo.gd.uid rename to game/smoke/adventure_monte_carlo.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/auto_player.gd b/game/smoke/auto_player.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/auto_player.gd rename to game/smoke/auto_player.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/auto_player.gd.uid b/game/smoke/auto_player.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/auto_player.gd.uid rename to game/smoke/auto_player.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/board_stat_probe.gd b/game/smoke/board_stat_probe.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/board_stat_probe.gd rename to game/smoke/board_stat_probe.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/board_stat_probe.gd.uid b/game/smoke/board_stat_probe.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/board_stat_probe.gd.uid rename to game/smoke/board_stat_probe.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/calibrate_boards.gd b/game/smoke/calibrate_boards.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/calibrate_boards.gd rename to game/smoke/calibrate_boards.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/calibrate_boards.gd.uid b/game/smoke/calibrate_boards.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/calibrate_boards.gd.uid rename to game/smoke/calibrate_boards.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/config_fatal_probe.gd b/game/smoke/config_fatal_probe.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/config_fatal_probe.gd rename to game/smoke/config_fatal_probe.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/config_fatal_probe.gd.uid b/game/smoke/config_fatal_probe.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/config_fatal_probe.gd.uid rename to game/smoke/config_fatal_probe.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/damage_probe.gd b/game/smoke/damage_probe.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/damage_probe.gd rename to game/smoke/damage_probe.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/damage_probe.gd.uid b/game/smoke/damage_probe.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/damage_probe.gd.uid rename to game/smoke/damage_probe.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/defense_scan.gd b/game/smoke/defense_scan.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/defense_scan.gd rename to game/smoke/defense_scan.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/defense_scan.gd.uid b/game/smoke/defense_scan.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/defense_scan.gd.uid rename to game/smoke/defense_scan.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/dump_battle.gd b/game/smoke/dump_battle.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/dump_battle.gd rename to game/smoke/dump_battle.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/dump_battle.gd.uid b/game/smoke/dump_battle.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/dump_battle.gd.uid rename to game/smoke/dump_battle.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/experiment_density.gd b/game/smoke/experiment_density.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/experiment_density.gd rename to game/smoke/experiment_density.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/experiment_density.gd.uid b/game/smoke/experiment_density.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/experiment_density.gd.uid rename to game/smoke/experiment_density.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/level_autoplay.gd b/game/smoke/level_autoplay.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/level_autoplay.gd rename to game/smoke/level_autoplay.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/level_autoplay.gd.uid b/game/smoke/level_autoplay.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/level_autoplay.gd.uid rename to game/smoke/level_autoplay.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/monte_carlo.gd b/game/smoke/monte_carlo.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/monte_carlo.gd rename to game/smoke/monte_carlo.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/monte_carlo.gd.uid b/game/smoke/monte_carlo.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/monte_carlo.gd.uid rename to game/smoke/monte_carlo.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/reward_expectation.gd b/game/smoke/reward_expectation.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/reward_expectation.gd rename to game/smoke/reward_expectation.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/reward_expectation.gd.uid b/game/smoke/reward_expectation.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/reward_expectation.gd.uid rename to game/smoke/reward_expectation.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/rhythm_batch.gd b/game/smoke/rhythm_batch.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/rhythm_batch.gd rename to game/smoke/rhythm_batch.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/rhythm_batch.gd.uid b/game/smoke/rhythm_batch.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/rhythm_batch.gd.uid rename to game/smoke/rhythm_batch.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/skill_rhythm_probe.gd b/game/smoke/skill_rhythm_probe.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/skill_rhythm_probe.gd rename to game/smoke/skill_rhythm_probe.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/skill_rhythm_probe.gd.uid b/game/smoke/skill_rhythm_probe.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/skill_rhythm_probe.gd.uid rename to game/smoke/skill_rhythm_probe.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/smoke_all.gd b/game/smoke/smoke_all.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/smoke_all.gd rename to game/smoke/smoke_all.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/smoke_all.gd.uid b/game/smoke/smoke_all.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/smoke_all.gd.uid rename to game/smoke/smoke_all.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/ui_click_probe.gd b/game/smoke/ui_click_probe.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/ui_click_probe.gd rename to game/smoke/ui_click_probe.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/ui_click_probe.gd.uid b/game/smoke/ui_click_probe.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/ui_click_probe.gd.uid rename to game/smoke/ui_click_probe.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/ui_click_probe.tscn b/game/smoke/ui_click_probe.tscn similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/ui_click_probe.tscn rename to game/smoke/ui_click_probe.tscn diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/ui_input_probe.gd b/game/smoke/ui_input_probe.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/ui_input_probe.gd rename to game/smoke/ui_input_probe.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/ui_input_probe.gd.uid b/game/smoke/ui_input_probe.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/ui_input_probe.gd.uid rename to game/smoke/ui_input_probe.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/ui_input_probe.tscn b/game/smoke/ui_input_probe.tscn similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/ui_input_probe.tscn rename to game/smoke/ui_input_probe.tscn diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/ui_layout_probe.gd b/game/smoke/ui_layout_probe.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/ui_layout_probe.gd rename to game/smoke/ui_layout_probe.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/ui_layout_probe.gd.uid b/game/smoke/ui_layout_probe.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/ui_layout_probe.gd.uid rename to game/smoke/ui_layout_probe.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/ui_layout_probe.tscn b/game/smoke/ui_layout_probe.tscn similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/ui_layout_probe.tscn rename to game/smoke/ui_layout_probe.tscn diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/ui_probe.gd b/game/smoke/ui_probe.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/ui_probe.gd rename to game/smoke/ui_probe.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/ui_probe.gd.uid b/game/smoke/ui_probe.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/ui_probe.gd.uid rename to game/smoke/ui_probe.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/ui_probe.tscn b/game/smoke/ui_probe.tscn similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/ui_probe.tscn rename to game/smoke/ui_probe.tscn diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/ui_tune_probe.gd b/game/smoke/ui_tune_probe.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/ui_tune_probe.gd rename to game/smoke/ui_tune_probe.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/ui_tune_probe.gd.uid b/game/smoke/ui_tune_probe.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/ui_tune_probe.gd.uid rename to game/smoke/ui_tune_probe.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/ui_tune_probe.tscn b/game/smoke/ui_tune_probe.tscn similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/ui_tune_probe.tscn rename to game/smoke/ui_tune_probe.tscn diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/verifier_batch.gd b/game/smoke/verifier_batch.gd similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/verifier_batch.gd rename to game/smoke/verifier_batch.gd diff --git a/prototypes/dungeon-sweeper-vertical-slice/smoke/verifier_batch.gd.uid b/game/smoke/verifier_batch.gd.uid similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/smoke/verifier_batch.gd.uid rename to game/smoke/verifier_batch.gd.uid diff --git a/prototypes/dungeon-sweeper-vertical-slice/tools/log_analysis.py b/game/tools/log_analysis.py similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/tools/log_analysis.py rename to game/tools/log_analysis.py diff --git a/prototypes/dungeon-sweeper-vertical-slice/tools/指标口径说明.md b/game/tools/指标口径说明.md similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/tools/指标口径说明.md rename to game/tools/指标口径说明.md diff --git a/prototypes/dungeon-sweeper-vertical-slice/tools/样例输出_4200批600局.txt b/game/tools/样例输出_4200批600局.txt similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/tools/样例输出_4200批600局.txt rename to game/tools/样例输出_4200批600局.txt diff --git a/prototypes/dungeon-sweeper-vertical-slice/tools/样例输出_种子1234局.txt b/game/tools/样例输出_种子1234局.txt similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/tools/样例输出_种子1234局.txt rename to game/tools/样例输出_种子1234局.txt diff --git a/prototypes/dungeon-sweeper-vertical-slice/tools/样例输出_种子5678局.txt b/game/tools/样例输出_种子5678局.txt similarity index 100% rename from prototypes/dungeon-sweeper-vertical-slice/tools/样例输出_种子5678局.txt rename to game/tools/样例输出_种子5678局.txt diff --git a/production/loop-dashboard.html b/production/loop-dashboard.html index 9731e6c8..0eeb7934 100644 --- a/production/loop-dashboard.html +++ b/production/loop-dashboard.html @@ -50,7 +50,7 @@ code{background:#262a31;padding:1px 5px;border-radius:4px;font-size:12.5px}

① 什么在飞(git 未提交 12 + 未跟踪 8)

分组文件数
切片代码5
GDD 文档3
数据表2
其他1
会话产物1
-

未跟踪:

+

未跟踪:

② 什么待拍板 / 待执行(06 清单 53 条)

待办 44 · 部分收口 6 · 拍板待执行 3 · 解决态残留 0(按「解决即移除」口径待清)

diff --git a/production/qa/conversion-calibration/collect_all.sh b/production/qa/conversion-calibration/collect_all.sh index 4547bd2b..a4339483 100644 --- a/production/qa/conversion-calibration/collect_all.sh +++ b/production/qa/conversion-calibration/collect_all.sh @@ -5,7 +5,7 @@ # 各档 .log/.vjson + 合并 calibration.raw.jsonl(判定端 --from-raw 消费)。 set -u GODOT=/d/code/godot/Godot_v4.7.2-stable_win64_console.exe -SLICE=/d/code/g-plan2-conversion-calibration/prototypes/dungeon-sweeper-vertical-slice +SLICE=/d/code/g-plan2-conversion-calibration/game QA=/d/code/g-plan2-conversion-calibration/production/qa/conversion-calibration mkdir -p "$QA" cd "$SLICE" || exit 1 diff --git a/production/qa/conversion-calibration/recollect_adventure.sh b/production/qa/conversion-calibration/recollect_adventure.sh index b5037a2c..8fa8bfd9 100644 --- a/production/qa/conversion-calibration/recollect_adventure.sh +++ b/production/qa/conversion-calibration/recollect_adventure.sh @@ -6,7 +6,7 @@ # + 3 个花费序战役(k=60×双画像)。产物合并 calibration.raw.jsonl(判定端 --from-raw 消费)。 set -u GODOT=/d/code/godot/Godot_v4.7.2-stable_win64_console.exe -SLICE=/d/code/g-plan2-conversion-calibration/prototypes/dungeon-sweeper-vertical-slice +SLICE=/d/code/g-plan2-conversion-calibration/game QA=/d/code/g-plan2-conversion-calibration/production/qa/conversion-calibration mkdir -p "$QA" cd "$SLICE" || exit 1 diff --git a/production/qa/conversion-calibration/recollect_armor.sh b/production/qa/conversion-calibration/recollect_armor.sh index 538c2761..43a692e0 100644 --- a/production/qa/conversion-calibration/recollect_armor.sh +++ b/production/qa/conversion-calibration/recollect_armor.sh @@ -4,7 +4,7 @@ # base/hp3/hp6/atk1/atk2 五档注入甲=0、修复逐位不变,沿用首轮产物。 set -u GODOT=/d/code/godot/Godot_v4.7.2-stable_win64_console.exe -SLICE=/d/code/g-plan2-conversion-calibration/prototypes/dungeon-sweeper-vertical-slice +SLICE=/d/code/g-plan2-conversion-calibration/game QA=/d/code/g-plan2-conversion-calibration/production/qa/conversion-calibration mkdir -p "$QA" cd "$SLICE" || exit 1 diff --git a/qa-data/README.md b/qa-data/README.md index 5906f987..22628b5f 100644 --- a/qa-data/README.md +++ b/qa-data/README.md @@ -1,6 +1,6 @@ # 冒险全流程零加成试玩数据(2026-09-21 采集批) -- 来源:worktree `g-plan2-adventure-mc` 分支 `adventure-mc-playtest`,工具 `prototypes/dungeon-sweeper-vertical-slice/smoke/adventure_monte_carlo.gd`(未提交) +- 来源:worktree `g-plan2-adventure-mc` 分支 `adventure-mc-playtest`,工具 `game/smoke/adventure_monte_carlo.gd`(未提交) - 命令:`--headless --script res://smoke/adventure_monte_carlo.gd -- 300 71000 both`(route=min 默认) - 口径:三关连探 run_adventure;atk+0%/hp+0% 零天赋格加成;关间大奖励(+10 上限回满)按冒险结构设计自动兑付、未剥离;种子 71000–71299 逐局独立消费一次;normal 300 局 + perfect 300 局 = 600 局,exit 0 - `runsum_600.jsonl`:每行一局摘要(policy/seed/result/cleared/levels_cleared/stopped_at/战斗轮数/承伤/踩雷/刷新/逐战上限序列/奖励事件/商店 GP 序列)——统计分析主取数面 diff --git a/qa-data/实现计划书_PackageB.md b/qa-data/实现计划书_PackageB.md index 66c1142a..3c163a04 100644 --- a/qa-data/实现计划书_PackageB.md +++ b/qa-data/实现计划书_PackageB.md @@ -10,7 +10,7 @@ 1. **工作目录铁律**:所有改动必须在 worktree **`D:/code/g-plan2-adventure-mc`**(branch `adventure-mc-playtest`)内进行。 - 主工作区 `D:/code/g-plan2` 有 pre-commit hook,改 `prototypes/**` 下的 `.tres`/`.gd` 会被**直接拦下**。 - 验证工具(`smoke/adventure_monte_carlo.gd`、`smoke/calibrate_boards.gd`、`qa-data/analyze.py`)**尚未提交**,物理上只存在于该 worktree。所以**另一个 session 必须打开这个 worktree 目录**,不要用主工作区、不要 fresh clone。 -2. **切片目录**(下称 `$SLICE`)= `D:/code/g-plan2-adventure-mc/prototypes/dungeon-sweeper-vertical-slice`。所有 Godot 命令在 `$SLICE` 下运行。 +2. **切片目录**(下称 `$SLICE`)= `D:/code/g-plan2-adventure-mc/game`。所有 Godot 命令在 `$SLICE` 下运行。 3. **Godot exe**:`D:/code/godot/Godot_v4.7.2-stable_win64_console.exe`(下称 `$GODOT`)。 4. **背景与证据**(可选读):`qa-data/分析报告_零加成全流程.md`(实测对照)、`qa-data/优化方案.md`(完整提案,本计划书是其 Package B 子集的可执行化)。 5. **纪律**:表值全部 provisional,以 MC 复测读数为准,**不硬凑**;非用户明确要求**不 commit**。 @@ -122,7 +122,7 @@ ## 5. 执行 runbook(命令可直接复制) ```bash -SLICE="D:/code/g-plan2-adventure-mc/prototypes/dungeon-sweeper-vertical-slice" +SLICE="D:/code/g-plan2-adventure-mc/game" GODOT="D:/code/godot/Godot_v4.7.2-stable_win64_console.exe" QA="D:/code/g-plan2-adventure-mc/qa-data" LOGDIR="$APPDATA/Godot/app_userdata/DungeonSweeperVerticalSlice/logs" diff --git a/tests/README.md b/tests/README.md index 1c0599c9..fe402c25 100644 --- a/tests/README.md +++ b/tests/README.md @@ -4,7 +4,7 @@ **Test Framework**: 双载体(ADR-0004)——`--headless --script` 逻辑冒烟 + headless 场景探针;gdUnit4 **deferred**(D2 OQ1 关闭形态,正式 CI 期再议) **CI**: `.github/workflows/tests.yml`(首次 push 到 GitHub 后自动生效;仓库 2026-09-12 尚未初始化 git) **Setup date**: 2026-09-12 -**参考实现**: `prototypes/dungeon-sweeper-vertical-slice/smoke/`(冒烟 96/96 + 三 UI 探针——正式工程的活样板) +**参考实现**: `game/smoke/`(冒烟 96/96 + 三 UI 探针——正式工程的活样板) ## Directory Layout diff --git a/tests/run_all.gd b/tests/run_all.gd index ce552cd0..e2703b71 100644 --- a/tests/run_all.gd +++ b/tests/run_all.gd @@ -1,7 +1,7 @@ # tests/run_all.gd — CI 冒烟统一入口(ADR-0004 双载体的逻辑冒烟调用点) # 用法:godot --headless --script tests/run_all.gd (CI 侧包装外部超时:timeout 120s …) # 协议:套件清单逐条"套件 → 期望退出码"(D2 AC-2b manifest);致命类独立进程。 -# 现状:正式 Godot 工程尚未在根目录创建(代码在 prototypes/dungeon-sweeper-vertical-slice/, +# 现状:正式 Godot 工程尚未在根目录创建(代码在 game/, # 其 smoke/smoke_all.gd 96/96 为参考实现)——本入口当前仅验证运行协议自身; # 正式工程落地后,把套件清单登记进 _suites()。 extends SceneTree diff --git a/tests/static_scan.sh b/tests/static_scan.sh index 1fe690c5..f421f395 100644 --- a/tests/static_scan.sh +++ b/tests/static_scan.sh @@ -1,26 +1,29 @@ #!/usr/bin/env bash # tests/static_scan.sh — ADR-0004 静态扫描域 S1–S8 可执行子集 # 规则全集与动机:docs/architecture/adr-0004-test-carrier-and-ci.md §Decision 3 -# 正式工程(core/ 存在)时执行;否则优雅跳过(切片阶段代码在 prototypes/,不受本扫描管辖)。 +# 正式工程(core/ 存在)时执行;否则优雅跳过(工程在 game/core——2026-09-24 转正结构批后仓库根布局)。 # 纪律:新违规案例必须先补本脚本规则再修码(docs/code-conventions.md 缺陷-规范对照表)。 set -u cd "$(dirname "$0")/.." -if [ ! -d core ]; then - echo "[static_scan] core/ 不存在(正式工程未创建)——跳过,退出 0" +if [ ! -d game/core ]; then + echo "[static_scan] game/core 不存在(工程未创建)——跳过,退出 0" exit 0 fi fail=0 # S1/S2 — 玩法代码禁 randomize()/自建 RandomNumberGenerator/全局随机函数(绕开 RngService 的口子) -hits=$(grep -rnE '\brandomize[[:space:]]*\(|\bRandomNumberGenerator\b|\brandi[[:space:]]*\(|\brandf[[:space:]]*\(|\brandf_range[[:space:]]*\(' \ - core presentation --include='*.gd' 2>/dev/null | wc -l) -if [ "$hits" -gt 0 ]; then echo "[static_scan] S1/S2 FAIL: 全局随机/RNG 自建命中 $hits 处"; grep -rnE '\brandomize[[:space:]]*\(|\bRandomNumberGenerator\b|\brandi[[:space:]]*\(|\brandf[[:space:]]*\(|\brandf_range[[:space:]]*\(' core presentation --include='*.gd' 2>/dev/null; fail=1; else echo "[static_scan] S1/S2 ok"; fi +# 2026-09-24 首次实跑收敛(转正结构批):违规签名=裸 randomize/rand* 调用(实例方法 .randi() 排除) +# + RngService 之外的 RandomNumberGenerator.new();接收服务注入流的类型标注不属违规(core 五文件 15 处实证) +hits=$(grep -rnE '\brandomize[[:space:]]*\(|(^|[^.[:alnum:]_])randi[[:space:]]*\(|(^|[^.[:alnum:]_])randf[[:space:]]*\(|(^|[^.[:alnum:]_])randf_range[[:space:]]*\(' \ + game/core game/presentation --include='*.gd' 2>/dev/null | grep -vE '^[^:]+:[0-9]+:[[:space:]]*#' | wc -l) +hits2=$(grep -rn 'RandomNumberGenerator\.new()' game/core game/presentation --include='*.gd' 2>/dev/null | grep -vc rng_service) +if [ "$hits" -gt 0 ] || [ "$hits2" -gt 0 ]; then echo "[static_scan] S1/S2 FAIL: 全局随机/RNG 自建命中 $hits+$hits2 处"; grep -rnE '\brandomize[[:space:]]*\(|(^|[^.[:alnum:]_])randi[[:space:]]*\(|(^|[^.[:alnum:]_])randf[[:space:]]*\(|(^|[^.[:alnum:]_])randf_range[[:space:]]*\(' game/core game/presentation --include='*.gd' 2>/dev/null; grep -rn 'RandomNumberGenerator\.new()' game/core game/presentation --include='*.gd' 2>/dev/null | grep -v rng_service; fail=1; else echo "[static_scan] S1/S2 ok"; fi # S4 — core/ 禁 extends Control/Node2D、禁 .tscn preload(headless 债) -hits=$(grep -rnE 'extends[[:space:]]+(Control|Node2D)\b|\.tscn' core --include='*.gd' 2>/dev/null | wc -l) -if [ "$hits" -gt 0 ]; then echo "[static_scan] S4 FAIL: core 引擎/UI 依赖命中 $hits 处"; grep -rnE 'extends[[:space:]]+(Control|Node2D)\b|\.tscn' core --include='*.gd' 2>/dev/null; fail=1; else echo "[static_scan] S4 ok"; fi +hits=$(grep -rnE 'extends[[:space:]]+(Control|Node2D)\b|\.tscn' game/core --include='*.gd' 2>/dev/null | wc -l) +if [ "$hits" -gt 0 ]; then echo "[static_scan] S4 FAIL: core 引擎/UI 依赖命中 $hits 处"; grep -rnE 'extends[[:space:]]+(Control|Node2D)\b|\.tscn' game/core --include='*.gd' 2>/dev/null; fail=1; else echo "[static_scan] S4 ok"; fi # S3 — core/ 禁 ConfigDB 外 data 表加载(schema class_name 直引豁免) hits=$(grep -rnE '\b(load|preload)[[:space:]]*\(|ResourceLoader\.load' core --include='*.gd' 2>/dev/null \ diff --git a/tests/unit/README.md b/tests/unit/README.md index f251534a..810dbd6e 100644 --- a/tests/unit/README.md +++ b/tests/unit/README.md @@ -3,4 +3,4 @@ 每系统一个子目录(`reward_economy/`、`board_generator/`…)。协议与命名见 `tests/README.md`。 **活样板**:`example_test.gd`(本目录)——第一个真实测试请以它为模板。 -**参考实现**:`prototypes/dungeon-sweeper-vertical-slice/smoke/smoke_all.gd`(96 条断言的组织方式)。 +**参考实现**:`game/smoke/smoke_all.gd`(96 条断言的组织方式)。 diff --git a/tools/balance_verifier.py b/tools/balance_verifier.py index a79319ef..a35920b8 100644 --- a/tools/balance_verifier.py +++ b/tools/balance_verifier.py @@ -48,7 +48,7 @@ import time from pathlib import Path ROOT = Path(__file__).resolve().parent.parent -SLICE = ROOT / "prototypes" / "dungeon-sweeper-vertical-slice" +SLICE = ROOT / "game" GODOT = r"D:\code\godot\Godot_v4.7.2-stable_win64_console.exe" SCRIPT = "res://smoke/verifier_batch.gd" QA_DIR = ROOT / "production" / "qa" diff --git a/tools/doc_link_audit.py b/tools/doc_link_audit.py index b42589e9..ba6c74dd 100644 --- a/tools/doc_link_audit.py +++ b/tools/doc_link_audit.py @@ -8,7 +8,7 @@ r"""doc_link_audit.py — design 文档链接健康检查 (b) 反引号路径引用 `路径.扩展名`(扩展名限 md/yaml/yml/tres/gd/py/json/csv)—— 只校验"路径形"(含 / 且不含空格、通配符)的引用;裸文件名(如表格里的 `reward.tres`、文档树里的 `棋盘生成.md`)是简称提及不是链接,跳过不校验。 - 解析顺序:所在文件目录 → 仓库根 → design/ → prototypes/dungeon-sweeper-vertical-slice/ + 解析顺序:所在文件目录 → 仓库根 → design/ → game/ (data/tables/*.tres 类指路代码侧的惯用写法实际落在 slice 下;带 ./ ../ 前缀的只按 所在文件目录解析,不做多基猜测)。 锚点校验:目标为 .md 时,把其标题行转成 GFM 中文锚(去空格、去冒号等标点、小写英文, @@ -33,7 +33,7 @@ import sys from pathlib import Path DEFAULT_DIRS = ["design/gdd", "design/registry", "design/ux"] -PROTO_PREFIX = "prototypes/dungeon-sweeper-vertical-slice" +PROTO_PREFIX = "game" ALLOWED_EXTS = ("md", "yaml", "yml", "tres", "gd", "py", "json", "csv") MD_LINK_RE = re.compile(r"(?