Initial project sync
This commit is contained in:
@@ -0,0 +1,275 @@
|
||||
# 第一关关卡设计(Level 1 Design)
|
||||
|
||||
> 本文档承接《Anchor策划书1.0》(docs/AnchorV1.0.md,缩写 §)与《关卡设计指南》。
|
||||
> §7 / §8 两节为指南原文;其余章节是落地到本项目的关卡与行为设计说明。
|
||||
> 实现入口:`scenes/stage/level_director.gd`(出怪导演)、`scenes/enemies/minion_behavior.gd`(小怪状态机)、`scenes/stage/boss_room_gate.gd`(Boss 房门)。
|
||||
|
||||
---
|
||||
|
||||
## 1. 关卡布局
|
||||
|
||||
沿用 `rthythm_archor_game_player` 参考工程的视觉基线:`Stage` 使用跟随相机,`Camera2D` 初始位置为 `(2047, 395)`,缩放为 `(1.25, 1.25)`;玩家、怪物、Boss 的地面锚点统一在 `y = 560`。关卡迁移只调整出怪方式、门线和战斗流程,不改变角色、Boss、怪物、背景、HUD 的相对大小与原有镜头比例。
|
||||
|
||||
| 位置 | x 坐标 | 说明 |
|
||||
|---|---:|---|
|
||||
| 竞技场左边界 | 1120 | 巡逻 / 后撤永不越界 |
|
||||
| 左侧刷新点 | 1420 | 增援入场起点,使用 `LevelDirector.left_edge_x` |
|
||||
| 玩家出生点 | 1180 | 2026-07-05 new2:改为地图偏左,开场向右推进约 1000px 遇敌 |
|
||||
| 战斗区域中心 | 2047 | 增援入场目标的基准 |
|
||||
| 阶段一近战怪预置点 | 2235 | 编辑器摆放,无刷新动画 |
|
||||
| Boss 初始锚点 | 2520 | 保留参考工程站位;玩家未进 Boss 战前 `combat_enabled = false` |
|
||||
| 右侧刷新点 | 2670 | 增援入场起点,使用 `LevelDirector.right_edge_x` |
|
||||
| 竞技场右边界 | 2890 | 巡逻 / 后撤永不越界 |
|
||||
| Boss 房门 / 触发线 | 2960 | 三态:封锁→开放→反锁;作为通关后进入 Boss 战的流程线 |
|
||||
|
||||
Boss 房门三态(`BossRoomGate`):
|
||||
|
||||
- **封锁(sealed,蓝灰色)**:开局即封,物理墙阻挡,直到 6 只小怪全灭。
|
||||
- **开放(绿色)**:`LevelDirector` 调用 `unseal()`,墙体关闭,可通行。
|
||||
- **反锁(红色)**:玩家跨过门线后在身后锁死(§4.5,不可回头刷怪),并触发 Boss 战入场规则;不移动 player 项目原有相机,不改变 HUD / 角色 / Boss 的比例。
|
||||
|
||||
## 2. 小怪行为逻辑(MinionBehavior 状态机)
|
||||
|
||||
决策与攻击全部对齐节拍(`beat_ticked`),移动逐帧执行。攻击动作进行中不移动、不换目标。
|
||||
|
||||
### 2.1 近战怪(role = melee)
|
||||
|
||||
```text
|
||||
入场(Entry) → 巡逻(Patrol) ⇄ 追击(Chase) → [进入攻击距离后按拍攻击]
|
||||
```
|
||||
|
||||
- **入场**:从画面边缘走到预定战斗区域(`entry_target_x`);途中玩家进入警戒范围则提前转入追击。
|
||||
- **巡逻**:以锚点 ±110px 低速(0.45×)往返,面朝行走方向;阶段一预置怪以出生点为锚点。
|
||||
- **警戒→追击**:玩家进入警戒范围(420px)后,**在下一个节拍点**切入追击(指南 §7.4);追击时全速逼近,停在 110px 处。
|
||||
- **脱战**:玩家甩开警戒范围 1.25 倍距离 → 回到当前位置小范围巡逻。
|
||||
- **攻击**:距离 ≤150px 时按拍出手;强势每 1 拍一次,弱势每 2 拍一次(§17.2)。
|
||||
|
||||
### 2.2 远程怪(role = ranged)
|
||||
|
||||
```text
|
||||
入场(Entry) → 站位固定(Hold) → [距离判断按拍射击];受压时 后撤(Retreat) → 新站位(Hold)
|
||||
```
|
||||
|
||||
- **不巡逻**。入场只做一段移动:走到预设站位后固定(指南 §7.4)。
|
||||
- **距离判断**:玩家在射程内(430px)按拍射击;离开警戒范围(540px)即停止行动。
|
||||
- **后撤(调整站位)**:满足任一条件且 3 秒冷却就绪时,向远离玩家方向快速(1.7×)退开 190px:
|
||||
- 玩家近身(≤150px)持续 1.1 秒;
|
||||
- 1.5 秒内连续受击 2 次且玩家仍在近旁。
|
||||
- 贴墙无退路时改为穿过玩家身位向另一侧跳开。
|
||||
|
||||
### 2.3 行为参数表
|
||||
|
||||
| 参数 | 近战 | 远程 |
|
||||
|---|---:|---:|
|
||||
| 警戒范围 | 360 | 540 |
|
||||
| 攻击距离 | 120 | 450(≤ 镜头半宽 460,不许屏幕外开火) |
|
||||
| 停步距离 | 120 | 340 |
|
||||
| 攻击判定范围 | 前方 ≈140 | — |
|
||||
| 巡逻半径 / 速度 | 110 / 0.45× | — |
|
||||
| 后撤距离 / 速度 / 冷却 | — | 220 / 1.7× / 3s |
|
||||
| 受击脱离 | — | 连续受击 4 次(2s 链窗)→ 闪烁无敌 0.4s + 跳跃脱离(3.2×) |
|
||||
|
||||
> 2026-07-05 new3 定案更新:近战小怪基础攻击 50(远程 25 的两倍);远程怪的
|
||||
> 近身后撤触发距离 220px;Boss 见 §4 及 decisions.md 当日条目(无韧性系统,
|
||||
> 普攻恒霸体、耗能技能才可压制)。
|
||||
|
||||
## 3. 强弱状态与打断规则(核心规则)
|
||||
|
||||
**只有处于强势状态的怪,才能打断玩家当前的状态。**
|
||||
|
||||
- 打断 = 玩家受击进入 Hitstun、当前动作被取消、被击退。三者同生同灭。
|
||||
- 弱势状态怪的攻击**只结算伤害**:不打 Hitstun、不取消玩家动作、不产生击退。玩家可以顶着弱势怪的攻击继续连段——这正是“在怪物弱势相位输出”的教学奖励。
|
||||
- 强弱在**动作开始时快照**(§17.4):出手瞬间是弱势,即使命中前相位切换,本次攻击依然没有打断权;反之亦然。
|
||||
- Boss 不分强弱(§18.1),**恒定视为强势**,攻击永远可以打断玩家。
|
||||
- 实现:`DamageEmitter.attacker_interrupts`(近战,configure_hit 时快照)与弹丸 `attacker_interrupts`(发射时快照,经 `projectile_requested` 上下文传递)→ `CombatResolver` 并入 `interrupts` 并把弱势击退清零 → `HealthComponent` / `CombatManager` 原有打断管线不变。
|
||||
|
||||
### 3.1 每跳伤害预算(玩家 HP 300)
|
||||
|
||||
弹丸伤害基数改为**发射者自己的基础攻击力**(玩家 100 / 小怪 25 / Boss 30),并结算发射者的强弱倍率——修复前弱势远程怪一发 45 反而比强势近战怪(18)疼。
|
||||
|
||||
| 敌人 × 相位 | 状态 | 单次伤害 | 攻击间隔 | 可打断玩家 |
|
||||
|---|---|---:|---|---|
|
||||
| 近战怪 × Past | 强势 | ≈18(25×0.5×1.4) | 每 1 拍 | ✔ |
|
||||
| 近战怪 × Future | 弱势 | ≈10(25×0.55×0.7) | 每 2 拍 | ✘ |
|
||||
| 远程怪 × Past | 弱势 | ≈8(25×0.45×0.7) | 每 2 拍 | ✘ |
|
||||
| 远程怪 × Future | 强势 | ≈23(25×0.65×1.4) | 每 1 拍 | ✔ |
|
||||
| Boss × Past | — | 24~30+(30×0.8+) | 决策每 2 拍 | ✔ |
|
||||
| Boss × Future | — | ≈18(30×0.6) | 决策每 1 拍 | ✔ |
|
||||
|
||||
承伤端沿用 §17.2/§17.3:强势承伤 25%,弱势承伤 250%(弱势怪 ≈1 个重技能+补刀击杀)。
|
||||
|
||||
## 4. Boss 行为逻辑
|
||||
|
||||
行为树(`boss_behavior_tree.gd`)按当前相位限定招式池并调整节奏(§18.1):
|
||||
|
||||
- **Past(慢而重)**:只用近战——三段地面连击轮转、远距冲刺逼近、中距突刺;决策每 2 拍一次。
|
||||
- **Future(快而轻)**:只用远程——两种弹幕轮转、贴脸时 2 向弹幕逼退;决策每 1 拍一次。
|
||||
- 特殊攻击(突刺 / 2 向弹幕)前 2 拍生成条件型 TimeAnchorEvent(§18.2):玩家失锚则相位翻转、Boss 状态改变。
|
||||
- 被连续命中 4 次触发后撤位移(读条逃脱),防止无限压制;HP / 承伤不随相位变化。
|
||||
- 玩家未进 Boss 房时 `combat_enabled = false`:不出手、不产生时间锚点。
|
||||
|
||||
## 5. 挑战性与可通关性
|
||||
|
||||
- **教学曲线**:阶段一单怪教基础节奏与相位强弱 → 阶段二单远程怪教射程与站位 → 阶段三混编教目标优先级(“打当前弱势的那只”)。
|
||||
- **压力上限受控**:增援分 4 波、左右交替、每 2 秒 1 只(约 8 秒刷完),不会瞬间包围;同一时刻最多 1~2 只强势怪能打断玩家,其余只能磨血。
|
||||
- **拖延惩罚**:拖战会让场上怪数上升(指南 §7.5),但总量封顶 6 只。
|
||||
- **保底通关**:全弱势输出窗口每次相位切换必然出现;弱势怪不打断意味着玩家连段不会被杂兵摸一下就断,Miss 惩罚主要来自强势怪与自己的节奏失误。
|
||||
- **数值下限**:最坏情况(Past 相位 2 近战强势贴脸)≈36 伤/拍,玩家仍有 ≥8 拍反应窗口;Future 相位 2 远程强势 ≈46 伤/拍但可走位躲弹、近身逼后撤。
|
||||
|
||||
---
|
||||
|
||||
## 7. 第一关小怪出怪流程
|
||||
|
||||
第一关共出现 6 只小怪,分为 3 个出怪阶段。
|
||||
|
||||
---
|
||||
|
||||
### 7.1 阶段一:初始近战怪
|
||||
|
||||
出怪内容:
|
||||
|
||||
- 近战怪 × 1
|
||||
|
||||
生成规则:
|
||||
|
||||
- 玩家进入第一关时,第一只近战怪已经存在于预定位置
|
||||
- 该怪物不需要刷新动画
|
||||
- 玩家靠近后,按照近战怪行为逻辑进入巡逻、警戒、追击或攻击状态
|
||||
|
||||
教学目标:
|
||||
|
||||
- 让玩家熟悉基础攻击节奏
|
||||
- 让玩家理解近战怪的巡逻、追击和攻击逻辑
|
||||
- 让玩家第一次观察相位切换对近战怪强弱状态的影响
|
||||
|
||||
教学重点:
|
||||
|
||||
- 过去相位下,近战怪是强势状态
|
||||
- 未来相位下,近战怪是弱势状态
|
||||
- 玩家应尝试在怪物弱势相位进行输出
|
||||
|
||||
---
|
||||
|
||||
### 7.2 阶段二:近距离刷新远程怪
|
||||
|
||||
触发条件:
|
||||
|
||||
- 玩家击败第一只近战怪
|
||||
|
||||
出怪内容:
|
||||
|
||||
- 远程怪 × 1
|
||||
|
||||
生成规则:
|
||||
|
||||
- 第一只远程怪在玩家附近不远处刷新
|
||||
- 刷新位置应在玩家可感知范围内
|
||||
- 不应直接贴脸刷新
|
||||
- 刷新后远程怪进入静止或距离判断状态
|
||||
|
||||
教学目标:
|
||||
|
||||
- 让玩家熟悉远程怪的攻击范围
|
||||
- 让玩家理解远程怪不巡逻,但会调整站位
|
||||
- 让玩家观察远程怪在不同相位下的强弱变化
|
||||
|
||||
教学重点:
|
||||
|
||||
- 过去相位下,远程怪是弱势状态
|
||||
- 未来相位下,远程怪是强势状态
|
||||
- 玩家需要利用相位切换寻找输出窗口
|
||||
|
||||
---
|
||||
|
||||
### 7.3 阶段三:左右两侧增援刷新
|
||||
|
||||
触发条件:
|
||||
|
||||
- 玩家击败第二只怪物,也就是第一只远程怪
|
||||
|
||||
出怪内容:
|
||||
|
||||
- 近战怪 × 2
|
||||
- 远程怪 × 2
|
||||
|
||||
生成规则:
|
||||
|
||||
- 四只怪物从玩家左右两侧刷新
|
||||
- 刷新点位于摄像机范围外,或玩家不容易直接看到的位置
|
||||
- 怪物刷新后,从画面边缘进入摄像机范围
|
||||
- 刷新不是一次性全部出现,而是按间隔依次出现
|
||||
- 推荐每 2 秒刷新 1 只
|
||||
- 约 8 到 10 秒内完成全部 4 只怪物的刷新
|
||||
|
||||
推荐刷新顺序:
|
||||
|
||||
| 顺序 | 时间 | 怪物 | 方向 |
|
||||
|---|---:|---|---|
|
||||
| 1 | 0 秒 | 近战怪 | 左侧 |
|
||||
| 2 | 2 秒 | 远程怪 | 右侧 |
|
||||
| 3 | 4 秒 | 近战怪 | 右侧 |
|
||||
| 4 | 6 秒 | 远程怪 | 左侧 |
|
||||
|
||||
> 具体方向可以根据关卡地形调整,但需要保证玩家不会被瞬间包围。
|
||||
|
||||
---
|
||||
|
||||
### 7.4 增援怪物入场逻辑
|
||||
|
||||
#### 近战怪入场
|
||||
|
||||
- 近战怪从左右边缘进入摄像机范围
|
||||
- 进入后先移动到预定战斗区域
|
||||
- 如果玩家进入警戒范围,立刻在下一个节拍点进入追击状态
|
||||
- 如果玩家未进入警戒范围,则进入小范围巡逻状态
|
||||
|
||||
#### 远程怪入场
|
||||
|
||||
远程怪不巡逻,但需要有入场移动。
|
||||
|
||||
- 远程怪从画面边缘进入
|
||||
- 移动到预设站位
|
||||
- 到达站位后固定下来
|
||||
- 固定后开始判断玩家是否进入攻击范围
|
||||
- 如果玩家离开警戒范围,远程怪停止行动
|
||||
- 如果玩家近身过久或连续受击,远程怪尝试后撤或跳开
|
||||
|
||||
---
|
||||
|
||||
### 7.5 阶段三教学目标
|
||||
|
||||
阶段三的目标是让玩家同时处理多种敌人压力。
|
||||
|
||||
教学目标:
|
||||
|
||||
- 让玩家同时面对近战压力和远程威胁
|
||||
- 让玩家理解不同怪物在同一相位下强弱不同
|
||||
- 训练玩家根据当前相位决定优先攻击目标
|
||||
- 让玩家体验拖延战斗会导致敌人逐步增多
|
||||
|
||||
教学重点:
|
||||
|
||||
- 过去相位:近战怪强,远程怪弱
|
||||
- 未来相位:近战怪弱,远程怪强
|
||||
- 玩家需要根据当前相位选择更容易击杀的目标
|
||||
- 优先击杀弱势相位敌人,可以降低战斗压力
|
||||
|
||||
---
|
||||
|
||||
## 8. 第一关通关条件
|
||||
|
||||
第一关普通战斗区域的通关条件为:
|
||||
|
||||
- 击败全部 6 只小怪
|
||||
|
||||
具体要求:
|
||||
|
||||
- 击败初始近战怪
|
||||
- 击败刷新出的第一只远程怪
|
||||
- 击败左右两侧增援刷新的 4 只怪物
|
||||
|
||||
全部小怪被击败后:
|
||||
|
||||
- 开放前往 Boss 房的路径
|
||||
- 玩家可以进入 Boss 房
|
||||
- 进入 Boss 房后触发 Boss 战
|
||||
Reference in New Issue
Block a user