Ships

Each tribe can have one ship that is used to explore the seas and transport wares between ports.

Ships are defined in data/tribes/ships/<tribe_name>/init.lua.

new_ship_type(table)

This function adds the definition of a ship to the engine.

Parameters

table – This table contains all the data that the game engine will add to this ship. It contains the following entries:

name: A string containing the internal name of this ship.

descname: The translatable display name. Use pgettext to fetch the string.

icon: Path to the menu icon file.

capacity: An int defining how many wares or workers this ship can transport

vision_range: How far the ship can see.

hitpoints: Number of hitpoints the ship can have.

min_attack: The minimum damage this ship inflicts in a successful attack.

max_attack: The maximum damage this ship inflicts in a successful attack.

defense: The percentage by which the damage is reduced when hit.

attack_accuracy: The percentage of the chance that an attack launched by this ship hits.

heal_per_second: The number of hitpoints the ship heals per second when in a dock.

animations: A table containing all file animations for this ship. Ships have an “idle”, a “sinking” and a directional “sail” animation. Animations can either be defined as file animations in this table or as spritesheet animations as defined in table spritesheets. A mixture of the two animation formats is allowed. See Animations for a detailed description of the animation format.

spritesheets: A table containing all spritesheet animations for this ship. Ships have an “idle”, a “sinking” and a directional “sail” animation. Animations can either be defined as spritesheet animations in this table or as file animations as defined in table animations. A mixture of the two animation formats is allowed. See Animations for a detailed description of the animation format.

names: A list of strings with ship names presented to the user - be creative :)

For making the UI texts translateable, we also need to push/pop the correct textdomain.

Example:

push_textdomain("tribes")

dirname = path.dirname(__file__)

wl.Descriptions():new_ship_type {
   name = "atlanteans_ship",
   descname = pgettext("atlanteans_ship", "Ship"),
   animation_directory = dirname,
   icon = dirname .. "menu.png",
   capacity = 30,
   vision_range = 4,

   spritesheets = {
      idle = {
         fps = 10,
         frames = 39,
         rows = 7,
         columns = 6,
         hotspot = { 58, 55 }
      },
      sail = {
         fps = 10,
         frames = 40,
         rows = 7,
         columns = 6,
         directional = true,
         hotspot = { 86, 85 }
      },
      sinking = {
         fps = 7,
         frames = 22,
         rows = 6,
         columns = 4,
         hotspot = { 58, 54 }
      },
   },
   names = {
      pgettext("shipname", "Abaco"),
      pgettext("shipname", "Agate"),
   },
}

pop_textdomain()