init map code
This commit is contained in:
		
							parent
							
								
									7e617fe956
								
							
						
					
					
						commit
						c2a13536a8
					
				
							
								
								
									
										181
									
								
								src/ship/map.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										181
									
								
								src/ship/map.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,181 @@
 | 
				
			|||||||
 | 
					use log::warn;
 | 
				
			||||||
 | 
					use std::io::Cursor;
 | 
				
			||||||
 | 
					use std::convert::Into;
 | 
				
			||||||
 | 
					use std::path::PathBuf;
 | 
				
			||||||
 | 
					use std::io::{Read};
 | 
				
			||||||
 | 
					use std::fs::File;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use byteorder::{LittleEndian, ReadBytesExt};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use crate::ship::monster::MonsterType;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[derive(Debug, Copy, Clone)]
 | 
				
			||||||
 | 
					struct RawMapEnemy {
 | 
				
			||||||
 | 
					    id: u32,
 | 
				
			||||||
 | 
					    _unknown1: u16,
 | 
				
			||||||
 | 
					    children: u16,
 | 
				
			||||||
 | 
					    _unknown3: u16,
 | 
				
			||||||
 | 
					    _unknown4: u16,
 | 
				
			||||||
 | 
					    section: u16,
 | 
				
			||||||
 | 
					    wave_idd: u16,
 | 
				
			||||||
 | 
					    wave_id: u32,
 | 
				
			||||||
 | 
					    x: f32,
 | 
				
			||||||
 | 
					    y: f32,
 | 
				
			||||||
 | 
					    z: f32,
 | 
				
			||||||
 | 
					    xrot: u32,
 | 
				
			||||||
 | 
					    yrot: u32,
 | 
				
			||||||
 | 
					    zrot: u32,
 | 
				
			||||||
 | 
					    _field1: f32,
 | 
				
			||||||
 | 
					    _field2: f32,
 | 
				
			||||||
 | 
					    _field3: f32,
 | 
				
			||||||
 | 
					    _field4: f32,
 | 
				
			||||||
 | 
					    _field5: f32,
 | 
				
			||||||
 | 
					    skin: u32,
 | 
				
			||||||
 | 
					    _field6: u32
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl RawMapEnemy {
 | 
				
			||||||
 | 
					    fn from_byte_stream<R: Read>(cursor: &mut R) -> Result<RawMapEnemy, std::io::Error> {
 | 
				
			||||||
 | 
					        Ok(RawMapEnemy {
 | 
				
			||||||
 | 
					            id: cursor.read_u32::<LittleEndian>()?,
 | 
				
			||||||
 | 
					            _unknown1: cursor.read_u16::<LittleEndian>()?,
 | 
				
			||||||
 | 
					            children: cursor.read_u16::<LittleEndian>()?,
 | 
				
			||||||
 | 
					            _unknown3: cursor.read_u16::<LittleEndian>()?,
 | 
				
			||||||
 | 
					            _unknown4: cursor.read_u16::<LittleEndian>()?,
 | 
				
			||||||
 | 
					            section: cursor.read_u16::<LittleEndian>()?,
 | 
				
			||||||
 | 
					            wave_idd: cursor.read_u16::<LittleEndian>()?,
 | 
				
			||||||
 | 
					            wave_id: cursor.read_u32::<LittleEndian>()?,
 | 
				
			||||||
 | 
					            x: cursor.read_f32::<LittleEndian>()?,
 | 
				
			||||||
 | 
					            y: cursor.read_f32::<LittleEndian>()?,
 | 
				
			||||||
 | 
					            z: cursor.read_f32::<LittleEndian>()?,
 | 
				
			||||||
 | 
					            xrot: cursor.read_u32::<LittleEndian>()?,
 | 
				
			||||||
 | 
					            yrot: cursor.read_u32::<LittleEndian>()?,
 | 
				
			||||||
 | 
					            zrot: cursor.read_u32::<LittleEndian>()?,
 | 
				
			||||||
 | 
					            _field1: cursor.read_f32::<LittleEndian>()?,
 | 
				
			||||||
 | 
					            _field2: cursor.read_f32::<LittleEndian>()?,
 | 
				
			||||||
 | 
					            _field3: cursor.read_f32::<LittleEndian>()?,
 | 
				
			||||||
 | 
					            _field4: cursor.read_f32::<LittleEndian>()?,
 | 
				
			||||||
 | 
					            _field5: cursor.read_f32::<LittleEndian>()?,
 | 
				
			||||||
 | 
					            skin: cursor.read_u32::<LittleEndian>()?,
 | 
				
			||||||
 | 
					            _field6: cursor.read_u32::<LittleEndian>()?,
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct MapObjects {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct MapEnemies {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl MapEnemies {
 | 
				
			||||||
 | 
					    fn new(path: PathBuf) -> MapEnemies {
 | 
				
			||||||
 | 
					        MapEnemies {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fn read_next_enemy(&mut self) -> Option<MapEnemy> {
 | 
				
			||||||
 | 
					        None
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[derive(Debug, Copy, Clone)]
 | 
				
			||||||
 | 
					pub struct MapEnemy {
 | 
				
			||||||
 | 
					    pub monster: MonsterType,
 | 
				
			||||||
 | 
					    hp: u32,
 | 
				
			||||||
 | 
					    // other stats from bp.n
 | 
				
			||||||
 | 
					    dead: bool,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl MapEnemy {
 | 
				
			||||||
 | 
					    fn from_raw(enemy: RawMapEnemy /*, battleparam */) -> MapEnemy {
 | 
				
			||||||
 | 
					        //warn!("loading {} {} {}", enemy.id, enemy.skin, enemy.children);
 | 
				
			||||||
 | 
					        warn!("{:?}", enemy);
 | 
				
			||||||
 | 
					        let monster = match (enemy.id, enemy.skin) {
 | 
				
			||||||
 | 
					            (66, 0) => MonsterType::Monest,
 | 
				
			||||||
 | 
					            (68, 0) => MonsterType::Booma,
 | 
				
			||||||
 | 
					            (68, 1) => MonsterType::Gobooma,
 | 
				
			||||||
 | 
					            (68, 2) => MonsterType::Gigobooma,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            (99, 0) => MonsterType::EvilShark,
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            _ => MonsterType::AlRappy,
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        MapEnemy {
 | 
				
			||||||
 | 
					            monster: monster,
 | 
				
			||||||
 | 
					            hp: 0,
 | 
				
			||||||
 | 
					            dead: false,
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fn new(monster: MonsterType) -> MapEnemy {
 | 
				
			||||||
 | 
					        MapEnemy {
 | 
				
			||||||
 | 
					            monster: monster,
 | 
				
			||||||
 | 
					            hp: 0,
 | 
				
			||||||
 | 
					            dead: false,
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//impl From<RawMapEnemy> for MapEnemy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[derive(Debug)]
 | 
				
			||||||
 | 
					pub struct Maps {
 | 
				
			||||||
 | 
					    //map_indexes: 
 | 
				
			||||||
 | 
					    enemy_data: Vec<MapEnemy>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl Maps {
 | 
				
			||||||
 | 
					    pub fn new() -> Maps {
 | 
				
			||||||
 | 
					        let mut maps = Maps {
 | 
				
			||||||
 | 
					            enemy_data: Vec::new(),
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					        maps.add_map("data/maps/map_city00_00e.dat".into());
 | 
				
			||||||
 | 
					        maps.add_map("data/maps/map_forest01_00e.dat".into());
 | 
				
			||||||
 | 
					        maps.add_map("data/maps/map_cave01_00_00e.dat".into());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        warn!("len {}", maps.enemy_data.len());
 | 
				
			||||||
 | 
					        maps
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fn add_map(&mut self, path: PathBuf) {
 | 
				
			||||||
 | 
					        let mut cursor = File::open(path).unwrap();
 | 
				
			||||||
 | 
					        while let Ok(enemy) = RawMapEnemy::from_byte_stream(&mut cursor) {
 | 
				
			||||||
 | 
					            let new_enemy = MapEnemy::from_raw(enemy);
 | 
				
			||||||
 | 
					            match new_enemy.monster {
 | 
				
			||||||
 | 
					                MonsterType::Monest => {
 | 
				
			||||||
 | 
					                    self.enemy_data.push(new_enemy);
 | 
				
			||||||
 | 
					                    for _ in 0..30 {
 | 
				
			||||||
 | 
					                        self.enemy_data.push(MapEnemy::new(MonsterType::Mothmant));
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                _ => self.enemy_data.push(new_enemy)
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pub fn enemy_by_id(&self, id: usize) -> MapEnemy {
 | 
				
			||||||
 | 
					        self.enemy_data[id]
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -3,4 +3,5 @@ pub mod location;
 | 
				
			|||||||
pub mod character;
 | 
					pub mod character;
 | 
				
			||||||
pub mod room;
 | 
					pub mod room;
 | 
				
			||||||
pub mod items;
 | 
					pub mod items;
 | 
				
			||||||
 | 
					pub mod map;
 | 
				
			||||||
pub mod monster;
 | 
					pub mod monster;
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user