Merge branch 'qsto/bosses_loot_overhaul' into 'master'

Bosses loot overhaul

See merge request veloren/veloren!4072
This commit is contained in:
flo 2023-08-30 12:08:52 +00:00
commit 78b2443edc
28 changed files with 85 additions and 91 deletions

View File

@ -3,7 +3,7 @@
name: Name("Yeti"),
body: RandomWith("yeti"),
alignment: Alignment(Enemy),
loot: LootTable("common.loot_tables.dungeon.adlet.boss"),
loot: LootTable("common.loot_tables.dungeon.adlet.yeti"),
inventory: (
loadout: FromBody,
),

View File

@ -3,7 +3,7 @@
name: Name("Mindflayer"),
body: RandomWith("mindflayer"),
alignment: Alignment(Enemy),
loot: LootTable("common.loot_tables.dungeon.cultist.boss"),
loot: LootTable("common.loot_tables.dungeon.cultist.mindflayer"),
inventory: (
loadout: FromBody,
),

View File

@ -3,7 +3,7 @@
name: Name("Clay Golem"),
body: RandomWith("claygolem"),
alignment: Alignment(Enemy),
loot: LootTable("common.loot_tables.dungeon.haniwa.boss"),
loot: LootTable("common.loot_tables.dungeon.haniwa.claygolem"),
inventory: (
loadout: FromBody,
),

View File

@ -3,7 +3,7 @@
name: Automatic,
body: RandomWith("cyclops"),
alignment: Alignment(Enemy),
loot: LootTable("common.loot_tables.dungeon.myrmidon.miniboss"),
loot: LootTable("common.loot_tables.creature.biped_large.cyclops"),
inventory: (
loadout: FromBody,
),

View File

@ -3,7 +3,7 @@
name: Name("Minotaur"),
body: RandomWith("minotaur"),
alignment: Alignment(Enemy),
loot: LootTable("common.loot_tables.dungeon.myrmidon.boss"),
loot: LootTable("common.loot_tables.dungeon.myrmidon.minotaur"),
inventory: (
loadout: FromBody,
),

View File

@ -3,7 +3,7 @@
name: Name("Tidal Warrior"),
body: RandomWith("tidalwarrior"),
alignment: Alignment(Enemy),
loot: LootTable("common.loot_tables.dungeon.sahagin.boss"),
loot: LootTable("common.loot_tables.dungeon.sahagin.tidalwarrior"),
inventory: (
loadout: FromBody,
),

View File

