Source-first reverse engineering of a mainline Battle for Wesnoth campaign
Southbay Departure Arc
A connected study of political convergence, permanent artifact mechanics, merfolk recruitment, final-homeland defense, and the campaign’s first overseas battle.
10 Sewer of Southbay
│
▼
11 Southbay in Winter
├── Wesfolk admitted
├── Book translation begins
└── eastward evacuation plan adopted
│
▼
12 A Final Spring
├── Ruby becomes permanent Haldric attack
├── Typhon arrives with Storm Trident
├── merfolk recruitment unlocks
├── Jevyan reveals himself
└── final Green Isle army defeated
│
▼
13 Peoples in Decline
├── Green Isle left forever
├── fleet resupplies on sinking drake island
└── Jevyan's Familiar continues surveillance
│
▼
14 Rough Landing
Introduce a new faction/biome and bridge to the eastern voyage
Artifact lifecycle
06 Temple in the Deep
└── Ruby physically acquired
09 Fallen Lich Point
└── Book physically acquired
11 Southbay in Winter
└── Jessene begins translating Book
12 A Final Spring
├── Ruby object attached permanently to Haldric
└── translated knowledge becomes gameplay
13 Peoples in Decline
└── optional core Storm Trident can permanently modify a merfolk unit
Recomputed directly from current unit positions every turn
Architecture lesson. Use explicit state when transitions themselves matter. Use direct battlefield queries when the desired posture can be recalculated reliably from the current map.
Production-reuse matrix
Need
Fresh campaign work
Reused Wesnoth content
Southbay council
Dialogue and Addroran portrait
Winter terrain, city scenery, ships, music, Grand Knight
Final homeland battle
Large map, dialogue, artifact setup, selected portraits and custom Jevyan/Familiar units
All ordinary armies, ships, lighthouse, magical attack art/sounds, AI macros
Drake island
Map, story panel, dialogue, serpent event
Complete Drake faction, Sea Serpent, trident macro, music and terrain
Best practices demonstrated
Practice
Example
Resolve politics before a major mechanical unlock
Jessene earns inclusion and begins translation before the Ruby is usable.