rare_monsters #60
@ -3,7 +3,7 @@
 | 
				
			|||||||
# 1/256 = 0.00390625
 | 
					# 1/256 = 0.00390625
 | 
				
			||||||
# 1/512 = 0.001953125
 | 
					# 1/512 = 0.001953125
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Hildebear = 1.0
 | 
					Hildebear = 0.1
 | 
				
			||||||
RagRappy = 0.1
 | 
					RagRappy = 0.2
 | 
				
			||||||
PoisonLily = 0.1
 | 
					PoisonLily = 0.3
 | 
				
			||||||
PofuillySlime = 0.1
 | 
					PofuillySlime = 0.4
 | 
				
			||||||
@ -107,9 +107,13 @@ impl RareMonsterAppearTable {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pub fn roll_appearance(&self, monster: &MonsterType) -> bool {
 | 
					    pub fn roll_appearance(&self, monster: &MonsterType) -> bool {
 | 
				
			||||||
        let mut rng = rand_chacha::ChaChaRng::seed_from_u64(self.seed as u64); // TODO: figure out how to seed with a u32
 | 
					        println!("rolling appearance for {:?} with seed {:?}", monster, self.seed);
 | 
				
			||||||
        println!("rolling for {:?} appearance", monster);
 | 
					        let mut rng = rand_chacha::ChaChaRng::from_entropy();
 | 
				
			||||||
        if rng.gen::<f32>() < *self.appear_rate.get(monster).unwrap_or(&0.0f32) {
 | 
					        let roll: f32 = rng.gen();
 | 
				
			||||||
 | 
					        let monster_rate = self.appear_rate.get(monster).unwrap_or(&0.0f32);
 | 
				
			||||||
 | 
					        println!("rolled {:?} and {:?} has appear rate {:?}", roll, monster, monster_rate);
 | 
				
			||||||
 | 
					        if roll < *monster_rate {
 | 
				
			||||||
 | 
					        // if rng.gen::<f32>() < *self.appear_rate.get(monster).unwrap_or(&0.0f32) {
 | 
				
			||||||
            println!("its a rare!");
 | 
					            println!("its a rare!");
 | 
				
			||||||
            true
 | 
					            true
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -349,42 +353,42 @@ impl MapEnemy {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // TODO: does `shiny` need to be set here?
 | 
					 | 
				
			||||||
    // TODO: distinguish between a `random` rare monster and a `set/guaranteed` rare monster? (does any acceptable quest even have this?)
 | 
					 | 
				
			||||||
    pub fn set_rare_appearance(self) -> MapEnemy {
 | 
					 | 
				
			||||||
        match self.monster {
 | 
					 | 
				
			||||||
            MonsterType::RagRappy | MonsterType::Hildebear |
 | 
					 | 
				
			||||||
            MonsterType::PoisonLily | MonsterType::PofuillySlime |
 | 
					 | 
				
			||||||
            MonsterType::SandRappyCrater | MonsterType::ZuCrater | MonsterType::Dorphon |
 | 
					 | 
				
			||||||
            MonsterType::SandRappyDesert | MonsterType::ZuDesert | MonsterType::MerissaA |
 | 
					 | 
				
			||||||
            MonsterType::SaintMillion | MonsterType::Shambertin => self.set_shiny(),
 | 
					 | 
				
			||||||
            _ => self,
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    // // TODO: does `shiny` need to be set here?
 | 
					    // // TODO: does `shiny` need to be set here?
 | 
				
			||||||
    // // TODO: distinguish between a `random` rare monster and a `set/guaranteed` rare monster? (does any acceptable quest even have this?)
 | 
					    // // TODO: distinguish between a `random` rare monster and a `set/guaranteed` rare monster? (does any acceptable quest even have this?)
 | 
				
			||||||
    // pub fn set_rare_appearance(self) -> MapEnemy {
 | 
					    // pub fn set_rare_appearance(self) -> MapEnemy {
 | 
				
			||||||
    //     match (self.monster, self.map_area.to_episode()) {
 | 
					    //     match self.monster {
 | 
				
			||||||
    //         (MonsterType::RagRappy, Episode::One) => {MapEnemy {monster: MonsterType::AlRappy, ..self}},
 | 
					    //         MonsterType::RagRappy | MonsterType::Hildebear |
 | 
				
			||||||
    //         (MonsterType::RagRappy, Episode::Two) => {MapEnemy {monster: MonsterType::EventRappy, ..self}},
 | 
					    //         MonsterType::PoisonLily | MonsterType::PofuillySlime |
 | 
				
			||||||
    //         (MonsterType::Hildebear, _) => {MapEnemy {monster: MonsterType::Hildeblue, ..self}},
 | 
					    //         MonsterType::SandRappyCrater | MonsterType::ZuCrater | MonsterType::Dorphon |
 | 
				
			||||||
    //         (MonsterType::PoisonLily, _) => {MapEnemy {monster: MonsterType::NarLily, ..self}},
 | 
					    //         MonsterType::SandRappyDesert | MonsterType::ZuDesert | MonsterType::MerissaA |
 | 
				
			||||||
    //         (MonsterType::PofuillySlime, _) => {MapEnemy {monster: MonsterType::PouillySlime, ..self}},
 | 
					    //         MonsterType::SaintMillion | MonsterType::Shambertin => self.set_shiny(),
 | 
				
			||||||
    //         (MonsterType::SandRappyCrater, _) => {MapEnemy {monster: MonsterType::DelRappyCrater, ..self}},
 | 
					    //         _ => self,
 | 
				
			||||||
    //         (MonsterType::ZuCrater, _) => {MapEnemy {monster: MonsterType::PazuzuCrater, ..self}},
 | 
					 | 
				
			||||||
    //         (MonsterType::Dorphon, _) => {MapEnemy {monster: MonsterType::DorphonEclair, ..self}},
 | 
					 | 
				
			||||||
    //         (MonsterType::SandRappyDesert, _) => {MapEnemy {monster: MonsterType::DelRappyDesert, ..self}},
 | 
					 | 
				
			||||||
    //         (MonsterType::ZuDesert, _) => {MapEnemy {monster: MonsterType::PazuzuDesert, ..self}},
 | 
					 | 
				
			||||||
    //         (MonsterType::MerissaA, _) => {MapEnemy {monster: MonsterType::MerissaAA, ..self}},
 | 
					 | 
				
			||||||
    //         (MonsterType::SaintMillion, _) => {MapEnemy {monster: MonsterType::Kondrieu, ..self}},
 | 
					 | 
				
			||||||
    //         (MonsterType::Shambertin, _) => {MapEnemy {monster: MonsterType::Kondrieu, ..self}},
 | 
					 | 
				
			||||||
    //         _ => {self},
 | 
					 | 
				
			||||||
    //     }
 | 
					    //     }
 | 
				
			||||||
    // }
 | 
					    // }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    // TODO: does `shiny` need to be set here?
 | 
				
			||||||
 | 
					    // TODO: distinguish between a `random` rare monster and a `set/guaranteed` rare monster? (does any acceptable quest even have this?)
 | 
				
			||||||
 | 
					    pub fn set_rare_appearance(self) -> MapEnemy {
 | 
				
			||||||
 | 
					        match (self.monster, self.map_area.to_episode()) {
 | 
				
			||||||
 | 
					            (MonsterType::RagRappy, Episode::One) => {MapEnemy {monster: MonsterType::AlRappy, shiny:true, ..self}},
 | 
				
			||||||
 | 
					            (MonsterType::RagRappy, Episode::Two) => {MapEnemy {monster: MonsterType::EventRappy, shiny:true, ..self}},
 | 
				
			||||||
 | 
					            (MonsterType::Hildebear, _) => {MapEnemy {monster: MonsterType::Hildeblue, shiny:true, ..self}},
 | 
				
			||||||
 | 
					            (MonsterType::PoisonLily, _) => {MapEnemy {monster: MonsterType::NarLily, shiny:true, ..self}},
 | 
				
			||||||
 | 
					            (MonsterType::PofuillySlime, _) => {MapEnemy {monster: MonsterType::PouillySlime, shiny:true, ..self}},
 | 
				
			||||||
 | 
					            (MonsterType::SandRappyCrater, _) => {MapEnemy {monster: MonsterType::DelRappyCrater, shiny:true, ..self}},
 | 
				
			||||||
 | 
					            (MonsterType::ZuCrater, _) => {MapEnemy {monster: MonsterType::PazuzuCrater, shiny:true, ..self}},
 | 
				
			||||||
 | 
					            (MonsterType::Dorphon, _) => {MapEnemy {monster: MonsterType::DorphonEclair, shiny:true, ..self}},
 | 
				
			||||||
 | 
					            (MonsterType::SandRappyDesert, _) => {MapEnemy {monster: MonsterType::DelRappyDesert, shiny:true, ..self}},
 | 
				
			||||||
 | 
					            (MonsterType::ZuDesert, _) => {MapEnemy {monster: MonsterType::PazuzuDesert, shiny:true, ..self}},
 | 
				
			||||||
 | 
					            (MonsterType::MerissaA, _) => {MapEnemy {monster: MonsterType::MerissaAA, shiny:true, ..self}},
 | 
				
			||||||
 | 
					            (MonsterType::SaintMillion, _) => {MapEnemy {monster: MonsterType::Kondrieu, shiny:true, ..self}},
 | 
				
			||||||
 | 
					            (MonsterType::Shambertin, _) => {MapEnemy {monster: MonsterType::Kondrieu, shiny:true, ..self}},
 | 
				
			||||||
 | 
					            _ => {self},
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    // in theory this should only be called on monsters we know can have rare types
 | 
					    // in theory this should only be called on monsters we know can have rare types
 | 
				
			||||||
    pub fn roll_appearance_for_quest(self, rare_monster_table: &RareMonsterAppearTable) -> MapEnemy {
 | 
					    pub fn roll_appearance_for_mission(self, rare_monster_table: &RareMonsterAppearTable) -> MapEnemy {
 | 
				
			||||||
        if rare_monster_table.roll_appearance(&self.monster) {
 | 
					        if rare_monster_table.roll_appearance(&self.monster) {
 | 
				
			||||||
            return self.set_rare_appearance()
 | 
					            return self.set_rare_appearance()
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
				
			|||||||
@ -439,8 +439,8 @@ impl Maps {
 | 
				
			|||||||
    pub fn roll_monster_appearance(&mut self, rare_monster_table: &RareMonsterAppearTable) {
 | 
					    pub fn roll_monster_appearance(&mut self, rare_monster_table: &RareMonsterAppearTable) {
 | 
				
			||||||
        self.enemy_data = self.enemy_data
 | 
					        self.enemy_data = self.enemy_data
 | 
				
			||||||
                            .iter()
 | 
					                            .iter()
 | 
				
			||||||
                            .map(|&x| if x.is_some() {
 | 
					                            .map(|&x| if x.is_some() && x.unwrap().has_rare_appearance() {
 | 
				
			||||||
                                Some(x.unwrap().roll_appearance_for_quest(&rare_monster_table))
 | 
					                                Some(x.unwrap().roll_appearance_for_mission(&rare_monster_table))
 | 
				
			||||||
                            } else {
 | 
					                            } else {
 | 
				
			||||||
                                x
 | 
					                                x
 | 
				
			||||||
                            })
 | 
					                            })
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user