diff --git a/CHANGELOG.md b/CHANGELOG.md index 881cbdb84f..14463b8eef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Dance animation - Speech bubbles appear when nearby players talk - NPCs call for help when attacked +- Eyebrows and shapes can now be selected ### Changed diff --git a/assets/common/items/debug/boost.ron b/assets/common/items/debug/boost.ron index 0bfb72722c..b9ae0408fb 100644 --- a/assets/common/items/debug/boost.ron +++ b/assets/common/items/debug/boost.ron @@ -1,6 +1,6 @@ Item( - name: "Weightless Rod", - description: "The sky is the limit.", + name: "Belzeshrub the Broom-God", + description: "You can hear him giggle whenever\nyou hit the ground a bit too hard...", kind: Tool( ( kind: Debug(Boost), diff --git a/assets/common/items/debug/possess.ron b/assets/common/items/debug/possess.ron index 37c6df5d8a..b9ae0408fb 100644 --- a/assets/common/items/debug/possess.ron +++ b/assets/common/items/debug/possess.ron @@ -1,11 +1,11 @@ Item( - name: "Rod of Possession", - description: "It's fixed on my branch.", + name: "Belzeshrub the Broom-God", + description: "You can hear him giggle whenever\nyou hit the ground a bit too hard...", kind: Tool( ( - kind: Debug(Possess), + kind: Debug(Boost), equip_time_millis: 0, ) ), ) -// ... as zesterer always uses to tell us. +// And the ground is pretty hard at maximum velocity... diff --git a/assets/common/items/weapons/greatsword_2h_dam-0.ron b/assets/common/items/weapons/greatsword_2h_dam-0.ron new file mode 100644 index 0000000000..62e4a0826c --- /dev/null +++ b/assets/common/items/weapons/greatsword_2h_dam-0.ron @@ -0,0 +1,10 @@ +Item( + name: "Damaged Greatsword", + description: "A Damaged Two-Handed Greatsword\n\nPower: 2-10\n\n<Right-Click to use>", + kind: Tool( + ( + kind: Sword(GreatswordDam0), + equip_time_millis: 500, + ) + ), +) diff --git a/assets/common/items/weapons/greatsword_2h_dam-1.ron b/assets/common/items/weapons/greatsword_2h_dam-1.ron new file mode 100644 index 0000000000..6eda562d23 --- /dev/null +++ b/assets/common/items/weapons/greatsword_2h_dam-1.ron @@ -0,0 +1,10 @@ +Item( + name: "Damaged Greatsword", + description: "A Damaged Two-Handed Greatsword\n\nPower: 2-10\n\n<Right-Click to use>", + kind: Tool( + ( + kind: Sword(GreatswordDam1), + equip_time_millis: 500, + ) + ), +) diff --git a/assets/common/items/weapons/greatsword_2h_dam-2.ron b/assets/common/items/weapons/greatsword_2h_dam-2.ron new file mode 100644 index 0000000000..a18b0ca92c --- /dev/null +++ b/assets/common/items/weapons/greatsword_2h_dam-2.ron @@ -0,0 +1,10 @@ +Item( + name: "Damaged Greatsword", + description: "A Damaged Two-Handed Greatsword\n\nPower: 2-10\n\n<Right-Click to use>", + kind: Tool( + ( + kind: Sword(GreatswordDam2), + equip_time_millis: 500, + ) + ), +) diff --git a/assets/common/items/weapons/greatsword_2h_fine-0.ron b/assets/common/items/weapons/greatsword_2h_fine-0.ron new file mode 100644 index 0000000000..ffc620be41 --- /dev/null +++ b/assets/common/items/weapons/greatsword_2h_fine-0.ron @@ -0,0 +1,10 @@ +Item( + name: "Fine Greatsword", + description: "A Fine Two-Handed Greatsword\n\nPower: 2-10\n\n<Right-Click to use>", + kind: Tool( + ( + kind: Sword(GreatswordFine0), + equip_time_millis: 500, + ) + ), +) diff --git a/assets/common/items/weapons/greatsword_2h_fine-1.ron b/assets/common/items/weapons/greatsword_2h_fine-1.ron new file mode 100644 index 0000000000..6cc55512cc --- /dev/null +++ b/assets/common/items/weapons/greatsword_2h_fine-1.ron @@ -0,0 +1,10 @@ +Item( + name: "Fine Greatsword", + description: "A Fine Two-Handed Greatsword\n\nPower: 2-10\n\n<Right-Click to use>", + kind: Tool( + ( + kind: Sword(GreatswordFine1), + equip_time_millis: 500, + ) + ), +) diff --git a/assets/common/items/weapons/greatsword_2h_fine-2.ron b/assets/common/items/weapons/greatsword_2h_fine-2.ron new file mode 100644 index 0000000000..660a61580c --- /dev/null +++ b/assets/common/items/weapons/greatsword_2h_fine-2.ron @@ -0,0 +1,10 @@ +Item( + name: "Fine Greatsword", + description: "A Fine Two-Handed Greatsword\n\nPower: 2-10\n\n<Right-Click to use>", + kind: Tool( + ( + kind: Sword(GreatswordFine2), + equip_time_millis: 500, + ) + ), +) diff --git a/assets/common/items/weapons/greatsword_2h_orn-0.ron b/assets/common/items/weapons/greatsword_2h_orn-0.ron new file mode 100644 index 0000000000..8cb721b52e --- /dev/null +++ b/assets/common/items/weapons/greatsword_2h_orn-0.ron @@ -0,0 +1,10 @@ +Item( + name: "Ornimented Greatsword", + description: "A Ornimented Two-Handed Greatsword\n\nPower: 2-10\n\n<Right-Click to use>", + kind: Tool( + ( + kind: Sword(GreatswordOrn0), + equip_time_millis: 500, + ) + ), +) diff --git a/assets/common/items/weapons/greatsword_2h_orn-1.ron b/assets/common/items/weapons/greatsword_2h_orn-1.ron new file mode 100644 index 0000000000..3f8818f308 --- /dev/null +++ b/assets/common/items/weapons/greatsword_2h_orn-1.ron @@ -0,0 +1,10 @@ +Item( + name: "Ornimented Greatsword", + description: "A Ornimented Two-Handed Greatsword\n\nPower: 2-10\n\n<Right-Click to use>", + kind: Tool( + ( + kind: Sword(GreatswordOrn1), + equip_time_millis: 500, + ) + ), +) diff --git a/assets/common/items/weapons/greatsword_2h_orn-2.ron b/assets/common/items/weapons/greatsword_2h_orn-2.ron new file mode 100644 index 0000000000..bab5a60f9a --- /dev/null +++ b/assets/common/items/weapons/greatsword_2h_orn-2.ron @@ -0,0 +1,10 @@ +Item( + name: "Ornimented Greatsword", + description: "A Ornimented Two-Handed Greatsword\n\nPower: 2-10\n\n<Right-Click to use>", + kind: Tool( + ( + kind: Sword(GreatswordOrn2), + equip_time_millis: 500, + ) + ), +) diff --git a/assets/common/items/weapons/greatsword_2h_simple-0.ron b/assets/common/items/weapons/greatsword_2h_simple-0.ron new file mode 100644 index 0000000000..c757d1d3d4 --- /dev/null +++ b/assets/common/items/weapons/greatsword_2h_simple-0.ron @@ -0,0 +1,10 @@ +Item( + name: "Simple Greatsword", + description: "A Simple Two-Handed Greatsword\n\nPower: 2-10\n\n<Right-Click to use>", + kind: Tool( + ( + kind: Sword(GreatswordSimple0), + equip_time_millis: 500, + ) + ), +) diff --git a/assets/common/items/weapons/greatsword_2h_simple-1.ron b/assets/common/items/weapons/greatsword_2h_simple-1.ron new file mode 100644 index 0000000000..4dedbb496e --- /dev/null +++ b/assets/common/items/weapons/greatsword_2h_simple-1.ron @@ -0,0 +1,10 @@ +Item( + name: "Simple Greatsword", + description: "A Simple Two-Handed Greatsword\n\nPower: 2-10\n\n<Right-Click to use>", + kind: Tool( + ( + kind: Sword(GreatswordSimple1), + equip_time_millis: 500, + ) + ), +) diff --git a/assets/common/items/weapons/greatsword_2h_simple-2.ron b/assets/common/items/weapons/greatsword_2h_simple-2.ron new file mode 100644 index 0000000000..4c72bc3cbf --- /dev/null +++ b/assets/common/items/weapons/greatsword_2h_simple-2.ron @@ -0,0 +1,10 @@ +Item( + name: "Simple Greatsword", + description: "A Simple Two-Handed Greatsword\n\nPower: 2-10\n\n<Right-Click to use>", + kind: Tool( + ( + kind: Sword(GreatswordSimple2), + equip_time_millis: 500, + ) + ), +) diff --git a/assets/common/items/weapons/long_2h_dam-0.ron b/assets/common/items/weapons/long_2h_dam-0.ron new file mode 100644 index 0000000000..20174e74c7 --- /dev/null +++ b/assets/common/items/weapons/long_2h_dam-0.ron @@ -0,0 +1,10 @@ +Item( + name: "Damaged Longsword", + description: "A Damaged Double-Edged, Two-Handed Longsword\n\nPower: 2-10\n\n<Right-Click to use>", + kind: Tool( + ( + kind: Sword(LongDam0), + equip_time_millis: 500, + ) + ), +) diff --git a/assets/common/items/weapons/long_2h_dam-1.ron b/assets/common/items/weapons/long_2h_dam-1.ron new file mode 100644 index 0000000000..01a01ca543 --- /dev/null +++ b/assets/common/items/weapons/long_2h_dam-1.ron @@ -0,0 +1,10 @@ +Item( + name: "Damaged Longsword", + description: "A Damaged Double-Edged, Two-Handed Longsword\n\nPower: 2-10\n\n<Right-Click to use>", + kind: Tool( + ( + kind: Sword(LongDam1), + equip_time_millis: 500, + ) + ), +) diff --git a/assets/common/items/weapons/long_2h_dam-2.ron b/assets/common/items/weapons/long_2h_dam-2.ron new file mode 100644 index 0000000000..afd1dedebb --- /dev/null +++ b/assets/common/items/weapons/long_2h_dam-2.ron @@ -0,0 +1,10 @@ +Item( + name: "Damaged Longsword", + description: "A Damaged Double-Edged, Two-Handed Longsword\n\nPower: 2-10\n\n<Right-Click to use>", + kind: Tool( + ( + kind: Sword(LongDam2), + equip_time_millis: 500, + ) + ), +) diff --git a/assets/common/items/weapons/long_2h_dam-3.ron b/assets/common/items/weapons/long_2h_dam-3.ron new file mode 100644 index 0000000000..ba0857975b --- /dev/null +++ b/assets/common/items/weapons/long_2h_dam-3.ron @@ -0,0 +1,10 @@ +Item( + name: "Damaged Longsword", + description: "A Damaged Single-Edged, Two-Handed Longsword\n\nPower: 2-10\n\n<Right-Click to use>", + kind: Tool( + ( + kind: Sword(LongDam3), + equip_time_millis: 500, + ) + ), +) diff --git a/assets/common/items/weapons/long_2h_dam-4.ron b/assets/common/items/weapons/long_2h_dam-4.ron new file mode 100644 index 0000000000..118a4a2a4f --- /dev/null +++ b/assets/common/items/weapons/long_2h_dam-4.ron @@ -0,0 +1,10 @@ +Item( + name: "Damaged Longsword", + description: "A Damaged Single-Edged, Two-Handed Longsword\n\nPower: 2-10\n\n<Right-Click to use>", + kind: Tool( + ( + kind: Sword(LongDam4), + equip_time_millis: 500, + ) + ), +) diff --git a/assets/common/items/weapons/long_2h_dam-5.ron b/assets/common/items/weapons/long_2h_dam-5.ron new file mode 100644 index 0000000000..a5b1eb35eb --- /dev/null +++ b/assets/common/items/weapons/long_2h_dam-5.ron @@ -0,0 +1,10 @@ +Item( + name: "Damaged Longsword", + description: "A Damaged Single-Edged, Two-Handed Longsword\n\nPower: 2-10\n\n<Right-Click to use>", + kind: Tool( + ( + kind: Sword(LongDam5), + equip_time_millis: 500, + ) + ), +) diff --git a/assets/common/items/weapons/long_2h_fine-0.ron b/assets/common/items/weapons/long_2h_fine-0.ron new file mode 100644 index 0000000000..62a08d3ca1 --- /dev/null +++ b/assets/common/items/weapons/long_2h_fine-0.ron @@ -0,0 +1,10 @@ +Item( + name: "Fine Longsword", + description: "A Very Fine Double-Edged, Two-Hand LongSword\n\nPower: 2-10\n\n<Right-Click to use>", + kind: Tool( + ( + kind: Sword(LongFine0), + equip_time_millis: 500, + ) + ), +) diff --git a/assets/common/items/weapons/long_2h_fine-1.ron b/assets/common/items/weapons/long_2h_fine-1.ron new file mode 100644 index 0000000000..37e45ab9f4 --- /dev/null +++ b/assets/common/items/weapons/long_2h_fine-1.ron @@ -0,0 +1,10 @@ +Item( + name: "Fine Longsword", + description: "A Very Fine Double-Edged, Two-Hand LongSword\n\nPower: 2-10\n\n<Right-Click to use>", + kind: Tool( + ( + kind: Sword(LongFine1), + equip_time_millis: 500, + ) + ), +) diff --git a/assets/common/items/weapons/long_2h_fine-2.ron b/assets/common/items/weapons/long_2h_fine-2.ron new file mode 100644 index 0000000000..463712a64f --- /dev/null +++ b/assets/common/items/weapons/long_2h_fine-2.ron @@ -0,0 +1,10 @@ +Item( + name: "Fine Longsword", + description: "A Very Fine Double-Edged, Two-Hand LongSword\n\nPower: 2-10\n\n<Right-Click to use>", + kind: Tool( + ( + kind: Sword(LongFine2), + equip_time_millis: 500, + ) + ), +) diff --git a/assets/common/items/weapons/long_2h_fine-3.ron b/assets/common/items/weapons/long_2h_fine-3.ron new file mode 100644 index 0000000000..457993ae29 --- /dev/null +++ b/assets/common/items/weapons/long_2h_fine-3.ron @@ -0,0 +1,10 @@ +Item( + name: "Fine Longsword", + description: "A Very Fine Single-Edged, Two-Hand LongSword\n\nPower: 2-10\n\n<Right-Click to use>", + kind: Tool( + ( + kind: Sword(LongFine3), + equip_time_millis: 500, + ) + ), +) diff --git a/assets/common/items/weapons/long_2h_fine-4.ron b/assets/common/items/weapons/long_2h_fine-4.ron new file mode 100644 index 0000000000..d1ea6cd56d --- /dev/null +++ b/assets/common/items/weapons/long_2h_fine-4.ron @@ -0,0 +1,10 @@ +Item( + name: "Fine Longsword", + description: "A Very Fine Single-Edged, Two-Hand LongSword\n\nPower: 2-10\n\n<Right-Click to use>", + kind: Tool( + ( + kind: Sword(LongFine4), + equip_time_millis: 500, + ) + ), +) diff --git a/assets/common/items/weapons/long_2h_fine-5.ron b/assets/common/items/weapons/long_2h_fine-5.ron new file mode 100644 index 0000000000..f2e1a4a8b2 --- /dev/null +++ b/assets/common/items/weapons/long_2h_fine-5.ron @@ -0,0 +1,10 @@ +Item( + name: "Fine Longsword", + description: "A Very Fine Single-Edged, Two-Hand LongSword\n\nPower: 2-10\n\n<Right-Click to use>", + kind: Tool( + ( + kind: Sword(LongFine5), + equip_time_millis: 500, + ) + ), +) diff --git a/assets/common/items/weapons/long_2h_orn-0.ron b/assets/common/items/weapons/long_2h_orn-0.ron new file mode 100644 index 0000000000..ee2d8007b0 --- /dev/null +++ b/assets/common/items/weapons/long_2h_orn-0.ron @@ -0,0 +1,10 @@ +Item( + name: "Ornimented Longsword", + description: "An Ornimanted Double-Edged, Two-Hand LongSword\n\nPower: 2-10\n\n<Right-Click to use>", + kind: Tool( + ( + kind: Sword(LongOrn0), + equip_time_millis: 500, + ) + ), +) diff --git a/assets/common/items/weapons/long_2h_orn-1.ron b/assets/common/items/weapons/long_2h_orn-1.ron new file mode 100644 index 0000000000..49bb90e103 --- /dev/null +++ b/assets/common/items/weapons/long_2h_orn-1.ron @@ -0,0 +1,10 @@ +Item( + name: "Ornimented Longsword", + description: "An Ornimanted Double-Edged, Two-Hand LongSword\n\nPower: 2-10\n\n<Right-Click to use>", + kind: Tool( + ( + kind: Sword(LongOrn1), + equip_time_millis: 500, + ) + ), +) diff --git a/assets/common/items/weapons/long_2h_orn-2.ron b/assets/common/items/weapons/long_2h_orn-2.ron new file mode 100644 index 0000000000..3814a1f31c --- /dev/null +++ b/assets/common/items/weapons/long_2h_orn-2.ron @@ -0,0 +1,10 @@ +Item( + name: "Ornimented Longsword", + description: "An Ornimanted Double-Edged, Two-Hand LongSword\n\nPower: 2-10\n\n<Right-Click to use>", + kind: Tool( + ( + kind: Sword(LongOrn2), + equip_time_millis: 500, + ) + ), +) diff --git a/assets/common/items/weapons/long_2h_orn-3.ron b/assets/common/items/weapons/long_2h_orn-3.ron new file mode 100644 index 0000000000..b43ecddb7b --- /dev/null +++ b/assets/common/items/weapons/long_2h_orn-3.ron @@ -0,0 +1,10 @@ +Item( + name: "Ornimented Longsword", + description: "An Ornimanted Single-Edged, Two-Hand LongSword\n\nPower: 2-10\n\n<Right-Click to use>", + kind: Tool( + ( + kind: Sword(LongOrn3), + equip_time_millis: 500, + ) + ), +) diff --git a/assets/common/items/weapons/long_2h_orn-4.ron b/assets/common/items/weapons/long_2h_orn-4.ron new file mode 100644 index 0000000000..357d9433bd --- /dev/null +++ b/assets/common/items/weapons/long_2h_orn-4.ron @@ -0,0 +1,10 @@ +Item( + name: "Ornimented Longsword", + description: "An Ornimanted Single-Edged, Two-Hand LongSword\n\nPower: 2-10\n\n<Right-Click to use>", + kind: Tool( + ( + kind: Sword(LongOrn4), + equip_time_millis: 500, + ) + ), +) diff --git a/assets/common/items/weapons/long_2h_orn-5.ron b/assets/common/items/weapons/long_2h_orn-5.ron new file mode 100644 index 0000000000..4edfb6f01c --- /dev/null +++ b/assets/common/items/weapons/long_2h_orn-5.ron @@ -0,0 +1,10 @@ +Item( + name: "Ornimented Longsword", + description: "An Ornimanted Single-Edged, Two-Hand LongSword\n\nPower: 2-10\n\n<Right-Click to use>", + kind: Tool( + ( + kind: Sword(LongOrn5), + equip_time_millis: 500, + ) + ), +) diff --git a/assets/common/items/weapons/long_2h_simple-0.ron b/assets/common/items/weapons/long_2h_simple-0.ron new file mode 100644 index 0000000000..b2ad9a59d0 --- /dev/null +++ b/assets/common/items/weapons/long_2h_simple-0.ron @@ -0,0 +1,10 @@ +Item( + name: "Simple Longsword", + description: "A Simple Double-Edged, Two-Handed Longsword\n\nPower: 2-10\n\n<Right-Click to use>", + kind: Tool( + ( + kind: Sword(LongSimple0), + equip_time_millis: 500, + ) + ), +) diff --git a/assets/common/items/weapons/long_2h_simple-1.ron b/assets/common/items/weapons/long_2h_simple-1.ron new file mode 100644 index 0000000000..e4eb4b123c --- /dev/null +++ b/assets/common/items/weapons/long_2h_simple-1.ron @@ -0,0 +1,10 @@ +Item( + name: "Simple Longsword", + description: "A Simple Double-Edged, Two-Handed Longsword\n\nPower: 2-10\n\n<Right-Click to use>", + kind: Tool( + ( + kind: Sword(LongSimple1), + equip_time_millis: 500, + ) + ), +) diff --git a/assets/common/items/weapons/long_2h_simple-2.ron b/assets/common/items/weapons/long_2h_simple-2.ron new file mode 100644 index 0000000000..9aa2ab80a7 --- /dev/null +++ b/assets/common/items/weapons/long_2h_simple-2.ron @@ -0,0 +1,10 @@ +Item( + name: "Simple Longsword", + description: "A Simple Double-Edged, Two-Handed Longsword\n\nPower: 2-10\n\n<Right-Click to use>", + kind: Tool( + ( + kind: Sword(LongSimple2), + equip_time_millis: 500, + ) + ), +) diff --git a/assets/common/items/weapons/long_2h_simple-3.ron b/assets/common/items/weapons/long_2h_simple-3.ron new file mode 100644 index 0000000000..9ee608f6f0 --- /dev/null +++ b/assets/common/items/weapons/long_2h_simple-3.ron @@ -0,0 +1,10 @@ +Item( + name: "Simple Longsword", + description: "A Simple Single-Edged, Two-Handed Longsword\n\nPower: 2-10\n\n<Right-Click to use>", + kind: Tool( + ( + kind: Sword(LongSimple3), + equip_time_millis: 500, + ) + ), +) diff --git a/assets/common/items/weapons/long_2h_simple-4.ron b/assets/common/items/weapons/long_2h_simple-4.ron new file mode 100644 index 0000000000..e92bed29e9 --- /dev/null +++ b/assets/common/items/weapons/long_2h_simple-4.ron @@ -0,0 +1,10 @@ +Item( + name: "Simple Longsword", + description: "A Simple Single-Edged, Two-Handed Longsword\n\nPower: 2-10\n\n<Right-Click to use>", + kind: Tool( + ( + kind: Sword(LongSimple4), + equip_time_millis: 500, + ) + ), +) diff --git a/assets/common/items/weapons/long_2h_simple-5.ron b/assets/common/items/weapons/long_2h_simple-5.ron new file mode 100644 index 0000000000..59f6a199b4 --- /dev/null +++ b/assets/common/items/weapons/long_2h_simple-5.ron @@ -0,0 +1,10 @@ +Item( + name: "Simple Longsword", + description: "A Simple Single-Edged, Two-Handed Longsword\n\nPower: 2-10\n\n<Right-Click to use>", + kind: Tool( + ( + kind: Sword(LongSimple5), + equip_time_millis: 500, + ) + ), +) diff --git a/assets/voxygen/audio/ambient/forest_day.ogg b/assets/voxygen/audio/ambient/forest_day.ogg new file mode 100644 index 0000000000..60e86c7b7c Binary files /dev/null and b/assets/voxygen/audio/ambient/forest_day.ogg differ diff --git a/assets/voxygen/audio/ambient/forest_morning.ogg b/assets/voxygen/audio/ambient/forest_morning.ogg new file mode 100644 index 0000000000..138ac44057 Binary files /dev/null and b/assets/voxygen/audio/ambient/forest_morning.ogg differ diff --git a/assets/voxygen/audio/soundtrack.ron b/assets/voxygen/audio/soundtrack.ron index c6288b3af2..07f57316bf 100644 --- a/assets/voxygen/audio/soundtrack.ron +++ b/assets/voxygen/audio/soundtrack.ron @@ -1,7 +1,15 @@ // TODO: Re-add tunes that are not fitting general outside day/night situations +// TODO: Add an ambient-soundtrack that runs independently from the musical soundtrack ( tracks: [ + ( + title: "Forest Day", // Ambience Track + path: "voxygen.audio.ambient.forest_day", + length: 629.0, + timing: Some(Day), + artist: "https://www.youtube.com/watch?v=FwVTkB-BIvM", + ), ( title: "Into The Dark Forest", path: "voxygen.audio.soundtrack.into_the_dark_forest", @@ -93,5 +101,12 @@ timing: Some(Night), artist: "badbbad", ), + ( + title: "Forest Morning", // Ambience Track + path: "voxygen.audio.ambient.forest_morning", + length: 600.0, + timing: Some(Day), + artist: "https://www.youtube.com/watch?v=eq4nfIdK6C4", + ), ] ) \ No newline at end of file diff --git a/assets/voxygen/element/frames/bubble_dark/bottom.png b/assets/voxygen/element/frames/bubble_dark/bottom.png index 8add83cd04..68c0a49edc 100644 Binary files a/assets/voxygen/element/frames/bubble_dark/bottom.png and b/assets/voxygen/element/frames/bubble_dark/bottom.png differ diff --git a/assets/voxygen/element/frames/bubble_dark/bottom_left.png b/assets/voxygen/element/frames/bubble_dark/bottom_left.png index 505b93ee35..6483d11ce6 100644 Binary files a/assets/voxygen/element/frames/bubble_dark/bottom_left.png and b/assets/voxygen/element/frames/bubble_dark/bottom_left.png differ diff --git a/assets/voxygen/element/frames/bubble_dark/bottom_right.png b/assets/voxygen/element/frames/bubble_dark/bottom_right.png index e1ca9c56f7..3977836900 100644 Binary files a/assets/voxygen/element/frames/bubble_dark/bottom_right.png and b/assets/voxygen/element/frames/bubble_dark/bottom_right.png differ diff --git a/assets/voxygen/element/frames/bubble_dark/left.png b/assets/voxygen/element/frames/bubble_dark/left.png index 171ab0e814..0c7aa27116 100644 Binary files a/assets/voxygen/element/frames/bubble_dark/left.png and b/assets/voxygen/element/frames/bubble_dark/left.png differ diff --git a/assets/voxygen/element/frames/bubble_dark/mid.png b/assets/voxygen/element/frames/bubble_dark/mid.png index b17ac09bda..b855401557 100644 Binary files a/assets/voxygen/element/frames/bubble_dark/mid.png and b/assets/voxygen/element/frames/bubble_dark/mid.png differ diff --git a/assets/voxygen/element/frames/bubble_dark/right.png b/assets/voxygen/element/frames/bubble_dark/right.png index 8c975f6904..3fa8f6d8af 100644 Binary files a/assets/voxygen/element/frames/bubble_dark/right.png and b/assets/voxygen/element/frames/bubble_dark/right.png differ diff --git a/assets/voxygen/element/frames/bubble_dark/tail.png b/assets/voxygen/element/frames/bubble_dark/tail.png index a9a9f4e478..397f0c05e7 100644 Binary files a/assets/voxygen/element/frames/bubble_dark/tail.png and b/assets/voxygen/element/frames/bubble_dark/tail.png differ diff --git a/assets/voxygen/element/frames/bubble_dark/top.png b/assets/voxygen/element/frames/bubble_dark/top.png index afe8249bcb..f576069569 100644 Binary files a/assets/voxygen/element/frames/bubble_dark/top.png and b/assets/voxygen/element/frames/bubble_dark/top.png differ diff --git a/assets/voxygen/element/frames/bubble_dark/top_left.png b/assets/voxygen/element/frames/bubble_dark/top_left.png index ab289c2329..cbbfdbb15a 100644 Binary files a/assets/voxygen/element/frames/bubble_dark/top_left.png and b/assets/voxygen/element/frames/bubble_dark/top_left.png differ diff --git a/assets/voxygen/element/frames/bubble_dark/top_right.png b/assets/voxygen/element/frames/bubble_dark/top_right.png index d59b54308a..e7176a9fb0 100644 Binary files a/assets/voxygen/element/frames/bubble_dark/top_right.png and b/assets/voxygen/element/frames/bubble_dark/top_right.png differ diff --git a/assets/voxygen/element/icons/fire_spell_0.png b/assets/voxygen/element/icons/fire_spell_0.png index 8990c27024..d309dc6bc4 100644 Binary files a/assets/voxygen/element/icons/fire_spell_0.png and b/assets/voxygen/element/icons/fire_spell_0.png differ diff --git a/assets/voxygen/element/icons/m1.png b/assets/voxygen/element/icons/m1.png new file mode 100644 index 0000000000..774ae38bc5 Binary files /dev/null and b/assets/voxygen/element/icons/m1.png differ diff --git a/assets/voxygen/element/icons/m2.png b/assets/voxygen/element/icons/m2.png new file mode 100644 index 0000000000..aeb57b3d46 Binary files /dev/null and b/assets/voxygen/element/icons/m2.png differ diff --git a/assets/voxygen/element/icons/snake.png b/assets/voxygen/element/icons/snake.png new file mode 100644 index 0000000000..2a73426752 Binary files /dev/null and b/assets/voxygen/element/icons/snake.png differ diff --git a/assets/voxygen/element/icons/snake_arrow.png b/assets/voxygen/element/icons/snake_arrow.png new file mode 100644 index 0000000000..e506f38f98 Binary files /dev/null and b/assets/voxygen/element/icons/snake_arrow.png differ diff --git a/assets/voxygen/i18n/de_DE.ron b/assets/voxygen/i18n/de_DE.ron index 630a118ef3..61c2979f4c 100644 --- a/assets/voxygen/i18n/de_DE.ron +++ b/assets/voxygen/i18n/de_DE.ron @@ -74,12 +74,12 @@ VoxygenLocalization( "common.connection_lost": r#"Verbindung unterbrochen."#, - "common.races.orc": "Orc", - "common.races.human": "Mensch", - "common.races.dwarf": "Zwerg", - "common.races.elf": "Elf", - "common.races.undead": "Untoter", - "common.races.danari": "Danari", + "common.species.orc": "Orc", + "common.species.human": "Mensch", + "common.species.dwarf": "Zwerg", + "common.species.elf": "Elf", + "common.species.undead": "Untoter", + "common.species.danari": "Danari", "common.weapons.axe": "Axt", "common.weapons.sword": "Schwert", @@ -240,6 +240,7 @@ Viel Spaß in der Welt von Veloren, Abenteurer!"#, "hud.settings.cumulated_damage": "Addierter Schaden", "hud.settings.incoming_damage": "Erlittener Schaden", "hud.settings.cumulated_incoming_damage": "Addierter erlittener Schaden", + "hud.settings.speech_bubble_dark_mode": "Dunkle Sprechblasen", "hud.settings.energybar_numbers": "Zahlen auf Ressourcenanzeige", "hud.settings.values": "Werte", "hud.settings.percentages": "Prozent", @@ -360,7 +361,7 @@ Viel Spaß in der Welt von Veloren, Abenteurer!"#, "char_selection.chest_color": "Brustrüstung", "char_selection.eye_color": "Augenfarbe", "char_selection.skin": "Hautton", - "char_selection.eyebrows": "Augenbrauen", + "char_selection.eyeshape": "Augen Details", "char_selection.accessories": "Accessoires", "char_selection.create_info_name": "Euer Charakter braucht einen Namen!", /// End chracter selection section @@ -386,5 +387,8 @@ Willenskraft }, vector_map: { + "npc.speech.villager_under_attack": [ + "Hilfe, ich werde angegriffen!", + ], } -) +) \ No newline at end of file diff --git a/assets/voxygen/i18n/en.ron b/assets/voxygen/i18n/en.ron index 0cea650ed6..50feee86d7 100644 --- a/assets/voxygen/i18n/en.ron +++ b/assets/voxygen/i18n/en.ron @@ -77,12 +77,12 @@ Did the server restart? Is the client up to date?"#, - "common.races.orc": "Orc", - "common.races.human": "Human", - "common.races.dwarf": "Dwarf", - "common.races.elf": "Elf", - "common.races.undead": "Undead", - "common.races.danari": "Danari", + "common.species.orc": "Orc", + "common.species.human": "Human", + "common.species.dwarf": "Dwarf", + "common.species.elf": "Elf", + "common.species.undead": "Undead", + "common.species.danari": "Danari", "common.weapons.axe": "Axe", "common.weapons.sword": "Sword", @@ -356,11 +356,10 @@ Enjoy your stay in the World of Veloren."#, "char_selection.plains_of_uncertainty": "Plains of Uncertainty", "char_selection.beard": "Beard", "char_selection.hair_style": "Hair Style", - "char_selection.hair_color": "Hair Color", - "char_selection.chest_color": "Chest color", - "char_selection.eye_color": "Eye color", + "char_selection.hair_color": "Hair Color", + "char_selection.eye_color": "Eye Color", "char_selection.skin": "Skin", - "char_selection.eyebrows": "Eyebrows", + "char_selection.eyeshape": "Eye Details", "char_selection.accessories": "Accessories", "char_selection.create_info_name": "Your Character needs a name!", @@ -422,6 +421,7 @@ Willpower "They're coming for me!", "Help! Help! I'm being repressed", "Ah, now we see the violence inherent in the system.", + "Tis but a scratch!" ], } ) diff --git a/assets/voxygen/i18n/fr_FR.ron b/assets/voxygen/i18n/fr_FR.ron index 89a2685dd4..c8490a09c5 100644 --- a/assets/voxygen/i18n/fr_FR.ron +++ b/assets/voxygen/i18n/fr_FR.ron @@ -52,12 +52,12 @@ VoxygenLocalization( "common.cancel": "Annuler", "common.none": "Aucun", - "common.races.orc": "Orc", - "common.races.human": "Humain", - "common.races.dwarf": "Nain", - "common.races.elf": "Elfe", - "common.races.undead": "Mort vivant", - "common.races.danari": "Danari", + "common.species.orc": "Orc", + "common.species.human": "Humain", + "common.species.dwarf": "Nain", + "common.species.elf": "Elfe", + "common.species.undead": "Mort vivant", + "common.species.danari": "Danari", "common.weapons.axe": "Hâche", "common.weapons.sword": "Épée", diff --git a/assets/voxygen/i18n/it_IT.ron b/assets/voxygen/i18n/it_IT.ron index 5a14c15a9b..95e98e2841 100644 --- a/assets/voxygen/i18n/it_IT.ron +++ b/assets/voxygen/i18n/it_IT.ron @@ -87,12 +87,12 @@ Il client è aggiornato?"#, - "common.races.orc": "Orco", - "common.races.human": "Umano", - "common.races.dwarf": "Nano", - "common.races.elf": "Elfo", - "common.races.undead": "Non-Morto", - "common.races.danari": "Danari", + "common.species.orc": "Orco", + "common.species.human": "Umano", + "common.species.dwarf": "Nano", + "common.species.elf": "Elfo", + "common.species.undead": "Non-Morto", + "common.species.danari": "Danari", diff --git a/assets/voxygen/i18n/pt_PT.ron b/assets/voxygen/i18n/pt_PT.ron index c4832499a9..119e4f0d94 100644 --- a/assets/voxygen/i18n/pt_PT.ron +++ b/assets/voxygen/i18n/pt_PT.ron @@ -63,12 +63,12 @@ Será que o server reiniciou? O cliente está atualizado?"#, - "common.races.orc": "Ogre", - "common.races.human": "Humano", - "common.races.dwarf": "Anão", - "common.races.elf": "Elfo", - "common.races.undead": "Morto-vivo", - "common.races.danari": "Danari", + "common.species.orc": "Ogre", + "common.species.human": "Humano", + "common.species.dwarf": "Anão", + "common.species.elf": "Elfo", + "common.species.undead": "Morto-vivo", + "common.species.danari": "Danari", "common.weapons.axe": "Machado", "common.weapons.sword": "Espada", diff --git a/assets/voxygen/i18n/ru_RU.ron b/assets/voxygen/i18n/ru_RU.ron index da55da407b..c82531a5fa 100644 --- a/assets/voxygen/i18n/ru_RU.ron +++ b/assets/voxygen/i18n/ru_RU.ron @@ -63,12 +63,12 @@ VoxygenLocalization( Клиент обновлен до последней версии?"#, - "common.races.orc": "Орк", - "common.races.human": "Человек", - "common.races.dwarf": "Дварф", - "common.races.elf": "Эльф", - "common.races.undead": "Нежить", - "common.races.danari": "Данари", + "common.species.orc": "Орк", + "common.species.human": "Человек", + "common.species.dwarf": "Дварф", + "common.species.elf": "Эльф", + "common.species.undead": "Нежить", + "common.species.danari": "Данари", "common.weapons.axe": "Топор", "common.weapons.sword": "Меч", diff --git a/assets/voxygen/i18n/tr_TR.ron b/assets/voxygen/i18n/tr_TR.ron index 2f88227ad9..54315e410d 100644 --- a/assets/voxygen/i18n/tr_TR.ron +++ b/assets/voxygen/i18n/tr_TR.ron @@ -75,12 +75,12 @@ Sunucu yeniden mi başladı? İstemci güncel mi?"#, - "common.races.orc": "Ork", - "common.races.human": "İnsan", - "common.races.dwarf": "Cüce", - "common.races.elf": "Elf", - "common.races.undead": "Hortlak", - "common.races.danari": "Danari", + "common.species.orc": "Ork", + "common.species.human": "İnsan", + "common.species.dwarf": "Cüce", + "common.species.elf": "Elf", + "common.species.undead": "Hortlak", + "common.species.danari": "Danari", "common.weapons.axe": "Balta", "common.weapons.sword": "Kılıç", diff --git a/assets/voxygen/item_image_manifest.ron b/assets/voxygen/item_image_manifest.ron index f7e62845d2..5c37fb24a5 100644 --- a/assets/voxygen/item_image_manifest.ron +++ b/assets/voxygen/item_image_manifest.ron @@ -30,6 +30,154 @@ "voxel.weapon.sword.wood_2h", (0.0, 0.0, 0.0), (-135.0, 90.0, 0.0), 1.3, ), + Tool(Sword(LongFine3)): VoxTrans( + "voxel.weapon.sword.long_2h_fine-3", + (0.0, 9.0, 0.0), (-90.0, 90.0, 0.0), 2.4, + ), + Tool(Sword(GreatswordDam0)): VoxTrans( + "voxel.weapon.sword.greatsword_2h_dam-0", + (0.0, 0.0, 0.0), (-135.0, 90.0, 0.0), 1.5, + ), + Tool(Sword(GreatswordDam1)): VoxTrans( + "voxel.weapon.sword.greatsword_2h_dam-1", + (0.0, 0.0, 0.0), (-135.0, 90.0, 0.0), 1.5, + ), + Tool(Sword(GreatswordDam2)): VoxTrans( + "voxel.weapon.sword.greatsword_2h_dam-2", + (0.0, 0.0, 0.0), (-135.0, 90.0, 0.0), 1.5, + ), + Tool(Sword(GreatswordSimple0)): VoxTrans( + "voxel.weapon.sword.greatsword_2h_simple-0", + (0.0, 0.0, 0.0), (-135.0, 90.0, 0.0), 1.5, + ), + Tool(Sword(GreatswordSimple1)): VoxTrans( + "voxel.weapon.sword.greatsword_2h_simple-1", + (0.0, 0.0, 0.0), (-135.0, 90.0, 0.0), 1.5, + ), + Tool(Sword(GreatswordSimple2)): VoxTrans( + "voxel.weapon.sword.greatsword_2h_simple-2", + (0.0, 0.0, 0.0), (-135.0, 90.0, 0.0), 1.5, + ), + Tool(Sword(GreatswordOrn0)): VoxTrans( + "voxel.weapon.sword.greatsword_2h_orn-0", + (0.0, 0.0, 0.0), (-135.0, 90.0, 0.0), 1.5, + ), + Tool(Sword(GreatswordOrn1)): VoxTrans( + "voxel.weapon.sword.greatsword_2h_orn-1", + (0.0, 0.0, 0.0), (-135.0, 90.0, 0.0), 1.5, + ), + Tool(Sword(GreatswordOrn2)): VoxTrans( + "voxel.weapon.sword.greatsword_2h_orn-2", + (0.0, 0.0, 0.0), (-135.0, 90.0, 0.0), 1.5, + ), + Tool(Sword(GreatswordFine0)): VoxTrans( + "voxel.weapon.sword.greatsword_2h_fine-0", + (0.0, 0.0, 0.0), (-135.0, 90.0, 0.0), 1.5, + ), + Tool(Sword(GreatswordFine1)): VoxTrans( + "voxel.weapon.sword.greatsword_2h_fine-1", + (0.0, 0.0, 0.0), (-135.0, 90.0, 0.0), 1.5, + ), + Tool(Sword(GreatswordFine2)): VoxTrans( + "voxel.weapon.sword.greatsword_2h_fine-2", + (0.0, 0.0, 0.0), (-135.0, 90.0, 0.0), 1.5, + ), + Tool(Sword(LongDam0)): VoxTrans( + "voxel.weapon.sword.long_2h_dam-0", + (0.0, 0.0, 0.0), (-135.0, 90.0, 0.0), 1.5, + ), + Tool(Sword(LongDam1)): VoxTrans( + "voxel.weapon.sword.long_2h_dam-1", + (0.0, 0.0, 0.0), (-135.0, 90.0, 0.0), 1.5, + ), + Tool(Sword(LongDam2)): VoxTrans( + "voxel.weapon.sword.long_2h_dam-2", + (0.0, 0.0, 0.0), (-135.0, 90.0, 0.0), 1.5, + ), + Tool(Sword(LongDam3)): VoxTrans( + "voxel.weapon.sword.long_2h_dam-3", + (0.0, 0.0, 0.0), (-135.0, 90.0, 0.0), 1.5, + ), + Tool(Sword(LongDam4)): VoxTrans( + "voxel.weapon.sword.long_2h_dam-4", + (0.0, 0.0, 0.0), (-135.0, 90.0, 0.0), 1.5, + ), + Tool(Sword(LongDam5)): VoxTrans( + "voxel.weapon.sword.long_2h_dam-5", + (0.0, 0.0, 0.0), (-135.0, 90.0, 0.0), 1.5, + ), + Tool(Sword(LongSimple0)): VoxTrans( + "voxel.weapon.sword.long_2h_simple-0", + (0.0, 0.0, 0.0), (-135.0, 90.0, 0.0), 1.5, + ), + Tool(Sword(LongSimple1)): VoxTrans( + "voxel.weapon.sword.long_2h_simple-1", + (0.0, 0.0, 0.0), (-135.0, 90.0, 0.0), 1.5, + ), + Tool(Sword(LongSimple2)): VoxTrans( + "voxel.weapon.sword.long_2h_simple-2", + (0.0, 0.0, 0.0), (-135.0, 90.0, 0.0), 1.5, + ), + Tool(Sword(LongSimple3)): VoxTrans( + "voxel.weapon.sword.long_2h_simple-3", + (0.0, 0.0, 0.0), (-135.0, 90.0, 0.0), 1.5, + ), + Tool(Sword(LongSimple4)): VoxTrans( + "voxel.weapon.sword.long_2h_simple-4", + (0.0, 0.0, 0.0), (-135.0, 90.0, 0.0), 1.5, + ), + Tool(Sword(LongSimple5)): VoxTrans( + "voxel.weapon.sword.long_2h_simple-5", + (0.0, 0.0, 0.0), (-135.0, 90.0, 0.0), 1.5, + ), + Tool(Sword(LongOrn0)): VoxTrans( + "voxel.weapon.sword.long_2h_orn-0", + (0.0, 0.0, 0.0), (-135.0, 90.0, 0.0), 1.5, + ), + Tool(Sword(LongOrn1)): VoxTrans( + "voxel.weapon.sword.long_2h_orn-1", + (0.0, 0.0, 0.0), (-135.0, 90.0, 0.0), 1.5, + ), + Tool(Sword(LongOrn2)): VoxTrans( + "voxel.weapon.sword.long_2h_orn-2", + (0.0, 0.0, 0.0), (-135.0, 90.0, 0.0), 1.5, + ), + Tool(Sword(LongOrn3)): VoxTrans( + "voxel.weapon.sword.long_2h_orn-3", + (0.0, 0.0, 0.0), (-135.0, 90.0, 0.0), 1.5, + ), + Tool(Sword(LongOrn4)): VoxTrans( + "voxel.weapon.sword.long_2h_orn-4", + (0.0, 0.0, 0.0), (-135.0, 90.0, 0.0), 1.5, + ), + Tool(Sword(LongOrn5)): VoxTrans( + "voxel.weapon.sword.long_2h_orn-5", + (0.0, 0.0, 0.0), (-135.0, 90.0, 0.0), 1.5, + ), + Tool(Sword(LongFine0)): VoxTrans( + "voxel.weapon.sword.long_2h_fine-0", + (0.0, 0.0, 0.0), (-135.0, 90.0, 0.0), 1.5, + ), + Tool(Sword(LongFine1)): VoxTrans( + "voxel.weapon.sword.long_2h_fine-1", + (0.0, 0.0, 0.0), (-135.0, 90.0, 0.0), 1.5, + ), + Tool(Sword(LongFine2)): VoxTrans( + "voxel.weapon.sword.long_2h_fine-2", + (0.0, 0.0, 0.0), (-135.0, 90.0, 0.0), 1.5, + ), + Tool(Sword(LongFine3)): VoxTrans( + "voxel.weapon.sword.long_2h_fine-3", + (0.0, 0.0, 0.0), (-135.0, 90.0, 0.0), 1.5, + ), + Tool(Sword(LongFine4)): VoxTrans( + "voxel.weapon.sword.long_2h_fine-4", + (0.0, 0.0, 0.0), (-135.0, 90.0, 0.0), 1.5, + ), + Tool(Sword(LongFine5)): VoxTrans( + "voxel.weapon.sword.long_2h_fine-5", + (0.0, 0.0, 0.0), (-135.0, 90.0, 0.0), 1.5, + ), // Axes Tool(Axe(BasicAxe)): VoxTrans( "voxel.weapon.axe.rusty_2h", @@ -500,11 +648,7 @@ ), // Debug Items Tool(Debug(Boost)): VoxTrans( - "voxel.weapon.debug_wand-0", - (0.0, -7.0, 0.0), (90.0, 90.0, 0.0), 1.6, - ), - Tool(Debug(Possess)): VoxTrans( - "voxel.weapon.debug_wand-1", - (0.0, -7.0, 0.0), (90.0, 90.0, 0.0), 1.6, - ), + "voxel.weapon.tool.broom_belzeshrub_purple", + (0.0, 0.0, 0.0), (-135.0, 90.0, 0.0), 1.1, + ), }) diff --git a/assets/voxygen/voxel/armor/pants/cultist.vox b/assets/voxygen/voxel/armor/pants/cultist.vox index b978c35129..85bc57c427 100644 Binary files a/assets/voxygen/voxel/armor/pants/cultist.vox and b/assets/voxygen/voxel/armor/pants/cultist.vox differ diff --git a/assets/voxygen/voxel/figure/eyes/dwarf/female-0.vox b/assets/voxygen/voxel/figure/eyes/general/female_as_hair-0.vox similarity index 79% rename from assets/voxygen/voxel/figure/eyes/dwarf/female-0.vox rename to assets/voxygen/voxel/figure/eyes/general/female_as_hair-0.vox index f9629af515..0b808e342c 100644 Binary files a/assets/voxygen/voxel/figure/eyes/dwarf/female-0.vox and b/assets/voxygen/voxel/figure/eyes/general/female_as_hair-0.vox differ diff --git a/assets/voxygen/voxel/figure/eyes/general/female_blind-0.vox b/assets/voxygen/voxel/figure/eyes/general/female_blind-0.vox new file mode 100644 index 0000000000..1d5449bef1 Binary files /dev/null and b/assets/voxygen/voxel/figure/eyes/general/female_blind-0.vox differ diff --git a/assets/voxygen/voxel/figure/eyes/danari/female-0.vox b/assets/voxygen/voxel/figure/eyes/general/female_default-0.vox similarity index 85% rename from assets/voxygen/voxel/figure/eyes/danari/female-0.vox rename to assets/voxygen/voxel/figure/eyes/general/female_default-0.vox index 3b8a42b55e..9e6672677a 100644 Binary files a/assets/voxygen/voxel/figure/eyes/danari/female-0.vox and b/assets/voxygen/voxel/figure/eyes/general/female_default-0.vox differ diff --git a/assets/voxygen/voxel/figure/eyes/general/female_heterochromia-0.vox b/assets/voxygen/voxel/figure/eyes/general/female_heterochromia-0.vox new file mode 100644 index 0000000000..e3d7a58043 Binary files /dev/null and b/assets/voxygen/voxel/figure/eyes/general/female_heterochromia-0.vox differ diff --git a/assets/voxygen/voxel/figure/eyes/general/female_scar-0.vox b/assets/voxygen/voxel/figure/eyes/general/female_scar-0.vox new file mode 100644 index 0000000000..0c3a90434f Binary files /dev/null and b/assets/voxygen/voxel/figure/eyes/general/female_scar-0.vox differ diff --git a/assets/voxygen/voxel/figure/eyes/elf/female-0.vox b/assets/voxygen/voxel/figure/eyes/general/female_styled-0.vox similarity index 79% rename from assets/voxygen/voxel/figure/eyes/elf/female-0.vox rename to assets/voxygen/voxel/figure/eyes/general/female_styled-0.vox index ae09992c51..8676104d99 100644 Binary files a/assets/voxygen/voxel/figure/eyes/elf/female-0.vox and b/assets/voxygen/voxel/figure/eyes/general/female_styled-0.vox differ diff --git a/assets/voxygen/voxel/figure/eyes/general/male_as_hair-0.vox b/assets/voxygen/voxel/figure/eyes/general/male_as_hair-0.vox new file mode 100644 index 0000000000..09a07845e3 Binary files /dev/null and b/assets/voxygen/voxel/figure/eyes/general/male_as_hair-0.vox differ diff --git a/assets/voxygen/voxel/figure/eyes/general/male_blind-0.vox b/assets/voxygen/voxel/figure/eyes/general/male_blind-0.vox new file mode 100644 index 0000000000..e4d201c85f Binary files /dev/null and b/assets/voxygen/voxel/figure/eyes/general/male_blind-0.vox differ diff --git a/assets/voxygen/voxel/figure/eyes/danari/male-1.vox b/assets/voxygen/voxel/figure/eyes/general/male_brow_col-0.vox similarity index 79% rename from assets/voxygen/voxel/figure/eyes/danari/male-1.vox rename to assets/voxygen/voxel/figure/eyes/general/male_brow_col-0.vox index 950a93bd88..b6c0794b67 100644 Binary files a/assets/voxygen/voxel/figure/eyes/danari/male-1.vox and b/assets/voxygen/voxel/figure/eyes/general/male_brow_col-0.vox differ diff --git a/assets/voxygen/voxel/figure/eyes/danari/male-0.vox b/assets/voxygen/voxel/figure/eyes/general/male_bushy-0.vox similarity index 100% rename from assets/voxygen/voxel/figure/eyes/danari/male-0.vox rename to assets/voxygen/voxel/figure/eyes/general/male_bushy-0.vox diff --git a/assets/voxygen/voxel/figure/eyes/dwarf/male-1.vox b/assets/voxygen/voxel/figure/eyes/general/male_default-0.vox similarity index 72% rename from assets/voxygen/voxel/figure/eyes/dwarf/male-1.vox rename to assets/voxygen/voxel/figure/eyes/general/male_default-0.vox index f9ddf9e2d2..4ee582cc97 100644 Binary files a/assets/voxygen/voxel/figure/eyes/dwarf/male-1.vox and b/assets/voxygen/voxel/figure/eyes/general/male_default-0.vox differ diff --git a/assets/voxygen/voxel/figure/eyes/dwarf/male-0.vox b/assets/voxygen/voxel/figure/eyes/general/male_heterochromia-0.vox similarity index 70% rename from assets/voxygen/voxel/figure/eyes/dwarf/male-0.vox rename to assets/voxygen/voxel/figure/eyes/general/male_heterochromia-0.vox index 27d06238bf..19e9f90aef 100644 Binary files a/assets/voxygen/voxel/figure/eyes/dwarf/male-0.vox and b/assets/voxygen/voxel/figure/eyes/general/male_heterochromia-0.vox differ diff --git a/assets/voxygen/voxel/figure/eyes/general/male_scar-0.vox b/assets/voxygen/voxel/figure/eyes/general/male_scar-0.vox new file mode 100644 index 0000000000..928ff5a8a3 Binary files /dev/null and b/assets/voxygen/voxel/figure/eyes/general/male_scar-0.vox differ diff --git a/assets/voxygen/voxel/figure/eyes/human/male-0.vox b/assets/voxygen/voxel/figure/eyes/human/male-0.vox index 950a93bd88..b6c0794b67 100644 Binary files a/assets/voxygen/voxel/figure/eyes/human/male-0.vox and b/assets/voxygen/voxel/figure/eyes/human/male-0.vox differ diff --git a/assets/voxygen/voxel/figure/eyes/orc/female-0.vox b/assets/voxygen/voxel/figure/eyes/orc/male-1.vox similarity index 70% rename from assets/voxygen/voxel/figure/eyes/orc/female-0.vox rename to assets/voxygen/voxel/figure/eyes/orc/male-1.vox index 61b522637b..efb6488752 100644 Binary files a/assets/voxygen/voxel/figure/eyes/orc/female-0.vox and b/assets/voxygen/voxel/figure/eyes/orc/male-1.vox differ diff --git a/assets/voxygen/voxel/figure/eyes/undead/female-1.vox b/assets/voxygen/voxel/figure/eyes/undead/female-1.vox new file mode 100644 index 0000000000..c29cd45413 Binary files /dev/null and b/assets/voxygen/voxel/figure/eyes/undead/female-1.vox differ diff --git a/assets/voxygen/voxel/figure/eyes/undead/female-2.vox b/assets/voxygen/voxel/figure/eyes/undead/female-2.vox new file mode 100644 index 0000000000..c9d78637da Binary files /dev/null and b/assets/voxygen/voxel/figure/eyes/undead/female-2.vox differ diff --git a/assets/voxygen/voxel/figure/eyes/undead/male-1.vox b/assets/voxygen/voxel/figure/eyes/undead/male-1.vox new file mode 100644 index 0000000000..536e54608b Binary files /dev/null and b/assets/voxygen/voxel/figure/eyes/undead/male-1.vox differ diff --git a/assets/voxygen/voxel/figure/eyes/undead/male-2.vox b/assets/voxygen/voxel/figure/eyes/undead/male-2.vox new file mode 100644 index 0000000000..dc00739b11 Binary files /dev/null and b/assets/voxygen/voxel/figure/eyes/undead/male-2.vox differ diff --git a/assets/voxygen/voxel/figure/eyes/undead/male-3.vox b/assets/voxygen/voxel/figure/eyes/undead/male-3.vox new file mode 100644 index 0000000000..2eb910e098 Binary files /dev/null and b/assets/voxygen/voxel/figure/eyes/undead/male-3.vox differ diff --git a/assets/voxygen/voxel/figure/hair/danari/female-2.vox b/assets/voxygen/voxel/figure/hair/danari/female-2.vox new file mode 100644 index 0000000000..da7016bc77 Binary files /dev/null and b/assets/voxygen/voxel/figure/hair/danari/female-2.vox differ diff --git a/assets/voxygen/voxel/figure/hair/danari/female-3.vox b/assets/voxygen/voxel/figure/hair/danari/female-3.vox new file mode 100644 index 0000000000..c532cee954 Binary files /dev/null and b/assets/voxygen/voxel/figure/hair/danari/female-3.vox differ diff --git a/assets/voxygen/voxel/figure/hair/danari/male-2.vox b/assets/voxygen/voxel/figure/hair/danari/male-2.vox new file mode 100644 index 0000000000..17c20c4e21 Binary files /dev/null and b/assets/voxygen/voxel/figure/hair/danari/male-2.vox differ diff --git a/assets/voxygen/voxel/figure/hair/danari/male-3.vox b/assets/voxygen/voxel/figure/hair/danari/male-3.vox new file mode 100644 index 0000000000..8303b34762 Binary files /dev/null and b/assets/voxygen/voxel/figure/hair/danari/male-3.vox differ diff --git a/assets/voxygen/voxel/figure/hair/dwarf/female-4.vox b/assets/voxygen/voxel/figure/hair/dwarf/female-4.vox new file mode 100644 index 0000000000..001f3c4c27 Binary files /dev/null and b/assets/voxygen/voxel/figure/hair/dwarf/female-4.vox differ diff --git a/assets/voxygen/voxel/figure/hair/dwarf/female-5.vox b/assets/voxygen/voxel/figure/hair/dwarf/female-5.vox new file mode 100644 index 0000000000..39f673b52a Binary files /dev/null and b/assets/voxygen/voxel/figure/hair/dwarf/female-5.vox differ diff --git a/assets/voxygen/voxel/figure/hair/dwarf/female-6.vox b/assets/voxygen/voxel/figure/hair/dwarf/female-6.vox new file mode 100644 index 0000000000..1c3b61c013 Binary files /dev/null and b/assets/voxygen/voxel/figure/hair/dwarf/female-6.vox differ diff --git a/assets/voxygen/voxel/figure/hair/dwarf/male-2.vox b/assets/voxygen/voxel/figure/hair/dwarf/male-2.vox new file mode 100644 index 0000000000..2b95921957 Binary files /dev/null and b/assets/voxygen/voxel/figure/hair/dwarf/male-2.vox differ diff --git a/assets/voxygen/voxel/figure/hair/dwarf/male-3.vox b/assets/voxygen/voxel/figure/hair/dwarf/male-3.vox new file mode 100644 index 0000000000..5ea34c1fa1 Binary files /dev/null and b/assets/voxygen/voxel/figure/hair/dwarf/male-3.vox differ diff --git a/assets/voxygen/voxel/figure/hair/human/male-18.vox b/assets/voxygen/voxel/figure/hair/human/male-18.vox index 43b64821a1..d12c720dfa 100644 Binary files a/assets/voxygen/voxel/figure/hair/human/male-18.vox and b/assets/voxygen/voxel/figure/hair/human/male-18.vox differ diff --git a/assets/voxygen/voxel/figure/hair/undead/female-4.vox b/assets/voxygen/voxel/figure/hair/undead/female-4.vox new file mode 100644 index 0000000000..a0e57c7e28 Binary files /dev/null and b/assets/voxygen/voxel/figure/hair/undead/female-4.vox differ diff --git a/assets/voxygen/voxel/figure/hair/undead/female-5.vox b/assets/voxygen/voxel/figure/hair/undead/female-5.vox new file mode 100644 index 0000000000..231893f479 Binary files /dev/null and b/assets/voxygen/voxel/figure/hair/undead/female-5.vox differ diff --git a/assets/voxygen/voxel/figure/hair/undead/male-2.vox b/assets/voxygen/voxel/figure/hair/undead/male-2.vox new file mode 100644 index 0000000000..46a4f6dfd8 Binary files /dev/null and b/assets/voxygen/voxel/figure/hair/undead/male-2.vox differ diff --git a/assets/voxygen/voxel/figure/hair/undead/male-3.vox b/assets/voxygen/voxel/figure/hair/undead/male-3.vox new file mode 100644 index 0000000000..2a5680a78c Binary files /dev/null and b/assets/voxygen/voxel/figure/hair/undead/male-3.vox differ diff --git a/assets/voxygen/voxel/figure/head/danari/male.vox b/assets/voxygen/voxel/figure/head/danari/male.vox index 9af4633998..5aa37fcb22 100644 Binary files a/assets/voxygen/voxel/figure/head/danari/male.vox and b/assets/voxygen/voxel/figure/head/danari/male.vox differ diff --git a/assets/voxygen/voxel/humanoid_armor_shoulder_manifest.ron b/assets/voxygen/voxel/humanoid_armor_shoulder_manifest.ron index cd9d11b7fd..b17c8672b3 100644 --- a/assets/voxygen/voxel/humanoid_armor_shoulder_manifest.ron +++ b/assets/voxygen/voxel/humanoid_armor_shoulder_manifest.ron @@ -53,11 +53,11 @@ ), Plate0: ( left: ( - vox_spec: ("armor.shoulder.plate_right-0", (-3.6, -3.5, 1.0)), + vox_spec: ("armor.shoulder.plate_right-0", (-3.6, -3.5, -0.0)), color: None ), right: ( - vox_spec: ("armor.shoulder.plate_right-0", (-2.6, -3.5, 1.0)), + vox_spec: ("armor.shoulder.plate_right-0", (-2.6, -3.5, 0.0)), color: None ) ), diff --git a/assets/voxygen/voxel/humanoid_head_manifest.ron b/assets/voxygen/voxel/humanoid_head_manifest.ron index 483a191315..95abf4652a 100644 --- a/assets/voxygen/voxel/humanoid_head_manifest.ron +++ b/assets/voxygen/voxel/humanoid_head_manifest.ron @@ -2,7 +2,15 @@ (Human, Male): ( offset: (-7.0, -4.0, -6.0), head: ("figure.head.human.male", (0, 2, 0)), - eyes: ("figure.eyes.human.male-0", (3, 9, 2)), + eyes: [ + Some(("figure.eyes.general.male_default-0", (3, 9, 2))), + Some(("figure.eyes.general.male_brow_col-0", (3, 9, 2))), + Some(("figure.eyes.general.male_bushy-0", (3, 9, 2))), + Some(("figure.eyes.general.male_as_hair-0", (3, 9, 2))), + Some(("figure.eyes.general.male_heterochromia-0", (3, 9, 2))), + Some(("figure.eyes.general.male_scar-0", (3, 9, 2))), + Some(("figure.eyes.general.male_blind-0", (3, 9, 2))), + ], hair: [ Some(("figure.hair.human.male-0", (1, 1, 1))), Some(("figure.hair.human.male-1", (1, 1, 1))), @@ -38,7 +46,14 @@ (Human, Female): ( offset: (-7.0, -4.0, -6.0), head: ("figure.head.human.female", (0, 3, 0)), - eyes: ("figure.eyes.human.female-0", (2, 10, 2)), + eyes: [ + Some(("figure.eyes.general.female_default-0", (2, 10, 2))), + Some(("figure.eyes.general.female_styled-0", (2, 10, 2))), + Some(("figure.eyes.general.female_as_hair-0", (2, 10, 2))), + Some(("figure.eyes.general.female_heterochromia-0", (2, 10, 2))), + Some(("figure.eyes.general.female_scar-0", (2, 10, 2))), + Some(("figure.eyes.general.female_blind-0", (2, 10, 2))), + ], hair: [ Some(("figure.hair.human.female-0", (-1, -1, 0))), Some(("figure.hair.human.female-1", (1, 2, -1))), @@ -68,7 +83,10 @@ (Orc, Male): ( offset: (-8.0, -5.0, -6.75), head: ("figure.head.orc.male", (0, 3, 0)), - eyes: ("figure.eyes.orc.male-0", (5, 10, 6)), + eyes: [ + Some(("figure.eyes.orc.male-0", (5, 10, 6))), + Some(("figure.eyes.orc.male-1", (5, 10, 5))), + ], hair: [ Some(("figure.hair.dwarf.bald", (0, 3, -1))), Some(("figure.hair.orc.male-0", (4, 2, 0))), @@ -95,7 +113,14 @@ (Orc, Female): ( offset: (-8.0, -2.5, -6.0), head: ("figure.head.orc.female", (0, 1, 0)), - eyes: ("figure.eyes.orc.female-0", (3, 8, 2)), + eyes: [ + Some(("figure.eyes.general.female_default-0", (3, 8, 2))), + Some(("figure.eyes.general.female_styled-0", (3, 8, 2))), + Some(("figure.eyes.general.female_as_hair-0", (3, 8, 2))), + Some(("figure.eyes.general.female_heterochromia-0", (3, 8, 2))), + Some(("figure.eyes.general.female_scar-0", (3, 8, 2))), + Some(("figure.eyes.general.female_blind-0", (3, 8, 2))), + ], hair: [ Some(("figure.hair.orc.female-0", (-2, -8, 0))), Some(("figure.hair.orc.female-1", (-2, -8, 0))), @@ -116,7 +141,15 @@ (Elf, Male): ( offset: (-8.0, -4.0, -6.0), head: ("figure.head.elf.male", (0, 2, 0)), - eyes: ("figure.eyes.elf.male-0", (4, 9, 2)), + eyes: [ + Some(("figure.eyes.general.male_default-0", (4, 9, 2))), + Some(("figure.eyes.general.male_brow_col-0", (4, 9, 2))), + Some(("figure.eyes.general.male_bushy-0", (4, 9, 2))), + Some(("figure.eyes.general.male_as_hair-0", (4, 9, 2))), + Some(("figure.eyes.general.male_heterochromia-0", (4, 9, 2))), + Some(("figure.eyes.general.male_scar-0", (4, 9, 2))), + Some(("figure.eyes.general.male_blind-0", (4, 9, 2))), + ], hair: [ Some(("figure.hair.elf.male-0", (2, 1, 1))), Some(("figure.hair.elf.male-1", (1, -1, 0))), @@ -131,7 +164,14 @@ (Elf, Female): ( offset: (-8.0, -4.0, -6.0), head: ("figure.head.elf.female", (0, 2, 0)), - eyes: ("figure.eyes.elf.female-0", (3, 9, 2)), + eyes: [ + Some(("figure.eyes.general.female_styled-0", (3, 9, 2))), + Some(("figure.eyes.general.female_default-0", (3, 9, 2))), + Some(("figure.eyes.general.female_as_hair-0", (3, 9, 2))), + Some(("figure.eyes.general.female_heterochromia-0", (3, 9, 2))), + Some(("figure.eyes.general.female_scar-0", (3, 9, 2))), + Some(("figure.eyes.general.female_blind-0", (3, 9, 2))), + ], hair: [ Some(("figure.hair.elf.female-0", (0, -2, 0))), Some(("figure.hair.elf.female-1", (2, 1, -1))), @@ -164,11 +204,21 @@ (Dwarf, Male): ( offset: (-6.0, -4.5, -6.0), head: ("figure.head.dwarf.male", (0, 3, 0)), - eyes: ("figure.eyes.dwarf.male-0", (2, 10, 2)), + eyes: [ + Some(("figure.eyes.general.male_bushy-0", (2, 10, 2))), + Some(("figure.eyes.general.male_default-0", (2, 10, 2))), + Some(("figure.eyes.general.male_brow_col-0", (2, 10, 2))), + Some(("figure.eyes.general.male_as_hair-0", (2, 10, 2))), + Some(("figure.eyes.general.male_heterochromia-0", (2, 10, 2))), + Some(("figure.eyes.general.male_scar-0", (2, 10, 2))), + Some(("figure.eyes.general.male_blind-0", (2, 10, 2))), + ], hair: [ Some(("figure.hair.dwarf.bald", (0, 3, 1))), Some(("figure.hair.dwarf.male-0", (1, 1, -3))), Some(("figure.hair.dwarf.male-1", (4, 0, 1))), + //Some(("figure.hair.dwarf.male-2", (0, 2, -2))), + Some(("figure.hair.dwarf.male-3", (1, 1, -3))), ], beard: [ Some(("figure.beard.dwarf.dwarf-0", (4, 9, -2))), @@ -206,12 +256,22 @@ (Dwarf, Female): ( offset: (-6.0, -4.5, -6.0), head: ("figure.head.dwarf.female", (0, 3, 0)), - eyes: ("figure.eyes.dwarf.female-0", (1, 10, 2)), + eyes: [ + Some(("figure.eyes.general.female_default-0", (1, 10, 2))), + Some(("figure.eyes.general.female_styled-0", (1, 10, 2))), + Some(("figure.eyes.general.female_as_hair-0", (1, 10, 2))), + Some(("figure.eyes.general.female_heterochromia-0", (1, 10, 2))), + Some(("figure.eyes.general.female_scar-0", (1, 10, 2))), + Some(("figure.eyes.general.female_blind-0", (1, 10, 2))), + ], hair: [ Some(("figure.hair.dwarf.female-0", (-9, -9, -7))), Some(("figure.hair.dwarf.female-1", (-9, -9, -7))), Some(("figure.hair.dwarf.female-2", (-9, -9, -7))), - Some(("figure.hair.dwarf.female-3", (-9, -9, -7))), + Some(("figure.hair.dwarf.female-3", (-9, -9, -7))), + Some(("figure.hair.dwarf.female-4", (-3, -2, -5))), + Some(("figure.hair.dwarf.female-5", (-3, -2, -5))), + Some(("figure.hair.dwarf.female-6", (-3, -2, -5))), ], beard: [None], accessory: [ @@ -227,11 +287,18 @@ (Undead, Male): ( offset: (-5.0, -4.0, -6.75), head: ("figure.head.undead.male", (0, 2, 0)), - eyes: ("figure.eyes.undead.male-0", (2, 8, 4)), + eyes: [ + Some(("figure.eyes.undead.male-0", (2, 8, 4))), + Some(("figure.eyes.undead.male-1", (1, 7, 4))), + Some(("figure.eyes.undead.male-2", (1, 8, 4))), + Some(("figure.eyes.undead.male-3", (1, 8, 4))), + ], hair: [ Some(("figure.hair.dwarf.bald", (-1, 1, 1))), Some(("figure.hair.undead.male-0", (-1, 1, 1))), Some(("figure.hair.undead.male-1", (3, -2, 0))), + Some(("figure.hair.undead.male-2", (-1, 1, 1))), // <- Modify! + Some(("figure.hair.undead.male-3", (-1, 1, 1))), // <- Modify! ], beard: [None], accessory: [ @@ -240,12 +307,18 @@ (Undead, Female): ( offset: (-5.0, -4.0, -6.75), head: ("figure.head.undead.female", (0, 2, 0)), - eyes: ("figure.eyes.undead.female-0", (2, 8, 3)), + eyes: [ + Some(("figure.eyes.undead.female-0", (2, 8, 3))), + Some(("figure.eyes.undead.female-1", (0, 8, 3))), + Some(("figure.eyes.undead.female-2", (0, 8, 3))), + ], hair: [ Some(("figure.hair.undead.female-0", (0, 1, 0))), Some(("figure.hair.undead.female-1", (-2, 0, -1))), Some(("figure.hair.undead.female-2", (2, 1, 1))), Some(("figure.hair.undead.female-3", (0, -3, -0))), + Some(("figure.hair.undead.female-4", (-1, 1, 0))), // <- Modify + Some(("figure.hair.undead.female-5", (-3, 1, 0))), // <- Modify! ], beard: [None], accessory: [ @@ -254,10 +327,20 @@ (Danari, Male): ( offset: (-9.0, -4.0, -7.5), head: ("figure.head.danari.male", (0, 2, 2)), - eyes: ("figure.eyes.danari.male-0", (5, 9, 4)), + eyes: [ + Some(("figure.eyes.general.male_bushy-0", (5, 9, 4))), + Some(("figure.eyes.general.male_default-0", (5, 9, 4))), + Some(("figure.eyes.general.male_brow_col-0", (5, 9, 4))), + Some(("figure.eyes.general.male_as_hair-0", (5, 9, 4))), + Some(("figure.eyes.general.male_heterochromia-0", (5, 9, 4))), + Some(("figure.eyes.general.male_scar-0", (5, 9, 4))), + Some(("figure.eyes.general.male_blind-0", (5, 9, 4))), + ], hair: [ Some(("figure.hair.danari.male-0", (3, 1, 2))), Some(("figure.hair.danari.male-1", (3, 1, 2))), + Some(("figure.hair.danari.male-2", (3, -2, 3))), + Some(("figure.hair.danari.male-3", (-1, -2, 3))), // <- Modify ], beard: [ None, @@ -269,10 +352,19 @@ (Danari, Female): ( offset: (-9.0, -4.0, -7.5), head: ("figure.head.danari.female", (0, 2, 2)), - eyes: ("figure.eyes.danari.female-0", (4, 9, 4)), + eyes: [ + Some(("figure.eyes.general.female_default-0", (4, 9, 4))), + Some(("figure.eyes.general.female_styled-0", (4, 9, 4))), + Some(("figure.eyes.general.female_as_hair-0", (4, 9, 4))), + Some(("figure.eyes.general.female_heterochromia-0", (4, 9, 4))), + Some(("figure.eyes.general.female_scar-0", (4, 9, 4))), + Some(("figure.eyes.general.female_blind-0", (4, 9, 4))), + ], hair: [ Some(("figure.hair.danari.female-0", (3, -4, 1))), Some(("figure.hair.danari.female-1", (1, 1, 3))), + Some(("figure.hair.danari.female-2", (3, 1, 0))), // <- Ears + Some(("figure.hair.danari.female-3", (1, -3, 0))), ], beard: [None], accessory: [ diff --git a/assets/voxygen/voxel/humanoid_main_weapon_manifest.ron b/assets/voxygen/voxel/humanoid_main_weapon_manifest.ron index 3dbd51ec8c..accbe7d266 100644 --- a/assets/voxygen/voxel/humanoid_main_weapon_manifest.ron +++ b/assets/voxygen/voxel/humanoid_main_weapon_manifest.ron @@ -19,7 +19,150 @@ vox_spec: ("weapon.sword.short_2h-0", (-1.5, -6.5, -1.0)), color: None ), - // Axes + Sword(GreatswordDam0): ( + vox_spec: ("weapon.sword.greatsword_2h_dam-0", (-1.0, -4.5, -6.5)), + color: None + ), + Sword(GreatswordDam1): ( + vox_spec: ("weapon.sword.greatsword_2h_dam-1", (-1.0, -4.5, -6.5)), + color: None + ), + Sword(GreatswordDam2): ( + vox_spec: ("weapon.sword.greatsword_2h_dam-2", (-1.0, -4.5, -6.5)), + color: None + ), + Sword(GreatswordSimple0): ( + vox_spec: ("weapon.sword.greatsword_2h_simple-0", (-1.0, -4.5, -6.5)), + color: None + ), + Sword(GreatswordSimple1): ( + vox_spec: ("weapon.sword.greatsword_2h_simple-1", (-1.0, -4.5, -6.5)), + color: None + ), + Sword(GreatswordSimple2): ( + vox_spec: ("weapon.sword.greatsword_2h_simple-2", (-1.0, -4.5, -6.5)), + color: None + ), + Sword(GreatswordOrn0): ( + vox_spec: ("weapon.sword.greatsword_2h_orn-0", (-1.0, -4.5, -7.5)), + color: None + ), + Sword(GreatswordOrn1): ( + vox_spec: ("weapon.sword.greatsword_2h_orn-1", (-1.0, -4.5, -7.5)), + color: None + ), + Sword(GreatswordOrn2): ( + vox_spec: ("weapon.sword.greatsword_2h_orn-2", (-1.0, -4.5, -7.5 )), + color: None + ), + Sword(GreatswordFine0): ( + vox_spec: ("weapon.sword.greatsword_2h_fine-0", (-2.0, -6.5, -8.0)), + color: None + ), + Sword(GreatswordFine1): ( + vox_spec: ("weapon.sword.greatsword_2h_fine-1", (-2.0, -6.5, -8.0)), + color: None + ), + Sword(GreatswordFine2): ( + vox_spec: ("weapon.sword.greatsword_2h_fine-2", (-2.0, -6.5, -8.0)), + color: None + ), + Sword(LongDam0): ( + vox_spec: ("weapon.sword.long_2h_dam-0", (-1.0, -3.5, -5.0)), + color: None + ), + Sword(LongDam1): ( + vox_spec: ("weapon.sword.long_2h_dam-1", (-1.0, -3.5, -5.0)), + color: None + ), + Sword(LongDam2): ( + vox_spec: ("weapon.sword.long_2h_dam-2", (-1.0, -3.5, -5.0)), + color: None + ), + Sword(LongDam3): ( + vox_spec: ("weapon.sword.long_2h_dam-3", (-1.0, -3.5, -5.0)), + color: None + ), + Sword(LongDam4): ( + vox_spec: ("weapon.sword.long_2h_dam-4", (-1.0, -3.5, -5.0)), + color: None + ), + Sword(LongDam5): ( + vox_spec: ("weapon.sword.long_2h_dam-5", (-1.0, -3.5, -5.0)), + color: None + ), + Sword(LongSimple0): ( + vox_spec: ("weapon.sword.long_2h_simple-0", (-1.0, -3.5, -5.0)), + color: None + ), + Sword(LongSimple1): ( + vox_spec: ("weapon.sword.long_2h_simple-1", (-1.0, -3.5, -5.0)), + color: None + ), + Sword(LongSimple2): ( + vox_spec: ("weapon.sword.long_2h_simple-2", (-1.0, -3.5, -5.0)), + color: None + ), + Sword(LongSimple3): ( + vox_spec: ("weapon.sword.long_2h_simple-3", (-1.0, -3.5, -5.0)), + color: None + ), + Sword(LongSimple4): ( + vox_spec: ("weapon.sword.long_2h_simple-4", (-1.0, -3.5, -5.0)), + color: None + ), + Sword(LongSimple5): ( + vox_spec: ("weapon.sword.long_2h_simple-5", (-1.0, -3.5, -5.0)), + color: None + ), + Sword(LongOrn0): ( + vox_spec: ("weapon.sword.long_2h_orn-0", (-1.0, -3.5, -6.0)), + color: None + ), + Sword(LongOrn1): ( + vox_spec: ("weapon.sword.long_2h_orn-1", (-1.0, -3.5, -6.0)), + color: None + ), + Sword(LongOrn2): ( + vox_spec: ("weapon.sword.long_2h_orn-2", (-1.0, -3.5, -6.0)), + color: None + ), + Sword(LongOrn3): ( + vox_spec: ("weapon.sword.long_2h_orn-3", (-1.0, -3.5, -6.0)), + color: None + ), + Sword(LongOrn4): ( + vox_spec: ("weapon.sword.long_2h_orn-4", (-1.0, -3.5, -6.0)), + color: None + ), + Sword(LongOrn5): ( + vox_spec: ("weapon.sword.long_2h_orn-5", (-1.0, -3.5, -6.0)), + color: None + ), + Sword(LongFine0): ( + vox_spec: ("weapon.sword.long_2h_fine-0", (-2.0, -4.5, -6.0)), + color: None + ), + Sword(LongFine1): ( + vox_spec: ("weapon.sword.long_2h_fine-1", (-2.0, -4.5, -6.0)), + color: None + ), + Sword(LongFine2): ( + vox_spec: ("weapon.sword.long_2h_fine-2", (-2.0, -4.5, -6.0)), + color: None + ), + Sword(LongFine3): ( + vox_spec: ("weapon.sword.long_2h_fine-3", (-2.0, -4.5, -6.0)), + color: None + ), + Sword(LongFine4): ( + vox_spec: ("weapon.sword.long_2h_fine-4", (-2.0, -4.5, -6.0)), + color: None + ), + Sword(LongFine5): ( + vox_spec: ("weapon.sword.long_2h_fine-5", (-2.0, -4.5, -6.0)), + color: None + ), Axe(BasicAxe): ( vox_spec: ("weapon.axe.rusty_2h", (-1.5, -5.0, -4.0)), color: None @@ -113,13 +256,10 @@ ), // Misc Debug(Boost): ( - vox_spec: ("weapon.debug_wand", (-1.5, -9.5, -4.0)), + vox_spec: ("weapon.tool.broom_belzeshrub_purple", (-3.0, -4.0, -4.0)), color: None - ), - Debug(Possess): ( - vox_spec: ("weapon.debug_wand", (-1.5, -9.5, -4.0)), - color: None - ), + ), + // Misc Empty: ( vox_spec: ("armor.empty", (-3.0, -3.5, 1.0)), color: None diff --git a/assets/voxygen/voxel/weapon/sword/greatsword_2h_dam-0.vox b/assets/voxygen/voxel/weapon/sword/greatsword_2h_dam-0.vox new file mode 100644 index 0000000000..6a0a4365a1 Binary files /dev/null and b/assets/voxygen/voxel/weapon/sword/greatsword_2h_dam-0.vox differ diff --git a/assets/voxygen/voxel/weapon/sword/greatsword_2h_dam-1.vox b/assets/voxygen/voxel/weapon/sword/greatsword_2h_dam-1.vox new file mode 100644 index 0000000000..de7b204e18 Binary files /dev/null and b/assets/voxygen/voxel/weapon/sword/greatsword_2h_dam-1.vox differ diff --git a/assets/voxygen/voxel/weapon/sword/greatsword_2h_dam-2.vox b/assets/voxygen/voxel/weapon/sword/greatsword_2h_dam-2.vox new file mode 100644 index 0000000000..75ad85f35d Binary files /dev/null and b/assets/voxygen/voxel/weapon/sword/greatsword_2h_dam-2.vox differ diff --git a/assets/voxygen/voxel/weapon/sword/greatsword_2h_fine-0.vox b/assets/voxygen/voxel/weapon/sword/greatsword_2h_fine-0.vox new file mode 100644 index 0000000000..31aaaacd57 Binary files /dev/null and b/assets/voxygen/voxel/weapon/sword/greatsword_2h_fine-0.vox differ diff --git a/assets/voxygen/voxel/weapon/sword/greatsword_2h_fine-1.vox b/assets/voxygen/voxel/weapon/sword/greatsword_2h_fine-1.vox new file mode 100644 index 0000000000..0ece6bcddc Binary files /dev/null and b/assets/voxygen/voxel/weapon/sword/greatsword_2h_fine-1.vox differ diff --git a/assets/voxygen/voxel/weapon/sword/greatsword_2h_fine-2.vox b/assets/voxygen/voxel/weapon/sword/greatsword_2h_fine-2.vox new file mode 100644 index 0000000000..ffc04f3772 Binary files /dev/null and b/assets/voxygen/voxel/weapon/sword/greatsword_2h_fine-2.vox differ diff --git a/assets/voxygen/voxel/weapon/sword/greatsword_2h_orn-0.vox b/assets/voxygen/voxel/weapon/sword/greatsword_2h_orn-0.vox new file mode 100644 index 0000000000..86d0844eca Binary files /dev/null and b/assets/voxygen/voxel/weapon/sword/greatsword_2h_orn-0.vox differ diff --git a/assets/voxygen/voxel/weapon/sword/greatsword_2h_orn-1.vox b/assets/voxygen/voxel/weapon/sword/greatsword_2h_orn-1.vox new file mode 100644 index 0000000000..dbbd0e42c6 Binary files /dev/null and b/assets/voxygen/voxel/weapon/sword/greatsword_2h_orn-1.vox differ diff --git a/assets/voxygen/voxel/weapon/sword/greatsword_2h_orn-2.vox b/assets/voxygen/voxel/weapon/sword/greatsword_2h_orn-2.vox new file mode 100644 index 0000000000..09f0f066d3 Binary files /dev/null and b/assets/voxygen/voxel/weapon/sword/greatsword_2h_orn-2.vox differ diff --git a/assets/voxygen/voxel/weapon/sword/greatsword_2h_simple-0.vox b/assets/voxygen/voxel/weapon/sword/greatsword_2h_simple-0.vox new file mode 100644 index 0000000000..daa394c7fd Binary files /dev/null and b/assets/voxygen/voxel/weapon/sword/greatsword_2h_simple-0.vox differ diff --git a/assets/voxygen/voxel/weapon/sword/greatsword_2h_simple-1.vox b/assets/voxygen/voxel/weapon/sword/greatsword_2h_simple-1.vox new file mode 100644 index 0000000000..b0663e2d0f Binary files /dev/null and b/assets/voxygen/voxel/weapon/sword/greatsword_2h_simple-1.vox differ diff --git a/assets/voxygen/voxel/weapon/sword/greatsword_2h_simple-2.vox b/assets/voxygen/voxel/weapon/sword/greatsword_2h_simple-2.vox new file mode 100644 index 0000000000..5a4a97cc15 Binary files /dev/null and b/assets/voxygen/voxel/weapon/sword/greatsword_2h_simple-2.vox differ diff --git a/assets/voxygen/voxel/weapon/sword/long_2h_dam-0.vox b/assets/voxygen/voxel/weapon/sword/long_2h_dam-0.vox new file mode 100644 index 0000000000..46bed4239f Binary files /dev/null and b/assets/voxygen/voxel/weapon/sword/long_2h_dam-0.vox differ diff --git a/assets/voxygen/voxel/weapon/sword/long_2h_dam-1.vox b/assets/voxygen/voxel/weapon/sword/long_2h_dam-1.vox new file mode 100644 index 0000000000..474c279e66 Binary files /dev/null and b/assets/voxygen/voxel/weapon/sword/long_2h_dam-1.vox differ diff --git a/assets/voxygen/voxel/weapon/sword/long_2h_dam-2.vox b/assets/voxygen/voxel/weapon/sword/long_2h_dam-2.vox new file mode 100644 index 0000000000..b7b6384623 Binary files /dev/null and b/assets/voxygen/voxel/weapon/sword/long_2h_dam-2.vox differ diff --git a/assets/voxygen/voxel/weapon/sword/long_2h_dam-3.vox b/assets/voxygen/voxel/weapon/sword/long_2h_dam-3.vox new file mode 100644 index 0000000000..a8529a73fc Binary files /dev/null and b/assets/voxygen/voxel/weapon/sword/long_2h_dam-3.vox differ diff --git a/assets/voxygen/voxel/weapon/sword/long_2h_dam-4.vox b/assets/voxygen/voxel/weapon/sword/long_2h_dam-4.vox new file mode 100644 index 0000000000..87d556e311 Binary files /dev/null and b/assets/voxygen/voxel/weapon/sword/long_2h_dam-4.vox differ diff --git a/assets/voxygen/voxel/weapon/sword/long_2h_dam-5.vox b/assets/voxygen/voxel/weapon/sword/long_2h_dam-5.vox new file mode 100644 index 0000000000..181a035c31 Binary files /dev/null and b/assets/voxygen/voxel/weapon/sword/long_2h_dam-5.vox differ diff --git a/assets/voxygen/voxel/weapon/sword/long_2h_fine-0.vox b/assets/voxygen/voxel/weapon/sword/long_2h_fine-0.vox new file mode 100644 index 0000000000..a99826ebc9 Binary files /dev/null and b/assets/voxygen/voxel/weapon/sword/long_2h_fine-0.vox differ diff --git a/assets/voxygen/voxel/weapon/sword/long_2h_fine-1.vox b/assets/voxygen/voxel/weapon/sword/long_2h_fine-1.vox new file mode 100644 index 0000000000..f6da0d80a6 Binary files /dev/null and b/assets/voxygen/voxel/weapon/sword/long_2h_fine-1.vox differ diff --git a/assets/voxygen/voxel/weapon/sword/long_2h_fine-2.vox b/assets/voxygen/voxel/weapon/sword/long_2h_fine-2.vox new file mode 100644 index 0000000000..29ba5d6857 Binary files /dev/null and b/assets/voxygen/voxel/weapon/sword/long_2h_fine-2.vox differ diff --git a/assets/voxygen/voxel/weapon/sword/long_2h_fine-3.vox b/assets/voxygen/voxel/weapon/sword/long_2h_fine-3.vox new file mode 100644 index 0000000000..35e5d14e2a Binary files /dev/null and b/assets/voxygen/voxel/weapon/sword/long_2h_fine-3.vox differ diff --git a/assets/voxygen/voxel/weapon/sword/long_2h_fine-4.vox b/assets/voxygen/voxel/weapon/sword/long_2h_fine-4.vox new file mode 100644 index 0000000000..f8011b769e Binary files /dev/null and b/assets/voxygen/voxel/weapon/sword/long_2h_fine-4.vox differ diff --git a/assets/voxygen/voxel/weapon/sword/long_2h_fine-5.vox b/assets/voxygen/voxel/weapon/sword/long_2h_fine-5.vox new file mode 100644 index 0000000000..dcd9020146 Binary files /dev/null and b/assets/voxygen/voxel/weapon/sword/long_2h_fine-5.vox differ diff --git a/assets/voxygen/voxel/weapon/sword/long_2h_orn-0.vox b/assets/voxygen/voxel/weapon/sword/long_2h_orn-0.vox new file mode 100644 index 0000000000..25d9cec1b3 Binary files /dev/null and b/assets/voxygen/voxel/weapon/sword/long_2h_orn-0.vox differ diff --git a/assets/voxygen/voxel/weapon/sword/long_2h_orn-1.vox b/assets/voxygen/voxel/weapon/sword/long_2h_orn-1.vox new file mode 100644 index 0000000000..befda529be Binary files /dev/null and b/assets/voxygen/voxel/weapon/sword/long_2h_orn-1.vox differ diff --git a/assets/voxygen/voxel/weapon/sword/long_2h_orn-2.vox b/assets/voxygen/voxel/weapon/sword/long_2h_orn-2.vox new file mode 100644 index 0000000000..383e9e9249 Binary files /dev/null and b/assets/voxygen/voxel/weapon/sword/long_2h_orn-2.vox differ diff --git a/assets/voxygen/voxel/weapon/sword/long_2h_orn-3.vox b/assets/voxygen/voxel/weapon/sword/long_2h_orn-3.vox new file mode 100644 index 0000000000..e9a734e6ae Binary files /dev/null and b/assets/voxygen/voxel/weapon/sword/long_2h_orn-3.vox differ diff --git a/assets/voxygen/voxel/weapon/sword/long_2h_orn-4.vox b/assets/voxygen/voxel/weapon/sword/long_2h_orn-4.vox new file mode 100644 index 0000000000..868d76c1e6 Binary files /dev/null and b/assets/voxygen/voxel/weapon/sword/long_2h_orn-4.vox differ diff --git a/assets/voxygen/voxel/weapon/sword/long_2h_orn-5.vox b/assets/voxygen/voxel/weapon/sword/long_2h_orn-5.vox new file mode 100644 index 0000000000..8582758cf4 Binary files /dev/null and b/assets/voxygen/voxel/weapon/sword/long_2h_orn-5.vox differ diff --git a/assets/voxygen/voxel/weapon/sword/long_2h_simple-0.vox b/assets/voxygen/voxel/weapon/sword/long_2h_simple-0.vox new file mode 100644 index 0000000000..ea58d5a565 Binary files /dev/null and b/assets/voxygen/voxel/weapon/sword/long_2h_simple-0.vox differ diff --git a/assets/voxygen/voxel/weapon/sword/long_2h_simple-1.vox b/assets/voxygen/voxel/weapon/sword/long_2h_simple-1.vox new file mode 100644 index 0000000000..92e516a2c2 Binary files /dev/null and b/assets/voxygen/voxel/weapon/sword/long_2h_simple-1.vox differ diff --git a/assets/voxygen/voxel/weapon/sword/long_2h_simple-2.vox b/assets/voxygen/voxel/weapon/sword/long_2h_simple-2.vox new file mode 100644 index 0000000000..fca4808b5b Binary files /dev/null and b/assets/voxygen/voxel/weapon/sword/long_2h_simple-2.vox differ diff --git a/assets/voxygen/voxel/weapon/sword/long_2h_simple-3.vox b/assets/voxygen/voxel/weapon/sword/long_2h_simple-3.vox new file mode 100644 index 0000000000..83ed8d79ca Binary files /dev/null and b/assets/voxygen/voxel/weapon/sword/long_2h_simple-3.vox differ diff --git a/assets/voxygen/voxel/weapon/sword/long_2h_simple-4.vox b/assets/voxygen/voxel/weapon/sword/long_2h_simple-4.vox new file mode 100644 index 0000000000..cecfd85b63 Binary files /dev/null and b/assets/voxygen/voxel/weapon/sword/long_2h_simple-4.vox differ diff --git a/assets/voxygen/voxel/weapon/sword/long_2h_simple-5.vox b/assets/voxygen/voxel/weapon/sword/long_2h_simple-5.vox new file mode 100644 index 0000000000..4ec116c365 Binary files /dev/null and b/assets/voxygen/voxel/weapon/sword/long_2h_simple-5.vox differ diff --git a/assets/voxygen/voxel/weapon/tool/broom-belzeshrub.vox b/assets/voxygen/voxel/weapon/tool/broom-belzeshrub.vox new file mode 100644 index 0000000000..454b5d3c00 Binary files /dev/null and b/assets/voxygen/voxel/weapon/tool/broom-belzeshrub.vox differ diff --git a/assets/voxygen/voxel/weapon/tool/broom_belzeshrub_green.vox b/assets/voxygen/voxel/weapon/tool/broom_belzeshrub_green.vox new file mode 100644 index 0000000000..bb3353602c Binary files /dev/null and b/assets/voxygen/voxel/weapon/tool/broom_belzeshrub_green.vox differ diff --git a/assets/voxygen/voxel/weapon/tool/broom_belzeshrub_purple.vox b/assets/voxygen/voxel/weapon/tool/broom_belzeshrub_purple.vox new file mode 100644 index 0000000000..102d577cf4 Binary files /dev/null and b/assets/voxygen/voxel/weapon/tool/broom_belzeshrub_purple.vox differ diff --git a/assets/world/manifests/quirky.ron b/assets/world/manifests/quirky.ron index 762845cdfb..89bfda777e 100644 --- a/assets/world/manifests/quirky.ron +++ b/assets/world/manifests/quirky.ron @@ -4,5 +4,9 @@ specifier: "world.structure.natural.witch-hut", center: (10, 13, 9) ), + ( + specifier: "world.structure.natural.tree-house", + center: (20, 15, 10) + ), ] ) diff --git a/assets/world/structure/natural/tree-house.vox b/assets/world/structure/natural/tree-house.vox new file mode 100644 index 0000000000..e0dae451e3 Binary files /dev/null and b/assets/world/structure/natural/tree-house.vox differ diff --git a/common/src/comp/body/humanoid.rs b/common/src/comp/body/humanoid.rs index 73eed323cd..d5105f250e 100644 --- a/common/src/comp/body/humanoid.rs +++ b/common/src/comp/body/humanoid.rs @@ -3,11 +3,11 @@ use vek::Rgb; #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] pub struct Body { - pub race: Race, + pub species: Species, pub body_type: BodyType, pub hair_style: u8, pub beard: u8, - pub eyebrows: u8, + pub eyes: u8, pub accessory: u8, pub hair_color: u8, pub skin: u8, @@ -17,37 +17,39 @@ pub struct Body { impl Body { pub fn random() -> Self { let mut rng = thread_rng(); - let race = *(&ALL_RACES).choose(&mut rng).unwrap(); - Self::random_with(&mut rng, &race) + let species = *(&ALL_SPECIES).choose(&mut rng).unwrap(); + Self::random_with(&mut rng, &species) } #[inline] - pub fn random_with(rng: &mut impl Rng, &race: &Race) -> Self { + pub fn random_with(rng: &mut impl Rng, &species: &Species) -> Self { let body_type = *(&ALL_BODY_TYPES).choose(rng).unwrap(); Self { - race, + species, body_type, - hair_style: rng.gen_range(0, race.num_hair_styles(body_type)), - beard: rng.gen_range(0, race.num_beards(body_type)), - eyebrows: rng.gen_range(0, race.num_eyebrows(body_type)), - accessory: rng.gen_range(0, race.num_accessories(body_type)), - hair_color: rng.gen_range(0, race.num_hair_colors()) as u8, - skin: rng.gen_range(0, race.num_skin_colors()) as u8, - eye_color: rng.gen_range(0, race.num_eye_colors()) as u8, + hair_style: rng.gen_range(0, species.num_hair_styles(body_type)), + beard: rng.gen_range(0, species.num_beards(body_type)), + accessory: rng.gen_range(0, species.num_accessories(body_type)), + hair_color: rng.gen_range(0, species.num_hair_colors()) as u8, + skin: rng.gen_range(0, species.num_skin_colors()) as u8, + eye_color: rng.gen_range(0, species.num_eye_colors()) as u8, + eyes: rng.gen_range(0, 1), /* TODO Add a way to set specific head-segments for NPCs + * with the default being a random one */ } } pub fn validate(&mut self) { self.hair_style = self .hair_style - .min(self.race.num_hair_styles(self.body_type) - 1); - self.beard = self.beard.min(self.race.num_beards(self.body_type) - 1); - self.hair_color = self.hair_color.min(self.race.num_hair_colors() - 1); - self.skin = self.skin.min(self.race.num_skin_colors() - 1); - self.eye_color = self.hair_style.min(self.race.num_eye_colors() - 1); + .min(self.species.num_hair_styles(self.body_type) - 1); + self.beard = self.beard.min(self.species.num_beards(self.body_type) - 1); + self.hair_color = self.hair_color.min(self.species.num_hair_colors() - 1); + self.skin = self.skin.min(self.species.num_skin_colors() - 1); + self.eyes = self.eyes.min(self.species.num_eyes(self.body_type) - 1); + self.eye_color = self.hair_style.min(self.species.num_eye_colors() - 1); self.accessory = self .accessory - .min(self.race.num_accessories(self.body_type) - 1); + .min(self.species.num_accessories(self.body_type) - 1); } } @@ -57,7 +59,7 @@ impl From<Body> for super::Body { #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] #[repr(u32)] -pub enum Race { +pub enum Species { Danari = 0, Dwarf = 1, Elf = 2, @@ -79,36 +81,36 @@ pub struct AllSpecies<SpeciesMeta> { pub undead: SpeciesMeta, } -impl<'a, SpeciesMeta> core::ops::Index<&'a Race> for AllSpecies<SpeciesMeta> { +impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies<SpeciesMeta> { type Output = SpeciesMeta; #[inline] - fn index(&self, &index: &'a Race) -> &Self::Output { + fn index(&self, &index: &'a Species) -> &Self::Output { match index { - Race::Danari => &self.danari, - Race::Dwarf => &self.dwarf, - Race::Elf => &self.elf, - Race::Human => &self.human, - Race::Orc => &self.orc, - Race::Undead => &self.undead, + Species::Danari => &self.danari, + Species::Dwarf => &self.dwarf, + Species::Elf => &self.elf, + Species::Human => &self.human, + Species::Orc => &self.orc, + Species::Undead => &self.undead, } } } -pub const ALL_RACES: [Race; 6] = [ - Race::Danari, - Race::Dwarf, - Race::Elf, - Race::Human, - Race::Orc, - Race::Undead, +pub const ALL_SPECIES: [Species; 6] = [ + Species::Danari, + Species::Dwarf, + Species::Elf, + Species::Human, + Species::Orc, + Species::Undead, ]; impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies<SpeciesMeta> { type IntoIter = std::iter::Copied<std::slice::Iter<'static, Self::Item>>; - type Item = Race; + type Item = Species; - fn into_iter(self) -> Self::IntoIter { ALL_RACES.iter().copied() } + fn into_iter(self) -> Self::IntoIter { ALL_SPECIES.iter().copied() } } // Hair Colors @@ -348,37 +350,37 @@ pub const UNDEAD_EYE_COLORS: [EyeColor; 5] = [ EyeColor::ToxicGreen, ]; -impl Race { +impl Species { fn hair_colors(self) -> &'static [(u8, u8, u8)] { match self { - Race::Danari => &DANARI_HAIR_COLORS, - Race::Dwarf => &DWARF_HAIR_COLORS, - Race::Elf => &ELF_HAIR_COLORS, - Race::Human => &HUMAN_HAIR_COLORS, - Race::Orc => &ORC_HAIR_COLORS, - Race::Undead => &UNDEAD_HAIR_COLORS, + Species::Danari => &DANARI_HAIR_COLORS, + Species::Dwarf => &DWARF_HAIR_COLORS, + Species::Elf => &ELF_HAIR_COLORS, + Species::Human => &HUMAN_HAIR_COLORS, + Species::Orc => &ORC_HAIR_COLORS, + Species::Undead => &UNDEAD_HAIR_COLORS, } } fn skin_colors(self) -> &'static [Skin] { match self { - Race::Danari => &DANARI_SKIN_COLORS, - Race::Dwarf => &DWARF_SKIN_COLORS, - Race::Elf => &ELF_SKIN_COLORS, - Race::Human => &HUMAN_SKIN_COLORS, - Race::Orc => &ORC_SKIN_COLORS, - Race::Undead => &UNDEAD_SKIN_COLORS, + Species::Danari => &DANARI_SKIN_COLORS, + Species::Dwarf => &DWARF_SKIN_COLORS, + Species::Elf => &ELF_SKIN_COLORS, + Species::Human => &HUMAN_SKIN_COLORS, + Species::Orc => &ORC_SKIN_COLORS, + Species::Undead => &UNDEAD_SKIN_COLORS, } } fn eye_colors(self) -> &'static [EyeColor] { match self { - Race::Danari => &DANARI_EYE_COLORS, - Race::Dwarf => &DWARF_EYE_COLORS, - Race::Elf => &ELF_EYE_COLORS, - Race::Human => &HUMAN_EYE_COLORS, - Race::Orc => &ORC_EYE_COLORS, - Race::Undead => &UNDEAD_EYE_COLORS, + Species::Danari => &DANARI_EYE_COLORS, + Species::Dwarf => &DWARF_EYE_COLORS, + Species::Elf => &ELF_EYE_COLORS, + Species::Human => &HUMAN_EYE_COLORS, + Species::Orc => &ORC_EYE_COLORS, + Species::Undead => &UNDEAD_EYE_COLORS, } } @@ -412,54 +414,71 @@ impl Race { pub fn num_hair_styles(self, body_type: BodyType) -> u8 { match (self, body_type) { - (Race::Danari, BodyType::Female) => 2, - (Race::Danari, BodyType::Male) => 2, - (Race::Dwarf, BodyType::Female) => 4, - (Race::Dwarf, BodyType::Male) => 3, - (Race::Elf, BodyType::Female) => 21, - (Race::Elf, BodyType::Male) => 4, - (Race::Human, BodyType::Female) => 19, - (Race::Human, BodyType::Male) => 17, - (Race::Orc, BodyType::Female) => 7, - (Race::Orc, BodyType::Male) => 8, - (Race::Undead, BodyType::Female) => 4, - (Race::Undead, BodyType::Male) => 3, + (Species::Danari, BodyType::Female) => 4, + (Species::Danari, BodyType::Male) => 4, + (Species::Dwarf, BodyType::Female) => 7, + (Species::Dwarf, BodyType::Male) => 4, + (Species::Elf, BodyType::Female) => 21, + (Species::Elf, BodyType::Male) => 4, + (Species::Human, BodyType::Female) => 19, + (Species::Human, BodyType::Male) => 17, + (Species::Orc, BodyType::Female) => 7, + (Species::Orc, BodyType::Male) => 8, + (Species::Undead, BodyType::Female) => 6, + (Species::Undead, BodyType::Male) => 5, } } pub fn num_accessories(self, body_type: BodyType) -> u8 { match (self, body_type) { - (Race::Danari, BodyType::Female) => 1, - (Race::Danari, BodyType::Male) => 1, - (Race::Dwarf, BodyType::Female) => 7, - (Race::Dwarf, BodyType::Male) => 7, - (Race::Elf, BodyType::Female) => 2, - (Race::Elf, BodyType::Male) => 1, - (Race::Human, BodyType::Female) => 1, - (Race::Human, BodyType::Male) => 1, - (Race::Orc, BodyType::Female) => 4, - (Race::Orc, BodyType::Male) => 5, - (Race::Undead, BodyType::Female) => 1, - (Race::Undead, BodyType::Male) => 1, + (Species::Danari, BodyType::Female) => 1, + (Species::Danari, BodyType::Male) => 1, + (Species::Dwarf, BodyType::Female) => 7, + (Species::Dwarf, BodyType::Male) => 7, + (Species::Elf, BodyType::Female) => 2, + (Species::Elf, BodyType::Male) => 1, + (Species::Human, BodyType::Female) => 1, + (Species::Human, BodyType::Male) => 1, + (Species::Orc, BodyType::Female) => 4, + (Species::Orc, BodyType::Male) => 5, + (Species::Undead, BodyType::Female) => 1, + (Species::Undead, BodyType::Male) => 1, } } pub fn num_eyebrows(self, _body_type: BodyType) -> u8 { 1 } + pub fn num_eyes(self, body_type: BodyType) -> u8 { + match (self, body_type) { + (Species::Danari, BodyType::Female) => 6, + (Species::Danari, BodyType::Male) => 7, + (Species::Dwarf, BodyType::Female) => 6, + (Species::Dwarf, BodyType::Male) => 7, + (Species::Elf, BodyType::Female) => 6, + (Species::Elf, BodyType::Male) => 7, + (Species::Human, BodyType::Female) => 6, + (Species::Human, BodyType::Male) => 5, + (Species::Orc, BodyType::Female) => 6, + (Species::Orc, BodyType::Male) => 2, + (Species::Undead, BodyType::Female) => 3, + (Species::Undead, BodyType::Male) => 4, + } + } + pub fn num_beards(self, body_type: BodyType) -> u8 { match (self, body_type) { - (Race::Danari, BodyType::Female) => 1, - (Race::Danari, BodyType::Male) => 2, - (Race::Dwarf, BodyType::Female) => 1, - (Race::Dwarf, BodyType::Male) => 20, - (Race::Elf, BodyType::Female) => 1, - (Race::Elf, BodyType::Male) => 1, - (Race::Human, BodyType::Female) => 1, - (Race::Human, BodyType::Male) => 4, - (Race::Orc, BodyType::Female) => 1, - (Race::Orc, BodyType::Male) => 3, - (Race::Undead, BodyType::Female) => 1, - (Race::Undead, BodyType::Male) => 1, + (Species::Danari, BodyType::Female) => 1, + (Species::Danari, BodyType::Male) => 2, + (Species::Dwarf, BodyType::Female) => 1, + (Species::Dwarf, BodyType::Male) => 20, + (Species::Elf, BodyType::Female) => 1, + (Species::Elf, BodyType::Male) => 1, + (Species::Human, BodyType::Female) => 1, + (Species::Human, BodyType::Male) => 4, + (Species::Orc, BodyType::Female) => 1, + (Species::Orc, BodyType::Male) => 3, + (Species::Undead, BodyType::Female) => 1, + (Species::Undead, BodyType::Male) => 1, } } } @@ -472,13 +491,6 @@ pub enum BodyType { } pub const ALL_BODY_TYPES: [BodyType; 2] = [BodyType::Female, BodyType::Male]; -#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] -#[repr(u32)] -pub enum Eyebrows { - Yup = 0, -} -pub const ALL_EYEBROWS: [Eyebrows; 1] = [Eyebrows::Yup]; - #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] #[repr(u32)] pub enum EyeColor { diff --git a/common/src/comp/inventory/item/mod.rs b/common/src/comp/inventory/item/mod.rs index f95eb2b2b7..abefd6c13d 100644 --- a/common/src/comp/inventory/item/mod.rs +++ b/common/src/comp/inventory/item/mod.rs @@ -156,6 +156,9 @@ impl Item { BlockKind::Apple => Some(assets::load_expect_cloned("common.items.apple")), BlockKind::Mushroom => Some(assets::load_expect_cloned("common.items.mushroom")), BlockKind::Velorite => Some(assets::load_expect_cloned("common.items.velorite")), + BlockKind::VeloriteFrag => { + Some(assets::load_expect_cloned("common.items.veloritefrag")) + }, BlockKind::BlueFlower => Some(assets::load_expect_cloned("common.items.flowers.blue")), BlockKind::PinkFlower => Some(assets::load_expect_cloned("common.items.flowers.pink")), BlockKind::PurpleFlower => { diff --git a/common/src/comp/inventory/item/tool.rs b/common/src/comp/inventory/item/tool.rs index e5dd230343..c9423ebc9d 100644 --- a/common/src/comp/inventory/item/tool.rs +++ b/common/src/comp/inventory/item/tool.rs @@ -14,6 +14,42 @@ pub enum SwordKind { Zweihander0, WoodTraining, Short0, + GreatswordDam0, + GreatswordDam1, + GreatswordDam2, + GreatswordSimple0, + GreatswordSimple1, + GreatswordSimple2, + GreatswordOrn0, + GreatswordOrn1, + GreatswordOrn2, + GreatswordFine0, + GreatswordFine1, + GreatswordFine2, + LongDam0, + LongDam1, + LongDam2, + LongDam3, + LongDam4, + LongDam5, + LongSimple0, + LongSimple1, + LongSimple2, + LongSimple3, + LongSimple4, + LongSimple5, + LongOrn0, + LongOrn1, + LongOrn2, + LongOrn3, + LongOrn4, + LongOrn5, + LongFine0, + LongFine1, + LongFine2, + LongFine3, + LongFine4, + LongFine5, } #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum AxeKind { @@ -61,7 +97,6 @@ pub enum FarmKind { #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum DebugKind { Boost, - Possess, } #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] @@ -98,7 +133,7 @@ impl Tool { pub fn get_abilities(&self) -> Vec<CharacterAbility> { use CharacterAbility::*; - use DebugKind::*; + //use DebugKind::*; use ToolKind::*; match self.kind { @@ -178,23 +213,23 @@ impl Tool { Staff(StaffKind::BasicStaff) => vec![ BasicMelee { energy_cost: 0, - buildup_duration: Duration::from_millis(0), + buildup_duration: Duration::from_millis(100), recover_duration: Duration::from_millis(300), - base_healthchange: -1, + base_healthchange: -3, range: 10.0, max_angle: 45.0, }, BasicRanged { energy_cost: 0, holdable: false, - prepare_duration: Duration::from_millis(0), + prepare_duration: Duration::from_millis(250), recover_duration: Duration::from_millis(200), projectile: Projectile { hit_solid: vec![projectile::Effect::Vanish], hit_entity: vec![ projectile::Effect::Damage(HealthChange { // TODO: This should not be fixed (?) - amount: -1, + amount: -2, cause: HealthSource::Projectile { owner: None }, }), projectile::Effect::RewardEnergy(100), @@ -266,22 +301,28 @@ impl Tool { duration: Duration::from_millis(50), only_up: true, }, - ], - Possess => vec![BasicRanged { - energy_cost: 0, - holdable: false, - prepare_duration: Duration::from_millis(0), - recover_duration: Duration::from_millis(300), - projectile: Projectile { - hit_solid: vec![projectile::Effect::Stick], - hit_entity: vec![projectile::Effect::Stick, projectile::Effect::Possess], - time_left: Duration::from_secs(10), - owner: None, + BasicRanged { + energy_cost: 0, + holdable: false, + prepare_duration: Duration::from_millis(0), + recover_duration: Duration::from_millis(10), + projectile: Projectile { + hit_solid: vec![projectile::Effect::Stick], + hit_entity: vec![ + projectile::Effect::Stick, + projectile::Effect::Possess, + ], + time_left: Duration::from_secs(10), + owner: None, + }, + projectile_body: Body::Object(object::Body::ArrowSnake), + projectile_light: Some(LightEmitter { + col: (0.0, 1.0, 0.33).into(), + ..Default::default() + }), + projectile_gravity: None, }, - projectile_body: Body::Object(object::Body::ArrowSnake), - projectile_light: None, - projectile_gravity: None, - }], + ], }, Empty => vec![BasicMelee { energy_cost: 0, diff --git a/common/src/comp/stats.rs b/common/src/comp/stats.rs index 628cb8d80c..9e0db53320 100644 --- a/common/src/comp/stats.rs +++ b/common/src/comp/stats.rs @@ -1,6 +1,6 @@ use crate::{ comp, - comp::{body::humanoid::Race, Body}, + comp::{body::humanoid::Species, Body}, sync::Uid, }; use specs::{Component, FlaggedStorage}; @@ -143,19 +143,22 @@ impl Stats { impl Stats { pub fn new(name: String, body: Body) -> Self { - let race = if let comp::Body::Humanoid(hbody) = body { - Some(hbody.race) + let species = if let comp::Body::Humanoid(hbody) = body { + Some(hbody.species) } else { None }; - let (endurance, fitness, willpower) = match race { - Some(Race::Danari) => (0, 2, 3), // Small, flexible, intelligent, physically weak - Some(Race::Dwarf) => (2, 2, 1), // phyiscally strong, intelligent, slow reflexes - Some(Race::Elf) => (1, 2, 2), // Intelligent, quick, physically weak - Some(Race::Human) => (2, 1, 2), // Perfectly balanced - Some(Race::Orc) => (3, 2, 0), // Physically strong, non intelligent, medium reflexes - Some(Race::Undead) => (1, 3, 1), // Very good reflexes, equally intelligent and strong + // TODO: define base stats somewhere else (maybe method on Body?) + let (endurance, fitness, willpower) = match species { + Some(Species::Danari) => (0, 2, 3), // Small, flexible, intelligent, physically weak + Some(Species::Dwarf) => (2, 2, 1), // phyiscally strong, intelligent, slow reflexes + Some(Species::Elf) => (1, 2, 2), // Intelligent, quick, physically weak + Some(Species::Human) => (2, 1, 2), // Perfectly balanced + Some(Species::Orc) => (3, 2, 0), /* Physically strong, non intelligent, medium */ + // reflexes + Some(Species::Undead) => (1, 3, 1), /* Very good reflexes, equally intelligent and */ + // strong None => (0, 0, 0), }; diff --git a/common/src/generation.rs b/common/src/generation.rs index b7058cd8c4..2a85e12b8f 100644 --- a/common/src/generation.rs +++ b/common/src/generation.rs @@ -91,7 +91,7 @@ impl EntityInfo { pub fn with_automatic_name(mut self) -> Self { self.name = match &self.body { - Body::Humanoid(body) => Some(get_npc_name(&NPC_NAMES.humanoid, body.race)), + Body::Humanoid(body) => Some(get_npc_name(&NPC_NAMES.humanoid, body.species)), Body::QuadrupedMedium(body) => { Some(get_npc_name(&NPC_NAMES.quadruped_medium, body.species)) }, diff --git a/server/src/migrations/2020-05-24-235534_race_species/down.sql b/server/src/migrations/2020-05-24-235534_race_species/down.sql new file mode 100644 index 0000000000..e9ea64bab0 --- /dev/null +++ b/server/src/migrations/2020-05-24-235534_race_species/down.sql @@ -0,0 +1,46 @@ +-- SQLITE v < 3.25 does not support renaming columns. +ALTER TABLE + body RENAME TO body_tmp; + +CREATE TABLE IF NOT EXISTS body ( + character_id INT NOT NULL PRIMARY KEY, + race SMALLINT NOT NULL, + body_type SMALLINT NOT NULL, + hair_style SMALLINT NOT NULL, + beard SMALLINT NOT NULL, + eyebrows SMALLINT NOT NULL, + accessory SMALLINT NOT NULL, + hair_color SMALLINT NOT NULL, + skin SMALLINT NOT NULL, + eye_color SMALLINT NOT NULL, + FOREIGN KEY(character_id) REFERENCES "character"(id) ON DELETE CASCADE +); + +INSERT INTO + body( + character_id, + race, + body_type, + hair_style, + beard, + eyebrows, + accessory, + hair_color, + skin, + eye_color + ) +SELECT + character_id, + species, + body_type, + hair_style, + beard, + eyes, + accessory, + hair_color, + skin, + eye_color +FROM + body_tmp; + +DROP TABLE body_tmp; \ No newline at end of file diff --git a/server/src/migrations/2020-05-24-235534_race_species/up.sql b/server/src/migrations/2020-05-24-235534_race_species/up.sql new file mode 100644 index 0000000000..6c495f616b --- /dev/null +++ b/server/src/migrations/2020-05-24-235534_race_species/up.sql @@ -0,0 +1,46 @@ +-- SQLITE v < 3.25 does not support renaming columns. +ALTER TABLE + body RENAME TO body_tmp; + +CREATE TABLE IF NOT EXISTS body ( + character_id INT NOT NULL PRIMARY KEY, + species SMALLINT NOT NULL, + body_type SMALLINT NOT NULL, + hair_style SMALLINT NOT NULL, + beard SMALLINT NOT NULL, + eyes SMALLINT NOT NULL, + accessory SMALLINT NOT NULL, + hair_color SMALLINT NOT NULL, + skin SMALLINT NOT NULL, + eye_color SMALLINT NOT NULL, + FOREIGN KEY(character_id) REFERENCES "character"(id) ON DELETE CASCADE +); + +INSERT INTO + body( + character_id, + species, + body_type, + hair_style, + beard, + eyes, + accessory, + hair_color, + skin, + eye_color + ) +SELECT + character_id, + race, + body_type, + hair_style, + beard, + eyebrows, + accessory, + hair_color, + skin, + eye_color +FROM + body_tmp; + +DROP TABLE body_tmp; \ No newline at end of file diff --git a/server/src/persistence/character.rs b/server/src/persistence/character.rs index b1b7159601..839e46a698 100644 --- a/server/src/persistence/character.rs +++ b/server/src/persistence/character.rs @@ -100,11 +100,11 @@ pub fn create_character( let new_body = Body { character_id: inserted_character.id as i32, - race: body_data.race as i16, + species: body_data.species as i16, body_type: body_data.body_type as i16, hair_style: body_data.hair_style as i16, beard: body_data.beard as i16, - eyebrows: body_data.eyebrows as i16, + eyes: body_data.eyes as i16, accessory: body_data.accessory as i16, hair_color: body_data.hair_color as i16, skin: body_data.skin as i16, diff --git a/server/src/persistence/models.rs b/server/src/persistence/models.rs index 74ff72d796..2fbe165290 100644 --- a/server/src/persistence/models.rs +++ b/server/src/persistence/models.rs @@ -44,11 +44,11 @@ impl From<&Character> for CharacterData { #[table_name = "body"] pub struct Body { pub character_id: i32, - pub race: i16, + pub species: i16, pub body_type: i16, pub hair_style: i16, pub beard: i16, - pub eyebrows: i16, + pub eyes: i16, pub accessory: i16, pub hair_color: i16, pub skin: i16, @@ -58,11 +58,11 @@ pub struct Body { impl From<&Body> for comp::Body { fn from(body: &Body) -> comp::Body { comp::Body::Humanoid(comp::humanoid::Body { - race: comp::humanoid::ALL_RACES[body.race as usize], + species: comp::humanoid::ALL_SPECIES[body.species as usize], body_type: comp::humanoid::ALL_BODY_TYPES[body.body_type as usize], hair_style: body.hair_style as u8, beard: body.beard as u8, - eyebrows: body.eyebrows as u8, + eyes: body.eyes as u8, accessory: body.accessory as u8, hair_color: body.hair_color as u8, skin: body.skin as u8, @@ -166,11 +166,11 @@ mod tests { alias: "test", body: &comp::Body::from(&Body { character_id: 0, - race: 0, + species: 0, body_type: comp::humanoid::BodyType::Female as i16, hair_style: 0, beard: 0, - eyebrows: 0, + eyes: 0, accessory: 0, hair_color: 0, skin: 0, diff --git a/server/src/persistence/schema.rs b/server/src/persistence/schema.rs index 6b3528d970..b692588675 100644 --- a/server/src/persistence/schema.rs +++ b/server/src/persistence/schema.rs @@ -1,11 +1,11 @@ table! { body (character_id) { character_id -> Integer, - race -> SmallInt, + species -> SmallInt, body_type -> SmallInt, hair_style -> SmallInt, beard -> SmallInt, - eyebrows -> SmallInt, + eyes -> SmallInt, accessory -> SmallInt, hair_color -> SmallInt, skin -> SmallInt, diff --git a/server/src/sys/terrain.rs b/server/src/sys/terrain.rs index 70268cf7dc..e0bfc7d43b 100644 --- a/server/src/sys/terrain.rs +++ b/server/src/sys/terrain.rs @@ -269,7 +269,7 @@ impl<'a> System<'a> for Sys { format!( "{} Giant {}", adjective, - get_npc_name(&NPC_NAMES.humanoid, body_new.race) + get_npc_name(&NPC_NAMES.humanoid, body_new.species) ), body, ); diff --git a/voxygen/src/anim/character/mod.rs b/voxygen/src/anim/character/mod.rs index 578e98f957..9f13a3e3f2 100644 --- a/voxygen/src/anim/character/mod.rs +++ b/voxygen/src/anim/character/mod.rs @@ -183,8 +183,8 @@ impl<'a> std::convert::TryFrom<&'a comp::Body> for SkeletonAttr { impl SkeletonAttr { pub fn calculate_scale(body: &comp::humanoid::Body) -> f32 { - use comp::humanoid::{BodyType::*, Race::*}; - match (body.race, body.body_type) { + use comp::humanoid::{BodyType::*, Species::*}; + match (body.species, body.body_type) { (Orc, Male) => 1.14, (Orc, Female) => 1.02, (Human, Male) => 1.02, @@ -203,10 +203,10 @@ impl SkeletonAttr { impl<'a> From<&'a comp::humanoid::Body> for SkeletonAttr { fn from(body: &'a comp::humanoid::Body) -> Self { - use comp::humanoid::{BodyType::*, Race::*}; + use comp::humanoid::{BodyType::*, Species::*}; Self { scaler: SkeletonAttr::calculate_scale(body), - head_scale: match (body.race, body.body_type) { + head_scale: match (body.species, body.body_type) { (Orc, Male) => 0.9, (Orc, Female) => 1.0, (Human, Male) => 0.9, @@ -220,7 +220,7 @@ impl<'a> From<&'a comp::humanoid::Body> for SkeletonAttr { (Danari, Male) => 1.15, (Danari, Female) => 1.15, }, - head: match (body.race, body.body_type) { + head: match (body.species, body.body_type) { (Orc, Male) => (0.0, 13.5), (Orc, Female) => (0.0, 13.0), (Human, Male) => (0.3, 13.0), @@ -234,28 +234,28 @@ impl<'a> From<&'a comp::humanoid::Body> for SkeletonAttr { (Danari, Male) => (0.5, 12.5), (Danari, Female) => (0.5, 13.5), }, - chest: match (body.race, body.body_type) { + chest: match (body.species, body.body_type) { (_, _) => (0.0, 7.0), }, - belt: match (body.race, body.body_type) { + belt: match (body.species, body.body_type) { (_, _) => (0.0, -2.0), }, - back: match (body.race, body.body_type) { + back: match (body.species, body.body_type) { (_, _) => (-3.1, 7.25), }, - shorts: match (body.race, body.body_type) { + shorts: match (body.species, body.body_type) { (_, _) => (0.0, -5.0), }, - hand: match (body.race, body.body_type) { + hand: match (body.species, body.body_type) { (_, _) => (7.0, -0.25, 0.5), }, - foot: match (body.race, body.body_type) { + foot: match (body.species, body.body_type) { (_, _) => (3.4, 0.5, 1.0), }, - shoulder: match (body.race, body.body_type) { + shoulder: match (body.species, body.body_type) { (_, _) => (5.0, 0.0, 5.0), }, - lantern: match (body.race, body.body_type) { + lantern: match (body.species, body.body_type) { (_, _) => (5.0, 2.5, 5.5), }, } diff --git a/voxygen/src/hud/hotbar.rs b/voxygen/src/hud/hotbar.rs index e9958f5d66..fe5a2f3696 100644 --- a/voxygen/src/hud/hotbar.rs +++ b/voxygen/src/hud/hotbar.rs @@ -63,7 +63,7 @@ impl State { .map(|i| &i.item.kind) .filter(|kind| { use common::comp::item::{ - tool::{StaffKind, Tool, ToolKind}, + tool::{DebugKind, StaffKind, Tool, ToolKind}, ItemKind, }; matches!( @@ -71,6 +71,9 @@ impl State { ItemKind::Tool(Tool { kind: ToolKind::Staff(StaffKind::BasicStaff), .. + }) | ItemKind::Tool(Tool { + kind: ToolKind::Debug(DebugKind::Boost), + .. }) ) }) diff --git a/voxygen/src/hud/img_ids.rs b/voxygen/src/hud/img_ids.rs index 9417722fe4..c75bfa72cc 100644 --- a/voxygen/src/hud/img_ids.rs +++ b/voxygen/src/hud/img_ids.rs @@ -241,6 +241,7 @@ image_ids! { // Icons fire_spell_1: "voxygen.element.icons.fire_spell_0", + snake_arrow_0: "voxygen.element.icons.snake", heal_0: "voxygen.element.icons.heal_0", // Buttons diff --git a/voxygen/src/hud/skillbar.rs b/voxygen/src/hud/skillbar.rs index df9667409b..9c403286b9 100644 --- a/voxygen/src/hud/skillbar.rs +++ b/voxygen/src/hud/skillbar.rs @@ -790,13 +790,29 @@ impl<'a> Widget for Skillbar<'a> { .1 .get(i) .map(|item| (item.name(), item.description())), - hotbar::SlotContents::Ability3 => Some(( - "Firebomb", - "\nWhirls a big fireball into the air. \nExplodes the ground and does\na \ - big amount of damage", - )), + hotbar::SlotContents::Ability3 => content_source + .2 + .active_item + .as_ref() + .map(|i| &i.item.kind) + .and_then(|kind| match kind { + ItemKind::Tool(Tool { kind, .. }) => match kind { + ToolKind::Staff(_) => Some(( + "Firebomb", + "\nWhirls a big fireball into the air. \nExplodes the ground \ + and does\na big amount of damage", + )), + ToolKind::Debug(DebugKind::Boost) => Some(( + "Possessing Arrow", + "\nShoots a poisonous arrow.\nLets you control your target.", + )), + _ => None, + }, + _ => None, + }), }) }; + const SLOT_TOOLTIP_UPSHIFT: f64 = 70.0; //Slot 5 let slot = slot_maker diff --git a/voxygen/src/hud/slots.rs b/voxygen/src/hud/slots.rs index 52797b232e..19f17ceea4 100644 --- a/voxygen/src/hud/slots.rs +++ b/voxygen/src/hud/slots.rs @@ -4,7 +4,13 @@ use super::{ item_imgs::{ItemImgs, ItemKey}, }; use crate::ui::slot::{self, SlotKey, SumSlot}; -use common::comp::{item::ItemKind, Energy, Inventory, Loadout}; +use common::comp::{ + item::{ + tool::{DebugKind, Tool, ToolKind}, + ItemKind, + }, + Energy, Inventory, Loadout, +}; use conrod_core::{image, Color}; pub use common::comp::slot::{ArmorSlot, EquipSlot}; @@ -80,7 +86,8 @@ impl SlotKey<Loadout, ItemImgs> for EquipSlot { #[derive(Clone, PartialEq)] pub enum HotbarImage { Item(ItemKey), - Ability3, + Fireball, + SnakeArrow, } type HotbarSource<'a> = (&'a hotbar::State, &'a Inventory, &'a Loadout, &'a Energy); @@ -103,19 +110,20 @@ impl<'a> SlotKey<HotbarSource<'a>, HotbarImageSource<'a>> for HotbarSlot { .as_ref() .map(|i| &i.item.kind) .and_then(|kind| { - use common::comp::item::tool::{StaffKind, Tool, ToolKind}; - matches!( - kind, - ItemKind::Tool(Tool { - kind: ToolKind::Staff(StaffKind::BasicStaff), - .. - }) - ) - .then_some(( - HotbarImage::Ability3, - // Darken if not enough energy to use attack - (energy.current() < 500).then_some(Color::Rgba(0.3, 0.3, 0.3, 0.8)), - )) + match kind { + ItemKind::Tool(Tool { kind, .. }) => match kind { + ToolKind::Staff(_) => Some(HotbarImage::Fireball), + ToolKind::Debug(DebugKind::Boost) => Some(HotbarImage::SnakeArrow), + _ => None, + }, + _ => None, + } + .map(|image_key| { + ( + image_key, + (energy.current() < 500).then_some(Color::Rgba(0.3, 0.3, 0.3, 0.8)), + ) + }) }), }) } @@ -139,7 +147,8 @@ impl<'a> SlotKey<HotbarSource<'a>, HotbarImageSource<'a>> for HotbarSlot { fn image_id(key: &Self::ImageKey, (item_imgs, imgs): &HotbarImageSource<'a>) -> image::Id { match key { HotbarImage::Item(key) => item_imgs.img_id_or_not_found_img(key.clone()), - HotbarImage::Ability3 => imgs.fire_spell_1, + HotbarImage::SnakeArrow => imgs.snake_arrow_0, + HotbarImage::Fireball => imgs.fire_spell_1, } } } diff --git a/voxygen/src/menu/char_selection/ui.rs b/voxygen/src/menu/char_selection/ui.rs index 5b0a52eb04..fa02e93cd3 100644 --- a/voxygen/src/menu/char_selection/ui.rs +++ b/voxygen/src/menu/char_selection/ui.rs @@ -56,7 +56,7 @@ widget_ids! { v_logo, version, divider, - bodyrace_text, + bodyspecies_text, facialfeatures_text, info_bg, info_frame, @@ -139,12 +139,12 @@ widget_ids! { create_button, name_input, name_field, - race_1, - race_2, - race_3, - race_4, - race_5, - race_6, + species_1, + species_2, + species_3, + species_4, + species_5, + species_6, body_type_1, body_type_2, @@ -162,7 +162,7 @@ widget_ids! { staff, staff_button, // Char Creation - // Race Icons + // Species Icons male, female, human, @@ -205,7 +205,7 @@ image_ids! { bow: "voxygen.element.icons.bow", staff: "voxygen.element.icons.staff", - // Race Icons + // Species Icons male: "voxygen.element.icons.male", female: "voxygen.element.icons.female", human_m: "voxygen.element.icons.human_m", @@ -299,6 +299,7 @@ pub struct CharSelectionUi { fonts: ConrodVoxygenFonts, info_content: InfoContent, voxygen_i18n: Arc<VoxygenLocalization>, + enter: bool, pub mode: Mode, pub selected_character: usize, } @@ -333,6 +334,7 @@ impl CharSelectionUi { selected_character: 0, voxygen_i18n, mode: Mode::Select(None), + enter: false, } } @@ -702,7 +704,10 @@ impl CharSelectionUi { .set(self.ids.enter_world_button, ui_widgets) .was_clicked() { - events.push(Event::Play); + self.enter = !self.enter; + if self.enter { + events.push(Event::Play) + }; } } else { &enter_button @@ -864,6 +869,9 @@ impl CharSelectionUi { }; } } + + // LOADING SCREEN HERE + if self.enter { /*stuff*/ }; }, // Character_Creation // ////////////////////////////////////////////////////////////////////// @@ -996,13 +1004,13 @@ impl CharSelectionUi { .rgba(0.33, 0.33, 0.33, 1.0) .set(self.ids.selection_scrollbar, ui_widgets); - // Male/Female/Race Icons + // 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.bodyrace_text, ui_widgets); + .set(self.ids.bodyspecies_text, ui_widgets); // Alignment Rectangle::fill_with([140.0, 72.0], color::TRANSPARENT) .mid_top_with_margin_on(self.ids.creation_alignment, 60.0) @@ -1046,7 +1054,7 @@ impl CharSelectionUi { body.validate(); } - // Alignment for Races and Tools + // Alignment for Species and Tools Rectangle::fill_with([214.0, 304.0], color::TRANSPARENT) .mid_bottom_with_margin_on(self.ids.creation_buttons_alignment_1, -324.0) .set(self.ids.creation_buttons_alignment_2, ui_widgets); @@ -1075,7 +1083,7 @@ impl CharSelectionUi { .w_h(70.0, 70.0) .top_left_with_margins_on(self.ids.creation_buttons_alignment_2, 0.0, 0.0) .set(self.ids.human, ui_widgets); - if Button::image(if let humanoid::Race::Human = body.race { + if Button::image(if let humanoid::Species::Human = body.species { self.imgs.icon_border_pressed } else { self.imgs.icon_border @@ -1085,14 +1093,14 @@ impl CharSelectionUi { .press_image(self.imgs.icon_border_press) .with_tooltip( tooltip_manager, - &self.voxygen_i18n.get("common.races.human"), + &self.voxygen_i18n.get("common.species.human"), "", &tooltip_human, ) - .set(self.ids.race_1, ui_widgets) + .set(self.ids.species_1, ui_widgets) .was_clicked() { - body.race = humanoid::Race::Human; + body.species = humanoid::Species::Human; body.validate(); } @@ -1101,7 +1109,7 @@ impl CharSelectionUi { .w_h(70.0, 70.0) .right_from(self.ids.human, 2.0) .set(self.ids.orc, ui_widgets); - if Button::image(if let humanoid::Race::Orc = body.race { + if Button::image(if let humanoid::Species::Orc = body.species { self.imgs.icon_border_pressed } else { self.imgs.icon_border @@ -1111,14 +1119,14 @@ impl CharSelectionUi { .press_image(self.imgs.icon_border_press) .with_tooltip( tooltip_manager, - &self.voxygen_i18n.get("common.races.orc"), + &self.voxygen_i18n.get("common.species.orc"), "", &tooltip_human, ) - .set(self.ids.race_2, ui_widgets) + .set(self.ids.species_2, ui_widgets) .was_clicked() { - body.race = humanoid::Race::Orc; + body.species = humanoid::Species::Orc; body.validate(); } // Dwarf @@ -1126,7 +1134,7 @@ impl CharSelectionUi { .w_h(70.0, 70.0) .right_from(self.ids.orc, 2.0) .set(self.ids.dwarf, ui_widgets); - if Button::image(if let humanoid::Race::Dwarf = body.race { + if Button::image(if let humanoid::Species::Dwarf = body.species { self.imgs.icon_border_pressed } else { self.imgs.icon_border @@ -1136,14 +1144,14 @@ impl CharSelectionUi { .press_image(self.imgs.icon_border_press) .with_tooltip( tooltip_manager, - &self.voxygen_i18n.get("common.races.dwarf"), + &self.voxygen_i18n.get("common.species.dwarf"), "", &tooltip_human, ) - .set(self.ids.race_3, ui_widgets) + .set(self.ids.species_3, ui_widgets) .was_clicked() { - body.race = humanoid::Race::Dwarf; + body.species = humanoid::Species::Dwarf; body.validate(); } // Elf @@ -1151,7 +1159,7 @@ impl CharSelectionUi { .w_h(70.0, 70.0) .down_from(self.ids.human, 2.0) .set(self.ids.elf, ui_widgets); - if Button::image(if let humanoid::Race::Elf = body.race { + if Button::image(if let humanoid::Species::Elf = body.species { self.imgs.icon_border_pressed } else { self.imgs.icon_border @@ -1161,14 +1169,14 @@ impl CharSelectionUi { .press_image(self.imgs.icon_border_press) .with_tooltip( tooltip_manager, - &self.voxygen_i18n.get("common.races.elf"), + &self.voxygen_i18n.get("common.species.elf"), "", &tooltip_human, ) - .set(self.ids.race_4, ui_widgets) + .set(self.ids.species_4, ui_widgets) .was_clicked() { - body.race = humanoid::Race::Elf; + body.species = humanoid::Species::Elf; body.validate(); } @@ -1177,7 +1185,7 @@ impl CharSelectionUi { .w_h(70.0, 70.0) .right_from(self.ids.elf, 2.0) .set(self.ids.undead, ui_widgets); - if Button::image(if let humanoid::Race::Undead = body.race { + if Button::image(if let humanoid::Species::Undead = body.species { self.imgs.icon_border_pressed } else { self.imgs.icon_border @@ -1187,14 +1195,14 @@ impl CharSelectionUi { .press_image(self.imgs.icon_border_press) .with_tooltip( tooltip_manager, - &self.voxygen_i18n.get("common.races.undead"), + &self.voxygen_i18n.get("common.species.undead"), "", &tooltip_human, ) - .set(self.ids.race_5, ui_widgets) + .set(self.ids.species_5, ui_widgets) .was_clicked() { - body.race = humanoid::Race::Undead; + body.species = humanoid::Species::Undead; body.validate(); } // Danari @@ -1202,7 +1210,7 @@ impl CharSelectionUi { .w_h(70.0, 70.0) .right_from(self.ids.undead, 2.0) .set(self.ids.danari, ui_widgets); - if Button::image(if let humanoid::Race::Danari = body.race { + if Button::image(if let humanoid::Species::Danari = body.species { self.imgs.icon_border_pressed } else { self.imgs.icon_border @@ -1212,14 +1220,14 @@ impl CharSelectionUi { .press_image(self.imgs.icon_border_press) .with_tooltip( tooltip_manager, - &self.voxygen_i18n.get("common.races.danari"), + &self.voxygen_i18n.get("common.species.danari"), "", &tooltip_human, ) - .set(self.ids.race_6, ui_widgets) + .set(self.ids.species_6, ui_widgets) .was_clicked() { - body.race = humanoid::Race::Danari; + body.species = humanoid::Species::Danari; body.validate(); } @@ -1403,7 +1411,7 @@ impl CharSelectionUi { self.ids.creation_buttons_alignment_2, self.voxygen_i18n.get("char_selection.hair_style"), self.ids.hairstyle_text, - body.race.num_hair_styles(body.body_type) as usize - 1, + body.species.num_hair_styles(body.body_type) as usize - 1, body.hair_style as usize, self.ids.hairstyle_slider, ui_widgets, @@ -1415,7 +1423,7 @@ impl CharSelectionUi { self.ids.hairstyle_slider, self.voxygen_i18n.get("char_selection.hair_color"), self.ids.haircolor_text, - body.race.num_hair_colors() as usize - 1, + body.species.num_hair_colors() as usize - 1, body.hair_color as usize, self.ids.haircolor_slider, ui_widgets, @@ -1427,7 +1435,7 @@ impl CharSelectionUi { self.ids.haircolor_slider, self.voxygen_i18n.get("char_selection.skin"), self.ids.skin_text, - body.race.num_skin_colors() as usize - 1, + body.species.num_skin_colors() as usize - 1, body.skin as usize, self.ids.skin_slider, ui_widgets, @@ -1437,21 +1445,21 @@ impl CharSelectionUi { // Eyebrows if let Some(new_val) = char_slider( self.ids.skin_slider, - self.voxygen_i18n.get("char_selection.eyebrows"), + self.voxygen_i18n.get("char_selection.eyeshape"), self.ids.eyebrows_text, - body.race.num_eyebrows(body.body_type) as usize - 1, - body.eyebrows as usize, + body.species.num_eyes(body.body_type) as usize - 1, + body.eyes as usize, self.ids.eyebrows_slider, ui_widgets, ) { - body.eyebrows = new_val as u8; + body.eyes = new_val as u8; } // EyeColor if let Some(new_val) = char_slider( self.ids.eyebrows_slider, self.voxygen_i18n.get("char_selection.eye_color"), self.ids.eyecolor_text, - body.race.num_eye_colors() as usize - 1, + body.species.num_eye_colors() as usize - 1, body.eye_color as usize, self.ids.eyecolor_slider, ui_widgets, @@ -1464,7 +1472,7 @@ impl CharSelectionUi { self.ids.eyecolor_slider, self.voxygen_i18n.get("char_selection.accessories"), self.ids.accessories_text, - body.race.num_accessories(body.body_type) as usize - 1, + body.species.num_accessories(body.body_type) as usize - 1, body.accessory as usize, self.ids.accessories_slider, ui_widgets, @@ -1472,12 +1480,12 @@ impl CharSelectionUi { body.accessory = new_val as u8; } // Beard - if body.race.num_beards(body.body_type) > 1 { + if body.species.num_beards(body.body_type) > 1 { if let Some(new_val) = char_slider( self.ids.accessories_slider, self.voxygen_i18n.get("char_selection.beard"), self.ids.beard_text, - body.race.num_beards(body.body_type) as usize - 1, + body.species.num_beards(body.body_type) as usize - 1, body.beard as usize, self.ids.beard_slider, ui_widgets, diff --git a/voxygen/src/scene/figure/cache.rs b/voxygen/src/scene/figure/cache.rs index 154d807532..3ab463ffdd 100644 --- a/voxygen/src/scene/figure/cache.rs +++ b/voxygen/src/scene/figure/cache.rs @@ -109,18 +109,9 @@ impl<Skel: Skeleton> FigureModelCache<Skel> { [ match camera_mode { - CameraMode::ThirdPerson => Some(humanoid_head_spec.mesh_head( - body.race, - body.body_type, - body.hair_color, - body.hair_style, - body.beard, - body.eye_color, - body.skin, - body.eyebrows, - body.accessory, - generate_mesh, - )), + CameraMode::ThirdPerson => { + Some(humanoid_head_spec.mesh_head(&body, generate_mesh)) + }, CameraMode::FirstPerson => None, }, match camera_mode { diff --git a/voxygen/src/scene/figure/load.rs b/voxygen/src/scene/figure/load.rs index e8960bdf54..d52636752c 100644 --- a/voxygen/src/scene/figure/load.rs +++ b/voxygen/src/scene/figure/load.rs @@ -9,7 +9,7 @@ use common::{ dragon::{BodyType as DBodyType, Species as DSpecies}, fish_medium, fish_small, golem::{BodyType as GBodyType, Species as GSpecies}, - humanoid::{Body, BodyType, EyeColor, Race, Skin}, + humanoid::{Body, BodyType, EyeColor, Skin, Species}, item::{ armor::{Armor, Back, Belt, Chest, Foot, Hand, Head, Pants, Shoulder, Tabard}, tool::{Tool, ToolKind}, @@ -122,18 +122,18 @@ struct MobSidedVoxSpec { right: ArmorVoxSpec, } -// All reliant on humanoid::Race and humanoid::BodyType +// All reliant on humanoid::Species and humanoid::BodyType #[derive(Serialize, Deserialize)] struct HumHeadSubSpec { offset: [f32; 3], // Should be relative to initial origin head: VoxSpec<i32>, - eyes: VoxSpec<i32>, + eyes: Vec<Option<VoxSpec<i32>>>, hair: Vec<Option<VoxSpec<i32>>>, beard: Vec<Option<VoxSpec<i32>>>, accessory: Vec<Option<VoxSpec<i32>>>, } #[derive(Serialize, Deserialize)] -pub struct HumHeadSpec(HashMap<(Race, BodyType), HumHeadSubSpec>); +pub struct HumHeadSpec(HashMap<(Species, BodyType), HumHeadSubSpec>); impl Asset for HumHeadSpec { const ENDINGS: &'static [&'static str] = &["ron"]; @@ -150,77 +150,80 @@ impl HumHeadSpec { pub fn mesh_head( &self, - race: Race, - body_type: BodyType, - hair_color: u8, - hair_style: u8, - beard: u8, - eye_color: u8, - skin: u8, - _eyebrows: u8, - accessory: u8, + body: &Body, generate_mesh: impl FnOnce(&Segment, Vec3<f32>) -> Mesh<FigurePipeline>, ) -> Mesh<FigurePipeline> { - let spec = match self.0.get(&(race, body_type)) { + let spec = match self.0.get(&(body.species, body.body_type)) { Some(spec) => spec, None => { error!( "No head specification exists for the combination of {:?} and {:?}", - race, body_type + body.species, body.body_type ); return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5), generate_mesh); }, }; - let hair_rgb = race.hair_color(hair_color); - let skin = race.skin_color(skin); - let eye_rgb = race.eye_color(eye_color); + let hair_rgb = body.species.hair_color(body.hair_color); + let skin_rgb = body.species.skin_color(body.skin); + let eye_rgb = body.species.eye_color(body.eye_color); // Load segment pieces let bare_head = graceful_load_mat_segment(&spec.head.0); - let eyes = color_segment( - graceful_load_mat_segment(&spec.eyes.0).map_rgb(|rgb| recolor_grey(rgb, hair_rgb)), - skin, - hair_rgb, - eye_rgb, - ); - let hair = match spec.hair.get(hair_style as usize) { + + let eyes = match spec.eyes.get(body.eyes as usize) { + Some(Some(spec)) => Some(( + color_segment( + graceful_load_mat_segment(&spec.0).map_rgb(|rgb| recolor_grey(rgb, hair_rgb)), + skin_rgb, + hair_rgb, + eye_rgb, + ), + Vec3::from(spec.1), + )), + Some(None) => None, + None => { + warn!("No specification for these eyes: {:?}", body.eyes); + None + }, + }; + let hair = match spec.hair.get(body.hair_style as usize) { Some(Some(spec)) => Some(( graceful_load_segment(&spec.0).map_rgb(|rgb| recolor_grey(rgb, hair_rgb)), Vec3::from(spec.1), )), Some(None) => None, None => { - warn!("No specification for hair style {}", hair_style); + warn!("No specification for hair style {}", body.hair_style); None }, }; - let beard = match spec.beard.get(beard as usize) { + let beard = match spec.beard.get(body.beard as usize) { Some(Some(spec)) => Some(( graceful_load_segment(&spec.0).map_rgb(|rgb| recolor_grey(rgb, hair_rgb)), Vec3::from(spec.1), )), Some(None) => None, None => { - warn!("No specification for this beard: {:?}", beard); + warn!("No specification for this beard: {:?}", body.beard); None }, }; - let accessory = match spec.accessory.get(accessory as usize) { + let accessory = match spec.accessory.get(body.accessory as usize) { Some(Some(spec)) => Some((graceful_load_segment(&spec.0), Vec3::from(spec.1))), Some(None) => None, None => { - warn!("No specification for this accessory: {:?}", accessory); + warn!("No specification for this accessory: {:?}", body.accessory); None }, }; let (head, origin_offset) = DynaUnionizer::new() .add( - color_segment(bare_head, skin, hair_rgb, eye_rgb), + color_segment(bare_head, skin_rgb, hair_rgb, eye_rgb), spec.head.1.into(), ) - .add(eyes, spec.eyes.1.into()) + .maybe_add(eyes) .maybe_add(hair) .maybe_add(beard) .maybe_add(accessory) @@ -379,9 +382,9 @@ impl HumArmorShoulderSpec { } else { graceful_load_mat_segment(&spec.right.vox_spec.0) }, - body.race.skin_color(body.skin), - body.race.hair_color(body.hair_color), - body.race.eye_color(body.eye_color), + body.species.skin_color(body.skin), + body.species.hair_color(body.hair_color), + body.species.eye_color(body.eye_color), ); // TODO: use this if we can @@ -458,9 +461,9 @@ impl HumArmorChestSpec { let color = |mat_segment| { color_segment( mat_segment, - body.race.skin_color(body.skin), - body.race.hair_color(body.hair_color), - body.race.eye_color(body.eye_color), + body.species.skin_color(body.skin), + body.species.hair_color(body.hair_color), + body.species.eye_color(body.eye_color), ) }; @@ -518,9 +521,9 @@ impl HumArmorHandSpec { } else { graceful_load_mat_segment(&spec.right.vox_spec.0) }, - body.race.skin_color(body.skin), - body.race.hair_color(body.hair_color), - body.race.eye_color(body.eye_color), + body.species.skin_color(body.skin), + body.species.hair_color(body.hair_color), + body.species.eye_color(body.eye_color), ); let offset = if flipped { @@ -590,9 +593,9 @@ impl HumArmorBeltSpec { let mut belt_segment = color_segment( graceful_load_mat_segment(&spec.vox_spec.0), - body.race.skin_color(body.skin), - body.race.hair_color(body.hair_color), - body.race.eye_color(body.eye_color), + body.species.skin_color(body.skin), + body.species.hair_color(body.hair_color), + body.species.eye_color(body.eye_color), ); if let Some(color) = spec.color { @@ -634,9 +637,9 @@ impl HumArmorBackSpec { let mut back_segment = color_segment( graceful_load_mat_segment(&spec.vox_spec.0), - body.race.skin_color(body.skin), - body.race.hair_color(body.hair_color), - body.race.eye_color(body.eye_color), + body.species.skin_color(body.skin), + body.species.hair_color(body.hair_color), + body.species.eye_color(body.eye_color), ); if let Some(color) = spec.color { let back_color = Vec3::from(color); @@ -678,9 +681,9 @@ impl HumArmorPantsSpec { let color = |mat_segment| { color_segment( mat_segment, - body.race.skin_color(body.skin), - body.race.hair_color(body.hair_color), - body.race.eye_color(body.eye_color), + body.species.skin_color(body.skin), + body.species.hair_color(body.hair_color), + body.species.eye_color(body.eye_color), ) }; @@ -738,9 +741,9 @@ impl HumArmorFootSpec { } else { graceful_load_mat_segment(&spec.vox_spec.0) }, - body.race.skin_color(body.skin), - body.race.hair_color(body.hair_color), - body.race.eye_color(body.eye_color), + body.species.skin_color(body.skin), + body.species.hair_color(body.hair_color), + body.species.eye_color(body.eye_color), ); if let Some(color) = spec.color { @@ -827,9 +830,9 @@ impl HumArmorLanternSpec { let mut lantern_segment = color_segment( graceful_load_mat_segment(&spec.vox_spec.0), - body.race.skin_color(body.skin), - body.race.hair_color(body.hair_color), - body.race.eye_color(body.eye_color), + body.species.skin_color(body.skin), + body.species.hair_color(body.hair_color), + body.species.eye_color(body.eye_color), ); if let Some(color) = spec.color { let lantern_color = Vec3::from(color); @@ -871,9 +874,9 @@ impl HumArmorHeadSpec { let color = |mat_segment| { color_segment( mat_segment, - body.race.skin_color(body.skin), - body.race.hair_color(body.hair_color), - body.race.eye_color(body.eye_color), + body.species.skin_color(body.skin), + body.species.hair_color(body.hair_color), + body.species.eye_color(body.eye_color), ) }; @@ -926,9 +929,9 @@ impl HumArmorTabardSpec { let color = |mat_segment| { color_segment( mat_segment, - body.race.skin_color(body.skin), - body.race.hair_color(body.hair_color), - body.race.eye_color(body.eye_color), + body.species.skin_color(body.skin), + body.species.hair_color(body.hair_color), + body.species.eye_color(body.eye_color), ) };