Claude-skill-registry-data map-design
Roblox map design patterns for different game genres including simulators, tycoons, obbies, tower defense, and open world. Covers hub/lobby design, terrain, paths, areas, and visual flow.
git clone https://github.com/majiayu000/claude-skill-registry-data
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry-data "$T" && mkdir -p ~/.claude/skills && cp -r "$T/data/map-design" ~/.claude/skills/majiayu000-claude-skill-registry-data-map-design && rm -rf "$T"
data/map-design/SKILL.mdRoblox Map Design Patterns
Quick Reference Links
Official Documentation:
- Parts Overview - Basic building blocks
- Terrain - Terrain editor
- Lighting - Atmosphere
DevForum Tutorials:
- Ruski's Tutorial #1 - Map Layout Design
- Ruski's Tutorial #5 - Open World Maps
- How to Make a Simulator Map
Creator Store Resources:
Pre-Design Planning
Before opening Studio, answer these questions:
| Question | Impact |
|---|---|
| Genre | Determines flow - FPS needs fluidity, simulators need areas, obbies need progression |
| Theme | Setting, time period, colors, materials |
| Player Count | Scale and density - 6v6 is compact, 32+ needs large maps |
| Detail Level | Low-poly vs realistic, color palette, lighting |
| Shape | Avoid boxy - use curves, horseshoes, organic layouts |
Real-World Inspiration: Go outside and observe how roads curve, trees cluster, buildings have wear, nothing is perfectly uniform.
Map Layout Principles
Visual Flow
- Players should ALWAYS see something interesting - never empty walls or dead space
- Use landmarks for navigation (tall buildings, unique structures, colored areas)
- Create sight lines that guide players toward objectives
Risk & Reward
- Dead ends offer safety but vulnerability to ambush
- Open areas are dangerous but fast to traverse
- Elevated positions offer advantage but exposure
Organization
- Group elements systematically (Terrain, Buildings, Props, NPCs)
- Name parts descriptively
- Use folders for areas (Spawn, Shop, Arena)
Genre-Specific Patterns
Why Lobbies Exist
| Purpose | Description |
|---|---|
| Waiting Room | Round-based games need a place for players while match runs |
| Teleportation Hub | Central point with portals to different game areas/places |
| Social & Trading | Low-stress area to show off, trade, chat without danger |
| Monetization | Primary location for shops, crate openings, leaderboards |
Standard Lobby Features
Players expect these specific features:
- Lobby Obby - Simple obstacle course in corner to entertain waiting players
- Voting Pads - Colored floor squares to vote for next map (3-4 options)
- Global Leaderboards - Boards showing top players (Most Wins, Most Cash)
- Daily Reward Chest - Physical chest/circle for daily login bonus
- Shop/Crates - Purchase area with spinning/opening animations
- Spawn Platform - Clear central spawn point
Simulator Hub/Lobby
The central spawn area where players access shops, collections, and features.
Layout Structure:
+------------------+ | TERRAIN | <- Hills, trees (background) | +----+ +----+ | | |SHOP| |SHOP| | <- Shop stalls | +----+ +----+ | | | | [DISPLAYS] | <- Pet/item displays | | | +----+ +----+ | | |AREA| |AREA| | <- Feature areas | +----+ +----+ | | [SPAWN] | <- Center spawn +------------------+
Key Elements:
- Central spawn platform (highlighted, often stone/marble)
- Shop stalls with striped awnings (red/white, blue/white)
- Display pedestals for pets/items
- Clear paths (different color/material than grass)
- Surrounding hills with trees (visual boundary)
- Multiple NPC vendors
- Sign posts (SALE!, NEW!, etc.)
Color Zones:
- Spawn area: Stone/marble (neutral)
- Grass areas: Bright green, lime green
- Paths: Brown/nougat (dirt)
- Borders: Orange, different material
- Shops: Colored awnings for identification
Stud Style (Classic Roblox):
-- All parts get studs part.Material = Enum.Material.Plastic part.TopSurface = Enum.SurfaceType.Studs part.BottomSurface = Enum.SurfaceType.Inlet part.FrontSurface = Enum.SurfaceType.Studs part.BackSurface = Enum.SurfaceType.Studs part.LeftSurface = Enum.SurfaceType.Studs part.RightSurface = Enum.SurfaceType.Studs
Tycoon Layout
Individual player plots with droppers, conveyors, and collectors.
Standard Flow:
[DROPPER] -> [CONVEYOR] -> [UPGRADER] -> [CONVEYOR] -> [COLLECTOR] | | v v Spawns Converts "bricks" to money
Plot Layout:
+----------------------------------+ | [BUY BUTTONS] | | | | | [DROPPER 1] -> [CONV] -> [UPG] | | [DROPPER 2] -> [CONV] -> | | [DROPPER 3] -> [CONV] ----+ | | | | | [COLLECTOR] <--+ | | | | [EXPANSION AREA...] | +----------------------------------+
Key Components:
- Buy buttons (color-coded, tiered pricing)
- Droppers (spawn parts)
- Conveyors (transport parts)
- Upgraders (multiply part value)
- Collectors (convert to currency)
- Clear boundaries between plots
- Expansion areas for progression
Production Line Design: Example: Donut Tycoon
- Dropper: Spawns dough
- Upgrader 1: Shapes into donut
- Upgrader 2: Cooks/fries
- Upgrader 3: Adds sprinkles
- Collector: Sells completed donut
Obby Layout
Linear or tower progression with checkpoints.
Linear Obby:
[SPAWN] -> [STAGE 1] -> [CHECKPOINT] -> [STAGE 2] -> ... -> [WIN]
Tower Obby:
[WIN] | [STAGE 10] | [STAGE 9] | ... | [STAGE 1] | [SPAWN]
Design Principles:
- Clear start and end points
- Checkpoints every 3-5 stages
- Difficulty curve (easy -> hard)
- Visual variety (don't repeat same obstacle)
- Safe zones between challenges
- Kill bricks clearly colored (red, lava material)
Obstacle Variety:
- Platform jumps (varying distances)
- Moving platforms
- Spinning obstacles
- Thin balance beams
- Disappearing platforms
- Wall jumps
- Trampolines/launchers
Tower of Hell Style:
- Randomly generated stages
- Each stage is a Model with set dimensions
- Stages stack vertically
- Rising lava for tension
- Time limit per tower
Themed Obby with Hub
Complete obby games combine a hub/lobby area with the obby course. This pattern is common for dragon obbies, adventure obbies, and similar games.
Full Layout:
+------------------------------------------+ | HUB AREA | | +------+ +------+ +------+ +------+ | | |SHOP 1| |SHOP 2| |SHOP 3| |SHOP 4| | | +------+ +------+ +------+ +------+ | | | | [DISPLAYS] [SPAWN] [LEADERBOARD] | | | | [LOBBY OBBY] [DAILY CHEST] | | | | [VOTING PADS] [STATUE/DECOR] | | | | +----------+ | | | GATE | | | +----------+ | +------------------------------------------+ | v +------------------------------------------+ | OBBY COURSE | | [STAGE 1] -> [STAGE 2] -> ... -> [WIN] | +------------------------------------------+
Gate/Transition Pattern:
local function createGate(position, name, parent) local gate = Instance.new("Model") gate.Name = name -- Gate posts createPart(Vector3.new(3, 15, 3), CFrame.new(position + Vector3.new(-8, 7.5, 0)), BrickColor.new("Dark stone grey"), "PostL", gate) createPart(Vector3.new(3, 15, 3), CFrame.new(position + Vector3.new(8, 7.5, 0)), BrickColor.new("Dark stone grey"), "PostR", gate) -- Gate arch createPart(Vector3.new(19, 3, 3), CFrame.new(position + Vector3.new(0, 16.5, 0)), BrickColor.new("Dark stone grey"), "Arch", gate) -- Decorative caps createPart(Vector3.new(4, 2, 4), CFrame.new(position + Vector3.new(-8, 15.5, 0)), BrickColor.new("Medium stone grey"), "CapL", gate) createPart(Vector3.new(4, 2, 4), CFrame.new(position + Vector3.new(8, 15.5, 0)), BrickColor.new("Medium stone grey"), "CapR", gate) gate.Parent = parent return gate end
Winner Area Pattern: The final area rewards players who complete the obby with visual celebration.
local function createWinnerArea(position, theme, parent) local area = Instance.new("Model") area.Name = "WinnerArea" -- Victory platform (larger, special material) createPart(Vector3.new(30, 2, 30), CFrame.new(position + Vector3.new(0, 1, 0)), BrickColor.new("Bright yellow"), "VictoryPlatform", area) -- Treasure displays for i = 1, 4 do local angle = (i / 4) * math.pi * 2 local treasurePos = position + Vector3.new(math.cos(angle) * 10, 2, math.sin(angle) * 10) createPedestal(treasurePos, area) -- Gold pile on pedestal createPart(Vector3.new(2, 1, 2), CFrame.new(treasurePos + Vector3.new(0, 3.5, 0)), BrickColor.new("Bright yellow"), "Treasure" .. i, area) end -- Central victory statue/decoration -- (Theme-specific: dragon, trophy, etc.) area.Parent = parent return area end
Themed Decorations (Dragon Example):
-- Dragon eggs on pedestals local function createDragonEgg(position, color, parent) local egg = Instance.new("Part") egg.Shape = Enum.PartType.Ball egg.Size = Vector3.new(2, 3, 2) egg.CFrame = CFrame.new(position) egg.Anchored = true egg.BrickColor = color egg.Material = Enum.Material.Plastic -- Apply studs to egg egg.TopSurface = Enum.SurfaceType.Studs egg.BottomSurface = Enum.SurfaceType.Inlet egg.Parent = parent return egg end -- Treasure piles local function createTreasure(position, parent) local treasure = Instance.new("Model") treasure.Name = "Treasure" -- Gold bars (stacked) for y = 0, 2 do for x = -1, 1 do createPart(Vector3.new(1, 0.5, 2), CFrame.new(position + Vector3.new(x * 1.2, y * 0.5 + 0.25, 0)), BrickColor.new("Bright yellow"), "Gold", treasure) end end -- Gems scattered on top local gemColors = {"Bright red", "Bright blue", "Bright green", "Bright violet"} for i = 1, 4 do createPart(Vector3.new(0.5, 0.5, 0.5), CFrame.new(position + Vector3.new((math.random() - 0.5) * 2, 1.5, (math.random() - 0.5) * 2)), BrickColor.new(gemColors[i]), "Gem" .. i, treasure) end treasure.Parent = parent return treasure end
Tower Defense Layout
Enemy paths with tower placement zones.
Path Design:
[SPAWN] --+ | +-----+-----+ | | | +--+ | +--+ <- Winding path | | | +--+--+--+--+ | | +-----+-----+ | [EXIT]
Key Elements:
- Clear enemy path (highlighted material)
- Tower placement zones (grid squares, off-path)
- Multiple spawn points (later waves)
- Path intersections (strategic chokepoints)
- Visual lane indicators
- Upgrade stations/shops
Placement Grid:
-- Tower placement uses grid system local GRID_SIZE = 4 -- 4x4 studs per cell local function snapToGrid(position) return Vector3.new( math.round(position.X / GRID_SIZE) * GRID_SIZE, position.Y, math.round(position.Z / GRID_SIZE) * GRID_SIZE ) end
Open World Map
Non-linear exploration with landmarks and regions.
Region Layout:
+--------+--------+--------+ | FOREST | PLAINS | DESERT | +--------+--------+--------+ | SWAMP | [HUB] | BEACH | +--------+--------+--------+ | CAVES | RIVER | MOUNT | +--------+--------+--------+
Design Principles:
- Distinct biomes/regions
- Landmarks visible from distance
- Paths connect regions (natural flow)
- Points of interest in each area
- Central hub for fast travel
- Difficulty zones (easier near spawn)
Navigation Aids:
- Tall landmarks (towers, mountains, trees)
- Unique color palettes per region
- Map/minimap UI
- Path markers
- NPC guides
Terrain Building
Layered Hills (Stud Style)
local function createHill(position, baseSize, height, parent) local layers = math.ceil(height / 3) for i = 1, layers do local size = baseSize - (i - 1) * 4 if size > 2 then createPart( Vector3.new(size, 3, size), CFrame.new(position + Vector3.new(0, (i-1) * 3 + 1.5, 0)), i % 2 == 1 and BrickColor.new("Bright green") or BrickColor.new("Lime green"), "HillLayer" .. i, parent ) end end end
Trees (Stacked Blocks)
local function createTree(position, height, parent) -- Trunk createPart( Vector3.new(2, height, 2), CFrame.new(position + Vector3.new(0, height/2, 0)), BrickColor.new("Reddish brown"), "Trunk", parent ) -- Leaves (stacked, shrinking) local leafY = height for i, size in ipairs({8, 6, 4}) do createPart( Vector3.new(size, 3, size), CFrame.new(position + Vector3.new(0, leafY + i * 3, 0)), BrickColor.new("Bright green"), "Leaves" .. i, parent ) end end
Paths
local function createPath(startPos, endPos, width, parent) local direction = endPos - startPos local length = direction.Magnitude local midPoint = startPos + direction / 2 local angle = math.atan2(direction.X, direction.Z) createPart( Vector3.new(width, 0.5, length), CFrame.new(midPoint) * CFrame.Angles(0, angle, 0), BrickColor.new("Nougat"), "Path", parent ) end
Shop Stalls
Striped Awning Shop
local function createShop(position, name, color1, color2, parent) local shop = Instance.new("Model") shop.Name = name -- Counter createPart(Vector3.new(10, 4, 6), CFrame.new(position + Vector3.new(0, 2, 0)), BrickColor.new("Brown"), "Counter", shop) -- Back wall createPart(Vector3.new(10, 8, 1), CFrame.new(position + Vector3.new(0, 6, 3)), BrickColor.new("Bright orange"), "Wall", shop) -- Pillars createPart(Vector3.new(1, 10, 1), CFrame.new(position + Vector3.new(-5, 5, -2)), BrickColor.new("Medium stone grey"), "PillarL", shop) createPart(Vector3.new(1, 10, 1), CFrame.new(position + Vector3.new(5, 5, -2)), BrickColor.new("Medium stone grey"), "PillarR", shop) -- Striped awning for i = 0, 4 do createPart( Vector3.new(2, 0.5, 5), CFrame.new(position + Vector3.new(-4 + i*2, 10, 0)) * CFrame.Angles(math.rad(-15), 0, 0), i % 2 == 0 and color1 or color2, "Awning" .. i, shop ) end shop.Parent = parent return shop end
Display Pedestals
local function createPedestal(position, parent) local pedestal = Instance.new("Model") pedestal.Name = "Pedestal" -- Tiered base createPart(Vector3.new(5, 1, 5), CFrame.new(position + Vector3.new(0, 0.5, 0)), BrickColor.new("Medium stone grey"), "Base1", pedestal) createPart(Vector3.new(4, 1, 4), CFrame.new(position + Vector3.new(0, 1.5, 0)), BrickColor.new("Dark stone grey"), "Base2", pedestal) createPart(Vector3.new(3, 1, 3), CFrame.new(position + Vector3.new(0, 2.5, 0)), BrickColor.new("Medium stone grey"), "Base3", pedestal) pedestal.Parent = parent return pedestal end
Color Palettes by Theme
Simulator/Pet Game
| Element | Color |
|---|---|
| Grass | Bright green, Lime green |
| Paths | Nougat, Brown |
| Shops | Bright orange, Deep orange |
| Stone | Medium stone grey |
| Accents | Bright red, Bright blue |
Tycoon
| Element | Color |
|---|---|
| Plot floor | Bright green |
| Conveyors | Black, Dark grey |
| Buy buttons | Bright green (cheap), Bright yellow (mid), Bright red (expensive) |
| Droppers | Material-specific |
Fantasy/Dragon
| Element | Color |
|---|---|
| Grass | Earth green, Forest green |
| Stone | Dark stone grey |
| Dragon scales | Bright red, Bright blue, Bright violet |
| Gold/Treasure | Bright yellow |
| Fire | Bright orange, Bright red |
Ice/Winter
| Element | Color |
|---|---|
| Ground | White, Institutional white |
| Ice | Cyan, Medium blue |
| Accents | Bright blue |
| Trees | White (snow-covered) |
Checklist for Map Design
Pre-Build:
- Defined genre and theme
- Sketched layout (paper or digital)
- Identified key areas/zones
- Planned player flow
Hub/Lobby:
- Clear spawn point
- Visible shop stalls
- Display areas for collectibles
- Paths connecting areas
- Visual boundaries (hills, fences)
- NPC vendors placed
Visual Polish:
- No empty walls or dead space
- Landmarks for navigation
- Consistent color palette
- Lighting appropriate to theme
- Studs on all surfaces (if classic style)
Gameplay:
- Player can easily find objectives
- Risk/reward areas
- Clear boundaries
- Playtested for flow
Hub Building Order
- Ground - Base terrain, color zones
- Paths - Connect areas, define flow
- Major structures - Shops, buildings
- Terrain features - Hills, water
- Trees/vegetation - Background fill
- Props - Pedestals, fences, signs
- NPCs - Vendors, guides
- Displays - Pets, items on pedestals
- Lighting - PointLights, atmosphere
- Polish - Signs, details, particles