forked from phenom/healer-man
159 lines
5.3 KiB
TypeScript
159 lines
5.3 KiB
TypeScript
import {
|
|
DUNGEON_DEFINITION_SCHEMA_VERSION,
|
|
type DungeonDefinition,
|
|
} from "../dungeonTypes";
|
|
import {
|
|
FORSAKEN_ABBEY_BOSSES,
|
|
FORSAKEN_ABBEY_ENTITIES,
|
|
FORSAKEN_ABBEY_OBJECTIVE_ORDER,
|
|
FORSAKEN_ABBEY_STATIC_SPAWNS,
|
|
} from "../generated/forsakenAbbeyPopulation.generated";
|
|
|
|
/**
|
|
* Offline-capable RuneWaker import. Environment, population, placements, and
|
|
* creature models are all packaged files; SQL Server is forensic tooling only.
|
|
*/
|
|
export const FORSAKEN_ABBEY_DEFINITION = {
|
|
schemaVersion: DUNGEON_DEFINITION_SCHEMA_VERSION,
|
|
id: "forsaken-abbey",
|
|
title: "Forsaken Abbey",
|
|
mapId: 102,
|
|
lfgDungeonIds: [],
|
|
expansion: "runewaker",
|
|
environmentMode: "runewaker-ros",
|
|
difficultyVariants: [
|
|
{ id: "normal", difficulty: "normal", spawnMask: 1, levelRange: [18, 28] },
|
|
],
|
|
defaultDifficultyId: "normal",
|
|
availability: "available",
|
|
presentation: {
|
|
location: "Forsaken Abbey",
|
|
theme: "Ruined monastery and underground crypt",
|
|
summary: "Cleanse the ruined monastery and defeat the keepers guarding Demon Witch Ancalon.",
|
|
loadingMessage: "Entering Forsaken Abbey...",
|
|
unchartedAreaName: "Uncharted Forsaken Abbey",
|
|
background: "#09090c",
|
|
fog: { color: "#0b0b10", near: 34, far: 235 },
|
|
ambientLight: { color: "#9d96a7", intensity: 0.2 },
|
|
hemisphereLight: { skyColor: "#77768c", groundColor: "#0a0809", intensity: 0.48 },
|
|
directionalLight: { color: "#c9bea6", intensity: 0.78, offset: [9, 17, -6] },
|
|
materials: {
|
|
cutoutPatterns: [],
|
|
cutoutNames: [
|
|
"runewaker_material_262",
|
|
"runewaker_material_265",
|
|
"runewaker_material_276",
|
|
"runewaker_material_281",
|
|
"runewaker_material_282",
|
|
"runewaker_material_194",
|
|
],
|
|
blendPatterns: [],
|
|
blendNames: [
|
|
"runewaker_material_221",
|
|
"runewaker_material_216",
|
|
"runewaker_material_237",
|
|
"runewaker_material_239",
|
|
"runewaker_material_47",
|
|
"runewaker_material_9",
|
|
],
|
|
additivePatterns: [],
|
|
additiveNames: [],
|
|
},
|
|
map: { width: 430, height: 300, padding: 24, contours: [] },
|
|
},
|
|
assets: {
|
|
visual: [
|
|
{
|
|
id: "visual",
|
|
fileName: "forsaken-abbey-visual.glb",
|
|
checksum: "b534f66c693ac57f560e8a7aeeff59ee955b8de4bf97dd8f0aa368e10d43e79f",
|
|
size: 20_955_020,
|
|
triangleCount: 207_586,
|
|
},
|
|
],
|
|
collision: [
|
|
{
|
|
id: "collision-000",
|
|
fileName: "forsaken-abbey-collision-000.glb",
|
|
checksum: "f56bc14a460d04bd7f85f9acd64c19aa1060c06277eddff90635918b85053c57",
|
|
size: 3_870_524,
|
|
triangleCount: 83_963,
|
|
},
|
|
{
|
|
id: "collision-001",
|
|
fileName: "forsaken-abbey-collision-001.glb",
|
|
checksum: "d84c384419d3998a7337023d0b05d3bd1409e43ccc28fa17813e3661151d0cac",
|
|
size: 3_951_196,
|
|
triangleCount: 87_581,
|
|
},
|
|
{
|
|
id: "collision-002",
|
|
fileName: "forsaken-abbey-collision-002.glb",
|
|
checksum: "e5af65a15181b655f43e76be63d1e0b983ca4c766a254d682185138e4bfb9e66",
|
|
size: 1_677_852,
|
|
triangleCount: 36_042,
|
|
},
|
|
],
|
|
navigation: {
|
|
id: "navigation",
|
|
fileName: "forsaken-abbey-navigation.glb",
|
|
checksum: "d178b76459fc09302235e68e0b0385bdfa32a55b3fd7b317c11453690244a4bd",
|
|
size: 257_520,
|
|
triangleCount: 5_347,
|
|
},
|
|
},
|
|
transform: {
|
|
position: [0, 0, 0],
|
|
rotation: [0, 0, 0],
|
|
scale: 1,
|
|
fromRunewaker: "local=scale(0.1)*inverse(WDB placement)*server; three(x,y,z)=(local.x,local.y,-local.z)",
|
|
},
|
|
bounds: {
|
|
min: [-29.38274, -21.74707, -110.44788],
|
|
max: [416.5376, 34.07087, 85.36886],
|
|
},
|
|
entrance: {
|
|
name: "Forsaken Abbey Entrance",
|
|
footPosition: [-2.06969, 0.152924, 0.062695],
|
|
forward: [-0.757208847, 0, -0.653172843],
|
|
yaw: 4.000621895,
|
|
},
|
|
areas: [
|
|
{
|
|
id: "entrance",
|
|
name: "Forsaken Abbey Entrance",
|
|
center: [-2.06969, 0.152924, 0.062695],
|
|
radius: 24,
|
|
},
|
|
],
|
|
entities: FORSAKEN_ABBEY_ENTITIES,
|
|
staticSpawns: FORSAKEN_ABBEY_STATIC_SPAWNS,
|
|
roamingPacks: [],
|
|
bosses: FORSAKEN_ABBEY_BOSSES,
|
|
objectiveOrder: FORSAKEN_ABBEY_OBJECTIVE_ORDER,
|
|
navigationLinks: [],
|
|
serverGameObjects: [],
|
|
provenance: {
|
|
clientBuild: "preserved RuneWaker source snapshot",
|
|
clientArchiveHashes: {
|
|
wdb: "e20f91edc3d9924fdcccec2cde665bd7cd4d0d2a205d4d390fdd3c14ff76baf4",
|
|
primaryRos: "b4a70e2c17f7f2be9255ae173e483d60a49d51dc0e7211cf069e1256c6a180c6",
|
|
populationSnapshot: "13ef6edd3df6e71389aa92d01201889148c0794cf9ecaafdbaf90d3145d2bf7b",
|
|
},
|
|
databaseAdapter: "portable RuneWaker Zone 102 JSON snapshot",
|
|
sourceSnapshot: "scripts/runewaker-pipeline/snapshots/forsaken-abbey-zone-102.json",
|
|
coordinateTransform: "threeLocal=(inverse(WDB placement)*server)*(0.1,0.1,-0.1)",
|
|
},
|
|
validation: {
|
|
status: "green",
|
|
report: "src/assets/game/dungeons/forsaken-abbey/population-import-report.json",
|
|
blockers: [],
|
|
warnings: [
|
|
"Creature ROS files expose static geometry; HealerMan supplies procedural movement and combat motion.",
|
|
"101 level-zero quest objects, scripted props, doors, transports, and treasure rows remain source-audited but are not combat entities.",
|
|
"Collision includes decorative primary-ROS geometry and needs a visual playtest pass.",
|
|
"WDB-managed secondary doodads and effects are not assembled yet.",
|
|
],
|
|
},
|
|
} as const satisfies DungeonDefinition;
|