Ship Data
Ship Data represents a singular ship with all of its limit breaks. Every ship contains the following properties:
Property | Type | Description |
---|---|---|
global_name | string |
The prefixed English name of this ship. Displayed by all clients. This is the name displayed below the actual ship name when viewing a ship. |
id | number |
The ID of this ship, unique to every ship. |
gid | number |
The group ID of the ship, also unique to every ship. Mostly unused by this data. |
flags | number |
Bit mask of special flags. Each flag represents roughly a category this ship falls into. See Ship Flags for more info. |
name | string |
Names this ship has. |
rarity | Rarity |
The rarity of this ship. |
tags | string[] |
All game tags assigned to this ship in lower case. |
nation | Nation |
The nation of this ship. |
hull | Hull |
The Hull of this ship. |
specific_buff | SpecificBuff |
Special buff granted to this ship when it reaches max limit break. These used to be DD exclusive but other ships (ex. Harbin) have since gotten them. |
slots | SlotData[][] |
Data for every equipment slot at each limit break. |
stats | ShipStatsData[][] |
Stats of this ship at each limit break. |
ghost_equipment | GhostEquipmentData[][] |
Ghost equipments this ship has at each limit break. Does not contain ghost equipments that have conditions that need to be met, nor does it include weapons that are replaced by some means. |
retro? | RetroData |
(Optional) Retrofit data if this ship has a retrofit. |
research? | PRData |
(Optional) Research data if this ship is a research ship. |
skins | number[] |
IDs of all skins this ship has. |
skin_share_ids | number[] |
List of Ship IDs this ship can share skins with. |
lb_data | LimitBreakData[] |
Relevant data for each limit break that does not fit into other properties. Notably the length of this array indicates the limit break count. |
date | number |
(Approximate) release data of this ship as a UNIX Timestamp in milliseconds. |
strengthen_exp? | object |
(Optional) Stat EXP to give when this ship is used for enhancing. If absent or all props are absent it cannot be used to enhance other ships |
strengthen_exp?.fp? | number |
(Optional) Amount of stat EXP to grant to the fp stat. If absent, treat as 0. |
strengthen_exp?.trp? | number |
(Optional) Amount of stat EXP to grant to the trp stat. If absent, treat as 0. |
strengthen_exp?.avi? | number |
(Optional) Amount of stat EXP to grant to the avi stat. If absent, treat as 0. |
strengthen_exp?.aa? | number |
(Optional) Amount of stat EXP to grant to the aa stat. If absent, treat as 0. (Currently unused) |
strengthen_exp?.rld? | number |
(Optional) Amount of stat EXP to grant to the rld stat. If absent, treat as 0. |
fleet_tech? | FleetTech |
(Optional) Data for fleet technology. Absent means this ship grants no bonuses. |
servers | AlServer[] |
List of servers this ship is (or at any point was) obtainable on. |
icon | string |
The icon this ship uses in lower case. Available under https://als.mrlar.dev/<compact, yard, full, qicon or chibi>/<icon>.webp . |
aliases? | string[] |
(Optional) List of all known community aliases this ship has. |
class | string | null |
Historical/Logical ship class of this ship. This is null for all Collab and meta ships. |
upgrade_text | UpgradeText[] |
Text description of what is unlocked at each limit break or development level (for PR/DR ships). |
oath_skin? | boolean |
(Optional) Whether this ship has an oath skin, treat absent as false. |
unique_aug? | numer |
(Optional) The ID of this ships unique augment if any. If absent (or 0) the ship does not have one. |
skills | number[][] |
List of IDs for each skill this ship has at given limit breaks. |
Ship Flags
Ship Flags is a 5-bit bitmask where each bit represents a category a ship can belong to.
Bit (Mask) | Label | Description |
---|---|---|
0 (1 « 0) | Bulin | A special category for the 3 bulin ships. |
1 (1 « 1) | Retrofit | The ship has a retrofit. |
2 (1 « 2) | Research | The ship is a research ship, with or without fate simulation. |
3 (1 « 3) | Fate Simulation | The ship is a research ship with fate simulation. |
4 (1 « 4) | META | The ship is a META ship. |
Checking for a Flag
To check whether a ship has a specific flag, use a bitwise AND operation. For example:
if ((ship.flags & (1 << x)) !== 0) {
// The ship has the flag corresponding to bit x
}
Ship Slot Data
Represents the data for a single slot of a ship. Has the following properties:
Property | Type | Description |
---|---|---|
parallel | number |
Amount of shots that can be loaded in parallel (at once). |
efficiency | number |
The efficiency of this slot (decimal). |
base | number |
Amount of mounts this ship has. |
preload | number |
Amount of pre-loads this ship has for this slot not accounting for skills. For non-torpedoes each preload fires all mounts (i.E. a ship with 2 mounts fires twice for each preload). |
types | EquipmentType[] |
List of equipment types that fit into this slot. |
default_id | number |
Equipment ID of the equipment to use when this slot is empty. These IDs are represented in default_equips . If for some reason equipment does not match the types of the slot the game still uses it! |
capacity? | number |
(Optional) Amount of salvos/strikes this ship can store. This value is only present for slots that have BB Guns or Planes. For torpedoes this value is identical to base. |
Ship Stats Data
Represents the stats of a ship including the growth rate per level, enhancements and anything
related. It extends BasicShipStats
and ShipScalingStats
.
Contains the following properties:
Property | Type | Description |
---|---|---|
armor | number |
The armor type of the ship as a number with the range [0, 3] for Light, Medium and Heavy respectively. |
range | number[][][] | null |
The hunting range of this ship if it is a submarine-like or null otherwise. Refer to Computing Hunting Range for computation. |
Basic Ship Stats
Contains one optional property of type number
for each ShipStatKey that
represents the base stats of the ship.
Scaling Ship Stats
Used to determine stats at any given level. Contains the following:
Property | Type | Description |
---|---|---|
scaling? | object |
(Optional) Scalars used to determine stats at each level. Contains one optional property of type number for each ScalableStatKey. |
scaling_extra? | object |
(Optional) Extra stats granted at each level. Contains one optional property of type number for each ScalableStatKey. At the time of writting no ship-girl uses this. |
strengthen? | object |
(Optional) Stats gained from enhancing or PR/DR/META development. Contains one optional property of type number for each ScalableStatKey.For non-research, non-meta ships this is the maximum gainable at level 100. To calculate other levels refer to here. For research ships this is at Dev0, Dev10, Dev20 and Dev30 respectively. It does not include miltestones, those are in PRData .For META ships it is also the maximum possible (including milestones), but since META development can be finished at any point it can freely be used at any level. |
Computing Base Stats
To calculate the ship stats at any level you can follow the following:
Oxygen, Ammo and range_level
These do not scale with level at all and can be used as is.
Currently, no ship with a retrofit adds to these values, that may change.
All other keys
The formula is as follows: \(\lfloor (base + \frac{scaling \times (lvl - 1)}{1000} + \frac{extra \times (max(lvl, 100) - 100)}{1000} + strengthen + pr) \times affinity \rfloor\).
Where:
- base: The base value provided by
ShipStatsData[key]
(or 0) - scaling: The scalar value provided by
ShipStatsData.scaling[key]
(or 0) - extra: The extra scalar provided by
ShipStatsData.scaling_extra[key]
(or 0) - lvl: The Level of the ship
- strengthen: strengthen values as provided by
ShipStatsData.strengthen[key]
.- For non-research non-meta non-research ships this max attainable at level 100.
- You can compute how much the actual maximum at any given level is using the formula at the end.
- For PR ships it includes all bonuses up to and including the maximum possible Dev level at that limit break (Dev0, Dev10, Dev20, Dev30 respectively). Meaning their numbers may be floats and should neither be rounded nor floored and just be used as is.
- META ship enhancement can be finished at any point so it can always be used.
- For non-research non-meta non-research ships this max attainable at level 100.
- pr: Any stats gained from PR Dev levels as determined by
PRData?.stats[key]
(or 0). - affinity: The affinity scalar. This is always fixed at 1 for
spd
andluck
.
If the ship has a retrofit these values may have to be overwritten. Refer to Computing Retrofit Stats.
If the ship has a fate simulation the stat value
in PRData.fate.stats[key]
may be added on top of the computed value.
Determine Max Strengthen
This section only applies to non-meta, non-research ships.
To determine max strengthen value at any given level calculate the following: \(\lfloor (3 + 7 \times (\frac{min(100, lvl)}{100})) \times total \times 0.1 \rfloor\)
Where lvl
is the ship level and total
the value from ShipStatsData.strengthen[key]
.
Computing Hunting Range
- First establish the ASR level of the submarine.
- Combine the arrays from
range[0]
torange[asrLevel - 1]
into a single array (2D ASR Array). - Create a 7x7 matrix and mark all squares as “unreachable”
- Mark the center of the matrix as “center”
- Iterate the entries of 2D ASR Array:
- use index 0 as y and index 1 as x offsets
- Mark the square [3 + y][3 + x] as “reachable”
- The result is a 7x7 matrix that represents the hunting range.
Computing Final Stats
Use the following for each ship stat:
- First compute the base stat of a ship (\(BaseStat\))
- Compute Meowfficer inheric stat multiplier (\(CatMultiplier\))
- Compute flat stat buffs from retrofits, fleet tech and Meowfficer talents (\(FlatStats\)).
- Compute \(FinalScalingStat = (BaseStat \times CatMultipler) + \sum FlatStats\)
- Compute the percentage stat modifiers from each equipment, ship and Meowfficer skill as well as Fleet Formation, Airspace Control and any other applicable buffs \(SkillBuff\) and calculate: \(SkillPercentBonus = 1 + \sum SkillBuff\). Yes, these stack additively.
- Compute the flat stats gained from skills that are straight buffs, stat conversions or augment skills (\(FlatSkillBuff\)) and calculate \(SkillFlatStats = \sum FlatSkillBuff \).
- Compute the final stat as \((FinalScalingStat \times SkillPercentBonus) + SkillFlatStats\)
Drop Data
Ship Drop Data contains relevant information on how a ship can be obtained. It provides the following properties:
Property | Type | Description |
---|---|---|
id | number |
The Ship ID this data is for. |
timer | string | null |
The mostly unique timer of the ship or null if it cannot be cosntructed. |
light | boolean |
Whether this ship can currently be constructed in the light pool. |
heavy | boolean |
Whether this ship can currently be constructed in the heavy pool. |
special | boolean |
Whether this ship can currently be constructed in the special pool. |
limted | string | null |
During which event, if any, this ship was availle in the limited construction pool. For ships that were not rate up this property is not set. |
other | UnlockType[] |
From which other common sources this ship can be obtained. |
maps | MapDrop[][] |
Maps this ship can be dropped on. The outer array has length 15 and indicates the chapter and the inner array contains info about what map and what drop type. |
notes | string[] |
Additional information that does not fit into the other properties. |
events | string[] |
Names of events this ship was part of, whether that be gacha, map drop or event shop. |
Map Drop
Represents data for a ship map drop. Provides 2 properties:
Property | Type | Description |
---|---|---|
maps | number |
The map the ship drops on, either 1, 2, 3 or 4. |
type | 0 | 1 |
The drop type, 0 means any node and 1 means boss node only. |