Update Healer Man server
This commit is contained in:
1 parent
8a98797fcf
commit
11934a3979
44 files changed
+3183
-329
No files matched your search
@@ -4,7 +4,7 @@ import { NodeIO } from "@gltf-transform/core";
|
||||
import { BufferGeometry, Float32BufferAttribute, Matrix4, Vector3 } from "three";
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { dungeonContentPackId, dungeonContentSourceId } from "../dungeonContentSource";
|
||||
import { DUNGEON_REGISTRY } from "../dungeonRegistry";
|
||||
import { DUNGEON_REGISTRY, prepareDungeonSessionDefinition } from "../dungeonRegistry";
|
||||
import { createDungeonEncounterSnapshot, reduceDungeonEncounter } from "../dungeonEncounterRuntime";
|
||||
import { buildPartyNavigationGraph, findNearestPartyNavigationSurface, findPartyNavigationPath } from "../partyNavigation";
|
||||
|
||||
@@ -15,6 +15,27 @@ const sliceIds = [
|
||||
] as const;
|
||||
|
||||
describe("RoM bite-sized finales", () => {
|
||||
it.each(sliceIds)("selects every %s source boss from stable run seeds at the same finale anchor", (id) => {
|
||||
const source = DUNGEON_REGISTRY[dungeonContentSourceId(id)];
|
||||
const anchor = DUNGEON_REGISTRY[id].bosses[0].position;
|
||||
const selected = new Set<string>();
|
||||
for (let index = 0; index < 500; index += 1) {
|
||||
const definition = prepareDungeonSessionDefinition(id, `rom-boss-seed-${index}`)!;
|
||||
const again = prepareDungeonSessionDefinition(id, `rom-boss-seed-${index}`)!;
|
||||
const boss = definition.bosses[0];
|
||||
selected.add(boss.id);
|
||||
expect(again.bosses[0].id).toBe(boss.id);
|
||||
expect(boss.position).toEqual(anchor);
|
||||
expect(boss.optional).toBe(false);
|
||||
expect(definition.encounterSpawnGroups![0].spawns[0].position).toEqual(anchor);
|
||||
for (const difficulty of definition.difficultyVariants) {
|
||||
expect((definition.encounterSpawnGroups![0].spawns[0].spawnMask! & difficulty.spawnMask)).not.toBe(0);
|
||||
}
|
||||
expect(source.bosses.map((candidate) => candidate.id)).toContain(boss.id);
|
||||
}
|
||||
expect(selected).toEqual(new Set(source.bosses.map((boss) => boss.id)));
|
||||
});
|
||||
|
||||
it.each(sliceIds)("gates %s behind its retained mobs and completes on its boss", (id) => {
|
||||
const slice = DUNGEON_REGISTRY[id];
|
||||
const source = DUNGEON_REGISTRY[dungeonContentSourceId(id)];
|
||||
@@ -45,6 +66,8 @@ describe("RoM bite-sized finales", () => {
|
||||
expect(completed.phase).toBe("complete");
|
||||
// The complete source remains available with its original population and objectives.
|
||||
expect(source.bosses.length).toBeGreaterThan(1);
|
||||
expect(slice.presentation.ambientLight.intensity).toBeGreaterThan(source.presentation.ambientLight.intensity);
|
||||
expect(slice.presentation.hemisphereLight.intensity).toBeGreaterThan(source.presentation.hemisphereLight.intensity);
|
||||
});
|
||||
|
||||
it.each(sliceIds)("keeps the %s start and boss reachable on shipped navigation", async (id) => {
|
||||
|
||||
Reference in new issue
Block a user