Module:Ships data: Difference between revisions

From Corsair Cove Official Wiki
Created to serve up ship data through public api (see bottom of module file for functions)
 
refactored with some constants for more reliable data validation
Line 9: Line 9:
   return allowed
   return allowed
end
end
local NAME = "name"
local TIER = "tier"
local PRINCIPLE_PATH = "principle_path"
local CLASS = "class"
local HYBRID_PATH = "hybrid_path"
local ICON_FILENAME = "icon_filename"
local PIER = "pier"
local DESCRIPTION = "description"
local CONSTRUCTION_COSTS = "construction_costs"
local CREW_TYPES = "crew_types"
local STATS_BASE = "stats_base"
local STATS_CREW_BONUSES = "stats_crew_bonuses"


--- Ordered list of valid field names for ship data.
--- Ordered list of valid field names for ship data.
local REQUIRED_SHIP_FIELDS = {
local REQUIRED_SHIP_FIELDS = {
   "name",
   NAME,
   "tier",
   TIER,
   "principle_path",
   PRINCIPLE_PATH,
   "class",
   CLASS,
   "hybrid_path",
   HYBRID_PATH,
   "icon_filename",
   ICON_FILENAME,
   "pier",
   PIER,
   "description",
   DESCRIPTION,
   "construction_costs",
   CONSTRUCTION_COSTS,
   "crew_types",
   CREW_TYPES,
   "stats_base",
   STATS_BASE,
   "stats_crew_bonuses",
   STATS_CREW_BONUSES,
}
}
local REQUIRED_SHIP_FIELDS_ALLOWED_NAMES = build_allowed_set(REQUIRED_SHIP_FIELDS)
local REQUIRED_SHIP_FIELDS_ALLOWED_NAMES = build_allowed_set(REQUIRED_SHIP_FIELDS)
local PLANKS = "Planks"
local ROPE = "Rope"
local SAILS = "Sails"
local FIGUREHEAD = "Figurehead"
local PITCH = "Pitch"
local FITTINGS = "Fittings"
local JOLLY_ROGER = "Jolly Roger"
local NAVAL_GUN = "Naval Gun"
local STEEL_CHAIN = "Steel Chain"
local SILVER_LINING = "Silver Lining"
local COPPER_LAMP = "Copper Lamp"


--- Ordered list of valid field names for ship construction costs.
--- Ordered list of valid field names for ship construction costs.
local VALID_SHIP_CONSTRUCTION_COSTS = {
local VALID_SHIP_CONSTRUCTION_COSTS = {
   "Planks",
   PLANKS,
   "Rope",
   ROPE,
   "Sails",
   SAILS,
   "Figurehead",
   FIGUREHEAD,
   "Pitch",
   PITCH,
   "Fittings",
   FITTINGS,
   "Jolly Roger",
   JOLLY_ROGER,
   "Naval Gun",
   NAVAL_GUN,
   "Steel Chain",
   STEEL_CHAIN,
   "Silver Lining",
   SILVER_LINING,
   "Copper Lamp",
   COPPER_LAMP,
}
}
local VALID_SHIP_CONSTRUCTION_COSTS_ALLOWED_NAMES = build_allowed_set(VALID_SHIP_CONSTRUCTION_COSTS)
local VALID_SHIP_CONSTRUCTION_COSTS_ALLOWED_NAMES = build_allowed_set(VALID_SHIP_CONSTRUCTION_COSTS)
local SWABBIES    = "Swabbies"
local SCALLYWAGS  = "Scallywags"
local PICAROONS  = "Picaroons"
local BOMBARDIERS = "Bombardiers"
local CROWS_EYES  = "Crow's Eyes"
local BUCCANEERS  = "Buccaneers"
local NAVIGATORS  = "Navigators"
local RENEGADES  = "Renegades"
local MARAUDERS  = "Marauders"
local CORSAIRS  = "Corsairs"


--- Ordered list of valid field names for ship crew types.
--- Ordered list of valid field names for ship crew types.
local VALID_SHIP_CREW_TYPES = {
local VALID_SHIP_CREW_TYPES = {
   "Swabbies",
   SWABBIES,
   "Scallywags",
   SCALLYWAGS,
   "Picaroons",
   PICAROONS,
   "Bombardiers",
   BOMBARDIERS,
   "Crow's Eyes",
   CROWS_EYES,
   "Buccaneers",
   BUCCANEERS,
   "Navigators",
   NAVIGATORS,
   "Renegades",
   RENEGADES,
   "Marauders",
   MARAUDERS,
   "Corsairs",
   CORSAIRS,
}
}
local VALID_SHIP_CREW_TYPES_ALLOWED_NAMES = build_allowed_set(VALID_SHIP_CREW_TYPES)
local VALID_SHIP_CREW_TYPES_ALLOWED_NAMES = build_allowed_set(VALID_SHIP_CREW_TYPES)
local HEALTH =          "Health"
local CREW =            "Crew"
local SUPPLIES =        "Supplies"
local GUN_DAMAGE =      "Gun Damage"
local BOARDING_DAMAGE = "Boarding Damage"
local SPEED =          "Speed"
local MANOEUVRABILITY = "Manoeuvrability"
local ARMOUR =          "Armour"


--- Ordered list of valid field names for ship stats.
--- Ordered list of valid field names for ship stats.
local REQUIRED_SHIP_STATS = {
local REQUIRED_SHIP_STATS = {
   "health",
   HEALTH,
   "crew",
   CREW,
   "supplies",
   SUPPLIES,
   "gun_damage",
   GUN_DAMAGE,
   "boarding_damage",
   BOARDING_DAMAGE,
   "speed",
   SPEED,
   "manoeuvrability",
   MANOEUVRABILITY,
   "armour",
   ARMOUR,
}
}
local REQUIRED_SHIP_STATS_ALLOWED_NAMES = build_allowed_set(REQUIRED_SHIP_STATS)
local REQUIRED_SHIP_STATS_ALLOWED_NAMES = build_allowed_set(REQUIRED_SHIP_STATS)


local HEALTH =         "health"
local SPECIAL = "Special"
local CREW =           "crew"
local PROWLER = "Prowler"
local SUPPLIES =       "supplies"
local PROWLER_PLUS = "Prowler+"
local GUN_DAMAGE =     "gun_damage"
local DESTROYER = "Destroyer"
local BOARDING_DAMAGE = "boarding_damage"
local DESTROYER_PLUS = "Destroyer+"
local SPEED =           "speed"
local HUNTER = "Hunter"
local MANOEUVRABILITY = "manoeuvrability"
local HUNTER_PLUS = "Hunter+"
local ARMOUR =         "armour"
local REAVER = "Reaver"
local REAVER_PLUS = "Reaver+"


--- Set of valid class names.
--- Set of valid class names.
local VALID_CLASS_NAMES = {
local VALID_CLASSES = {
   Special = true,
   SPECIAL,
   Prowler = true,
  PROWLER,
   Destroyer = true,
  PROWLER_PLUS,
   Hunter = true,
  DESTROYER,
   Reaver = true,
  DESTROYER_PLUS,
   HUNTER,
   HUNTER_PLUS,
   REAVER,
   REAVER_PLUS,
}
}
local VALID_CLASSES_ALLOWED_NAMES = build_allowed_set(VALID_CLASSES)
local NONE = "None"
local NOTORIETY = "Notoriety"
local EMPIRE = "Empire"
local SEAFARING = "Seafaring"
local WEALTH = "Wealth"


--- Set of valid Principle Paths.
--- Set of valid Principle Paths.
local VALID_PRINCIPLE_PATHS = {
local VALID_PRINCIPLE_PATHS = {
   None = true,
   NONE,
   Notoriety = true,
   NOTORIETY,
   Empire = true,
   EMPIRE,
   Seafaring = true,
   SEAFARING,
   Wealth = true,
   WEALTH,
}
}
local VALID_PRINCIPLE_PATHS_ALLOWED_NAMES = build_allowed_set(VALID_PRINCIPLE_PATHS)
local SHALLOW_PIER = "Shallow Pier"
local TRADE_PIER = "Trade Pier"
local DEEP_WATER_PIER = "Deep-water Pier"


--- Set of valid pier building names.
--- Set of valid pier building names.
local VALID_PIERS = {
local VALID_PIERS = {
   ["Shallow Pier"] = true,
   SHALLOW_PIER,
   ["Trade Pier"] = true,
   TRADE_PIER,
   ["Deep-water Pier"] = true,
   DEEP_WATER_PIER,
}
}
local VALID_PIERS_ALLOWED_NAMES = build_allowed_set(VALID_PIERS)


local RESOURCE = "resource"
local RESOURCE = "resource"
Line 177: Line 240:
     local message_context = "ships_list[" .. index .. "]"
     local message_context = "ships_list[" .. index .. "]"
     assert(index == ships[ship.name],                    message_context .. " name and lookup index mismatch")
     assert(index == ships[ship.name],                    message_context .. " name and lookup index mismatch")
     assert(VALID_PRINCIPLE_PATHS[ship.principle_path],   message_context .. " invalid principle path: " .. ship.principle_path)
     assert(VALID_PRINCIPLE_PATHS_ALLOWED_NAMES[ship.principle_path], message_context .. " invalid principle path: " .. ship.principle_path)
     assert(VALID_CLASS_NAMES[ship.class:gsub("%+$", "")], message_context .. " invalid class: " .. ship.class)
     assert(VALID_CLASSES_ALLOWED_NAMES[ship.class],                 message_context .. " invalid class: " .. ship.class)
     assert(VALID_PRINCIPLE_PATHS[ship.hybrid_path],         message_context .. " invalid hybrid class: " .. ship.hybrid_path)
     assert(VALID_PRINCIPLE_PATHS_ALLOWED_NAMES[ship.hybrid_path],   message_context .. " invalid hybrid class: " .. ship.hybrid_path)
     assert(VALID_PIERS[ship.pier],                       message_context .. " invalid pier: " .. ship.pier)
     assert(VALID_PIERS_ALLOWED_NAMES[ship.pier],                     message_context .. " invalid pier: " .. ship.pier)
     assert_scalars(ship, REQUIRED_SHIP_FIELDS, REQUIRED_SHIP_FIELDS_ALLOWED_NAMES, all_fields_are_required, message_context)
     assert_scalars(ship, REQUIRED_SHIP_FIELDS, REQUIRED_SHIP_FIELDS_ALLOWED_NAMES, all_fields_are_required, message_context)
     assert_nested_list(ship.construction_costs, RESOURCE, VALID_SHIP_CONSTRUCTION_COSTS,  VALID_SHIP_CONSTRUCTION_COSTS_ALLOWED_NAMES, some_fields_may_be_missing, message_context .. ".construction_costs")
     assert_nested_list(ship.construction_costs, RESOURCE, VALID_SHIP_CONSTRUCTION_COSTS,  VALID_SHIP_CONSTRUCTION_COSTS_ALLOWED_NAMES, some_fields_may_be_missing, message_context .. ".construction_costs")
Line 195: Line 258:
     seen[index] = true
     seen[index] = true
   end
   end
  print('ships_data validated successfully')
end
end


