370 lines
24 KiB
Rust
370 lines
24 KiB
Rust
// TOOD: `pub(super) for most of these?`
|
|
|
|
use std::convert::Into;
|
|
use std::path::PathBuf;
|
|
use std::io::{Read};
|
|
use std::fs::File;
|
|
|
|
use byteorder::{LittleEndian, ReadBytesExt};
|
|
use rand::Rng;
|
|
use thiserror::Error;
|
|
|
|
use crate::ship::monster::MonsterType;
|
|
use crate::ship::room::{Episode, RoomMode};
|
|
|
|
// TODO: don't use *
|
|
use crate::ship::map::*;
|
|
|
|
#[derive(Debug, PartialEq)]
|
|
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: map,
|
|
mode: mode,
|
|
major: major,
|
|
minor: 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: map,
|
|
mode: mode,
|
|
major: major,
|
|
minor: 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 => format!("data/maps/map_forest02_00_offe.dat"),
|
|
1 => format!("data/maps/map_forest02_03_offe.dat"),
|
|
2 => format!("data/maps/map_forest02_04_offe.dat"),
|
|
_ => 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 => format!("data/maps/map_forest02_00o.dat"),
|
|
1 => format!("data/maps/map_forest02_03o.dat"),
|
|
2 => format!("data/maps/map_forest02_04o.dat"),
|
|
_ => 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]
|
|
}
|
|
}
|
|
|