cavestory_save/items/
weapon.rs

1use strum::{Display, EnumIter, FromRepr};
2
3#[derive(Default, Clone, Copy, Debug, PartialEq, Eq)]
4pub struct Weapon {
5    /// type of this weapon
6    pub classification: WeaponType,
7
8    /// normally will be 0 to 3.
9    pub level: i32,
10
11    pub exp: i32,
12
13    pub ammo: i32,
14
15    /// zero means infinite ammos.
16    pub max_ammo: i32,
17}
18
19#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Display, EnumIter, FromRepr)]
20#[strum(serialize_all = "PascalCase")]
21#[repr(u32)]
22pub enum WeaponType {
23    #[default]
24    None,
25    Snake,
26    PolarStar,
27    Fireball,
28    MachineGun,
29    MissileLauncher,
30    #[strum(serialize = "Missiles [bad]")]
31    Missiles,
32    Bubbler,
33    #[strum(serialize = "Unknown [bad]")]
34    Unknown,
35    Blade,
36    SuperMissile,
37    #[strum(serialize = "SuperMissiles [bad]")]
38    SuperMissiles,
39    Nemesis,
40    Spur,
41    #[strum(serialize = "Hajime [bad]")]
42    Hajime,
43}
44
45impl From<i32> for WeaponType {
46    fn from(v: i32) -> Self {
47        WeaponType::from_repr(v as u32).unwrap_or_default()
48    }
49}