Line 216: Line 280:
     name          = "Landlubber",
     name          = "Landlubber",
     tier          = 1,
     tier          = 1,
     principle_path = "None",
     principle_path = NONE,
     class          = "Special",
     class          = SPECIAL,
     hybrid_path    = "None",
     hybrid_path    = NONE,
     icon_filename  = "T_Ship_Starter.png",
     icon_filename  = "T_Ship_Starter.png",
     pier          = "Shallow Pier",
     pier          = SHALLOW_PIER,
     description    = "The Landlubber is not a good ship: she's slow, underpowered, and doesn't have much space for a crew. But she's more than enough to learn the rudiments of sailing, fighting and plundering.",
     description    = "The Landlubber is not a good ship: she's slow, underpowered, and doesn't have much space for a crew. But she's more than enough to learn the rudiments of sailing, fighting and plundering.",
     construction_costs = {
     construction_costs = {
       { resource = "Planks", qty = 15 },
       { resource = PLANKS, qty = 15 },
     },
     },
     crew_types = {
     crew_types = {
       { type = "Swabbies", qty = 15 },
       { type = SWABBIES, qty = 15 },
     },
     },
     stats_base = {
     stats_base = {
Line 239: Line 303:
     },
     },
     stats_crew_bonuses = {
     stats_crew_bonuses = {
       Swabbies = {
       [SWABBIES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 254: Line 318:
     name          = "Moonlight",
     name          = "Moonlight",
     tier          = 2,
     tier          = 2,
     principle_path = "Notoriety",
     principle_path = NOTORIETY,
     class          = "Prowler",
     class          = PROWLER,
     hybrid_path    = "None",
     hybrid_path    = NONE,
     icon_filename  = "T_Ship_Smuggler_Tier1.png",
     icon_filename  = "T_Ship_Smuggler_Tier1.png",
     pier          = "Shallow Pier",
     pier          = SHALLOW_PIER,
     description    = "Moonlight drifts through the ocean, unseen and untouchable. Her agility makes her the perfect vessel for smuggling goods where none else dare venture. Silent, swift, and gone before dawn.",
     description    = "Moonlight drifts through the ocean, unseen and untouchable. Her agility makes her the perfect vessel for smuggling goods where none else dare venture. Silent, swift, and gone before dawn.",
     construction_costs = {
     construction_costs = {
       { resource = "Planks", qty = 10 },
       { resource = PLANKS, qty = 10 },
       { resource = "Rope",  qty = 20 },
       { resource = ROPE,  qty = 20 },
     },
     },
     crew_types = {
     crew_types = {
       { type = "Swabbies",  qty =  8 },
       { type = SWABBIES,  qty =  8 },
       { type = "Scallywags", qty = 15 },
       { type = SCALLYWAGS, qty = 15 },
     },
     },
     stats_base = {
     stats_base = {
Line 279: Line 343:
     },
     },
     stats_crew_bonuses = {
     stats_crew_bonuses = {
       Swabbies = {
       [SWABBIES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 289: Line 353:
         { stat = ARMOUR,          qty = 0 },
         { stat = ARMOUR,          qty = 0 },
       },
       },
       Scallywags = {
       [SCALLYWAGS] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 304: Line 368:
     name          = "Iron Fist",
     name          = "Iron Fist",
     tier          = 2,
     tier          = 2,
     principle_path = "Empire",
     principle_path = EMPIRE,
     class          = "Destroyer",
     class          = DESTROYER,
     hybrid_path    = "None",
     hybrid_path    = NONE,
     icon_filename  = "T_Ship_Destroyer_Tier1.png",
     icon_filename  = "T_Ship_Destroyer_Tier1.png",
     pier          = "Shallow Pier",
     pier          = SHALLOW_PIER,
     description    = "Iron Fist is a formidable vessel. Built to crush all those who oppose her, while withstanding even the most punishing of assaults. Strong and powerful, few ships have the power to stand against her.",
     description    = "Iron Fist is a formidable vessel. Built to crush all those who oppose her, while withstanding even the most punishing of assaults. Strong and powerful, few ships have the power to stand against her.",
     construction_costs = {
     construction_costs = {
       { resource = "Planks", qty = 10 },
       { resource = PLANKS, qty = 10 },
       { resource = "Rope",  qty = 20 },
       { resource = ROPE,  qty = 20 },
     },
     },
     crew_types = {
     crew_types = {
       { type = "Swabbies",  qty =  8 },
       { type = SWABBIES,  qty =  8 },
       { type = "Picaroons", qty = 15 },
       { type = PICAROONS, qty = 15 },
     },
     },
     stats_base = {
     stats_base = {
Line 329: Line 393:
     },
     },
     stats_crew_bonuses = {
     stats_crew_bonuses = {
       Swabbies = {
       [SWABBIES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 339: Line 403:
         { stat = ARMOUR,          qty = 0 },
         { stat = ARMOUR,          qty = 0 },
       },
       },
       Picaroons = {
       [PICAROONS] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 354: Line 418:
     name          = "Tide Runner",
     name          = "Tide Runner",
     tier          = 2,
     tier          = 2,
     principle_path = "Seafaring",
     principle_path = SEAFARING,
     class          = "Hunter",
     class          = HUNTER,
     hybrid_path    = "None",
     hybrid_path    = NONE,
     icon_filename  = "T_Ship_Hunter_Tier1.png",
     icon_filename  = "T_Ship_Hunter_Tier1.png",
     pier          = "Shallow Pier",
     pier          = SHALLOW_PIER,
     description    = "Tide Runner glides across the ocean with unmatched grace. A sleek vessel built for stealth and pursuit. Her agile design makes her perfect for chasing down prey or slipping away unnoticed.",
     description    = "Tide Runner glides across the ocean with unmatched grace. A sleek vessel built for stealth and pursuit. Her agile design makes her perfect for chasing down prey or slipping away unnoticed.",
     construction_costs = {
     construction_costs = {
       { resource = "Planks", qty = 10 },
       { resource = PLANKS, qty = 10 },
       { resource = "Rope",  qty = 20 },
       { resource = ROPE,  qty = 20 },
     },
     },
     crew_types = {
     crew_types = {
       { type = "Swabbies",  qty = 10 },
       { type = SWABBIES,  qty = 10 },
       { type = "Scallywags", qty = 20 },
       { type = SCALLYWAGS, qty = 20 },
     },
     },
     stats_base = {
     stats_base = {
Line 379: Line 443:
     },
     },
     stats_crew_bonuses = {
     stats_crew_bonuses = {
       Swabbies = {
       [SWABBIES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 389: Line 453:
         { stat = ARMOUR,          qty = 0 },
         { stat = ARMOUR,          qty = 0 },
       },
       },
       Scallywags = {
       [SCALLYWAGS] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 404: Line 468:
     name          = "Sharktooth",
     name          = "Sharktooth",
     tier          = 2,
     tier          = 2,
     principle_path = "Wealth",
     principle_path = WEALTH,
     class          = "Reaver",
     class          = REAVER,
     hybrid_path    = "None",
     hybrid_path    = NONE,
     icon_filename  = "T_Ship_Raider_Tier1.png",
     icon_filename  = "T_Ship_Raider_Tier1.png",
     pier          = "Shallow Pier",
     pier          = SHALLOW_PIER,
     description    = "Sharktooth is a ship that will take whatever she wants, whenever she wants it. Slow but relentless, she is a deadly predator of the ocean waves, sinking her fangs into every ship she targets. Her bite is deadly and few can escape it.",
     description    = "Sharktooth is a ship that will take whatever she wants, whenever she wants it. Slow but relentless, she is a deadly predator of the ocean waves, sinking her fangs into every ship she targets. Her bite is deadly and few can escape it.",
     construction_costs = {
     construction_costs = {
       { resource = "Planks", qty = 10 },
       { resource = PLANKS, qty = 10 },
       { resource = "Rope",  qty = 20 },
       { resource = ROPE,  qty = 20 },
     },
     },
     crew_types = {
     crew_types = {
       { type = "Swabbies",  qty = 10 },
       { type = SWABBIES,  qty = 10 },
       { type = "Picaroons", qty = 20 },
       { type = PICAROONS, qty = 20 },
     },
     },
     stats_base = {
     stats_base = {
Line 429: Line 493:
     },
     },
     stats_crew_bonuses = {
     stats_crew_bonuses = {
       Swabbies = {
       [SWABBIES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 439: Line 503:
         { stat = ARMOUR,          qty = 0 },
         { stat = ARMOUR,          qty = 0 },
       },
       },
       Picaroons = {
       [PICAROONS] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 454: Line 518:
     name          = "Azimuth",
     name          = "Azimuth",
     tier          = 2,
     tier          = 2,
     principle_path = "Notoriety",
     principle_path = NOTORIETY,
     class          = "Prowler+",
     class          = PROWLER_PLUS,
     hybrid_path    = "Empire",
     hybrid_path    = EMPIRE,
     icon_filename  = "T_Ship_Smuggler_Tier1_dot25.png",
     icon_filename  = "T_Ship_Smuggler_Tier1_dot25.png",
     pier          = "Shallow Pier",
     pier          = SHALLOW_PIER,
     description    = "Azimuth was built for adventure, and thus features many small improvements compared to its smaller sibling Moonlight. A bit more of everything can never hurt when chasing the many terrible wonders of the Seven Seas.",
     description    = "Azimuth was built for adventure, and thus features many small improvements compared to its smaller sibling Moonlight. A bit more of everything can never hurt when chasing the many terrible wonders of the Seven Seas.",
     construction_costs = {
     construction_costs = {
       { resource = "Planks", qty = 50 },
       { resource = PLANKS, qty = 50 },
       { resource = "Rope",  qty = 50 },
       { resource = ROPE,  qty = 50 },
     },
     },
     crew_types = {
     crew_types = {
       { type = "Swabbies",  qty =  9 },
       { type = SWABBIES,  qty =  9 },
       { type = "Scallywags", qty = 18 },
       { type = SCALLYWAGS, qty = 18 },
     },
     },
     stats_base = {
     stats_base = {
Line 479: Line 543:
     },
     },
     stats_crew_bonuses = {
     stats_crew_bonuses = {
       Swabbies = {
       [SWABBIES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 489: Line 553:
         { stat = ARMOUR,          qty = 0 },
         { stat = ARMOUR,          qty = 0 },
       },
       },
       Scallywags = {
       [SCALLYWAGS] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 504: Line 568:
     name          = "Steel Edge",
     name          = "Steel Edge",
     tier          = 2,
     tier          = 2,
     principle_path = "Empire",
     principle_path = EMPIRE,
     class          = "Destroyer+",
     class          = DESTROYER_PLUS,
     hybrid_path    = "Seafaring",
     hybrid_path    = SEAFARING,
     icon_filename  = "T_Ship_Destroyer_Tier1_dot25.png",
     icon_filename  = "T_Ship_Destroyer_Tier1_dot25.png",
     pier          = "Shallow Pier",
     pier          = SHALLOW_PIER,
     description    = "An improved design on the Iron Fist, devised in many drunken nights of scheming and plotting. The Steel Edge's slightly larger frame allows for more crew and weaponry, which can make all the difference in the heat of battle.",
     description    = "An improved design on the Iron Fist, devised in many drunken nights of scheming and plotting. The Steel Edge's slightly larger frame allows for more crew and weaponry, which can make all the difference in the heat of battle.",
     construction_costs = {
     construction_costs = {
       { resource = "Planks", qty = 50 },
       { resource = PLANKS, qty = 50 },
       { resource = "Rope",  qty = 50 },
       { resource = ROPE,  qty = 50 },
     },
     },
     crew_types = {
     crew_types = {
       { type = "Swabbies",  qty =  9 },
       { type = SWABBIES,  qty =  9 },
       { type = "Picaroons", qty = 18 },
       { type = PICAROONS, qty = 18 },
     },
     },
     stats_base = {
     stats_base = {
Line 529: Line 593:
     },
     },
     stats_crew_bonuses = {
     stats_crew_bonuses = {
       Swabbies = {
       [SWABBIES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 539: Line 603:
         { stat = ARMOUR,          qty = 0 },
         { stat = ARMOUR,          qty = 0 },
       },
       },
       Picaroons = {
       [PICAROONS] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 554: Line 618:
     name          = "Huracán",
     name          = "Huracán",
     tier          = 2,
     tier          = 2,
     principle_path = "Seafaring",
     principle_path = SEAFARING,
     class          = "Hunter+",
     class          = HUNTER_PLUS,
     hybrid_path    = "Wealth",
     hybrid_path    = WEALTH,
     icon_filename  = "T_Ship_Hunter_Tier1_dot25.png",
     icon_filename  = "T_Ship_Hunter_Tier1_dot25.png",
     pier          = "Shallow Pier",
     pier          = SHALLOW_PIER,
     description    = "Huracán is based on the Tide Runner's blueprints, but has been lovingly tweaked and refined by our passionate shipwrights. Many tiny improvements make her a terrifying predator of the sea. Merchants beware.",
     description    = "Huracán is based on the Tide Runner's blueprints, but has been lovingly tweaked and refined by our passionate shipwrights. Many tiny improvements make her a terrifying predator of the sea. Merchants beware.",
     construction_costs = {
     construction_costs = {
       { resource = "Planks", qty = 50 },
       { resource = PLANKS, qty = 50 },
       { resource = "Rope",  qty = 50 },
       { resource = ROPE,  qty = 50 },
     },
     },
     crew_types = {
     crew_types = {
       { type = "Swabbies",  qty = 10 },
       { type = SWABBIES,  qty = 10 },
       { type = "Scallywags", qty = 20 },
       { type = SCALLYWAGS, qty = 20 },
     },
     },
     stats_base = {
     stats_base = {
Line 579: Line 643:
     },
     },
     stats_crew_bonuses = {
     stats_crew_bonuses = {
       Swabbies = {
       [SWABBIES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 589: Line 653:
         { stat = ARMOUR,          qty = 0 },
         { stat = ARMOUR,          qty = 0 },
       },
       },
       Scallywags = {
       [SCALLYWAGS] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 604: Line 668:
     name          = "Goldseeker",
     name          = "Goldseeker",
     tier          = 2,
     tier          = 2,
     principle_path = "Wealth",
     principle_path = WEALTH,
     class          = "Reaver+",
     class          = REAVER_PLUS,
     hybrid_path    = "Notoriety",
     hybrid_path    = NOTORIETY,
     icon_filename  = "T_Ship_Raider_Tier1_dot25.png",
     icon_filename  = "T_Ship_Raider_Tier1_dot25.png",
     pier          = "Shallow Pier",
     pier          = SHALLOW_PIER,
     description    = "Goldseeker comes well equipped to haul treasure and plunder alike. Her extra large cargo deck can store weeks worth of booty and gives her an edge over the Sharktooth.",
     description    = "Goldseeker comes well equipped to haul treasure and plunder alike. Her extra large cargo deck can store weeks worth of booty and gives her an edge over the Sharktooth.",
     construction_costs = {
     construction_costs = {
       { resource = "Planks", qty = 50 },
       { resource = PLANKS, qty = 50 },
       { resource = "Rope",  qty = 50 },
       { resource = ROPE,  qty = 50 },
     },
     },
     crew_types = {
     crew_types = {
       { type = "Swabbies",  qty = 10 },
       { type = SWABBIES,  qty = 10 },
       { type = "Picaroons", qty = 20 },
       { type = PICAROONS, qty = 20 },
     },
     },
     stats_base = {
     stats_base = {
Line 629: Line 693:
     },
     },
     stats_crew_bonuses = {
     stats_crew_bonuses = {
       Swabbies = {
       [SWABBIES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 639: Line 703:
         { stat = ARMOUR,          qty = 0 },
         { stat = ARMOUR,          qty = 0 },
       },
       },
       Picaroons = {
       [PICAROONS] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 654: Line 718:
     name          = "Nightshade",
     name          = "Nightshade",
     tier          = 3,
     tier          = 3,
     principle_path = "Notoriety",
     principle_path = NOTORIETY,
     class          = "Prowler",
     class          = PROWLER,
     hybrid_path    = "None",
     hybrid_path    = NONE,
     icon_filename  = "T_Ship_Smuggler_Tier1_dot5.png",
     icon_filename  = "T_Ship_Smuggler_Tier1_dot5.png",
     pier          = "Shallow Pier",
     pier          = SHALLOW_PIER,
     description    = "Nightshade is as elusive as they come. The perfect vessel for moving goods or navigating danger. She will outmanoeuvre all those who oppose her and vanish into the night long before anyone catches up.",
     description    = "Nightshade is as elusive as they come. The perfect vessel for moving goods or navigating danger. She will outmanoeuvre all those who oppose her and vanish into the night long before anyone catches up.",
     construction_costs = {
     construction_costs = {
       { resource = "Planks", qty = 50 },
       { resource = PLANKS, qty = 50 },
       { resource = "Rope",  qty = 50 },
       { resource = ROPE,  qty = 50 },
       { resource = "Sails",  qty = 30 },
       { resource = SAILS,  qty = 30 },
     },
     },
     crew_types = {
     crew_types = {
       { type = "Swabbies",    qty = 15 },
       { type = SWABBIES,    qty = 15 },
       { type = "Scallywags",  qty = 20 },
       { type = SCALLYWAGS,  qty = 20 },
       { type = "Crow's Eyes", qty = 20 },
       { type = CROWS_EYES, qty = 20 },
     },
     },
     stats_base = {
     stats_base = {
Line 681: Line 745:
     },
     },
     stats_crew_bonuses = {
     stats_crew_bonuses = {
       Swabbies = {
       [SWABBIES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 691: Line 755:
         { stat = ARMOUR,          qty = 0 },
         { stat = ARMOUR,          qty = 0 },
       },
       },
       Scallywags = {
       [SCALLYWAGS] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 701: Line 765:
         { stat = ARMOUR,          qty =  2.4  /20 },
         { stat = ARMOUR,          qty =  2.4  /20 },
       },
       },
       ["Crow's Eyes"] = {
       [CROWS_EYES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 716: Line 780:
     name          = "Yoke Breaker",
     name          = "Yoke Breaker",
     tier          = 3,
     tier          = 3,
     principle_path = "Empire",
     principle_path = EMPIRE,
     class          = "Destroyer",
     class          = DESTROYER,
     hybrid_path    = "None",
     hybrid_path    = NONE,
     icon_filename  = "T_Ship_Destroyer_Tier1_dot5.png",
     icon_filename  = "T_Ship_Destroyer_Tier1_dot5.png",
     pier          = "Shallow Pier",
     pier          = SHALLOW_PIER,
     description    = "Yoke Breaker is a force on the high seas. Her heavy broadside cannons give her the advantage in every battle she fights. She may be a little slower than most, but she is devastating when she arrives.",
     description    = "Yoke Breaker is a force on the high seas. Her heavy broadside cannons give her the advantage in every battle she fights. She may be a little slower than most, but she is devastating when she arrives.",
     construction_costs = {
     construction_costs = {
       { resource = "Planks", qty = 50 },
       { resource = PLANKS, qty = 50 },
       { resource = "Rope",  qty = 50 },
       { resource = ROPE,  qty = 50 },
       { resource = "Sails",  qty = 30 },
       { resource = SAILS,  qty = 30 },
     },
     },
     crew_types = {
     crew_types = {
       { type = "Swabbies",    qty = 15 },
       { type = SWABBIES,    qty = 15 },
       { type = "Picaroons",  qty = 20 },
       { type = PICAROONS,  qty = 20 },
       { type = "Bombardiers", qty = 20 },
       { type = BOMBARDIERS, qty = 20 },
     },
     },
     stats_base = {
     stats_base = {
Line 743: Line 807:
     },
     },
     stats_crew_bonuses = {
     stats_crew_bonuses = {
       Swabbies = {
       [SWABBIES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 753: Line 817:
         { stat = ARMOUR,          qty = 0 },
         { stat = ARMOUR,          qty = 0 },
       },
       },
       Picaroons = {
       [PICAROONS] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 763: Line 827:
         { stat = ARMOUR,          qty = 16    /20 },
         { stat = ARMOUR,          qty = 16    /20 },
       },
       },
       Bombardiers = {
       [BOMBARDIERS] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 778: Line 842:
     name          = "Tempest",
     name          = "Tempest",
     tier          = 3,
     tier          = 3,
     principle_path = "Seafaring",
     principle_path = SEAFARING,
     class          = "Hunter",
     class          = HUNTER,
     hybrid_path    = "None",
     hybrid_path    = NONE,
     icon_filename  = "T_Ship_Hunter_Tier1_dot5.png",
     icon_filename  = "T_Ship_Hunter_Tier1_dot5.png",
     pier          = "Shallow Pier",
     pier          = SHALLOW_PIER,
     description    = "Tempest is designed to rip merchant ships apart before they even know what hit them. What she lacks in hull strength, she more than makes up for in firepower. She is as fast as she is deadly.",
     description    = "Tempest is designed to rip merchant ships apart before they even know what hit them. What she lacks in hull strength, she more than makes up for in firepower. She is as fast as she is deadly.",
     construction_costs = {
     construction_costs = {
       { resource = "Planks", qty = 50 },
       { resource = PLANKS, qty = 50 },
       { resource = "Rope",  qty = 50 },
       { resource = ROPE,  qty = 50 },
       { resource = "Sails",  qty = 30 },
       { resource = SAILS,  qty = 30 },
     },
     },
     crew_types = {
     crew_types = {
       { type = "Swabbies",    qty = 25 },
       { type = SWABBIES,    qty = 25 },
       { type = "Scallywags",  qty = 30 },
       { type = SCALLYWAGS,  qty = 30 },
       { type = "Bombardiers", qty = 30 },
       { type = BOMBARDIERS, qty = 30 },
     },
     },
     stats_base = {
     stats_base = {
Line 805: Line 869:
     },
     },
     stats_crew_bonuses = {
     stats_crew_bonuses = {
       Swabbies = {
       [SWABBIES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 815: Line 879:
         { stat = ARMOUR,          qty = 0 },
         { stat = ARMOUR,          qty = 0 },
       },
       },
       Scallywags = {
       [SCALLYWAGS] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 825: Line 889:
         { stat = ARMOUR,          qty =  2.4  /30 },
         { stat = ARMOUR,          qty =  2.4  /30 },
       },
       },
       Bombardiers = {
       [BOMBARDIERS] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 840: Line 904:
     name          = "Wolfhound",
     name          = "Wolfhound",
     tier          = 3,
     tier          = 3,
     principle_path = "Wealth",
     principle_path = WEALTH,
     class          = "Reaver",
     class          = REAVER,
     hybrid_path    = "None",
     hybrid_path    = NONE,
     icon_filename  = "T_Ship_Raider_Tier1_dot5.png",
     icon_filename  = "T_Ship_Raider_Tier1_dot5.png",
     pier          = "Shallow Pier",
     pier          = SHALLOW_PIER,
     description    = "Once Wolfhound sets her sights on you, escape is a fool's hope. With a crew built for boarding, she will swarm enemy decks and take everything in her path. Wolfhound is inevitable.",
     description    = "Once Wolfhound sets her sights on you, escape is a fool's hope. With a crew built for boarding, she will swarm enemy decks and take everything in her path. Wolfhound is inevitable.",
     construction_costs = {
     construction_costs = {
       { resource = "Planks", qty = 50 },
       { resource = PLANKS, qty = 50 },
       { resource = "Rope",  qty = 50 },
       { resource = ROPE,  qty = 50 },
       { resource = "Sails",  qty = 30 },
       { resource = SAILS,  qty = 30 },
     },
     },
     crew_types = {
     crew_types = {
       { type = "Swabbies",    qty = 25 },
       { type = SWABBIES,    qty = 25 },
       { type = "Picaroons",  qty = 30 },
       { type = PICAROONS,  qty = 30 },
       { type = "Crow's Eyes", qty = 30 },
       { type = CROWS_EYES, qty = 30 },
     },
     },
     stats_base = {
     stats_base = {
Line 867: Line 931:
     },
     },
     stats_crew_bonuses = {
     stats_crew_bonuses = {
       Swabbies = {
       [SWABBIES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 877: Line 941:
         { stat = ARMOUR,          qty = 0 },
         { stat = ARMOUR,          qty = 0 },
       },
       },
       Picaroons = {
       [PICAROONS] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 887: Line 951:
         { stat = ARMOUR,          qty =  6.4  /30 },
         { stat = ARMOUR,          qty =  6.4  /30 },
       },
       },
       ["Crow's Eyes"] = {
       [CROWS_EYES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 902: Line 966:
     name          = "Rogue",
     name          = "Rogue",
     tier          = 4,
     tier          = 4,
     principle_path = "Notoriety",
     principle_path = NOTORIETY,
     class          = "Prowler",
     class          = PROWLER,
     hybrid_path    = "None",
     hybrid_path    = NONE,
     icon_filename  = "T_Ship_Smuggler_Tier2.png",
     icon_filename  = "T_Ship_Smuggler_Tier2.png",
     pier          = "Trade Pier",
     pier          = TRADE_PIER,
     description    = "The black pitch used to treat Rogue's timber also gave birth to her name. A true smugglers' vessel, Rogue is said to blend into the shadows of the ocean, making her near impossible to track.",
     description    = "The black pitch used to treat Rogue's timber also gave birth to her name. A true smugglers' vessel, Rogue is said to blend into the shadows of the ocean, making her near impossible to track.",
     construction_costs = {
     construction_costs = {
       { resource = "Planks",    qty = 75 },
       { resource = PLANKS,    qty = 75 },
       { resource = "Rope",      qty = 75 },
       { resource = ROPE,      qty = 75 },
       { resource = "Sails",      qty = 50 },
       { resource = SAILS,      qty = 50 },
       { resource = "Figurehead", qty = 10 },
       { resource = FIGUREHEAD, qty = 10 },
     },
     },
     crew_types = {
     crew_types = {
       { type = "Swabbies",    qty = 20 },
       { type = SWABBIES,    qty = 20 },
       { type = "Crow's Eyes", qty = 25 },
       { type = CROWS_EYES, qty = 25 },
       { type = "Buccaneers",  qty = 35 },
       { type = BUCCANEERS,  qty = 35 },
     },
     },
     stats_base = {
     stats_base = {
Line 930: Line 994:
     },
     },
     stats_crew_bonuses = {
     stats_crew_bonuses = {
       Swabbies = {
       [SWABBIES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 940: Line 1,004:
         { stat = ARMOUR,          qty = 0 },
         { stat = ARMOUR,          qty = 0 },
       },
       },
       ["Crow's Eyes"] = {
       [CROWS_EYES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 950: Line 1,014:
         { stat = ARMOUR,          qty =  0.66 /25 },
         { stat = ARMOUR,          qty =  0.66 /25 },
       },
       },
       Buccaneers = {
       [BUCCANEERS] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 965: Line 1,029:
     name          = "Sea Dragon",
     name          = "Sea Dragon",
     tier          = 4,
     tier          = 4,
     principle_path = "Empire",
     principle_path = EMPIRE,
     class          = "Destroyer",
     class          = DESTROYER,
     hybrid_path    = "None",
     hybrid_path    = NONE,
     icon_filename  = "T_Ship_Destroyer_Tier2.png",
     icon_filename  = "T_Ship_Destroyer_Tier2.png",
     pier          = "Trade Pier",
     pier          = TRADE_PIER,
     description    = "Sea Dragon is a fortress on water. Her thick armoured hull and impressive firepower make her the vanguard of any fleet, able to withstand and deal out incredible damage. Once she's in range, there's no escaping her wrath.",
     description    = "Sea Dragon is a fortress on water. Her thick armoured hull and impressive firepower make her the vanguard of any fleet, able to withstand and deal out incredible damage. Once she's in range, there's no escaping her wrath.",
     construction_costs = {
     construction_costs = {
       { resource = "Planks", qty = 75 },
       { resource = PLANKS, qty = 75 },
       { resource = "Rope",  qty = 75 },
       { resource = ROPE,  qty = 75 },
       { resource = "Sails",  qty = 50 },
       { resource = SAILS,  qty = 50 },
       { resource = "Pitch",  qty = 60 },
       { resource = PITCH,  qty = 60 },
     },
     },
     crew_types = {
     crew_types = {
       { type = "Swabbies",    qty = 20 },
       { type = SWABBIES,    qty = 20 },
       { type = "Bombardiers", qty = 25 },
       { type = BOMBARDIERS, qty = 25 },
       { type = "Buccaneers",  qty = 35 },
       { type = BUCCANEERS,  qty = 35 },
     },
     },
     stats_base = {
     stats_base = {
Line 993: Line 1,057:
     },
     },
     stats_crew_bonuses = {
     stats_crew_bonuses = {
       Swabbies = {
       [SWABBIES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,003: Line 1,067:
         { stat = ARMOUR,          qty = 0 },
         { stat = ARMOUR,          qty = 0 },
       },
       },
       Bombardiers = {
       [BOMBARDIERS] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,013: Line 1,077:
         { stat = ARMOUR,          qty =  4.38 /25 },
         { stat = ARMOUR,          qty =  4.38 /25 },
       },
       },
       Buccaneers = {
       [BUCCANEERS] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,028: Line 1,092:
     name          = "Fortune",
     name          = "Fortune",
     tier          = 4,
     tier          = 4,
     principle_path = "Seafaring",
     principle_path = SEAFARING,
     class          = "Hunter",
     class          = HUNTER,
     hybrid_path    = "None",
     hybrid_path    = NONE,
     icon_filename  = "T_Ship_Hunter_Tier2.png",
     icon_filename  = "T_Ship_Hunter_Tier2.png",
     pier          = "Trade Pier",
     pier          = TRADE_PIER,
     description    = "Fortune's pace is a sight to behold. A frigate built for speed and precision, her sleek design allows her to outpace almost any ship on the seas. As fast as she is lethal; merchant vessels don't stand a chance. Her name is said to bring luck to all those who sail her.",
     description    = "Fortune's pace is a sight to behold. A frigate built for speed and precision, her sleek design allows her to outpace almost any ship on the seas. As fast as she is lethal; merchant vessels don't stand a chance. Her name is said to bring luck to all those who sail her.",
     construction_costs = {
     construction_costs = {
       { resource = "Planks",  qty = 75 },
       { resource = PLANKS,  qty = 75 },
       { resource = "Rope",    qty = 75 },
       { resource = ROPE,    qty = 75 },
       { resource = "Sails",    qty = 50 },
       { resource = SAILS,    qty = 50 },
       { resource = "Fittings", qty = 50 },
       { resource = FITTINGS, qty = 50 },
     },
     },
     crew_types = {
     crew_types = {
       { type = "Swabbies",    qty = 30 },
       { type = SWABBIES,    qty = 30 },
       { type = "Bombardiers", qty = 35 },
       { type = BOMBARDIERS, qty = 35 },
       { type = "Navigators",  qty = 45 },
       { type = NAVIGATORS,  qty = 45 },
     },
     },
     stats_base = {
     stats_base = {
Line 1,056: Line 1,120:
     },
     },
     stats_crew_bonuses = {
     stats_crew_bonuses = {
       Swabbies = {
       [SWABBIES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,066: Line 1,130:
         { stat = ARMOUR,          qty = 0 },
         { stat = ARMOUR,          qty = 0 },
       },
       },
       Bombardiers = {
       [BOMBARDIERS] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,076: Line 1,140:
         { stat = ARMOUR,          qty =  0.71 /35 },
         { stat = ARMOUR,          qty =  0.71 /35 },
       },
       },
       Navigators = {
       [NAVIGATORS] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,091: Line 1,155:
     name          = "Providence",
     name          = "Providence",
     tier          = 4,
     tier          = 4,
     principle_path = "Wealth",
     principle_path = WEALTH,
     class          = "Reaver",
     class          = REAVER,
     hybrid_path    = "None",
     hybrid_path    = NONE,
     icon_filename  = "T_Ship_Raider_Tier2.png",
     icon_filename  = "T_Ship_Raider_Tier2.png",
     pier          = "Trade Pier",
     pier          = TRADE_PIER,
     description    = "Providence always sets sail in pursuit of wealth. With a hold made for plunder and a crew ready to raid, whatever ship she targets can kiss goodbye to its booty. When Providence sets sail, riches are sure to follow.",
     description    = "Providence always sets sail in pursuit of wealth. With a hold made for plunder and a crew ready to raid, whatever ship she targets can kiss goodbye to its booty. When Providence sets sail, riches are sure to follow.",
     construction_costs = {
     construction_costs = {
       { resource = "Planks",  qty = 75 },
       { resource = PLANKS,  qty = 75 },
       { resource = "Rope",    qty = 75 },
       { resource = ROPE,    qty = 75 },
       { resource = "Sails",    qty = 50 },
       { resource = SAILS,    qty = 50 },
       { resource = "Fittings", qty = 50 },
       { resource = FITTINGS, qty = 50 },
     },
     },
     crew_types = {
     crew_types = {
       { type = "Swabbies",    qty = 30 },
       { type = SWABBIES,    qty = 30 },
       { type = "Crow's Eyes", qty = 35 },
       { type = CROWS_EYES, qty = 35 },
       { type = "Navigators",  qty = 45 },
       { type = NAVIGATORS,  qty = 45 },
     },
     },
     stats_base = {
     stats_base = {
Line 1,119: Line 1,183:
     },
     },
     stats_crew_bonuses = {
     stats_crew_bonuses = {
       Swabbies = {
       [SWABBIES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,129: Line 1,193:
         { stat = ARMOUR,          qty = 0 },
         { stat = ARMOUR,          qty = 0 },
       },
       },
       ["Crow's Eyes"] = {
       [CROWS_EYES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,139: Line 1,203:
         { stat = ARMOUR,          qty =  1.86 /35 },
         { stat = ARMOUR,          qty =  1.86 /35 },
       },
       },
       Navigators = {
       [NAVIGATORS] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,154: Line 1,218:
     name          = "Vulture",
     name          = "Vulture",
     tier          = 4,
     tier          = 4,
     principle_path = "Notoriety",
     principle_path = NOTORIETY,
     class          = "Prowler+",
     class          = PROWLER_PLUS,
     hybrid_path    = "Empire",
     hybrid_path    = EMPIRE,
     icon_filename  = "T_Ship_Smuggler_Tier2_dot25.png",
     icon_filename  = "T_Ship_Smuggler_Tier2_dot25.png",
     pier          = "Trade Pier",
     pier          = TRADE_PIER,
     description    = "Vulture is outfitted with a high-cleat rigging system, allowing her to maintain speed and manoeuvrability even in the most changeable of winds. A system of sliding floor panels in the storage hold enables the crew to stash and retrieve plunder with startling efficiency.",
     description    = "Vulture is outfitted with a high-cleat rigging system, allowing her to maintain speed and manoeuvrability even in the most changeable of winds. A system of sliding floor panels in the storage hold enables the crew to stash and retrieve plunder with startling efficiency.",
     construction_costs = {
     construction_costs = {
       { resource = "Planks",    qty = 100 },
       { resource = PLANKS,    qty = 100 },
       { resource = "Rope",      qty =  75 },
       { resource = ROPE,      qty =  75 },
       { resource = "Sails",      qty =  75 },
       { resource = SAILS,      qty =  75 },
       { resource = "Figurehead", qty =  15 },
       { resource = FIGUREHEAD, qty =  15 },
     },
     },
     crew_types = {
     crew_types = {
       { type = "Swabbies",    qty = 30 },
       { type = SWABBIES,    qty = 30 },
       { type = "Crow's Eyes", qty = 35 },
       { type = CROWS_EYES, qty = 35 },
       { type = "Buccaneers",  qty = 35 },
       { type = BUCCANEERS,  qty = 35 },
     },
     },
     stats_base = {
     stats_base = {
Line 1,182: Line 1,246:
     },
     },
     stats_crew_bonuses = {
     stats_crew_bonuses = {
       Swabbies = {
       [SWABBIES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,192: Line 1,256:
         { stat = ARMOUR,          qty = 0 },
         { stat = ARMOUR,          qty = 0 },
       },
       },
       ["Crow's Eyes"] = {
       [CROWS_EYES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,202: Line 1,266:
         { stat = ARMOUR,          qty =  1.76 /35 },
         { stat = ARMOUR,          qty =  1.76 /35 },
       },
       },
       Buccaneers = {
       [BUCCANEERS] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,217: Line 1,281:
     name          = "Ravager",
     name          = "Ravager",
     tier          = 4,
     tier          = 4,
     principle_path = "Empire",
     principle_path = EMPIRE,
     class          = "Destroyer+",
     class          = DESTROYER_PLUS,
     hybrid_path    = "Seafaring",
     hybrid_path    = SEAFARING,
     icon_filename  = "T_Ship_Destroyer_Tier2_dot25.png",
     icon_filename  = "T_Ship_Destroyer_Tier2_dot25.png",
     pier          = "Trade Pier",
     pier          = TRADE_PIER,
     description    = "Ravager's cannons are cast from cold-forged iron, hammered into shape at lower temperatures—ensuring higher tolerances, greater accuracy, and greater damage with each cannon she fires. Her hull is reinforced with layered iron plates, designed to absorb and deflect incoming fire.",
     description    = "Ravager's cannons are cast from cold-forged iron, hammered into shape at lower temperatures—ensuring higher tolerances, greater accuracy, and greater damage with each cannon she fires. Her hull is reinforced with layered iron plates, designed to absorb and deflect incoming fire.",
     construction_costs = {
     construction_costs = {
       { resource = "Planks", qty = 100 },
       { resource = PLANKS, qty = 100 },
       { resource = "Rope",  qty =  75 },
       { resource = ROPE,  qty =  75 },
       { resource = "Sails",  qty =  75 },
       { resource = SAILS,  qty =  75 },
       { resource = "Pitch",  qty =  90 },
       { resource = PITCH,  qty =  90 },
     },
     },
     crew_types = {
     crew_types = {
       { type = "Swabbies",    qty = 25 },
       { type = SWABBIES,    qty = 25 },
       { type = "Bombardiers", qty = 40 },
       { type = BOMBARDIERS, qty = 40 },
       { type = "Buccaneers",  qty = 30 },
       { type = BUCCANEERS,  qty = 30 },
     },
     },
     stats_base = {
     stats_base = {
Line 1,245: Line 1,309:
     },
     },
     stats_crew_bonuses = {
     stats_crew_bonuses = {
       Swabbies = {
       [SWABBIES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,255: Line 1,319:
         { stat = ARMOUR,          qty = 0 },
         { stat = ARMOUR,          qty = 0 },
       },
       },
       Bombardiers = {
       [BOMBARDIERS] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,265: Line 1,329:
         { stat = ARMOUR,          qty =  7.33 /40 },
         { stat = ARMOUR,          qty =  7.33 /40 },
       },
       },
       Buccaneers = {
       [BUCCANEERS] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,280: Line 1,344:
     name          = "Catshark",
     name          = "Catshark",
     tier          = 4,
     tier          = 4,
     principle_path = "Seafaring",
     principle_path = SEAFARING,
     class          = "Hunter+",
     class          = HUNTER_PLUS,
     hybrid_path    = "Wealth",
     hybrid_path    = WEALTH,
     icon_filename  = "T_Ship_Hunter_Tier2_dot25.png",
     icon_filename  = "T_Ship_Hunter_Tier2_dot25.png",
     pier          = "Trade Pier",
     pier          = TRADE_PIER,
     description    = "The Catshark's hull is treated with a unique blend of tallow and pine oil allowing her to effortlessly cut through the water. Her sails are a lightweight, wax-coated linen, made to catch even the slightest breeze. No wonder she's faster than ships twice her size.",
     description    = "The Catshark's hull is treated with a unique blend of tallow and pine oil allowing her to effortlessly cut through the water. Her sails are a lightweight, wax-coated linen, made to catch even the slightest breeze. No wonder she's faster than ships twice her size.",
     construction_costs = {
     construction_costs = {
       { resource = "Planks",  qty = 100 },
       { resource = PLANKS,  qty = 100 },
       { resource = "Rope",    qty =  75 },
       { resource = ROPE,    qty =  75 },
       { resource = "Sails",    qty =  75 },
       { resource = SAILS,    qty =  75 },
       { resource = "Fittings", qty =  75 },
       { resource = FITTINGS, qty =  75 },
     },
     },
     crew_types = {
     crew_types = {
       { type = "Swabbies",    qty = 35 },
       { type = SWABBIES,    qty = 35 },
       { type = "Bombardiers", qty = 45 },
       { type = BOMBARDIERS, qty = 45 },
       { type = "Navigators",  qty = 40 },
       { type = NAVIGATORS,  qty = 40 },
     },
     },
     stats_base = {
     stats_base = {
Line 1,308: Line 1,372:
     },
     },
     stats_crew_bonuses = {
     stats_crew_bonuses = {
       Swabbies = {
       [SWABBIES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,318: Line 1,382:
         { stat = ARMOUR,          qty = 0 },
         { stat = ARMOUR,          qty = 0 },
       },
       },
       Bombardiers = {
       [BOMBARDIERS] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,328: Line 1,392:
         { stat = ARMOUR,          qty =  2.53 /45 },
         { stat = ARMOUR,          qty =  2.53 /45 },
       },
       },
       Navigators = {
       [NAVIGATORS] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,343: Line 1,407:
     name          = "Bedlam",
     name          = "Bedlam",
     tier          = 4,
     tier          = 4,
     principle_path = "Wealth",
     principle_path = WEALTH,
     class          = "Reaver+",
     class          = REAVER_PLUS,
     hybrid_path    = "Notoriety",
     hybrid_path    = NOTORIETY,
     icon_filename  = "T_Ship_Raider_Tier2_dot25.png",
     icon_filename  = "T_Ship_Raider_Tier2_dot25.png",
     pier          = "Trade Pier",
     pier          = TRADE_PIER,
     description    = "The Bedlam has been custom-built to endure even the most arduous of raids, while her spring-loaded grappling hooks ensure a fast and secure latch onto enemy ships. The crew quarters are tight, but that only serves to strengthen the bond of those aboard. (We hope.)",
     description    = "The Bedlam has been custom-built to endure even the most arduous of raids, while her spring-loaded grappling hooks ensure a fast and secure latch onto enemy ships. The crew quarters are tight, but that only serves to strengthen the bond of those aboard. (We hope.)",
     construction_costs = {
     construction_costs = {
       { resource = "Planks",  qty = 100 },
       { resource = PLANKS,  qty = 100 },
       { resource = "Rope",    qty =  75 },
       { resource = ROPE,    qty =  75 },
       { resource = "Sails",    qty =  75 },
       { resource = SAILS,    qty =  75 },
       { resource = "Fittings", qty =  75 },
       { resource = FITTINGS, qty =  75 },
     },
     },
     crew_types = {
     crew_types = {
       { type = "Swabbies",    qty = 30 },
       { type = SWABBIES,    qty = 30 },
       { type = "Crow's Eyes", qty = 50 },
       { type = CROWS_EYES, qty = 50 },
       { type = "Navigators",  qty = 35 },
       { type = NAVIGATORS,  qty = 35 },
     },
     },
     stats_base = {
     stats_base = {
Line 1,371: Line 1,435:
     },
     },
     stats_crew_bonuses = {
     stats_crew_bonuses = {
       Swabbies = {
       [SWABBIES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,381: Line 1,445:
         { stat = ARMOUR,          qty = 0 },
         { stat = ARMOUR,          qty = 0 },
       },
       },
       ["Crow's Eyes"] = {
       [CROWS_EYES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,391: Line 1,455:
         { stat = ARMOUR,          qty =  3.05 /50 },
         { stat = ARMOUR,          qty =  3.05 /50 },
       },
       },
       Navigators = {
       [NAVIGATORS] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,406: Line 1,470:
     name          = "Eclipse",
     name          = "Eclipse",
     tier          = 5,
     tier          = 5,
     principle_path = "Notoriety",
     principle_path = NOTORIETY,
     class          = "Prowler",
     class          = PROWLER,
     hybrid_path    = "None",
     hybrid_path    = NONE,
     icon_filename  = "T_Ship_Smuggler_Tier2_dot5.png",
     icon_filename  = "T_Ship_Smuggler_Tier2_dot5.png",
     pier          = "Trade Pier",
     pier          = TRADE_PIER,
     description    = "Eclipse is outfitted with sophisticated 'self-tensioning' lines—a rigging system that automatically adjusts the sails for optimal wind resistance. She has a unique pivoting keel that turns with the rudder, allowing her to maintain speed even through the sharpest of turns.",
     description    = "Eclipse is outfitted with sophisticated 'self-tensioning' lines—a rigging system that automatically adjusts the sails for optimal wind resistance. She has a unique pivoting keel that turns with the rudder, allowing her to maintain speed even through the sharpest of turns.",
     construction_costs = {
     construction_costs = {
       { resource = "Planks",      qty = 125 },
       { resource = PLANKS,      qty = 125 },
       { resource = "Rope",        qty = 125 },
       { resource = ROPE,        qty = 125 },
       { resource = "Sails",      qty = 100 },
       { resource = SAILS,      qty = 100 },
       { resource = "Figurehead",  qty =  20 },
       { resource = FIGUREHEAD,  qty =  20 },
       { resource = "Jolly Roger", qty = 100 },
       { resource = JOLLY_ROGER, qty = 100 },
     },
     },
     crew_types = {
     crew_types = {
       { type = "Swabbies",  qty = 45 },
       { type = SWABBIES,  qty = 45 },
       { type = "Buccaneers", qty = 50 },
       { type = BUCCANEERS, qty = 50 },
       { type = "Renegades",  qty = 70 },
       { type = RENEGADES,  qty = 70 },
     },
     },
     stats_base = {
     stats_base = {
Line 1,435: Line 1,499:
     },
     },
     stats_crew_bonuses = {
     stats_crew_bonuses = {
       Swabbies = {
       [SWABBIES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,445: Line 1,509:
         { stat = ARMOUR,          qty = 0 },
         { stat = ARMOUR,          qty = 0 },
       },
       },
       Buccaneers = {
       [BUCCANEERS] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,455: Line 1,519:
         { stat = ARMOUR,          qty =  5    /50 },
         { stat = ARMOUR,          qty =  5    /50 },
       },
       },
       Renegades = {
       [RENEGADES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,470: Line 1,534:
     name          = "Warlord",
     name          = "Warlord",
     tier          = 5,
     tier          = 5,
     principle_path = "Empire",
     principle_path = EMPIRE,
     class          = "Destroyer",
     class          = DESTROYER,
     hybrid_path    = "None",
     hybrid_path    = NONE,
     icon_filename  = "T_Ship_Destroyer_Tier2_dot5.png",
     icon_filename  = "T_Ship_Destroyer_Tier2_dot5.png",
     pier          = "Trade Pier",
     pier          = TRADE_PIER,
     description    = "Warlord is fitted with a laminated timber hull, reinforced with iron bands at key structural points. This revolutionary combination enables her to survive greater damage than was previously thought possible.",
     description    = "Warlord is fitted with a laminated timber hull, reinforced with iron bands at key structural points. This revolutionary combination enables her to survive greater damage than was previously thought possible.",
     construction_costs = {
     construction_costs = {
       { resource = "Planks",    qty = 125 },
       { resource = PLANKS,    qty = 125 },
       { resource = "Rope",      qty = 125 },
       { resource = ROPE,      qty = 125 },
       { resource = "Sails",    qty = 100 },
       { resource = SAILS,    qty = 100 },
       { resource = "Pitch",    qty = 120 },
       { resource = PITCH,    qty = 120 },
       { resource = "Naval Gun", qty =  40 },
       { resource = NAVAL_GUN, qty =  40 },
     },
     },
     crew_types = {
     crew_types = {
       { type = "Swabbies",  qty = 45 },
       { type = SWABBIES,  qty = 45 },
       { type = "Buccaneers", qty = 50 },
       { type = BUCCANEERS, qty = 50 },
       { type = "Marauders",  qty = 70 },
       { type = MARAUDERS,  qty = 70 },
     },
     },
     stats_base = {
     stats_base = {
Line 1,499: Line 1,563:
     },
     },
     stats_crew_bonuses = {
     stats_crew_bonuses = {
       Swabbies = {
       [SWABBIES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,509: Line 1,573:
         { stat = ARMOUR,          qty = 0 },
         { stat = ARMOUR,          qty = 0 },
       },
       },
       Buccaneers = {
       [BUCCANEERS] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,519: Line 1,583:
         { stat = ARMOUR,          qty = 34.67 /50 },
         { stat = ARMOUR,          qty = 34.67 /50 },
       },
       },
       Marauders = {
       [MARAUDERS] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,534: Line 1,598:
     name          = "Stalker",
     name          = "Stalker",
     tier          = 5,
     tier          = 5,
     principle_path = "Seafaring",
     principle_path = SEAFARING,
     class          = "Hunter",
     class          = HUNTER,
     hybrid_path    = "None",
     hybrid_path    = NONE,
     icon_filename  = "T_Ship_Hunter_Tier2_dot5.png",
     icon_filename  = "T_Ship_Hunter_Tier2_dot5.png",
     pier          = "Trade Pier",
     pier          = TRADE_PIER,
     description    = "Stalker's hull is built around a ribbed frame structure, making her both lightweight and incredibly resilient. The tight weave of her hemp sails reduces air loss, allowing them to catch the wind more effectively. This combination of speed and strength makes Stalker a vessel like no other.",
     description    = "Stalker's hull is built around a ribbed frame structure, making her both lightweight and incredibly resilient. The tight weave of her hemp sails reduces air loss, allowing them to catch the wind more effectively. This combination of speed and strength makes Stalker a vessel like no other.",
     construction_costs = {
     construction_costs = {
       { resource = "Planks",    qty = 125 },
       { resource = PLANKS,    qty = 125 },
       { resource = "Rope",      qty = 125 },
       { resource = ROPE,      qty = 125 },
       { resource = "Sails",    qty = 100 },
       { resource = SAILS,    qty = 100 },
       { resource = "Fittings",  qty = 100 },
       { resource = FITTINGS,  qty = 100 },
       { resource = "Naval Gun", qty =  40 },
       { resource = NAVAL_GUN, qty =  40 },
     },
     },
     crew_types = {
     crew_types = {
       { type = "Swabbies",  qty = 65 },
       { type = SWABBIES,  qty = 65 },
       { type = "Navigators", qty = 70 },
       { type = NAVIGATORS, qty = 70 },
       { type = "Marauders",  qty = 90 },
       { type = MARAUDERS,  qty = 90 },
     },
     },
     stats_base = {
     stats_base = {
Line 1,563: Line 1,627:
     },
     },
     stats_crew_bonuses = {
     stats_crew_bonuses = {
       Swabbies = {
       [SWABBIES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,573: Line 1,637:
         { stat = ARMOUR,          qty = 0 },
         { stat = ARMOUR,          qty = 0 },
       },
       },
       Navigators = {
       [NAVIGATORS] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,583: Line 1,647:
         { stat = ARMOUR,          qty =  5.48 /70 },
         { stat = ARMOUR,          qty =  5.48 /70 },
       },
       },
       Marauders = {
       [MARAUDERS] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,598: Line 1,662:
     name          = "Thingum",
     name          = "Thingum",
     tier          = 5,
     tier          = 5,
     principle_path = "Wealth",
     principle_path = WEALTH,
     class          = "Reaver",
     class          = REAVER,
     hybrid_path    = "None",
     hybrid_path    = NONE,
     icon_filename  = "T_Ship_Raider_Tier2_dot5.png",
     icon_filename  = "T_Ship_Raider_Tier2_dot5.png",
     pier          = "Trade Pier",
     pier          = TRADE_PIER,
     description    = "Thingum is an experiment in chaos. While most of the crew boards enemy ships conventionally, others are launched into the air by a complex system of pulleys and springs, sending them tumbling onto enemy decks before anyone knows what's happened. Injuries are expected, but the surprise is worth the cost.",
     description    = "Thingum is an experiment in chaos. While most of the crew boards enemy ships conventionally, others are launched into the air by a complex system of pulleys and springs, sending them tumbling onto enemy decks before anyone knows what's happened. Injuries are expected, but the surprise is worth the cost.",
     construction_costs = {
     construction_costs = {
       { resource = "Planks",      qty = 125 },
       { resource = PLANKS,      qty = 125 },
       { resource = "Rope",        qty = 125 },
       { resource = ROPE,        qty = 125 },
       { resource = "Sails",      qty = 100 },
       { resource = SAILS,      qty = 100 },
       { resource = "Fittings",    qty = 100 },
       { resource = FITTINGS,    qty = 100 },
       { resource = "Steel Chain", qty =  50 },
       { resource = STEEL_CHAIN, qty =  50 },
     },
     },
     crew_types = {
     crew_types = {
       { type = "Swabbies",  qty = 65 },
       { type = SWABBIES,  qty = 65 },
       { type = "Navigators", qty = 70 },
       { type = NAVIGATORS, qty = 70 },
       { type = "Renegades",  qty = 90 },
       { type = RENEGADES,  qty = 90 },
     },
     },
     stats_base = {
     stats_base = {
Line 1,627: Line 1,691:
     },
     },
     stats_crew_bonuses = {
     stats_crew_bonuses = {
       Swabbies = {
       [SWABBIES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,637: Line 1,701:
         { stat = ARMOUR,          qty = 0 },
         { stat = ARMOUR,          qty = 0 },
       },
       },
       Navigators = {
       [NAVIGATORS] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,647: Line 1,711:
         { stat = ARMOUR,          qty = 12.89 /70 },
         { stat = ARMOUR,          qty = 12.89 /70 },
       },
       },
       Renegades = {
       [RENEGADES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,662: Line 1,726:
     name          = "Wraith",
     name          = "Wraith",
     tier          = 6,
     tier          = 6,
     principle_path = "Notoriety",
     principle_path = NOTORIETY,
     class          = "Prowler",
     class          = PROWLER,
     hybrid_path    = "None",
     hybrid_path    = NONE,
     icon_filename  = "T_Ship_Smuggler_Tier3.png",
     icon_filename  = "T_Ship_Smuggler_Tier3.png",
     pier          = "Deep-water Pier",
     pier          = DEEP_WATER_PIER,
     description    = "Wraith's hull is crafted from lightweight, tar-slick timbers, allowing her to slip through the seas with unmatched grace. Her rigging system is the culmination of years of research, allowing her to change direction in an instant. Wraith moves through the water like a shadow—smooth, swift and impossibly fast.",
     description    = "Wraith's hull is crafted from lightweight, tar-slick timbers, allowing her to slip through the seas with unmatched grace. Her rigging system is the culmination of years of research, allowing her to change direction in an instant. Wraith moves through the water like a shadow—smooth, swift and impossibly fast.",
     construction_costs = {
     construction_costs = {
       { resource = "Planks",        qty = 175 },
       { resource = PLANKS,        qty = 175 },
       { resource = "Rope",          qty = 175 },
       { resource = ROPE,          qty = 175 },
       { resource = "Sails",        qty = 150 },
       { resource = SAILS,        qty = 150 },
       { resource = "Figurehead",    qty =  30 },
       { resource = FIGUREHEAD,    qty =  30 },
       { resource = "Jolly Roger",  qty = 150 },
       { resource = JOLLY_ROGER,  qty = 150 },
       { resource = "Silver Lining", qty =  30 },
       { resource = SILVER_LINING, qty =  30 },
     },
     },
     crew_types = {
     crew_types = {
       { type = "Swabbies",  qty = 105 },
       { type = SWABBIES,  qty = 105 },
       { type = "Renegades", qty = 110 },
       { type = RENEGADES, qty = 110 },
       { type = "Corsairs",  qty = 140 },
       { type = CORSAIRS,  qty = 140 },
     },
     },
     stats_base = {
     stats_base = {
Line 1,692: Line 1,756:
     },
     },
     stats_crew_bonuses = {
     stats_crew_bonuses = {
       Swabbies = {
       [SWABBIES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,702: Line 1,766:
         { stat = ARMOUR,          qty = 0 },
         { stat = ARMOUR,          qty = 0 },
       },
       },
       Renegades = {
       [RENEGADES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,712: Line 1,776:
         { stat = ARMOUR,          qty =  2.87 /110 },
         { stat = ARMOUR,          qty =  2.87 /110 },
       },
       },
       Corsairs = {
       [CORSAIRS] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,727: Line 1,791:
     name          = "Wrath Bringer",
     name          = "Wrath Bringer",
     tier          = 6,
     tier          = 6,
     principle_path = "Empire",
     principle_path = EMPIRE,
     class          = "Destroyer",
     class          = DESTROYER,
     hybrid_path    = "None",
     hybrid_path    = NONE,
     icon_filename  = "T_Ship_Destroyer_Tier3.png",
     icon_filename  = "T_Ship_Destroyer_Tier3.png",
     pier          = "Deep-water Pier",
     pier          = DEEP_WATER_PIER,
     description    = "Wrath Bringer is a war machine like no other. Her hull is reinforced with triple-layered iron plates, each layer tempered to withstand even the heaviest cannon fire. Her cannons are precision-bored for maximum damage, capable of levelling fortresses with a single broadside. The embodiment of pure destruction.",
     description    = "Wrath Bringer is a war machine like no other. Her hull is reinforced with triple-layered iron plates, each layer tempered to withstand even the heaviest cannon fire. Her cannons are precision-bored for maximum damage, capable of levelling fortresses with a single broadside. The embodiment of pure destruction.",
     construction_costs = {
     construction_costs = {
       { resource = "Planks",      qty = 175 },
       { resource = PLANKS,      qty = 175 },
       { resource = "Rope",        qty = 175 },
       { resource = ROPE,        qty = 175 },
       { resource = "Sails",      qty = 150 },
       { resource = SAILS,      qty = 150 },
       { resource = "Pitch",      qty = 180 },
       { resource = PITCH,      qty = 180 },
       { resource = "Naval Gun",  qty =  60 },
       { resource = NAVAL_GUN,  qty =  60 },
       { resource = "Copper Lamp", qty =  75 },
       { resource = COPPER_LAMP, qty =  75 },
     },
     },
     crew_types = {
     crew_types = {
       { type = "Swabbies",  qty = 105 },
       { type = SWABBIES,  qty = 105 },
       { type = "Marauders", qty = 110 },
       { type = MARAUDERS, qty = 110 },
       { type = "Corsairs",  qty = 140 },
       { type = CORSAIRS,  qty = 140 },
     },
     },
     stats_base = {
     stats_base = {
Line 1,757: Line 1,821:
     },
     },
     stats_crew_bonuses = {
     stats_crew_bonuses = {
       Swabbies = {
       [SWABBIES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,767: Line 1,831:
         { stat = ARMOUR,          qty = 0 },
         { stat = ARMOUR,          qty = 0 },
       },
       },
       Marauders = {
       [MARAUDERS] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,777: Line 1,841:
         { stat = ARMOUR,          qty = 16.19 /110 },
         { stat = ARMOUR,          qty = 16.19 /110 },
       },
       },
       Corsairs = {
       [CORSAIRS] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,792: Line 1,856:
     name          = "Neptune",
     name          = "Neptune",
     tier          = 6,
     tier          = 6,
     principle_path = "Seafaring",
     principle_path = SEAFARING,
     class          = "Hunter",
     class          = HUNTER,
     hybrid_path    = "None",
     hybrid_path    = NONE,
     icon_filename  = "T_Ship_Hunter_Tier3.png",
     icon_filename  = "T_Ship_Hunter_Tier3.png",
     pier          = "Deep-water Pier",
     pier          = DEEP_WATER_PIER,
     description    = "Neptune is the pinnacle of hunting vessels, designed for speed, precision, and ruthless efficiency. Her hull is crafted from lightweight ironwood and treated with a unique blend of whale oil and resin that reduces water friction to near zero. Her sails are the highest quality sun-cured flax making Neptune untouchable on the open sea.",
     description    = "Neptune is the pinnacle of hunting vessels, designed for speed, precision, and ruthless efficiency. Her hull is crafted from lightweight ironwood and treated with a unique blend of whale oil and resin that reduces water friction to near zero. Her sails are the highest quality sun-cured flax making Neptune untouchable on the open sea.",
     construction_costs = {
     construction_costs = {
       { resource = "Planks",        qty = 175 },
       { resource = PLANKS,        qty = 175 },
       { resource = "Rope",          qty = 175 },
       { resource = ROPE,          qty = 175 },
       { resource = "Sails",        qty = 150 },
       { resource = SAILS,        qty = 150 },
       { resource = "Fittings",      qty = 150 },
       { resource = FITTINGS,      qty = 150 },
       { resource = "Naval Gun",    qty =  60 },
       { resource = NAVAL_GUN,    qty =  60 },
       { resource = "Silver Lining", qty =  30 },
       { resource = SILVER_LINING, qty =  30 },
     },
     },
     crew_types = {
     crew_types = {
       { type = "Swabbies",  qty = 130 },
       { type = SWABBIES,  qty = 130 },
       { type = "Marauders", qty = 135 },
       { type = MARAUDERS, qty = 135 },
       { type = "Corsairs",  qty = 165 },
       { type = CORSAIRS,  qty = 165 },
     },
     },
     stats_base = {
     stats_base = {
Line 1,822: Line 1,886:
     },
     },
     stats_crew_bonuses = {
     stats_crew_bonuses = {
       Swabbies = {
       [SWABBIES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,832: Line 1,896:
         { stat = ARMOUR,          qty = 0 },
         { stat = ARMOUR,          qty = 0 },
       },
       },
       Marauders = {
       [MARAUDERS] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,842: Line 1,906:
         { stat = ARMOUR,          qty =  2.57 /135 },
         { stat = ARMOUR,          qty =  2.57 /135 },
       },
       },
       Corsairs = {
       [CORSAIRS] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,857: Line 1,921:
     name          = "Loki",
     name          = "Loki",
     tier          = 6,
     tier          = 6,
     principle_path = "Wealth",
     principle_path = WEALTH,
     class          = "Reaver",
     class          = REAVER,
     hybrid_path    = "None",
     hybrid_path    = NONE,
     icon_filename  = "T_Ship_Raider_Tier3.png",
     icon_filename  = "T_Ship_Raider_Tier3.png",
     pier          = "Deep-water Pier",
     pier          = DEEP_WATER_PIER,
     description    = "Loki is built to conquer and claim, boasting custom-forged grappling arms that extend far faster than a traditional boarding system ever could. Her decks are designed to hold maximum plunder, while her wide hull enables a crew twice the size of a standard brig. Loki stands unrivalled as the ultimate raiding vessel.",
     description    = "Loki is built to conquer and claim, boasting custom-forged grappling arms that extend far faster than a traditional boarding system ever could. Her decks are designed to hold maximum plunder, while her wide hull enables a crew twice the size of a standard brig. Loki stands unrivalled as the ultimate raiding vessel.",
     construction_costs = {
     construction_costs = {
       { resource = "Planks",      qty = 175 },
       { resource = PLANKS,      qty = 175 },
       { resource = "Rope",        qty = 175 },
       { resource = ROPE,        qty = 175 },
       { resource = "Sails",      qty = 150 },
       { resource = SAILS,      qty = 150 },
       { resource = "Fittings",    qty = 150 },
       { resource = FITTINGS,    qty = 150 },
       { resource = "Steel Chain", qty =  75 },
       { resource = STEEL_CHAIN, qty =  75 },
       { resource = "Copper Lamp", qty =  75 },
       { resource = COPPER_LAMP, qty =  75 },
     },
     },
     crew_types = {
     crew_types = {
       { type = "Swabbies",  qty = 130 },
       { type = SWABBIES,  qty = 130 },
       { type = "Renegades", qty = 135 },
       { type = RENEGADES, qty = 135 },
       { type = "Corsairs",  qty = 165 },
       { type = CORSAIRS,  qty = 165 },
     },
     },
     stats_base = {
     stats_base = {
Line 1,887: Line 1,951:
     },
     },
     stats_crew_bonuses = {
     stats_crew_bonuses = {
       Swabbies = {
       [SWABBIES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,897: Line 1,961:
         { stat = ARMOUR,          qty = 0 },
         { stat = ARMOUR,          qty = 0 },
       },
       },
       Renegades = {
       [RENEGADES] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,907: Line 1,971:
         { stat = ARMOUR,          qty =  7.4  /135 },
         { stat = ARMOUR,          qty =  7.4  /135 },
       },
       },
       Corsairs = {
       [CORSAIRS] = {
         { stat = HEALTH,  qty = 0 },
         { stat = HEALTH,  qty = 0 },
         { stat = CREW,    qty = 0 },
         { stat = CREW,    qty = 0 },
Line 1,962: Line 2,026:


local ship_class_descriptions = {
local ship_class_descriptions = {
   ["Special"]  = "Some ships are able to fulfil multiple roles. Sometimes they are just bad at everything, and sometimes they are just out of this world.",
   [SPECIAL]  = "Some ships are able to fulfil multiple roles. Sometimes they are just bad at everything, and sometimes they are just out of this world.",
   ["Prowler"]  = "Slick as an eel and sporting vast cargo holds, Prowlers are the ship of choice for shady business like Smuggling Runs. They're not made for attacking problems head on, but their supplies last long, and their nimble frame lets them stay out of sight until it's time to strike.",
   [PROWLER]  = "Slick as an eel and sporting vast cargo holds, Prowlers are the ship of choice for shady business like Smuggling Runs. They're not made for attacking problems head on, but their supplies last long, and their nimble frame lets them stay out of sight until it's time to strike.",
   ["Destroyer"] = "Armed to the teeth and plated with thick armour, Destroyers excel at cracking fortified targets like Crown Ports. They lumber into view with the grace of a sea cow, but once they get in range, they pelt their opponent with heavy cannons and shrug off any attacks that come their way.",
   [DESTROYER] = "Armed to the teeth and plated with thick armour, Destroyers excel at cracking fortified targets like Crown Ports. They lumber into view with the grace of a sea cow, but once they get in range, they pelt their opponent with heavy cannons and shrug off any attacks that come their way.",
   ["Hunter"]    = "Fast as a tiger shark and able to carry a big crew, Hunters are unmatched at hit-and-run attacks on Merchant Ships and the like. There may be stronger or stealthier predators out there, but if you want to be the top of the food chain in the Seven Seas, nothing beats speed and sheer tenacity.",
   [HUNTER]    = "Fast as a tiger shark and able to carry a big crew, Hunters are unmatched at hit-and-run attacks on Merchant Ships and the like. There may be stronger or stealthier predators out there, but if you want to be the top of the food chain in the Seven Seas, nothing beats speed and sheer tenacity.",
   ["Reaver"]    = "Built for combat and carrying a vast raiding party, Reavers are able to plunder well-guarded locations like Treasure Caves. They might lack armour or finesse, but through sheer aggression and bloodthirst, their opponents might surrender before they even get into boarding range.",
   [REAVER]    = "Built for combat and carrying a vast raiding party, Reavers are able to plunder well-guarded locations like Treasure Caves. They might lack armour or finesse, but through sheer aggression and bloodthirst, their opponents might surrender before they even get into boarding range.",
}
}



Revision as of 02:20, 6 August 2026

Ship data for Corsair Cove: 29 ships, schema validated at load time.

Use from other modules and templates via #invoke or require:

local ships_data = require("Module:Ships_data")

Functions

Important: Do not mutate returned tables. To save performance, the tables are not copied first. Modifications to the returned values will contaminate other uses of those tables.

get_ship_by_name

Returns one ship record, or nil if the name isn't found.

local ship = ships_data.get_ship_by_name("Landlubber")

Name must match exactly, including spaces, for example "Iron Fist".

get_ship_by_index

Returns the ship record at that position in canonical order, or nil if out of range. Canonical order is from Tier 1 to 6, clockwise starting from the top around the Compass.

local ship = ships_data.get_ship_by_index(1)

get_all_ships

Returns the full array of ship records, in canonical order. Canonical order is from Tier 1 to 6, clockwise starting from the top around the Compass.

for i, ship in ipairs(ships_data.get_all_ships()) do
  ...
end

get_count_of_ships

Returns the number of ships.

for i = 1, ships_data.get_count_of_ships() do
  local ship = ships_data.get_ship_by_index(i)
end

get_ship_class_description

Flavour text for the class of ship, aligned with the Principle Paths. Pass in the class or hybrid_class field from a ship record to get its description. (The method ignores any trailing plus signs for the hybrid ships. Returns nil for unknown classes.

local flavour_text = ships_data.get_ship_class_description("Destroyer+")

Types

The module's exported functions and returned records are typed using LuaCATS-style annotations in the module's source. These aren't enforced at runtime, but document the exact shape of every value the module returns.

ShipRecord

A single ship's full data. See Ship record shape below for field-by-field details.

ShipResourceAmount

A { resource, qty } pair used in construction_costs.

ShipCrewAmount

A { type, qty } pair used in crew_types.

ShipStatAmount

A { stat, qty } pair used in stats_base and stats_crew_bonuses.

ShipUnlockAmount

A { path, qty } pair used in unlock_points.

ShipsDataModule

The shape of the table returned by require("Module:Ships_data") — i.e. the functions documented above.

Ship record shape

Each record in ships_data is a table with the following fields:

Field Type Note
name string Display name
tier number 1..6, inclusive
principle_path string Primary Principle Path alignment of the class of ship
class string Primary class of the ship, with an trailing plus sign for hybrids, similar to their in-game display, for example "Notoriety"
hybrid_path string Secondary Principle Path alignment of the class of ship, according to the unlock requirement on the Compass (never has a trailing plus sign)
icon_filename string The filename, including the extension, of the image of the ship, for example, "T_Ship_Starter.png"
pier string The pier required to build the ship, for example, "Shallow Pier"
description string The English-language flavour text of the ship
construction_costs array of ShipResourceAmount pairs of { resource, qty } mini-tables, where the resource is the name of the construction material, for example, "Naval Gun"
crew_types array of ShipCrewAmount pairs of { type, qty } mini-tables, where the type is the name of the crew as spelled in-game, for example, "Crow's Eyes"
stats_base array of ShipStatAmount pairs of { stat, qty } mini-tables, where stat is the name of the stat as spelled in-game, for example, "Gun Damage" or "Manoeuvrability"
stats_crew_bonuses map of arrays of ShipStatAmount by crew_type's type, each returns an array of { stat, qty } like stats_base but showing the marginal bonus per additional individual crew member of that type
stats_max array of ShipStatAmount calculated table of the maximum stats with the most number of advanced crew, similar structure to stats_base
unlock_points array of ShipUnlockAmount calculated pairs of { path, qty } mini-tables based on the ship's principle_path and hybrid_path

Nested pairs

Construction, crew, and stats use ordered arrays of pairs of data: The first field is a resource's, crew type's , or stat's name, as spelled in-game, and the second field is the quantity.

  • ship.construction_costs is an array of ShipResourceAmount, resource–qty pairs.
  • ship.crew_types is an array of ShipCrewAmount, type–qty pairs.
  • ship.stats_base is an array of ShipStatAmount, stat–qty pairs.
  • ship.stats_crew_bonuses is several arrays of ShipStatAmount, stat–qty pairs.
  • ship.stats_max is an array of ShipStatAmount, stat-qty pairs.
  • ship.unlock_points is an array of ShipUnlockAmount, path-qty pairs.

Crew bonuses

The bonuses are first keyed by the crew type's name. Keys match that ship's crew_types types. Typed in the table are fractional values of what is shown in-game divided by the number of crew. This means when working with this data, each individual value in the stat–qty pair is the marginal additional stat that one crew member contributes to the ship.

local bonuses = ship.stats_crew_bonuses["Scallywags"]

To get the highest possible maximum stats, use ship.stats_max instead, which is pre-calculated.


--#region: Data validation schema

--- Build a set of allowed field names from an ordered list.
local function build_allowed_set(valid_fields)
  local allowed = {}
  for _, field_name in ipairs(valid_fields) do
    allowed[field_name] = true
  end
  return allowed
end

local NAME = "name"
local TIER = "tier"
local PRINCIPLE_PATH = "principle_path"
local CLASS = "class"
local HYBRID_PATH = "hybrid_path"
local ICON_FILENAME = "icon_filename"
local PIER = "pier"
local DESCRIPTION = "description"
local CONSTRUCTION_COSTS = "construction_costs"
local CREW_TYPES = "crew_types"
local STATS_BASE = "stats_base"
local STATS_CREW_BONUSES = "stats_crew_bonuses"

--- Ordered list of valid field names for ship data.
local REQUIRED_SHIP_FIELDS = {
  NAME,
  TIER,
  PRINCIPLE_PATH,
  CLASS,
  HYBRID_PATH,
  ICON_FILENAME,
  PIER,
  DESCRIPTION,
  CONSTRUCTION_COSTS,
  CREW_TYPES,
  STATS_BASE,
  STATS_CREW_BONUSES,
}
local REQUIRED_SHIP_FIELDS_ALLOWED_NAMES = build_allowed_set(REQUIRED_SHIP_FIELDS)

local PLANKS = "Planks"
local ROPE = "Rope"
local SAILS = "Sails"
local FIGUREHEAD = "Figurehead"
local PITCH = "Pitch"
local FITTINGS = "Fittings"
local JOLLY_ROGER = "Jolly Roger"
local NAVAL_GUN = "Naval Gun"
local STEEL_CHAIN = "Steel Chain"
local SILVER_LINING = "Silver Lining"
local COPPER_LAMP = "Copper Lamp"

--- Ordered list of valid field names for ship construction costs.
local VALID_SHIP_CONSTRUCTION_COSTS = {
  PLANKS,
  ROPE,
  SAILS,
  FIGUREHEAD,
  PITCH,
  FITTINGS,
  JOLLY_ROGER,
  NAVAL_GUN,
  STEEL_CHAIN,
  SILVER_LINING,
  COPPER_LAMP,
}
local VALID_SHIP_CONSTRUCTION_COSTS_ALLOWED_NAMES = build_allowed_set(VALID_SHIP_CONSTRUCTION_COSTS)

local SWABBIES    = "Swabbies"
local SCALLYWAGS  = "Scallywags"
local PICAROONS   = "Picaroons"
local BOMBARDIERS = "Bombardiers"
local CROWS_EYES  = "Crow's Eyes"
local BUCCANEERS  = "Buccaneers"
local NAVIGATORS  = "Navigators"
local RENEGADES   = "Renegades"
local MARAUDERS   = "Marauders"
local CORSAIRS   = "Corsairs"

--- Ordered list of valid field names for ship crew types.
local VALID_SHIP_CREW_TYPES = {
  SWABBIES,
  SCALLYWAGS,
  PICAROONS,
  BOMBARDIERS,
  CROWS_EYES,
  BUCCANEERS,
  NAVIGATORS,
  RENEGADES,
  MARAUDERS,
  CORSAIRS,
}
local VALID_SHIP_CREW_TYPES_ALLOWED_NAMES = build_allowed_set(VALID_SHIP_CREW_TYPES)

local HEALTH =          "Health"
local CREW =            "Crew"
local SUPPLIES =        "Supplies"
local GUN_DAMAGE =      "Gun Damage"
local BOARDING_DAMAGE = "Boarding Damage"
local SPEED =           "Speed"
local MANOEUVRABILITY = "Manoeuvrability"
local ARMOUR =          "Armour"

--- Ordered list of valid field names for ship stats.
local REQUIRED_SHIP_STATS = {
  HEALTH,
  CREW,
  SUPPLIES,
  GUN_DAMAGE,
  BOARDING_DAMAGE,
  SPEED,
  MANOEUVRABILITY,
  ARMOUR,
}
local REQUIRED_SHIP_STATS_ALLOWED_NAMES = build_allowed_set(REQUIRED_SHIP_STATS)

local SPECIAL = "Special"
local PROWLER = "Prowler"
local PROWLER_PLUS = "Prowler+"
local DESTROYER = "Destroyer"
local DESTROYER_PLUS = "Destroyer+"
local HUNTER = "Hunter"
local HUNTER_PLUS = "Hunter+"
local REAVER = "Reaver"
local REAVER_PLUS = "Reaver+"

--- Set of valid class names.
local VALID_CLASSES = {
  SPECIAL,
  PROWLER,
  PROWLER_PLUS,
  DESTROYER,
  DESTROYER_PLUS,
  HUNTER,
  HUNTER_PLUS,
  REAVER,
  REAVER_PLUS,
}
local VALID_CLASSES_ALLOWED_NAMES = build_allowed_set(VALID_CLASSES)

local NONE = "None"
local NOTORIETY = "Notoriety"
local EMPIRE = "Empire"
local SEAFARING = "Seafaring"
local WEALTH = "Wealth"

--- Set of valid Principle Paths.
local VALID_PRINCIPLE_PATHS = {
  NONE,
  NOTORIETY,
  EMPIRE,
  SEAFARING,
  WEALTH,
}
local VALID_PRINCIPLE_PATHS_ALLOWED_NAMES = build_allowed_set(VALID_PRINCIPLE_PATHS)

local SHALLOW_PIER = "Shallow Pier"
local TRADE_PIER = "Trade Pier"
local DEEP_WATER_PIER = "Deep-water Pier"

--- Set of valid pier building names.
local VALID_PIERS = {
  SHALLOW_PIER,
  TRADE_PIER,
  DEEP_WATER_PIER,
}
local VALID_PIERS_ALLOWED_NAMES = build_allowed_set(VALID_PIERS)

local RESOURCE = "resource"
local TYPE = "type"
local STAT = "stat"

local all_fields_are_required = true
local some_fields_may_be_missing = false

--#endregion



--#region: Data validation functions

--- Scan table against valid fields for (a) presence and (b) no extras.
local function assert_scalars(tbl, valid_fields, allowed_fields, are_all_required, message_context)
  if are_all_required then
    for _, field_name in ipairs(valid_fields) do
      assert(tbl[field_name] ~= nil,    message_context .. " missing field: " .. field_name)
    end
  end
  for field_name, _ in pairs(tbl) do
    assert(allowed_fields[field_name],  message_context .. " unexpected field: " .. field_name)
  end
end

--- Validate an ordered list of { name_field = "...", qty = n } entries.
local function assert_nested_list(entries, nested_field_name, valid_fields, allowed_fields, are_all_required, message_context)
  assert(type(entries) == "table",                                    message_context .. " must be a table")
  local seen = {}
  for index, entry in ipairs(entries) do
    local message_context_index = message_context .. "[" .. index .. "]"
    assert(type(entry) == "table",                                    message_context_index .. " must be a table")
    assert(entry[nested_field_name] ~= nil,                           message_context_index .. " missing " .. nested_field_name)
    assert(entry.qty ~= nil,                                          message_context_index .. " missing qty")
    assert(type(entry.qty) == "number",                               message_context_index .. " qty must be a number")
    for field_name, _ in pairs(entry) do
      assert(field_name == nested_field_name or field_name == "qty",  message_context_index .. " unexpected field: " .. field_name)
    end
    local name = entry[nested_field_name]
    assert(allowed_fields[name],                                      message_context_index .. " invalid " .. nested_field_name .. ": " .. tostring(name))
    assert(not seen[name],                                            message_context_index .. " duplicate " .. nested_field_name .. ": " .. tostring(name))
    seen[name] = true
  end
  if are_all_required then
    for _, field_name in ipairs(valid_fields) do
      assert(seen[field_name],                                        message_context .. " missing " .. nested_field_name .. ": " .. field_name)
    end
  end
end

--- Validate bonuses subtable, passing each crew type to assert_nested_list.
local function assert_bonuses_table(crew_types, bonuses, message_context)
  assert(type(bonuses) == "table", message_context .. " must be a table")
  local seen = {}
  for _, crew_type in ipairs(crew_types) do
    assert(bonuses[crew_type.type] ~= nil, message_context .. " missing bonuses for crew type: " .. crew_type.type)
    assert_nested_list(bonuses[crew_type.type], STAT, REQUIRED_SHIP_STATS, REQUIRED_SHIP_STATS_ALLOWED_NAMES, all_fields_are_required, message_context .. "[" .. crew_type.type .. "]")
    seen[crew_type.type] = true
  end
  for bonus_crew_type, _ in pairs(bonuses) do
    assert(seen[bonus_crew_type], message_context .. " unexpected crew type: " .. bonus_crew_type)
  end
end

--- Scan all ships in table against valid fields and nested fields.
local function validate_ships(ships_list, ships)
  assert(type(ships_list) == "table", "ships_list must be a table")
  assert(type(ships) == "table", "ships must be a table")
  assert(#ships_list == 29, "ships_list must contain 29 ships")
  for index, ship in ipairs(ships_list) do
    local message_context = "ships_list[" .. index .. "]"
    assert(index == ships[ship.name],                     message_context .. " name and lookup index mismatch")
    assert(VALID_PRINCIPLE_PATHS_ALLOWED_NAMES[ship.principle_path], message_context .. " invalid principle path: " .. ship.principle_path)
    assert(VALID_CLASSES_ALLOWED_NAMES[ship.class],                  message_context .. " invalid class: " .. ship.class)
    assert(VALID_PRINCIPLE_PATHS_ALLOWED_NAMES[ship.hybrid_path],    message_context .. " invalid hybrid class: " .. ship.hybrid_path)
    assert(VALID_PIERS_ALLOWED_NAMES[ship.pier],                     message_context .. " invalid pier: " .. ship.pier)
    assert_scalars(ship, REQUIRED_SHIP_FIELDS, REQUIRED_SHIP_FIELDS_ALLOWED_NAMES, all_fields_are_required, message_context)
    assert_nested_list(ship.construction_costs, RESOURCE, VALID_SHIP_CONSTRUCTION_COSTS,  VALID_SHIP_CONSTRUCTION_COSTS_ALLOWED_NAMES, some_fields_may_be_missing, message_context .. ".construction_costs")
    assert_nested_list(ship.crew_types,         TYPE,     VALID_SHIP_CREW_TYPES,          VALID_SHIP_CREW_TYPES_ALLOWED_NAMES,         some_fields_may_be_missing, message_context .. ".crew_types")
    assert_nested_list(ship.stats_base,         STAT,     REQUIRED_SHIP_STATS,            REQUIRED_SHIP_STATS_ALLOWED_NAMES,           all_fields_are_required,    message_context .. ".stats_base")
    assert_bonuses_table(ship.crew_types, ship.stats_crew_bonuses, message_context .. ".stats_crew_bonuses")
  end
  local seen = {}
  for name, index in pairs(ships) do
    local message_context = "ships[" .. name .. "]"
    assert((index ~= nil) or (type(index) == "number") and (index ~= 0), message_context .. " missing or invalid lookup index")
    assert(not seen[index],                                              message_context .. " duplicate lookup index: " .. index)
    assert(ships_list[index] and ships_list[index].name == name,         message_context .. " lookup index and name mismatch")
    seen[index] = true
  end
  print('ships_data validated successfully')
end

--#endregion



--#region: Primary data tables

--[[
Lua table for ships.

Fields include: name, tier, principle path, class, hybrid class, icon filename, 
pier, construction cost materials and quantities, possible crew types and 
quantities, and base stats (health #, crew #, supplies #, gun damage, boarding 
damage, speed, manoeuvrability, and armour), then finally the bonuses applied 
to each base stat by each crew types.
]]
local ships_list = {
  {
    name           = "Landlubber",
    tier           = 1,
    principle_path = NONE,
    class          = SPECIAL,
    hybrid_path    = NONE,
    icon_filename  = "T_Ship_Starter.png",
    pier           = SHALLOW_PIER,
    description    = "The Landlubber is not a good ship: she's slow, underpowered, and doesn't have much space for a crew. But she's more than enough to learn the rudiments of sailing, fighting and plundering.",
    construction_costs = {
      { resource = PLANKS, qty = 15 },
    },
    crew_types = {
      { type = SWABBIES, qty = 15 },
    },
    stats_base = {
      { stat = HEALTH,   qty = 20 },
      { stat = CREW,     qty = 15 },
      { stat = SUPPLIES, qty = 20 },
      { stat = GUN_DAMAGE,      qty = 2 },
      { stat = BOARDING_DAMAGE, qty = 2 },
      { stat = SPEED,           qty = 2 },
      { stat = MANOEUVRABILITY, qty = 2 },
      { stat = ARMOUR,          qty = 2 },
    },
    stats_crew_bonuses = {
      [SWABBIES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 0 },
        { stat = BOARDING_DAMAGE, qty = 0 },
        { stat = SPEED,           qty = 0 },
        { stat = MANOEUVRABILITY, qty = 0 },
        { stat = ARMOUR,          qty = 0 },
      },
    },
  },
  {
    name           = "Moonlight",
    tier           = 2,
    principle_path = NOTORIETY,
    class          = PROWLER,
    hybrid_path    = NONE,
    icon_filename  = "T_Ship_Smuggler_Tier1.png",
    pier           = SHALLOW_PIER,
    description    = "Moonlight drifts through the ocean, unseen and untouchable. Her agility makes her the perfect vessel for smuggling goods where none else dare venture. Silent, swift, and gone before dawn.",
    construction_costs = {
      { resource = PLANKS, qty = 10 },
      { resource = ROPE,   qty = 20 },
    },
    crew_types = {
      { type = SWABBIES,   qty =  8 },
      { type = SCALLYWAGS, qty = 15 },
    },
    stats_base = {
      { stat = HEALTH,   qty = 70 },
      { stat = CREW,     qty = 15 },
      { stat = SUPPLIES, qty = 32 },
      { stat = GUN_DAMAGE,      qty = 2 },
      { stat = BOARDING_DAMAGE, qty = 5 },
      { stat = SPEED,           qty = 2 },
      { stat = MANOEUVRABILITY, qty = 13 },
      { stat = ARMOUR,          qty = 2 },
    },
    stats_crew_bonuses = {
      [SWABBIES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 0 },
        { stat = BOARDING_DAMAGE, qty = 0 },
        { stat = SPEED,           qty = 0 },
        { stat = MANOEUVRABILITY, qty = 0 },
        { stat = ARMOUR,          qty = 0 },
      },
      [SCALLYWAGS] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty =  2 /15 },
        { stat = BOARDING_DAMAGE, qty =  5 /15 },
        { stat = SPEED,           qty =  2 /15 },
        { stat = MANOEUVRABILITY, qty = 13 /15 },
        { stat = ARMOUR,          qty =  2 /15 },
      },
    },
  },
  {
    name           = "Iron Fist",
    tier           = 2,
    principle_path = EMPIRE,
    class          = DESTROYER,
    hybrid_path    = NONE,
    icon_filename  = "T_Ship_Destroyer_Tier1.png",
    pier           = SHALLOW_PIER,
    description    = "Iron Fist is a formidable vessel. Built to crush all those who oppose her, while withstanding even the most punishing of assaults. Strong and powerful, few ships have the power to stand against her.",
    construction_costs = {
      { resource = PLANKS, qty = 10 },
      { resource = ROPE,   qty = 20 },
    },
    crew_types = {
      { type = SWABBIES,  qty =  8 },
      { type = PICAROONS, qty = 15 },
    },
    stats_base = {
      { stat = HEALTH,   qty = 82 },
      { stat = CREW,     qty = 15 },
      { stat = SUPPLIES, qty = 24 },
      { stat = GUN_DAMAGE,      qty = 13 },
      { stat = BOARDING_DAMAGE, qty = 2 },
      { stat = SPEED,           qty = 2 },
      { stat = MANOEUVRABILITY, qty = 2 },
      { stat = ARMOUR,          qty = 13 },
    },
    stats_crew_bonuses = {
      [SWABBIES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 0 },
        { stat = BOARDING_DAMAGE, qty = 0 },
        { stat = SPEED,           qty = 0 },
        { stat = MANOEUVRABILITY, qty = 0 },
        { stat = ARMOUR,          qty = 0 },
      },
      [PICAROONS] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 13 /15 },
        { stat = BOARDING_DAMAGE, qty =  2 /15 },
        { stat = SPEED,           qty =  2 /15 },
        { stat = MANOEUVRABILITY, qty =  2 /15 },
        { stat = ARMOUR,          qty = 13 /15 },
      },
    },
  },
  {
    name           = "Tide Runner",
    tier           = 2,
    principle_path = SEAFARING,
    class          = HUNTER,
    hybrid_path    = NONE,
    icon_filename  = "T_Ship_Hunter_Tier1.png",
    pier           = SHALLOW_PIER,
    description    = "Tide Runner glides across the ocean with unmatched grace. A sleek vessel built for stealth and pursuit. Her agile design makes her perfect for chasing down prey or slipping away unnoticed.",
    construction_costs = {
      { resource = PLANKS, qty = 10 },
      { resource = ROPE,   qty = 20 },
    },
    crew_types = {
      { type = SWABBIES,   qty = 10 },
      { type = SCALLYWAGS, qty = 20 },
    },
    stats_base = {
      { stat = HEALTH,   qty = 70 },
      { stat = CREW,     qty = 20 },
      { stat = SUPPLIES, qty = 24 },
      { stat = GUN_DAMAGE,      qty =  5 },
      { stat = BOARDING_DAMAGE, qty =  2 },
      { stat = SPEED,           qty = 13 },
      { stat = MANOEUVRABILITY, qty =  2 },
      { stat = ARMOUR,          qty =  2 },
    },
    stats_crew_bonuses = {
      [SWABBIES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 0 },
        { stat = BOARDING_DAMAGE, qty = 0 },
        { stat = SPEED,           qty = 0 },
        { stat = MANOEUVRABILITY, qty = 0 },
        { stat = ARMOUR,          qty = 0 },
      },
      [SCALLYWAGS] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty =  5 /20 },
        { stat = BOARDING_DAMAGE, qty =  2 /20 },
        { stat = SPEED,           qty = 13 /20 },
        { stat = MANOEUVRABILITY, qty =  2 /20 },
        { stat = ARMOUR,          qty =  2 /20 },
      },
    },
  },
  {
    name           = "Sharktooth",
    tier           = 2,
    principle_path = WEALTH,
    class          = REAVER,
    hybrid_path    = NONE,
    icon_filename  = "T_Ship_Raider_Tier1.png",
    pier           = SHALLOW_PIER,
    description    = "Sharktooth is a ship that will take whatever she wants, whenever she wants it. Slow but relentless, she is a deadly predator of the ocean waves, sinking her fangs into every ship she targets. Her bite is deadly and few can escape it.",
    construction_costs = {
      { resource = PLANKS, qty = 10 },
      { resource = ROPE,   qty = 20 },
    },
    crew_types = {
      { type = SWABBIES,  qty = 10 },
      { type = PICAROONS, qty = 20 },
    },
    stats_base = {
      { stat = HEALTH,   qty = 82 },
      { stat = CREW,     qty = 20 },
      { stat = SUPPLIES, qty = 24 },
      { stat = GUN_DAMAGE,      qty =  2 },
      { stat = BOARDING_DAMAGE, qty = 13 },
      { stat = SPEED,           qty =  2 },
      { stat = MANOEUVRABILITY, qty =  2 },
      { stat = ARMOUR,          qty =  5 },
    },
    stats_crew_bonuses = {
      [SWABBIES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 0 },
        { stat = BOARDING_DAMAGE, qty = 0 },
        { stat = SPEED,           qty = 0 },
        { stat = MANOEUVRABILITY, qty = 0 },
        { stat = ARMOUR,          qty = 0 },
      },
      [PICAROONS] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty =  2 /20 },
        { stat = BOARDING_DAMAGE, qty = 13 /20 },
        { stat = SPEED,           qty =  2 /20 },
        { stat = MANOEUVRABILITY, qty =  2 /20 },
        { stat = ARMOUR,          qty =  5 /20 },
      },
    },
  },
  {
    name           = "Azimuth",
    tier           = 2,
    principle_path = NOTORIETY,
    class          = PROWLER_PLUS,
    hybrid_path    = EMPIRE,
    icon_filename  = "T_Ship_Smuggler_Tier1_dot25.png",
    pier           = SHALLOW_PIER,
    description    = "Azimuth was built for adventure, and thus features many small improvements compared to its smaller sibling Moonlight. A bit more of everything can never hurt when chasing the many terrible wonders of the Seven Seas.",
    construction_costs = {
      { resource = PLANKS, qty = 50 },
      { resource = ROPE,   qty = 50 },
    },
    crew_types = {
      { type = SWABBIES,   qty =  9 },
      { type = SCALLYWAGS, qty = 18 },
    },
    stats_base = {
      { stat = HEALTH,   qty = 82 },
      { stat = CREW,     qty = 18 },
      { stat = SUPPLIES, qty = 32 },
      { stat = GUN_DAMAGE,      qty =  9 },
      { stat = BOARDING_DAMAGE, qty =  5 },
      { stat = SPEED,           qty =  4 },
      { stat = MANOEUVRABILITY, qty = 13 },
      { stat = ARMOUR,          qty =  4 },
    },
    stats_crew_bonuses = {
      [SWABBIES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 0 },
        { stat = BOARDING_DAMAGE, qty = 0 },
        { stat = SPEED,           qty = 0 },
        { stat = MANOEUVRABILITY, qty = 0 },
        { stat = ARMOUR,          qty = 0 },
      },
      [SCALLYWAGS] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty =  9 /18 },
        { stat = BOARDING_DAMAGE, qty =  5 /18 },
        { stat = SPEED,           qty =  4 /18 },
        { stat = MANOEUVRABILITY, qty = 13 /18 },
        { stat = ARMOUR,          qty =  4 /18 },
      },
    },
  },
  {
    name           = "Steel Edge",
    tier           = 2,
    principle_path = EMPIRE,
    class          = DESTROYER_PLUS,
    hybrid_path    = SEAFARING,
    icon_filename  = "T_Ship_Destroyer_Tier1_dot25.png",
    pier           = SHALLOW_PIER,
    description    = "An improved design on the Iron Fist, devised in many drunken nights of scheming and plotting. The Steel Edge's slightly larger frame allows for more crew and weaponry, which can make all the difference in the heat of battle.",
    construction_costs = {
      { resource = PLANKS, qty = 50 },
      { resource = ROPE,   qty = 50 },
    },
    crew_types = {
      { type = SWABBIES,  qty =  9 },
      { type = PICAROONS, qty = 18 },
    },
    stats_base = {
      { stat = HEALTH,   qty = 94 },
      { stat = CREW,     qty = 18 },
      { stat = SUPPLIES, qty = 28 },
      { stat = GUN_DAMAGE,      qty = 13 },
      { stat = BOARDING_DAMAGE, qty =  4 },
      { stat = SPEED,           qty =  7 },
      { stat = MANOEUVRABILITY, qty =  4 },
      { stat = ARMOUR,          qty = 13 },
    },
    stats_crew_bonuses = {
      [SWABBIES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 0 },
        { stat = BOARDING_DAMAGE, qty = 0 },
        { stat = SPEED,           qty = 0 },
        { stat = MANOEUVRABILITY, qty = 0 },
        { stat = ARMOUR,          qty = 0 },
      },
      [PICAROONS] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 13 /18 },
        { stat = BOARDING_DAMAGE, qty =  4 /18 },
        { stat = SPEED,           qty =  7 /18 },
        { stat = MANOEUVRABILITY, qty =  4 /18 },
        { stat = ARMOUR,          qty = 13 /18 },
      },
    },
  },
  {
    name           = "Huracán",
    tier           = 2,
    principle_path = SEAFARING,
    class          = HUNTER_PLUS,
    hybrid_path    = WEALTH,
    icon_filename  = "T_Ship_Hunter_Tier1_dot25.png",
    pier           = SHALLOW_PIER,
    description    = "Huracán is based on the Tide Runner's blueprints, but has been lovingly tweaked and refined by our passionate shipwrights. Many tiny improvements make her a terrifying predator of the sea. Merchants beware.",
    construction_costs = {
      { resource = PLANKS, qty = 50 },
      { resource = ROPE,   qty = 50 },
    },
    crew_types = {
      { type = SWABBIES,   qty = 10 },
      { type = SCALLYWAGS, qty = 20 },
    },
    stats_base = {
      { stat = HEALTH,   qty = 82 },
      { stat = CREW,     qty = 20 },
      { stat = SUPPLIES, qty = 28 },
      { stat = GUN_DAMAGE,      qty =  5 },
      { stat = BOARDING_DAMAGE, qty =  7 },
      { stat = SPEED,           qty = 13 },
      { stat = MANOEUVRABILITY, qty =  4 },
      { stat = ARMOUR,          qty =  5 },
    },
    stats_crew_bonuses = {
      [SWABBIES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 0 },
        { stat = BOARDING_DAMAGE, qty = 0 },
        { stat = SPEED,           qty = 0 },
        { stat = MANOEUVRABILITY, qty = 0 },
        { stat = ARMOUR,          qty = 0 },
      },
      [SCALLYWAGS] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty =  5 /20 },
        { stat = BOARDING_DAMAGE, qty =  7 /20 },
        { stat = SPEED,           qty = 13 /20 },
        { stat = MANOEUVRABILITY, qty =  4 /20 },
        { stat = ARMOUR,          qty =  5 /20 },
      },
    },
  },
  {
    name           = "Goldseeker",
    tier           = 2,
    principle_path = WEALTH,
    class          = REAVER_PLUS,
    hybrid_path    = NOTORIETY,
    icon_filename  = "T_Ship_Raider_Tier1_dot25.png",
    pier           = SHALLOW_PIER,
    description    = "Goldseeker comes well equipped to haul treasure and plunder alike. Her extra large cargo deck can store weeks worth of booty and gives her an edge over the Sharktooth.",
    construction_costs = {
      { resource = PLANKS, qty = 50 },
      { resource = ROPE,   qty = 50 },
    },
    crew_types = {
      { type = SWABBIES,  qty = 10 },
      { type = PICAROONS, qty = 20 },
    },
    stats_base = {
      { stat = HEALTH,   qty = 88 },
      { stat = CREW,     qty = 20 },
      { stat = SUPPLIES, qty = 28 },
      { stat = GUN_DAMAGE,      qty =  4 },
      { stat = BOARDING_DAMAGE, qty = 13 },
      { stat = SPEED,           qty =  4 },
      { stat = MANOEUVRABILITY, qty =  9 },
      { stat = ARMOUR,          qty =  5 },
    },
    stats_crew_bonuses = {
      [SWABBIES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 0 },
        { stat = BOARDING_DAMAGE, qty = 0 },
        { stat = SPEED,           qty = 0 },
        { stat = MANOEUVRABILITY, qty = 0 },
        { stat = ARMOUR,          qty = 0 },
      },
      [PICAROONS] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty =  4 /20 },
        { stat = BOARDING_DAMAGE, qty = 13 /20 },
        { stat = SPEED,           qty =  4 /20 },
        { stat = MANOEUVRABILITY, qty =  9 /20 },
        { stat = ARMOUR,          qty =  5 /20 },
      },
    },
  },
  {
    name           = "Nightshade",
    tier           = 3,
    principle_path = NOTORIETY,
    class          = PROWLER,
    hybrid_path    = NONE,
    icon_filename  = "T_Ship_Smuggler_Tier1_dot5.png",
    pier           = SHALLOW_PIER,
    description    = "Nightshade is as elusive as they come. The perfect vessel for moving goods or navigating danger. She will outmanoeuvre all those who oppose her and vanish into the night long before anyone catches up.",
    construction_costs = {
      { resource = PLANKS, qty = 50 },
      { resource = ROPE,   qty = 50 },
      { resource = SAILS,  qty = 30 },
    },
    crew_types = {
      { type = SWABBIES,    qty = 15 },
      { type = SCALLYWAGS,  qty = 20 },
      { type = CROWS_EYES, qty = 20 },
    },
    stats_base = {
      { stat = HEALTH,   qty = 105 },
      { stat = CREW,     qty =  40 },
      { stat = SUPPLIES, qty =  34 },
      { stat = GUN_DAMAGE,      qty =  3 },
      { stat = BOARDING_DAMAGE, qty =  8 },
      { stat = SPEED,           qty =  3 },
      { stat = MANOEUVRABILITY, qty = 20 },
      { stat = ARMOUR,          qty =  3 },
    },
    stats_crew_bonuses = {
      [SWABBIES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 0 },
        { stat = BOARDING_DAMAGE, qty = 0 },
        { stat = SPEED,           qty = 0 },
        { stat = MANOEUVRABILITY, qty = 0 },
        { stat = ARMOUR,          qty = 0 },
      },
      [SCALLYWAGS] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty =  0.94 /20 },
        { stat = BOARDING_DAMAGE, qty =  1.41 /20 },
        { stat = SPEED,           qty =  0.5  /20 },
        { stat = MANOEUVRABILITY, qty = 17.33 /20 },
        { stat = ARMOUR,          qty =  2.4  /20 },
      },
      [CROWS_EYES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty =  2.06 /20 },
        { stat = BOARDING_DAMAGE, qty =  6.59 /20 },
        { stat = SPEED,           qty =  2.5  /20 },
        { stat = MANOEUVRABILITY, qty =  2.67 /20 },
        { stat = ARMOUR,          qty =  0.6  /20 },
      },
    },
  },
  {
    name           = "Yoke Breaker",
    tier           = 3,
    principle_path = EMPIRE,
    class          = DESTROYER,
    hybrid_path    = NONE,
    icon_filename  = "T_Ship_Destroyer_Tier1_dot5.png",
    pier           = SHALLOW_PIER,
    description    = "Yoke Breaker is a force on the high seas. Her heavy broadside cannons give her the advantage in every battle she fights. She may be a little slower than most, but she is devastating when she arrives.",
    construction_costs = {
      { resource = PLANKS, qty = 50 },
      { resource = ROPE,   qty = 50 },
      { resource = SAILS,  qty = 30 },
    },
    crew_types = {
      { type = SWABBIES,    qty = 15 },
      { type = PICAROONS,   qty = 20 },
      { type = BOMBARDIERS, qty = 20 },
    },
    stats_base = {
      { stat = HEALTH,   qty = 123 },
      { stat = CREW,     qty =  40 },
      { stat = SUPPLIES, qty =  26 },
      { stat = GUN_DAMAGE,      qty = 20 },
      { stat = BOARDING_DAMAGE, qty =  3 },
      { stat = SPEED,           qty =  3 },
      { stat = MANOEUVRABILITY, qty =  3 },
      { stat = ARMOUR,          qty = 20 },
    },
    stats_crew_bonuses = {
      [SWABBIES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 0 },
        { stat = BOARDING_DAMAGE, qty = 0 },
        { stat = SPEED,           qty = 0 },
        { stat = MANOEUVRABILITY, qty = 0 },
        { stat = ARMOUR,          qty = 0 },
      },
      [PICAROONS] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty =  2.86 /20 },
        { stat = BOARDING_DAMAGE, qty =  0.75 /20 },
        { stat = SPEED,           qty =  1.3  /20 },
        { stat = MANOEUVRABILITY, qty =  1.8  /20 },
        { stat = ARMOUR,          qty = 16    /20 },
      },
      [BOMBARDIERS] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 17.14 /20 },
        { stat = BOARDING_DAMAGE, qty =  2.25 /20 },
        { stat = SPEED,           qty =  1.7  /20 },
        { stat = MANOEUVRABILITY, qty =  1.2  /20 },
        { stat = ARMOUR,          qty =  4    /20 },
      },
    },
  },
  {
    name           = "Tempest",
    tier           = 3,
    principle_path = SEAFARING,
    class          = HUNTER,
    hybrid_path    = NONE,
    icon_filename  = "T_Ship_Hunter_Tier1_dot5.png",
    pier           = SHALLOW_PIER,
    description    = "Tempest is designed to rip merchant ships apart before they even know what hit them. What she lacks in hull strength, she more than makes up for in firepower. She is as fast as she is deadly.",
    construction_costs = {
      { resource = PLANKS, qty = 50 },
      { resource = ROPE,   qty = 50 },
      { resource = SAILS,  qty = 30 },
    },
    crew_types = {
      { type = SWABBIES,    qty = 25 },
      { type = SCALLYWAGS,  qty = 30 },
      { type = BOMBARDIERS, qty = 30 },
    },
    stats_base = {
      { stat = HEALTH,   qty = 105 },
      { stat = CREW,     qty =  60 },
      { stat = SUPPLIES, qty =  26 },
      { stat = GUN_DAMAGE,      qty =  8 },
      { stat = BOARDING_DAMAGE, qty =  3 },
      { stat = SPEED,           qty = 20 },
      { stat = MANOEUVRABILITY, qty =  3 },
      { stat = ARMOUR,          qty =  3 },
    },
    stats_crew_bonuses = {
      [SWABBIES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 0 },
        { stat = BOARDING_DAMAGE, qty = 0 },
        { stat = SPEED,           qty = 0 },
        { stat = MANOEUVRABILITY, qty = 0 },
        { stat = ARMOUR,          qty = 0 },
      },
      [SCALLYWAGS] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty =  2.35 /30 },
        { stat = BOARDING_DAMAGE, qty =  1    /30 },
        { stat = SPEED,           qty =  2.67 /30 },
        { stat = MANOEUVRABILITY, qty =  2.05 /30 },
        { stat = ARMOUR,          qty =  2.4  /30 },
      },
      [BOMBARDIERS] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty =  5.65 /30 },
        { stat = BOARDING_DAMAGE, qty =  2    /30 },
        { stat = SPEED,           qty = 17.33 /30 },
        { stat = MANOEUVRABILITY, qty =  0.95 /30 },
        { stat = ARMOUR,          qty =  0.6  /30 },
      },
    },
  },
  {
    name           = "Wolfhound",
    tier           = 3,
    principle_path = WEALTH,
    class          = REAVER,
    hybrid_path    = NONE,
    icon_filename  = "T_Ship_Raider_Tier1_dot5.png",
    pier           = SHALLOW_PIER,
    description    = "Once Wolfhound sets her sights on you, escape is a fool's hope. With a crew built for boarding, she will swarm enemy decks and take everything in her path. Wolfhound is inevitable.",
    construction_costs = {
      { resource = PLANKS, qty = 50 },
      { resource = ROPE,   qty = 50 },
      { resource = SAILS,  qty = 30 },
    },
    crew_types = {
      { type = SWABBIES,    qty = 25 },
      { type = PICAROONS,   qty = 30 },
      { type = CROWS_EYES, qty = 30 },
    },
    stats_base = {
      { stat = HEALTH,   qty = 123 },
      { stat = CREW,     qty =  60 },
      { stat = SUPPLIES, qty =  26 },
      { stat = GUN_DAMAGE,      qty =  3 },
      { stat = BOARDING_DAMAGE, qty = 20 },
      { stat = SPEED,           qty =  3 },
      { stat = MANOEUVRABILITY, qty =  3 },
      { stat = ARMOUR,          qty =  8 },
    },
    stats_crew_bonuses = {
      [SWABBIES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 0 },
        { stat = BOARDING_DAMAGE, qty = 0 },
        { stat = SPEED,           qty = 0 },
        { stat = MANOEUVRABILITY, qty = 0 },
        { stat = ARMOUR,          qty = 0 },
      },
      [PICAROONS] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty =  0.46 /30 },
        { stat = BOARDING_DAMAGE, qty =  2.5  /30 },
        { stat = SPEED,           qty =  1.5  /30 },
        { stat = MANOEUVRABILITY, qty =  2.45 /30 },
        { stat = ARMOUR,          qty =  6.4  /30 },
      },
      [CROWS_EYES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty =  2.54 /30 },
        { stat = BOARDING_DAMAGE, qty = 17.5  /30 },
        { stat = SPEED,           qty =  1.5  /30 },
        { stat = MANOEUVRABILITY, qty =  0.55 /30 },
        { stat = ARMOUR,          qty =  1.6  /30 },
      },
    },
  },
  {
    name           = "Rogue",
    tier           = 4,
    principle_path = NOTORIETY,
    class          = PROWLER,
    hybrid_path    = NONE,
    icon_filename  = "T_Ship_Smuggler_Tier2.png",
    pier           = TRADE_PIER,
    description    = "The black pitch used to treat Rogue's timber also gave birth to her name. A true smugglers' vessel, Rogue is said to blend into the shadows of the ocean, making her near impossible to track.",
    construction_costs = {
      { resource = PLANKS,     qty = 75 },
      { resource = ROPE,       qty = 75 },
      { resource = SAILS,      qty = 50 },
      { resource = FIGUREHEAD, qty = 10 },
    },
    crew_types = {
      { type = SWABBIES,    qty = 20 },
      { type = CROWS_EYES, qty = 25 },
      { type = BUCCANEERS,  qty = 35 },
    },
    stats_base = {
      { stat = HEALTH,   qty = 175 },
      { stat = CREW,     qty =  60 },
      { stat = SUPPLIES, qty =  52 },
      { stat = GUN_DAMAGE,      qty =  5 },
      { stat = BOARDING_DAMAGE, qty = 13 },
      { stat = SPEED,           qty =  5 },
      { stat = MANOEUVRABILITY, qty = 33 },
      { stat = ARMOUR,          qty =  5 },
    },
    stats_crew_bonuses = {
      [SWABBIES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 0 },
        { stat = BOARDING_DAMAGE, qty = 0 },
        { stat = SPEED,           qty = 0 },
        { stat = MANOEUVRABILITY, qty = 0 },
        { stat = ARMOUR,          qty = 0 },
      },
      [CROWS_EYES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty =  3.31 /25 },
        { stat = BOARDING_DAMAGE, qty = 10    /25 },
        { stat = SPEED,           qty =  2.08 /25 },
        { stat = MANOEUVRABILITY, qty =  3.27 /25 },
        { stat = ARMOUR,          qty =  0.66 /25 },
      },
      [BUCCANEERS] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty =  1.69 /35 },
        { stat = BOARDING_DAMAGE, qty =  3    /35 },
        { stat = SPEED,           qty =  2.92 /35 },
        { stat = MANOEUVRABILITY, qty = 29.73 /35 },
        { stat = ARMOUR,          qty =  4.34 /35 },
      },
    },
  },
  {
    name           = "Sea Dragon",
    tier           = 4,
    principle_path = EMPIRE,
    class          = DESTROYER,
    hybrid_path    = NONE,
    icon_filename  = "T_Ship_Destroyer_Tier2.png",
    pier           = TRADE_PIER,
    description    = "Sea Dragon is a fortress on water. Her thick armoured hull and impressive firepower make her the vanguard of any fleet, able to withstand and deal out incredible damage. Once she's in range, there's no escaping her wrath.",
    construction_costs = {
      { resource = PLANKS, qty = 75 },
      { resource = ROPE,   qty = 75 },
      { resource = SAILS,  qty = 50 },
      { resource = PITCH,  qty = 60 },
    },
    crew_types = {
      { type = SWABBIES,    qty = 20 },
      { type = BOMBARDIERS, qty = 25 },
      { type = BUCCANEERS,  qty = 35 },
    },
    stats_base = {
      { stat = HEALTH,   qty = 205 },
      { stat = CREW,     qty =  60 },
      { stat = SUPPLIES, qty =  30 },
      { stat = GUN_DAMAGE,      qty = 33 },
      { stat = BOARDING_DAMAGE, qty =  5 },
      { stat = SPEED,           qty =  5 },
      { stat = MANOEUVRABILITY, qty =  5 },
      { stat = ARMOUR,          qty = 33 },
    },
    stats_crew_bonuses = {
      [SWABBIES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 0 },
        { stat = BOARDING_DAMAGE, qty = 0 },
        { stat = SPEED,           qty = 0 },
        { stat = MANOEUVRABILITY, qty = 0 },
        { stat = ARMOUR,          qty = 0 },
      },
      [BOMBARDIERS] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 22.5  /25  },
        { stat = BOARDING_DAMAGE, qty =  2.94 /25 },
        { stat = SPEED,           qty =  2.41 /25 },
        { stat = MANOEUVRABILITY, qty =  1.24 /25 },
        { stat = ARMOUR,          qty =  4.38 /25 },
      },
      [BUCCANEERS] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 10.5  /35 },
        { stat = BOARDING_DAMAGE, qty =  2.06 /35 },
        { stat = SPEED,           qty =  2.59 /35 },
        { stat = MANOEUVRABILITY, qty =  3.76 /35 },
        { stat = ARMOUR,          qty = 28.62 /35 },
      },
    },
  },
  {
    name           = "Fortune",
    tier           = 4,
    principle_path = SEAFARING,
    class          = HUNTER,
    hybrid_path    = NONE,
    icon_filename  = "T_Ship_Hunter_Tier2.png",
    pier           = TRADE_PIER,
    description    = "Fortune's pace is a sight to behold. A frigate built for speed and precision, her sleek design allows her to outpace almost any ship on the seas. As fast as she is lethal; merchant vessels don't stand a chance. Her name is said to bring luck to all those who sail her.",
    construction_costs = {
      { resource = PLANKS,   qty = 75 },
      { resource = ROPE,     qty = 75 },
      { resource = SAILS,    qty = 50 },
      { resource = FITTINGS, qty = 50 },
    },
    crew_types = {
      { type = SWABBIES,    qty = 30 },
      { type = BOMBARDIERS, qty = 35 },
      { type = NAVIGATORS,  qty = 45 },
    },
    stats_base = {
      { stat = HEALTH,   qty = 175 },
      { stat = CREW,     qty =  80 },
      { stat = SUPPLIES, qty =  30 },
      { stat = GUN_DAMAGE,      qty = 13 },
      { stat = BOARDING_DAMAGE, qty =  5 },
      { stat = SPEED,           qty = 33 },
      { stat = MANOEUVRABILITY, qty =  5 },
      { stat = ARMOUR,          qty =  5 },
    },
    stats_crew_bonuses = {
      [SWABBIES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 0 },
        { stat = BOARDING_DAMAGE, qty = 0 },
        { stat = SPEED,           qty = 0 },
        { stat = MANOEUVRABILITY, qty = 0 },
        { stat = ARMOUR,          qty = 0 },
      },
      [BOMBARDIERS] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty =  5.43 /35 },
        { stat = BOARDING_DAMAGE, qty =  2.69 /35 },
        { stat = SPEED,           qty = 23.65 /35 },
        { stat = MANOEUVRABILITY, qty =  1.59 /35 },
        { stat = ARMOUR,          qty =  0.71 /35 },
      },
      [NAVIGATORS] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty =  7.57 /45 },
        { stat = BOARDING_DAMAGE, qty =  2.31 /45 },
        { stat = SPEED,           qty =  9.35 /45 },
        { stat = MANOEUVRABILITY, qty =  3.41 /45 },
        { stat = ARMOUR,          qty =  4.29 /45 },
      },
    },
  },
  {
    name           = "Providence",
    tier           = 4,
    principle_path = WEALTH,
    class          = REAVER,
    hybrid_path    = NONE,
    icon_filename  = "T_Ship_Raider_Tier2.png",
    pier           = TRADE_PIER,
    description    = "Providence always sets sail in pursuit of wealth. With a hold made for plunder and a crew ready to raid, whatever ship she targets can kiss goodbye to its booty. When Providence sets sail, riches are sure to follow.",
    construction_costs = {
      { resource = PLANKS,   qty = 75 },
      { resource = ROPE,     qty = 75 },
      { resource = SAILS,    qty = 50 },
      { resource = FITTINGS, qty = 50 },
    },
    crew_types = {
      { type = SWABBIES,    qty = 30 },
      { type = CROWS_EYES, qty = 35 },
      { type = NAVIGATORS,  qty = 45 },
    },
    stats_base = {
      { stat = HEALTH,   qty = 205 },
      { stat = CREW,     qty =  80 },
      { stat = SUPPLIES, qty =  30 },
      { stat = GUN_DAMAGE,      qty =  5 },
      { stat = BOARDING_DAMAGE, qty = 33 },
      { stat = SPEED,           qty =  5 },
      { stat = MANOEUVRABILITY, qty =  5 },
      { stat = ARMOUR,          qty = 13 },
    },
    stats_crew_bonuses = {
      [SWABBIES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 0 },
        { stat = BOARDING_DAMAGE, qty = 0 },
        { stat = SPEED,           qty = 0 },
        { stat = MANOEUVRABILITY, qty = 0 },
        { stat = ARMOUR,          qty = 0 },
      },
      [CROWS_EYES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty =  1.98 /35 },
        { stat = BOARDING_DAMAGE, qty = 24.13 /35 },
        { stat = SPEED,           qty =  3.3  /35 },
        { stat = MANOEUVRABILITY, qty =  0.67 /35 },
        { stat = ARMOUR,          qty =  1.86 /35 },
      },
      [NAVIGATORS] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty =  3.02 /45 },
        { stat = BOARDING_DAMAGE, qty =  8.87 /45 },
        { stat = SPEED,           qty =  1.7  /45 },
        { stat = MANOEUVRABILITY, qty =  4.33 /45 },
        { stat = ARMOUR,          qty = 11.14 /45 },
      },
    },
  },
  {
    name           = "Vulture",
    tier           = 4,
    principle_path = NOTORIETY,
    class          = PROWLER_PLUS,
    hybrid_path    = EMPIRE,
    icon_filename  = "T_Ship_Smuggler_Tier2_dot25.png",
    pier           = TRADE_PIER,
    description    = "Vulture is outfitted with a high-cleat rigging system, allowing her to maintain speed and manoeuvrability even in the most changeable of winds. A system of sliding floor panels in the storage hold enables the crew to stash and retrieve plunder with startling efficiency.",
    construction_costs = {
      { resource = PLANKS,     qty = 100 },
      { resource = ROPE,       qty =  75 },
      { resource = SAILS,      qty =  75 },
      { resource = FIGUREHEAD, qty =  15 },
    },
    crew_types = {
      { type = SWABBIES,    qty = 30 },
      { type = CROWS_EYES, qty = 35 },
      { type = BUCCANEERS,  qty = 35 },
    },
    stats_base = {
      { stat = HEALTH,   qty = 205 },
      { stat = CREW,     qty =  70 },
      { stat = SUPPLIES, qty =  52 },
      { stat = GUN_DAMAGE,      qty = 23 },
      { stat = BOARDING_DAMAGE, qty = 13 },
      { stat = SPEED,           qty = 10 },
      { stat = MANOEUVRABILITY, qty = 33 },
      { stat = ARMOUR,          qty = 10 },
    },
    stats_crew_bonuses = {
      [SWABBIES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 0 },
        { stat = BOARDING_DAMAGE, qty = 0 },
        { stat = SPEED,           qty = 0 },
        { stat = MANOEUVRABILITY, qty = 0 },
        { stat = ARMOUR,          qty = 0 },
      },
      [CROWS_EYES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 16.87 /35 },
        { stat = BOARDING_DAMAGE, qty = 10.71 /35 },
        { stat = SPEED,           qty =  5    /35 },
        { stat = MANOEUVRABILITY, qty =  4.4  /35 },
        { stat = ARMOUR,          qty =  1.76 /35 },
      },
      [BUCCANEERS] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty =  6.13 /35},
        { stat = BOARDING_DAMAGE, qty =  2.29 /35},
        { stat = SPEED,           qty =  5    /35 },
        { stat = MANOEUVRABILITY, qty = 28.6  /35 },
        { stat = ARMOUR,          qty =  8.24 /35 },
      },
    },
  },
  {
    name           = "Ravager",
    tier           = 4,
    principle_path = EMPIRE,
    class          = DESTROYER_PLUS,
    hybrid_path    = SEAFARING,
    icon_filename  = "T_Ship_Destroyer_Tier2_dot25.png",
    pier           = TRADE_PIER,
    description    = "Ravager's cannons are cast from cold-forged iron, hammered into shape at lower temperatures—ensuring higher tolerances, greater accuracy, and greater damage with each cannon she fires. Her hull is reinforced with layered iron plates, designed to absorb and deflect incoming fire.",
    construction_costs = {
      { resource = PLANKS, qty = 100 },
      { resource = ROPE,   qty =  75 },
      { resource = SAILS,  qty =  75 },
      { resource = PITCH,  qty =  90 },
    },
    crew_types = {
      { type = SWABBIES,    qty = 25 },
      { type = BOMBARDIERS, qty = 40 },
      { type = BUCCANEERS,  qty = 30 },
    },
    stats_base = {
      { stat = HEALTH,   qty = 235 },
      { stat = CREW,     qty =  70 },
      { stat = SUPPLIES, qty =  44 },
      { stat = GUN_DAMAGE,      qty = 33 },
      { stat = BOARDING_DAMAGE, qty = 10 },
      { stat = SPEED,           qty = 18 },
      { stat = MANOEUVRABILITY, qty = 10 },
      { stat = ARMOUR,          qty = 33 },
    },
    stats_crew_bonuses = {
      [SWABBIES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 0 },
        { stat = BOARDING_DAMAGE, qty = 0 },
        { stat = SPEED,           qty = 0 },
        { stat = MANOEUVRABILITY, qty = 0 },
        { stat = ARMOUR,          qty = 0 },
      },
      [BOMBARDIERS] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 26.4  /40 },
        { stat = BOARDING_DAMAGE, qty =  7.27 /40 },
        { stat = SPEED,           qty = 11.41 /40 },
        { stat = MANOEUVRABILITY, qty =  3.81 /40 },
        { stat = ARMOUR,          qty =  7.33 /40 },
      },
      [BUCCANEERS] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty =  6.6  /30 },
        { stat = BOARDING_DAMAGE, qty =  2.73 /30 },
        { stat = SPEED,           qty =  6.59 /30 },
        { stat = MANOEUVRABILITY, qty =  6.19 /30 },
        { stat = ARMOUR,          qty = 25.67 /30 },
      },
    },
  },
  {
    name           = "Catshark",
    tier           = 4,
    principle_path = SEAFARING,
    class          = HUNTER_PLUS,
    hybrid_path    = WEALTH,
    icon_filename  = "T_Ship_Hunter_Tier2_dot25.png",
    pier           = TRADE_PIER,
    description    = "The Catshark's hull is treated with a unique blend of tallow and pine oil allowing her to effortlessly cut through the water. Her sails are a lightweight, wax-coated linen, made to catch even the slightest breeze. No wonder she's faster than ships twice her size.",
    construction_costs = {
      { resource = PLANKS,   qty = 100 },
      { resource = ROPE,     qty =  75 },
      { resource = SAILS,    qty =  75 },
      { resource = FITTINGS, qty =  75 },
    },
    crew_types = {
      { type = SWABBIES,    qty = 35 },
      { type = BOMBARDIERS, qty = 45 },
      { type = NAVIGATORS,  qty = 40 },
    },
    stats_base = {
      { stat = HEALTH,   qty = 205 },
      { stat = CREW,     qty =  85 },
      { stat = SUPPLIES, qty =  44 },
      { stat = GUN_DAMAGE,      qty = 13 },
      { stat = BOARDING_DAMAGE, qty = 18 },
      { stat = SPEED,           qty = 33 },
      { stat = MANOEUVRABILITY, qty = 10 },
      { stat = ARMOUR,          qty = 13 },
    },
    stats_crew_bonuses = {
      [SWABBIES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 0 },
        { stat = BOARDING_DAMAGE, qty = 0 },
        { stat = SPEED,           qty = 0 },
        { stat = MANOEUVRABILITY, qty = 0 },
        { stat = ARMOUR,          qty = 0 },
      },
      [BOMBARDIERS] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty =  6.62 /45 },
        { stat = BOARDING_DAMAGE, qty = 11.3  /45 },
        { stat = SPEED,           qty = 25.91 /45 },
        { stat = MANOEUVRABILITY, qty =  4.03 /45 },
        { stat = ARMOUR,          qty =  2.53 /45 },
      },
      [NAVIGATORS] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty =  6.38 /40 },
        { stat = BOARDING_DAMAGE, qty =  6.7  /40 },
        { stat = SPEED,           qty =  7.09 /40 },
        { stat = MANOEUVRABILITY, qty =  5.97 /40 },
        { stat = ARMOUR,          qty = 10.47 /40 },
      },
    },
  },
  {
    name           = "Bedlam",
    tier           = 4,
    principle_path = WEALTH,
    class          = REAVER_PLUS,
    hybrid_path    = NOTORIETY,
    icon_filename  = "T_Ship_Raider_Tier2_dot25.png",
    pier           = TRADE_PIER,
    description    = "The Bedlam has been custom-built to endure even the most arduous of raids, while her spring-loaded grappling hooks ensure a fast and secure latch onto enemy ships. The crew quarters are tight, but that only serves to strengthen the bond of those aboard. (We hope.)",
    construction_costs = {
      { resource = PLANKS,   qty = 100 },
      { resource = ROPE,     qty =  75 },
      { resource = SAILS,    qty =  75 },
      { resource = FITTINGS, qty =  75 },
    },
    crew_types = {
      { type = SWABBIES,    qty = 30 },
      { type = CROWS_EYES, qty = 50 },
      { type = NAVIGATORS,  qty = 35 },
    },
    stats_base = {
      { stat = HEALTH,   qty = 220 },
      { stat = CREW,     qty =  85 },
      { stat = SUPPLIES, qty =  44 },
      { stat = GUN_DAMAGE,      qty = 10 },
      { stat = BOARDING_DAMAGE, qty = 33 },
      { stat = SPEED,           qty = 10 },
      { stat = MANOEUVRABILITY, qty = 23 },
      { stat = ARMOUR,          qty = 13 },
    },
    stats_crew_bonuses = {
      [SWABBIES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 0 },
        { stat = BOARDING_DAMAGE, qty = 0 },
        { stat = SPEED,           qty = 0 },
        { stat = MANOEUVRABILITY, qty = 0 },
        { stat = ARMOUR,          qty = 0 },
      },
      [CROWS_EYES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty =  5.47 /50 },
        { stat = BOARDING_DAMAGE, qty = 27.5  /50 },
        { stat = SPEED,           qty =  7.81 /50 },
        { stat = MANOEUVRABILITY, qty =  5.11 /50 },
        { stat = ARMOUR,          qty =  3.05 /50 },
      },
      [NAVIGATORS] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty =  4.53 /35 },
        { stat = BOARDING_DAMAGE, qty =  5.5  /35 },
        { stat = SPEED,           qty =  2.19 /35 },
        { stat = MANOEUVRABILITY, qty = 17.89 /35 },
        { stat = ARMOUR,          qty =  9.95 /35 },
      },
    },
  },
  {
    name           = "Eclipse",
    tier           = 5,
    principle_path = NOTORIETY,
    class          = PROWLER,
    hybrid_path    = NONE,
    icon_filename  = "T_Ship_Smuggler_Tier2_dot5.png",
    pier           = TRADE_PIER,
    description    = "Eclipse is outfitted with sophisticated 'self-tensioning' lines—a rigging system that automatically adjusts the sails for optimal wind resistance. She has a unique pivoting keel that turns with the rudder, allowing her to maintain speed even through the sharpest of turns.",
    construction_costs = {
      { resource = PLANKS,      qty = 125 },
      { resource = ROPE,        qty = 125 },
      { resource = SAILS,       qty = 100 },
      { resource = FIGUREHEAD,  qty =  20 },
      { resource = JOLLY_ROGER, qty = 100 },
    },
    crew_types = {
      { type = SWABBIES,   qty = 45 },
      { type = BUCCANEERS, qty = 50 },
      { type = RENEGADES,  qty = 70 },
    },
    stats_base = {
      { stat = HEALTH,   qty = 280 },
      { stat = CREW,     qty = 120 },
      { stat = SUPPLIES, qty =  78 },
      { stat = GUN_DAMAGE,      qty =  8 },
      { stat = BOARDING_DAMAGE, qty = 20 },
      { stat = SPEED,           qty =  8 },
      { stat = MANOEUVRABILITY, qty = 52 },
      { stat = ARMOUR,          qty =  8 },
    },
    stats_crew_bonuses = {
      [SWABBIES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 0 },
        { stat = BOARDING_DAMAGE, qty = 0 },
        { stat = SPEED,           qty = 0 },
        { stat = MANOEUVRABILITY, qty = 0 },
        { stat = ARMOUR,          qty = 0 },
      },
      [BUCCANEERS] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty =  1.36 /50 },
        { stat = BOARDING_DAMAGE, qty =  2.36 /50 },
        { stat = SPEED,           qty =  2.99 /50 },
        { stat = MANOEUVRABILITY, qty = 43.78 /50 },
        { stat = ARMOUR,          qty =  5    /50 },
      },
      [RENEGADES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty =  6.64 /70 },
        { stat = BOARDING_DAMAGE, qty = 17.64 /70 },
        { stat = SPEED,           qty =  5.01 /70 },
        { stat = MANOEUVRABILITY, qty =  9.22 /70 },
        { stat = ARMOUR,          qty =  3    /70 },
      },
    },
  },
  {
    name           = "Warlord",
    tier           = 5,
    principle_path = EMPIRE,
    class          = DESTROYER,
    hybrid_path    = NONE,
    icon_filename  = "T_Ship_Destroyer_Tier2_dot5.png",
    pier           = TRADE_PIER,
    description    = "Warlord is fitted with a laminated timber hull, reinforced with iron bands at key structural points. This revolutionary combination enables her to survive greater damage than was previously thought possible.",
    construction_costs = {
      { resource = PLANKS,    qty = 125 },
      { resource = ROPE,      qty = 125 },
      { resource = SAILS,     qty = 100 },
      { resource = PITCH,     qty = 120 },
      { resource = NAVAL_GUN, qty =  40 },
    },
    crew_types = {
      { type = SWABBIES,   qty = 45 },
      { type = BUCCANEERS, qty = 50 },
      { type = MARAUDERS,  qty = 70 },
    },
    stats_base = {
      { stat = HEALTH,   qty = 328 },
      { stat = CREW,     qty = 120 },
      { stat = SUPPLIES, qty = 46 },
      { stat = GUN_DAMAGE,      qty = 52 },
      { stat = BOARDING_DAMAGE, qty =  8 },
      { stat = SPEED,           qty =  8 },
      { stat = MANOEUVRABILITY, qty =  8 },
      { stat = ARMOUR,          qty = 52 },
    },
    stats_crew_bonuses = {
      [SWABBIES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 0 },
        { stat = BOARDING_DAMAGE, qty = 0 },
        { stat = SPEED,           qty = 0 },
        { stat = MANOEUVRABILITY, qty = 0 },
        { stat = ARMOUR,          qty = 0 },
      },
      [BUCCANEERS] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty =  7.88 /50 },
        { stat = BOARDING_DAMAGE, qty =  2.11 /50 },
        { stat = SPEED,           qty =  2.47 /50 },
        { stat = MANOEUVRABILITY, qty =  4.56 /50 },
        { stat = ARMOUR,          qty = 34.67 /50 },
      },
      [MARAUDERS] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 44.12 /70 },
        { stat = BOARDING_DAMAGE, qty =  5.89 /70 },
        { stat = SPEED,           qty =  5.53 /70 },
        { stat = MANOEUVRABILITY, qty =  3.44 /70 },
        { stat = ARMOUR,          qty = 17.33 /70 },
      },
    },
  },
  {
    name           = "Stalker",
    tier           = 5,
    principle_path = SEAFARING,
    class          = HUNTER,
    hybrid_path    = NONE,
    icon_filename  = "T_Ship_Hunter_Tier2_dot5.png",
    pier           = TRADE_PIER,
    description    = "Stalker's hull is built around a ribbed frame structure, making her both lightweight and incredibly resilient. The tight weave of her hemp sails reduces air loss, allowing them to catch the wind more effectively. This combination of speed and strength makes Stalker a vessel like no other.",
    construction_costs = {
      { resource = PLANKS,    qty = 125 },
      { resource = ROPE,      qty = 125 },
      { resource = SAILS,     qty = 100 },
      { resource = FITTINGS,  qty = 100 },
      { resource = NAVAL_GUN, qty =  40 },
    },
    crew_types = {
      { type = SWABBIES,   qty = 65 },
      { type = NAVIGATORS, qty = 70 },
      { type = MARAUDERS,  qty = 90 },
    },
    stats_base = {
      { stat = HEALTH,   qty = 280 },
      { stat = CREW,     qty = 160 },
      { stat = SUPPLIES, qty =  46 },
      { stat = GUN_DAMAGE,      qty = 20 },
      { stat = BOARDING_DAMAGE, qty =  8 },
      { stat = SPEED,           qty = 52 },
      { stat = MANOEUVRABILITY, qty =  8 },
      { stat = ARMOUR,          qty =  8 },
    },
    stats_crew_bonuses = {
      [SWABBIES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 0 },
        { stat = BOARDING_DAMAGE, qty = 0 },
        { stat = SPEED,           qty = 0 },
        { stat = MANOEUVRABILITY, qty = 0 },
        { stat = ARMOUR,          qty = 0 },
      },
      [NAVIGATORS] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty =  7.74 /70 },
        { stat = BOARDING_DAMAGE, qty =  2.73 /70 },
        { stat = SPEED,           qty =  8.47 /70 },
        { stat = MANOEUVRABILITY, qty =  4.21 /70 },
        { stat = ARMOUR,          qty =  5.48 /70 },
      },
      [MARAUDERS] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 12.26 /90 },
        { stat = BOARDING_DAMAGE, qty =  5.27 /90 },
        { stat = SPEED,           qty = 43.53 /90 },
        { stat = MANOEUVRABILITY, qty =  3.79 /90 },
        { stat = ARMOUR,          qty =  2.52 /90 },
      },
    },
  },
  {
    name           = "Thingum",
    tier           = 5,
    principle_path = WEALTH,
    class          = REAVER,
    hybrid_path    = NONE,
    icon_filename  = "T_Ship_Raider_Tier2_dot5.png",
    pier           = TRADE_PIER,
    description    = "Thingum is an experiment in chaos. While most of the crew boards enemy ships conventionally, others are launched into the air by a complex system of pulleys and springs, sending them tumbling onto enemy decks before anyone knows what's happened. Injuries are expected, but the surprise is worth the cost.",
    construction_costs = {
      { resource = PLANKS,      qty = 125 },
      { resource = ROPE,        qty = 125 },
      { resource = SAILS,       qty = 100 },
      { resource = FITTINGS,    qty = 100 },
      { resource = STEEL_CHAIN, qty =  50 },
    },
    crew_types = {
      { type = SWABBIES,   qty = 65 },
      { type = NAVIGATORS, qty = 70 },
      { type = RENEGADES,  qty = 90 },
    },
    stats_base = {
      { stat = HEALTH,   qty = 328 },
      { stat = CREW,     qty = 160 },
      { stat = SUPPLIES, qty =  46 },
      { stat = GUN_DAMAGE,      qty =  8 },
      { stat = BOARDING_DAMAGE, qty = 52 },
      { stat = SPEED,           qty =  8 },
      { stat = MANOEUVRABILITY, qty =  8 },
      { stat = ARMOUR,          qty = 20 },
    },
    stats_crew_bonuses = {
      [SWABBIES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 0 },
        { stat = BOARDING_DAMAGE, qty = 0 },
        { stat = SPEED,           qty = 0 },
        { stat = MANOEUVRABILITY, qty = 0 },
        { stat = ARMOUR,          qty = 0 },
      },
      [NAVIGATORS] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty =  3.35 /70 },
        { stat = BOARDING_DAMAGE, qty =  8.47 /70 },
        { stat = SPEED,           qty =  1.65 /70 },
        { stat = MANOEUVRABILITY, qty =  6.36 /70 },
        { stat = ARMOUR,          qty = 12.89 /70 },
      },
      [RENEGADES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty =  4.65 /90 },
        { stat = BOARDING_DAMAGE, qty = 43.53 /90 },
        { stat = SPEED,           qty =  6.35 /90 },
        { stat = MANOEUVRABILITY, qty =  1.64 /90 },
        { stat = ARMOUR,          qty =  7.11 /90 },
      },
    },
  },
  {
    name           = "Wraith",
    tier           = 6,
    principle_path = NOTORIETY,
    class          = PROWLER,
    hybrid_path    = NONE,
    icon_filename  = "T_Ship_Smuggler_Tier3.png",
    pier           = DEEP_WATER_PIER,
    description    = "Wraith's hull is crafted from lightweight, tar-slick timbers, allowing her to slip through the seas with unmatched grace. Her rigging system is the culmination of years of research, allowing her to change direction in an instant. Wraith moves through the water like a shadow—smooth, swift and impossibly fast.",
    construction_costs = {
      { resource = PLANKS,        qty = 175 },
      { resource = ROPE,          qty = 175 },
      { resource = SAILS,         qty = 150 },
      { resource = FIGUREHEAD,    qty =  30 },
      { resource = JOLLY_ROGER,   qty = 150 },
      { resource = SILVER_LINING, qty =  30 },
    },
    crew_types = {
      { type = SWABBIES,  qty = 105 },
      { type = RENEGADES, qty = 110 },
      { type = CORSAIRS,  qty = 140 },
    },
    stats_base = {
      { stat = HEALTH,   qty = 420 },
      { stat = CREW,     qty = 250 },
      { stat = SUPPLIES, qty = 104 },
      { stat = GUN_DAMAGE,      qty = 12 },
      { stat = BOARDING_DAMAGE, qty = 30 },
      { stat = SPEED,           qty = 12 },
      { stat = MANOEUVRABILITY, qty = 78 },
      { stat = ARMOUR,          qty = 12 },
    },
    stats_crew_bonuses = {
      [SWABBIES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 0 },
        { stat = BOARDING_DAMAGE, qty = 0 },
        { stat = SPEED,           qty = 0 },
        { stat = MANOEUVRABILITY, qty = 0 },
        { stat = ARMOUR,          qty = 0 },
      },
      [RENEGADES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty =  5.08 /110 },
        { stat = BOARDING_DAMAGE, qty = 13.68 /110 },
        { stat = SPEED,           qty =  4.63 /110 },
        { stat = MANOEUVRABILITY, qty =  7.4  /110 },
        { stat = ARMOUR,          qty =  2.87 /110 },
      },
      [CORSAIRS] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty =  6.92 /140 },
        { stat = BOARDING_DAMAGE, qty = 16.32 /140 },
        { stat = SPEED,           qty =  7.37 /140 },
        { stat = MANOEUVRABILITY, qty = 70.6  /140 },
        { stat = ARMOUR,          qty =  9.13 /140 },
      },
    },
  },
  {
    name           = "Wrath Bringer",
    tier           = 6,
    principle_path = EMPIRE,
    class          = DESTROYER,
    hybrid_path    = NONE,
    icon_filename  = "T_Ship_Destroyer_Tier3.png",
    pier           = DEEP_WATER_PIER,
    description    = "Wrath Bringer is a war machine like no other. Her hull is reinforced with triple-layered iron plates, each layer tempered to withstand even the heaviest cannon fire. Her cannons are precision-bored for maximum damage, capable of levelling fortresses with a single broadside. The embodiment of pure destruction.",
    construction_costs = {
      { resource = PLANKS,      qty = 175 },
      { resource = ROPE,        qty = 175 },
      { resource = SAILS,       qty = 150 },
      { resource = PITCH,       qty = 180 },
      { resource = NAVAL_GUN,   qty =  60 },
      { resource = COPPER_LAMP, qty =  75 },
    },
    crew_types = {
      { type = SWABBIES,  qty = 105 },
      { type = MARAUDERS, qty = 110 },
      { type = CORSAIRS,  qty = 140 },
    },
    stats_base = {
      { stat = HEALTH,   qty = 492 },
      { stat = CREW,     qty = 250 },
      { stat = SUPPLIES, qty =  60 },
      { stat = GUN_DAMAGE,      qty = 78 },
      { stat = BOARDING_DAMAGE, qty = 12 },
      { stat = SPEED,           qty = 12 },
      { stat = MANOEUVRABILITY, qty = 12 },
      { stat = ARMOUR,          qty = 78 },
    },
    stats_crew_bonuses = {
      [SWABBIES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 0 },
        { stat = BOARDING_DAMAGE, qty = 0 },
        { stat = SPEED,           qty = 0 },
        { stat = MANOEUVRABILITY, qty = 0 },
        { stat = ARMOUR,          qty = 0 },
      },
      [MARAUDERS] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 35.56 /110 },
        { stat = BOARDING_DAMAGE, qty =  2.87 /110 },
        { stat = SPEED,           qty =  5.47 /110 },
        { stat = MANOEUVRABILITY, qty =  3.22 /110 },
        { stat = ARMOUR,          qty = 16.19 /110 },
      },
      [CORSAIRS] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 42.44 /140 },
        { stat = BOARDING_DAMAGE, qty =  9.13 /140 },
        { stat = SPEED,           qty =  6.53 /140 },
        { stat = MANOEUVRABILITY, qty =  8.78 /140 },
        { stat = ARMOUR,          qty = 61.81 /140 },
      },
    },
  },
  {
    name           = "Neptune",
    tier           = 6,
    principle_path = SEAFARING,
    class          = HUNTER,
    hybrid_path    = NONE,
    icon_filename  = "T_Ship_Hunter_Tier3.png",
    pier           = DEEP_WATER_PIER,
    description    = "Neptune is the pinnacle of hunting vessels, designed for speed, precision, and ruthless efficiency. Her hull is crafted from lightweight ironwood and treated with a unique blend of whale oil and resin that reduces water friction to near zero. Her sails are the highest quality sun-cured flax making Neptune untouchable on the open sea.",
    construction_costs = {
      { resource = PLANKS,        qty = 175 },
      { resource = ROPE,          qty = 175 },
      { resource = SAILS,         qty = 150 },
      { resource = FITTINGS,      qty = 150 },
      { resource = NAVAL_GUN,     qty =  60 },
      { resource = SILVER_LINING, qty =  30 },
    },
    crew_types = {
      { type = SWABBIES,  qty = 130 },
      { type = MARAUDERS, qty = 135 },
      { type = CORSAIRS,  qty = 165 },
    },
    stats_base = {
      { stat = HEALTH,   qty = 420 },
      { stat = CREW,     qty = 300 },
      { stat = SUPPLIES, qty =  60 },
      { stat = GUN_DAMAGE,      qty = 30 },
      { stat = BOARDING_DAMAGE, qty = 12 },
      { stat = SPEED,           qty = 78 },
      { stat = MANOEUVRABILITY, qty = 12 },
      { stat = ARMOUR,          qty = 12 },
    },
    stats_crew_bonuses = {
      [SWABBIES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 0 },
        { stat = BOARDING_DAMAGE, qty = 0 },
        { stat = SPEED,           qty = 0 },
        { stat = MANOEUVRABILITY, qty = 0 },
        { stat = ARMOUR,          qty = 0 },
      },
      [MARAUDERS] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 13.98 /135 },
        { stat = BOARDING_DAMAGE, qty =  2.96 /135 },
        { stat = SPEED,           qty = 36.35 /135 },
        { stat = MANOEUVRABILITY, qty =  3.32 /135 },
        { stat = ARMOUR,          qty =  2.57 /135 },
      },
      [CORSAIRS] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 16.02 /165 },
        { stat = BOARDING_DAMAGE, qty =  9.04 /165 },
        { stat = SPEED,           qty = 41.65 /165 },
        { stat = MANOEUVRABILITY, qty =  8.68 /165 },
        { stat = ARMOUR,          qty =  9.43 /165 },
      },
    },
  },
  {
    name           = "Loki",
    tier           = 6,
    principle_path = WEALTH,
    class          = REAVER,
    hybrid_path    = NONE,
    icon_filename  = "T_Ship_Raider_Tier3.png",
    pier           = DEEP_WATER_PIER,
    description    = "Loki is built to conquer and claim, boasting custom-forged grappling arms that extend far faster than a traditional boarding system ever could. Her decks are designed to hold maximum plunder, while her wide hull enables a crew twice the size of a standard brig. Loki stands unrivalled as the ultimate raiding vessel.",
    construction_costs = {
      { resource = PLANKS,      qty = 175 },
      { resource = ROPE,        qty = 175 },
      { resource = SAILS,       qty = 150 },
      { resource = FITTINGS,    qty = 150 },
      { resource = STEEL_CHAIN, qty =  75 },
      { resource = COPPER_LAMP, qty =  75 },
    },
    crew_types = {
      { type = SWABBIES,  qty = 130 },
      { type = RENEGADES, qty = 135 },
      { type = CORSAIRS,  qty = 165 },
    },
    stats_base = {
      { stat = HEALTH,   qty = 492 },
      { stat = CREW,     qty = 300 },
      { stat = SUPPLIES, qty =  60 },
      { stat = GUN_DAMAGE,      qty = 12 },
      { stat = BOARDING_DAMAGE, qty = 78 },
      { stat = SPEED,           qty = 12 },
      { stat = MANOEUVRABILITY, qty = 12 },
      { stat = ARMOUR,          qty = 30 },
    },
    stats_crew_bonuses = {
      [SWABBIES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty = 0 },
        { stat = BOARDING_DAMAGE, qty = 0 },
        { stat = SPEED,           qty = 0 },
        { stat = MANOEUVRABILITY, qty = 0 },
        { stat = ARMOUR,          qty = 0 },
      },
      [RENEGADES] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty =  5.2  /135 },
        { stat = BOARDING_DAMAGE, qty = 36.35 /135 },
        { stat = SPEED,           qty =  4.75 /135 },
        { stat = MANOEUVRABILITY, qty =  1.18 /135 },
        { stat = ARMOUR,          qty =  7.4  /135 },
      },
      [CORSAIRS] = {
        { stat = HEALTH,   qty = 0 },
        { stat = CREW,     qty = 0 },
        { stat = SUPPLIES, qty = 0 },
        { stat = GUN_DAMAGE,      qty =  6.8  /165 },
        { stat = BOARDING_DAMAGE, qty = 41.65 /165 },
        { stat = SPEED,           qty =  7.25 /165 },
        { stat = MANOEUVRABILITY, qty = 10.82 /165 },
        { stat = ARMOUR,          qty = 22.6  /165 },
      },
    },
  }
}



