You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

701 lines
30 KiB

use serde::{Serialize, Deserialize};
#[derive(Debug, Copy, Clone)]
pub enum ItemParseError {
InvalidShieldBytes,
InvalidShieldType,
}
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq, Serialize, Deserialize, enum_utils::FromStr, derive_more::Display, strum_macros::EnumIter)]
pub enum ShieldType {
Barrier,
Shield,
CoreShield,
GigaShield,
SoulBarrier,
HardShield,
BraveBarrier,
SolidShield,
FlameBarrier,
PlasmaBarrier,
FreezeBarrier,
PsychicBarrier,
GeneralShield,
ProtectBarrier,
GloriousShield,
ImperialBarrier,
GuardianShield,
DivinityBarrier,
UltimateShield,
SpiritualShield,
CelestialShield,
InvisibleGuard,
SacredGuard,
SPartsVer116,
SPartsVer201,
LightRelief,
ShieldOfDelsaber,
ForceWall,
RangerWall,
HunterWall,
AttributeWall,
SecretGear,
CombatGear,
ProtoRegeneGear,
RegenerateGear,
RegeneGearAdv,
FlowensShield,
CustomBarrierVerOo,
DbsShield,
RedRing,
TripolicShield,
StandstillShield,
SafetyHeart,
KasamiBracer,
GodsShieldSuzaku,
GodsShieldGenbu,
GodsShieldByakko,
GodsShieldSeiryu,
HuntersShell,
RicosGlasses,
RicosEarring,
BlueRing,
Barrier2,
SecureFeet,
Barrier3,
Barrier4,
Barrier5,
Barrier6,
RestaMerge,
AntiMerge,
ShiftaMerge,
DebandMerge,
FoieMerge,
GifoieMerge,
RafoieMerge,
RedMerge,
BartaMerge,
GibartaMerge,
RabartaMerge,
BlueMerge,
ZondeMerge,
GizondeMerge,
RazondeMerge,
YellowMerge,
RecoveryBarrier,
AssistBarrier,
RedBarrier,
BlueBarrier,
YellowBarrier,
WeaponsGoldShield,
BlackGear,
WorksGuard,
RagolRing,
BlueRing2,
BlueRing3,
BlueRing4,
BlueRing5,
BlueRing6,
BlueRing7,
BlueRing8,
BlueRing9,
GreenRing,
GreenRing2,
GreenRing3,
GreenRing4,
GreenRing5,
GreenRing6,
GreenRing7,
GreenRing8,
YellowRing,
YellowRing2,
YellowRing3,
YellowRing4,
YellowRing5,
YellowRing6,
YellowRing7,
YellowRing8,
PurpleRing,
PurpleRing2,
PurpleRing3,
PurpleRing4,
PurpleRing5,
PurpleRing6,
PurpleRing7,
PurpleRing8,
WhiteRing,
WhiteRing2,
WhiteRing3,
WhiteRing4,
WhiteRing5,
WhiteRing6,
WhiteRing7,
WhiteRing8,
BlackRing,
BlackRing2,
BlackRing3,
BlackRing4,
BlackRing5,
BlackRing6,
BlackRing7,
BlackRing8,
WeaponsSilverShield,
WeaponsCopperShield,
Gratia,
TripolicReflector,
StrikerPlus,
RegenerateGearBP,
Rupika,
YataMirror,
BunnyEars,
CatEars,
ThreeSeals,
GodsShieldKouryu,
DfShield,
FromTheDepths,
DeRolLeShield,
HoneycombReflector,
Epsiguard,
AngelRing,
UnionGuard,
UnionGuard2,
UnionGuard3,
UnionGuard4,
StinkShield,
Unknownb,
Genpei,
Genpei2,
Genpei3,
Genpei4,
Genpei5,
Genpei6,
Genpei7,
Genpei8,
Genpei9,
Genpei10,
}
impl ShieldType {
pub fn value(&self) -> [u8; 3] {
match self {
ShieldType::Barrier => [0x01, 0x02, 0x00],
ShieldType::Shield => [0x01, 0x02, 0x01],
ShieldType::CoreShield => [0x01, 0x02, 0x02],
ShieldType::GigaShield => [0x01, 0x02, 0x03],
ShieldType::SoulBarrier => [0x01, 0x02, 0x04],
ShieldType::HardShield => [0x01, 0x02, 0x05],
ShieldType::BraveBarrier => [0x01, 0x02, 0x06],
ShieldType::SolidShield => [0x01, 0x02, 0x07],
ShieldType::FlameBarrier => [0x01, 0x02, 0x08],
ShieldType::PlasmaBarrier => [0x01, 0x02, 0x09],
ShieldType::FreezeBarrier => [0x01, 0x02, 0x0A],
ShieldType::PsychicBarrier => [0x01, 0x02, 0x0B],
ShieldType::GeneralShield => [0x01, 0x02, 0x0C],
ShieldType::ProtectBarrier => [0x01, 0x02, 0x0D],
ShieldType::GloriousShield => [0x01, 0x02, 0x0E],
ShieldType::ImperialBarrier => [0x01, 0x02, 0x0F],
ShieldType::GuardianShield => [0x01, 0x02, 0x10],
ShieldType::DivinityBarrier => [0x01, 0x02, 0x11],
ShieldType::UltimateShield => [0x01, 0x02, 0x12],
ShieldType::SpiritualShield => [0x01, 0x02, 0x13],
ShieldType::CelestialShield => [0x01, 0x02, 0x14],
ShieldType::InvisibleGuard => [0x01, 0x02, 0x15],
ShieldType::SacredGuard => [0x01, 0x02, 0x16],
ShieldType::SPartsVer116 => [0x01, 0x02, 0x17],
ShieldType::SPartsVer201 => [0x01, 0x02, 0x18],
ShieldType::LightRelief => [0x01, 0x02, 0x19],
ShieldType::ShieldOfDelsaber => [0x01, 0x02, 0x1A],
ShieldType::ForceWall => [0x01, 0x02, 0x1B],
ShieldType::RangerWall => [0x01, 0x02, 0x1C],
ShieldType::HunterWall => [0x01, 0x02, 0x1D],
ShieldType::AttributeWall => [0x01, 0x02, 0x1E],
ShieldType::SecretGear => [0x01, 0x02, 0x1F],
ShieldType::CombatGear => [0x01, 0x02, 0x20],
ShieldType::ProtoRegeneGear => [0x01, 0x02, 0x21],
ShieldType::RegenerateGear => [0x01, 0x02, 0x22],
ShieldType::RegeneGearAdv => [0x01, 0x02, 0x23],
ShieldType::FlowensShield => [0x01, 0x02, 0x24],
ShieldType::CustomBarrierVerOo => [0x01, 0x02, 0x25],
ShieldType::DbsShield => [0x01, 0x02, 0x26],
ShieldType::RedRing => [0x01, 0x02, 0x27],
ShieldType::TripolicShield => [0x01, 0x02, 0x28],
ShieldType::StandstillShield => [0x01, 0x02, 0x29],
ShieldType::SafetyHeart => [0x01, 0x02, 0x2A],
ShieldType::KasamiBracer => [0x01, 0x02, 0x2B],
ShieldType::GodsShieldSuzaku => [0x01, 0x02, 0x2C],
ShieldType::GodsShieldGenbu => [0x01, 0x02, 0x2D],
ShieldType::GodsShieldByakko => [0x01, 0x02, 0x2E],
ShieldType::GodsShieldSeiryu => [0x01, 0x02, 0x2F],
ShieldType::HuntersShell => [0x01, 0x02, 0x30],
ShieldType::RicosGlasses => [0x01, 0x02, 0x31],
ShieldType::RicosEarring => [0x01, 0x02, 0x32],
ShieldType::BlueRing => [0x01, 0x02, 0x33],
ShieldType::Barrier2 => [0x01, 0x02, 0x34],
ShieldType::SecureFeet => [0x01, 0x02, 0x35],
ShieldType::Barrier3 => [0x01, 0x02, 0x36],
ShieldType::Barrier4 => [0x01, 0x02, 0x37],
ShieldType::Barrier5 => [0x01, 0x02, 0x38],
ShieldType::Barrier6 => [0x01, 0x02, 0x39],
ShieldType::RestaMerge => [0x01, 0x02, 0x3A],
ShieldType::AntiMerge => [0x01, 0x02, 0x3B],
ShieldType::ShiftaMerge => [0x01, 0x02, 0x3C],
ShieldType::DebandMerge => [0x01, 0x02, 0x3D],
ShieldType::FoieMerge => [0x01, 0x02, 0x3E],
ShieldType::GifoieMerge => [0x01, 0x02, 0x3F],
ShieldType::RafoieMerge => [0x01, 0x02, 0x40],
ShieldType::RedMerge => [0x01, 0x02, 0x41],
ShieldType::BartaMerge => [0x01, 0x02, 0x42],
ShieldType::GibartaMerge => [0x01, 0x02, 0x43],
ShieldType::RabartaMerge => [0x01, 0x02, 0x44],
ShieldType::BlueMerge => [0x01, 0x02, 0x45],
ShieldType::ZondeMerge => [0x01, 0x02, 0x46],
ShieldType::GizondeMerge => [0x01, 0x02, 0x47],
ShieldType::RazondeMerge => [0x01, 0x02, 0x48],
ShieldType::YellowMerge => [0x01, 0x02, 0x49],
ShieldType::RecoveryBarrier => [0x01, 0x02, 0x4A],
ShieldType::AssistBarrier => [0x01, 0x02, 0x4B],
ShieldType::RedBarrier => [0x01, 0x02, 0x4C],
ShieldType::BlueBarrier => [0x01, 0x02, 0x4D],
ShieldType::YellowBarrier => [0x01, 0x02, 0x4E],
ShieldType::WeaponsGoldShield => [0x01, 0x02, 0x4F],
ShieldType::BlackGear => [0x01, 0x02, 0x50],
ShieldType::WorksGuard => [0x01, 0x02, 0x51],
ShieldType::RagolRing => [0x01, 0x02, 0x52],
ShieldType::BlueRing2 => [0x01, 0x02, 0x53],
ShieldType::BlueRing3 => [0x01, 0x02, 0x54],
ShieldType::BlueRing4 => [0x01, 0x02, 0x55],
ShieldType::BlueRing5 => [0x01, 0x02, 0x56],
ShieldType::BlueRing6 => [0x01, 0x02, 0x57],
ShieldType::BlueRing7 => [0x01, 0x02, 0x58],
ShieldType::BlueRing8 => [0x01, 0x02, 0x59],
ShieldType::BlueRing9 => [0x01, 0x02, 0x5A],
ShieldType::GreenRing => [0x01, 0x02, 0x5B],
ShieldType::GreenRing2 => [0x01, 0x02, 0x5C],
ShieldType::GreenRing3 => [0x01, 0x02, 0x5D],
ShieldType::GreenRing4 => [0x01, 0x02, 0x5E],
ShieldType::GreenRing5 => [0x01, 0x02, 0x5F],
ShieldType::GreenRing6 => [0x01, 0x02, 0x60],
ShieldType::GreenRing7 => [0x01, 0x02, 0x61],
ShieldType::GreenRing8 => [0x01, 0x02, 0x62],
ShieldType::YellowRing => [0x01, 0x02, 0x63],
ShieldType::YellowRing2 => [0x01, 0x02, 0x64],
ShieldType::YellowRing3 => [0x01, 0x02, 0x65],
ShieldType::YellowRing4 => [0x01, 0x02, 0x66],
ShieldType::YellowRing5 => [0x01, 0x02, 0x67],
ShieldType::YellowRing6 => [0x01, 0x02, 0x68],
ShieldType::YellowRing7 => [0x01, 0x02, 0x69],
ShieldType::YellowRing8 => [0x01, 0x02, 0x6A],
ShieldType::PurpleRing => [0x01, 0x02, 0x6B],
ShieldType::PurpleRing2 => [0x01, 0x02, 0x6C],
ShieldType::PurpleRing3 => [0x01, 0x02, 0x6D],
ShieldType::PurpleRing4 => [0x01, 0x02, 0x6E],
ShieldType::PurpleRing5 => [0x01, 0x02, 0x6F],
ShieldType::PurpleRing6 => [0x01, 0x02, 0x70],
ShieldType::PurpleRing7 => [0x01, 0x02, 0x71],
ShieldType::PurpleRing8 => [0x01, 0x02, 0x72],
ShieldType::WhiteRing => [0x01, 0x02, 0x73],
ShieldType::WhiteRing2 => [0x01, 0x02, 0x74],
ShieldType::WhiteRing3 => [0x01, 0x02, 0x75],
ShieldType::WhiteRing4 => [0x01, 0x02, 0x76],
ShieldType::WhiteRing5 => [0x01, 0x02, 0x77],
ShieldType::WhiteRing6 => [0x01, 0x02, 0x78],
ShieldType::WhiteRing7 => [0x01, 0x02, 0x79],
ShieldType::WhiteRing8 => [0x01, 0x02, 0x7A],
ShieldType::BlackRing => [0x01, 0x02, 0x7B],
ShieldType::BlackRing2 => [0x01, 0x02, 0x7C],
ShieldType::BlackRing3 => [0x01, 0x02, 0x7D],
ShieldType::BlackRing4 => [0x01, 0x02, 0x7E],
ShieldType::BlackRing5 => [0x01, 0x02, 0x7F],
ShieldType::BlackRing6 => [0x01, 0x02, 0x80],
ShieldType::BlackRing7 => [0x01, 0x02, 0x81],
ShieldType::BlackRing8 => [0x01, 0x02, 0x82],
ShieldType::WeaponsSilverShield => [0x01, 0x02, 0x83],
ShieldType::WeaponsCopperShield => [0x01, 0x02, 0x84],
ShieldType::Gratia => [0x01, 0x02, 0x85],
ShieldType::TripolicReflector => [0x01, 0x02, 0x86],
ShieldType::StrikerPlus => [0x01, 0x02, 0x87],
ShieldType::RegenerateGearBP => [0x01, 0x02, 0x88],
ShieldType::Rupika => [0x01, 0x02, 0x89],
ShieldType::YataMirror => [0x01, 0x02, 0x8A],
ShieldType::BunnyEars => [0x01, 0x02, 0x8B],
ShieldType::CatEars => [0x01, 0x02, 0x8C],
ShieldType::ThreeSeals => [0x01, 0x02, 0x8D],
ShieldType::GodsShieldKouryu => [0x01, 0x02, 0x8E],
ShieldType::DfShield => [0x01, 0x02, 0x8F],
ShieldType::FromTheDepths => [0x01, 0x02, 0x90],
ShieldType::DeRolLeShield => [0x01, 0x02, 0x91],
ShieldType::HoneycombReflector => [0x01, 0x02, 0x92],
ShieldType::Epsiguard => [0x01, 0x02, 0x93],
ShieldType::AngelRing => [0x01, 0x02, 0x94],
ShieldType::UnionGuard => [0x01, 0x02, 0x95],
ShieldType::UnionGuard2 => [0x01, 0x02, 0x96],
ShieldType::UnionGuard3 => [0x01, 0x02, 0x97],
ShieldType::UnionGuard4 => [0x01, 0x02, 0x98],
ShieldType::StinkShield => [0x01, 0x02, 0x99],
ShieldType::Unknownb => [0x01, 0x02, 0x9A],
ShieldType::Genpei => [0x01, 0x02, 0x9B],
ShieldType::Genpei2 => [0x01, 0x02, 0x9C],
ShieldType::Genpei3 => [0x01, 0x02, 0x9D],
ShieldType::Genpei4 => [0x01, 0x02, 0x9E],
ShieldType::Genpei5 => [0x01, 0x02, 0x9F],
ShieldType::Genpei6 => [0x01, 0x02, 0xA0],
ShieldType::Genpei7 => [0x01, 0x02, 0xA1],
ShieldType::Genpei8 => [0x01, 0x02, 0xA2],
ShieldType::Genpei9 => [0x01, 0x02, 0xA3],
ShieldType::Genpei10 => [0x01, 0x02, 0xA4],
}
}
pub fn parse_type(data: [u8; 3]) -> Result<ShieldType, ItemParseError> {
match data {
[0x01, 0x02, 0x00] => Ok(ShieldType::Barrier),
[0x01, 0x02, 0x01] => Ok(ShieldType::Shield),
[0x01, 0x02, 0x02] => Ok(ShieldType::CoreShield),
[0x01, 0x02, 0x03] => Ok(ShieldType::GigaShield),
[0x01, 0x02, 0x04] => Ok(ShieldType::SoulBarrier),
[0x01, 0x02, 0x05] => Ok(ShieldType::HardShield),
[0x01, 0x02, 0x06] => Ok(ShieldType::BraveBarrier),
[0x01, 0x02, 0x07] => Ok(ShieldType::SolidShield),
[0x01, 0x02, 0x08] => Ok(ShieldType::FlameBarrier),
[0x01, 0x02, 0x09] => Ok(ShieldType::PlasmaBarrier),
[0x01, 0x02, 0x0A] => Ok(ShieldType::FreezeBarrier),
[0x01, 0x02, 0x0B] => Ok(ShieldType::PsychicBarrier),
[0x01, 0x02, 0x0C] => Ok(ShieldType::GeneralShield),
[0x01, 0x02, 0x0D] => Ok(ShieldType::ProtectBarrier),
[0x01, 0x02, 0x0E] => Ok(ShieldType::GloriousShield),
[0x01, 0x02, 0x0F] => Ok(ShieldType::ImperialBarrier),
[0x01, 0x02, 0x10] => Ok(ShieldType::GuardianShield),
[0x01, 0x02, 0x11] => Ok(ShieldType::DivinityBarrier),
[0x01, 0x02, 0x12] => Ok(ShieldType::UltimateShield),
[0x01, 0x02, 0x13] => Ok(ShieldType::SpiritualShield),
[0x01, 0x02, 0x14] => Ok(ShieldType::CelestialShield),
[0x01, 0x02, 0x15] => Ok(ShieldType::InvisibleGuard),
[0x01, 0x02, 0x16] => Ok(ShieldType::SacredGuard),
[0x01, 0x02, 0x17] => Ok(ShieldType::SPartsVer116),
[0x01, 0x02, 0x18] => Ok(ShieldType::SPartsVer201),
[0x01, 0x02, 0x19] => Ok(ShieldType::LightRelief),
[0x01, 0x02, 0x1A] => Ok(ShieldType::ShieldOfDelsaber),
[0x01, 0x02, 0x1B] => Ok(ShieldType::ForceWall),
[0x01, 0x02, 0x1C] => Ok(ShieldType::RangerWall),
[0x01, 0x02, 0x1D] => Ok(ShieldType::HunterWall),
[0x01, 0x02, 0x1E] => Ok(ShieldType::AttributeWall),
[0x01, 0x02, 0x1F] => Ok(ShieldType::SecretGear),
[0x01, 0x02, 0x20] => Ok(ShieldType::CombatGear),
[0x01, 0x02, 0x21] => Ok(ShieldType::ProtoRegeneGear),
[0x01, 0x02, 0x22] => Ok(ShieldType::RegenerateGear),
[0x01, 0x02, 0x23] => Ok(ShieldType::RegeneGearAdv),
[0x01, 0x02, 0x24] => Ok(ShieldType::FlowensShield),
[0x01, 0x02, 0x25] => Ok(ShieldType::CustomBarrierVerOo),
[0x01, 0x02, 0x26] => Ok(ShieldType::DbsShield),
[0x01, 0x02, 0x27] => Ok(ShieldType::RedRing),
[0x01, 0x02, 0x28] => Ok(ShieldType::TripolicShield),
[0x01, 0x02, 0x29] => Ok(ShieldType::StandstillShield),
[0x01, 0x02, 0x2A] => Ok(ShieldType::SafetyHeart),
[0x01, 0x02, 0x2B] => Ok(ShieldType::KasamiBracer),
[0x01, 0x02, 0x2C] => Ok(ShieldType::GodsShieldSuzaku),
[0x01, 0x02, 0x2D] => Ok(ShieldType::GodsShieldGenbu),
[0x01, 0x02, 0x2E] => Ok(ShieldType::GodsShieldByakko),
[0x01, 0x02, 0x2F] => Ok(ShieldType::GodsShieldSeiryu),
[0x01, 0x02, 0x30] => Ok(ShieldType::HuntersShell),
[0x01, 0x02, 0x31] => Ok(ShieldType::RicosGlasses),
[0x01, 0x02, 0x32] => Ok(ShieldType::RicosEarring),
[0x01, 0x02, 0x33] => Ok(ShieldType::BlueRing),
[0x01, 0x02, 0x34] => Ok(ShieldType::Barrier2),
[0x01, 0x02, 0x35] => Ok(ShieldType::SecureFeet),
[0x01, 0x02, 0x36] => Ok(ShieldType::Barrier3),
[0x01, 0x02, 0x37] => Ok(ShieldType::Barrier4),
[0x01, 0x02, 0x38] => Ok(ShieldType::Barrier5),
[0x01, 0x02, 0x39] => Ok(ShieldType::Barrier6),
[0x01, 0x02, 0x3A] => Ok(ShieldType::RestaMerge),
[0x01, 0x02, 0x3B] => Ok(ShieldType::AntiMerge),
[0x01, 0x02, 0x3C] => Ok(ShieldType::ShiftaMerge),
[0x01, 0x02, 0x3D] => Ok(ShieldType::DebandMerge),
[0x01, 0x02, 0x3E] => Ok(ShieldType::FoieMerge),
[0x01, 0x02, 0x3F] => Ok(ShieldType::GifoieMerge),
[0x01, 0x02, 0x40] => Ok(ShieldType::RafoieMerge),
[0x01, 0x02, 0x41] => Ok(ShieldType::RedMerge),
[0x01, 0x02, 0x42] => Ok(ShieldType::BartaMerge),
[0x01, 0x02, 0x43] => Ok(ShieldType::GibartaMerge),
[0x01, 0x02, 0x44] => Ok(ShieldType::RabartaMerge),
[0x01, 0x02, 0x45] => Ok(ShieldType::BlueMerge),
[0x01, 0x02, 0x46] => Ok(ShieldType::ZondeMerge),
[0x01, 0x02, 0x47] => Ok(ShieldType::GizondeMerge),
[0x01, 0x02, 0x48] => Ok(ShieldType::RazondeMerge),
[0x01, 0x02, 0x49] => Ok(ShieldType::YellowMerge),
[0x01, 0x02, 0x4A] => Ok(ShieldType::RecoveryBarrier),
[0x01, 0x02, 0x4B] => Ok(ShieldType::AssistBarrier),
[0x01, 0x02, 0x4C] => Ok(ShieldType::RedBarrier),
[0x01, 0x02, 0x4D] => Ok(ShieldType::BlueBarrier),
[0x01, 0x02, 0x4E] => Ok(ShieldType::YellowBarrier),
[0x01, 0x02, 0x4F] => Ok(ShieldType::WeaponsGoldShield),
[0x01, 0x02, 0x50] => Ok(ShieldType::BlackGear),
[0x01, 0x02, 0x51] => Ok(ShieldType::WorksGuard),
[0x01, 0x02, 0x52] => Ok(ShieldType::RagolRing),
[0x01, 0x02, 0x53] => Ok(ShieldType::BlueRing2),
[0x01, 0x02, 0x54] => Ok(ShieldType::BlueRing3),
[0x01, 0x02, 0x55] => Ok(ShieldType::BlueRing4),
[0x01, 0x02, 0x56] => Ok(ShieldType::BlueRing5),
[0x01, 0x02, 0x57] => Ok(ShieldType::BlueRing6),
[0x01, 0x02, 0x58] => Ok(ShieldType::BlueRing7),
[0x01, 0x02, 0x59] => Ok(ShieldType::BlueRing8),
[0x01, 0x02, 0x5A] => Ok(ShieldType::BlueRing9),
[0x01, 0x02, 0x5B] => Ok(ShieldType::GreenRing),
[0x01, 0x02, 0x5C] => Ok(ShieldType::GreenRing2),
[0x01, 0x02, 0x5D] => Ok(ShieldType::GreenRing3),
[0x01, 0x02, 0x5E] => Ok(ShieldType::GreenRing4),
[0x01, 0x02, 0x5F] => Ok(ShieldType::GreenRing5),
[0x01, 0x02, 0x60] => Ok(ShieldType::GreenRing6),
[0x01, 0x02, 0x61] => Ok(ShieldType::GreenRing7),
[0x01, 0x02, 0x62] => Ok(ShieldType::GreenRing8),
[0x01, 0x02, 0x63] => Ok(ShieldType::YellowRing),
[0x01, 0x02, 0x64] => Ok(ShieldType::YellowRing2),
[0x01, 0x02, 0x65] => Ok(ShieldType::YellowRing3),
[0x01, 0x02, 0x66] => Ok(ShieldType::YellowRing4),
[0x01, 0x02, 0x67] => Ok(ShieldType::YellowRing5),
[0x01, 0x02, 0x68] => Ok(ShieldType::YellowRing6),
[0x01, 0x02, 0x69] => Ok(ShieldType::YellowRing7),
[0x01, 0x02, 0x6A] => Ok(ShieldType::YellowRing8),
[0x01, 0x02, 0x6B] => Ok(ShieldType::PurpleRing),
[0x01, 0x02, 0x6C] => Ok(ShieldType::PurpleRing2),
[0x01, 0x02, 0x6D] => Ok(ShieldType::PurpleRing3),
[0x01, 0x02, 0x6E] => Ok(ShieldType::PurpleRing4),
[0x01, 0x02, 0x6F] => Ok(ShieldType::PurpleRing5),
[0x01, 0x02, 0x70] => Ok(ShieldType::PurpleRing6),
[0x01, 0x02, 0x71] => Ok(ShieldType::PurpleRing7),
[0x01, 0x02, 0x72] => Ok(ShieldType::PurpleRing8),
[0x01, 0x02, 0x73] => Ok(ShieldType::WhiteRing),
[0x01, 0x02, 0x74] => Ok(ShieldType::WhiteRing2),
[0x01, 0x02, 0x75] => Ok(ShieldType::WhiteRing3),
[0x01, 0x02, 0x76] => Ok(ShieldType::WhiteRing4),
[0x01, 0x02, 0x77] => Ok(ShieldType::WhiteRing5),
[0x01, 0x02, 0x78] => Ok(ShieldType::WhiteRing6),
[0x01, 0x02, 0x79] => Ok(ShieldType::WhiteRing7),
[0x01, 0x02, 0x7A] => Ok(ShieldType::WhiteRing8),
[0x01, 0x02, 0x7B] => Ok(ShieldType::BlackRing),
[0x01, 0x02, 0x7C] => Ok(ShieldType::BlackRing2),
[0x01, 0x02, 0x7D] => Ok(ShieldType::BlackRing3),
[0x01, 0x02, 0x7E] => Ok(ShieldType::BlackRing4),
[0x01, 0x02, 0x7F] => Ok(ShieldType::BlackRing5),
[0x01, 0x02, 0x80] => Ok(ShieldType::BlackRing6),
[0x01, 0x02, 0x81] => Ok(ShieldType::BlackRing7),
[0x01, 0x02, 0x82] => Ok(ShieldType::BlackRing8),
[0x01, 0x02, 0x83] => Ok(ShieldType::WeaponsSilverShield),
[0x01, 0x02, 0x84] => Ok(ShieldType::WeaponsCopperShield),
[0x01, 0x02, 0x85] => Ok(ShieldType::Gratia),
[0x01, 0x02, 0x86] => Ok(ShieldType::TripolicReflector),
[0x01, 0x02, 0x87] => Ok(ShieldType::StrikerPlus),
[0x01, 0x02, 0x88] => Ok(ShieldType::RegenerateGearBP),
[0x01, 0x02, 0x89] => Ok(ShieldType::Rupika),
[0x01, 0x02, 0x8A] => Ok(ShieldType::YataMirror),
[0x01, 0x02, 0x8B] => Ok(ShieldType::BunnyEars),
[0x01, 0x02, 0x8C] => Ok(ShieldType::CatEars),
[0x01, 0x02, 0x8D] => Ok(ShieldType::ThreeSeals),
[0x01, 0x02, 0x8E] => Ok(ShieldType::GodsShieldKouryu),
[0x01, 0x02, 0x8F] => Ok(ShieldType::DfShield),
[0x01, 0x02, 0x90] => Ok(ShieldType::FromTheDepths),
[0x01, 0x02, 0x91] => Ok(ShieldType::DeRolLeShield),
[0x01, 0x02, 0x92] => Ok(ShieldType::HoneycombReflector),
[0x01, 0x02, 0x93] => Ok(ShieldType::Epsiguard),
[0x01, 0x02, 0x94] => Ok(ShieldType::AngelRing),
[0x01, 0x02, 0x95] => Ok(ShieldType::UnionGuard),
[0x01, 0x02, 0x96] => Ok(ShieldType::UnionGuard2),
[0x01, 0x02, 0x97] => Ok(ShieldType::UnionGuard3),
[0x01, 0x02, 0x98] => Ok(ShieldType::UnionGuard4),
[0x01, 0x02, 0x99] => Ok(ShieldType::StinkShield),
[0x01, 0x02, 0x9A] => Ok(ShieldType::Unknownb),
[0x01, 0x02, 0x9B] => Ok(ShieldType::Genpei),
[0x01, 0x02, 0x9C] => Ok(ShieldType::Genpei2),
[0x01, 0x02, 0x9D] => Ok(ShieldType::Genpei3),
[0x01, 0x02, 0x9E] => Ok(ShieldType::Genpei4),
[0x01, 0x02, 0x9F] => Ok(ShieldType::Genpei5),
[0x01, 0x02, 0xA0] => Ok(ShieldType::Genpei6),
[0x01, 0x02, 0xA1] => Ok(ShieldType::Genpei7),
[0x01, 0x02, 0xA2] => Ok(ShieldType::Genpei8),
[0x01, 0x02, 0xA3] => Ok(ShieldType::Genpei9),
[0x01, 0x02, 0xA4] => Ok(ShieldType::Genpei10),
_ => Err(ItemParseError::InvalidShieldType),
}
}
}
#[derive(Debug, Copy, Clone, PartialEq, Serialize, Deserialize)]
pub struct Shield {
pub shield: ShieldType,
pub dfp: u8,
pub evp: u8,
}
impl Shield {
pub fn as_bytes(&self) -> [u8; 16] {
let mut result = [0; 16];
result[0..3].copy_from_slice(&self.shield.value());
result[6] = self.dfp;
result[8] = self.evp;
result
}
pub fn from_bytes(data: [u8; 16]) -> Result<Shield, ItemParseError> {
let s = ShieldType::parse_type([data[0], data[1], data[2]]);
if let Ok(s) = s {
Ok(Shield{
shield: s,
dfp: data[6],
evp: data[8],
})
}
else {
Err(ItemParseError::InvalidShieldBytes) // TODO: error handling if wrong bytes are given
}
}
pub fn is_rare_item(self) -> bool {
matches!(
self.shield,
ShieldType::InvisibleGuard
| ShieldType::SacredGuard
| ShieldType::SPartsVer116
| ShieldType::SPartsVer201
| ShieldType::LightRelief
| ShieldType::ShieldOfDelsaber
| ShieldType::ForceWall
| ShieldType::RangerWall
| ShieldType::HunterWall
| ShieldType::AttributeWall
| ShieldType::SecretGear
| ShieldType::CombatGear
| ShieldType::ProtoRegeneGear
| ShieldType::RegenerateGear
| ShieldType::RegeneGearAdv
| ShieldType::FlowensShield
| ShieldType::CustomBarrierVerOo
| ShieldType::DbsShield
| ShieldType::RedRing
| ShieldType::TripolicShield
| ShieldType::StandstillShield
| ShieldType::SafetyHeart
| ShieldType::KasamiBracer
| ShieldType::GodsShieldSuzaku
| ShieldType::GodsShieldGenbu
| ShieldType::GodsShieldByakko
| ShieldType::GodsShieldSeiryu
| ShieldType::HuntersShell
| ShieldType::RicosGlasses
| ShieldType::RicosEarring
| ShieldType::BlueRing
| ShieldType::Barrier2
| ShieldType::SecureFeet
| ShieldType::Barrier3
| ShieldType::Barrier4
| ShieldType::Barrier5
| ShieldType::Barrier6
| ShieldType::RestaMerge
| ShieldType::AntiMerge
| ShieldType::ShiftaMerge
| ShieldType::DebandMerge
| ShieldType::FoieMerge
| ShieldType::GifoieMerge
| ShieldType::RafoieMerge
| ShieldType::RedMerge
| ShieldType::BartaMerge
| ShieldType::GibartaMerge
| ShieldType::RabartaMerge
| ShieldType::BlueMerge
| ShieldType::ZondeMerge
| ShieldType::GizondeMerge
| ShieldType::RazondeMerge
| ShieldType::YellowMerge
| ShieldType::RecoveryBarrier
| ShieldType::AssistBarrier
| ShieldType::RedBarrier
| ShieldType::BlueBarrier
| ShieldType::YellowBarrier
| ShieldType::WeaponsGoldShield
| ShieldType::BlackGear
| ShieldType::WorksGuard
| ShieldType::RagolRing
| ShieldType::BlueRing2
| ShieldType::BlueRing3
| ShieldType::BlueRing4
| ShieldType::BlueRing5
| ShieldType::BlueRing6
| ShieldType::BlueRing7
| ShieldType::BlueRing8
| ShieldType::BlueRing9
| ShieldType::GreenRing
| ShieldType::GreenRing2
| ShieldType::GreenRing3
| ShieldType::GreenRing4
| ShieldType::GreenRing5
| ShieldType::GreenRing6
| ShieldType::GreenRing7
| ShieldType::GreenRing8
| ShieldType::YellowRing
| ShieldType::YellowRing2
| ShieldType::YellowRing3
| ShieldType::YellowRing4
| ShieldType::YellowRing5
| ShieldType::YellowRing6
| ShieldType::YellowRing7
| ShieldType::YellowRing8
| ShieldType::PurpleRing
| ShieldType::PurpleRing2
| ShieldType::PurpleRing3
| ShieldType::PurpleRing4
| ShieldType::PurpleRing5
| ShieldType::PurpleRing6
| ShieldType::PurpleRing7
| ShieldType::PurpleRing8
| ShieldType::WhiteRing
| ShieldType::WhiteRing2
| ShieldType::WhiteRing3
| ShieldType::WhiteRing4
| ShieldType::WhiteRing5
| ShieldType::WhiteRing6
| ShieldType::WhiteRing7
| ShieldType::WhiteRing8
| ShieldType::BlackRing
| ShieldType::BlackRing2
| ShieldType::BlackRing3
| ShieldType::BlackRing4
| ShieldType::BlackRing5
| ShieldType::BlackRing6
| ShieldType::BlackRing7
| ShieldType::BlackRing8
| ShieldType::WeaponsSilverShield
| ShieldType::WeaponsCopperShield
| ShieldType::Gratia
| ShieldType::TripolicReflector
| ShieldType::StrikerPlus
| ShieldType::RegenerateGearBP
| ShieldType::Rupika
| ShieldType::YataMirror
| ShieldType::BunnyEars
| ShieldType::CatEars
| ShieldType::ThreeSeals
| ShieldType::GodsShieldKouryu
| ShieldType::DfShield
| ShieldType::FromTheDepths
| ShieldType::DeRolLeShield
| ShieldType::HoneycombReflector
| ShieldType::Epsiguard
| ShieldType::AngelRing
| ShieldType::UnionGuard
| ShieldType::UnionGuard2
| ShieldType::UnionGuard3
| ShieldType::UnionGuard4
| ShieldType::StinkShield
| ShieldType::Unknownb
| ShieldType::Genpei
| ShieldType::Genpei2
| ShieldType::Genpei3
| ShieldType::Genpei4
| ShieldType::Genpei5
| ShieldType::Genpei6
| ShieldType::Genpei7
| ShieldType::Genpei8
| ShieldType::Genpei9
| ShieldType::Genpei10
)
}
}