Release v0.1.3 2026-07-11
This commit is contained in:
@@ -1,6 +1,13 @@
|
||||
import { BOSS_DEFINITIONS } from "./bossCatalog";
|
||||
import { clampToArena } from "./arena";
|
||||
import { advanceCindermawMechanics, createCindermawMotion, createCindermawState, upcomingCindermawMechanic } from "./bosses/cindermaw";
|
||||
import { advanceCinderbackMechanics, createCinderbackMotion, createCinderbackState, upcomingCinderbackMechanic } from "./bosses/cinderbackRicochet";
|
||||
import { advanceCragclawMechanics, createCragclawMotion, createCragclawState, upcomingCragclawMechanic } from "./bosses/cragclawCrab";
|
||||
import { advanceCrownshardMechanics, createCrownshardMotion, createCrownshardState, upcomingCrownshardMechanic } from "./bosses/crownshardGolem";
|
||||
import { advanceEmberMantisMechanics, createEmberMantisMotion, createEmberMantisState, upcomingEmberMantisMechanic } from "./bosses/emberMantis";
|
||||
import { advanceMournveilMechanics, createMournveilMotion, createMournveilState, upcomingMournveilMechanic } from "./bosses/mournveilGhost";
|
||||
import { advanceObsidianRamMechanics, createObsidianRamMotion, createObsidianRamState, upcomingObsidianRamMechanic } from "./bosses/obsidianRamGolem";
|
||||
import { advanceSandglassMechanics, createSandglassMotion, createSandglassState, upcomingSandglassMechanic } from "./bosses/sandglassScorpion";
|
||||
import { createBaseMotion } from "./bosses/shared";
|
||||
import type { BossMechanicContext, BossMechanicEvent, BossMechanicResult } from "./bosses/types";
|
||||
import { advanceVexaMechanics, createVexaMotion, createVexaState, dropVexaVenomPool, upcomingVexaMechanic } from "./bosses/vexa";
|
||||
@@ -24,7 +31,7 @@ export const BULL_POUNCE = {
|
||||
afterCharges: 3,
|
||||
stackDuration: 5,
|
||||
stackRadius: 2.2,
|
||||
sharedDamage: 300,
|
||||
sharedDamage: 200,
|
||||
leapDuration: 0.55,
|
||||
} as const;
|
||||
|
||||
@@ -41,6 +48,25 @@ export function createBossState(bossId: BossId = "bulldrome"): BossState {
|
||||
if (bossId === "vexa") return createVexaState();
|
||||
if (bossId === "cindermaw") return createCindermawState();
|
||||
if (bossId === "ember-mantis-duelist") return createEmberMantisState();
|
||||
if (bossId === "obsidian-ram-golem") return createObsidianRamState();
|
||||
if (bossId === "cinderback-ricochet") return createCinderbackState();
|
||||
if (bossId === "sandglass-scorpion") return createSandglassState();
|
||||
if (bossId === "cragclaw-crab") return createCragclawState();
|
||||
if (bossId === "mournveil-ghost") return createMournveilState();
|
||||
if (bossId === "crownshard-golem") return createCrownshardState();
|
||||
if (bossId === "pumpking-king-of-ghosts" || bossId === "blue-eyes-ultimate-dragon") {
|
||||
const definition = BOSS_DEFINITIONS[bossId];
|
||||
return {
|
||||
id: definition.id,
|
||||
name: definition.name,
|
||||
maxHp: definition.maxHp,
|
||||
hp: definition.maxHp,
|
||||
nextMeleeAt: bossId === "pumpking-king-of-ghosts" ? 2.35 : 2.4,
|
||||
nextNovaAt: Number.POSITIVE_INFINITY,
|
||||
nextBrandAt: Number.POSITIVE_INFINITY,
|
||||
brandCount: 0,
|
||||
};
|
||||
}
|
||||
const definition = BOSS_DEFINITIONS.bulldrome;
|
||||
return {
|
||||
id: "bulldrome",
|
||||
@@ -58,6 +84,14 @@ export function createBossMotionState(bossId: BossId = "bulldrome"): BossMotionS
|
||||
if (bossId === "vexa") return createVexaMotion();
|
||||
if (bossId === "cindermaw") return createCindermawMotion();
|
||||
if (bossId === "ember-mantis-duelist") return createEmberMantisMotion();
|
||||
if (bossId === "obsidian-ram-golem") return createObsidianRamMotion();
|
||||
if (bossId === "cinderback-ricochet") return createCinderbackMotion();
|
||||
if (bossId === "sandglass-scorpion") return createSandglassMotion();
|
||||
if (bossId === "cragclaw-crab") return createCragclawMotion();
|
||||
if (bossId === "mournveil-ghost") return createMournveilMotion();
|
||||
if (bossId === "crownshard-golem") return createCrownshardMotion();
|
||||
if (bossId === "pumpking-king-of-ghosts") return { ...createMournveilMotion(), bossId };
|
||||
if (bossId === "blue-eyes-ultimate-dragon") return { ...createCrownshardMotion(), bossId };
|
||||
return {
|
||||
...createBaseMotion("bulldrome"),
|
||||
mode: "holding",
|
||||
@@ -80,10 +114,10 @@ function chargeEndpoint(start: WorldPosition, target: WorldPosition): WorldPosit
|
||||
const dx = target[0] - start[0];
|
||||
const dz = target[1] - start[1];
|
||||
const length = Math.max(0.001, Math.hypot(dx, dz));
|
||||
return [
|
||||
Math.max(-7.3, Math.min(7.3, start[0] + (dx / length) * BULL_CHARGE.distance)),
|
||||
Math.max(-8.8, Math.min(7.1, start[1] + (dz / length) * BULL_CHARGE.distance)),
|
||||
];
|
||||
return clampToArena([
|
||||
start[0] + (dx / length) * BULL_CHARGE.distance,
|
||||
start[1] + (dz / length) * BULL_CHARGE.distance,
|
||||
]);
|
||||
}
|
||||
|
||||
function livingMember(party: PartyMember[], memberId: MemberId) {
|
||||
@@ -352,6 +386,14 @@ export function advanceBossMechanics(context: BossMechanicContext): BossMechanic
|
||||
if (context.boss.id === "vexa") return advanceVexaMechanics(context);
|
||||
if (context.boss.id === "cindermaw") return advanceCindermawMechanics(context);
|
||||
if (context.boss.id === "ember-mantis-duelist") return advanceEmberMantisMechanics(context);
|
||||
if (context.boss.id === "obsidian-ram-golem") return advanceObsidianRamMechanics(context);
|
||||
if (context.boss.id === "cinderback-ricochet") return advanceCinderbackMechanics(context);
|
||||
if (context.boss.id === "sandglass-scorpion") return advanceSandglassMechanics(context);
|
||||
if (context.boss.id === "cragclaw-crab") return advanceCragclawMechanics(context);
|
||||
if (context.boss.id === "mournveil-ghost") return advanceMournveilMechanics(context);
|
||||
if (context.boss.id === "crownshard-golem") return advanceCrownshardMechanics(context);
|
||||
if (context.boss.id === "pumpking-king-of-ghosts") return advanceMournveilMechanics(context);
|
||||
if (context.boss.id === "blue-eyes-ultimate-dragon") return advanceCrownshardMechanics(context);
|
||||
return advanceBulldromeMechanics(context);
|
||||
}
|
||||
|
||||
@@ -376,6 +418,14 @@ export function upcomingMechanic(boss: BossState, motion: BossMotionState, time:
|
||||
if (boss.id === "vexa") return upcomingVexaMechanic(boss, motion, time);
|
||||
if (boss.id === "cindermaw") return upcomingCindermawMechanic(boss, motion, time);
|
||||
if (boss.id === "ember-mantis-duelist") return upcomingEmberMantisMechanic(boss, motion, time);
|
||||
if (boss.id === "obsidian-ram-golem") return upcomingObsidianRamMechanic(boss, motion, time);
|
||||
if (boss.id === "cinderback-ricochet") return upcomingCinderbackMechanic(boss, motion, time);
|
||||
if (boss.id === "sandglass-scorpion") return upcomingSandglassMechanic(boss, motion, time);
|
||||
if (boss.id === "cragclaw-crab") return upcomingCragclawMechanic(boss, motion, time);
|
||||
if (boss.id === "mournveil-ghost") return upcomingMournveilMechanic(boss, motion, time);
|
||||
if (boss.id === "crownshard-golem") return upcomingCrownshardMechanic(boss, motion, time);
|
||||
if (boss.id === "pumpking-king-of-ghosts") return upcomingMournveilMechanic(boss, motion, time);
|
||||
if (boss.id === "blue-eyes-ultimate-dragon") return upcomingCrownshardMechanic(boss, motion, time);
|
||||
if (motion.mode === "telegraph") {
|
||||
return { name: "Bull Charge", remaining: Math.max(0, motion.phaseEndsAt - time), cycle: BULL_CHARGE.telegraphDuration, urgent: true };
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user