local ships = {
  ["Landlubber"]    =  1,
  ["Moonlight"]     =  2,
  ["Iron Fist"]     =  3,
  ["Tide Runner"]   =  4,
  ["Sharktooth"]    =  5,
  ["Azimuth"]       =  6,
  ["Steel Edge"]    =  7,
  ["Huracán"]       =  8,
  ["Goldseeker"]    =  9,
  ["Nightshade"]    = 10,
  ["Yoke Breaker"]  = 11,
  ["Tempest"]       = 12,
  ["Wolfhound"]     = 13,
  ["Rogue"]         = 14,
  ["Sea Dragon"]    = 15,
  ["Fortune"]       = 16,
  ["Providence"]    = 17,
  ["Vulture"]       = 18,
  ["Ravager"]       = 19,
  ["Catshark"]      = 20,
  ["Bedlam"]        = 21,
  ["Eclipse"]       = 22,
  ["Warlord"]       = 23,
  ["Stalker"]       = 24,
  ["Thingum"]       = 25,
  ["Wraith"]        = 26,
  ["Wrath Bringer"] = 27,
  ["Neptune"]       = 28,
  ["Loki"]          = 29,
}

--#endregion



--#region: Auxiliary data enrichment table

local ship_class_descriptions = {
  [SPECIAL]   = "Some ships are able to fulfil multiple roles. Sometimes they are just bad at everything, and sometimes they are just out of this world.",
  [PROWLER]   = "Slick as an eel and sporting vast cargo holds, Prowlers are the ship of choice for shady business like Smuggling Runs. They're not made for attacking problems head on, but their supplies last long, and their nimble frame lets them stay out of sight until it's time to strike.",
  [DESTROYER] = "Armed to the teeth and plated with thick armour, Destroyers excel at cracking fortified targets like Crown Ports. They lumber into view with the grace of a sea cow, but once they get in range, they pelt their opponent with heavy cannons and shrug off any attacks that come their way.",
  [HUNTER]    = "Fast as a tiger shark and able to carry a big crew, Hunters are unmatched at hit-and-run attacks on Merchant Ships and the like. There may be stronger or stealthier predators out there, but if you want to be the top of the food chain in the Seven Seas, nothing beats speed and sheer tenacity.",
  [REAVER]    = "Built for combat and carrying a vast raiding party, Reavers are able to plunder well-guarded locations like Treasure Caves. They might lack armour or finesse, but through sheer aggression and bloodthirst, their opponents might surrender before they even get into boarding range.",
}

--#endregion



--#region: Data validation call

validate_ships(ships_list, ships)

--#endregion



--#region: Public API to ships_data

--- Public API to ships data.
local p = {}

--- Get a ship record by name.
function p.get_ship_by_name(name)
  local index = ships[name]
  if index then
    return ships_list[index]
  end
  return nil
end

--- Get a ship record by its canonical order:
--- from Tier 1 to Tier 6 clockwise from top around the Compass.
function p.get_ship_by_index(index)
  return ships_list[index]
end

--- Get all ship records, in canonical order:
--- from Tier 1 to Tier 6 clockwise from top around the Compass.
function p.get_all_ships()
  return ships_list
end

--- Get a ship class description by class name.
function p.get_ship_class_description(class)
  return ship_class_descriptions[class:gsub("%+$", "")]
end

function p.get_count_of_ships()
  return #ships_list
end

return p

--#endregion