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

  1. Choose a theme (island, desert, urban, fantasy)
  2. Plan major landmarks (airport, military base, city center)
  3. Design loot tiers (high-risk high-reward vs. safe zones)
  4. 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

  1. In Unreal Editor, go to Modes → Landscape
  2. Set Component Size: 201x201 quads
  3. Set Sections Per Component: 2x2
  4. Set Number of Components: 20x20 (for 4km map)
  5. 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

  1. Select Sculpt tool in Landscape mode
  2. Use Brush Size and Brush Strength to shape terrain
  3. 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:

  1. Initial zone (covers 80% of map)
  2. First shrink (reduces to 50% of map)
  3. Subsequent shrinks (progressively smaller)
  4. 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

  1. Go to Edit → Project Settings → World Partition
  2. Enable World Partition for your level
  3. 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

  1. Playtest with team
  2. Gather feedback (what works, what doesn't)
  3. Make adjustments (move POIs, adjust terrain)
  4. 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

  1. Start Small: Build a 2km x 2km map first, then scale up
  2. Playtest Early: Test with real players as soon as possible
  3. Balance Loot: Ensure no single location dominates
  4. Create Landmarks: Make POIs visually distinct and memorable
  5. Think Vertically: Use elevation for strategic gameplay
  6. Optimize Continuously: Profile and optimize throughout development
  7. 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

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.