This commit is contained in:
parent
f6bf34e193
commit
03906a7f0a
@ -291,13 +291,15 @@ pub struct MapAreaLookupBuilder {
|
|||||||
map_areas: HashMap<u16, MapArea>,
|
map_areas: HashMap<u16, MapArea>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl MapAreaLookupBuilder {
|
impl Default for MapAreaLookupBuilder {
|
||||||
pub fn new() -> MapAreaLookupBuilder {
|
fn default() -> MapAreaLookupBuilder {
|
||||||
MapAreaLookupBuilder {
|
MapAreaLookupBuilder {
|
||||||
map_areas: HashMap::new()
|
map_areas: HashMap::new()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl MapAreaLookupBuilder {
|
||||||
pub fn add(mut self, value: u16, map_area: MapArea) -> MapAreaLookupBuilder {
|
pub fn add(mut self, value: u16, map_area: MapArea) -> MapAreaLookupBuilder {
|
||||||
self.map_areas.insert(value, map_area);
|
self.map_areas.insert(value, map_area);
|
||||||
self
|
self
|
||||||
|
@ -253,7 +253,7 @@ impl MapEnemy {
|
|||||||
|
|
||||||
Ok(MapEnemy {
|
Ok(MapEnemy {
|
||||||
monster: monster,
|
monster: monster,
|
||||||
map_area: map_area.clone(),
|
map_area: *map_area,
|
||||||
hp: 0,
|
hp: 0,
|
||||||
dropped_item: false,
|
dropped_item: false,
|
||||||
gave_exp: false,
|
gave_exp: false,
|
||||||
|
@ -17,14 +17,14 @@ pub fn objects_from_stream(cursor: &mut impl Read, episode: &Episode, map_area:
|
|||||||
let mut object_data = Vec::new();
|
let mut object_data = Vec::new();
|
||||||
|
|
||||||
while let Ok(raw_object) = RawMapObject::from_byte_stream(cursor) {
|
while let Ok(raw_object) = RawMapObject::from_byte_stream(cursor) {
|
||||||
let object = MapObject::from_raw(raw_object.clone(), *episode, map_area);
|
let object = MapObject::from_raw(raw_object, *episode, map_area);
|
||||||
object_data.push(object.ok());
|
object_data.push(object.ok());
|
||||||
}
|
}
|
||||||
object_data
|
object_data
|
||||||
}
|
}
|
||||||
|
|
||||||
fn objects_from_map_data(path: PathBuf, episode: &Episode, map_area: &MapArea) -> Vec<Option<MapObject>> {
|
fn objects_from_map_data(path: PathBuf, episode: &Episode, map_area: &MapArea) -> Vec<Option<MapObject>> {
|
||||||
let mut cursor = File::open(path.clone()).unwrap();
|
let mut cursor = File::open(path).unwrap();
|
||||||
objects_from_stream(&mut cursor, episode, map_area)
|
objects_from_stream(&mut cursor, episode, map_area)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -32,8 +32,7 @@ fn parse_enemy(episode: &Episode, map_area: &MapArea, raw_enemy: RawMapEnemy) ->
|
|||||||
let enemy = MapEnemy::from_raw(raw_enemy, episode, map_area);
|
let enemy = MapEnemy::from_raw(raw_enemy, episode, map_area);
|
||||||
enemy
|
enemy
|
||||||
.map_or(vec![None], |monster| {
|
.map_or(vec![None], |monster| {
|
||||||
let mut monsters = Vec::new();
|
let mut monsters = vec![Some(monster)];
|
||||||
monsters.push(Some(monster));
|
|
||||||
|
|
||||||
match monster.monster {
|
match monster.monster {
|
||||||
MonsterType::Monest => {
|
MonsterType::Monest => {
|
||||||
@ -275,7 +274,7 @@ impl Maps {
|
|||||||
|
|
||||||
let maps = Maps {
|
let maps = Maps {
|
||||||
enemy_data: map_variants.iter().fold(Vec::new(), |mut enemy_data, map_variant| {
|
enemy_data: map_variants.iter().fold(Vec::new(), |mut enemy_data, map_variant| {
|
||||||
enemy_data.append(&mut enemy_data_from_map_data(&map_variant, &room_mode.episode()));
|
enemy_data.append(&mut enemy_data_from_map_data(map_variant, &room_mode.episode()));
|
||||||
enemy_data
|
enemy_data
|
||||||
}),
|
}),
|
||||||
object_data: map_variants.iter().map(|map_variant| {
|
object_data: map_variants.iter().map(|map_variant| {
|
||||||
|
@ -160,7 +160,7 @@ impl MapObject {
|
|||||||
|
|
||||||
Ok(MapObject {
|
Ok(MapObject {
|
||||||
object: object,
|
object: object,
|
||||||
map: map_area.clone(),
|
map: *map_area,
|
||||||
dropped_item: false,
|
dropped_item: false,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -198,9 +198,9 @@ impl MapVariant {
|
|||||||
MapArea::Forest1 => format!("data/maps/map_forest01_0{}_offe.dat", self.minor*2),
|
MapArea::Forest1 => format!("data/maps/map_forest01_0{}_offe.dat", self.minor*2),
|
||||||
MapArea::Forest2 => {
|
MapArea::Forest2 => {
|
||||||
match self.minor {
|
match self.minor {
|
||||||
0 => format!("data/maps/map_forest02_00_offe.dat"),
|
0 => "data/maps/map_forest02_00_offe.dat".into(),
|
||||||
1 => format!("data/maps/map_forest02_03_offe.dat"),
|
1 => "data/maps/map_forest02_03_offe.dat".into(),
|
||||||
2 => format!("data/maps/map_forest02_04_offe.dat"),
|
2 => "data/maps/map_forest02_04_offe.dat".into(),
|
||||||
_ => unreachable!()
|
_ => unreachable!()
|
||||||
}},
|
}},
|
||||||
MapArea::Caves1 => format!("data/maps/map_cave01_0{}_0{}_offe.dat", self.major, self.minor),
|
MapArea::Caves1 => format!("data/maps/map_cave01_0{}_0{}_offe.dat", self.major, self.minor),
|
||||||
@ -302,9 +302,9 @@ impl MapVariant {
|
|||||||
MapArea::Forest1 => format!("data/maps/map_forest01_0{}o.dat", self.minor*2),
|
MapArea::Forest1 => format!("data/maps/map_forest01_0{}o.dat", self.minor*2),
|
||||||
MapArea::Forest2 => {
|
MapArea::Forest2 => {
|
||||||
match self.minor {
|
match self.minor {
|
||||||
0 => format!("data/maps/map_forest02_00o.dat"),
|
0 => "data/maps/map_forest02_00o.dat".into(),
|
||||||
1 => format!("data/maps/map_forest02_03o.dat"),
|
1 => "data/maps/map_forest02_03o.dat".into(),
|
||||||
2 => format!("data/maps/map_forest02_04o.dat"),
|
2 => "data/maps/map_forest02_04o.dat".into(),
|
||||||
_ => unreachable!()
|
_ => unreachable!()
|
||||||
}},
|
}},
|
||||||
MapArea::Caves1 => format!("data/maps/map_cave01_0{}_0{}o.dat", self.major, self.minor),
|
MapArea::Caves1 => format!("data/maps/map_cave01_0{}_0{}o.dat", self.major, self.minor),
|
||||||
|
@ -107,7 +107,7 @@ fn quest_episode(bin: &[u8]) -> Option<Episode> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn map_area_mappings(bin: &[u8]) -> MapAreaLookup {
|
fn map_area_mappings(bin: &[u8]) -> MapAreaLookup {
|
||||||
let mut map_areas = MapAreaLookupBuilder::new();
|
let mut map_areas = MapAreaLookupBuilder::default();
|
||||||
for bytes in bin.windows(4) {
|
for bytes in bin.windows(4) {
|
||||||
// BB_Map_Designate
|
// BB_Map_Designate
|
||||||
if bytes[0] == 0xF9 && bytes[1] == 0x51 {
|
if bytes[0] == 0xF9 && bytes[1] == 0x51 {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user