use crate::entity::item::{ItemEntityId, WrappingPaper}; use serde::{Serialize, Deserialize}; #[derive(Debug, Copy, Clone)] pub enum ItemParseError { InvalidWeaponBytes, InvalidWeaponType, InvalidWeaponGrind, InvalidWeaponSpecial, InvalidWeaponAttribute, } #[derive(Debug, Copy, Clone, PartialEq, Hash, Eq, Ord, PartialOrd, Serialize, Deserialize)] pub enum Attribute { Native = 1, ABeast, Machine, Dark, Hit } impl Attribute { pub fn from(data: u8) -> Option { match data { 1 => Some(Attribute::Native), 2 => Some(Attribute::ABeast), 3 => Some(Attribute::Machine), 4 => Some(Attribute::Dark), 5 => Some(Attribute::Hit), _ => None, } } } #[derive(Debug, Copy, Clone, PartialEq, Serialize, Deserialize)] pub struct WeaponAttribute { pub attr: Attribute, pub value: i8, } impl WeaponAttribute { pub fn value(&self) -> [u8; 2] { [self.attr as u8, self.value as u8] } } #[derive(Debug, Copy, Clone, PartialEq, Serialize, Deserialize, strum_macros::EnumIter)] pub enum WeaponSpecial { Draw = 1, Drain, Fill, Gush, Heart, Mind, Soul, Geist, Masters, Lords, Kings, Charge, Spirit, Berserk, Ice, Frost, Freeze, Blizzard, Bind, Hold, Seize, Arrest, Heat, Fire, Flame, Burning, Shock, Thunder, Storm, Tempest, Dim, Shadow, Dark, Hell, Panic, Riot, Havoc, Chaos, Devils, Demons, } impl WeaponSpecial { pub fn value(&self) -> u8 { *self as u8 } pub fn rank_up(&self) -> WeaponSpecial { match self { WeaponSpecial::Draw => WeaponSpecial::Drain, WeaponSpecial::Drain => WeaponSpecial::Fill, WeaponSpecial::Fill => WeaponSpecial::Gush, WeaponSpecial::Gush => WeaponSpecial::Gush, WeaponSpecial::Heart => WeaponSpecial::Mind, WeaponSpecial::Mind => WeaponSpecial::Soul, WeaponSpecial::Soul => WeaponSpecial::Geist, WeaponSpecial::Geist => WeaponSpecial::Geist, WeaponSpecial::Masters => WeaponSpecial::Lords, WeaponSpecial::Lords => WeaponSpecial::Kings, WeaponSpecial::Kings => WeaponSpecial::Kings, WeaponSpecial::Charge => WeaponSpecial::Charge, WeaponSpecial::Spirit => WeaponSpecial::Spirit, WeaponSpecial::Berserk => WeaponSpecial::Berserk, WeaponSpecial::Ice => WeaponSpecial::Frost, WeaponSpecial::Frost => WeaponSpecial::Freeze, WeaponSpecial::Freeze => WeaponSpecial::Blizzard, WeaponSpecial::Blizzard => WeaponSpecial::Blizzard, WeaponSpecial::Bind => WeaponSpecial::Hold, WeaponSpecial::Hold => WeaponSpecial::Seize, WeaponSpecial::Seize => WeaponSpecial::Arrest, WeaponSpecial::Arrest => WeaponSpecial::Arrest, WeaponSpecial::Heat => WeaponSpecial::Fire, WeaponSpecial::Fire => WeaponSpecial::Flame, WeaponSpecial::Flame => WeaponSpecial::Burning, WeaponSpecial::Burning => WeaponSpecial::Burning, WeaponSpecial::Shock => WeaponSpecial::Thunder, WeaponSpecial::Thunder => WeaponSpecial::Storm, WeaponSpecial::Storm => WeaponSpecial::Tempest, WeaponSpecial::Tempest => WeaponSpecial::Tempest, WeaponSpecial::Dim => WeaponSpecial::Shadow, WeaponSpecial::Shadow => WeaponSpecial::Dark, WeaponSpecial::Dark => WeaponSpecial::Hell, WeaponSpecial::Hell => WeaponSpecial::Hell, WeaponSpecial::Panic => WeaponSpecial::Riot, WeaponSpecial::Riot => WeaponSpecial::Havoc, WeaponSpecial::Havoc => WeaponSpecial::Chaos, WeaponSpecial::Chaos => WeaponSpecial::Chaos, WeaponSpecial::Devils => WeaponSpecial::Demons, WeaponSpecial::Demons => WeaponSpecial::Demons, } } pub fn rank_down(&self) -> WeaponSpecial { match self { WeaponSpecial::Draw => WeaponSpecial::Draw, WeaponSpecial::Drain => WeaponSpecial::Draw, WeaponSpecial::Fill => WeaponSpecial::Drain, WeaponSpecial::Gush => WeaponSpecial::Fill, WeaponSpecial::Heart => WeaponSpecial::Heart, WeaponSpecial::Mind => WeaponSpecial::Heart, WeaponSpecial::Soul => WeaponSpecial::Mind, WeaponSpecial::Geist => WeaponSpecial::Soul, WeaponSpecial::Masters => WeaponSpecial::Masters, WeaponSpecial::Lords => WeaponSpecial::Masters, WeaponSpecial::Kings => WeaponSpecial::Lords, WeaponSpecial::Charge => WeaponSpecial::Charge, WeaponSpecial::Spirit => WeaponSpecial::Spirit, WeaponSpecial::Berserk => WeaponSpecial::Berserk, WeaponSpecial::Ice => WeaponSpecial::Ice, WeaponSpecial::Frost => WeaponSpecial::Ice, WeaponSpecial::Freeze => WeaponSpecial::Frost, WeaponSpecial::Blizzard => WeaponSpecial::Freeze, WeaponSpecial::Bind => WeaponSpecial::Bind, WeaponSpecial::Hold => WeaponSpecial::Bind, WeaponSpecial::Seize => WeaponSpecial::Hold, WeaponSpecial::Arrest => WeaponSpecial::Seize, WeaponSpecial::Heat => WeaponSpecial::Heat, WeaponSpecial::Fire => WeaponSpecial::Heat, WeaponSpecial::Flame => WeaponSpecial::Fire, WeaponSpecial::Burning => WeaponSpecial::Flame, WeaponSpecial::Shock => WeaponSpecial::Shock, WeaponSpecial::Thunder => WeaponSpecial::Shock, WeaponSpecial::Storm => WeaponSpecial::Thunder, WeaponSpecial::Tempest => WeaponSpecial::Storm, WeaponSpecial::Dim => WeaponSpecial::Dim, WeaponSpecial::Shadow => WeaponSpecial::Dim, WeaponSpecial::Dark => WeaponSpecial::Shadow, WeaponSpecial::Hell => WeaponSpecial::Dark, WeaponSpecial::Panic => WeaponSpecial::Panic, WeaponSpecial::Riot => WeaponSpecial::Panic, WeaponSpecial::Havoc => WeaponSpecial::Riot, WeaponSpecial::Chaos => WeaponSpecial::Havoc, WeaponSpecial::Devils => WeaponSpecial::Devils, WeaponSpecial::Demons => WeaponSpecial::Devils, } } pub fn from(data: u8) -> Option { match data { 1 => Some(WeaponSpecial::Draw), 2 => Some(WeaponSpecial::Drain), 3 => Some(WeaponSpecial::Fill), 4 => Some(WeaponSpecial::Gush), 5 => Some(WeaponSpecial::Heart), 6 => Some(WeaponSpecial::Mind), 7 => Some(WeaponSpecial::Soul), 8 => Some(WeaponSpecial::Geist), 9 => Some(WeaponSpecial::Masters), 10 => Some(WeaponSpecial::Lords), 11 => Some(WeaponSpecial::Kings), 12 => Some(WeaponSpecial::Charge), 13 => Some(WeaponSpecial::Spirit), 14 => Some(WeaponSpecial::Berserk), 15 => Some(WeaponSpecial::Ice), 16 => Some(WeaponSpecial::Frost), 17 => Some(WeaponSpecial::Freeze), 18 => Some(WeaponSpecial::Blizzard), 19 => Some(WeaponSpecial::Bind), 20 => Some(WeaponSpecial::Hold), 21 => Some(WeaponSpecial::Seize), 22 => Some(WeaponSpecial::Arrest), 23 => Some(WeaponSpecial::Heat), 24 => Some(WeaponSpecial::Fire), 25 => Some(WeaponSpecial::Flame), 26 => Some(WeaponSpecial::Burning), 27 => Some(WeaponSpecial::Shock), 28 => Some(WeaponSpecial::Thunder), 29 => Some(WeaponSpecial::Storm), 30 => Some(WeaponSpecial::Tempest), 31 => Some(WeaponSpecial::Dim), 32 => Some(WeaponSpecial::Shadow), 33 => Some(WeaponSpecial::Dark), 34 => Some(WeaponSpecial::Hell), 35 => Some(WeaponSpecial::Panic), 36 => Some(WeaponSpecial::Riot), 37 => Some(WeaponSpecial::Havoc), 38 => Some(WeaponSpecial::Chaos), 39 => Some(WeaponSpecial::Devils), 40 => Some(WeaponSpecial::Demons), _ => None, } } } #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, enum_utils::FromStr, derive_more::Display, strum_macros::EnumIter)] pub enum WeaponType { Saber, Brand, Buster, Pallasch, Gladius, DbsSaber, Kaladbolg, Durandal, Galatine, Sword, Gigush, Breaker, Claymore, Calibur, FlowensSword, LastSurvivor, DragonSlayer, Dagger, Knife, Blade, Edge, Ripper, BladeDance, BloodyArt, CrossScar, ZeroDivide, TwoKamui, Partisan, Halbert, Glaive, Berdys, Gungnir, Brionac, Vjaya, GaeBolg, AsteronBelt, Slicer, Spinner, Cutter, Sawcer, Diska, SlicerOfAssassin, DiskaOfLiberator, DiskaOfBraveman, Izmaela, Handgun, Autogun, Lockgun, Railgun, Raygun, Varista, CustomRayVerOo, Bravace, TensionBlaster, Rifle, Sniper, Blaster, Beam, Laser, Visk235W, WalsMk2, Justy23St, Rianov303snr, Rianov303snr1, Rianov303snr2, Rianov303snr3, Rianov303snr4, Rianov303snr5, Mechgun, Assault, Repeater, Gatling, Vulcan, MA60Vise, HS25Justice, LK14Combat, Shot, Spread, Cannon, Launcher, Arms, CrushBullet, MeteorSmash, FinalImpact, Cane, Stick, Mace, Club, ClubOfLaconium, MaceOfAdaman, ClubOfZumiuran, Lollipop, Rod, Pole, Pillar, Striker, BattleVerge, BraveHammer, AliveAqhu, Valkyrie, Wand, Staff, Baton, Scepter, FireScepterAgni, IceStaffDagon, StormWandIndra, EarthWandBrownie, PhotonClaw, SilenceClaw, NeisClaw, PhoenixClaw, DoubleSaber, StagCutlery, TwinBrand, BraveKnuckle, AngryFist, GodHand, SonicKnuckle, Login, Orotiagito, Agito1975, Agito1983, Agito2001, Agito1991, Agito1977, Agito1980, Raikiri, SoulEater, SoulBanish, SpreadNeedle, HolyRay, InfernoBazooka, RamblingMay, LK38Combat, FlameVisit, BurningVisit, AkikosFryingPan, SorcerersCane, SBeatsBlade, PArmssBlade, DelsabersBuster, BringersRifle, EggBlaster, PsychoWand, HeavenPunisher, LavisCannon, VictorAxe, LaconiumAxe, ChainSawd, Caduceus, MercuriusRod, StingTip, MagicalPiece, TechnicalCrozier, SuppressedGun, AncientSaber, HarisenBattleFan, Yamigarasu, AkikosWok, ToyHammer, Elysion, RedSaber, MeteorCudgel, MonkeyKingBar, BlackKingBar, DoubleCannon, Girasole, HugeBattleFan, TsumikiriJSword, SealedJSword, RedSword, CrazyTune, TwinChakram, WokOfAkikosShop, LavisBlade, RedDagger, MadamsParasol, MadamsUmbrella, ImperialPick, Berdysh, RedPartisan, FlightCutter, FlightFan, RedSlicer, HandgunGuld, MasterRaven, HandgunMilla, LastSwan, RedHandgun, FrozenShooter, SnowQueen, AntiAndroidRifle, RocketPunch, SambaMaracas, TwinPsychogun, DrillLauncher, GuldMilla, DualBird, RedMechgun, BelraCannon, PanzerFaust, IronFaust, SummitMoon, Windmill, EvilCurst, FlowerCane, HildebearsCane, HildebluesCane, RabbitWand, PlantainLeaf, Fatsia, DemonicFork, StrikerOfChao, Broom, ProphetsOfMotav, TheSighOfAGod, TwinkleStar, PlantainFan, TwinBlaze, MarinasBag, DragonsClaw, PanthersClaw, SRedsBlade, PlantainHugeFan, ChameleonScythe, Yasminkov3000R, AnoRifle, BaranzLauncher, BranchOfPakupaku, HeartOfPoumn, Yasminkov2000H, Yasminkov7000V, Yasminkov9000M, MaserBeam, PowerMaser, GameMagazne, Login2, FlowerBouquet, Musashi, Yamato, Asuka, SangeYasha, Sange, Yasha, Kamui, PhotonLauncher, GuiltyLight, RedScorpio, PhononMaser, Talis, Mahu, Hitogata, DancingHitogata, Kunai, Nug2000Bazooka, SBerillsHands0, SBerillsHands1, FlowensSword3060, FlowensSword3064, FlowensSword3067, FlowensSword3073, FlowensSword3077, FlowensSword3082, FlowensSword3083, FlowensSword3084, FlowensSword3079, DbsSaber3062, DbsSaber3067, DbsSaber3069Chris, DbsSaber3064, DbsSaber3069Torato, DbsSaber3073, DbsSaber3070, DbsSaber3075, DbsSaber3077, GiGueBazooka, Guardianna, ViridiaCard, GreenillCard, SkylyCard, BluefullCard, PurplenumCard, PinkalCard, RedriaCard, OranCard, YellowbozeCard, WhitillCard, MorningGlory, PartisanOfLightning, GalWind, Zanba, RikasClaw, AngelHarp, DemolitionComet, NeisClaw2, RainbowBaton, DarkFlow, DarkMeteor, DarkBridge, GAssassinsSabers, RappysFan, BoomasClaw, GoboomasClaw, GigoboomasClaw, RubyBullet, AmoreRose, SlicerOfFanatic, LameDArgent, Excalibur, RageDeFeu, RageDeFeu2, RageDeFeu3, RageDeFeu4, DaisyChain, OphelieSeize, MilleMarteaux, LeCogneur, CommanderBlade, Vivienne, Kusanagi, SacredDuster, Guren, Shouren, Jizai, Flamberge, Yunchang, SnakeSpire, FlapjackFlapper, Getsugasan, Maguwa, HeavenStriker, CannonRouge, MeteorRouge, Solferino, Clio, SirenGlassHammer, GlideDivine, Shichishito, Murasame, DaylightScar, Decalog, FifthAnnivBlade, TyrellsParasol, AkikosCleaver, Tanegashima, TreeClippers, NiceShot, Unknown3, Unknown4, AnoBazooka, Synthesizer, BambooSpear, KaneiTsuho, Jitte, ButterflyNet, Syringe, Battledore, Racket, Hammer, GreatBouquet, TypesaSaber, TypeslSaber, TypeslSlicer, TypeslClaw, TypeslKatana, TypejsSaber, TypejsSlicer, TypejsJSword, TypeswSword, TypeswSlicer, TypeswJSword, TyperoSword, TyperoHalbert, TyperoRod, TypeblBlade, TypeknBlade, TypeknClaw, TypehaHalbert, TypehaRod, TypedsDSaber, TypedsRod, Typeds, TypeclClaw, TypessSw, TypeguHand, TypeguMechgun, TyperiRifle, TypemeMechgun, TypeshShot, TypewaWand, } impl WeaponType { pub fn value(&self) -> [u8; 3] { match self { WeaponType::Saber => [0x00, 0x01, 0x00], WeaponType::Brand => [0x00, 0x01, 0x01], WeaponType::Buster => [0x00, 0x01, 0x02], WeaponType::Pallasch => [0x00, 0x01, 0x03], WeaponType::Gladius => [0x00, 0x01, 0x04], WeaponType::DbsSaber => [0x00, 0x01, 0x05], WeaponType::Kaladbolg => [0x00, 0x01, 0x06], WeaponType::Durandal => [0x00, 0x01, 0x07], WeaponType::Galatine => [0x00, 0x01, 0x08], WeaponType::Sword => [0x00, 0x02, 0x00], WeaponType::Gigush => [0x00, 0x02, 0x01], WeaponType::Breaker => [0x00, 0x02, 0x02], WeaponType::Claymore => [0x00, 0x02, 0x03], WeaponType::Calibur => [0x00, 0x02, 0x04], WeaponType::FlowensSword => [0x00, 0x02, 0x05], WeaponType::LastSurvivor => [0x00, 0x02, 0x06], WeaponType::DragonSlayer => [0x00, 0x02, 0x07], WeaponType::Dagger => [0x00, 0x03, 0x00], WeaponType::Knife => [0x00, 0x03, 0x01], WeaponType::Blade => [0x00, 0x03, 0x02], WeaponType::Edge => [0x00, 0x03, 0x03], WeaponType::Ripper => [0x00, 0x03, 0x04], WeaponType::BladeDance => [0x00, 0x03, 0x05], WeaponType::BloodyArt => [0x00, 0x03, 0x06], WeaponType::CrossScar => [0x00, 0x03, 0x07], WeaponType::ZeroDivide => [0x00, 0x03, 0x08], WeaponType::TwoKamui => [0x00, 0x03, 0x09], WeaponType::Partisan => [0x00, 0x04, 0x00], WeaponType::Halbert => [0x00, 0x04, 0x01], WeaponType::Glaive => [0x00, 0x04, 0x02], WeaponType::Berdys => [0x00, 0x04, 0x03], WeaponType::Gungnir => [0x00, 0x04, 0x04], WeaponType::Brionac => [0x00, 0x04, 0x05], WeaponType::Vjaya => [0x00, 0x04, 0x06], WeaponType::GaeBolg => [0x00, 0x04, 0x07], WeaponType::AsteronBelt => [0x00, 0x04, 0x08], WeaponType::Slicer => [0x00, 0x05, 0x00], WeaponType::Spinner => [0x00, 0x05, 0x01], WeaponType::Cutter => [0x00, 0x05, 0x02], WeaponType::Sawcer => [0x00, 0x05, 0x03], WeaponType::Diska => [0x00, 0x05, 0x04], WeaponType::SlicerOfAssassin => [0x00, 0x05, 0x05], WeaponType::DiskaOfLiberator => [0x00, 0x05, 0x06], WeaponType::DiskaOfBraveman => [0x00, 0x05, 0x07], WeaponType::Izmaela => [0x00, 0x05, 0x08], WeaponType::Handgun => [0x00, 0x06, 0x00], WeaponType::Autogun => [0x00, 0x06, 0x01], WeaponType::Lockgun => [0x00, 0x06, 0x02], WeaponType::Railgun => [0x00, 0x06, 0x03], WeaponType::Raygun => [0x00, 0x06, 0x04], WeaponType::Varista => [0x00, 0x06, 0x05], WeaponType::CustomRayVerOo => [0x00, 0x06, 0x06], WeaponType::Bravace => [0x00, 0x06, 0x07], WeaponType::TensionBlaster => [0x00, 0x06, 0x08], WeaponType::Rifle => [0x00, 0x07, 0x00], WeaponType::Sniper => [0x00, 0x07, 0x01], WeaponType::Blaster => [0x00, 0x07, 0x02], WeaponType::Beam => [0x00, 0x07, 0x03], WeaponType::Laser => [0x00, 0x07, 0x04], WeaponType::Visk235W => [0x00, 0x07, 0x05], WeaponType::WalsMk2 => [0x00, 0x07, 0x06], WeaponType::Justy23St => [0x00, 0x07, 0x07], WeaponType::Rianov303snr => [0x00, 0x07, 0x08], WeaponType::Rianov303snr1 => [0x00, 0x07, 0x09], WeaponType::Rianov303snr2 => [0x00, 0x07, 0x0A], WeaponType::Rianov303snr3 => [0x00, 0x07, 0x0B], WeaponType::Rianov303snr4 => [0x00, 0x07, 0x0C], WeaponType::Rianov303snr5 => [0x00, 0x07, 0x0D], WeaponType::Mechgun => [0x00, 0x08, 0x00], WeaponType::Assault => [0x00, 0x08, 0x01], WeaponType::Repeater => [0x00, 0x08, 0x02], WeaponType::Gatling => [0x00, 0x08, 0x03], WeaponType::Vulcan => [0x00, 0x08, 0x04], WeaponType::MA60Vise => [0x00, 0x08, 0x05], WeaponType::HS25Justice => [0x00, 0x08, 0x06], WeaponType::LK14Combat => [0x00, 0x08, 0x07], WeaponType::Shot => [0x00, 0x09, 0x00], WeaponType::Spread => [0x00, 0x09, 0x01], WeaponType::Cannon => [0x00, 0x09, 0x02], WeaponType::Launcher => [0x00, 0x09, 0x03], WeaponType::Arms => [0x00, 0x09, 0x04], WeaponType::CrushBullet => [0x00, 0x09, 0x05], WeaponType::MeteorSmash => [0x00, 0x09, 0x06], WeaponType::FinalImpact => [0x00, 0x09, 0x07], WeaponType::Cane => [0x00, 0x0A, 0x00], WeaponType::Stick => [0x00, 0x0A, 0x01], WeaponType::Mace => [0x00, 0x0A, 0x02], WeaponType::Club => [0x00, 0x0A, 0x03], WeaponType::ClubOfLaconium => [0x00, 0x0A, 0x04], WeaponType::MaceOfAdaman => [0x00, 0x0A, 0x05], WeaponType::ClubOfZumiuran => [0x00, 0x0A, 0x06], WeaponType::Lollipop => [0x00, 0x0A, 0x07], WeaponType::Rod => [0x00, 0x0B, 0x00], WeaponType::Pole => [0x00, 0x0B, 0x01], WeaponType::Pillar => [0x00, 0x0B, 0x02], WeaponType::Striker => [0x00, 0x0B, 0x03], WeaponType::BattleVerge => [0x00, 0x0B, 0x04], WeaponType::BraveHammer => [0x00, 0x0B, 0x05], WeaponType::AliveAqhu => [0x00, 0x0B, 0x06], WeaponType::Valkyrie => [0x00, 0x0B, 0x07], WeaponType::Wand => [0x00, 0x0C, 0x00], WeaponType::Staff => [0x00, 0x0C, 0x01], WeaponType::Baton => [0x00, 0x0C, 0x02], WeaponType::Scepter => [0x00, 0x0C, 0x03], WeaponType::FireScepterAgni => [0x00, 0x0C, 0x04], WeaponType::IceStaffDagon => [0x00, 0x0C, 0x05], WeaponType::StormWandIndra => [0x00, 0x0C, 0x06], WeaponType::EarthWandBrownie => [0x00, 0x0C, 0x07], WeaponType::PhotonClaw => [0x00, 0x0D, 0x00], WeaponType::SilenceClaw => [0x00, 0x0D, 0x01], WeaponType::NeisClaw => [0x00, 0x0D, 0x02], WeaponType::PhoenixClaw => [0x00, 0x0D, 0x03], WeaponType::DoubleSaber => [0x00, 0x0E, 0x00], WeaponType::StagCutlery => [0x00, 0x0E, 0x01], WeaponType::TwinBrand => [0x00, 0x0E, 0x02], WeaponType::BraveKnuckle => [0x00, 0x0F, 0x00], WeaponType::AngryFist => [0x00, 0x0F, 0x01], WeaponType::GodHand => [0x00, 0x0F, 0x02], WeaponType::SonicKnuckle => [0x00, 0x0F, 0x03], WeaponType::Login => [0x00, 0x0F, 0x04], WeaponType::Orotiagito => [0x00, 0x10, 0x00], WeaponType::Agito1975 => [0x00, 0x10, 0x01], WeaponType::Agito1983 => [0x00, 0x10, 0x02], WeaponType::Agito2001 => [0x00, 0x10, 0x03], WeaponType::Agito1991 => [0x00, 0x10, 0x04], WeaponType::Agito1977 => [0x00, 0x10, 0x05], WeaponType::Agito1980 => [0x00, 0x10, 0x06], WeaponType::Raikiri => [0x00, 0x10, 0x07], WeaponType::SoulEater => [0x00, 0x11, 0x00], WeaponType::SoulBanish => [0x00, 0x11, 0x01], WeaponType::SpreadNeedle => [0x00, 0x12, 0x00], WeaponType::HolyRay => [0x00, 0x13, 0x00], WeaponType::InfernoBazooka => [0x00, 0x14, 0x00], WeaponType::RamblingMay => [0x00, 0x14, 0x01], WeaponType::LK38Combat => [0x00, 0x14, 0x02], WeaponType::FlameVisit => [0x00, 0x15, 0x00], WeaponType::BurningVisit => [0x00, 0x15, 0x01], WeaponType::AkikosFryingPan => [0x00, 0x16, 0x00], WeaponType::SorcerersCane => [0x00, 0x17, 0x00], WeaponType::SBeatsBlade => [0x00, 0x18, 0x00], WeaponType::PArmssBlade => [0x00, 0x19, 0x00], WeaponType::DelsabersBuster => [0x00, 0x1A, 0x00], WeaponType::BringersRifle => [0x00, 0x1B, 0x00], WeaponType::EggBlaster => [0x00, 0x1C, 0x00], WeaponType::PsychoWand => [0x00, 0x1D, 0x00], WeaponType::HeavenPunisher => [0x00, 0x1E, 0x00], WeaponType::LavisCannon => [0x00, 0x1F, 0x00], WeaponType::VictorAxe => [0x00, 0x20, 0x00], WeaponType::LaconiumAxe => [0x00, 0x20, 0x01], WeaponType::ChainSawd => [0x00, 0x21, 0x00], WeaponType::Caduceus => [0x00, 0x22, 0x00], WeaponType::MercuriusRod => [0x00, 0x22, 0x01], WeaponType::StingTip => [0x00, 0x23, 0x00], WeaponType::MagicalPiece => [0x00, 0x24, 0x00], WeaponType::TechnicalCrozier => [0x00, 0x25, 0x00], WeaponType::SuppressedGun => [0x00, 0x26, 0x00], WeaponType::AncientSaber => [0x00, 0x27, 0x00], WeaponType::HarisenBattleFan => [0x00, 0x28, 0x00], WeaponType::Yamigarasu => [0x00, 0x29, 0x00], WeaponType::AkikosWok => [0x00, 0x2A, 0x00], WeaponType::ToyHammer => [0x00, 0x2B, 0x00], WeaponType::Elysion => [0x00, 0x2C, 0x00], WeaponType::RedSaber => [0x00, 0x2D, 0x00], WeaponType::MeteorCudgel => [0x00, 0x2E, 0x00], WeaponType::MonkeyKingBar => [0x00, 0x2F, 0x00], WeaponType::BlackKingBar => [0x00, 0x2F, 0x01], WeaponType::DoubleCannon => [0x00, 0x30, 0x00], WeaponType::Girasole => [0x00, 0x30, 0x01], WeaponType::HugeBattleFan => [0x00, 0x31, 0x00], WeaponType::TsumikiriJSword => [0x00, 0x32, 0x00], WeaponType::SealedJSword => [0x00, 0x33, 0x00], WeaponType::RedSword => [0x00, 0x34, 0x00], WeaponType::CrazyTune => [0x00, 0x35, 0x00], WeaponType::TwinChakram => [0x00, 0x36, 0x00], WeaponType::WokOfAkikosShop => [0x00, 0x37, 0x00], WeaponType::LavisBlade => [0x00, 0x38, 0x00], WeaponType::RedDagger => [0x00, 0x39, 0x00], WeaponType::MadamsParasol => [0x00, 0x3A, 0x00], WeaponType::MadamsUmbrella => [0x00, 0x3B, 0x00], WeaponType::ImperialPick => [0x00, 0x3C, 0x00], WeaponType::Berdysh => [0x00, 0x3D, 0x00], WeaponType::RedPartisan => [0x00, 0x3E, 0x00], WeaponType::FlightCutter => [0x00, 0x3F, 0x00], WeaponType::FlightFan => [0x00, 0x40, 0x00], WeaponType::RedSlicer => [0x00, 0x41, 0x00], WeaponType::HandgunGuld => [0x00, 0x42, 0x00], WeaponType::MasterRaven => [0x00, 0x42, 0x01], WeaponType::HandgunMilla => [0x00, 0x43, 0x00], WeaponType::LastSwan => [0x00, 0x43, 0x01], WeaponType::RedHandgun => [0x00, 0x44, 0x00], WeaponType::FrozenShooter => [0x00, 0x45, 0x00], WeaponType::SnowQueen => [0x00, 0x45, 0x01], WeaponType::AntiAndroidRifle => [0x00, 0x46, 0x00], WeaponType::RocketPunch => [0x00, 0x47, 0x00], WeaponType::SambaMaracas => [0x00, 0x48, 0x00], WeaponType::TwinPsychogun => [0x00, 0x49, 0x00], WeaponType::DrillLauncher => [0x00, 0x4A, 0x00], WeaponType::GuldMilla => [0x00, 0x4B, 0x00], WeaponType::DualBird => [0x00, 0x4B, 0x01], WeaponType::RedMechgun => [0x00, 0x4C, 0x00], WeaponType::BelraCannon => [0x00, 0x4D, 0x00], WeaponType::PanzerFaust => [0x00, 0x4E, 0x00], WeaponType::IronFaust => [0x00, 0x4E, 0x01], WeaponType::SummitMoon => [0x00, 0x4F, 0x00], WeaponType::Windmill => [0x00, 0x50, 0x00], WeaponType::EvilCurst => [0x00, 0x51, 0x00], WeaponType::FlowerCane => [0x00, 0x52, 0x00], WeaponType::HildebearsCane => [0x00, 0x53, 0x00], WeaponType::HildebluesCane => [0x00, 0x54, 0x00], WeaponType::RabbitWand => [0x00, 0x55, 0x00], WeaponType::PlantainLeaf => [0x00, 0x56, 0x00], WeaponType::Fatsia => [0x00, 0x56, 0x01], WeaponType::DemonicFork => [0x00, 0x57, 0x00], WeaponType::StrikerOfChao => [0x00, 0x58, 0x00], WeaponType::Broom => [0x00, 0x59, 0x00], WeaponType::ProphetsOfMotav => [0x00, 0x5A, 0x00], WeaponType::TheSighOfAGod => [0x00, 0x5B, 0x00], WeaponType::TwinkleStar => [0x00, 0x5C, 0x00], WeaponType::PlantainFan => [0x00, 0x5D, 0x00], WeaponType::TwinBlaze => [0x00, 0x5E, 0x00], WeaponType::MarinasBag => [0x00, 0x5F, 0x00], WeaponType::DragonsClaw => [0x00, 0x60, 0x00], WeaponType::PanthersClaw => [0x00, 0x61, 0x00], WeaponType::SRedsBlade => [0x00, 0x62, 0x00], WeaponType::PlantainHugeFan => [0x00, 0x63, 0x00], WeaponType::ChameleonScythe => [0x00, 0x64, 0x00], WeaponType::Yasminkov3000R => [0x00, 0x65, 0x00], WeaponType::AnoRifle => [0x00, 0x66, 0x00], WeaponType::BaranzLauncher => [0x00, 0x67, 0x00], WeaponType::BranchOfPakupaku => [0x00, 0x68, 0x00], WeaponType::HeartOfPoumn => [0x00, 0x69, 0x00], WeaponType::Yasminkov2000H => [0x00, 0x6A, 0x00], WeaponType::Yasminkov7000V => [0x00, 0x6B, 0x00], WeaponType::Yasminkov9000M => [0x00, 0x6C, 0x00], WeaponType::MaserBeam => [0x00, 0x6D, 0x00], WeaponType::PowerMaser => [0x00, 0x6D, 0x01], WeaponType::GameMagazne => [0x00, 0x6E, 0x00], WeaponType::Login2 => [0x00, 0x6E, 0x01], WeaponType::FlowerBouquet => [0x00, 0x6F, 0x00], WeaponType::Musashi => [0x00, 0x89, 0x00], WeaponType::Yamato => [0x00, 0x89, 0x01], WeaponType::Asuka => [0x00, 0x89, 0x02], WeaponType::SangeYasha => [0x00, 0x89, 0x03], WeaponType::Sange => [0x00, 0x8A, 0x00], WeaponType::Yasha => [0x00, 0x8A, 0x01], WeaponType::Kamui => [0x00, 0x8A, 0x02], WeaponType::PhotonLauncher => [0x00, 0x8B, 0x00], WeaponType::GuiltyLight => [0x00, 0x8B, 0x01], WeaponType::RedScorpio => [0x00, 0x8B, 0x02], WeaponType::PhononMaser => [0x00, 0x8B, 0x03], WeaponType::Talis => [0x00, 0x8C, 0x00], WeaponType::Mahu => [0x00, 0x8C, 0x01], WeaponType::Hitogata => [0x00, 0x8C, 0x02], WeaponType::DancingHitogata => [0x00, 0x8C, 0x03], WeaponType::Kunai => [0x00, 0x8C, 0x04], WeaponType::Nug2000Bazooka => [0x00, 0x8D, 0x00], WeaponType::SBerillsHands0 => [0x00, 0x8E, 0x00], WeaponType::SBerillsHands1 => [0x00, 0x8E, 0x01], WeaponType::FlowensSword3060 => [0x00, 0x8F, 0x00], WeaponType::FlowensSword3064 => [0x00, 0x8F, 0x01], WeaponType::FlowensSword3067 => [0x00, 0x8F, 0x02], WeaponType::FlowensSword3073 => [0x00, 0x8F, 0x03], WeaponType::FlowensSword3077 => [0x00, 0x8F, 0x04], WeaponType::FlowensSword3082 => [0x00, 0x8F, 0x05], WeaponType::FlowensSword3083 => [0x00, 0x8F, 0x06], WeaponType::FlowensSword3084 => [0x00, 0x8F, 0x07], WeaponType::FlowensSword3079 => [0x00, 0x8F, 0x08], WeaponType::DbsSaber3062 => [0x00, 0x90, 0x00], WeaponType::DbsSaber3067 => [0x00, 0x90, 0x01], WeaponType::DbsSaber3069Chris => [0x00, 0x90, 0x02], WeaponType::DbsSaber3064 => [0x00, 0x90, 0x03], WeaponType::DbsSaber3069Torato => [0x00, 0x90, 0x04], WeaponType::DbsSaber3073 => [0x00, 0x90, 0x05], WeaponType::DbsSaber3070 => [0x00, 0x90, 0x06], WeaponType::DbsSaber3075 => [0x00, 0x90, 0x07], WeaponType::DbsSaber3077 => [0x00, 0x90, 0x08], WeaponType::GiGueBazooka => [0x00, 0x91, 0x00], WeaponType::Guardianna => [0x00, 0x92, 0x00], WeaponType::ViridiaCard => [0x00, 0x93, 0x00], WeaponType::GreenillCard => [0x00, 0x93, 0x01], WeaponType::SkylyCard => [0x00, 0x93, 0x02], WeaponType::BluefullCard => [0x00, 0x93, 0x03], WeaponType::PurplenumCard => [0x00, 0x93, 0x04], WeaponType::PinkalCard => [0x00, 0x93, 0x05], WeaponType::RedriaCard => [0x00, 0x93, 0x06], WeaponType::OranCard => [0x00, 0x93, 0x07], WeaponType::YellowbozeCard => [0x00, 0x93, 0x08], WeaponType::WhitillCard => [0x00, 0x93, 0x09], WeaponType::MorningGlory => [0x00, 0x94, 0x00], WeaponType::PartisanOfLightning => [0x00, 0x95, 0x00], WeaponType::GalWind => [0x00, 0x96, 0x00], WeaponType::Zanba => [0x00, 0x97, 0x00], WeaponType::RikasClaw => [0x00, 0x98, 0x00], WeaponType::AngelHarp => [0x00, 0x99, 0x00], WeaponType::DemolitionComet => [0x00, 0x9A, 0x00], WeaponType::NeisClaw2 => [0x00, 0x9B, 0x00], WeaponType::RainbowBaton => [0x00, 0x9C, 0x00], WeaponType::DarkFlow => [0x00, 0x9D, 0x00], WeaponType::DarkMeteor => [0x00, 0x9E, 0x00], WeaponType::DarkBridge => [0x00, 0x9F, 0x00], WeaponType::GAssassinsSabers => [0x00, 0xA0, 0x00], WeaponType::RappysFan => [0x00, 0xA1, 0x00], WeaponType::BoomasClaw => [0x00, 0xA2, 0x00], WeaponType::GoboomasClaw => [0x00, 0xA2, 0x01], WeaponType::GigoboomasClaw => [0x00, 0xA2, 0x02], WeaponType::RubyBullet => [0x00, 0xA3, 0x00], WeaponType::AmoreRose => [0x00, 0xA4, 0x00], WeaponType::SlicerOfFanatic => [0x00, 0xAA, 0x00], WeaponType::LameDArgent => [0x00, 0xAB, 0x00], WeaponType::Excalibur => [0x00, 0xAC, 0x00], WeaponType::RageDeFeu => [0x00, 0xAD, 0x00], WeaponType::RageDeFeu2 => [0x00, 0xAD, 0x01], WeaponType::RageDeFeu3 => [0x00, 0xAD, 0x02], WeaponType::RageDeFeu4 => [0x00, 0xAD, 0x03], WeaponType::DaisyChain => [0x00, 0xAE, 0x00], WeaponType::OphelieSeize => [0x00, 0xAF, 0x00], WeaponType::MilleMarteaux => [0x00, 0xB0, 0x00], WeaponType::LeCogneur => [0x00, 0xB1, 0x00], WeaponType::CommanderBlade => [0x00, 0xB2, 0x00], WeaponType::Vivienne => [0x00, 0xB3, 0x00], WeaponType::Kusanagi => [0x00, 0xB4, 0x00], WeaponType::SacredDuster => [0x00, 0xB5, 0x00], WeaponType::Guren => [0x00, 0xB6, 0x00], WeaponType::Shouren => [0x00, 0xB7, 0x00], WeaponType::Jizai => [0x00, 0xB8, 0x00], WeaponType::Flamberge => [0x00, 0xB9, 0x00], WeaponType::Yunchang => [0x00, 0xBA, 0x00], WeaponType::SnakeSpire => [0x00, 0xBB, 0x00], WeaponType::FlapjackFlapper => [0x00, 0xBC, 0x00], WeaponType::Getsugasan => [0x00, 0xBD, 0x00], WeaponType::Maguwa => [0x00, 0xBE, 0x00], WeaponType::HeavenStriker => [0x00, 0xBF, 0x00], WeaponType::CannonRouge => [0x00, 0xC0, 0x00], WeaponType::MeteorRouge => [0x00, 0xC1, 0x00], WeaponType::Solferino => [0x00, 0xC2, 0x00], WeaponType::Clio => [0x00, 0xC3, 0x00], WeaponType::SirenGlassHammer => [0x00, 0xC4, 0x00], WeaponType::GlideDivine => [0x00, 0xC5, 0x00], WeaponType::Shichishito => [0x00, 0xC6, 0x00], WeaponType::Murasame => [0x00, 0xC7, 0x00], WeaponType::DaylightScar => [0x00, 0xC8, 0x00], WeaponType::Decalog => [0x00, 0xC9, 0x00], WeaponType::FifthAnnivBlade => [0x00, 0xCA, 0x00], WeaponType::TyrellsParasol => [0x00, 0xCB, 0x00], WeaponType::AkikosCleaver => [0x00, 0xCC, 0x00], WeaponType::Tanegashima => [0x00, 0xCD, 0x00], WeaponType::TreeClippers => [0x00, 0xCE, 0x00], WeaponType::NiceShot => [0x00, 0xCF, 0x00], WeaponType::Unknown3 => [0x00, 0xD0, 0x00], WeaponType::Unknown4 => [0x00, 0xD1, 0x00], WeaponType::AnoBazooka => [0x00, 0xD2, 0x00], WeaponType::Synthesizer => [0x00, 0xD3, 0x00], WeaponType::BambooSpear => [0x00, 0xD4, 0x00], WeaponType::KaneiTsuho => [0x00, 0xD5, 0x00], WeaponType::Jitte => [0x00, 0xD6, 0x00], WeaponType::ButterflyNet => [0x00, 0xD7, 0x00], WeaponType::Syringe => [0x00, 0xD8, 0x00], WeaponType::Battledore => [0x00, 0xD9, 0x00], WeaponType::Racket => [0x00, 0xDA, 0x00], WeaponType::Hammer => [0x00, 0xDB, 0x00], WeaponType::GreatBouquet => [0x00, 0xDC, 0x00], WeaponType::TypesaSaber => [0x00, 0xDD, 0x00], WeaponType::TypeslSaber => [0x00, 0xDE, 0x00], WeaponType::TypeslSlicer => [0x00, 0xDE, 0x01], WeaponType::TypeslClaw => [0x00, 0xDE, 0x02], WeaponType::TypeslKatana => [0x00, 0xDE, 0x03], WeaponType::TypejsSaber => [0x00, 0xDF, 0x00], WeaponType::TypejsSlicer => [0x00, 0xDF, 0x01], WeaponType::TypejsJSword => [0x00, 0xDF, 0x02], WeaponType::TypeswSword => [0x00, 0xE0, 0x00], WeaponType::TypeswSlicer => [0x00, 0xE0, 0x01], WeaponType::TypeswJSword => [0x00, 0xE0, 0x02], WeaponType::TyperoSword => [0x00, 0xE1, 0x00], WeaponType::TyperoHalbert => [0x00, 0xE1, 0x01], WeaponType::TyperoRod => [0x00, 0xE1, 0x02], WeaponType::TypeblBlade => [0x00, 0xE2, 0x00], WeaponType::TypeknBlade => [0x00, 0xE3, 0x00], WeaponType::TypeknClaw => [0x00, 0xE3, 0x01], WeaponType::TypehaHalbert => [0x00, 0xE4, 0x00], WeaponType::TypehaRod => [0x00, 0xE4, 0x01], WeaponType::TypedsDSaber => [0x00, 0xE5, 0x00], WeaponType::TypedsRod => [0x00, 0xE5, 0x01], WeaponType::Typeds => [0x00, 0xE5, 0x02], WeaponType::TypeclClaw => [0x00, 0xE6, 0x00], WeaponType::TypessSw => [0x00, 0xE7, 0x00], WeaponType::TypeguHand => [0x00, 0xE8, 0x00], WeaponType::TypeguMechgun => [0x00, 0xE8, 0x01], WeaponType::TyperiRifle => [0x00, 0xE9, 0x00], WeaponType::TypemeMechgun => [0x00, 0xEA, 0x00], WeaponType::TypeshShot => [0x00, 0xEB, 0x00], WeaponType::TypewaWand => [0x00, 0xEC, 0x00], } } pub fn parse_type(data: [u8; 3]) -> Result { match data { [0x00, 0x01, 0x00] => Ok(WeaponType::Saber), [0x00, 0x01, 0x01] => Ok(WeaponType::Brand), [0x00, 0x01, 0x02] => Ok(WeaponType::Buster), [0x00, 0x01, 0x03] => Ok(WeaponType::Pallasch), [0x00, 0x01, 0x04] => Ok(WeaponType::Gladius), [0x00, 0x01, 0x05] => Ok(WeaponType::DbsSaber), [0x00, 0x01, 0x06] => Ok(WeaponType::Kaladbolg), [0x00, 0x01, 0x07] => Ok(WeaponType::Durandal), [0x00, 0x01, 0x08] => Ok(WeaponType::Galatine), [0x00, 0x02, 0x00] => Ok(WeaponType::Sword), [0x00, 0x02, 0x01] => Ok(WeaponType::Gigush), [0x00, 0x02, 0x02] => Ok(WeaponType::Breaker), [0x00, 0x02, 0x03] => Ok(WeaponType::Claymore), [0x00, 0x02, 0x04] => Ok(WeaponType::Calibur), [0x00, 0x02, 0x05] => Ok(WeaponType::FlowensSword), [0x00, 0x02, 0x06] => Ok(WeaponType::LastSurvivor), [0x00, 0x02, 0x07] => Ok(WeaponType::DragonSlayer), [0x00, 0x03, 0x00] => Ok(WeaponType::Dagger), [0x00, 0x03, 0x01] => Ok(WeaponType::Knife), [0x00, 0x03, 0x02] => Ok(WeaponType::Blade), [0x00, 0x03, 0x03] => Ok(WeaponType::Edge), [0x00, 0x03, 0x04] => Ok(WeaponType::Ripper), [0x00, 0x03, 0x05] => Ok(WeaponType::BladeDance), [0x00, 0x03, 0x06] => Ok(WeaponType::BloodyArt), [0x00, 0x03, 0x07] => Ok(WeaponType::CrossScar), [0x00, 0x03, 0x08] => Ok(WeaponType::ZeroDivide), [0x00, 0x03, 0x09] => Ok(WeaponType::TwoKamui), [0x00, 0x04, 0x00] => Ok(WeaponType::Partisan), [0x00, 0x04, 0x01] => Ok(WeaponType::Halbert), [0x00, 0x04, 0x02] => Ok(WeaponType::Glaive), [0x00, 0x04, 0x03] => Ok(WeaponType::Berdys), [0x00, 0x04, 0x04] => Ok(WeaponType::Gungnir), [0x00, 0x04, 0x05] => Ok(WeaponType::Brionac), [0x00, 0x04, 0x06] => Ok(WeaponType::Vjaya), [0x00, 0x04, 0x07] => Ok(WeaponType::GaeBolg), [0x00, 0x04, 0x08] => Ok(WeaponType::AsteronBelt), [0x00, 0x05, 0x00] => Ok(WeaponType::Slicer), [0x00, 0x05, 0x01] => Ok(WeaponType::Spinner), [0x00, 0x05, 0x02] => Ok(WeaponType::Cutter), [0x00, 0x05, 0x03] => Ok(WeaponType::Sawcer), [0x00, 0x05, 0x04] => Ok(WeaponType::Diska), [0x00, 0x05, 0x05] => Ok(WeaponType::SlicerOfAssassin), [0x00, 0x05, 0x06] => Ok(WeaponType::DiskaOfLiberator), [0x00, 0x05, 0x07] => Ok(WeaponType::DiskaOfBraveman), [0x00, 0x05, 0x08] => Ok(WeaponType::Izmaela), [0x00, 0x06, 0x00] => Ok(WeaponType::Handgun), [0x00, 0x06, 0x01] => Ok(WeaponType::Autogun), [0x00, 0x06, 0x02] => Ok(WeaponType::Lockgun), [0x00, 0x06, 0x03] => Ok(WeaponType::Railgun), [0x00, 0x06, 0x04] => Ok(WeaponType::Raygun), [0x00, 0x06, 0x05] => Ok(WeaponType::Varista), [0x00, 0x06, 0x06] => Ok(WeaponType::CustomRayVerOo), [0x00, 0x06, 0x07] => Ok(WeaponType::Bravace), [0x00, 0x06, 0x08] => Ok(WeaponType::TensionBlaster), [0x00, 0x07, 0x00] => Ok(WeaponType::Rifle), [0x00, 0x07, 0x01] => Ok(WeaponType::Sniper), [0x00, 0x07, 0x02] => Ok(WeaponType::Blaster), [0x00, 0x07, 0x03] => Ok(WeaponType::Beam), [0x00, 0x07, 0x04] => Ok(WeaponType::Laser), [0x00, 0x07, 0x05] => Ok(WeaponType::Visk235W), [0x00, 0x07, 0x06] => Ok(WeaponType::WalsMk2), [0x00, 0x07, 0x07] => Ok(WeaponType::Justy23St), [0x00, 0x07, 0x08] => Ok(WeaponType::Rianov303snr), [0x00, 0x07, 0x09] => Ok(WeaponType::Rianov303snr1), [0x00, 0x07, 0x0A] => Ok(WeaponType::Rianov303snr2), [0x00, 0x07, 0x0B] => Ok(WeaponType::Rianov303snr3), [0x00, 0x07, 0x0C] => Ok(WeaponType::Rianov303snr4), [0x00, 0x07, 0x0D] => Ok(WeaponType::Rianov303snr5), [0x00, 0x08, 0x00] => Ok(WeaponType::Mechgun), [0x00, 0x08, 0x01] => Ok(WeaponType::Assault), [0x00, 0x08, 0x02] => Ok(WeaponType::Repeater), [0x00, 0x08, 0x03] => Ok(WeaponType::Gatling), [0x00, 0x08, 0x04] => Ok(WeaponType::Vulcan), [0x00, 0x08, 0x05] => Ok(WeaponType::MA60Vise), [0x00, 0x08, 0x06] => Ok(WeaponType::HS25Justice), [0x00, 0x08, 0x07] => Ok(WeaponType::LK14Combat), [0x00, 0x09, 0x00] => Ok(WeaponType::Shot), [0x00, 0x09, 0x01] => Ok(WeaponType::Spread), [0x00, 0x09, 0x02] => Ok(WeaponType::Cannon), [0x00, 0x09, 0x03] => Ok(WeaponType::Launcher), [0x00, 0x09, 0x04] => Ok(WeaponType::Arms), [0x00, 0x09, 0x05] => Ok(WeaponType::CrushBullet), [0x00, 0x09, 0x06] => Ok(WeaponType::MeteorSmash), [0x00, 0x09, 0x07] => Ok(WeaponType::FinalImpact), [0x00, 0x0A, 0x00] => Ok(WeaponType::Cane), [0x00, 0x0A, 0x01] => Ok(WeaponType::Stick), [0x00, 0x0A, 0x02] => Ok(WeaponType::Mace), [0x00, 0x0A, 0x03] => Ok(WeaponType::Club), [0x00, 0x0A, 0x04] => Ok(WeaponType::ClubOfLaconium), [0x00, 0x0A, 0x05] => Ok(WeaponType::MaceOfAdaman), [0x00, 0x0A, 0x06] => Ok(WeaponType::ClubOfZumiuran), [0x00, 0x0A, 0x07] => Ok(WeaponType::Lollipop), [0x00, 0x0B, 0x00] => Ok(WeaponType::Rod), [0x00, 0x0B, 0x01] => Ok(WeaponType::Pole), [0x00, 0x0B, 0x02] => Ok(WeaponType::Pillar), [0x00, 0x0B, 0x03] => Ok(WeaponType::Striker), [0x00, 0x0B, 0x04] => Ok(WeaponType::BattleVerge), [0x00, 0x0B, 0x05] => Ok(WeaponType::BraveHammer), [0x00, 0x0B, 0x06] => Ok(WeaponType::AliveAqhu), [0x00, 0x0B, 0x07] => Ok(WeaponType::Valkyrie), [0x00, 0x0C, 0x00] => Ok(WeaponType::Wand), [0x00, 0x0C, 0x01] => Ok(WeaponType::Staff), [0x00, 0x0C, 0x02] => Ok(WeaponType::Baton), [0x00, 0x0C, 0x03] => Ok(WeaponType::Scepter), [0x00, 0x0C, 0x04] => Ok(WeaponType::FireScepterAgni), [0x00, 0x0C, 0x05] => Ok(WeaponType::IceStaffDagon), [0x00, 0x0C, 0x06] => Ok(WeaponType::StormWandIndra), [0x00, 0x0C, 0x07] => Ok(WeaponType::EarthWandBrownie), [0x00, 0x0D, 0x00] => Ok(WeaponType::PhotonClaw), [0x00, 0x0D, 0x01] => Ok(WeaponType::SilenceClaw), [0x00, 0x0D, 0x02] => Ok(WeaponType::NeisClaw), [0x00, 0x0D, 0x03] => Ok(WeaponType::PhoenixClaw), [0x00, 0x0E, 0x00] => Ok(WeaponType::DoubleSaber), [0x00, 0x0E, 0x01] => Ok(WeaponType::StagCutlery), [0x00, 0x0E, 0x02] => Ok(WeaponType::TwinBrand), [0x00, 0x0F, 0x00] => Ok(WeaponType::BraveKnuckle), [0x00, 0x0F, 0x01] => Ok(WeaponType::AngryFist), [0x00, 0x0F, 0x02] => Ok(WeaponType::GodHand), [0x00, 0x0F, 0x03] => Ok(WeaponType::SonicKnuckle), [0x00, 0x0F, 0x04] => Ok(WeaponType::Login), [0x00, 0x10, 0x00] => Ok(WeaponType::Orotiagito), [0x00, 0x10, 0x01] => Ok(WeaponType::Agito1975), [0x00, 0x10, 0x02] => Ok(WeaponType::Agito1983), [0x00, 0x10, 0x03] => Ok(WeaponType::Agito2001), [0x00, 0x10, 0x04] => Ok(WeaponType::Agito1991), [0x00, 0x10, 0x05] => Ok(WeaponType::Agito1977), [0x00, 0x10, 0x06] => Ok(WeaponType::Agito1980), [0x00, 0x10, 0x07] => Ok(WeaponType::Raikiri), [0x00, 0x11, 0x00] => Ok(WeaponType::SoulEater), [0x00, 0x11, 0x01] => Ok(WeaponType::SoulBanish), [0x00, 0x12, 0x00] => Ok(WeaponType::SpreadNeedle), [0x00, 0x13, 0x00] => Ok(WeaponType::HolyRay), [0x00, 0x14, 0x00] => Ok(WeaponType::InfernoBazooka), [0x00, 0x14, 0x01] => Ok(WeaponType::RamblingMay), [0x00, 0x14, 0x02] => Ok(WeaponType::LK38Combat), [0x00, 0x15, 0x00] => Ok(WeaponType::FlameVisit), [0x00, 0x15, 0x01] => Ok(WeaponType::BurningVisit), [0x00, 0x16, 0x00] => Ok(WeaponType::AkikosFryingPan), [0x00, 0x17, 0x00] => Ok(WeaponType::SorcerersCane), [0x00, 0x18, 0x00] => Ok(WeaponType::SBeatsBlade), [0x00, 0x19, 0x00] => Ok(WeaponType::PArmssBlade), [0x00, 0x1A, 0x00] => Ok(WeaponType::DelsabersBuster), [0x00, 0x1B, 0x00] => Ok(WeaponType::BringersRifle), [0x00, 0x1C, 0x00] => Ok(WeaponType::EggBlaster), [0x00, 0x1D, 0x00] => Ok(WeaponType::PsychoWand), [0x00, 0x1E, 0x00] => Ok(WeaponType::HeavenPunisher), [0x00, 0x1F, 0x00] => Ok(WeaponType::LavisCannon), [0x00, 0x20, 0x00] => Ok(WeaponType::VictorAxe), [0x00, 0x20, 0x01] => Ok(WeaponType::LaconiumAxe), [0x00, 0x21, 0x00] => Ok(WeaponType::ChainSawd), [0x00, 0x22, 0x00] => Ok(WeaponType::Caduceus), [0x00, 0x22, 0x01] => Ok(WeaponType::MercuriusRod), [0x00, 0x23, 0x00] => Ok(WeaponType::StingTip), [0x00, 0x24, 0x00] => Ok(WeaponType::MagicalPiece), [0x00, 0x25, 0x00] => Ok(WeaponType::TechnicalCrozier), [0x00, 0x26, 0x00] => Ok(WeaponType::SuppressedGun), [0x00, 0x27, 0x00] => Ok(WeaponType::AncientSaber), [0x00, 0x28, 0x00] => Ok(WeaponType::HarisenBattleFan), [0x00, 0x29, 0x00] => Ok(WeaponType::Yamigarasu), [0x00, 0x2A, 0x00] => Ok(WeaponType::AkikosWok), [0x00, 0x2B, 0x00] => Ok(WeaponType::ToyHammer), [0x00, 0x2C, 0x00] => Ok(WeaponType::Elysion), [0x00, 0x2D, 0x00] => Ok(WeaponType::RedSaber), [0x00, 0x2E, 0x00] => Ok(WeaponType::MeteorCudgel), [0x00, 0x2F, 0x00] => Ok(WeaponType::MonkeyKingBar), [0x00, 0x2F, 0x01] => Ok(WeaponType::BlackKingBar), [0x00, 0x30, 0x00] => Ok(WeaponType::DoubleCannon), [0x00, 0x30, 0x01] => Ok(WeaponType::Girasole), [0x00, 0x31, 0x00] => Ok(WeaponType::HugeBattleFan), [0x00, 0x32, 0x00] => Ok(WeaponType::TsumikiriJSword), [0x00, 0x33, 0x00] => Ok(WeaponType::SealedJSword), [0x00, 0x34, 0x00] => Ok(WeaponType::RedSword), [0x00, 0x35, 0x00] => Ok(WeaponType::CrazyTune), [0x00, 0x36, 0x00] => Ok(WeaponType::TwinChakram), [0x00, 0x37, 0x00] => Ok(WeaponType::WokOfAkikosShop), [0x00, 0x38, 0x00] => Ok(WeaponType::LavisBlade), [0x00, 0x39, 0x00] => Ok(WeaponType::RedDagger), [0x00, 0x3A, 0x00] => Ok(WeaponType::MadamsParasol), [0x00, 0x3B, 0x00] => Ok(WeaponType::MadamsUmbrella), [0x00, 0x3C, 0x00] => Ok(WeaponType::ImperialPick), [0x00, 0x3D, 0x00] => Ok(WeaponType::Berdysh), [0x00, 0x3E, 0x00] => Ok(WeaponType::RedPartisan), [0x00, 0x3F, 0x00] => Ok(WeaponType::FlightCutter), [0x00, 0x40, 0x00] => Ok(WeaponType::FlightFan), [0x00, 0x41, 0x00] => Ok(WeaponType::RedSlicer), [0x00, 0x42, 0x00] => Ok(WeaponType::HandgunGuld), [0x00, 0x42, 0x01] => Ok(WeaponType::MasterRaven), [0x00, 0x43, 0x00] => Ok(WeaponType::HandgunMilla), [0x00, 0x43, 0x01] => Ok(WeaponType::LastSwan), [0x00, 0x44, 0x00] => Ok(WeaponType::RedHandgun), [0x00, 0x45, 0x00] => Ok(WeaponType::FrozenShooter), [0x00, 0x45, 0x01] => Ok(WeaponType::SnowQueen), [0x00, 0x46, 0x00] => Ok(WeaponType::AntiAndroidRifle), [0x00, 0x47, 0x00] => Ok(WeaponType::RocketPunch), [0x00, 0x48, 0x00] => Ok(WeaponType::SambaMaracas), [0x00, 0x49, 0x00] => Ok(WeaponType::TwinPsychogun), [0x00, 0x4A, 0x00] => Ok(WeaponType::DrillLauncher), [0x00, 0x4B, 0x00] => Ok(WeaponType::GuldMilla), [0x00, 0x4B, 0x01] => Ok(WeaponType::DualBird), [0x00, 0x4C, 0x00] => Ok(WeaponType::RedMechgun), [0x00, 0x4D, 0x00] => Ok(WeaponType::BelraCannon), [0x00, 0x4E, 0x00] => Ok(WeaponType::PanzerFaust), [0x00, 0x4E, 0x01] => Ok(WeaponType::IronFaust), [0x00, 0x4F, 0x00] => Ok(WeaponType::SummitMoon), [0x00, 0x50, 0x00] => Ok(WeaponType::Windmill), [0x00, 0x51, 0x00] => Ok(WeaponType::EvilCurst), [0x00, 0x52, 0x00] => Ok(WeaponType::FlowerCane), [0x00, 0x53, 0x00] => Ok(WeaponType::HildebearsCane), [0x00, 0x54, 0x00] => Ok(WeaponType::HildebluesCane), [0x00, 0x55, 0x00] => Ok(WeaponType::RabbitWand), [0x00, 0x56, 0x00] => Ok(WeaponType::PlantainLeaf), [0x00, 0x56, 0x01] => Ok(WeaponType::Fatsia), [0x00, 0x57, 0x00] => Ok(WeaponType::DemonicFork), [0x00, 0x58, 0x00] => Ok(WeaponType::StrikerOfChao), [0x00, 0x59, 0x00] => Ok(WeaponType::Broom), [0x00, 0x5A, 0x00] => Ok(WeaponType::ProphetsOfMotav), [0x00, 0x5B, 0x00] => Ok(WeaponType::TheSighOfAGod), [0x00, 0x5C, 0x00] => Ok(WeaponType::TwinkleStar), [0x00, 0x5D, 0x00] => Ok(WeaponType::PlantainFan), [0x00, 0x5E, 0x00] => Ok(WeaponType::TwinBlaze), [0x00, 0x5F, 0x00] => Ok(WeaponType::MarinasBag), [0x00, 0x60, 0x00] => Ok(WeaponType::DragonsClaw), [0x00, 0x61, 0x00] => Ok(WeaponType::PanthersClaw), [0x00, 0x62, 0x00] => Ok(WeaponType::SRedsBlade), [0x00, 0x63, 0x00] => Ok(WeaponType::PlantainHugeFan), [0x00, 0x64, 0x00] => Ok(WeaponType::ChameleonScythe), [0x00, 0x65, 0x00] => Ok(WeaponType::Yasminkov3000R), [0x00, 0x66, 0x00] => Ok(WeaponType::AnoRifle), [0x00, 0x67, 0x00] => Ok(WeaponType::BaranzLauncher), [0x00, 0x68, 0x00] => Ok(WeaponType::BranchOfPakupaku), [0x00, 0x69, 0x00] => Ok(WeaponType::HeartOfPoumn), [0x00, 0x6A, 0x00] => Ok(WeaponType::Yasminkov2000H), [0x00, 0x6B, 0x00] => Ok(WeaponType::Yasminkov7000V), [0x00, 0x6C, 0x00] => Ok(WeaponType::Yasminkov9000M), [0x00, 0x6D, 0x00] => Ok(WeaponType::MaserBeam), [0x00, 0x6D, 0x01] => Ok(WeaponType::PowerMaser), [0x00, 0x6E, 0x00] => Ok(WeaponType::GameMagazne), [0x00, 0x6E, 0x01] => Ok(WeaponType::Login2), [0x00, 0x6F, 0x00] => Ok(WeaponType::FlowerBouquet), [0x00, 0x89, 0x00] => Ok(WeaponType::Musashi), [0x00, 0x89, 0x01] => Ok(WeaponType::Yamato), [0x00, 0x89, 0x02] => Ok(WeaponType::Asuka), [0x00, 0x89, 0x03] => Ok(WeaponType::SangeYasha), [0x00, 0x8A, 0x00] => Ok(WeaponType::Sange), [0x00, 0x8A, 0x01] => Ok(WeaponType::Yasha), [0x00, 0x8A, 0x02] => Ok(WeaponType::Kamui), [0x00, 0x8B, 0x00] => Ok(WeaponType::PhotonLauncher), [0x00, 0x8B, 0x01] => Ok(WeaponType::GuiltyLight), [0x00, 0x8B, 0x02] => Ok(WeaponType::RedScorpio), [0x00, 0x8B, 0x03] => Ok(WeaponType::PhononMaser), [0x00, 0x8C, 0x00] => Ok(WeaponType::Talis), [0x00, 0x8C, 0x01] => Ok(WeaponType::Mahu), [0x00, 0x8C, 0x02] => Ok(WeaponType::Hitogata), [0x00, 0x8C, 0x03] => Ok(WeaponType::DancingHitogata), [0x00, 0x8C, 0x04] => Ok(WeaponType::Kunai), [0x00, 0x8D, 0x00] => Ok(WeaponType::Nug2000Bazooka), [0x00, 0x8E, 0x00] => Ok(WeaponType::SBerillsHands0), [0x00, 0x8E, 0x01] => Ok(WeaponType::SBerillsHands1), [0x00, 0x8F, 0x00] => Ok(WeaponType::FlowensSword3060), [0x00, 0x8F, 0x01] => Ok(WeaponType::FlowensSword3064), [0x00, 0x8F, 0x02] => Ok(WeaponType::FlowensSword3067), [0x00, 0x8F, 0x03] => Ok(WeaponType::FlowensSword3073), [0x00, 0x8F, 0x04] => Ok(WeaponType::FlowensSword3077), [0x00, 0x8F, 0x05] => Ok(WeaponType::FlowensSword3082), [0x00, 0x8F, 0x06] => Ok(WeaponType::FlowensSword3083), [0x00, 0x8F, 0x07] => Ok(WeaponType::FlowensSword3084), [0x00, 0x8F, 0x08] => Ok(WeaponType::FlowensSword3079), [0x00, 0x90, 0x00] => Ok(WeaponType::DbsSaber3062), [0x00, 0x90, 0x01] => Ok(WeaponType::DbsSaber3067), [0x00, 0x90, 0x02] => Ok(WeaponType::DbsSaber3069Chris), [0x00, 0x90, 0x03] => Ok(WeaponType::DbsSaber3064), [0x00, 0x90, 0x04] => Ok(WeaponType::DbsSaber3069Torato), [0x00, 0x90, 0x05] => Ok(WeaponType::DbsSaber3073), [0x00, 0x90, 0x06] => Ok(WeaponType::DbsSaber3070), [0x00, 0x90, 0x07] => Ok(WeaponType::DbsSaber3075), [0x00, 0x90, 0x08] => Ok(WeaponType::DbsSaber3077), [0x00, 0x91, 0x00] => Ok(WeaponType::GiGueBazooka), [0x00, 0x92, 0x00] => Ok(WeaponType::Guardianna), [0x00, 0x93, 0x00] => Ok(WeaponType::ViridiaCard), [0x00, 0x93, 0x01] => Ok(WeaponType::GreenillCard), [0x00, 0x93, 0x02] => Ok(WeaponType::SkylyCard), [0x00, 0x93, 0x03] => Ok(WeaponType::BluefullCard), [0x00, 0x93, 0x04] => Ok(WeaponType::PurplenumCard), [0x00, 0x93, 0x05] => Ok(WeaponType::PinkalCard), [0x00, 0x93, 0x06] => Ok(WeaponType::RedriaCard), [0x00, 0x93, 0x07] => Ok(WeaponType::OranCard), [0x00, 0x93, 0x08] => Ok(WeaponType::YellowbozeCard), [0x00, 0x93, 0x09] => Ok(WeaponType::WhitillCard), [0x00, 0x94, 0x00] => Ok(WeaponType::MorningGlory), [0x00, 0x95, 0x00] => Ok(WeaponType::PartisanOfLightning), [0x00, 0x96, 0x00] => Ok(WeaponType::GalWind), [0x00, 0x97, 0x00] => Ok(WeaponType::Zanba), [0x00, 0x98, 0x00] => Ok(WeaponType::RikasClaw), [0x00, 0x99, 0x00] => Ok(WeaponType::AngelHarp), [0x00, 0x9A, 0x00] => Ok(WeaponType::DemolitionComet), [0x00, 0x9B, 0x00] => Ok(WeaponType::NeisClaw2), [0x00, 0x9C, 0x00] => Ok(WeaponType::RainbowBaton), [0x00, 0x9D, 0x00] => Ok(WeaponType::DarkFlow), [0x00, 0x9E, 0x00] => Ok(WeaponType::DarkMeteor), [0x00, 0x9F, 0x00] => Ok(WeaponType::DarkBridge), [0x00, 0xA0, 0x00] => Ok(WeaponType::GAssassinsSabers), [0x00, 0xA1, 0x00] => Ok(WeaponType::RappysFan), [0x00, 0xA2, 0x00] => Ok(WeaponType::BoomasClaw), [0x00, 0xA2, 0x01] => Ok(WeaponType::GoboomasClaw), [0x00, 0xA2, 0x02] => Ok(WeaponType::GigoboomasClaw), [0x00, 0xA3, 0x00] => Ok(WeaponType::RubyBullet), [0x00, 0xA4, 0x00] => Ok(WeaponType::AmoreRose), [0x00, 0xAA, 0x00] => Ok(WeaponType::SlicerOfFanatic), [0x00, 0xAB, 0x00] => Ok(WeaponType::LameDArgent), [0x00, 0xAC, 0x00] => Ok(WeaponType::Excalibur), [0x00, 0xAD, 0x00] => Ok(WeaponType::RageDeFeu), [0x00, 0xAD, 0x01] => Ok(WeaponType::RageDeFeu2), [0x00, 0xAD, 0x02] => Ok(WeaponType::RageDeFeu3), [0x00, 0xAD, 0x03] => Ok(WeaponType::RageDeFeu4), [0x00, 0xAE, 0x00] => Ok(WeaponType::DaisyChain), [0x00, 0xAF, 0x00] => Ok(WeaponType::OphelieSeize), [0x00, 0xB0, 0x00] => Ok(WeaponType::MilleMarteaux), [0x00, 0xB1, 0x00] => Ok(WeaponType::LeCogneur), [0x00, 0xB2, 0x00] => Ok(WeaponType::CommanderBlade), [0x00, 0xB3, 0x00] => Ok(WeaponType::Vivienne), [0x00, 0xB4, 0x00] => Ok(WeaponType::Kusanagi), [0x00, 0xB5, 0x00] => Ok(WeaponType::SacredDuster), [0x00, 0xB6, 0x00] => Ok(WeaponType::Guren), [0x00, 0xB7, 0x00] => Ok(WeaponType::Shouren), [0x00, 0xB8, 0x00] => Ok(WeaponType::Jizai), [0x00, 0xB9, 0x00] => Ok(WeaponType::Flamberge), [0x00, 0xBA, 0x00] => Ok(WeaponType::Yunchang), [0x00, 0xBB, 0x00] => Ok(WeaponType::SnakeSpire), [0x00, 0xBC, 0x00] => Ok(WeaponType::FlapjackFlapper), [0x00, 0xBD, 0x00] => Ok(WeaponType::Getsugasan), [0x00, 0xBE, 0x00] => Ok(WeaponType::Maguwa), [0x00, 0xBF, 0x00] => Ok(WeaponType::HeavenStriker), [0x00, 0xC0, 0x00] => Ok(WeaponType::CannonRouge), [0x00, 0xC1, 0x00] => Ok(WeaponType::MeteorRouge), [0x00, 0xC2, 0x00] => Ok(WeaponType::Solferino), [0x00, 0xC3, 0x00] => Ok(WeaponType::Clio), [0x00, 0xC4, 0x00] => Ok(WeaponType::SirenGlassHammer), [0x00, 0xC5, 0x00] => Ok(WeaponType::GlideDivine), [0x00, 0xC6, 0x00] => Ok(WeaponType::Shichishito), [0x00, 0xC7, 0x00] => Ok(WeaponType::Murasame), [0x00, 0xC8, 0x00] => Ok(WeaponType::DaylightScar), [0x00, 0xC9, 0x00] => Ok(WeaponType::Decalog), [0x00, 0xCA, 0x00] => Ok(WeaponType::FifthAnnivBlade), [0x00, 0xCB, 0x00] => Ok(WeaponType::TyrellsParasol), [0x00, 0xCC, 0x00] => Ok(WeaponType::AkikosCleaver), [0x00, 0xCD, 0x00] => Ok(WeaponType::Tanegashima), [0x00, 0xCE, 0x00] => Ok(WeaponType::TreeClippers), [0x00, 0xCF, 0x00] => Ok(WeaponType::NiceShot), [0x00, 0xD0, 0x00] => Ok(WeaponType::Unknown3), [0x00, 0xD1, 0x00] => Ok(WeaponType::Unknown4), [0x00, 0xD2, 0x00] => Ok(WeaponType::AnoBazooka), [0x00, 0xD3, 0x00] => Ok(WeaponType::Synthesizer), [0x00, 0xD4, 0x00] => Ok(WeaponType::BambooSpear), [0x00, 0xD5, 0x00] => Ok(WeaponType::KaneiTsuho), [0x00, 0xD6, 0x00] => Ok(WeaponType::Jitte), [0x00, 0xD7, 0x00] => Ok(WeaponType::ButterflyNet), [0x00, 0xD8, 0x00] => Ok(WeaponType::Syringe), [0x00, 0xD9, 0x00] => Ok(WeaponType::Battledore), [0x00, 0xDA, 0x00] => Ok(WeaponType::Racket), [0x00, 0xDB, 0x00] => Ok(WeaponType::Hammer), [0x00, 0xDC, 0x00] => Ok(WeaponType::GreatBouquet), [0x00, 0xDD, 0x00] => Ok(WeaponType::TypesaSaber), [0x00, 0xDE, 0x00] => Ok(WeaponType::TypeslSaber), [0x00, 0xDE, 0x01] => Ok(WeaponType::TypeslSlicer), [0x00, 0xDE, 0x02] => Ok(WeaponType::TypeslClaw), [0x00, 0xDE, 0x03] => Ok(WeaponType::TypeslKatana), [0x00, 0xDF, 0x00] => Ok(WeaponType::TypejsSaber), [0x00, 0xDF, 0x01] => Ok(WeaponType::TypejsSlicer), [0x00, 0xDF, 0x02] => Ok(WeaponType::TypejsJSword), [0x00, 0xE0, 0x00] => Ok(WeaponType::TypeswSword), [0x00, 0xE0, 0x01] => Ok(WeaponType::TypeswSlicer), [0x00, 0xE0, 0x02] => Ok(WeaponType::TypeswJSword), [0x00, 0xE1, 0x00] => Ok(WeaponType::TyperoSword), [0x00, 0xE1, 0x01] => Ok(WeaponType::TyperoHalbert), [0x00, 0xE1, 0x02] => Ok(WeaponType::TyperoRod), [0x00, 0xE2, 0x00] => Ok(WeaponType::TypeblBlade), [0x00, 0xE3, 0x00] => Ok(WeaponType::TypeknBlade), [0x00, 0xE3, 0x01] => Ok(WeaponType::TypeknClaw), [0x00, 0xE4, 0x00] => Ok(WeaponType::TypehaHalbert), [0x00, 0xE4, 0x01] => Ok(WeaponType::TypehaRod), [0x00, 0xE5, 0x00] => Ok(WeaponType::TypedsDSaber), [0x00, 0xE5, 0x01] => Ok(WeaponType::TypedsRod), [0x00, 0xE5, 0x02] => Ok(WeaponType::Typeds), [0x00, 0xE6, 0x00] => Ok(WeaponType::TypeclClaw), [0x00, 0xE7, 0x00] => Ok(WeaponType::TypessSw), [0x00, 0xE8, 0x00] => Ok(WeaponType::TypeguHand), [0x00, 0xE8, 0x01] => Ok(WeaponType::TypeguMechgun), [0x00, 0xE9, 0x00] => Ok(WeaponType::TyperiRifle), [0x00, 0xEA, 0x00] => Ok(WeaponType::TypemeMechgun), [0x00, 0xEB, 0x00] => Ok(WeaponType::TypeshShot), [0x00, 0xEC, 0x00] => Ok(WeaponType::TypewaWand), _ => Err(ItemParseError::InvalidWeaponType), } } } #[derive(Debug, Copy, Clone, PartialEq, Serialize, Deserialize)] pub enum TekSpecialModifier { Plus, Neutral, Minus, } #[derive(Debug, Copy, Clone, PartialEq, Serialize, Deserialize)] pub enum TekPercentModifier { PlusPlus, Plus, Neutral, Minus, MinusMinus, } #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub enum WeaponModifier { AddPercents { attr: WeaponAttribute, pds: Vec, }, AddGrind { amount: u32, grinder: ItemEntityId, }, Tekked { special: TekSpecialModifier, percent: TekPercentModifier, grind: i32, }, WrapPresent { paper: WrappingPaper, }, UnwrapPresent, } #[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)] pub struct Weapon { pub weapon: WeaponType, pub special: Option, pub grind: u8, pub attrs: [Option; 3], pub tekked: bool, pub wrapping: Option, } impl Weapon { pub fn new(wep: WeaponType) -> Weapon { Weapon { weapon: wep, special: None, grind: 0, attrs: [None; 3], tekked: true, wrapping: None, } } pub fn apply_modifier(&mut self, modifier: &WeaponModifier) { match modifier { WeaponModifier::Tekked{special, percent, grind} => { match special { TekSpecialModifier::Plus => { self.special = self.special.map(|special| { special.rank_up() }); }, TekSpecialModifier::Minus => { self.special = self.special.map(|special| { special.rank_down() }); }, TekSpecialModifier::Neutral => { }, } for i in 0..3 { self.attrs[i] = self.attrs[i].map(|mut attr| { match percent { TekPercentModifier::PlusPlus => { attr.value += 10; }, TekPercentModifier::Plus => { attr.value += 5; }, TekPercentModifier::MinusMinus => { attr.value -= 10; }, TekPercentModifier::Minus => { attr.value -= 5; }, TekPercentModifier::Neutral => { } } attr }); } self.grind = std::cmp::max(self.grind as i32 + grind, 0) as u8; self.tekked = true; }, WeaponModifier::WrapPresent{paper} => {self.wrapping = Some(*paper)}, WeaponModifier::UnwrapPresent => {self.wrapping = None}, _ => {} } } pub fn wrap_present(&mut self, value: u8) { self.wrapping = WrappingPaper::from(value); } pub fn unwrap_present(&mut self) { self.wrapping = None; } pub fn as_bytes(&self) -> [u8; 16] { let mut result = [0u8; 16]; result[0..3].copy_from_slice(&self.weapon.value()); result[3] = self.grind; result[4] = self.special.map(|s| s.value()).unwrap_or(0); if self.wrapping.is_some() { result[4] += 0x40; result[5] = self.wrapping.unwrap().value(); }; if self.tekked == false { result[4] += 0x80 }; result[6..8].copy_from_slice(&self.attrs[0].map(|s| s.value()).unwrap_or([0,0])); result[8..10].copy_from_slice(&self.attrs[1].map(|s| s.value()).unwrap_or([0,0])); result[10..12].copy_from_slice(&self.attrs[2].map(|s| s.value()).unwrap_or([0,0])); result } // TODO: error handling pub fn from_bytes(data: [u8; 16]) -> Result { let w = WeaponType::parse_type([data[0], data[1], data[2]]); if w.is_ok() { let mut s = None; let mut t = true; let g = data[3]; if data[4] & 0x80 == 0x80 { s = WeaponSpecial::from(data[4] - 0x80); t = false; } let p = { if data[4] & 0x40 == 0x40 { WrappingPaper::from(data[5]) } else { None } }; let mut a = [ None, None, None ]; for i in 0..3 { if data[2 * (3 + i)] >= 1 && data[2 * (3 + i)] <= 5 { a[i] = Some(WeaponAttribute{ attr: Attribute::from(data[2 * (3 + i)]).unwrap(), value: data[2 * (3 + i) + 1] as i8, }); } else { a[i] = None; // return Err(ItemParseError::InvalidAttribute) } } Ok(Weapon { weapon: w.unwrap(), special: s, grind: g, attrs:[ a[0], a[1], a[2], ], tekked: t, wrapping: p, }) } else { Err(ItemParseError::InvalidWeaponBytes) // TODO: error handling if wrong bytes are given } } }