diff --git a/CHANGELOG.md b/CHANGELOG.md index 51b1bd830a..8cb915b3c2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,12 +17,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Admin designated build areas ### Changed -- Diamonds are now much more than twice as expensive as twigs. - Admins can now grant normal players plots to place blocks within - +- Diamonds are now much more than twice as expensive as twigs. +- Permission to build is no longer tied to being an admin - Seperated character randomization buttons into appearance and name. - - Reworked mindflayer to have unique attacks ### Removed diff --git a/common/src/comp/body.rs b/common/src/comp/body.rs index 70e16c6c96..27aa3eae52 100644 --- a/common/src/comp/body.rs +++ b/common/src/comp/body.rs @@ -541,10 +541,10 @@ impl Body { /// due to AI or not using an actual weapon // TODO: Match on species pub fn combat_multiplier(&self) -> f32 { - if let Body::Object(_) | Body::Ship(_) = self { - 0.0 - } else { - 1.0 + match self { + Body::Object(_) | Body::Ship(_) => 0.0, + Body::BipedLarge(b) if matches!(b.species, biped_large::Species::Mindflayer) => 4.0, + _ => 1.0, } } diff --git a/world/src/site/dungeon/mod.rs b/world/src/site/dungeon/mod.rs index 044cccb745..23473ddeb8 100644 --- a/world/src/site/dungeon/mod.rs +++ b/world/src/site/dungeon/mod.rs @@ -1010,7 +1010,9 @@ impl Floor { )); 3 ], - 2 => vec![ + 2 => { + let mut entities = Vec::new(); + entities.resize_with(6, || { EntityInfo::at(tile_wcenter.map(|e| e as f32)) .with_body(comp::Body::QuadrupedLow( comp::quadruped_low::Body::random_with( @@ -1019,53 +1021,10 @@ impl Floor { ), )) .with_name("Hakulaq".to_string()) - .with_loot_drop(comp::Item::new_from_asset_expect(chosen)), - EntityInfo::at(tile_wcenter.map(|e| e as f32)) - .with_body(comp::Body::QuadrupedLow( - comp::quadruped_low::Body::random_with( - dynamic_rng, - &comp::quadruped_low::Species::Hakulaq, - ), - )) - .with_name("Hakulaq".to_string()) - .with_loot_drop(comp::Item::new_from_asset_expect(chosen)), - EntityInfo::at(tile_wcenter.map(|e| e as f32)) - .with_body(comp::Body::QuadrupedLow( - comp::quadruped_low::Body::random_with( - dynamic_rng, - &comp::quadruped_low::Species::Hakulaq, - ), - )) - .with_name("Hakulaq".to_string()) - .with_loot_drop(comp::Item::new_from_asset_expect(chosen)), - EntityInfo::at(tile_wcenter.map(|e| e as f32)) - .with_body(comp::Body::QuadrupedLow( - comp::quadruped_low::Body::random_with( - dynamic_rng, - &comp::quadruped_low::Species::Hakulaq, - ), - )) - .with_name("Hakulaq".to_string()) - .with_loot_drop(comp::Item::new_from_asset_expect(chosen)), - EntityInfo::at(tile_wcenter.map(|e| e as f32)) - .with_body(comp::Body::QuadrupedLow( - comp::quadruped_low::Body::random_with( - dynamic_rng, - &comp::quadruped_low::Species::Hakulaq, - ), - )) - .with_name("Hakulaq".to_string()) - .with_loot_drop(comp::Item::new_from_asset_expect(chosen)), - EntityInfo::at(tile_wcenter.map(|e| e as f32)) - .with_body(comp::Body::QuadrupedLow( - comp::quadruped_low::Body::random_with( - dynamic_rng, - &comp::quadruped_low::Species::Hakulaq, - ), - )) - .with_name("Hakulaq".to_string()) - .with_loot_drop(comp::Item::new_from_asset_expect(chosen)), - ], + .with_loot_drop(comp::Item::new_from_asset_expect(chosen)) + }); + entities + }, 3 => vec![ EntityInfo::at(tile_wcenter.map(|e| e as f32)) .with_body(comp::Body::Humanoid( @@ -1118,17 +1077,22 @@ impl Floor { .with_name("Dullahan Guard".to_string()) .with_loot_drop(comp::Item::new_from_asset_expect(chosen)), ], - 5 => vec![ + 5 => { + let mut entities = Vec::new(); + entities.resize_with(10, || { EntityInfo::at(tile_wcenter.map(|e| e as f32)) - .with_body(comp::Body::Golem( - comp::golem::Body::random_with( + .with_body(comp::Body::BipedSmall( + comp::biped_small::Body::random_with( dynamic_rng, - &comp::golem::Species::StoneGolem, + &comp::biped_small::Species::Husk, ), )) - .with_name("Stonework Defender".to_string()) - .with_loot_drop(comp::Item::new_from_asset_expect(chosen)), - ], + .with_name("Cultist Husk".to_string()) + .with_loot_drop(comp::Item::new_from_asset_expect(chosen)) + .with_loadout_config(loadout_builder::LoadoutConfig::Husk) + }); + entities + }, _ => { vec![EntityInfo::at(tile_wcenter.map(|e| e as f32)).with_body( comp::Body::QuadrupedSmall(