配置档案 · 2026-11-02
爱音塔-设计配置-v0.2
历史配置,非现行运行值。可阅读与下载;伙伴、浮鼓或候选数值按当时版本保留。
{
"product": {
"schema_version": "0.2",
"status": "P3_candidate_not_approved",
"title": "爱音塔",
"relationship": "麦洛谛的独立玩法版本,不替换原版",
"view": "2.5D斜侧固定镜头,沿预制路线持续向上",
"primary_proof": "一首完整曲子的可玩第一层",
"platform": "PC制作验证优先;手机横屏输入同步设计;商业首发待确认",
"level_count_vision": 101,
"release_level_count": null,
"music_track": null,
"music_rights": "pending",
"numeric_values": "以下数值均为试调起点,非已测结论",
"engine_selection": "Godot为当前验证宿主,最终生产选型未完成同题对比"
},
"music_clock": {
"status": "candidate",
"source": "audio_playback",
"display_seconds": "max(previous, playback_position + time_since_last_mix - output_latency)",
"units": {
"time": "seconds",
"tempo": "beats_per_minute",
"beat": "quarter_note"
},
"tempo_map_example_only": [
{
"start_beat": 0,
"bpm": 120,
"meter": [
4,
4
]
}
],
"track_offset_seconds": 0,
"calibration": {
"audio_ms": 0,
"visual_ms": 0,
"input_ms": 0,
"sample_count": 20,
"estimate": "median_valid_taps; report spread; user may adjust"
},
"discontinuities": [
"pause",
"resume",
"seek",
"device_change"
],
"on_discontinuity": "new_epoch; clear_pending_events; count_in_before_resume",
"hitstop": "presentation_only_audio_and_judgement_continue"
},
"judgement": {
"status": "candidate_requires_playtest",
"input_anchor": "cue_beat",
"delta_ms": "1000 * (audio_clock_at_input_seconds - cue_audio_seconds) - input_calibration_ms",
"calibration_sign": "positive_input_calibration_means_device_or_player_taps_late; subtract_once; audio_output_latency_already_in_clock",
"offbeat_combat": "free action may deal 0.4x damage on real collision; does not consume cue or add combo",
"result_single_source": "judgement_result_id",
"windows_ms": {
"perfect": 40,
"good": 85,
"accepted": 130
},
"priority": [
"match_action",
"closest_unconsumed_cue",
"timing_grade"
],
"one_input_consumes_max_cues": 1,
"one_cue_consumes_max_inputs": 1,
"wrong_action": "record_wrong_without_consuming_expected_cue; debounce_same_button_80ms; no_free_score",
"miss_after_ms": 130,
"required_cue_min_gap_beats": 1,
"non_scoring_moves": "movement allowed; no combo, no scored instrument stem",
"score_weights": {
"perfect": 1,
"good": 0.7,
"accepted": 0.3,
"miss": 0
},
"max_score": 1000000,
"score_normalization": "sum(grade_weight * cue_weight) / sum(all_required_cue_weights) * max_score",
"rank_groups": [
"standard_unassisted",
"assisted",
"practice"
],
"route_score_budget": "equal_per_phrase_for_ranked_routes",
"sync_percent": "perfect_or_good_count / required_cue_count"
},
"actions": {
"light": {
"input": "J / south_face / touch_light",
"body": "撑脚稳住→髋肩带臂→腕部击鼓→反弹收势",
"pre_contact": "pose preparation has no audio, damage or score; bounded IK only at release",
"hit": "drum_contact emits wave; target collision causes HP loss",
"music": "actual_drum_contact_triggers_percussion; authored_main_beat_offset_calibrated",
"movement": "保持路线推进",
"anticipation_lead_ms_candidate": 240,
"input_to_contact_target_ms": 80,
"release_target_status": "测试目标,非爱音塔实测",
"contact_policy": "anticipate before cue; input triggers release immediately; no wait to next beat",
"grade_policy": "grade once at input; log real contact delta separately; no second rhythm penalty"
},
"heavy": {
"input": "K / east_face / touch_heavy",
"body": "沉髋蓄势→转腰带肩→短槌重落→全身回弹",
"pre_contact": "pose preparation has no audio, damage or score; bounded IK only at release",
"hit": "larger impulse and break threshold; not giant weapon",
"music": "actual_drum_contact_triggers_percussion; authored_main_beat_offset_calibrated",
"movement": "预定重击平台,避免同时精确跳跃",
"anticipation_lead_ms_candidate": 320,
"input_to_contact_target_ms": 100,
"release_target_status": "测试目标,非爱音塔实测",
"contact_policy": "anticipate before cue; input triggers release immediately; no wait to next beat",
"grade_policy": "grade once at input; log real contact delta separately; no second rhythm penalty"
},
"jump": {
"input": "W_or_Space / north_face / touch_jump",
"cue_to_contact_beats": 0,
"body": "压身蹬地→空中收腿→脚先触地→屈膝吸收",
"music": "takeoff_percussion; landing_secondary_if_authored",
"coyote_ms": 90,
"jump_buffer_ms": 100,
"max_air_actions": 1
},
"dash": {
"input": "L_or_Shift / west_face / touch_dash",
"cue_to_contact_beats": 0,
"body": "低重心穿身或侧翻,出口可接跑",
"music": "short_transient",
"invulnerability_ms": 100,
"rule": "only authored hazard windows; no permanent spam invulnerability"
},
"liva": {
"input": "auto_response_to_successful_phrase",
"rule": "phrase_success unlocks one authored reachable cloud foothold; no random required platform",
"manual_call": "later_candidate_not_first_level"
},
"global": {
"response_target_ms": 50,
"response_target_status": "target_to_measure_on_hardware_not_claim",
"damage_only_on_wave_collision": true,
"visual_grade_locked_at_input": true,
"collision_failure": "keep rhythm grade; mark combat miss, no HP loss; diagnose reachability",
"contact_time": "实际接触时记录;不预先把落槌锁到未来半拍;以完整动作相位和误差分布评审",
"slow_tempo_fast_tempo": "re-author_offsets_or_change_action; never arbitrary whole-body speed scaling",
"response_target_scope": "输入到首次可见动作;不是触鼓延迟承诺",
"turning_policy": "转身/不可达状态单独统计;不可瞬移鼓或扭曲骨架掩盖长延迟;路线提前给目标方向",
"root_authority": "角色根运动仅由一个控制器消费;动画与物理不得重复叠加位移"
}
},
"route_graph": {
"status": "typed_numeric_fixture_not_built_level",
"route_id": "L01_P08",
"units": "meters_and_quarter_beats",
"entry": {
"beat": 32,
"position": [
0,
0
]
},
"exit": {
"beat": 40,
"position": [
14,
6.5
]
},
"routes": [
{
"id": "safe",
"nodes": [
{
"beat": 32,
"position": [
0,
0
]
},
{
"beat": 34,
"position": [
4,
1
]
},
{
"beat": 36,
"position": [
8,
2.5
]
},
{
"beat": 38,
"position": [
11,
4.5
]
},
{
"beat": 40,
"position": [
14,
6.5
]
}
],
"required_cues": [
32,
34,
36,
38
],
"score_weight_total": 4,
"reward": "standard",
"edges": [
{
"from_beat": 32,
"to_beat": 34,
"type": "supported_run"
},
{
"from_beat": 34,
"to_beat": 36,
"type": "ballistic_jump"
},
{
"from_beat": 36,
"to_beat": 38,
"type": "supported_run"
},
{
"from_beat": 38,
"to_beat": 40,
"type": "supported_run"
}
],
"landing_width_m": 1.8
},
{
"id": "flair",
"nodes": [
{
"beat": 32,
"position": [
0,
0
]
},
{
"beat": 34,
"position": [
4,
1
]
},
{
"beat": 36,
"position": [
9,
3.5
]
},
{
"beat": 38,
"position": [
12,
5.5
]
},
{
"beat": 40,
"position": [
14,
6.5
]
}
],
"required_cues": [
32,
34,
36,
38
],
"score_weight_total": 4,
"reward": "style_badge_only",
"edges": [
{
"from_beat": 32,
"to_beat": 34,
"type": "supported_run"
},
{
"from_beat": 34,
"to_beat": 36,
"type": "ballistic_jump"
},
{
"from_beat": 36,
"to_beat": 38,
"type": "supported_run"
},
{
"from_beat": 38,
"to_beat": 40,
"type": "supported_run"
}
],
"landing_width_m": 0.9
}
],
"choice_window_beats": [
30,
31.5
],
"lock_at_beat": 31.5,
"constraints": [
"same_entry_exit_beat",
"same_rank_score_budget",
"every_jump_reachable_with_margin",
"camera_reveals_next_required_landing",
"no_random_platform_spawn",
"edge_type_explicit",
"root_position_in_meters",
"run_segment_requires_authored_support_surface",
"bounded_jump_assist_solves_velocity_not_teleport"
],
"recovery": {
"max_assists_standard": 0,
"assisted_mode_tokens": 2,
"drop_hp_cost": 20,
"method": "fade_and_move_to_next_authored_safe_node_with_two_beat_warning",
"music": "continues",
"suppress_cues_until_reentry": true,
"suppressed_cues_score": "miss",
"if_no_future_safe_node": "fail_at_next_safe_music_boundary",
"after_tokens_used": "fail_at_next_safe_music_boundary"
}
},
"chart_example": {
"status": "synthetic_input_cues_contact_times_observed_at_runtime",
"bpm": 120,
"offset_seconds": 0,
"events": [
{
"id": "e01",
"beat": 32,
"action": "light",
"instrument": "paigu_high",
"target": "sentinel_a",
"weight": 1,
"contact_timing": "runtime_measured_after_immediate_release"
},
{
"id": "e02",
"beat": 34,
"action": "jump",
"instrument": "woodblock",
"target": null,
"weight": 1
},
{
"id": "e03",
"beat": 36,
"action": "light",
"instrument": "paigu_mid",
"target": "sentinel_b",
"weight": 1,
"contact_timing": "runtime_measured_after_immediate_release"
},
{
"id": "e04",
"beat": 38,
"action": "heavy",
"instrument": "big_drum",
"target": "resonance_gate",
"weight": 1,
"contact_timing": "runtime_measured_after_immediate_release"
}
],
"optional_motion": [
{
"beat": 35,
"action": "dash",
"scoring": false,
"reason": "showcase_only_no_mandatory_hint"
}
]
},
"vfx_profiles": {
"status": "candidate_authored_assets_required",
"all": {
"protect_hud": true,
"emission_by": "combat_result_id",
"music_never_paused": true,
"reduced_flash_available": true
},
"light": {
"ink": "one readable broken brush arc",
"palette": [
"#122d31",
"#d54a36"
],
"screen_area_target_max": 0.08,
"presentation_freeze_ms": 18
},
"heavy": {
"ink": "fold→tear→flying-white→fragments",
"palette": [
"#10282b",
"#e54a36",
"#f0db9c"
],
"screen_area_target_max": 0.22,
"presentation_freeze_ms": 42
},
"break": {
"ink": "directional burst linked to actual broken guard",
"calligraphy": "one_result_one_glyph",
"screen_area_target_max": 0.28,
"presentation_freeze_ms": 55
},
"ensemble": {
"ink": "scene-wide flowing stroke behind protected cues",
"screen_area_target_max": 0.4,
"presentation_freeze_ms": 65,
"limit": "only authored musical climax; no full-screen white flash"
}
},
"level_01": {
"status": "candidate_music_first",
"name": "鼓坊朝云",
"residents": "鼓匠、运输伙计、守桥人、学徒",
"conflict": "共鸣失衡令升降鼓台失序;守桥者试验新来者能否接奏",
"track_file": null,
"duration_seconds": null,
"working_target_seconds": 300,
"phases_normalized": [
{
"start": 0,
"end": 0.1,
"name": "入塔·听见人间"
},
{
"start": 0.1,
"end": 0.28,
"name": "起行·两檐之间"
},
{
"start": 0.28,
"end": 0.45,
"name": "接奏·伙伴与支路"
},
{
"start": 0.45,
"end": 0.64,
"name": "独奏·追攀鼓楼"
},
{
"start": 0.64,
"end": 0.87,
"name": "合奏·守桥对答"
},
{
"start": 0.87,
"end": 1,
"name": "终章·回望与升门"
}
],
"first_build": "one_full_song_plus_start_settings_failure_retry_result",
"boss_hp_example": 300,
"player_hp_example": 100,
"damage_example": {
"light": 10,
"heavy": 25,
"hazard": 15,
"fall": 20
},
"damage_multiplier": {
"perfect": 1.25,
"good": 1,
"accepted": 0.7,
"offbeat": 0.4
},
"warning": "数值仅用于联调;门和Boss不得因前段可恢复失误形成无法结束的软锁",
"working_target_scope": "仅音乐时长工作目标,前后流程另计"
},
"quality_gates": {
"status": "proposed_tests_not_results",
"G1": {
"name": "readable_rhythm",
"method": "5名初次玩家,无口头提示,第一分钟辨认轻重跳闪与下一拍",
"pass_target": "至少4人正确解释并完成基础句;记录样本小不能证明留存"
},
"G2": {
"name": "music_movement_contract",
"method": "合拍、早晚、错招、漏拍、两条路线、掉落、暂停和恢复",
"pass_target": "每条路线完整通曲;无重复计分;音画事件可追溯"
},
"G3": {
"name": "body_and_ink",
"method": "原速和慢放同看;检查支撑脚、鼓触、波碰撞、受击与墨",
"pass_target": "轻重可分、无滑步穿鼓、下一拍始终可读"
},
"G4": {
"name": "whole_song",
"method": "真实玩家从开始到结果页不剪辑游玩,失败重试一次",
"pass_target": "完整曲目、首尾与结算齐全;不能用短样段代替"
},
"G5": {
"name": "performance",
"method": "指定实机录制与不录制各完整跑一次,记录frame_time和audio_drift",
"pass_target": "目标60fps;P95≤20ms、P99≤33ms;大尖峰单列;音画漂移目标≤20ms,需测量"
},
"G6": {
"name": "reuse_proof",
"method": "用同工具配置第二段不同节奏、不同路线",
"pass_target": "无需复制核心代码;验证可编辑性而非一次性演示"
},
"G7": {
"name": "four_real_game_states",
"status": "not_produced",
"required": [
"normal_play",
"hero_super",
"liva_transformation_or_summon",
"boss_super"
],
"method": "同版同场景原速捕获;概念图或四种墨强度不能替代"
}
},
"physics_contract": {
"status": "candidate_numerical_fixture_only",
"coordinates": {
"x": "前进/米",
"y": "竖直向上/米",
"gravity_direction": "-y"
},
"units": "m,s,kg; score timing in ms",
"gravity_m_s2": 18,
"gravity_note": "风格化候选重力,非地球重力或真人能力宣称",
"physics_tick_hz_candidate": 60,
"render_fps_cases": [
30,
60,
120
],
"max_horizontal_air_speed_m_s": 6.8,
"max_launch_vertical_speed_m_s": 13,
"max_supported_speed_m_s": 5,
"max_supported_slope_deg": 40,
"max_downward_landing_speed_m_s": 10,
"jump_input_jitter_ms_cases": [
-130,
-85,
0,
85,
130
],
"jump_solver": "T = landing_music_time - input_music_time; vx=dx/T; vy=dy/T+g*T/2; y(t)=vy*t-g*t*t/2",
"solver_use": "有界起跳辅助;越限时不伪造可达,应改谱/中间落点/动作能力或显示失败",
"old_flair_first_segment": "旧图若解释为1秒内普通跳高5米,需要vy14m/s,高于此候选上限;旧图无边类型,不可宣称已验证可达",
"collision": "test swept path and body volume in authored level later; numerical endpoints alone are insufficient",
"projection": "screen_position = camera_transform(world_position); collision never uses screen_pixels",
"hitstop": "freeze selected presentation, not music/physics/score; continuous sample restores current time",
"jolt": "general physics candidate; no claim it solves authored combat animation"
},
"asset_contract": {
"status": "required_before_runtime_acceptance",
"fields": [
"asset_id",
"source_path",
"export_path",
"creator_or_provider",
"license_scope",
"units_and_axes",
"skeleton_id",
"root_motion_policy",
"materials_and_alpha_mode",
"animation_markers",
"version_hash",
"consumer_build_id",
"review_scope"
],
"character_rules": [
"one_coherent_body",
"no_independent_limb_scale_to_fit_contact",
"consistent_rest_pose_and_bone_lengths",
"contact_ik_bounded",
"cloth_does_not_hide_core_pose"
],
"vfx_layers": [
"authored_primary_shape",
"spatial_deformation",
"wet_dry_edges",
"secondary_fragments",
"separate_emissive_color"
],
"source_trace": "复用素材和代码逐项标注来源,不把别人已有结果列成本轮原创"
},
"ai_workflow": {
"status": "candidate_no_provider_call_this_turn",
"production": [
"research_with_primary_sources",
"generate_editable_candidates",
"validate_schema_and_asset_contract",
"review_same_scene",
"integrate_pinned_version",
"observe_continuous_play"
],
"runtime_liva": {
"inputs": [
"phrase_id",
"rhythm_grade_history",
"player_health_band",
"route_choice",
"relationship_state"
],
"policy": "deterministic authored response library with variation; choose at phrase boundary",
"outputs": [
"response_phrase_id",
"gesture_id",
"optional_authored_cloud_event"
],
"constraints": [
"do_not_spawn_required_route_randomly",
"do_not_modify_score_clock",
"same_rank_rules"
],
"cloud_llm": "not_on_frame_critical_or_scoring_path"
},
"research_only": [
"ProtoMotions/Kimodo生成动作到物理追踪,尚未运行、下载或验证武术质量"
],
"forbidden_claims": [
"provider_success_means_good_art",
"model_review_means_human_acceptance",
"open_source_means_asset_license_unrestricted"
]
}
}