// TOOD: `pub(super) for most of these?` use rand::Rng; // TODO: don't use * //use crate::map::*; use crate::area::MapArea; #[derive(Debug, PartialEq, Eq)] pub enum MapVariantMode { Online, Offline, } #[derive(Debug)] pub struct MapVariant { pub map: MapArea, mode: MapVariantMode, major: u8, minor: u8, } impl MapVariant { pub fn new(map: MapArea, mode: MapVariantMode) -> MapVariant { if mode == MapVariantMode::Online { let major = match map { MapArea::Pioneer2Ep1 => 0, MapArea::Forest1 | MapArea::Forest2 => 0, MapArea::Caves1 | MapArea::Caves2 | MapArea::Caves3 => rand::thread_rng().gen_range(0, 3), MapArea::Mines1 | MapArea::Mines2 => rand::thread_rng().gen_range(0, 3), MapArea::Ruins1 | MapArea::Ruins2 | MapArea::Ruins3 => rand::thread_rng().gen_range(0, 3), MapArea::Dragon | MapArea::DeRolLe | MapArea::VolOpt | MapArea::DarkFalz => 0, MapArea::Pioneer2Ep2 => 0, MapArea::VrTempleAlpha | MapArea::VrTempleBeta => rand::thread_rng().gen_range(0, 2), MapArea::VrSpaceshipAlpha | MapArea::VrSpaceshipBeta => rand::thread_rng().gen_range(0, 2), MapArea::Cca => 0, MapArea::JungleAreaNorth | MapArea::JungleAreaEast => 0, MapArea::Mountain => rand::thread_rng().gen_range(0, 2), MapArea::Seaside | MapArea::SeasideNight=> 0, MapArea::SeabedUpper | MapArea::SeabedLower => rand::thread_rng().gen_range(0, 2), MapArea::BarbaRay | MapArea::GolDragon | MapArea::GalGryphon | MapArea::OlgaFlow => 0, MapArea::Tower => 0, MapArea::Pioneer2Ep4 => 0, MapArea::CraterEast | MapArea::CraterWest | MapArea::CraterSouth | MapArea::CraterNorth | MapArea::CraterInterior => 0, MapArea::SubDesert1 | MapArea::SubDesert3 => rand::thread_rng().gen_range(0, 2), MapArea::SubDesert2 => 0, MapArea::SaintMillion => 0, }; let minor = match map { MapArea::Pioneer2Ep1 => 0, MapArea::Forest1 | MapArea::Forest2 => rand::thread_rng().gen_range(0, 5), MapArea::Caves1 | MapArea::Caves2 | MapArea::Caves3 => rand::thread_rng().gen_range(0, 2), MapArea::Mines1 | MapArea::Mines2 => rand::thread_rng().gen_range(0, 2), MapArea::Ruins1 | MapArea::Ruins2 | MapArea::Ruins3 => rand::thread_rng().gen_range(0, 2), MapArea::Dragon | MapArea::DeRolLe | MapArea::VolOpt | MapArea::DarkFalz => 0, MapArea::Pioneer2Ep2 => 0, MapArea::VrTempleAlpha | MapArea::VrTempleBeta => 0, MapArea::VrSpaceshipAlpha | MapArea::VrSpaceshipBeta => 0, MapArea::Cca => rand::thread_rng().gen_range(0, 3), MapArea::JungleAreaNorth | MapArea::JungleAreaEast => rand::thread_rng().gen_range(0, 3), MapArea::Mountain => rand::thread_rng().gen_range(0, 2), MapArea::Seaside | MapArea::SeasideNight => rand::thread_rng().gen_range(0, 3), MapArea::SeabedUpper | MapArea::SeabedLower => rand::thread_rng().gen_range(0, 2), MapArea::BarbaRay | MapArea::GolDragon | MapArea::GalGryphon | MapArea::OlgaFlow => 0, MapArea::Tower => 0, MapArea::Pioneer2Ep4 => 0, MapArea::CraterEast | MapArea::CraterWest | MapArea::CraterSouth | MapArea::CraterNorth | MapArea::CraterInterior => rand::thread_rng().gen_range(0, 3), MapArea::SubDesert1 | MapArea::SubDesert3 => 0, MapArea::SubDesert2 => rand::thread_rng().gen_range(0, 2), MapArea::SaintMillion => 0, }; MapVariant { map, mode, major, minor, } } else { let major = match map { MapArea::Pioneer2Ep1 => 0, MapArea::Forest1 | MapArea::Forest2 => 0, MapArea::Caves1 | MapArea::Caves2 | MapArea::Caves3 => rand::thread_rng().gen_range(0, 3), MapArea::Mines1 | MapArea::Mines2 => rand::thread_rng().gen_range(0, 3), MapArea::Ruins1 | MapArea::Ruins2 | MapArea::Ruins3 => rand::thread_rng().gen_range(0, 3), MapArea::Dragon | MapArea::DeRolLe | MapArea::VolOpt | MapArea::DarkFalz => 0, MapArea::Pioneer2Ep2 => 0, MapArea::VrTempleAlpha | MapArea::VrTempleBeta => rand::thread_rng().gen_range(0, 2), MapArea::VrSpaceshipAlpha | MapArea::VrSpaceshipBeta => rand::thread_rng().gen_range(0, 2), MapArea::Cca => 0, MapArea::JungleAreaNorth | MapArea::JungleAreaEast => 0, MapArea::Mountain => rand::thread_rng().gen_range(0, 2), MapArea::Seaside | MapArea::SeasideNight => 0, MapArea::SeabedUpper | MapArea::SeabedLower => rand::thread_rng().gen_range(0, 2), MapArea::BarbaRay | MapArea::GolDragon | MapArea::GalGryphon | MapArea::OlgaFlow => 0, MapArea::Tower => 0, MapArea::Pioneer2Ep4 => 0, MapArea::CraterEast | MapArea::CraterWest | MapArea::CraterSouth | MapArea::CraterNorth | MapArea::CraterInterior => 0, MapArea::SubDesert1 | MapArea::SubDesert3 => rand::thread_rng().gen_range(0, 2), MapArea::SubDesert2 => 0, MapArea::SaintMillion => 0, }; let minor = match map { MapArea::Pioneer2Ep1 => 0, MapArea::Forest1 | MapArea::Forest2 => rand::thread_rng().gen_range(0, 3), MapArea::Caves1 | MapArea::Caves2 | MapArea::Caves3 => 0, MapArea::Mines1 | MapArea::Mines2 => rand::thread_rng().gen_range(0, 2), MapArea::Ruins1 | MapArea::Ruins2 | MapArea::Ruins3 => rand::thread_rng().gen_range(0, 2), MapArea::Dragon | MapArea::DeRolLe | MapArea::VolOpt | MapArea::DarkFalz => 0, MapArea::Pioneer2Ep2 => 0, MapArea::VrTempleAlpha | MapArea::VrTempleBeta => 0, MapArea::VrSpaceshipAlpha | MapArea::VrSpaceshipBeta => 0, MapArea::Cca => rand::thread_rng().gen_range(0, 3), MapArea::JungleAreaNorth | MapArea::JungleAreaEast => rand::thread_rng().gen_range(0, 3), MapArea::Mountain => rand::thread_rng().gen_range(0, 2), MapArea::Seaside | MapArea::SeasideNight => rand::thread_rng().gen_range(0, 3), MapArea::SeabedUpper | MapArea::SeabedLower => 0, MapArea::BarbaRay | MapArea::GolDragon | MapArea::GalGryphon | MapArea::OlgaFlow => 0, MapArea::Tower => 0, MapArea::Pioneer2Ep4 => 0, MapArea::CraterEast | MapArea::CraterWest | MapArea::CraterSouth | MapArea::CraterNorth | MapArea::CraterInterior => rand::thread_rng().gen_range(0, 3), MapArea::SubDesert1 | MapArea::SubDesert3 => 0, MapArea::SubDesert2 => rand::thread_rng().gen_range(0, 2), MapArea::SaintMillion => 0, }; MapVariant { map, mode, major, minor, } } } // TODO: rename to npc_file pub fn dat_file(&self) -> String { if self.mode == MapVariantMode::Online { match self.map { MapArea::Pioneer2Ep1 => "data/maps/map_city00_00e.dat".into(), MapArea::Forest1 => format!("data/maps/map_forest01_0{}e.dat", self.minor), MapArea::Forest2 => format!("data/maps/map_forest02_0{}e.dat", self.minor), MapArea::Caves1 => format!("data/maps/map_cave01_0{}_0{}e.dat", self.major, self.minor), MapArea::Caves2 => format!("data/maps/map_cave02_0{}_0{}e.dat", self.major, self.minor), MapArea::Caves3 => format!("data/maps/map_cave03_0{}_0{}e.dat", self.major, self.minor), MapArea::Mines1 => format!("data/maps/map_machine01_0{}_0{}e.dat", self.major, self.minor), MapArea::Mines2 => format!("data/maps/map_machine02_0{}_0{}e.dat", self.major, self.minor), MapArea::Ruins1 => format!("data/maps/map_ancient01_0{}_0{}e.dat", self.major, self.minor), MapArea::Ruins2 => format!("data/maps/map_ancient02_0{}_0{}e.dat", self.major, self.minor), MapArea::Ruins3 => format!("data/maps/map_ancient03_0{}_0{}e.dat", self.major, self.minor), MapArea::Dragon => "data/maps/map_boss01e.dat".into(), MapArea::DeRolLe => "data/maps/map_boss02e.dat".into(), MapArea::VolOpt => "data/maps/map_boss03e.dat".into(), MapArea::DarkFalz => "data/maps/map_boss04e.dat".into(), MapArea::Pioneer2Ep2 => "data/maps/map_labo00_00e.dat".into(), MapArea::VrTempleAlpha => format!("data/maps/map_ruins01_0{}_0{}e.dat", self.major, self.minor), MapArea::VrTempleBeta => format!("data/maps/map_ruins02_0{}_0{}e.dat", self.major, self.minor), MapArea::VrSpaceshipAlpha => format!("data/maps/map_space01_0{}_0{}e.dat", self.major, self.minor), MapArea::VrSpaceshipBeta => format!("data/maps/map_space02_0{}_0{}e.dat", self.major, self.minor), MapArea::Cca => format!("data/maps/map_jungle01_0{}e.dat", self.minor), MapArea::JungleAreaNorth => format!("data/maps/map_jungle02_0{}e.dat", self.minor), MapArea::JungleAreaEast => format!("data/maps/map_jungle03_0{}e.dat", self.minor), MapArea::Mountain => format!("data/maps/map_jungle04_0{}_0{}e.dat", self.major, self.minor), MapArea::Seaside => format!("data/maps/map_jungle05_0{}e.dat", self.minor), MapArea::SeabedUpper => format!("data/maps/map_seabed01_0{}_0{}e.dat", self.major, self.minor), MapArea::SeabedLower => format!("data/maps/map_seabed02_0{}_0{}e.dat", self.major, self.minor), MapArea::GalGryphon => "data/maps/map_boss05e.dat".into(), MapArea::OlgaFlow => "data/maps/map_boss06e.dat".into(), MapArea::BarbaRay => "data/maps/map_boss07e.dat".into(), MapArea::GolDragon => "data/maps/map_boss08e.dat".into(), MapArea::Pioneer2Ep4 => "data/maps/map_city02_00_00e.dat".into(), MapArea::CraterEast => format!("data/maps/map_wilds01_00_0{}e.dat", self.minor), MapArea::CraterWest => format!("data/maps/map_wilds01_01_0{}e.dat", self.minor), MapArea::CraterSouth => format!("data/maps/map_wilds01_02_0{}e.dat", self.minor), MapArea::CraterNorth => format!("data/maps/map_wilds01_03_0{}e.dat", self.minor), MapArea::CraterInterior => format!("data/maps/map_crater01_00_0{}e.dat", self.minor), MapArea::SubDesert1 => format!("data/maps/map_desert01_0{}_0{}e.dat", self.major, self.minor), MapArea::SubDesert2 => format!("data/maps/map_desert02_0{}_0{}e.dat", self.major, self.minor), MapArea::SubDesert3 => format!("data/maps/map_desert03_0{}_0{}e.dat", self.major, self.minor), MapArea::SaintMillion => "data/maps/map_boss09_00_00e.dat".into(), _ => unreachable!(), } } else { // Offline match self.map { MapArea::Pioneer2Ep1 => "data/maps/map_city00_00e_s.dat".into(), MapArea::Forest1 => format!("data/maps/map_forest01_0{}_offe.dat", self.minor*2), MapArea::Forest2 => { match self.minor { 0 => "data/maps/map_forest02_00_offe.dat".into(), 1 => "data/maps/map_forest02_03_offe.dat".into(), 2 => "data/maps/map_forest02_04_offe.dat".into(), _ => unreachable!() }}, MapArea::Caves1 => format!("data/maps/map_cave01_0{}_0{}_offe.dat", self.major, self.minor), MapArea::Caves2 => format!("data/maps/map_cave02_0{}_0{}_offe.dat", self.major, self.minor), MapArea::Caves3 => format!("data/maps/map_cave03_0{}_0{}_offe.dat", self.major, self.minor), MapArea::Mines1 => format!("data/maps/map_machine01_0{}_0{}e.dat", self.major, self.minor), MapArea::Mines2 => format!("data/maps/map_machine02_0{}_0{}e.dat", self.major, self.minor), MapArea::Ruins1 => format!("data/maps/map_ancient01_0{}_0{}e.dat", self.major, self.minor), MapArea::Ruins2 => format!("data/maps/map_ancient02_0{}_0{}e.dat", self.major, self.minor), MapArea::Ruins3 => format!("data/maps/map_ancient03_0{}_0{}e.dat", self.major, self.minor), MapArea::Dragon => "data/maps/map_boss01e.dat".into(), MapArea::DeRolLe => "data/maps/map_boss02e.dat".into(), MapArea::VolOpt => "data/maps/map_boss03e.dat".into(), MapArea::DarkFalz => "data/maps/map_boss04e.dat".into(), MapArea::Pioneer2Ep2 => "data/maps/map_labo00_00e_s.dat".into(), MapArea::VrTempleAlpha => format!("data/maps/map_ruins01_0{}_0{}_offe.dat", self.major, self.minor), MapArea::VrTempleBeta => format!("data/maps/map_ruins02_0{}_0{}_offe.dat", self.major, self.minor), MapArea::VrSpaceshipAlpha => format!("data/maps/map_space01_0{}_0{}_offe.dat", self.major, self.minor), MapArea::VrSpaceshipBeta => format!("data/maps/map_space02_0{}_0{}_offe.dat", self.major, self.minor), MapArea::Cca => format!("data/maps/map_jungle01_0{}_offe.dat", self.minor), MapArea::JungleAreaNorth => format!("data/maps/map_jungle02_0{}_offe.dat", self.minor), MapArea::JungleAreaEast => format!("data/maps/map_jungle03_0{}_offe.dat", self.minor), MapArea::Mountain => format!("data/maps/map_jungle04_0{}_0{}_offe.dat", self.major, self.minor), MapArea::Seaside => format!("data/maps/map_jungle05_0{}_offe.dat", self.minor), MapArea::SeabedUpper => format!("data/maps/map_seabed01_0{}_0{}_offe.dat", self.major, self.minor), MapArea::SeabedLower => format!("data/maps/map_seabed02_0{}_0{}_offe.dat", self.major, self.minor), MapArea::GalGryphon => "data/maps/map_boss05e.dat".into(), MapArea::OlgaFlow => "data/maps/map_boss06e.dat".into(), MapArea::BarbaRay => "data/maps/map_boss07e.dat".into(), MapArea::GolDragon => "data/maps/map_boss08e.dat".into(), MapArea::Pioneer2Ep4 => "data/maps/map_city02_00_00e_s.dat".into(), MapArea::CraterEast => format!("data/maps/map_wilds01_00_0{}e.dat", self.minor), MapArea::CraterWest => format!("data/maps/map_wilds01_01_0{}e.dat", self.minor), MapArea::CraterSouth => format!("data/maps/map_wilds01_02_0{}e.dat", self.minor), MapArea::CraterNorth => format!("data/maps/map_wilds01_03_0{}e.dat", self.minor), MapArea::CraterInterior => format!("data/maps/map_crater01_00_0{}e.dat", self.minor), MapArea::SubDesert1 => format!("data/maps/map_desert01_0{}_0{}e.dat", self.major, self.minor), MapArea::SubDesert2 => format!("data/maps/map_desert02_0{}_0{}e.dat", self.major, self.minor), MapArea::SubDesert3 => format!("data/maps/map_desert03_0{}_0{}e.dat", self.major, self.minor), MapArea::SaintMillion => "data/maps/map_boss09_00_00e.dat".into(), _ => unreachable!(), } } } pub fn obj_file(&self) -> String { if self.mode == MapVariantMode::Online { match self.map { MapArea::Pioneer2Ep1 => "data/maps/map_city00_00o.dat".into(), MapArea::Forest1 => format!("data/maps/map_forest01_0{}o.dat", self.minor), MapArea::Forest2 => format!("data/maps/map_forest02_0{}o.dat", self.minor), MapArea::Caves1 => format!("data/maps/map_cave01_0{}_0{}o.dat", self.major, self.minor), MapArea::Caves2 => format!("data/maps/map_cave02_0{}_0{}o.dat", self.major, self.minor), MapArea::Caves3 => format!("data/maps/map_cave03_0{}_0{}o.dat", self.major, self.minor), MapArea::Mines1 => format!("data/maps/map_machine01_0{}_0{}o.dat", self.major, self.minor), MapArea::Mines2 => format!("data/maps/map_machine02_0{}_0{}o.dat", self.major, self.minor), MapArea::Ruins1 => format!("data/maps/map_ancient01_0{}_0{}o.dat", self.major, self.minor), MapArea::Ruins2 => format!("data/maps/map_ancient02_0{}_0{}o.dat", self.major, self.minor), MapArea::Ruins3 => format!("data/maps/map_ancient03_0{}_0{}o.dat", self.major, self.minor), MapArea::Dragon => "data/maps/map_boss01o.dat".into(), MapArea::DeRolLe => "data/maps/map_boss02o.dat".into(), MapArea::VolOpt => "data/maps/map_boss03o.dat".into(), MapArea::DarkFalz => "data/maps/map_boss04o.dat".into(), MapArea::Pioneer2Ep2 => "data/maps/map_labo00_00o.dat".into(), MapArea::VrTempleAlpha => format!("data/maps/map_ruins01_0{}_0{}o.dat", self.major, self.minor), MapArea::VrTempleBeta => format!("data/maps/map_ruins02_0{}_0{}o.dat", self.major, self.minor), MapArea::VrSpaceshipAlpha => format!("data/maps/map_space01_0{}_0{}o.dat", self.major, self.minor), MapArea::VrSpaceshipBeta => format!("data/maps/map_space02_0{}_0{}o.dat", self.major, self.minor), MapArea::Cca => format!("data/maps/map_jungle01_0{}o.dat", self.minor), MapArea::JungleAreaNorth => format!("data/maps/map_jungle02_0{}o.dat", self.minor), MapArea::JungleAreaEast => format!("data/maps/map_jungle03_0{}o.dat", self.minor), MapArea::Mountain => format!("data/maps/map_jungle04_0{}_0{}o.dat", self.major, self.minor), MapArea::Seaside => format!("data/maps/map_jungle05_0{}o.dat", self.minor), MapArea::SeabedUpper => format!("data/maps/map_seabed01_0{}_0{}o.dat", self.major, self.minor), MapArea::SeabedLower => format!("data/maps/map_seabed02_0{}_0{}o.dat", self.major, self.minor), MapArea::GalGryphon => "data/maps/map_boss05o.dat".into(), MapArea::OlgaFlow => "data/maps/map_boss06o.dat".into(), MapArea::BarbaRay => "data/maps/map_boss07o.dat".into(), MapArea::GolDragon => "data/maps/map_boss08o.dat".into(), MapArea::Pioneer2Ep4 => "data/maps/map_city02_00_00o.dat".into(), MapArea::CraterEast => format!("data/maps/map_wilds01_00_0{}o.dat", self.minor), MapArea::CraterWest => format!("data/maps/map_wilds01_01_0{}o.dat", self.minor), MapArea::CraterSouth => format!("data/maps/map_wilds01_02_0{}o.dat", self.minor), MapArea::CraterNorth => format!("data/maps/map_wilds01_03_0{}o.dat", self.minor), MapArea::CraterInterior => format!("data/maps/map_crater01_00_0{}o.dat", self.minor), MapArea::SubDesert1 => format!("data/maps/map_desert01_0{}_0{}o.dat", self.major, self.minor), MapArea::SubDesert2 => format!("data/maps/map_desert02_0{}_0{}o.dat", self.major, self.minor), MapArea::SubDesert3 => format!("data/maps/map_desert03_0{}_0{}o.dat", self.major, self.minor), MapArea::SaintMillion => "data/maps/map_boss09_00_00o.dat".into(), _ => unreachable!(), } } else { match self.map { MapArea::Pioneer2Ep1 => "data/maps/map_city00_00o_s.dat".into(), MapArea::Forest1 => format!("data/maps/map_forest01_0{}o.dat", self.minor*2), MapArea::Forest2 => { match self.minor { 0 => "data/maps/map_forest02_00o.dat".into(), 1 => "data/maps/map_forest02_03o.dat".into(), 2 => "data/maps/map_forest02_04o.dat".into(), _ => unreachable!() }}, MapArea::Caves1 => format!("data/maps/map_cave01_0{}_0{}o.dat", self.major, self.minor), MapArea::Caves2 => format!("data/maps/map_cave02_0{}_0{}o.dat", self.major, self.minor), MapArea::Caves3 => format!("data/maps/map_cave03_0{}_0{}o.dat", self.major, self.minor), MapArea::Mines1 => format!("data/maps/map_machine01_0{}_0{}o.dat", self.major, self.minor), MapArea::Mines2 => format!("data/maps/map_machine02_0{}_0{}o.dat", self.major, self.minor), MapArea::Ruins1 => format!("data/maps/map_ancient01_0{}_0{}o.dat", self.major, self.minor), MapArea::Ruins2 => format!("data/maps/map_ancient02_0{}_0{}o.dat", self.major, self.minor), MapArea::Ruins3 => format!("data/maps/map_ancient03_0{}_0{}o.dat", self.major, self.minor), MapArea::Dragon => "data/maps/map_boss01o.dat".into(), MapArea::DeRolLe => "data/maps/map_boss02o.dat".into(), MapArea::VolOpt => "data/maps/map_boss03o.dat".into(), MapArea::DarkFalz => "data/maps/map_boss04_offo.dat".into(), MapArea::Pioneer2Ep2 => "data/maps/map_labo00_00o_s.dat".into(), MapArea::VrTempleAlpha => format!("data/maps/map_ruins01_0{}_0{}_offo.dat", self.major, self.minor), MapArea::VrTempleBeta => format!("data/maps/map_ruins02_0{}_0{}_offo.dat", self.major, self.minor), MapArea::VrSpaceshipAlpha => format!("data/maps/map_space01_0{}_0{}_offo.dat", self.major, self.minor), MapArea::VrSpaceshipBeta => format!("data/maps/map_space02_0{}_0{}_offo.dat", self.major, self.minor), MapArea::Cca => format!("data/maps/map_jungle01_0{}_offo.dat", self.minor), MapArea::JungleAreaNorth => format!("data/maps/map_jungle02_0{}_offo.dat", self.minor), MapArea::JungleAreaEast => format!("data/maps/map_jungle03_0{}_offo.dat", self.minor), MapArea::Mountain => format!("data/maps/map_jungle04_0{}_0{}_offo.dat", self.major, self.minor), MapArea::Seaside => format!("data/maps/map_jungle05_0{}_offo.dat", self.minor), MapArea::SeabedUpper => format!("data/maps/map_seabed01_0{}_0{}_offo.dat", self.major, self.minor), MapArea::SeabedLower => format!("data/maps/map_seabed02_0{}_0{}_offo.dat", self.major, self.minor), MapArea::GalGryphon => "data/maps/map_boss05_offo.dat".into(), MapArea::OlgaFlow => "data/maps/map_boss06_offo.dat".into(), MapArea::BarbaRay => "data/maps/map_boss07_offo.dat".into(), MapArea::GolDragon => "data/maps/map_boss08_offo.dat".into(), MapArea::Pioneer2Ep4 => "data/maps/map_city02_00_00o_s.dat".into(), MapArea::CraterEast => format!("data/maps/map_wilds01_00_0{}o.dat", self.minor), MapArea::CraterWest => format!("data/maps/map_wilds01_01_0{}o.dat", self.minor), MapArea::CraterSouth => format!("data/maps/map_wilds01_02_0{}o.dat", self.minor), MapArea::CraterNorth => format!("data/maps/map_wilds01_03_0{}o.dat", self.minor), MapArea::CraterInterior => format!("data/maps/map_crater01_00_0{}o.dat", self.minor), MapArea::SubDesert1 => format!("data/maps/map_desert01_0{}_0{}o.dat", self.major, self.minor), MapArea::SubDesert2 => format!("data/maps/map_desert02_0{}_0{}o.dat", self.major, self.minor), MapArea::SubDesert3 => format!("data/maps/map_desert03_0{}_0{}o.dat", self.major, self.minor), MapArea::SaintMillion => "data/maps/map_boss09_00_00o.dat".into(), _ => unreachable!(), } } } pub fn pkt_header(&self) -> [u8; 2] { [self.major, self.minor] } }