diff --git a/assets/common/abilities/pick/swing.ron b/assets/common/abilities/pick/swing.ron index 9e4a76fd5c..55a6fbe4ec 100644 --- a/assets/common/abilities/pick/swing.ron +++ b/assets/common/abilities/pick/swing.ron @@ -1,12 +1,12 @@ BasicMelee( energy_cost: 0, - buildup_duration: 0.6, - swing_duration: 0.1, - recover_duration: 0.15, + buildup_duration: 0.25, + swing_duration: 0.05, + recover_duration: 0.075, base_damage: 50, base_poise_damage: 0, knockback: ( strength: 0.0, direction: Away), - range: 3.5, + range: 4.5, max_angle: 20.0, damage_effect: None, damage_kind: Piercing, diff --git a/assets/common/cave_scatter/deep_ceiling.ron b/assets/common/cave_scatter/deep_ceiling.ron new file mode 100644 index 0000000000..d79e332489 --- /dev/null +++ b/assets/common/cave_scatter/deep_ceiling.ron @@ -0,0 +1,15 @@ +[ + (30, Velorite), + (40, VeloriteFrag), + (70, ShortGrass), + (10, CaveMushroom), + (10, AmethystSmall), + (10, TopazSmall), + (16, SapphireSmall), + (60, CrystalHigh), + (12, EmeraldSmall), + (10, RubySmall), + (8, DiamondSmall), + (5, Chest), + (15, Crate), +] diff --git a/assets/common/cave_scatter/deep.ron b/assets/common/cave_scatter/deep_floor.ron similarity index 94% rename from assets/common/cave_scatter/deep.ron rename to assets/common/cave_scatter/deep_floor.ron index d362f957b5..4cebcbd016 100644 --- a/assets/common/cave_scatter/deep.ron +++ b/assets/common/cave_scatter/deep_floor.ron @@ -6,7 +6,7 @@ (10, AmethystSmall), (10, TopazSmall), (16, SapphireSmall), - (60, Crystal), + (60, CrystalLow), (12, EmeraldSmall), (30, Cobalt), (10, Bloodstone), diff --git a/assets/common/cave_scatter/shallow_ceiling.ron b/assets/common/cave_scatter/shallow_ceiling.ron new file mode 100644 index 0000000000..80ea24adf0 --- /dev/null +++ b/assets/common/cave_scatter/shallow_ceiling.ron @@ -0,0 +1,5 @@ +[ + (120, Liana), + (30, AmethystSmall), + (15, TopazSmall), +] diff --git a/assets/common/cave_scatter/shallow.ron b/assets/common/cave_scatter/shallow_floor.ron similarity index 100% rename from assets/common/cave_scatter/shallow.ron rename to assets/common/cave_scatter/shallow_floor.ron diff --git a/assets/common/item_price_calculation.ron b/assets/common/item_price_calculation.ron index 090523abcf..c95a53be04 100644 --- a/assets/common/item_price_calculation.ron +++ b/assets/common/item_price_calculation.ron @@ -29,7 +29,7 @@ loot_tables: [ (0.2, true, "common.loot_tables.food.prepared"), // TODO: Change consumables and split them up (1.0, true, "common.loot_tables.consumable.default"), - (0.5, false, "common.loot_tables.trading"), + (10.5, true, "common.loot_tables.trading"), ], // this is the amount of that good the most common item represents // so basically this table balances the goods against each other (higher=less valuable) diff --git a/assets/common/items/crafting_ing/cloth/cloth_scraps.ron b/assets/common/items/crafting_ing/cloth/cloth_scraps.ron deleted file mode 100644 index 208b182c14..0000000000 --- a/assets/common/items/crafting_ing/cloth/cloth_scraps.ron +++ /dev/null @@ -1,9 +0,0 @@ -ItemDef( - name: "Cloth Scraps", - description: "Looted from humanoids and their houses.", - kind: Ingredient( - kind: "ClothScraps", - ), - quality: Common, - tags: [Textile], -) diff --git a/assets/common/items/crafting_ing/cloth/cloth_scraps_red.ron b/assets/common/items/crafting_ing/cloth/cloth_scraps_red.ron deleted file mode 100644 index a0612f89b7..0000000000 --- a/assets/common/items/crafting_ing/cloth/cloth_scraps_red.ron +++ /dev/null @@ -1,9 +0,0 @@ -ItemDef( - name: "Red Cloth Scraps", - description: "Dyed red with flower pigments.", - kind: Ingredient( - kind: "ClothScrapsRed", - ), - quality: Common, - tags: [Textile], -) diff --git a/assets/common/items/crafting_ing/cloth/linen.ron b/assets/common/items/crafting_ing/cloth/linen.ron index 6b7ad7ff50..897f7e1cc6 100644 --- a/assets/common/items/crafting_ing/cloth/linen.ron +++ b/assets/common/items/crafting_ing/cloth/linen.ron @@ -1,6 +1,6 @@ ItemDef( name: "Linen", - description: "A textile made from the fibers of a plant.", + description: "A textile made from flax fibers.", kind: Ingredient( kind: "Linen", ), diff --git a/assets/common/items/crafting_ing/cloth/linen_red.ron b/assets/common/items/crafting_ing/cloth/linen_red.ron new file mode 100644 index 0000000000..d2b5692f7e --- /dev/null +++ b/assets/common/items/crafting_ing/cloth/linen_red.ron @@ -0,0 +1,9 @@ +ItemDef( + name: "Red Linen", + description: "A flax fiber textile, dyed to stand out.", + kind: Ingredient( + kind: "LinenRed", + ), + quality: Low, + tags: [Textile], +) \ No newline at end of file diff --git a/assets/common/items/tool/pick.ron b/assets/common/items/tool/pick.ron index e853548c8e..6bf9f17892 100644 --- a/assets/common/items/tool/pick.ron +++ b/assets/common/items/tool/pick.ron @@ -8,7 +8,7 @@ ItemDef( equip_time_secs: 0.25, power: 0.75, poise_strength: 0.25, - speed: 0.75, + speed: 1.3, crit_chance: 0.0, crit_mult: 1.0, )), diff --git a/assets/common/loot_tables/creature/quad_small/sheep.ron b/assets/common/loot_tables/creature/quad_small/sheep.ron index a510623b8c..90291076fc 100644 --- a/assets/common/loot_tables/creature/quad_small/sheep.ron +++ b/assets/common/loot_tables/creature/quad_small/sheep.ron @@ -1,3 +1,3 @@ [ - (1.0, Item("common.items.crafting_ing.cloth.wool", 2, 5)), + (1.0, ItemQuantity("common.items.crafting_ing.cloth.wool", 2, 5)), ] \ No newline at end of file diff --git a/assets/common/loot_tables/materials/common.ron b/assets/common/loot_tables/materials/common.ron index d6eb5a027d..e93c108380 100644 --- a/assets/common/loot_tables/materials/common.ron +++ b/assets/common/loot_tables/materials/common.ron @@ -1,6 +1,5 @@ [ (1.0, Item("common.items.crafting_ing.bowl")), (1.0, Item("common.items.crafting_ing.empty_vial")), - (2.0, Item("common.items.crafting_ing.cloth.cloth_scraps")), (1.0, Item("common.items.crafting_ing.leather.leather_strips")), ] \ No newline at end of file diff --git a/assets/common/loot_tables/trading.ron b/assets/common/loot_tables/trading.ron index 4f2eb84909..6a487c808a 100644 --- a/assets/common/loot_tables/trading.ron +++ b/assets/common/loot_tables/trading.ron @@ -1,5 +1,20 @@ // Loot table that exists purely for price rationalisation [ (1.0, Item("common.items.crafting_ing.honey")), - (0.5, Item("common.items.crafting_ing.animal_misc.icy_fang")), + (0.2, Item("common.items.mineral.ore.bloodstone")), + (1.0, Item("common.items.mineral.ore.coal")), + (0.4, Item("common.items.mineral.ore.cobalt")), + (2.5, Item("common.items.mineral.ore.copper")), + (0.05, Item("common.items.mineral.ore.gold")), + (1.2, Item("common.items.mineral.ore.iron")), + (0.07, Item("common.items.mineral.ore.silver")), + (2.5, Item("common.items.mineral.ore.tin")), + (1.2, Item("common.items.mineral.ore.velorite")), + (0.6, Item("common.items.mineral.ore.veloritefrag")), + (0.8, Item("common.items.mineral.gem.amethyst")), + (0.2, Item("common.items.mineral.gem.diamond")), + (0.6, Item("common.items.mineral.gem.emerald")), + (0.4, Item("common.items.mineral.gem.ruby")), + (0.4, Item("common.items.mineral.gem.sapphire")), + (0.9, Item("common.items.mineral.gem.topaz")), ] diff --git a/assets/common/recipe_book.ron b/assets/common/recipe_book.ron index 832cd2969d..d1184e23d9 100644 --- a/assets/common/recipe_book.ron +++ b/assets/common/recipe_book.ron @@ -20,7 +20,7 @@ output: ("common.items.crafting_tools.sewing_set", 1), inputs: [ (Item("common.items.crafting_ing.cloth.linen"), 1), - (Item("common.items.mineral.ore.tin"), 1), + (Item("common.items.mineral.ingot.tin"), 1), ], craft_sprite: Some(CraftingBench), ), @@ -269,8 +269,8 @@ "bronze ingot": ( output: ("common.items.mineral.ingot.bronze", 2), inputs: [ - (Item("common.items.mineral.ore.copper"), 1), - (Item("common.items.mineral.ore.tin"), 1), + (Item("common.items.mineral.ingot.copper"), 1), + (Item("common.items.mineral.ingot.tin"), 1), ], craft_sprite: Some(Forge), ), @@ -361,7 +361,7 @@ inputs: [ (Item("common.items.crafting_ing.twigs"), 5), (Item("common.items.crafting_ing.leather.leather_strips"), 5), - (Item("common.items.crafting_ing.cloth.cloth_scraps"), 10), + (Item("common.items.crafting_ing.cloth.linen"), 10), (Item("common.items.tool.craftsman_hammer"), 0), (Item("common.items.crafting_tools.sewing_set"), 0), ], @@ -371,7 +371,7 @@ output: ("common.items.glider.glider_basic_red", 1), inputs: [ (Item("common.items.crafting_ing.twigs"), 5), - (Item("common.items.crafting_ing.cloth.cloth_scraps_red"), 10), + (Item("common.items.crafting_ing.cloth.linen_red"), 10), (Item("common.items.crafting_ing.leather.thick_leather"), 4), (Item("common.items.tool.craftsman_hammer"), 0), (Item("common.items.crafting_tools.sewing_set"), 0), @@ -383,7 +383,7 @@ inputs: [ (Item("common.items.crafting_ing.twigs"), 5), (Item("common.items.crafting_ing.leather.thick_leather"), 4), - (Item("common.items.crafting_ing.cloth.cloth_scraps"), 5), + (Item("common.items.crafting_ing.cloth.linen"), 5), (Item("common.items.mineral.gem.emerald"), 1), (Item("common.items.tool.craftsman_hammer"), 0), (Item("common.items.crafting_tools.sewing_set"), 0), @@ -396,7 +396,7 @@ (Item("common.items.crafting_ing.animal_misc.raptor_feather"), 6), (Item("common.items.crafting_ing.twigs"), 5), (Item("common.items.crafting_ing.leather.thick_leather"), 4), - (Item("common.items.crafting_ing.cloth.cloth_scraps"), 5), + (Item("common.items.crafting_ing.cloth.linen"), 5), (Item("common.items.mineral.gem.ruby"), 1), (Item("common.items.tool.craftsman_hammer"), 0), (Item("common.items.crafting_tools.sewing_set"), 0), @@ -409,7 +409,7 @@ (Item("common.items.crafting_ing.animal_misc.raptor_feather"), 6), (Item("common.items.crafting_ing.twigs"), 5), (Item("common.items.crafting_ing.leather.thick_leather"), 4), - (Item("common.items.crafting_ing.cloth.cloth_scraps"), 5), + (Item("common.items.crafting_ing.cloth.linen"), 5), (Item("common.items.crafting_ing.animal_misc.icy_fang"), 1), (Item("common.items.mineral.gem.ruby"), 1), (Item("common.items.tool.craftsman_hammer"), 0), @@ -423,7 +423,7 @@ (Item("common.items.crafting_ing.animal_misc.raptor_feather"), 6), (Item("common.items.crafting_ing.twigs"), 15), (Item("common.items.crafting_ing.leather.leather_strips"), 5), - (Item("common.items.crafting_ing.cloth.cloth_scraps"), 5), + (Item("common.items.crafting_ing.cloth.linen"), 5), (Item("common.items.mineral.gem.ruby"), 1), (Item("common.items.tool.craftsman_hammer"), 0), (Item("common.items.crafting_tools.sewing_set"), 0), @@ -1590,7 +1590,7 @@ "Seashell Necklace": ( output: ("common.items.armor.misc.neck.shell", 1), inputs: [ - (Item("common.items.crafting_ing.cloth.cloth_scraps"), 2), + (Item("common.items.crafting_ing.cloth.linen"), 2), (Item("common.items.mineral.gem.sapphire"), 1), (Item("common.items.crafting_ing.seashells"), 3), (Item("common.items.crafting_tools.sewing_set"), 0), @@ -1598,9 +1598,9 @@ craft_sprite: Some(CraftingBench), ), "red cloth": ( - output: ("common.items.crafting_ing.cloth.cloth_scraps_red", 1), + output: ("common.items.crafting_ing.cloth.linen_red", 1), inputs: [ - (Item("common.items.crafting_ing.cloth.cloth_scraps"), 1), + (Item("common.items.crafting_ing.cloth.linen"), 1), (Item("common.items.flowers.red"), 1), (Item("common.items.crafting_tools.mortar_pestle"), 0), ], @@ -1608,7 +1608,7 @@ "tiny red pouch": ( output: ("common.items.armor.misc.bag.tiny_red_pouch", 1), inputs: [ - (Item("common.items.crafting_ing.cloth.cloth_scraps_red"), 3), + (Item("common.items.crafting_ing.cloth.linen_red"), 3), (Item("common.items.crafting_tools.sewing_set"), 0), ], ), @@ -1622,7 +1622,7 @@ "knitted red pouch": ( output: ("common.items.armor.misc.bag.knitted_red_pouch", 1), inputs: [ - (Item("common.items.crafting_ing.cloth.cloth_scraps_red"), 3), + (Item("common.items.crafting_ing.cloth.linen_red"), 3), (Item("common.items.armor.misc.bag.tiny_red_pouch"), 2), (Item("common.items.crafting_tools.sewing_set"), 0), ], @@ -1630,7 +1630,7 @@ "woven red bag": ( output: ("common.items.armor.misc.bag.woven_red_bag", 1), inputs: [ - (Item("common.items.crafting_ing.cloth.cloth_scraps_red"), 6), + (Item("common.items.crafting_ing.cloth.linen_red"), 6), (Item("common.items.armor.misc.bag.knitted_red_pouch"), 1), (Item("common.items.crafting_tools.sewing_set"), 0), ], @@ -1640,7 +1640,7 @@ inputs: [ (Item("common.items.mineral.gem.diamond"), 2), (Item("common.items.crafting_ing.twigs"), 2), - (Item("common.items.crafting_ing.cloth.cloth_scraps"), 3), + (Item("common.items.crafting_ing.cloth.linen"), 3), (Item("common.items.crafting_ing.leather.leather_strips"), 3), (Item("common.items.armor.misc.bag.tiny_leather_pouch"), 2), (Item("common.items.crafting_tools.sewing_set"), 0), @@ -1651,7 +1651,7 @@ output: ("common.items.armor.misc.bag.sturdy_red_backpack", 1), inputs: [ (Item("common.items.mineral.gem.diamond"), 2), - (Item("common.items.crafting_ing.cloth.cloth_scraps_red"), 3), + (Item("common.items.crafting_ing.cloth.linen_red"), 3), (Item("common.items.crafting_ing.leather.thick_leather"), 3), (Item("common.items.armor.misc.bag.woven_red_bag"), 1), (Item("common.items.crafting_tools.sewing_set"), 0), @@ -1679,14 +1679,14 @@ "pickaxe": ( output: ("common.items.tool.pick", 1), inputs: [ - (Item("common.items.crafting_ing.cloth.cloth_scraps"), 1), // TODO: Replace with plant fiber when obtainable + (Item("common.items.crafting_ing.cloth.linen"), 1), // TODO: Replace with plant fiber when obtainable (Item("common.items.crafting_ing.stones"), 5), // TODO: Replace with iron ingots when obtainable (Item("common.items.crafting_ing.twigs"), 4), (Item("common.items.tool.craftsman_hammer"), 0), ], craft_sprite: Some(Anvil), ), - "cloth_scraps": ( + "linen": ( output: ("common.items.crafting_ing.cloth.linen", 1), inputs: [ (Tag(Material((material: Linen))), 1), diff --git a/assets/voxygen/item_image_manifest.ron b/assets/voxygen/item_image_manifest.ron index 49dba5511b..015bfad661 100644 --- a/assets/voxygen/item_image_manifest.ron +++ b/assets/voxygen/item_image_manifest.ron @@ -2573,6 +2573,10 @@ "voxel.sprite.crafting_ing.cloth.sunsilk", (0.0, 0.0, 0.0), (-65.0, 0.0, 20.0), 0.9, ), + Ingredient("LinenRed"): VoxTrans( + "voxel.sprite.crafting_ing.cloth.linen_red", + (0.0, 0.0, 0.0), (-65.0, 0.0, 20.0), 0.9, + ), Ingredient("SilverIngot"): VoxTrans( "voxel.sprite.mineral.ingot.silver", (0.0, 0.0, 0.0), (70.0, 30.0, 170.0), 0.85, @@ -2651,12 +2655,6 @@ Ingredient("TrollLeather"): Png( "element.items.item_leather_green", ), - Ingredient("ClothScraps"): Png( - "element.items.item_cloth0", - ), - Ingredient("ClothScrapsRed"): Png( - "element.items.item_cloth_red", - ), Ingredient("MortarPestle"): Png( "element.items.item_mortarpestlecoco", ), diff --git a/assets/voxygen/shaders/particle-vert.glsl b/assets/voxygen/shaders/particle-vert.glsl index 4bad57d31e..f2f6fd9cd3 100644 --- a/assets/voxygen/shaders/particle-vert.glsl +++ b/assets/voxygen/shaders/particle-vert.glsl @@ -70,6 +70,7 @@ const int LASER = 28; const int BUBBLES = 29; const int WATER = 30; const int ICE_SPIKES = 31; +const int DUST = 31; // meters per second squared (acceleration) const float earth_gravity = 9.807; @@ -531,6 +532,17 @@ void main() { spin_in_axis(vec3(1,0,0),0) ); break; + case DUST: + attr = Attr( + linear_motion( + vec3(0), + normalize(vec3(rand4, rand5, rand6)) + grav_vel(earth_gravity) + ), + vec3((2.0 * (1 - slow_start(0.2)))), + vec4(1, 1, 0, 1), + spin_in_axis(vec3(1,0,0),0) + ); + break; default: attr = Attr( linear_motion( diff --git a/assets/voxygen/voxel/sprite/crafting_ing/cloth/linen_red.vox b/assets/voxygen/voxel/sprite/crafting_ing/cloth/linen_red.vox new file mode 100644 index 0000000000..e0b6191def --- /dev/null +++ b/assets/voxygen/voxel/sprite/crafting_ing/cloth/linen_red.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:68e1bd9a8187420099bc80288b14da1f4843645e5a94f1a42f2226b3e3cfd9c2 +size 1660 diff --git a/assets/voxygen/voxel/sprite/mineral/deposit/crystal/ceiling/blue-0.vox b/assets/voxygen/voxel/sprite/mineral/deposit/crystal/ceiling/blue-0.vox new file mode 100644 index 0000000000..43bec2f0ee --- /dev/null +++ b/assets/voxygen/voxel/sprite/mineral/deposit/crystal/ceiling/blue-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:05897d073c7d3a04e943c1459431be73ed325ee1a83154d9710a1bde1aad657e +size 4556 diff --git a/assets/voxygen/voxel/sprite/mineral/deposit/crystal/ceiling/blue-1.vox b/assets/voxygen/voxel/sprite/mineral/deposit/crystal/ceiling/blue-1.vox new file mode 100644 index 0000000000..baa05ad81f --- /dev/null +++ b/assets/voxygen/voxel/sprite/mineral/deposit/crystal/ceiling/blue-1.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4099ec836eb24ecc33db5e71b2859f10bc24581884e8e855ce79acac2129e260 +size 4888 diff --git a/assets/voxygen/voxel/sprite/mineral/deposit/crystal/ceiling/blue-2.vox b/assets/voxygen/voxel/sprite/mineral/deposit/crystal/ceiling/blue-2.vox new file mode 100644 index 0000000000..969f280ae7 --- /dev/null +++ b/assets/voxygen/voxel/sprite/mineral/deposit/crystal/ceiling/blue-2.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d1d11541ee4f8982605247354cb09d564620719fff8bdb213f4643b7337839f +size 8660 diff --git a/assets/voxygen/voxel/sprite/mineral/deposit/crystal/ceiling/green-0.vox b/assets/voxygen/voxel/sprite/mineral/deposit/crystal/ceiling/green-0.vox new file mode 100644 index 0000000000..51656c1d9e --- /dev/null +++ b/assets/voxygen/voxel/sprite/mineral/deposit/crystal/ceiling/green-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:54a605ba96c9241dc88793cbe2c7ae87b7e51a1b25fdfed10c0501a87596170c +size 4556 diff --git a/assets/voxygen/voxel/sprite/mineral/deposit/crystal/ceiling/green-1.vox b/assets/voxygen/voxel/sprite/mineral/deposit/crystal/ceiling/green-1.vox new file mode 100644 index 0000000000..acbcc423e9 --- /dev/null +++ b/assets/voxygen/voxel/sprite/mineral/deposit/crystal/ceiling/green-1.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:15188752e9e5256fc2ab95b7c0e4346e976e2301fc7f0d2e1df688257be819c9 +size 4888 diff --git a/assets/voxygen/voxel/sprite/mineral/deposit/crystal/ceiling/green-2.vox b/assets/voxygen/voxel/sprite/mineral/deposit/crystal/ceiling/green-2.vox new file mode 100644 index 0000000000..7911b02e7b --- /dev/null +++ b/assets/voxygen/voxel/sprite/mineral/deposit/crystal/ceiling/green-2.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:94c059f8cd7634f35b3c4e49028bfef3c29fb4760cbd151be36b7d8237b732f3 +size 8660 diff --git a/assets/voxygen/voxel/sprite/mineral/deposit/crystal/ceiling/purple-0.vox b/assets/voxygen/voxel/sprite/mineral/deposit/crystal/ceiling/purple-0.vox new file mode 100644 index 0000000000..f8c23de68b --- /dev/null +++ b/assets/voxygen/voxel/sprite/mineral/deposit/crystal/ceiling/purple-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c4cfb8491b6e6c1442674756731ff10f279ad2a898705cf5bd919939d841477e +size 4556 diff --git a/assets/voxygen/voxel/sprite/mineral/deposit/crystal/ceiling/purple-1.vox b/assets/voxygen/voxel/sprite/mineral/deposit/crystal/ceiling/purple-1.vox new file mode 100644 index 0000000000..677d2e71c1 --- /dev/null +++ b/assets/voxygen/voxel/sprite/mineral/deposit/crystal/ceiling/purple-1.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9fedd42c1fab05bdb56a4c0ac8e7cb5925fdadb8f2a159b23519e51a34818655 +size 4888 diff --git a/assets/voxygen/voxel/sprite/mineral/deposit/crystal/ceiling/purple-2.vox b/assets/voxygen/voxel/sprite/mineral/deposit/crystal/ceiling/purple-2.vox new file mode 100644 index 0000000000..8d0222e6df --- /dev/null +++ b/assets/voxygen/voxel/sprite/mineral/deposit/crystal/ceiling/purple-2.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa9a72da5335eb48f3f5c5f8369157d802468852323fd05c42625b3217028588 +size 8660 diff --git a/assets/voxygen/voxel/sprite/mineral/deposit/crystal/ceiling/purple-3.vox b/assets/voxygen/voxel/sprite/mineral/deposit/crystal/ceiling/purple-3.vox new file mode 100644 index 0000000000..ef27e5d565 --- /dev/null +++ b/assets/voxygen/voxel/sprite/mineral/deposit/crystal/ceiling/purple-3.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e2f029cd9927734e163bcf64108f56f20025e9e136aafe7a5ed28fd47135daa +size 19644 diff --git a/assets/voxygen/voxel/sprite/mineral/deposit/crystal/floor/blue-0.vox b/assets/voxygen/voxel/sprite/mineral/deposit/crystal/floor/blue-0.vox new file mode 100644 index 0000000000..b89a9e30e7 --- /dev/null +++ b/assets/voxygen/voxel/sprite/mineral/deposit/crystal/floor/blue-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ce071a8dd109c2d17c8b3f1ad15050c0603ebb4adec1315bb2ae8ebaccfa107 +size 4556 diff --git a/assets/voxygen/voxel/sprite/mineral/deposit/crystal/floor/blue-1.vox b/assets/voxygen/voxel/sprite/mineral/deposit/crystal/floor/blue-1.vox new file mode 100644 index 0000000000..e096712b8e --- /dev/null +++ b/assets/voxygen/voxel/sprite/mineral/deposit/crystal/floor/blue-1.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7406abb14304566bbc6b98b57b937c9adc50e07d284d874d870d3681a41067cb +size 4888 diff --git a/assets/voxygen/voxel/sprite/mineral/deposit/crystal/floor/blue-2.vox b/assets/voxygen/voxel/sprite/mineral/deposit/crystal/floor/blue-2.vox new file mode 100644 index 0000000000..ef3bb37450 --- /dev/null +++ b/assets/voxygen/voxel/sprite/mineral/deposit/crystal/floor/blue-2.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:242f66c616dbe59aa80cdfc6c9c50823201d60640aa66e5b8c3325d03940e703 +size 8660 diff --git a/assets/voxygen/voxel/sprite/mineral/deposit/crystal/floor/green-0.vox b/assets/voxygen/voxel/sprite/mineral/deposit/crystal/floor/green-0.vox new file mode 100644 index 0000000000..30abc3a9c2 --- /dev/null +++ b/assets/voxygen/voxel/sprite/mineral/deposit/crystal/floor/green-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f2732fcd871a9ec088fe3473d5c467ee8fdd92dec93fd83fdc12062456fa875b +size 4556 diff --git a/assets/voxygen/voxel/sprite/mineral/deposit/crystal/floor/green-1.vox b/assets/voxygen/voxel/sprite/mineral/deposit/crystal/floor/green-1.vox new file mode 100644 index 0000000000..9869bd9471 --- /dev/null +++ b/assets/voxygen/voxel/sprite/mineral/deposit/crystal/floor/green-1.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fcfaafc68779903adc6aa8065fcdbdf7fb721a5b9e38012af65414c8a27597f5 +size 4888 diff --git a/assets/voxygen/voxel/sprite/mineral/deposit/crystal/floor/green-2.vox b/assets/voxygen/voxel/sprite/mineral/deposit/crystal/floor/green-2.vox new file mode 100644 index 0000000000..bf73e43669 --- /dev/null +++ b/assets/voxygen/voxel/sprite/mineral/deposit/crystal/floor/green-2.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63b7cff3d2afbd6c5e549073b9f7a30085a58bed0166c2a01f1a069c75a379d1 +size 8660 diff --git a/assets/voxygen/voxel/sprite/mineral/deposit/crystal/floor/purple-0.vox b/assets/voxygen/voxel/sprite/mineral/deposit/crystal/floor/purple-0.vox new file mode 100644 index 0000000000..4fb3b4ba89 --- /dev/null +++ b/assets/voxygen/voxel/sprite/mineral/deposit/crystal/floor/purple-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:21e099721b921b51a3e3e29f450d6f523fcd0bb647e0c8d15d6df63bbfa43ca4 +size 4556 diff --git a/assets/voxygen/voxel/sprite/mineral/deposit/crystal/floor/purple-1.vox b/assets/voxygen/voxel/sprite/mineral/deposit/crystal/floor/purple-1.vox new file mode 100644 index 0000000000..f5e7aa5d3f --- /dev/null +++ b/assets/voxygen/voxel/sprite/mineral/deposit/crystal/floor/purple-1.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ed8bba05993b064d070273fd09ce1591710b9c80c70b9d304140b669a989e911 +size 4888 diff --git a/assets/voxygen/voxel/sprite/mineral/deposit/crystal/floor/purple-2.vox b/assets/voxygen/voxel/sprite/mineral/deposit/crystal/floor/purple-2.vox new file mode 100644 index 0000000000..eb8e9554a8 --- /dev/null +++ b/assets/voxygen/voxel/sprite/mineral/deposit/crystal/floor/purple-2.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff85f0c94b72efba0c5eca2ef910b10ca0bb91da5b0eed25592c539dbac23f5b +size 8660 diff --git a/assets/voxygen/voxel/sprite/mineral/gem/crystal-0.vox b/assets/voxygen/voxel/sprite/mineral/gem/crystal-0.vox deleted file mode 100644 index ba00c9a1e0..0000000000 --- a/assets/voxygen/voxel/sprite/mineral/gem/crystal-0.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b7cdb610ada45147549fcba25a02ae8a0c468f7815bf1426df286493f0af5190 -size 4300 diff --git a/assets/voxygen/voxel/sprite_manifest.ron b/assets/voxygen/voxel/sprite_manifest.ron index 5c9ce30a43..8c528a0388 100644 --- a/assets/voxygen/voxel/sprite_manifest.ron +++ b/assets/voxygen/voxel/sprite_manifest.ron @@ -574,7 +574,7 @@ Liana: Some(( lod_axes: (0.0, 0.0, 0.5), ), ], - wind_sway: 0.05, + wind_sway: 0.0, )), // Velorite @@ -2982,15 +2982,110 @@ Gold: Some(( ], wind_sway: 0.0, )), -Crystal: Some(( +CrystalHigh: Some(( variations: [ ( - model: "voxygen.voxel.sprite.mineral.gem.crystal-0", - offset: (-8.5, -8.5, 0.0), - lod_axes: (0.0, 0.0, 0.0), + model: "voxygen.voxel.sprite.mineral.deposit.crystal.ceiling.blue-0", + offset: (-8.5, -9.0, -7.0), + lod_axes: (1.0, 1.0, 1.0), ), - ], - wind_sway: 0.0, + ( + model: "voxygen.voxel.sprite.mineral.deposit.crystal.ceiling.blue-1", + offset: (-8.0, -8.0, -10.0), + lod_axes: (1.0, 1.0, 1.0), + ), + ( + model: "voxygen.voxel.sprite.mineral.deposit.crystal.ceiling.blue-2", + offset: (-11.5, -12.5, -9.0), + lod_axes: (1.0, 1.0, 1.0), + ), + ( + model: "voxygen.voxel.sprite.mineral.deposit.crystal.ceiling.purple-0", + offset: (-8.5, -9.0, -7.0), + lod_axes: (1.0, 1.0, 1.0), + ), + ( + model: "voxygen.voxel.sprite.mineral.deposit.crystal.ceiling.purple-1", + offset: (-8.0, -8.0, -10.0), + lod_axes: (1.0, 1.0, 1.0), + ), + ( + model: "voxygen.voxel.sprite.mineral.deposit.crystal.ceiling.purple-2", + offset: (-11.5, -12.5, -9.0), + lod_axes: (1.0, 1.0, 1.0), + ), + ( + model: "voxygen.voxel.sprite.mineral.deposit.crystal.ceiling.purple-3", + offset: (-11.5, -12.5, -49.0), + lod_axes: (1.0, 1.0, 1.0), + ), + ( + model: "voxygen.voxel.sprite.mineral.deposit.crystal.ceiling.green-0", + offset: (-8.5, -9.0, -7.0), + lod_axes: (1.0, 1.0, 1.0), + ), + ( + model: "voxygen.voxel.sprite.mineral.deposit.crystal.ceiling.green-1", + offset: (-8.0, -8.0, -10.0), + lod_axes: (1.0, 1.0, 1.0), + ), + ( + model: "voxygen.voxel.sprite.mineral.deposit.crystal.ceiling.green-2", + offset: (-11.5, -12.5, -9.0), + lod_axes: (1.0, 1.0, 1.0), + ) +], +wind_sway: 0.0, +)), +CrystalLow: Some(( + variations: [ + ( + model: "voxygen.voxel.sprite.mineral.deposit.crystal.floor.blue-0", + offset: (-8.5, -9.0, 0.0), + lod_axes: (1.0, 1.0, 1.0), + ), + ( + model: "voxygen.voxel.sprite.mineral.deposit.crystal.floor.blue-1", + offset: (-8.0, -8.0, 0.0), + lod_axes: (1.0, 1.0, 1.0), + ), + ( + model: "voxygen.voxel.sprite.mineral.deposit.crystal.floor.blue-2", + offset: (-11.5, -12.5, 0.0), + lod_axes: (1.0, 1.0, 1.0), + ), + ( + model: "voxygen.voxel.sprite.mineral.deposit.crystal.floor.purple-0", + offset: (-8.5, -9.0, 0.0), + lod_axes: (1.0, 1.0, 1.0), + ), + ( + model: "voxygen.voxel.sprite.mineral.deposit.crystal.floor.purple-1", + offset: (-8.0, -8.0, 0.0), + lod_axes: (1.0, 1.0, 1.0), + ), + ( + model: "voxygen.voxel.sprite.mineral.deposit.crystal.floor.purple-2", + offset: (-11.5, -12.5, 0.0), + lod_axes: (1.0, 1.0, 1.0), + ), + ( + model: "voxygen.voxel.sprite.mineral.deposit.crystal.floor.green-0", + offset: (-8.5, -9.0, 0.0), + lod_axes: (1.0, 1.0, 1.0), + ), + ( + model: "voxygen.voxel.sprite.mineral.deposit.crystal.floor.green-1", + offset: (-8.0, -8.0, 0.0), + lod_axes: (1.0, 1.0, 1.0), + ), + ( + model: "voxygen.voxel.sprite.mineral.deposit.crystal.floor.green-2", + offset: (-11.5, -12.5, 0.0), + lod_axes: (1.0, 1.0, 1.0), + ) +], +wind_sway: 0.0, )), Cotton: Some(( variations: [ @@ -3000,7 +3095,7 @@ Cotton: Some(( lod_axes: (0.0, 0.0, 0.0), ), ], - wind_sway: 0.0, + wind_sway: 0.4, )), Moonbell: Some(( variations: [ diff --git a/assets/world/style/colors.ron b/assets/world/style/colors.ron index 72dab6e5d9..b46018a8c7 100644 --- a/assets/world/style/colors.ron +++ b/assets/world/style/colors.ron @@ -59,7 +59,12 @@ deep_stone_color: (125, 120, 130), layer: ( bridge: (80, 80, 100), - stalagtite: (77, 91, 161), + stalagtite: (90, 71, 112), + cave_floor: (42, 39, 82), + cave_roof: (38, 21, 79), + dirt: (69, 48, 15), + scaffold: (195, 190, 212), + vein: (222, 140, 39), ), site: ( castle: (), diff --git a/common/src/comp/inventory/item/mod.rs b/common/src/comp/inventory/item/mod.rs index 48d949fe0e..5b31043181 100644 --- a/common/src/comp/inventory/item/mod.rs +++ b/common/src/comp/inventory/item/mod.rs @@ -859,12 +859,12 @@ impl Item { SpriteKind::Diamond => "common.items.mineral.gem.diamond", SpriteKind::Sapphire => "common.items.mineral.gem.sapphire", SpriteKind::Topaz => "common.items.mineral.gem.topaz", - SpriteKind::Emerald => "common.items.mineral.emerald", + SpriteKind::Emerald => "common.items.mineral.gem.emerald", SpriteKind::AmethystSmall => "common.items.mineral.gem.amethyst", SpriteKind::TopazSmall => "common.items.mineral.gem.topaz", SpriteKind::DiamondSmall => "common.items.mineral.gem.diamond", SpriteKind::RubySmall => "common.items.mineral.gem.ruby", - SpriteKind::EmeraldSmall => "common.items.mineral.emerald", + SpriteKind::EmeraldSmall => "common.items.mineral.gem.emerald", SpriteKind::SapphireSmall => "common.items.mineral.gem.sapphire", SpriteKind::Bloodstone => "common.items.mineral.ore.bloodstone", SpriteKind::Coal => "common.items.mineral.ore.coal", diff --git a/common/src/terrain/block.rs b/common/src/terrain/block.rs index 37fa8ef3d3..35b5860e95 100644 --- a/common/src/terrain/block.rs +++ b/common/src/terrain/block.rs @@ -176,7 +176,10 @@ impl Block { | SpriteKind::WallSconce | SpriteKind::FireBowlGround => Some(16), SpriteKind::Velorite | SpriteKind::VeloriteFrag => Some(6), - SpriteKind::CaveMushroom | SpriteKind::CookingPot | SpriteKind::Crystal => Some(16), + SpriteKind::CaveMushroom + | SpriteKind::CookingPot + | SpriteKind::CrystalHigh + | SpriteKind::CrystalLow => Some(16), SpriteKind::Amethyst | SpriteKind::Ruby | SpriteKind::Sapphire diff --git a/common/src/terrain/sprite.rs b/common/src/terrain/sprite.rs index 962334283c..c05f4c1d07 100644 --- a/common/src/terrain/sprite.rs +++ b/common/src/terrain/sprite.rs @@ -156,7 +156,7 @@ make_case_elim!( DungeonChest5 = 0x81, Loom = 0x82, SpinningWheel = 0x83, - Crystal = 0x84, + CrystalHigh = 0x84, Bloodstone = 0x85, Coal = 0x86, Cobalt = 0x87, @@ -170,6 +170,7 @@ make_case_elim!( Pyrebloom = 0x8F, TanningRack = 0x90, WildFlax = 0x91, + CrystalLow = 0x92, } ); @@ -244,7 +245,7 @@ impl SpriteKind { // TODO: Figure out if this should be solid or not. SpriteKind::Shelf => 1.0, SpriteKind::Lantern => 0.9, - SpriteKind::Crystal => 1.5, + SpriteKind::CrystalHigh | SpriteKind::CrystalLow => 1.5, SpriteKind::Bloodstone | SpriteKind::Coal | SpriteKind::Cobalt diff --git a/server/src/migrations/V39__meat_MR_organization.sql b/server/src/migrations/V39__meat_MR_organization.sql index 2e14ab4de8..2c75bbfe92 100644 --- a/server/src/migrations/V39__meat_MR_organization.sql +++ b/server/src/migrations/V39__meat_MR_organization.sql @@ -90,9 +90,9 @@ SET item_definition_id = 'common.items.crafting_ing.hide.carapace' WHERE item_de UPDATE item SET item_definition_id = 'common.items.crafting_ing.animal_misc.claw' WHERE item_definition_id = 'common.items.crafting_ing.claw'; UPDATE item -SET item_definition_id = 'common.items.crafting_ing.cloth.cloth_scraps' WHERE item_definition_id = 'common.items.crafting_ing.cloth_scraps'; +SET item_definition_id = 'common.items.crafting_ing.cloth.cloth_scraps' WHERE item_definition_id = 'common.items.crafting_ing.linen'; UPDATE item -SET item_definition_id = 'common.items.crafting_ing.cloth.cloth_scraps_red' WHERE item_definition_id = 'common.items.crafting_ing.cloth_scraps_red'; +SET item_definition_id = 'common.items.crafting_ing.cloth.cloth_scraps_red' WHERE item_definition_id = 'common.items.crafting_ing.linen_red'; UPDATE item SET item_definition_id = 'common.items.mineral.ore.coal' WHERE item_definition_id = 'common.items.crafting_ing.coal'; UPDATE item diff --git a/voxygen/src/render/pipelines/particle.rs b/voxygen/src/render/pipelines/particle.rs index e067f906f3..9b6a25da1b 100644 --- a/voxygen/src/render/pipelines/particle.rs +++ b/voxygen/src/render/pipelines/particle.rs @@ -82,6 +82,7 @@ pub enum ParticleMode { Bubbles = 29, Water = 30, IceSpikes = 31, + Dust = 32, } impl ParticleMode { diff --git a/voxygen/src/scene/particle.rs b/voxygen/src/scene/particle.rs index 0bb3297d83..bac239161e 100644 --- a/voxygen/src/scene/particle.rs +++ b/voxygen/src/scene/particle.rs @@ -1047,6 +1047,14 @@ impl ParticleMgr { mode: ParticleMode::Leaf, cond: |_| true, }, + BlockParticles { + blocks: |boi| &boi.dust, + range: 4, + rate: 0.004, + lifetime: 20.0, + mode: ParticleMode::Dust, + cond: |_| true, + }, BlockParticles { blocks: |boi| &boi.fires, range: 2, diff --git a/voxygen/src/scene/terrain/watcher.rs b/voxygen/src/scene/terrain/watcher.rs index 15287cc95e..7324298b20 100644 --- a/voxygen/src/scene/terrain/watcher.rs +++ b/voxygen/src/scene/terrain/watcher.rs @@ -16,6 +16,7 @@ pub enum Interaction { #[derive(Default)] pub struct BlocksOfInterest { pub leaves: Vec>, + pub dust: Vec>, pub grass: Vec>, pub river: Vec>, pub fires: Vec>, @@ -41,6 +42,7 @@ impl BlocksOfInterest { pub fn from_chunk(chunk: &TerrainChunk) -> Self { span!(_guard, "from_chunk", "BlocksOfInterest::from_chunk"); let mut leaves = Vec::new(); + let mut dust = Vec::new(); let mut grass = Vec::new(); let mut river = Vec::new(); let mut fires = Vec::new(); @@ -70,6 +72,7 @@ impl BlocksOfInterest { .for_each(|(pos, block)| { match block.kind() { BlockKind::Leaves if thread_rng().gen_range(0..16) == 0 => leaves.push(pos), + BlockKind::WeakRock if thread_rng().gen_range(0..6) == 0 => dust.push(pos), BlockKind::Grass => { if thread_rng().gen_range(0..16) == 0 { grass.push(pos); @@ -101,6 +104,7 @@ impl BlocksOfInterest { }, Some(SpriteKind::WallSconce) => fire_bowls.push(pos + Vec3::unit_z()), Some(SpriteKind::Beehive) => beehives.push(pos), + Some(SpriteKind::CrystalHigh) => fireflies.push(pos), Some(SpriteKind::Reed) => { reeds.push(pos); fireflies.push(pos); @@ -152,6 +156,7 @@ impl BlocksOfInterest { Self { leaves, + dust, grass, river, fires, diff --git a/world/src/layer/mod.rs b/world/src/layer/mod.rs index 363dc6444f..c72124687b 100644 --- a/world/src/layer/mod.rs +++ b/world/src/layer/mod.rs @@ -30,6 +30,11 @@ use vek::*; pub struct Colors { pub bridge: (u8, u8, u8), pub stalagtite: (u8, u8, u8), + pub cave_floor: (u8, u8, u8), + pub cave_roof: (u8, u8, u8), + pub dirt: (u8, u8, u8), + pub scaffold: (u8, u8, u8), + pub vein: (u8, u8, u8), } const EMPTY_AIR: Block = Block::air(SpriteKind::Empty); @@ -118,6 +123,8 @@ pub fn apply_caves_to(canvas: &mut Canvas, rng: &mut impl Rng) { let cave_x = (cave_dist / cave.width).min(1.0); // Relative units + let cave_depth = (col.alt - cave.alt).max(0.0); + let cave_floor = 0.0 - 0.5 * (1.0 - cave_x.powi(2)).max(0.0).sqrt() * cave.width; let cave_height = (1.0 - cave_x.powi(2)).max(0.0).sqrt() * cave.width; @@ -144,7 +151,26 @@ pub fn apply_caves_to(canvas: &mut Canvas, rng: &mut impl Rng) { }); } } + let noisy_color = |color: Rgb, factor: u32| { + let nz = RandomField::new(0).get(Vec3::new(wpos2d.x, wpos2d.y, surface_z)); + color.map(|e| { + (e as u32 + nz % (factor * 2)) + .saturating_sub(factor) + .min(255) as u8 + }) + }; + let difficulty = cave_depth / 100.0; + + let ridge_condition = cave_depth % 10.0 > 8.0; + let pit_condition = cave_depth % 35.0 > 30.0 && cave_x > 0.4 && cave_depth > 200.0; + let pit_depth = 30; + let floor_dist = pit_condition as i32 * pit_depth as i32; + let vein_condition = + cave_depth % 12.0 > 11.8 && cave_x > 0.4 && cave_x < 0.65 && cave_depth > 200.0; + let stalagtite_condition = cave_depth > 150.0; + let vein_dist = 2; + let vein_floor = cave_base - vein_dist; // Stalagtites let stalagtites = info .index() @@ -164,61 +190,216 @@ pub fn apply_caves_to(canvas: &mut Canvas, rng: &mut impl Rng) { if canvas .get(Vec3::new(wpos2d.x, wpos2d.y, cave_roof)) .is_filled() + && stalagtite_condition { for z in cave_roof - stalagtites..cave_roof { canvas.set( Vec3::new(wpos2d.x, wpos2d.y, z), Block::new( BlockKind::WeakRock, - info.index().colors.layer.stalagtite.into(), + noisy_color(info.index().colors.layer.stalagtite.into(), 8), ), ); } } - let cave_depth = (col.alt - cave.alt).max(0.0); - let difficulty = cave_depth / 100.0; + let ground_colors = if cave_roof - cave_base > 23 { + noisy_color(info.index().colors.layer.cave_floor.into(), 8) + } else { + noisy_color(info.index().colors.layer.dirt.into(), 8) + }; + + //make pits + for z in cave_base - pit_depth..cave_base { + if pit_condition && (cave_roof - cave_base) > 10 { + canvas.set( + Vec3::new(wpos2d.x, wpos2d.y, z), + Block::new( + BlockKind::Air, + noisy_color(info.index().colors.layer.scaffold.into(), 8), + ), + ); + } + } + //fill bottom of pits + for z in cave_base - pit_depth + ..cave_base - pit_depth + ((cave_x.powf(4.0) * pit_depth as f32 + 3.0) as i32) + 1 + { + if (cave_roof - cave_base) > 10 && pit_condition { + canvas.set( + Vec3::new(wpos2d.x, wpos2d.y, z), + Block::new(BlockKind::WeakRock, ground_colors), + ); + } + } + //empty veins + for z in cave_base - vein_dist..cave_base { + if vein_condition { + canvas.set( + Vec3::new(wpos2d.x, wpos2d.y, z), + Block::new( + BlockKind::Air, + noisy_color(info.index().colors.layer.scaffold.into(), 8), + ), + ); + } + } + + //fill veins except bottom later + for z in cave_base - vein_dist + 1..cave_base { + if vein_condition { + canvas.set( + Vec3::new(wpos2d.x, wpos2d.y, z), + Block::new( + BlockKind::WeakRock, + noisy_color(info.index().colors.layer.vein.into(), 8), + ), + ); + } + } + //fill some of bottom + for z in cave_base - vein_dist..cave_base - vein_dist + 1 { + if rng.gen::() < 0.5 && vein_condition { + canvas.set( + Vec3::new(wpos2d.x, wpos2d.y, z), + Block::new( + BlockKind::WeakRock, + noisy_color(info.index().colors.layer.vein.into(), 8), + ), + ); + } + } + if vein_condition && cave_base < surface_z as i32 - 25 { + let kind = *Lottery::::load_expect("common.cave_scatter.deep_floor") + .read() + .choose(); + canvas.map(Vec3::new(wpos2d.x, wpos2d.y, vein_floor), |block| { + block.with_sprite(kind) + }); + } + + //fill normal floor + for z in cave_base..cave_base + 1 { + if cave_depth > 15.0 + && (cave_roof - cave_base) > 10 + && !pit_condition + && !vein_condition + { + canvas.set( + Vec3::new(wpos2d.x, wpos2d.y, z), + Block::new(BlockKind::WeakRock, ground_colors), + ); + } + } + //fill roof + for z in cave_roof - 1..cave_roof { + if cave_depth > 30.0 && (cave_roof - cave_base) > 10 { + canvas.set( + Vec3::new(wpos2d.x, wpos2d.y, z), + Block::new( + BlockKind::WeakRock, + noisy_color(info.index().colors.layer.cave_roof.into(), 8), + ), + ); + } + } + //add ridges + for z in cave_roof - 4..cave_roof { + if cave_depth > 50.0 && ridge_condition && (cave_roof - cave_base) > 10 { + canvas.set( + Vec3::new(wpos2d.x, wpos2d.y, z), + Block::new( + BlockKind::WeakRock, + noisy_color(info.index().colors.layer.scaffold.into(), 8), + ), + ); + } + } + + let cave_roof_adjusted = if (cave_roof - cave_base) > 10 { + cave_roof - 1 + } else { + cave_roof + }; + + let cave_floor_adjusted = if (cave_roof - cave_base) > 10 { + cave_base + 1 - floor_dist + } else { + cave_base - floor_dist + }; // Scatter things in caves - if difficulty.round() < 2.0 { + if cave_depth < 80.0 { if rng.gen::() - < 0.75 * (difficulty / 2.0).powf(2.5) * (cave_x.max(0.5).powf(4.0)) - && cave_base < surface_z as i32 - 25 + < 0.3 * (difficulty / 3.0).powf(2.5) * (cave_x.max(0.5).powf(4.0)) + && !vein_condition { - let kind = *Lottery::::load_expect("common.cave_scatter.shallow") - .read() - .choose(); - canvas.map(Vec3::new(wpos2d.x, wpos2d.y, cave_base), |block| { - block.with_sprite(kind) - }); - let kind2 = *Lottery::::load_expect("common.cave_scatter.shallow") - .read() - .choose(); - canvas.map(Vec3::new(wpos2d.x, wpos2d.y, cave_roof - 1), |block| { - block.with_sprite(kind2) - }); + let kind = + *Lottery::::load_expect("common.cave_scatter.deep_floor") + .read() + .choose(); + canvas.map( + Vec3::new(wpos2d.x, wpos2d.y, cave_floor_adjusted), + |block| block.with_sprite(kind), + ); + } + if rng.gen::() < 0.3 * (difficulty / 3.0).powf(2.5) && !ridge_condition { + let kind = + *Lottery::::load_expect("common.cave_scatter.shallow_ceiling") + .read() + .choose(); + canvas.map( + Vec3::new(wpos2d.x, wpos2d.y, cave_roof_adjusted - 1), + |block| block.with_sprite(kind), + ); + } + } else if cave_depth < 150.0 { + if rng.gen::() + < 0.3 * (difficulty / 3.0).powf(2.5) * (cave_x.max(0.5).powf(4.0)) + && !vein_condition + { + let kind = + *Lottery::::load_expect("common.cave_scatter.deep_floor") + .read() + .choose(); + canvas.map( + Vec3::new(wpos2d.x, wpos2d.y, cave_floor_adjusted), + |block| block.with_sprite(kind), + ); + } + if rng.gen::() < 0.3 * (difficulty / 3.0).powf(2.5) && !ridge_condition { + let kind = + *Lottery::::load_expect("common.cave_scatter.deep_ceiling") + .read() + .choose(); + canvas.map( + Vec3::new(wpos2d.x, wpos2d.y, cave_roof_adjusted - 1), + |block| block.with_sprite(kind), + ); } } else { if rng.gen::() < 0.3 * (difficulty / 3.0).powf(2.5) * (cave_x.max(0.5).powf(4.0)) - && cave_base < surface_z as i32 - 25 + && !vein_condition { - let kind = *Lottery::::load_expect("common.cave_scatter.deep") - .read() - .choose(); - canvas.map(Vec3::new(wpos2d.x, wpos2d.y, cave_base), |block| { - block.with_sprite(kind) - }); + let kind = + *Lottery::::load_expect("common.cave_scatter.shallow_floor") + .read() + .choose(); + canvas.map( + Vec3::new(wpos2d.x, wpos2d.y, cave_floor_adjusted), + |block| block.with_sprite(kind), + ); } - if rng.gen::() < 0.3 * (difficulty / 3.0).powf(2.5) - && cave_base < surface_z as i32 - 25 - { - let kind = *Lottery::::load_expect("common.cave_scatter.deep") - .read() - .choose(); - canvas.map(Vec3::new(wpos2d.x, wpos2d.y, cave_roof - 1), |block| { - block.with_sprite(kind) - }); + if rng.gen::() < 0.3 * (difficulty / 3.0).powf(2.5) && !ridge_condition { + let kind = + *Lottery::::load_expect("common.cave_scatter.shallow_ceiling") + .read() + .choose(); + canvas.map( + Vec3::new(wpos2d.x, wpos2d.y, cave_roof_adjusted - 1), + |block| block.with_sprite(kind), + ); } }; } @@ -260,7 +441,7 @@ pub fn apply_caves_supplement<'a>( // Abs units let cave_base = (cave.alt + cave_floor) as i32; - let cave_depth = (col_sample.alt - cave.alt).max(0.0); + let cave_depth = (col_sample.alt - cave.alt).max(0.0); //slightly different from earlier cave depth? let difficulty = cave_depth / 50.0; // Scatter things in caves @@ -273,49 +454,44 @@ pub fn apply_caves_supplement<'a>( wpos2d.y as f32, cave_base as f32, )) - .with_body(match difficulty.round() as i32 { - 0 | 1 | 2 => { - is_hostile = false; - let species = match dynamic_rng.gen_range(0..4) { - 0 => comp::quadruped_small::Species::Truffler, - 1 => comp::quadruped_small::Species::Dodarock, - 2 => comp::quadruped_small::Species::Holladon, - _ => comp::quadruped_small::Species::Batfox, - }; - comp::quadruped_small::Body::random_with(dynamic_rng, &species).into() - }, - 3 => { - is_hostile = true; - let species = match dynamic_rng.gen_range(0..3) { - 0 => comp::quadruped_low::Species::Rocksnapper, - 1 => comp::quadruped_low::Species::Salamander, - _ => comp::quadruped_low::Species::Asp, - }; - comp::quadruped_low::Body::random_with(dynamic_rng, &species).into() - }, - 4 => { - is_hostile = true; - let species = match dynamic_rng.gen_range(0..3) { - 0 => comp::quadruped_low::Species::Rocksnapper, - 1 => comp::quadruped_low::Species::Lavadrake, - _ => comp::quadruped_low::Species::Basilisk, - }; - comp::quadruped_low::Body::random_with(dynamic_rng, &species).into() - }, - _ => { - is_hostile = true; - let species = match dynamic_rng.gen_range(0..5) { - 0 => comp::biped_large::Species::Ogre, - 1 => comp::biped_large::Species::Cyclops, - 2 => comp::biped_large::Species::Wendigo, - 3 => match dynamic_rng.gen_range(0..2) { - 0 => comp::biped_large::Species::Blueoni, - _ => comp::biped_large::Species::Redoni, - }, - _ => comp::biped_large::Species::Troll, - }; - comp::biped_large::Body::random_with(dynamic_rng, &species).into() - }, + .with_body(if cave_depth < 80.0 { + is_hostile = false; + let species = match dynamic_rng.gen_range(0..4) { + 0 => comp::quadruped_small::Species::Truffler, + 1 => comp::quadruped_small::Species::Dodarock, + 2 => comp::quadruped_small::Species::Holladon, + _ => comp::quadruped_small::Species::Batfox, + }; + comp::quadruped_small::Body::random_with(dynamic_rng, &species).into() + } else if cave_depth < 130.0 { + is_hostile = true; + let species = match dynamic_rng.gen_range(0..3) { + 0 => comp::quadruped_low::Species::Rocksnapper, + 1 => comp::quadruped_low::Species::Salamander, + _ => comp::quadruped_low::Species::Asp, + }; + comp::quadruped_low::Body::random_with(dynamic_rng, &species).into() + } else if cave_depth < 250.0 { + is_hostile = true; + let species = match dynamic_rng.gen_range(0..3) { + 0 => comp::quadruped_low::Species::Rocksnapper, + 1 => comp::quadruped_low::Species::Lavadrake, + _ => comp::quadruped_low::Species::Basilisk, + }; + comp::quadruped_low::Body::random_with(dynamic_rng, &species).into() + } else { + is_hostile = true; + let species = match dynamic_rng.gen_range(0..5) { + 0 => comp::biped_large::Species::Ogre, + 1 => comp::biped_large::Species::Cyclops, + 2 => comp::biped_large::Species::Wendigo, + 3 => match dynamic_rng.gen_range(0..2) { + 0 => comp::biped_large::Species::Blueoni, + _ => comp::biped_large::Species::Redoni, + }, + _ => comp::biped_large::Species::Troll, + }; + comp::biped_large::Body::random_with(dynamic_rng, &species).into() }) .with_alignment(if is_hostile { comp::Alignment::Enemy @@ -397,10 +573,7 @@ pub fn apply_coral_to(canvas: &mut Canvas) { }); if is_coral { - let _ = canvas.set( - wpos, - Block::new(BlockKind::WeakRock, Rgb::new(170, 220, 210)), - ); + let _ = canvas.set(wpos, Block::new(BlockKind::Rock, Rgb::new(170, 220, 210))); } } }); diff --git a/world/src/layer/scatter.rs b/world/src/layer/scatter.rs index a71b3f30a7..9bbfb0593d 100644 --- a/world/src/layer/scatter.rs +++ b/world/src/layer/scatter.rs @@ -163,7 +163,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { ((c.rockiness - 0.5).max(0.025) * 1.0e-3, None) }), (Copper, false, |c, _| { - ((c.rockiness - 0.5).max(0.025) * 1.5e-3, None) + ((c.rockiness - 0.1).max(0.025) * 1.5e-3, None) }), (Tin, false, |c, _| { ((c.rockiness - 0.5).max(0.025) * 1.5e-3, None) @@ -283,7 +283,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) { }), (Pyrebloom, false, |c, _| { ( - close(c.temp, 1.0, 0.95).min(close(c.humidity, 0.0, 0.3)) * MUSH_FACT * 0.75, + close(c.temp, 1.0, 0.95).min(close(c.humidity, 0.0, 0.3)) * MUSH_FACT * 0.35, None, ) }), diff --git a/world/src/site/dungeon/mod.rs b/world/src/site/dungeon/mod.rs index 55cd251541..1c0710e071 100644 --- a/world/src/site/dungeon/mod.rs +++ b/world/src/site/dungeon/mod.rs @@ -1224,7 +1224,7 @@ fn mini_boss_1(dynamic_rng: &mut impl Rng, tile_wcenter: Vec3) -> Vec) -> Vec { - let chosen = Lottery::::load_expect("common.loot_tables.creature.quad_low.default"); + let chosen = Lottery::::load_expect("common.loot_tables.creature.quad_low.fanged"); let mut entities = Vec::new(); entities.resize_with(6, || { EntityInfo::at(tile_wcenter.map(|e| e as f32)) @@ -1242,7 +1242,7 @@ fn mini_boss_2(dynamic_rng: &mut impl Rng, tile_wcenter: Vec3) -> Vec) -> Vec { let chosen = - Lottery::::load_expect("common.loot_tables.creature.quad_medium.default"); + Lottery::::load_expect("common.loot_tables.creature.quad_medium.carapace"); let mut entities = Vec::new(); entities.resize_with(3, || { EntityInfo::at(tile_wcenter.map(|e| e as f32))