@ -1,11 +1,6 @@
[
// Necklaces
(0.25, Item("common.items.armor.misc.neck.gem_of_resilience")),
(0.05, Item("common.items.armor.misc.neck.gold")),
// Materials
(4.0, LootTable("common.loot_tables.materials.underground")),
// Ring
(0.05, Item("common.items.armor.misc.ring.gold")),
// Lantern
(0.1, Item("common.items.lantern.geode_purp")),
// Weapons

View File

@ -1,9 +1,9 @@
[
(1, All([
(1.9, All([
Item("common.items.crafting_ing.animal_misc.grim_eyeball"),
MultiDrop(Item("common.items.mineral.ingot.iron"), 5, 10),
MultiDrop(Item("common.items.utility.coins"), 200, 500),
LootTable("common.loot_tables.dungeon.myrmidon.miniboss"),
MultiDrop(Item("common.items.mineral.ingot.iron"), 5, 10),
],
)),
(0.1, Item("common.items.weapons.hammer.mjolnir")),
]

View File

@ -1,8 +1,9 @@
[
(1, All([
MultiDrop(Item("common.items.utility.coins"), 200, 500),
LootTable("common.loot_tables.dungeon.myrmidon.miniboss"),
MultiDrop(LootTable("common.loot_tables.gliders"), 0, 1),
],
)),
(1.8, All([
MultiDrop(Item("common.items.utility.coins"), 200, 500),
MultiDrop(Item("common.items.mineral.ingot.bloodsteel"), 2, 4),
MultiDrop(Item("common.items.mineral.ingot.silver"), 0, 2),
])),
(0.1, Item("common.items.glider.morpho")),
(0.1, Item("common.items.weapons.sword.caladbolg")),
]

View File

@ -1,4 +1,7 @@
[
(0.1, Item("common.items.food.meat.bird_large_raw")),
(1.0, Item("common.items.crafting_ing.animal_misc.phoenix_feather")),
(1.8, All([
MultiDrop(Item("common.items.food.meat.bird_large_raw"), 3, 4),
MultiDrop(Item("common.items.crafting_ing.animal_misc.phoenix_feather"), 1, 3),
],
)),
]

View File

@ -1,9 +0,0 @@
[
(1, All([
MultiDrop(LootTable("common.loot_tables.weapons.tier-3"), 0, 1),
MultiDrop(LootTable("common.loot_tables.armor.tier-3"), 0, 1),
MultiDrop(Item("common.items.armor.misc.head.bear_bonnet"), 0, 1),
MultiDrop(Item("common.items.armor.misc.head.howl_cowl"), 0, 1),
],
)),
]

View File

@ -1,6 +1,8 @@
[
(1, All([
Item("common.items.keys.bone_key"),
MultiDrop(Item("common.items.crafting_ing.animal_misc.fur"), 1, 2),
MultiDrop(Item("common.items.crafting_ing.leather.thick_leather"), 1, 2),
LootTable("common.loot_tables.dungeon.adlet.elder_extra"),
],
)),

View File

@ -0,0 +1,10 @@
[
(1.6, All([
MultiDrop(Item("common.items.food.meat.beast_large_raw"), 2, 6),
MultiDrop(Item("common.items.crafting_ing.hide.rugged_hide"), 1, 3),
MultiDrop(Item("common.items.crafting_ing.animal_misc.sharp_fang"), 2, 4),
MultiDrop(Item("common.items.crafting_ing.animal_misc.icy_fang"), 2, 6),
])),
(0.2, Item("common.items.armor.misc.head.bear_bonnet")),
(0.2, Item("common.items.armor.misc.head.howl_cowl")),
]

View File

@ -1,6 +1,4 @@
[
// TODO: Make this loot table less cluttered
// tier equipment (technically worse than other weapons here until modular weapons)
(5.0, LootTable("common.loot_tables.weapons.cultist")),
(5.0, LootTable("common.loot_tables.weapons.cave")),
(10.0, LootTable("common.loot_tables.armor.cultist")),
@ -9,7 +7,7 @@
(1.0, Item("common.items.glider.skullgrin")),
(0.01, Item("common.items.armor.misc.neck.ankh_of_life")),
// Legendary weapons
(1.0, LootTable("common.loot_tables.weapons.legendary_ranged")),
(1.0, Item("common.items.weapons.staff.laevateinn")),
// Crafting material
// Allow for Eldwood to drop till entity droppers are implemented
(1.0, Item("common.items.crafting_ing.mindflayer_bag_damaged")),

View File

@ -1,10 +1,13 @@
[
(1, All([
(1.9, All([
Item("common.items.keys.quarry_keys.cyclops_eye"),
LootTable("common.loot_tables.dungeon.dwarven_quarry.t4"),
MultiDrop(LootTable("common.loot_tables.dungeon.dwarven_quarry.t4-mats"), 1, 3),
MultiDrop(Item("common.items.utility.coins"), 200, 500),
LootTable("common.loot_tables.dungeon.myrmidon.boss"),
MultiDrop(Item("common.items.mineral.ingot.iron"), 5, 10),
],
)),
(0.1, All([
Item("common.items.keys.quarry_keys.cyclops_eye"),
Item("common.items.weapons.hammer.mjolnir"),
],
)),
]

View File

@ -1,10 +1,20 @@
[
(1, All([
Item("common.items.keys.quarry_keys.ancient"),
LootTable("common.loot_tables.dungeon.dwarven_quarry.t4"),
MultiDrop(LootTable("common.loot_tables.dungeon.dwarven_quarry.t4-mats"), 1, 3),
MultiDrop(Item("common.items.utility.coins"), 200, 500),
LootTable("common.loot_tables.dungeon.myrmidon.boss"),
],
(1.7, All([
Item("common.items.keys.quarry_keys.ancient"),
// coins are temporary placeholder for unique drops
MultiDrop(Item("common.items.utility.coins"), 200, 500),
MultiDrop(Item("common.items.log.eldwood"), 2, 6),
],
)),
(0.1, All([
Item("common.items.keys.quarry_keys.ancient"),
Item("common.items.weapons.axe.parashu"),
],
)),
(0.2, All([
Item("common.items.keys.quarry_keys.ancient"),
Item("common.items.armor.misc.neck.carcanet_of_wrath"),
],
)),
]

View File

@ -9,8 +9,4 @@
(3.0, Item("common.items.armor.misc.head.bamboo_twig")),
// Chieftain Mask
(1.0, Item("common.items.armor.misc.head.gnarling_mask")),
// Indirect crafting materials for T2 gear
(1.0, MultiDrop(Item("common.items.crafting_ing.sticky_thread"), 2, 5)),
(1.0, MultiDrop(Item("common.items.mineral.ore.coal"), 2, 5)),
(1.0, MultiDrop(Item("common.items.crafting_ing.leather.leather_strips"), 2, 5)),
]

View File

@ -6,4 +6,5 @@
// Misc
(3.0, Item("common.items.armor.misc.neck.scratched")),
(2.0, Item("common.items.lantern.pumpkin")),
(1.0, Item("common.items.glider.moth")),
]

View File

@ -1,12 +0,0 @@
[
// Armor
(10.0, LootTable("common.loot_tables.weapons.tier-5")),
(10.0, LootTable("common.loot_tables.armor.tier-5")),
// Misc
(1.0, Item("common.items.armor.misc.neck.carcanet_of_wrath")),
// Legendary weapons
(1.0, LootTable("common.loot_tables.weapons.legendary_melee")),
// Crafting material
// Allow for Eldwood to drop till entity droppers are implemented
(1.0, MultiDrop(Item("common.items.log.eldwood"), 2, 6)),
]

View File

@ -2,8 +2,6 @@
// Armor
(2.0, LootTable("common.loot_tables.weapons.tier-5")),
(2.0, LootTable("common.loot_tables.armor.tier-5")),
// Food
(5.0, LootTable("common.loot_tables.food.prepared")),
// Consumables
(5.0, MultiDrop(Item("common.items.consumable.potion_minor"), 4, 8)),
// lantern

View File

@ -0,0 +1,10 @@
[
(1.7, All([
// coins are temporary placeholder for unique drops
MultiDrop(Item("common.items.utility.coins"), 200, 500),
MultiDrop(Item("common.items.log.eldwood"), 2, 6),
],
)),
(0.1, Item("common.items.weapons.axe.parashu")),
(0.2, Item("common.items.armor.misc.neck.carcanet_of_wrath")),
]

View File

@ -1,10 +0,0 @@
[
// Weapons
(5.0, LootTable("common.loot_tables.weapons.tier-3")),
// Armor
(5.0, LootTable("common.loot_tables.armor.tier-3")),
// Misc
(2.0, Item("common.items.armor.misc.neck.gem_of_resilience")),
// Special Loot
(0.5, Item("common.items.glider.moonrise")),
]

View File

@ -0,0 +1,9 @@
[
// Weapons
(4.0, LootTable("common.loot_tables.weapons.tier-3")),
// Armor
(4.5, LootTable("common.loot_tables.armor.tier-3")),
// Special
(1.0, Item("common.items.armor.misc.neck.gem_of_resilience")),
(0.5, Item("common.items.glider.moonrise")),
]

View File

@ -1,6 +1,7 @@
[
(3.0, Item("common.items.crafting_ing.abyssal_heart")),
(2.5, Item("common.items.crafting_ing.abyssal_heart")),
(3.0, MultiDrop(Item("common.items.crafting_ing.pearl"), 3, 5)),
(3.0, MultiDrop(Item("common.items.crafting_ing.brinestone"), 3, 6)),
(1.0, Item("common.items.armor.misc.bag.heavy_seabag")),
(0.5, Item("common.items.weapons.sceptre.caduceus")),
]

View File

@ -1,6 +0,0 @@
[
(0.1, Item("common.items.glider.blue")),
(0.05, Item("common.items.glider.morpho")),
(0.05, Item("common.items.glider.monarch")),
(0.05, Item("common.items.glider.moth")),
]

View File

@ -1170,12 +1170,6 @@ mod tests {
let lootsum3 = loot3.iter().fold(0.0, |s, i| s + i.0);
//tracing::trace!("{:?} {}", loot3, lootsum3);
assert!((lootsum3 - 1.0).abs() < 1e-5);
// includes tier-5 modular weapons
let loot4 = expand_loot_table("common.loot_tables.dungeon.myrmidon.boss");
let lootsum4 = loot4.iter().fold(0.0, |s, i| s + i.0);
//tracing::trace!("{:?} {}", loot4, lootsum4);
assert!((lootsum4 - 1.0).abs() < 1e-5);
}
#[test]

View File

@ -783,14 +783,14 @@ fn turret_5(dynamic_rng: &mut impl Rng, pos: Vec3<f32>) -> EntityInfo {
fn boss_2(dynamic_rng: &mut impl Rng, tile_wcenter: Vec3<i32>) -> Vec<EntityInfo> {
vec![
EntityInfo::at(tile_wcenter.map(|e| e as f32))
.with_asset_expect("common.entity.dungeon.sahagin.boss", dynamic_rng),
.with_asset_expect("common.entity.dungeon.sahagin.tidalwarrior", dynamic_rng),
]
}
fn boss_3(dynamic_rng: &mut impl Rng, tile_wcenter: Vec3<i32>) -> Vec<EntityInfo> {
let mut entities = Vec::new();
entities.resize_with(2, || {
EntityInfo::at(tile_wcenter.map(|e| e as f32))
.with_asset_expect("common.entity.dungeon.haniwa.boss", dynamic_rng)
.with_asset_expect("common.entity.dungeon.haniwa.claygolem", dynamic_rng)
});
entities
@ -799,14 +799,14 @@ fn boss_3(dynamic_rng: &mut impl Rng, tile_wcenter: Vec3<i32>) -> Vec<EntityInfo
fn boss_4(dynamic_rng: &mut impl Rng, tile_wcenter: Vec3<i32>) -> Vec<EntityInfo> {
vec![
EntityInfo::at(tile_wcenter.map(|e| e as f32))
.with_asset_expect("common.entity.dungeon.myrmidon.boss", dynamic_rng),
.with_asset_expect("common.entity.dungeon.myrmidon.minotaur", dynamic_rng),
]
}
fn boss_5(dynamic_rng: &mut impl Rng, tile_wcenter: Vec3<i32>) -> Vec<EntityInfo> {
vec![
EntityInfo::at(tile_wcenter.map(|e| e as f32))
.with_asset_expect("common.entity.dungeon.cultist.boss", dynamic_rng),
.with_asset_expect("common.entity.dungeon.cultist.mindflayer", dynamic_rng),
]
}
@ -838,7 +838,7 @@ fn mini_boss_3(dynamic_rng: &mut impl Rng, tile_wcenter: Vec3<i32>) -> Vec<Entit
fn mini_boss_4(dynamic_rng: &mut impl Rng, tile_wcenter: Vec3<i32>) -> Vec<EntityInfo> {
vec![
EntityInfo::at(tile_wcenter.map(|e| e as f32))
.with_asset_expect("common.entity.dungeon.myrmidon.miniboss", dynamic_rng),
.with_asset_expect("common.entity.dungeon.myrmidon.cyclops", dynamic_rng),
]
}