/** * TileDefinitions.js * * Defines all dungeon tiles with their properties: * - Dimensions (width x height in cells) * - Walkability matrix (0 = not walkable, 1-8 = walkable layer/height, 9 = stairs) * - Tile type (room, corridor, L, T) * - Exit points * - Image path */ // ============================================================================ // ROOMS (4x4 and 4x6) // ============================================================================ const ROOM_4X4_NORMAL = { id: 'room_4x4_normal', tileType: 'room', width: 4, height: 4, image: '/assets/images/dungeons/room_4x4_normal.png', walkability: [ [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1] ], exits: ['N', 'S', 'E', 'W'] }; const ROOM_4X4_CIRCLE = { id: 'room_4x4_circle', tileType: 'room', width: 4, height: 4, image: '/assets/images/dungeons/room_4x4_circle.png', walkability: [ [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1] ], exits: ['N', 'S', 'E', 'W'] }; const ROOM_4X4_SKELETON = { id: 'room_4x4_skeleton', tileType: 'room', width: 4, height: 4, image: '/assets/images/dungeons/room_4x4_squeleton.png', walkability: [ [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1] ], exits: ['N', 'S', 'E', 'W'] }; const ROOM_4X6_ALTAR = { id: 'room_4x6_altar', tileType: 'room', width: 4, height: 6, image: '/assets/images/dungeons/room_4x6_altar.png', walkability: [ [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1] ], exits: ['N', 'S', 'E', 'W'] }; const ROOM_4X6_TOMB = { id: 'room_4x6_tomb', tileType: 'room', width: 4, height: 6, image: '/assets/images/dungeons/room_4x6_tomb.png', walkability: [ [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1] ], exits: ['N', 'S', 'E', 'W'] }; // Example room with stairs (2 levels) const ROOM_4X6_STAIRS = { id: 'room_4x6_stairs', tileType: 'room', width: 4, height: 6, image: '/assets/images/dungeons/room_4x6_altar.png', // Using altar image as placeholder walkability: [ [1, 1, 1, 1], [1, 1, 1, 1], [1, 9, 9, 1], // Stairs connecting level 1 and 2 [1, 2, 2, 1], [2, 2, 2, 2], [2, 2, 2, 2] ], exits: ['N', 'S'] }; // ============================================================================ // L-SHAPES (4x4 with 2-tile rows) // ============================================================================ const L_NE = { id: 'L_NE', tileType: 'L', width: 4, height: 4, image: '/assets/images/dungeons/L_NE.png', walkability: [ [1, 1, 0, 0], [1, 1, 0, 0], [1, 1, 1, 1], [1, 1, 1, 1] ], exits: ['N', 'E'], doorCoordinates: { 'N': { x: 0, y: 0 }, // Anchor: Top-Left of path (col 0,1 -> 0) 'E': { x: 3, y: 2 } // Anchor: Top-Left of path (row 2,3 -> 2) } }; const L_SE = { id: 'L_SE', tileType: 'L', width: 4, height: 4, image: '/assets/images/dungeons/L_SE.png', walkability: [ [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 0, 0], [1, 1, 0, 0] ], exits: ['S', 'E'], doorCoordinates: { 'S': { x: 0, y: 3 }, // Anchor: Top-Left (col 0,1 -> 0) 'E': { x: 3, y: 0 } // Anchor: Top-Left (row 0,1 -> 0) } }; const L_WS = { id: 'L_WS', tileType: 'L', width: 4, height: 4, image: '/assets/images/dungeons/L_WS.png', walkability: [ [1, 1, 1, 1], [1, 1, 1, 1], [0, 0, 1, 1], [0, 0, 1, 1] ], exits: ['W', 'S'], doorCoordinates: { 'W': { x: 0, y: 0 }, // Anchor: Top-Left (row 0,1 -> 0) 'S': { x: 2, y: 3 } // Anchor: Top-Left (col 2,3 -> 2) } }; const L_WN = { id: 'L_WN', tileType: 'L', width: 4, height: 4, image: '/assets/images/dungeons/L_WN.png', walkability: [ [0, 0, 1, 1], [0, 0, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1] ], exits: ['W', 'N'], doorCoordinates: { 'W': { x: 0, y: 2 }, // Anchor: Top-Left (row 2,3 -> 2) 'N': { x: 2, y: 0 } // Anchor: Top-Left (col 2,3 -> 2) } }; // ============================================================================ // T-JUNCTIONS (4x6 or 6x4 with 2-tile rows) // ============================================================================ const T_NES = { id: 'T_NES', tileType: 'T', width: 4, height: 6, image: '/assets/images/dungeons/T_NES.png', walkability: [ [1, 1, 0, 0], [1, 1, 0, 0], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 0, 0], [1, 1, 0, 0] ], exits: ['N', 'E', 'S'], doorCoordinates: { 'N': { x: 0, y: 0 }, // Col 0,1 -> 0 'E': { x: 3, y: 2 }, // Row 2,3 -> 2 'S': { x: 0, y: 5 } // Col 0,1 -> 0 } }; const T_WNE = { id: 'T_WNE', tileType: 'T', width: 6, height: 4, image: '/assets/images/dungeons/T_WNE.png', walkability: [ [0, 0, 1, 1, 0, 0], [0, 0, 1, 1, 0, 0], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1] ], exits: ['W', 'N', 'E'], doorCoordinates: { 'W': { x: 0, y: 2 }, // Row 2,3 -> 2 'N': { x: 2, y: 0 }, // Col 2,3 -> 2 'E': { x: 5, y: 2 } // Row 2,3 -> 2 } }; const T_WSE = { id: 'T_WSE', tileType: 'T', width: 6, height: 4, image: '/assets/images/dungeons/T_WSE.png', walkability: [ [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [0, 0, 1, 1, 0, 0], [0, 0, 1, 1, 0, 0] ], exits: ['W', 'S', 'E'], doorCoordinates: { 'W': { x: 0, y: 0 }, // Row 0,1 -> 0 'S': { x: 2, y: 3 }, // Col 2,3 -> 2 'E': { x: 5, y: 0 } // Row 0,1 -> 0 } }; const T_WNS = { id: 'T_WNS', tileType: 'T', width: 4, height: 6, image: '/assets/images/dungeons/T_WNS.png', walkability: [ [0, 0, 1, 1], [0, 0, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [0, 0, 1, 1], [0, 0, 1, 1] ], exits: ['W', 'N', 'S'], doorCoordinates: { 'W': { x: 0, y: 2 }, // Row 2,3 -> 2 'N': { x: 2, y: 0 }, // Col 2,3 -> 2 'S': { x: 2, y: 5 } // Col 2,3 -> 2 } }; // ============================================================================ // CORRIDORS (2x6 or 6x2 with 2-tile rows) // ============================================================================ const CORRIDOR_DOORS_EW = { 'E': { x: 5, y: 0 }, 'W': { x: 0, y: 0 } }; const CORRIDOR_DOORS_NS = { 'N': { x: 0, y: 0 }, 'S': { x: 0, y: 5 } }; // Corridor 1 - East-West (horizontal) const CORRIDOR1_EW = { id: 'corridor1_EW', tileType: 'corridor', width: 6, height: 2, image: '/assets/images/dungeons/corridor1_EW.png', walkability: [ [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1] ], exits: ['E', 'W'], doorCoordinates: CORRIDOR_DOORS_EW }; // Corridor 1 - North-South (vertical) const CORRIDOR1_NS = { id: 'corridor1_NS', tileType: 'corridor', width: 2, height: 6, image: '/assets/images/dungeons/corridor1_NS.png', walkability: [ [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1] ], exits: ['N', 'S'], doorCoordinates: CORRIDOR_DOORS_NS }; // Corridor 2 - East-West (horizontal) const CORRIDOR2_EW = { id: 'corridor2_EW', tileType: 'corridor', width: 6, height: 2, image: '/assets/images/dungeons/corridor2_EW.png', walkability: [ [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1] ], exits: ['E', 'W'], doorCoordinates: CORRIDOR_DOORS_EW }; // Corridor 2 - North-South (vertical) const CORRIDOR2_NS = { id: 'corridor2_NS', tileType: 'corridor', width: 2, height: 6, image: '/assets/images/dungeons/corridor2_NS.png', walkability: [ [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1] ], exits: ['N', 'S'], doorCoordinates: CORRIDOR_DOORS_NS }; // Corridor 3 - East-West (horizontal) const CORRIDOR3_EW = { id: 'corridor3_EW', tileType: 'corridor', width: 6, height: 2, image: '/assets/images/dungeons/corridor3_EW.png', walkability: [ [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1] ], exits: ['E', 'W'], doorCoordinates: CORRIDOR_DOORS_EW }; // Corridor 3 - North-South (vertical) const CORRIDOR3_NS = { id: 'corridor3_NS', tileType: 'corridor', width: 2, height: 6, image: '/assets/images/dungeons/corridor3_NS.png', walkability: [ [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1] ], exits: ['N', 'S'], doorCoordinates: CORRIDOR_DOORS_NS }; // ============================================================================ // TILE COLLECTIONS // ============================================================================ export const TILE_DEFINITIONS = { // Rooms room_4x4_normal: ROOM_4X4_NORMAL, room_4x4_circle: ROOM_4X4_CIRCLE, room_4x4_skeleton: ROOM_4X4_SKELETON, room_4x6_altar: ROOM_4X6_ALTAR, room_4x6_tomb: ROOM_4X6_TOMB, room_4x6_stairs: ROOM_4X6_STAIRS, // L-shapes L_NE: L_NE, L_SE: L_SE, L_WS: L_WS, L_WN: L_WN, // T-junctions T_NES: T_NES, T_WNE: T_WNE, T_WSE: T_WSE, T_WNS: T_WNS, // Corridors corridor1_EW: CORRIDOR1_EW, corridor1_NS: CORRIDOR1_NS, corridor2_EW: CORRIDOR2_EW, corridor2_NS: CORRIDOR2_NS, corridor3_EW: CORRIDOR3_EW, corridor3_NS: CORRIDOR3_NS }; // Collections by type for easy filtering export const ROOMS = [ ROOM_4X4_NORMAL, ROOM_4X4_CIRCLE, ROOM_4X4_SKELETON, ROOM_4X6_ALTAR, ROOM_4X6_TOMB, ROOM_4X6_STAIRS ]; export const L_SHAPES = [ L_NE, L_SE, L_WS, L_WN ]; export const T_JUNCTIONS = [ T_NES, T_WNE, T_WSE, T_WNS ]; export const CORRIDORS = [ CORRIDOR1_EW, CORRIDOR1_NS, CORRIDOR2_EW, CORRIDOR2_NS, CORRIDOR3_EW, CORRIDOR3_NS ]; // Helper function to get tile definition by ID export function getTileDefinition(tileId) { return TILE_DEFINITIONS[tileId] || null; } // Helper function to get tiles by type export function getTilesByType(tileType) { switch (tileType) { case 'room': return ROOMS; case 'L': return L_SHAPES; case 'T': return T_JUNCTIONS; case 'corridor': return CORRIDORS; default: return []; } }