<<nobr>>
<div class="event-banner">
<i>"They left you to die — but the sea had other plans."</i>
</div>
<p>
You had served the Royal Navy faithfully for fourteen years. From the backwater reefs of the Vireline Coast to the freezing corridors of the Northern Shoals, you'd risen through salt and smoke, earning scars, titles, and—most dangerous of all—respect. In the wardrooms and war councils of the empire, you were known not as a politician, nor a nobleman's pawn, but as a tactician of grit and grit alone. Too competent, perhaps. Too unbending. And in the politics of admirals, that could be a kind of threat.
</p>
<p>
The orders came sealed in wax the color of dried blood: you were to escort three merchant frigates through the <b>Burning Strait</b>, a volcanic pass choked by unpredictable wind and rebel corsairs. You knew the charts. You knew the danger. You requested reinforcements—twice. You were denied—twice.
</p>
<<say "Captain">>If they expect a clean crossing through that hell-channel with three undermanned frigates, they're mad. Or worse—politicians.<</say>>
<p>
Still, you took your flagship, the <b>HMS Valiant</b>, into the fire.
</p>
<p>
It began with fog that came on too fast, thick and oily, smothering vision. Then came the glow—pale reds and oranges leaking through the mist like blood under bandage. The first fire ship struck the merchant on your starboard beam, exploding in a tower of heat that shattered your foremast.
</p>
<<say "Helmsman">>Starboard frigate hit! That blast—gods, she’s gone!<</say>>
<<say "Gunner">>Captain! That wasn’t enemy fire — we’re burning from below!<</say>>
<p>
Your helmsman screamed that the rudder wasn't responding. A second blast turned your signal deck into cinders. Through the chaos, you kept shouting orders, kept your crew moving, fighting to turn the Valiant before she drifted into range of the cliffs—but she wouldn’t answer.
</p>
<<say "Captain">>Run out pumps! Get that fire doused! Keep her in the wind—damn it, hold her steady!<</say>>
<p>
Only after the third detonation—deep in the belly of your own ship—did you understand: this was no ambush. This was planned. The Valiant hadn’t been lost by chance or flame or rebel cunning. She’d been sabotaged from within.
</p>
<p>
You dragged yourself below deck through choking smoke and stifling heat. There you saw the truth: black powder wired behind the ballast, detonation rigs laid with care only your officers could manage.
</p>
<<say "Captain">>Vos... You snake-bit bastard.<</say>>
<p>
And one name burned in your skull more fiercely than the flames around you: <b>First Mate Garran Vos</b>. Your protégé. Your shadow. Your betrayer.
</p>
<p>
You surfaced onto a deck half-collapsed, just in time to see the last lifeboat slip away into the darkness, Vos at its helm, flanked by officers who once swore oaths beneath your command.
</p>
<<say "Vos">>He dies with the Valiant. Let that be his monument.<</say>>
<p>
No signal came from the fleet. The other ships—friends, comrades, brothers-in-arms—were already retreating behind the wall of smoke, leaving you to drown like a spent gunpowder charge.
</p>
<p>
You staggered toward the edge of the deck, boots skidding on blood and rain. And when the fire finally claimed the mast, sending the rigging down in a spiral of burning canvas, it tore you off your feet and hurled you into the sea.
</p>
<p>
The water took you. Cold. Endless. Not merciful. But final.
</p>
<p>
And still... you did not die.
</p>
<<link "Continue...">><<goto "Prologue: Stranded Island">><</link>>
<</nobr>>
/***************************************************
🛠 GAME INITIALIZATION
****************************************************/
/* === 🕒 TIME SYSTEM === */
<<set $nextCrewID = 1>>
<<set $timeOfDay = "morning">>
<<set $dayCount = 1>>
<<set $turnsToday = 0>>
<<set $timePhases = ["Dawn", "Morning", "Afternoon", "Evening", "Night", "Midnight"]>>
<<set $timePhase = $timePhases[$turnsToday]>>
/* === 🚢 SHIP STATE === */
<<set $ship = {
name: "Sea Wren",
gold: 100,
hull: 100,
maxHull: 100,
sails: 100,
cannons: 3,
storageSize: 20,
upgrades: [],
notoriety: { pirate: 0, navy: 0 },
items: [
{ name: "Dried Fish" }, { name: "Dried Fish" }, { name: "Dried Fish" },
{ name: "Dried Fish" }, { name: "Dried Fish" }, { name: "Dried Fish" },
{ name: "Dried Fish" }, { name: "Dried Fish" }, { name: "Dried Fish" },
{ name: "Dried Fish" }, { name: "Dried Fish" }, { name: "Dried Fish" },
{ name: "Dried Fish" }, { name: "Dried Fish" }, { name: "Dried Fish" },
{ name: "Dried Fish" }, { name: "Dried Fish" }, { name: "Dried Fish" },
{ name: "Dried Fish" }, { name: "Dried Fish" },
{ name: "Rum Barrel" }, { name: "Rum Barrel" },
{ name: "Gunpowder" }, { name: "Gunpowder" }, { name: "Gunpowder" },
{ name: "Food Ration" }, { name: "Food Ration" },
{ name: "Food Ration" }, { name: "Food Ration" }
],
crewInteract: ["elira", "bren", "captain"],
crewSupport: [],
crewCap: 20,
crewMorale: 100
}>>
/* === 🧭 PLAYER POSITION === */
<<set $pos = { x: 1, y: 1 }>>
<<set $visited = {}>>
/* === 🧭 Forgotten Harbor === */
<<set $harborDiscovered to false>>
<<set $harborTier to 0>>
<<set $harborEvents to []>>
<<set $crewAssigned to 2>>
<<set $maxCrewAssignments to 1>>
<<set $harborTasks to {}>> <!-- key = task name, value = count -->
<<set $outpostRewards = { wood: 0, gold: 0, repair: 0 }>>
/* === 👥 CHARACTERS: PROFILES, FLAGS, & RELATIONS === */
<<character "elira" "Elira" "img/elira.png">>
<<character "bren" "Bren" "img/bren.png">>
<<character "thomas" "Thomas" "img/thomas.png">>
<<character "ronald" "Ronald" "img/ronald.png">>
<<character "vos" "GarranVos" "img/vos.png">>
<<character "captain" "Captain" "img/captain.png">>
<<character "lira" "CaptainLiraVeran" "img/lira.png">>
<<character "veela" "VeelaCrowfeast" "img/veela.png">>
<<character "ada" "AdaMarlowe" "img/ada.png">>
<<character "talla" "TallaVenn" "img/talla.png">>
<<character "sabine" "SabineKorrin" "img/sabine.png">>
<<character "brana" "Brana" "img/brana.png">>
<<character "kael" "LadyKaelVirelle" "img/kael.png">>
<<character "elora" "EloraMersha" "img/elora.png">>
<<character "zhara" "ZharaoftheAshenPact" "img/zhara.png">>
<<character "piri" "PiriSlate" "img/piri.png">>
<<character "unknown" "Stranger" "img/stranger.png">>
<<set $characters = {
elira: {
met: true,
faction: "None", rank: "Survivor", role: "Healer and Watcher",
trust: 2, fear: 0, attraction: 1, loyalty: 1,
personality: ["Quiet", "Protective", "Watchful"],
adultFlags: ["Caretaker", "Low-burning tension", "Survivor-bond"],
boarding: { strength: 0, tactics: 1, intimidation: 0, support: 2, charisma: 1 }
},
bren: {
met: true,
faction: "None", rank: "Ex-Navy Bosun", role: "Scout and Muscle",
trust: 1, fear: 0, attraction: 0, loyalty: 1,
personality: ["Grumbling", "Tough", "Reliable"],
adultFlags: ["Rough kindness", "Silent type", "Guarded loyalty"],
boarding: { strength: 2, tactics: 1, intimidation: 1, support: 0, charisma: 0 }
},
thomas: {
met: false,
faction: "Royal Order", rank: "Officer", role: "TBD",
trust: 0, fear: 0, attraction: 0, loyalty: 0,
personality: ["Unknown"],
adultFlags: [],
boarding: { strength: 1, tactics: 0, intimidation: 1, support: 0, charisma: 1 }
},
ronald: {
met: false,
faction: "Royal Order", rank: "Officer", role: "TBD",
trust: 0, fear: 0, attraction: 0, loyalty: 0,
personality: ["Unknown"],
adultFlags: [],
boarding: { strength: 1, tactics: 0, intimidation: 1, support: 0, charisma: 1 }
},
vos: {
met: false,
faction: "Royal Order", rank: "First Mate", role: "Traitor",
trust: -5, fear: 2, attraction: 0, loyalty: -10,
personality: ["Ambitious", "Betrayer", "Calculating"],
adultFlags: ["Power-grabber", "Backstabber", "Nemesis"],
boarding: { strength: 2, tactics: 2, intimidation: 2, support: 0, charisma: 1 }
},
captain: {
met: true,
faction: "Player", rank: "Captain", role: "Protagonist",
trust: 0, fear: 0, attraction: 0, loyalty: 0,
personality: ["Tactician", "Wounded", "Vengeful"],
adultFlags: [],
boarding: { strength: 1, tactics: 2, intimidation: 2, support: 1, charisma: 2 }
},
lira: {
met: false,
faction: "Crimson Hand", rank: "High", role: "Pirate Queen",
trust: 0, fear: 3, attraction: 2, loyalty: 0,
personality: ["Ruthless", "Dramatic", "Vengeful"],
adultFlags: ["Dominant", "Power-seeking", "Firebrand"],
boarding: { strength: 3, tactics: 2, intimidation: 3, support: 0, charisma: 3 }
},
veela: {
met: false,
faction: "Crimson Hand", rank: "Low", role: "Raiding Commander",
trust: 1, fear: 2, attraction: 1, loyalty: 0,
personality: ["Impulsive", "Brutal", "Loyal"],
adultFlags: ["Rough", "Desperate", "Emotional"],
boarding: { strength: 2, tactics: 1, intimidation: 2, support: 0, charisma: 1 }
},
ada: {
met: false,
faction: "Ironhook Syndicate", rank: "High", role: "Logistics Mastermind",
trust: 0, fear: 1, attraction: 1, loyalty: 0,
personality: ["Reserved", "Analytical", "Cold"],
adultFlags: ["Controlled", "Precise", "Slow-burn"],
boarding: { strength: 0, tactics: 2, intimidation: 1, support: 2, charisma: 1 }
},
talla: {
met: false,
faction: "Ironhook Syndicate", rank: "Low", role: "Smuggler and Runner",
trust: 2, fear: 0, attraction: 2, loyalty: 0,
personality: ["Flirty", "Fast-talking", "Impulsive"],
adultFlags: ["Chaotic", "Performative", "Risk-driven"],
boarding: { strength: 1, tactics: 2, intimidation: 1, support: 0, charisma: 2 }
},
sabine: {
met: false,
faction: "Saltwinds Brotherhood", rank: "High", role: "Independent Captain",
trust: 2, fear: 0, attraction: 3, loyalty: 1,
personality: ["Bold", "Idealistic", "Moral"],
adultFlags: ["Mission-focused", "Passionate", "Honest"],
boarding: { strength: 2, tactics: 2, intimidation: 2, support: 1, charisma: 2 }
},
brana: {
met: false,
faction: "Saltwinds Brotherhood", rank: "Low", role: "Gunner",
trust: 1, fear: 0, attraction: 1, loyalty: 0,
personality: ["Sarcastic", "Reckless", "Clever"],
adultFlags: ["Attachment-prone", "Hot-cold", "Verbal"],
boarding: { strength: 2, tactics: 2, intimidation: 0, support: 0, charisma: 1 }
},
kael: {
met: false,
faction: "Sable Corsairs", rank: "High", role: "Noble Captain",
trust: 0, fear: 2, attraction: 2, loyalty: 0,
personality: ["Elegant", "Cold", "Competitive"],
adultFlags: ["Subtle power-play", "Elegant", "Jealous"],
boarding: { strength: 2, tactics: 2, intimidation: 3, support: 1, charisma: 2 }
},
elora: {
met: false,
faction: "Sable Corsairs", rank: "Low", role: "Personal Aide",
trust: 1, fear: 0, attraction: 1, loyalty: 0,
personality: ["Quiet", "Observant", "Loyal"],
adultFlags: ["Unspoken longing", "Forbidden", "Quiet tension"],
boarding: { strength: 0, tactics: 1, intimidation: 0, support: 2, charisma: 1 }
},
zhara: {
met: false,
faction: "Ashen Reef Pact", rank: "High", role: "Rebel Leader",
trust: 2, fear: 0, attraction: 2, loyalty: 1,
personality: ["Charismatic", "Spiritual", "Detached"],
adultFlags: ["Trust-only", "Soul-connection", "Sacred intensity"],
boarding: { strength: 2, tactics: 1, intimidation: 3, support: 2, charisma: 3 }
},
piri: {
met: false,
faction: "Ashen Reef Pact", rank: "Low", role: "Demolition Specialist",
trust: 1, fear: 1, attraction: 1, loyalty: 0,
personality: ["Blunt", "Angry", "Independent"],
adultFlags: ["Cathartic", "Rough-edged", "Trauma-informed"],
boarding: { strength: 2, tactics: 1, intimidation: 1, support: 0, charisma: 0 }
}
}>>
/* === 🗺️ MAP STATE === */
<<set $terrainMap = {}>>
<<set $objectMap = {}>>
<<set $mapWidth to setup.mapWidth>>
<<set $mapHeight to setup.mapHeight>>
<<set $viewDistance = $ship.upgrades.includes("spyglass") ? 6 : 3>>
/* === 🏴☠️ FACTIONS === */
<<set $factions = {
"Royal Order": { rep: 0, known: true },
"Crimson Hand": { rep: -50, known: true },
"Saltwinds Brotherhood": { rep: -20, known: true },
"Banyan League": { rep: 20, known: true },
"Gilded Exchange": { rep: 0, known: true },
"Ashen Reef Pact": { rep: -20, known: true }
}>>
/* === 📜 QUEST TRACKING === */
<<set $factionQuests = {
"Ashen Reef Pact": {
stage: 0,
active: false,
complete: false
}
}>>
/* === 🧰 SHIP UPGRADE CATALOG === */
<<set $upgradeCatalog = {
"reinforcedHull": {
name: "Reinforced Hull",
description: "+25 Max Hull",
cost: 1000
},
"extraCannon": {
name: "Extra Cannon",
description: "+1 Cannon",
cost: 1500
},
"swiftRigging": {
name: "Swift Rigging",
description: "Move 2 tiles per turn",
cost: 10000
},
"spyglass": {
name: "Spyglass",
description: "+2 View Distance",
cost: 200
},
"crewQuarters": {
name: "Expanded Quarters",
description: "+5 Crew Capacity",
cost: 750
}
}>>
/* === 🧳 ITEM IMAGE MAPPING === */
<<set $cargoImages = {
"Dried Fish": "img/items/fish.webp",
"Rum Barrel": "img/items/rum.webp",
"Gunpowder": "img/items/gunpowder.webp",
"Medical Kit": "img/items/medkit.webp",
"Cannonball": "img/items/cannonball.webp"
}>>
/* === 🌍 LOAD MAP === */
<<run setup.buildWorld()>>
<<run setup.loadAsciiMap([
"~~~~~~~~~~~~~~~~~~~~~~~^~.~~~^~~.~~~~~~~~~~~~~~~.~~~~~~~~~~~~ DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD",
"~~~~~~~~~~~.~~~~~~~~~~~~~~~~~~~~~~~~~.~~.~~~~~~~~~~~~.~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD",
"~~~~~~~~~.~~~~~~~~~~~~~~~~~~.~~~~~~~~~~~~~~.~~~~~~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD",
"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD",
"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~~~~~~~~~~~~~~~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD",
"~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~.~~~~~~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD",
"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD",
".~~~~~~^~~~~~~~~~~~~~~~~~~~~~.~~~~~~~~~~~~~.~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD",
"~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD",
"~~~~~~~~~~~.~~~~~~~~~ H#### ~~~~~~~~~~~~~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD",
"~~~~~~~^~~~~~~~~~~~~~ ######~~~~~~~~~~~~~~^~~~~~~~ DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD",
"~~~~~~~~~~~~~~~~~~~~ ####### ~~~~~~~~~~~~~~~^~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD",
"~^~~~~~~~~~~~~~~~~~~ ####### ~.~~~~~~~~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD",
"~~~~~~~~~~~~~~~~~~~~ ####### ~.~~~~~~~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD",
"~~~~~~~~~~~~~~~~~~~~ ####### ~~~~~~~~~~~.~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD",
"~~~~~~~~~~~~~~~~~~~~~ ##### ~~~~~~~~~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD",
"~~~~~~~~~~~~~~~~~~.~~~ # ~~~~~~~~~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD",
"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD",
"~~~~~~.~~~~~~~~~~~~~~~~~~~~~~~.~~~~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD",
"~~~~~~~~~~~.~~~~~~~.~~~~~~~~~~~~~~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD",
"~~~~~~^~~~~~~~~~~~~~.~~~~~~~~.~~~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD",
"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDD",
"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~^.~~~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDD",
"~~~~~~~~~~~~~~~~~~~~~~~~~~.~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~~~~~~~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDD",
"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~.~~~~~~~~~~~~~ ~~~~~DDDDDDDDDDDDDDDDDDD",
"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~~~~~~~~~~ ##### .~~~~DDDDDDDDDDDDDDDDD",
"~~~~~~~~~~~.~~~.~~~.~~~.~~~~~~~~~~ DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD ~~~~...~~~~~~######## ~~~~~~DDDDDDDDDDDDDDD",
"~^~~~~~~~~~~^~~.~~~~~~~~~~.~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~~~~.~~~~ ######### ~^~~~~~~DDDDDDDDDDDD",
"~~~~~~~..~~~~~~~~~~~~~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~~~~~~~~ #########H ~~~~~~~~~~DDDDDDDDDD",
"~~.~~~~~~~~~~~~~~~~~~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~~~~~~~~ ###########~~~~~~~~~~~ DDDDDDDD",
"~~~.~~~~~~~~~~~~.~~~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~~~~~~~~ ###########~.~~~~~~~~~~~ DDDDDD",
"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~~~~~~~~ ########## ~~~~~~~~~~~~~~~~ DDD",
"~~~~~~~~~~~~~~~~~~~~~~~~~.~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD .~~~~~~~~~~~ ######### ~~~~~~~~~~~~~~~~~~~~",
"~~~^~~~~~~~~~~~~~~~.~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~~~~~~~~~ ####### ~~~~~~~~~~~~~~~~~~~~~",
"~~~~~~~~~~~~~~~~~~~~~~~~.~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~~~~~~~~~ ##### ~~~~~~~~~~~~~^~~~~~~~~",
"~~~~~~~~.~~~~~~~~~~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD ~~~~~~~~~~~~^~ ~~~~~~~~~~~~~~~~~~~~~~~~",
"~.~~^~~~~~~~~~~~~~~~~~.~~~~~~ DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~~~",
"~~~~~~~~~~~~~~~^~~^~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD .~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~",
"~~~~~~~.~~~~~~~~~~~~~~~~.~~~.^DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~",
"~~~~~~~~~~~~~~~~~~~~~~~~~.~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD .~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~~~~~~",
"~~~~~~~~~~~~~~~~~~.~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~",
"~~~~.~~~~~~~~~~~~~~~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~.~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~~~~~~.",
"# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~~~.~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~",
"## ~~~~~~~~~~~~~~~~~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~",
"### ~~~~~~~~~~~~~^~~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~.~~~~~~~~~~~~.~~~~~~~~~~~~~~~~~~~~~~~",
"#### .~~~~~~~~~~~~~~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~.~~~~~~",
"#####~~~~~~~~~~~~~~~~~~~~~~~~ DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~~~~~~~~~^~~~~~~~~~~~~.~~~~~~~~~~~~~",
"##### ~~~~~~~^~~~~~...~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~~~~^~~~~~~~~~~~~~~^~~~~~~~^~~~~~~~~~",
"##### ~~~~~~~~~~~~~~~~~~~~~ DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~",
"####H ~~~~~~~~~~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~~",
"##### ^~~~~~~^~~~~~~~.~ DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~",
"#####~~~~~~~~~~.~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~",
"#### ^~~~~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~~~~~~~",
"### ~~~~~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~~~~~~~~~~~~~~~~~~.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ",
"## ~~~~~~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD ~~~~~~~~~~~~~~~~.~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~.~~~~ #",
" ~~~~~~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #",
"~~~~~~~~~~~~~~~^~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~~~~~~~~.~~~~~~^~~~~~~~~ ##",
"~~~~~~~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~~~~~~~~~~~~~~~~~~~~~.~~~~~~~~~~~~~~~~~~.~~~~~~~~~~~~~~~~~~~~~ ##",
"~~~~~~~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ H#",
"~~~~~~~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~~~~~~~~~~~~~~~~~~~~~~~~~~~^ ##",
"~~^~.~~~~~~~^~.~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~~~~~.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~~~~~~~~~~~~~~~~~###",
"~~~~~~~~.~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~.~~~~~~~~~^~~~.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~~~~~~~~.~~###",
"~~~~~~~~~~^~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~~~~~~~~ ~~~~~.~~~~~~~~~.~~~~~~~^~~~~~~~~~^~~~~~~~~~###",
"~~~~~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~.~~~ ######H###### ~~~~.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ##",
"~~~~~.~~~~.~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~~~~ ################## ~.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ##",
"~~~.~~~~~.~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~~~ #################### ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ##",
"~~~~~~~~~.~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~.~~.~ #################### ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ##",
"~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~~ #################### ~~~~~~~~~~~~~~~~~~~~~~~~~.~~~~~~~~~~~~ #",
"~~~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD ~~~~~~ ################## ~~~~~~~^~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #",
"~.~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~.~~~ ############# ~~~~~~~~~~~~.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ",
"~~~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~.~~~~~~~~~~~~~~~~~~~~~~~~",
"~.~~~~^~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~~~~~",
"~~~~~~~ DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.~~~~.~~~.~~~~~~",
"~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~.~~~~~.~~~~~.~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~",
"~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~~~~~~.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~",
"~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD ~~~~.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~",
"~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD^~~~~~~~~~~~~~~.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~",
"~~~~~~~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD~~~~~~~~~~~~~~~~~~~~~~~~~.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
])>>
/* === ⚓ NAMED HARBORS === (keep behind map creation) */
<<run setup.setNamedHarbors()>>
:: Widget: sail
<<widget "sail">>
<<link "$args[0]">>
<<run setup.move($args[1], $args[2])>>
<<goto "At Sea">>
<</link>>
<</widget>>
:: Widget: advanceTime
<<widget "advanceTime">>
<<set _action = $args[0]>>
/* Time cost table */
<<set _costs = {
"sail": 1,
"repair": 2,
"rest": 4,
"explore": 2,
"longRest": 6
}>>
/* Default cost fallback */
<<set _advance = _costs[_action] || 1>>
/* Store starting day before advancing */
<<set _startingDay = $dayCount>>
/* Advance total turns */
<<set $turnsToday += _advance>>
/* Recalculate day and phase */
<<set _newIndex = $turnsToday % 6>>
<<set _daysPassed = Math.floor($turnsToday / 6)>>
<<set $dayCount += _daysPassed>>
<<set $turnsToday = _newIndex>>
<<set $timePhase = $timePhases[_newIndex]>>
/* Only deduct food if a day has passed */
<<if $dayCount > _startingDay>>
<<run setup.consumeFood()>>
<<run setup.checkCrewMorale()>>
<</if>>
<</widget>>
:: 📘 Game Reference [design]
**GAME OVERVIEW**
You are a former **Royal Navy officer**, betrayed after a catastrophic battle.
Now commanding a damaged vessel and scattered crew, you set out to **forge a pirate civilization** capable of opposing the very empire that discarded you.
Your ultimate goal:
To unite the pirate world and establish an independent maritime power strong enough to challenge the Royal Order.
---
**FACTIONS** *(Realistic & Grounded)*
Each faction has goals, strengths, and potential alignment or hostility.
| Name | Type | Description |
|------------------------|--------------------|-------------|
| **Royal Order** | Empire / Navy | Betrayed you. Endgame enemy. |
| **Crimson Hand** | Pirate Crew | Bloodthirsty raiders. Early enemy. |
| **Ironhook Syndicate** | Smugglers | Underground goods network. |
| **Broken Mast** | Mercenaries | Ex-navy guns for hire. |
| **Saltwinds Brotherhood** | Pirate Alliance | Neutral captains with no strong leader. |
| **Vulture's Bay** | Pirate Haven | Lawless den of crime and opportunity. |
| **Grey Sails Union** | Dock Syndicate | Controls ports, repairs, access. |
| **Banyan League** | Independent Traders| Armed convoys, trade-focused. |
| **Sable Corsairs** | Noble Pirates | Aristocratic, elitist captains. |
| **Ashen Reef Pact** | Rebels / Exiles | Escaped slaves and defectors. |
| **Wakeborn Cartel** | Shipwright Guild | Advanced naval tech. |
| **Corvid Concord** | Espionage Network | Brokers of sabotage and secrets. |
| **Gilded Exchange** | Trade Cartel | Controls high-seas commerce. |
| **Black Reef Order** | Privateers | Pirate-hunters with codes of honor. |
| **Eastwater Company** | Colonial Power | Semi-independent expansionists. |
---
**FACTION TIER PROGRESSION**
| Tier | Level | Factions |
|------------------|-----------|------------------------------------------|
| **Starting** | 1–2 | Crimson Hand, Vulture’s Bay, Grey Sails |
| **Early Game** | 2–4 | Broken Mast, Ironhook, Saltwinds |
| **Mid Game** | 4–6 | Sable Corsairs, Banyan League, Ashen Reef |
| **Late Midgame** | 6–8 | Gilded Exchange, Wakeborn, Corvid Concord |
| **Endgame** | 9–10+ | Royal Order, Eastwater Co, Black Reef |
---
**DEVELOPMENT NOTE:**
This passage is a *reference only*. It is not linked in the game flow and may be expanded with:
- Game mechanics
- Upgrade trees
- Reputation system
- Combat logic
- Quest paths
Use this to keep your world consistent as development continues.
:: 📘 Character Reference [design]
**FEMALE CHARACTER REFERENCE – BY FACTION**
Each major faction has two notable female NPCs: one higher-ranking (elite, political, or legendary) and one lower-ranking (rising, working-class, or unstable). These characters support emotional arcs, loyalty mechanics, adult content interfaces (via flags), and faction dynamics.
---
### ⚔️ Crimson Hand (Tier 1 – Raiders)
#### 1. Captain Lira "Ironwail" Veran (HIGH)
- **Role**: Pirate Queen of the Shoals
- **Personality**: Dramatic, sadistic, fiercely independent
- **Traits**: Flirtatious | Vengeful | Commanding
- **Position**: Commands 3 warships; notorious across pirate lanes
- **Hooks**:
- Rival-to-ally arc
- Reacts to power, not kindness
- Adult Flags: Dominant, Power-seeking, Firebrand
Once a respected naval tactician, Lira was disavowed after a massacre she claims was ordered by high command. She turned pirate and carved her name into the charts through brutality and charisma. Now, she rules the Shoals with fire and fear, determined to break the system that broke her.
#### 2. Veela Crowfeast (LOW)
- **Role**: Boarding leader & raider
- **Personality**: Brash, impulsive, loyal to Lira
- **Traits**: Brutal | Earnest | Hungry for status
- **Position**: Leads assault crews; respected on the front lines
- **Hooks**:
- Eager to prove herself
- Could be flipped with kindness or fear
- Adult Flags: Rough, Emotional, Desperate intimacy
Born aboard a slave galley and raised in pirate holds, Veela clawed her way up through raw violence. She sees Captain Lira as both a mother figure and a rival, trying to earn respect with every raid. She's reckless, hungry, and convinced her name will one day eclipse her captain's.
---
### 🛠️ Ironhook Syndicate (Tier 2 – Smugglers)
#### 3. Ada Marlowe (HIGH)
- **Role**: Logistics director, Syndicate tactician
- **Personality**: Quietly lethal, professional
- **Traits**: Reserved | Analytical | Cold-under-fire
- **Position**: Orchestrates black-market trade routes
- **Hooks**:
- Plays the long game
- May request "off-book" favors
- Adult Flags: Slow-burn, Precise, Controlled desire
Ada grew up in a debtors' prison and learned early that knowledge and leverage are more powerful than cannons. She now directs the Ironhook Syndicate’s most profitable smuggling lanes with clinical precision. Her past is buried deep, but those who underestimate her rarely get a second chance.
#### 4. Talla Venn (LOW)
- **Role**: Runner, disguise specialist
- **Personality**: Charming, slippery, talks fast
- **Traits**: Impulsive | Flirty | Resourceful
- **Position**: Smuggles sensitive cargo and people
- **Hooks**:
- Could offer loyalty quickly — for a price
- Caught between three factions
- Adult Flags: Chaotic, Performative, Risk-driven
Quick-witted and twice as slippery, Talla escaped an empire orphanage by stealing a war admiral’s ring. She’s since worked for half the factions in the seas, changing sides like tides. Loyalty isn’t her strength, but survival certainly is.
---
### 🏴☠️ Saltwinds Brotherhood (Tier 2 – Neutral Pirates)
#### 5. Sabine Korrin (HIGH)
- **Role**: Independent captain, seeks unity
- **Personality**: Driven, energetic, principled
- **Traits**: Bold | Moral | Idealistic
- **Position**: Holds sway with smaller Saltwind crews
- **Hooks**:
- Can become political ally or romantic backer
- Unwilling to compromise on ideals
- Adult Flags: Passionate, Honest, Mission-focused
A born sailor and daughter of a democratic captain, Sabine believes in a pirate world that can govern itself. She sails not for gold, but for legacy — hers and the Brotherhood’s. Her biggest fear is becoming the tyrants she fights against.
#### 6. Brana Swiftline (LOW)
- **Role**: Shipwright’s daughter turned fighter
- **Personality**: Sharp-tongued, clever, wounded pride
- **Traits**: Sarcastic | Loyal | Reckless
- **Position**: Gunner on a minor Saltwinds ship
- **Hooks**:
- Has a grudge against Sable Corsairs
- May become attached through shared hardship
- Adult Flags: Hot/cold, Attachment-prone, Verbal intimacy
Raised on the docks of Saltharbor, Brana apprenticed as a shipwright before stealing a gunner’s spot to escape a forced marriage. She laughs in the face of danger and dares anyone to call her soft. Beneath her sarcasm is someone still finding her worth.
---
### ⚓ Sable Corsairs (Tier 4 – Noble Pirates)
#### 7. Lady Kael Virelle (HIGH)
- **Role**: Aristocratic duelist & captain
- **Personality**: Controlled, status-focused, cold ambition
- **Traits**: Noble | Competitive | Guarded
- **Position**: Holds elite title and commands privateer fleet
- **Hooks**:
- Power-based romance or deadly rivalry
- May betray if status is threatened
- Adult Flags: Elegant, Jealous, Subtle power-play
The disgraced daughter of a noble house, Kael turned to piracy not out of desperation, but ambition. Her ship is both battlefield and ballroom, where she commands with icy grace. She sees the sea as the last empire left to conquer.
#### 8. Elora Mersha (LOW)
- **Role**: Personal aide to Kael, secretly lower-born
- **Personality**: Observant, emotionally restrained, loyal
- **Traits**: Quiet | Thoughtful | Secretive
- **Position**: Handles court-level espionage & personal affairs
- **Hooks**:
- Could be your back-channel to noble politics
- Her origins may spark a rebellion arc
- Adult Flags: Forbidden romance, Unspoken longing, Quiet tension
Elora serves Kael as aide, bodyguard, and confidante — but secretly comes from common blood, posing as noble. Every gesture is measured, every word calculated. She knows more secrets than anyone suspects… and hides her own better than all of them.
---
### 🧨 Ashen Reef Pact (Tier 4 – Rebels & Exiles)
#### 9. Zhara of the Ashen Pact (HIGH)
- **Role**: Spiritual leader and commander
- **Personality**: Intense, visionary, mystical
- **Traits**: Charismatic | Self-sacrificing | Detached
- **Position**: Controls rebel cells across the outer reefs
- **Hooks**:
- May test your moral compass
- Can be romanticized as a martyr or prophet
- Adult Flags: Soul-connection, Trust-only, Sacred intensity
Once a temple scholar and enslaved navigator, Zhara escaped during a prison revolt and emerged as a spiritual leader among the exiles. She speaks in prophecy and commands in metaphor, yet few doubt her vision. To her, freedom is sacred — and worth any sacrifice.
#### 10. Piri Slate (LOW)
- **Role**: Former slave turned explosives expert
- **Personality**: Angry, blunt, fiercely independent
- **Traits**: Sharp | Volatile | Unapologetic
- **Position**: Leads demolition raids for the Pact
- **Hooks**:
- Loyalty through shared rebellion
- May hate authority — including yours
- Adult Flags: Rough-edged, Cathartic, Trauma-informed
Piri lost her family to imperial bombers and now builds better bombs in return. She trusts fire more than people and speaks bluntly because subtlety never saved anyone. Her loyalty burns hot, but so does her rage.
---
**NOTES**:
- These characters can influence story arcs, faction control, or unlock advanced reputation interactions.
- "Adult Flags" are internal interface tags for external modules and branching logic only. No adult content is written here.
- Consider layered trait tests (e.g. loyalty + personality + faction standing) for triggering romance or betrayal events.
🛳️ ENEMY SHIP CLASSES & BOARDING LAYOUTS
Each faction can field different ship types, grouped by class: light, medium, or heavy. Class determines hull, firepower, and how elaborate a boarding encounter becomes.
➤ Ship Class Summary
Class Example Types Hull Range Cannons Rooms on Boarding
Light sloop, cutter, cog, runner ~25–40 1–3 2 (e.g., Deck + Hold)
Medium brig, frigate, barque, firebarge ~50–70 3–5 3–4 (Deck, Quarters, Officer Cabin)
Heavy galleon, manowar, reaver, merchant ~90–120 6–8 5–7 (Gun Deck, Quarters, Brig, Treasure Room, etc.)
➤ Ship Layout Templates by Type
These layouts define which boarding room passages are generated.
🛶 Light Ships (2 Rooms)
Deck (combat)
Hold (loot/trap)
⚓ Medium Ships (3–4 Rooms)
Main Deck (combat)
Crew Quarters (search/ambush)
Officer’s Cabin (boss or event)
(Optional) Cargo Hold (loot)
🚢 Heavy Ships (5–7 Rooms)
Gun Deck (combat)
Quarters (combat or loot)
Captain’s Cabin (boss)
Treasure Vault (high reward, may be locked)
Brig (free prisoners or find secrets)
(Optional) Infirmary, Magazine, or War Map Room
➤ Faction Ship Types
Faction Light Medium Heavy
Crimson Hand sloop brig galleon
Royal Order cutter frigate manowar
Saltwinds cutter brig galleon
Ashen Reef Pact sloop firebarge reaver
Banyan League runner caravel merchant
Gilded Exchange cog barque trader
➤ Room Types for Boarding Encounters
Type Description Challenge / Reward Type
combat Enemy crew fight Lose/gain crew, morale
search Risky scavenge or trap trigger Gold, items, trap damage
boss Officer or Captain encounter Reputation or unique loot
treasure Treasure room or hold Pure loot
event Unique event, prisoner, or moral choice Story branch / rep shift
:: 📋 Dev Checklist [design]
**🏗 GAME DEVELOPMENT CHECKLIST**
*Track all major systems, features, and content.*
---
### 🧭 CORE SYSTEMS
| Feature | Status | Notes |
|-------------------------------|------------|-------|
| Game Initialization | ✅ Done | StoryInit, variables, ship setup |
| Navigation / Map Movement | ✅ Done | `<<sail>>`, `$pos`, `$map` |
| Map Structure / Expandability | ✅ Done | Keyed tiles `"x,y"` |
| Sea Event Engine | ✅ Done (Basic) | Random events on move |
| Faction System & Rep Tracking | 🔲 Not Started | `$factions` object, rep per faction |
| Story Progression Framework | 🔲 Not Started | Chapters or flag-based progression |
---
### 🏴☠️ PLAYER SYSTEMS
| Feature | Status | Notes |
|-------------------------------|------------|-------|
| Ship Overview (UI + Stats) | 🔲 Not Started | Hull, sails, upgrades, etc. |
| Inventory / Cargo | 🔲 Not Started | Track items, loot, trade goods |
| Crew Management | 🔲 Not Started | Crew count, morale, attrition |
| Upgrades System | 🔲 Not Started | Cannons, hull, sails |
| Save/Load (via UI) | 🛠 Built-In | Use SugarCube autosave features |
---
### 🗺 WORLD CONTENT
| Feature | Status | Notes |
|-------------------------------|------------|-------|
| Faction Reference (design) | ✅ Done | 15 factions + progression |
| Game Reference (lore) | ✅ Done | `📘 Game Reference` passage |
| Harbours / Port Locations | 🔲 Not Started | Upgrade/repair/provision |
| Special Events (Storm, Flotsam)| 🔲 Not Started | Hook into event engine |
| Combat System | 🔲 Not Started | Ship-vs-ship mechanics |
| Pirate Base / HQ System | 🔲 Planned | Player builds their own island base |
| Rumors / Quest Hooks | 🔲 Planned | Unlock exploration & narrative arcs |
---
### 🧰 DEVELOPMENT TOOLS
| Feature | Status | Notes |
|-------------------------------|------------|-------|
| Dev Reference Section | ✅ Done | This checklist, factions, world |
| Event Testing Tools | 🔲 Planned | Force trigger events, debug state |
| Fog of War / Visited Tiles | 🛠 Partial | `$visited` exists, not yet visual |
---
### ✅ Next Suggested Modules:
- Sea Event Engine (random encounters)
- Ship Overview screen
- Faction rep tracker (and display)
:: Ship Overview
<span class="event-banner">Captain’s Log — Status of the Sea Wren</span>
<div class="ship-status">
<p><b>Ship Name:</b> <<= $ship.name>></p>
<p><b>Hull Integrity:</b> <<= $ship.hull>> / <<= $ship.maxHull>></p>
<p><b>Sails Condition:</b> <<= $ship.sails>>%</p>
<p><b>Cannons:</b> <<= $ship.cannons>></p>
<p><b>Upgrades:</b>
<<if $ship.upgrades.length > 0>>
<<for _upgrade range $ship.upgrades>>
<span class="upgrade-tag"><<= _upgrade>></span>
<</for>>
<<else>>
None
<</if>>
</p>
</div>
<div class="ship-status">
<p><b>Crew:</b> <<= $ship.crew>> men</p>
<p><b>Food Supplies:</b> <<= $food>> units</p>
<p><b>Gold:</b> <<= $ship.gold>> coins</p>
</div>
<<link "Return to sea">><<goto "At Sea">><</link>>
<<link "View Faction Reputation">><<goto "Faction Reputation">><</link>>
:: Sea Event Engine [script]
/* Triggered automatically from "At Sea".
Decides if something happens on THIS tile. */
<<set _key = $pos.x + "," + $pos.y>>
/* 1. If the tile is already a map landmark, don't roll. */
<<if $map.hasOwnProperty(_key)>>
<<return>>
<</if>>
/* 2. Roll for an open-sea encounter. */
<<set _roll = random(1,100)>>
/* — 20 % Enemy encounter — */
<<if _roll <= 20>>
<<goto "Enemy Sighted">>
/* — Next 15 % Storm — */
<<elseif _roll <= 35>>
<<goto "Storm">>
/* — Next 15 % Flotsam (loot) — */
<<elseif _roll <= 50>>
<<goto "Flotsam">>
/* — Next 10 % Derelict ship — */
<<elseif _roll <= 60>>
<<goto "Derelict">>
/* — Remaining 40 % Nothing happens — */
<</if>>
<<return>>
:: Enemy Sighted
A ship crests the waves — sails marked with a blood-red hand.
<<set _faction = "Crimson Hand">>
<<set $enemy = setup.generateEnemy(_faction)>>
<<link "Engage">><<goto "Combat">><</link>> |
<<link "Flee">>
<<run setup.move(0,0)>>
<<goto "At Sea">>
<</link>>
:: Storm
Black clouds gather and waves hammer the Sea Wren.
<<set _dmg = random(5,15)>>
<<set $ship.hull = Math.max($ship.hull - _dmg, 0)>>
The storm deals <<= _dmg>> hull damage!
<<link "Ride it out">><<goto "At Sea">><</link>>
:: Flotsam
You find wreckage drifting on the swell.
<<set _loot = random(20,60)>>
<<set $ship.gold += _loot>>
Your crew hauls aboard crates worth <<= _loot>> gold.
<<link "Continue sailing">><<goto "At Sea">><</link>>
:: Derelict
A burnt-out hulk rolls in the water. Boarding parties search her decks.
<<set _foodGain = random(5,15)>>
<<set $food += _foodGain>>
They salvage <<= _foodGain>> units of provisions.
<<link "Return to the helm">><<goto "At Sea">><</link>>
:: Enemy Retaliates [script]
<<if $enemy.hull > 0>>
<<set _enemyDmg = setup.rollDamage($enemy.cannons)>>
<<set $ship.hull = Math.max($ship.hull - _enemyDmg, 0)>>
The $enemy.name fires back: <<= _enemyDmg>> damage!
<</if>>
:: Game Over
<span class="event-banner">☠️ The Sea Claims You</span>
Your ship has been lost, and your dream dies with it.
<<link "Restart">><<goto "Prologue: The Betrayal">><</link>>
:: Harbour Found
<span class="event-banner">⚓ Harbour: Saltport</span>
A weather-beaten dock sprawls into the bay. Crates, tools, and rough-looking sailors line the shore. A place to rest, repair, and prepare.
<div class="ship-status">
<b>Hull:</b> $ship.hull / $ship.maxHull<br>
<b>Food:</b> $food units<br>
<b>Crew:</b> $ship.crew<br>
<b>Gold:</b> $ship.gold coins
</div>
What would you like to do?
<<link "Repair your ship">><<goto "Repair Ship">><</link>>
<<link "Buy provisions">><<goto "Resupply">><</link>>
<<link "Recruit crew">><<goto "Recruit Crew">><</link>>
<<link "Return to sea">><<goto "At Sea">><</link>>
:: Repair Ship
<<set _damage = $ship.maxHull - $ship.hull>>
<<set _cost = setup.repairCost(_damage)>>
<<if _damage <= 0>>
Your ship is fully repaired.
<<else>>
Repairs will cost <<= _cost>> gold to fix <<= _damage>> damage.
<<if $ship.gold >= _cost>>
<<link "Pay and repair">>
<<set $ship.gold -= _cost>>
<<set $ship.hull = $ship.maxHull>>
Hull fully restored!
<<goto "Harbour Found">>
<</link>>
<<else>>
You don't have enough gold.
<</if>>
<</if>>
<<link "Back to harbour">><<goto "Harbour Found">><</link>>
:: Resupply
Food costs 1 gold per unit.
<<link "Buy 10 food (10g)">>
<<if $ship.gold >= 10>>
<<set $ship.gold -= 10>>
<<set $food += 10>>
Supplies loaded.
<<else>>
Not enough gold.
<</if>>
<<goto "Harbour Found">>
<</link>>
<<link "Back">><<goto "Harbour Found">><</link>>
:: Recruit Crew
<span class="event-banner">👥 Recruits Available in Port</span>
<<set _candidates = [
setup.generateCharacter(),
setup.generateCharacter(),
setup.generateCharacter()
]>>
<<for _c in _candidates>>
<div class="crew-card">
<b><<= _c.name >></b> — <<= _c.gender >>
<br>Traits:
<<for _t in _c.traits>>
<span class="upgrade-tag"><<= _t >></span>
<</for>>
<br>
<i>Cost: 5 gold</i><br>
<<if $ship.gold >= 5>>
<<link "Recruit this sailor">>
<<set $ship.gold -= 5>>
<<set $ship.crew.push(_c)>>
<<= _c.name >> joins your crew.
<<goto "Harbour Found">>
<</link>>
<<else>>
<span style="color:gray;">Not enough gold</span>
<</if>>
</div>
<</for>>
<<link "Back to harbour">><<goto "Harbour Found">><</link>>
<span class="event-banner">🛡️ Faction Reputation</span>
<<for _name, _data range $factions>>
<<if _data.known>>
<div class="crew-card">
<b><<= _name >></b><br>
Reputation: <<= _data.rep >>
<<if _data.rep >= 75>> (Allied)
<<elseif _data.rep >= 25>> (Friendly)
<<elseif _data.rep >= 0>> (Neutral)
<<elseif _data.rep >= -25>> (Wary)
<<elseif _data.rep >= -75>> (Hostile)
<<else>> (Enemy)
<</if>>
</div>
<</if>>
<</for>>
<<link "Back">><<goto "Ship Overview">><</link>>
:: Shipwright
<span class="event-banner">🛠 Shipwright's Dock</span>
Here you can upgrade the Sea Wren with better parts — if you've got the coin.
<<for _key, _item range $upgradeCatalog>>
<<if !$ship.upgrades.includes(_key)>>
<div class="crew-card">
<b><<= _item.name >></b><br>
<<= _item.description >> <br>
<i>Cost:</i> <<= _item.cost >> gold<br>
<<if $ship.gold >= _item.cost>>
<<link "Buy Upgrade">>
<<set $ship.gold -= _item.cost>>
<<set $ship.upgrades.push(_key)>>
<<switch _key>>
<<case "reinforcedHull">>
<<set $ship.maxHull += 25>>
<<set $ship.hull += 25>>
<<case "extraCannon">>
<<set $ship.cannons += 1>>
<<case "swiftRigging">>
/* Movement logic will check this later */
<</switch>>
Upgrade installed!
<<goto "Shipwright">>
<</link>>
<<else>>
<i style="color: gray;">Not enough gold</i>
<</if>>
</div>
<</if>>
<</for>>
<<link "Back to harbour">><<goto "Harbour Found">><</link>>
:: Faction Affairs
<span class="event-banner">📜 Rumors & Faction Affairs</span>
In the shadows of the dockside tavern, whispers swirl of shifting allegiances...
<<if $factions["Ashen Reef Pact"].rep >= 25 and !$factionQuests["Ashen Reef Pact"].complete>>
<<if !$factionQuests["Ashen Reef Pact"].active>>
A hooded messenger nods in your direction.
“The Reef watches. You may be ready.”
<<link "Accept their proposal">>
<<set $factionQuests["Ashen Reef Pact"].active = true>>
<<goto "Ashen Pact: Part 1">>
<</link>>
<<else>>
<<link "Resume Ashen Pact Quest">><<goto "Ashen Pact: Part 1">><</link>>
<</if>>
<</if>>
<<link "Return to harbour">><<goto "Harbour Found">><</link>>
:: Ashen Pact: Part 1
<span class="event-banner">🦑 Ashen Pact — Part I</span>
You meet with a woman in tattered naval colors, face half-burned, eyes sharp.
> “We don’t forget what the empire did to us. You want to build something real? Help us first.”
Mission: **Intercept a Gilded Exchange merchant ship** and deliver its cargo to Ashen waters.
<<if $factionQuests["Ashen Reef Pact"].stage == 0>>
<<link "Accept the mission">>
<<set $factionQuests["Ashen Reef Pact"].stage = 1>>
Mission accepted. You’ll need to find and attack a **Gilded Exchange** vessel.
<<goto "At Sea">>
<</link>>
<<elseif $factionQuests["Ashen Reef Pact"].stage == 1>>
Mission ongoing — seek and defeat a Gilded Exchange ship.
<<link "Continue sailing">><<goto "At Sea">><</link>>
<<elseif $factionQuests["Ashen Reef Pact"].stage == 2>>
<<link "Deliver the stolen cargo">>
<<set $factionQuests["Ashen Reef Pact"].complete = true>>
<<set $factions["Ashen Reef Pact"].rep += 25>>
<<set $ship.gold += 150>>
The Ashen Reef Pact now considers you **a friend**.
<<goto "Harbour Found">>
<</link>>
<</if>>
:: PortAdalon
<<set $location = "Port Adalon">>
You're standing at the chaotic heart of **Port Adalon**. The air smells of tar, salt, and betrayal.
Where do you want to go?
* [[Visit the Adalon Drydocks|AdalonDrydocks]]
* [[Enter the Drowned Maiden Tavern|DrownedMaiden]]
* [[Slip into the Tidehold ruins|Tidehold]]
* [[Return back to ship|Bridge]]
Welcome to Port Brinewall!
** Integration in the next Update **
* [[Return back to ship|Bridge]]** Integration in the next Update **
* [[Return back to ship|Bridge]]** Integration in the next Update **
* [[Return back to ship|Bridge]]** Integration in the next Update **
* [[Return back to ship|Bridge]]<<nobr>>
<<set _map to setup.renderMap()>>
<div class="map-container">
<!-- Floating Rose Overlay -->
<div class="nav-overlay">
<table class="rose-table">
<tr><td></td><td>
<<link "↑">><<run setup.move(0, -1)>>
<<replace "#map-box">><<= setup.renderMap() >><</replace>>
<<replace "#story-caption">><<= setup.renderHUD() >><</replace>>
<</link>></td><td></td></tr>
<tr>
<td>
<<link "←">><<run setup.move(-1, 0)>>
<<replace "#map-box">><<= setup.renderMap() >><</replace>>
<<replace "#story-caption">><<= setup.renderHUD() >><</replace>>
<</link>>
</td>
<td class="rose-center">• </td>
<td>
<<link "→">>
<<run setup.move(1, 0)>>
<<replace "#map-box">><<= setup.renderMap() >><</replace>>
<<replace "#story-caption">><<= setup.renderHUD() >><</replace>>
<</link>></td>
</tr>
<tr>
<td>
</td>
<td>
<<link "↓">><<run setup.move(0, 1)>>
<<replace "#map-box">><<= setup.renderMap() >><</replace>>
<<replace "#story-caption">><<= setup.renderHUD() >><</replace>>
<</link>>
</td>
<td>
</td>
</tr>
</table>
</div>
<!-- Map Content -->
<div id="map-box"><<= _map >></div>
<div class="map-actions">
</div>
</div>
<<link "Leave the map">><<goto "Bridge">><</link>>
<</nobr>><<nobr>>
<<if !$combatArena>>
<<run setup.initCombatArena()>>
<</if>>
<<if $combatArena>>
<<set _arena = setup.renderCombatArena()>>
<span class="event-banner">⚓ Battle Arena</span>
<table style="width:100%;"><tr valign="top">
<!-- 🗺️ Combat Grid -->
<td style="width:60%;">
<div id="arena-grid"><<= _arena >></div>
</td>
<!-- 🎮 Controls & Status -->
<td style="width:40%;">
<div id="combat-status">
<b>📊 Status</b><br>
🚢 <b>Your Hull:</b> $combatArena.player.hull /
$combatArena.player.maxHull<br><br>
<b>🛡️ Enemy Info</b><br>
🏴 <b>Faction:</b> $combatArena.enemy.faction<br>
🚢 <b>Ship:</b> $combatArena.enemy.type (Class: $combatArena.enemy.class)<br>
☠️ <b>Enemy Hull:</b> $combatArena.enemy.hull / $combatArena.enemy.maxHull<br>
💥 <b>Cannons:</b> $combatArena.enemy.cannons<br>
⛵ <b>Sails:</b> $combatArena.enemy.sails<br>
👁️ <b>Sight:</b> $combatArena.enemy.sight<br>
</div><br>
<div id="combat-controls">
<<if $combatArena.turn === "player">>
<b>🧭 Orders:</b><br>
<!-- Movement Rose -->
<div class="nav-overlay">
<table class="rose-table">
<tr><td></td><td>
<<link "↑">>
<<run setup.combatMove("up")>>
<<replace "#arena-grid">><<= setup.renderCombatArena() >><</replace>>
<<replace "#combat-status">>
<div id="combat-status">
<b>📊 Status</b><br>
🚢 <b>Your Hull:</b> $combatArena.player.hull /
$combatArena.player.maxHull<br><br>
<b>🛡️ Enemy Info</b><br>
🏴 <b>Faction:</b> $combatArena.enemy.faction<br>
🚢 <b>Ship:</b> $combatArena.enemy.type (Class: $combatArena.enemy.class)<br>
☠️ <b>Enemy Hull:</b> $combatArena.enemy.hull / $combatArena.enemy.maxHull<br>
💥 <b>Cannons:</b> $combatArena.enemy.cannons<br>
⛵ <b>Sails:</b> $combatArena.enemy.sails<br>
👁️ <b>Sight:</b> $combatArena.enemy.sight<br>
</div>
<</replace>>
<<replace "#combat-controls">><<include "Arena: Player Controls">><</replace>>
<</link>>
</td><td></td></tr>
<tr>
<td>
<<link "←">>
<<run setup.combatMove("left")>>
<<replace "#arena-grid">><<= setup.renderCombatArena() >><</replace>>
<<replace "#combat-status">>
<div id="combat-status">
<b>📊 Status</b><br>
🚢 <b>Your Hull:</b> $combatArena.player.hull /
$combatArena.player.maxHull<br><br>
<b>🛡️ Enemy Info</b><br>
🏴 <b>Faction:</b> $combatArena.enemy.faction<br>
🚢 <b>Ship:</b> $combatArena.enemy.type (Class: $combatArena.enemy.class)<br>
☠️ <b>Enemy Hull:</b> $combatArena.enemy.hull / $combatArena.enemy.maxHull<br>
💥 <b>Cannons:</b> $combatArena.enemy.cannons<br>
⛵ <b>Sails:</b> $combatArena.enemy.sails<br>
👁️ <b>Sight:</b> $combatArena.enemy.sight<br>
</div>
<</replace>>
<<replace "#combat-controls">><<include "Arena: Player Controls">><</replace>>
<</link>>
</td>
<td class="rose-center">•</td>
<td>
<<link "→">>
<<run setup.combatMove("right")>>
<<replace "#arena-grid">><<= setup.renderCombatArena() >><</replace>>
<<replace "#combat-status">>
<div id="combat-status">
<b>📊 Status</b><br>
🚢 <b>Your Hull:</b> $combatArena.player.hull /
$combatArena.player.maxHull<br><br>
<b>🛡️ Enemy Info</b><br>
🏴 <b>Faction:</b> $combatArena.enemy.faction<br>
🚢 <b>Ship:</b> $combatArena.enemy.type (Class: $combatArena.enemy.class)<br>
☠️ <b>Enemy Hull:</b> $combatArena.enemy.hull / $combatArena.enemy.maxHull<br>
💥 <b>Cannons:</b> $combatArena.enemy.cannons<br>
⛵ <b>Sails:</b> $combatArena.enemy.sails<br>
👁️ <b>Sight:</b> $combatArena.enemy.sight<br>
</div>
<</replace>>
<<replace "#combat-controls">><<include "Arena: Player Controls">><</replace>>
<</link>>
</td>
</tr>
<tr><td></td><td>
<<link "↓">>
<<run setup.combatMove("down")>>
<<replace "#arena-grid">><<= setup.renderCombatArena() >><</replace>>
<<replace "#combat-status">>
<div id="combat-status">
<b>📊 Status</b><br>
🚢 <b>Your Hull:</b> $combatArena.player.hull /
$combatArena.player.maxHull<br><br>
<b>🛡️ Enemy Info</b><br>
🏴 <b>Faction:</b> $combatArena.enemy.faction<br>
🚢 <b>Ship:</b> $combatArena.enemy.type (Class: $combatArena.enemy.class)<br>
☠️ <b>Enemy Hull:</b> $combatArena.enemy.hull / $combatArena.enemy.maxHull<br>
💥 <b>Cannons:</b> $combatArena.enemy.cannons<br>
⛵ <b>Sails:</b> $combatArena.enemy.sails<br>
👁️ <b>Sight:</b> $combatArena.enemy.sight<br>
</div>
<</replace>>
<<replace "#combat-controls">><<include "Arena: Player Controls">><</replace>>
<</link>>
</td><td></td></tr>
</table>
</div><br>
<!-- Fire -->
<<link "🔥 Fire Cannons">>
<<run setup.combatFireCannons()>>
<<replace "#arena-grid">><<= setup.renderCombatArena() >><</replace>>
<<replace "#combat-status">>
<div id="combat-status">
<b>📊 Status</b><br>
🚢 <b>Your Hull:</b> $combatArena.player.hull /
$combatArena.player.maxHull<br><br>
<b>🛡️ Enemy Info</b><br>
🏴 <b>Faction:</b> $combatArena.enemy.faction<br>
🚢 <b>Ship:</b> $combatArena.enemy.type (Class: $combatArena.enemy.class)<br>
☠️ <b>Enemy Hull:</b> $combatArena.enemy.hull / $combatArena.enemy.maxHull<br>
💥 <b>Cannons:</b> $combatArena.enemy.cannons<br>
⛵ <b>Sails:</b> $combatArena.enemy.sails<br>
👁️ <b>Sight:</b> $combatArena.enemy.sight<br>
</div>
<</replace>>
<<replace "#combat-controls">><<include "Arena: Player Controls">><</replace>>
<</link>><br>
<!-- Boarding -->
<<if Math.abs($combatArena.player.x - $combatArena.enemy.x) + Math.abs($combatArena.player.y - $combatArena.enemy.y) <= 1>>
<<if $combatArena.enemy.hull <= $combatArena.enemy.maxHull * 0.5>>
<<link "⚔️ Board Enemy">><<run setup.combatBoard()>><</link>><br>
<</if>>
<</if>>
<!-- Flee -->
<<link "🏃 Attempt to Flee">><<run setup.combatFlee()>><</link>><br>
<</if>>
</div> <!-- end #combat-controls -->
<<if $combatArena.turn === "enemy">>
<<include "Arena: Enemy Turn">>
<</if>>
</td>
</tr></table>
<</if>>
<</nobr>>
<span class="event-banner">🛥️ Aboard the Sea Wren</span>
Below deck, the wood groans faintly with each wave. Sailors pass in quiet conversation, keeping hands busy and eyes sharp.
<span class="event-banner">🌊 Elira — Crew Hold</span>
You find Elira seated cross-legged beneath a hanging lantern, her knives laid out in front of her with careful precision. She glances up, eyes calm but unreadable.
<<say "Elira">>Still water runs deep. And sometimes it carries teeth.<</say>>
<ul>
<li><<link "Ask about her past.">><<goto "Elira_Backstory">><</link>></li>
<li><<link "Ask why she follows you.">><<goto "Elira_WhyFollow">><</link>></li>
<li><<link "Leave her to her silence.">><<goto "Crew Deck">><</link>></li>
</ul>
Where do you want to go?
<ul>
<li><<link "🧭 Bridge / Captain’s Cabin">><<goto "Bridge">><</link>></li>
<li><<link "🪶 Crew Deck">><<goto "Crew Deck">><</link>></li>
<li><<link "📦 Cargo Hold">><<goto "Cargo Hold">><</link>></li>
<<if $ship.upgrades.includes("reinforcedHull")>>
<li><<link "🗡 Armory">><<goto "Armory">><</link>></li>
<</if>>
<<if $ship.upgrades.includes("extraCannon")>>
<li><<link "💥 Gunnery Deck">><<goto "Gunnery Deck">><</link>></li>
<</if>>
<<if $ship.upgrades.includes("swiftRigging")>>
<li><<link "🪢 Rigging Loft">><<goto "Rigging Loft">><</link>></li>
<</if>>
<<if $ship.upgrades.includes("spyglass")>>
<li><<link "🔭 Observation Nest">><<goto "Observation Nest">><</link>></li>
<</if>>
</ul><span class="event-banner">🧭 Captain’s Cabin</span>
A chart-strewn desk, oil lantern swaying. Here, you plan — and perhaps brood.
<<link "⬅ Look at the Map">><<goto "Sea Map">><</link>>
<<link "Return to Ship Interior">><<goto "Ship Interior">><</link>>
<<nobr>>
<span class="event-banner">📦 Cargo Hold</span>
<p>The hold smells of salt, rope, and rum. Crates are stacked where they fit — tight, but organized.</p>
: Bren_CargoHold
<span class="event-banner">🪓 Bren — Cargo Hold</span>
Bren sits on a crate near the stern bulkhead, running a whetstone over his coral-bladed knife. He doesn’t look up — just grunts softly as you approach.
<<say "Bren">>Don’t worry, I ain’t sharpening this for you. Yet.<</say>>
<ul>
<li><<link "Ask about his Navy days.">><<goto "Bren_Backstory">><</link>></li>
<li><<link "Ask what he thinks of the ship.">><<goto "Bren_ShipTalk">><</link>></li>
<li><<link "Leave him be.">><<goto "Crew Deck">><</link>></li>
</ul>
<<set _cols = 5>>
<<set _capacity = $ship.storageSize>>
<<set _items = clone($ship.items || [])>>
<!-- Ensure _items is padded to match storage capacity -->
<<set _emptySlots = Math.max(0, _capacity - _items.length)>>
<<for _i = 0; _i < _emptySlots; _i++>>
<<run _items.push(null)>>
<</for>>
<style>
.cargo-grid {
display: grid;
grid-template-columns: repeat(5, 64px);
gap: 8px;
margin: 1em 0;
}
.cargo-slot {
width: 64px;
height: 64px;
background-color: rgba(255,255,255,0.05);
border: 1px solid #888;
border-radius: 4px;
display: flex;
align-items: center;
justify-content: center;
}
.cargo-slot img {
max-width: 80%;
max-height: 80%;
}
.cargo-slot.empty {
opacity: 0.2;
}
</style>
<div class="cargo-grid">
<<for _slot range _items>>
<div class="cargo-slot <<if !_slot>>empty<</if>>">
<<if _slot>>
<<set _icon = $cargoImages[_slot.name] || "img/unknown.webp">>
<img src="<<=_icon>>" title="<<=_slot.name>>">
<</if>>
</div>
<</for>>
</div>
<p><b>Used:</b> <<= $ship.items.length>> / <<= _capacity>> slots</p>
<<link "Return to Ship Interior">><<goto "Ship Interior">><</link>>
<</nobr>>
<span class="event-banner">🗡 Armory</span>
Secured racks and lockers line the walls. A locked case bears your personal mark.
<i>Feature hooks:</i> weapon equipment, loot storage, defense bonuses
<<link "Return to Ship Interior">><<goto "Ship Interior">><</link>>
<span class="event-banner">💥 Gunnery Deck</span>
Gunners check powder, sight lines, and rig elevation. Cannons are ready.
<i>Feature hooks:</i> firing bonuses, crew skill boosts, special ammo
<<link "Return to Ship Interior">><<goto "Ship Interior">><</link>>
<span class="event-banner">🪢 Rigging Loft</span>
A climb into the ropes and spars. Wind whistles past. The sea is alive beneath you.
<i>Feature hooks:</i> navigation, wind detection, weather hints
<<link "Return to Ship Interior">><<goto "Ship Interior">><</link>>
<span class="event-banner">🔭 Observation Nest</span>
From the highest perch, the horizon stretches endlessly.
<i>Feature hooks:</i> tile scanning, event detection, surprise reduction
<<link "Return to Ship Interior">><<goto "Ship Interior">><</link>>
<span class="event-banner">🪶 Crew Deck</span>
The crew relaxes between duties. A few eyes turn your way with respect — or wariness.<br><br>
<<if $ship.crewInteract.includes("brana")>>
You spot Brana seated on a crate under the ventilation grates, goggles pushed up, copper wiring looped between gloved fingers. She glances at you — just once — then keeps working on whatever scorched mess she’s prying open.<br><br>
<<link "Talk to Brana">><<goto "Brana_CrewTalk">><</link>><br><br>
<</if>>
<<link "Return to Ship Interior">><<goto "Ship Interior">><</link>>
<div id="story-caption">
<h2>🦜 <span class="caption-title">Ship's Ledger</span></h2>
<ul class="caption-stats">
<li><b>📅 Day:</b> <<print $dayCount>></li>
<li><b>🕰️ Time:</b> <<print $timePhase>></li>
<li><b>💰 Gold:</b> <<print $ship.gold>> coins</li>
<li><b>👥 Crew:</b> <<print setup.getTotalCrew()>> / <<print $ship.crewCap>></li>
<li><b>⚓ Morale:</b> <<print $ship.crewMorale>>%</li>
<li><b>🧂 Rations:</b> <<print setup.countFood()>></li>
<li><b>🛠️ Hull:</b> <<print $ship.hull>> / <<print $ship.maxHull>></li>
<li><b>📍 Position:</b> (<<print $pos.x>>, <<print $pos.y>>)</li>
</ul>
<div class="caption-subsection">
<b>🗺️ Faction Reputation</b>
<ul class="faction-rep">
<<for _name, _data range $factions>>
<<if _data.known>>
<li><b><<= _name>>:</b> <<= _data.rep >></li>
<</if>>
<</for>>
</ul>
</div>
</div>
<div class="image-container">
<a href="https://www.patreon.com/ThePilferer" class="small-link">
<img src="https://cdn.iconscout.com/icon/free/png-256/patreon-282262.png" alt="Example Image">
</a>
</div><blockquote>
<b>To unite the scattered captains, seize the seas, and build a pirate power strong enough to defy the empire that betrayed you.</b>
</blockquote>
<hr>
<h3>🧭 Status Report</h3>
<ul>
<li><b>Ship:</b> <i>Sea Wren</i></li>
<li><b>Crew:</b> 10 (men and women of mixed skill)</li>
<li><b>Gold:</b> 200</li>
<li><b>Supplies:</b> Low</li>
<li><b>Loyalty:</b> Earned, not bought</li>
</ul>
<hr>
<h3>⚓ What will you do first, Captain?</h3>
<div class="choice-buttons">
<<button "🔍 Inspect your ship and crew">>
<<goto "Ship Overview">>
<</button>>
<<button "📘 Review known factions and the world">>
<<goto "📘 Game Reference">>
<</button>>
<<button "🗺️ Ride the waves to a new destiny">>
<<goto "Sea Map">>
<</button>>
</div><<nobr>>
<p>
You awoke face-down in black sand, the taste of salt and blood in your mouth, the hiss of waves rolling over shattered coral and half-sunken driftwood. Every limb ached. The world tilted with each breath. Somewhere behind your eyes, pain pulsed in time with the crash of surf. Your arm was broken — you knew that even before you tried to move it — and your uniform had been burned away in great patches, leaving skin raw and blistered beneath it. You could not remember the fall. You could not remember the ocean swallowing you. But it had not finished the job.
</p>
<p>
Rain pelted your back, cold and biting. Above you, a cliff face loomed jagged and black, its summit lost in low storm cloud. Palm trees, stunted and twisted by wind, rattled along the ridge like bones in a distant drumline. For a long time you lay there, staring at the sky, hearing only wind and your own slow, uneven breathing. The sea had spared you — but the reason for that mercy remained unclear.
</p>
<p>
It was not until dusk that the strangers found you — a woman with eyes like stormglass and a scar running the length of her jaw, and a man with sea-rot on his boots and knuckles thick from too many punches. They dragged you from the tide without words. You remember flashes: a fire dug into wet sand, crab meat roasted over it, herbs pressed into your mouth while you vomited salt and bile. The woman — Elira, you later learned — watched over you in silence. The man, Bren, grumbled the entire time but never once stopped moving.
</p>
<p>
Days passed in fragments. You drifted between fever and lucidity. When you could speak again, Elira asked only one question.
</p>
<<say "Elira">>Name?<</say>>
<p>
You gave it. She gave hers. Bren snorted and muttered something about fools who cling to titles. You didn’t argue. You didn’t have a ship anymore. Not even a crew. Just two other ghosts washed up on this forgotten rock, and a broken body held together by the sheer spite of a man left for dead.
</p>
<p>
They told you of the island. No name on the charts — not one worth writing down, anyway. A volcanic spur, inhabited only by storms, crabs the size of barrels, and men too desperate or too dangerous to live anywhere else. Elira had been here two months, waiting for the ankle Vos’s men broke to fully heal. Bren had been hiding for longer — a former bosun who’d struck an officer mid-transport and jumped ship during a patrol gone sideways. Now, he fished with hand lines and sharpened coral knives, and spoke to no one unless the need was sharp.
</p>
<p>
From the ridgeline, you could see firelight at night — not your own. Watchposts. Camps. Traders. Smugglers. Men who bought and sold in silence, always armed, always half looking over their shoulder. They’d come for shelter, for repairs, for flesh, or for worse. Elira warned never to approach them.
</p>
<<say "Elira">>They don’t ask questions. They don’t want names.<</say>>
<p>
But they had something none of you did: a ship.
</p>
<p>
You saw it first during a clear morning two weeks after waking. A low-slung brig, weather-stained and rusting at the keel, docked near the far bay. The sails were patched, the deck stripped of ornament, but it rode the water straight. Elira confirmed it: a courier-class Wren, small but fast, single mast, designed for speed and quiet crossings. Used by smugglers and scouts. Capable of outrunning anything without broadside guns. A floating chance.
</p>
<p>
Bren watched it too. He never said much, but you could feel the weight behind his silences. He knew what you were thinking before you said it. One night, as the rain pelted the trees and smoke from your fire blew low across the beach, he finally spoke.
</p>
<<say "Bren">>They sleep hard when they drink. Seen it myself. If the wind holds and the tide’s with us, we could push her out before dawn. That brig don’t belong to them. Never did.<</say>>
<<say "Blira">>They won’t follow far. Not if they think we’ve nothing they want. And if they do… they’ll regret it.<</say>>
<p>
You looked at your hands — scabbed, burned, shaking still from the sea. Not yet healed. Not yet strong. But no longer idle. And in that moment, a plan began to form. Not just for escape. Not just for survival. For something larger. Something with fire in its belly and vengeance in its sails.
</p>
<blockquote>
<i>They left you to drown in silence. But the sea gave you allies. And the night still had work to do.</i>
</blockquote>
<<link "Steal the ship under cover of night...">><<goto "Prologue: The Stolen Ship">><</link>>
<</nobr>>
<<nobr>>
<p>
The night fell without stars, moonlight smothered by thick banks of stormcloud pressing low across the horizon. The tide, for once, favored you — a slow eastward pull that whispered across the reef like the breath of something ancient. It would not last long. And neither would your window.
</p>
<p>
The smugglers’ camp sat on the far side of the crescent bay, ringed by crates, tarpaulin, and a driftwood palisade that looked more for show than defense. There were four of them. Maybe five. None disciplined. None in uniform. They drank too loud. Laughed too hard. Built their fire too high. You watched from the cliffline through a slit of jungle fern, eyes fixed not on the men, but on the ship just beyond them.
</p>
<p>
She floated low in the water, tethered with twin ropes to a drift-anchored dock. Her name, <i>Sea Wren</i>, was burned into her flank with crude ironwork — not etched, not carved, but seared. Her paint was stripped in places, revealing old layers beneath: navy blue, then red, then black. She had been repurposed again and again, like a sword passed between desperate hands. But her bones were still strong. Her lines still clean.
</p>
<p>
You spent hours watching her. Studying her shape. Reading the way the tide kissed her bow. She was light, fast, but stable. More importantly — <i>she was alone</i>. The smugglers had taken no precautions. They assumed fear and remoteness were enough. That no one on this dead island would dare take what was theirs.
</p>
<p>
They hadn't counted on you.
</p>
<p>
Elira stood beside you, face painted in ash to kill the moon-glare. Her knives — three in total — rested in sheaths made from gutted eel spine. She moved like someone who didn’t need a second chance. Bren had taken to the trees, a cudgel slung across his back and a cutlass hidden in the folds of his scavenged cloak. He didn’t like plans, but he followed orders well enough — if he trusted the voice giving them.
</p>
<<say "Elira">>Two by the fire. One piss drunk. One standing guard. Poorly. No sign of the fifth. Might be on the ship.<</say>>
<<say "Bren">>Doesn’t matter. They bleed like the rest. Just say the word.<</say>>
<p>
You didn’t respond. Not at first. You let the silence hang, heavy and sharp. Because this wasn’t just about stealing a ship. It was the first move in a game no one else knew had started. The first wound struck against the world that tried to forget you. That cast you into fire and let your name burn like wastepaper.
</p>
<p>
You moved at midnight. Bren took the south edge of the camp, flanking wide behind the latrines where the cliff dipped. Elira shadowed you to the tree line above the brig, her blade already wet with rain. You stepped carefully, slowly, letting each movement sync with the rhythm of the waves. The smugglers didn’t look up. They never do — not until the cold comes.
</p>
<p>
You struck fast. Elira dropped the guard before he could shout. Bren cracked the skull of the sleeping man with one swing. You reached the rope cleats and cut them clean, letting the brig drift ever so slightly as the tide pulled her out into deeper dark. When one of the smugglers stirred — too late — you met him face to face.
</p>
<p>
He raised a rusted pistol. You knocked it aside. He called you a coward. You broke his jaw. In three heartbeats, it was done. In four, the <i>Sea Wren</i> was yours.
</p>
<p>
The sail unfurled like a ghost rising. The rudder groaned but obeyed. The hull cut through the tide like it remembered how. You looked back once — not at the camp, but at the shore, where the firelight grew small, and the island shrank behind you. That place had been a tomb. But now it was just a shore. A point of origin. A line in the sand, drawn in blood and ash.
</p>
<blockquote>
<i>You were no longer just surviving. You were sailing again — under no flag, no command, no mercy. The Sea Wren had changed hands. And so had your fate.</i>
</blockquote>
<<link "Set course for the open sea...">><<goto "Sea Map">><</link>>
<</nobr>>
🎨 STYLE SETTINGS (optional but useful)
You can add this to any prompt to unify art style:
"realistic digital portrait, dramatic lighting, painterly texture, muted color palette, background suggesting a pirate ship or sea port"
/*=== Initial Crew Members ===*/
🌊 Elira
A solemn woman with storm-gray eyes and a long scar down her jawline. Her hair is tied back in a wind-whipped braid, her clothing pieced together from repurposed navy coats and island cloth. She carries the calm of someone who’s endured much — and watches everything.
Style: realistic digital portrait, painterly texture, muted color palette, background of a beachside fire or driftwood shelter, dramatic shadows
🪓 Bren
A rugged man with thick knuckles, sea-worn skin, and a permanent scowl. His beard is short and unkempt, and his cloak is patched from old uniforms. A cudgel and coral-bladed knife hang at his side. He looks like someone who’s survived too many fights — and expects more.
Style: realistic digital portrait, muted tones, gritty lighting, painterly texture, background suggesting jungle edge or tidal cliffs
🧤 Thomas
A clean-cut Royal Navy officer in formal uniform, with golden epaulettes and a waxed mustache. His posture is stiff, his expression judgmental. Everything about him screams protocol and privilege.
Style: realistic digital portrait, dramatic lighting, polished painterly texture, navy warship background
🧷 Ronald
A younger officer with a nervous expression, tousled blond hair, and a face not yet hardened by battle. His uniform is neat but ill-fitting, and his eyes flicker with uncertainty.
Style: realistic digital portrait, softer texture, background of a naval hallway or candle-lit war cabin
🐍 Garran Vos
A sharply dressed, calculating man with dark slicked-back hair and cold eyes. His features are clean but his gaze is cruel. He wears a captain’s coat trimmed in navy silver, but his posture speaks of ambition more than duty.
Style: realistic digital portrait, harsh shadows, painterly finish, background of a burning ship or map table
🧭 The Captain (Player)
A scarred, resilient naval officer in torn regalia, half-burned uniform hinting at betrayal and battle. Expression fierce, eyes fixed forward with determination. Salt-crusted hair, one hand gloved. A leader tempered by fire and vengeance.
Style: realistic digital portrait, dramatic contrast, muted color palette, background of sea and storm or distant smoke on the horizon
/*=== Additional Crew Members === */
⚔️ Crimson Hand
1. Captain Lira "Ironwail" Veran
A fierce female pirate queen with blood-red braids, golden piercings, and a brutal scar across one cheek. Wearing dark crimson captain’s coat, smirking confidently. Eyes filled with vengeance and fire. Realistic digital portrait, dramatic shadows.
2. Veela Crowfeast
A young, wild-looking female raider with tangled black hair, a chipped tooth, and heavy leather armor. Fierce eyes and tribal face paint. Dirty and dangerous, with cutlasses strapped to her back.
🛠 Ironhook Syndicate
3. Ada Marlowe
A cold, elegant smuggler woman in a high-collared coat, slick dark hair in a bun, wearing thin gloves and reading a ledger. Piercing, calculating eyes. Industrial background, subdued palette.
4. Talla Venn
A sly, street-smart smuggler girl with short, tousled copper hair, layered scarves, a quick smile, and mismatched earrings. She holds a small pouch of coins and has a dagger tucked in her belt.
🏴☠️ Saltwinds Brotherhood
5. Sabine Korrin
A bold female pirate captain with windswept dark hair, sun-tanned skin, and a confident grin. Wears a blue jacket with a compass brooch. Background hints at open sea and freedom.
6. Brana Swiftline - sydney cole
A young female gunner with grease-smudged cheeks, short brown hair tied back, and brass goggles on her head. Wears a leather vest, with a confident, sarcastic expression.
⚓ Sable Corsairs
7. Lady Kael Virelle
A regal noblewoman pirate with platinum hair, icy gray eyes, and aristocratic posture. Wears an embroidered navy coat with silver buttons and carries a rapier. Background hints at a noble ship’s interior.
8. Elora Mersha
A quiet, observant woman with dark curls tucked under a lace headscarf, pale skin, and simple noble servant attire. Eyes thoughtful, intelligent, and sad. Soft lighting and soft focus.
🧨 Ashen Reef Pact
9. Zhara of the Ashen Pact
A mystical rebel leader with glowing amber eyes, dreadlocked dark hair, and tribal tattoos. Wears torn, repurposed navy uniform with a scarf like a battle standard. Expression is serene but powerful.
10. Piri Slate
A wiry, intense young woman with soot-stained face, messy cropped hair, and a belt full of explosives. Her eyes are fierce with defiance, and she wears a patched rebel jacket over bare shoulders.🏴☠️ Port Adalon
The city that never sleeps… mostly because someone’s always stabbing someone else.
Controlled by the Grey Sails Union, but crawling with spies, smugglers, and loose cannons.
🌆 Locations & Key Elements
🛠 Adalon Drydocks
Description: The mechanical heart of the port. Constant noise, smoke, and shouting.
Function: Ship repairs, black-market mods, and shady shipwrights.
Resident Character:
Brana Swiftline
Off-duty gunner working side-jobs, replacing cannons and mocking captains.
May offer side work, crew upgrades, or share news of the Saltwinds Brotherhood.
🕯 The Drowned Maiden Tavern
Description: Dim, loud, and dangerous. Rumor central.
Function: Crew recruitment, minor faction gossip, duel triggers.
Resident Character:
Talla Venn
Plays cards with smugglers, scams drunks, and listens for job offers.
Can sell information or offer the player a low-risk smuggling job.
⛓ The Tidehold (Lower Level Only)
Description: A partially collapsed prison on the outskirts of Adalon, now used by rebel sympathizers.
Function: Low-level sabotage quests, message drop-offs, minor intel jobs.
Resident Character:
Piri Slate
Keeps to herself in a booby-trapped corner; offers jobs involving explosives or disruption.
Can be convinced to assist depending on anti-navy actions or player's rebel reputation.
🗺 Optional Passive Mentions
You can reference these higher-tier characters in dialogue, rumors, or posters — without placing them in Adalon yet:
“They say Lady Kael passed through last week — left a dead man and a love letter behind.”
“Ada Marlowe? She’s not the sort to show up in Adalon. Sends messengers with coin and warnings.”
🧭 Player Flow Suggestions
Start with Brana or Talla for early side quests
Unlock Piri via a rebellious act or Grey Sails betrayal
Tease the others through overheard dialogue or notes:: AdalonDrydocks
<<set $location = "Adalon Drydocks">>
The docks groan with work. Steam hisses, hammers ring, and pirates argue over repairs.
<<if !$metBrana>>
You spot a woman wiping grease from her arms as she adjusts a cannon mount.
<<link "Approach her">>
<<goto "BranaIntro">>
<</link>>
<</if>>
* [[Return to the port hub|Harbor: Port Adalon]]
* [[Visit the Repair & Upgrade Shop|AdalonRepairShop]]
<<set $location = "Drowned Maiden Tavern">>
The tavern is thick with smoke, spilled ale, and whispered secrets.
<<if !$metTalla>>
At the back, a woman with quick eyes and a looser coin purse shuffles cards.
<<link "Sit across from her">>
<<set $metTalla = true>>
<<goto "TallaIntro">>
<</link>>
<</if>>
* [[Return to the port hub|Harbor: Port Adalon]]
<<set $location = "Tidehold">>
Collapsed stone cells and rusted bars surround you. Only the desperate operate here.
<<if $rebelSupport >= 1 and !$metPiri>>
A wiry woman eyes you from the shadows, one hand resting on a makeshift detonator.
<<link "Approach her carefully">>
<<set $metPiri = true>>
<<goto "PiriIntro">>
<</link>>
<<elseif $rebelSupport < 1>>
You sense someone watching you... but no one steps forward.
<</if>>
* [[Return to the port hub|Harbor: Port Adalon]]
She doesn't look up right away — too busy hammering a metal bracket into shape beside a gutted ship hull. Sparks fly. She wipes sweat off her brow with the back of a greased glove, then finally glances your way.
<<say "Brana">>You're not one of the quartermaster's errand rats.<</say>> Her voice is dry, clipped, like she doesn’t have time for you unless you’re holding tools or trouble.
Then, a grin. <<say "Brana">>So, which is it? Want something fixed... or broken?<</say>>
[[“I’m looking for work.”|BranaRecruitQuest]]
[[Just passing through.|AdalonDrydocks]]
<<linkappend “Depends. Who’s asking?”>>
She smirks and tosses the hammer onto a crate with a thunk.
<<say "brana">>Someone who knows how to weld a hull blindfolded and shoot a pistol straighter than the Crimson Hand admiral who got me kicked off his ship. Call me Brana. Saltwinds, ex-ish. You?<</say>>
<<choice [[“Name’s not important. What’s this about the Crimson Hand?”|BranaRecruitQuest]]>>
<<choice [[“Just a traveler. I’ll be on my way.”|AdalonDrydocks]]>>
<</linkappend>>
<<set $talla.trust = 1>>
She doesn’t look up. “Five coin to play. Double that to make me care.”
You’ve met **Talla Venn**, a smuggler and card shark with fast hands and faster lies.
<<link "Talk business">>
<<goto "TallaSmugglingJob">>
<</link>>
<<link "Back to the tavern">>
<<goto "DrownedMaiden">>
<</link>>
<<set $piri.trust = 1>>
“You helped the Pact? Then you’re not entirely useless.”
You’ve met **Piri Slate**, a rebel explosives expert with a fuse shorter than her temper.
<<link "Ask about sabotage jobs">>
<<goto "PiriSabotageQuest">>
<</link>>
<<link "Leave the Tidehold">>
<<goto "Tidehold">>
<</link>>
<div class="mutiny-screen">
<h2>⚓ Mutiny at Sea</h2>
<p>The storm never came from the sky. It brewed below deck — in low voices, sidelong glances, hands tightening around cutlass hilts and rum flasks long emptied.</p>
<p>Day by day, the hunger grew. Supplies dwindled. Promises faded into salt and silence. You saw it in their eyes: distrust, fatigue... and finally, the spark of rebellion.</p>
<p>It begins not with a shout, but with quiet steel. Bren bars your cabin door from the outside. Elira won’t meet your gaze. Someone's taken the wheel above.</p>
<p>There is no trial. No vote. Just the crew — <i>your</i> crew — standing before you with lowered heads and drawn weapons.</p>
<p>"We followed you through fire," someone says. "But we won't follow you into the grave."</p>
<p>You step forward, but they don’t flinch. You taught them better than that.</p>
<hr>
<p class="center"><b>The mutiny is complete. Your command ends here.</b></p>
<<link "Return to Main Menu">><<goto "Main Menu">><</link>>
</div><<if $combatRewardChoice>>
<<unset $uiShowHUD>>
<<set _enemyClass = $combatArena.enemy.class>>
<<set _crewSize = setup.getTotalCrew()>>
<<set _reward = setup.getCombatRewards(_enemyClass, _crewSize)>>
<span class="event-banner">🏴 Victory!</span>
<p>The enemy vessel lies in ruins. You may now claim your reward.</p>
<<link "💰 Take Gold">>
<<set $combatRewardChoice = false>>
<<set $ship.gold += _reward.gold>>
<<run setup.exitCombat()>>
<p>You seize <b>${_reward.gold} gold</b> from the wreckage of the <i>${_enemyClass}</i>.</p>
<</link>>
<br>
<<link "🍲 Take Food Supplies">>
<<set $combatRewardChoice = false>>
<<set _item = { name: "Food Ration" }>>
<<for _i = 1; _i <= _reward.rations; _i++>>
<<run $ship.items.push(clone(_item))>>
<</for>>
<p>Your crew recovers <b>${_reward.rations} food rations</b> from the remains of the <i>${_enemyClass}</i>.</p>
<<run setup.exitCombat()>>
<</link>>
<<if $rewardNewCrew > 0>>
<p>🧍♂️ <b><<print $rewardNewCrew>></b> crew member(s) from the wreck decide to join your crew!</p>
<</if>>
<</if>>
<<nobr>>
<<if $combatArena.turn === "player">>
<b>🧭 Orders:</b><br>
<!-- Movement Rose -->
<div class="nav-overlay">
<table class="rose-table">
<tr><td></td><td>
<<link "↑">>
<<run setup.combatMove("up")>>
<<replace "#arena-grid">><<= setup.renderCombatArena() >><</replace>>
<<replace "#combat-status">>
<div id="combat-status">
<b>📊 Status</b><br>
🚢 <b>Your Hull:</b> $combatArena.player.hull /
$combatArena.player.maxHull<br><br>
<b>🛡️ Enemy Info</b><br>
🏴 <b>Faction:</b> $combatArena.enemy.faction<br>
🚢 <b>Ship:</b> $combatArena.enemy.type (Class: $combatArena.enemy.class)<br>
☠️ <b>Enemy Hull:</b> $combatArena.enemy.hull / $combatArena.enemy.maxHull<br>
💥 <b>Cannons:</b> $combatArena.enemy.cannons<br>
⛵ <b>Sails:</b> $combatArena.enemy.sails<br>
👁️ <b>Sight:</b> $combatArena.enemy.sight<br>
</div>
<</replace>>
<<replace "#combat-controls">><<include "Arena: Player Controls">><</replace>>
<</link>>
</td><td></td></tr>
<tr>
<td>
<<link "←">>
<<run setup.combatMove("left")>>
<<replace "#arena-grid">><<= setup.renderCombatArena() >><</replace>>
<<replace "#combat-status">>
<div id="combat-status">
<b>📊 Status</b><br>
🚢 <b>Your Hull:</b> $combatArena.player.hull /
$combatArena.player.maxHull<br><br>
<b>🛡️ Enemy Info</b><br>
🏴 <b>Faction:</b> $combatArena.enemy.faction<br>
🚢 <b>Ship:</b> $combatArena.enemy.type (Class: $combatArena.enemy.class)<br>
☠️ <b>Enemy Hull:</b> $combatArena.enemy.hull / $combatArena.enemy.maxHull<br>
💥 <b>Cannons:</b> $combatArena.enemy.cannons<br>
⛵ <b>Sails:</b> $combatArena.enemy.sails<br>
👁️ <b>Sight:</b> $combatArena.enemy.sight<br>
</div>
<</replace>>
<<replace "#combat-controls">><<include "Arena: Player Controls">><</replace>>
<</link>>
</td>
<td class="rose-center">•</td>
<td>
<<link "→">>
<<run setup.combatMove("right")>>
<<replace "#arena-grid">><<= setup.renderCombatArena() >><</replace>>
<<replace "#combat-status">>
<div id="combat-status">
<b>📊 Status</b><br>
🚢 <b>Your Hull:</b> $combatArena.player.hull /
$combatArena.player.maxHull<br><br>
<b>🛡️ Enemy Info</b><br>
🏴 <b>Faction:</b> $combatArena.enemy.faction<br>
🚢 <b>Ship:</b> $combatArena.enemy.type (Class: $combatArena.enemy.class)<br>
☠️ <b>Enemy Hull:</b> $combatArena.enemy.hull / $combatArena.enemy.maxHull<br>
💥 <b>Cannons:</b> $combatArena.enemy.cannons<br>
⛵ <b>Sails:</b> $combatArena.enemy.sails<br>
👁️ <b>Sight:</b> $combatArena.enemy.sight<br>
</div>
<</replace>>
<<replace "#combat-controls">><<include "Arena: Player Controls">><</replace>>
<</link>>
</td>
</tr>
<tr><td></td><td>
<<link "↓">>
<<run setup.combatMove("down")>>
<<replace "#arena-grid">><<= setup.renderCombatArena() >><</replace>>
<<replace "#combat-status">>
<div id="combat-status">
<b>📊 Status</b><br>
🚢 <b>Your Hull:</b> $combatArena.player.hull /
$combatArena.player.maxHull<br><br>
<b>🛡️ Enemy Info</b><br>
🏴 <b>Faction:</b> $combatArena.enemy.faction<br>
🚢 <b>Ship:</b> $combatArena.enemy.type (Class: $combatArena.enemy.class)<br>
☠️ <b>Enemy Hull:</b> $combatArena.enemy.hull / $combatArena.enemy.maxHull<br>
💥 <b>Cannons:</b> $combatArena.enemy.cannons<br>
⛵ <b>Sails:</b> $combatArena.enemy.sails<br>
👁️ <b>Sight:</b> $combatArena.enemy.sight<br>
</div>
<</replace>>
<<replace "#combat-controls">><<include "Arena: Player Controls">><</replace>>
<</link>>
</td><td></td></tr>
</table>
</div><br>
<!-- Fire -->
<<link "🔥 Fire Cannons">>
<<run setup.combatFireCannons()>>
<<replace "#arena-grid">><<= setup.renderCombatArena() >><</replace>>
<<replace "#combat-status">>
<div id="combat-status">
<b>📊 Status</b><br>
🚢 <b>Your Hull:</b> $combatArena.player.hull /
$combatArena.player.maxHull<br><br>
<b>🛡️ Enemy Info</b><br>
🏴 <b>Faction:</b> $combatArena.enemy.faction<br>
🚢 <b>Ship:</b> $combatArena.enemy.type (Class: $combatArena.enemy.class)<br>
☠️ <b>Enemy Hull:</b> $combatArena.enemy.hull / $combatArena.enemy.maxHull<br>
💥 <b>Cannons:</b> $combatArena.enemy.cannons<br>
⛵ <b>Sails:</b> $combatArena.enemy.sails<br>
👁️ <b>Sight:</b> $combatArena.enemy.sight<br>
</div>
<</replace>>
<<replace "#combat-controls">><<include "Arena: Player Controls">><</replace>>
<</link>><br>
<!-- Boarding -->
<<if Math.abs($combatArena.player.x - $combatArena.enemy.x) + Math.abs($combatArena.player.y - $combatArena.enemy.y) <= 1>>
<<if $combatArena.enemy.hull <= $combatArena.enemy.maxHull * 0.5>>
<<link "⚔️ Board Enemy">><<run setup.combatBoard()>><</link>><br>
<</if>>
<</if>>
<!-- Flee -->
<<link "🏃 Attempt to Flee">><<run setup.combatFlee()>><</link>><br>
<</if>>
<</nobr>><<nobr>>
<<set $location = "Adalon Repair Shop">>
You're in a soot-stained warehouse packed with tools, parts, and crew yelling over steam engines. A half-blind dockmaster gestures at your ship report. <br>
<<set _repairCost = Math.ceil((($ship.maxHull - $ship.hull)))>>
<<set _canRepair = $ship.gold >= _repairCost>>
**Ship Status:** <br>
Hull: <<= $ship.hull>> / <<= $ship.maxHull>> <br>
Gold: <<= $ship.gold>><br>
<<if $ship.hull < $ship.maxHull>>
<<if _canRepair>>
<br>
<<link "Repair Hull (+<<= ($ship.maxHull - $ship.hull)>> HP) for <<= _repairCost>> gold">>
<<set $ship.gold -= _repairCost>>
<<set $ship.hull = $ship.maxHull>>
<<script>>
$('#stats').empty().wiki(setup.renderHUD());
<</script>>
<<replace "#repairStatus">><<print "Hull fully repaired.">><</replace>>
<<goto "AdalonRepairShop">>
<</link>>
<</if>>
<<if !_canRepair>>
<br><span class="disabled">Not enough gold to repair (Cost: <<= _repairCost>>)</span>
<</if>>
<</if>>
<hr>
**Available Upgrades:**<br>
<<for _id, _upgrade range $upgradeCatalog>>
<<if !$ship.upgrades.includes(_id)>>
<<nobr>>
'''<<= _upgrade.name>>''': <<= _upgrade.description>> (<<= _upgrade.cost>> gold)
<<if $ship.gold >= _upgrade.cost>>
<<link " [Buy]">>
<<set $ship.gold -= _upgrade.cost>>
<<push $ship.upgrades _id>>
<<if _id == "reinforcedHull">><<set $ship.maxHull += 25>><</if>>
<<if _id == "extraCannon">><<set $ship.cannons += 1>><</if>>
<<if _id == "crewQuarters">><<set $ship.crewCap += 5>><</if>>
<<script>>
$('#stats').empty().wiki(setup.renderHUD());
<</script>>
<<goto "AdalonRepairShop">>
<</link>>
<<else>>
<span class="disabled"> [Can't afford]</span>
<</if>>
<</nobr>><br>
<</if>>
<</for>>
<hr>
<div id="repairStatus"></div>
* [[Back to Drydocks|AdalonDrydocks]]
<</nobr>><<nobr>>
<<set $location = "Enemy Ship – Boarding">>
You're aboard the <<= $boardingState.name >> — smoke and blood still linger in the air.<br>
Your crew fans out. You must secure the ship room by room.<br>
<br>
---<br>
<br>
**Enemy Faction**: <<= $boardingState.faction>> <br>
**Ship Type**: <<= $boardingState.shipType>> <br>
**Estimated Loot**: <<= $boardingState.lootValue>> gold <br>
**Rooms Remaining**: <<= $boardingState.rooms.filter(r => !r.cleared).length>> / <<= $boardingState.rooms.length>><br>
<br>
---<br>
<br>
<<for _i, _room range $boardingState.rooms>>
<<nobr>>
- <<= _room.name>>:
<<if _room.cleared>>
✅ Cleared
<<else>>
<<link "Enter">>
<<set $currentRoom = _i>>
<<goto "BoardingRoom">>
<</link>>
<</if>>
<</nobr>><br>
<</for>>
<br>
---<br>
<br>
* [[Retreat from boarding|BoardingSummary]]<br>
<</nobr>><<if $combatRewardChoice>>
<<unset $uiShowHUD>>
<<set _enemyClass = $boardingState.class>>
<<set _crewSize = setup.getTotalCrew()>>
<<set _reward = setup.getCombatRewards(_enemyClass, _crewSize)>>
<<set _boardingBonus = {
gold: Math.floor(_reward.gold * 1.5),
rations: _reward.rations * 2
}>>
<<set _splitReward = {
gold: Math.floor(_boardingBonus.gold * 0.5),
rations: Math.floor(_boardingBonus.rations * 0.5)
}>>
<<set _charisma = 0>>
<<for _crew range $ship.crewInteract>>
<<set _charisma += $characters[_crew].boarding?.charisma || 0>>
<</for>>
<<set $rewardNewCrew = Math.floor(_charisma / 3)>>
<<set _shipFlavor = {
light: "The vessel was nimble and lightly manned, but every scrap of cargo helps. Your crew works quickly to clear the decks.",
medium: "A capable ship with real resistance. Your crew spreads out through its corridors, securing hold and helm alike.",
heavy: "A warship—brutal and steel-wrapped. Bloodied but victorious, your crew begins securing the many decks and vaults it held."
}>>
<span class="event-banner">🏴 Boarding Victory!</span>
<p>You’ve taken control of the <b><<print $boardingState.name>></b>.</p>
<p><<print _shipFlavor[$boardingState.class]>></p>
<hr>
<<link "💰 Seize Gold">>
<<set $combatRewardChoice = false>>
<<set $ship.gold += _boardingBonus.gold>>
<p>Your crew collects <b>${_boardingBonus.gold} gold</b> from hidden compartments and the captain’s lockbox.</p>
<<run setup.exitCombat()>>
<</link>>
<br>
<<link "🍲 Secure Food Supplies">>
<<set $combatRewardChoice = false>>
<<set _item = { name: "Food Ration" }>>
<<for _i = 1; _i <= _boardingBonus.rations; _i++>>
<<run $ship.items.push(clone(_item))>>
<</for>>
<p>You recover <b>${_boardingBonus.rations} food rations</b> from the galley and storage decks.</p>
<<run setup.exitCombat()>>
<</link>>
<br>
<<link "⚖ Take Half Gold & Half Rations">>
<<set $combatRewardChoice = false>>
<<set $ship.gold += _splitReward.gold>>
<<set _item = { name: "Food Ration" }>>
<<for _i = 1; _i <= _splitReward.rations; _i++>>
<<run $ship.items.push(clone(_item))>>
<</for>>
<p>You recover <b>${_splitReward.gold} gold</b> and <b>${_splitReward.rations} food rations</b> from the captured ship.</p>
<<run setup.exitCombat()>>
<</link>>
<br>
<<if $rewardNewCrew > 0>>
<p>🧍♂️ <b><<print $rewardNewCrew>></b> crew member(s) from the enemy ship have been convinced by your officers to join you.</p>
<<for _i = 1; _i <= $rewardNewCrew; _i++>>
<<run $ship.crewSupport.push("newRecruited" + random(1000, 9999))>>
<</for>>
<</if>>
<</if>>
<<set _room = $boardingState.rooms[$currentRoom]>>
<<if !_room.started>>
<<set _room.started = true>>
You step into the <<= _room.name >>.
You can hear the enemy crew preparing for defense. Smoke and shouted orders fill the space.
How do you want to approach?
<<link "Charge in (fast assault)">>
<<set _choice = "charge">>
<<goto "BoardingRoom_Resolve">>
<</link>>
<<link "Flank and breach (tactical)">>
<<set _choice = "flank">>
<<goto "BoardingRoom_Resolve">>
<</link>>
<<link "Try to Intimidate them">>
<<set _choice = "intimidate">>
<<goto "BoardingRoom_Resolve">>
<</link>>
<<if $ship.items.some(i => i.name === "Gunpowder")>>
<<link "Throw grenades (use Gunpowder)">>
<<set _choice = "grenade">>
<<goto "BoardingRoom_Resolve">>
<</link>>
<</if>>
<<link "Retreat back to ship layout">>
<<goto "BoardingStart">>
<</link>>
<</if>><<set _room = $boardingState.rooms[$currentRoom]>>
<<switch _choice>>
<<case "charge">>
You storm forward, shouting orders to your crew.
<<set _roll = random(1, 100)>>
<<if _roll >= 75>>
Brutal but effective. You take the room.
<<set _room.cleared = true>>
<<set $boardingState.casualties += random(1, 2)>>
<<elseif _roll >= 50>>
Heavy resistance. You win, but lose 3 crew.
<<set _room.cleared = true>>
<<set $boardingState.casualties += 3>>
<<else>>
You’re pushed back! Retreat!
<<set $boardingState.casualties += 4>>
<</if>>
<</case>>
<<case "flank">>
Your crew splits up and attacks from both sides.
<<set _roll = random(1, 100) + 10>>
<<if _roll >= 70>>
Success! You surprise and rout them with minimal losses.
<<set _room.cleared = true>>
<<set $boardingState.casualties += 1>>
<<else>>
The maneuver stalls. You win, but it costs you.
<<set _room.cleared = true>>
<<set $boardingState.casualties += 3>>
<</if>>
<</case>>
<<case "intimidate">>
You yell through the smoke: "Surrender now and live!"
<<set _rep = $factions[$boardingState.faction]?.rep || 0>>
<<set _roll = random(1, 100) + $ship.crewMorale + (_rep * -1)>>
<<if _roll >= 120>>
They drop their weapons! You take them prisoner.
<<set _room.cleared = true>>
<<set $ship.crewMorale += 5>>
<<else>>
They laugh and attack. You’re forced into a fight.
<<set $boardingState.casualties += random(2, 3)>>
<<set _room.cleared = true>>
<</if>>
<</case>>
<<case "grenade">>
You toss a powder charge into their cover.
<<set _index = $ship.items.findIndex(i => i.name === "Gunpowder")>>
<<if _index >= 0>>
<<set $ship.items.splice(_index, 1)>>
<<set _room.cleared = true>>
A deafening blast clears the room. No survivors. No risk.
<</if>>
<</case>>
<</switch>>
* [[Return to ship layout|BoardingStart]]Brana leans back against a crate, arms crossed, watching you like she’s already running bets in her head.
<<say "Brana">>You said you're looking for work.<</say>>
She nods toward the battered hull beside her. <<say "Brana">>I’ve got no shortage of broken things. But I’m guessing you didn’t come all the way down here to play dockhand.<</say>>
She digs into a satchel and pulls out a folded slip of faded canvas — a **gunner’s belt patch**, ripped clean through. She tosses it to you.
<<say "Brana">>That belonged to *me* before a Sable Corsair snake named **Captain Vale** decided I made a good scapegoat. Now he’s docked in Adalon under a false name, surrounded by Crimson Hand rent-thugs, flashing the sabre and pistol he wore the day he sold me out.<</say>>
Her eyes don’t flinch. <<say "Brana">>I want them. Not destroyed. *Stolen.* The more noise you make, the better.<</say>>
<span id="branaResponse">
<<link "This is about revenge.">>
<<replace "#branaResponse">>
<<say "Brana">>Call it justice with teeth. You get me those weapons, I’ll know you’re not just another tourist in a coat.<</say>>
<br><br>
<<link "Keep talking." "BranaPlan">><</link>>
<</replace>>
<</link>>
<<link "What’s in it for me?">>
<<replace "#branaResponse">>
<<say "Brana">>Aside from getting on the good side of someone who can weld you a cannon mount mid-storm? You want allies — not tagalongs. I’m offering teeth, not trust.<</say>>
<br><br>
<<link "Fine. What’s the job?" "BranaPlan">><</link>>
<</replace>>
<</link>>
<<link "Sounds messy. I’ll pass.">>
<<goto "AdalonDrydocks">>
<</link>>
</span>
Brana grabs a piece of chalk and starts sketching a crude map on the side of a barrel.
<<say "Brana">>Vale’s holed up on a barge called the *Violet Mercy*. Used to be an auction ship for privateers, now it’s just a floating fortress for washed-up killers and their stolen luxuries. Crimson Hand thugs run the decks. Vale? He’s posing as some backer named ‘Elros Vanthe.’ Real subtle.<</say>>
She taps the chalk at three different spots.
<<say "Brana">>Three ways in, far as I see it.<</say>>
1. **Below decks**, through the supply hold. <<say "Brana">>Crates, vents, low guards. Risky if you get caught, but clean if you’re quiet.<</say>>
2. **Main auction floor**, in plain sight. <<say "Brana">>Pose as a buyer, a courier, whatever sells. You’ll need a silver tongue or a forged invite.<</say>>
3. **The hard way.** She smirks. <<say "Brana">>Kick in a door, set a fire, cause a panic. Chaos means fewer questions.<</say>>
She steps back.
<<say "Brana">>Sabre and pistol should be in his quarters above the gallery. Locked. Trapped. Guarded.<</say>>
Then, softer:
<<say "Brana">>Bring them back, and we’re square. Hell — bring them back *loud*, and I’ll owe you more than that.<</say>>
<<choice [[“I’ll sneak in through the supply hold.”->BranaMission_StealthStart]]>>
<<choice [[“Let’s fake it. I’ll bluff my way onto the auction floor.”->BranaMission_SocialStart]]>>
<<choice [[“Loud and messy it is.”->BranaMission_CombatStart]]>>
<<choice [[“Changed my mind. I’m out.”->AdalonDrydocks]]>>
The docks fall quiet as night creeps in. The *Violet Mercy* floats just offshore — bloated, gilded, and lit with strings of dull yellow lanterns. It smells of oil, salt, and expensive perfume.
You slip through the warehouse shadows toward the barge’s rear cargo platform, where supply crates are winched up every evening. A dockhand is arguing with a Crimson Hand guard over missing inventory — a perfect distraction.
<<set $branaMissionPath = "stealth">>
You crouch behind a stack of rope coils, counting guard rotations. There's a narrow maintenance hatch near the hull’s base, half-rusted but unlocked.
[[Wait, then slip in unseen.|BranaStealth_HoldEntry]]
[[Cause a small diversion to draw guards away.|BranaSocial_Distraction]]
[[Back off and try another approach.|BranaPlan]]
You trade your coat for something cleaner and slip a forged buyer’s sigil into your cuff — Brana insisted the name “Varlin & Sons” still carries weight in Crimson Hand circles, assuming no one looks too hard.
The *Violet Mercy* glitters at dock under canvas canopies and golden lanterns. Crimson guards in black-trimmed red coats check every guest — smugglers, slavers, mercs in formal silks.
You step into line, keeping your posture casual.
At the gangplank, a Redcoat guard stops you with an upturned palm.
> “Name and purpose?”
<ul>
<li>[[Feign importance — act like a noble buyer. |BranaSocial_FakeAuthority]]</li>
<li>[[Play it humble — pretend to be a hired courier. |BranaSocial_LowProfile]]</li>
<li>[[Flirt or bribe your way through. |BranaSocial_PersonalApproach]]</li>
<li>[[Step back and find another way in. |BranaPlan]]</li>
</ul>
You crouch behind a coil of tarred rope, eyeing the nearby crane pulley — old, rusted, and hanging low over the stacked crates.
One well-placed strike could drop the whole thing.
You lob a loose rivet at the chain brace. *Clang.* The metal jerks, slips — and the entire load of cargo slams down with a thunderous crash. Crates burst. Shouts erupt instantly.
<<say "Unknown">> “What the hell was that?”<</say>>
<<say "Unknown">>> “Port-side rigging failure! Move!”<</say>>
The guards rush toward the noise, weapons half-drawn, eyes nowhere near you.
Now’s your moment.
You dash to the supply hatch and slip through while the chaos spills across the deck.
<<set $branaDiversionUsed = true>>
[[Enter the ship’s lower hold.|BranaStealth_HoldEntry]]
You crouch low and move when he does — just a half-step behind, keeping to the blind angles. The metal beneath your boots groans once, but the guard doesn’t notice. He mutters to himself about overlong shifts and bad wine.
At the top of the ladder, he pauses to unlock a bulkhead door. You catch a glimpse beyond it: polished wood floors, a chandelier made from ship glass, and a row of carved doors marked for officers.
He steps inside, leaving the door ajar.
You count to five. Then ten. Then slip through behind him.
Inside, muffled voices echo from down the corridor. No alarm. Not yet. To your left: a plaque marked **Captain’s Quarters**. The sabre and pistol are likely inside — behind a locked door.
And just down the hall… Vale’s voice.
<<say "Vale">> “If I find out who’s been leaking manifests to the Dockyard Guild, I’ll have heads. Crimson or not.” <</say>>
You’ve got seconds before this hallway fills with footsteps again.
<ul>
<li>[[Pick the lock and slip inside the captain’s quarters.|BranaStealth_PickLock]]</li>
<li>[[Listen in on Vale’s conversation first.|BranaStealth_ListenIn]]</li>
<li>[[Abort and find a safer route back.|BranaStealth_Climb]]</li>
</ul>
You back off from the ladder and scan the wall of crates and netting to your right.
There — a maintenance gantry, half-rotted and forgotten, suspended above the supply stacks. A small access hatch sits behind it, likely feeding into the ship’s ventilation or officer’s laundry chute.
You climb — slow, careful — using rigging cables and box corners as footholds. The wood groans once under your weight, but doesn’t give.
Inside the hatch, the crawlspace is narrow and sweltering, filled with dust and pipe steam. You move through it inch by inch until dim light spills through a grate ahead.
You peer down.
Below is the hallway outside the **Captain’s Quarters**. No guards in sight — just voices in the distance.
Perfect.
You ease the grate open and drop down, landing silently on the runner carpet just a few feet from the locked door.
[[Approach the door and pick the lock.|BranaStealth_PickLock]]
You press your back to the crate and wait until the guard passes just close enough — muttering about the poor state of the rations and how “this ship smells like varnish and piss.”
Then you move.
A sharp grab, one arm across his throat, the other wrenching his wrist back. He thrashes for a second — two — but you drive your elbow into his temple and feel the fight go limp.
You lower him gently behind a stack of boxes. Breathing. Out cold. No alarm.
His keyring jingles faintly as you lift it from his belt.
<<set $branaKeyring = true>>
The ladder ahead is now unguarded — and you’ve got a quieter way through the captain’s door.
[[Climb to the officers’ gallery.|BranaStealth_KeyAccess]]
The door to the captain’s quarters is locked — old brass, finely made, with a slim internal catch. Not military grade, but expensive. Quiet work, then.
You kneel, steady your breath, and draw out a thin pin and hooked wire.
<<if $hasLockpickKit is true>>
With practiced ease, the tumblers click into place. One. Two.
A final twist — and you're in.
You slip inside and close the door behind you.
[[Enter the captain’s quarters.|BranaStealth_Quarters]]
<<else>>
The lock fights you. You try a hairpin, a blade edge — anything that'll give.
It clicks halfway, then catches. Too loud.
From down the hall, a voice:
<<say "Unknown">> “Did you hear that?” <</say>>
You have seconds before someone checks the door.
<ul>
<li>[[Try to force the lock anyway.|BranaStealth_ForcedEntry]]</li>
<li>[[Abort — duck around the corner before you're seen.|BranaStealth_Climb]]</li>
</ul>
<</if>>
You step past the Captain’s Quarters and inch closer to the voices — keeping low near a half-open supply closet just outside the officers’ lounge.
Vale’s voice is unmistakable: smug, sharp, trying too hard to sound untouchable.
<<say "Unknown">> “You tell your Crimson masters that I’m not paying another damn bribe just to keep the Dockyard Guild quiet. If they leak manifests, I leak *names*.”<</say>>
Another voice — older, colder. “You wouldn’t survive that.”
<<say "Unknown">> “Maybe not. But I’d make sure half your Blackpowder Board went with me.”<</say>>
A tense pause. Then footsteps, sharp and final.
You step back, quietly. They didn’t see you — but the tension in the air says things are brittle between Vale and his so-called protectors.
<<set $branaIntel = true>>
You retreat silently to the Captain’s door. Still locked, but no longer guarded.
[[Pick the lock and enter now.|BranaStealth_PickLock]]
The door shuts with a soft click behind you.
Vale’s quarters are drenched in overcompensation — red velvet cushions, glass decanters, a painting of a burning Saltwinds ship over the writing desk. You spot the **sabre** immediately: mounted on a stand beneath the window, polished and gilded. The **pistol** rests in an open case nearby, nestled in purple felt.
You take them both.
There’s no sign of Vale himself — just the smell of cheap cologne, and papers scattered across the desk.
<ul>
<li>[[Search the desk for anything useful.|BranaStealth_LootDesk]]</li>
<li>[[Get out quietly with the weapons.|BranaStealth_ExitClean]]</li>
<li>[[Leave something behind — a message, or insult.|BranaStealth_LeaveMark]]</li>
</ul>
You grit your teeth and drive the blade into the gap between lock and frame.
A sharp *crack* echoes down the corridor as the latch gives — splinters flying, the door swinging open fast. You duck inside, but footsteps are already thundering in response.
You grab the **sabre** and **pistol** in a blur — no time for subtlety. No time to search for anything else.
Behind you, someone shouts:
<<say "Unknown">> “That door wasn't supposed to open!”<</say>>
A second later, boots slam against the floorboards outside.
<<set $branaMissionResult = "partialSuccess">>
<ul>
<li>[[Escape through the window.|BranaStealth_WindowEscape]]</li>
<li>[[Try to hide inside and wait them out.|BranaStealth_HideFail]]</li>
</ul>
You glance back at the door, still quiet — then move to Vale’s desk.
It’s a mess of ink-splattered maps, wine rings, and half-burned manifests. But beneath the chaos, you find something worth keeping:
- A folded **letter sealed with Sable Corsair wax**, unopened.
- A partially shredded **manifest** linking Vale to stolen Brotherhood cargo.
- A hand-scrawled **note to a Crimson Hand quartermaster**, asking for "permanent silence" on a failed shipment ambush.
<<set $branaIntel = true>>
You pocket the documents and slide the drawer shut just as footsteps echo faintly outside.
Time to move.
[[Leave with the weapons.|BranaStealth_ExitClean]]
You ease the door open just wide enough to check the corridor. Empty. The guards must’ve rotated positions again — or Vale’s voice is still buying you time.
One breath. Then another.
You move fast, silent, retracing your steps back down the ladder. No bootfalls, no shouted alarms. Just the creak of the barge and the distant lapping of water against the hull.
The same hatch you entered is still loose. You slip out through it and drop onto the dockside scaffolding below. One long crouch-walk later, you're in the shadow of the drydocks again — with **Vale’s sabre** wrapped in cloth and his **pistol** tucked under your belt.
<<set $branaMissionResult = "fullSuccess">>
[[Return to Brana.|BranaQuest_Completion]]
You pause by the sabre stand, then glance over at the vanity desk.
Too clean. Too proud.
You dip your finger in a bottle of Vale’s ink, scrawl a Saltwinds symbol across the mirror, then slash the embroidered bed curtain with the edge of his own blade. Just once. Enough to leave doubt and fury in equal measure.
Or maybe you drop a single shell casing on the pillow — Saltwinds-stamped.
Nothing loud. Just enough to whisper:
<<say "Brana">> *I remember what you did.*<</say>>
<<set $branaLeftMark = true>>
Then you turn and leave, just as quiet as you came in.
[[Leave with the weapons.|BranaStealth_ExitClean]]
<<nobr>>
<<if !$branaIntel>><<set $branaIntel = false>><</if>>
<<if !$branaLeftMark>><<set $branaLeftMark = false>><</if>>
<<if !$branaWounded>><<set $branaWounded = false>><</if>>
<<if !$branaSpotted>><<set $branaSpotted = false>><</if>>
<<if !$branaKeyring>><<set $branaKeyring = false>><</if>>
<<if !$branaBribedTwice>><<set $branaBribedTwice = false>><</if>>
You find Brana at her usual post near the drydocks, a welding torch cooling beside a half-fused barrel. She doesn’t look up until you're close.<br><br>
When she sees what’s under your arm — <b>Vale’s sabre</b>, wrapped in canvas, and the weight of his <b>pistol</b> holstered at your side — her shoulders shift. Tension becomes stillness.<br><br>
You set the weapons down.<br><br>
<<if $branaMissionResult is "fullSuccess">>
She inspects them without a word, turning the sabre over in her hands.<br>
<<say "Brana">>Quiet entry. Clean exit. Thought you were all talk.<</say>><br>
<<set $branaTrust = 100>>
<<set $branaBonus = "attack">>
<<if $branaIntel>>
You slide a folded letter onto the crate — Corsair seal still intact.<br>
<<say "Brana">>Didn’t ask for this.<</say>><br>
She pockets it anyway.<br>
<<say "Brana">>Might help me ruin the bastard further down the line.<</say>><br>
<</if>>
<<if $branaLeftMark>>
Brana gives the faintest smirk.<br>
<<say "Brana">>You left a calling card? He’ll be steaming. Good.<</say>><br>
<</if>>
<</if>>
<<if $branaMissionResult is "partialSuccess">>
She eyes the bruises on your jaw, the bandage on your arm.<br>
<<say "Brana">>Messy. But you got the job done.<</say>><br>
<<set $branaTrust = 65>>
<<set $branaBonus = "none">>
<<if $branaIntel>>
You hand her a torn manifest pulled from Vale’s desk.<br>
<<say "Brana">>He’s been playing both sides. This’ll help. Might even use it.<</say>><br>
<</if>>
<<if $branaSpotted>>
<<say "Brana">>Someone made you. Crimson Hand doesn’t forget fast.<</say>><br>
<</if>>
<<if $branaWounded>>
She nods toward your wrapped shoulder.<br>
<<say "Brana">>You got clipped. Vale won’t underestimate you next time.<</say>><br>
<</if>>
<<if $branaBribedTwice>>
<<say "Brana">>You greased more than one palm? Expensive taste.<</say>><br>
<<say "Brana">>Remind me to keep you off payroll.<</say>><br>
<</if>>
<</if>>
She holsters the pistol without ceremony. The sabre stays in her hand for a moment longer, then she lays it beside her — deliberate.<br><br>
Then she looks you dead on.<br>
<<say "Brana">>You want a passenger? I’m in.<</say>><br>
<<say "Brana">>I don’t do loyalty. But I do pay it back.<</say>><br><br>
<<set $ship.crewInteract.push("brana")>>
[[Continue.|AdalonDrydocks]]
<</nobr>>
You spot a narrow window half-covered by a moth-eaten curtain — just wide enough.
You crash through it shoulder-first.
Glass explodes outward as you tumble onto the outer maintenance gantry, scraping metal and bruising ribs on the way down. A Redcoat leans over the railing above, shouting orders.
You don’t wait.
You sprint along the dock scaffold, vault a rusted chainlink fence, and vanish into the shadows of Adalon’s lower yards. Shouts echo behind you but fade fast.
You're scraped up and rattled, but you’re still holding **Vale’s sabre** and **pistol**.
<<set $branaWounded = true>>
[[Return to Brana.|BranaQuest_Completion]]
You duck behind the velvet curtains, barely breathing.
The door slams open. Heavy boots clomp in. A lantern sweeps the room — slow, methodical. You grip the pistol tighter and pray for silence.
Then the curtain yanks back.
<<say "Unknown">> “Found you.”<</say>>
The Redcoat lunges. You slam into him shoulder-first and bolt for the hallway. Someone fires — you hear the crack and feel the sting as it grazes your arm.
You don’t stop.
You crash down the ladder, cut a sharp turn near the cargo hold, and leap from the rear loading dock just as more shouts erupt behind you.
You don’t stop until the *Violet Mercy* is a silhouette behind you, and you’re back in the slums — bleeding, but breathing.
<<set $branaWounded = true>>
<<set $branaSpotted = true>>
[[Return to Brana.|BranaQuest_Completion]]
You climb the ladder without resistance, pausing just before the gallery deck.
Voices echo faintly from deeper in the ship — none nearby.
You reach the Captain’s door and slide the key into the lock. One soft click, no effort. You're in.
The room smells like varnish, tobacco, and polished pride.
The **sabre** gleams beneath the window. The **pistol** lies half-holstered in a felt-lined case. You’ve seen bounty rooms with less personal care.
No sign of Vale. Just silence.
<ul>
<li>[[Grab the weapons and leave clean.|BranaStealth_ExitClean]]</li>
<li>[[Search the desk for documents.|BranaStealth_LootDesk]]</li>
<li>[[Leave something behind — a message, a symbol.|BranaStealth_LeaveMark]]</li>
</ul>
You time your breath to the rhythm of footsteps above. One guard. Two crates. A short lull.
You move.
The hatch groans faintly as you ease it open and slip into the belly of the *Violet Mercy*. The air inside is damp and metallic — a maze of storage crates, chains, and sealed barrels. You duck beneath a swinging lantern and move past a sleeping deckhand slumped against a sack of limes.
Ahead, you spot a narrow catwalk that runs along the inner wall. Above it: an access ladder leading up to the officer’s gallery. That’s where Vale’s quarters will be.
A soft clinking sound breaks the silence — boots on the metal steps. A patrol. One guard heading toward the ladder.
What do you do?
<ul>
<li>[[Wait and shadow the guard.|BranaStealth_Shadow]]</li>
<li>[[Climb the crates to find another route.|BranaStealth_Climb]]</li>
<li>[[Take the guard out quietly.|BranaStealth_Silence]]</li>
</ul>
<<set $metBrana to true>>You straighten your coat, lift your chin, and narrow your eyes just enough to imply you’re far too important to be questioned.
> “Varlin & Sons. Investment review. Three lots, two clients, one who doesn't like delays.”
The guard blinks — then glances at a clipboard. You don’t give him time.
> “You want your officer to explain to Admiral Serrit why his buyer walked? I’ll wait.”
His spine stiffens. He waves you through, clearly unsure whether he just made a mistake.
<<set $branaSocialApproach = "authority">>
[[Enter the auction floor.|BranaSocial_FloorEntry]]
<<set $metBrana to true>>You lower your eyes and nod quickly.
> “Courier, sir. Parcel for a Captain Vanthe. Signed delivery. Was told to hand it over in person.”
The guard hesitates.
> “Vanthe doesn’t like being bothered.”
> “Neither does the client that paid double for personal drop.”
He grunts, already losing interest.
> “Fine. Just stay near the outer ring. You wander, you get pulled.”
<<set $branaSocialApproach = "lowprofile">>
[[Enter the auction floor.|BranaSocial_FloorEntry]]
<<set $metBrana to true>>You tilt your head and offer a half-smile.
> “You don’t get paid enough to argue with buyers, do you?”
The guard squints. You slide a small coin pouch halfway into his hand — enough to feel but not see.
He takes it, doesn’t count it, and steps aside like he’s doing you a favor.
> “Try not to make trouble in there.”
<<set $branaSocialApproach = "bribe">>
[[Enter the auction floor.|BranaSocial_FloorEntry]]
<<set $metBrana to true>>The interior of the *Violet Mercy* is a grotesque display of pirate luxury — lacquered floors, gold-painted beams, and trophy weapons from half a dozen nations nailed to the walls. A string quartet plays something aggressive near the champagne table.
You step into the flow of buyers, mercenaries, and warlords, all pretending not to notice each other’s weapons.
A Crimson Hand auctioneer stands on the far platform, barking out lots: coral-plated armor, spice cargo seized from an Empire freighter, and a “slightly haunted” figurehead.
No sign of Vale — not yet.
You spot three potential leads:
- A **door marked ‘Staff Only’** behind the auction stand
- A pair of **guards near the officer’s stairwell**
- A **drunk buyer** loudly bragging about private deals with someone named Vanthe
<ul>
<li>[[Try to sneak through the staff door.|BranaSocial_SneakBackdoor]]</li>
<li>[[Approach the guards and bluff your way upstairs.|BranaSocial_ApproachGuards]]</li>
<li>[[Listen in on the drunk buyer’s gossip.|BranaSocial_Eavesdrop]]</li>
</ul>
You slip past the drink table and sidestep the servers, moving toward the curtained doorway marked **STAFF ONLY**. A bored-looking assistant steps out carrying a crate of glasses, barely glancing at you.
The moment he turns, you slide in behind him.
Inside: narrow hallways, metal stairs, and utility pipes. It smells like grease and smoked fish. No guards. A corridor curves upward — toward the officer's deck.
You move fast and quiet.
<<set $branaSocialBypass = true>>
[[Climb toward Vale’s quarters.|BranaSocial_QuartersApproach]]
You walk straight toward the stairwell — measured pace, no hesitation. The two guards eye you like wolves sizing up a trespasser.
> “Private deck,” one says.
How do you play it?
<<if $branaSocialApproach is "authority">>
You scoff like they just insulted your rank.
> “Check with auction control. Vanthe requested me directly. Unless you want to explain why his guest was delayed—”
They hesitate — then stand aside.
<<set $branaSocialPush = true>>
[[Head up the stairs.|BranaSocial_QuartersApproach]]
<<elseif $branaSocialApproach is "lowprofile">>
You fumble with a delivery slip and shrug.
> “Parcel for Captain Vanthe. In person.”
They glance at each other, then back at the party.
> “Two minutes. Don’t linger.”
<<set $branaSocialPush = true>>
[[Slip past and head upstairs.|BranaSocial_QuartersApproach]]
<<elseif $branaSocialApproach is "bribe">>
You slide a second coin pouch toward the less attentive guard.
> “Captain said not to be kept waiting.”
He makes the pouch vanish. “Go.”
<<set $branaSocialPush = true>>
<<set $branaBribedTwice = true>>
[[Head upstairs quickly.|BranaSocial_QuartersApproach]]
<</if>>
You drift closer to the drunk buyer, who’s waving a glass and slurring half-truths to a pair of unimpressed couriers.
> “...said the man’s got a damn Empire dueling sabre in his room! Gilded grip! Killed a Saltwinds captain with it, they say—”
The name **Vanthe** slips out again.
> “Doesn’t even use his real name, y’know. Paranoid prick. Pays in Brotherhood scrip and *smiles like a shark.*”
He slams his glass down and starts retelling the story for the third time.
You slip away — now certain: **Vale’s room is on the upper gallery**, and the sabre’s still there.
<<set $branaIntel = true>>
[[Head toward the staff hallway or stairwell.|BranaSocial_FloorEntry]]
The upper gallery is quieter — more polished, more dangerous.
Velvet runners line the hallway. Soft lighting from brass sconces. A guard stands at the far end, arms crossed, eyeing every guest who strays too close to the officer doors.
You spot the plaque: **Captain’s Quarters — V. Vanthe**.
No guards in front of it. But the lock is definitely active — and your welcome on this floor is wearing thin.
You have seconds to act.
<ul>
<li>[[Try the key you lifted from the guard earlier.|BranaStealth_KeyAccess]]</li>
<li>[[Pick the lock quickly before anyone notices.|BranaStealth_PickLock]]</li>
<li>[[Create a scene nearby to draw attention away.|BranaSocial_Distraction]]</li>
<li>[[Abort and head back downstairs.|BranaSocial_FloorEntry]]</li>
</ul>
Brana leans against the wall, her eyes locked onto the guard's. With a sultry smile, she slowly runs her fingers down her neck, lingering at the collar of her dress. The guard's gaze follows her movements, his interest piqued.
Brana: "I'm so clumsy sometimes, aren't I?"
She takes a step closer, her voice a soft purr. "Maybe you could help me clean up this mess?"
Brana reaches out and touches his arm, feeling the muscles tense under her fingers. The guard swallows hard, his eyes darting between her and the spilled wine.
Guard: "I... I should probably—"
Brana cuts him off with a playful laugh, leaning in close. "Oh, come on. It'll be fun."
Her breath is hot against his ear. Brana catches a glimpse of the captain's door, knowing this is her chance. The guard, now fully distracted, doesn't notice as she subtly nods towards the door, giving herself the perfect opening to slip inside.
<img src="gif/brana/init_Mission_1.gif" alt="Captain's Quarters" width="600">
<img src="gif/brana/init_Mission_2.gif" alt="Captain's Quarters" width="600">
<img src="gif/brana/init_Mission_3.gif" alt="Captain's Quarters" width="600">
<img src="gif/brana/init_Mission_4.gif" alt="Captain's Quarters" width="600">
<img src="gif/brana/init_Mission_5.gif" alt="Captain's Quarters" width="600">
<<set $branaSocialDistraction = true>>
[[Slip into the captain’s quarters while the hall is distracted.|BranaStealth_PickLock]]
<<set $metBrana to true>><<set $metBrana to true>><span class="event-banner">🛠 Brana — Crew Deck</span>
She doesn’t look up.
<<say "Brana">>Didn’t peg you for someone who follows through. Most don't.<</say>>
She wipes a grease-smudge from her cheek and gestures vaguely toward her half-melted contraption.
<<say "Brana">>This? Trying to convert a pressure valve into a breather lock. Because clearly, sleep is for soft people.<</say>>
<ul>
<li><<link "Ask about her background.">><<goto "Brana_Backstory">><</link>></li>
<li><<link "Ask if she needs help with the mod.">><<goto "Brana_HelpEngineering">><</link>></li>
<li><<link "Leave her to her work.">><<goto "Crew Deck">><</link>></li>
</ul>
<span class="event-banner">🛠 Brana — Background</span>
She doesn’t answer right away — just leans back, arms crossed, eyes on the ceiling fan.
<<say "Brana">>Born in Saltwinds. Dockside sector, block seven. You know the smell — rust, diesel, and burnt clams.<</say>>
<<say "Brana">>Worked freighters, smuggled fuel, welded ships for fools who couldn’t hold a torch right. Then Vale cut a deal that left three of us holding the bag and him holding medals.<</say>>
She shrugs like it doesn’t matter.
<<say "Brana">>Now I fix things for people who know what they want broken.<</say>>
She doesn’t elaborate. Her hands are already back on the wiring.
<ul>
<li><<link "Ask if she ever plans to go back.">><<goto "Brana_Backstory_Followup">><</link>></li>
<li><<link "Leave her to her work.">><<goto "Crew Deck">><</link>></li>
</ul>
<span class="event-banner">🛠 Brana — Jury-Rigging</span>
You kneel beside the crate. Wires. Pressure valve. Something half-alive and definitely not sanctioned by safety regs.
<<say "Brana">>You want to help? Fine. Hold this like it's a venom crab and don’t let it ground against the frame.<</say>>
You do your best. She works fast — too fast — with the kind of reckless efficiency that’s either genius or suicidal.
Sparks fly once, then stabilize. The valve clicks. A blue LED flares briefly, then fades.
<<say "Brana">>Huh. Not dead. That’s a win.<</say>>
She looks at you — just for a moment.
<<say "Brana">>Might not be a total tourist after all.<</say>>
<<set $branaTrust += 5>>
<ul>
<li><<link "Ask what it's for.">><<goto "Brana_HelpEngineering_Followup">><</link>></li>
<li><<link "Stand up and stretch.">><<goto "Crew Deck">><</link>></li>
</ul>
<span class="event-banner">🌊 Elira — Past Tides</span>
She wipes the edge of her blade with a strip of cloth, slow and deliberate.
<<say "Elira">>Father was Navy. Mother ran herbs for smugglers. I inherited the silence from both.<</say>>
<<say "Elira">>Grew up in the Wreck Isles — mostly rocks and tideblood crabs. Learned quick to cut first, ask later. Didn’t help when Vos came recruiting. I followed. Trusted him. Regretted it.<</say>>
She flicks the cloth aside and starts sharpening again.
<<say "Elira">>Still regret it. But not like before.<</say>>
<ul>
<li><<link "Ask about Vos.">><<goto "Elira_Backstory_Vos">><</link>></li>
<li><<link "Leave her to her silence.">><<goto "Crew Deck">><</link>></li>
</ul>
<span class="event-banner">🌊 Elira — Motive</span>
Elira’s gaze doesn’t break from her knives.
<<say "Elira">>Because you didn’t die when you should have. And because you’re angry — not loud, not reckless. Just… focused.<</say>>
<<say "Elira">>That kind of fire burns clean. It’s rare.<</say>>
She finally looks at you, storm-gray eyes searching for something unspoken.
<<say "Elira">>And because I need a new flag to follow. One I choose.<</say>>
<ul>
<li><<link "Thank her for her trust.">><<set $elira.trust += 1>><<goto "Crew Deck">><</link>></li>
<li><<link "Stay silent, just nod.">><<goto "Crew Deck">><</link>></li>
</ul><span class="event-banner">🪓 Bren — Back in Uniform</span>
He snorts, wiping the blade dry with a frayed cloth.
<<say "Bren">>Bosun on the *Judicator*. Hard ship. Harder crew. We broke stormfronts like they owed us money. I liked that life — until command started caring more about dress buttons than broken backs.<</say>>
<<say "Bren">>Got court-martialed for ‘insubordination.’ Translation: I hit the wrong man. With the right reason.<</say>>
He glances at you sideways.
<<say "Bren">>You ever notice how officers always demand loyalty — but rarely earn it?<</say>>
<ul>
<li><<link "Say you’ve noticed.">><<set $bren.trust += 1>><<goto "Bren_CargoHold">><</link>></li>
<li><<link "Change the subject.">><<goto "Bren_ShipTalk">><</link>></li>
</ul>
<span class="event-banner">🪓 Bren — The Wren</span>
He nods toward the low timbers of the hull.
<<say "Bren">>Sea Wren’s better than she looks. Tiller’s loose, but the frame’s tight. She runs light, slices tide like a hawk. Makes me nervous — I don’t trust things that come easy.<</say>>
<<say "Player">>You don’t trust me either?<</say>>
<<say "Bren">>Didn’t say that. If I didn’t, I wouldn’t be here. Just means I’ll be watching. You slip up — I patch it, or I walk. Fair?<</say>>
<ul>
<li><<link "Fair.">><<set $bren.trust += 1>><<goto "Bren_CargoHold">><</link>></li>
<li><<link "You planning to walk already?">><<set $bren.fear += 1>><<goto "Bren_CargoHold">><</link>></li>
</ul>
<h1>⚓ Welcome, Captain.</h1>
This is a dark, ambitious, and mature interactive story set upon bloodied seas and shifting alliances.
You are a disgraced former officer of the Royal Navy, left for dead after a battle your commanders let you lose. Now, with a damaged ship and a crew held together by grit and desperation, you sail the fractured waters of a pirate world. Your goal?
To rise from exile and forge a new maritime power — strong enough to rival the Empire itself.
<h2>🌊 What to Expect from the current Version</h2>
-This initial Version serves as a demonstrator for the general schematic and idea of the game.
-You will be able to maneuvre through the sea and battle opponents.
-You can already find on new character and recruit them for your cause.
-This recruitment includes a hidden sex scene. Good luck finding it:)
-The idea is, to give you the chance to input your ideas and help guide this game to a great, immersive experience. Therefore I'd be very happy if you could give feedback here or on my patreon page.
-Secondly, I'd like to know if you would be willing to pay for it, if id then include custom fitted AI-generated content. For this of course I would need financial support.
<h2>🌊 What to Expect for the full version</h2>
This is a narrative-rich game featuring:
Political maneuvering between rival pirate factions
Character-driven story arcs, loyalty paths, betrayals, and alliances
Realistic world-building with grounded characters
Optional adult content, flagged and controlled via internal game settings
Tactical naval encounters and resource-driven choices
The tone leans gritty, morally complex, and often intimate. Your decisions will shape not just your fate — but the world’s balance of power.
<h1>🚨 Age Restriction Notice</h1>
This game is intended for players 18 years and older.
It contains mature themes including violence, political intrigue, strong language, and optional adult content.
Player discretion is strongly advised.
If you're not of legal age in your country or uncomfortable with adult themes, we kindly recommend exiting this story.
<h2>🗺️ A Final Word</h2>
This is a work in progress. New characters, systems, and events will be added as development continues. Use the journey to explore, take risks, build trust (or break it), and perhaps — build a pirate nation worth bleeding for.
<<nobr>>
When you're ready...
<div style="text-align: center; margin-top: 1em;">
<<button "✅ I am of legal age – Continue">>
<<goto "Prologue: The Betrayal">>
<</button>>
</div>
<</nobr>>⚓ OLD HARBOUR RECLAMATION PLAN
Player Home Base – evolves over time with resources, quests, and story arcs
🏚️ INITIAL STATE – "Forgotten Haven" (Abandoned Harbor)
Condition: Burned docks, collapsed warehouses, skeletal defenses, derelict buildings.
Feel: Gloomy, fog-choked, atmospheric ruin.
Initial Gameplay:
One-time exploration event ("What happened here?")
Small safe zone for repairs/rest
Unlocks when escaping an early-game encounter
🖼️ Prompt for Image Generation (Stage 0):
An abandoned pirate harbor, broken docks, foggy shoreline, half-sunken ships, moss-covered stone walls, twilight sky, mood of ruin and mystery
🧱 UPGRADE TIERS (4 Stages)
Tier I – “Outpost”
Focus: Establish presence, secure basic defenses
Unlocked Buildings/Features:
Main Dock – For light ship repairs
Captain's Shack – Player command center
Campfire Quarter – Crew rest area
Scouting Tower – Alerts for incoming ships (early warning only)
Gameplay Hooks:
First harbor defense (bandit scouting raid)
Can assign 1 crew member to passive duties
Basic upgrades via scavenged scrap
🖼️ Prompt:
A small pirate outpost built on ruined harbor foundations, makeshift wooden dock, canvas tents, torches lit, partial stone walls, calm ocean, rugged atmosphere
Tier II – “Haven”
Focus: Restore functionality, light commerce
Unlocked Buildings/Features:
Workshop – For upgrades, crafting, salvage
Mess Hall – Boosts morale and gives passive healing
First Trade Post – Brings in traveling smugglers
Dry Dock – Medium ship repairs
Gameplay Hooks:
First faction emissary may arrive
Enemy scouts start noticing the growth
Unlocks basic faction reputation missions from base
🖼️ Prompt:
A restored pirate haven on a rocky coast, repaired stone docks, wooden buildings with sails as rooftops, trading post with crates, lanterns glowing, ship in the bay
Tier III – “Stronghold”
Focus: Defenses, diplomacy, tech
Unlocked Buildings/Features:
Bastion Wall – Defends against large-scale attack events
Signal Tower – Faction emissary arrivals
Secret Armory – Unlocks black market weapons/crew traits
Council Hall – Enables political decisions, pirate diplomacy
Gameplay Hooks:
First full-scale defense event ("The Bastion Hold")
Option to host a faction summit (branching trust or betrayal)
Unlocks espionage or sabotage side quests
🖼️ Prompt:
A fortified pirate stronghold, thick stone bastion walls, watchtowers with signal fires, large ships docked, pirate flags flying, bustling energy, hints of gunpowder smoke
Tier IV – “Freeport of the Rebellion”
Focus: Late-game power base, faction HQ
Unlocked Buildings/Features:
Harbor Guildhall – Organize alliances or pirate lords' council
Master Shipwright – Customize ship design / advanced repairs
War Map Room – Command attacks across the sea
Prison/Crypt – Hold captured officers or secrets
Gameplay Hooks:
Choose to declare independence from Royal Order (huge branching arc)
Infiltrators or betrayal event possible
Can host your own "pirate conclave" finale
🖼️ Prompt:
A thriving pirate capital built into a massive coastal harbor, towering walls, warships docked, pirate banners, bustling port with lights, smoke trails, and rebel energy
🧭 PLACES TO VISIT IN THE HARBOUR (Any Tier)
Place Purpose Notes
Captain’s Cabin / Command Shack Narrative HQ, upgrades, mission board Customizable interior
Dockyards Ship repairs, upgrades Shows different ships docked
Mess Hall / Tavern Crew bonding, recruit options Can trigger random crew events
Workshop Crafting & weapon enhancement Upgrades unlocked via faction tech
War Map Room Plan attacks or defenses Late-game strategic tool
Signal Tower Incoming missions, emissaries Lights up during story events
Market Row / Smuggler's Alley Trade, black market Can host rare merchants
Vault / Treasure Hold Stores plunder Can be robbed during attacks
Crypt / Brig Secrets or prisoners May contain storyline captives
⚔️ SPECIAL EVENTS (Dynamic Triggers)
1. Bastion Defense
Triggered when harbor reaches Tier II or III
Choice-based wave defense using ship, crew, traps
Factions may offer aid or betray you
2. Infiltration / Spy Event
Espionage faction (e.g. Corvid Concord) triggers hidden events
May involve NPC loyalty tests or trait checks
3. Royal Order Siege
Endgame-scale attack
Multi-stage event with fallback points inside the harbor
Player must decide: Hold, Retreat, or Trigger a Doomsday Option
4. Festival of Chains (Ashen Reef Exclusive)
Rebel memorial and uprising ritual
Branching paths based on morality choices (honor, provoke, ban)
5. Conclave of the Free Sea
Political summit hosted by player (Tier IV)
All factions send emissaries
Dynamic diplomacy, betrayal, or alliance<<switch $harborTier>>
<<case 0>>
<<goto "Forgotten_Haven">>
<<case 1>>
<<goto "Outpost_Hub">>
<<case 2>>
<<goto "Haven_Hub">>
<<case 3>>
<<goto "Stronghold_Hub">>
<<case 4>>
<<goto "Freeport_Hub">>
<</switch>>
<<include "Harbor_Tier_Descriptions">>
<div class="harbor-interior captain-shack"></div>
🏠 **Captain’s Shack**
A ramshackle structure of driftwood and salvaged beams, hastily reinforced with ropes and tar. The roof still leaks when it rains — but inside, it's dry enough to lay out charts and make plans.
A battered desk holds torn maps, and a rusted sword hangs where a door should be.
---
📜 **Current Harbor Status**:
Tier: <<print $harborTier>> – <<switch $harborTier>>
<<case 0>> Forgotten Haven
<<case 1>> Outpost
<<case 2>> Haven
<<case 3>> Stronghold
<<case 4>> Freeport of the Rebellion
<</switch>>
👥 Crew Assigned: <<print $crewAssigned>> / <<print $maxCrewAssignments>>
🗒️ Logged Events: <<print $harborEvents.length>>
---
<<if $harborEvents.length > 0>>
🧾 **Recent Developments**:
<ul>
<<for _event range $harborEvents>>
<li><<= _event>></li>
<</for>>
</ul>
<</if>>
---
📌 **Available Actions**:
🔹 <<link "Return to the Outpost">><<goto "Harbor: Lost Port">><</link>>
<<if $harborTier == 1>>
🔹 <<link "Begin Harbor Upgrades">><<goto "Upgrade_Harbor">><</link>>
<</if>>
<<if $harborTier >= 2>>
🔹 <<link "Review Faction Emissary Notes">>Coming soon...<</link>>
<</if>>
<<if $harborTier >= 3>>
🔹 <<link "Access Political Council Records">>Coming soon...<</link>>
<</if>>
---
<<link "⬅ Return to Outpost">><<goto "Outpost_Hub">><</link>>
---
📂 **Notes**:
This shack will eventually upgrade visually and functionally with harbor tiers:
- Tier II adds emissary notes and early diplomacy
- Tier III+ enables political councils and strategic options
- Tier IV allows control of major operations (war map, conclaves)
<<nobr>>
🔭 **Scout Tower**<br><br>
You ascend the old stone lookout, bracing against sea wind. From here, you scan the surrounding waters and horizon.<br><br>
<<set _report = either(
"Nothing but fog and gulls today.",
"You catch a glimpse of sails in the distance — unidentified.",
"A supply barque passed to the south. Might belong to the Royal Order.",
"A strange shimmer off the reef. Could be treasure... or trouble.",
"All clear — though the crew claims they heard distant drums last night.")>>
📋 **Scouting Report**:<br>
🧭 <<= _report>><br><br>
<<if $harborTasks.watch > 0>>
🔍 **Enhanced Vision** (Watch crew bonus):<br>
<<= $harborTasks.watch>> crew currently assigned to watch.<br>
Possible enemy warning or bonus events unlocked.<br><br>
<</if>>
<<link "⬅ Return to Outpost">><<goto "Outpost_Hub">><</link>>
<</nobr>><<nobr>>
<<include "Harbor_Tier_Descriptions">>
<div class="harbor-upgrade-screen"></div>
🛠️ **Harbor Upgrade Station**<br><br>
=> Upgrades don't work yet, clicking the buttons will only use up your items and bug the game!!!!!!!!!
<<switch $harborTier>>
<<case 1>>
🏗️ **Next Tier: Haven (Tier II)**<br>
You begin sketching plans for rebuilding: new walls, better docks, maybe a workshop. It'll take more than hope — and more than scrap.<br><br>
📦 Requirements:
🔹 150 Wood
🔹 1500 Gold<br><br>
📦 Current Inventory:
🔸 Wood: <<= setup.countItems("Wood")>>
🔸 Gold: <<= $ship.gold>><br><br>
<<if setup.countItems("Wood") >= 15 and $ship.gold >= 150>>
<<link "Spend resources to upgrade to Tier II – Haven">>
<<run setup.removeItems("Wood", 150)>>
<<set $ship.gold -= 1500>>
<<set $harborTier = 2>>
<<set $harborEvents.push("Upgraded Harbor to Tier II – Haven")>>
You call your crew together and begin work. Hammers ring out. Ropes pull. The ruin begins to reshape into something usable.<br><br>
<<goto "Harbor: Lost Port">>
<</link>>
<<else>>
You don't have enough resources yet to begin the upgrade.
<</if>>
<<case 2>>
🏗️ **Next Tier: Stronghold (Tier III)**<br>
Plans for thick stone walls, a council hall, and more rise in your thoughts — but not in the harbor. Not yet.<br><br>
🚧 This upgrade path is not yet implemented.<br><br>
<<link "Return to Harbor">><<goto "Harbor: Lost Port">><</link>>
<<case 3>>
🏗️ **Next Tier: Freeport of the Rebellion (Tier IV)**<br>
An independent pirate capital, flying no flag but your own. But the blueprints remain unfinished.<br><br>
🚧 This upgrade path is not yet implemented.<br><br>
<<link "Return to Harbor">><<goto "Harbor: Lost Port">><</link>>
<<case 4>>
✅ **Maximum Tier Reached – Freeport of the Rebellion**<br>
This is the height of your power. No further upgrades available.<br><br>
<<link "Return to Harbor">><<goto "Harbor: Lost Port">><</link>>
<</switch>>
---<br>
<<link "⬅ Return to Outpost">><<goto "Outpost_Hub">><</link>><br>
---<br>
<</nobr>>
:: Campfire_Quarter
<<nobr>>
<<if !$campfireAssigned>> <<set $campfireAssigned = 0>><</if>>
🔥 **Campfire Quarter**<br>
Amid the half-crumbled stone walls and scorched wood, a single fire burns steadily in a crude pit. One of your crew sits nearby — whittling, humming, or staring into the flames in silence.<br><br>
<<if $campfireAssigned === 0>>
No one is currently resting at the fire.<br>
<<if $crewAssigned > 0>>
<<link "Assign a crew member to rest here">>
<<set $campfireAssigned = 1>>
<<set $crewAssigned -= 1>>
<<set $harborEvents.push("A crew member is resting at the campfire. Morale slowly improves.")>>
<<goto "Campfire_Quarter">>
<</link>><br>
<</if>>
<</if>>
<<if $campfireAssigned === 1>>
A crew member is assigned here to rest.<br>
<<link "Call them back to harbor duty">>
<<set $campfireAssigned = 0>>
<<set $crewAssigned += 1>>
<<set $harborEvents.push("Crew returned from rest at the campfire.")>>
<<goto "Campfire_Quarter">>
<</link>><br>
<</if>>
<br>
<<link "⬅ Return to Outpost">><<goto "Outpost_Hub">><</link>>
<</nobr>><<switch $harborTier>>
<<case 0>>🔹 **Tier 0: Forgotten Haven** – Burned-out ruin, offers story-only entry point.
<<case 1>>🔸 **Tier I: Outpost** – Light repairs, rest area, limited upgrades.
<<case 2>>🔸 **Tier II: Haven** – Trade post, medium repairs, emissary visits.
<<case 3>>🔸 **Tier III: Stronghold** – Defense wall, diplomacy hall, black market.
<<case 4>>🔶 **Tier IV: Freeport of the Rebellion** – Pirate HQ, summit ground, full autonomy.
<</switch>>
<<include "Harbor_Tier_Descriptions">>
<div class="harbor-image tier0"></div>
🏚️ **Forgotten Haven** – Tier 0
The tide murmurs against blackened docks, and fog rolls in thick from the sea.
Shattered stone walls encircle you like broken ribs. Half-sunken hulls creak in the distance, and every step echoes in the stillness of ruin.
This place was once alive — a haven for ships, crews, and the lawless — but something burned it down. And yet, it still stands. Barely.
<<if $harborTier is 0>>
<<if !$harborEvents.includes("Discovered Forgotten Haven")>>
<<set $harborEvents.push("Discovered Forgotten Haven")>>
<</if>>
You’ve found the bones of a harbor. There’s little here, but your crew looks to you for direction.
<<link "Scavenge the ruins and begin rebuilding">>
<<set $harborTier = 1>>
<<set $harborEvents.push("Reclaimed the ruins as an Outpost.")>>
<<goto "Harbor: Lost Port">>
<</link>>
<</if>>
<<if $harborTier > 0>>
<<goto "Harbor: Lost Port">>
<</if>>
<<nobr>>
<<include "Harbor_Tier_Descriptions">>
<div class="harbor-image tier1"></div>
<div id="Outpost">
🏴 **Outpost – Tier I**<br><br>
The skeleton of the old harbor has been given a pulse. Smoke from cookfires drifts above canvas tents. Broken walls are braced with fresh timber. The dock creaks, but it holds.<br><br>
You’ve carved a foothold into the ruin. It’s crude — but it’s yours.<br><br>
<<if !$harborEvents.includes("Established Outpost")>>
<<set $harborEvents.push("Established Outpost")>>
<</if>>
📍 **Available Locations**:<br><br>
🔹 <<link "Captain’s Shack (Command)">><<goto "Captain's_Shack">><</link>><br>
🔹 <<link "Dockyards (Light Ship Repairs)">><<goto "Dockyards">><</link>><br>
🔹 <<link "Campfire Quarter (Crew Rest)">><<goto "Campfire_Quarter">><</link>><br>
🔹 <<link "Scout Tower (View Horizon)">><<goto "Scout_Tower">><</link>><br>
<br>---
🧑✈️ **Crew Management**<br>
<<link "Manage harbor crew assignments">><<goto "Assign_Crew_Task">><</link>><br>
<span id="crew-status">👥 Assigned: <<print $crewAssigned>> / <<print $maxCrewAssignments>></span><br>
<br>---
<<if $harborTier == 1>>
🔧 **Upgrade Options**:<br>
<<link "Begin harbor improvements">><<goto "Upgrade_Harbor">><</link>><br>
<</if>>
<br>
<<link "⬅ Return to Ship">><<goto "Crew Deck">><</link>>
</div>
<</nobr>><<nobr>>
<<if !$crewAssignedList>> <<set $crewAssignedList = []>><</if>>
<<if !$harborTasks>> <<set $harborTasks = {}>><</if>>
<<if !$outpostRewards>> <<set $outpostRewards = { wood: 0, gold: 0, repair: 0 }>><</if>>
🏴 **Harbor Crew Management**<br><br>
👥 Crew Assigned: <<print $crewAssigned>> / <<print $maxCrewAssignments>><br>
🧍 Available Support Crew: <<print $ship.crewSupport.length>><br>
<<set _totalAssigned = Object.values($harborTasks).reduce((a, b) => a + b, 0)>>
<<set _unassigned = $crewAssigned - _totalAssigned>>
🧮 Unassigned Harbor Crew: <<= _unassigned>><br><br>
🛠️ **Task Breakdown**<br><br>
🔹 **Watch Duty** — <<= $harborTasks.watch or 0>> assigned<br>
<<if _unassigned > 0>>
<<link "Assign to Watch">>
<<set $harborTasks.watch = ($harborTasks.watch or 0) + 1>>
<<set $crewAssignedList.push({ role: "watch", label: "Watch Duty", dayAssigned: $dayCount })>>
<<goto "Assign_Crew_Task">>
<</link>><br>
<</if>>
<<if ($harborTasks.watch or 0) > 0>>
<<link "Remove from Watch">>
<<set $harborTasks.watch -= 1>>
<<set $crewAssignedList.deleteAt($crewAssignedList.findIndex(t => t.role === "watch"))>>
<<goto "Assign_Crew_Task">>
<</link>><br>
<</if>>
<br>
🔹 **Dock Repair** — <<= $harborTasks.repair or 0>> assigned<br>
<<if _unassigned > 0>>
<<link "Assign to Repair">>
<<set $harborTasks.repair = ($harborTasks.repair or 0) + 1>>
<<set $crewAssignedList.push({ role: "repair", label: "Dock Repair", dayAssigned: $dayCount })>>
<<goto "Assign_Crew_Task">>
<</link>><br>
<</if>>
<<if ($harborTasks.repair or 0) > 0>>
<<link "Remove from Repair">>
<<set $harborTasks.repair -= 1>>
<<set $crewAssignedList.deleteAt($crewAssignedList.findIndex(t => t.role === "repair"))>>
<<goto "Assign_Crew_Task">>
<</link>><br>
<</if>>
<br>
🔹 **Scavenging Runs** — <<= $harborTasks.scavenge or 0>> assigned<br>
<<if _unassigned > 0>>
<<link "Assign to Scavenge">>
<<set $harborTasks.scavenge = ($harborTasks.scavenge or 0) + 1>>
<<set $crewAssignedList.push({ role: "scavenge", label: "Scavenging", dayAssigned: $dayCount })>>
<<goto "Assign_Crew_Task">>
<</link>><br>
<</if>>
<<if ($harborTasks.scavenge or 0) > 0>>
<<link "Remove from Scavenge">>
<<set $harborTasks.scavenge -= 1>>
<<set $crewAssignedList.deleteAt($crewAssignedList.findIndex(t => t.role === "scavenge"))>>
<<goto "Assign_Crew_Task">>
<</link>><br>
<</if>>
<br>
---
### ⚓ Add / Remove Crew from Harbor Duty<br><br>
<<if $crewAssigned < $maxCrewAssignments>>
<<link "Add 1 Crew to Harbor">>
<<if $ship.crewSupport.length > 0>>
<<script>> setup.removeCrew(1, "support");<</script>>
<<set $crewAssigned += 1>>
<<goto "Assign_Crew_Task">>
<</if>>
<</link>><br>
<</if>>
<<if $crewAssigned > 0>>
<<link "Return 1 Crew to Ship">>
<<script>> setup.addCrew(1, "support");<</script>>
<<set $crewAssigned -= 1>>
<<goto "Assign_Crew_Task">>
<</link>><br>
<</if>>
<br>
---
### 🎁 Collect Harbor Rewards<br><br>
<<set _woodGain = ($outpostRewards.wood or 0)>>
<<set _goldGain = ($outpostRewards.gold or 0)>>
<<set _repairGain = ($outpostRewards.repair or 0)>>
<<if _woodGain > 0 or _goldGain > 0 or _repairGain > 0>>
You collect the following resources gathered by your harbor crew:<br>
<<if _woodGain>>🪵 Wood: <<print _woodGain>><br><</if>>
<<if _goldGain>>💰 Gold: <<print _goldGain>><br><</if>>
<<if _repairGain>>🔧 Ship repair: <<print _repairGain>> hull restored<br><</if>>
<<set $ship.gold += _goldGain>>
<<set $outpostRewards.gold = 0>>
<<for _i range [1.._woodGain]>>
<<set $ship.items.push({ name: "Wood" })>>
<</for>>
<<set $outpostRewards.wood = 0>>
<<set $ship.hull = Math.min($ship.maxHull, $ship.hull + _repairGain)>>
<<set $outpostRewards.repair = 0>>
<br>
<</if>>
---
<<link "⬅ Return to Outpost">><<goto "Outpost_Hub">><</link>>
<</nobr>>