From e9c2f96679d9df00cf7794abe4a9b856593b57eb Mon Sep 17 00:00:00 2001 From: Monty Marz Date: Tue, 18 Aug 2020 23:32:34 +0200 Subject: [PATCH] fix tooltips in char selection, more balancing fix talking animals fix critter exp, stronger villagers biped large balancing more villager balancing, mushroom spawning rate more balancing fix rebase multiple loottables Add tarasque and bonerattler armour Added loot tables for different groups of weapons and armor based off relative strength. Added loot table for cultist boss. Added loot tables for consumables and food. Trimmed down default loot table. remove male and female sign from char creation chest loot tables fix loot tables lootable crates lantern keybinding display more loot tables loot table changes fixed loot tables fix typo more grass rebase fix, better lantern re-add sprite rotation for grass crafting window alignment fix, new streetlamps, new shopsigns, new healing staff height change --- .../common/items/armor/belt/bonerattler.ron | 12 + assets/common/items/armor/belt/tarasque.ron | 12 + .../common/items/armor/chest/bonerattler.ron | 12 + assets/common/items/armor/chest/tarasque.ron | 12 + .../common/items/armor/foot/bonerattler.ron | 12 + assets/common/items/armor/foot/tarasque.ron | 12 + .../common/items/armor/hand/bonerattler.ron | 12 + assets/common/items/armor/hand/tarasque.ron | 12 + assets/common/items/armor/neck/neck_0.ron | 2 +- assets/common/items/armor/neck/neck_1.ron | 2 +- .../common/items/armor/pants/bonerattler.ron | 12 + assets/common/items/armor/pants/tarasque.ron | 12 + .../items/armor/shoulder/bonerattler.ron | 12 + .../common/items/armor/shoulder/tarasque.ron | 12 + .../items/debug/cultist_purp_2h_boss-0.ron | 13 + assets/common/items/lantern/black_0.ron | 2 +- .../items/npc_armor/chest/worker_green_0.ron | 12 + .../items/npc_armor/chest/worker_green_1.ron | 12 + .../items/npc_armor/chest/worker_orange_0.ron | 12 + .../items/npc_armor/chest/worker_orange_1.ron | 12 + .../items/npc_armor/chest/worker_purple_0.ron | 12 + .../items/npc_armor/chest/worker_purple_1.ron | 12 + .../items/npc_armor/chest/worker_red_0.ron | 12 + .../items/npc_armor/chest/worker_red_1.ron | 12 + .../items/npc_armor/chest/worker_yellow_0.ron | 12 + .../items/npc_armor/chest/worker_yellow_1.ron | 12 + .../common/items/npc_weapons/tool/broom.ron | 2 +- .../items/npc_weapons/tool/fishing_rod.ron | 2 +- assets/common/items/npc_weapons/tool/hoe.ron | 2 +- .../common/items/npc_weapons/tool/pickaxe.ron | 2 +- .../items/npc_weapons/tool/pitchfork.ron | 2 +- assets/common/items/npc_weapons/tool/rake.ron | 2 +- .../items/npc_weapons/tool/shovel-0.ron | 2 +- .../items/npc_weapons/tool/shovel-1.ron | 2 +- .../weapons/staff/sceptre_velorite_0.ron | 13 + assets/common/loot_table.ron | 234 ------------------ assets/common/loot_tables/loot_table.ron | 4 + .../loot_tables/loot_table_animal_parts.ron | 3 + .../loot_tables/loot_table_armor_cloth.ron | 38 +++ .../loot_tables/loot_table_armor_heavy.ron | 21 ++ .../loot_tables/loot_table_armor_light.ron | 27 ++ .../loot_tables/loot_table_armor_misc.ron | 10 + .../loot_tables/loot_table_armor_nature.ron | 32 +++ .../loot_table_boss_cultist-leader.ron | 18 ++ .../loot_tables/loot_table_consumables.ron | 14 ++ .../loot_tables/loot_table_crafting.ron | 7 + assets/common/loot_tables/loot_table_food.ron | 11 + .../loot_tables/loot_table_humanoids.ron | 25 ++ .../common/loot_tables/loot_table_rocks.ron | 6 + .../loot_tables/loot_table_villager.ron | 37 +++ .../loot_tables/loot_table_weapon_common.ron | 43 ++++ .../loot_tables/loot_table_weapon_rare.ron | 33 +++ .../loot_table_weapon_uncommon.ron | 68 +++++ assets/common/recipe_book.ron | 1 + assets/voxygen/element/frames/banner_bot.png | Bin 0 -> 1638 bytes assets/voxygen/element/icons/female.png | Bin 19028 -> 0 bytes .../voxygen/element/icons/item_leather1.png | Bin 0 -> 1739 bytes assets/voxygen/element/icons/male.png | Bin 18428 -> 0 bytes assets/voxygen/i18n/de_DE.ron | 3 +- assets/voxygen/i18n/en.ron | 3 +- assets/voxygen/item_image_manifest.ron | 54 ++++ .../voxygen/voxel/armor/belt/bonerattler.vox | Bin 0 -> 1460 bytes assets/voxygen/voxel/armor/belt/tarasque.vox | Bin 0 -> 1472 bytes .../voxygen/voxel/armor/chest/bonerattler.vox | Bin 0 -> 2624 bytes assets/voxygen/voxel/armor/chest/tarasque.vox | Bin 0 -> 2944 bytes .../voxygen/voxel/armor/foot/bonerattler.vox | Bin 0 -> 1480 bytes assets/voxygen/voxel/armor/foot/tarasque.vox | Bin 0 -> 1480 bytes .../voxel/armor/hand/bonerattler_left.vox | Bin 0 -> 1240 bytes .../voxel/armor/hand/bonerattler_right.vox | Bin 0 -> 1240 bytes .../voxel/armor/hand/tarasque_left.vox | Bin 0 -> 55771 bytes .../voxel/armor/hand/tarasque_right.vox | Bin 0 -> 1288 bytes .../voxygen/voxel/armor/pants/bonerattler.vox | Bin 0 -> 1896 bytes assets/voxygen/voxel/armor/pants/tarasque.vox | Bin 0 -> 2008 bytes .../voxel/armor/shoulder/bonerattler_left.vox | Bin 0 -> 1388 bytes .../armor/shoulder/bonerattler_right.vox | Bin 0 -> 1388 bytes .../voxel/armor/shoulder/tarasque_left.vox | Bin 0 -> 55999 bytes .../voxel/armor/shoulder/tarasque_right.vox | Bin 0 -> 1516 bytes .../voxel/humanoid_armor_belt_manifest.ron | 8 + .../voxel/humanoid_armor_chest_manifest.ron | 8 + .../voxel/humanoid_armor_foot_manifest.ron | 8 + .../voxel/humanoid_armor_hand_manifest.ron | 20 ++ .../voxel/humanoid_armor_pants_manifest.ron | 8 + .../humanoid_armor_shoulder_manifest.ron | 24 +- .../voxel/humanoid_main_weapon_manifest.ron | 6 +- .../voxel/sprite/furniture/hanging_sign-0.vox | Bin 4484 -> 2832 bytes .../voxygen/voxel/sprite/misc/street_lamp.vox | Bin 4776 -> 3608 bytes .../voxygen/voxel/weapon/staff/ore-nature.vox | Bin 0 -> 1680 bytes .../voxel/weapon/staff/wood-nature.vox | Bin 1448 -> 1680 bytes common/src/comp/body.rs | 84 +++---- common/src/comp/inventory/item/mod.rs | 24 +- common/src/comp/inventory/item/tool.rs | 23 +- common/src/lottery.rs | 2 +- common/src/terrain/block.rs | 4 +- server/src/events/entity_manipulation.rs | 176 ++++++++++++- server/src/sys/terrain.rs | 32 ++- voxygen/src/hud/crafting.rs | 19 +- voxygen/src/hud/mod.rs | 59 ++++- voxygen/src/hud/overhead.rs | 6 +- voxygen/src/hud/skillbar.rs | 8 + voxygen/src/menu/char_selection/ui.rs | 86 ++++--- voxygen/src/scene/terrain.rs | 2 +- voxygen/src/session.rs | 2 +- world/src/layer/mod.rs | 55 ++-- world/src/lib.rs | 1 + world/src/site/dungeon/mod.rs | 52 +--- .../settlement/building/archetype/house.rs | 9 +- 106 files changed, 1275 insertions(+), 455 deletions(-) create mode 100644 assets/common/items/armor/belt/bonerattler.ron create mode 100644 assets/common/items/armor/belt/tarasque.ron create mode 100644 assets/common/items/armor/chest/bonerattler.ron create mode 100644 assets/common/items/armor/chest/tarasque.ron create mode 100644 assets/common/items/armor/foot/bonerattler.ron create mode 100644 assets/common/items/armor/foot/tarasque.ron create mode 100644 assets/common/items/armor/hand/bonerattler.ron create mode 100644 assets/common/items/armor/hand/tarasque.ron create mode 100644 assets/common/items/armor/pants/bonerattler.ron create mode 100644 assets/common/items/armor/pants/tarasque.ron create mode 100644 assets/common/items/armor/shoulder/bonerattler.ron create mode 100644 assets/common/items/armor/shoulder/tarasque.ron create mode 100644 assets/common/items/debug/cultist_purp_2h_boss-0.ron create mode 100644 assets/common/items/npc_armor/chest/worker_green_0.ron create mode 100644 assets/common/items/npc_armor/chest/worker_green_1.ron create mode 100644 assets/common/items/npc_armor/chest/worker_orange_0.ron create mode 100644 assets/common/items/npc_armor/chest/worker_orange_1.ron create mode 100644 assets/common/items/npc_armor/chest/worker_purple_0.ron create mode 100644 assets/common/items/npc_armor/chest/worker_purple_1.ron create mode 100644 assets/common/items/npc_armor/chest/worker_red_0.ron create mode 100644 assets/common/items/npc_armor/chest/worker_red_1.ron create mode 100644 assets/common/items/npc_armor/chest/worker_yellow_0.ron create mode 100644 assets/common/items/npc_armor/chest/worker_yellow_1.ron create mode 100644 assets/common/items/weapons/staff/sceptre_velorite_0.ron delete mode 100644 assets/common/loot_table.ron create mode 100644 assets/common/loot_tables/loot_table.ron create mode 100644 assets/common/loot_tables/loot_table_animal_parts.ron create mode 100644 assets/common/loot_tables/loot_table_armor_cloth.ron create mode 100644 assets/common/loot_tables/loot_table_armor_heavy.ron create mode 100644 assets/common/loot_tables/loot_table_armor_light.ron create mode 100644 assets/common/loot_tables/loot_table_armor_misc.ron create mode 100644 assets/common/loot_tables/loot_table_armor_nature.ron create mode 100644 assets/common/loot_tables/loot_table_boss_cultist-leader.ron create mode 100644 assets/common/loot_tables/loot_table_consumables.ron create mode 100644 assets/common/loot_tables/loot_table_crafting.ron create mode 100644 assets/common/loot_tables/loot_table_food.ron create mode 100644 assets/common/loot_tables/loot_table_humanoids.ron create mode 100644 assets/common/loot_tables/loot_table_rocks.ron create mode 100644 assets/common/loot_tables/loot_table_villager.ron create mode 100644 assets/common/loot_tables/loot_table_weapon_common.ron create mode 100644 assets/common/loot_tables/loot_table_weapon_rare.ron create mode 100644 assets/common/loot_tables/loot_table_weapon_uncommon.ron create mode 100644 assets/voxygen/element/frames/banner_bot.png delete mode 100644 assets/voxygen/element/icons/female.png create mode 100644 assets/voxygen/element/icons/item_leather1.png delete mode 100644 assets/voxygen/element/icons/male.png create mode 100644 assets/voxygen/voxel/armor/belt/bonerattler.vox create mode 100644 assets/voxygen/voxel/armor/belt/tarasque.vox create mode 100644 assets/voxygen/voxel/armor/chest/bonerattler.vox create mode 100644 assets/voxygen/voxel/armor/chest/tarasque.vox create mode 100644 assets/voxygen/voxel/armor/foot/bonerattler.vox create mode 100644 assets/voxygen/voxel/armor/foot/tarasque.vox create mode 100644 assets/voxygen/voxel/armor/hand/bonerattler_left.vox create mode 100644 assets/voxygen/voxel/armor/hand/bonerattler_right.vox create mode 100644 assets/voxygen/voxel/armor/hand/tarasque_left.vox create mode 100644 assets/voxygen/voxel/armor/hand/tarasque_right.vox create mode 100644 assets/voxygen/voxel/armor/pants/bonerattler.vox create mode 100644 assets/voxygen/voxel/armor/pants/tarasque.vox create mode 100644 assets/voxygen/voxel/armor/shoulder/bonerattler_left.vox create mode 100644 assets/voxygen/voxel/armor/shoulder/bonerattler_right.vox create mode 100644 assets/voxygen/voxel/armor/shoulder/tarasque_left.vox create mode 100644 assets/voxygen/voxel/armor/shoulder/tarasque_right.vox create mode 100644 assets/voxygen/voxel/weapon/staff/ore-nature.vox diff --git a/assets/common/items/armor/belt/bonerattler.ron b/assets/common/items/armor/belt/bonerattler.ron new file mode 100644 index 0000000000..808e808942 --- /dev/null +++ b/assets/common/items/armor/belt/bonerattler.ron @@ -0,0 +1,12 @@ +Item( + name: "Bonerattler Belt", + description: "Made from the strongest bones.", + kind: Armor( + ( + kind: Belt("Bonerattler"), + stats: ( + protection: Normal(0.0), + ), + ) + ), +) diff --git a/assets/common/items/armor/belt/tarasque.ron b/assets/common/items/armor/belt/tarasque.ron new file mode 100644 index 0000000000..848722dd4a --- /dev/null +++ b/assets/common/items/armor/belt/tarasque.ron @@ -0,0 +1,12 @@ +Item( + name: "Tarasque Belt", + description: "As strong as a tarasque shell.", + kind: Armor( + ( + kind: Belt("Tarasque"), + stats: ( + protection: Normal(0.0), + ), + ) + ), +) diff --git a/assets/common/items/armor/chest/bonerattler.ron b/assets/common/items/armor/chest/bonerattler.ron new file mode 100644 index 0000000000..ddc4e00e75 --- /dev/null +++ b/assets/common/items/armor/chest/bonerattler.ron @@ -0,0 +1,12 @@ +Item( + name: "Bonerattler Cuirass", + description: "Made from the strongest bones.", + kind: Armor( + ( + kind: Chest("Bonerattler"), + stats: ( + protection: Normal(25.0), + ), + ) + ), +) \ No newline at end of file diff --git a/assets/common/items/armor/chest/tarasque.ron b/assets/common/items/armor/chest/tarasque.ron new file mode 100644 index 0000000000..ef73a183e7 --- /dev/null +++ b/assets/common/items/armor/chest/tarasque.ron @@ -0,0 +1,12 @@ +Item( + name: "Tarasque Cuirass", + description: "As strong as a tarasque shell.", + kind: Armor( + ( + kind: Chest("Tarasque"), + stats: ( + protection: Normal(25.0), + ), + ) + ), +) \ No newline at end of file diff --git a/assets/common/items/armor/foot/bonerattler.ron b/assets/common/items/armor/foot/bonerattler.ron new file mode 100644 index 0000000000..8226749815 --- /dev/null +++ b/assets/common/items/armor/foot/bonerattler.ron @@ -0,0 +1,12 @@ +Item( + name: "Bonerattler Boots", + description: "Made from the strongest bones.", + kind: Armor( + ( + kind: Foot("Bonerattler"), + stats: ( + protection: Normal(5.0), + ), + ) + ), +) diff --git a/assets/common/items/armor/foot/tarasque.ron b/assets/common/items/armor/foot/tarasque.ron new file mode 100644 index 0000000000..11ad855d63 --- /dev/null +++ b/assets/common/items/armor/foot/tarasque.ron @@ -0,0 +1,12 @@ +Item( + name: "Tarasque Boots", + description: "As strong as a tarasque shell.", + kind: Armor( + ( + kind: Foot("Tarasque"), + stats: ( + protection: Normal(5.0), + ), + ) + ), +) diff --git a/assets/common/items/armor/hand/bonerattler.ron b/assets/common/items/armor/hand/bonerattler.ron new file mode 100644 index 0000000000..46d6816db8 --- /dev/null +++ b/assets/common/items/armor/hand/bonerattler.ron @@ -0,0 +1,12 @@ +Item( + name: "Bonerattler Gauntlets", + description: "Made from the strongest bones.", + kind: Armor( + ( + kind: Hand("Bonerattler"), + stats: ( + protection: Normal(10.0), + ), + ) + ), +) diff --git a/assets/common/items/armor/hand/tarasque.ron b/assets/common/items/armor/hand/tarasque.ron new file mode 100644 index 0000000000..b45f0e558a --- /dev/null +++ b/assets/common/items/armor/hand/tarasque.ron @@ -0,0 +1,12 @@ +Item( + name: "Tarasque Gauntlets", + description: "As strong as a tarasque shell.", + kind: Armor( + ( + kind: Hand("Tarasque"), + stats: ( + protection: Normal(10.0), + ), + ) + ), +) diff --git a/assets/common/items/armor/neck/neck_0.ron b/assets/common/items/armor/neck/neck_0.ron index cf50e006c7..12c315a85a 100644 --- a/assets/common/items/armor/neck/neck_0.ron +++ b/assets/common/items/armor/neck/neck_0.ron @@ -5,7 +5,7 @@ Item( ( kind: Neck("Neck0"), stats: ( - protection: Normal(0.5), + protection: Normal(1.0), ), ) ), diff --git a/assets/common/items/armor/neck/neck_1.ron b/assets/common/items/armor/neck/neck_1.ron index e650268c91..a6b3f8d919 100644 --- a/assets/common/items/armor/neck/neck_1.ron +++ b/assets/common/items/armor/neck/neck_1.ron @@ -5,7 +5,7 @@ Item( ( kind: Neck("Neck1"), stats: ( - protection: Normal(1.0), + protection: Normal(2.0), ), ) ), diff --git a/assets/common/items/armor/pants/bonerattler.ron b/assets/common/items/armor/pants/bonerattler.ron new file mode 100644 index 0000000000..17dcc30fe5 --- /dev/null +++ b/assets/common/items/armor/pants/bonerattler.ron @@ -0,0 +1,12 @@ +Item( + name: "Bonerattler Chausses", + description: "Made from the strongest bones.", + kind: Armor( + ( + kind: Pants("Bonerattler"), + stats: ( + protection: Normal(20.0), + ), + ) + ), +) diff --git a/assets/common/items/armor/pants/tarasque.ron b/assets/common/items/armor/pants/tarasque.ron new file mode 100644 index 0000000000..12e61dc342 --- /dev/null +++ b/assets/common/items/armor/pants/tarasque.ron @@ -0,0 +1,12 @@ +Item( + name: "Tarasque Chausses", + description: "As strong as a tarasque shell.", + kind: Armor( + ( + kind: Pants("Tarasque"), + stats: ( + protection: Normal(20.0), + ), + ) + ), +) diff --git a/assets/common/items/armor/shoulder/bonerattler.ron b/assets/common/items/armor/shoulder/bonerattler.ron new file mode 100644 index 0000000000..892e762b45 --- /dev/null +++ b/assets/common/items/armor/shoulder/bonerattler.ron @@ -0,0 +1,12 @@ +Item( + name: "Bonerattler Shoulder Pad", + description: "Made from the strongest bones.", + kind: Armor( + ( + kind: Shoulder("Bonerattler"), + stats: ( + protection: Normal(15.0), + ), + ) + ), +) diff --git a/assets/common/items/armor/shoulder/tarasque.ron b/assets/common/items/armor/shoulder/tarasque.ron new file mode 100644 index 0000000000..8afbfb9fcf --- /dev/null +++ b/assets/common/items/armor/shoulder/tarasque.ron @@ -0,0 +1,12 @@ +Item( + name: "Tarasque Shoulder Pad", + description: "As strong as a tarasque shell.", + kind: Armor( + ( + kind: Shoulder("Tarasque"), + stats: ( + protection: Normal(15.0), + ), + ) + ), +) diff --git a/assets/common/items/debug/cultist_purp_2h_boss-0.ron b/assets/common/items/debug/cultist_purp_2h_boss-0.ron new file mode 100644 index 0000000000..bdae5745c0 --- /dev/null +++ b/assets/common/items/debug/cultist_purp_2h_boss-0.ron @@ -0,0 +1,13 @@ +Item( + name: "Admin Greatsword", + description: "Shouldn't this be a hammer?", + kind: Tool( + ( + kind: Sword("CultPurp0"), + stats: ( + equip_time_millis: 0, + power: 1000.0, + ), + ) + ), +) diff --git a/assets/common/items/lantern/black_0.ron b/assets/common/items/lantern/black_0.ron index 1b948eca89..f3bb7974e1 100644 --- a/assets/common/items/lantern/black_0.ron +++ b/assets/common/items/lantern/black_0.ron @@ -4,7 +4,7 @@ Item( kind: Lantern( ( kind: "Black0", - color: (r: 255, g: 190, b: 75), + color: (r: 166, g: 100, b: 0), strength_thousandths: 3000, flicker_thousandths: 300, ), diff --git a/assets/common/items/npc_armor/chest/worker_green_0.ron b/assets/common/items/npc_armor/chest/worker_green_0.ron new file mode 100644 index 0000000000..fa343fddb7 --- /dev/null +++ b/assets/common/items/npc_armor/chest/worker_green_0.ron @@ -0,0 +1,12 @@ +Item( + name: "Green Worker Shirt", + description: "Was used by a farmer, until recently.", + kind: Armor( + ( + kind: Chest("WorkerGreen0"), + stats: ( + protection: Normal(80.0), + ), + ) + ), +) diff --git a/assets/common/items/npc_armor/chest/worker_green_1.ron b/assets/common/items/npc_armor/chest/worker_green_1.ron new file mode 100644 index 0000000000..23b84137cf --- /dev/null +++ b/assets/common/items/npc_armor/chest/worker_green_1.ron @@ -0,0 +1,12 @@ +Item( + name: "Green Worker Shirt", + description: "Was used by a farmer, until recently.", + kind: Armor( + ( + kind: Chest("WorkerGreen1"), + stats: ( + protection: Normal(80.0), + ), + ) + ), +) diff --git a/assets/common/items/npc_armor/chest/worker_orange_0.ron b/assets/common/items/npc_armor/chest/worker_orange_0.ron new file mode 100644 index 0000000000..bc07617dcf --- /dev/null +++ b/assets/common/items/npc_armor/chest/worker_orange_0.ron @@ -0,0 +1,12 @@ +Item( + name: "Orange Worker Shirt", + description: "Was used by a farmer, until recently.", + kind: Armor( + ( + kind: Chest("WorkerOrange0"), + stats: ( + protection: Normal(80.0), + ), + ) + ), +) diff --git a/assets/common/items/npc_armor/chest/worker_orange_1.ron b/assets/common/items/npc_armor/chest/worker_orange_1.ron new file mode 100644 index 0000000000..6c605d452c --- /dev/null +++ b/assets/common/items/npc_armor/chest/worker_orange_1.ron @@ -0,0 +1,12 @@ +Item( + name: "Orange Worker Shirt", + description: "Was used by a farmer, until recently.", + kind: Armor( + ( + kind: Chest("WorkerOrange1"), + stats: ( + protection: Normal(80.0), + ), + ) + ), +) diff --git a/assets/common/items/npc_armor/chest/worker_purple_0.ron b/assets/common/items/npc_armor/chest/worker_purple_0.ron new file mode 100644 index 0000000000..6a234e994e --- /dev/null +++ b/assets/common/items/npc_armor/chest/worker_purple_0.ron @@ -0,0 +1,12 @@ +Item( + name: "Purple Worker Shirt", + description: "Was used by a farmer, until recently.", + kind: Armor( + ( + kind: Chest("WorkerPurple0"), + stats: ( + protection: Normal(80.0), + ), + ) + ), +) diff --git a/assets/common/items/npc_armor/chest/worker_purple_1.ron b/assets/common/items/npc_armor/chest/worker_purple_1.ron new file mode 100644 index 0000000000..35bcc56647 --- /dev/null +++ b/assets/common/items/npc_armor/chest/worker_purple_1.ron @@ -0,0 +1,12 @@ +Item( + name: "Purple Worker Shirt", + description: "Was used by a farmer, until recently.", + kind: Armor( + ( + kind: Chest("WorkerPurple1"), + stats: ( + protection: Normal(80.0), + ), + ) + ), +) diff --git a/assets/common/items/npc_armor/chest/worker_red_0.ron b/assets/common/items/npc_armor/chest/worker_red_0.ron new file mode 100644 index 0000000000..bbee3cbc2a --- /dev/null +++ b/assets/common/items/npc_armor/chest/worker_red_0.ron @@ -0,0 +1,12 @@ +Item( + name: "Red Worker Shirt", + description: "Was used by a farmer, until recently.", + kind: Armor( + ( + kind: Chest("WorkerRed0"), + stats: ( + protection: Normal(80.0), + ), + ) + ), +) diff --git a/assets/common/items/npc_armor/chest/worker_red_1.ron b/assets/common/items/npc_armor/chest/worker_red_1.ron new file mode 100644 index 0000000000..4b0966ee51 --- /dev/null +++ b/assets/common/items/npc_armor/chest/worker_red_1.ron @@ -0,0 +1,12 @@ +Item( + name: "Red Worker Shirt", + description: "Was used by a farmer, until recently.", + kind: Armor( + ( + kind: Chest("WorkerRed1"), + stats: ( + protection: Normal(80.0), + ), + ) + ), +) diff --git a/assets/common/items/npc_armor/chest/worker_yellow_0.ron b/assets/common/items/npc_armor/chest/worker_yellow_0.ron new file mode 100644 index 0000000000..d59b94169c --- /dev/null +++ b/assets/common/items/npc_armor/chest/worker_yellow_0.ron @@ -0,0 +1,12 @@ +Item( + name: "Yellow Worker Shirt", + description: "Was used by a farmer, until recently.", + kind: Armor( + ( + kind: Chest("WorkerYellow0"), + stats: ( + protection: Normal(80.0), + ), + ) + ), +) diff --git a/assets/common/items/npc_armor/chest/worker_yellow_1.ron b/assets/common/items/npc_armor/chest/worker_yellow_1.ron new file mode 100644 index 0000000000..d8db355878 --- /dev/null +++ b/assets/common/items/npc_armor/chest/worker_yellow_1.ron @@ -0,0 +1,12 @@ +Item( + name: "Yellow Worker Shirt", + description: "Was used by a farmer, until recently.", + kind: Armor( + ( + kind: Chest("WorkerYellow1"), + stats: ( + protection: Normal(80.0), + ), + ) + ), +) diff --git a/assets/common/items/npc_weapons/tool/broom.ron b/assets/common/items/npc_weapons/tool/broom.ron index 9b62840b7e..dfb46a6da7 100644 --- a/assets/common/items/npc_weapons/tool/broom.ron +++ b/assets/common/items/npc_weapons/tool/broom.ron @@ -6,7 +6,7 @@ Item( kind: Farming("Broom"), stats: ( equip_time_millis: 400, - power: 0.5, + power: 1.5, ), ) ), diff --git a/assets/common/items/npc_weapons/tool/fishing_rod.ron b/assets/common/items/npc_weapons/tool/fishing_rod.ron index bf4b3a05c3..0768f74587 100644 --- a/assets/common/items/npc_weapons/tool/fishing_rod.ron +++ b/assets/common/items/npc_weapons/tool/fishing_rod.ron @@ -6,7 +6,7 @@ Item( kind: Farming("FishingRod0"), stats: ( equip_time_millis: 400, - power: 0.5, + power: 1.5, ), ) ), diff --git a/assets/common/items/npc_weapons/tool/hoe.ron b/assets/common/items/npc_weapons/tool/hoe.ron index 2f0ec0f257..7c66734bbf 100644 --- a/assets/common/items/npc_weapons/tool/hoe.ron +++ b/assets/common/items/npc_weapons/tool/hoe.ron @@ -6,7 +6,7 @@ Item( kind: Farming("Hoe0"), stats: ( equip_time_millis: 400, - power: 0.50, + power: 1.50, ), ) ), diff --git a/assets/common/items/npc_weapons/tool/pickaxe.ron b/assets/common/items/npc_weapons/tool/pickaxe.ron index e9ed64a5e4..303be8c20b 100644 --- a/assets/common/items/npc_weapons/tool/pickaxe.ron +++ b/assets/common/items/npc_weapons/tool/pickaxe.ron @@ -6,7 +6,7 @@ Item( kind: Farming("Pickaxe0"), stats: ( equip_time_millis: 400, - power: 0.50, + power: 1.50, ), ) ), diff --git a/assets/common/items/npc_weapons/tool/pitchfork.ron b/assets/common/items/npc_weapons/tool/pitchfork.ron index effc304483..3ddc68a41b 100644 --- a/assets/common/items/npc_weapons/tool/pitchfork.ron +++ b/assets/common/items/npc_weapons/tool/pitchfork.ron @@ -6,7 +6,7 @@ Item( kind: Farming("Pitchfork"), stats: ( equip_time_millis: 400, - power: 0.50, + power: 1.50, ), ) ), diff --git a/assets/common/items/npc_weapons/tool/rake.ron b/assets/common/items/npc_weapons/tool/rake.ron index 9430056099..774edea21e 100644 --- a/assets/common/items/npc_weapons/tool/rake.ron +++ b/assets/common/items/npc_weapons/tool/rake.ron @@ -6,7 +6,7 @@ Item( kind: Farming("Rake"), stats: ( equip_time_millis: 400, - power: 0.50, + power: 1.50, ), ) ), diff --git a/assets/common/items/npc_weapons/tool/shovel-0.ron b/assets/common/items/npc_weapons/tool/shovel-0.ron index 8814156245..77e7dc26eb 100644 --- a/assets/common/items/npc_weapons/tool/shovel-0.ron +++ b/assets/common/items/npc_weapons/tool/shovel-0.ron @@ -6,7 +6,7 @@ Item( kind: Farming("Shovel0"), stats: ( equip_time_millis: 400, - power: 0.50, + power: 1.50, ), ) ), diff --git a/assets/common/items/npc_weapons/tool/shovel-1.ron b/assets/common/items/npc_weapons/tool/shovel-1.ron index 01c8bbf3c1..ab4f5aae8f 100644 --- a/assets/common/items/npc_weapons/tool/shovel-1.ron +++ b/assets/common/items/npc_weapons/tool/shovel-1.ron @@ -6,7 +6,7 @@ Item( kind: Farming("Shovel1"), stats: ( equip_time_millis: 400, - power: 0.50, + power: 1.50, ), ) ), diff --git a/assets/common/items/weapons/staff/sceptre_velorite_0.ron b/assets/common/items/weapons/staff/sceptre_velorite_0.ron new file mode 100644 index 0000000000..dad5431206 --- /dev/null +++ b/assets/common/items/weapons/staff/sceptre_velorite_0.ron @@ -0,0 +1,13 @@ +Item( + name: "Velorite Sceptre", + description: "Heals your allies with the mystical Velorite aura.", + kind: Tool( + ( + kind: Staff("SceptreVelorite"), + stats: ( + equip_time_millis: 400, + power: 1.0, + ), + ) + ), +) diff --git a/assets/common/loot_table.ron b/assets/common/loot_table.ron deleted file mode 100644 index f0a98900c7..0000000000 --- a/assets/common/loot_table.ron +++ /dev/null @@ -1,234 +0,0 @@ -[ - // All loot rates go here - // food - (3, "common.items.food.cheese"), - (3, "common.items.food.apple"), - (3, "common.items.food.mushroom"), - (1, "common.items.food.coconut"), - // miscellaneous - (0.4, "common.items.ore.velorite"), - (0.6, "common.items.ore.veloritefrag"), - (0.1, "common.items.consumable.potion_minor"), - (0.01, "common.items.utility.collar"), - (0.01, "common.items.utility.bomb_pile"), - (0.1, "common.items.utility.bomb"), - // crafting ingredients - (2, "common.items.crafting_ing.leather_scraps"), - (1, "common.items.crafting_ing.empty_vial"), - // swords - (0.1, "common.items.weapons.sword.starter_sword"), - (0.1, "common.items.weapons.sword.wood_sword"), - (0.1, "common.items.weapons.sword.short_sword_0"), - (0.06, "common.items.weapons.sword.greatsword_2h_dam-0"), - (0.06, "common.items.weapons.sword.greatsword_2h_dam-1"), - (0.06, "common.items.weapons.sword.greatsword_2h_dam-2"), - (0.03, "common.items.weapons.sword.greatsword_2h_simple-0"), - (0.03, "common.items.weapons.sword.greatsword_2h_simple-1"), - (0.03, "common.items.weapons.sword.greatsword_2h_simple-2"), - (0.01, "common.items.weapons.sword.greatsword_2h_orn-0"), - (0.01, "common.items.weapons.sword.greatsword_2h_orn-1"), - (0.01, "common.items.weapons.sword.greatsword_2h_orn-2"), - (0.04, "common.items.weapons.sword.long_2h_dam-0"), - (0.04, "common.items.weapons.sword.long_2h_dam-1"), - (0.04, "common.items.weapons.sword.long_2h_dam-2"), - (0.04, "common.items.weapons.sword.long_2h_dam-3"), - (0.04, "common.items.weapons.sword.long_2h_dam-4"), - (0.04, "common.items.weapons.sword.long_2h_dam-5"), - (0.02, "common.items.weapons.sword.long_2h_simple-0"), - (0.02, "common.items.weapons.sword.long_2h_simple-1"), - (0.02, "common.items.weapons.sword.long_2h_simple-2"), - (0.02, "common.items.weapons.sword.long_2h_simple-3"), - (0.02, "common.items.weapons.sword.long_2h_simple-4"), - (0.02, "common.items.weapons.sword.long_2h_simple-5"), - (0.007, "common.items.weapons.sword.long_2h_orn-0"), - (0.007, "common.items.weapons.sword.long_2h_orn-1"), - (0.007, "common.items.weapons.sword.long_2h_orn-2"), - (0.007, "common.items.weapons.sword.long_2h_orn-3"), - (0.007, "common.items.weapons.sword.long_2h_orn-4"), - (0.007, "common.items.weapons.sword.long_2h_orn-5"), - (0.01, "common.items.weapons.sword.zweihander_sword_0"), - // axes - (0.10, "common.items.weapons.axe.starter_axe"), - (0.10, "common.items.weapons.axe.orc_axe-0"), - (0.04, "common.items.weapons.axe.worn_iron_axe-0"), - (0.04, "common.items.weapons.axe.worn_iron_axe-1"), - (0.04, "common.items.weapons.axe.worn_iron_axe-2"), - (0.04, "common.items.weapons.axe.worn_iron_axe-3"), - (0.04, "common.items.weapons.axe.worn_iron_axe-4"), - (0.10, "common.items.weapons.axe.bronze_axe-0"), - (0.10, "common.items.weapons.axe.bronze_axe-1"), - (0.03, "common.items.weapons.axe.iron_axe-0"), - (0.03, "common.items.weapons.axe.iron_axe-1"), - (0.03, "common.items.weapons.axe.iron_axe-2"), - (0.03, "common.items.weapons.axe.iron_axe-3"), - (0.03, "common.items.weapons.axe.iron_axe-4"), - (0.03, "common.items.weapons.axe.iron_axe-5"), - (0.03, "common.items.weapons.axe.iron_axe-6"), - (0.03, "common.items.weapons.axe.iron_axe-7"), - (0.03, "common.items.weapons.axe.iron_axe-8"), - (0.03, "common.items.weapons.axe.iron_axe-9"), - (0.02, "common.items.weapons.axe.steel_axe-0"), - (0.02, "common.items.weapons.axe.steel_axe-1"), - (0.02, "common.items.weapons.axe.steel_axe-2"), - (0.02, "common.items.weapons.axe.steel_axe-3"), - (0.02, "common.items.weapons.axe.steel_axe-4"), - (0.02, "common.items.weapons.axe.steel_axe-5"), - (0.02, "common.items.weapons.axe.steel_axe-6"), - (0.01, "common.items.weapons.axe.bloodsteel_axe-0"), - (0.01, "common.items.weapons.axe.bloodsteel_axe-1"), - (0.01, "common.items.weapons.axe.bloodsteel_axe-2"), - (0.01, "common.items.weapons.axe.cobalt_axe-0"), - (0.01, "common.items.weapons.axe.malachite_axe-0"), - // healing staff - (0.8, "common.items.weapons.staff.staff_nature"), - // staves - (0.50, "common.items.weapons.staff.starter_staff"), - (0.35, "common.items.weapons.staff.bone_staff"), - (0.15, "common.items.weapons.staff.amethyst_staff"), - //(0.01, "common.items.weapons.staff.cultist_staff"), - // hammers - (0.05, "common.items.weapons.hammer.starter_hammer"), - (0.05, "common.items.weapons.hammer.wood_hammer-0"), - (0.05, "common.items.weapons.hammer.flimsy_hammer"), - (0.05, "common.items.weapons.hammer.stone_hammer-0"), - (0.05, "common.items.weapons.hammer.stone_hammer-1"), - (0.05, "common.items.weapons.hammer.stone_hammer-2"), - (0.05, "common.items.weapons.hammer.stone_hammer-3"), - (0.05, "common.items.weapons.hammer.worn_iron_hammer-0"), - (0.05, "common.items.weapons.hammer.worn_iron_hammer-1"), - (0.05, "common.items.weapons.hammer.worn_iron_hammer-2"), - (0.05, "common.items.weapons.hammer.worn_iron_hammer-3"), - (0.05, "common.items.weapons.hammer.bronze_hammer-0"), - (0.05, "common.items.weapons.hammer.bronze_hammer-1"), - (0.03, "common.items.weapons.hammer.iron_hammer-0"), - (0.03, "common.items.weapons.hammer.iron_hammer-1"), - (0.03, "common.items.weapons.hammer.iron_hammer-2"), - (0.03, "common.items.weapons.hammer.iron_hammer-3"), - (0.03, "common.items.weapons.hammer.iron_hammer-4"), - (0.03, "common.items.weapons.hammer.iron_hammer-5"), - (0.03, "common.items.weapons.hammer.iron_hammer-6"), - (0.03, "common.items.weapons.hammer.iron_hammer-7"), - (0.03, "common.items.weapons.hammer.iron_hammer-8"), - (0.02, "common.items.weapons.hammer.steel_hammer-0"), - (0.02, "common.items.weapons.hammer.steel_hammer-1"), - (0.02, "common.items.weapons.hammer.steel_hammer-2"), - (0.02, "common.items.weapons.hammer.steel_hammer-3"), - (0.02, "common.items.weapons.hammer.steel_hammer-4"), - (0.02, "common.items.weapons.hammer.steel_hammer-5"), - (0.01, "common.items.weapons.hammer.cobalt_hammer-0"), - (0.01, "common.items.weapons.hammer.cobalt_hammer-1"), - (0.01, "common.items.weapons.hammer.runic_hammer"), - (0.01, "common.items.weapons.hammer.ramshead_hammer"), - (0.01, "common.items.weapons.hammer.mjolnir"), - // bows - (0.20, "common.items.weapons.bow.starter_bow"), - (0.15, "common.items.weapons.bow.wood_shortbow-0"), - (0.15, "common.items.weapons.bow.wood_shortbow-1"), - (0.10, "common.items.weapons.bow.leafy_shortbow-0"), - (0.10, "common.items.weapons.bow.wood_longbow-0"), - (0.10, "common.items.weapons.bow.wood_longbow-1"), - (0.08, "common.items.weapons.bow.leafy_longbow-0"), - (0.05, "common.items.weapons.bow.horn_longbow-0"), - (0.03, "common.items.weapons.bow.iron_longbow-0"), - (0.01, "common.items.weapons.bow.rare_longbow"), - // belts - (0.17, "common.items.armor.belt.cloth_blue_0"), - (0.17, "common.items.armor.belt.cloth_green_0"), - (0.17, "common.items.armor.belt.cloth_purple_0"), - (0.08, "common.items.armor.belt.druid"), - (0.06, "common.items.armor.belt.leather_0"), - (0.06, "common.items.armor.belt.leather_2"), - (0.02, "common.items.armor.belt.twig"), - (0.02, "common.items.armor.belt.twigsflowers"), - (0.02, "common.items.armor.belt.twigsleaves"), - (0.03, "common.items.armor.belt.plate_0"), - (0.01, "common.items.armor.belt.steel_0"), - // chests - (0.08, "common.items.armor.chest.cloth_blue_0"), - (0.08, "common.items.armor.chest.cloth_green_0"), - (0.08, "common.items.armor.chest.cloth_purple_0"), - (0.025, "common.items.armor.chest.worker_green_0"), - (0.025, "common.items.armor.chest.worker_green_1"), - (0.025, "common.items.armor.chest.worker_orange_0"), - (0.025, "common.items.armor.chest.worker_orange_1"), - (0.025, "common.items.armor.chest.worker_purple_0"), - (0.025, "common.items.armor.chest.worker_purple_1"), - (0.025, "common.items.armor.chest.worker_red_0"), - (0.025, "common.items.armor.chest.worker_red_1"), - (0.025, "common.items.armor.chest.worker_yellow_0"), - (0.025, "common.items.armor.chest.worker_yellow_1"), - (0.08, "common.items.armor.chest.druid"), - (0.06, "common.items.armor.chest.leather_0"), - (0.06, "common.items.armor.chest.leather_2"), - (0.02, "common.items.armor.chest.twig"), - (0.02, "common.items.armor.chest.twigsflowers"), - (0.02, "common.items.armor.chest.twigsleaves"), - (0.03, "common.items.armor.chest.plate_green_0"), - (0.01, "common.items.armor.chest.steel_0"), - // shoes - (0.15, "common.items.armor.foot.cloth_blue_0"), - (0.15, "common.items.armor.foot.cloth_green_0"), - (0.15, "common.items.armor.foot.cloth_purple_0"), - (0.08, "common.items.armor.foot.druid"), - (0.06, "common.items.armor.foot.leather_0"), - (0.06, "common.items.armor.foot.leather_2"), - (0.02, "common.items.armor.foot.twig"), - (0.02, "common.items.armor.foot.twigsflowers"), - (0.02, "common.items.armor.foot.twigsleaves"), - (0.03, "common.items.armor.foot.plate_0"), - (0.01, "common.items.armor.foot.steel_0"), - // pants - (0.125, "common.items.armor.pants.cloth_blue_0"), - (0.125, "common.items.armor.pants.cloth_green_0"), - (0.125, "common.items.armor.pants.cloth_purple_0"), - (0.125, "common.items.armor.pants.worker_blue_0"), - (0.08, "common.items.armor.pants.druid"), - (0.04, "common.items.armor.pants.leather_0"), - (0.04, "common.items.armor.pants.leather_2"), - (0.04, "common.items.armor.pants.hunting"), - (0.02, "common.items.armor.pants.twig"), - (0.02, "common.items.armor.pants.twigsflowers"), - (0.02, "common.items.armor.pants.twigsleaves"), - (0.03, "common.items.armor.pants.plate_green_0"), - (0.01, "common.items.armor.pants.steel_0"), - // shoulders - (0.125, "common.items.armor.shoulder.cloth_blue_0"), - (0.125, "common.items.armor.shoulder.cloth_blue_1"), - (0.125, "common.items.armor.shoulder.cloth_green_0"), - (0.125, "common.items.armor.shoulder.cloth_purple_0"), - (0.06, "common.items.armor.shoulder.druidshoulder"), - (0.06, "common.items.armor.shoulder.leather_strips"), - (0.04, "common.items.armor.shoulder.leather_0"), - (0.04, "common.items.armor.shoulder.leather_1"), - (0.04, "common.items.armor.shoulder.leather_2"), - (0.01, "common.items.armor.shoulder.twigs"), - (0.01, "common.items.armor.shoulder.twigsflowers"), - (0.01, "common.items.armor.shoulder.twigsleaves"), - (0.01, "common.items.armor.shoulder.leather_iron_0"), - (0.01, "common.items.armor.shoulder.leather_iron_1"), - (0.01, "common.items.armor.shoulder.leather_iron_2"), - (0.01, "common.items.armor.shoulder.leather_iron_3"), - (0.015, "common.items.armor.shoulder.plate_0"), - (0.015, "common.items.armor.shoulder.iron_spikes"), - (0.01, "common.items.armor.shoulder.steel_0"), - //gloves - (0.17, "common.items.armor.hand.cloth_blue_0"), - (0.17, "common.items.armor.hand.cloth_green_0"), - (0.17, "common.items.armor.hand.cloth_purple_0"), - (0.08, "common.items.armor.hand.druid"), - (0.06, "common.items.armor.hand.leather_0"), - (0.06, "common.items.armor.hand.leather_2"), - (0.02, "common.items.armor.hand.twig"), - (0.02, "common.items.armor.hand.twigsflowers"), - (0.02, "common.items.armor.hand.twigsleaves"), - (0.03, "common.items.armor.hand.plate_0"), - (0.01, "common.items.armor.hand.steel_0"), - // rings - (0.6, "common.items.armor.ring.ring_0"), - // capes - (0.6, "common.items.armor.back.short_0"), - (0.7, "common.items.armor.back.short_1"), - // necks - (0.6, "common.items.armor.neck.neck_0"), - (0.4, "common.items.armor.neck.neck_1"), -] diff --git a/assets/common/loot_tables/loot_table.ron b/assets/common/loot_tables/loot_table.ron new file mode 100644 index 0000000000..5787e95a90 --- /dev/null +++ b/assets/common/loot_tables/loot_table.ron @@ -0,0 +1,4 @@ +[ + // Fallback loot table + (1, "common.items.food.cheese"), +] diff --git a/assets/common/loot_tables/loot_table_animal_parts.ron b/assets/common/loot_tables/loot_table_animal_parts.ron new file mode 100644 index 0000000000..6358ba4cbe --- /dev/null +++ b/assets/common/loot_tables/loot_table_animal_parts.ron @@ -0,0 +1,3 @@ +[ + (2, "common.items.crafting_ing.leather_scraps"), +] diff --git a/assets/common/loot_tables/loot_table_armor_cloth.ron b/assets/common/loot_tables/loot_table_armor_cloth.ron new file mode 100644 index 0000000000..5640a27b42 --- /dev/null +++ b/assets/common/loot_tables/loot_table_armor_cloth.ron @@ -0,0 +1,38 @@ +[ + // belts + (0.33, "common.items.armor.belt.cloth_blue_0"), + (0.33, "common.items.armor.belt.cloth_green_0"), + (0.33, "common.items.armor.belt.cloth_purple_0"), + // chests + (0.08, "common.items.armor.chest.cloth_blue_0"), + (0.08, "common.items.armor.chest.cloth_green_0"), + (0.08, "common.items.armor.chest.cloth_purple_0"), + (0.08, "common.items.armor.chest.worker_green_0"), + (0.08, "common.items.armor.chest.worker_green_1"), + (0.08, "common.items.armor.chest.worker_orange_0"), + (0.08, "common.items.armor.chest.worker_orange_1"), + (0.08, "common.items.armor.chest.worker_purple_0"), + (0.08, "common.items.armor.chest.worker_purple_1"), + (0.08, "common.items.armor.chest.worker_red_0"), + (0.08, "common.items.armor.chest.worker_red_1"), + (0.08, "common.items.armor.chest.worker_yellow_0"), + (0.08, "common.items.armor.chest.worker_yellow_1"), + // shoes + (0.33, "common.items.armor.foot.cloth_blue_0"), + (0.33, "common.items.armor.foot.cloth_green_0"), + (0.33, "common.items.armor.foot.cloth_purple_0"), + // pants + (0.25, "common.items.armor.pants.cloth_blue_0"), + (0.25, "common.items.armor.pants.cloth_green_0"), + (0.25, "common.items.armor.pants.cloth_purple_0"), + (0.25, "common.items.armor.pants.worker_blue_0"), + // shoulders + (0.25, "common.items.armor.shoulder.cloth_blue_0"), + (0.25, "common.items.armor.shoulder.cloth_blue_1"), + (0.25, "common.items.armor.shoulder.cloth_green_0"), + (0.25, "common.items.armor.shoulder.cloth_purple_0"), + //gloves + (0.33, "common.items.armor.hand.cloth_blue_0"), + (0.33, "common.items.armor.hand.cloth_green_0"), + (0.33, "common.items.armor.hand.cloth_purple_0"), +] diff --git a/assets/common/loot_tables/loot_table_armor_heavy.ron b/assets/common/loot_tables/loot_table_armor_heavy.ron new file mode 100644 index 0000000000..66afe487b8 --- /dev/null +++ b/assets/common/loot_tables/loot_table_armor_heavy.ron @@ -0,0 +1,21 @@ +[ + // belts + (0.67, "common.items.armor.belt.plate_0"), + (0.33, "common.items.armor.belt.steel_0"), + // chests + (0.67, "common.items.armor.chest.plate_green_0"), + (0.33, "common.items.armor.chest.steel_0"), + // shoes + (0.67, "common.items.armor.foot.plate_0"), + (0.33, "common.items.armor.foot.steel_0"), + // pants + (0.67, "common.items.armor.pants.plate_green_0"), + (0.66, "common.items.armor.pants.steel_0"), + // shoulders + (0.40, "common.items.armor.shoulder.plate_0"), + (0.37, "common.items.armor.shoulder.iron_spikes"), + (0.33, "common.items.armor.shoulder.steel_0"), + //gloves + (0.67, "common.items.armor.hand.plate_0"), + (0.33, "common.items.armor.hand.steel_0"), +] \ No newline at end of file diff --git a/assets/common/loot_tables/loot_table_armor_light.ron b/assets/common/loot_tables/loot_table_armor_light.ron new file mode 100644 index 0000000000..e25ec5760c --- /dev/null +++ b/assets/common/loot_tables/loot_table_armor_light.ron @@ -0,0 +1,27 @@ +[ + // belts + (0.50, "common.items.armor.belt.leather_0"), + (0.50, "common.items.armor.belt.leather_2"), + // chests + (0.50, "common.items.armor.chest.leather_0"), + (0.50, "common.items.armor.chest.leather_2"), + // shoes + (0.50, "common.items.armor.foot.leather_0"), + (0.50, "common.items.armor.foot.leather_2"), + // pants + (0.33, "common.items.armor.pants.leather_0"), + (0.33, "common.items.armor.pants.leather_2"), + (0.33, "common.items.armor.pants.hunting"), + // shoulders + (0.10, "common.items.armor.shoulder.leather_strips"), + (0.20, "common.items.armor.shoulder.leather_0"), + (0.20, "common.items.armor.shoulder.leather_1"), + (0.20, "common.items.armor.shoulder.leather_2"), + (0.07, "common.items.armor.shoulder.leather_iron_0"), + (0.07, "common.items.armor.shoulder.leather_iron_1"), + (0.07, "common.items.armor.shoulder.leather_iron_2"), + (0.07, "common.items.armor.shoulder.leather_iron_3"), + //gloves + (0.50, "common.items.armor.hand.leather_0"), + (0.50, "common.items.armor.hand.leather_2"), +] \ No newline at end of file diff --git a/assets/common/loot_tables/loot_table_armor_misc.ron b/assets/common/loot_tables/loot_table_armor_misc.ron new file mode 100644 index 0000000000..601e013552 --- /dev/null +++ b/assets/common/loot_tables/loot_table_armor_misc.ron @@ -0,0 +1,10 @@ +[ + // rings + (0.50, "common.items.armor.ring.ring_0"), + // capes + (0.25, "common.items.armor.back.short_0"), + (0.25, "common.items.armor.back.short_1"), + // necks + (0.25, "common.items.armor.neck.neck_0"), + (0.25, "common.items.armor.neck.neck_1"), +] \ No newline at end of file diff --git a/assets/common/loot_tables/loot_table_armor_nature.ron b/assets/common/loot_tables/loot_table_armor_nature.ron new file mode 100644 index 0000000000..fa371a7938 --- /dev/null +++ b/assets/common/loot_tables/loot_table_armor_nature.ron @@ -0,0 +1,32 @@ +[ + // belts + (0.40, "common.items.armor.belt.druid"), + (0.20, "common.items.armor.belt.twig"), + (0.20, "common.items.armor.belt.twigsflowers"), + (0.20, "common.items.armor.belt.twigsleaves"), + // chests + (0.40, "common.items.armor.chest.druid"), + (0.20, "common.items.armor.chest.twig"), + (0.20, "common.items.armor.chest.twigsflowers"), + (0.20, "common.items.armor.chest.twigsleaves"), + // shoes + (0.40, "common.items.armor.foot.druid"), + (0.20, "common.items.armor.foot.twig"), + (0.20, "common.items.armor.foot.twigsflowers"), + (0.20, "common.items.armor.foot.twigsleaves"), + // pants + (0.40, "common.items.armor.pants.druid"), + (0.20, "common.items.armor.pants.twig"), + (0.20, "common.items.armor.pants.twigsflowers"), + (0.20, "common.items.armor.pants.twigsleaves"), + // shoulders + (0.40, "common.items.armor.shoulder.druidshoulder"), + (0.20, "common.items.armor.shoulder.twigs"), + (0.20, "common.items.armor.shoulder.twigsflowers"), + (0.20, "common.items.armor.shoulder.twigsleaves"), + //gloves + (0.40, "common.items.armor.hand.druid"), + (0.20, "common.items.armor.hand.twig"), + (0.20, "common.items.armor.hand.twigsflowers"), + (0.20, "common.items.armor.hand.twigsleaves"), +] \ No newline at end of file diff --git a/assets/common/loot_tables/loot_table_boss_cultist-leader.ron b/assets/common/loot_tables/loot_table_boss_cultist-leader.ron new file mode 100644 index 0000000000..b91e0f367d --- /dev/null +++ b/assets/common/loot_tables/loot_table_boss_cultist-leader.ron @@ -0,0 +1,18 @@ +[ + // armor + (1, "common.items.armor.belt.cultist_belt"), + (1, "common.items.armor.chest.cultist_chest_purple"), + (1, "common.items.armor.foot.cultist_boots"), + (1, "common.items.armor.hand.cultist_hands_purple"), + (1, "common.items.armor.pants.cultist_legs_purple"), + (1, "common.items.armor.shoulder.cultist_shoulder_purple"), + (1, "common.items.armor.back.dungeon_purple-0"), + // weapons + (1, "common.items.weapons.staff.cultist_staff"), + (1, "common.items.weapons.hammer.cultist_purp_2h-0"), + (1, "common.items.weapons.sword.cultist_purp_2h-0"), + // misc + (9, "common.items.boss_drops.exp_flask"), + (1, "common.items.boss_drops.lantern"), + (1, "common.items.boss_drops.potions"), +] \ No newline at end of file diff --git a/assets/common/loot_tables/loot_table_consumables.ron b/assets/common/loot_tables/loot_table_consumables.ron new file mode 100644 index 0000000000..f4dfab8089 --- /dev/null +++ b/assets/common/loot_tables/loot_table_consumables.ron @@ -0,0 +1,14 @@ +[ + // potions + (1, "common.items.consumable.potion_minor"), + (0.1, "common.items.consumable.potion_med"), + (0.01, "common.items.consumable.potion_big"), + // bombs + (0.6, "common.items.utility.bomb"), + (0.2, "common.items.utility.bomb_pile"), + // velorite + (1, "common.items.ore.veloritefrag"), + (0.5, "common.items.ore.velorite"), + // misc + (0.1, "common.items.utility.collar"), +] \ No newline at end of file diff --git a/assets/common/loot_tables/loot_table_crafting.ron b/assets/common/loot_tables/loot_table_crafting.ron new file mode 100644 index 0000000000..0e7185ff68 --- /dev/null +++ b/assets/common/loot_tables/loot_table_crafting.ron @@ -0,0 +1,7 @@ +[ + // crafting ingredients + (2, "common.items.crafting_ing.leather_scraps"), + (1, "common.items.crafting_ing.empty_vial"), + (0.10, "common.items.crafting_ing.shiny_gem"), + +] diff --git a/assets/common/loot_tables/loot_table_food.ron b/assets/common/loot_tables/loot_table_food.ron new file mode 100644 index 0000000000..c9db9c6578 --- /dev/null +++ b/assets/common/loot_tables/loot_table_food.ron @@ -0,0 +1,11 @@ +[ + // simple + (3, "common.items.food.cheese"), + (3, "common.items.food.apple"), + (3, "common.items.food.mushroom"), + (1, "common.items.food.coconut"), + // crafted + (0.05, "common.items.food.apple_mushroom_curry"), + (0.10, "common.items.food.apple_stick"), + (0.10, "common.items.food.mushroom_stick"), +] diff --git a/assets/common/loot_tables/loot_table_humanoids.ron b/assets/common/loot_tables/loot_table_humanoids.ron new file mode 100644 index 0000000000..5b25815f1c --- /dev/null +++ b/assets/common/loot_tables/loot_table_humanoids.ron @@ -0,0 +1,25 @@ +[ + // Crafting Ingredients + (1, "common.items.crafting_ing.empty_vial"), + (0.10, "common.items.crafting_ing.shiny_gem"), + // Consumables + (0.2, "common.items.consumable.potion_minor"), + // Utility + (0.05, "common.items.utility.collar"), + // Food + (1, "common.items.food.coconut"), + (0.05, "common.items.food.apple_mushroom_curry"), + (0.10, "common.items.food.apple_stick"), + (0.10, "common.items.food.mushroom_stick"), + // Weapons + (0.15, "common.items.weapons.sword.wood_sword"), + (0.10, "common.items.weapons.axe.worn_iron_axe-0"), + (0.10, "common.items.weapons.axe.worn_iron_axe-1"), + (0.10, "common.items.weapons.axe.worn_iron_axe-2"), + (0.10, "common.items.weapons.axe.worn_iron_axe-3"), + (0.10, "common.items.weapons.axe.worn_iron_axe-4"), + (0.25, "common.items.weapons.staff.staff_nature"), + (0.15, "common.items.weapons.hammer.flimsy_hammer"), + (0.10, "common.items.weapons.hammer.wood_hammer-0"), + (0.25, "common.items.weapons.bow.wood_shortbow-0"), +] diff --git a/assets/common/loot_tables/loot_table_rocks.ron b/assets/common/loot_tables/loot_table_rocks.ron new file mode 100644 index 0000000000..e29e50f7f2 --- /dev/null +++ b/assets/common/loot_tables/loot_table_rocks.ron @@ -0,0 +1,6 @@ +[ + (1, "common.items.crafting_ing.stones"), + (0.10, "common.items.crafting_ing.shiny_gem"), + (0.10, "common.items.ore.velorite"), + (0.20, "common.items.ore.veloritefrag"), +] diff --git a/assets/common/loot_tables/loot_table_villager.ron b/assets/common/loot_tables/loot_table_villager.ron new file mode 100644 index 0000000000..d2eb0f8d25 --- /dev/null +++ b/assets/common/loot_tables/loot_table_villager.ron @@ -0,0 +1,37 @@ +[ + // Crafting Ingredients + (1, "common.items.crafting_ing.empty_vial"), + (0.10, "common.items.crafting_ing.shiny_gem"), + // Consumables + (0.2, "common.items.consumable.potion_minor"), + // Armour + (1, "common.items.armor.chest.worker_green_0"), + (1, "common.items.armor.chest.worker_green_1"), + (1, "common.items.armor.chest.worker_orange_0"), + (1, "common.items.armor.chest.worker_orange_1"), + (1, "common.items.armor.chest.worker_purple_0"), + (1, "common.items.armor.chest.worker_purple_1"), + (1, "common.items.armor.chest.worker_red_0"), + (1, "common.items.armor.chest.worker_red_1"), + (1, "common.items.armor.chest.worker_yellow_0"), + (1, "common.items.armor.chest.worker_yellow_1"), + (1, "common.items.armor.pants.worker_blue_0"), + // Utility + (0.05, "common.items.utility.collar"), + // Food + (0.5, "common.items.food.coconut"), + (0.05, "common.items.food.apple_mushroom_curry"), + (0.10, "common.items.food.apple_stick"), + (0.10, "common.items.food.mushroom_stick"), + // Weapons + (0.15, "common.items.weapons.sword.wood_sword"), + (0.10, "common.items.weapons.axe.worn_iron_axe-0"), + (0.10, "common.items.weapons.axe.worn_iron_axe-1"), + (0.10, "common.items.weapons.axe.worn_iron_axe-2"), + (0.10, "common.items.weapons.axe.worn_iron_axe-3"), + (0.10, "common.items.weapons.axe.worn_iron_axe-4"), + (0.25, "common.items.weapons.staff.staff_nature"), + (0.15, "common.items.weapons.hammer.flimsy_hammer"), + (0.10, "common.items.weapons.hammer.wood_hammer-0"), + (0.25, "common.items.weapons.bow.wood_shortbow-0"), +] diff --git a/assets/common/loot_tables/loot_table_weapon_common.ron b/assets/common/loot_tables/loot_table_weapon_common.ron new file mode 100644 index 0000000000..0ba12913f2 --- /dev/null +++ b/assets/common/loot_tables/loot_table_weapon_common.ron @@ -0,0 +1,43 @@ +[ + // swords + (0.15, "common.items.weapons.sword.starter_sword"), + (0.15, "common.items.weapons.sword.wood_sword"), + (0.07, "common.items.weapons.sword.long_2h_dam-0"), + (0.07, "common.items.weapons.sword.long_2h_dam-1"), + (0.07, "common.items.weapons.sword.long_2h_dam-2"), + (0.07, "common.items.weapons.sword.long_2h_dam-3"), + (0.07, "common.items.weapons.sword.long_2h_dam-4"), + (0.07, "common.items.weapons.sword.long_2h_dam-5"), + (0.10, "common.items.weapons.sword.short_sword_0"), + (0.06, "common.items.weapons.sword.greatsword_2h_dam-0"), + (0.06, "common.items.weapons.sword.greatsword_2h_dam-1"), + (0.06, "common.items.weapons.sword.greatsword_2h_dam-2"), + // axes + (0.30, "common.items.weapons.axe.starter_axe"), + (0.20, "common.items.weapons.axe.orc_axe-0"), + (0.10, "common.items.weapons.axe.worn_iron_axe-0"), + (0.10, "common.items.weapons.axe.worn_iron_axe-1"), + (0.10, "common.items.weapons.axe.worn_iron_axe-2"), + (0.10, "common.items.weapons.axe.worn_iron_axe-3"), + (0.10, "common.items.weapons.axe.worn_iron_axe-4"), + // healing staff + (0.25, "common.items.weapons.staff.staff_nature"), + // staves + (1.00, "common.items.weapons.staff.starter_staff"), + // hammers + (0.15, "common.items.weapons.hammer.starter_hammer"), + (0.15, "common.items.weapons.hammer.flimsy_hammer"), + (0.10, "common.items.weapons.hammer.wood_hammer-0"), + (0.10, "common.items.weapons.hammer.stone_hammer-0"), + (0.10, "common.items.weapons.hammer.stone_hammer-1"), + (0.10, "common.items.weapons.hammer.stone_hammer-2"), + (0.10, "common.items.weapons.hammer.stone_hammer-3"), + (0.05, "common.items.weapons.hammer.worn_iron_hammer-0"), + (0.05, "common.items.weapons.hammer.worn_iron_hammer-1"), + (0.05, "common.items.weapons.hammer.worn_iron_hammer-2"), + (0.05, "common.items.weapons.hammer.worn_iron_hammer-3"), + // bows + (0.50, "common.items.weapons.bow.starter_bow"), + (0.25, "common.items.weapons.bow.wood_shortbow-0"), + (0.25, "common.items.weapons.bow.wood_shortbow-1"), +] \ No newline at end of file diff --git a/assets/common/loot_tables/loot_table_weapon_rare.ron b/assets/common/loot_tables/loot_table_weapon_rare.ron new file mode 100644 index 0000000000..df5fa2a126 --- /dev/null +++ b/assets/common/loot_tables/loot_table_weapon_rare.ron @@ -0,0 +1,33 @@ +[ + // swords + (0.08, "common.items.weapons.sword.long_2h_orn-0"), + (0.08, "common.items.weapons.sword.long_2h_orn-1"), + (0.08, "common.items.weapons.sword.long_2h_orn-2"), + (0.08, "common.items.weapons.sword.long_2h_orn-3"), + (0.08, "common.items.weapons.sword.long_2h_orn-4"), + (0.08, "common.items.weapons.sword.long_2h_orn-5"), + (0.20, "common.items.weapons.sword.zweihander_sword_0"), + (0.10, "common.items.weapons.sword.greatsword_2h_orn-0"), + (0.10, "common.items.weapons.sword.greatsword_2h_orn-1"), + (0.10, "common.items.weapons.sword.greatsword_2h_orn-2"), + // axes + (0.20, "common.items.weapons.axe.bloodsteel_axe-0"), + (0.20, "common.items.weapons.axe.bloodsteel_axe-1"), + (0.20, "common.items.weapons.axe.bloodsteel_axe-2"), + (0.30, "common.items.weapons.axe.cobalt_axe-0"), + (0.10, "common.items.weapons.axe.malachite_axe-0"), + // healing staff + (0.25, "common.items.weapons.staff.staff_nature"), + // staves + (1.00, "common.items.weapons.staff.amethyst_staff"), + // hammers + (0.30, "common.items.weapons.hammer.cobalt_hammer-0"), + (0.30, "common.items.weapons.hammer.cobalt_hammer-1"), + (0.15, "common.items.weapons.hammer.runic_hammer"), + (0.15, "common.items.weapons.hammer.ramshead_hammer"), + (0.10, "common.items.weapons.hammer.mjolnir"), + // bows + (0.60, "common.items.weapons.bow.horn_longbow-0"), + (0.30, "common.items.weapons.bow.iron_longbow-0"), + (0.10, "common.items.weapons.bow.rare_longbow"), +] \ No newline at end of file diff --git a/assets/common/loot_tables/loot_table_weapon_uncommon.ron b/assets/common/loot_tables/loot_table_weapon_uncommon.ron new file mode 100644 index 0000000000..7211863eb4 --- /dev/null +++ b/assets/common/loot_tables/loot_table_weapon_uncommon.ron @@ -0,0 +1,68 @@ +[ + // swords + (0.05, "common.items.weapons.sword.long_2h_simple-0"), + (0.05, "common.items.weapons.sword.long_2h_simple-1"), + (0.05, "common.items.weapons.sword.long_2h_simple-2"), + (0.05, "common.items.weapons.sword.long_2h_simple-3"), + (0.05, "common.items.weapons.sword.long_2h_simple-4"), + (0.05, "common.items.weapons.sword.long_2h_simple-5"), + (0.10, "common.items.weapons.sword.greatsword_2h_simple-0"), + (0.10, "common.items.weapons.sword.greatsword_2h_simple-1"), + (0.10, "common.items.weapons.sword.greatsword_2h_simple-2"), + (0.06, "common.items.weapons.sword.long_2h_fine-0"), + (0.06, "common.items.weapons.sword.long_2h_fine-1"), + (0.06, "common.items.weapons.sword.long_2h_fine-2"), + (0.06, "common.items.weapons.sword.long_2h_fine-3"), + (0.06, "common.items.weapons.sword.long_2h_fine-4"), + (0.06, "common.items.weapons.sword.long_2h_fine-5"), + (0.07, "common.items.weapons.sword.greatsword_2h_fine-0"), + (0.07, "common.items.weapons.sword.greatsword_2h_fine-1"), + (0.07, "common.items.weapons.sword.greatsword_2h_fine-2"), + // axes + (0.15, "common.items.weapons.axe.bronze_axe-0"), + (0.15, "common.items.weapons.axe.bronze_axe-1"), + (0.04, "common.items.weapons.axe.iron_axe-0"), + (0.04, "common.items.weapons.axe.iron_axe-1"), + (0.04, "common.items.weapons.axe.iron_axe-2"), + (0.04, "common.items.weapons.axe.iron_axe-3"), + (0.04, "common.items.weapons.axe.iron_axe-4"), + (0.04, "common.items.weapons.axe.iron_axe-5"), + (0.04, "common.items.weapons.axe.iron_axe-6"), + (0.04, "common.items.weapons.axe.iron_axe-7"), + (0.04, "common.items.weapons.axe.iron_axe-8"), + (0.04, "common.items.weapons.axe.iron_axe-9"), + (0.04, "common.items.weapons.axe.steel_axe-0"), + (0.04, "common.items.weapons.axe.steel_axe-1"), + (0.04, "common.items.weapons.axe.steel_axe-2"), + (0.04, "common.items.weapons.axe.steel_axe-3"), + (0.04, "common.items.weapons.axe.steel_axe-4"), + (0.04, "common.items.weapons.axe.steel_axe-5"), + (0.04, "common.items.weapons.axe.steel_axe-6"), + // healing staff + (0.5, "common.items.weapons.staff.staff_nature"), + // staves + (1.00, "common.items.weapons.staff.bone_staff"), + // hammers + (0.15, "common.items.weapons.hammer.bronze_hammer-0"), + (0.15, "common.items.weapons.hammer.bronze_hammer-1"), + (0.04, "common.items.weapons.hammer.iron_hammer-0"), + (0.04, "common.items.weapons.hammer.iron_hammer-1"), + (0.04, "common.items.weapons.hammer.iron_hammer-2"), + (0.04, "common.items.weapons.hammer.iron_hammer-3"), + (0.04, "common.items.weapons.hammer.iron_hammer-4"), + (0.04, "common.items.weapons.hammer.iron_hammer-5"), + (0.04, "common.items.weapons.hammer.iron_hammer-6"), + (0.04, "common.items.weapons.hammer.iron_hammer-7"), + (0.04, "common.items.weapons.hammer.iron_hammer-8"), + (0.05, "common.items.weapons.hammer.steel_hammer-0"), + (0.05, "common.items.weapons.hammer.steel_hammer-1"), + (0.05, "common.items.weapons.hammer.steel_hammer-2"), + (0.05, "common.items.weapons.hammer.steel_hammer-3"), + (0.05, "common.items.weapons.hammer.steel_hammer-4"), + (0.05, "common.items.weapons.hammer.steel_hammer-5"), + // bows + (0.30, "common.items.weapons.bow.leafy_shortbow-0"), + (0.25, "common.items.weapons.bow.wood_longbow-0"), + (0.25, "common.items.weapons.bow.wood_longbow-1"), + (0.20, "common.items.weapons.bow.leafy_longbow-0"), +] \ No newline at end of file diff --git a/assets/common/recipe_book.ron b/assets/common/recipe_book.ron index 5c168ab31a..1a17d6f0c1 100644 --- a/assets/common/recipe_book.ron +++ b/assets/common/recipe_book.ron @@ -14,4 +14,5 @@ "apple_shroom_curry": (("common.items.food.apple_mushroom_curry", 1), [("common.items.food.mushroom", 8), ("common.items.food.coconut", 1), ("common.items.food.apple", 4), ("common.items.crafting_tools.mortar_pestle", 0)]), "apples_stick": (("common.items.food.apple_stick", 1),[("common.items.crafting_ing.twigs", 2), ("common.items.food.apple", 2)]), "mushroom_stick": (("common.items.food.mushroom_stick", 1),[("common.items.crafting_ing.twigs", 2), ("common.items.food.mushroom", 3)]), + "velorte_sceptre": (("common.items.weapons.staff.sceptre_velorite_0", 1),[("common.items.crafting_ing.twigs", 20), ("common.items.ore.veloritefrag", 10), ("common.items.crafting_ing.shiny_gem", 4), ("common.items.crafting_tools.craftsman_hammer", 0)]), } diff --git a/assets/voxygen/element/frames/banner_bot.png b/assets/voxygen/element/frames/banner_bot.png new file mode 100644 index 0000000000000000000000000000000000000000..34c10c53ed0e74b67653bdf464749f12446bdc9b GIT binary patch literal 1638 zcmcIl&u`pB6gEgiZK75va6q|WTn^>OtjDwdwN^|CaoQ}xAxalD+&Z2a?^;=VjP1>C za!VzIdO|7(eh8@-1Sk3rR0xR^5<=nty`iEWx%2`DF2KyL*Howtxv-LV$DVJ#_r3Q$ zzrDV_b?MCF%A%quXS$ogj`&65S~#^JzK?$VUT&PuH{UK5W$7t-J*Ir}=`)J*#J5Rr zx7rQg@CZ*^nDU6VCTT9vin4lPl4G*RDm7yLB=fcVx4+iZg!iM4#JYw8qI?fKf845;pg+v++mm}<8m zAP^$e>9h>nG;R2@iXehIv~&Xj!}g%*8ID?iG!dqtof=5a|d3fdJ(}R^bWA%5!sufR&_3@+#q(Dj9LaN0qM$rLz>$yrIp?x=f;A z`UK~?(SkCiIWP>5ho)(RE~|}w5vA7qP~x(8kTZRUm3&kXwz1E$>fAgSCC%AvjO0chLEbR0W&ku}vN&Ig=~WclRzS=&-h1V>XL&!mwV z8^{3>wOrsDCIfCec0i1&Wid!l6x(yQH;Y8PIe7RWt5ih=BZ;76xv>GP$Z-I2%@}k{ z*8&V9NS%nb4TLn65-;XOibbC!Def~p&-$ABkD7HpJAU($X8LZ@SHO2*7>x)YNXLIR~ z5?|u|`2SIQT~;!{S)Yl)scSMBU5=QUDf++tn(jR?j^=PNy@hX{JN@e2yUS1BIlB68 zyt?x1^VfcuEPwUZ+4AX&U)=a}>9fVrZ!g~ZrTgB;-UlE3zI3#7=MVW$(B0SyZoPK( F+TXtC0O0@t literal 0 HcmV?d00001 diff --git a/assets/voxygen/element/icons/female.png b/assets/voxygen/element/icons/female.png deleted file mode 100644 index be41175c0d1056a412bdf6ac6c67fe5c15a697c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19028 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 Ir`Iq31BTiwOaK4? literal 0 HcmV?d00001 diff --git a/assets/voxygen/element/icons/male.png b/assets/voxygen/element/icons/male.png deleted file mode 100644 index cff0b98e99d15b524573a1ecabef5397a036b4b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18428 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 diff --git a/assets/voxygen/i18n/de_DE.ron b/assets/voxygen/i18n/de_DE.ron index 04e6bffe0f..f5ce2fa8f8 100644 --- a/assets/voxygen/i18n/de_DE.ron +++ b/assets/voxygen/i18n/de_DE.ron @@ -152,7 +152,8 @@ https://account.veloren.net. "hud.you_died": "Ihr seid gestorben.", "hud.waypoint_saved": "Wegpunkt gesichert", - "hud.press_key_to_show_keybindings_fmt": "Drückt {key} um die Tastenbelegung zu zeigen", + "hud.press_key_to_show_keybindings_fmt": "[{key}] Tastenbelegung", + "hud.press_key_to_toggle_lantern_fmt": "[{key}] Laterne", "hud.press_key_to_show_debug_info_fmt": "Drückt {key} um die Debug-Info zu zeigen", "hud.press_key_to_toggle_keybindings_fmt": "Drückt {key} um die Tastenbelegung zu zeigen", "hud.press_key_to_toggle_debug_info_fmt": "Drückt {key} um die Debug-Info zu zeigen", diff --git a/assets/voxygen/i18n/en.ron b/assets/voxygen/i18n/en.ron index d02cfc6b74..2760d7609d 100644 --- a/assets/voxygen/i18n/en.ron +++ b/assets/voxygen/i18n/en.ron @@ -152,7 +152,8 @@ https://account.veloren.net."#, "hud.you_died": "You Died", "hud.waypoint_saved": "Waypoint Saved", - "hud.press_key_to_show_keybindings_fmt": "Press {key} to show keybindings", + "hud.press_key_to_show_keybindings_fmt": "[{key}] Keybindings", + "hud.press_key_to_toggle_lantern_fmt": "[{key}] Lantern", "hud.press_key_to_show_debug_info_fmt": "Press {key} to show debug info", "hud.press_key_to_toggle_keybindings_fmt": "Press {key} to toggle keybindings", "hud.press_key_to_toggle_debug_info_fmt": "Press {key} to toggle debug info", diff --git a/assets/voxygen/item_image_manifest.ron b/assets/voxygen/item_image_manifest.ron index 77d2638409..4d59015e54 100644 --- a/assets/voxygen/item_image_manifest.ron +++ b/assets/voxygen/item_image_manifest.ron @@ -505,6 +505,10 @@ Tool(Staff("Sceptre")): VoxTrans( "voxel.weapon.staff.wood-nature", (1.0, -1.0, 0.0), (-310., 90.0, 0.0), 1.2, + ), + Tool(Staff("SceptreVelorite")): VoxTrans( + "voxel.weapon.staff.ore-nature", + (1.0, -1.0, 0.0), (-310., 90.0, 0.0), 1.15, ), // Shields Tool(Shield("BasicShield")): VoxTrans( @@ -1011,6 +1015,56 @@ "voxel.armor.shoulder.twigsflowers_shoulder_right", (0.0, 0.0, 0.0), (-90.0, 130.0, 0.0), 1.2, ), + //Tarasque Set + Armor(Chest("Tarasque")): VoxTrans( + "voxel.armor.chest.tarasque", + (0.0, 0.0, 0.0), (-90.0, 180.0, 0.0), 1.2, + ), + Armor(Pants("Tarasque")): VoxTrans( + "voxel.armor.pants.tarasque", + (0.0, 0.0, 0.0), (-90.0, 180.0, 0.0), 1.2, + ), + Armor(Belt("Tarasque")): VoxTrans( + "voxel.armor.belt.tarasque", + (0.0, 0.0, 0.0), (-90.0, 180.0, 0.0), 1.4, + ), + Armor(Foot("Tarasque")): VoxTrans( + "voxel.armor.foot.tarasque", + (0.0, 0.0, 0.0), (-95.0, 140.0, 0.0), 1.1, + ), + Armor(Hand("Tarasque")): VoxTrans( + "voxel.armor.hand.tarasque_right", + (0.0, -1.0, 0.0), (-90.0, 135.0, 0.0), 1.0, + ), + Armor(Shoulder("Tarasque")): VoxTrans( + "voxel.armor.shoulder.tarasque_right", + (0.0, 0.0, 0.0), (-90.0, 130.0, 0.0), 1.2, + ), + //Bonerattler Set + Armor(Chest("Bonerattler")): VoxTrans( + "voxel.armor.chest.bonerattler", + (0.0, 0.0, 0.0), (-90.0, 180.0, 0.0), 1.2, + ), + Armor(Pants("Bonerattler")): VoxTrans( + "voxel.armor.pants.bonerattler", + (0.0, 0.0, 0.0), (-90.0, 180.0, 0.0), 1.2, + ), + Armor(Belt("Bonerattler")): VoxTrans( + "voxel.armor.belt.bonerattler", + (0.0, 0.0, 0.0), (-90.0, 180.0, 0.0), 1.4, + ), + Armor(Foot("Bonerattler")): VoxTrans( + "voxel.armor.foot.bonerattler", + (0.0, 0.0, 0.0), (-95.0, 140.0, 0.0), 1.1, + ), + Armor(Hand("Bonerattler")): VoxTrans( + "voxel.armor.hand.bonerattler_right", + (0.0, -1.0, 0.0), (-90.0, 135.0, 0.0), 1.0, + ), + Armor(Shoulder("Bonerattler")): VoxTrans( + "voxel.armor.shoulder.bonerattler_right", + (0.0, 0.0, 0.0), (-90.0, 130.0, 0.0), 1.2, + ), //misc Armor(Pants("Hunting")): VoxTrans( "voxel.armor.pants.grayscale", diff --git a/assets/voxygen/voxel/armor/belt/bonerattler.vox b/assets/voxygen/voxel/armor/belt/bonerattler.vox new file mode 100644 index 0000000000000000000000000000000000000000..c86015e747ccbb283aec0244e4ad4324ea6d7cd1 GIT binary patch literal 1460 zcmbVLO>0w85S{z|FfO_fgqEh#6d_p@+O(y9r0|SULTGChrA>;Mm546t#+A5G5X8MZ ztrCj5Fe`PFMVGpW3;hTF3lYkArkF>RytI1ZaA(drGjr#`ySBQ1;u#Sw$JG^F^wJSs zsn#n;CBZoYM1Tg?H|o_bg#f1kSWQhARM7`jGJp+gMmtps2Dw*F3mD|qsip!Kv??hJ zfO8r;V8CgCr;;<^00XZEl%-fX@D@B^P#e%IG89Lm;dYY4qoH}kJ`iraOWub09&nNe znl+Z19(=&8;3&4>jc5uS`UUi}9voo7IrxL7*eHs%0S^SsvFK$HJ3v9#;t^oBMvX>K zkDa{4sP)*zNl%$C??jzP?x6+g?XedS!52Y~v$rOB>i%HgUZcTXD)L^rJh0E= z*cg|_$GMivad~2bCr3v3?%Z7B?Q}ZaZnwGBY9(CnZE5%QMdEwsiGO~2KD36ruZHT< ze<3@{)xs2SE=&*f)-T0;`^L(?_VmHc#Pk03WB&g24QDc$gxl{oeUeYl=DBiqhF33~ z`a|pAr`w@at>5=QF@Jo-{CS)C%i9BI^!87iQ!Ex!d+^Q<=kxhgU3zA-*`fO1^VgPl pdE@H0)SCINC%p7OS0UD@%KFc>X$my&@X6$6*>R_ literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/armor/belt/tarasque.vox b/assets/voxygen/voxel/armor/belt/tarasque.vox new file mode 100644 index 0000000000000000000000000000000000000000..8ce6f531a6a764ae7478fdd654fdc425389bdb84 GIT binary patch literal 1472 zcmeH`Jxc>Y5Qb;=^AJ%aiHL+l)JCl?LE#XDyCj4&_(1{^gIHNu*x0AAv(Z-k5&l5C z^&KHmB!r|$=fcCzzBBXQ+;Vqy(cgL_qO+_x$3`EPs8vwk*fVDi&#*EZbFMIx#aRkepOfU=Zm%ZUNbQDQCE z9I%Kza^^da9cK-krMd;)N-x*D?K~q4C@WxfI-M~)<!O* zJrD1~>(hOBe|env{A6!?qCWE9D6NI+dL>jVrBGg72?t3nT=u%5=$wYE)tuTp^7!9> lzMpyT;wat>#s2QX?m3R*g?Z2WuCvzv{U>Mbo3~E>|1S>402KfL literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/armor/chest/bonerattler.vox b/assets/voxygen/voxel/armor/chest/bonerattler.vox new file mode 100644 index 0000000000000000000000000000000000000000..bc6a0b10c6e4d1e2d901fc003b80c093ee8fb25c GIT binary patch literal 2624 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 QVmyk!?fF-KoMT3Q0oRugbpQYW literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/armor/foot/tarasque.vox b/assets/voxygen/voxel/armor/foot/tarasque.vox new file mode 100644 index 0000000000000000000000000000000000000000..2e376c168867a172701cec53be5f2aae6a67c971 GIT binary patch literal 1480 zcmeH`y=zoa5XEQC%v&r(k$fN$7Ev3uilB`kth`SbKS)4gu&}VOu(7wW5Nu*A{vm1d zpV?i1Zy`}6EW1TIFC1ph%$alFyYJoCFAr}1Ftg{g;RV5tE3^IKu(>=E7St|*1P5;p zhp$e;dIuuxB*SWx)ea;(36SLG)PS5CNOD8Vcr6gXDz6<60XC{N@(L}{(&6Y9-0Fn$ z5Va?I5FkfBu}%|oi^xohIpO17RNi`etMn$)JBx8YZxr4KG2td^@?P>b;rK9G%lQ;Uj$D7QK7Gi3&79ojjrw zJm^Kx4{~_onfMs~hUZ@Qbhh{~e2c=G&*x{jz4_}b|GT~{fBg1gX+Az#dv2NMs=aTY z-!<$LH?EbP?X9x2wNW;&UMcr?ACy=7du5nEE3>9vI(zEz pKmPfD);)_y(;H>Dcjv;+c{-h5nD@Hxx~l%)JGtuIx;n1E{RRVa3H1N~ literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/armor/hand/bonerattler_left.vox b/assets/voxygen/voxel/armor/hand/bonerattler_left.vox new file mode 100644 index 0000000000000000000000000000000000000000..3d61fefcda2c4d0c37e49fcde21f9dbd95bc7766 GIT binary patch literal 1240 zcmbVLJxc>Y5S?8wRV*w7LGct5grpEODt^P|jB*@)qi7;xC!&QmR$`$bh^^RZkPtM5 zsnjM#8bOO#=s)mZh#=2dO^#D?@nhgIv-94(*)4W%V!rv9h{g;k zRYmwX&o9KSBh};xG9;0Zf*~0sxc&^{f~53GVhDz;>Sd9Sn?6=?pU(^_I5UVL70)_i zNM%$sdf5qXw)FSzY1{Jw(THL`{LA!yR@#I zvs>q``xm(kTFfWgK_*nt4d zrY5x1)L^r-)6wQ~Ib^e0q*5uTSGt>5Ug{xi4HI7PPAblza8{95{@r>#tZ)#E-EC#H z@ks+~%i|y1;m(SqxjNs+^Wz2le!tWE@M~*DUq=YBfp$!c^nT&o?^T2`S1Iu#`0L0ee#^?+Bm?_ZW8us-c#fC Wmf!S?UlJ<+MqkqWRj=lFhTZ}Edi-?& literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/armor/hand/bonerattler_right.vox b/assets/voxygen/voxel/armor/hand/bonerattler_right.vox new file mode 100644 index 0000000000000000000000000000000000000000..bbee5cf9db5e74dc532ebc82466bde14d13028ed GIT binary patch literal 1240 zcmbVLJxc>Y5S`uJRk27R2#TkeAS8vLQSlp+809$PCyFK_b|PA6V}g4l|k1_?ne zOr-4^@#Pz>q{j3KIMg@`HrroJx?oB!*x}sk5N7ptF;q{GMLHkb;>ZB{PFK zCzbO&HB>VA7VOb3h_r}cNWma2N53<1H4eIH#wf0fUW=u>5|+ znwrq!^I@a2)Ar``dE|0AWHK4MR=%4XFZK{NhY7ED$5ne!Jgus$`Q1i6%uoOe-E9@U z$%zP7m&Quk!S=H4xjNg!^W!=E=3EYkeO>J84)a1y_&T WTYgjj{3W6IH~zBcuYT3XJ@gLhCj4~( literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/armor/hand/tarasque_left.vox b/assets/voxygen/voxel/armor/hand/tarasque_left.vox new file mode 100644 index 0000000000000000000000000000000000000000..dc418324b74f1e6c424118f767571af863e8c0d3 GIT binary patch literal 55771 zcmeI)XLuAv7zgkz7ZDpOpokbxz=BHLz2ry$TVfDHXa-ckvTpA7_7?VTk1HgxBKF>~ z_uhN&z4zXG@4b7@`|jSQa1X);nRoU#bGtkc9(JBKE4)~eq$!OpQ^iSo zf61{5s_6k+%RoAx{-SrZ= zqJ4XQzs@+9ozNN_0cwpt!ZQwOmFF`n6o|*}k;;_}!w#3GUX*J#J|^ zm-X7A`^1Y!FH9CsJ!*c%`Snr5E4G*N4;i>daoAdei^B#FEDjp5T5&TyQk*`ct=Q5! zsn|H7d8uPdIsQL)e}0yCEyh$2Ew*er@;_VW>gwwMEcfzSm$iT2XL4D`EpI=1{--p~ zoP0l3#6fQ!`mK!Lo%ybewW0`&xRXc}au&T#j1J4OlX>c=(@V(6dIdX4FF>tE=TW(g z74zdL51`n{1TFN+F&r=JhqWAP@46jG+`*s22h&eP?`}?nvqbN4WTp}L1{LI(rf~y83m=;6iP$?%ns*I z1e-%?Mnh?8pfp=RY3Lsw=Y3#Dm<(lkM7wu90%Lun>JX|{*bOoYoS3@FV^D9uh#nw_CEyFh7XL1|_~Y34v_c7@XH2Bp~@ zO0x%)#(>i738gWiH0@BD7?dUsrLmwi2`G&XrAb0*94O6PD9t=5jSHnoL21%Z8V^d7 zfzr%}(qy4DIVepYN>hN+EP&Eu*mCTI!K5XZ~XfzxYUIsI5yA}BHSeBkrT? z$_?{Y68-CgqAVO1lSHXkd9_uGm?p$Nf_iPtCiS%a}1I%^Tsr>o~2y z^IC+vh(|i(nq9o}bi0d!iRfZ^B0rgx&x>R|mW{Wxd=s34BTK-#qjuYf^@>c6n8`ay QWAw22;=wV?b*Y2?51}Q}m;e9( literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/armor/hand/tarasque_right.vox b/assets/voxygen/voxel/armor/hand/tarasque_right.vox new file mode 100644 index 0000000000000000000000000000000000000000..cdcae93efaf2a11f84ffa041a30d4756ba8f47db GIT binary patch literal 1288 zcmeH`ze~eF6vy9>%O;An6_FA|UDU-23ZWn*BuEVYparSL(ZRvR-NDU8SMd+>PjYa3 zelO5kq=aPX=5Zgs-}mnBJ?==ZFGrj2M06hK7ZCb#M8kZXE%^W=m|=7?&Ogg6(E(JM zScO=W8516qrVIjQ2~>beARfemn8ZcIE@E<#gF3|OpbAA!Jct~%d0AD-#%vudLawk{uC+`B5lJ_xs7n3bI^ANoa%&X*0LQl!M7z)GP&>X*` z1+);YtD-kmvL*#@Q?x$1H!)am(R)L8I7biYAy`uv9=3``oOTI41?y7O#c0I3^$KG! zMx4R8vnR0*6O41awRIp5dWBv^?dwGSh)?t*1?^Lm#i*RS)Cktt$6zf|b6AIU@;I!+ z2Ibz=sD`UKe}%syS5@jq{whkB)YlVCqUI?`AJx{ivms&P`tu{ZUwjH8^waG-zj~_l4s=1KwLwM&6uKN8w(BQXe$q4XRRa z@lnk=YUa*fhG{W0;k^vXn=C!xz1HO&^JYzWf0&B&HReKpFcQr7oeL7E;mh#4#Gx_X^6ZwPl z=cnx6-d^6_-OW2YJ5%lOZ1cu9FG>FJ1<8N?^3}01dHuIg`||nD^>5C(r_JISh5Hem+g|MU7s`Q8k%{oc z&a2(USEa(|XZZ=PrlVe>T%vSJNjOjvq^gYw1oP`kTrEVVp1sz9%oQ@gyIzT`ZUB9( zSF=o=qK+QYC)NEJ^}Z2-fT7N&wWqF(sRC-xe2dtK5u+z6k2tU_{V51=jQ0G+!(~ol{ORCM{$Fa4~oHL@mz6MF)8F2=i1na5COlQDX*N9lpejLZRh7wyu4EOiL_lWC`>Gk~0-%t21pRr)fyJa^zt+d#Xl z1(6$3t8rWt9;R}Pa71&X6`e68JP|<}+5{#LD}fo4KnP11!9P3VNsuRMxQEiNx$GMCq;q=jObtdbcYRnBGQXBwT$ zcR44aVV~zz)3>ru2u5caxsPZ+Vac79Q20he%@RU*8j~LChPvS$+|B8JPOeYDzdM83hr@jb?Kb*S z#X-G3bk5S`B!a0a#HAAI)61ABWYm&>`j&h&kMr2hB) u>nr=%xcNP|XJO|VmLKmTezl+L$=l^9b$*ok*+Jt``~%Ow`n6Ag0KWm-#R*ja literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/armor/shoulder/bonerattler_right.vox b/assets/voxygen/voxel/armor/shoulder/bonerattler_right.vox new file mode 100644 index 0000000000000000000000000000000000000000..f849419e4d0338830430b3e9f3bf8fb9692bf3c1 GIT binary patch literal 1388 zcmbVMJ!=$E6us}g*;uSa3PDK7M6yBLEdshph#wQ!Syvf`Bt}s-yCK+#m?Ab-Vxb_2 zy`2VGf?Bwh+H8?hi?z^y;J*+d9M2utVU(Rs^ughtd(XM|y<5!OT5FzqAtEcaXq7>l z1(6$3t8rWt9;R}Pa71&X6`e68JP|<}+5{#LD}fo4KnP11!9P3VNsuRMxQEiNx$GMCq;q=jObtdbcYRnBGQXBwT$ zcR44aVV~zz)3>ru2u5caxsPZ+Vac79Q20he%@RU*8j~LChPvS$+|B8JPOeYDzdM83hr@jb?Kb*S z#X-G3bk5S`B!a0a#HAAI)61ABWYm&>`j&h&kMr2hB) u>nr=%xcNP|XJO|VmLKmTezl+L$=l^9b$*ok*+Jt``~%Ow`n6Ag0KWm-#R*ja literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/armor/shoulder/tarasque_left.vox b/assets/voxygen/voxel/armor/shoulder/tarasque_left.vox new file mode 100644 index 0000000000000000000000000000000000000000..2b3cb92c101ce763e1686d1c1ff1b9ae1ea40f7e GIT binary patch literal 55999 zcmeI*cYM@j7zgm=O|GCQsDPqkJpsi<&9yyBRnWU0Vkygl3OHhVmtG@xmos+-s<;R4 zE#k(#_uhN&z4zW*ah}if=6anUgg^Mh-^Y}fKmYju@MfQn8< zqar9y*XuNn(bQT+P~m+U#Z#L`dqG9hsh^K&FQ{LmIF0s#_9~CzekzJ0BC61+PsCJJ zqkJ08BO;nc$GWIfH4)W>h^i{@sg2r&jH5P9uTugV<GPO<* zs1YqdChnuXN=2cft19KBIBM608r3*f;~1WU=I2sI7MfQ`Bju;PDnv|CMNFe2R1s0= zoCR5g7KjS1jI4oZW=7+bp}b(7HeSL)aVsvTl9|vrZH;0~dmHa*eHG5JMX`_TywTdr z9DK}i?XhN_?-(O!1gkRBcbqne`)T8F-r7_1@ubMC#`XB1xN#p3HZxY*=8D1R*g1+D zdqjo0NAW54h^p)!#b?wbs;YaG-dj|4_b5K=9=XEZqsn@V8r?mLAGRL3YB;KKLNucA z3DL&&hK7bx89r!f>9}+IvW~aeJzN-{8n?pZmX&jP`xY)p6plNnrLg$eeR`cgwArv; z+uQRG8MtO)=-Pt|LkABm3>whCutlh{Fl~Bcp}t{aAu>L;%(3k`{@-`pKP!4IMwhQw zsNa0VO1sYG<>f0a_ljDVH@^EbxxC|6G>)JD$&ne89^eDo_-(XZX0D(g#BvBj~wII=J~Z6IZ<<}bv~bm9ATyso~(4%@Y@?l!*(1EFEfsY zZ%7;sKiD`LehcAf_=Sw4Sp`b7DwL)ll!l)foabhBC{2GT%>XD3epRR{!p3&pfm?UX%2$Y91Nv71WI!#l;$uf&EZg* zBcL=3p)^NAX^w)@91W#821;`*l;$`n&GAs06QDFFLTOHd(wq#XIR#2{DwO6lD9s`$ z&FN5@#Za0vpfqPfY0iSuoDHQp2TF4;l;%7r%@Qch`B0h*pfndkX)c1&TnweT1WI!$ zl;$!h&E-&ui<~}IR{ZN_*pfnFcX&!>oJPf6I1WNNLl;$xg z&Ers-C!jP>LTR3Y(mV~Nc?L@JER^OsD9!UwnirrnFG6Wvg3`PUrFjKP^D30)H7L#N zP?|TOG;cy_-h$G+4W)SpO7kw1<~=CQ`%sz>pfn#sX+DC|d<>=e1WNNMl;$%i&F4^> zFQ7DELTSE&(tHi2`36e!EtKXvD9!g!njfGvKSF7Kg3|m9rTGO)^DC5QDU{|nD9!Is znm?d4e?n>gg3|mAr71vZ6!pLUKQMb!qZ5bIn(!v51gMz#wydr5ft{Hv8`5sVCaPj^ zxI+iLl~L&$?qr%dhv{havr$naD|7l$r7|2277GtEtxPgy^Wd-%3>z|w<=GZbYE&3C zvLWH*=9DI_p&s5ibJs~*GtR$H%I7^wCg?4N)0Fa4@N^+5_uPDG?j^;6eQDoyZY!Ub z9M5Vq6F$1S)G%jNimwg_Lq;{*WqaDOy9RPYuUCjWlK%A=6PB~ORc1n-Q+rL03mN{E z4Ta?5#ER$2BTMJXCvG;oNwfW0`FVO>9@&^I*?V1VnK)%dCvwsHhCfGigd$3ERxbF`XK`(xg*pC~us;gpdc#PAV-A?D<)j-c9ZyR5jK>*z{aX zh#)D9HFT;*KjR!EGvkE4y9_VhPu(}pbJE(?*VA(I?W}yizI=54=KAWR{JsCu{9IXnwOE!H=gY$E%d)Y# zRrU`LN(ak{^JLF?Fc>_U_q4lCs{j9=oV0IRUHt#Q E0lystqW}N^ literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/humanoid_armor_belt_manifest.ron b/assets/voxygen/voxel/humanoid_armor_belt_manifest.ron index 1ddab8aa04..bfa38ec946 100644 --- a/assets/voxygen/voxel/humanoid_armor_belt_manifest.ron +++ b/assets/voxygen/voxel/humanoid_armor_belt_manifest.ron @@ -76,5 +76,13 @@ vox_spec: ("armor.belt.twigsflowers_belt", (-4.0, -3.5, -1.0)), color: None ), + "Tarasque":( + vox_spec: ("armor.belt.tarasque", (-5.0, -3.5, 2.0)), + color: None + ), + "Bonerattler":( + vox_spec: ("armor.belt.bonerattler", (-5.0, -4.5, 2.0)), + color: None + ), }, )) diff --git a/assets/voxygen/voxel/humanoid_armor_chest_manifest.ron b/assets/voxygen/voxel/humanoid_armor_chest_manifest.ron index 93eb3a18a7..c17403b4e2 100644 --- a/assets/voxygen/voxel/humanoid_armor_chest_manifest.ron +++ b/assets/voxygen/voxel/humanoid_armor_chest_manifest.ron @@ -134,6 +134,14 @@ vox_spec: ("armor.chest.leather-2", (-7.0, -3.5, 2.0)), color: None ), + "Tarasque":( + vox_spec: ("armor.chest.tarasque", (-8.0, -4.5, 2.0)), + color: None + ), + "Bonerattler":( + vox_spec: ("armor.chest.bonerattler", (-7.0, -4.5, 2.0)), + color: None + ), }, ) ) diff --git a/assets/voxygen/voxel/humanoid_armor_foot_manifest.ron b/assets/voxygen/voxel/humanoid_armor_foot_manifest.ron index ca038be44d..b2432b066d 100644 --- a/assets/voxygen/voxel/humanoid_armor_foot_manifest.ron +++ b/assets/voxygen/voxel/humanoid_armor_foot_manifest.ron @@ -72,5 +72,13 @@ vox_spec: ("armor.foot.twigsflowers_foot", (-2.5, -3.5, -2.0)), color: None ), + "Tarasque":( + vox_spec: ("armor.foot.tarasque", (-2.5, -3.5, -2.0)), + color: None + ), + "Bonerattler":( + vox_spec: ("armor.foot.bonerattler", (-2.5, -3.5, -2.0)), + color: None + ), }, )) diff --git a/assets/voxygen/voxel/humanoid_armor_hand_manifest.ron b/assets/voxygen/voxel/humanoid_armor_hand_manifest.ron index 109dbace12..9cf0fa7a07 100644 --- a/assets/voxygen/voxel/humanoid_armor_hand_manifest.ron +++ b/assets/voxygen/voxel/humanoid_armor_hand_manifest.ron @@ -160,5 +160,25 @@ color: None ) ), + "Tarasque": ( + left: ( + vox_spec: ("armor.hand.tarasque_left", (-2.5, -2.5, -2.5)), + color: None + ), + right: ( + vox_spec: ("armor.hand.tarasque_right", (-2.5, -2.5, -2.5)), + color: None + ) + ), + "Bonerattler": ( + left: ( + vox_spec: ("armor.hand.bonerattler_left", (-1.5, -1.5, -2.5)), + color: None + ), + right: ( + vox_spec: ("armor.hand.bonerattler_right", (-1.5, -1.5, -2.5)), + color: None + ) + ), }, )) diff --git a/assets/voxygen/voxel/humanoid_armor_pants_manifest.ron b/assets/voxygen/voxel/humanoid_armor_pants_manifest.ron index bb15cc6876..9b8e94c453 100644 --- a/assets/voxygen/voxel/humanoid_armor_pants_manifest.ron +++ b/assets/voxygen/voxel/humanoid_armor_pants_manifest.ron @@ -92,5 +92,13 @@ vox_spec: ("armor.pants.twigsflowers_pants", (-6.0, -3.5, 0.0)), color: None ), + "Tarasque":( + vox_spec: ("armor.pants.tarasque", (-6.0, -4.5, 1.0)), + color: None + ), + "Bonerattler":( + vox_spec: ("armor.pants.bonerattler", (-5.0, -3.5, 1.0)), + color: None + ), }, )) diff --git a/assets/voxygen/voxel/humanoid_armor_shoulder_manifest.ron b/assets/voxygen/voxel/humanoid_armor_shoulder_manifest.ron index 873a88adc3..7f9fbc7fb6 100644 --- a/assets/voxygen/voxel/humanoid_armor_shoulder_manifest.ron +++ b/assets/voxygen/voxel/humanoid_armor_shoulder_manifest.ron @@ -249,7 +249,27 @@ right: ( vox_spec: ("armor.shoulder.druid_right", (-2.0, -4.5, -3.0)), color: None - ), - ), + ) + ), + "Tarasque": ( + left: ( + vox_spec: ("armor.shoulder.tarasque_left", (-5.0, -3.5 , 0.0)), + color: None + ), + right: ( + vox_spec: ("armor.shoulder.tarasque_right", (-0.0, -3.5, 0.0)), + color: None + ) + ), + "Bonerattler": ( + left: ( + vox_spec: ("armor.shoulder.bonerattler_left", (-4.0, -3.5 , 1.0)), + color: None + ), + right: ( + vox_spec: ("armor.shoulder.bonerattler_right", (-1.0, -3.5, 1.0)), + color: None + ) + ), }, )) diff --git a/assets/voxygen/voxel/humanoid_main_weapon_manifest.ron b/assets/voxygen/voxel/humanoid_main_weapon_manifest.ron index 96bec81511..5913a9819a 100644 --- a/assets/voxygen/voxel/humanoid_main_weapon_manifest.ron +++ b/assets/voxygen/voxel/humanoid_main_weapon_manifest.ron @@ -543,10 +543,14 @@ color: None ), // Healing staff - Staff("Sceptre"): ( + Staff("Sceptre"): ( vox_spec: ("weapon.staff.wood-nature", (-1.0, -6.0, -5.0)), color: None ), + Staff("SceptreVelorite"): ( + vox_spec: ("weapon.staff.ore-nature", (-1.0, -6.0, -5.0)), + color: None + ), // Misc Debug("Boost"): ( vox_spec: ("weapon.tool.broom_belzeshrub_purple", (-3.0, -4.0, -4.0)), diff --git a/assets/voxygen/voxel/sprite/furniture/hanging_sign-0.vox b/assets/voxygen/voxel/sprite/furniture/hanging_sign-0.vox index 2bc45fd6f93bf51926b2891582b4ce142bf8c355..d5e31fdf9bdc2db9102079ac7844f4da0adf476f 100644 GIT binary patch literal 2832 zcmeIzzmD8g6vy%Fd(Zv<$A4yxM1e#~gb>;SQlKqDl%UlnAO#79wA+U|55Oy=MO5@W z2QM?F$Ck|3LQ0jMW=HzycYJqzjy-eN^UF`KKYy>3dimt`M?!5$sh@A(JS)cmFON?! z;q|X?ZvSxstfPMGzoJF^(b zk=mS%fxyDSBOoFnqoAUp$AHnC^+XQ{x|w=5n>|v=qB~)ZY|;szkuV1W3kQ#Yh=h!S ziiREoMqv&;Ad_6oNtW(PE*5I0hK8B>J89vLV`aHl%Qe`G9H}kW0D*;rM?geEMnOeG zj{&3Q8Z6g9uOm-(?Phw;cC|+;chQ|=mSYyF9kU>?aPSC-NXRItXy`Fubj+g1M6V-H znB8WS=YBkU!>`hLW_V^mVBz2q5Rs5kP|?t1!04GlkI6HGJo$^6Ju?C`0y6^l5ttE} z0fB{sM?geEMnOeGj{##~20f;*$wbdnU*!f8+EjYhRgRQOUpROKL?mPs zR5bLJ=UZLPP z)R8)|o~RS&X4W$`sSE3cn$(pV0^N8|W1ZAJ>pk_6L)*+1Y|n2<&$(#*W=3*i?L^AJ zb;1ps@njgd4kYSK7S=0uBYSed2sbi+TweX~{Szhs{jS~J-R%z^K7)rn@c-#D literal 4484 zcmeI#J&!Bp83tf`K0Nl=W6$@uy*md|L{St`Boq-+2!aR!K_XH_Xz58>en9>LZImj% z@07c?C%1s-C4iSnVlWa{`JeRpMO}bR$qMh>7T{wAH{0*mruX>`0#k) zU&0%H!PkHL=F>l9iho~*t5rC!Ucxh%)h(RXFX0nYa0}1DOZXgI!zsLm7oNkHaE=_y zGfRA1FB`deiCI45)rduy=<**y_V7LC5U$~VZ3{dWU$dU`et_x5PKA$C;g<$Aa{JO=X#+RdZCw& zDRmiCdZkz1vvy3a%b>B|=rU;aR+mAicV>`5ulLq_#}E3T%V6|AQ&3V-)6mkJu*DJ4I^SU zBy8D{vgbg?krO!uB^5OdEgd}rBNOxCZE&_1(IXeu*-H>)=E!bQkX^$tGY2sn61MC} z*>fP{$cdbSl8Ty!mX4l*k%>7ohrNi-*=u;Q|B~Ip_3;`6N3$GXqeq5EvkF604nV64eIhw_ukG!z3KD`FP$t)+c$nazqVm2gf*^#p6K*o_1 zIRzyZH4QBtJp&^X^T{msI@|M+7nYM*a_1#?&F0rA$jy?Qg_sQqTXv-EIgoMWL{33T zMNLCXN6)~>#GISOUgz8_@{+%Xiy791>!mPD;k*=PDa=C5hJ-CUQuZ9kIC3JVproRv zp{1i|U}R!0%wkWXM_!88^#K&w-31Cvpl(Dry>9I(i01Cg#el_Bz}1Z0}3u{K=)d#*bXrW~$9pn@NVXnTXkt zuw_Teo&y<2PUIAnRMa%Ibo302Ow6^J>_zm*OYQoq-2)oedgJpF$*yp61MC} z*>fP{$cdbSl8Ty!mX4l*k%_r6i@naxEjru#(wL<&OKX`C;<#lFGt8ia%Whu0_^e0~pRU_-)|9VvSbWE?q>Q&3V-)6mkxu3%b?OLT?VyY>oRB@-{>-E z^;VZbr+2yxdYy=1@V$d|8I0CP{gKn;*<2DoGMR5-Ki}5Rv-|Pvemq~-1k3E0*)#g= zxY_;K>-E{SbatO%qi^Z-;p`r+FK5Tf)#VySBp35A>u0&h)sy#lx`ok`bN}SLKbiZ< z%uio?#owy`s0VI=zo7p zefHUB_n-ZI4t~A{{y*2i4{?0|Pxi0-r+@$VPyQY*pKtHK`L?*9KiT}`*T4UGxqtQR z^8W4bhWkIi_~rfE_saX{zp8&c_Ja>Txc~OO_wJv3^wItI@4x@!`uE>`cYoXg{tJj~ Bk(2-c diff --git a/assets/voxygen/voxel/sprite/misc/street_lamp.vox b/assets/voxygen/voxel/sprite/misc/street_lamp.vox index 933e5fa1bd8f2c74db7ad864f0a5cb7b1a8a3843..1eb3a3fe4dd630414a82a751aa35897ba4fa8f5b 100644 GIT binary patch literal 3608 zcmeI!ONwP#6^HS=_g-u5c)uSR@2ZYqLnMWi>|~>qRFX6mN+`}8=MW!21lN9b&O5UCTEkg$=T#=a^xvj$JpX* zake;HoGs24N1k$ZjBU;~XPdLl+2(9>+ z~rKPSI0Qu9B>Xe2b=@W0Y{#4 zb&NyKA?J{D$T{R3a^xvj$2j5~agI1goFmQ=N1k$ZjAPC*=a_TMIp!R5arDb?1BpH^za0o93N0=@4>kW2uKfG2 zoN?t0Jrac$SI*#t9EsA;B~LyAiCX&7m-{VsUOD618Q0FZcE+_cuAQMrqR`^n8N84q zQTn;$$wwejOJDkOzopJ=XWTgB#u+!xxN*jfGxSIlTHH8;7jh&@KbJiD2qbFhOJDA{ z)Oq8KTkpxOcjDH4Z{7FSJ#XDp7BVDCKbI_J$fcHR=W_j>>+if%ciyQx*Xj{*=W}r9 zJ<_KhxzxIQ{QT!X`D_*c{{P+Ew{O=U`S=Vzz61ZCci@}M_1|{?vVQa1zpnrO=l|W| z(_d_?fB61zee<*W*XQ(4KRx-c&+8vvf4cts2S@AoKfYN1@!j{=@1Gy7Uw`lDJLlD_ cSL+`=f4+YC^5y!)ix=PJUw`p#y?g`w6GWG1KL7v# literal 4776 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 diff --git a/assets/voxygen/voxel/weapon/staff/ore-nature.vox b/assets/voxygen/voxel/weapon/staff/ore-nature.vox new file mode 100644 index 0000000000000000000000000000000000000000..892591cdf942ba3996cf743d855bea5f0c563ea4 GIT binary patch literal 1680 zcmaLWUrbY190%~KM2Ryqdthc^&cp{p$X*s>eAt6;dsvobFW-HOdvx67lkfN5b548z zw(dC)9TAbHx`wwIlCUBz4Q=s7=^buP%A_bAIM~+E=wRVCL`usoWyq34-BM1{WXO_> z+@u^FCnvecO&KIkj*)R5R~bwXiRLlV`nZF{=zeANpo1xvog7vVDwpOO&hwC%lv1Qk zzZjEH#`HUk`9xX6d4}^i<{`11N5&pkmNM8q>0_>xa*&%c(%qd>PIpQ)Q@d|Dm}1;K z4|b+l9=Gi2bdj5!8JwFjrVLqfrT0BomGN+&sWaKhl3sL8nMJ%7re4fWmUI?-)^%l> z`i<+#kR_eXPL_1exH36h%hXHQ$&$`x&%L26Q+sbHLzZ+Nd)|byOzoRchAioP_WYa5 zGPR%G&(73=o63+S9b^w4QoX73PukfIG6!pbX)Rcu$Sy6~J zH6fJ7gD7qaAiUp?{KNV4<6D=8Q5^|kLtzl>f_|*_`>@jIMTvI_;_*2AxjBeNqbQFR zp>ox7Y+4&byrvv`-s1D%GnAJvA#-z(>1jwR#d|XhIduxs*@=P96}X&Shnd^;_~W-0 z^q$Ygg_IX}p9b&@kp-{+GVe=sMew!Pk6%WC=QH!?ShF^Q-CI|nqjdwib_tS)1fwSe zt!F;Q;?6qc9NGkLa|QhIHxb&n9MQ4}mPG^eYt!S|pYDNs^t1W%4v)nEDA{|2T{FADzXPGo#r3%`{r> z%%Zlo7B6@z;wJnB=d9rQgIDMGnD5s@_TX`-fvRR`HHXDmGnA;B zUXC>{$6}IGjzH1Ot>5Y`X42Yp1Z?7u`ovJ{px7h> z0yagTI@2KS&Y3y_HcdysX8x+r@K2C7OGm)w=yT^9q|KkJBVY^kg^>nncSq_7*y5;G zU%b#*WLV;2iB8(`g*pPZLSH%1Ano3PIs&#zU)|FnZEa5-fxNRX*4b0*3^G!jjtmm? z;JnGAv#-{z2I}2`Mt5-aL;q>s@ApqW=4)L^Daq|^lAD_(*VjqL<0Pl2N$NVu?(WGb z|ByeNpFL^Y+LOuM^)&PTd79sPnwI*H)9SMasrRUx?)R1xJE^&!{=AvWpI@49UA?s} F{SV$XnT-Gd delta 578 zcmWlV&1+LZ6vfYbbLYLp*J#t$^do5!s)$XYl15Uhg&-IuiVZ~wO;NCE(ng~dL~t3X z-MDH+aV1n2f-5(5lSZpsp}2A5#+84_?Rf*gxp(H=Id^9EVxNOjA&(I9Js zO~}9oB-VnQVjgKj{2nCQgX8t!5;;TdG`*-Bt_@?PD|OiDCM-ou5vC6tY{13{4IO(3 zgYOVxaRkTt2A3G(yFX!_BY4ga__hwm?ZahLkDi7RatP0*X6o=|8K4(fu~uBmzVJP6F$Gm@C7E?KG<=Ool+14IyM~FY&NU;=_xJFUeGIZ(^_84YxTy0 z?(L-X%ZDlb`zxpae$VLpUFg?O(BnSz{~x^Bm9^^3xr8pxW%PFGqPA-D+PMXNc^|s} z99r9cp~dusR&wX{UU62RU0={zE};)EC$+G2Q_JlKS|}9s_58kG%74_WueJ|LcG)=r DCz^t| diff --git a/common/src/comp/body.rs b/common/src/comp/body.rs index fd30c24a20..9bc38b8c30 100644 --- a/common/src/comp/body.rs +++ b/common/src/comp/body.rs @@ -148,7 +148,7 @@ impl Body { Body::Dragon(_) => 2.5, Body::BirdSmall(_) => 0.2, Body::FishSmall(_) => 0.2, - Body::BipedLarge(_) => 2.0, + Body::BipedLarge(_) => 3.0, Body::Golem(_) => 2.5, Body::QuadrupedLow(_) => 1.0, Body::Object(_) => 0.3, @@ -172,7 +172,7 @@ impl Body { Body::Dragon(_) => 5.0, Body::BirdSmall(_) => 0.4, Body::FishSmall(_) => 0.4, - Body::BipedLarge(_) => 4.0, + Body::BipedLarge(_) => 5.0, Body::Golem(_) => 5.0, Body::QuadrupedLow(_) => 0.5, Body::Object(_) => 0.6, @@ -184,36 +184,36 @@ impl Body { match self { Body::Humanoid(_) => 400, Body::QuadrupedSmall(quadruped_small) => match quadruped_small.species { - quadruped_small::Species::Boar => 180, - quadruped_small::Species::Batfox => 100, - quadruped_small::Species::Dodarock => 320, - quadruped_small::Species::Holladon => 250, - quadruped_small::Species::Hyena => 150, - quadruped_small::Species::Truffler => 180, - _ => 80, + quadruped_small::Species::Boar => 360, + quadruped_small::Species::Batfox => 200, + quadruped_small::Species::Dodarock => 640, + quadruped_small::Species::Holladon => 500, + quadruped_small::Species::Hyena => 300, + quadruped_small::Species::Truffler => 360, + _ => 200, }, Body::QuadrupedMedium(quadruped_medium) => match quadruped_medium.species { - quadruped_medium::Species::Grolgar => 300, - quadruped_medium::Species::Saber => 200, - quadruped_medium::Species::Tiger => 200, - quadruped_medium::Species::Tuskram => 300, - quadruped_medium::Species::Lion => 400, - quadruped_medium::Species::Tarasque => 600, - quadruped_medium::Species::Wolf => 200, + quadruped_medium::Species::Grolgar => 600, + quadruped_medium::Species::Saber => 400, + quadruped_medium::Species::Tiger => 400, + quadruped_medium::Species::Tuskram => 600, + quadruped_medium::Species::Lion => 800, + quadruped_medium::Species::Tarasque => 1200, + quadruped_medium::Species::Wolf => 400, quadruped_medium::Species::Frostfang => 400, - quadruped_medium::Species::Mouflon => 300, - quadruped_medium::Species::Catoblepas => 500, - quadruped_medium::Species::Bonerattler => 300, - _ => 200, + quadruped_medium::Species::Mouflon => 500, + quadruped_medium::Species::Catoblepas => 1000, + quadruped_medium::Species::Bonerattler => 400, + _ => 400, }, Body::BirdMedium(bird_medium) => match bird_medium.species { bird_medium::Species::Chicken => 50, bird_medium::Species::Duck => 50, bird_medium::Species::Goose => 60, bird_medium::Species::Parrot => 60, - bird_medium::Species::Peacock => 55, - bird_medium::Species::Cockatrice => 110, - bird_medium::Species::Eagle => 110, + bird_medium::Species::Peacock => 60, + bird_medium::Species::Cockatrice => 400, + bird_medium::Species::Eagle => 400, _ => 100, }, Body::FishMedium(_) => 50, @@ -223,11 +223,11 @@ impl Body { Body::BirdSmall(_) => 50, Body::FishSmall(_) => 20, Body::BipedLarge(biped_large) => match biped_large.species { - biped_large::Species::Ogre => 700, - biped_large::Species::Cyclops => 800, - biped_large::Species::Wendigo => 800, - biped_large::Species::Troll => 600, - biped_large::Species::Dullahan => 1200, + biped_large::Species::Ogre => 2500, + biped_large::Species::Cyclops => 2000, + biped_large::Species::Wendigo => 2000, + biped_large::Species::Troll => 1500, + biped_large::Species::Dullahan => 2000, _ => 1000, }, Body::Object(_) => 10000, @@ -238,15 +238,15 @@ impl Body { _ => 50, }, Body::QuadrupedLow(quadruped_low) => match quadruped_low.species { - quadruped_low::Species::Crocodile => 200, - quadruped_low::Species::Alligator => 200, - quadruped_low::Species::Salamander => 100, - quadruped_low::Species::Monitor => 80, - quadruped_low::Species::Asp => 80, - quadruped_low::Species::Tortoise => 200, - quadruped_low::Species::Rocksnapper => 500, - quadruped_low::Species::Pangolin => 60, - quadruped_low::Species::Maneater => 250, + quadruped_low::Species::Crocodile => 600, + quadruped_low::Species::Alligator => 600, + quadruped_low::Species::Salamander => 400, + quadruped_low::Species::Monitor => 150, + quadruped_low::Species::Asp => 400, + quadruped_low::Species::Tortoise => 600, + quadruped_low::Species::Rocksnapper => 1000, + quadruped_low::Species::Pangolin => 80, + quadruped_low::Species::Maneater => 400, _ => 200, }, } @@ -287,7 +287,7 @@ impl Body { bird_medium::Species::Peacock => 10, bird_medium::Species::Cockatrice => 10, bird_medium::Species::Eagle => 10, - _ => 10, + _ => 20, }, Body::FishMedium(_) => 10, Body::Dragon(dragon) => match dragon.species { @@ -308,7 +308,7 @@ impl Body { _ => 150, }, Body::Critter(critter) => match critter.species { - _ => 10, + _ => 20, }, Body::QuadrupedLow(quadruped_low) => match quadruped_low.species { quadruped_low::Species::Crocodile => 20, @@ -331,7 +331,7 @@ impl Body { Body::Humanoid(_) => 5, Body::QuadrupedSmall(quadruped_small) => match quadruped_small.species { quadruped_small::Species::Boar => 6, - quadruped_small::Species::Batfox => 6, + quadruped_small::Species::Batfox => 2, quadruped_small::Species::Dodarock => 6, quadruped_small::Species::Holladon => 8, quadruped_small::Species::Hyena => 6, @@ -416,11 +416,11 @@ impl Body { Body::BirdSmall(_) => 1, Body::FishSmall(_) => 1, Body::BipedLarge(biped_large) => match biped_large.species { - _ => 5, + _ => 2, }, Body::Object(_) => 0, Body::Golem(golem) => match golem.species { - _ => 10, + _ => 5, }, Body::Critter(critter) => match critter.species { _ => 1, diff --git a/common/src/comp/inventory/item/mod.rs b/common/src/comp/inventory/item/mod.rs index 4a66786a8d..b4164ac03c 100644 --- a/common/src/comp/inventory/item/mod.rs +++ b/common/src/comp/inventory/item/mod.rs @@ -10,6 +10,7 @@ use crate::{ lottery::Lottery, terrain::{Block, BlockKind}, }; +use rand::prelude::*; use serde::{Deserialize, Serialize}; use specs::{Component, FlaggedStorage}; use specs_idvs::IdvStorage; @@ -144,6 +145,7 @@ impl Item { } pub fn try_reclaim_from_block(block: Block) -> Option { + let mut rng = rand::thread_rng(); match block.kind() { BlockKind::Apple => Some(assets::load_expect_cloned("common.items.food.apple")), BlockKind::Mushroom => Some(assets::load_expect_cloned("common.items.food.mushroom")), @@ -171,7 +173,27 @@ impl Item { BlockKind::ShortGrass => Some(assets::load_expect_cloned("common.items.grasses.short")), BlockKind::Coconut => Some(assets::load_expect_cloned("common.items.food.coconut")), BlockKind::Chest => { - let chosen = assets::load_expect::>("common.loot_table"); + let chosen = match rng.gen_range(0, 5) { + 0 => { + assets::load_expect::>("common.loot_tables.loot_table_food") + }, + 1 => assets::load_expect::>( + "common.loot_tables.loot_table_crafting", + ), + 2 => assets::load_expect::>( + "common.loot_tables.loot_table_weapon_uncommon", + ), + 3 => assets::load_expect::>( + "common.loot_tables.loot_table_armor_misc", + ), + _ => assets::load_expect::>("common.loot_tables.loot_table"), + }; + let chosen = chosen.choose(); + Some(assets::load_expect_cloned(chosen)) + }, + BlockKind::Crate => { + let chosen = + assets::load_expect::>("common.loot_tables.loot_table_food"); let chosen = chosen.choose(); Some(assets::load_expect_cloned(chosen)) diff --git a/common/src/comp/inventory/item/tool.rs b/common/src/comp/inventory/item/tool.rs index 335807ad3c..1356a3e636 100644 --- a/common/src/comp/inventory/item/tool.rs +++ b/common/src/comp/inventory/item/tool.rs @@ -227,8 +227,27 @@ impl Tool { buildup_duration: Duration::from_millis(0), recover_duration: Duration::from_millis(1000), base_healthchange: (150.0 * self.base_power()) as i32, - range: 10.0, - max_angle: 45.0, + range: 100.0, + max_angle: 90.0, + }, + ] + } else if kind == "SceptreVelorite" { + vec![ + BasicMelee { + energy_cost: 0, + buildup_duration: Duration::from_millis(0), + recover_duration: Duration::from_millis(300), + base_healthchange: (-10.0 * self.base_power()) as i32, + range: 5.0, + max_angle: 20.0, + }, + BasicMelee { + energy_cost: 350, + buildup_duration: Duration::from_millis(0), + recover_duration: Duration::from_millis(1000), + base_healthchange: (150.0 * self.base_power()) as i32, + range: 100.0, + max_angle: 90.0, }, ] } else { diff --git a/common/src/lottery.rs b/common/src/lottery.rs index 6e4546f88e..f25a5966b7 100644 --- a/common/src/lottery.rs +++ b/common/src/lottery.rs @@ -51,7 +51,7 @@ mod tests { use crate::{assets, comp::Item}; #[test] fn test_loot_table() { - let test = assets::load_expect::>("common.loot_table"); + let test = assets::load_expect::>("common.loot_tables.loot_table"); for (_, item) in test.iter() { assert!( diff --git a/common/src/terrain/block.rs b/common/src/terrain/block.rs index 19e5499dbd..f2899f69a7 100644 --- a/common/src/terrain/block.rs +++ b/common/src/terrain/block.rs @@ -440,6 +440,7 @@ impl BlockKind { BlockKind::Stones => true, BlockKind::Twigs => true, BlockKind::ShinyGem => true, + BlockKind::Crate => true, _ => false, } } @@ -495,8 +496,9 @@ impl Block { | BlockKind::WardrobeSingle | BlockKind::WardrobeDouble | BlockKind::Pot + | BlockKind::Chest | BlockKind::DropGate - | BlockKind::DropGateBottom + | BlockKind::DropGateBottom | BlockKind::Door => Some(self.color[0] & 0b111), _ => None, } diff --git a/server/src/events/entity_manipulation.rs b/server/src/events/entity_manipulation.rs index f03fa99906..1876e67431 100644 --- a/server/src/events/entity_manipulation.rs +++ b/server/src/events/entity_manipulation.rs @@ -1,4 +1,4 @@ -use crate::{client::Client, Server, SpawnPoint, StateExt}; +use crate::{client::Client, comp::quadruped_small, Server, SpawnPoint, StateExt}; use common::{ assets, comp::{ @@ -15,6 +15,7 @@ use common::{ vol::{ReadVol, Vox}, }; use comp::item::Reagent; +use rand::prelude::*; use specs::{join::Join, saveload::MarkerAllocator, Entity as EcsEntity, WorldExt}; use tracing::error; use vek::Vec3; @@ -182,21 +183,182 @@ pub fn handle_destroy(server: &mut Server, entity: EcsEntity, cause: HealthSourc .write_storage::() .insert(entity, comp::CharacterState::default()); } else if state.ecs().read_storage::().contains(entity) { - // Replace npc with loot + // Decide for a loot drop before turning into a lootbag + let old_body = state.ecs().write_storage::().remove(entity); + let mut rng = rand::thread_rng(); + let drop = match old_body { + Some(common::comp::Body::Humanoid(_)) => match rng.gen_range(0, 4) { + 0 => assets::load_expect::>( + "common.loot_tables.loot_table_humanoids", + ), + 1 => assets::load_expect::>( + "common.loot_tables.loot_table_armor_light", + ), + 2 => assets::load_expect::>( + "common.loot_tables.loot_table_armor_cloth", + ), + 3 => assets::load_expect::>( + "common.loot_tables.loot_table_weapon_common", + ), + _ => assets::load_expect::>( + "common.loot_tables.loot_table_humanoids", + ), + }, + Some(common::comp::Body::QuadrupedSmall(quadruped_small)) => { + match quadruped_small.species { + quadruped_small::Species::Dodarock => match rng.gen_range(0, 6) { + 0 => assets::load_expect::>( + "common.loot_tables.loot_table_armor_misc", + ), + 1 => assets::load_expect::>( + "common.loot_tables.loot_table_rocks", + ), + _ => assets::load_expect::>( + "common.loot_tables.loot_table_rocks", + ), + }, + _ => match rng.gen_range(0, 4) { + 0 => assets::load_expect::>( + "common.loot_tables.loot_table_food", + ), + 1 => assets::load_expect::>( + "common.loot_tables.loot_table_armor_misc", + ), + 2 => assets::load_expect::>( + "common.loot_tables.loot_table_animal_parts", + ), + _ => assets::load_expect::>( + "common.loot_tables.loot_table_animal_parts", + ), + }, + } + }, + Some(common::comp::Body::QuadrupedMedium(quadruped_medium)) => { + match quadruped_medium.species { + _ => match rng.gen_range(0, 4) { + 0 => assets::load_expect::>( + "common.loot_tables.loot_table_food", + ), + 1 => assets::load_expect::>( + "common.loot_tables.loot_table_armor_misc", + ), + 2 => assets::load_expect::>( + "common.loot_tables.loot_table_animal_parts", + ), + _ => assets::load_expect::>( + "common.loot_tables.loot_table_animal_parts", + ), + }, + } + }, + Some(common::comp::Body::BirdMedium(bird_medium)) => match bird_medium.species { + _ => match rng.gen_range(0, 3) { + 0 => { + assets::load_expect::>("common.loot_tables.loot_table_food") + }, + 1 => assets::load_expect::>( + "common.loot_tables.loot_table_armor_misc", + ), + _ => assets::load_expect::>("common.loot_tables.loot_table"), + }, + }, + Some(common::comp::Body::BipedLarge(biped_large)) => match biped_large.species { + _ => match rng.gen_range(0, 9) { + 0 => { + assets::load_expect::>("common.loot_tables.loot_table_food") + }, + 1 => assets::load_expect::>( + "common.loot_tables.loot_table_armor_misc", + ), + 2 => assets::load_expect::>( + "common.loot_tables.loot_table_armor_light", + ), + 3 => assets::load_expect::>( + "common.loot_tables.loot_table_armor_heavy", + ), + 4 => assets::load_expect::>( + "common.loot_tables.loot_table_armor_misc", + ), + 5 => assets::load_expect::>( + "common.loot_tables.loot_table_weapon_common", + ), + 6 => assets::load_expect::>( + "common.loot_tables.loot_table_weapon_uncommon", + ), + 7 => assets::load_expect::>( + "common.loot_tables.loot_table_weapon_rare", + ), + _ => assets::load_expect::>("common.loot_tables.loot_table"), + }, + }, + Some(common::comp::Body::Golem(golem)) => match golem.species { + _ => match rng.gen_range(0, 9) { + 0 => { + assets::load_expect::>("common.loot_tables.loot_table_food") + }, + 1 => assets::load_expect::>( + "common.loot_tables.loot_table_armor_misc", + ), + 2 => assets::load_expect::>( + "common.loot_tables.loot_table_armor_light", + ), + 3 => assets::load_expect::>( + "common.loot_tables.loot_table_armor_heavy", + ), + 4 => assets::load_expect::>( + "common.loot_tables.loot_table_armor_misc", + ), + 5 => assets::load_expect::>( + "common.loot_tables.loot_table_weapon_common", + ), + 6 => assets::load_expect::>( + "common.loot_tables.loot_table_weapon_uncommon", + ), + 7 => assets::load_expect::>( + "common.loot_tables.loot_table_weapon_rare", + ), + _ => assets::load_expect::>("common.loot_tables.loot_table"), + }, + }, + Some(common::comp::Body::Critter(critter)) => match critter.species { + _ => match rng.gen_range(0, 3) { + 0 => { + assets::load_expect::>("common.loot_tables.loot_table_food") + }, + 1 => assets::load_expect::>( + "common.loot_tables.loot_table_animal_parts", + ), + _ => assets::load_expect::>("common.loot_tables.loot_table"), + }, + }, + Some(common::comp::Body::Dragon(_)) => { + assets::load_expect::>("common.loot_tables.loot_table_weapon_rare") + }, + Some(common::comp::Body::QuadrupedLow(quadruped_low)) => match quadruped_low.species { + _ => match rng.gen_range(0, 3) { + 0 => { + assets::load_expect::>("common.loot_tables.loot_table_food") + }, + 1 => assets::load_expect::>( + "common.loot_tables.loot_table_animal_parts", + ), + _ => assets::load_expect::>("common.loot_tables.loot_table"), + }, + }, + _ => assets::load_expect::>("common.loot_tables.loot_table"), + }; + let drop = drop.choose(); + // Replace npc with lootbag containing drop let _ = state .ecs() .write_storage() .insert(entity, Body::Object(object::Body::Pouch)); - let mut item_drops = state.ecs().write_storage::(); let item = if let Some(item_drop) = item_drops.get(entity).cloned() { item_drops.remove(entity); item_drop.0 } else { - let chosen = assets::load_expect::>("common.loot_table"); - let chosen = chosen.choose(); - - assets::load_expect_cloned(chosen) + assets::load_expect_cloned(drop) }; let _ = state.ecs().write_storage().insert(entity, item); diff --git a/server/src/sys/terrain.rs b/server/src/sys/terrain.rs index 31a197d1c8..d64b73accf 100644 --- a/server/src/sys/terrain.rs +++ b/server/src/sys/terrain.rs @@ -2,7 +2,7 @@ use super::SysTimer; use crate::{chunk_generator::ChunkGenerator, client::Client, Tick}; use common::{ assets, - comp::{self, item, Alignment, CharacterAbility, ItemConfig, Player, Pos}, + comp::{self, bird_medium, item, Alignment, CharacterAbility, ItemConfig, Player, Pos}, event::{EventBus, ServerEvent}, generation::get_npc_name, msg::ServerMsg, @@ -158,16 +158,16 @@ impl<'a> System<'a> for Sys { shoulder: None, chest: Some(assets::load_expect_cloned( match rand::thread_rng().gen_range(0, 10) { - 0 => "common.items.armor.chest.worker_green_0", - 1 => "common.items.armor.chest.worker_green_1", - 2 => "common.items.armor.chest.worker_red_0", - 3 => "common.items.armor.chest.worker_red_1", - 4 => "common.items.armor.chest.worker_purple_0", - 5 => "common.items.armor.chest.worker_purple_1", - 6 => "common.items.armor.chest.worker_yellow_0", - 7 => "common.items.armor.chest.worker_yellow_1", - 8 => "common.items.armor.chest.worker_orange_0", - _ => "common.items.armor.chest.worker_orange_1", + 0 => "common.items.npc_armor.chest.worker_green_0", + 1 => "common.items.npc_armor.chest.worker_green_1", + 2 => "common.items.npc_armor.chest.worker_red_0", + 3 => "common.items.npc_armor.chest.worker_red_1", + 4 => "common.items.npc_armor.chest.worker_purple_0", + 5 => "common.items.npc_armor.chest.worker_purple_1", + 6 => "common.items.npc_armor.chest.worker_yellow_0", + 7 => "common.items.npc_armor.chest.worker_yellow_1", + 8 => "common.items.npc_armor.chest.worker_orange_0", + _ => "common.items.npc_armor.chest.worker_orange_1", }, )), belt: Some(assets::load_expect_cloned( @@ -312,7 +312,15 @@ impl<'a> System<'a> for Sys { .health .set_to(stats.health.maximum(), comp::HealthSource::Revive); - let can_speak = alignment == comp::Alignment::Npc; + let can_speak = match body { + comp::Body::Humanoid(_) => alignment == comp::Alignment::Npc, + comp::Body::BirdMedium(bird_medium) => match bird_medium.species { + // Parrots like to have a word in this, too... + bird_medium::Species::Parrot => alignment == comp::Alignment::Npc, + _ => false, + }, + _ => false, + }; // TODO: This code sets an appropriate base_damage for the enemy. This doesn't // work because the damage is now saved in an ability diff --git a/voxygen/src/hud/crafting.rs b/voxygen/src/hud/crafting.rs index 99c706a5dc..799e275060 100644 --- a/voxygen/src/hud/crafting.rs +++ b/voxygen/src/hud/crafting.rs @@ -176,6 +176,7 @@ impl<'a> Widget for Crafting<'a> { // Alignment Rectangle::fill_with([136.0, 378.0], color::TRANSPARENT) .top_left_with_margins_on(ids.window_frame, 74.0, 5.0) + .scroll_kids_vertically() .set(ids.align_rec, ui); Rectangle::fill_with([274.0, 340.0], color::TRANSPARENT) .top_right_with_margins_on(ids.window, 74.0, 5.0) @@ -314,24 +315,6 @@ impl<'a> Widget for Crafting<'a> { state.update(|s| s.selected_recipe = Some(name.clone())); } } - // Image BG - /*Rectangle::fill_with([10.0, 10.0], color::TRANSPARENT) - .w_h(20.0, 20.0) - .mid_left_of(state.ids.recipe_names[i]) - .set(state.ids.recipe_img_frame[i], ui); - //Item Image - Image::new( - self.item_imgs - .img_id_or_not_found_img((&recipe.output.0).into()), - ) - .w_h(18.0, 18.0) - .color( - can_perform - .then_some(Some(TEXT_COLOR)) - .unwrap_or(Some(TEXT_GRAY_COLOR)), - ) - .middle_of(state.ids.recipe_img_frame[i]) - .set(state.ids.recipe_img[i], ui);*/ } //Ingredients diff --git a/voxygen/src/hud/mod.rs b/voxygen/src/hud/mod.rs index ddf529cb09..9f4e7e2a71 100644 --- a/voxygen/src/hud/mod.rs +++ b/voxygen/src/hud/mod.rs @@ -192,6 +192,7 @@ widget_ids! { help, help_info, debug_info, + lantern_info, // Window Frames window_frame_0, @@ -430,6 +431,7 @@ impl Show { if !self.esc_menu { self.crafting = open; self.bag = open; + self.map = false; self.want_grab = !open; } } @@ -1582,9 +1584,9 @@ impl Hud { .replace("{key}", help_key.to_string().as_str()), ) .color(TEXT_COLOR) - .top_left_with_margins_on(ui_widgets.window, 5.0, 5.0) + .bottom_left_with_margins_on(ui_widgets.window, 210.0, 10.0) .font_id(self.fonts.cyri.conrod_id) - .font_size(self.fonts.cyri.scale(16)) + .font_size(self.fonts.cyri.scale(12)) .set(self.ids.help_info, ui_widgets); } // Info about Debug Shortcut @@ -1600,11 +1602,29 @@ impl Hud { .replace("{key}", toggle_debug_key.to_string().as_str()), ) .color(TEXT_COLOR) - .down_from(self.ids.help_info, 5.0) + .top_left_with_margins_on(ui_widgets.window, 5.0, 5.0) .font_id(self.fonts.cyri.conrod_id) .font_size(self.fonts.cyri.scale(12)) .set(self.ids.debug_info, ui_widgets); } + // Lantern Key + if let Some(toggle_lantern_key) = global_state + .settings + .controls + .get_binding(GameInput::ToggleLantern) + { + Text::new( + &self + .voxygen_i18n + .get("hud.press_key_to_toggle_lantern_fmt") + .replace("{key}", toggle_lantern_key.to_string().as_str()), + ) + .color(TEXT_COLOR) + .up_from(self.ids.help_info, 2.0) + .font_id(self.fonts.cyri.conrod_id) + .font_size(self.fonts.cyri.scale(12)) + .set(self.ids.lantern_info, ui_widgets); + } } // Help Text @@ -1700,8 +1720,15 @@ impl Hud { { Some(bag::Event::Stats) => self.show.stats = !self.show.stats, Some(bag::Event::Close) => { + self.show.stats = false; self.show.bag(false); - self.force_ungrab = true; + self.show.crafting(false); + if self.show.social == false { + self.show.want_grab = true; + self.force_ungrab = false; + } else { + self.force_ungrab = true + }; }, None => {}, } @@ -1775,8 +1802,15 @@ impl Hud { events.push(Event::CraftRecipe(r)); }, crafting::Event::Close => { + self.show.stats = false; self.show.crafting(false); - self.force_ungrab = true; + self.show.bag(false); + if self.show.social == false { + self.show.want_grab = true; + self.force_ungrab = false; + } else { + self.force_ungrab = true + }; }, } } @@ -1860,6 +1894,8 @@ impl Hud { // Unpause the game if we are on singleplayer so that we can logout #[cfg(feature = "singleplayer")] global_state.unpause(); + self.show.want_grab = true; + self.force_ungrab = false; self.show.settings(false) }, @@ -1996,7 +2032,12 @@ impl Hud { match event { social::Event::Close => { self.show.social(false); - self.force_ungrab = true; + if self.show.bag == false { + self.show.want_grab = true; + self.force_ungrab = false; + } else { + self.force_ungrab = true + }; }, social::Event::ChangeSocialTab(social_tab) => { self.show.open_social_tab(social_tab) @@ -2041,7 +2082,8 @@ impl Hud { { Some(spell::Event::Close) => { self.show.spell(false); - self.force_ungrab = true; + self.show.want_grab = true; + self.force_ungrab = false; }, None => {}, } @@ -2064,7 +2106,8 @@ impl Hud { match event { map::Event::Close => { self.show.map(false); - self.force_ungrab = true; + self.show.want_grab = true; + self.force_ungrab = false; }, map::Event::MapZoom(map_zoom) => { events.push(Event::MapZoom(map_zoom)); diff --git a/voxygen/src/hud/overhead.rs b/voxygen/src/hud/overhead.rs index f7ddf69a2f..5f7d059fcd 100644 --- a/voxygen/src/hud/overhead.rs +++ b/voxygen/src/hud/overhead.rs @@ -193,9 +193,9 @@ impl<'a> Widget for Overhead<'a> { .font_size(font_size) .color(if self.in_group { GROUP_MEMBER - } else { - DEFAULT_NPC - }) + /*} else if targets player { //TODO: Add a way to see if the entity is trying to attack the player, their pet(s) or a member of their group and recolour their nametag accordingly + DEFAULT_NPC*/ + } else {DEFAULT_NPC}) .x_y(0.0, name_y + 1.0) .parent(id) .set(state.ids.name, ui); diff --git a/voxygen/src/hud/skillbar.rs b/voxygen/src/hud/skillbar.rs index 907ac4a5af..08e106cc27 100644 --- a/voxygen/src/hud/skillbar.rs +++ b/voxygen/src/hud/skillbar.rs @@ -700,6 +700,7 @@ impl<'a> Widget for Skillbar<'a> { Some(ToolKind::Bow(_)) => self.imgs.bow_m2, Some(ToolKind::Staff(kind)) => match kind.as_ref() { "Sceptre" => self.imgs.heal_0, + "SceptreVelorite" => self.imgs.heal_0, _ => self.imgs.staff_m2, }, Some(ToolKind::Debug(kind)) => match kind.as_ref() { @@ -726,6 +727,13 @@ impl<'a> Widget for Skillbar<'a> { Color::Rgba(0.3, 0.3, 0.3, 0.8) } }, + "SceptreVelorite" => { + if self.energy.current() as f64 >= 400.0 { + Color::Rgba(1.0, 1.0, 1.0, 1.0) + } else { + Color::Rgba(0.3, 0.3, 0.3, 0.8) + } + }, _ => Color::Rgba(1.0, 1.0, 1.0, 1.0), }, _ => Color::Rgba(1.0, 1.0, 1.0, 1.0), diff --git a/voxygen/src/menu/char_selection/ui.rs b/voxygen/src/menu/char_selection/ui.rs index 526df2c80c..a3fd267cc1 100644 --- a/voxygen/src/menu/char_selection/ui.rs +++ b/voxygen/src/menu/char_selection/ui.rs @@ -44,9 +44,11 @@ widget_ids! { // Background and logo charlist_bg, charlist_frame, + charlist_bottom, + selection_bot, charlist_alignment, selection_scrollbar, - creation_bg, + creation_bot, creation_frame, creation_alignment, server_name_text, @@ -180,8 +182,6 @@ widget_ids! { image_ids! { struct Imgs { - charlist_frame: "voxygen.element.frames.window_4", - server_frame: "voxygen.element.frames.server_frame", // Info Window info_frame: "voxygen.element.frames.info_frame", @@ -192,6 +192,7 @@ image_ids! { delete_button_press: "voxygen.element.buttons.x_red_press", + frame_bot: "voxygen.element.frames.banner_bot", selection: "voxygen.element.frames.selection", selection_hover: "voxygen.element.frames.selection_hover", selection_press: "voxygen.element.frames.selection_press", @@ -210,8 +211,6 @@ image_ids! { staff: "voxygen.element.icons.staff", // Species Icons - male: "voxygen.element.icons.male", - female: "voxygen.element.icons.female", human_m: "voxygen.element.icons.human_m", human_f: "voxygen.element.icons.human_f", orc_m: "voxygen.element.icons.orc_m", @@ -224,6 +223,7 @@ image_ids! { elf_f: "voxygen.element.icons.elf_f", danari_m: "voxygen.element.icons.danari_m", danari_f: "voxygen.element.icons.danari_f", + //unknown: "voxygen.element.icons.missing_icon_grey", // Icon Borders icon_border: "voxygen.element.buttons.border", icon_border_mo: "voxygen.element.buttons.border_mo", @@ -447,6 +447,7 @@ impl CharSelectionUi { }) .title_font_size(self.fonts.cyri.scale(15)) .desc_font_size(self.fonts.cyri.scale(10)) + .parent(ui_widgets.window) .font_id(self.fonts.cyri.conrod_id) .title_text_color(TEXT_COLOR) .desc_text_color(TEXT_COLOR_2); @@ -600,26 +601,21 @@ impl CharSelectionUi { }; // Background for Server Frame - Rectangle::fill_with([386.0, 95.0], color::rgba(0.0, 0.0, 0.0, 0.9)) + Rectangle::fill_with([400.0, 95.0], color::rgba(0.0, 0.0, 0.0, 0.8)) .top_left_with_margins_on(ui_widgets.window, 30.0, 30.0) .set(self.ids.server_frame_bg, ui_widgets); - Image::new(self.imgs.server_frame) - .w_h(400.0, 100.0) - .color(Some(UI_MAIN)) - .middle_of(self.ids.server_frame_bg) - .set(self.ids.server_frame, ui_widgets); // Background for Char List - Rectangle::fill_with([386.0, 788.0], color::rgba(0.0, 0.0, 0.0, 0.8)) - .down_from(self.ids.server_frame_bg, 20.0) - .set(self.ids.charlist_bg, ui_widgets); - Image::new(self.imgs.charlist_frame) - .w_h(400.0, 800.0) - .middle_of(self.ids.charlist_bg) - .color(Some(UI_MAIN)) + Rectangle::fill_with([400.0, 800.0], color::rgba(0.0, 0.0, 0.0, 0.8)) + .down_from(self.ids.server_frame_bg, 5.0) .set(self.ids.charlist_frame, ui_widgets); - Rectangle::fill_with([386.0, 783.0], color::TRANSPARENT) - .middle_of(self.ids.charlist_bg) + Image::new(self.imgs.frame_bot) + .w_h(400.0, 48.0) + .down_from(self.ids.charlist_frame, 0.0) + .color(Some(Color::Rgba(1.0, 1.0, 1.0, 0.8))) + .set(self.ids.selection_bot, ui_widgets); + Rectangle::fill_with([386.0, 800.0], color::TRANSPARENT) + .mid_top_with_margin_on(self.ids.charlist_frame, 2.0) .scroll_kids() .scroll_kids_vertically() .set(self.ids.charlist_alignment, ui_widgets); @@ -951,21 +947,21 @@ impl CharSelectionUi { // Window Rectangle::fill_with( - [386.0, ui_widgets.win_h - ui_widgets.win_h * 0.2], + [400.0, ui_widgets.win_h - ui_widgets.win_h * 0.15], color::rgba(0.0, 0.0, 0.0, 0.8), ) .top_left_with_margins_on(ui_widgets.window, 30.0, 30.0) - .set(self.ids.creation_bg, ui_widgets); - Image::new(self.imgs.charlist_frame) - .w_h(400.0, ui_widgets.win_h - ui_widgets.win_h * 0.19) - .middle_of(self.ids.creation_bg) - .color(Some(UI_MAIN)) - .set(self.ids.charlist_frame, ui_widgets); + .set(self.ids.creation_frame, ui_widgets); + Image::new(self.imgs.frame_bot) + .w_h(400.0, 48.0) + .down_from(self.ids.creation_frame, 0.0) + .color(Some(Color::Rgba(1.0, 1.0, 1.0, 0.8))) + .set(self.ids.creation_bot, ui_widgets); Rectangle::fill_with( - [386.0, ui_widgets.win_h - ui_widgets.win_h * 0.19], + [386.0, ui_widgets.win_h - ui_widgets.win_h * 0.15], color::TRANSPARENT, ) - .middle_of(self.ids.creation_bg) + .mid_top_with_margin_on(self.ids.creation_frame, 10.0) .scroll_kids_vertically() .set(self.ids.creation_alignment, ui_widgets); Scrollbar::y_axis(self.ids.creation_alignment) @@ -974,19 +970,29 @@ impl CharSelectionUi { .rgba(0.33, 0.33, 0.33, 1.0) .set(self.ids.selection_scrollbar, ui_widgets); - // Male/Female/Species Icons - Text::new(&self.voxygen_i18n.get("char_selection.character_creation")) - .mid_top_with_margin_on(self.ids.creation_alignment, 10.0) - .font_size(self.fonts.cyri.scale(24)) - .font_id(self.fonts.cyri.conrod_id) - .color(TEXT_COLOR) - .set(self.ids.bodyspecies_text, ui_widgets); + // BodyType/Species Icons + let body_m_ico = match body.species { + humanoid::Species::Human => self.imgs.human_m, + humanoid::Species::Orc => self.imgs.orc_m, + humanoid::Species::Dwarf => self.imgs.dwarf_m, + humanoid::Species::Elf => self.imgs.elf_m, + humanoid::Species::Undead => self.imgs.undead_m, + humanoid::Species::Danari => self.imgs.danari_m, + }; + let body_f_ico = match body.species { + humanoid::Species::Human => self.imgs.human_f, + humanoid::Species::Orc => self.imgs.orc_f, + humanoid::Species::Dwarf => self.imgs.dwarf_f, + humanoid::Species::Elf => self.imgs.elf_f, + humanoid::Species::Undead => self.imgs.undead_f, + humanoid::Species::Danari => self.imgs.danari_f, + }; // Alignment Rectangle::fill_with([140.0, 72.0], color::TRANSPARENT) .mid_top_with_margin_on(self.ids.creation_alignment, 60.0) .set(self.ids.creation_buttons_alignment_1, ui_widgets); - // Male - Image::new(self.imgs.male) + // Bodytype M + Image::new(body_m_ico) .w_h(70.0, 70.0) .top_left_with_margins_on(self.ids.creation_buttons_alignment_1, 0.0, 0.0) .set(self.ids.male, ui_widgets); @@ -1004,8 +1010,8 @@ impl CharSelectionUi { body.body_type = humanoid::BodyType::Male; body.validate(); } - // Female - Image::new(self.imgs.female) + // Bodytype F + Image::new(body_f_ico) .w_h(70.0, 70.0) .top_right_with_margins_on(self.ids.creation_buttons_alignment_1, 0.0, 0.0) .set(self.ids.female, ui_widgets); diff --git a/voxygen/src/scene/terrain.rs b/voxygen/src/scene/terrain.rs index 47cde9862b..e045467285 100644 --- a/voxygen/src/scene/terrain.rs +++ b/voxygen/src/scene/terrain.rs @@ -2109,7 +2109,7 @@ impl Terrain { make_models( (BlockKind::HangingSign, 0), "voxygen.voxel.sprite.furniture.hanging_sign-0", - Vec3::new(-3.5, -28.0, -4.0), + Vec3::new(-3.5, -16.0, 0.0), Vec3::one(), ), // WallLamp diff --git a/voxygen/src/session.rs b/voxygen/src/session.rs index 076b18901b..f83a6d3583 100644 --- a/voxygen/src/session.rs +++ b/voxygen/src/session.rs @@ -1146,7 +1146,7 @@ impl PlayState for SessionState { } /// Max distance an entity can be "targeted" -const MAX_TARGET_RANGE: f32 = 150.0; +const MAX_TARGET_RANGE: f32 = 300.0; /// Calculate what the cursor is pointing at within the 3d scene #[allow(clippy::type_complexity)] fn under_cursor( diff --git a/world/src/layer/mod.rs b/world/src/layer/mod.rs index 4cc286e2ec..4c2fa96f50 100644 --- a/world/src/layer/mod.rs +++ b/world/src/layer/mod.rs @@ -29,7 +29,7 @@ pub struct Colors { fn close(x: f32, tgt: f32, falloff: f32) -> f32 { (1.0 - (x - tgt).abs() / falloff).max(0.0).powf(0.5) } -const MUSH_FACT: f32 = 0.001; // To balance everything around the mushroom spawning rate +const MUSH_FACT: f32 = 0.0001; // To balance everything around the mushroom spawning rate pub fn apply_scatter_to<'a>( wpos2d: Vec2, mut get_column: impl FnMut(Vec2) -> Option<&'a ColumnSample<'a>>, @@ -130,10 +130,10 @@ pub fn apply_scatter_to<'a>( // Collecable Objects // Only spawn twigs in temperate forests (Twigs, false, |c| { - ((c.tree_density - 0.5).max(0.0) * MUSH_FACT, None) + ((c.tree_density - 0.5).max(0.0) * MUSH_FACT *0.5, None) }), (Stones, false, |c| { - ((c.rockiness - 0.5).max(0.0) * MUSH_FACT, None) + ((c.rockiness - 0.5).max(0.0) * MUSH_FACT *0.5, None) }), // Don't spawn Mushrooms in snowy regions (Mushroom, false, |c| { @@ -145,30 +145,41 @@ pub fn apply_scatter_to<'a>( // Grass (ShortGrass, false, |c| { ( - close(c.temp, 0.0, 0.6).min(close(c.humidity, CONFIG.forest_hum, 0.35)) * 0.05, - Some((48.0, 0.7)), + close(c.temp, 0.3, 0.4).min(close(c.humidity, 0.6, 0.35)) * 0.5, + Some((48.0, 0.4)), ) }), (MediumGrass, false, |c| { ( - close(c.temp, 0.0, 0.5).min(close(c.humidity, CONFIG.forest_hum, 0.35)) * 0.05, - Some((48.0, 0.4)), + close(c.temp, 0.0, 0.6).min(close(c.humidity, 0.6, 0.35)) * 0.5, + Some((48.0, 0.2)), ) }), (LongGrass, false, |c| { ( - close(c.temp, 0.4, 0.5).min(close(c.humidity, CONFIG.forest_hum, 0.2)) * 0.05, - Some((48.0, 0.5)), + close(c.temp, 0.4, 0.4).min(close(c.humidity, 0.8, 0.2)) * 0.5, + Some((48.0, 0.1)), ) }), - (WheatGreen, false, |c| { + // Jungle Sprites + (LongGrass, false, |c| { + ( + close(c.temp, CONFIG.tropical_temp, 0.4).min(close( + c.humidity, + CONFIG.jungle_hum, + 0.6, + )) * 0.5, + Some((60.0, 5.0)), + ) + }), + /*(WheatGreen, false, |c| { ( close(c.temp, 0.4, 0.2).min(close(c.humidity, CONFIG.forest_hum, 0.1)) * MUSH_FACT * 0.001, None, ) - }), + }),*/ (GrassSnow, false, |c| { ( close(c.temp, CONFIG.snow_temp - 0.2, 0.4).min(close( @@ -186,8 +197,8 @@ pub fn apply_scatter_to<'a>( c.humidity, CONFIG.desert_hum, 0.3, - )) * MUSH_FACT - * 0.01, + )) * MUSH_FACT* 0.1, + None, ) }), @@ -197,19 +208,19 @@ pub fn apply_scatter_to<'a>( c.humidity, CONFIG.desert_hum, 0.2, - )) * MUSH_FACT - * 0.01, + )) * MUSH_FACT* 0.1, + None, ) }), - (BarrelCactus, false, |c| { + /*(BarrelCactus, false, |c| { ( close(c.temp, CONFIG.desert_temp + 0.2, 0.3).min(close( c.humidity, CONFIG.desert_hum, 0.2, )) * MUSH_FACT - * 0.01, + * 0.1, None, ) }), @@ -220,7 +231,7 @@ pub fn apply_scatter_to<'a>( CONFIG.desert_hum, 0.2, )) * MUSH_FACT - * 0.01, + * 0.1, None, ) }), @@ -231,7 +242,7 @@ pub fn apply_scatter_to<'a>( CONFIG.desert_hum, 0.2, )) * MUSH_FACT - * 0.01, + * 0.1, None, ) }), @@ -242,7 +253,7 @@ pub fn apply_scatter_to<'a>( CONFIG.desert_hum, 0.2, )) * MUSH_FACT - * 0.01, + * 0.1, None, ) }), @@ -253,10 +264,10 @@ pub fn apply_scatter_to<'a>( CONFIG.desert_hum, 0.2, )) * MUSH_FACT - * 0.01, + * 0.1, None, ) - }), + }),*/ ]; for y in 0..vol.size_xy().y as i32 { diff --git a/world/src/lib.rs b/world/src/lib.rs index 9d32ab1442..105859cb91 100644 --- a/world/src/lib.rs +++ b/world/src/lib.rs @@ -253,6 +253,7 @@ impl World { match quadruped_medium.species { quadruped_medium::Species::Catoblepas => is_hostile = false, quadruped_medium::Species::Mouflon => is_hostile = false, + quadruped_medium::Species::Tuskram => is_hostile = false, _ => is_hostile = true, } }, diff --git a/world/src/site/dungeon/mod.rs b/world/src/site/dungeon/mod.rs index 732cf06759..b6b04c5750 100644 --- a/world/src/site/dungeon/mod.rs +++ b/world/src/site/dungeon/mod.rs @@ -12,6 +12,7 @@ use common::{ astar::Astar, comp, generation::{ChunkSupplement, EntityInfo}, + lottery::Lottery, npc, store::{Id, Store}, terrain::{Block, BlockKind, Structure, TerrainChunkSize}, @@ -498,13 +499,17 @@ impl Floor { boss_spawn_tile + if boss_tile_is_pillar { 1 } else { 0 }; if tile_pos == boss_spawn_tile && tile_wcenter.xy() == wpos2d { + let chosen = assets::load_expect::>( + "common.loot_tables.loot_table_boss_cultist-leader", + ); + let chosen = chosen.choose(); let entity = EntityInfo::at(tile_wcenter.map(|e| e as f32)) .with_scale(4.0) .with_level(rng.gen_range(75, 100)) .with_alignment(comp::Alignment::Enemy) .with_body(comp::Body::Humanoid(comp::humanoid::Body::random())) .with_name(format!( - "{}, Cult Leader", + "{}\nCult Leader", npc::get_npc_name(npc::NpcKind::Humanoid) )) .with_main_tool(assets::load_expect_cloned( @@ -515,50 +520,7 @@ impl Floor { }, }, )) - .with_loot_drop(match rng.gen_range(0, 20) { - 0 => comp::Item::expect_from_asset( - "common.items.boss_drops.lantern", - ), - 1 => comp::Item::expect_from_asset( - "common.items.boss_drops.potions", - ), - 2 => comp::Item::expect_from_asset( - "common.items.armor.belt.cultist_belt", - ), - 3 => comp::Item::expect_from_asset( - "common.items.armor.chest.cultist_chest_purple", - ), - 4 => comp::Item::expect_from_asset( - "common.items.armor.foot.cultist_boots", - ), - 5 => comp::Item::expect_from_asset( - "common.items.armor.hand.cultist_hands_purple", - ), - 6 => comp::Item::expect_from_asset( - "common.items.armor.pants.cultist_legs_purple", - ), - 7 => comp::Item::expect_from_asset( - "common.items.armor.shoulder.cultist_shoulder_purple", - ), - 8 => comp::Item::expect_from_asset( - "common.items.weapons.staff.cultist_staff", - ), - 9 => comp::Item::expect_from_asset( - "common.items.weapons.sword.greatsword_2h_fine-1", - ), - 10 => comp::Item::expect_from_asset( - "common.items.weapons.hammer.cultist_purp_2h-0", - ), - 11 => comp::Item::expect_from_asset( - "common.items.weapons.sword.cultist_purp_2h-0", - ), - 12 => comp::Item::expect_from_asset( - "common.items.armor.back.dungeon_purple-0", - ), - _ => comp::Item::expect_from_asset( - "common.items.boss_drops.exp_flask", - ), - }); + .with_loot_drop(assets::load_expect_cloned(chosen)); supplement.add_entity(entity); } diff --git a/world/src/site/settlement/building/archetype/house.rs b/world/src/site/settlement/building/archetype/house.rs index aa15f844e8..daecf45a11 100644 --- a/world/src/site/settlement/building/archetype/house.rs +++ b/world/src/site/settlement/building/archetype/house.rs @@ -535,6 +535,7 @@ impl Archetype for House { .noise .chance(Vec3::new(center_offset.x, center_offset.y, z), 0.2) { + let mut rng = rand::thread_rng(); let furniture = match self.noise.get(Vec3::new( center_offset.x, center_offset.y, @@ -545,7 +546,13 @@ impl Archetype for House { 1 => BlockKind::ChairSingle, 2 => BlockKind::ChairDouble, 3 => BlockKind::CoatRack, - 4 => BlockKind::Crate, + 4 => { + if rng.gen_range(0, 8) == 0 { + BlockKind::Chest + } else { + BlockKind::Crate + } + }, 6 => BlockKind::DrawerMedium, 7 => BlockKind::DrawerSmall, 8 => BlockKind::TableSide,