Lesson 7: Map Design & Procedural Generation
Welcome to Map Design Mastery!
Excellent work on networking! Now you're ready to tackle one of the most exciting aspects of battle royale development: creating massive, engaging maps that support 50-100 players. In this lesson, you'll learn to design battle royale maps, implement procedural generation, and create dynamic play zones that keep matches exciting.
Learning Objectives
By the end of this lesson, you will:
- ✅ Design battle royale maps with strategic gameplay in mind
- ✅ Implement procedural generation systems for varied gameplay
- ✅ Create terrain systems using Unreal's landscape tools
- ✅ Optimize map streaming for large open worlds
- ✅ Build dynamic play zones (shrinking circles) with visual feedback
- ✅ Implement POI (Points of Interest) systems for strategic locations
- ✅ Optimize map performance for multiplayer environments
Part 1: Battle Royale Map Design Principles
Step 1: Understanding Battle Royale Map Requirements
1.1 Core Design Principles
Battle royale maps need to support:
- Large player counts (50-100 players)
- Strategic positioning (high ground, cover, sightlines)
- Loot distribution (balanced spawn locations)
- Zone mechanics (shrinking play areas)
- Visual variety (different biomes and landmarks)
1.2 Map Size Considerations
For 100 players, consider:
- Minimum size: 4km x 4km (16 square kilometers)
- Optimal size: 6km x 6km (36 square kilometers)
- Maximum size: 8km x 8km (64 square kilometers)
Pro Tip: Start smaller for testing (2km x 2km), then scale up once systems are working.
Step 2: Creating Your Map Layout
2.1 Design Your Map Concept
- Choose a theme (island, desert, urban, fantasy)
- Plan major landmarks (airport, military base, city center)
- Design loot tiers (high-risk high-reward vs. safe zones)
- Plan zone progression (where zones typically end)
2.2 Create a Map Sketch
Use tools like:
- Pen and paper (quick iteration)
- Photoshop/GIMP (detailed layouts)
- Unreal's level viewport (blockout directly in engine)
Mini Challenge: Create a map sketch with at least 10 POIs and plan your zone progression.
Part 2: Terrain Creation with Unreal Landscape
Step 3: Setting Up Your Landscape
3.1 Create Landscape Actor
- In Unreal Editor, go to Modes → Landscape
- Set Component Size: 201x201 quads
- Set Sections Per Component: 2x2
- Set Number of Components: 20x20 (for 4km map)
- Click Create to generate landscape
3.2 Landscape Material Setup
Create a landscape material:
// Landscape Material Node Setup
Base Color: Blend between terrain textures
Normal: Combine normal maps for detail
Roughness: Control surface shininess
Pro Tip: Use landscape layers for different terrain types (grass, dirt, rock, sand).
Step 4: Sculpting Your Terrain
4.1 Basic Terrain Sculpting
- Select Sculpt tool in Landscape mode
- Use Brush Size and Brush Strength to shape terrain
- Create:
- Hills and valleys for cover
- Flat areas for combat zones
- Elevation changes for strategic positioning
4.2 Advanced Terrain Features
- Rivers and lakes (using erosion tools)
- Cliffs and canyons (for vertical gameplay)
- Plateaus (for high-ground advantage)
Mini Challenge: Sculpt a 2km x 2km terrain with varied elevation and strategic positions.
Part 3: Procedural Generation Systems
Step 5: Implementing Procedural POI Placement
5.1 Create POI Spawner System
Create a C++ class or Blueprint for POI management:
// POI Spawner Component
UCLASS(BlueprintType)
class BATTLEROYALE_API UPOISpawnerComponent : public UActorComponent
{
GENERATED_BODY()
public:
// Spawn POIs procedurally
UFUNCTION(BlueprintCallable)
void SpawnPOIs(int32 Count, TArray<FVector> Locations);
// Get random POI location
UFUNCTION(BlueprintCallable)
FVector GetRandomPOILocation();
};
5.2 POI Types and Distribution
Design different POI types:
- High-value locations (military bases, airports) - 5-10% of map
- Medium-value locations (towns, compounds) - 20-30% of map
- Low-value locations (small buildings, camps) - 60-70% of map
Pro Tip: Use weighted random selection to ensure balanced distribution.
Step 6: Procedural Building Placement
6.1 Building Spawn System
Create a system to place buildings procedurally:
// Building Spawner
UCLASS()
class BATTLEROYALE_API ABuildingSpawner : public AActor
{
GENERATED_BODY()
public:
// Spawn building at location
UFUNCTION(BlueprintCallable)
void SpawnBuilding(FVector Location, TSubclassOf<AActor> BuildingClass);
// Spawn building cluster
UFUNCTION(BlueprintCallable)
void SpawnBuildingCluster(FVector CenterLocation, int32 Count);
};
6.2 Building Variety
Ensure variety by:
- Different building types (houses, shops, warehouses)
- Randomized rotations (0, 90, 180, 270 degrees)
- Spawn variations (different prefabs for same type)
Part 4: Dynamic Play Zone System
Step 7: Implementing Shrinking Circles
7.1 Zone Manager Class
Create a zone manager to handle shrinking play areas:
// Zone Manager
UCLASS()
class BATTLEROYALE_API AZoneManager : public AActor
{
GENERATED_BODY()
public:
// Start zone shrinking
UFUNCTION(BlueprintCallable)
void StartZoneShrink(FVector Center, float InitialRadius, float FinalRadius, float Duration);
// Check if location is in safe zone
UFUNCTION(BlueprintCallable)
bool IsLocationSafe(FVector Location);
// Get current zone center and radius
UFUNCTION(BlueprintCallable)
void GetCurrentZone(FVector& OutCenter, float& OutRadius);
};
7.2 Zone Visual Feedback
Create visual indicators:
- Zone boundary (colored ring or wall)
- Damage zone (red tinted area outside safe zone)
- Zone timer (UI countdown)
- Next zone preview (showing where next zone will be)
Pro Tip: Use Unreal's Decal system for zone visualization on terrain.
Step 8: Zone Progression Logic
8.1 Zone Phases
Design zone phases:
- Initial zone (covers 80% of map)
- First shrink (reduces to 50% of map)
- Subsequent shrinks (progressively smaller)
- Final zone (small area for final combat)
8.2 Zone Timing
Typical timing:
- Phase 1: 5 minutes (initial looting)
- Phase 2-5: 3 minutes each (mid-game)
- Phase 6+: 2 minutes each (end-game)
Mini Challenge: Implement a zone system that shrinks over 8 phases with appropriate timing.
Part 5: Map Streaming and Optimization
Step 9: World Partition System
9.1 Enable World Partition
- Go to Edit → Project Settings → World Partition
- Enable World Partition for your level
- Set Cell Size: 128m (for 4km map = 32x32 cells)
9.2 Streaming Configuration
Configure streaming:
- Always Loaded Cells: Initial spawn area
- Streaming Distance: 2-3 cells around players
- Unload Distance: 4-5 cells from players
Pro Tip: Use Data Layers to control what loads when (buildings, props, terrain detail).
Step 10: Performance Optimization
10.1 LOD (Level of Detail) Setup
Configure LODs for:
- Static meshes (buildings, props)
- Landscape (terrain detail reduction at distance)
- Foliage (grass, trees, bushes)
10.2 Occlusion Culling
Enable occlusion culling:
- HZB Occlusion (Hardware Z-Buffer)
- Precomputed Visibility (for static geometry)
- Distance Culling (hide objects beyond render distance)
10.3 Network Optimization
Optimize for multiplayer:
- Replicate only visible actors (within render distance)
- Use relevancy (only replicate to nearby players)
- Compress transform data (reduce network bandwidth)
Part 6: Advanced Map Features
Step 11: Weather and Time of Day
11.1 Dynamic Weather System
Implement weather:
- Rain, fog, storms (affect visibility)
- Time of day cycle (day/night transitions)
- Weather effects (affect gameplay and atmosphere)
11.2 Lighting Setup
Configure lighting:
- Directional Light (sun/moon)
- Sky Light (ambient illumination)
- Exponential Height Fog (atmosphere)
Step 12: Map Testing and Iteration
12.1 Playtesting Checklist
Test your map for:
- Player flow (are players moving naturally?)
- Loot balance (are some areas too strong/weak?)
- Zone fairness (does zone favor certain areas?)
- Performance (60+ FPS with 100 players?)
12.2 Iteration Process
- Playtest with team
- Gather feedback (what works, what doesn't)
- Make adjustments (move POIs, adjust terrain)
- Re-test and repeat
Pro Tip: Use Unreal's Replay System to analyze player movement patterns.
Troubleshooting Common Issues
Issue: Map Too Large, Performance Drops
Solution:
- Reduce landscape component count
- Increase LOD distances
- Use world partition more aggressively
- Reduce foliage density
Issue: Zone Not Shrinking Correctly
Solution:
- Check zone manager tick rate
- Verify zone center and radius calculations
- Ensure zone updates are replicated to all clients
- Test with multiple players
Issue: Buildings Spawning Inside Each Other
Solution:
- Add collision checks before spawning
- Use minimum distance between buildings
- Implement overlap detection
- Use grid-based placement system
Issue: Players Can See Through Map
Solution:
- Check landscape material settings
- Verify collision is enabled on landscape
- Ensure proper LOD transitions
- Check for missing geometry
Pro Tips for Map Design
- Start Small: Build a 2km x 2km map first, then scale up
- Playtest Early: Test with real players as soon as possible
- Balance Loot: Ensure no single location dominates
- Create Landmarks: Make POIs visually distinct and memorable
- Think Vertically: Use elevation for strategic gameplay
- Optimize Continuously: Profile and optimize throughout development
- Use References: Study successful battle royale maps (Fortnite, PUBG, Apex Legends)
Summary
Congratulations! You've learned to:
- ✅ Design battle royale maps with strategic gameplay in mind
- ✅ Create terrain using Unreal's landscape tools
- ✅ Implement procedural generation for POIs and buildings
- ✅ Build dynamic play zones with shrinking circles
- ✅ Optimize map streaming and performance
- ✅ Test and iterate on map design
What's Next?
In Lesson 8: Weapon Systems & Combat Mechanics, you'll learn to:
- Design weapon systems with damage, range, and recoil
- Implement weapon spawning and loot distribution
- Create combat mechanics (shooting, reloading, aiming)
- Build weapon attachments and customization
- Optimize combat for multiplayer performance
Related Resources
- Unreal Engine Landscape Documentation
- World Partition Guide
- Procedural Generation Best Practices
- Multiplayer Optimization Guide
Practice Exercise
Your Mission: Create a 4km x 4km battle royale map with:
- At least 15 POIs (3 high-value, 5 medium-value, 7 low-value)
- Varied terrain (hills, valleys, flat areas)
- A working zone system with 8 phases
- Optimized streaming for 100 players
- Performance target: 60+ FPS
Share your map design in the community and get feedback from other developers!
Ready to build epic battle royale maps? Bookmark this lesson and start designing your first map. The skills you've learned here will help you create engaging multiplayer experiences that keep players coming back for more.