Compare commits
11 Commits
53a0ee1c6e
...
new2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d7cd440844 | ||
|
|
a242ccc2ea | ||
|
|
74d03facd9 | ||
|
|
a122d0904c | ||
|
|
24aff3baa3 | ||
|
|
b31d870d90 | ||
|
|
11ba692f18 | ||
|
|
e662b63f80 | ||
|
|
2ab5100b41 | ||
|
|
f4fb561319 | ||
|
|
fef913bd75 |
@@ -1,8 +1,7 @@
|
|||||||
---
|
---
|
||||||
alwaysApply: true
|
alwaysApply: false
|
||||||
scene: git_message
|
scene: git_message
|
||||||
---
|
---
|
||||||
|
|
||||||
## Profile
|
## Profile
|
||||||
你是一个严谨的配置管理专家与代码审查员。你的核心任务是根据代码的变更内容(diff)或开发者的简短描述,生成符合业界标准(Conventional Commits / Angular 规范)的 Git 提交信息。你擅长剥离代码细节,总结出清晰的业务意图(What 和 Why)。
|
你是一个严谨的配置管理专家与代码审查员。你的核心任务是根据代码的变更内容(diff)或开发者的简短描述,生成符合业界标准(Conventional Commits / Angular 规范)的 Git 提交信息。你擅长剥离代码细节,总结出清晰的业务意图(What 和 Why)。
|
||||||
|
|
||||||
|
|||||||
@@ -402,6 +402,10 @@
|
|||||||
"__uuid__": "2b8a37ee-732c-4c5b-b6a4-136f3e581cde",
|
"__uuid__": "2b8a37ee-732c-4c5b-b6a4-136f3e581cde",
|
||||||
"__expectedType__": "cc.Material"
|
"__expectedType__": "cc.Material"
|
||||||
},
|
},
|
||||||
|
"outlineMatGlow": {
|
||||||
|
"__uuid__": "2fcd55a9-38ca-45aa-9164-68e48aaf51ce",
|
||||||
|
"__expectedType__": "cc.Material"
|
||||||
|
},
|
||||||
"_id": ""
|
"_id": ""
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -402,6 +402,10 @@
|
|||||||
"__uuid__": "2b8a37ee-732c-4c5b-b6a4-136f3e581cde",
|
"__uuid__": "2b8a37ee-732c-4c5b-b6a4-136f3e581cde",
|
||||||
"__expectedType__": "cc.Material"
|
"__expectedType__": "cc.Material"
|
||||||
},
|
},
|
||||||
|
"outlineMatGlow": {
|
||||||
|
"__uuid__": "2fcd55a9-38ca-45aa-9164-68e48aaf51ce",
|
||||||
|
"__expectedType__": "cc.Material"
|
||||||
|
},
|
||||||
"_id": ""
|
"_id": ""
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -402,6 +402,10 @@
|
|||||||
"__uuid__": "2b8a37ee-732c-4c5b-b6a4-136f3e581cde",
|
"__uuid__": "2b8a37ee-732c-4c5b-b6a4-136f3e581cde",
|
||||||
"__expectedType__": "cc.Material"
|
"__expectedType__": "cc.Material"
|
||||||
},
|
},
|
||||||
|
"outlineMatGlow": {
|
||||||
|
"__uuid__": "2fcd55a9-38ca-45aa-9164-68e48aaf51ce",
|
||||||
|
"__expectedType__": "cc.Material"
|
||||||
|
},
|
||||||
"_id": ""
|
"_id": ""
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -402,6 +402,10 @@
|
|||||||
"__uuid__": "2b8a37ee-732c-4c5b-b6a4-136f3e581cde",
|
"__uuid__": "2b8a37ee-732c-4c5b-b6a4-136f3e581cde",
|
||||||
"__expectedType__": "cc.Material"
|
"__expectedType__": "cc.Material"
|
||||||
},
|
},
|
||||||
|
"outlineMatGlow": {
|
||||||
|
"__uuid__": "2fcd55a9-38ca-45aa-9164-68e48aaf51ce",
|
||||||
|
"__expectedType__": "cc.Material"
|
||||||
|
},
|
||||||
"_id": ""
|
"_id": ""
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -402,6 +402,10 @@
|
|||||||
"__uuid__": "2b8a37ee-732c-4c5b-b6a4-136f3e581cde",
|
"__uuid__": "2b8a37ee-732c-4c5b-b6a4-136f3e581cde",
|
||||||
"__expectedType__": "cc.Material"
|
"__expectedType__": "cc.Material"
|
||||||
},
|
},
|
||||||
|
"outlineMatGlow": {
|
||||||
|
"__uuid__": "2fcd55a9-38ca-45aa-9164-68e48aaf51ce",
|
||||||
|
"__expectedType__": "cc.Material"
|
||||||
|
},
|
||||||
"_id": ""
|
"_id": ""
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -402,6 +402,10 @@
|
|||||||
"__uuid__": "2b8a37ee-732c-4c5b-b6a4-136f3e581cde",
|
"__uuid__": "2b8a37ee-732c-4c5b-b6a4-136f3e581cde",
|
||||||
"__expectedType__": "cc.Material"
|
"__expectedType__": "cc.Material"
|
||||||
},
|
},
|
||||||
|
"outlineMatGlow": {
|
||||||
|
"__uuid__": "2fcd55a9-38ca-45aa-9164-68e48aaf51ce",
|
||||||
|
"__expectedType__": "cc.Material"
|
||||||
|
},
|
||||||
"_id": ""
|
"_id": ""
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -56,11 +56,15 @@ export interface BossPhasePlan {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 阶段方案表(id 段 10000)
|
* 阶段方案表(id 段 10000,按 Boss 分组,详见 docs/superpowers/specs/2026-10-06-boss-phase-content-design.md)
|
||||||
* 示例方案 10001 挂在 6101(兽人首领-双刀dps型)的 phase_ids 上;
|
* 换招式技巧:removes 列满该 Boss 定位的整个大招池 id(delete 空键无副作用),
|
||||||
* 大招 s_uuid 引用 RogueConfig.BossUltPools 近战池(6100~6104)保证可达
|
* 无论 RogueConfig 随机注入了哪个大招一律清净,再 adds 新技能组
|
||||||
|
* - 近战定位池:[6100, 6101, 6102, 6103, 6104]
|
||||||
|
* - 远程定位池:[6150, 6151, 6200, 6201, 6202, 6203, 6204]
|
||||||
*/
|
*/
|
||||||
export const BossPhaseSet: Record<number, BossPhasePlan> = {
|
export const BossPhaseSet: Record<number, BossPhasePlan> = {
|
||||||
|
// ========== 6101 兽人首领-双刀dps(血量,近战池) ==========
|
||||||
|
/** 追加式:P2 换裂气斩、P3 加闪电斩 + 攻+20% */
|
||||||
10001: {
|
10001: {
|
||||||
name: "狂暴进化",
|
name: "狂暴进化",
|
||||||
switches: [
|
switches: [
|
||||||
@@ -68,6 +72,124 @@ export const BossPhaseSet: Record<number, BossPhasePlan> = {
|
|||||||
{ trigger: { hp_pct: 40, time: 60 }, adds: [{ s_uuid: 6103, overrides: { ap: 180 } }], attr_mod: { ap_pct: 20 } },
|
{ trigger: { hp_pct: 40, time: 60 }, adds: [{ s_uuid: 6103, overrides: { ap: 180 } }], attr_mod: { ap_pct: 20 } },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
/** 追加式:双刀越挥越快,技能只加不换 */
|
||||||
|
10002: {
|
||||||
|
name: "嗜血连斩",
|
||||||
|
switches: [
|
||||||
|
{ trigger: { hp_pct: 70 }, adds: [{ s_uuid: 6103, overrides: { ap: 160 } }], attr_mod: { ap_pct: 15 } },
|
||||||
|
{ trigger: { hp_pct: 40 }, adds: [{ s_uuid: 6104, overrides: { ap: 180 } }], attr_mod: { ap_pct: 25, defense_pct: -10 } },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
/** 换招式:每阶段换一把"刀",系数逐段上调 */
|
||||||
|
10003: {
|
||||||
|
name: "换刃",
|
||||||
|
switches: [
|
||||||
|
{ trigger: { hp_pct: 70 }, removes: [6100, 6101, 6102, 6103, 6104], adds: [{ s_uuid: 6101, overrides: { ap: 200 } }] },
|
||||||
|
{ trigger: { hp_pct: 40 }, removes: [6100, 6101, 6102, 6103, 6104], adds: [{ s_uuid: 6104, overrides: { ap: 220 } }], attr_mod: { ap_pct: 20, defense_pct: -15 } },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
// ========== 6102 兽人首领-坦克型(时间,近战池) ==========
|
||||||
|
/** 追加式:越久越硬,反击越痛 */
|
||||||
|
10010: {
|
||||||
|
name: "重压觉醒",
|
||||||
|
switches: [
|
||||||
|
{ trigger: { time: 30 }, adds: [{ s_uuid: 6100, overrides: { ap: 150 } }], attr_mod: { defense_pct: 20 } },
|
||||||
|
{ trigger: { time: 60 }, adds: [{ s_uuid: 6104, overrides: { ap: 180 } }], attr_mod: { ap_pct: 20 } },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
/** 换招式:外壳剥落,换进攻形态 */
|
||||||
|
10011: {
|
||||||
|
name: "崩岩",
|
||||||
|
switches: [
|
||||||
|
{ trigger: { time: 30 }, removes: [6100, 6101, 6102, 6103, 6104], adds: [{ s_uuid: 6102, overrides: { ap: 200 } }], attr_mod: { ap_pct: 15 } },
|
||||||
|
{ trigger: { time: 60 }, removes: [6100, 6101, 6102, 6103, 6104], adds: [{ s_uuid: 6104, overrides: { ap: 220 } }], attr_mod: { ap_pct: 25, defense_pct: -20 } },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
// ========== 6103 兽人首领-魔法师(时间,远程池) ==========
|
||||||
|
/** 追加式:元素逐一汇入,弹幕越来越密 */
|
||||||
|
10020: {
|
||||||
|
name: "元素汇聚",
|
||||||
|
switches: [
|
||||||
|
{ trigger: { time: 30 }, adds: [{ s_uuid: 6204, overrides: { ap: 150 } }] },
|
||||||
|
{ trigger: { time: 60 }, adds: [{ s_uuid: 6202, overrides: { ap: 150 } }], attr_mod: { ap_pct: 20 } },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
/** 换招式:每阶段念诵新禁咒,旧的被遗忘 */
|
||||||
|
10021: {
|
||||||
|
name: "禁咒",
|
||||||
|
switches: [
|
||||||
|
{ trigger: { time: 30 }, removes: [6150, 6151, 6200, 6201, 6202, 6203, 6204], adds: [{ s_uuid: 6201, overrides: { ap: 180 } }] },
|
||||||
|
{ trigger: { time: 60 }, removes: [6150, 6151, 6200, 6201, 6202, 6203, 6204], adds: [{ s_uuid: 6204, overrides: { ap: 200 } }], attr_mod: { ap_pct: 30, defense_pct: -15 } },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
// ========== 6104 兽人首领-射手(血量,远程池) ==========
|
||||||
|
/** 追加式:箭种逐段解锁 */
|
||||||
|
10030: {
|
||||||
|
name: "箭雨升级",
|
||||||
|
switches: [
|
||||||
|
{ trigger: { hp_pct: 70 }, adds: [{ s_uuid: 6150, overrides: { ap: 150 } }] },
|
||||||
|
{ trigger: { hp_pct: 40 }, adds: [{ s_uuid: 6151, overrides: { ap: 160 } }], attr_mod: { ap_pct: 20 } },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
/** 换招式:放弃弹幕,换单体重炮 */
|
||||||
|
10031: {
|
||||||
|
name: "狙击姿态",
|
||||||
|
switches: [
|
||||||
|
{ trigger: { hp_pct: 70 }, removes: [6150, 6151, 6200, 6201, 6202, 6203, 6204], adds: [{ s_uuid: 6203, overrides: { ap: 180 } }] },
|
||||||
|
{ trigger: { hp_pct: 40 }, removes: [6150, 6151, 6200, 6201, 6202, 6203, 6204], adds: [{ s_uuid: 6204, overrides: { ap: 200 } }], attr_mod: { ap_pct: 25, defense_pct: -15 } },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
// ========== 6105 亡灵首领-法师(时间,远程池) ==========
|
||||||
|
/** 追加式:毒雾与雷暴层层叠加 */
|
||||||
|
10040: {
|
||||||
|
name: "亡灵潮汐",
|
||||||
|
switches: [
|
||||||
|
{ trigger: { time: 30 }, adds: [{ s_uuid: 6202, overrides: { ap: 150 } }] },
|
||||||
|
{ trigger: { time: 60 }, adds: [{ s_uuid: 6204, overrides: { ap: 150 } }], attr_mod: { ap_pct: 25 } },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
/** 换招式:燃尽旧躯壳换新法术 */
|
||||||
|
10041: {
|
||||||
|
name: "灵魂爆发",
|
||||||
|
switches: [
|
||||||
|
{ trigger: { time: 30 }, removes: [6150, 6151, 6200, 6201, 6202, 6203, 6204], adds: [{ s_uuid: 6200, overrides: { ap: 180 } }], attr_mod: { defense_pct: 15 } },
|
||||||
|
{ trigger: { time: 60 }, removes: [6150, 6151, 6200, 6201, 6202, 6203, 6204], adds: [{ s_uuid: 6204, overrides: { ap: 220 } }], attr_mod: { ap_pct: 30 } },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
// ========== 6106 亡灵首领-骑马战士(时间,近战池) ==========
|
||||||
|
/** 追加式:战马冲锋节奏渐强 */
|
||||||
|
10050: {
|
||||||
|
name: "冲锋陷阵",
|
||||||
|
switches: [
|
||||||
|
{ trigger: { time: 30 }, adds: [{ s_uuid: 6101, overrides: { ap: 160 } }] },
|
||||||
|
{ trigger: { time: 60 }, adds: [{ s_uuid: 6104, overrides: { ap: 180 } }], attr_mod: { ap_pct: 20, defense_pct: -10 } },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
/** 换招式:弃守转攻,每段更凶更脆 */
|
||||||
|
10051: {
|
||||||
|
name: "背水一战",
|
||||||
|
switches: [
|
||||||
|
{ trigger: { time: 30 }, removes: [6100, 6101, 6102, 6103, 6104], adds: [{ s_uuid: 6103, overrides: { ap: 200 } }], attr_mod: { ap_pct: 15, defense_pct: -10 } },
|
||||||
|
{ trigger: { time: 60 }, removes: [6100, 6101, 6102, 6103, 6104], adds: [{ s_uuid: 6104, overrides: { ap: 220 } }], attr_mod: { ap_pct: 30, defense_pct: -20 } },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
// ========== 6006 骷髅领主(血量,近战池) ==========
|
||||||
|
/** 追加式:骨架越碎越硬 */
|
||||||
|
10060: {
|
||||||
|
name: "亡灵复苏",
|
||||||
|
switches: [
|
||||||
|
{ trigger: { hp_pct: 70 }, adds: [{ s_uuid: 6100, overrides: { ap: 150 } }], attr_mod: { defense_pct: 25 } },
|
||||||
|
{ trigger: { hp_pct: 40 }, adds: [{ s_uuid: 6102, overrides: { ap: 160 } }], attr_mod: { ap_pct: 15, defense_pct: 15 } },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
/** 换招式:拼装新武器,攻高防低 */
|
||||||
|
10061: {
|
||||||
|
name: "骷髅狂暴",
|
||||||
|
switches: [
|
||||||
|
{ trigger: { hp_pct: 70 }, removes: [6100, 6101, 6102, 6103, 6104], adds: [{ s_uuid: 6103, overrides: { ap: 180 } }] },
|
||||||
|
{ trigger: { hp_pct: 40 }, removes: [6100, 6101, 6102, 6103, 6104], adds: [{ s_uuid: 6104, overrides: { ap: 220 } }], attr_mod: { ap_pct: 25, defense_pct: -15 } },
|
||||||
|
],
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1080,7 +1080,7 @@ export const HeroInfo: Record<number, heroInfo> = {
|
|||||||
},
|
},
|
||||||
// 特殊位怪物
|
// 特殊位怪物
|
||||||
6006: {
|
6006: {
|
||||||
uuid: 6006, name: "骷髅领主", path: "m6", fac: FacSet.MON, lv: 1, rarity: 3, type: HType.Melee, grow_type: HGrowType.Tank, role: HRole.Tank, monType: MonType.MeleeBoss, hp: HERO_ROLE_BASE[HRole.Tank].hp, ap: HERO_ROLE_BASE[HRole.Tank].ap, def: HERO_ROLE_BASE[HRole.Tank].def, speed: 60,
|
uuid: 6006, name: "骷髅领主", path: "m6", fac: FacSet.MON, lv: 1, rarity: 3, type: HType.Melee, grow_type: HGrowType.Tank, role: HRole.Tank, monType: MonType.MeleeBoss, hp: HERO_ROLE_BASE[HRole.Tank].hp, ap: HERO_ROLE_BASE[HRole.Tank].ap, def: HERO_ROLE_BASE[HRole.Tank].def, speed: 60, phase_ids: [10060, 10061],
|
||||||
skills: { 6004: { uuid: 6004, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.VerySlow].cd, ccd: 0, overrides: { ap: 100 } } }, info: "前排MiniBoss级坦克"
|
skills: { 6004: { uuid: 6004, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.VerySlow].cd, ccd: 0, overrides: { ap: 100 } } }, info: "前排MiniBoss级坦克"
|
||||||
},
|
},
|
||||||
6007: {
|
6007: {
|
||||||
@@ -1094,27 +1094,27 @@ export const HeroInfo: Record<number, heroInfo> = {
|
|||||||
|
|
||||||
// BOSS怪物 — 与英雄同一套设定(role 模板 + 品质系数),高品质承伤/输出位
|
// BOSS怪物 — 与英雄同一套设定(role 模板 + 品质系数),高品质承伤/输出位
|
||||||
6101: {
|
6101: {
|
||||||
uuid: 6101, name: "兽人首领-双刀dps型", path: "mb1", fac: FacSet.MON, lv: 6, rarity: 4, type: HType.Melee, grow_type: HGrowType.Warrior, role: HRole.Warrior, monType: MonType.MeleeBoss, hp: HERO_ROLE_BASE[HRole.Warrior].hp, ap: HERO_ROLE_BASE[HRole.Warrior].ap, def: HERO_ROLE_BASE[HRole.Warrior].def, speed: 120, phase_ids: [10001],
|
uuid: 6101, name: "兽人首领-双刀dps型", path: "mb1", fac: FacSet.MON, lv: 6, rarity: 4, type: HType.Melee, grow_type: HGrowType.Warrior, role: HRole.Warrior, monType: MonType.MeleeBoss, hp: HERO_ROLE_BASE[HRole.Warrior].hp, ap: HERO_ROLE_BASE[HRole.Warrior].ap, def: HERO_ROLE_BASE[HRole.Warrior].def, speed: 120, phase_ids: [10001, 10002, 10003],
|
||||||
skills: { 6004: { uuid: 6004, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0, overrides: { ap: 100 } } }, info: "前排Boss, 攻速型"
|
skills: { 6004: { uuid: 6004, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0, overrides: { ap: 100 } } }, info: "前排Boss, 攻速型"
|
||||||
},
|
},
|
||||||
6102: {
|
6102: {
|
||||||
uuid: 6102, name: "兽人首领-坦克型", path: "mb2", fac: FacSet.MON, lv: 6, rarity: 5, type: HType.Melee, grow_type: HGrowType.Tank, role: HRole.Tank, monType: MonType.MeleeBoss, hp: HERO_ROLE_BASE[HRole.Tank].hp, ap: HERO_ROLE_BASE[HRole.Tank].ap, def: HERO_ROLE_BASE[HRole.Tank].def, speed: 60,
|
uuid: 6102, name: "兽人首领-坦克型", path: "mb2", fac: FacSet.MON, lv: 6, rarity: 5, type: HType.Melee, grow_type: HGrowType.Tank, role: HRole.Tank, monType: MonType.MeleeBoss, hp: HERO_ROLE_BASE[HRole.Tank].hp, ap: HERO_ROLE_BASE[HRole.Tank].ap, def: HERO_ROLE_BASE[HRole.Tank].def, speed: 60, phase_ids: [10010, 10011],
|
||||||
skills: { 6004: { uuid: 6004, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.VerySlow].cd, ccd: 0, overrides: { ap: 100 } } }, info: "前排Boss, 超高HP"
|
skills: { 6004: { uuid: 6004, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.VerySlow].cd, ccd: 0, overrides: { ap: 100 } } }, info: "前排Boss, 超高HP"
|
||||||
},
|
},
|
||||||
6103: {
|
6103: {
|
||||||
uuid: 6103, name: "兽人首领-魔法师", path: "mb3", fac: FacSet.MON, lv: 6, rarity: 4, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Mage, monType: MonType.LongBoss, hp: HERO_ROLE_BASE[HRole.Mage].hp, ap: HERO_ROLE_BASE[HRole.Mage].ap, def: HERO_ROLE_BASE[HRole.Mage].def, speed: 110,
|
uuid: 6103, name: "兽人首领-魔法师", path: "mb3", fac: FacSet.MON, lv: 6, rarity: 4, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Mage, monType: MonType.LongBoss, hp: HERO_ROLE_BASE[HRole.Mage].hp, ap: HERO_ROLE_BASE[HRole.Mage].ap, def: HERO_ROLE_BASE[HRole.Mage].def, speed: 110, phase_ids: [10020, 10021],
|
||||||
skills: { 6009: { uuid: 6009, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0, overrides: { ap: 100, hit_count: 2 } } }, info: "后排法系Boss"
|
skills: { 6009: { uuid: 6009, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0, overrides: { ap: 100, hit_count: 2 } } }, info: "后排法系Boss"
|
||||||
},
|
},
|
||||||
6104: {
|
6104: {
|
||||||
uuid: 6104, name: "兽人首领-射手", path: "mb4", fac: FacSet.MON, lv: 6, rarity: 4, type: HType.Long, grow_type: HGrowType.Archer, role: HRole.Archer, monType: MonType.LongBoss, hp: HERO_ROLE_BASE[HRole.Archer].hp, ap: HERO_ROLE_BASE[HRole.Archer].ap, def: HERO_ROLE_BASE[HRole.Archer].def, speed: 70,
|
uuid: 6104, name: "兽人首领-射手", path: "mb4", fac: FacSet.MON, lv: 6, rarity: 4, type: HType.Long, grow_type: HGrowType.Archer, role: HRole.Archer, monType: MonType.LongBoss, hp: HERO_ROLE_BASE[HRole.Archer].hp, ap: HERO_ROLE_BASE[HRole.Archer].ap, def: HERO_ROLE_BASE[HRole.Archer].def, speed: 70, phase_ids: [10030, 10031],
|
||||||
skills: { 6004: { uuid: 6004, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0, overrides: { ap: 100 } } }, info: "后排位Boss, 均衡型"
|
skills: { 6004: { uuid: 6004, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0, overrides: { ap: 100 } } }, info: "后排位Boss, 均衡型"
|
||||||
},
|
},
|
||||||
6105: {
|
6105: {
|
||||||
uuid: 6105, name: "亡灵首领-法师", path: "mb5", fac: FacSet.MON, lv: 6, rarity: 5, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Mage, monType: MonType.LongBoss, hp: HERO_ROLE_BASE[HRole.Mage].hp, ap: HERO_ROLE_BASE[HRole.Mage].ap, def: HERO_ROLE_BASE[HRole.Mage].def, speed: 110,
|
uuid: 6105, name: "亡灵首领-法师", path: "mb5", fac: FacSet.MON, lv: 6, rarity: 5, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Mage, monType: MonType.LongBoss, hp: HERO_ROLE_BASE[HRole.Mage].hp, ap: HERO_ROLE_BASE[HRole.Mage].ap, def: HERO_ROLE_BASE[HRole.Mage].def, speed: 110, phase_ids: [10040, 10041],
|
||||||
skills: { 6011: { uuid: 6011, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0, overrides: { ap: 100, hit_count: 2, timed_debuff_id: 7002 } } }, info: "后排高AP Boss"
|
skills: { 6011: { uuid: 6011, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0, overrides: { ap: 100, hit_count: 2, timed_debuff_id: 7002 } } }, info: "后排高AP Boss"
|
||||||
},
|
},
|
||||||
6106: {
|
6106: {
|
||||||
uuid: 6106, name: "亡灵首领-骑马战士", path: "mb6", fac: FacSet.MON, lv: 6, rarity: 5, type: HType.Melee, grow_type: HGrowType.Tank, role: HRole.Tank, monType: MonType.MeleeBoss, hp: HERO_ROLE_BASE[HRole.Tank].hp, ap: HERO_ROLE_BASE[HRole.Tank].ap, def: HERO_ROLE_BASE[HRole.Tank].def, speed: 130,
|
uuid: 6106, name: "亡灵首领-骑马战士", path: "mb6", fac: FacSet.MON, lv: 6, rarity: 5, type: HType.Melee, grow_type: HGrowType.Tank, role: HRole.Tank, monType: MonType.MeleeBoss, hp: HERO_ROLE_BASE[HRole.Tank].hp, ap: HERO_ROLE_BASE[HRole.Tank].ap, def: HERO_ROLE_BASE[HRole.Tank].def, speed: 130, phase_ids: [10050, 10051],
|
||||||
skills: { 6004: { uuid: 6004, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.VerySlow].cd, ccd: 0, overrides: { ap: 100 } } }, info: "前排终极Boss, 最高HP+高速"
|
skills: { 6004: { uuid: 6004, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.VerySlow].cd, ccd: 0, overrides: { ap: 100 } } }, info: "前排终极Boss, 最高HP+高速"
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import { SkillSet } from "../common/config/SkillSet";
|
|||||||
import { mLogger } from "../common/Logger";
|
import { mLogger } from "../common/Logger";
|
||||||
import { HeroAttrsComp } from "./HeroAttrsComp";
|
import { HeroAttrsComp } from "./HeroAttrsComp";
|
||||||
import { BossPhaseComp } from "./BossPhaseComp";
|
import { BossPhaseComp } from "./BossPhaseComp";
|
||||||
|
import { HeroViewComp } from "./HeroViewComp";
|
||||||
|
|
||||||
/** 阶段模块调试日志开关 */
|
/** 阶段模块调试日志开关 */
|
||||||
const DEBUG = true;
|
const DEBUG = true;
|
||||||
@@ -119,6 +120,13 @@ export class BossPhaseSystem extends ecs.ComblockSystem implements ecs.ISystemUp
|
|||||||
fromPhase: from,
|
fromPhase: from,
|
||||||
toPhase: phase.index,
|
toPhase: phase.index,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 直接驱动描边:Boss 是 MON 阵营,不走英雄 HeroLvUp 语义;
|
||||||
|
// 且对象池节点上挂全局事件监听易漏注销,直接调视图组件最稳
|
||||||
|
const view = e.get(HeroViewComp);
|
||||||
|
if (view && view.node && view.node.isValid) {
|
||||||
|
view.applyBossPhaseOutline(phase.index);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** TODO: 阶段退场表现(震屏/变暗等),后续迭代实现 */
|
/** TODO: 阶段退场表现(震屏/变暗等),后续迭代实现 */
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ import { Tooltip } from "../skill/Tooltip";
|
|||||||
import { timedCom } from "../skill/timedCom";
|
import { timedCom } from "../skill/timedCom";
|
||||||
import { oneCom } from "../skill/oncend";
|
import { oneCom } from "../skill/oncend";
|
||||||
import { FlashSprite } from "./hit-flash-white/scripts/FlashSprite";
|
import { FlashSprite } from "./hit-flash-white/scripts/FlashSprite";
|
||||||
|
import { BossPhaseComp } from "./BossPhaseComp";
|
||||||
|
|
||||||
|
|
||||||
const { ccclass, property } = _decorator;
|
const { ccclass, property } = _decorator;
|
||||||
@@ -89,7 +90,6 @@ export class HeroViewComp extends CCComp {
|
|||||||
this.deadCD = 0;
|
this.deadCD = 0;
|
||||||
this.lastBarUpdateTime = 0;
|
this.lastBarUpdateTime = 0;
|
||||||
this.status_change("idle");
|
this.status_change("idle");
|
||||||
|
|
||||||
// 初始化头顶状态栏
|
// 初始化头顶状态栏
|
||||||
const topNode = this.node.getChildByName("top");
|
const topNode = this.node.getChildByName("top");
|
||||||
this.topBar = topNode.getComponent(HeroTopBarComp) || topNode.addComponent(HeroTopBarComp);
|
this.topBar = topNode.getComponent(HeroTopBarComp) || topNode.addComponent(HeroTopBarComp);
|
||||||
@@ -98,15 +98,12 @@ export class HeroViewComp extends CCComp {
|
|||||||
/** 方向 */
|
/** 方向 */
|
||||||
this.node.setScale(this.scale * Math.abs(this.node.scale.x), 1 * this.node.scale.y); // 确保 scale.x 为正后再乘方向
|
this.node.setScale(this.scale * Math.abs(this.node.scale.x), 1 * this.node.scale.y); // 确保 scale.x 为正后再乘方向
|
||||||
|
|
||||||
// 🔥 重置描边
|
// 🔥 重置描边:Boss 阶段描边优先(Boss 存活期不被等级描边覆盖),其余按等级
|
||||||
if (this.model) {
|
const phaseComp = this.ent ? this.ent.get(BossPhaseComp) : null;
|
||||||
let flashSprite = this.node.getComponent(FlashSprite);
|
if (phaseComp && phaseComp.index > 0) {
|
||||||
if (!flashSprite) {
|
this.applyBossPhaseOutline(phaseComp.index);
|
||||||
flashSprite = this.node.getComponentInChildren(FlashSprite);
|
} else {
|
||||||
}
|
this.applyOutlineByLevel();
|
||||||
if (flashSprite) {
|
|
||||||
flashSprite.setOutlineByLevel(this.model.lv);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -170,18 +167,42 @@ export class HeroViewComp extends CCComp {
|
|||||||
public lv_up() {
|
public lv_up() {
|
||||||
this.spawnTimedFx("game/skill/buff/buff_lvup", this.node, 1.0);
|
this.spawnTimedFx("game/skill/buff/buff_lvup", this.node, 1.0);
|
||||||
|
|
||||||
// 升级时同步更新描边
|
// 升级时同步更新描边:Boss 阶段描边优先(与 init 口径一致)
|
||||||
if (this.model) {
|
const phaseComp = this.ent ? this.ent.get(BossPhaseComp) : null;
|
||||||
let flashSprite = this.node.getComponent(FlashSprite);
|
if (phaseComp && phaseComp.index > 0) {
|
||||||
if (!flashSprite) {
|
this.applyBossPhaseOutline(phaseComp.index);
|
||||||
flashSprite = this.node.getComponentInChildren(FlashSprite);
|
} else {
|
||||||
}
|
this.applyOutlineByLevel();
|
||||||
if (flashSprite) {
|
|
||||||
flashSprite.setOutlineByLevel(this.model.lv);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** 按英雄等级应用描边(升级/初始化共用入口) */
|
||||||
|
private applyOutlineByLevel() {
|
||||||
|
if (!this.model) return;
|
||||||
|
const flashSprite = this.getFlashSprite();
|
||||||
|
if (flashSprite) {
|
||||||
|
flashSprite.setOutlineByLevel(this.model.lv);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按 Boss 阶段应用描边(P2 绿 / P3 红)
|
||||||
|
* Why: 由 BossPhaseSystem 直接调用,不走英雄 HeroLvUp 事件语义
|
||||||
|
* (Boss 是 MON 阵营,且对象池节点挂全局监听易漏注销)
|
||||||
|
* @param phase 阶段索引:1=P2 / 2=P3
|
||||||
|
*/
|
||||||
|
public applyBossPhaseOutline(phase: number) {
|
||||||
|
const flashSprite = this.getFlashSprite();
|
||||||
|
if (flashSprite) {
|
||||||
|
flashSprite.setOutlineByBossPhase(phase);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 查找 FlashSprite 组件(优先自身,回退子节点),描边三处调用点统一入口 */
|
||||||
|
private getFlashSprite(): FlashSprite | null {
|
||||||
|
return this.node.getComponent(FlashSprite) ?? this.node.getComponentInChildren(FlashSprite);
|
||||||
|
}
|
||||||
|
|
||||||
/** 攻击力提升特效 */
|
/** 攻击力提升特效 */
|
||||||
private ap_up() {
|
private ap_up() {
|
||||||
this.spawnTimedFx("game/skill/buff/buff_apup", this.node, 1.0);
|
this.spawnTimedFx("game/skill/buff/buff_apup", this.node, 1.0);
|
||||||
@@ -566,6 +587,13 @@ export class HeroViewComp extends CCComp {
|
|||||||
this.deadCD = 0
|
this.deadCD = 0
|
||||||
this.lastBarUpdateTime = 0
|
this.lastBarUpdateTime = 0
|
||||||
|
|
||||||
|
// 清掉描边材质:防 Boss 阶段描边(绿/红)随对象池节点复用串到小怪/英雄身上
|
||||||
|
const flashSprite = this.getFlashSprite();
|
||||||
|
if (flashSprite && flashSprite.defaultMaterial) {
|
||||||
|
flashSprite.orginalFlashMaterial = flashSprite.defaultMaterial;
|
||||||
|
flashSprite.sprite?.setSharedMaterial(flashSprite.defaultMaterial, 0);
|
||||||
|
}
|
||||||
|
|
||||||
// 清理伤害队列
|
// 清理伤害队列
|
||||||
this.damageQueue.length = 0;
|
this.damageQueue.length = 0;
|
||||||
this.isProcessingDamage = false;
|
this.isProcessingDamage = false;
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ export class FlashSprite extends Component {
|
|||||||
@property(Material)
|
@property(Material)
|
||||||
hitFlashMaterial: Material | null = null;
|
hitFlashMaterial: Material | null = null;
|
||||||
|
|
||||||
@property({ type: Material, tooltip: '绿色描边材质(2级)' })
|
@property({ type: Material, tooltip: '绿色描边材质(2级 / Boss阶段2)' })
|
||||||
outlineMatGreen: Material | null = null;
|
outlineMatGreen: Material | null = null;
|
||||||
|
|
||||||
@property({ type: Material, tooltip: '蓝色描边材质(3级)' })
|
@property({ type: Material, tooltip: '蓝色描边材质(3级)' })
|
||||||
@@ -19,6 +19,9 @@ export class FlashSprite extends Component {
|
|||||||
@property({ type: Material, tooltip: '黄色描边材质(5级)' })
|
@property({ type: Material, tooltip: '黄色描边材质(5级)' })
|
||||||
outlineMatYellow: Material | null = null;
|
outlineMatYellow: Material | null = null;
|
||||||
|
|
||||||
|
@property({ type: Material, tooltip: '红色描边材质(Boss阶段3,即 outline-glow)' })
|
||||||
|
outlineMatGlow: Material | null = null;
|
||||||
|
|
||||||
orginalFlashMaterial: Material | null = null;
|
orginalFlashMaterial: Material | null = null;
|
||||||
defaultMaterial: Material | null = null; // 缓存最原始的无描边材质
|
defaultMaterial: Material | null = null; // 缓存最原始的无描边材质
|
||||||
sprite: Sprite | null = null;
|
sprite: Sprite | null = null;
|
||||||
@@ -64,6 +67,34 @@ export class FlashSprite extends Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按 Boss 阶段设置描边材质(优先级高于等级描边)
|
||||||
|
* Why: Boss 阶段是战斗强反馈(P2 绿=警告 / P3 红=危险),与英雄等级成长是两套视觉语言,
|
||||||
|
* 用独立通道避免污染 setOutlineByLevel 的等级语义;材质复用现有 outline-green / outline-glow
|
||||||
|
* @param phase 阶段索引:1=P2 绿 / 2=P3 红 / 0=P1 恢复默认
|
||||||
|
*/
|
||||||
|
public setOutlineByBossPhase(phase: number) {
|
||||||
|
if (!this.sprite) {
|
||||||
|
this.sprite = this.node.getComponent(Sprite);
|
||||||
|
}
|
||||||
|
if (!this.sprite) return;
|
||||||
|
|
||||||
|
let targetMat: Material | null = null;
|
||||||
|
if (phase === 1) {
|
||||||
|
targetMat = this.outlineMatGreen;
|
||||||
|
} else if (phase >= 2) {
|
||||||
|
targetMat = this.outlineMatGlow ?? this.outlineMatYellow;
|
||||||
|
} else {
|
||||||
|
targetMat = this.defaultMaterial;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (targetMat) {
|
||||||
|
// 更新基础材质,确保闪白结束后恢复到这个阶段描边材质
|
||||||
|
this.orginalFlashMaterial = targetMat;
|
||||||
|
this.sprite.setSharedMaterial(targetMat, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public clickFlash() {
|
public clickFlash() {
|
||||||
if (!this.sprite || !this.hitFlashMaterial) return;
|
if (!this.sprite || !this.hitFlashMaterial) return;
|
||||||
|
|
||||||
|
|||||||
@@ -582,12 +582,15 @@ export class MissionComp extends CCComp {
|
|||||||
private autoNextPhase() {
|
private autoNextPhase() {
|
||||||
switch (this.currentPhase) {
|
switch (this.currentPhase) {
|
||||||
case MissionPhase.PrepareStart:
|
case MissionPhase.PrepareStart:
|
||||||
// 节间过场倒计时结束:推进到下一节、停背景滚动、派发 SectionStart 刷怪,进入 PrepareEnd 自动开战
|
// 节间过场倒计时结束:停背景滚动、英雄归位转待机,进入 PrepareEnd 缓冲
|
||||||
this.stopWaveCountdown();
|
this.stopWaveCountdown();
|
||||||
this.advanceToNextSection();
|
|
||||||
this.changePhase(MissionPhase.PrepareEnd);
|
this.changePhase(MissionPhase.PrepareEnd);
|
||||||
break;
|
break;
|
||||||
case MissionPhase.PrepareEnd:
|
case MissionPhase.PrepareEnd:
|
||||||
|
// 先生成下一回合怪物再进 BattleStart:此时英雄已待机约 1s,
|
||||||
|
// 怪物随"第 X 回合开始"横幅从右侧跑入,避免与英雄过场行军同帧移动;
|
||||||
|
// SectionStart 同步派发 NewWave,保证 changePhase(BattleStart) 的 isBossWave 就绪
|
||||||
|
this.advanceToNextSection();
|
||||||
this.changePhase(MissionPhase.BattleStart);
|
this.changePhase(MissionPhase.BattleStart);
|
||||||
break;
|
break;
|
||||||
case MissionPhase.BattleStart:
|
case MissionPhase.BattleStart:
|
||||||
@@ -854,7 +857,10 @@ export class MissionComp extends CCComp {
|
|||||||
* 2. 不清理英雄/技能实体、不重置局内数据、不重新三选一——英雄保留并自动归位(编队排队)。
|
* 2. 不清理英雄/技能实体、不重置局内数据、不重新三选一——英雄保留并自动归位(编队排队)。
|
||||||
* 3. 进度实时镜像到 HUD,但不写持久存档(存档只在整关通关时推进到下一关)。
|
* 3. 进度实时镜像到 HUD,但不写持久存档(存档只在整关通关时推进到下一关)。
|
||||||
*
|
*
|
||||||
* 调用时机:PrepareStart 过场倒计时结束(autoNextPhase)。
|
* 调用时机:PrepareEnd 结束、进入 BattleStart 前(autoNextPhase)。
|
||||||
|
* Why: 过场倒计时(PrepareStart)结束时英雄刚归位转待机,若同帧刷怪会出现
|
||||||
|
* 怪物与英雄一起移动的表现;推迟到 PrepareEnd 结束刷怪,英雄已待机约 1s,
|
||||||
|
* 怪物从右侧跑入与"第 X 回合开始"横幅同步登场。
|
||||||
* 保证:仅 1~4 回合清场后触发,末回合(BOSS_SECTION)已走 open_Victory 结算,不会推进。
|
* 保证:仅 1~4 回合清场后触发,末回合(BOSS_SECTION)已走 open_Victory 结算,不会推进。
|
||||||
*/
|
*/
|
||||||
private advanceToNextSection() {
|
private advanceToNextSection() {
|
||||||
|
|||||||
306
docs/superpowers/specs/2026-10-06-boss-phase-content-design.md
Normal file
306
docs/superpowers/specs/2026-10-06-boss-phase-content-design.md
Normal file
@@ -0,0 +1,306 @@
|
|||||||
|
# Boss 阶段战斗内容设计 v1
|
||||||
|
|
||||||
|
> **定位**:本文是 Boss 阶段系统的**内容设计文档**(配什么方案、什么数值),
|
||||||
|
> 技术机制见规格文档 `docs/superpowers/specs/2026-10-06-boss-phase-system-design.md`。
|
||||||
|
> **所有设计均基于现有实现能力落地,零机制新增**;外部设计稿(像素大勇者-boss-阶段设计稿.md)
|
||||||
|
> 仅作理念借鉴,凡与现有实现冲突处一律改写(对照见 §7)。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## §1 设计目标
|
||||||
|
|
||||||
|
- 6 个现有 Boss 各自拥有 **2~3 个阶段方案**,生成时随机抽一(肉鸽重玩性)
|
||||||
|
- 每个方案固定 **3 阶段**:P1(基线)→ P2 → P3,两个切换点
|
||||||
|
- 两种战斗气质:**追加式**(技能池越打越大,数值膨胀)与**换招式**(整组换招,机制重组),
|
||||||
|
玩家主观强度对齐
|
||||||
|
- P1→P2 触发条件全 Boss 统一,降低玩家学习成本;P3 是高潮,阈值按 Boss 气质差异化
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## §2 现有机制能力边界(设计必须遵守)
|
||||||
|
|
||||||
|
| 能力 | 现状 | 设计含义 |
|
||||||
|
|------|------|----------|
|
||||||
|
| 触发条件 | `hp_pct`(血量≤%)/ `time`(Boss 在场秒数),同点 OR 关系 | 混合触发可直接配 |
|
||||||
|
| 技能变更 | `adds` 注入 + `removes` 按 id 删除,`delete` 不存在的键无副作用 | **换招式 = removes 列满该定位整个大招池**(见 §3.2) |
|
||||||
|
| 属性修正 | 仅 `ap_pct` / `defense_pct`,链式乘算 | **不配 hp 修正**(实现已排除,避免血量同步歧义) |
|
||||||
|
| 技能数值 | `overrides.ap` 系数,口径同 BossUltPools(140~220) | 不引用英雄技能 lv 体系 |
|
||||||
|
| 新技能 CD | `cd` 缺省 8s,注入后 `ccd: 0` 需等满一个 CD 才首放 | P3 注入技能有 8s 真空期,阈值设计须留窗口 |
|
||||||
|
| 战斗时长 | `BATTLE_TIMEOUT = 90s`,Boss 延迟 1s 刷出 | **时间触发方案的 P3 阈值 ≤ 60s**(留 ≥28s 收尾窗口) |
|
||||||
|
| 方案校验 | 恰 2 切换点;hp_pct ∈(0,100) 严格递减且须构成前缀;time 严格递增 | 配错启动期 `validateBossPhaseSet` 报错 |
|
||||||
|
| 普攻保护 | removes/adds 禁止操作普攻首键 | 只操作大招键 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## §3 通用设计规则
|
||||||
|
|
||||||
|
### 3.1 触发维度按 Boss 定位分配(借鉴外部稿注 B,映射到现有 Boss)
|
||||||
|
|
||||||
|
| Boss | 定位 | 触发维度 | 理由 |
|
||||||
|
|------|------|----------|------|
|
||||||
|
| 6101 兽人首领-双刀dps | 近战 Warrior | **血量**(P2=70% / P3=40%) | 速战速决型,血量阈值直觉明显 |
|
||||||
|
| 6102 兽人首领-坦克型 | 近战 Tank | **时间**(P2=30s / P3=60s) | 消耗战,时间触发逼玩家在窗口期内输出 |
|
||||||
|
| 6103 兽人首领-魔法师 | 远程 Mage | **时间**(P2=30s / P3=60s) | 法系读招,时间阈值给玩家"看清招式再反应"的窗口 |
|
||||||
|
| 6104 兽人首领-射手 | 远程 Archer | **血量**(P2=70% / P3=40%) | 高频弹幕,时间触发会过于喧闹 |
|
||||||
|
| 6105 亡灵首领-法师 | 远程 Mage | **时间**(P2=30s / P3=60s) | 同 6103 |
|
||||||
|
| 6106 亡灵首领-骑马战士 | 近战 Tank | **时间**(P2=30s / P3=60s) | 同 6102 |
|
||||||
|
| 6006 骷髅领主 | 近战 Tank | **血量**(P2=70% / P3=40%) | 低攻速靶子型,血量节奏更稳 |
|
||||||
|
|
||||||
|
> 时间阈值为 **Boss 在场时长**(elapsed 从出生起算,暂停不计)。30s/60s 相对 90s 战斗超时
|
||||||
|
> 留出 P3 ≥28s 的收尾窗口。
|
||||||
|
|
||||||
|
### 3.2 换招式(clear_replace)的落地技巧
|
||||||
|
|
||||||
|
实现没有"清空"开关,但 `removes` 对不存在的 id 无副作用。因此:
|
||||||
|
|
||||||
|
> **换招式 = removes 列满该 Boss 定位对应的整个大招池 id**(近战池 6100~6104 / 远程池 6200~6204 + 6150/6151),
|
||||||
|
> 无论 RogueConfig 随机注入了哪个大招、之前阶段 adds 了什么,一律清净,再 adds 新技能组。
|
||||||
|
|
||||||
|
- 近战定位池:`[6100, 6101, 6102, 6103, 6104]`
|
||||||
|
- 远程定位池:`[6150, 6151, 6200, 6201, 6202, 6203, 6204]`
|
||||||
|
|
||||||
|
### 3.3 双模式强度对齐(借鉴外部稿 Q3,改写为现有口径)
|
||||||
|
|
||||||
|
| 模式 | 新鲜感来源 | 数值手段 | 输出口径 |
|
||||||
|
|------|-----------|----------|----------|
|
||||||
|
| 追加式(keep_add) | 技能池变大、轮转更密 | `attr_mod.ap_pct` 每段 +15~25% | 技能 overrides 维持标准档(ap 150~180) |
|
||||||
|
| 换招式(clear_replace) | 招式重组、机制差异 | 新技能 `overrides.ap` 逐段上调(180→200→220) | attr_mod 少量或不配 |
|
||||||
|
|
||||||
|
两模式的 P3 理论 DPS 控制在 **±10% 以内**;换招式清掉了随机注入的大招(可能很强),
|
||||||
|
故新技能给更高系数补偿。
|
||||||
|
|
||||||
|
### 3.4 方案 id 规划(10000 段,按 Boss 分组)
|
||||||
|
|
||||||
|
| id 段 | Boss | 触发 |
|
||||||
|
|-------|------|------|
|
||||||
|
| 10001~10009 | 6101 双刀dps | 血量 |
|
||||||
|
| 10010~10019 | 6102 坦克型 | 时间 |
|
||||||
|
| 10020~10029 | 6103 魔法师 | 时间 |
|
||||||
|
| 10030~10039 | 6104 射手 | 血量 |
|
||||||
|
| 10040~10049 | 6105 亡灵法师 | 时间 |
|
||||||
|
| 10050~10059 | 6106 骑马战士 | 时间 |
|
||||||
|
| 10060~10069 | 6006 骷髅领主 | 血量 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## §4 各 Boss 阶段方案(可直接抄入 BossPhaseSet.ts)
|
||||||
|
|
||||||
|
> 以下 `removes` 中的整池列表即 §3.2 的换招技巧;`cd` 缺省 8s 不另写。
|
||||||
|
|
||||||
|
### 4.1 6101 兽人首领-双刀dps(血量,近战池)
|
||||||
|
|
||||||
|
```ts
|
||||||
|
// 10001 狂暴进化(已有):P2 换裂气斩、P3 加闪电斩 + 攻+20%
|
||||||
|
10001: {
|
||||||
|
name: "狂暴进化",
|
||||||
|
switches: [
|
||||||
|
{ trigger: { hp_pct: 70 }, adds: [{ s_uuid: 6102, overrides: { ap: 180 } }], removes: [6100] },
|
||||||
|
{ trigger: { hp_pct: 40, time: 60 }, adds: [{ s_uuid: 6103, overrides: { ap: 180 } }], attr_mod: { ap_pct: 20 } },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
// 10002 嗜血连斩(追加式):双刀越挥越快,技能只加不换
|
||||||
|
10002: {
|
||||||
|
name: "嗜血连斩",
|
||||||
|
switches: [
|
||||||
|
{ trigger: { hp_pct: 70 }, adds: [{ s_uuid: 6103, overrides: { ap: 160 } }], attr_mod: { ap_pct: 15 } },
|
||||||
|
{ trigger: { hp_pct: 40 }, adds: [{ s_uuid: 6104, overrides: { ap: 180 } }], attr_mod: { ap_pct: 25, defense_pct: -10 } },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
// 10003 换刃(换招式):每阶段换一把"刀",系数逐段上调
|
||||||
|
10003: {
|
||||||
|
name: "换刃",
|
||||||
|
switches: [
|
||||||
|
{ trigger: { hp_pct: 70 }, removes: [6100, 6101, 6102, 6103, 6104], adds: [{ s_uuid: 6101, overrides: { ap: 200 } }] },
|
||||||
|
{ trigger: { hp_pct: 40 }, removes: [6100, 6101, 6102, 6103, 6104], adds: [{ s_uuid: 6104, overrides: { ap: 220 } }], attr_mod: { ap_pct: 20, defense_pct: -15 } },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.2 6102 兽人首领-坦克型(时间,近战池)
|
||||||
|
|
||||||
|
```ts
|
||||||
|
// 10010 重压觉醒(追加式):越久越硬,反击越痛
|
||||||
|
10010: {
|
||||||
|
name: "重压觉醒",
|
||||||
|
switches: [
|
||||||
|
{ trigger: { time: 30 }, adds: [{ s_uuid: 6100, overrides: { ap: 150 } }], attr_mod: { defense_pct: 20 } },
|
||||||
|
{ trigger: { time: 60 }, adds: [{ s_uuid: 6104, overrides: { ap: 180 } }], attr_mod: { ap_pct: 20 } },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
// 10011 崩岩(换招式):外壳剥落,换进攻形态
|
||||||
|
10011: {
|
||||||
|
name: "崩岩",
|
||||||
|
switches: [
|
||||||
|
{ trigger: { time: 30 }, removes: [6100, 6101, 6102, 6103, 6104], adds: [{ s_uuid: 6102, overrides: { ap: 200 } }], attr_mod: { ap_pct: 15 } },
|
||||||
|
{ trigger: { time: 60 }, removes: [6100, 6101, 6102, 6103, 6104], adds: [{ s_uuid: 6104, overrides: { ap: 220 } }], attr_mod: { ap_pct: 25, defense_pct: -20 } },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.3 6103 兽人首领-魔法师(时间,远程池)
|
||||||
|
|
||||||
|
```ts
|
||||||
|
// 10020 元素汇聚(追加式):元素逐一汇入,弹幕越来越密
|
||||||
|
10020: {
|
||||||
|
name: "元素汇聚",
|
||||||
|
switches: [
|
||||||
|
{ trigger: { time: 30 }, adds: [{ s_uuid: 6204, overrides: { ap: 150 } }] },
|
||||||
|
{ trigger: { time: 60 }, adds: [{ s_uuid: 6202, overrides: { ap: 150 } }], attr_mod: { ap_pct: 20 } },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
// 10021 禁咒(换招式):每阶段念诵新禁咒,旧的被遗忘
|
||||||
|
10021: {
|
||||||
|
name: "禁咒",
|
||||||
|
switches: [
|
||||||
|
{ trigger: { time: 30 }, removes: [6150, 6151, 6200, 6201, 6202, 6203, 6204], adds: [{ s_uuid: 6201, overrides: { ap: 180 } }] },
|
||||||
|
{ trigger: { time: 60 }, removes: [6150, 6151, 6200, 6201, 6202, 6203, 6204], adds: [{ s_uuid: 6204, overrides: { ap: 200 } }], attr_mod: { ap_pct: 30, defense_pct: -15 } },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.4 6104 兽人首领-射手(血量,远程池)
|
||||||
|
|
||||||
|
```ts
|
||||||
|
// 10030 箭雨升级(追加式):箭种逐段解锁
|
||||||
|
10030: {
|
||||||
|
name: "箭雨升级",
|
||||||
|
switches: [
|
||||||
|
{ trigger: { hp_pct: 70 }, adds: [{ s_uuid: 6150, overrides: { ap: 150 } }] },
|
||||||
|
{ trigger: { hp_pct: 40 }, adds: [{ s_uuid: 6151, overrides: { ap: 160 } }], attr_mod: { ap_pct: 20 } },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
// 10031 狙击姿态(换招式):放弃弹幕,换单体重炮
|
||||||
|
10031: {
|
||||||
|
name: "狙击姿态",
|
||||||
|
switches: [
|
||||||
|
{ trigger: { hp_pct: 70 }, removes: [6150, 6151, 6200, 6201, 6202, 6203, 6204], adds: [{ s_uuid: 6203, overrides: { ap: 180 } }] },
|
||||||
|
{ trigger: { hp_pct: 40 }, removes: [6150, 6151, 6200, 6201, 6202, 6203, 6204], adds: [{ s_uuid: 6204, overrides: { ap: 200 } }], attr_mod: { ap_pct: 25, defense_pct: -15 } },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.5 6105 亡灵首领-法师(时间,远程池)
|
||||||
|
|
||||||
|
```ts
|
||||||
|
// 10040 亡灵潮汐(追加式):毒雾与雷暴层层叠加
|
||||||
|
10040: {
|
||||||
|
name: "亡灵潮汐",
|
||||||
|
switches: [
|
||||||
|
{ trigger: { time: 30 }, adds: [{ s_uuid: 6202, overrides: { ap: 150 } }] },
|
||||||
|
{ trigger: { time: 60 }, adds: [{ s_uuid: 6204, overrides: { ap: 150 } }], attr_mod: { ap_pct: 25 } },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
// 10041 灵魂爆发(换招式):燃尽旧躯壳换新法术
|
||||||
|
10041: {
|
||||||
|
name: "灵魂爆发",
|
||||||
|
switches: [
|
||||||
|
{ trigger: { time: 30 }, removes: [6150, 6151, 6200, 6201, 6202, 6203, 6204], adds: [{ s_uuid: 6200, overrides: { ap: 180 } }], attr_mod: { defense_pct: 15 } },
|
||||||
|
{ trigger: { time: 60 }, removes: [6150, 6151, 6200, 6201, 6202, 6203, 6204], adds: [{ s_uuid: 6204, overrides: { ap: 220 } }], attr_mod: { ap_pct: 30 } },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.6 6106 亡灵首领-骑马战士(时间,近战池)
|
||||||
|
|
||||||
|
```ts
|
||||||
|
// 10050 冲锋陷阵(追加式):战马冲锋节奏渐强
|
||||||
|
10050: {
|
||||||
|
name: "冲锋陷阵",
|
||||||
|
switches: [
|
||||||
|
{ trigger: { time: 30 }, adds: [{ s_uuid: 6101, overrides: { ap: 160 } }] },
|
||||||
|
{ trigger: { time: 60 }, adds: [{ s_uuid: 6104, overrides: { ap: 180 } }], attr_mod: { ap_pct: 20, defense_pct: -10 } },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
// 10051 背水一战(换招式):弃守转攻,每段更凶更脆
|
||||||
|
10051: {
|
||||||
|
name: "背水一战",
|
||||||
|
switches: [
|
||||||
|
{ trigger: { time: 30 }, removes: [6100, 6101, 6102, 6103, 6104], adds: [{ s_uuid: 6103, overrides: { ap: 200 } }], attr_mod: { ap_pct: 15, defense_pct: -10 } },
|
||||||
|
{ trigger: { time: 60 }, removes: [6100, 6101, 6102, 6103, 6104], adds: [{ s_uuid: 6104, overrides: { ap: 220 } }], attr_mod: { ap_pct: 30, defense_pct: -20 } },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.7 6006 骷髅领主(血量,近战池)
|
||||||
|
|
||||||
|
```ts
|
||||||
|
// 10060 亡灵复苏(追加式):骨架越碎越硬
|
||||||
|
10060: {
|
||||||
|
name: "亡灵复苏",
|
||||||
|
switches: [
|
||||||
|
{ trigger: { hp_pct: 70 }, adds: [{ s_uuid: 6100, overrides: { ap: 150 } }], attr_mod: { defense_pct: 25 } },
|
||||||
|
{ trigger: { hp_pct: 40 }, adds: [{ s_uuid: 6102, overrides: { ap: 160 } }], attr_mod: { ap_pct: 15, defense_pct: 15 } },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
// 10061 骷髅狂暴(换招式):拼装新武器,攻高防低
|
||||||
|
10061: {
|
||||||
|
name: "骷髅狂暴",
|
||||||
|
switches: [
|
||||||
|
{ trigger: { hp_pct: 70 }, removes: [6100, 6101, 6102, 6103, 6104], adds: [{ s_uuid: 6103, overrides: { ap: 180 } }] },
|
||||||
|
{ trigger: { hp_pct: 40 }, removes: [6100, 6101, 6102, 6103, 6104], adds: [{ s_uuid: 6104, overrides: { ap: 220 } }], attr_mod: { ap_pct: 25, defense_pct: -15 } },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.8 heroSet.ts 挂载(phase_ids)
|
||||||
|
|
||||||
|
```ts
|
||||||
|
// 6101 双刀dps: phase_ids: [10001, 10002, 10003],
|
||||||
|
// 6102 坦克型: phase_ids: [10010, 10011],
|
||||||
|
// 6103 魔法师: phase_ids: [10020, 10021],
|
||||||
|
// 6104 射手: phase_ids: [10030, 10031],
|
||||||
|
// 6105 亡灵法师: phase_ids: [10040, 10041],
|
||||||
|
// 6106 骑马战士: phase_ids: [10050, 10051],
|
||||||
|
// 6006 骷髅领主: phase_ids: [10060, 10061],
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## §5 关卡节奏:前期教学 → 后期完整
|
||||||
|
|
||||||
|
**现状约束**:`pickPhasePlan` 从 `phase_ids` 均匀随机,无关卡维度;P3 阈值写死在方案里。
|
||||||
|
|
||||||
|
**本版策略(零机制改动)**:
|
||||||
|
- P3 阈值统一标准档(血量 40% / 时间 60s),不做关卡调节
|
||||||
|
- 前期体验差异由数值自然产生:低关卡玩家 DPS 低、Boss 血量成长低,战斗更快结束,
|
||||||
|
时间型 Boss 的 P3(60s)在前期自然少见 → 符合"前期教学、后期完整"的意图
|
||||||
|
- P3 新技能有 8s CD 真空期,残血/收尾阶段常来不及施放 → P3 实际强度比纸面温和,
|
||||||
|
前期偶发触发不致失控
|
||||||
|
|
||||||
|
**后续迭代项(需小改 `pickPhasePlan`,不在本版)**:
|
||||||
|
按关卡号从 `phase_ids` 过滤"苛刻版/标准版/宽松版"方案副本
|
||||||
|
(前期 P3 血量 15% / 时间 75s 的副本方案,id 同段递增)。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## §6 验证清单
|
||||||
|
|
||||||
|
- [ ] `validateBossPhaseSet()` 全量通过(恰 2 切换点 / hp_pct 前缀递减 / time 递增 / 技能引用存在)
|
||||||
|
- [ ] TestMode 逐个 Boss 跑一遍:追加式 P3 技能池 = 随机大招 + 2 个 adds;换招式 P3 技能池 = 仅 1 个 adds
|
||||||
|
- [ ] 时间型方案实测:30s/60s 切换,90s 超时前 P3 至少施放 1 次新技能
|
||||||
|
- [ ] 换招式验证:removes 整池后,RogueConfig 随机注入的大招确实消失(普攻不受影响)
|
||||||
|
- [ ] 数值抽查:同 Boss 追加式 vs 换招式的 P3 阶段 30s 伤害量差距 ≤10%
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## §7 与外部设计稿的对照(借鉴 vs 放弃)
|
||||||
|
|
||||||
|
| 外部稿概念 | 本文处理 | 原因 |
|
||||||
|
|-----------|---------|------|
|
||||||
|
| 4 主题 Boss(破阵先锋/雷巫/霜羽/磐盾) | 映射到现有 6 Boss,按定位分触发维度 | Boss 池由 heroSet 实际条目决定 |
|
||||||
|
| `phase_mode: clear_replace` 字段 | 用 `removes` 列满定位大招池实现(§3.2) | 实现为纯增量,`delete` 空键无副作用,零机制新增 |
|
||||||
|
| `property_mod.hp` 血量修正 | **全部放弃**,仅 ap/def | 实现已排除 hp,避免血量同步歧义 |
|
||||||
|
| P1→P2 固定 60s(时间型) | 改为 **30s** | 适配 `BATTLE_TIMEOUT=90s`,P3 需留收尾窗口 |
|
||||||
|
| P2→P3 关卡三档调节(5%/20%/35%) | 本版统一标准档,关卡调节列后续迭代 | `pickPhasePlan` 无关卡维度,不为此改机制 |
|
||||||
|
| 英雄 lv 技能引用(lv8/lv16) | 统一 `SkillSet` 6100~6204 + overrides.ap 口径 | Boss 大招体系与英雄 lv 体系无关 |
|
||||||
|
| 阶段切换无敌帧/演出 | 维持空钩子 `onPhaseExit/onPhaseEnter` | 表现层后续迭代,接口已预留 |
|
||||||
|
| 双模式强度对齐 ±5% | 放宽到 ±10%,用 §3.3 口径对齐 | 缺数值模拟工具,先宽松后收敛 |
|
||||||
|
| Boss 命名美学(方案名) | 全部保留并适配(狂暴进化/禁咒/背水一战…) | 与机制无关,直接采纳 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**版本**:v1(2026-10-06,基于已实现机制重写)
|
||||||
|
**关联文档**:
|
||||||
|
- 技术规格:`docs/superpowers/specs/2026-10-06-boss-phase-system-design.md`
|
||||||
|
- 实现计划:`docs/superpowers/plans/2026-10-06-boss-phase-system.md`
|
||||||
|
- 外部参考:`y:\构思\像素大勇者-boss-阶段设计稿.md`(仅理念借鉴)
|
||||||
Reference in New Issue
Block a user