diff --git a/src/entity/item/armor.rs b/src/entity/item/armor.rs index 7222a3e..8f2e658 100644 --- a/src/entity/item/armor.rs +++ b/src/entity/item/armor.rs @@ -1,4 +1,3 @@ -use std::convert::{TryFrom, Into}; use serde::{Serialize, Deserialize}; #[derive(Debug, Copy, Clone, PartialEq, Serialize, Deserialize, enum_utils::FromStr, derive_more::Display)] diff --git a/src/entity/item/shield.rs b/src/entity/item/shield.rs index c170861..2357fce 100644 --- a/src/entity/item/shield.rs +++ b/src/entity/item/shield.rs @@ -1,4 +1,3 @@ -use std::convert::{TryFrom, Into}; use serde::{Serialize, Deserialize}; #[derive(Debug, Copy, Clone, PartialEq, Serialize, Deserialize, enum_utils::FromStr, derive_more::Display)] diff --git a/src/entity/item/unit.rs b/src/entity/item/unit.rs index 8a55018..ae080ab 100644 --- a/src/entity/item/unit.rs +++ b/src/entity/item/unit.rs @@ -1,16 +1,157 @@ -use std::convert::{TryFrom, Into}; use serde::{Serialize, Deserialize}; #[derive(Debug, Copy, Clone, PartialEq, Serialize, Deserialize, enum_utils::FromStr, derive_more::Display)] pub enum UnitType { - None + KnightPower, + GeneralPower, + OgrePower, + GodPower, + PriestMind, + GeneralMind, + AngelMind, + GodMind, + MarksmanArm, + GeneralArm, + ElfArm, + GodArm, + ThiefLegs, + GeneralLegs, + ElfLegs, + GodLegs, + DiggerHP, + GeneralHP, + DragonHP, + GodHP, + MagicianTP, + GeneralTP, + AngelTP, + GodTP, + WarriorBody, + GeneralBody, + MetalBody, + GodBody, + AngelLuck, + GodLuck, + MasterAbility, + HeroAbility, + GodAbility, + ResistFire, + ResistFlame, + ResistBurning, + ResistCold, + ResistFreeze, + ResistBlizzard, + ResistShock, + ResistThunder, + ResistStorm, + ResistLight, + ResistSaint, + ResistHoly, + ResistDark, + ResistEvil, + ResistDevil, + AllResist, + SuperResist, + PerfectResist, + HPRestorate, + HPGenerate, + HPRevival, + TPRestorate, + TPGenerate, + TPRevival, + PBAmplifier, + PBGenerate, + PBCreate, + WizardTechnique, + DevilTechnique, + GodTechnique, + GeneralBattle, + DevilBattle, + GodBattle, + CurePoison, + CureParalysis, + CureSlow, + CureConfuse, + CureFreeze, + CureShock, } impl UnitType { pub fn value(&self) -> [u8; 3] { match self { - UnitType::None => [0; 3] + UnitType::KnightPower => [0x01, 0x03, 0x00], + UnitType::GeneralPower => [0x01, 0x03, 0x01], + UnitType::OgrePower => [0x01, 0x03, 0x02], + UnitType::GodPower => [0x01, 0x03, 0x03], + UnitType::PriestMind => [0x01, 0x03, 0x04], + UnitType::GeneralMind => [0x01, 0x03, 0x05], + UnitType::AngelMind => [0x01, 0x03, 0x06], + UnitType::GodMind => [0x01, 0x03, 0x07], + UnitType::MarksmanArm => [0x01, 0x03, 0x08], + UnitType::GeneralArm => [0x01, 0x03, 0x09], + UnitType::ElfArm => [0x01, 0x03, 0x0A], + UnitType::GodArm => [0x01, 0x03, 0x0B], + UnitType::ThiefLegs => [0x01, 0x03, 0x0C], + UnitType::GeneralLegs => [0x01, 0x03, 0x0D], + UnitType::ElfLegs => [0x01, 0x03, 0x0E], + UnitType::GodLegs => [0x01, 0x03, 0x0F], + UnitType::DiggerHP => [0x01, 0x03, 0x10], + UnitType::GeneralHP => [0x01, 0x03, 0x11], + UnitType::DragonHP => [0x01, 0x03, 0x12], + UnitType::GodHP => [0x01, 0x03, 0x13], + UnitType::MagicianTP => [0x01, 0x03, 0x14], + UnitType::GeneralTP => [0x01, 0x03, 0x15], + UnitType::AngelTP => [0x01, 0x03, 0x16], + UnitType::GodTP => [0x01, 0x03, 0x17], + UnitType::WarriorBody => [0x01, 0x03, 0x18], + UnitType::GeneralBody => [0x01, 0x03, 0x19], + UnitType::MetalBody => [0x01, 0x03, 0x1A], + UnitType::GodBody => [0x01, 0x03, 0x1B], + UnitType::AngelLuck => [0x01, 0x03, 0x1C], + UnitType::GodLuck => [0x01, 0x03, 0x1D], + UnitType::MasterAbility => [0x01, 0x03, 0x1E], + UnitType::HeroAbility => [0x01, 0x03, 0x1F], + UnitType::GodAbility => [0x01, 0x03, 0x20], + UnitType::ResistFire => [0x01, 0x03, 0x21], + UnitType::ResistFlame => [0x01, 0x03, 0x22], + UnitType::ResistBurning => [0x01, 0x03, 0x23], + UnitType::ResistCold => [0x01, 0x03, 0x24], + UnitType::ResistFreeze => [0x01, 0x03, 0x25], + UnitType::ResistBlizzard => [0x01, 0x03, 0x26], + UnitType::ResistShock => [0x01, 0x03, 0x27], + UnitType::ResistThunder => [0x01, 0x03, 0x28], + UnitType::ResistStorm => [0x01, 0x03, 0x29], + UnitType::ResistLight => [0x01, 0x03, 0x2A], + UnitType::ResistSaint => [0x01, 0x03, 0x2B], + UnitType::ResistHoly => [0x01, 0x03, 0x2C], + UnitType::ResistDark => [0x01, 0x03, 0x2D], + UnitType::ResistEvil => [0x01, 0x03, 0x2E], + UnitType::ResistDevil => [0x01, 0x03, 0x2F], + UnitType::AllResist => [0x01, 0x03, 0x30], + UnitType::SuperResist => [0x01, 0x03, 0x31], + UnitType::PerfectResist => [0x01, 0x03, 0x32], + UnitType::HPRestorate => [0x01, 0x03, 0x33], + UnitType::HPGenerate => [0x01, 0x03, 0x34], + UnitType::HPRevival => [0x01, 0x03, 0x35], + UnitType::TPRestorate => [0x01, 0x03, 0x36], + UnitType::TPGenerate => [0x01, 0x03, 0x37], + UnitType::TPRevival => [0x01, 0x03, 0x38], + UnitType::PBAmplifier => [0x01, 0x03, 0x39], + UnitType::PBGenerate => [0x01, 0x03, 0x3A], + UnitType::PBCreate => [0x01, 0x03, 0x3B], + UnitType::WizardTechnique => [0x01, 0x03, 0x3C], + UnitType::DevilTechnique => [0x01, 0x03, 0x3D], + UnitType::GodTechnique => [0x01, 0x03, 0x3E], + UnitType::GeneralBattle => [0x01, 0x03, 0x3F], + UnitType::DevilBattle => [0x01, 0x03, 0x40], + UnitType::GodBattle => [0x01, 0x03, 0x41], + UnitType::CurePoison => [0x01, 0x03, 0x42], + UnitType::CureParalysis => [0x01, 0x03, 0x43], + UnitType::CureSlow => [0x01, 0x03, 0x44], + UnitType::CureConfuse => [0x01, 0x03, 0x45], + UnitType::CureFreeze => [0x01, 0x03, 0x46], + UnitType::CureShock => [0x01, 0x03, 0x47], } } } @@ -26,7 +167,7 @@ pub enum UnitModifier { #[derive(Debug, Copy, Clone, PartialEq)] pub struct Unit { pub unit: UnitType, - pub modifier: UnitModifier, + pub modifier: Option, } @@ -35,21 +176,23 @@ impl Unit { let mut result = [0; 16]; result[0..3].copy_from_slice(&self.unit.value()); - match self.modifier { - UnitModifier::PlusPlus => { - result[7] = 3; - }, - UnitModifier::Plus => { - result[7] = 1; - }, - UnitModifier::Minus => { - result[7] = 0xFF; - result[8] = 0xFF; - }, - UnitModifier::MinusMinus => { - result[7] = 0xFE; - result[8] = 0xFF; - }, + if let Some(modifier) = self.modifier { + match modifier { + UnitModifier::PlusPlus => { + result[7] = 3; + }, + UnitModifier::Plus => { + result[7] = 1; + }, + UnitModifier::Minus => { + result[7] = 0xFF; + result[8] = 0xFF; + }, + UnitModifier::MinusMinus => { + result[7] = 0xFE; + result[8] = 0xFF; + }, + } } result diff --git a/src/entity/item/weapon.rs b/src/entity/item/weapon.rs index 3d11e6d..5f3546e 100644 --- a/src/entity/item/weapon.rs +++ b/src/entity/item/weapon.rs @@ -1,4 +1,3 @@ -use std::convert::{TryFrom, Into}; use serde::{Serialize, Deserialize};