Campaigns
Tower Craft ships with two campaign maps. Pick one from the LEVEL dropdown on the Campaign screen — each map has its own waypoints, tower-slot layout, wave list, and victory drops.
| Map | Waves | Difficulty | Victory drops |
|---|---|---|---|
| Desolate Depths | 30 | Medium | 15 % × mithril_lump |
| Crystalline Caverns | 50 | Extreme | 15 % × void_touched_shard |
Custom levels built in the level editor continue to be supported alongside the campaign maps and use their own (editor-defined) paths and waves. Custom-level runs don't grant account drops and don't appear on the campaign leaderboards.
Map registry
Campaign maps are defined in shared/campaign-maps.ts as CAMPAIGN_MAPS. Each entry carries:
waypoints— the path enemies followtowerSlots— tower placement slotswaves— 30+ wave definitionstotalWaves— what the HUD denominator readsbackgroundPreset— which TD background to renderroadTexture— which path texture to usedifficulty/difficultyColor/description— dropdown metadatavictoryDrops— theDropRoll[]table the server rolls on victory
Adding a third map (Volcanic Rift, for example) is a data-only edit: register a new entry in CAMPAIGN_MAPS and it appears in the dropdown automatically.
Victory drops
On the tick when the TD game transitions to gameWon, the server rolls each map's victoryDrops table independently per player. Rolls persist atomically to meta_progression.state_json alongside the leaderboard write, and an ACCOUNT_DROPS_AWARDED message is sent to each player so the Game Over screen can surface the panel.