2020-03-29 12:06:31 -07:00

416 lines
16 KiB
Rust

use serde::{Serialize, Deserialize};
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq, Serialize, Deserialize, enum_utils::FromStr, derive_more::Display)]
pub enum ToolType {
Monomate,
Dimate,
Trimate,
Monofluid,
Difluid,
Trifluid,
SolAtomizer,
MoonAtomizer,
StarAtomizer,
Antidote,
Antiparalysis,
Telepipe,
TrapVision,
ScapeDoll,
Monogrinder,
Digrinder,
Trigrinder,
PowerMaterial,
MindMaterial,
EvadeMaterial,
HpMaterial,
TpMaterial,
DefMaterial,
LuckMaterial,
CellofMag502,
CellofMag213,
PartsofRobochao,
HeartofOpaOpa,
HeartofPian,
HeartofChao,
SorcerersRightArm,
SbeatsArms,
ParmsArms,
DelsabersRightArm,
BringersRightArm,
DelsabersLeftArm,
SredsArms,
DragonsClaw,
HildebearsHead,
HildebluesHead,
PartsofBaranz,
BelrasRightArm,
GiGuesbody,
SinowBerillsArms,
GrassAssassinsArms,
BoomasRightArm,
GoboomasRightArm,
GigoboomasRightArm,
GalGryphonsWing,
RappysWing,
CladdingofEpsilon,
DeRolLeShell,
BerillPhoton,
Parasiticgeneflow,
MagicStoneiritista,
Blueblackstone,
Syncesta,
MagicWater,
ParasiticcellTypeD,
MagicrockheartKey,
Magicrockmoola,
StarAmplifier,
BookofHitogata,
HeartofChuChu,
PartsofEggBlaster,
HeartofAngel,
HeartofDevil,
KitofHamburger,
PanthersSpirit,
KitofMark3,
KitofMasterSystem,
KitofGenesis,
KitofSegaSaturn,
KitofDreamcast,
AmplifierofResta,
AmplifierofAnti,
AmplifierofShifta,
AmplifierofDeband,
AmplifierofFoie,
AmplifierofGifoie,
AmplifierofRafoie,
AmplifierofBarta,
AmplifierofGibarta,
AmplifierofRabarta,
AmplifierofZonde,
AmplifierofGizonde,
AmplifierofRazonde,
AmplifierofRed,
AmplifierofBlue,
AmplifierofYellow,
HeartofKapuKapu,
PhotonBooster,
Addslot,
PhotonDrop,
PhotonSphere,
PhotonCrystal,
SecretTicket,
PhotonTicket,
BookofKatana1,
BookofKatana2,
BookofKatana3,
WeaponsBronzeBadge,
WeaponsSilverBadge,
WeaponsGoldBadge,
WeaponsCrystalBadge,
WeaponsSteelBadge,
WeaponsAluminumBadge,
WeaponsLeatherBadge,
WeaponsBoneBadge,
Letterofappreciation,
ItemTicket,
ValentinesChocolate,
NewYearsCard,
ChristmasCard,
BirthdayCard,
ProofofSonicTeam,
SpecialEventTicket,
FlowerBouquet,
Cake,
Accessories,
MrnakasBusinessCard,
Present,
Chocolate,
Candy,
Cake2,
WeaponsSilverBadge2,
WeaponsGoldBadge2,
WeaponsCrystalBadge2,
WeaponsSteelBadge2,
WeaponsAluminumBadge2,
WeaponsLeatherBadge2,
WeaponsBoneBadge2,
Bouquet,
Decoction,
ChristmasPresent,
EasterEgg,
Jackolantern,
DiskVol1weddingMarch,
DiskVol2dayLight,
DiskVol3burningRangers,
DiskVol4openYourHeart,
DiskVol5liveLearn,
DiskVol6nights,
DiskVol7endingThemepianover,
DiskVol8hearttoHeart,
DiskVol9strangeBlue,
DiskVol10reunionSystem,
DiskVol11pinnacles,
DiskVol12fightinsidetheSpaceship,
HuntersReport,
HuntersReport2,
HuntersReport3,
HuntersReport4,
HuntersReport5,
Tablet,
Unknown2,
DragonScale,
HeavenStrikerCoat,
PioneerParts,
AmitiesMemo,
HeartofMorolian,
RappysBeak,
Yahoosengine,
DPhotonCore,
LibertaKit,
CellofMag0503,
CellofMag0504,
CellofMag0505,
CellofMag0506,
CellofMag0507,
TeamPoints500,
TeamPoints1000,
TeamPoints5000,
TeamPoints10000,
}
impl ToolType {
pub fn is_stackable(&self) -> bool {
match self {
ToolType::Monomate => true,
ToolType::Dimate => true,
ToolType::Trimate => true,
ToolType::Monofluid => true,
ToolType::Difluid => true,
ToolType::Trifluid => true,
ToolType::SolAtomizer => true,
ToolType::MoonAtomizer => true,
ToolType::StarAtomizer => true,
ToolType::Antidote => true,
ToolType::Antiparalysis => true,
ToolType::Telepipe => true,
ToolType::TrapVision => true,
ToolType::Monogrinder => true,
ToolType::Digrinder => true,
ToolType::Trigrinder => true,
ToolType::PowerMaterial => true,
ToolType::MindMaterial => true,
ToolType::EvadeMaterial => true,
ToolType::HpMaterial => true,
ToolType::TpMaterial => true,
ToolType::DefMaterial => true,
ToolType::LuckMaterial => true,
ToolType::Addslot => true,
ToolType::PhotonDrop => true,
ToolType::PhotonSphere => true,
ToolType::PhotonCrystal => true,
_ => false,
}
}
pub fn value(&self) -> [u8; 3] {
match self {
ToolType::Monomate => [0x03, 0x00, 0x00],
ToolType::Dimate => [0x03, 0x00, 0x01],
ToolType::Trimate => [0x03, 0x00, 0x02],
ToolType::Monofluid => [0x03, 0x01, 0x00],
ToolType::Difluid => [0x03, 0x01, 0x01],
ToolType::Trifluid => [0x03, 0x01, 0x02],
ToolType::SolAtomizer => [0x03, 0x03, 0x00],
ToolType::MoonAtomizer => [0x03, 0x04, 0x00],
ToolType::StarAtomizer => [0x03, 0x05, 0x00],
ToolType::Antidote => [0x03, 0x06, 0x00],
ToolType::Antiparalysis => [0x03, 0x06, 0x01],
ToolType::Telepipe => [0x03, 0x07, 0x00],
ToolType::TrapVision => [0x03, 0x08, 0x00],
ToolType::ScapeDoll => [0x03, 0x09, 0x00],
ToolType::Monogrinder => [0x03, 0x0A, 0x00],
ToolType::Digrinder => [0x03, 0x0A, 0x01],
ToolType::Trigrinder => [0x03, 0x0A, 0x02],
ToolType::PowerMaterial => [0x03, 0x0B, 0x00],
ToolType::MindMaterial => [0x03, 0x0B, 0x01],
ToolType::EvadeMaterial => [0x03, 0x0B, 0x02],
ToolType::HpMaterial => [0x03, 0x0B, 0x03],
ToolType::TpMaterial => [0x03, 0x0B, 0x04],
ToolType::DefMaterial => [0x03, 0x0B, 0x05],
ToolType::LuckMaterial => [0x03, 0x0B, 0x06],
ToolType::CellofMag502 => [0x03, 0x0C, 0x00],
ToolType::CellofMag213 => [0x03, 0x0C, 0x01],
ToolType::PartsofRobochao => [0x03, 0x0C, 0x02],
ToolType::HeartofOpaOpa => [0x03, 0x0C, 0x03],
ToolType::HeartofPian => [0x03, 0x0C, 0x04],
ToolType::HeartofChao => [0x03, 0x0C, 0x05],
ToolType::SorcerersRightArm => [0x03, 0x0D, 0x00],
ToolType::SbeatsArms => [0x03, 0x0D, 0x01],
ToolType::ParmsArms => [0x03, 0x0D, 0x02],
ToolType::DelsabersRightArm => [0x03, 0x0D, 0x03],
ToolType::BringersRightArm => [0x03, 0x0D, 0x04],
ToolType::DelsabersLeftArm => [0x03, 0x0D, 0x05],
ToolType::SredsArms => [0x03, 0x0D, 0x06],
ToolType::DragonsClaw => [0x03, 0x0D, 0x07],
ToolType::HildebearsHead => [0x03, 0x0D, 0x08],
ToolType::HildebluesHead => [0x03, 0x0D, 0x09],
ToolType::PartsofBaranz => [0x03, 0x0D, 0x0A],
ToolType::BelrasRightArm => [0x03, 0x0D, 0x0B],
ToolType::GiGuesbody => [0x03, 0x0D, 0x0C],
ToolType::SinowBerillsArms => [0x03, 0x0D, 0x0D],
ToolType::GrassAssassinsArms => [0x03, 0x0D, 0x0E],
ToolType::BoomasRightArm => [0x03, 0x0D, 0x0F],
ToolType::GoboomasRightArm => [0x03, 0x0D, 0x10],
ToolType::GigoboomasRightArm => [0x03, 0x0D, 0x11],
ToolType::GalGryphonsWing => [0x03, 0x0D, 0x12],
ToolType::RappysWing => [0x03, 0x0D, 0x13],
ToolType::CladdingofEpsilon => [0x03, 0x0D, 0x14],
ToolType::DeRolLeShell => [0x03, 0x0D, 0x15],
ToolType::BerillPhoton => [0x03, 0x0E, 0x00],
ToolType::Parasiticgeneflow => [0x03, 0x0E, 0x01],
ToolType::MagicStoneiritista => [0x03, 0x0E, 0x02],
ToolType::Blueblackstone => [0x03, 0x0E, 0x03],
ToolType::Syncesta => [0x03, 0x0E, 0x04],
ToolType::MagicWater => [0x03, 0x0E, 0x05],
ToolType::ParasiticcellTypeD => [0x03, 0x0E, 0x06],
ToolType::MagicrockheartKey => [0x03, 0x0E, 0x07],
ToolType::Magicrockmoola => [0x03, 0x0E, 0x08],
ToolType::StarAmplifier => [0x03, 0x0E, 0x09],
ToolType::BookofHitogata => [0x03, 0x0E, 0x0A],
ToolType::HeartofChuChu => [0x03, 0x0E, 0x0B],
ToolType::PartsofEggBlaster => [0x03, 0x0E, 0x0C],
ToolType::HeartofAngel => [0x03, 0x0E, 0x0D],
ToolType::HeartofDevil => [0x03, 0x0E, 0x0E],
ToolType::KitofHamburger => [0x03, 0x0E, 0x0F],
ToolType::PanthersSpirit => [0x03, 0x0E, 0x10],
ToolType::KitofMark3 => [0x03, 0x0E, 0x11],
ToolType::KitofMasterSystem => [0x03, 0x0E, 0x12],
ToolType::KitofGenesis => [0x03, 0x0E, 0x13],
ToolType::KitofSegaSaturn => [0x03, 0x0E, 0x14],
ToolType::KitofDreamcast => [0x03, 0x0E, 0x15],
ToolType::AmplifierofResta => [0x03, 0x0E, 0x16],
ToolType::AmplifierofAnti => [0x03, 0x0E, 0x17],
ToolType::AmplifierofShifta => [0x03, 0x0E, 0x18],
ToolType::AmplifierofDeband => [0x03, 0x0E, 0x19],
ToolType::AmplifierofFoie => [0x03, 0x0E, 0x1A],
ToolType::AmplifierofGifoie => [0x03, 0x0E, 0x1B],
ToolType::AmplifierofRafoie => [0x03, 0x0E, 0x1C],
ToolType::AmplifierofBarta => [0x03, 0x0E, 0x1D],
ToolType::AmplifierofGibarta => [0x03, 0x0E, 0x1E],
ToolType::AmplifierofRabarta => [0x03, 0x0E, 0x1F],
ToolType::AmplifierofZonde => [0x03, 0x0E, 0x20],
ToolType::AmplifierofGizonde => [0x03, 0x0E, 0x21],
ToolType::AmplifierofRazonde => [0x03, 0x0E, 0x22],
ToolType::AmplifierofRed => [0x03, 0x0E, 0x23],
ToolType::AmplifierofBlue => [0x03, 0x0E, 0x24],
ToolType::AmplifierofYellow => [0x03, 0x0E, 0x25],
ToolType::HeartofKapuKapu => [0x03, 0x0E, 0x26],
ToolType::PhotonBooster => [0x03, 0x0E, 0x27],
ToolType::Addslot => [0x03, 0x0F, 0x00],
ToolType::PhotonDrop => [0x03, 0x10, 0x00],
ToolType::PhotonSphere => [0x03, 0x10, 0x01],
ToolType::PhotonCrystal => [0x03, 0x10, 0x02],
ToolType::SecretTicket => [0x03, 0x10, 0x03],
ToolType::PhotonTicket => [0x03, 0x10, 0x04],
ToolType::BookofKatana1 => [0x03, 0x11, 0x00],
ToolType::BookofKatana2 => [0x03, 0x11, 0x01],
ToolType::BookofKatana3 => [0x03, 0x11, 0x02],
ToolType::WeaponsBronzeBadge => [0x03, 0x12, 0x00],
ToolType::WeaponsSilverBadge => [0x03, 0x12, 0x01],
ToolType::WeaponsGoldBadge => [0x03, 0x12, 0x02],
ToolType::WeaponsCrystalBadge => [0x03, 0x12, 0x03],
ToolType::WeaponsSteelBadge => [0x03, 0x12, 0x04],
ToolType::WeaponsAluminumBadge => [0x03, 0x12, 0x05],
ToolType::WeaponsLeatherBadge => [0x03, 0x12, 0x06],
ToolType::WeaponsBoneBadge => [0x03, 0x12, 0x07],
ToolType::Letterofappreciation => [0x03, 0x12, 0x08],
ToolType::ItemTicket => [0x03, 0x12, 0x09],
ToolType::ValentinesChocolate => [0x03, 0x12, 0x0A],
ToolType::NewYearsCard => [0x03, 0x12, 0x0B],
ToolType::ChristmasCard => [0x03, 0x12, 0x0C],
ToolType::BirthdayCard => [0x03, 0x12, 0x0D],
ToolType::ProofofSonicTeam => [0x03, 0x12, 0x0E],
ToolType::SpecialEventTicket => [0x03, 0x12, 0x0F],
ToolType::FlowerBouquet => [0x03, 0x12, 0x10],
ToolType::Cake => [0x03, 0x12, 0x11],
ToolType::Accessories => [0x03, 0x12, 0x12],
ToolType::MrnakasBusinessCard => [0x03, 0x12, 0x13],
ToolType::Present => [0x03, 0x13, 0x00],
ToolType::Chocolate => [0x03, 0x14, 0x00],
ToolType::Candy => [0x03, 0x14, 0x01],
ToolType::Cake2 => [0x03, 0x14, 0x02],
ToolType::WeaponsSilverBadge2 => [0x03, 0x14, 0x03],
ToolType::WeaponsGoldBadge2 => [0x03, 0x14, 0x04],
ToolType::WeaponsCrystalBadge2 => [0x03, 0x14, 0x05],
ToolType::WeaponsSteelBadge2 => [0x03, 0x14, 0x06],
ToolType::WeaponsAluminumBadge2 => [0x03, 0x14, 0x07],
ToolType::WeaponsLeatherBadge2 => [0x03, 0x14, 0x08],
ToolType::WeaponsBoneBadge2 => [0x03, 0x14, 0x09],
ToolType::Bouquet => [0x03, 0x14, 0x0A],
ToolType::Decoction => [0x03, 0x14, 0x0B],
ToolType::ChristmasPresent => [0x03, 0x15, 0x00],
ToolType::EasterEgg => [0x03, 0x15, 0x01],
ToolType::Jackolantern => [0x03, 0x15, 0x02],
ToolType::DiskVol1weddingMarch => [0x03, 0x16, 0x00],
ToolType::DiskVol2dayLight => [0x03, 0x16, 0x01],
ToolType::DiskVol3burningRangers => [0x03, 0x16, 0x02],
ToolType::DiskVol4openYourHeart => [0x03, 0x16, 0x03],
ToolType::DiskVol5liveLearn => [0x03, 0x16, 0x04],
ToolType::DiskVol6nights => [0x03, 0x16, 0x05],
ToolType::DiskVol7endingThemepianover => [0x03, 0x16, 0x06],
ToolType::DiskVol8hearttoHeart => [0x03, 0x16, 0x07],
ToolType::DiskVol9strangeBlue => [0x03, 0x16, 0x08],
ToolType::DiskVol10reunionSystem => [0x03, 0x16, 0x09],
ToolType::DiskVol11pinnacles => [0x03, 0x16, 0x0A],
ToolType::DiskVol12fightinsidetheSpaceship => [0x03, 0x16, 0x0B],
ToolType::HuntersReport => [0x03, 0x17, 0x00],
ToolType::HuntersReport2 => [0x03, 0x17, 0x01],
ToolType::HuntersReport3 => [0x03, 0x17, 0x02],
ToolType::HuntersReport4 => [0x03, 0x17, 0x03],
ToolType::HuntersReport5 => [0x03, 0x17, 0x04],
ToolType::Tablet => [0x03, 0x18, 0x00],
ToolType::Unknown2 => [0x03, 0x18, 0x01],
ToolType::DragonScale => [0x03, 0x18, 0x02],
ToolType::HeavenStrikerCoat => [0x03, 0x18, 0x03],
ToolType::PioneerParts => [0x03, 0x18, 0x04],
ToolType::AmitiesMemo => [0x03, 0x18, 0x05],
ToolType::HeartofMorolian => [0x03, 0x18, 0x06],
ToolType::RappysBeak => [0x03, 0x18, 0x07],
ToolType::Yahoosengine => [0x03, 0x18, 0x08],
ToolType::DPhotonCore => [0x03, 0x18, 0x09],
ToolType::LibertaKit => [0x03, 0x18, 0x0A],
ToolType::CellofMag0503 => [0x03, 0x18, 0x0B],
ToolType::CellofMag0504 => [0x03, 0x18, 0x0C],
ToolType::CellofMag0505 => [0x03, 0x18, 0x0D],
ToolType::CellofMag0506 => [0x03, 0x18, 0x0E],
ToolType::CellofMag0507 => [0x03, 0x18, 0x0F],
ToolType::TeamPoints500 => [0x03, 0x19, 0x00],
ToolType::TeamPoints1000 => [0x03, 0x19, 0x01],
ToolType::TeamPoints5000 => [0x03, 0x19, 0x02],
ToolType::TeamPoints10000 => [0x03, 0x19, 0x03],
_ => panic!()
}
}
}
#[derive(Clone, Debug, PartialEq)]
pub struct Tool {
pub tool: ToolType,
}
impl Tool {
pub fn as_individual_bytes(&self) -> [u8; 16] {
let mut result = [0; 16];
result[0..3].copy_from_slice(&self.tool.value());
result
}
pub fn as_stacked_bytes(&self, len: usize) -> [u8; 16] {
let mut result = [0; 16];
result[0..3].copy_from_slice(&self.tool.value());
result[5] = len as u8;
result
}
}