Ship Artillery

Ship Weapons are represented by the following enum:

#![allow(unused)] fn main() { pub enum ShipWeaponId { SmallCatapult = 0x00, SmallBallista = 0x01, LargeCatapult = 0x02, LargeBallista = 0x03, Bombard = 0x04, Cannon = 0x05, } }

Cutlasses are not ship weapons.

Ship Artillery Scaling

The amounts P3 displays in-game are not the values the game uses under the hood. Every ship weapon has a scaling factor, through which the game divides the actual values.

A table that maps every ShipWeaponId to its scaling factor can be found at 0x00672CB4. This reveals the following factors:

#![allow(unused)] fn main() { ShipWeaponId::SmallCatapult => 1000 ShipWeaponId::SmallBallista => 1000 ShipWeaponId::LargeCatapult => 2000 ShipWeaponId::LargeBallista => 2000 ShipWeaponId::Bombard => 2000 ShipWeaponId::Cannon => 1000 }

Ship Artillery Slots

A ship's artillery slots are filled with the following enum:

enum ship_artillery_slot : unsigned __int8 { ship_artillery_slot_small_catapult = 0u, ship_artillery_slot_small_ballista = 1u, ship_artillery_slot_large_catapult = 2u, ship_artillery_slot_large_ballista = 3u, ship_artillery_slot_bombard = 4u, ship_artillery_slot_cannon = 5u, ship_artillery_slot_large_neighbor = 6u, ship_artillery_slot_unavailable = 7u, ship_artillery_slot_empty = 255u, };

The slots are indexed as indicated here: