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;