fix esweap type + special numbering. add to other files and tests
This commit is contained in:
parent
48b162f221
commit
27a87ffe96
@ -1,7 +1,9 @@
|
|||||||
// TODO: actually use this
|
// TODO: actually use this
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum ESWeaponError {
|
pub enum ItemParseError {
|
||||||
|
InvalidESWeaponBytes,
|
||||||
InvalidESWeaponType,
|
InvalidESWeaponType,
|
||||||
|
InvalidESWeaponGrind,
|
||||||
InvalidESWeaponSpecial,
|
InvalidESWeaponSpecial,
|
||||||
InvalidESWeaponName,
|
InvalidESWeaponName,
|
||||||
}
|
}
|
||||||
@ -33,7 +35,7 @@ pub enum ESWeaponType {
|
|||||||
Harisen,
|
Harisen,
|
||||||
Katana,
|
Katana,
|
||||||
JCutter,
|
JCutter,
|
||||||
Swords,
|
Swords = 0x35,
|
||||||
Launcher,
|
Launcher,
|
||||||
Cards,
|
Cards,
|
||||||
Knuckle,
|
Knuckle,
|
||||||
@ -45,7 +47,7 @@ impl ESWeaponType {
|
|||||||
*self as u8
|
*self as u8
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn from_value(value: u8) -> Result<ESWeaponType, ESWeaponError> {
|
pub fn from_value(value: u8) -> Result<ESWeaponType, ItemParseError> {
|
||||||
match value {
|
match value {
|
||||||
0 => Ok(ESWeaponType::Saber),
|
0 => Ok(ESWeaponType::Saber),
|
||||||
1 => Ok(ESWeaponType::Sword),
|
1 => Ok(ESWeaponType::Sword),
|
||||||
@ -72,19 +74,55 @@ impl ESWeaponType {
|
|||||||
22 => Ok(ESWeaponType::Harisen),
|
22 => Ok(ESWeaponType::Harisen),
|
||||||
23 => Ok(ESWeaponType::Katana),
|
23 => Ok(ESWeaponType::Katana),
|
||||||
24 => Ok(ESWeaponType::JCutter),
|
24 => Ok(ESWeaponType::JCutter),
|
||||||
25 => Ok(ESWeaponType::Swords),
|
53 => Ok(ESWeaponType::Swords),
|
||||||
26 => Ok(ESWeaponType::Launcher),
|
54 => Ok(ESWeaponType::Launcher),
|
||||||
27 => Ok(ESWeaponType::Cards),
|
55 => Ok(ESWeaponType::Cards),
|
||||||
28 => Ok(ESWeaponType::Knuckle),
|
56 => Ok(ESWeaponType::Knuckle),
|
||||||
29 => Ok(ESWeaponType::Axe),
|
57 => Ok(ESWeaponType::Axe),
|
||||||
_ => Err(ESWeaponError::InvalidESWeaponType),
|
_ => Err(ItemParseError::InvalidESWeaponType),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn parse_type(data: [u8; 3]) -> Result<ESWeaponType, ItemParseError> {
|
||||||
|
match data {
|
||||||
|
[0x00, 0x70, 0x00] => Ok(ESWeaponType::Saber),
|
||||||
|
[0x00, 0x71, 0x00] => Ok(ESWeaponType::Sword),
|
||||||
|
[0x00, 0x72, 0x00] => Ok(ESWeaponType::Blade),
|
||||||
|
[0x00, 0x73, 0x00] => Ok(ESWeaponType::Partisan),
|
||||||
|
[0x00, 0x74, 0x00] => Ok(ESWeaponType::Slicer),
|
||||||
|
[0x00, 0x75, 0x00] => Ok(ESWeaponType::Gun),
|
||||||
|
[0x00, 0x76, 0x00] => Ok(ESWeaponType::Rifle),
|
||||||
|
[0x00, 0x77, 0x00] => Ok(ESWeaponType::Mechgun),
|
||||||
|
[0x00, 0x78, 0x00] => Ok(ESWeaponType::Shot),
|
||||||
|
[0x00, 0x79, 0x00] => Ok(ESWeaponType::Can),
|
||||||
|
[0x00, 0x7A, 0x00] => Ok(ESWeaponType::Rod),
|
||||||
|
[0x00, 0x7B, 0x00] => Ok(ESWeaponType::Wand),
|
||||||
|
[0x00, 0x7C, 0x00] => Ok(ESWeaponType::Twin),
|
||||||
|
[0x00, 0x7D, 0x00] => Ok(ESWeaponType::Claw),
|
||||||
|
[0x00, 0x7E, 0x00] => Ok(ESWeaponType::Bazooka),
|
||||||
|
[0x00, 0x7F, 0x00] => Ok(ESWeaponType::Needle),
|
||||||
|
[0x00, 0x80, 0x00] => Ok(ESWeaponType::Scythe),
|
||||||
|
[0x00, 0x81, 0x00] => Ok(ESWeaponType::Hammer),
|
||||||
|
[0x00, 0x82, 0x00] => Ok(ESWeaponType::Moon),
|
||||||
|
[0x00, 0x83, 0x00] => Ok(ESWeaponType::Psychogun),
|
||||||
|
[0x00, 0x84, 0x00] => Ok(ESWeaponType::Punch),
|
||||||
|
[0x00, 0x85, 0x00] => Ok(ESWeaponType::Windmill),
|
||||||
|
[0x00, 0x86, 0x00] => Ok(ESWeaponType::Harisen),
|
||||||
|
[0x00, 0x87, 0x00] => Ok(ESWeaponType::Katana),
|
||||||
|
[0x00, 0x88, 0x00] => Ok(ESWeaponType::JCutter),
|
||||||
|
[0x00, 0xA5, 0x00] => Ok(ESWeaponType::Swords),
|
||||||
|
[0x00, 0xA6, 0x00] => Ok(ESWeaponType::Launcher),
|
||||||
|
[0x00, 0xA7, 0x00] => Ok(ESWeaponType::Cards),
|
||||||
|
[0x00, 0xA8, 0x00] => Ok(ESWeaponType::Knuckle),
|
||||||
|
[0x00, 0xA9, 0x00] => Ok(ESWeaponType::Axe),
|
||||||
|
_ => Err(ItemParseError::InvalidESWeaponBytes),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Copy, Debug, PartialEq)]
|
#[derive(Clone, Copy, Debug, PartialEq)]
|
||||||
pub enum ESWeaponSpecial {
|
pub enum ESWeaponSpecial {
|
||||||
Jellen = 0,
|
Jellen = 1,
|
||||||
Zalure,
|
Zalure,
|
||||||
HPRegen,
|
HPRegen,
|
||||||
TPRegen,
|
TPRegen,
|
||||||
@ -107,25 +145,25 @@ impl ESWeaponSpecial {
|
|||||||
*self as u8
|
*self as u8
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn from_value(value: u8) -> Result<ESWeaponSpecial, ESWeaponError> {
|
pub fn from_value(value: u8) -> Result<ESWeaponSpecial, ItemParseError> {
|
||||||
match value{
|
match value{
|
||||||
0 => Ok(ESWeaponSpecial::Jellen),
|
1 => Ok(ESWeaponSpecial::Jellen),
|
||||||
1 => Ok(ESWeaponSpecial::Zalure),
|
2 => Ok(ESWeaponSpecial::Zalure),
|
||||||
2 => Ok(ESWeaponSpecial::HPRegen),
|
3 => Ok(ESWeaponSpecial::HPRegen),
|
||||||
3 => Ok(ESWeaponSpecial::TPRegen),
|
4 => Ok(ESWeaponSpecial::TPRegen),
|
||||||
4 => Ok(ESWeaponSpecial::Burning),
|
5 => Ok(ESWeaponSpecial::Burning),
|
||||||
5 => Ok(ESWeaponSpecial::Tempest),
|
6 => Ok(ESWeaponSpecial::Tempest),
|
||||||
6 => Ok(ESWeaponSpecial::Blizzard),
|
7 => Ok(ESWeaponSpecial::Blizzard),
|
||||||
7 => Ok(ESWeaponSpecial::Arrest),
|
8 => Ok(ESWeaponSpecial::Arrest),
|
||||||
8 => Ok(ESWeaponSpecial::Chaos),
|
9 => Ok(ESWeaponSpecial::Chaos),
|
||||||
9 => Ok(ESWeaponSpecial::Hell),
|
10 => Ok(ESWeaponSpecial::Hell),
|
||||||
10 => Ok(ESWeaponSpecial::Spirit),
|
11 => Ok(ESWeaponSpecial::Spirit),
|
||||||
11 => Ok(ESWeaponSpecial::Berserk),
|
12 => Ok(ESWeaponSpecial::Berserk),
|
||||||
12 => Ok(ESWeaponSpecial::Demons),
|
13 => Ok(ESWeaponSpecial::Demons),
|
||||||
13 => Ok(ESWeaponSpecial::Gush),
|
14 => Ok(ESWeaponSpecial::Gush),
|
||||||
14 => Ok(ESWeaponSpecial::Geist),
|
15 => Ok(ESWeaponSpecial::Geist),
|
||||||
15 => Ok(ESWeaponSpecial::Kings),
|
16 => Ok(ESWeaponSpecial::Kings),
|
||||||
_ => Err(ESWeaponError::InvalidESWeaponSpecial),
|
_ => Err(ItemParseError::InvalidESWeaponSpecial),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -223,3 +261,32 @@ impl ESWeapon {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
use super::*;
|
||||||
|
#[test]
|
||||||
|
fn test_create_esweapon_from_bytes() {
|
||||||
|
// JAKESERV BAZOOKA + 137 (Berserk)
|
||||||
|
let weapon_bytes = [0x00, 0x7E, 0x0C, 0x89, 0x00, 0x00, 0x81, 0x41, 0xAC, 0xB3, 0x96, 0x56, 0x00, 0x00, 0x00, 0x00];
|
||||||
|
|
||||||
|
let testweapon = ESWeapon::from_bytes(weapon_bytes);
|
||||||
|
assert_eq!(testweapon, ESWeapon {
|
||||||
|
esweapon: ESWeaponType::Bazooka,
|
||||||
|
special: Some(ESWeaponSpecial::Berserk),
|
||||||
|
grind: 137u8,
|
||||||
|
name: "JAKESERV".to_owned(),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_create_bytes_from_esweapon() {
|
||||||
|
let testweapon = ESWeapon {
|
||||||
|
esweapon: ESWeaponType::Wand,
|
||||||
|
special: Some(ESWeaponSpecial::Chaos),
|
||||||
|
grind: 72u8,
|
||||||
|
name: "PSYCHO".to_owned(),
|
||||||
|
};
|
||||||
|
let bytes = testweapon.as_bytes();
|
||||||
|
assert_eq!(bytes, [0x00, 0x7B, 0x09, 0x48, 0x00, 0x00, 0x82, 0x13, 0xE4, 0x68, 0xBC, 0x00, 0x00, 0x00, 0x00, 0x00]);
|
||||||
|
}
|
||||||
|
}
|
@ -123,7 +123,8 @@ impl ItemDetail {
|
|||||||
.or(shield::ShieldType::parse_type([data[0],data[1],data[2]]).map(|s| ItemType::Shield(s)))
|
.or(shield::ShieldType::parse_type([data[0],data[1],data[2]]).map(|s| ItemType::Shield(s)))
|
||||||
.or(unit::UnitType::parse_type([data[0],data[1],data[2]]).map(|u| ItemType::Unit(u)))
|
.or(unit::UnitType::parse_type([data[0],data[1],data[2]]).map(|u| ItemType::Unit(u)))
|
||||||
.or(mag::MagType::parse_type([data[0],data[1],data[2]]).map(|m| ItemType::Mag(m)))
|
.or(mag::MagType::parse_type([data[0],data[1],data[2]]).map(|m| ItemType::Mag(m)))
|
||||||
.or(tool::ToolType::parse_type([data[0],data[1],data[2]]).map(|t| ItemType::Tool(t))).ok()?;
|
.or(tool::ToolType::parse_type([data[0],data[1],data[2]]).map(|t| ItemType::Tool(t)))
|
||||||
|
.or(esweapon::ESWeaponType::parse_type([data[0],data[1],data[2]]).map(|e| ItemType::ESWeapon(e))).ok()?;
|
||||||
|
|
||||||
match item_type {
|
match item_type {
|
||||||
ItemType::Weapon(_w) => Some(ItemDropType::Weapon(weapon::Weapon::from_bytes(data).ok()?)),
|
ItemType::Weapon(_w) => Some(ItemDropType::Weapon(weapon::Weapon::from_bytes(data).ok()?)),
|
||||||
|
@ -126,6 +126,7 @@ impl BankItem {
|
|||||||
ItemDetail::Tool(t) => t.as_individual_bytes(),
|
ItemDetail::Tool(t) => t.as_individual_bytes(),
|
||||||
ItemDetail::TechniqueDisk(d) => d.as_bytes(),
|
ItemDetail::TechniqueDisk(d) => d.as_bytes(),
|
||||||
ItemDetail::Mag(m) => m.as_bytes(),
|
ItemDetail::Mag(m) => m.as_bytes(),
|
||||||
|
ItemDetail::ESWeapon(e) => e.as_bytes(),
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
BankItem::Stacked(item) => {
|
BankItem::Stacked(item) => {
|
||||||
|
@ -147,6 +147,7 @@ impl InventoryItem {
|
|||||||
ItemDetail::Tool(t) => t.as_individual_bytes(),
|
ItemDetail::Tool(t) => t.as_individual_bytes(),
|
||||||
ItemDetail::TechniqueDisk(d) => d.as_bytes(),
|
ItemDetail::TechniqueDisk(d) => d.as_bytes(),
|
||||||
ItemDetail::Mag(m) => m.as_bytes(),
|
ItemDetail::Mag(m) => m.as_bytes(),
|
||||||
|
ItemDetail::ESWeapon(e) => e.as_bytes(),
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
InventoryItem::Stacked(item) => {
|
InventoryItem::Stacked(item) => {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user