diff --git a/.gitignore b/.gitignore index 0ddebe7c2a..f380e795cb 100644 --- a/.gitignore +++ b/.gitignore @@ -23,11 +23,6 @@ .project -# Vim - -**/*.swp -**/*.vi - # Veloren *.rar *.log @@ -40,3 +35,6 @@ todo.txt # direnv /.envrc *.bat + +# Mac +.DS_Store \ No newline at end of file diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 788cecef48..56148a3102 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -205,6 +205,7 @@ macos: - assets/ - LICENSE expire_in: 1 week + allow_failure: true # -- # -- publish diff --git a/CHANGELOG.md b/CHANGELOG.md index f0f8bc8c16..ada5e7fbfc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added authentication system (to play on the official server register on https://account.veloren.net) - Added gamepad/controller support - Added player feedback when attempting to pickup an item with a full inventory +- Added free look +- Added Italian translation +- Added Portuguese translation +- Added Turkish translation +- Complete rewrite of the combat system into a state machine +- Abilities like Dash and Triplestrike +- Armor can now be eqipped as items +- Fireball explosions +- Inventory supports stacking +- Many new armors and weapons to find in chests +- Fleshed out "attack" animation into alpha, beta and spin type attacks +- Fleshed out range attack into charging and shooting anims for staff/bow +- Customized attack animation for hammers and axes ### Changed @@ -35,6 +48,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed /give_exp ignoring player argument - Extend run sfx to small animals to prevent sneak attacks by geese. - Decreased clientside latency of ServerEvent mediated effects (e.g. projectiles, inventory operations, etc) +- Started changing the visual theme of the UI +- Merge of the Bag and Character-Screen +- Merge of the Map and Questlog +- Overhauled icon art +- Asset cleanup to lower client-size +- Rewrote the humanoid skeleton to be more ideal for attack animations + ### Removed diff --git a/Cargo.lock b/Cargo.lock index ee66f18596..9ccee0c8ce 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,134 +4,204 @@ name = "adler32" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d2e7343e7fc9de883d1b0341e0b13970f764c14101234857d2ddafa1cb1cac2" [[package]] name = "ahash" version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f33b5018f120946c1dcf279194f238a9f146725593ead1c08fa47ff22b0b5d3" dependencies = [ - "const-random 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "const-random", +] + +[[package]] +name = "ahash" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0989268a37e128d4d7a8028f1c60099430113fdbc70419010601ce51a228e4fe" +dependencies = [ + "const-random", ] [[package]] name = "aho-corasick" -version = "0.7.6" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8716408b8bc624ed7f65d223ddb9ac2d044c0547b6fa4b0d554f3a9540496ada" dependencies = [ - "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr", ] [[package]] name = "alsa-sys" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0edcbbf9ef68f15ae1b620f722180b82a98b6f0628d30baa6b8d2a5abc87d58" dependencies = [ - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", + "pkg-config", ] [[package]] name = "andrew" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b7f09f89872c2b6b29e319377b1fbe91c6f5947df19a25596e121cf19a7b35e" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "line_drawing 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rusttype 0.7.9 (registry+https://github.com/rust-lang/crates.io-index)", - "walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)", - "xdg 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "xml-rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "line_drawing", + "rusttype 0.7.9", + "walkdir", + "xdg", + "xml-rs", ] [[package]] name = "android_glue" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "000444226fcff248f2bc4c7625be32c63caccfecc2723a2b9f78a7487a49c407" + +[[package]] +name = "anyhow" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "013a6e0a2cbe3d20f9c60b65458f7a7f7a5e636c5d0f45a5a6aee5d4b1f01785" [[package]] name = "anymap" version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33954243bd79057c2de7338850b85983a44588021f8a5fee574a8888c6de4344" [[package]] name = "approx" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08abcc3b4e9339e33a3d0a5ed15d84a687350c05689d825e0f6655eef9e76a94" [[package]] name = "approx" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0e60b75072ecd4168020818c0107f2857bb6c4e64252d8d3983f6263b40a5c3" dependencies = [ - "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.11", ] [[package]] name = "arr_macro" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a105bfda48707cf19220129e78fca01e9639433ffaef4163546ed8fb04120a5" dependencies = [ - "arr_macro_impl 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro-hack 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)", + "arr_macro_impl", + "proc-macro-hack", ] [[package]] name = "arr_macro_impl" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0609c78bd572f4edc74310dfb63a01f5609d53fa8b4dd7c4d98aef3b3e8d72d1" dependencies = [ - "proc-macro-hack 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro-hack", + "quote 1.0.3", + "syn 1.0.16", ] [[package]] name = "arrayref" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" [[package]] name = "arrayvec" version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9" dependencies = [ - "nodrop 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", + "nodrop", ] [[package]] name = "arrayvec" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff77d8686867eceff3105329d4698d96c2391c176d5d03adc90c7389162b5b8" [[package]] name = "ascii" version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97be891acc47ca214468e09425d02cef3af2c94d0d82081cd02061f996802f14" + +[[package]] +name = "async-std" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "538ecb01eb64eecd772087e5b6f7540cbc917f047727339a472dafed2185b267" +dependencies = [ + "async-task", + "broadcaster", + "crossbeam-channel 0.4.2", + "crossbeam-deque", + "crossbeam-utils 0.7.2", + "futures-core", + "futures-io", + "futures-timer", + "kv-log-macro", + "log 0.4.8", + "memchr", + "mio", + "mio-uds", + "num_cpus", + "once_cell", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "async-task" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ac2c016b079e771204030951c366db398864f5026f84a44dafb0ff20f02085d" +dependencies = [ + "libc", + "winapi 0.3.8", +] [[package]] name = "atk-sys" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dc233521f7bffd3042c31082ea71bd08820abf44bac938fb36591e20f76f39" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "glib-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "gobject-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "glib-sys", + "gobject-sys", + "libc", + "pkg-config", ] [[package]] name = "atom" version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c86699c3f02778ec07158376991c8f783dd1f2f95c579ffaf0738dc984b2fe2" [[package]] name = "atty" -version = "0.2.13" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "hermit-abi", + "libc", + "winapi 0.3.8", ] [[package]] @@ -139,9 +209,9 @@ name = "auth-common" version = "0.1.0" source = "git+https://gitlab.com/veloren/auth.git?rev=65571ade0d954a0e0bd995fdb314854ff146ab97#65571ade0d954a0e0bd995fdb314854ff146ab97" dependencies = [ - "rand 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", - "uuid 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.7.3", + "serde", + "uuid 0.7.4", ] [[package]] @@ -149,1378 +219,1697 @@ name = "authc" version = "1.0.0" source = "git+https://gitlab.com/veloren/auth.git?rev=65571ade0d954a0e0bd995fdb314854ff146ab97#65571ade0d954a0e0bd995fdb314854ff146ab97" dependencies = [ - "auth-common 0.1.0 (git+https://gitlab.com/veloren/auth.git?rev=65571ade0d954a0e0bd995fdb314854ff146ab97)", - "fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "reqwest 0.10.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rust-argon2 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)", - "uuid 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)", + "auth-common", + "fxhash", + "hex", + "reqwest", + "rust-argon2 0.6.1", + "serde_json", + "uuid 0.7.4", ] [[package]] name = "autocfg" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2" [[package]] name = "autocfg" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d" [[package]] name = "backtrace" -version = "0.3.40" +version = "0.3.45" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad235dabf00f36301792cfe82499880ba54c6486be094d1047b02bacb67c14e8" dependencies = [ - "backtrace-sys 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace-sys", + "cfg-if", + "libc", + "rustc-demangle", ] [[package]] name = "backtrace-sys" -version = "0.1.32" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca797db0057bae1a7aa2eef3283a874695455cecf08a43bfb8507ee0ebc1ed69" dependencies = [ - "cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", + "cc", + "libc", ] [[package]] name = "base-x" version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b20b618342cf9891c292c4f5ac2cde7287cc5c87e87e9c769d617793607dec1" [[package]] name = "base64" version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643" dependencies = [ - "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "safemem 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.3.4", + "safemem", ] [[package]] name = "base64" version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e" dependencies = [ - "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.3.4", ] [[package]] name = "base64" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" [[package]] name = "bincode" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5753e2a71534719bf3f4e57006c3a4f0d2c672a4b676eec84161f763eca87dbf" dependencies = [ - "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.3.4", + "serde", ] [[package]] name = "bindgen" -version = "0.51.1" +version = "0.53.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bb26d6a69a335b8cb0e7c7e9775cd5666611dc50a37177c3f2cedcfc040e8c8" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "cexpr 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "clang-sys 0.28.1 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "peeking_take_while 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-hash 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "shlex 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "cexpr", + "cfg-if", + "clang-sys", + "lazy_static", + "lazycell", + "peeking_take_while", + "proc-macro2 1.0.9", + "quote 1.0.3", + "regex", + "rustc-hash", + "shlex", ] [[package]] name = "bitflags" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" [[package]] name = "bitvec" -version = "0.15.2" +version = "0.17.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41262f11d771fd4a61aa3ce019fca363b4b6c282fca9da2a31186d3965a47a5c" +dependencies = [ + "either", + "radium", +] [[package]] name = "blake2b_simd" -version = "0.5.9" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8fb2d74254a3a0b5cac33ac9f8ed0e44aa50378d9dbb2e5d83bd21ed1dc2c8a" dependencies = [ - "arrayref 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", - "arrayvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "constant_time_eq 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "arrayref", + "arrayvec 0.5.1", + "constant_time_eq", ] [[package]] name = "block" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + +[[package]] +name = "broadcaster" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c972e21e0d055a36cf73e4daae870941fe7a8abcd5ac3396aab9e4c126bd87" +dependencies = [ + "futures-channel", + "futures-core", + "futures-sink", + "futures-util", + "parking_lot 0.10.0", + "slab", +] [[package]] name = "brotli-sys" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4445dea95f4c2b41cde57cc9fee236ae4dbae88d8fcbdb4750fc1bb5d86aaecd" dependencies = [ - "cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", + "cc", + "libc", ] [[package]] name = "brotli2" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cb036c3eade309815c15ddbacec5b22c4d1f3983a774ab2eac2e3e9ea85568e" dependencies = [ - "brotli-sys 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", + "brotli-sys", + "libc", ] [[package]] name = "bstr" -version = "0.2.8" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "502ae1441a0a5adb8fbd38a5955a6416b9493e92b465de5e4a9bde6a539c2c48" dependencies = [ - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "regex-automata 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static", + "memchr", + "regex-automata", + "serde", ] [[package]] name = "buf_redux" version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b953a6887648bb07a535631f2bc00fbdb2a2216f135552cb3f534ed136b9c07f" dependencies = [ - "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "safemem 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr", + "safemem", ] [[package]] name = "bumpalo" -version = "3.2.0" +version = "3.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12ae9db68ad7fac5fe51304d20f016c911539251075a214f8e663babefa35187" [[package]] name = "byteorder" version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fc10e8cc6b2580fda3f36eb6dc5316657f812a3df879a44a66fc9f0fdbc4855" [[package]] name = "byteorder" -version = "1.3.2" +version = "1.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" + +[[package]] +name = "bytes" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" +dependencies = [ + "byteorder 1.3.4", + "either", + "iovec", +] [[package]] name = "bytes" version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "c2-chacha" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "ppv-lite86 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "130aac562c0dd69c56b3b1cc8ffd2e17be31d0b6c25b61c96b76231aa23e39e1" [[package]] name = "c_vec" version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8a318911dce53b5f1ca6539c44f5342c632269f0fa7ea3e35f32458c27a7c30" [[package]] name = "cairo-rs" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a110f269c2fd382df5fe8bd46dfa5f1b83608aa717fecb6e7a28c08c202f0e13" dependencies = [ - "c_vec 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "cairo-sys-rs 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "glib 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "glib-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", + "c_vec", + "cairo-sys-rs", + "glib", + "glib-sys", + "libc", ] [[package]] name = "cairo-sys-rs" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0395175ecba60accac076a02c31d143b9dcd9d5eb5316d7163a3273803b765c7" dependencies = [ - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", + "pkg-config", + "winapi 0.3.8", ] [[package]] name = "cast" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b9434b9a5aa1450faa3f9cb14ea0e8c53bb5d2b3c1bfd1ab4fc03e9f33fbfb0" dependencies = [ - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc_version", ] [[package]] name = "cc" -version = "1.0.47" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95e28fa049fda1c330bcf9d723be7663a899c4679724b34c81e9f5a326aab8cd" dependencies = [ - "jobserver 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)", + "jobserver", ] [[package]] name = "cexpr" -version = "0.3.6" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4aedb84272dbe89af497cf81375129abda4fc0a9e7c5d317498c15cc30c0d27" dependencies = [ - "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "nom 5.1.1", ] [[package]] name = "cfg-if" version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" [[package]] name = "cgl" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55e7ec0b74fe5897894cbc207092c577e87c52f8a59e8ca8d97ef37551f60a49" dependencies = [ - "gleam 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", + "gleam", + "libc", ] [[package]] name = "chashmap" version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff41a3c2c1e39921b9003de14bf0439c7b63a9039637c291e1a64925d8ddfa45" dependencies = [ - "owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "owning_ref", + "parking_lot 0.4.8", ] [[package]] name = "chrono" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80094f509cf8b5ae86a4966a39b3ff66cd7e2a3e594accec3743ff3fabeab5b2" dependencies = [ - "num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer", + "num-traits 0.2.11", + "time", ] [[package]] name = "chunked_transfer" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "498d20a7aaf62625b9bf26e637cf7736417cde1d0c99f1d04d1170229a85cf87" [[package]] name = "clang-sys" -version = "0.28.1" +version = "0.29.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f92986241798376849e1a007827041fed9bb36195822c2049d18e174420e0534" dependencies = [ - "glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "libloading 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "glob", + "libc", + "libloading", ] [[package]] name = "clap" version = "2.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "textwrap", + "unicode-width", ] [[package]] name = "clipboard-win" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a093d6fed558e5fe24c3dfc85a68bb68f1c824f440d3ba5aca189e2998786b" dependencies = [ - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8", ] [[package]] name = "cloudabi" version = "0.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", ] [[package]] name = "cocoa" version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1706996401131526e36b3b49f0c4d912639ce110996f3ca144d78946727bce54" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "block 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", - "core-graphics 0.17.3 (registry+https://github.com/rust-lang/crates.io-index)", - "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "block", + "core-foundation 0.6.4", + "core-graphics", + "foreign-types", + "libc", + "objc", ] [[package]] name = "cocoa" version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29f7768b2d1be17b96158e3285951d366b40211320fb30826a76cb7a0da6400" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "block 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", - "core-graphics 0.17.3 (registry+https://github.com/rust-lang/crates.io-index)", - "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "block", + "core-foundation 0.6.4", + "core-graphics", + "foreign-types", + "libc", + "objc", ] [[package]] name = "color_quant" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dbbb57365263e881e805dc77d94697c9118fd94d8da011240555aa7b23445bd" [[package]] name = "colored" -version = "1.9.0" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4ffc801dacf156c5854b9df4f425a626539c3a6ef7893cc0c5084a23f0b6c59" dependencies = [ - "atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "atty", + "lazy_static", + "winapi 0.3.8", ] [[package]] name = "conrod_core" version = "0.63.0" -source = "git+https://gitlab.com/veloren/conrod.git?branch=hide_text#92925b122dfed139169c7d7687b3ca15c0cb5a2e" +source = "git+https://gitlab.com/veloren/conrod.git?branch=capucho/hide_text_cursor_fix#df3a5d8098687fb0addf6fdf7c9ad2ac8794997f" dependencies = [ - "conrod_derive 0.63.0 (git+https://gitlab.com/veloren/conrod.git?branch=hide_text)", - "copypasta 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "daggy 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "instant 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "pistoncore-input 0.24.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rusttype 0.7.9 (registry+https://github.com/rust-lang/crates.io-index)", + "conrod_derive", + "copypasta", + "daggy", + "fnv", + "instant", + "num 0.2.1", + "pistoncore-input", + "rusttype 0.7.9", ] [[package]] name = "conrod_derive" version = "0.63.0" -source = "git+https://gitlab.com/veloren/conrod.git?branch=hide_text#92925b122dfed139169c7d7687b3ca15c0cb5a2e" +source = "git+https://gitlab.com/veloren/conrod.git?branch=capucho/hide_text_cursor_fix#df3a5d8098687fb0addf6fdf7c9ad2ac8794997f" dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.30", + "quote 0.6.13", + "syn 0.15.44", ] [[package]] name = "conrod_winit" version = "0.63.0" -source = "git+https://gitlab.com/veloren/conrod.git?branch=hide_text#92925b122dfed139169c7d7687b3ca15c0cb5a2e" +source = "git+https://gitlab.com/veloren/conrod.git?branch=capucho/hide_text_cursor_fix#df3a5d8098687fb0addf6fdf7c9ad2ac8794997f" [[package]] name = "const-random" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f1af9ac737b2dd2d577701e59fd09ba34822f6f2ebdb30a7647405d9e55e16a" dependencies = [ - "const-random-macro 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro-hack 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)", + "const-random-macro", + "proc-macro-hack", ] [[package]] name = "const-random-macro" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25e4c606eb459dd29f7c57b2e0879f2b6f14ee130918c2b78ccb58a9624e6c7a" dependencies = [ - "proc-macro-hack 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", + "getrandom", + "proc-macro-hack", +] + +[[package]] +name = "const-tweaker" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7081900ff8f4b89046f8898eb8af6ed26be5a47299c56147d5a7dac74298b0" +dependencies = [ + "anyhow", + "async-std", + "const-tweaker-attribute", + "dashmap", + "horrorshow", + "lazy_static", + "serde", + "tide", +] + +[[package]] +name = "const-tweaker-attribute" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a43d28ffebd3bb949c8c274de94fb84826134a023c5e6dac528c38a0f1cf1ba" +dependencies = [ + "darling", + "proc-macro2 1.0.9", + "quote 1.0.3", + "syn 1.0.16", ] [[package]] name = "constant_time_eq" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + +[[package]] +name = "cookie" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "888604f00b3db336d2af898ec3c1d5d0ddf5e6d462220f2ededc33a87ac4bbd5" +dependencies = [ + "time", + "url 1.7.2", +] [[package]] name = "copypasta" -version = "0.6.0" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "865e9675691e2a7dfc806b16ef2dd5dd536e26ea9b8046519767d79be03aeb6a" dependencies = [ - "clipboard-win 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", - "objc-foundation 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "objc_id 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "smithay-clipboard 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "wayland-client 0.23.6 (registry+https://github.com/rust-lang/crates.io-index)", - "x11-clipboard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "clipboard-win", + "objc", + "objc-foundation", + "objc_id", + "smithay-clipboard", + "wayland-client 0.23.6", + "x11-clipboard", ] [[package]] name = "core-foundation" version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25b9e03f145fd4f2bf705e07b900cd41fc636598fe5dc452fd0db1441c3f496d" dependencies = [ - "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", + "core-foundation-sys 0.6.2", + "libc", ] [[package]] name = "core-foundation" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" dependencies = [ - "core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", + "core-foundation-sys 0.7.0", + "libc", ] [[package]] name = "core-foundation-sys" version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b" [[package]] name = "core-foundation-sys" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" [[package]] name = "core-graphics" version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56790968ab1c8a1202a102e6de05fc6e1ec87da99e4e93e9a7d13efbfc1e95a9" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", - "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "core-foundation 0.6.4", + "foreign-types", + "libc", ] [[package]] name = "coreaudio-rs" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f229761965dad3e9b11081668a6ea00f1def7aa46062321b5ec245b834f6e491" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "coreaudio-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "coreaudio-sys", ] [[package]] name = "coreaudio-sys" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e81f1c165c33ffab90a03077ac3b03462b34d5947145dfa48102e063d581502c" dependencies = [ - "bindgen 0.51.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bindgen", ] [[package]] name = "cpal" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ded070249be850b5b59e1e3a44a70b8ae395e0e5c65b487131d8909a8208120" dependencies = [ - "alsa-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", - "coreaudio-rs 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", - "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", - "stdweb 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "alsa-sys", + "core-foundation-sys 0.6.2", + "coreaudio-rs", + "failure", + "lazy_static", + "libc", + "num-traits 0.2.11", + "stdweb 0.1.3", + "winapi 0.3.8", ] [[package]] name = "crc32fast" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", ] [[package]] name = "criterion" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fc755679c12bda8e5523a71e4d654b6bf2e14bd838dfc48cde6559a05caf7d1" dependencies = [ - "atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", - "cast 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", - "criterion-plot 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "csv 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_os 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_xoshiro 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rayon 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)", - "tinytemplate 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)", + "atty", + "cast", + "clap", + "criterion-plot", + "csv", + "itertools", + "lazy_static", + "num-traits 0.2.11", + "oorandom", + "plotters", + "rayon", + "regex", + "serde", + "serde_derive", + "serde_json", + "tinytemplate", + "walkdir", ] [[package]] name = "criterion-plot" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a01e15e0ea58e8234f96146b1f91fa9d0e4dd7a38da93ff7a75d42c0b9d3a545" dependencies = [ - "cast 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", + "cast", + "itertools", ] [[package]] name = "crossbeam" version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d818a4990769aac0c7ff1360e233ef3a41adcb009ebb2036bf6915eb0f6b23c" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-channel 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-epoch 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "crossbeam-channel 0.3.9", + "crossbeam-deque", + "crossbeam-epoch 0.7.2", + "crossbeam-queue 0.1.2", + "crossbeam-utils 0.6.6", ] [[package]] name = "crossbeam-channel" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8ec7fcd21571dc78f96cc96243cab8d8f035247c3efd16c687be154c3fa9efa" dependencies = [ - "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.6", ] [[package]] name = "crossbeam-channel" -version = "0.4.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cced8691919c02aac3cb0a1bc2e9b73d89e832bf9a06fc579d4e71b68a2da061" dependencies = [ - "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.7.2", + "maybe-uninit", ] [[package]] name = "crossbeam-deque" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f02af974daeee82218205558e51ec8768b48cf524bd01d550abe5573a608285" dependencies = [ - "crossbeam-epoch 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-epoch 0.8.2", + "crossbeam-utils 0.7.2", + "maybe-uninit", ] [[package]] name = "crossbeam-epoch" version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fedcd6772e37f3da2a9af9bf12ebe046c0dfe657992377b4df982a2b54cd37a9" dependencies = [ - "arrayvec 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "memoffset 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", - "scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "arrayvec 0.4.12", + "cfg-if", + "crossbeam-utils 0.6.6", + "lazy_static", + "memoffset", + "scopeguard", ] [[package]] name = "crossbeam-epoch" -version = "0.8.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace" dependencies = [ - "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "memoffset 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", - "scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 1.0.0", + "cfg-if", + "crossbeam-utils 0.7.2", + "lazy_static", + "maybe-uninit", + "memoffset", + "scopeguard", ] [[package]] name = "crossbeam-queue" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c979cd6cfe72335896575c6b5688da489e420d36a27a0b9eb0c73db574b4a4b" dependencies = [ - "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.6", ] [[package]] name = "crossbeam-queue" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c695eeca1e7173472a32221542ae469b3e9aac3a4fc81f7696bcad82029493db" dependencies = [ - "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "crossbeam-utils 0.7.2", ] [[package]] name = "crossbeam-utils" version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04973fa96e96579258a5091af6003abde64af786b860f18622b82e026cca60e6" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "lazy_static", ] [[package]] name = "crossbeam-utils" -version = "0.7.0" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" dependencies = [ - "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 1.0.0", + "cfg-if", + "lazy_static", ] [[package]] name = "csv" -version = "1.1.1" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00affe7f6ab566df61b4be3ce8cf16bc2576bca0963ceb0955e45d514bf9a279" dependencies = [ - "bstr 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "csv-core 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", + "bstr", + "csv-core", + "itoa", + "ryu", + "serde", ] [[package]] name = "csv-core" -version = "0.1.6" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90" dependencies = [ - "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr", ] [[package]] name = "ct-logs" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d3686f5fa27dbc1d76c751300376e167c5a43387f44bb451fd1c24776e49113" dependencies = [ - "sct 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sct", ] [[package]] name = "daggy" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9293a0da7d1bc1f30090ece4d9f9de79a07be7302ddb00e5eb1fefb6ee6409e2" dependencies = [ - "petgraph 0.4.13 (registry+https://github.com/rust-lang/crates.io-index)", + "petgraph", ] +[[package]] +name = "darling" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2 1.0.9", + "quote 1.0.3", + "strsim", + "syn 1.0.16", +] + +[[package]] +name = "darling_macro" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72" +dependencies = [ + "darling_core", + "quote 1.0.3", + "syn 1.0.16", +] + +[[package]] +name = "dashmap" +version = "3.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "010ef3f25ed5bb93505a3238d19957622190268640526aab07174c66ccf5d611" +dependencies = [ + "ahash 0.3.2", + "cfg-if", + "num_cpus", +] + +[[package]] +name = "data-encoding" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11c0346158a19b3627234e15596f5e465c360fcdb97d817bcb255e0510f5a788" + [[package]] name = "deflate" version = "0.7.20" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "707b6a7b384888a70c8d2e8650b3e60170dfc6a67bb4aa67b6dfca57af4bedb4" dependencies = [ - "adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", - "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "gzip-header 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "adler32", + "byteorder 1.3.4", + "gzip-header", ] [[package]] name = "derivative" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c6d883546668a3e2011b6a716a7330b82eabb0151b138217f632c8243e17135" dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.30", + "quote 0.6.13", + "syn 0.15.44", ] [[package]] name = "deunicode" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "307dde1a517939465bc4042b47377284a56cee6160f8066f1f5035eb7b25a3fc" [[package]] name = "directories" version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "551a778172a450d7fc12e629ca3b0428d00f6afa9a43da1b630d54604e97371c" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "dirs-sys 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "dirs-sys", ] [[package]] name = "dirs" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fd78930633bd1c6e35c4b42b1df7b0cbc6bc191146e512bb3bedf243fcc3901" dependencies = [ - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_users 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", + "redox_users", + "winapi 0.3.8", ] [[package]] name = "dirs-sys" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afa0b23de8fd801745c471deffa6e12d248f962c9fd4b4c33787b055599bde7b" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_users 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "libc", + "redox_users", + "winapi 0.3.8", ] [[package]] name = "discard" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" [[package]] name = "dispatch" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04e93ca78226c51902d7aa8c12c988338aadd9e85ed9c6be8aaac39192ff3605" [[package]] name = "dlib" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77e51249a9d823a4cb79e3eca6dcd756153e8ed0157b6c04775d04bf1b13b76a" dependencies = [ - "libloading 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libloading", ] [[package]] name = "dot_vox" -version = "4.0.0" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83c18405ef54de0398b77a3ec8394d3a1639e7bf060e1385201e8db40c44ab41" dependencies = [ - "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.3.4", + "lazy_static", + "log 0.4.8", + "nom 4.2.3", ] [[package]] name = "downcast-rs" version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52ba6eb47c2131e784a38b726eb54c1e1484904f013e576a25354d0124161af6" [[package]] name = "draw_state" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33cf9537e2d06891448799b96d5a8c8083e0e90522a7fdabe6ebf4f41d79d651" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", ] [[package]] name = "dtoa" version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4358a9e11b9a09cf52383b451b49a169e8d797b68aa02301ff586d70d9661ea3" [[package]] name = "either" version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3" [[package]] name = "encoding_rs" version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd8d03faa7fe0c1431609dfad7bbe827af30f82e1e2ae6f7ee4fca6bd764bc28" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", ] [[package]] name = "env_logger" version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aafcde04e90a5226a6443b7aabdb016ba2f8307c847d524724bd9b346dd1a2d3" dependencies = [ - "atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", - "humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "termcolor 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", + "atty", + "humantime", + "log 0.4.8", + "regex", + "termcolor", +] + +[[package]] +name = "error-chain" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d371106cc88ffdfb1eabd7111e432da544f16f3e2d7bf1dfe8bf575f1df045cd" +dependencies = [ + "backtrace", + "version_check 0.9.1", ] [[package]] name = "euc" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20f6684a8420df7c300a36bed7cb0b2387b2bc385d4940282399b5df0c08ebd" dependencies = [ - "vek 0.9.11 (registry+https://github.com/rust-lang/crates.io-index)", + "vek 0.9.12", ] [[package]] name = "euclid" version = "0.19.9" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "596b99621b9477e7a5f94d2d8dd13a9c5c302ac358b822c67a42b6f1054450e1" dependencies = [ - "euclid_macros 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid_macros", + "num-traits 0.2.11", ] [[package]] name = "euclid_macros" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdcb84c18ea5037a1c5a23039b4ff29403abce2e0d6b1daa11cf0bde2b30be15" dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.30", + "quote 0.6.13", + "syn 0.15.44", ] [[package]] name = "failure" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8529c2421efa3066a5cbd8063d2244603824daccb6936b079010bb2aa89464b" dependencies = [ - "backtrace 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)", - "failure_derive 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace", + "failure_derive", ] [[package]] name = "failure_derive" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "030a733c8287d6213886dd487564ff5c8f6aae10278b3588ed177f9d18f8d231" dependencies = [ - "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)", - "synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.9", + "quote 1.0.3", + "syn 1.0.16", + "synstructure", ] [[package]] name = "fern" version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e69ab0d5aca163e388c3a49d284fed6c3d0810700e77c5ae2756a50ec1a4daaa" dependencies = [ - "chrono 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", - "colored 1.9.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "chrono", + "colored", + "log 0.4.8", ] [[package]] name = "filetime" version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ff6d4dab0aa0c8e6346d46052e93b13a16cf847b54ed357087c35011048cc7d" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "libc", + "redox_syscall", + "winapi 0.3.8", ] [[package]] name = "find_folder" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f6d018fb95a0b59f854aed68ecd96ce2b80af7911b92b1fed3c4b1fa516b91b" [[package]] name = "fixedbitset" version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86d4de0081402f5e88cdac65c8dcdcc73118c1a7a465e2a05f0da05843a8ea33" [[package]] name = "fnv" version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" [[package]] name = "foreign-types" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" dependencies = [ - "foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "foreign-types-shared", ] [[package]] name = "foreign-types-shared" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "fsevent" version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1616e68919f49d311720c3cf316e0a3522d8f2bd08f8da35f6b8a0fa12f9234b" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "fsevent-sys 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "fsevent-sys", ] [[package]] name = "fsevent-sys" version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a41f1722e9bf862f62429d192f37d0c82c589aa18783aa06f0c4e5c3c90649fb" dependencies = [ - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", ] [[package]] name = "fuchsia-cprng" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" [[package]] name = "fuchsia-zircon" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "fuchsia-zircon-sys", ] [[package]] name = "fuchsia-zircon-sys" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" + +[[package]] +name = "futures" +version = "0.1.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b980f2816d6ee8673b6517b52cb0e808a180efc92e5c19d02cdda79066703ef" + +[[package]] +name = "futures" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c329ae8753502fb44ae4fc2b622fa2a94652c41e795143765ba0927f92ab780" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] [[package]] name = "futures-channel" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0c77d04ce8edd9cb903932b608268b3fffec4163dc053b3b402bf47eac1f1a8" dependencies = [ - "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core", + "futures-sink", ] [[package]] name = "futures-core" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f25592f769825e89b92358db00d26f965761e094951ac44d3663ef25b7ac464a" + +[[package]] +name = "futures-cpupool" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4" +dependencies = [ + "futures 0.1.29", + "num_cpus", +] + +[[package]] +name = "futures-executor" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f674f3e1bcb15b37284a90cedf55afdba482ab061c407a9c0ebbd0f3109741ba" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] [[package]] name = "futures-io" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a638959aa96152c7a4cddf50fcb1e3fede0583b27157c26e67d6f99904090dc6" [[package]] name = "futures-macro" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a5081aa3de1f7542a794a397cde100ed903b0630152d0973479018fd85423a7" dependencies = [ - "proc-macro-hack 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro-hack", + "proc-macro2 1.0.9", + "quote 1.0.3", + "syn 1.0.16", ] [[package]] name = "futures-sink" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3466821b4bc114d95b087b850a724c6f83115e929bc88f1fa98a3304a944c8a6" [[package]] name = "futures-task" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b0a34e53cf6cdcd0178aa573aed466b646eb3db769570841fda0c7ede375a27" + +[[package]] +name = "futures-timer" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1de7508b218029b0f01662ed8f61b1c964b3ae99d6f25462d0f55a595109df6" [[package]] name = "futures-util" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22766cf25d64306bedf0384da004d05c9974ab104fcc4528f1236181c18004c5" dependencies = [ - "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-io 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-macro 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-task 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro-hack 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro-nested 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.29", + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-utils", + "proc-macro-hack", + "proc-macro-nested", + "slab", + "tokio-io", ] [[package]] name = "fxhash" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" dependencies = [ - "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.3.4", ] [[package]] name = "gdk" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd30051ff3d908ff2fc7e5776ffe1c699821e043809f294c3a61004f11d6c3a9" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "cairo-rs 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "cairo-sys-rs 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "gdk-pixbuf 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "gdk-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "gio 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "glib 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "glib-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "gobject-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "pango 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "cairo-rs", + "cairo-sys-rs", + "gdk-pixbuf", + "gdk-sys", + "gio", + "glib", + "glib-sys", + "gobject-sys", + "libc", + "pango", ] [[package]] name = "gdk-pixbuf" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2d2199eba47ebcb9977ce28179649bdd59305ef465c4e6f9b65aaa41c24e6b5" dependencies = [ - "gdk-pixbuf-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "gio 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "gio-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "glib 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "glib-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "gobject-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", + "gdk-pixbuf-sys", + "gio", + "gio-sys", + "glib", + "glib-sys", + "gobject-sys", + "libc", ] [[package]] name = "gdk-pixbuf-sys" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df6a3b73e04fafc07f5ebc083f1096a773412e627828e1103a55e921f81187d8" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "gio-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "glib-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "gobject-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pkg-config", ] [[package]] name = "gdk-sys" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3162ff940526ddff71bf1f630facee6b5e05d282d125ba0c4c803842819b80c3" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "cairo-sys-rs 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "gdk-pixbuf-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "gio-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "glib-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "gobject-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "pango-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "pkg-config", ] [[package]] name = "getrandom" -version = "0.1.13" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "wasi 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "libc", + "wasi", ] [[package]] name = "gfx" version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01de46f9508a5c259aef105f0bff760ceddca832ea9c87ce03d1923e22ee155b" dependencies = [ - "draw_state 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "gfx_core 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "draw_state", + "gfx_core", + "log 0.4.8", ] [[package]] name = "gfx_core" version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75fbddaef2e12b4995900539d7209d947b988a3d87ee8737484d049b526e5441" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "draw_state 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "draw_state", + "log 0.4.8", ] [[package]] name = "gfx_device_gl" version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "109c385fa380c18888633aa27d1e16cbae518469702a2f69dcb5f52d5378bebc" dependencies = [ - "gfx_core 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", - "gfx_gl 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "gfx_core", + "gfx_gl", + "log 0.4.8", ] [[package]] name = "gfx_gl" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2d38164670920cfb7491bc0cf6f49f0554bd1c44cdbedc6c78d2bf91691ff5e" dependencies = [ - "gl_generator 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", + "gl_generator 0.14.0", ] [[package]] name = "gfx_window_glutin" version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "310ff66f08b5a55854b18fea2f48bdbb75c94458207ba574c9723be78e97a646" dependencies = [ - "gfx_core 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", - "gfx_device_gl 0.16.2 (registry+https://github.com/rust-lang/crates.io-index)", - "glutin 0.21.1 (registry+https://github.com/rust-lang/crates.io-index)", + "gfx_core", + "gfx_device_gl", + "glutin", ] [[package]] name = "gif" version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "471d90201b3b223f3451cd4ad53e34295f16a1df17b1edf3736d47761c3981af" dependencies = [ - "color_quant 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "lzw 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "color_quant", + "lzw", ] [[package]] name = "gilrs" version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "122bb249f904e5f4ac73fc514b9b2ce6cce3af511f5df00ffc8000e47de6b290" dependencies = [ - "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "gilrs-core 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", - "stdweb 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)", - "uuid 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", - "vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", + "fnv", + "gilrs-core", + "log 0.4.8", + "serde", + "stdweb 0.4.20", + "uuid 0.8.1", + "vec_map", ] [[package]] name = "gilrs-core" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bdd4ea2d919ecb594362fa26b0f172729b9ee9b95e407fbad95e0a49cadc143" dependencies = [ - "core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", - "io-kit-sys 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "libudev-sys 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "nix 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rusty-xinput 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "stdweb 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)", - "uuid 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", - "vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "core-foundation 0.6.4", + "io-kit-sys", + "libc", + "libudev-sys", + "log 0.4.8", + "nix 0.15.0", + "rusty-xinput", + "stdweb 0.4.20", + "uuid 0.8.1", + "vec_map", + "winapi 0.3.8", ] [[package]] name = "gio" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2db9fad8f1b0d4c7338a210a6cbdf081dcc1a3c223718c698c4f313f6c288acb" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "gio-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "glib 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "glib-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "gobject-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "gio-sys", + "glib", + "glib-sys", + "gobject-sys", + "lazy_static", + "libc", ] [[package]] name = "gio-sys" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a57872499171d279f8577ce83837da4cae62b08dd32892236ed67ab7ea61030" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "glib-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "gobject-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "glib-sys", + "gobject-sys", + "libc", + "pkg-config", ] [[package]] name = "git2" version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c1af51ea8a906616af45a4ce78eacf25860f7a13ae7bf8a814693f0f4037a26" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "libgit2-sys 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl-sys 0.9.54 (registry+https://github.com/rust-lang/crates.io-index)", - "url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "gl_generator" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "khronos_api 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "xml-rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "libc", + "libgit2-sys", + "log 0.4.8", + "openssl-probe", + "openssl-sys", + "url 2.1.1", ] [[package]] name = "gl_generator" version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca98bbde17256e02d17336a6bdb5a50f7d0ccacee502e191d3e3d0ec2f96f84a" dependencies = [ - "khronos_api 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "xml-rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "khronos_api", + "log 0.4.8", + "xml-rs", +] + +[[package]] +name = "gl_generator" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" +dependencies = [ + "khronos_api", + "log 0.4.8", + "xml-rs", ] [[package]] name = "gleam" version = "0.6.19" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cae10d7c99d0e77b4766e850a60898a17c1abaf01075531f1066f03dc7dc5fc5" dependencies = [ - "gl_generator 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)", + "gl_generator 0.13.1", ] [[package]] name = "glib" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e0be1b1432e227bcd1a9b28db9dc1474a7e7fd4227e08e16f35304f32d09b61" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "glib-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "gobject-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "glib-sys", + "gobject-sys", + "lazy_static", + "libc", ] [[package]] name = "glib-sys" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "615bef979b5838526aee99241afc80cfb2e34a8735d4bcb8ec6072598c18a408" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "libc", + "pkg-config", ] [[package]] name = "glob" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" [[package]] name = "glsl-include" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daa2afb1631e7ab4543e0dde0e3fc68bb49c58fee89c07f30a26553b1f684ab6" dependencies = [ - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static", + "regex", ] [[package]] name = "glutin" -version = "0.21.1" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5371b35b309dace06be1b81b5f6adb1c9de578b7dbe1e74bf7e4ef762cf6febd" dependencies = [ - "android_glue 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "cgl 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "cocoa 0.18.5 (registry+https://github.com/rust-lang/crates.io-index)", - "core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", - "core-graphics 0.17.3 (registry+https://github.com/rust-lang/crates.io-index)", - "derivative 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "glutin_egl_sys 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "glutin_emscripten_sys 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "glutin_gles2_sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "glutin_glx_sys 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "glutin_wgl_sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libloading 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", - "objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", - "osmesa-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", - "wayland-client 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winit 0.19.5 (registry+https://github.com/rust-lang/crates.io-index)", + "android_glue", + "cgl", + "cocoa 0.18.5", + "core-foundation 0.6.4", + "core-graphics", + "glutin_egl_sys", + "glutin_emscripten_sys", + "glutin_gles2_sys", + "glutin_glx_sys", + "glutin_wgl_sys", + "lazy_static", + "libloading", + "objc", + "osmesa-sys", + "parking_lot 0.9.0", + "wayland-client 0.21.13", + "winapi 0.3.8", + "winit", ] [[package]] name = "glutin_egl_sys" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "772edef3b28b8ad41e4ea202748e65eefe8e5ffd1f4535f1219793dbb20b3d4c" dependencies = [ - "gl_generator 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "gl_generator 0.13.1", + "winapi 0.3.8", ] [[package]] name = "glutin_emscripten_sys" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80de4146df76e8a6c32b03007bc764ff3249dcaeb4f675d68a06caf1bac363f1" [[package]] name = "glutin_gles2_sys" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e853d96bebcb8e53e445225c3009758c6f5960d44f2543245f6f07b567dae0" dependencies = [ - "gl_generator 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", - "objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "gl_generator 0.13.1", + "objc", ] [[package]] name = "glutin_glx_sys" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08c243de74d6cf5ea100c788826d2fb9319de315485dd4b310811a663b3809c3" dependencies = [ - "gl_generator 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", - "x11-dl 2.18.4 (registry+https://github.com/rust-lang/crates.io-index)", + "gl_generator 0.13.1", + "x11-dl", ] [[package]] name = "glutin_wgl_sys" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a93dba7ee3a0feeac0f437141ff25e71ce2066bcf1a706acab1559ffff94eb6a" dependencies = [ - "gl_generator 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", + "gl_generator 0.13.1", ] [[package]] name = "gobject-sys" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70409d6405db8b1591602fcd0cbe8af52cd9976dd39194442b4c149ba343f86d" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "glib-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "glib-sys", + "libc", + "pkg-config", ] [[package]] name = "gtk" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d695d6be4110618a97c19cd068e8a00e53e33b87e3c65cdc5397667498b1bc24" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "cairo-rs 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "cairo-sys-rs 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)", - "gdk 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "gdk-pixbuf 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "gdk-pixbuf-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "gdk-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "gio 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "gio-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "glib 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "glib-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "gobject-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "gtk-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "pango 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "cairo-rs", + "cairo-sys-rs", + "cc", + "gdk", + "gdk-pixbuf", + "gdk-pixbuf-sys", + "gdk-sys", + "gio", + "gio-sys", + "glib", + "glib-sys", + "gobject-sys", + "gtk-sys", + "lazy_static", + "libc", + "pango", ] [[package]] name = "gtk-sys" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d9554cf5b3a85a13fb39258c65b04b262989c1d7a758f8f555b77a478621a91" dependencies = [ - "atk-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "cairo-sys-rs 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "gdk-pixbuf-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "gdk-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "gio-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "glib-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "gobject-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "pango-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", + "atk-sys", + "bitflags", + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "pkg-config", ] [[package]] @@ -1528,1060 +1917,1358 @@ name = "guillotiere" version = "0.4.2" source = "git+https://github.com/Imberflur/guillotiere#42c298f5bcf0f95f1a004360d05e25ca3711e9ed" dependencies = [ - "euclid 0.19.9 (registry+https://github.com/rust-lang/crates.io-index)", - "svg_fmt 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid", + "svg_fmt", ] [[package]] name = "gzip-header" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0131feb3d3bb2a5a238d8a4d09f6353b7ebfdc52e77bccbf4ea6eaa751dde639" dependencies = [ - "crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "crc32fast", +] + +[[package]] +name = "h2" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5b34c246847f938a410a03c5458c7fee2274436675e76d8b903c08efc29c462" +dependencies = [ + "byteorder 1.3.4", + "bytes 0.4.12", + "fnv", + "futures 0.1.29", + "http 0.1.21", + "indexmap", + "log 0.4.8", + "slab", + "string", + "tokio-io", ] [[package]] name = "h2" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d5c295d1c0c68e4e42003d75f908f5e16a1edd1cbe0b0d02e4dc2006a384f47" dependencies = [ - "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", - "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-sink 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "indexmap 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-util 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.5.4", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.0", + "indexmap", + "log 0.4.8", + "slab", + "tokio 0.2.13", + "tokio-util", ] [[package]] name = "hashbrown" version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e6073d0ca812575946eb5f35ff68dbe519907b25c42530389ff946dc84c6ead" dependencies = [ - "ahash 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", - "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "rayon 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", + "ahash 0.2.18", + "autocfg 0.1.7", + "rayon", + "serde", ] [[package]] name = "hermit-abi" -version = "0.1.3" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1010591b26bbfe835e9faeabeb11866061cc7dcebffd56ad7d0942d0e61aefd8" dependencies = [ - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", ] [[package]] name = "hex" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "805026a5d0141ffc30abb3be3173848ad46a1b1664fe632428479619a3644d77" [[package]] name = "hibitset" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93a1bb8316a44459a7d14253c4d28dd7395cbd23cc04a68c46e851b8e46d64b1" dependencies = [ - "atom 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", - "rayon 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "atom", + "rayon", ] +[[package]] +name = "horrorshow" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ce7e0a1bc8e4489896abc94e5664e811a502a151bebfe113b3214fa181d3fb" + [[package]] name = "hound" version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a164bb2ceaeff4f42542bdb847c41517c78a60f5649671b2a07312b6e117549" + +[[package]] +name = "http" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6ccf5ede3a895d8856620237b2f02972c1bbc78d2965ad7fe8838d4a0ed41f0" +dependencies = [ + "bytes 0.4.12", + "fnv", + "itoa", +] [[package]] name = "http" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b708cc7f06493459026f53b9a61a7a121a5d1ec6238dee58ea4941132b30156b" dependencies = [ - "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", - "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.5.4", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6741c859c1b2463a423a1dbce98d418e6c3c3fc720fb0d45528657320920292d" +dependencies = [ + "bytes 0.4.12", + "futures 0.1.29", + "http 0.1.21", + "tokio-buf", ] [[package]] name = "http-body" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13d5ff830006f7646652e057693569bfe0d51760c0085a071769d142a205111b" dependencies = [ - "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.5.4", + "http 0.2.0", +] + +[[package]] +name = "http-service" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9625f605ddfaf894bf78a544a7b8e31f562dc843654723a49892d9c7e75ac708" +dependencies = [ + "async-std", + "bytes 0.4.12", + "futures 0.3.4", + "http 0.1.21", + "pin-project-lite", +] + +[[package]] +name = "http-service-hyper" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e33d5dae94e0fdb82f9524ea2f2b98458b3d8448526d8cc8beccb3d3fded8aff" +dependencies = [ + "futures 0.3.4", + "http 0.1.21", + "http-service", + "hyper 0.12.35", ] [[package]] name = "httparse" version = "1.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9" [[package]] name = "humantime" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f" dependencies = [ - "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "quick-error", +] + +[[package]] +name = "hyper" +version = "0.12.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dbe6ed1438e1f8ad955a4701e9a944938e9519f6888d12d8558b645e247d5f6" +dependencies = [ + "bytes 0.4.12", + "futures 0.1.29", + "futures-cpupool", + "h2 0.1.26", + "http 0.1.21", + "http-body 0.1.0", + "httparse", + "iovec", + "itoa", + "log 0.4.8", + "net2", + "rustc_version", + "time", + "tokio 0.1.22", + "tokio-buf", + "tokio-executor", + "tokio-io", + "tokio-reactor", + "tokio-tcp", + "tokio-threadpool", + "tokio-timer", + "want 0.2.0", ] [[package]] name = "hyper" version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7b15203263d1faa615f9337d79c1d37959439dc46c2b4faab33286fadc2a1c5" dependencies = [ - "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-channel 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "h2 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "http-body 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "pin-project 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", - "tower-service 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "want 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.5.4", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.2.2", + "http 0.2.0", + "http-body 0.3.1", + "httparse", + "itoa", + "log 0.4.8", + "net2", + "pin-project", + "time", + "tokio 0.2.13", + "tower-service", + "want 0.3.0", ] [[package]] name = "hyper-rustls" version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac965ea399ec3a25ac7d13b8affd4b8f39325cca00858ddf5eb29b79e6b14b08" dependencies = [ - "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", - "ct-logs 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.13.3 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "rustls 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rustls-native-certs 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-rustls 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)", - "webpki 0.21.2 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.5.4", + "ct-logs", + "futures-util", + "hyper 0.13.3", + "log 0.4.8", + "rustls", + "rustls-native-certs", + "tokio 0.2.13", + "tokio-rustls", + "webpki", ] +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + [[package]] name = "idna" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" dependencies = [ - "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-normalization 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "matches", + "unicode-bidi", + "unicode-normalization", ] [[package]] name = "idna" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9" dependencies = [ - "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-normalization 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "matches", + "unicode-bidi", + "unicode-normalization", ] [[package]] name = "image" -version = "0.22.3" +version = "0.22.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08ed2ada878397b045454ac7cfb011d73132c59f31a955d230bd1f1c2e68eb4a" dependencies = [ - "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "gif 0.10.3 (registry+https://github.com/rust-lang/crates.io-index)", - "jpeg-decoder 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "num-iter 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", - "num-rational 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", - "png 0.15.1 (registry+https://github.com/rust-lang/crates.io-index)", - "scoped_threadpool 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "tiff 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.3.4", + "gif", + "jpeg-decoder", + "num-iter", + "num-rational", + "num-traits 0.2.11", + "png", + "scoped_threadpool", + "tiff", ] [[package]] name = "indexmap" -version = "1.3.0" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "076f042c5b7b98f31d205f1249267e12a6518c1481e9dae9764af19b707d2292" dependencies = [ - "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 1.0.0", ] [[package]] name = "inflate" version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cdb29978cc5797bd8dcc8e5bf7de604891df2a8dc576973d71a281e916db2ff" dependencies = [ - "adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "adler32", ] [[package]] name = "inotify" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc39ee997811267bf8aa0b10e1674c5bea6caacc1957eede5ea45251fe33c6d5" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "inotify-sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "inotify-sys", + "libc", ] [[package]] name = "inotify-sys" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e74a1aa87c59aeff6ef2cc2fa62d41bc43f54952f55652656b18a02fd5e356c0" dependencies = [ - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", ] [[package]] name = "instant" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c346c299e3fe8ef94dc10c2c0253d858a69aac1245157a3bf4125915d528caf" [[package]] name = "io-kit-sys" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f21dcc74995dd4cd090b147e79789f8d65959cbfb5f0b118002db869ea3bd0a0" dependencies = [ - "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", - "mach 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "core-foundation-sys 0.6.2", + "mach", ] [[package]] name = "iovec" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" dependencies = [ - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", ] [[package]] name = "itertools" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484" dependencies = [ - "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "either", ] [[package]] name = "itoa" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8b7a7c0c47db5545ed3fef7468ee7bb5b74691498139e4b3f6a20685dc6dd8e" [[package]] name = "jobserver" version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c71313ebb9439f74b00d9d2dcec36440beaf57a6aa0623068441dd7cd81a7f2" dependencies = [ - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", ] [[package]] name = "jpeg-decoder" -version = "0.1.16" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0256f0aec7352539102a9efbcb75543227b7ab1117e0f95450023af730128451" dependencies = [ - "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rayon 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.3.4", + "rayon", ] [[package]] name = "js-sys" version = "0.3.36" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cb931d43e71f560c81badb0191596562bafad2be06a3f9025b845c847c60df5" dependencies = [ - "wasm-bindgen 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "wasm-bindgen", ] [[package]] name = "kernel32-sys" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" dependencies = [ - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8", + "winapi-build", ] [[package]] name = "khronos_api" version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" + +[[package]] +name = "kv-log-macro" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c54d9f465d530a752e6ebdc217e081a7a614b48cb200f6f0aee21ba6bc9aabb" +dependencies = [ + "log 0.4.8", +] [[package]] name = "lazy_static" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "lazycell" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f" [[package]] name = "lewton" version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d542c1a317036c45c2aa1cf10cc9d403ca91eb2d333ef1a4917e5cb10628bd0" dependencies = [ - "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "ogg 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.3.4", + "ogg", + "smallvec 0.6.13", ] [[package]] name = "libc" -version = "0.2.65" +version = "0.2.67" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb147597cdf94ed43ab7a9038716637d2d1bf2bc571da995d0028dec06bd3018" [[package]] name = "libgit2-sys" version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4870c781f6063efb83150cd22c1ddf6ecf58531419e7570cdcced46970f64a16" dependencies = [ - "cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "libssh2-sys 0.2.16 (registry+https://github.com/rust-lang/crates.io-index)", - "libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl-sys 0.9.54 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", + "cc", + "libc", + "libssh2-sys", + "libz-sys", + "openssl-sys", + "pkg-config", ] [[package]] name = "libloading" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2b111a074963af1d37a139918ac6d49ad1d0d5e47f72fd55388619691a7d753" dependencies = [ - "cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "cc", + "winapi 0.3.8", ] [[package]] name = "libssh2-sys" version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bb70f29dc7c31d32c97577f13f41221af981b31248083e347b7f2c39225a6bc" dependencies = [ - "cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl-sys 0.9.54 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", - "vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "cc", + "libc", + "libz-sys", + "openssl-sys", + "pkg-config", + "vcpkg", ] [[package]] name = "libudev-sys" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c8469b4a23b962c1396b9b451dda50ef5b283e8dd309d69033475fa9b334324" dependencies = [ - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", + "pkg-config", ] [[package]] name = "libz-sys" version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eb5e43362e38e2bca2fd5f5134c4d4564a23a5c28e9b95411652021a8675ebe" dependencies = [ - "cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", - "vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "cc", + "libc", + "pkg-config", + "vcpkg", ] [[package]] name = "line_drawing" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc7ad3d82c845bdb5dde34ffdcc7a5fb4d2996e1e1ee0f19c33bc80e15196b9" dependencies = [ - "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.11", ] [[package]] name = "linked-hash-map" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae91b68aebc4ddb91978b11a1b02ddd8602a05ec19002801c5666000e05e0f83" [[package]] name = "lock_api" -version = "0.3.1" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79b2de95ecb4691949fea4716ca53cdbcfccb2c612e19644a8bad05edcf9f47b" dependencies = [ - "scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "scopeguard", ] [[package]] name = "log" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" dependencies = [ - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8", ] [[package]] name = "log" version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", ] [[package]] name = "lz4-compress" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f966533a922a9bba9e95e594c1fdb3b9bf5fdcdb11e37e51ad84cd76e468b91" dependencies = [ - "byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", - "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 0.5.3", + "quick-error", ] [[package]] name = "lzw" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d947cbb889ed21c2a84be6ffbaebf5b4e0f4340638cba0444907e38b56be084" [[package]] name = "mach" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86dd2487cdfea56def77b88438a2c915fb45113c5319bfe7e14306ca4cd0b0e1" dependencies = [ - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", ] [[package]] name = "malloc_buf" version = "0.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" dependencies = [ - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", ] [[package]] name = "matches" version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" [[package]] name = "maybe-uninit" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" [[package]] name = "memchr" -version = "2.2.1" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400" [[package]] name = "memmap" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6585fd95e7bb50d6cc31e20d4cf9afb4e2ba16c5846fc76793f11218da9c475b" dependencies = [ - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", + "winapi 0.3.8", ] [[package]] name = "memoffset" version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75189eb85871ea5c2e2c15abbdd541185f63b408415e5051f5cac122d8c774b9" dependencies = [ - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc_version", ] [[package]] name = "mime" version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba626b8a6de5da682e1caa06bdb42a335aee5a84db8e5046a3e8ab17ba0a3ae0" dependencies = [ - "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.9", ] [[package]] name = "mime" version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" [[package]] name = "mime_guess" -version = "1.8.7" +version = "1.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "216929a5ee4dd316b1702eedf5e74548c123d370f47841ceaac38ca154690ca3" dependencies = [ - "mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", - "phf 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", - "phf_codegen 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", - "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "mime 0.2.6", + "phf", + "phf_codegen", + "unicase 1.4.2", ] [[package]] name = "mime_guess" version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2684d4c2e97d99848d30b324b00c8fcc7e5c897b7cbb5819b09e7c90e8baf212" dependencies = [ - "mime 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", - "unicase 2.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "mime 0.3.16", + "unicase 2.6.0", ] [[package]] name = "minifb" version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799c20458eb0dd69f48cea5014afe736b363818c86d7ca61dbb56e1c0585014c" dependencies = [ - "cast 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)", - "orbclient 0.3.27 (registry+https://github.com/rust-lang/crates.io-index)", - "raw-window-handle 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", - "x11-dl 2.18.4 (registry+https://github.com/rust-lang/crates.io-index)", + "cast", + "cc", + "orbclient", + "raw-window-handle", + "time", + "winapi 0.3.8", + "x11-dl", ] [[package]] name = "mio" version = "0.6.21" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "302dec22bcf6bae6dfb69c647187f4b4d0fb6f535521f7bc022430ce8e12008f" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "fuchsia-zircon", + "fuchsia-zircon-sys", + "iovec", + "kernel32-sys", + "libc", + "log 0.4.8", + "miow", + "net2", + "slab", + "winapi 0.2.8", ] [[package]] name = "mio-extras" -version = "2.0.5" +version = "2.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52403fe290012ce777c4626790c8951324a2b9e3316b3143779c72b029742f19" dependencies = [ - "lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "lazycell", + "log 0.4.8", + "mio", + "slab", +] + +[[package]] +name = "mio-uds" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "966257a94e196b11bb43aca423754d87429960a768de9414f3691d6957abf125" +dependencies = [ + "iovec", + "libc", + "mio", ] [[package]] name = "miow" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" dependencies = [ - "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "kernel32-sys", + "net2", + "winapi 0.2.8", + "ws2_32-sys", ] [[package]] name = "mopa" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a785740271256c230f57462d3b83e52f998433a7062fc18f96d5999474a9f915" [[package]] name = "msgbox" version = "0.4.0" source = "git+https://github.com/bekker/msgbox-rs.git?rev=68fe39a#68fe39a60019b38a1569ae4e9ed796a0f0542673" dependencies = [ - "cocoa 0.19.1 (registry+https://github.com/rust-lang/crates.io-index)", - "gtk 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "cocoa 0.19.1", + "gtk", + "objc", + "winapi 0.3.8", ] [[package]] name = "multipart" version = "0.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adba94490a79baf2d6a23eac897157047008272fa3eecb3373ae6377b91eca28" dependencies = [ - "buf_redux 0.8.4 (registry+https://github.com/rust-lang/crates.io-index)", - "httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", - "mime_guess 1.8.7 (registry+https://github.com/rust-lang/crates.io-index)", - "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "safemem 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", - "twoway 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "buf_redux", + "httparse", + "log 0.4.8", + "mime 0.2.6", + "mime_guess 1.8.8", + "quick-error", + "rand 0.4.6", + "safemem", + "tempdir", + "twoway", ] [[package]] name = "net2" version = "0.2.33" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "libc", + "winapi 0.3.8", ] [[package]] name = "nix" version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c722bee1037d430d0f8e687bbdbf222f27cc6e4e68d5caf630857bb2b6dbdce" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "cc", + "cfg-if", + "libc", + "void", ] [[package]] name = "nix" version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2e0b4f3320ed72aaedb9a5ac838690a8047c7b275da22711fddff4f8a14229" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "cc", + "cfg-if", + "libc", + "void", ] [[package]] name = "nodrop" version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" [[package]] name = "noise" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "337525774dd8a197b613a01ea88058ef0ed023e5ed1e4b7e93de478e1f2bf770" dependencies = [ - "rand 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.5.6", ] [[package]] name = "nom" version = "4.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6" dependencies = [ - "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr", + "version_check 0.1.5", +] + +[[package]] +name = "nom" +version = "5.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b471253da97532da4b61552249c521e01e736071f71c1a4f7ebbfbf0a06aad6" +dependencies = [ + "memchr", + "version_check 0.9.1", ] [[package]] name = "notify" version = "5.0.0-pre.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b00c0b65188bffb5598c302e19b062feb94adef02c31f15622a163c95d673c3" dependencies = [ - "anymap 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)", - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "chashmap 2.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-channel 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "filetime 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "fsevent 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "fsevent-sys 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "inotify 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", - "mio-extras 2.0.5 (registry+https://github.com/rust-lang/crates.io-index)", - "walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "anymap", + "bitflags", + "chashmap", + "crossbeam-channel 0.4.2", + "filetime", + "fsevent", + "fsevent-sys", + "inotify", + "libc", + "mio", + "mio-extras", + "walkdir", + "winapi 0.3.8", ] [[package]] name = "num" version = "0.1.42" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4703ad64153382334aa8db57c637364c322d3372e097840c72000dabdcf6156e" dependencies = [ - "num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", - "num-iter 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer", + "num-iter", + "num-traits 0.2.11", ] [[package]] name = "num" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8536030f9fea7127f841b45bb6243b27255787fb4eb83958aa1ef9d2fdc0c36" dependencies = [ - "num-bigint 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "num-complex 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", - "num-iter 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", - "num-rational 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits 0.2.11", ] [[package]] name = "num-bigint" -version = "0.2.3" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304" dependencies = [ - "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 1.0.0", + "num-integer", + "num-traits 0.2.11", ] [[package]] name = "num-complex" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95" dependencies = [ - "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 1.0.0", + "num-traits 0.2.11", ] [[package]] name = "num-derive" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eafd0b45c5537c3ba526f79d3e75120036502bebacbb3f3220914067ce39dbf2" dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.30", + "quote 0.6.13", + "syn 0.15.44", ] [[package]] name = "num-integer" -version = "0.1.41" +version = "0.1.42" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f6ea62e9d81a77cd3ee9a2a5b9b609447857f3d358704331e4ef39eb247fcba" dependencies = [ - "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 1.0.0", + "num-traits 0.2.11", ] [[package]] name = "num-iter" -version = "0.1.39" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfb0800a0291891dd9f4fe7bd9c19384f98f7fbe0cd0f39a2c6b88b9868bbc00" dependencies = [ - "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 1.0.0", + "num-integer", + "num-traits 0.2.11", ] [[package]] name = "num-rational" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da4dc79f9e6c81bef96148c8f6b8e72ad4541caa4a24373e900a36da07de03a3" dependencies = [ - "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "num-bigint 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 1.0.0", + "num-bigint", + "num-integer", + "num-traits 0.2.11", ] [[package]] name = "num-traits" version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31" dependencies = [ - "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.11", ] [[package]] name = "num-traits" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096" dependencies = [ - "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 1.0.0", ] [[package]] name = "num_cpus" -version = "1.11.1" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46203554f085ff89c235cd12f7075f3233af9b11ed7c9e16dfe2560d03313ce6" dependencies = [ - "hermit-abi 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", + "hermit-abi", + "libc", ] [[package]] name = "objc" version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" dependencies = [ - "malloc_buf 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "malloc_buf", ] [[package]] name = "objc-foundation" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" dependencies = [ - "block 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", - "objc_id 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "block", + "objc", + "objc_id", ] [[package]] name = "objc_id" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" dependencies = [ - "objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "objc", ] [[package]] name = "ogg" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d79f1db9148be9d0e174bb3ac890f6030fcb1ed947267c5a91ee4c91b5a91e15" dependencies = [ - "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.3.4", ] +[[package]] +name = "once_cell" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c601810575c99596d4afc46f78a678c80105117c379eb3650cf99b8a21ce5b" + +[[package]] +name = "oorandom" +version = "11.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebcec7c9c2a95cacc7cd0ecb89d8a8454eca13906f6deb55258ffff0adeb9405" + [[package]] name = "openssl-probe" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" [[package]] name = "openssl-sys" version = "0.9.54" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1024c0a59774200a555087a6da3f253a9095a5f344e353b212ac4c8b8e450986" dependencies = [ - "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", - "vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 1.0.0", + "cc", + "libc", + "pkg-config", + "vcpkg", ] [[package]] name = "orbclient" version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8b18f57ab94fbd058e30aa57f712ec423c0bb7403f8493a6c58eef0c36d9402" dependencies = [ - "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", - "sdl2 0.32.2 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall", + "sdl2", ] [[package]] name = "ordered-float" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18869315e81473c951eb56ad5558bbc56978562d3ecfb87abb7a1e944cea4518" dependencies = [ - "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.11", ] [[package]] name = "osmesa-sys" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88cfece6e95d2e717e0872a7f53a8684712ad13822a7979bc760b9c77ec0013b" dependencies = [ - "shared_library 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "shared_library", ] [[package]] name = "owning_ref" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37" dependencies = [ - "stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "stable_deref_trait", ] [[package]] name = "packed_simd" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a85ea9fc0d4ac0deb6fe7911d38786b32fc11119afd9e9d38b84ff691ce64220" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", ] [[package]] name = "pango" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45374801e224373c3c0393cd48073c81093494c8735721e81d1dbaa4096b2767" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "glib 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "glib-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "gobject-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "pango-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "glib", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", ] [[package]] name = "pango-sys" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94039b3921a4af4058a3e4335e5d15099101f298a92f5afc40bab3a3027594a1" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "glib-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "gobject-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "glib-sys", + "gobject-sys", + "libc", + "pkg-config", ] [[package]] name = "parking_lot" version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "149d8f5b97f3c1133e3cfcd8886449959e856b557ff281e292b733d7c69e005e" dependencies = [ - "owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot_core 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", + "owning_ref", + "parking_lot_core 0.2.14", ] [[package]] name = "parking_lot" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252" dependencies = [ - "lock_api 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot_core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "lock_api", + "parking_lot_core 0.6.2", + "rustc_version", +] + +[[package]] +name = "parking_lot" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92e98c49ab0b7ce5b222f2cc9193fc4efe11c6d0bd4f648e374684a6857b1cfc" +dependencies = [ + "lock_api", + "parking_lot_core 0.7.0", ] [[package]] name = "parking_lot_core" version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4db1a8ccf734a7bce794cc19b3df06ed87ab2f3907036b693c68f56b4d4537fa" dependencies = [ - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", + "rand 0.4.6", + "smallvec 0.6.13", + "winapi 0.3.8", ] [[package]] name = "parking_lot_core" version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "cloudabi", + "libc", + "redox_syscall", + "rustc_version", + "smallvec 0.6.13", + "winapi 0.3.8", +] + +[[package]] +name = "parking_lot_core" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7582838484df45743c8434fbff785e8edf260c28748353d44bc0da32e0ceabf1" +dependencies = [ + "cfg-if", + "cloudabi", + "libc", + "redox_syscall", + "smallvec 1.2.0", + "winapi 0.3.8", ] [[package]] name = "peeking_take_while" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" [[package]] name = "percent-encoding" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" [[package]] name = "percent-encoding" version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" [[package]] name = "petgraph" version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3659d1ee90221741f65dd128d9998311b0e40c5d3c23a62445938214abce4f" dependencies = [ - "fixedbitset 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "fixedbitset", ] [[package]] name = "phf" version = "0.7.24" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3da44b85f8e8dfaec21adae67f95d93244b2ecf6ad2a692320598dcc8e6dd18" dependencies = [ - "phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", + "phf_shared", ] [[package]] name = "phf_codegen" version = "0.7.24" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b03e85129e324ad4166b06b2c7491ae27fe3ec353af72e72cd1654c7225d517e" dependencies = [ - "phf_generator 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", - "phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", + "phf_generator", + "phf_shared", ] [[package]] name = "phf_generator" version = "0.7.24" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09364cc93c159b8b06b1f4dd8a4398984503483891b0c26b867cf431fb132662" dependencies = [ - "phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "phf_shared", + "rand 0.6.5", ] [[package]] name = "phf_shared" version = "0.7.24" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234f71a15de2288bcb7e3b6515828d22af7ec8598ee6d24c3b526fa0a80b67a0" dependencies = [ - "siphasher 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "siphasher", + "unicase 1.4.2", ] [[package]] name = "pin-project" version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7804a463a8d9572f13453c516a5faea534a2403d7ced2f0c7e100eeff072772c" dependencies = [ - "pin-project-internal 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "pin-project-internal", ] [[package]] name = "pin-project-internal" version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "385322a45f2ecf3410c68d2a549a4a2685e8051d0f278e39743ff4e451cb9b3f" dependencies = [ - "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.9", + "quote 1.0.3", + "syn 1.0.16", ] [[package]] name = "pin-project-lite" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "237844750cfbb86f67afe27eee600dfbbcb6188d734139b534cbfbf4f96792ae" [[package]] name = "pin-utils" version = "0.1.0-alpha.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5894c618ce612a3fa23881b152b608bafb8c56cfc22f434a3ba3120b40f7b587" [[package]] name = "piston-float" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b058c3a640efd4bcf63266512e4bb03187192c1b29edd38b16d5a014613e3199" [[package]] name = "piston-viewport" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d96dd995f7dabe6d57cda668ec0fda39d6fe6e1e0b23f772582f383f2013611" dependencies = [ - "piston-float 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "piston-float", ] [[package]] name = "pistoncore-input" version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c612ce242c7bac8e96426a0ca34275fd980af440f0cca7c6c0e840ef8a4052f" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "piston-viewport 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "piston-viewport", + "serde", + "serde_derive", ] [[package]] name = "pkg-config" version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677" + +[[package]] +name = "plotters" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e3bb8da247d27ae212529352020f3e5ee16e83c0c258061d27b08ab92675eeb" +dependencies = [ + "js-sys", + "num-traits 0.2.11", + "wasm-bindgen", + "web-sys", +] [[package]] name = "png" -version = "0.15.1" +version = "0.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef859a23054bbfee7811284275ae522f0434a3c8e7f4b74bd4a35ae7e1c4a283" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "deflate 0.7.20 (registry+https://github.com/rust-lang/crates.io-index)", - "inflate 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "crc32fast", + "deflate", + "inflate", ] [[package]] @@ -2589,861 +3276,954 @@ name = "portpicker" version = "0.1.0" source = "git+https://github.com/wusyong/portpicker-rs?branch=fix_ipv6#06b989ac271ada33f9d44e7bcfcb10d55ead0c43" dependencies = [ - "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.6.5", ] [[package]] name = "ppv-lite86" version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74490b50b9fbe561ac330df47c08f3f33073d2d00c150f719147d7c54522fa1b" [[package]] name = "pretty_env_logger" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "717ee476b1690853d222af4634056d830b5197ffd747726a9a1eee6da9f49074" dependencies = [ - "chrono 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", - "env_logger 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "chrono", + "env_logger", + "log 0.4.8", ] [[package]] name = "proc-macro-hack" version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecd45702f76d6d3c75a80564378ae228a85f0b59d2f3ed43c91b4a69eb2ebfc5" dependencies = [ - "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.9", + "quote 1.0.3", + "syn 1.0.16", ] [[package]] name = "proc-macro-nested" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "369a6ed065f249a159e06c45752c780bda2fb53c995718f9e484d08daa9eb42e" [[package]] name = "proc-macro2" version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b06e2f335f48d24442b35a19df506a835fb3547bc3c06ef27340da9acf5cae7" dependencies = [ - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.1.0", ] [[package]] name = "proc-macro2" version = "0.4.30" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" dependencies = [ - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.1.0", ] [[package]] name = "proc-macro2" -version = "1.0.6" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c09721c6781493a2a492a96b5a5bf19b65917fe6728884e7c44dd0c60ca3435" dependencies = [ - "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.2.0", ] [[package]] name = "prometheus" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5567486d5778e2c6455b1b90ff1c558f29e751fc018130fa182e15828e728af1" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "protobuf 2.8.1 (registry+https://github.com/rust-lang/crates.io-index)", - "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "spin 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "fnv", + "lazy_static", + "protobuf", + "quick-error", + "spin", ] [[package]] name = "prometheus-static-metric" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1baa57413523cff73783204f73299a3f602ebcf51a5e64752b32bc1b3c376013" dependencies = [ - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.13.11 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static", + "proc-macro2 0.3.8", + "quote 0.5.2", + "syn 0.13.11", ] [[package]] name = "protobuf" -version = "2.8.1" +version = "2.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37a5325d019a4d837d3abde0a836920f959e33d350f77b5f1e289e061e774942" [[package]] name = "quick-error" -version = "1.2.2" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quote" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9949cfe66888ffe1d53e6ec9d9f3b70714083854be20fd5e271b232a017401e8" dependencies = [ - "proc-macro2 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.3.8", ] [[package]] name = "quote" version = "0.6.13" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.30", ] [[package]] name = "quote" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bdc6c187c65bca4260c9011c9e3132efe4909da44726bad24cf7572ae338d7f" dependencies = [ - "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.9", ] +[[package]] +name = "radium" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "def50a86306165861203e7f84ecffbbdfdea79f0e51039b33de1e952358c47ac" + [[package]] name = "rand" version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" dependencies = [ - "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "fuchsia-cprng", + "libc", + "rand_core 0.3.1", + "rdrand", + "winapi 0.3.8", ] [[package]] name = "rand" version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c618c47cd3ebd209790115ab837de41425723956ad3ce2e6a7f09890947cacb9" dependencies = [ - "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "cloudabi", + "fuchsia-cprng", + "libc", + "rand_core 0.3.1", + "winapi 0.3.8", ] [[package]] name = "rand" version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" dependencies = [ - "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 0.1.7", + "libc", + "rand_chacha 0.1.1", + "rand_core 0.4.2", + "rand_hc 0.1.0", + "rand_isaac", + "rand_jitter", + "rand_os", + "rand_pcg 0.1.2", + "rand_xorshift", + "winapi 0.3.8", ] [[package]] name = "rand" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" dependencies = [ - "getrandom 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_chacha 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_pcg 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "getrandom", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc 0.2.0", + "rand_pcg 0.2.1", ] [[package]] name = "rand_chacha" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" dependencies = [ - "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 0.1.7", + "rand_core 0.3.1", ] [[package]] name = "rand_chacha" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" dependencies = [ - "c2-chacha 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "ppv-lite86", + "rand_core 0.5.1", ] [[package]] name = "rand_core" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" dependencies = [ - "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.4.2", ] [[package]] name = "rand_core" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" [[package]] name = "rand_core" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" dependencies = [ - "getrandom 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", + "getrandom", ] [[package]] name = "rand_hc" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" dependencies = [ - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.3.1", ] [[package]] name = "rand_hc" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" dependencies = [ - "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.5.1", ] [[package]] name = "rand_isaac" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" dependencies = [ - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.3.1", ] [[package]] name = "rand_jitter" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" dependencies = [ - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", + "rand_core 0.4.2", + "winapi 0.3.8", ] [[package]] name = "rand_os" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" dependencies = [ - "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_os" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "getrandom 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "cloudabi", + "fuchsia-cprng", + "libc", + "rand_core 0.4.2", + "rdrand", + "winapi 0.3.8", ] [[package]] name = "rand_pcg" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" dependencies = [ - "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 0.1.7", + "rand_core 0.4.2", ] [[package]] name = "rand_pcg" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" dependencies = [ - "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.5.1", ] [[package]] name = "rand_xorshift" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" dependencies = [ - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_xoshiro" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.3.1", ] [[package]] name = "raw-window-handle" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a441a7a6c80ad6473bd4b74ec1c9a4c951794285bf941c2126f607c72e48211" dependencies = [ - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", ] [[package]] name = "rayon" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db6ce3297f9c85e16621bb8cca38a06779ffc31bb8184e1be4bed2be4678a098" dependencies = [ - "crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)", - "rayon-core 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-deque", + "either", + "rayon-core", ] [[package]] name = "rayon-core" version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08a89b46efaf957e52b18062fb2f4660f8b8a4dde1807ca002690868ef2c85a9" dependencies = [ - "crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-queue 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-deque", + "crossbeam-queue 0.2.1", + "crossbeam-utils 0.7.2", + "lazy_static", + "num_cpus", ] [[package]] name = "rdrand" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" dependencies = [ - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.3.1", ] [[package]] name = "redox_syscall" version = "0.1.56" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" [[package]] name = "redox_users" -version = "0.3.1" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09b23093265f8d200fa7b4c2c76297f47e681c655f6f1285a8780d6a022f7431" dependencies = [ - "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", - "rust-argon2 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "getrandom", + "redox_syscall", + "rust-argon2 0.7.0", ] [[package]] name = "regex" -version = "1.3.1" +version = "1.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "322cf97724bea3ee221b78fe25ac9c46114ebb51747ad5babd51a2fc6a8235a8" dependencies = [ - "aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "regex-syntax 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", - "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "aho-corasick", + "memchr", + "regex-syntax", + "thread_local", ] [[package]] name = "regex-automata" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae1ded71d66a4a97f5e961fd0cb25a5f366a42a41570d16a763a69c092c26ae4" dependencies = [ - "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.3.4", ] [[package]] name = "regex-syntax" -version = "0.6.12" +version = "0.6.16" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1132f845907680735a84409c3bebc64d1364a5683ffbce899550cd09d5eaefc1" [[package]] name = "remove_dir_all" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e" dependencies = [ - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8", ] [[package]] name = "reqwest" version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b81e49ddec5109a9dcfc5f2a317ff53377c915e9ae9d4f2fb50914b85614e2" dependencies = [ - "base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", - "encoding_rs 0.8.22 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "http-body 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.13.3 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper-rustls 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)", - "js-sys 0.3.36 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "mime 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", - "mime_guess 2.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "pin-project-lite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rustls 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_urlencoded 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-rustls 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)", - "url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen-futures 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "web-sys 0.3.36 (registry+https://github.com/rust-lang/crates.io-index)", - "webpki-roots 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winreg 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", + "base64 0.11.0", + "bytes 0.5.4", + "encoding_rs", + "futures-core", + "futures-util", + "http 0.2.0", + "http-body 0.3.1", + "hyper 0.13.3", + "hyper-rustls", + "js-sys", + "lazy_static", + "log 0.4.8", + "mime 0.3.16", + "mime_guess 2.0.3", + "percent-encoding 2.1.0", + "pin-project-lite", + "rustls", + "serde", + "serde_urlencoded", + "time", + "tokio 0.2.13", + "tokio-rustls", + "url 2.1.1", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots", + "winreg", ] [[package]] name = "ring" version = "0.16.11" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "741ba1704ae21999c00942f9f5944f801e977f54302af346b596287599ad1862" dependencies = [ - "cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "spin 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", - "untrusted 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "web-sys 0.3.36 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "cc", + "lazy_static", + "libc", + "spin", + "untrusted", + "web-sys", + "winapi 0.3.8", ] [[package]] name = "rodio" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0e0dfa7c8b17c6428f6e992a22ea595922cc86f946191b6b59e7ce96b77262" dependencies = [ - "cpal 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hound 3.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lewton 0.9.4 (registry+https://github.com/rust-lang/crates.io-index)", + "cpal", + "hound", + "lazy_static", + "lewton", ] [[package]] name = "ron" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ece421e0c4129b90e4a35b6f625e472e96c552136f5093a2f4fa2bbb75a62d5" dependencies = [ - "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", + "base64 0.10.1", + "bitflags", + "serde", ] [[package]] name = "roots" version = "0.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4c67c712ab62be58b24ab8960e2b95dd4ee00aac115c76f2709657821fe376d" [[package]] name = "rouille" version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112568052ec17fa26c6c11c40acbb30d3ad244bf3d6da0be181f5e7e42e5004f" dependencies = [ - "base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", - "brotli2 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "chrono 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", - "deflate 0.7.20 (registry+https://github.com/rust-lang/crates.io-index)", - "filetime 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "multipart 0.15.4 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)", - "sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "term 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", - "threadpool 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "tiny_http 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", + "base64 0.9.3", + "brotli2", + "chrono", + "deflate", + "filetime", + "multipart", + "num_cpus", + "rand 0.5.6", + "serde", + "serde_derive", + "serde_json", + "sha1", + "term", + "threadpool", + "time", + "tiny_http", + "url 1.7.2", ] [[package]] -name = "rust-argon2" -version = "0.5.1" +name = "route-recognizer" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", - "blake2b_simd 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "ea509065eb0b3c446acdd0102f0d46567dc30902dc0be91d6552035d92b0f4f8" [[package]] name = "rust-argon2" version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "416f5109bdd413cec4f04c029297838e7604c993f8d1483b1d438f23bdc3eb35" dependencies = [ - "base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", - "blake2b_simd 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", - "constant_time_eq 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", + "base64 0.11.0", + "blake2b_simd", + "constant_time_eq", + "crossbeam-utils 0.6.6", +] + +[[package]] +name = "rust-argon2" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bc8af4bda8e1ff4932523b94d3dd20ee30a87232323eda55903ffd71d2fb017" +dependencies = [ + "base64 0.11.0", + "blake2b_simd", + "constant_time_eq", + "crossbeam-utils 0.7.2", ] [[package]] name = "rustc-demangle" version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" [[package]] name = "rustc-hash" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustc_version" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" dependencies = [ - "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", + "semver", ] [[package]] name = "rustls" version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0d4a31f5d68413404705d6982529b0e11a9aacd4839d1d6222ee3b8cb4015e1" dependencies = [ - "base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "ring 0.16.11 (registry+https://github.com/rust-lang/crates.io-index)", - "sct 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "webpki 0.21.2 (registry+https://github.com/rust-lang/crates.io-index)", + "base64 0.11.0", + "log 0.4.8", + "ring", + "sct", + "webpki", ] [[package]] name = "rustls-native-certs" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75ffeb84a6bd9d014713119542ce415db3a3e4748f0bfce1e1416cd224a23a5" dependencies = [ - "openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rustls 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)", - "schannel 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", - "security-framework 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "openssl-probe", + "rustls", + "schannel", + "security-framework", ] [[package]] name = "rusttype" version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "310942406a39981bed7e12b09182a221a29e0990f3e7e0c971f131922ed135d5" dependencies = [ - "rusttype 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rusttype 0.8.2", ] [[package]] name = "rusttype" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14a911032fb5791ccbeec9f28fdcb9bf0983b81f227bafdfd227c658d0731c8a" dependencies = [ - "approx 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "arrayvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)", - "ordered-float 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-hash 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "stb_truetype 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "approx 0.3.2", + "arrayvec 0.5.1", + "crossbeam-deque", + "crossbeam-utils 0.7.2", + "linked-hash-map", + "num_cpus", + "ordered-float", + "rustc-hash", + "stb_truetype", ] [[package]] name = "rusty-xinput" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2aa654bc32eb9ca14cce1a084abc9dfe43949a4547c35269a094c39272db3bb" dependencies = [ - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static", + "log 0.4.8", + "winapi 0.3.8", ] [[package]] name = "ryu" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa8506c1de11c9c4e4c38863ccbe02a305c8188e85a05a784c9e11e1c3910c8" [[package]] name = "safemem" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" [[package]] name = "same-file" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" dependencies = [ - "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-util", ] [[package]] name = "scan_fmt" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "248286eec0f55678879ef1caec3d76276643ebcb5460d8cb6e732ef40f50aabe" dependencies = [ - "regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "regex", ] [[package]] name = "schannel" version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "507a9e6e8ffe0a4e0ebb9a10293e62fdf7657c06f1b8bb07a8fcf697d2abf295" dependencies = [ - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static", + "winapi 0.3.8", ] [[package]] name = "scoped_threadpool" version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8" [[package]] name = "scopeguard" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "sct" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3042af939fca8c3453b7af0f1c66e533a15a86169e39de2657310ade8f98d3c" dependencies = [ - "ring 0.16.11 (registry+https://github.com/rust-lang/crates.io-index)", - "untrusted 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "ring", + "untrusted", ] [[package]] name = "sdl2" version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d051a07231e303f5f719da78cb6f7394f6d5b54f733aef5b0b447804a83edd7b" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "sdl2-sys 0.32.6 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "lazy_static", + "libc", + "num 0.1.42", + "rand 0.6.5", + "sdl2-sys", ] [[package]] name = "sdl2-sys" version = "0.32.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34e71125077d297d57e4c1acfe8981b5bdfbf5a20e7b589abfdcb33bf1127f86" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "libc", ] [[package]] name = "security-framework" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97bbedbe81904398b6ebb054b3e912f99d55807125790f3198ac990d98def5b0" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "core-foundation 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "security-framework-sys 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "core-foundation 0.7.0", + "core-foundation-sys 0.7.0", + "security-framework-sys", ] [[package]] name = "security-framework-sys" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06fd2f23e31ef68dd2328cc383bd493142e46107a3a0e24f7d734e3f3b80fe4c" dependencies = [ - "core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", + "core-foundation-sys 0.7.0", + "libc", ] [[package]] name = "semver" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" dependencies = [ - "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "semver-parser", ] [[package]] name = "semver-parser" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.102" +version = "1.0.105" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e707fbbf255b8fc8c3b99abb91e7257a622caeb20a9818cbadbeeede4e0932ff" dependencies = [ - "serde_derive 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.102" +version = "1.0.105" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac5d00fc561ba2724df6758a17de23df5914f20e41cb00f94d5b7ae42fffaff8" dependencies = [ - "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.9", + "quote 1.0.3", + "syn 1.0.16", ] [[package]] name = "serde_json" -version = "1.0.42" +version = "1.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9371ade75d4c2d6cb154141b9752cf3781ec9c05e0e5cf35060e1e70ee7b9c25" dependencies = [ - "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_qs" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d43eef44996bbe16e99ac720e1577eefa16f7b76b5172165c98ced20ae9903e1" +dependencies = [ + "data-encoding", + "error-chain", + "percent-encoding 1.0.1", + "serde", ] [[package]] name = "serde_urlencoded" version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ec5d77e2d4c73717816afac02670d5c4f534ea95ed430442cad02e7a6e32c97" dependencies = [ - "dtoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", - "url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "dtoa", + "itoa", + "serde", + "url 2.1.1", ] [[package]] name = "sha1" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" [[package]] name = "shared_library" version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a9e7e0f2bfae24d8a5b5a66c5b257a83c7412304311512a0c054cd5e619da11" dependencies = [ - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static", + "libc", ] [[package]] name = "shlex" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2" [[package]] name = "shred" version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92472b9bafafbcba21935c6444d924e5332742f6778c49504a49a97eaeff6ccc" dependencies = [ - "arrayvec 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "hashbrown 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", - "mopa 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rayon 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "shred-derive 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", + "arrayvec 0.4.12", + "hashbrown", + "mopa", + "rayon", + "shred-derive", + "smallvec 0.6.13", ] [[package]] name = "shred-derive" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1f37080f2751fbf091dbdebaa95bd6cf9dbf74ad1d50396b1908518a1747fdf" dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.9", + "quote 1.0.3", + "syn 1.0.16", ] [[package]] name = "shrev" version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5752e017e03af9d735b4b069f53b7a7fd90fefafa04d8bd0c25581b0bff437f" [[package]] name = "siphasher" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b8de496cf83d4ed58b6be86c3a275b8602f6ffe98d3024a869e124147a9a3ac" [[package]] name = "slab" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" [[package]] name = "smallvec" version = "0.6.13" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7b0758c52e15a8b5e3691eae6cc559f08eee9406e548a4477ba4e67770a82b6" dependencies = [ - "maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "maybe-uninit", ] [[package]] name = "smallvec" -version = "1.0.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c2fb2ec9bcd216a5b0d0ccf31ab17b5ed1d627960edff65bbe95d3ce221cefc" [[package]] name = "smithay-client-toolkit" version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ccb8c57049b2a34d2cc2b203fa785020ba0129d31920ef0d317430adaf748fa" dependencies = [ - "andrew 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "dlib 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "memmap 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "nix 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)", - "wayland-client 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", - "wayland-commons 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", - "wayland-protocols 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", + "andrew", + "bitflags", + "dlib", + "lazy_static", + "memmap", + "nix 0.14.1", + "wayland-client 0.21.13", + "wayland-commons 0.21.13", + "wayland-protocols 0.21.13", ] [[package]] name = "smithay-client-toolkit" -version = "0.6.4" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "421c8dc7acf5cb205b88160f8b4cc2c5cfabe210e43b2f80f009f4c1ef910f1d" dependencies = [ - "andrew 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "dlib 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "memmap 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "nix 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)", - "wayland-client 0.23.6 (registry+https://github.com/rust-lang/crates.io-index)", - "wayland-protocols 0.23.6 (registry+https://github.com/rust-lang/crates.io-index)", + "andrew", + "bitflags", + "dlib", + "lazy_static", + "memmap", + "nix 0.14.1", + "wayland-client 0.23.6", + "wayland-protocols 0.23.6", ] [[package]] name = "smithay-clipboard" -version = "0.3.6" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "917e8ec7f535cd1a6cbf749c8866c24d67c548a80ac48c8e88a182eab5c07bd1" dependencies = [ - "nix 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)", - "smithay-client-toolkit 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", + "nix 0.14.1", + "smithay-client-toolkit 0.6.6", ] [[package]] name = "specs" version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4943fde8c5d3d14c3d19d2a4c7abbd7b626c270a19e6cd35252294a48feb698c" dependencies = [ - "crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "derivative 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "hashbrown 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", - "hibitset 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "rayon 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", - "shred 0.9.4 (registry+https://github.com/rust-lang/crates.io-index)", - "shrev 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tuple_utils 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-queue 0.1.2", + "derivative", + "hashbrown", + "hibitset", + "log 0.4.8", + "rayon", + "serde", + "shred", + "shrev", + "tuple_utils", ] [[package]] @@ -3451,1437 +4231,1246 @@ name = "specs-idvs" version = "0.1.0" source = "git+https://gitlab.com/veloren/specs-idvs.git#111548cf44e9bb4c43feb12aa3fc253953ac6e4a" dependencies = [ - "specs 0.15.1 (registry+https://github.com/rust-lang/crates.io-index)", + "specs", ] [[package]] name = "spin" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] name = "stable_deref_trait" version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" [[package]] name = "static_assertions" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c19be23126415861cb3a23e501d34a708f7f9b2183c5252d690941c2e69199d5" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "stb_truetype" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f77b6b07e862c66a9f3e62a07588fee67cd90a9135a2b942409f195507b4fb51" dependencies = [ - "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.3.4", ] [[package]] name = "stdweb" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef5430c8e36b713e13b48a9f709cc21e046723fe44ce34587b73a830203b533e" [[package]] name = "stdweb" version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5" dependencies = [ - "discard 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)", - "stdweb-derive 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", - "stdweb-internal-macros 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)", - "stdweb-internal-runtime 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "discard", + "rustc_version", + "serde", + "serde_json", + "stdweb-derive", + "stdweb-internal-macros", + "stdweb-internal-runtime", + "wasm-bindgen", ] [[package]] name = "stdweb-derive" version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef" dependencies = [ - "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.9", + "quote 1.0.3", + "serde", + "serde_derive", + "syn 1.0.16", ] [[package]] name = "stdweb-internal-macros" version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11" dependencies = [ - "base-x 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)", - "sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)", + "base-x", + "proc-macro2 1.0.9", + "quote 1.0.3", + "serde", + "serde_derive", + "serde_json", + "sha1", + "syn 1.0.16", ] [[package]] name = "stdweb-internal-runtime" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" + +[[package]] +name = "string" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24114bfcceb867ca7f71a0d3fe45d45619ec47a6fbfa98cb14e14250bfa5d6d" +dependencies = [ + "bytes 0.4.12", +] + +[[package]] +name = "strsim" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" [[package]] name = "sum_type" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da5b4a0c9f3c7c8e891e445a7c776627e208e8bba23ab680798066dd283e6a15" [[package]] name = "svg_fmt" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20e5f95e89d737f30cd1f98a9af9a85c2a1cc162cfedfba5a0c54cf92d7206fc" [[package]] name = "syn" version = "0.13.11" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14f9bf6292f3a61d2c716723fdb789a41bbe104168e6f496dc6497e531ea1b9b" dependencies = [ - "proc-macro2 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.3.8", + "quote 0.5.2", + "unicode-xid 0.1.0", ] [[package]] name = "syn" version = "0.15.44" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.30", + "quote 0.6.13", + "unicode-xid 0.1.0", ] [[package]] name = "syn" -version = "1.0.8" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "123bd9499cfb380418d509322d7a6d52e5315f064fe4b3ad18a53d6b92c07859" dependencies = [ - "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.9", + "quote 1.0.3", + "unicode-xid 0.2.0", ] [[package]] name = "synstructure" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545" dependencies = [ - "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.9", + "quote 1.0.3", + "syn 1.0.16", + "unicode-xid 0.2.0", ] [[package]] name = "tempdir" version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8" dependencies = [ - "rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.4.6", + "remove_dir_all", ] [[package]] name = "term" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edd106a334b7657c10b7c540a0106114feadeb4dc314513e97df481d5d966f42" dependencies = [ - "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "dirs 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.3.4", + "dirs", + "winapi 0.3.8", ] [[package]] name = "termcolor" -version = "1.0.5" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb6bfa289a4d7c5766392812c0a1f4c1ba45afa1ad47803c11e1f407d846d75f" dependencies = [ - "wincolor 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-util", ] [[package]] name = "textwrap" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" dependencies = [ - "unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-width", ] [[package]] name = "thread_local" -version = "0.3.6" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" dependencies = [ - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static", ] [[package]] name = "threadpool" version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2f0c90a5f3459330ac8bc0d2f879c693bb7a2f59689c1083fc4ef83834da865" dependencies = [ - "num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus", +] + +[[package]] +name = "tide" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e619c99048ae107912703d0efeec4ff4fbff704f064e51d3eee614b28ea7b739" +dependencies = [ + "async-std", + "cookie", + "futures 0.3.4", + "http 0.1.21", + "http-service", + "http-service-hyper", + "log 0.4.8", + "mime 0.3.16", + "pin-project-lite", + "route-recognizer", + "serde", + "serde_json", + "serde_qs", ] [[package]] name = "tiff" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7b7c2cfc4742bd8a32f2e614339dd8ce30dbcf676bb262bd63a2327bc5df57d" dependencies = [ - "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "lzw 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "num-derive 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.3.4", + "lzw", + "num-derive", + "num-traits 0.2.11", ] [[package]] name = "time" version = "0.1.42" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f" dependencies = [ - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", + "redox_syscall", + "winapi 0.3.8", ] [[package]] name = "tiny_http" version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1661fa0a44c95d01604bd05c66732a446c657efb62b5164a7a083a3b552b4951" dependencies = [ - "ascii 0.8.7 (registry+https://github.com/rust-lang/crates.io-index)", - "chrono 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", - "chunked_transfer 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", + "ascii", + "chrono", + "chunked_transfer", + "log 0.4.8", + "url 1.7.2", ] [[package]] name = "tinytemplate" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57a3c6667d3e65eb1bc3aed6fd14011c6cbc3a0665218ab7f5daf040b9ec371a" dependencies = [ - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)", + "serde", + "serde_json", +] + +[[package]] +name = "tokio" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a09c0b5bb588872ab2f09afa13ee6e9dac11e10a0ec9e8e3ba39a5a5d530af6" +dependencies = [ + "bytes 0.4.12", + "futures 0.1.29", + "mio", + "num_cpus", + "tokio-current-thread", + "tokio-executor", + "tokio-io", + "tokio-reactor", + "tokio-threadpool", + "tokio-timer", ] [[package]] name = "tokio" version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa5e81d6bc4e67fe889d5783bd2a128ab2e0cfa487e0be16b6a8d177b101616" dependencies = [ - "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", - "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)", - "pin-project-lite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.5.4", + "fnv", + "iovec", + "lazy_static", + "memchr", + "mio", + "num_cpus", + "pin-project-lite", + "slab", +] + +[[package]] +name = "tokio-buf" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fb220f46c53859a4b7ec083e41dec9778ff0b1851c0942b211edb89e0ccdc46" +dependencies = [ + "bytes 0.4.12", + "either", + "futures 0.1.29", +] + +[[package]] +name = "tokio-current-thread" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1de0e32a83f131e002238d7ccde18211c0a5397f60cbfffcb112868c2e0e20e" +dependencies = [ + "futures 0.1.29", + "tokio-executor", +] + +[[package]] +name = "tokio-executor" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb2d1b8f4548dbf5e1f7818512e9c406860678f29c300cdf0ebac72d1a3a1671" +dependencies = [ + "crossbeam-utils 0.7.2", + "futures 0.1.29", +] + +[[package]] +name = "tokio-io" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674" +dependencies = [ + "bytes 0.4.12", + "futures 0.1.29", + "log 0.4.8", +] + +[[package]] +name = "tokio-reactor" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09bc590ec4ba8ba87652da2068d150dcada2cfa2e07faae270a5e0409aa51351" +dependencies = [ + "crossbeam-utils 0.7.2", + "futures 0.1.29", + "lazy_static", + "log 0.4.8", + "mio", + "num_cpus", + "parking_lot 0.9.0", + "slab", + "tokio-executor", + "tokio-io", + "tokio-sync", ] [[package]] name = "tokio-rustls" version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4adb8b3e5f86b707f1b54e7c15b6de52617a823608ccda98a15d3a24222f265a" dependencies = [ - "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rustls 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", - "webpki 0.21.2 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core", + "rustls", + "tokio 0.2.13", + "webpki", +] + +[[package]] +name = "tokio-sync" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edfe50152bc8164fcc456dab7891fa9bf8beaf01c5ee7e1dd43a397c3cf87dee" +dependencies = [ + "fnv", + "futures 0.1.29", +] + +[[package]] +name = "tokio-tcp" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98df18ed66e3b72e742f185882a9e201892407957e45fbff8da17ae7a7c51f72" +dependencies = [ + "bytes 0.4.12", + "futures 0.1.29", + "iovec", + "mio", + "tokio-io", + "tokio-reactor", +] + +[[package]] +name = "tokio-threadpool" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df720b6581784c118f0eb4310796b12b1d242a7eb95f716a8367855325c25f89" +dependencies = [ + "crossbeam-deque", + "crossbeam-queue 0.2.1", + "crossbeam-utils 0.7.2", + "futures 0.1.29", + "lazy_static", + "log 0.4.8", + "num_cpus", + "slab", + "tokio-executor", +] + +[[package]] +name = "tokio-timer" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93044f2d313c95ff1cb7809ce9a7a05735b012288a888b62d4434fd58c94f296" +dependencies = [ + "crossbeam-utils 0.7.2", + "futures 0.1.29", + "slab", + "tokio-executor", ] [[package]] name = "tokio-util" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "571da51182ec208780505a32528fc5512a8fe1443ab960b3f2f3ef093cd16930" dependencies = [ - "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-sink 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "pin-project-lite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.5.4", + "futures-core", + "futures-sink", + "log 0.4.8", + "pin-project-lite", + "tokio 0.2.13", ] [[package]] name = "toml" -version = "0.5.5" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffc92d160b1eef40665be3a05630d003936a3bc7da7421277846c2613e92c71a" dependencies = [ - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", + "serde", ] [[package]] name = "tower-service" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e987b6bf443f4b5b3b6f38704195592cca41c5bb7aedd3c3693c7081f8289860" [[package]] name = "treeculler" version = "0.1.0" source = "git+https://gitlab.com/yusdacra/treeculler.git#6c0fdf1c1cbf00be22e37410985d6a3973cd9bed" dependencies = [ - "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.11", ] [[package]] name = "try-lock" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" [[package]] name = "tuple_utils" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44834418e2c5b16f47bedf35c28e148db099187dd5feee6367fb2525863af4f1" [[package]] name = "twoway" version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59b11b2b5241ba34be09c3cc85a36e56e48f9888862e19cedf23336d35316ed1" dependencies = [ - "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr", ] [[package]] name = "unicase" version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33" dependencies = [ - "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "version_check 0.1.5", ] [[package]] name = "unicase" version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" dependencies = [ - "version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "version_check 0.9.1", ] [[package]] name = "unicode-bidi" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" dependencies = [ - "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "matches", ] [[package]] name = "unicode-normalization" -version = "0.1.11" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5479532badd04e128284890390c1e876ef7a993d0570b3597ae43dfa1d59afa4" dependencies = [ - "smallvec 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 1.2.0", ] [[package]] name = "unicode-width" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479" [[package]] name = "unicode-xid" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" [[package]] name = "unicode-xid" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" [[package]] name = "untrusted" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60369ef7a31de49bcb3f6ca728d4ba7300d9a1658f94c727d4cab8c8d9f4aece" [[package]] name = "url" version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" dependencies = [ - "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "idna 0.1.5", + "matches", + "percent-encoding 1.0.1", ] [[package]] name = "url" version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "829d4a8476c35c9bf0bbce5a3b23f4106f79728039b726d292bb93bc106787cb" dependencies = [ - "idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "idna 0.2.0", + "matches", + "percent-encoding 2.1.0", ] [[package]] name = "uuid" version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90dbc611eb48397705a6b0f6e917da23ae517e4d127123d2cf7674206627d32a" dependencies = [ - "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.6.5", + "serde", ] [[package]] name = "uuid" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fde2f6a4bea1d6e007c4ad38c6839fa71cbb63b6dbf5b595aa38dc9b1093c11" [[package]] name = "uvth" version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e59a167890d173eb0fcd7a1b99b84dc05c521ae8d76599130b8e19bef287abbf" dependencies = [ - "crossbeam-channel 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-channel 0.3.9", + "log 0.4.8", + "num_cpus", ] [[package]] name = "vcpkg" version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fc439f2794e98976c88a2a2dafce96b930fe8010b0a256b3c2199a773933168" [[package]] name = "vec_map" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" [[package]] name = "vek" -version = "0.9.11" +version = "0.9.12" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b833a133490ae98e9e3db1c77fc28e844f8e51b12eb35b4ab8a2082cb7cb441a" dependencies = [ - "approx 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", - "static_assertions 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", + "approx 0.1.1", + "num-integer", + "num-traits 0.1.43", + "rustc_version", + "static_assertions 0.2.5", +] + +[[package]] +name = "vek" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c98f7e1c1400d5b1704baee82cbc56a3fde406769555ead0f2306e43ebab967" +dependencies = [ + "approx 0.3.2", + "num-integer", + "num-traits 0.2.11", + "rustc_version", + "serde", + "static_assertions 1.1.0", ] [[package]] name = "veloren-chat-cli" version = "0.5.0" dependencies = [ - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "pretty_env_logger 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "veloren-client 0.5.0", - "veloren-common 0.5.0", + "log 0.4.8", + "pretty_env_logger", + "veloren-client", + "veloren-common", ] [[package]] name = "veloren-client" version = "0.5.0" dependencies = [ - "authc 1.0.0 (git+https://gitlab.com/veloren/auth.git?rev=65571ade0d954a0e0bd995fdb314854ff146ab97)", - "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "hashbrown 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", - "image 0.22.3 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)", - "specs 0.15.1 (registry+https://github.com/rust-lang/crates.io-index)", - "uvth 3.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "vek 0.9.11 (registry+https://github.com/rust-lang/crates.io-index)", - "veloren-common 0.5.0", - "veloren-world 0.5.0", + "authc", + "byteorder 1.3.4", + "hashbrown", + "image", + "log 0.4.8", + "num 0.2.1", + "num_cpus", + "specs", + "uvth", + "vek 0.10.0", + "veloren-common", + "veloren-world", ] [[package]] name = "veloren-common" version = "0.5.0" dependencies = [ - "authc 1.0.0 (git+https://gitlab.com/veloren/auth.git?rev=65571ade0d954a0e0bd995fdb314854ff146ab97)", - "bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "criterion 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "dot_vox 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "find_folder 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hashbrown 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", - "image 0.22.3 (registry+https://github.com/rust-lang/crates.io-index)", - "indexmap 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "lz4-compress 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", - "mio-extras 2.0.5 (registry+https://github.com/rust-lang/crates.io-index)", - "notify 5.0.0-pre.2 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rayon 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "ron 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)", - "specs 0.15.1 (registry+https://github.com/rust-lang/crates.io-index)", - "specs-idvs 0.1.0 (git+https://gitlab.com/veloren/specs-idvs.git)", - "sum_type 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "vek 0.9.11 (registry+https://github.com/rust-lang/crates.io-index)", + "authc", + "bincode", + "criterion", + "crossbeam", + "dot_vox", + "find_folder", + "hashbrown", + "image", + "indexmap", + "lazy_static", + "log 0.4.8", + "lz4-compress", + "mio", + "mio-extras", + "notify", + "parking_lot 0.9.0", + "rand 0.7.3", + "rayon", + "ron", + "serde", + "serde_derive", + "serde_json", + "specs", + "specs-idvs", + "sum_type", + "vek 0.10.0", ] [[package]] name = "veloren-server" version = "0.5.0" dependencies = [ - "authc 1.0.0 (git+https://gitlab.com/veloren/auth.git?rev=65571ade0d954a0e0bd995fdb314854ff146ab97)", - "chrono 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "hashbrown 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "portpicker 0.1.0 (git+https://github.com/wusyong/portpicker-rs?branch=fix_ipv6)", - "prometheus 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "prometheus-static-metric 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "ron 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rouille 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "scan_fmt 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", - "specs 0.15.1 (registry+https://github.com/rust-lang/crates.io-index)", - "specs-idvs 0.1.0 (git+https://gitlab.com/veloren/specs-idvs.git)", - "uvth 3.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "vek 0.9.11 (registry+https://github.com/rust-lang/crates.io-index)", - "veloren-common 0.5.0", - "veloren-world 0.5.0", + "authc", + "chrono", + "crossbeam", + "hashbrown", + "lazy_static", + "log 0.4.8", + "portpicker", + "prometheus", + "prometheus-static-metric", + "rand 0.7.3", + "ron", + "rouille", + "scan_fmt", + "serde", + "serde_derive", + "specs", + "specs-idvs", + "uvth", + "vek 0.10.0", + "veloren-common", + "veloren-world", ] [[package]] name = "veloren-server-cli" version = "0.5.0" dependencies = [ - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "pretty_env_logger 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "veloren-common 0.5.0", - "veloren-server 0.5.0", + "log 0.4.8", + "pretty_env_logger", + "veloren-common", + "veloren-server", ] [[package]] name = "veloren-voxygen" version = "0.5.0" dependencies = [ - "authc 1.0.0 (git+https://gitlab.com/veloren/auth.git?rev=65571ade0d954a0e0bd995fdb314854ff146ab97)", - "backtrace 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)", - "bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "chrono 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", - "conrod_core 0.63.0 (git+https://gitlab.com/veloren/conrod.git?branch=hide_text)", - "conrod_winit 0.63.0 (git+https://gitlab.com/veloren/conrod.git?branch=hide_text)", - "cpal 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "criterion 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "deunicode 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "directories 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "dispatch 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "dot_vox 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "euc 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "fern 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", - "gfx 0.18.2 (registry+https://github.com/rust-lang/crates.io-index)", - "gfx_device_gl 0.16.2 (registry+https://github.com/rust-lang/crates.io-index)", - "gfx_window_glutin 0.31.0 (registry+https://github.com/rust-lang/crates.io-index)", - "gilrs 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)", - "git2 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", - "glsl-include 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "glutin 0.21.1 (registry+https://github.com/rust-lang/crates.io-index)", - "guillotiere 0.4.2 (git+https://github.com/Imberflur/guillotiere)", - "hashbrown 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", - "image 0.22.3 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "msgbox 0.4.0 (git+https://github.com/bekker/msgbox-rs.git?rev=68fe39a)", - "num 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rodio 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "ron 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", - "specs 0.15.1 (registry+https://github.com/rust-lang/crates.io-index)", - "specs-idvs 0.1.0 (git+https://gitlab.com/veloren/specs-idvs.git)", - "treeculler 0.1.0 (git+https://gitlab.com/yusdacra/treeculler.git)", - "uvth 3.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "vek 0.9.11 (registry+https://github.com/rust-lang/crates.io-index)", - "veloren-client 0.5.0", - "veloren-common 0.5.0", - "veloren-server 0.5.0", - "veloren-world 0.5.0", - "winit 0.19.5 (registry+https://github.com/rust-lang/crates.io-index)", - "winres 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "authc", + "backtrace", + "bincode", + "chrono", + "conrod_core", + "conrod_winit", + "const-tweaker", + "cpal", + "criterion", + "crossbeam", + "deunicode", + "directories", + "dispatch", + "dot_vox", + "euc", + "failure", + "fern", + "gfx", + "gfx_device_gl", + "gfx_window_glutin", + "gilrs", + "git2", + "glsl-include", + "glutin", + "guillotiere", + "hashbrown", + "image", + "log 0.4.8", + "msgbox", + "num 0.2.1", + "rand 0.7.3", + "rodio", + "ron", + "serde", + "serde_derive", + "specs", + "specs-idvs", + "treeculler", + "uvth", + "vek 0.10.0", + "veloren-client", + "veloren-common", + "veloren-server", + "veloren-world", + "winit", + "winres", ] [[package]] name = "veloren-world" version = "0.5.0" dependencies = [ - "arr_macro 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "bitvec 0.15.2 (registry+https://github.com/rust-lang/crates.io-index)", - "hashbrown 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", - "image 0.22.3 (registry+https://github.com/rust-lang/crates.io-index)", - "itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "minifb 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)", - "noise 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "ordered-float 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "packed_simd 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "pretty_env_logger 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_chacha 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rayon 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "ron 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "roots 0.0.5 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", - "vek 0.9.11 (registry+https://github.com/rust-lang/crates.io-index)", - "veloren-common 0.5.0", + "arr_macro", + "bincode", + "bitvec", + "hashbrown", + "image", + "itertools", + "lazy_static", + "log 0.4.8", + "minifb", + "noise", + "num 0.2.1", + "ordered-float", + "packed_simd", + "pretty_env_logger", + "rand 0.7.3", + "rand_chacha 0.2.2", + "rayon", + "ron", + "roots", + "serde", + "serde_derive", + "vek 0.10.0", + "veloren-common", ] [[package]] name = "version_check" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" [[package]] name = "version_check" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "078775d0255232fb988e6fccf26ddc9d1ac274299aaedcedce21c6f72cc533ce" [[package]] name = "void" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" [[package]] name = "walkdir" -version = "2.2.9" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d" dependencies = [ - "same-file 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "same-file", + "winapi 0.3.8", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6395efa4784b027708f7451087e647ec73cc74f5d9bc2e418404248d679a230" +dependencies = [ + "futures 0.1.29", + "log 0.4.8", + "try-lock", ] [[package]] name = "want" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" dependencies = [ - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8", + "try-lock", ] [[package]] name = "wasi" -version = "0.7.0" +version = "0.9.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" [[package]] name = "wasm-bindgen" version = "0.2.59" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3557c397ab5a8e347d434782bcd31fc1483d927a6826804cec05cc792ee2519d" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen-macro 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "serde", + "serde_json", + "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" version = "0.2.59" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0da9c9a19850d3af6df1cb9574970b566d617ecfaf36eb0b706b6f3ef9bd2f8" dependencies = [ - "bumpalo 3.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen-shared 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "bumpalo", + "lazy_static", + "log 0.4.8", + "proc-macro2 1.0.9", + "quote 1.0.3", + "syn 1.0.16", + "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "457414a91863c0ec00090dba537f88ab955d93ca6555862c29b6d860990b8a8a" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "js-sys 0.3.36 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", - "web-sys 0.3.36 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", ] [[package]] name = "wasm-bindgen-macro" version = "0.2.59" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f6fde1d36e75a714b5fe0cffbb78978f222ea6baebb726af13c78869fdb4205" dependencies = [ - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen-macro-support 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3", + "wasm-bindgen-macro-support", ] [[package]] name = "wasm-bindgen-macro-support" version = "0.2.59" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25bda4168030a6412ea8a047e27238cadf56f0e53516e1e83fec0a8b7c786f6d" dependencies = [ - "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen-backend 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen-shared 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.9", + "quote 1.0.3", + "syn 1.0.16", + "wasm-bindgen-backend", + "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" version = "0.2.59" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc9f36ad51f25b0219a3d4d13b90eb44cd075dff8b6280cca015775d7acaddd8" [[package]] name = "wayland-client" version = "0.21.13" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49963e5f9eeaf637bfcd1b9f0701c99fd5cd05225eb51035550d4272806f2713" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "downcast-rs 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "nix 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)", - "wayland-commons 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", - "wayland-scanner 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", - "wayland-sys 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "downcast-rs", + "libc", + "nix 0.14.1", + "wayland-commons 0.21.13", + "wayland-scanner 0.21.13", + "wayland-sys 0.21.13", ] [[package]] name = "wayland-client" version = "0.23.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1080ebe0efabcf12aef2132152f616038f2d7dcbbccf7b2d8c5270fe14bcda" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "downcast-rs 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "nix 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)", - "wayland-commons 0.23.6 (registry+https://github.com/rust-lang/crates.io-index)", - "wayland-scanner 0.23.6 (registry+https://github.com/rust-lang/crates.io-index)", - "wayland-sys 0.23.6 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "downcast-rs", + "libc", + "nix 0.14.1", + "wayland-commons 0.23.6", + "wayland-scanner 0.23.6", + "wayland-sys 0.23.6", ] [[package]] name = "wayland-commons" version = "0.21.13" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40c08896768b667e1df195d88a62a53a2d1351a1ed96188be79c196b35bb32ec" dependencies = [ - "nix 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)", - "wayland-sys 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", + "nix 0.14.1", + "wayland-sys 0.21.13", ] [[package]] name = "wayland-commons" version = "0.23.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb66b0d1a27c39bbce712b6372131c6e25149f03ffb0cd017cf8f7de8d66dbdb" dependencies = [ - "nix 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)", - "wayland-sys 0.23.6 (registry+https://github.com/rust-lang/crates.io-index)", + "nix 0.14.1", + "wayland-sys 0.23.6", ] [[package]] name = "wayland-protocols" version = "0.21.13" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4afde2ea2a428eee6d7d2c8584fdbe8b82eee8b6c353e129a434cd6e07f42145" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "wayland-client 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", - "wayland-commons 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", - "wayland-scanner 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", - "wayland-sys 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "wayland-client 0.21.13", + "wayland-commons 0.21.13", + "wayland-scanner 0.21.13", + "wayland-sys 0.21.13", ] [[package]] name = "wayland-protocols" version = "0.23.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6cc286643656742777d55dc8e70d144fa4699e426ca8e9d4ef454f4bf15ffcf9" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "wayland-client 0.23.6 (registry+https://github.com/rust-lang/crates.io-index)", - "wayland-commons 0.23.6 (registry+https://github.com/rust-lang/crates.io-index)", - "wayland-scanner 0.23.6 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "wayland-client 0.23.6", + "wayland-commons 0.23.6", + "wayland-scanner 0.23.6", ] [[package]] name = "wayland-scanner" version = "0.21.13" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf3828c568714507315ee425a9529edc4a4aa9901409e373e9e0027e7622b79e" dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "xml-rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.30", + "quote 0.6.13", + "xml-rs", ] [[package]] name = "wayland-scanner" version = "0.23.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93b02247366f395b9258054f964fe293ddd019c3237afba9be2ccbe9e1651c3d" dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "xml-rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.30", + "quote 0.6.13", + "xml-rs", ] [[package]] name = "wayland-sys" version = "0.21.13" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520ab0fd578017a0ee2206623ba9ef4afe5e8f23ca7b42f6acfba2f4e66b1628" dependencies = [ - "dlib 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "dlib", + "lazy_static", ] [[package]] name = "wayland-sys" version = "0.23.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d94e89a86e6d6d7c7c9b19ebf48a03afaac4af6bc22ae570e9a24124b75358f4" dependencies = [ - "dlib 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "dlib", + "lazy_static", ] [[package]] name = "web-sys" version = "0.3.36" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "721c6263e2c66fd44501cc5efbfa2b7dfa775d13e4ea38c46299646ed1f9c70a" dependencies = [ - "js-sys 0.3.36 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)", + "js-sys", + "wasm-bindgen", ] [[package]] name = "webpki" version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1f50e1972865d6b1adb54167d1c8ed48606004c2c9d0ea5f1eeb34d95e863ef" dependencies = [ - "ring 0.16.11 (registry+https://github.com/rust-lang/crates.io-index)", - "untrusted 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "ring", + "untrusted", ] [[package]] name = "webpki-roots" version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91cd5736df7f12a964a5067a12c62fa38e1bd8080aff1f80bc29be7c80d19ab4" dependencies = [ - "webpki 0.21.2 (registry+https://github.com/rust-lang/crates.io-index)", + "webpki", ] [[package]] name = "winapi" version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" [[package]] name = "winapi" version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" dependencies = [ - "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", ] [[package]] name = "winapi-build" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" [[package]] name = "winapi-i686-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ccfbf554c6ad11084fb7517daca16cfdcaccbdadba4fc336f032a8b12c2ad80" dependencies = [ - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8", ] [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "wincolor" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "winit" version = "0.19.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e96eb4bb472fa43e718e8fa4aef82f86cd9deac9483a1e1529230babdb394a8" dependencies = [ - "android_glue 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "backtrace 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)", - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "cocoa 0.18.5 (registry+https://github.com/rust-lang/crates.io-index)", - "core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", - "core-graphics 0.17.3 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", - "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "raw-window-handle 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", - "smithay-client-toolkit 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "wayland-client 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", - "x11-dl 2.18.4 (registry+https://github.com/rust-lang/crates.io-index)", + "android_glue", + "backtrace", + "bitflags", + "cocoa 0.18.5", + "core-foundation 0.6.4", + "core-graphics", + "lazy_static", + "libc", + "log 0.4.8", + "objc", + "parking_lot 0.9.0", + "percent-encoding 2.1.0", + "raw-window-handle", + "serde", + "smithay-client-toolkit 0.4.6", + "wayland-client 0.21.13", + "winapi 0.3.8", + "x11-dl", ] [[package]] name = "winreg" version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9" dependencies = [ - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8", ] [[package]] name = "winres" version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff4fb510bbfe5b8992ff15f77a2e6fe6cf062878f0eda00c0f44963a807ca5dc" dependencies = [ - "toml 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", + "toml", ] [[package]] name = "ws2_32-sys" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" dependencies = [ - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8", + "winapi-build", ] [[package]] name = "x11-clipboard" -version = "0.3.3" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5e937afd03b64b7be4f959cc044e09260a47241b71e56933f37db097bf7859d" dependencies = [ - "xcb 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", + "xcb", ] [[package]] name = "x11-dl" -version = "2.18.4" +version = "2.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf981e3a5b3301209754218f962052d4d9ee97e478f4d26d4a6eced34c1fef8" dependencies = [ - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static", + "libc", + "maybe-uninit", + "pkg-config", ] [[package]] name = "xcb" -version = "0.8.2" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62056f63138b39116f82a540c983cc11f1c90cd70b3d492a70c25eaa50bd22a6" dependencies = [ - "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", + "log 0.4.8", ] [[package]] name = "xdg" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d089681aa106a86fade1b0128fb5daf07d5867a509ab036d99988dec80429a57" [[package]] name = "xml-rs" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" - -[metadata] -"checksum adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5d2e7343e7fc9de883d1b0341e0b13970f764c14101234857d2ddafa1cb1cac2" -"checksum ahash 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "6f33b5018f120946c1dcf279194f238a9f146725593ead1c08fa47ff22b0b5d3" -"checksum aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "58fb5e95d83b38284460a5fda7d6470aa0b8844d283a0b614b8535e880800d2d" -"checksum alsa-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b0edcbbf9ef68f15ae1b620f722180b82a98b6f0628d30baa6b8d2a5abc87d58" -"checksum andrew 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9b7f09f89872c2b6b29e319377b1fbe91c6f5947df19a25596e121cf19a7b35e" -"checksum android_glue 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "000444226fcff248f2bc4c7625be32c63caccfecc2723a2b9f78a7487a49c407" -"checksum anymap 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "33954243bd79057c2de7338850b85983a44588021f8a5fee574a8888c6de4344" -"checksum approx 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "08abcc3b4e9339e33a3d0a5ed15d84a687350c05689d825e0f6655eef9e76a94" -"checksum approx 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f0e60b75072ecd4168020818c0107f2857bb6c4e64252d8d3983f6263b40a5c3" -"checksum arr_macro 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6a105bfda48707cf19220129e78fca01e9639433ffaef4163546ed8fb04120a5" -"checksum arr_macro_impl 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0609c78bd572f4edc74310dfb63a01f5609d53fa8b4dd7c4d98aef3b3e8d72d1" -"checksum arrayref 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "0d382e583f07208808f6b1249e60848879ba3543f57c32277bf52d69c2f0f0ee" -"checksum arrayvec 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9" -"checksum arrayvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cff77d8686867eceff3105329d4698d96c2391c176d5d03adc90c7389162b5b8" -"checksum ascii 0.8.7 (registry+https://github.com/rust-lang/crates.io-index)" = "97be891acc47ca214468e09425d02cef3af2c94d0d82081cd02061f996802f14" -"checksum atk-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f8dc233521f7bffd3042c31082ea71bd08820abf44bac938fb36591e20f76f39" -"checksum atom 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "3c86699c3f02778ec07158376991c8f783dd1f2f95c579ffaf0738dc984b2fe2" -"checksum atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "1803c647a3ec87095e7ae7acfca019e98de5ec9a7d01343f611cf3152ed71a90" -"checksum auth-common 0.1.0 (git+https://gitlab.com/veloren/auth.git?rev=65571ade0d954a0e0bd995fdb314854ff146ab97)" = "" -"checksum authc 1.0.0 (git+https://gitlab.com/veloren/auth.git?rev=65571ade0d954a0e0bd995fdb314854ff146ab97)" = "" -"checksum autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2" -"checksum autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d" -"checksum backtrace 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)" = "924c76597f0d9ca25d762c25a4d369d51267536465dc5064bdf0eb073ed477ea" -"checksum backtrace-sys 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)" = "5d6575f128516de27e3ce99689419835fce9643a9b215a14d2b5b685be018491" -"checksum base-x 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "1b20b618342cf9891c292c4f5ac2cde7287cc5c87e87e9c769d617793607dec1" -"checksum base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e" -"checksum base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" -"checksum base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643" -"checksum bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b8ab639324e3ee8774d296864fbc0dbbb256cf1a41c490b94cba90c082915f92" -"checksum bindgen 0.51.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ebd71393f1ec0509b553aa012b9b58e81dadbdff7130bd3b8cba576e69b32f75" -"checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" -"checksum bitvec 0.15.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a993f74b4c99c1908d156b8d2e0fb6277736b0ecbd833982fd1241d39b2766a6" -"checksum blake2b_simd 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b83b7baab1e671718d78204225800d6b170e648188ac7dc992e9d6bddf87d0c0" -"checksum block 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" -"checksum brotli-sys 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4445dea95f4c2b41cde57cc9fee236ae4dbae88d8fcbdb4750fc1bb5d86aaecd" -"checksum brotli2 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0cb036c3eade309815c15ddbacec5b22c4d1f3983a774ab2eac2e3e9ea85568e" -"checksum bstr 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8d6c2c5b58ab920a4f5aeaaca34b4488074e8cc7596af94e6f8c6ff247c60245" -"checksum buf_redux 0.8.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b953a6887648bb07a535631f2bc00fbdb2a2216f135552cb3f534ed136b9c07f" -"checksum bumpalo 3.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1f359dc14ff8911330a51ef78022d376f25ed00248912803b58f00cb1c27f742" -"checksum byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0fc10e8cc6b2580fda3f36eb6dc5316657f812a3df879a44a66fc9f0fdbc4855" -"checksum byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5" -"checksum bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)" = "130aac562c0dd69c56b3b1cc8ffd2e17be31d0b6c25b61c96b76231aa23e39e1" -"checksum c2-chacha 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "214238caa1bf3a496ec3392968969cab8549f96ff30652c9e56885329315f6bb" -"checksum c_vec 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "f8a318911dce53b5f1ca6539c44f5342c632269f0fa7ea3e35f32458c27a7c30" -"checksum cairo-rs 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a110f269c2fd382df5fe8bd46dfa5f1b83608aa717fecb6e7a28c08c202f0e13" -"checksum cairo-sys-rs 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0395175ecba60accac076a02c31d143b9dcd9d5eb5316d7163a3273803b765c7" -"checksum cast 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4b9434b9a5aa1450faa3f9cb14ea0e8c53bb5d2b3c1bfd1ab4fc03e9f33fbfb0" -"checksum cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)" = "aa87058dce70a3ff5621797f1506cb837edd02ac4c0ae642b4542dce802908b8" -"checksum cexpr 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "fce5b5fb86b0c57c20c834c1b412fd09c77c8a59b9473f86272709e78874cd1d" -"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" -"checksum cgl 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "55e7ec0b74fe5897894cbc207092c577e87c52f8a59e8ca8d97ef37551f60a49" -"checksum chashmap 2.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ff41a3c2c1e39921b9003de14bf0439c7b63a9039637c291e1a64925d8ddfa45" -"checksum chrono 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "31850b4a4d6bae316f7a09e691c944c28299298837edc0a03f755618c23cbc01" -"checksum chunked_transfer 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "498d20a7aaf62625b9bf26e637cf7736417cde1d0c99f1d04d1170229a85cf87" -"checksum clang-sys 0.28.1 (registry+https://github.com/rust-lang/crates.io-index)" = "81de550971c976f176130da4b2978d3b524eaa0fd9ac31f3ceb5ae1231fb4853" -"checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9" -"checksum clipboard-win 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e3a093d6fed558e5fe24c3dfc85a68bb68f1c824f440d3ba5aca189e2998786b" -"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" -"checksum cocoa 0.18.5 (registry+https://github.com/rust-lang/crates.io-index)" = "1706996401131526e36b3b49f0c4d912639ce110996f3ca144d78946727bce54" -"checksum cocoa 0.19.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f29f7768b2d1be17b96158e3285951d366b40211320fb30826a76cb7a0da6400" -"checksum color_quant 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0dbbb57365263e881e805dc77d94697c9118fd94d8da011240555aa7b23445bd" -"checksum colored 1.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "433e7ac7d511768127ed85b0c4947f47a254131e37864b2dc13f52aa32cd37e5" -"checksum conrod_core 0.63.0 (git+https://gitlab.com/veloren/conrod.git?branch=hide_text)" = "" -"checksum conrod_derive 0.63.0 (git+https://gitlab.com/veloren/conrod.git?branch=hide_text)" = "" -"checksum conrod_winit 0.63.0 (git+https://gitlab.com/veloren/conrod.git?branch=hide_text)" = "" -"checksum const-random 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7b641a8c9867e341f3295564203b1c250eb8ce6cb6126e007941f78c4d2ed7fe" -"checksum const-random-macro 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c750ec12b83377637110d5a57f5ae08e895b06c4b16e2bdbf1a94ef717428c59" -"checksum constant_time_eq 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "995a44c877f9212528ccc74b21a232f66ad69001e40ede5bcee2ac9ef2657120" -"checksum copypasta 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3fe78fc904c59791fc39ba6ed427d45c1cd81529f5496552c3e10dab17b37409" -"checksum core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "25b9e03f145fd4f2bf705e07b900cd41fc636598fe5dc452fd0db1441c3f496d" -"checksum core-foundation 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" -"checksum core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b" -"checksum core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" -"checksum core-graphics 0.17.3 (registry+https://github.com/rust-lang/crates.io-index)" = "56790968ab1c8a1202a102e6de05fc6e1ec87da99e4e93e9a7d13efbfc1e95a9" -"checksum coreaudio-rs 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f229761965dad3e9b11081668a6ea00f1def7aa46062321b5ec245b834f6e491" -"checksum coreaudio-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7e8f5954c1c7ccb55340443e8b29fca24013545a5e7d72c1ca7db4fc02b982ce" -"checksum cpal 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3ded070249be850b5b59e1e3a44a70b8ae395e0e5c65b487131d8909a8208120" -"checksum crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1" -"checksum criterion 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "938703e165481c8d612ea3479ac8342e5615185db37765162e762ec3523e2fc6" -"checksum criterion-plot 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "eccdc6ce8bbe352ca89025bee672aa6d24f4eb8c53e3a8b5d1bc58011da072a2" -"checksum crossbeam 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2d818a4990769aac0c7ff1360e233ef3a41adcb009ebb2036bf6915eb0f6b23c" -"checksum crossbeam-channel 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "c8ec7fcd21571dc78f96cc96243cab8d8f035247c3efd16c687be154c3fa9efa" -"checksum crossbeam-channel 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "acec9a3b0b3559f15aee4f90746c4e5e293b701c0f7d3925d24e01645267b68c" -"checksum crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c3aa945d63861bfe624b55d153a39684da1e8c0bc8fba932f7ee3a3c16cea3ca" -"checksum crossbeam-epoch 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "fedcd6772e37f3da2a9af9bf12ebe046c0dfe657992377b4df982a2b54cd37a9" -"checksum crossbeam-epoch 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5064ebdbf05ce3cb95e45c8b086f72263f4166b29b97f6baff7ef7fe047b55ac" -"checksum crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7c979cd6cfe72335896575c6b5688da489e420d36a27a0b9eb0c73db574b4a4b" -"checksum crossbeam-queue 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "dfd6515864a82d2f877b42813d4553292c6659498c9a2aa31bab5a15243c2700" -"checksum crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "04973fa96e96579258a5091af6003abde64af786b860f18622b82e026cca60e6" -"checksum crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ce446db02cdc3165b94ae73111e570793400d0794e46125cc4056c81cbb039f4" -"checksum csv 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "37519ccdfd73a75821cac9319d4fce15a81b9fcf75f951df5b9988aa3a0af87d" -"checksum csv-core 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "9b5cadb6b25c77aeff80ba701712494213f4a8418fcda2ee11b6560c3ad0bf4c" -"checksum ct-logs 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4d3686f5fa27dbc1d76c751300376e167c5a43387f44bb451fd1c24776e49113" -"checksum daggy 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9293a0da7d1bc1f30090ece4d9f9de79a07be7302ddb00e5eb1fefb6ee6409e2" -"checksum deflate 0.7.20 (registry+https://github.com/rust-lang/crates.io-index)" = "707b6a7b384888a70c8d2e8650b3e60170dfc6a67bb4aa67b6dfca57af4bedb4" -"checksum derivative 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "942ca430eef7a3806595a6737bc388bf51adb888d3fc0dd1b50f1c170167ee3a" -"checksum deunicode 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ca8a0f5bbdedde60605d0719b998e282af68e2b1c50203110211fe4abe857560" -"checksum directories 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "551a778172a450d7fc12e629ca3b0428d00f6afa9a43da1b630d54604e97371c" -"checksum dirs 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "3fd78930633bd1c6e35c4b42b1df7b0cbc6bc191146e512bb3bedf243fcc3901" -"checksum dirs-sys 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "afa0b23de8fd801745c471deffa6e12d248f962c9fd4b4c33787b055599bde7b" -"checksum discard 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" -"checksum dispatch 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "04e93ca78226c51902d7aa8c12c988338aadd9e85ed9c6be8aaac39192ff3605" -"checksum dlib 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "77e51249a9d823a4cb79e3eca6dcd756153e8ed0157b6c04775d04bf1b13b76a" -"checksum dot_vox 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "11afd3251e588f2770226659b2a1d55ec2f8aaf2ca42bdcdbd01ff53b4a81e70" -"checksum downcast-rs 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "52ba6eb47c2131e784a38b726eb54c1e1484904f013e576a25354d0124161af6" -"checksum draw_state 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "33cf9537e2d06891448799b96d5a8c8083e0e90522a7fdabe6ebf4f41d79d651" -"checksum dtoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "4358a9e11b9a09cf52383b451b49a169e8d797b68aa02301ff586d70d9661ea3" -"checksum either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3" -"checksum encoding_rs 0.8.22 (registry+https://github.com/rust-lang/crates.io-index)" = "cd8d03faa7fe0c1431609dfad7bbe827af30f82e1e2ae6f7ee4fca6bd764bc28" -"checksum env_logger 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "aafcde04e90a5226a6443b7aabdb016ba2f8307c847d524724bd9b346dd1a2d3" -"checksum euc 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c20f6684a8420df7c300a36bed7cb0b2387b2bc385d4940282399b5df0c08ebd" -"checksum euclid 0.19.9 (registry+https://github.com/rust-lang/crates.io-index)" = "596b99621b9477e7a5f94d2d8dd13a9c5c302ac358b822c67a42b6f1054450e1" -"checksum euclid_macros 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fdcb84c18ea5037a1c5a23039b4ff29403abce2e0d6b1daa11cf0bde2b30be15" -"checksum failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "f8273f13c977665c5db7eb2b99ae520952fe5ac831ae4cd09d80c4c7042b5ed9" -"checksum failure_derive 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0bc225b78e0391e4b8683440bf2e63c2deeeb2ce5189eab46e2b68c6d3725d08" -"checksum fern 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e69ab0d5aca163e388c3a49d284fed6c3d0810700e77c5ae2756a50ec1a4daaa" -"checksum filetime 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "1ff6d4dab0aa0c8e6346d46052e93b13a16cf847b54ed357087c35011048cc7d" -"checksum find_folder 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9f6d018fb95a0b59f854aed68ecd96ce2b80af7911b92b1fed3c4b1fa516b91b" -"checksum fixedbitset 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "86d4de0081402f5e88cdac65c8dcdcc73118c1a7a465e2a05f0da05843a8ea33" -"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" -"checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -"checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" -"checksum fsevent 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1616e68919f49d311720c3cf316e0a3522d8f2bd08f8da35f6b8a0fa12f9234b" -"checksum fsevent-sys 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a41f1722e9bf862f62429d192f37d0c82c589aa18783aa06f0c4e5c3c90649fb" -"checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" -"checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" -"checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" -"checksum futures-channel 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f0c77d04ce8edd9cb903932b608268b3fffec4163dc053b3b402bf47eac1f1a8" -"checksum futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f25592f769825e89b92358db00d26f965761e094951ac44d3663ef25b7ac464a" -"checksum futures-io 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a638959aa96152c7a4cddf50fcb1e3fede0583b27157c26e67d6f99904090dc6" -"checksum futures-macro 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "9a5081aa3de1f7542a794a397cde100ed903b0630152d0973479018fd85423a7" -"checksum futures-sink 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "3466821b4bc114d95b087b850a724c6f83115e929bc88f1fa98a3304a944c8a6" -"checksum futures-task 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "7b0a34e53cf6cdcd0178aa573aed466b646eb3db769570841fda0c7ede375a27" -"checksum futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "22766cf25d64306bedf0384da004d05c9974ab104fcc4528f1236181c18004c5" -"checksum fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -"checksum gdk 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "dd30051ff3d908ff2fc7e5776ffe1c699821e043809f294c3a61004f11d6c3a9" -"checksum gdk-pixbuf 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c2d2199eba47ebcb9977ce28179649bdd59305ef465c4e6f9b65aaa41c24e6b5" -"checksum gdk-pixbuf-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "df6a3b73e04fafc07f5ebc083f1096a773412e627828e1103a55e921f81187d8" -"checksum gdk-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3162ff940526ddff71bf1f630facee6b5e05d282d125ba0c4c803842819b80c3" -"checksum getrandom 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "e7db7ca94ed4cd01190ceee0d8a8052f08a247aa1b469a7f68c6a3b71afcf407" -"checksum gfx 0.18.2 (registry+https://github.com/rust-lang/crates.io-index)" = "01de46f9508a5c259aef105f0bff760ceddca832ea9c87ce03d1923e22ee155b" -"checksum gfx_core 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "75fbddaef2e12b4995900539d7209d947b988a3d87ee8737484d049b526e5441" -"checksum gfx_device_gl 0.16.2 (registry+https://github.com/rust-lang/crates.io-index)" = "109c385fa380c18888633aa27d1e16cbae518469702a2f69dcb5f52d5378bebc" -"checksum gfx_gl 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8525888d909a6424b04f9136976f07a85fc1f3704555c1a73897e258326c8319" -"checksum gfx_window_glutin 0.31.0 (registry+https://github.com/rust-lang/crates.io-index)" = "310ff66f08b5a55854b18fea2f48bdbb75c94458207ba574c9723be78e97a646" -"checksum gif 0.10.3 (registry+https://github.com/rust-lang/crates.io-index)" = "471d90201b3b223f3451cd4ad53e34295f16a1df17b1edf3736d47761c3981af" -"checksum gilrs 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)" = "122bb249f904e5f4ac73fc514b9b2ce6cce3af511f5df00ffc8000e47de6b290" -"checksum gilrs-core 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6bdd4ea2d919ecb594362fa26b0f172729b9ee9b95e407fbad95e0a49cadc143" -"checksum gio 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2db9fad8f1b0d4c7338a210a6cbdf081dcc1a3c223718c698c4f313f6c288acb" -"checksum gio-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2a57872499171d279f8577ce83837da4cae62b08dd32892236ed67ab7ea61030" -"checksum git2 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7c1af51ea8a906616af45a4ce78eacf25860f7a13ae7bf8a814693f0f4037a26" -"checksum gl_generator 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "39a23d5e872a275135d66895d954269cf5e8661d234eb1c2480f4ce0d586acbd" -"checksum gl_generator 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ca98bbde17256e02d17336a6bdb5a50f7d0ccacee502e191d3e3d0ec2f96f84a" -"checksum gleam 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)" = "cae10d7c99d0e77b4766e850a60898a17c1abaf01075531f1066f03dc7dc5fc5" -"checksum glib 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5e0be1b1432e227bcd1a9b28db9dc1474a7e7fd4227e08e16f35304f32d09b61" -"checksum glib-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "615bef979b5838526aee99241afc80cfb2e34a8735d4bcb8ec6072598c18a408" -"checksum glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" -"checksum glsl-include 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "daa2afb1631e7ab4543e0dde0e3fc68bb49c58fee89c07f30a26553b1f684ab6" -"checksum glutin 0.21.1 (registry+https://github.com/rust-lang/crates.io-index)" = "938ce7a2b1bbfe1535166133bea3f9c1b46350d2794b49561303575e9e1b9949" -"checksum glutin_egl_sys 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "772edef3b28b8ad41e4ea202748e65eefe8e5ffd1f4535f1219793dbb20b3d4c" -"checksum glutin_emscripten_sys 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "245b3fdb08df6ffed7585365851f8404af9c7e2dd4b59f15262e968b6a95a0c7" -"checksum glutin_gles2_sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "89996c30857ae1b4de4b5189abf1ea822a20a9fe9e1c93e5e7b862ff0bdd5cdf" -"checksum glutin_glx_sys 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "1290a5ca5e46fcfa7f66f949cc9d9194b2cb6f2ed61892c8c2b82343631dba57" -"checksum glutin_wgl_sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "f801bbc91efc22dd1c4818a47814fc72bf74d024510451b119381579bfa39021" -"checksum gobject-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "70409d6405db8b1591602fcd0cbe8af52cd9976dd39194442b4c149ba343f86d" -"checksum gtk 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d695d6be4110618a97c19cd068e8a00e53e33b87e3c65cdc5397667498b1bc24" -"checksum gtk-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3d9554cf5b3a85a13fb39258c65b04b262989c1d7a758f8f555b77a478621a91" -"checksum guillotiere 0.4.2 (git+https://github.com/Imberflur/guillotiere)" = "" -"checksum gzip-header 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0131feb3d3bb2a5a238d8a4d09f6353b7ebfdc52e77bccbf4ea6eaa751dde639" -"checksum h2 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9d5c295d1c0c68e4e42003d75f908f5e16a1edd1cbe0b0d02e4dc2006a384f47" -"checksum hashbrown 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8e6073d0ca812575946eb5f35ff68dbe519907b25c42530389ff946dc84c6ead" -"checksum hermit-abi 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "307c3c9f937f38e3534b1d6447ecf090cafcc9744e4a6360e8b037b2cf5af120" -"checksum hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "805026a5d0141ffc30abb3be3173848ad46a1b1664fe632428479619a3644d77" -"checksum hibitset 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "47e7292fd9f7fe89fa35c98048f2d0a69b79ed243604234d18f6f8a1aa6f408d" -"checksum hound 3.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8a164bb2ceaeff4f42542bdb847c41517c78a60f5649671b2a07312b6e117549" -"checksum http 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b708cc7f06493459026f53b9a61a7a121a5d1ec6238dee58ea4941132b30156b" -"checksum http-body 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "13d5ff830006f7646652e057693569bfe0d51760c0085a071769d142a205111b" -"checksum httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9" -"checksum humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f" -"checksum hyper 0.13.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e7b15203263d1faa615f9337d79c1d37959439dc46c2b4faab33286fadc2a1c5" -"checksum hyper-rustls 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac965ea399ec3a25ac7d13b8affd4b8f39325cca00858ddf5eb29b79e6b14b08" -"checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" -"checksum idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9" -"checksum image 0.22.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b4be8aaefbe7545dc42ae925afb55a0098f226a3fe5ef721872806f44f57826" -"checksum indexmap 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712d7b3ea5827fcb9d4fda14bf4da5f136f0db2ae9c8f4bd4e2d1c6fde4e6db2" -"checksum inflate 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "1cdb29978cc5797bd8dcc8e5bf7de604891df2a8dc576973d71a281e916db2ff" -"checksum inotify 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bc39ee997811267bf8aa0b10e1674c5bea6caacc1957eede5ea45251fe33c6d5" -"checksum inotify-sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e74a1aa87c59aeff6ef2cc2fa62d41bc43f54952f55652656b18a02fd5e356c0" -"checksum instant 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6c346c299e3fe8ef94dc10c2c0253d858a69aac1245157a3bf4125915d528caf" -"checksum io-kit-sys 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f21dcc74995dd4cd090b147e79789f8d65959cbfb5f0b118002db869ea3bd0a0" -"checksum iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" -"checksum itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484" -"checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f" -"checksum jobserver 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)" = "5c71313ebb9439f74b00d9d2dcec36440beaf57a6aa0623068441dd7cd81a7f2" -"checksum jpeg-decoder 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "c1aae18ffeeae409c6622c3b6a7ee49792a7e5a062eea1b135fbb74e301792ba" -"checksum js-sys 0.3.36 (registry+https://github.com/rust-lang/crates.io-index)" = "1cb931d43e71f560c81badb0191596562bafad2be06a3f9025b845c847c60df5" -"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" -"checksum khronos_api 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" -"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" -"checksum lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f" -"checksum lewton 0.9.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8d542c1a317036c45c2aa1cf10cc9d403ca91eb2d333ef1a4917e5cb10628bd0" -"checksum libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)" = "1a31a0627fdf1f6a39ec0dd577e101440b7db22672c0901fe00a9a6fbb5c24e8" -"checksum libgit2-sys 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4870c781f6063efb83150cd22c1ddf6ecf58531419e7570cdcced46970f64a16" -"checksum libloading 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f2b111a074963af1d37a139918ac6d49ad1d0d5e47f72fd55388619691a7d753" -"checksum libssh2-sys 0.2.16 (registry+https://github.com/rust-lang/crates.io-index)" = "7bb70f29dc7c31d32c97577f13f41221af981b31248083e347b7f2c39225a6bc" -"checksum libudev-sys 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "3c8469b4a23b962c1396b9b451dda50ef5b283e8dd309d69033475fa9b334324" -"checksum libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)" = "2eb5e43362e38e2bca2fd5f5134c4d4564a23a5c28e9b95411652021a8675ebe" -"checksum line_drawing 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5cc7ad3d82c845bdb5dde34ffdcc7a5fb4d2996e1e1ee0f19c33bc80e15196b9" -"checksum linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ae91b68aebc4ddb91978b11a1b02ddd8602a05ec19002801c5666000e05e0f83" -"checksum lock_api 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f8912e782533a93a167888781b836336a6ca5da6175c05944c86cf28c31104dc" -"checksum log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" -"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" -"checksum lz4-compress 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f966533a922a9bba9e95e594c1fdb3b9bf5fdcdb11e37e51ad84cd76e468b91" -"checksum lzw 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7d947cbb889ed21c2a84be6ffbaebf5b4e0f4340638cba0444907e38b56be084" -"checksum mach 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "86dd2487cdfea56def77b88438a2c915fb45113c5319bfe7e14306ca4cd0b0e1" -"checksum malloc_buf 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" -"checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" -"checksum maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" -"checksum memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "88579771288728879b57485cc7d6b07d648c9f0141eb955f8ab7f9d45394468e" -"checksum memmap 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6585fd95e7bb50d6cc31e20d4cf9afb4e2ba16c5846fc76793f11218da9c475b" -"checksum memoffset 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "75189eb85871ea5c2e2c15abbdd541185f63b408415e5051f5cac122d8c774b9" -"checksum mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ba626b8a6de5da682e1caa06bdb42a335aee5a84db8e5046a3e8ab17ba0a3ae0" -"checksum mime 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)" = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" -"checksum mime_guess 1.8.7 (registry+https://github.com/rust-lang/crates.io-index)" = "0d977de9ee851a0b16e932979515c0f3da82403183879811bc97d50bd9cc50f7" -"checksum mime_guess 2.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2684d4c2e97d99848d30b324b00c8fcc7e5c897b7cbb5819b09e7c90e8baf212" -"checksum minifb 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)" = "799c20458eb0dd69f48cea5014afe736b363818c86d7ca61dbb56e1c0585014c" -"checksum mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)" = "302dec22bcf6bae6dfb69c647187f4b4d0fb6f535521f7bc022430ce8e12008f" -"checksum mio-extras 2.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "46e73a04c2fa6250b8d802134d56d554a9ec2922bf977777c805ea5def61ce40" -"checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" -"checksum mopa 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a785740271256c230f57462d3b83e52f998433a7062fc18f96d5999474a9f915" -"checksum msgbox 0.4.0 (git+https://github.com/bekker/msgbox-rs.git?rev=68fe39a)" = "" -"checksum multipart 0.15.4 (registry+https://github.com/rust-lang/crates.io-index)" = "adba94490a79baf2d6a23eac897157047008272fa3eecb3373ae6377b91eca28" -"checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" -"checksum nix 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6c722bee1037d430d0f8e687bbdbf222f27cc6e4e68d5caf630857bb2b6dbdce" -"checksum nix 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3b2e0b4f3320ed72aaedb9a5ac838690a8047c7b275da22711fddff4f8a14229" -"checksum nodrop 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" -"checksum noise 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "337525774dd8a197b613a01ea88058ef0ed023e5ed1e4b7e93de478e1f2bf770" -"checksum nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6" -"checksum notify 5.0.0-pre.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7b00c0b65188bffb5598c302e19b062feb94adef02c31f15622a163c95d673c3" -"checksum num 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "4703ad64153382334aa8db57c637364c322d3372e097840c72000dabdcf6156e" -"checksum num 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cf4825417e1e1406b3782a8ce92f4d53f26ec055e3622e1881ca8e9f5f9e08db" -"checksum num-bigint 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "f9c3f34cdd24f334cb265d9bf8bfa8a241920d026916785747a92f0e55541a1a" -"checksum num-complex 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "fcb0cf31fb3ff77e6d2a6ebd6800df7fdcd106f2ad89113c9130bcd07f93dffc" -"checksum num-derive 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "eafd0b45c5537c3ba526f79d3e75120036502bebacbb3f3220914067ce39dbf2" -"checksum num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "b85e541ef8255f6cf42bbfe4ef361305c6c135d10919ecc26126c4e5ae94bc09" -"checksum num-iter 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "76bd5272412d173d6bf9afdf98db8612bbabc9a7a830b7bfc9c188911716132e" -"checksum num-rational 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f2885278d5fe2adc2f75ced642d52d879bffaceb5a2e0b1d4309ffdfb239b454" -"checksum num-traits 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)" = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31" -"checksum num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c81ffc11c212fa327657cb19dd85eb7419e163b5b076bede2bdb5c974c07e4" -"checksum num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)" = "76dac5ed2a876980778b8b85f75a71b6cbf0db0b1232ee12f826bccb00d09d72" -"checksum objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" -"checksum objc-foundation 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" -"checksum objc_id 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" -"checksum ogg 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d79f1db9148be9d0e174bb3ac890f6030fcb1ed947267c5a91ee4c91b5a91e15" -"checksum openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" -"checksum openssl-sys 0.9.54 (registry+https://github.com/rust-lang/crates.io-index)" = "1024c0a59774200a555087a6da3f253a9095a5f344e353b212ac4c8b8e450986" -"checksum orbclient 0.3.27 (registry+https://github.com/rust-lang/crates.io-index)" = "f8b18f57ab94fbd058e30aa57f712ec423c0bb7403f8493a6c58eef0c36d9402" -"checksum ordered-float 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "18869315e81473c951eb56ad5558bbc56978562d3ecfb87abb7a1e944cea4518" -"checksum osmesa-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "88cfece6e95d2e717e0872a7f53a8684712ad13822a7979bc760b9c77ec0013b" -"checksum owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37" -"checksum packed_simd 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a85ea9fc0d4ac0deb6fe7911d38786b32fc11119afd9e9d38b84ff691ce64220" -"checksum pango 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "45374801e224373c3c0393cd48073c81093494c8735721e81d1dbaa4096b2767" -"checksum pango-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "94039b3921a4af4058a3e4335e5d15099101f298a92f5afc40bab3a3027594a1" -"checksum parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "149d8f5b97f3c1133e3cfcd8886449959e856b557ff281e292b733d7c69e005e" -"checksum parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252" -"checksum parking_lot_core 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "4db1a8ccf734a7bce794cc19b3df06ed87ab2f3907036b693c68f56b4d4537fa" -"checksum parking_lot_core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b" -"checksum peeking_take_while 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" -"checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" -"checksum percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" -"checksum petgraph 0.4.13 (registry+https://github.com/rust-lang/crates.io-index)" = "9c3659d1ee90221741f65dd128d9998311b0e40c5d3c23a62445938214abce4f" -"checksum phf 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "b3da44b85f8e8dfaec21adae67f95d93244b2ecf6ad2a692320598dcc8e6dd18" -"checksum phf_codegen 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "b03e85129e324ad4166b06b2c7491ae27fe3ec353af72e72cd1654c7225d517e" -"checksum phf_generator 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "09364cc93c159b8b06b1f4dd8a4398984503483891b0c26b867cf431fb132662" -"checksum phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "234f71a15de2288bcb7e3b6515828d22af7ec8598ee6d24c3b526fa0a80b67a0" -"checksum pin-project 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7804a463a8d9572f13453c516a5faea534a2403d7ced2f0c7e100eeff072772c" -"checksum pin-project-internal 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "385322a45f2ecf3410c68d2a549a4a2685e8051d0f278e39743ff4e451cb9b3f" -"checksum pin-project-lite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "237844750cfbb86f67afe27eee600dfbbcb6188d734139b534cbfbf4f96792ae" -"checksum pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5894c618ce612a3fa23881b152b608bafb8c56cfc22f434a3ba3120b40f7b587" -"checksum piston-float 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b058c3a640efd4bcf63266512e4bb03187192c1b29edd38b16d5a014613e3199" -"checksum piston-viewport 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7d96dd995f7dabe6d57cda668ec0fda39d6fe6e1e0b23f772582f383f2013611" -"checksum pistoncore-input 0.24.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0c612ce242c7bac8e96426a0ca34275fd980af440f0cca7c6c0e840ef8a4052f" -"checksum pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)" = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677" -"checksum png 0.15.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1f00ec9242f8e01119e83117dbadf34c5228ac2f1c4ddcd92bffa340d52291de" -"checksum portpicker 0.1.0 (git+https://github.com/wusyong/portpicker-rs?branch=fix_ipv6)" = "" -"checksum ppv-lite86 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "74490b50b9fbe561ac330df47c08f3f33073d2d00c150f719147d7c54522fa1b" -"checksum pretty_env_logger 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "717ee476b1690853d222af4634056d830b5197ffd747726a9a1eee6da9f49074" -"checksum proc-macro-hack 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)" = "ecd45702f76d6d3c75a80564378ae228a85f0b59d2f3ed43c91b4a69eb2ebfc5" -"checksum proc-macro-nested 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "369a6ed065f249a159e06c45752c780bda2fb53c995718f9e484d08daa9eb42e" -"checksum proc-macro2 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "1b06e2f335f48d24442b35a19df506a835fb3547bc3c06ef27340da9acf5cae7" -"checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" -"checksum proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "9c9e470a8dc4aeae2dee2f335e8f533e2d4b347e1434e5671afc49b054592f27" -"checksum prometheus 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5567486d5778e2c6455b1b90ff1c558f29e751fc018130fa182e15828e728af1" -"checksum prometheus-static-metric 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1baa57413523cff73783204f73299a3f602ebcf51a5e64752b32bc1b3c376013" -"checksum protobuf 2.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "40361836defdd5871ff7e84096c6f6444af7fc157f8ef1789f54f147687caa20" -"checksum quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9274b940887ce9addde99c4eee6b5c44cc494b182b97e73dc8ffdcb3397fd3f0" -"checksum quote 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9949cfe66888ffe1d53e6ec9d9f3b70714083854be20fd5e271b232a017401e8" -"checksum quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" -"checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe" -"checksum rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" -"checksum rand 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c618c47cd3ebd209790115ab837de41425723956ad3ce2e6a7f09890947cacb9" -"checksum rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" -"checksum rand 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3ae1b169243eaf61759b8475a998f0a385e42042370f3a7dbaf35246eacc8412" -"checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" -"checksum rand_chacha 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "03a2a90da8c7523f554344f921aa97283eadf6ac484a6d2a7d0212fa7f8d6853" -"checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" -"checksum rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" -"checksum rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -"checksum rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" -"checksum rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -"checksum rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" -"checksum rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" -"checksum rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" -"checksum rand_os 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a788ae3edb696cfcba1c19bfd388cc4b8c21f8a408432b199c072825084da58a" -"checksum rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" -"checksum rand_pcg 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" -"checksum rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" -"checksum rand_xoshiro 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0e18c91676f670f6f0312764c759405f13afb98d5d73819840cf72a518487bff" -"checksum raw-window-handle 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0a441a7a6c80ad6473bd4b74ec1c9a4c951794285bf941c2126f607c72e48211" -"checksum rayon 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "db6ce3297f9c85e16621bb8cca38a06779ffc31bb8184e1be4bed2be4678a098" -"checksum rayon-core 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "08a89b46efaf957e52b18062fb2f4660f8b8a4dde1807ca002690868ef2c85a9" -"checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" -"checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" -"checksum redox_users 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4ecedbca3bf205f8d8f5c2b44d83cd0690e39ee84b951ed649e9f1841132b66d" -"checksum regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dc220bd33bdce8f093101afe22a037b8eb0e5af33592e6a9caafff0d4cb81cbd" -"checksum regex-automata 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "92b73c2a1770c255c240eaa4ee600df1704a38dc3feaa6e949e7fcd4f8dc09f9" -"checksum regex-syntax 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)" = "11a7e20d1cce64ef2fed88b66d347f88bd9babb82845b2b858f3edbf59a4f716" -"checksum remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e" -"checksum reqwest 0.10.4 (registry+https://github.com/rust-lang/crates.io-index)" = "02b81e49ddec5109a9dcfc5f2a317ff53377c915e9ae9d4f2fb50914b85614e2" -"checksum ring 0.16.11 (registry+https://github.com/rust-lang/crates.io-index)" = "741ba1704ae21999c00942f9f5944f801e977f54302af346b596287599ad1862" -"checksum rodio 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1e0e0dfa7c8b17c6428f6e992a22ea595922cc86f946191b6b59e7ce96b77262" -"checksum ron 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2ece421e0c4129b90e4a35b6f625e472e96c552136f5093a2f4fa2bbb75a62d5" -"checksum roots 0.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e4c67c712ab62be58b24ab8960e2b95dd4ee00aac115c76f2709657821fe376d" -"checksum rouille 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "112568052ec17fa26c6c11c40acbb30d3ad244bf3d6da0be181f5e7e42e5004f" -"checksum rust-argon2 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4ca4eaef519b494d1f2848fc602d18816fed808a981aedf4f1f00ceb7c9d32cf" -"checksum rust-argon2 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "416f5109bdd413cec4f04c029297838e7604c993f8d1483b1d438f23bdc3eb35" -"checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" -"checksum rustc-hash 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7540fc8b0c49f096ee9c961cda096467dce8084bec6bdca2fc83895fd9b28cb8" -"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -"checksum rustls 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c0d4a31f5d68413404705d6982529b0e11a9aacd4839d1d6222ee3b8cb4015e1" -"checksum rustls-native-certs 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a75ffeb84a6bd9d014713119542ce415db3a3e4748f0bfce1e1416cd224a23a5" -"checksum rusttype 0.7.9 (registry+https://github.com/rust-lang/crates.io-index)" = "310942406a39981bed7e12b09182a221a29e0990f3e7e0c971f131922ed135d5" -"checksum rusttype 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "14a911032fb5791ccbeec9f28fdcb9bf0983b81f227bafdfd227c658d0731c8a" -"checksum rusty-xinput 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d2aa654bc32eb9ca14cce1a084abc9dfe43949a4547c35269a094c39272db3bb" -"checksum ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bfa8506c1de11c9c4e4c38863ccbe02a305c8188e85a05a784c9e11e1c3910c8" -"checksum safemem 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" -"checksum same-file 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "585e8ddcedc187886a30fa705c47985c3fa88d06624095856b36ca0b82ff4421" -"checksum scan_fmt 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "faf737f37ca340201889b5f48ecde47f233e9da3cbf3d04be27883adac39b4da" -"checksum schannel 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)" = "507a9e6e8ffe0a4e0ebb9a10293e62fdf7657c06f1b8bb07a8fcf697d2abf295" -"checksum scoped_threadpool 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8" -"checksum scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d" -"checksum sct 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e3042af939fca8c3453b7af0f1c66e533a15a86169e39de2657310ade8f98d3c" -"checksum sdl2 0.32.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d051a07231e303f5f719da78cb6f7394f6d5b54f733aef5b0b447804a83edd7b" -"checksum sdl2-sys 0.32.6 (registry+https://github.com/rust-lang/crates.io-index)" = "34e71125077d297d57e4c1acfe8981b5bdfbf5a20e7b589abfdcb33bf1127f86" -"checksum security-framework 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "97bbedbe81904398b6ebb054b3e912f99d55807125790f3198ac990d98def5b0" -"checksum security-framework-sys 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "06fd2f23e31ef68dd2328cc383bd493142e46107a3a0e24f7d734e3f3b80fe4c" -"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" -"checksum serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)" = "0c4b39bd9b0b087684013a792c59e3e07a46a01d2322518d8a1104641a0b1be0" -"checksum serde_derive 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)" = "ca13fc1a832f793322228923fbb3aba9f3f44444898f835d31ad1b74fa0a2bf8" -"checksum serde_json 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)" = "1a3351dcbc1f067e2c92ab7c3c1f288ad1a4cffc470b5aaddb4c2e0a3ae80043" -"checksum serde_urlencoded 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9ec5d77e2d4c73717816afac02670d5c4f534ea95ed430442cad02e7a6e32c97" -"checksum sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" -"checksum shared_library 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "5a9e7e0f2bfae24d8a5b5a66c5b257a83c7412304311512a0c054cd5e619da11" -"checksum shlex 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2" -"checksum shred 0.9.4 (registry+https://github.com/rust-lang/crates.io-index)" = "92472b9bafafbcba21935c6444d924e5332742f6778c49504a49a97eaeff6ccc" -"checksum shred-derive 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c245c03fd923292ae18e01eadf65606fdc995c175433104ef3eee956db7c2d7" -"checksum shrev 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b5752e017e03af9d735b4b069f53b7a7fd90fefafa04d8bd0c25581b0bff437f" -"checksum siphasher 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0b8de496cf83d4ed58b6be86c3a275b8602f6ffe98d3024a869e124147a9a3ac" -"checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" -"checksum smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "f7b0758c52e15a8b5e3691eae6cc559f08eee9406e548a4477ba4e67770a82b6" -"checksum smallvec 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4ecf3b85f68e8abaa7555aa5abdb1153079387e60b718283d732f03897fcfc86" -"checksum smithay-client-toolkit 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2ccb8c57049b2a34d2cc2b203fa785020ba0129d31920ef0d317430adaf748fa" -"checksum smithay-client-toolkit 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "93960e8975909fcb14cc755de93af2149d8b8f4eb368315537d40cfd0f324054" -"checksum smithay-clipboard 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "9667a262ef7a9ff1c55a7e665cd3d36f9bc2809f94167b1fb3fc31423a83f8c0" -"checksum specs 0.15.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4943fde8c5d3d14c3d19d2a4c7abbd7b626c270a19e6cd35252294a48feb698c" -"checksum specs-idvs 0.1.0 (git+https://gitlab.com/veloren/specs-idvs.git)" = "" -"checksum spin 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" -"checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" -"checksum static_assertions 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "c19be23126415861cb3a23e501d34a708f7f9b2183c5252d690941c2e69199d5" -"checksum stb_truetype 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f77b6b07e862c66a9f3e62a07588fee67cd90a9135a2b942409f195507b4fb51" -"checksum stdweb 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ef5430c8e36b713e13b48a9f709cc21e046723fe44ce34587b73a830203b533e" -"checksum stdweb 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)" = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5" -"checksum stdweb-derive 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef" -"checksum stdweb-internal-macros 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)" = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11" -"checksum stdweb-internal-runtime 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" -"checksum sum_type 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "da5b4a0c9f3c7c8e891e445a7c776627e208e8bba23ab680798066dd283e6a15" -"checksum svg_fmt 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "20e5f95e89d737f30cd1f98a9af9a85c2a1cc162cfedfba5a0c54cf92d7206fc" -"checksum syn 0.13.11 (registry+https://github.com/rust-lang/crates.io-index)" = "14f9bf6292f3a61d2c716723fdb789a41bbe104168e6f496dc6497e531ea1b9b" -"checksum syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)" = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" -"checksum syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)" = "661641ea2aa15845cddeb97dad000d22070bb5c1fb456b96c1cba883ec691e92" -"checksum synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545" -"checksum tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8" -"checksum term 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "edd106a334b7657c10b7c540a0106114feadeb4dc314513e97df481d5d966f42" -"checksum termcolor 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "96d6098003bde162e4277c70665bd87c326f5a0c3f3fbfb285787fa482d54e6e" -"checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" -"checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" -"checksum threadpool 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e2f0c90a5f3459330ac8bc0d2f879c693bb7a2f59689c1083fc4ef83834da865" -"checksum tiff 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d7b7c2cfc4742bd8a32f2e614339dd8ce30dbcf676bb262bd63a2327bc5df57d" -"checksum time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f" -"checksum tiny_http 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1661fa0a44c95d01604bd05c66732a446c657efb62b5164a7a083a3b552b4951" -"checksum tinytemplate 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4574b75faccaacddb9b284faecdf0b544b80b6b294f3d062d325c5726a209c20" -"checksum tokio 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "0fa5e81d6bc4e67fe889d5783bd2a128ab2e0cfa487e0be16b6a8d177b101616" -"checksum tokio-rustls 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4adb8b3e5f86b707f1b54e7c15b6de52617a823608ccda98a15d3a24222f265a" -"checksum tokio-util 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "571da51182ec208780505a32528fc5512a8fe1443ab960b3f2f3ef093cd16930" -"checksum toml 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "01d1404644c8b12b16bfcffa4322403a91a451584daaaa7c28d3152e6cbc98cf" -"checksum tower-service 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e987b6bf443f4b5b3b6f38704195592cca41c5bb7aedd3c3693c7081f8289860" -"checksum treeculler 0.1.0 (git+https://gitlab.com/yusdacra/treeculler.git)" = "" -"checksum try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" -"checksum tuple_utils 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "44834418e2c5b16f47bedf35c28e148db099187dd5feee6367fb2525863af4f1" -"checksum twoway 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "59b11b2b5241ba34be09c3cc85a36e56e48f9888862e19cedf23336d35316ed1" -"checksum unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33" -"checksum unicase 2.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" -"checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" -"checksum unicode-normalization 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "b561e267b2326bb4cebfc0ef9e68355c7abe6c6f522aeac2f5bf95d56c59bdcf" -"checksum unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7007dbd421b92cc6e28410fe7362e2e0a2503394908f417b68ec8d1c364c4e20" -"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" -"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" -"checksum untrusted 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "60369ef7a31de49bcb3f6ca728d4ba7300d9a1658f94c727d4cab8c8d9f4aece" -"checksum url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" -"checksum url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "829d4a8476c35c9bf0bbce5a3b23f4106f79728039b726d292bb93bc106787cb" -"checksum uuid 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)" = "90dbc611eb48397705a6b0f6e917da23ae517e4d127123d2cf7674206627d32a" -"checksum uuid 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9fde2f6a4bea1d6e007c4ad38c6839fa71cbb63b6dbf5b595aa38dc9b1093c11" -"checksum uvth 3.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e59a167890d173eb0fcd7a1b99b84dc05c521ae8d76599130b8e19bef287abbf" -"checksum vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "3fc439f2794e98976c88a2a2dafce96b930fe8010b0a256b3c2199a773933168" -"checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" -"checksum vek 0.9.11 (registry+https://github.com/rust-lang/crates.io-index)" = "1eb3ca8ea588deba055424cc1a79a830428b2f6c270b8d8f91946f660fa4d8ee" -"checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" -"checksum version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "078775d0255232fb988e6fccf26ddc9d1ac274299aaedcedce21c6f72cc533ce" -"checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" -"checksum walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)" = "9658c94fa8b940eab2250bd5a457f9c48b748420d71293b165c8cdbe2f55f71e" -"checksum want 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" -"checksum wasi 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b89c3ce4ce14bdc6fb6beaf9ec7928ca331de5df7e5ea278375642a2f478570d" -"checksum wasm-bindgen 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)" = "3557c397ab5a8e347d434782bcd31fc1483d927a6826804cec05cc792ee2519d" -"checksum wasm-bindgen-backend 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)" = "e0da9c9a19850d3af6df1cb9574970b566d617ecfaf36eb0b706b6f3ef9bd2f8" -"checksum wasm-bindgen-futures 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)" = "457414a91863c0ec00090dba537f88ab955d93ca6555862c29b6d860990b8a8a" -"checksum wasm-bindgen-macro 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)" = "0f6fde1d36e75a714b5fe0cffbb78978f222ea6baebb726af13c78869fdb4205" -"checksum wasm-bindgen-macro-support 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)" = "25bda4168030a6412ea8a047e27238cadf56f0e53516e1e83fec0a8b7c786f6d" -"checksum wasm-bindgen-shared 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)" = "fc9f36ad51f25b0219a3d4d13b90eb44cd075dff8b6280cca015775d7acaddd8" -"checksum wayland-client 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)" = "49963e5f9eeaf637bfcd1b9f0701c99fd5cd05225eb51035550d4272806f2713" -"checksum wayland-client 0.23.6 (registry+https://github.com/rust-lang/crates.io-index)" = "af1080ebe0efabcf12aef2132152f616038f2d7dcbbccf7b2d8c5270fe14bcda" -"checksum wayland-commons 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)" = "40c08896768b667e1df195d88a62a53a2d1351a1ed96188be79c196b35bb32ec" -"checksum wayland-commons 0.23.6 (registry+https://github.com/rust-lang/crates.io-index)" = "bb66b0d1a27c39bbce712b6372131c6e25149f03ffb0cd017cf8f7de8d66dbdb" -"checksum wayland-protocols 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)" = "4afde2ea2a428eee6d7d2c8584fdbe8b82eee8b6c353e129a434cd6e07f42145" -"checksum wayland-protocols 0.23.6 (registry+https://github.com/rust-lang/crates.io-index)" = "6cc286643656742777d55dc8e70d144fa4699e426ca8e9d4ef454f4bf15ffcf9" -"checksum wayland-scanner 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)" = "bf3828c568714507315ee425a9529edc4a4aa9901409e373e9e0027e7622b79e" -"checksum wayland-scanner 0.23.6 (registry+https://github.com/rust-lang/crates.io-index)" = "93b02247366f395b9258054f964fe293ddd019c3237afba9be2ccbe9e1651c3d" -"checksum wayland-sys 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)" = "520ab0fd578017a0ee2206623ba9ef4afe5e8f23ca7b42f6acfba2f4e66b1628" -"checksum wayland-sys 0.23.6 (registry+https://github.com/rust-lang/crates.io-index)" = "d94e89a86e6d6d7c7c9b19ebf48a03afaac4af6bc22ae570e9a24124b75358f4" -"checksum web-sys 0.3.36 (registry+https://github.com/rust-lang/crates.io-index)" = "721c6263e2c66fd44501cc5efbfa2b7dfa775d13e4ea38c46299646ed1f9c70a" -"checksum webpki 0.21.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f1f50e1972865d6b1adb54167d1c8ed48606004c2c9d0ea5f1eeb34d95e863ef" -"checksum webpki-roots 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)" = "91cd5736df7f12a964a5067a12c62fa38e1bd8080aff1f80bc29be7c80d19ab4" -"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" -"checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" -"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" -"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -"checksum winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7168bab6e1daee33b4557efd0e95d5ca70a03706d39fa5f3fe7a236f584b03c9" -"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -"checksum wincolor 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "96f5016b18804d24db43cebf3c77269e7569b8954a8464501c216cc5e070eaa9" -"checksum winit 0.19.5 (registry+https://github.com/rust-lang/crates.io-index)" = "1e96eb4bb472fa43e718e8fa4aef82f86cd9deac9483a1e1529230babdb394a8" -"checksum winreg 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9" -"checksum winres 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "ff4fb510bbfe5b8992ff15f77a2e6fe6cf062878f0eda00c0f44963a807ca5dc" -"checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" -"checksum x11-clipboard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "89bd49c06c9eb5d98e6ba6536cf64ac9f7ee3a009b2f53996d405b3944f6bcea" -"checksum x11-dl 2.18.4 (registry+https://github.com/rust-lang/crates.io-index)" = "be65e1342a3baae65439cd03306778831a3d133b0d20243a7fb83fd5cf403c58" -"checksum xcb 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5e917a3f24142e9ff8be2414e36c649d47d6cc2ba81f16201cdef96e533e02de" -"checksum xdg 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d089681aa106a86fade1b0128fb5daf07d5867a509ab036d99988dec80429a57" -"checksum xml-rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "541b12c998c5b56aa2b4e6f18f03664eef9a4fd0a246a55594efae6cc2d964b5" +checksum = "541b12c998c5b56aa2b4e6f18f03664eef9a4fd0a246a55594efae6cc2d964b5" diff --git a/assets/common/items/apple.ron b/assets/common/items/apple.ron index 46c20763ad..7179502e22 100644 --- a/assets/common/items/apple.ron +++ b/assets/common/items/apple.ron @@ -1,6 +1,8 @@ Item( name: "Apple", - description: "Red and juicy.", + description: "Red and juicy. + +Restores 20 Health.", kind: Consumable( kind: Apple, effect: Health(( diff --git a/assets/common/items/armor/belt/assassin.ron b/assets/common/items/armor/belt/assassin.ron new file mode 100644 index 0000000000..e6bb45044e --- /dev/null +++ b/assets/common/items/armor/belt/assassin.ron @@ -0,0 +1,8 @@ +Item( + name: "Assassin Belt", + description: "Only the best for a member of the creed.", + kind: Armor( + kind: Belt(Assassin), + stats: (20), + ), +) diff --git a/assets/common/items/armor/belt/cloth_blue_0.ron b/assets/common/items/armor/belt/cloth_blue_0.ron new file mode 100644 index 0000000000..8b62419ff7 --- /dev/null +++ b/assets/common/items/armor/belt/cloth_blue_0.ron @@ -0,0 +1,8 @@ +Item( + name: "Blue Linen Belt", + description: "Soft and warm", + kind: Armor( + kind: Belt(ClothBlue0), + stats: (20), + ), +) diff --git a/assets/common/items/armor/belt/cloth_green_0.ron b/assets/common/items/armor/belt/cloth_green_0.ron new file mode 100644 index 0000000000..c3424f7817 --- /dev/null +++ b/assets/common/items/armor/belt/cloth_green_0.ron @@ -0,0 +1,8 @@ +Item( + name: "Green Linen Belt", + description: "Soft and warm", + kind: Armor( + kind: Belt(ClothGreen0), + stats: (20), + ), +) diff --git a/assets/common/items/armor/belt/cloth_purple_0.ron b/assets/common/items/armor/belt/cloth_purple_0.ron new file mode 100644 index 0000000000..5f55a20c09 --- /dev/null +++ b/assets/common/items/armor/belt/cloth_purple_0.ron @@ -0,0 +1,8 @@ +Item( + name: "Purple Linen Belt", + description: "Soft and warm", + kind: Armor( + kind: Belt(ClothPurple0), + stats: (20), + ), +) diff --git a/assets/common/items/armor/belt/leather_0.ron b/assets/common/items/armor/belt/leather_0.ron new file mode 100644 index 0000000000..b3cf347584 --- /dev/null +++ b/assets/common/items/armor/belt/leather_0.ron @@ -0,0 +1,8 @@ +Item( + name: "Swift Belt", + description: "Swift like the wind.", + kind: Armor( + kind: Belt(Leather0), + stats: (20), + ), +) diff --git a/assets/common/items/armor/belt/plate_0.ron b/assets/common/items/armor/belt/plate_0.ron new file mode 100644 index 0000000000..2c18113d1a --- /dev/null +++ b/assets/common/items/armor/belt/plate_0.ron @@ -0,0 +1,8 @@ +Item( + name: "Iron Belt", + description: "WIP", + kind: Armor( + kind: Belt(Plate0), + stats: (20), + ), +) diff --git a/assets/common/items/armor/chest/assassin.ron b/assets/common/items/armor/chest/assassin.ron new file mode 100644 index 0000000000..66fc865695 --- /dev/null +++ b/assets/common/items/armor/chest/assassin.ron @@ -0,0 +1,8 @@ +Item( + name: "Assassin Chest", + description: "Only the best for a member of the creed.", + kind: Armor( + kind: Chest(Assassin), + stats: (20), + ), +) diff --git a/assets/common/items/armor/chest/cloth_blue_0.ron b/assets/common/items/armor/chest/cloth_blue_0.ron new file mode 100644 index 0000000000..289bf4bdc5 --- /dev/null +++ b/assets/common/items/armor/chest/cloth_blue_0.ron @@ -0,0 +1,8 @@ +Item( + name: "Blue Linen Chest", + description: "Soft and warm", + kind: Armor( + kind: Chest(ClothBlue0), + stats: (20), + ), +) diff --git a/assets/common/items/armor/chest/cloth_green_0.ron b/assets/common/items/armor/chest/cloth_green_0.ron new file mode 100644 index 0000000000..a52fc12a19 --- /dev/null +++ b/assets/common/items/armor/chest/cloth_green_0.ron @@ -0,0 +1,8 @@ +Item( + name: "Green Linen Chest", + description: "Soft and warm", + kind: Armor( + kind: Chest(ClothGreen0), + stats: (20), + ), +) diff --git a/assets/common/items/armor/chest/cloth_purple_0.ron b/assets/common/items/armor/chest/cloth_purple_0.ron new file mode 100644 index 0000000000..728e5f5c85 --- /dev/null +++ b/assets/common/items/armor/chest/cloth_purple_0.ron @@ -0,0 +1,8 @@ +Item( + name: "Purple Linen Chest", + description: "Soft and warm", + kind: Armor( + kind: Chest(ClothPurple0), + stats: (20), + ), +) diff --git a/assets/common/items/armor/chest/leather_0.ron b/assets/common/items/armor/chest/leather_0.ron new file mode 100644 index 0000000000..48408e3674 --- /dev/null +++ b/assets/common/items/armor/chest/leather_0.ron @@ -0,0 +1,8 @@ +Item( + name: "Swift Chest", + description: "Swift like the wind.", + kind: Armor( + kind: Chest(Leather0), + stats: (20), + ), +) diff --git a/assets/common/items/armor/chest/plate_green_0.ron b/assets/common/items/armor/chest/plate_green_0.ron new file mode 100644 index 0000000000..92bb5fb664 --- /dev/null +++ b/assets/common/items/armor/chest/plate_green_0.ron @@ -0,0 +1,8 @@ +Item( + name: "Iron Chestplate", + description: "Arrows to the stomach are soooo last update.", + kind: Armor( + kind: Chest(PlateGreen0), + stats: (20), + ), +) diff --git a/assets/common/items/armor/foot/assassin.ron b/assets/common/items/armor/foot/assassin.ron new file mode 100644 index 0000000000..13b587a306 --- /dev/null +++ b/assets/common/items/armor/foot/assassin.ron @@ -0,0 +1,8 @@ +Item( + name: "Assassin Boots", + description: "Only the best for a member of the creed.", + kind: Armor( + kind: Foot(Assassin), + stats: (20), + ), +) diff --git a/assets/common/items/armor/foot/cloth_blue_0.ron b/assets/common/items/armor/foot/cloth_blue_0.ron new file mode 100644 index 0000000000..31b70750f9 --- /dev/null +++ b/assets/common/items/armor/foot/cloth_blue_0.ron @@ -0,0 +1,8 @@ +Item( + name: "Blue Linen Boots", + description: "Soft and warm", + kind: Armor( + kind: Foot(ClothBlue0), + stats: (20), + ), +) diff --git a/assets/common/items/armor/foot/cloth_green_0.ron b/assets/common/items/armor/foot/cloth_green_0.ron new file mode 100644 index 0000000000..117b19aad9 --- /dev/null +++ b/assets/common/items/armor/foot/cloth_green_0.ron @@ -0,0 +1,8 @@ +Item( + name: "Green Linen Boots", + description: "Soft and warm", + kind: Armor( + kind: Foot(ClothGreen0), + stats: (20), + ), +) diff --git a/assets/common/items/armor/foot/cloth_purple_0.ron b/assets/common/items/armor/foot/cloth_purple_0.ron new file mode 100644 index 0000000000..a80c44de89 --- /dev/null +++ b/assets/common/items/armor/foot/cloth_purple_0.ron @@ -0,0 +1,8 @@ +Item( + name: "Purple Linen Boots", + description: "Soft and warm", + kind: Armor( + kind: Foot(ClothPurple0), + stats: (20), + ), +) diff --git a/assets/common/items/armor/foot/leather_0.ron b/assets/common/items/armor/foot/leather_0.ron new file mode 100644 index 0000000000..6ca6a07fc7 --- /dev/null +++ b/assets/common/items/armor/foot/leather_0.ron @@ -0,0 +1,8 @@ +Item( + name: "Swift Boots", + description: "Swift like the wind.", + kind: Armor( + kind: Foot(Leather0), + stats: (20), + ), +) diff --git a/assets/common/items/armor/foot/plate_0.ron b/assets/common/items/armor/foot/plate_0.ron new file mode 100644 index 0000000000..12f95dcd4e --- /dev/null +++ b/assets/common/items/armor/foot/plate_0.ron @@ -0,0 +1,8 @@ +Item( + name: "Iron Feet", + description: "WIP", + kind: Armor( + kind: Foot(Plate0), + stats: (20), + ), +) diff --git a/assets/common/items/armor/hand/assassin.ron b/assets/common/items/armor/hand/assassin.ron new file mode 100644 index 0000000000..19a09a3177 --- /dev/null +++ b/assets/common/items/armor/hand/assassin.ron @@ -0,0 +1,8 @@ +Item( + name: "Assassin Gloves", + description: "Only the best for a member of the creed.", + kind: Armor( + kind: Hand(Assassin), + stats: (20), + ), +) diff --git a/assets/common/items/armor/hand/cloth_blue_0.ron b/assets/common/items/armor/hand/cloth_blue_0.ron new file mode 100644 index 0000000000..88496cbce3 --- /dev/null +++ b/assets/common/items/armor/hand/cloth_blue_0.ron @@ -0,0 +1,8 @@ +Item( + name: "Blue Linen Wrists", + description: "WIP", + kind: Armor( + kind: Hand(ClothBlue0), + stats: (20), + ), +) diff --git a/assets/common/items/armor/hand/cloth_green_0.ron b/assets/common/items/armor/hand/cloth_green_0.ron new file mode 100644 index 0000000000..a3452335c4 --- /dev/null +++ b/assets/common/items/armor/hand/cloth_green_0.ron @@ -0,0 +1,8 @@ +Item( + name: "Green Linen Wrists", + description: "WIP", + kind: Armor( + kind: Hand(ClothGreen0), + stats: (20), + ), +) diff --git a/assets/common/items/armor/hand/cloth_purple_0.ron b/assets/common/items/armor/hand/cloth_purple_0.ron new file mode 100644 index 0000000000..840694163c --- /dev/null +++ b/assets/common/items/armor/hand/cloth_purple_0.ron @@ -0,0 +1,8 @@ +Item( + name: "Purple Silk Wrists", + description: "WIP", + kind: Armor( + kind: Hand(ClothPurple0), + stats: (20), + ), +) diff --git a/assets/common/items/armor/hand/leather_0.ron b/assets/common/items/armor/hand/leather_0.ron new file mode 100644 index 0000000000..e4b62e3a72 --- /dev/null +++ b/assets/common/items/armor/hand/leather_0.ron @@ -0,0 +1,8 @@ +Item( + name: "Swift Gloves", + description: "Swift like the wind.", + kind: Armor( + kind: Hand(Leather0), + stats: (20), + ), +) diff --git a/assets/common/items/armor/hand/plate_0.ron b/assets/common/items/armor/hand/plate_0.ron new file mode 100644 index 0000000000..1fdbb6d6da --- /dev/null +++ b/assets/common/items/armor/hand/plate_0.ron @@ -0,0 +1,8 @@ +Item( + name: "Iron Handguards", + description: "WIP", + kind: Armor( + kind: Hand(Plate0), + stats: (20), + ), +) diff --git a/assets/common/items/armor/pants/assassin.ron b/assets/common/items/armor/pants/assassin.ron new file mode 100644 index 0000000000..b5bb2c28ab --- /dev/null +++ b/assets/common/items/armor/pants/assassin.ron @@ -0,0 +1,8 @@ +Item( + name: "Assassin Pants", + description: "Only the best for a member of the creed.", + kind: Armor( + kind: Pants(Assassin), + stats: (20), + ), +) diff --git a/assets/common/items/armor/pants/cloth_blue_0.ron b/assets/common/items/armor/pants/cloth_blue_0.ron new file mode 100644 index 0000000000..9ef245a09a --- /dev/null +++ b/assets/common/items/armor/pants/cloth_blue_0.ron @@ -0,0 +1,8 @@ +Item( + name: "Blue Linen Skirt", + description: "WIP", + kind: Armor( + kind: Pants(ClothBlue0), + stats: (20), + ), +) diff --git a/assets/common/items/armor/pants/cloth_green_0.ron b/assets/common/items/armor/pants/cloth_green_0.ron new file mode 100644 index 0000000000..3782ac2617 --- /dev/null +++ b/assets/common/items/armor/pants/cloth_green_0.ron @@ -0,0 +1,8 @@ +Item( + name: "Green Linen Skirt", + description: "WIP", + kind: Armor( + kind: Pants(ClothGreen0), + stats: (20), + ), +) diff --git a/assets/common/items/armor/pants/cloth_purple_0.ron b/assets/common/items/armor/pants/cloth_purple_0.ron new file mode 100644 index 0000000000..770961a1fe --- /dev/null +++ b/assets/common/items/armor/pants/cloth_purple_0.ron @@ -0,0 +1,8 @@ +Item( + name: "Purple Linen Skirt", + description: "WIP", + kind: Armor( + kind: Pants(ClothPurple0), + stats: (20), + ), +) diff --git a/assets/common/items/armor/pants/green_0.ron b/assets/common/items/armor/pants/green_0.ron new file mode 100644 index 0000000000..5fee632d92 --- /dev/null +++ b/assets/common/items/armor/pants/green_0.ron @@ -0,0 +1,8 @@ +Item( + name: "Hunting Pants", + description: "", + kind: Armor( + kind: Pants(Green), + stats: (20), + ), +) diff --git a/assets/common/items/armor/pants/leather_0.ron b/assets/common/items/armor/pants/leather_0.ron new file mode 100644 index 0000000000..507ab116c0 --- /dev/null +++ b/assets/common/items/armor/pants/leather_0.ron @@ -0,0 +1,8 @@ +Item( + name: "Swift Pants", + description: "", + kind: Armor( + kind: Pants(Leather0), + stats: (20), + ), +) diff --git a/assets/common/items/armor/pants/plate_green_0.ron b/assets/common/items/armor/pants/plate_green_0.ron new file mode 100644 index 0000000000..51c3620338 --- /dev/null +++ b/assets/common/items/armor/pants/plate_green_0.ron @@ -0,0 +1,8 @@ +Item( + name: "Iron Legguards", + description: "WIP", + kind: Armor( + kind: Pants(PlateGreen0), + stats: (20), + ), +) diff --git a/assets/common/items/armor/shoulder/assassin.ron b/assets/common/items/armor/shoulder/assassin.ron new file mode 100644 index 0000000000..ea92efbec5 --- /dev/null +++ b/assets/common/items/armor/shoulder/assassin.ron @@ -0,0 +1,8 @@ +Item( + name: "Assassin Shoulder Guard", + description: "Only the best for a member of the creed.", + kind: Armor( + kind: Shoulder(Assassin), + stats: (20), + ), +) diff --git a/assets/common/items/armor/shoulder/cloth_blue_0.ron b/assets/common/items/armor/shoulder/cloth_blue_0.ron new file mode 100644 index 0000000000..2ec65be894 --- /dev/null +++ b/assets/common/items/armor/shoulder/cloth_blue_0.ron @@ -0,0 +1,8 @@ +Item( + name: "Blue Linen Coat", + description: "WIP", + kind: Armor( + kind: Shoulder(ClothBlue0), + stats: (20), + ), +) diff --git a/assets/common/items/armor/shoulder/cloth_green_0.ron b/assets/common/items/armor/shoulder/cloth_green_0.ron new file mode 100644 index 0000000000..539b3a7063 --- /dev/null +++ b/assets/common/items/armor/shoulder/cloth_green_0.ron @@ -0,0 +1,8 @@ +Item( + name: "Green Linen Coat", + description: "WIP", + kind: Armor( + kind: Shoulder(ClothGreen0), + stats: (20), + ), +) diff --git a/assets/common/items/armor/shoulder/cloth_purple_0.ron b/assets/common/items/armor/shoulder/cloth_purple_0.ron new file mode 100644 index 0000000000..308759e2b8 --- /dev/null +++ b/assets/common/items/armor/shoulder/cloth_purple_0.ron @@ -0,0 +1,8 @@ +Item( + name: "Purple Linen Coat", + description: "WIP", + kind: Armor( + kind: Shoulder(ClothPurple0), + stats: (20), + ), +) diff --git a/assets/common/items/armor/shoulder/leather_0.ron b/assets/common/items/armor/shoulder/leather_0.ron new file mode 100644 index 0000000000..a145debbeb --- /dev/null +++ b/assets/common/items/armor/shoulder/leather_0.ron @@ -0,0 +1,8 @@ +Item( + name: "Leather Pauldrons", + description: "", + kind: Armor( + kind: Shoulder(Leather0), + stats: (20), + ), +) diff --git a/assets/common/items/armor/shoulder/leather_1.ron b/assets/common/items/armor/shoulder/leather_1.ron new file mode 100644 index 0000000000..ce066e63a0 --- /dev/null +++ b/assets/common/items/armor/shoulder/leather_1.ron @@ -0,0 +1,8 @@ +Item( + name: "Swift Shoulderpads", + description: "Swift like the wind.", + kind: Armor( + kind: Shoulder(Leather1), + stats: (20), + ), +) diff --git a/assets/common/items/armor/shoulder/plate_0.ron b/assets/common/items/armor/shoulder/plate_0.ron new file mode 100644 index 0000000000..3323278ecb --- /dev/null +++ b/assets/common/items/armor/shoulder/plate_0.ron @@ -0,0 +1,8 @@ +Item( + name: "Iron Shoulderguards", + description: "A strong shoulder to lean on.", + kind: Armor( + kind: Shoulder(Plate0), + stats: (20), + ), +) diff --git a/assets/common/items/cheese.ron b/assets/common/items/cheese.ron index 00a2e124f5..9cb95fcbf8 100644 --- a/assets/common/items/cheese.ron +++ b/assets/common/items/cheese.ron @@ -1,10 +1,12 @@ Item( name: "Dwarven Cheese", - description: "Aromatic and nutritious.", + description: "Aromatic and nutritious. + +Restores 15 Health.", kind: Consumable( kind: Cheese, effect: Health(( - amount: 40, + amount: 15, cause: Item, )), ), diff --git a/assets/common/items/debug/boost.ron b/assets/common/items/debug/boost.ron index f03377b0e5..0bfb72722c 100644 --- a/assets/common/items/debug/boost.ron +++ b/assets/common/items/debug/boost.ron @@ -2,8 +2,10 @@ Item( name: "Weightless Rod", description: "The sky is the limit.", kind: Tool( - kind: Debug(Boost), - power: 0, + ( + kind: Debug(Boost), + equip_time_millis: 0, + ) ), ) -// And the ground is pretty hard at maximum velocity... \ No newline at end of file +// And the ground is pretty hard at maximum velocity... diff --git a/assets/common/items/debug/possess.ron b/assets/common/items/debug/possess.ron index d6a2d84a3e..37c6df5d8a 100644 --- a/assets/common/items/debug/possess.ron +++ b/assets/common/items/debug/possess.ron @@ -2,8 +2,10 @@ Item( name: "Rod of Possession", description: "It's fixed on my branch.", kind: Tool( - kind: Debug(Possess), - power: 0, + ( + kind: Debug(Possess), + equip_time_millis: 0, + ) ), ) -// ... as zesterer always uses to tell us. \ No newline at end of file +// ... as zesterer always uses to tell us. diff --git a/assets/common/items/flowers/blue.ron b/assets/common/items/flowers/blue.ron index cc99b22a2b..7f137e1892 100644 --- a/assets/common/items/flowers/blue.ron +++ b/assets/common/items/flowers/blue.ron @@ -1,5 +1,7 @@ Item( name: "Blue Flower", description: "Matches the color of the sky.", - kind: Ingredient, + kind: Ingredient( + kind: Flower, + ) ) diff --git a/assets/common/items/flowers/pink.ron b/assets/common/items/flowers/pink.ron index f01edd7633..79c3bada08 100644 --- a/assets/common/items/flowers/pink.ron +++ b/assets/common/items/flowers/pink.ron @@ -1,5 +1,7 @@ Item( name: "Pink Flower", description: "Looks like a lollipop.", - kind: Ingredient, + kind: Ingredient( + kind: Flower, + ) ) diff --git a/assets/common/items/flowers/red.ron b/assets/common/items/flowers/red.ron index e92e19ed63..b9ea9425c1 100644 --- a/assets/common/items/flowers/red.ron +++ b/assets/common/items/flowers/red.ron @@ -1,5 +1,7 @@ Item( name: "Red Flower", description: "Roses are red...", - kind: Ingredient, + kind: Ingredient( + kind: Flower, + ) ) diff --git a/assets/common/items/flowers/sun.ron b/assets/common/items/flowers/sun.ron index d24ce0f52b..757db214a3 100644 --- a/assets/common/items/flowers/sun.ron +++ b/assets/common/items/flowers/sun.ron @@ -1,5 +1,7 @@ Item( name: "Sunflower", description: "Smells like summer.", - kind: Ingredient, + kind: Ingredient( + kind: Flower, + ) ) diff --git a/assets/common/items/flowers/white.ron b/assets/common/items/flowers/white.ron index 053f7d0ec7..0b98d0f799 100644 --- a/assets/common/items/flowers/white.ron +++ b/assets/common/items/flowers/white.ron @@ -1,5 +1,7 @@ Item( name: "White flower", description: "Pure and precious.", - kind: Ingredient, + kind: Ingredient( + kind: Flower, + ) ) diff --git a/assets/common/items/flowers/yellow.ron b/assets/common/items/flowers/yellow.ron index c58d067d9b..c9e799b32e 100644 --- a/assets/common/items/flowers/yellow.ron +++ b/assets/common/items/flowers/yellow.ron @@ -1,5 +1,7 @@ Item( name: "Yellow Flower", description: "Glows like the sun.", - kind: Ingredient, + kind: Ingredient( + kind: Flower, + ) ) diff --git a/assets/common/items/grasses/long.ron b/assets/common/items/grasses/long.ron index f94b5d10eb..e592ce9779 100644 --- a/assets/common/items/grasses/long.ron +++ b/assets/common/items/grasses/long.ron @@ -1,5 +1,7 @@ Item( name: "Long Grass", description: "Greener than an orc's snout.", - kind: Ingredient, + kind: Ingredient( + kind: Grass, + ) ) diff --git a/assets/common/items/grasses/medium.ron b/assets/common/items/grasses/medium.ron index 71b3b44ddf..ec67d4bb77 100644 --- a/assets/common/items/grasses/medium.ron +++ b/assets/common/items/grasses/medium.ron @@ -1,5 +1,7 @@ Item( name: "Medium Grass", description: "Greener than an orc's snout.", - kind: Ingredient, + kind: Ingredient( + kind: Grass, + ) ) diff --git a/assets/common/items/grasses/short.ron b/assets/common/items/grasses/short.ron index e3cdc0a5fc..a1808c85f6 100644 --- a/assets/common/items/grasses/short.ron +++ b/assets/common/items/grasses/short.ron @@ -1,5 +1,7 @@ Item( name: "Short Grass", description: "Greener than an orc's snout.", - kind: Ingredient, + kind: Ingredient( + kind: Grass, + ) ) diff --git a/assets/common/items/mushroom.ron b/assets/common/items/mushroom.ron index 04d300329e..09702079e9 100644 --- a/assets/common/items/mushroom.ron +++ b/assets/common/items/mushroom.ron @@ -1,6 +1,8 @@ Item( name: "Mushroom", - description: "Hopefully this one is not poisonous.", + description: "Hopefully this one is not poisonous. + +Restores 10 Health.", kind: Consumable( kind: Mushroom, effect: Health(( diff --git a/assets/common/items/potion_minor.ron b/assets/common/items/potion_minor.ron index ab3f5c1110..aaf0b948c9 100644 --- a/assets/common/items/potion_minor.ron +++ b/assets/common/items/potion_minor.ron @@ -1,6 +1,8 @@ Item( name: "Minor Potion", - description: "Restores a small amount of Health.", + description: "Restores a small amount of Health. + +Restores 50 Health.", kind: Consumable( kind: PotionMinor, effect: Health(( diff --git a/assets/common/items/velorite.ron b/assets/common/items/velorite.ron index 342a743847..2cefef40b0 100644 --- a/assets/common/items/velorite.ron +++ b/assets/common/items/velorite.ron @@ -1,8 +1,10 @@ Item( name: "Velorite", - description: "Just a slight touch makes you feel the knowledge of ancient times.", + description: "Just a slight touch makes you feel the knowledge of ancient times. + +Increases Exp by 20.", kind: Consumable( kind: Velorite, - effect: Xp(50), + effect: Xp(20), ), ) diff --git a/assets/common/items/veloritefrag.ron b/assets/common/items/veloritefrag.ron index 417eca94b4..d29abf6a4f 100644 --- a/assets/common/items/veloritefrag.ron +++ b/assets/common/items/veloritefrag.ron @@ -1,8 +1,10 @@ Item( name: "Velorite Fragment", - description: "Small runes sparkle on its surface.", + description: "Small runes sparkle on its surface. + +Increases Exp by 10.", kind: Consumable( kind: VeloriteFrag, - effect: Xp(20), + effect: Xp(10), ), ) diff --git a/assets/common/items/weapons/hammer_1.ron b/assets/common/items/weapons/hammer_1.ron index badb1732cc..12573ab023 100644 --- a/assets/common/items/weapons/hammer_1.ron +++ b/assets/common/items/weapons/hammer_1.ron @@ -1,8 +1,12 @@ Item( name: "Crude Mallet", - description: "Breaks bones like sticks and stones.", + description: "Breaks bones like sticks and stones. + \n + Power: 20", kind: Tool( - kind: Hammer, - power: 20, - ), + ( + kind: Hammer(BasicHammer), + equip_time_millis: 500, + ) + ) ) diff --git a/assets/common/items/weapons/shield_1.ron b/assets/common/items/weapons/shield_1.ron new file mode 100644 index 0000000000..83a4157942 --- /dev/null +++ b/assets/common/items/weapons/shield_1.ron @@ -0,0 +1,10 @@ +Item( + name: "A Shield", + description: "Legends tell this item is useless.", + kind: Tool ( + ( + kind: Shield(BasicShield), + equip_time_millis: 400, + ) + ), +) diff --git a/assets/common/items/weapons/short_sword_0.ron b/assets/common/items/weapons/short_sword_0.ron new file mode 100644 index 0000000000..f6ac3ffa0e --- /dev/null +++ b/assets/common/items/weapons/short_sword_0.ron @@ -0,0 +1,11 @@ +Item( + name: "Vicious Gladius", + description: " + Power: 15", + kind: Tool( + ( + kind: Sword(Short0), + equip_time_millis: 400, + ) + ), +) diff --git a/assets/common/items/weapons/staff_1.ron b/assets/common/items/weapons/staff_1.ron index 59e41d09ed..220497d481 100644 --- a/assets/common/items/weapons/staff_1.ron +++ b/assets/common/items/weapons/staff_1.ron @@ -1,8 +1,12 @@ Item( name: "Humble Stick", - description: "Walking stick with a sharpened end.", + description: "Walking stick with a sharpened end. + + Power: 6", kind: Tool( - kind: Hammer, - power: 6, + ( + kind: Staff(BasicStaff), + equip_time_millis: 200, + ) ), ) diff --git a/assets/common/items/weapons/staff_nature.ron b/assets/common/items/weapons/staff_nature.ron new file mode 100644 index 0000000000..d4c76c6b3a --- /dev/null +++ b/assets/common/items/weapons/staff_nature.ron @@ -0,0 +1,11 @@ +Item( + name: "Sceptre of Regeneration", + description: " Infused by the power of Nature. + Power: 25", + kind: Tool( + ( + kind: Staff(Sceptre), + equip_time_millis: 400, + ) + ), +) diff --git a/assets/common/items/weapons/starter_axe.ron b/assets/common/items/weapons/starter_axe.ron index 7a27c1e6db..9c82e4901f 100644 --- a/assets/common/items/weapons/starter_axe.ron +++ b/assets/common/items/weapons/starter_axe.ron @@ -1,8 +1,12 @@ Item( name: "Notched Axe", - description: "Every dent tells the story of a chopped tree.", + description: "Every dent tells the story of a chopped tree. + + Power: 15", kind: Tool( - kind: Axe, - power: 15, + ( + kind: Axe(BasicAxe), + equip_time_millis: 400, + ) ), ) diff --git a/assets/common/items/weapons/starter_bow.ron b/assets/common/items/weapons/starter_bow.ron index 0be646d0e3..fb88134255 100644 --- a/assets/common/items/weapons/starter_bow.ron +++ b/assets/common/items/weapons/starter_bow.ron @@ -1,8 +1,12 @@ Item( name: "Uneven Bow", - description: "Someone carved his initials into it...", + description: "Someone carved his initials into it... + + Power: 15", kind: Tool( - kind: Bow, - power: 15, + ( + kind: Bow(BasicBow), + equip_time_millis: 400, + ) ), ) diff --git a/assets/common/items/weapons/starter_dagger.ron b/assets/common/items/weapons/starter_dagger.ron index 88b4990620..6be38613bd 100644 --- a/assets/common/items/weapons/starter_dagger.ron +++ b/assets/common/items/weapons/starter_dagger.ron @@ -1,8 +1,12 @@ Item( name: "Sharp Kitchen Knife", - description: "Great for cutting meat.", + description: "Great for cutting meat. + + Power: 15", kind: Tool( - kind: Dagger, - power: 15, + ( + kind: Dagger(BasicDagger), + equip_time_millis: 300, + ) ), ) diff --git a/assets/common/items/weapons/starter_hammer.ron b/assets/common/items/weapons/starter_hammer.ron index c27875a5c2..feb59a5da1 100644 --- a/assets/common/items/weapons/starter_hammer.ron +++ b/assets/common/items/weapons/starter_hammer.ron @@ -1,8 +1,12 @@ Item( name: "Sturdy Old Hammer", - description: "'Property of...' The rest is missing. ", + description: "'Property of...' The rest is missing. + + Power: 15", kind: Tool( - kind: Hammer, - power: 15, + ( + kind: Hammer(BasicHammer), + equip_time_millis: 500, + ) ), ) diff --git a/assets/common/items/weapons/starter_staff.ron b/assets/common/items/weapons/starter_staff.ron index 791b518bea..9f19fe2000 100644 --- a/assets/common/items/weapons/starter_staff.ron +++ b/assets/common/items/weapons/starter_staff.ron @@ -1,8 +1,12 @@ Item( name: "Gnarled Rod", - description: "Smells like resin and magic.", + description: "Smells like resin and magic. + + Power: 20", kind: Tool( - kind: Staff, - power: 20, + ( + kind: Staff(BasicStaff), + equip_time_millis: 300, + ) ), ) diff --git a/assets/common/items/weapons/starter_sword.ron b/assets/common/items/weapons/starter_sword.ron index eb4ce67111..4dab78f166 100644 --- a/assets/common/items/weapons/starter_sword.ron +++ b/assets/common/items/weapons/starter_sword.ron @@ -1,8 +1,12 @@ Item( name: "Battered Sword", - description: "Held together by Rust and hope.", + description: "Held together by Rust and hope. + + Power: 15", kind: Tool( - kind: Sword, - power: 15, + ( + kind: Sword(BasicSword), + equip_time_millis: 300, + ) ), ) diff --git a/assets/common/items/weapons/wood_sword.ron b/assets/common/items/weapons/wood_sword.ron new file mode 100644 index 0000000000..a766b88c19 --- /dev/null +++ b/assets/common/items/weapons/wood_sword.ron @@ -0,0 +1,11 @@ +Item( + name: "Wooden Training Sword", + description: " + Power: 15", + kind: Tool( + ( + kind: Sword(WoodTraining), + equip_time_millis: 400, + ) + ), +) diff --git a/assets/common/items/weapons/zweihander_sword_0.ron b/assets/common/items/weapons/zweihander_sword_0.ron new file mode 100644 index 0000000000..32f8e9ca1e --- /dev/null +++ b/assets/common/items/weapons/zweihander_sword_0.ron @@ -0,0 +1,11 @@ +Item( + name: "Sturdy Bihander", + description: " + Power: 15", + kind: Tool( + ( + kind: Sword(Zweihander0), + equip_time_millis: 500, + ) + ), +) diff --git a/assets/voxygen/audio/sfx.ron b/assets/voxygen/audio/sfx.ron index 9add266bf9..cbb67367ba 100644 --- a/assets/voxygen/audio/sfx.ron +++ b/assets/voxygen/audio/sfx.ron @@ -23,17 +23,17 @@ ], threshold: 0.5, ), - Wield(Sword): ( + Wield(Sword(BasicSword)): ( files: [ "voxygen.audio.sfx.weapon.sword_out", ], - threshold: 0.5, + threshold: 1.0, ), - Unwield(Sword): ( + Unwield(Sword(BasicSword)): ( files: [ "voxygen.audio.sfx.weapon.sword_in", ], - threshold: 0.5, + threshold: 1.0, ), Inventory(Collected): ( files: [ @@ -96,4 +96,4 @@ threshold: 0.3, ) } -) \ No newline at end of file +) diff --git a/assets/voxygen/background/bg_9.png b/assets/voxygen/background/bg_9.png new file mode 100644 index 0000000000..9b1b455d0c --- /dev/null +++ b/assets/voxygen/background/bg_9.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:192ecc3b4f6d746d6033d1960b3a67ebea770fd8fb7e609633f2773ba62a576a +size 1518647 diff --git a/assets/voxygen/element/buttons/armor_slot.png b/assets/voxygen/element/buttons/armor_slot.png new file mode 100644 index 0000000000..2eb79d4449 --- /dev/null +++ b/assets/voxygen/element/buttons/armor_slot.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a2fb5c403dced0781cff9dc7ea824a290178a114db9199e50cd762f8540f80c9 +size 2002 diff --git a/assets/voxygen/element/buttons/button_mmap_closed.png b/assets/voxygen/element/buttons/button_mmap_closed.png new file mode 100644 index 0000000000..b6c98ef5d8 --- /dev/null +++ b/assets/voxygen/element/buttons/button_mmap_closed.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:73c7c79a8803598a53977b35a7a1594b97a6b6e9eea9056b414392d3abb81e8e +size 256 diff --git a/assets/voxygen/element/buttons/button_mmap_closed_hover.png b/assets/voxygen/element/buttons/button_mmap_closed_hover.png new file mode 100644 index 0000000000..c564026b15 --- /dev/null +++ b/assets/voxygen/element/buttons/button_mmap_closed_hover.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e21e1e9419d01ffcdd9446fcfb84b75c87b00cdb4146b580dc0d0b6d7c4967e +size 251 diff --git a/assets/voxygen/element/buttons/button_mmap_closed_press.png b/assets/voxygen/element/buttons/button_mmap_closed_press.png new file mode 100644 index 0000000000..5279c1e65a --- /dev/null +++ b/assets/voxygen/element/buttons/button_mmap_closed_press.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:67700122405403d71def32ad9121b3b6d636703be731e77a72b18d50672134f6 +size 261 diff --git a/assets/voxygen/element/buttons/button_mmap_open.png b/assets/voxygen/element/buttons/button_mmap_open.png new file mode 100644 index 0000000000..f175132005 --- /dev/null +++ b/assets/voxygen/element/buttons/button_mmap_open.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ecd12bed8f6b7d33fb243e8a77c167685e34e85d0a9889dfa0d0c7045937526 +size 273 diff --git a/assets/voxygen/element/buttons/button_mmap_open_hover.png b/assets/voxygen/element/buttons/button_mmap_open_hover.png new file mode 100644 index 0000000000..4b2f90dc07 --- /dev/null +++ b/assets/voxygen/element/buttons/button_mmap_open_hover.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7203aadbd31a2717fbfcab16cf27b7e89ad4e5ba398770c87e6d20d9c57e58b5 +size 265 diff --git a/assets/voxygen/element/buttons/button_mmap_open_press.png b/assets/voxygen/element/buttons/button_mmap_open_press.png new file mode 100644 index 0000000000..23428bc6c0 --- /dev/null +++ b/assets/voxygen/element/buttons/button_mmap_open_press.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cc5ffdf4c5c251018510e05d6038d6e8698a87de3b19ab735fecca2b25bf5483 +size 266 diff --git a/assets/voxygen/element/buttons/character.vox b/assets/voxygen/element/buttons/character.vox deleted file mode 100644 index 129481500e..0000000000 --- a/assets/voxygen/element/buttons/character.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c6bd13aad12b5e809263a4831527d302a1ca1497c2792a8969edd2e46eab1b4b -size 6176 diff --git a/assets/voxygen/element/buttons/character_hover.vox b/assets/voxygen/element/buttons/character_hover.vox deleted file mode 100644 index a28ec24984..0000000000 --- a/assets/voxygen/element/buttons/character_hover.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:994c7060abbf1cb2ff7c3aab66514b522838a8d80fc979b9ac5038b0df6dae4b -size 6176 diff --git a/assets/voxygen/element/buttons/character_press.vox b/assets/voxygen/element/buttons/character_press.vox deleted file mode 100644 index a6c0665cc0..0000000000 --- a/assets/voxygen/element/buttons/character_press.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7dd71861482f9472077be6fcbd5181bc10d46b5bd81fdf486d83be9514a18735 -size 6176 diff --git a/assets/voxygen/element/buttons/close_btn.png b/assets/voxygen/element/buttons/close_btn.png new file mode 100644 index 0000000000..1c2b271be8 --- /dev/null +++ b/assets/voxygen/element/buttons/close_btn.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:31e49f8953cf6c4ec90b86b504b837e83955c22a2b254f4292497237b01a7a41 +size 470 diff --git a/assets/voxygen/element/buttons/close_btn_hover.png b/assets/voxygen/element/buttons/close_btn_hover.png new file mode 100644 index 0000000000..837ea7c6d8 --- /dev/null +++ b/assets/voxygen/element/buttons/close_btn_hover.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b5a5a2c23ac7a90c7a48b22d5785b343938aaca40ed17beef4eb923abd317578 +size 485 diff --git a/assets/voxygen/element/buttons/close_btn_press.png b/assets/voxygen/element/buttons/close_btn_press.png new file mode 100644 index 0000000000..965d99b0bf --- /dev/null +++ b/assets/voxygen/element/buttons/close_btn_press.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:37d07c311f9dd99b8d8af2cb0443c56bad4b1e8a701a4961139cf3eb091a60f7 +size 469 diff --git a/assets/voxygen/element/buttons/indicator_mmap.png b/assets/voxygen/element/buttons/indicator_mmap.png new file mode 100644 index 0000000000..a72c33689b --- /dev/null +++ b/assets/voxygen/element/buttons/indicator_mmap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3d19cb3d350b1e192a4a83472c231b35847812f50118adc0eed21aa07a2bad46 +size 719 diff --git a/assets/voxygen/element/buttons/indicator_mmap_small.png b/assets/voxygen/element/buttons/indicator_mmap_small.png new file mode 100644 index 0000000000..a72c33689b --- /dev/null +++ b/assets/voxygen/element/buttons/indicator_mmap_small.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3d19cb3d350b1e192a4a83472c231b35847812f50118adc0eed21aa07a2bad46 +size 719 diff --git a/assets/voxygen/element/buttons/inv_slot.png b/assets/voxygen/element/buttons/inv_slot.png new file mode 100644 index 0000000000..0e90ce0d71 --- /dev/null +++ b/assets/voxygen/element/buttons/inv_slot.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9ce200dd3b21561d5ddafb2f0a7d22708495185f80aaf84cde4f9160a1494c56 +size 318 diff --git a/assets/voxygen/element/buttons/inv_slot_sel.png b/assets/voxygen/element/buttons/inv_slot_sel.png new file mode 100644 index 0000000000..add7f51049 --- /dev/null +++ b/assets/voxygen/element/buttons/inv_slot_sel.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0b1cf070dec414799b192dfcbb2efc96ce04ff50a6f56bf8bd46548e9f0aaa31 +size 316 diff --git a/assets/voxygen/element/buttons/inv_tab.vox b/assets/voxygen/element/buttons/inv_tab.vox new file mode 100644 index 0000000000..dc60c1323b --- /dev/null +++ b/assets/voxygen/element/buttons/inv_tab.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab46da914aa73fd0a7aff023883cd5392d01f0609383d4c143d5c3680b65250a +size 57195 diff --git a/assets/voxygen/element/buttons/inv_tab_active.png b/assets/voxygen/element/buttons/inv_tab_active.png new file mode 100644 index 0000000000..4619392a71 --- /dev/null +++ b/assets/voxygen/element/buttons/inv_tab_active.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:641d77903cb71d36a99c9551e418d73ee6b2bf85039f3a6546aaea9770072e0e +size 305 diff --git a/assets/voxygen/element/buttons/inv_tab_inactive.png b/assets/voxygen/element/buttons/inv_tab_inactive.png new file mode 100644 index 0000000000..159c2e45e1 --- /dev/null +++ b/assets/voxygen/element/buttons/inv_tab_inactive.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e46d4152a06998dabdc04112aa2fcd1706438ca08c6b48e45211c50f45b0ab9 +size 574 diff --git a/assets/voxygen/element/buttons/inv_tab_inactive_hover.png b/assets/voxygen/element/buttons/inv_tab_inactive_hover.png new file mode 100644 index 0000000000..1dc0acd186 --- /dev/null +++ b/assets/voxygen/element/buttons/inv_tab_inactive_hover.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ad7f5d7662ba295592272ed80281428e18b779021f0ae15d9485d88581be32b +size 340 diff --git a/assets/voxygen/element/buttons/inv_tab_inactive_press.png b/assets/voxygen/element/buttons/inv_tab_inactive_press.png new file mode 100644 index 0000000000..1dc0acd186 --- /dev/null +++ b/assets/voxygen/element/buttons/inv_tab_inactive_press.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ad7f5d7662ba295592272ed80281428e18b779021f0ae15d9485d88581be32b +size 340 diff --git a/assets/voxygen/element/buttons/min_plus/mmap_button-min.png b/assets/voxygen/element/buttons/min_plus/mmap_button-min.png new file mode 100644 index 0000000000..0e59e30af5 --- /dev/null +++ b/assets/voxygen/element/buttons/min_plus/mmap_button-min.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ac279d297cb9480128ef5c5eda66e78d21c88064fedc0065662e7997a92a2e2 +size 223 diff --git a/assets/voxygen/element/buttons/min_plus/mmap_button-min.vox b/assets/voxygen/element/buttons/min_plus/mmap_button-min.vox deleted file mode 100644 index 4846fc04d0..0000000000 --- a/assets/voxygen/element/buttons/min_plus/mmap_button-min.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b32bf65b8f205ae1ece1a365cc115080954f81b4606c0ecdadc5348fcdc1a05e -size 58044 diff --git a/assets/voxygen/element/buttons/min_plus/mmap_button-min_hover.png b/assets/voxygen/element/buttons/min_plus/mmap_button-min_hover.png new file mode 100644 index 0000000000..946ec005c6 --- /dev/null +++ b/assets/voxygen/element/buttons/min_plus/mmap_button-min_hover.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:434e55754eda06ebc1cfac3b178ce0a9984a50b9841c532bbf1dcdf4ef66b82a +size 222 diff --git a/assets/voxygen/element/buttons/min_plus/mmap_button-min_hover.vox b/assets/voxygen/element/buttons/min_plus/mmap_button-min_hover.vox deleted file mode 100644 index 2d4e5db864..0000000000 --- a/assets/voxygen/element/buttons/min_plus/mmap_button-min_hover.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:15d0cf0a74d08e6654d7afcbc9626089bafc83c499c75d77693867e5f3761835 -size 58044 diff --git a/assets/voxygen/element/buttons/min_plus/mmap_button-min_press.png b/assets/voxygen/element/buttons/min_plus/mmap_button-min_press.png new file mode 100644 index 0000000000..7b60ce8897 --- /dev/null +++ b/assets/voxygen/element/buttons/min_plus/mmap_button-min_press.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d3cff85f44a4302878353f07a587decc5de89dda11beb8d676212a3c9c7d52e +size 222 diff --git a/assets/voxygen/element/buttons/min_plus/mmap_button-min_press.vox b/assets/voxygen/element/buttons/min_plus/mmap_button-min_press.vox deleted file mode 100644 index 7c2d8b6e52..0000000000 --- a/assets/voxygen/element/buttons/min_plus/mmap_button-min_press.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8f15fefed88aa5e069da1d496c92730cd3531ee81907450e301f81bc2ed03a7e -size 3560 diff --git a/assets/voxygen/element/buttons/min_plus/mmap_button-plus.png b/assets/voxygen/element/buttons/min_plus/mmap_button-plus.png new file mode 100644 index 0000000000..ebbeadf4a6 --- /dev/null +++ b/assets/voxygen/element/buttons/min_plus/mmap_button-plus.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2447d95d379286fe65032dc8ff8cdce3ff33277837eb310826b61698735176cd +size 258 diff --git a/assets/voxygen/element/buttons/min_plus/mmap_button-plus.vox b/assets/voxygen/element/buttons/min_plus/mmap_button-plus.vox deleted file mode 100644 index 9503ce5391..0000000000 --- a/assets/voxygen/element/buttons/min_plus/mmap_button-plus.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d6e5b5a9f78f8733a9e32f5b97a7d8f205ea157e91a2188eb47ccc8e0384aaa5 -size 58092 diff --git a/assets/voxygen/element/buttons/min_plus/mmap_button-plus_hover.png b/assets/voxygen/element/buttons/min_plus/mmap_button-plus_hover.png new file mode 100644 index 0000000000..0eb42f2400 --- /dev/null +++ b/assets/voxygen/element/buttons/min_plus/mmap_button-plus_hover.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:13489ec93e8261744a1d6c5ca766ebd3085789e8511172df4b7e5cf1bb920a22 +size 252 diff --git a/assets/voxygen/element/buttons/min_plus/mmap_button-plus_hover.vox b/assets/voxygen/element/buttons/min_plus/mmap_button-plus_hover.vox deleted file mode 100644 index 4003eb833c..0000000000 --- a/assets/voxygen/element/buttons/min_plus/mmap_button-plus_hover.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b7fcb6c6f2c6299fffec7569bbcb166b97078a185bd66f466754142c93b9d2b1 -size 58092 diff --git a/assets/voxygen/element/buttons/min_plus/mmap_button-plus_press.png b/assets/voxygen/element/buttons/min_plus/mmap_button-plus_press.png new file mode 100644 index 0000000000..ae053311f0 --- /dev/null +++ b/assets/voxygen/element/buttons/min_plus/mmap_button-plus_press.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e33cd41bb73bae11f0dd31b8465fcb97195842193b533e1a647ed0520b2d5a4d +size 263 diff --git a/assets/voxygen/element/buttons/min_plus/mmap_button-plus_press.vox b/assets/voxygen/element/buttons/min_plus/mmap_button-plus_press.vox deleted file mode 100644 index 4ed8343da5..0000000000 --- a/assets/voxygen/element/buttons/min_plus/mmap_button-plus_press.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:68463cf14fa559d584fcd49ebde24c9af724fb25724541e73b13d796382aea01 -size 58092 diff --git a/assets/voxygen/element/buttons/qlog.vox b/assets/voxygen/element/buttons/qlog.vox deleted file mode 100644 index a38da1dd99..0000000000 --- a/assets/voxygen/element/buttons/qlog.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:935480f7410da225aed0edb7daeaaa97df5d77516ec2e45480d723924fdb883b -size 3152 diff --git a/assets/voxygen/element/buttons/qlog_hover.vox b/assets/voxygen/element/buttons/qlog_hover.vox deleted file mode 100644 index e01a0c83ea..0000000000 --- a/assets/voxygen/element/buttons/qlog_hover.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e65bf684308de74d949bd99e54edd70359a71a84b4e7df11758dc97643e98940 -size 3152 diff --git a/assets/voxygen/element/buttons/qlog_press.vox b/assets/voxygen/element/buttons/qlog_press.vox deleted file mode 100644 index 2efd49b22a..0000000000 --- a/assets/voxygen/element/buttons/qlog_press.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:745c3cff04c1d5b251abc40d40d86a7dd3a579619149b1e818256a45e159b97c -size 3152 diff --git a/assets/voxygen/element/frames/divider_charwindow.vox b/assets/voxygen/element/frames/divider_charwindow.vox index 6c0d05b1e8..a09a43f111 100644 --- a/assets/voxygen/element/frames/divider_charwindow.vox +++ b/assets/voxygen/element/frames/divider_charwindow.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:01261b4c1122d200a2c633e1d02949b89d569e5bb4071005cdd57e173bfba238 -size 2000 +oid sha256:f75d7b8c3e4a8df8ff26a1db91bf9425762895e072962da08791ea04d575218f +size 55723 diff --git a/assets/voxygen/element/frames/map_bl.vox b/assets/voxygen/element/frames/map_bl.vox deleted file mode 100644 index f71cce3398..0000000000 --- a/assets/voxygen/element/frames/map_bl.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d19312700f14113007bcc50fb69143f7de15e790ea4b23fc88a4732443fa2195 -size 208148 diff --git a/assets/voxygen/element/frames/map_br.vox b/assets/voxygen/element/frames/map_br.vox deleted file mode 100644 index cd27ee81c6..0000000000 --- a/assets/voxygen/element/frames/map_br.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:94d1c4b6beaa45236df3d75b94205d73e1479109899d009b40b42ed680acc1f3 -size 208148 diff --git a/assets/voxygen/element/frames/map_l.vox b/assets/voxygen/element/frames/map_l.vox deleted file mode 100644 index 6a4a7471e7..0000000000 --- a/assets/voxygen/element/frames/map_l.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a70d5a5025e02599f37b0f4777c00a1dde598336218727bfc7b493be2acdef9d -size 206476 diff --git a/assets/voxygen/element/frames/map_r.vox b/assets/voxygen/element/frames/map_r.vox deleted file mode 100644 index 8dd4867146..0000000000 --- a/assets/voxygen/element/frames/map_r.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:523fd3ed0b9a21a1e9582a48a05b62f09eec8b96fc823d09966fc9170845fcc2 -size 206616 diff --git a/assets/voxygen/element/frames/mmap.png b/assets/voxygen/element/frames/mmap.png new file mode 100644 index 0000000000..9ea11136b5 --- /dev/null +++ b/assets/voxygen/element/frames/mmap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ad8ecb5ddc4d9e649bac26a15e28b4eb0af2f493c7a2304c87209a6c065f927c +size 8738 diff --git a/assets/voxygen/element/frames/mmap.vox b/assets/voxygen/element/frames/mmap.vox deleted file mode 100644 index 2ad34e875c..0000000000 --- a/assets/voxygen/element/frames/mmap.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2146289fd08e72685f2607c7e759077f1efa35245f9fbe389557b19cf32e7b6b -size 176344 diff --git a/assets/voxygen/element/frames/mmap_closed.png b/assets/voxygen/element/frames/mmap_closed.png new file mode 100644 index 0000000000..540d09fc78 --- /dev/null +++ b/assets/voxygen/element/frames/mmap_closed.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3bdf04e0f5f0e2688f31bf367f18056ffb78560268cf70c26fb2109dcb071c6b +size 1021 diff --git a/assets/voxygen/element/frames/mmap_closed.vox b/assets/voxygen/element/frames/mmap_closed.vox deleted file mode 100644 index 827e88a4f7..0000000000 --- a/assets/voxygen/element/frames/mmap_closed.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d8a086f7f82ff9bc8a394d8deb6aca5d1923fb9f7411f824fd7b4ac64d2f4574 -size 50431 diff --git a/assets/voxygen/element/frames/mmap_frame.png b/assets/voxygen/element/frames/mmap_frame.png new file mode 100644 index 0000000000..305ead4d7d --- /dev/null +++ b/assets/voxygen/element/frames/mmap_frame.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d7f3836e6a163c8540e61de5a56bb3dc11902d3e3628ee733d30727c53bffbe +size 1095 diff --git a/assets/voxygen/element/frames/server_frame.vox b/assets/voxygen/element/frames/server_frame.vox index a7b0744a2d..275e25e4b9 100644 --- a/assets/voxygen/element/frames/server_frame.vox +++ b/assets/voxygen/element/frames/server_frame.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:602bbe3f01982feda6c79da82b5000ed151da1e5e59be0f75f19c9bc7b86af66 -size 1624 +oid sha256:d64f764aa7ea65bf21201a7c0574486c7c73425ac94872cd4c5d27845f056029 +size 56107 diff --git a/assets/voxygen/element/frames/window.vox b/assets/voxygen/element/frames/window.vox index 9a9b5957b4..cc1ec0d0e2 100644 --- a/assets/voxygen/element/frames/window.vox +++ b/assets/voxygen/element/frames/window.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:67e0e42e279400c50f41c2fe8e0a3558885fa852f105c8c1eb38ec4c5eabd54e -size 153836 +oid sha256:3e00dce196b1454d243126fca7ce2b5ea3c1f23391a4debec2bd774cff6dc22d +size 208320 diff --git a/assets/voxygen/element/frames/window_3.vox b/assets/voxygen/element/frames/window_3.vox index af01983c4d..534f4fe15e 100644 --- a/assets/voxygen/element/frames/window_3.vox +++ b/assets/voxygen/element/frames/window_3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:664d22942cb76f938ea4b7b68efc18dc9e2305c3e667ab7ea5ad256b2b42cea0 -size 241316 +oid sha256:502eb49272f79935ccd309a53c67db691f64736e2aa18814e51f75e86a83e6cd +size 252692 diff --git a/assets/voxygen/element/frames/window_4.vox b/assets/voxygen/element/frames/window_4.vox index 6f69e5b24b..5ef43b401e 100644 --- a/assets/voxygen/element/frames/window_4.vox +++ b/assets/voxygen/element/frames/window_4.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3e679e7e2147fb31fc03f3fcc26bd174e2334d6f8f10bdbba143e0d2b3114e2c -size 2440 +oid sha256:e1fd9cf331ae3bf6a45de507b5e28072fac2566a65086334dc0de7e1932ba5f8 +size 56924 diff --git a/assets/voxygen/element/help.png b/assets/voxygen/element/help.png index c399bd2d1a..b72966dcea 100644 --- a/assets/voxygen/element/help.png +++ b/assets/voxygen/element/help.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4c71ba3a6458d00f3c6fb2820f1a83c6138a4776fdfd7167c2766b40b7bbb377 -size 14939 +oid sha256:1b9f41be9c1e49a2dfa1be3565a0c18d30ee4f7ab8ad2c879b8fa461c845699b +size 14795 diff --git a/assets/voxygen/element/icons/2haxe_m1.png b/assets/voxygen/element/icons/2haxe_m1.png new file mode 100644 index 0000000000..5b26cd998a --- /dev/null +++ b/assets/voxygen/element/icons/2haxe_m1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bddd94d15a337c957883c58d8c0cc437f59c1adab9cadd083d3bbaeedc4540be +size 947 diff --git a/assets/voxygen/element/icons/2haxe_m1.vox b/assets/voxygen/element/icons/2haxe_m1.vox deleted file mode 100644 index 0acae649d4..0000000000 --- a/assets/voxygen/element/icons/2haxe_m1.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:30285d002357f18544456a063c66549e804075979a9f4c5e120eab2bf58923f5 -size 57713 diff --git a/assets/voxygen/element/icons/2haxe_m2.png b/assets/voxygen/element/icons/2haxe_m2.png new file mode 100644 index 0000000000..3a4718ad2d --- /dev/null +++ b/assets/voxygen/element/icons/2haxe_m2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7967e73c1aad20878c3a72c3763a5500b2d147d09ec052351d7bb700866e2246 +size 708 diff --git a/assets/voxygen/element/icons/2haxe_m2.vox b/assets/voxygen/element/icons/2haxe_m2.vox deleted file mode 100644 index 7df7f10fed..0000000000 --- a/assets/voxygen/element/icons/2haxe_m2.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:95af09926041808154892286e0f0088783c24bc43e45bb00d717921cc29ec4e9 -size 57937 diff --git a/assets/voxygen/element/icons/2hhammer_m1.png b/assets/voxygen/element/icons/2hhammer_m1.png new file mode 100644 index 0000000000..522767626c --- /dev/null +++ b/assets/voxygen/element/icons/2hhammer_m1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1cd9bde2284656bd1b44856098cd32dd02f51d1bc233fc7658d71ae57e6468f2 +size 597 diff --git a/assets/voxygen/element/icons/2hhammer_m1.vox b/assets/voxygen/element/icons/2hhammer_m1.vox deleted file mode 100644 index 691b8df6f2..0000000000 --- a/assets/voxygen/element/icons/2hhammer_m1.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6bbd371eedd0710e05a13e894edd9a3d13e209ace6df0f27fda344fc110a944b -size 57721 diff --git a/assets/voxygen/element/icons/2hhammer_m2.png b/assets/voxygen/element/icons/2hhammer_m2.png new file mode 100644 index 0000000000..143311f155 --- /dev/null +++ b/assets/voxygen/element/icons/2hhammer_m2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a87e8d141f83e135f42e9d3b6b0c8b1d961506d8f8e28398e67c6a84d998411 +size 806 diff --git a/assets/voxygen/element/icons/2hhammer_m2.vox b/assets/voxygen/element/icons/2hhammer_m2.vox deleted file mode 100644 index dfbcfa3460..0000000000 --- a/assets/voxygen/element/icons/2hhammer_m2.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e32dd1e339f933a80e701e3fdf997a1b9e361083059a1e301d2324091c9ff4e1 -size 57809 diff --git a/assets/voxygen/element/icons/2hsword_m1.png b/assets/voxygen/element/icons/2hsword_m1.png new file mode 100644 index 0000000000..1b36b8a46f --- /dev/null +++ b/assets/voxygen/element/icons/2hsword_m1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f442cb6ef061bfee9e66168b9c32e5bdb7e59fde790c0be31f93785857779e6f +size 784 diff --git a/assets/voxygen/element/icons/2hsword_m1.vox b/assets/voxygen/element/icons/2hsword_m1.vox deleted file mode 100644 index ea2a8e1eb9..0000000000 --- a/assets/voxygen/element/icons/2hsword_m1.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:dfd03c8de8d52353a54311ef539d0a03786929e1b0842e9806f389659d8faca2 -size 57621 diff --git a/assets/voxygen/element/icons/2hsword_m2.png b/assets/voxygen/element/icons/2hsword_m2.png new file mode 100644 index 0000000000..d54cda0e92 --- /dev/null +++ b/assets/voxygen/element/icons/2hsword_m2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b7a2ab9fac21eade39278def1c4e76ce793737c6bd3f4d55037a930ad304e34 +size 929 diff --git a/assets/voxygen/element/icons/2hsword_m2.vox b/assets/voxygen/element/icons/2hsword_m2.vox deleted file mode 100644 index d62b2b3b40..0000000000 --- a/assets/voxygen/element/icons/2hsword_m2.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:131cba637ca168a8fa1f3d5fba6e163323d5ff3968dca00d7839366142fa3c4b -size 58366 diff --git a/assets/voxygen/element/icons/2hsword_slash.png b/assets/voxygen/element/icons/2hsword_slash.png new file mode 100644 index 0000000000..18d36aef24 --- /dev/null +++ b/assets/voxygen/element/icons/2hsword_slash.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b827aa50558455a6ba821e4f032d45ae04d7bfdcecd2597fc1cb6c0b0e6d1973 +size 782 diff --git a/assets/voxygen/element/icons/back.png b/assets/voxygen/element/icons/back.png new file mode 100644 index 0000000000..46c6472b1f --- /dev/null +++ b/assets/voxygen/element/icons/back.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de53aa3a5c0833ec1ee9b89872a25643742aef22b70b2cc2ba5af4435a6714bf +size 1080 diff --git a/assets/voxygen/element/icons/back.vox b/assets/voxygen/element/icons/back.vox deleted file mode 100644 index a9f8eee678..0000000000 --- a/assets/voxygen/element/icons/back.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f0fed53b953e06948cf233f3d4f3f27bac06c12f1b9c1687e1b47a3f66d5bc35 -size 62604 diff --git a/assets/voxygen/element/icons/belt.png b/assets/voxygen/element/icons/belt.png new file mode 100644 index 0000000000..5588b7fe24 --- /dev/null +++ b/assets/voxygen/element/icons/belt.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e10d69242cbb54530ca4353663d57f1abea4b997568b9335fd19dfe158b1bafe +size 935 diff --git a/assets/voxygen/element/icons/belt.vox b/assets/voxygen/element/icons/belt.vox deleted file mode 100644 index 49d0bff7cb..0000000000 --- a/assets/voxygen/element/icons/belt.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:aa92f8ffc54d7838fa7bb90ff76df7a9e67d95bcbf1c339b7563f5e7b57befe1 -size 61268 diff --git a/assets/voxygen/element/icons/bow_m1.png b/assets/voxygen/element/icons/bow_m1.png new file mode 100644 index 0000000000..b9cb8af63d --- /dev/null +++ b/assets/voxygen/element/icons/bow_m1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff1b52d259aafa8384e05dc5ae2ca3dcd7a88c7a4456149cc7a37e9e0c106ad5 +size 808 diff --git a/assets/voxygen/element/icons/bow_m1.vox b/assets/voxygen/element/icons/bow_m1.vox deleted file mode 100644 index 1ec968f5d3..0000000000 --- a/assets/voxygen/element/icons/bow_m1.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e0575beddb81670abd9e2cd8571b0d21bd902756f0b321ffa5b3433bc96da480 -size 61545 diff --git a/assets/voxygen/element/icons/character.png b/assets/voxygen/element/icons/character.png new file mode 100644 index 0000000000..06e65f3675 --- /dev/null +++ b/assets/voxygen/element/icons/character.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e9e956d538c65f19b705804539b1554cc9216c118812d6cc80300762abeeb625 +size 1297 diff --git a/assets/voxygen/element/icons/charwindow.png b/assets/voxygen/element/icons/charwindow.png deleted file mode 100644 index efaf7f83cf..0000000000 --- a/assets/voxygen/element/icons/charwindow.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e2b7bd9a2d3a383addd7463450acd26b965e0bb256c14221f0c0652d75f013d0 -size 17565 diff --git a/assets/voxygen/element/icons/chest.png b/assets/voxygen/element/icons/chest.png new file mode 100644 index 0000000000..dde643eaef --- /dev/null +++ b/assets/voxygen/element/icons/chest.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0b1bab917b7854f944d2c5c145a905a5dd8a610b7027e37c16919ab91d655a68 +size 981 diff --git a/assets/voxygen/element/icons/chest.vox b/assets/voxygen/element/icons/chest.vox deleted file mode 100644 index e7593a2382..0000000000 --- a/assets/voxygen/element/icons/chest.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3446d88d65fd7bdbb5b195dbe45809a56c27e527c59360a4be32795c4f034f0d -size 61612 diff --git a/assets/voxygen/element/icons/coin.png b/assets/voxygen/element/icons/coin.png new file mode 100644 index 0000000000..d3be411bac --- /dev/null +++ b/assets/voxygen/element/icons/coin.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e1741873b26a6da3d6fe309aab67db9a8d3c00ea2ef047b4ecf8672e6de70bc4 +size 440 diff --git a/assets/voxygen/element/icons/collar.png b/assets/voxygen/element/icons/collar.png new file mode 100644 index 0000000000..a24983860c --- /dev/null +++ b/assets/voxygen/element/icons/collar.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:78eb78fef1639b035869ee1de1fed5ccc86caf1199651ce8881afc10f8d737d2 +size 506 diff --git a/assets/voxygen/element/icons/collar.vox b/assets/voxygen/element/icons/collar.vox deleted file mode 100644 index 92b3346340..0000000000 --- a/assets/voxygen/element/icons/collar.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f8d5ce0e89923fa33ab1cb169ff7cab414c863956b6b7620bd4a6b82409af3e5 -size 58948 diff --git a/assets/voxygen/element/icons/debug_wand_m1.png b/assets/voxygen/element/icons/debug_wand_m1.png new file mode 100644 index 0000000000..ae496eec91 --- /dev/null +++ b/assets/voxygen/element/icons/debug_wand_m1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca52786d85797896195c075c1bc91c22f2c87d6a9e64f08dac65d3da3e91e48b +size 839 diff --git a/assets/voxygen/element/icons/debug_wand_m1.vox b/assets/voxygen/element/icons/debug_wand_m1.vox deleted file mode 100644 index cbb55307e3..0000000000 --- a/assets/voxygen/element/icons/debug_wand_m1.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8d1dc3cc5efc9e9a6278af9fef4894abd7a3e99635b518d063c54f39d64b55e4 -size 58630 diff --git a/assets/voxygen/element/icons/debug_wand_m2.png b/assets/voxygen/element/icons/debug_wand_m2.png new file mode 100644 index 0000000000..c0b53ecf35 --- /dev/null +++ b/assets/voxygen/element/icons/debug_wand_m2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:50277d1222dd1b25ded80edc443830deb74db368a66dac5c0398112b9e4618cb +size 900 diff --git a/assets/voxygen/element/icons/debug_wand_m2.vox b/assets/voxygen/element/icons/debug_wand_m2.vox deleted file mode 100644 index 91bb7626c9..0000000000 --- a/assets/voxygen/element/icons/debug_wand_m2.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7b58de07685de2a912cd7f11cd627af86d19d7efb060b2b92d74f74031b12a5f -size 59241 diff --git a/assets/voxygen/element/icons/endurance.png b/assets/voxygen/element/icons/endurance.png new file mode 100644 index 0000000000..ede3667e9b --- /dev/null +++ b/assets/voxygen/element/icons/endurance.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6376aa744efcbb3acf5cb5e81ec271522185239c030a4071f6c67f3b15903f33 +size 550 diff --git a/assets/voxygen/element/icons/feet.png b/assets/voxygen/element/icons/feet.png new file mode 100644 index 0000000000..6aa78499fb --- /dev/null +++ b/assets/voxygen/element/icons/feet.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:003eeb041dd5cd61945c3f6c6bb54fecebbfb3d13a301d8a7786cc88df08af95 +size 974 diff --git a/assets/voxygen/element/icons/feet.vox b/assets/voxygen/element/icons/feet.vox deleted file mode 100644 index 20127bc7e0..0000000000 --- a/assets/voxygen/element/icons/feet.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8a20ba6cc66e585069fddeacdafd89746504ee6ac81e57fcfa2a34293b81cc24 -size 61212 diff --git a/assets/voxygen/element/icons/fire_bolt_1.png b/assets/voxygen/element/icons/fire_bolt_1.png new file mode 100644 index 0000000000..7839441a2a --- /dev/null +++ b/assets/voxygen/element/icons/fire_bolt_1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b0de03fc395a2136232308a43c9426e871f1855fd7040f107c0d21c544bc9791 +size 777 diff --git a/assets/voxygen/element/icons/fire_spell_0.png b/assets/voxygen/element/icons/fire_spell_0.png new file mode 100644 index 0000000000..dab7f87c07 --- /dev/null +++ b/assets/voxygen/element/icons/fire_spell_0.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fcd5b65b0295b8467b90712d8a7d4ccab5bef8de8e1a24234f9628459ba8c746 +size 695 diff --git a/assets/voxygen/element/icons/fitness.png b/assets/voxygen/element/icons/fitness.png new file mode 100644 index 0000000000..6e68775f5d --- /dev/null +++ b/assets/voxygen/element/icons/fitness.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f40b0799bff94dfd23f2b172e672d480a86a86363ad5ce4c969c97762f63d760 +size 697 diff --git a/assets/voxygen/element/icons/gem.vox b/assets/voxygen/element/icons/gem.vox deleted file mode 100644 index 4a346ed2bf..0000000000 --- a/assets/voxygen/element/icons/gem.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0eeda19e2850ef3b521cb6a4d7d2ea9c85bc7c141ef01abf589880cc3738b234 -size 62236 diff --git a/assets/voxygen/element/icons/hands.png b/assets/voxygen/element/icons/hands.png new file mode 100644 index 0000000000..54156f1703 --- /dev/null +++ b/assets/voxygen/element/icons/hands.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:43eba8f1c26e8211db134c22a8fe706558f9e2ea75a05db2a231745850f5f79e +size 1121 diff --git a/assets/voxygen/element/icons/hands.vox b/assets/voxygen/element/icons/hands.vox deleted file mode 100644 index 3f47c0c3a3..0000000000 --- a/assets/voxygen/element/icons/hands.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0cc139fac19e456c4ed91df21fd41f5c8ef868bfd968055ff66d4ff8acb7c3b5 -size 61644 diff --git a/assets/voxygen/element/icons/head.png b/assets/voxygen/element/icons/head.png new file mode 100644 index 0000000000..afaefaf325 --- /dev/null +++ b/assets/voxygen/element/icons/head.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b1620570303bfcd672339b5f5b6460b2304d6c81d22cc0bf29865973c1fdf515 +size 1057 diff --git a/assets/voxygen/element/icons/head.vox b/assets/voxygen/element/icons/head.vox deleted file mode 100644 index de41bf0327..0000000000 --- a/assets/voxygen/element/icons/head.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5beedc43d289152ecbe622f36bb203fa0b39ff51cf1c77e7ef59fddfa075b4ee -size 63728 diff --git a/assets/voxygen/element/icons/heal_0.png b/assets/voxygen/element/icons/heal_0.png new file mode 100644 index 0000000000..bac626be04 --- /dev/null +++ b/assets/voxygen/element/icons/heal_0.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e68b8d6a36b444e17797015e439ed711b865f53a1992762139db2228ca25b686 +size 730 diff --git a/assets/voxygen/element/icons/item_flower.png b/assets/voxygen/element/icons/item_flower.png deleted file mode 100644 index 80ecd5f523..0000000000 --- a/assets/voxygen/element/icons/item_flower.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3630ed8f161514e1fb5960c0faa59c88f1be17aae9bacc26f935b7ffc18332f9 -size 13979 diff --git a/assets/voxygen/element/icons/item_mushroom.vox b/assets/voxygen/element/icons/item_mushroom.vox deleted file mode 100644 index afb453857f..0000000000 --- a/assets/voxygen/element/icons/item_mushroom.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3d777456ff641f2e4a0b3e87caa01b264cc93ec9554ed123c42ee91729ba6589 -size 57847 diff --git a/assets/voxygen/element/icons/legs.png b/assets/voxygen/element/icons/legs.png new file mode 100644 index 0000000000..169804cc10 --- /dev/null +++ b/assets/voxygen/element/icons/legs.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:34a8297f2434c36e95dbb9f9dffda318a2add3e1e0bde9dabbf6d986930a583b +size 959 diff --git a/assets/voxygen/element/icons/legs.vox b/assets/voxygen/element/icons/legs.vox deleted file mode 100644 index 85375ee204..0000000000 --- a/assets/voxygen/element/icons/legs.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:62817a15ea83e0af343bce8eac4260cd0a1c5386cea227ad1ca1b7ae488b1439 -size 60140 diff --git a/assets/voxygen/element/icons/mainhand.png b/assets/voxygen/element/icons/mainhand.png new file mode 100644 index 0000000000..acb2159e6f --- /dev/null +++ b/assets/voxygen/element/icons/mainhand.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e6a942f3fbfa15c06cf547e05ef46bedb191e9f1192f1dfdd0e2051096dbd17 +size 608 diff --git a/assets/voxygen/element/icons/mainhand.vox b/assets/voxygen/element/icons/mainhand.vox deleted file mode 100644 index 68d68bf9d7..0000000000 --- a/assets/voxygen/element/icons/mainhand.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b29577ae26134a468e767001ac69929e1ad656af694bda38b75e4bee83da673d -size 15844 diff --git a/assets/voxygen/element/icons/map.png b/assets/voxygen/element/icons/map.png index c417fd61e4..988d642d8b 100644 --- a/assets/voxygen/element/icons/map.png +++ b/assets/voxygen/element/icons/map.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4450d03fbd53f56968d3c9fd04d6f1c7e8428be77d8579caea11a29795fddb20 -size 14696 +oid sha256:5f3e51c8690da8bde9b59fef25b3530c2861a39242806bee663c7c435aab2717 +size 933 diff --git a/assets/voxygen/element/icons/necklace.png b/assets/voxygen/element/icons/necklace.png new file mode 100644 index 0000000000..b410d9f49a --- /dev/null +++ b/assets/voxygen/element/icons/necklace.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8224a574cf07306249973ca3d8e6c31a43c0f3265dacc209bd824d71505b36a8 +size 741 diff --git a/assets/voxygen/element/icons/necklace.vox b/assets/voxygen/element/icons/necklace.vox deleted file mode 100644 index 7712027800..0000000000 --- a/assets/voxygen/element/icons/necklace.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9f6c06b002a1d836fe8921dbe2888232c47040a120efb8617f26846cd9a1af21 -size 59564 diff --git a/assets/voxygen/element/icons/offhand.png b/assets/voxygen/element/icons/offhand.png new file mode 100644 index 0000000000..a5ba86c30e --- /dev/null +++ b/assets/voxygen/element/icons/offhand.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ea7336a0124db8df3b67c54b6db07373e141561589dcfc3d919b3b75a81efec +size 592 diff --git a/assets/voxygen/element/icons/offhand.vox b/assets/voxygen/element/icons/offhand.vox deleted file mode 100644 index 4e65802558..0000000000 --- a/assets/voxygen/element/icons/offhand.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3fc29c53975102582cf938181311f0ada6a2c7c9e044f9a4d0883ab9c899fc4e -size 19088 diff --git a/assets/voxygen/element/icons/questlog.png b/assets/voxygen/element/icons/questlog.png deleted file mode 100644 index 4f9dc04824..0000000000 --- a/assets/voxygen/element/icons/questlog.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d11ccdd6a77b5858f1260c5001f1d0ca908ad888d2ef29f7b777a637e6eb2a79 -size 2282 diff --git a/assets/voxygen/element/icons/ring.png b/assets/voxygen/element/icons/ring.png new file mode 100644 index 0000000000..d07b37cb5b --- /dev/null +++ b/assets/voxygen/element/icons/ring.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0574ad5eb1fec7b7984cf97cd584749943f2a3a65f707aee4ec10dbb630059f7 +size 2986 diff --git a/assets/voxygen/element/icons/ring.vox b/assets/voxygen/element/icons/ring.vox deleted file mode 100644 index cddf5b7483..0000000000 --- a/assets/voxygen/element/icons/ring.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1c73f9198c986bce203d62afaeeb5690a4009cb9b0b731eb99775a36b3932466 -size 19496 diff --git a/assets/voxygen/element/icons/settings.png b/assets/voxygen/element/icons/settings.png deleted file mode 100644 index 028704a0da..0000000000 --- a/assets/voxygen/element/icons/settings.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b34e23056a85d37c6afc59a2bc9c7f0a085bf6c4b49bbc0a775048c24f64ff92 -size 17985 diff --git a/assets/voxygen/element/icons/shoulders.png b/assets/voxygen/element/icons/shoulders.png new file mode 100644 index 0000000000..eda0f24c51 --- /dev/null +++ b/assets/voxygen/element/icons/shoulders.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bc6ce9769c94de6bea3533e8840c413e197472ae8e9ce57528fe2641a230eb26 +size 927 diff --git a/assets/voxygen/element/icons/shoulders.vox b/assets/voxygen/element/icons/shoulders.vox deleted file mode 100644 index bc260ac9f8..0000000000 --- a/assets/voxygen/element/icons/shoulders.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b277676fd12242532f0002c074df50066da54accf6e2b54d94c65ca3ac0b2107 -size 60428 diff --git a/assets/voxygen/element/icons/skill_charge.vox b/assets/voxygen/element/icons/skill_charge.vox deleted file mode 100644 index a9bffe8990..0000000000 --- a/assets/voxygen/element/icons/skill_charge.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bec1cad802a5751cfa9cd4d4d0159adb51e4af3e67ced65db25fcaff059e0b6f -size 57497 diff --git a/assets/voxygen/element/icons/skill_charge_2.png b/assets/voxygen/element/icons/skill_charge_2.png new file mode 100644 index 0000000000..a6cca701f6 --- /dev/null +++ b/assets/voxygen/element/icons/skill_charge_2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8db97a822c66a4f2a7045518ddef3af9015388b5184a856f44f81c6be8884cb4 +size 1408 diff --git a/assets/voxygen/element/icons/skill_charge_2.vox b/assets/voxygen/element/icons/skill_charge_2.vox deleted file mode 100644 index d81971f6c4..0000000000 --- a/assets/voxygen/element/icons/skill_charge_2.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:02751d68177ade46c3692a7abdc64f6ad222f41bab01dcb0be8beb49f91b3ae4 -size 63221 diff --git a/assets/voxygen/element/icons/skill_charge_3.png b/assets/voxygen/element/icons/skill_charge_3.png new file mode 100644 index 0000000000..82c5cfae2e --- /dev/null +++ b/assets/voxygen/element/icons/skill_charge_3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c872af7c35dced7c6b11f2838b6ecc2c0176da2f5e3767c2d76b437a9b2e837 +size 1213 diff --git a/assets/voxygen/element/icons/skill_charge_3.vox b/assets/voxygen/element/icons/skill_charge_3.vox deleted file mode 100644 index dc30739204..0000000000 --- a/assets/voxygen/element/icons/skill_charge_3.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:af880f99099b027bad51aa2e16ea622012d9f99a3ce3691909a041f5afa1c927 -size 63217 diff --git a/assets/voxygen/element/icons/skill_slice_2.png b/assets/voxygen/element/icons/skill_slice_2.png new file mode 100644 index 0000000000..6d1c8b295f --- /dev/null +++ b/assets/voxygen/element/icons/skill_slice_2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f2f61e5942a5b2f079c2dafebe0860cbd66e4bf2b9b87e2be104ca47220c474 +size 758 diff --git a/assets/voxygen/element/icons/skill_slice_2.vox b/assets/voxygen/element/icons/skill_slice_2.vox deleted file mode 100644 index 565f4a2280..0000000000 --- a/assets/voxygen/element/icons/skill_slice_2.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b86b496d708546a05dca97b53805061b4c6d430fa5ff34b22400e08dccc2ae64 -size 62249 diff --git a/assets/voxygen/element/icons/skull.png b/assets/voxygen/element/icons/skull.png new file mode 100644 index 0000000000..5b86367acf --- /dev/null +++ b/assets/voxygen/element/icons/skull.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:912330f19920dbe6a90c9e22cba4624c3900ceb98850b3f623ff136f421f3435 +size 340 diff --git a/assets/voxygen/element/icons/skull.vox b/assets/voxygen/element/icons/skull.vox deleted file mode 100644 index 024f888038..0000000000 --- a/assets/voxygen/element/icons/skull.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1708cf57ec4d132e3478f86aef7083d37cf85b890a2ddcf4278d8b5d4394f53d -size 57720 diff --git a/assets/voxygen/element/icons/skull_2.png b/assets/voxygen/element/icons/skull_2.png new file mode 100644 index 0000000000..9c7b1696d9 --- /dev/null +++ b/assets/voxygen/element/icons/skull_2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9a2b2d4093520f1513b0909e808f50390a80a093170bf2d0583fbf65a2f21c51 +size 310 diff --git a/assets/voxygen/element/icons/skull_2.vox b/assets/voxygen/element/icons/skull_2.vox deleted file mode 100644 index 140ab7bf2c..0000000000 --- a/assets/voxygen/element/icons/skull_2.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d9ddbabd913b6b5afaf2d9344b457cdd9068ee5a1f019141c3f13e364b463dda -size 57784 diff --git a/assets/voxygen/element/icons/social.png b/assets/voxygen/element/icons/social.png deleted file mode 100644 index a3d81fa011..0000000000 --- a/assets/voxygen/element/icons/social.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b87a847ab11568e346326a3c57b29e5b7b9652c7f5e04f95a657c534a577330e -size 10648 diff --git a/assets/voxygen/element/icons/spellbook.png b/assets/voxygen/element/icons/spellbook.png deleted file mode 100644 index 73f7d09b82..0000000000 --- a/assets/voxygen/element/icons/spellbook.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:966ef8c9b7bfc4e7c4363f3edce304a8dff763f07acc404733b95861293478ff -size 9161 diff --git a/assets/voxygen/element/icons/staff_m1.png b/assets/voxygen/element/icons/staff_m1.png new file mode 100644 index 0000000000..3955caf46a --- /dev/null +++ b/assets/voxygen/element/icons/staff_m1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0b743bbccb12309114e55a35d21b196f6a97b458d4ea208b48654019c2d24e90 +size 795 diff --git a/assets/voxygen/element/icons/staff_m1.vox b/assets/voxygen/element/icons/staff_m1.vox deleted file mode 100644 index ae5682d692..0000000000 --- a/assets/voxygen/element/icons/staff_m1.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0d80d1b075793a3e120cddd98b1f85742e0462e0c403cfaf9d8260a7c8fda045 -size 58444 diff --git a/assets/voxygen/element/icons/staff_m2.png b/assets/voxygen/element/icons/staff_m2.png new file mode 100644 index 0000000000..f22841c798 --- /dev/null +++ b/assets/voxygen/element/icons/staff_m2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:813f0d30ac437525faa2adb022ce4f57d1beac2ec60d0e9b671c16111eef379c +size 1091 diff --git a/assets/voxygen/element/icons/staff_m2.vox b/assets/voxygen/element/icons/staff_m2.vox deleted file mode 100644 index 74fb309158..0000000000 --- a/assets/voxygen/element/icons/staff_m2.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b1dd296878391652f6c5151cee6eba5bf003e07360ecbe08f342f7ac631d103d -size 60360 diff --git a/assets/voxygen/element/icons/tabard.png b/assets/voxygen/element/icons/tabard.png new file mode 100644 index 0000000000..783301dd6e --- /dev/null +++ b/assets/voxygen/element/icons/tabard.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d66d4191fa9166aebedafbc45723d0262cfab4fc5076f89f4ce775248d0a7bea +size 1056 diff --git a/assets/voxygen/element/icons/tabard.vox b/assets/voxygen/element/icons/tabard.vox deleted file mode 100644 index 69999e3228..0000000000 --- a/assets/voxygen/element/icons/tabard.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7fae087fbbddc39faf126b7a7ae80301f331c048677fbd047d790918043c29e9 -size 62188 diff --git a/assets/voxygen/element/icons/willpower.png b/assets/voxygen/element/icons/willpower.png new file mode 100644 index 0000000000..7bf2a8328c --- /dev/null +++ b/assets/voxygen/element/icons/willpower.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cada9e202c460f1b23eb267114fbbe0ea06daefd91010feff6fcb8dc28723b6f +size 784 diff --git a/assets/voxygen/element/misc_bg/charwindow.png b/assets/voxygen/element/misc_bg/charwindow.png deleted file mode 100644 index 41d47b209c..0000000000 --- a/assets/voxygen/element/misc_bg/charwindow.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:312e8e5ce70dff58ab12b91bf695071aee35890ddf9881d6c42db121df2c5d9f -size 2484 diff --git a/assets/voxygen/element/misc_bg/crosshair_bg.png b/assets/voxygen/element/misc_bg/crosshair_bg.png new file mode 100644 index 0000000000..e985c25a23 --- /dev/null +++ b/assets/voxygen/element/misc_bg/crosshair_bg.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:88950a45e5d62a3f9dcc8dc0bfcd7542f1483ed21ac184c464635c57ca3ae1c1 +size 133 diff --git a/assets/voxygen/element/misc_bg/crosshair_bg.vox b/assets/voxygen/element/misc_bg/crosshair_bg.vox deleted file mode 100644 index 50a630ea8b..0000000000 --- a/assets/voxygen/element/misc_bg/crosshair_bg.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4df925b34c651de59460ce65f4a5f58b0efa007bbbb1eb5d0caa67c271579182 -size 45788 diff --git a/assets/voxygen/element/misc_bg/crosshair_bg_hover.png b/assets/voxygen/element/misc_bg/crosshair_bg_hover.png new file mode 100644 index 0000000000..d31f1d0981 --- /dev/null +++ b/assets/voxygen/element/misc_bg/crosshair_bg_hover.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f041aeade1786ddfe4d5c1ea94214e042ac8520fa99106eff76cf7f08fd5e928 +size 150 diff --git a/assets/voxygen/element/misc_bg/crosshair_bg_hover.vox b/assets/voxygen/element/misc_bg/crosshair_bg_hover.vox deleted file mode 100644 index 4a082df963..0000000000 --- a/assets/voxygen/element/misc_bg/crosshair_bg_hover.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f3d3b6596f41c6c14ddd0c3d3eb22d6c6b60fa24284b37da5a183026e249ac0b -size 47372 diff --git a/assets/voxygen/element/misc_bg/crosshair_bg_press.png b/assets/voxygen/element/misc_bg/crosshair_bg_press.png new file mode 100644 index 0000000000..5d93bfbb50 --- /dev/null +++ b/assets/voxygen/element/misc_bg/crosshair_bg_press.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8eeb29d8b6c5f18e2ee2f369abcec7e3b30ce2bf2f881e65a7716d0e9e0bfc3f +size 147 diff --git a/assets/voxygen/element/misc_bg/crosshair_bg_press.vox b/assets/voxygen/element/misc_bg/crosshair_bg_press.vox deleted file mode 100644 index ac2e8bc838..0000000000 --- a/assets/voxygen/element/misc_bg/crosshair_bg_press.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:aadd59f55c03b2e2118e6e403c5a62c4d0a2eb8e1d0aad37149092cc4179cc61 -size 46076 diff --git a/assets/voxygen/element/misc_bg/crosshair_bg_pressed.png b/assets/voxygen/element/misc_bg/crosshair_bg_pressed.png new file mode 100644 index 0000000000..d31f1d0981 --- /dev/null +++ b/assets/voxygen/element/misc_bg/crosshair_bg_pressed.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f041aeade1786ddfe4d5c1ea94214e042ac8520fa99106eff76cf7f08fd5e928 +size 150 diff --git a/assets/voxygen/element/misc_bg/crosshair_bg_pressed.vox b/assets/voxygen/element/misc_bg/crosshair_bg_pressed.vox deleted file mode 100644 index e70733523f..0000000000 --- a/assets/voxygen/element/misc_bg/crosshair_bg_pressed.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d9edb64c9fcb5caf520e222d846b6ba466c1ba5bbc7c590aa741b2db37ec8070 -size 46076 diff --git a/assets/voxygen/element/misc_bg/crosshair_inner.png b/assets/voxygen/element/misc_bg/crosshair_inner.png new file mode 100644 index 0000000000..c1bd6874e5 --- /dev/null +++ b/assets/voxygen/element/misc_bg/crosshair_inner.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc971ed99da4c92c84e0470ce2041b34921a29434e2b35e8ce1af7bba2dd16a6 +size 102 diff --git a/assets/voxygen/element/misc_bg/crosshair_inner.vox b/assets/voxygen/element/misc_bg/crosshair_inner.vox deleted file mode 100644 index e7910ebdc1..0000000000 --- a/assets/voxygen/element/misc_bg/crosshair_inner.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ebd152f729ba3dd3eb971482a78b9527c4c8ed32888ad64d469021bafa4780a5 -size 1116 diff --git a/assets/voxygen/element/misc_bg/crosshair_outer_1.png b/assets/voxygen/element/misc_bg/crosshair_outer_1.png new file mode 100644 index 0000000000..58f271711f --- /dev/null +++ b/assets/voxygen/element/misc_bg/crosshair_outer_1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bbf5493bc8bf267c5e60b6627891c5be8515ab361eb4e75c496f9bc29cd7f928 +size 171 diff --git a/assets/voxygen/element/misc_bg/crosshair_outer_1.vox b/assets/voxygen/element/misc_bg/crosshair_outer_1.vox deleted file mode 100644 index 224e2b7e1d..0000000000 --- a/assets/voxygen/element/misc_bg/crosshair_outer_1.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f5f40e4407038e9bc7a348c62eae1d9874981351b5c42443a56ba419a1dc9181 -size 44572 diff --git a/assets/voxygen/element/misc_bg/crosshair_outer_2.png b/assets/voxygen/element/misc_bg/crosshair_outer_2.png new file mode 100644 index 0000000000..30d9a2ec5c --- /dev/null +++ b/assets/voxygen/element/misc_bg/crosshair_outer_2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9eff8dfa0e84f7404bcf7be536f37623c19455911f165bc2be2940b1547ce4c6 +size 179 diff --git a/assets/voxygen/element/misc_bg/crosshair_outer_2.vox b/assets/voxygen/element/misc_bg/crosshair_outer_2.vox deleted file mode 100644 index 149e46946e..0000000000 --- a/assets/voxygen/element/misc_bg/crosshair_outer_2.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b53e188972c97eb42520b4801d97e79187ae82386202f03df07ed124ed7b0c4d -size 1560 diff --git a/assets/voxygen/element/misc_bg/crosshair_outer_3.png b/assets/voxygen/element/misc_bg/crosshair_outer_3.png new file mode 100644 index 0000000000..7024f3f115 --- /dev/null +++ b/assets/voxygen/element/misc_bg/crosshair_outer_3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf82023b0a12877873f08a20e2ea70bfae871b7809e77577d26e0cb544f74523 +size 184 diff --git a/assets/voxygen/element/misc_bg/crosshair_outer_3.vox b/assets/voxygen/element/misc_bg/crosshair_outer_3.vox deleted file mode 100644 index 5ac4f4167c..0000000000 --- a/assets/voxygen/element/misc_bg/crosshair_outer_3.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a9e8d27e0b86ce1c0b14fc8447c59abbf7bb5297da27448e4eef9f2ad332733f -size 1656 diff --git a/assets/voxygen/element/misc_bg/fireplace.vox b/assets/voxygen/element/misc_bg/fireplace.vox deleted file mode 100644 index 65e6229d14..0000000000 --- a/assets/voxygen/element/misc_bg/fireplace.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4ffed92a4a1a7612a7c0a6657299adf45a50ee1170bf93eb9b7d3d1f4782990c -size 22264 diff --git a/assets/voxygen/element/misc_bg/inv_bg.png b/assets/voxygen/element/misc_bg/inv_bg.png new file mode 100644 index 0000000000..0c2c9ccf9a --- /dev/null +++ b/assets/voxygen/element/misc_bg/inv_bg.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:68aa80432b2ec6ff15179a5092b976b8938aa0fa2dba5248536b90ba4838ecd6 +size 58872 diff --git a/assets/voxygen/element/misc_bg/inv_bg_0.png b/assets/voxygen/element/misc_bg/inv_bg_0.png new file mode 100644 index 0000000000..796bf67984 --- /dev/null +++ b/assets/voxygen/element/misc_bg/inv_bg_0.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb15146cc53bf3060225f58f8a880d3ef22be23e305aa5106ba3d187e03b73a2 +size 126837 diff --git a/assets/voxygen/element/misc_bg/inv_bg_1.png b/assets/voxygen/element/misc_bg/inv_bg_1.png new file mode 100644 index 0000000000..f81c744864 --- /dev/null +++ b/assets/voxygen/element/misc_bg/inv_bg_1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c9347f7533c16a1dbf742fb397e7267e6b72f467676138c10153bd9778b845b1 +size 68382 diff --git a/assets/voxygen/element/misc_bg/inv_frame.png b/assets/voxygen/element/misc_bg/inv_frame.png new file mode 100644 index 0000000000..89371653eb --- /dev/null +++ b/assets/voxygen/element/misc_bg/inv_frame.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7808b4b96dec90284b7add2e46cb1e59ca74e5ab6d06f343accf6e4dc45d029 +size 128362 diff --git a/assets/voxygen/element/misc_bg/inv_runes.png b/assets/voxygen/element/misc_bg/inv_runes.png new file mode 100644 index 0000000000..bbc2d60f4f --- /dev/null +++ b/assets/voxygen/element/misc_bg/inv_runes.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44ab3306cdf5e3267b3d6bbb837bea688eb78c36d223af2f6d606888a48bddff +size 58594 diff --git a/assets/voxygen/element/misc_bg/inv_slots.png b/assets/voxygen/element/misc_bg/inv_slots.png new file mode 100644 index 0000000000..34ea90649d --- /dev/null +++ b/assets/voxygen/element/misc_bg/inv_slots.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a46df2b937b1b4224e6912dcb6797e669ebe7aacec0f9fbc7b9eda371c1a7c1 +size 31400 diff --git a/assets/voxygen/element/misc_bg/map_bg.png b/assets/voxygen/element/misc_bg/map_bg.png new file mode 100644 index 0000000000..5afd1cb248 --- /dev/null +++ b/assets/voxygen/element/misc_bg/map_bg.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a9e597d8bc0327e5802d68eed05b68953e5c1511ee7698a5091fa31ead38a0e5 +size 5494 diff --git a/assets/voxygen/element/misc_bg/map_frame.png b/assets/voxygen/element/misc_bg/map_frame.png new file mode 100644 index 0000000000..9ca8ec9a4c --- /dev/null +++ b/assets/voxygen/element/misc_bg/map_frame.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c60fdaef39e24811ea35c7aff0c7752dd5a1ee69b958426219baf5c24bda4478 +size 2427 diff --git a/assets/voxygen/element/misc_bg/map_frame_art.png b/assets/voxygen/element/misc_bg/map_frame_art.png new file mode 100644 index 0000000000..a999f5e2d8 --- /dev/null +++ b/assets/voxygen/element/misc_bg/map_frame_art.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8fb5d452d07bbf5f415cc13840808394c9bd40530c40d813a4809ac2d61e10dd +size 3533 diff --git a/assets/voxygen/element/misc_bg/mmap_bg.vox b/assets/voxygen/element/misc_bg/mmap_bg.vox deleted file mode 100644 index e6099bbacb..0000000000 --- a/assets/voxygen/element/misc_bg/mmap_bg.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d16bd830712e308b6377e9555dc8cdff4c8947a83170c8ee7203c8ba1d580894 -size 58216 diff --git a/assets/voxygen/element/misc_bg/textbox.vox b/assets/voxygen/element/misc_bg/textbox.vox deleted file mode 100644 index 01819fb072..0000000000 --- a/assets/voxygen/element/misc_bg/textbox.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:cb07295d5defc9d0da0deeb5de2a33e6dcc3f19774e3945b1a94d545af971b18 -size 7176 diff --git a/assets/voxygen/element/slider/scrollbar.png b/assets/voxygen/element/slider/scrollbar.png new file mode 100644 index 0000000000..c28cf3123f --- /dev/null +++ b/assets/voxygen/element/slider/scrollbar.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8efa850c65905cb000300de86a33fdcad484f8a91fb532e12038be3493d9647a +size 468 diff --git a/assets/voxygen/font/haxrcorp_4089_cyrillic_altgr_extended.ttf b/assets/voxygen/font/haxrcorp_4089_cyrillic_altgr_extended.ttf index 28a2f56603..f1287a32c0 100644 --- a/assets/voxygen/font/haxrcorp_4089_cyrillic_altgr_extended.ttf +++ b/assets/voxygen/font/haxrcorp_4089_cyrillic_altgr_extended.ttf @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e9fe6b6694620909217869f4f3fdce28d9ce9e5f0720c5a601903c95669dc428 -size 22120 +oid sha256:4d2fcb65f9c3956f91ddebc350729221704c75b3559d120772d4c9bd1898d720 +size 26232 diff --git a/assets/voxygen/i18n/en.ron b/assets/voxygen/i18n/en.ron index a9ab34bd68..a7bc51a228 100644 --- a/assets/voxygen/i18n/en.ron +++ b/assets/voxygen/i18n/en.ron @@ -1,5 +1,5 @@ /// Translation document instructions -/// +/// /// In order to keep localization documents readible please follow the following /// rules: /// - separate the string map sections using a commentary describing the purpose @@ -7,7 +7,7 @@ /// - prepend multi-line strings with a commentary /// - append one blank lines after a multi-line strings and two after sections /// -/// To add a new language in Veloren, just write an additional `.ron` file in +/// To add a new language in Veloren, just write an additional `.ron` file in /// `assets/voxygen/i18n` and that's it! /// Localization for "global" English @@ -62,6 +62,7 @@ VoxygenLocalization( "common.back": "Back", "common.create": "Create", "common.okay": "Okay", + "common.accept": "Accept", "common.disclaimer": "Disclaimer", "common.cancel": "Cancel", "common.none": "None", @@ -98,7 +99,7 @@ Is the client up to date?"#, Before you dive into the fun, please keep a few things in mind: -- This is a very early alpha. Expect bugs, extremely unfinished gameplay, unpolished mechanics, and missing features. +- This is a very early alpha. Expect bugs, extremely unfinished gameplay, unpolished mechanics, and missing features. - If you have constructive feedback or bug reports, you can contact us via Reddit, GitLab, or our community Discord server. - Veloren is licensed under the GPL 3 open-source licence. That means you're free to play, modify, and redistribute the game however you wish (provided derived work is also under GPL 3). @@ -143,7 +144,7 @@ https://account.veloren.net."#, "hud.show_tips": "Show Tips", "hud.quests": "Quests", "hud.you_died": "You Died", - + "hud.press_key_to_show_keybindings_fmt": "Press {key} to show keybindings", "hud.press_key_to_show_debug_info_fmt": "Press {key} to show debug info", "hud.press_key_to_toggle_keybindings_fmt": "Press {key} to toogle keybindings", @@ -190,8 +191,23 @@ Want to free your cursor to close this window? Press TAB! Enjoy your stay in the World of Veloren."#, + + // Inventory + "hud.bag.inventory": "'s Inventory", + "hud.bag.stats_title": "'s Stats", + "hud.bag.exp": "Exp", + "hud.bag.armor": "Armor", + "hud.bag.stats": "Stats", + + // Map and Questlog + "hud.map.map_title": "Map", + "hud.map.qlog_title": "Quests", + + // Settings "hud.settings.general": "General", "hud.settings.none": "None", + "hud.settings.press_behavior.toggle": "Toggle", + "hud.settings.press_behavior.hold": "Hold", "hud.settings.help_window": "Help Window", "hud.settings.debug_info": "Debug Info", "hud.settings.tips_on_startup": "Tips-On-Startup", @@ -219,6 +235,7 @@ Enjoy your stay in the World of Veloren."#, "hud.settings.zoom_sensitivity": "Zoom Sensitivity", "hud.settings.invert_scroll_zoom": "Invert Scroll Zoom", "hud.settings.invert_mouse_y_axis": "Invert Mouse Y Axis", + "hud.settings.free_look_behavior": "Free look behavior", "hud.settings.view_distance": "View Distance", "hud.settings.maximum_fps": "Maximum FPS", @@ -308,11 +325,14 @@ Send Chat Message Scroll Chat +Free look + + Chat commands: /alias [Name] - Change your Chat Name /tp [Name] - Teleports you to another player -/jump - Offset your position +/jump - Offset your position /goto - Teleport to a position /kill - Kill yourself /pig - Spawn pig NPC @@ -327,6 +347,8 @@ Chat commands: "hud.social.play_online_fmt": "{nb_player} player(s) online", "hud.spell": "Spell", + + "hud.free_look_indicator": "Free look active", /// End HUD section @@ -366,7 +388,7 @@ Willpower /// Start character window section - + /// Start Escape Menu Section "esc_menu.logout": "Logout", diff --git a/assets/voxygen/i18n/it.ron b/assets/voxygen/i18n/it.ron new file mode 100644 index 0000000000..75d8b7a9de --- /dev/null +++ b/assets/voxygen/i18n/it.ron @@ -0,0 +1,528 @@ +/// Translation document instructions +/// +/// In order to keep localization documents readible please follow the following +/// rules: +/// - separate the string map sections using a commentary describing the purpose +/// of the next section +/// - prepend multi-line strings with a commentary +/// - append one blank lines after a multi-line strings and two after sections +/// +/// To add a new language in Veloren, just write an additional `.ron` file in +/// `assets/voxygen/i18n` and that's it! + + + + +/// Localization for "global" Italian +VoxygenLocalization( + metadata: ( + language_name: "Italiano", + language_identifier: "it", + ), + convert_utf8_to_ascii: false, + fonts: { + "opensans": Font ( + asset_key: "voxygen.font.OpenSans-Regular", + scale_ratio: 1.0, + ), + "metamorph": Font ( + asset_key: "voxygen.font.Metamorphous-Regular", + scale_ratio: 1.0, + ), + "alkhemi": Font ( + asset_key: "voxygen.font.Alkhemikal", + scale_ratio: 1.0, + ), + "wizard": Font ( + asset_key: "voxygen.font.wizard", + scale_ratio: 1.0, + ), + "cyri": Font ( + asset_key: "voxygen.font.haxrcorp_4089_cyrillic_altgr_extended", + scale_ratio: 1.0, + ), + }, + string_map: { + /// Start Common section + // Texts used in multiple locations with the same formatting + "common.username": "Nome Utente", + "common.singleplayer": "Giocatore Singolo", + "common.multiplayer": "Multigiocatore", + "common.servers": "Server", + "common.quit": "Esci", + "common.settings": "Impostazioni", + "common.languages": "Lingue", + "common.interface": "Interfaccia", + "common.gameplay": "Gameplay", + "common.controls": "Controlli", + "common.video": "Video", + "common.sound": "Audio", + "common.resume": "Riprendi", + "common.characters": "Personaggi", + "common.close": "Chiudi", + "common.yes": "Si", + "common.no": "No", + "common.back": "Indietro", + "common.create": "Crea", + "common.okay": "Ok", + "common.disclaimer": "Disclaimer", + "common.cancel": "Cancella", + "common.none": "Nessuno", + "common.error": "Errore", + "common.fatal_error": "Errore Fatale", + + + + + + // Message when connection to the server is lost + "common.connection_lost": r#"Connessione persa! +Si è riavviato il server? +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.weapons.axe": "Ascia", + "common.weapons.sword": "Spada", + "common.weapons.staff": "Bastone", + "common.weapons.bow": "Arco", + "common.weapons.hammer": "Martello", + /// End Common section + + + + + + + + + /// Start Main screen section + "main.connecting": "Connessione in corso", + "main.creating_world": "Creazione del mondo", + + + + + // Welcome notice that appears the first time Veloren is started + "main.notice": r#"Benvenuto nella versione Alpha di Veloren! + + + + +Prima di tuffarti nel divertimento, ti preghiamo di tenere a mente che: + + + + +- Questa è un’Alpha molto prematura. Aspettati errori, gameplay non completo, meccaniche non rifinite, e funzioni mancanti. +- Se hai critiche costruttive o errori da segnalare, ci puoi contattare tramite Reddit, GitLab, o il server Discord della nostra community. +- Veloren è concesso in licenza con la licenza open-source GPL 3. Il che vuol dire che sei libero di giocare, modificare, e ridistribuire il gioco come tu desideri (purché il lavoro che ne derivi sia sempre sotto licenza GPL 3). +- Veloren è un progetto comunitario no-profit, e chiunque ci lavori sopra è un volontario. +Se ti piace ciò che vedi, sei il benvenuto ad unirti ai team di sviluppo e artistico! +- 'Voxel RPG' è un genere a sé stante. Gli sparatutto-in-prima-persona venivano considerati cloni di Doom. + + + + +Come loro, stiamo cercando di costruire una nicchia. Il gioco non è un clone, e il suo sviluppo divergerà dai giochi esistenti in futuro. + + + + +Grazie per aver dedicato del tempo a leggere questo avviso, speriamo che ti divertirai col gioco! + + + + +~ Il team di sviluppo di Veloren"#, + + + + + // Login process description + "main.login_process": r#"Informazioni sul processo del Login: + + +Se stai avendo problemi nell'accedere: + +Notare che hai bisogno di un account +per giocare su server con autenticazione abilitata. + +Puoi creare un account su + +https://account.veloren.net."#, + "main.login.server_not_found": "Server non trovato", + "main.login.authentication_error": "Errore di autenticazione server", + "main.login.server_full": "Il server è pieno", + "main.login.untrusted_auth_server": "Server di autenticazione non affidabile", + "main.login.outdated_client_or_server": "Il server è impazzito: Probabilmente le versioni sono incompatibili, controlla per degli aggiornamenti", + "main.login.timeout": "Tempo scaduto: Il server non ha risposto in tempo. (In sovraccarico o problemi di rete)", + "main.login.server_shut_down": "Il server è stato chiuso", + "main.login.already_logged_in": "Hai già effettuato l'accesso al server", + "main.login.network_error": "Errore di rete", + "main.login.failed_sending_request": "Richiesta ai server di autenticazione fallita", + "main.login.client_crashed": "Il client si è arrestato", + + + + + + + + + + /// End Main screen section + + + + + + + + + /// Start HUD Section + "hud.do_not_show_on_startup": "Non mostrare all’avvio", + "hud.show_tips": "Mostra consigli", + "hud.quests": "Missioni", + "hud.you_died": "Sei Morto", + + "hud.press_key_to_show_keybindings_fmt": "Premi {key} per mostrare le scorciatoie da tastiera", + "hud.press_key_to_show_debug_info_fmt": "Premi {key} per mostrare le informazioni di debug", + "hud.press_key_to_toggle_keybindings_fmt": "Premi {key} per attivare/disattivare le scorciatoie da tastiera", + "hud.press_key_to_toggle_debug_info_fmt": "Premi {key} per attivare/disattivare le informazioni di debug", + + + + + // Respawn message + "hud.press_key_to_respawn": r#"Premi {key} per rinascere al tuo Waypoint. + + + + +Premi Invio, scrivi /waypoint e conferma per impostarlo qui."#, + + + + + // Welcome message + "hud.welcome": r#"Benvenuto nell’Alpha di Veloren! + + + + +Alcuni consigli prima di cominciare: + + +MOLTO IMPORTANTE: Per impostare il tuo punto di rinascita scrivi /waypoint + + +nella chat. + + +Ciò può essere fatto anche se sei già morto! + + + + +Premi F1 per vedere i comandi chiave disponibili. + + +Scrivi /help nella chat per vedere i comandi della chat. + + + + +Ci sono forzieri e altri oggetti che appaiono casualmente nel Mondo! + + +Clicca col tasto destro del mouse per raccoglierli. + + +Per usare qualsiasi cosa tu ottenga da quei forzieri apri il tuo inventario con 'B'. + + +Fai doppio click sugli oggetti nella tua borsa per usarli o equipaggiarli. + + +Gettali via cliccandoci una volta sopra e una volta fuori dall’inventario. + + + + +Le notti possono essere molto buie in Veloren. + + +Accendi la tua lanterna scrivendo /lantern nella chat. + + + + +Vuoi sbloccare il cursore per chiudere questa finestra? Premi TAB! + + + + +Goditi il tuo soggiorno nel Mondo di Veloren."#, + + + + + "hud.settings.general": "Generale", + "hud.settings.none": "Nessuno", + "hud.settings.press_behavior.toggle": "Attiva/Disattiva", + "hud.settings.press_behavior.hold": "Tieni Premuto", + "hud.settings.help_window": "Finestra di Aiuto", + "hud.settings.debug_info": "Informazioni di Debug", + "hud.settings.tips_on_startup": "Consigli all’Avvio", + "hud.settings.ui_scale": "Proporzione Interfaccia", + "hud.settings.relative_scaling": "Proporzione Relativa", + "hud.settings.custom_scaling": "Proporzione Person.", + "hud.settings.crosshair": "Mirino", + "hud.settings.transparency": "Trasparenza", + "hud.settings.hotbar": "Barra Veloce", + "hud.settings.toggle_shortcuts": "Attivare/Disattivare Scorciatoie", + "hud.settings.toggle_bar_experience": "Attivare/Disattivare Barra dell’Esperienza", + "hud.settings.scrolling_combat_text": "Testo di Combattimento Scorrevole", + "hud.settings.single_damage_number": "Danno Nemico (Singolo)", + "hud.settings.cumulated_damage": "Danno Nemico (Cumulativo)", + "hud.settings.incoming_damage": "Danno Giocatore (Singolo)", + "hud.settings.cumulated_incoming_damage": "Danno Giocatore (Cumulativo)", + "hud.settings.energybar_numbers": "Numeri Barra dell’Energia", + "hud.settings.values": "Valori", + "hud.settings.percentages": "Percentuali", + "hud.settings.chat": "Chat", + "hud.settings.background_transparency": "Trasparenza dello Sfondo", + "hud.settings.none": "Nessuno", + + + + + "hud.settings.pan_sensitivity": "Sensibilità Camera", + "hud.settings.zoom_sensitivity": "Sensibilità Zoom", + "hud.settings.invert_scroll_zoom": "Zoom Invertito", + "hud.settings.invert_mouse_y_axis": "Asse Y del Mouse Invertito", + "hud.settings.free_look_behavior": "Comportamento Visuale Libera", + + + + + "hud.settings.view_distance": "Distanza Oggetto", + "hud.settings.maximum_fps": "FPS Massimi", + "hud.settings.fov": "Campo Visivo (gradi)", + "hud.settings.gamma": "Gamma", + "hud.settings.antialiasing_mode": "Modalità AntiAliasing", + "hud.settings.cloud_rendering_mode": "Modalità Renderizzazione Nuvole", + "hud.settings.fluid_rendering_mode": "Modalità Renderizzazione Fluido", + "hud.settings.fluid_rendering_mode.cheap": "Economico", + "hud.settings.fluid_rendering_mode.shiny": "Lucente", + "hud.settings.cloud_rendering_mode.regular": "Regolare", + "hud.settings.fullscreen": "Schermo Intero", + "hud.settings.save_window_size": "Salva dimensione finestra", + + + + + "hud.settings.music_volume": "Volume Musica", + "hud.settings.sound_effect_volume": "Volume Effetti Sonori", + "hud.settings.audio_device": "Dispositivo Audio", + + + + + // Control list + "hud.settings.control_names": r#"Cursore Libero +Attiva/Disattiva Finestra di Aiuto +Attiva/Disattiva Interfaccia +Attiva/Disattiva FPS e Informazioni di Debug +Scatta Screenshot +Attiva/Disattiva Nomi +Attiva/Disattiva Schermo Intero + + +Movimento in Avanti +Movimento a Sinistra +Movimento a Destra +Movimento all’Indietro + +Salto + +Aliante + +Schivata + +Rotolata + +Scalata + +Discesa + +Camminata Automatica + +Riporre/Sfoderare Armi + +Mettere/Rimuovere Elmo + +Sedersi + +Cavalcatura + +Interagire + + +Attacco Base +Attacco Secondario/Parata/Mira + + +Slot 1 Barra delle Abilità +Slot 2 Barra delle Abilità +Slot 3 Barra delle Abilità +Slot 4 Barra delle Abilità +Slot 5 Barra delle Abilità +Slot 6 Barra delle Abilità +Slot 7 Barra delle Abilità +Slot 8 Barra delle Abilità +Slot 9 Barra delle Abilità +Slot 10 Barra delle Abilità + + +Menù di Pausa +Impostazioni +Social +Mappa +Libro degli Incantesimi +Personaggio +Diario delle Missioni +Borsa + + + +Invia Messaggio nella Chat +Scorrimento della Chat + +Camera Libera + + + +Comandi della Chat: + +/alias [Name] - Cambia il tuo Nome nella Chat +/tp [Name] - Ti teleporta da un altro giocatore +/jump - Devia la tua posizione +/goto - Ti teleporta in una posizione +/kill - Suicidati +/pig - Fai apparire un maiale PNG +/wolf - Fai apparire un lupo PNG +/help - Mostra comandi della Chat"#, + + + + + "hud.social": "Social", + "hud.social.online": "Online", + "hud.social.friends": "Amici", + "hud.social.not_yet_available": "Non ancora disponibile", + "hud.social.faction": "Fazione", + "hud.social.play_online_fmt": "{nb_player} giocatore/i online", + + + + + "hud.spell": "Incantesimo", + + "hud.free_look_indicator": "Visuale Libera Attiva", + /// End HUD section + + + + + + + + + /// Start character selection section + "char_selection.delete_permanently": "Eliminare permanente questo Personaggio?", + "char_selection.change_server": "Cambia Server", + "char_selection.enter_world": "Unisciti al Mondo", + "char_selection.logout": "Disconnettiti", + "char_selection.create_new_charater": "Crea un nuovo Personaggio", + "char_selection.character_creation": "Creazione Personaggio", + + + + + "char_selection.human_default": "Umano Predefinito", + "char_selection.level_fmt": "Livello {level_nb}", + "char_selection.uncanny_valley": "Valle Perturbante", + "char_selection.plains_of_uncertainty": "Pianure dell'Incertezza", + "char_selection.beard": "Barba", + "char_selection.hair_style": "Stile Capelli", + "char_selection.hair_color": "Colore Capelli", + "char_selection.chest_color": "Colore Torace", + "char_selection.eye_color": "Colore Occhi", + "char_selection.skin": "Pelle", + "char_selection.eyebrows": "Sopracciglia", + "char_selection.accessories": "Accessori", + + + + + /// End chracter selection section + + + + + + + + + /// Start character window section + "character_window.character_name": "Nome Personaggio", + // Charater stats + "character_window.character_stats": r#"Stamina + + + + +Vitalità + + + + +Volontà +"#, + + + + + + + + + /// Start character window section + + + + + + /// Start Escape Menu Section + "esc_menu.logout": "Disconnettiti", + "esc_menu.quit_game": "Esci dal Gioco", + /// End Escape Menu Section + } +) diff --git a/assets/voxygen/i18n/pt_PT.ron b/assets/voxygen/i18n/pt_PT.ron new file mode 100644 index 0000000000..a29d45f147 --- /dev/null +++ b/assets/voxygen/i18n/pt_PT.ron @@ -0,0 +1,372 @@ +/// Localization for portuguese (Portugal) +VoxygenLocalization( + metadata: ( + language_name: "Português", + language_identifier: "pt_PT", + ), + convert_utf8_to_ascii: false, + fonts: { + "opensans": Font ( + asset_key: "voxygen.font.OpenSans-Regular", + scale_ratio: 1.0, + ), + "metamorph": Font ( + asset_key: "voxygen.font.Metamorphous-Regular", + scale_ratio: 1.0, + ), + "alkhemi": Font ( + asset_key: "voxygen.font.Alkhemikal", + scale_ratio: 1.0, + ), + "wizard": Font ( + asset_key: "voxygen.font.wizard", + scale_ratio: 1.0, + ), + "cyri": Font ( + asset_key: "voxygen.font.haxrcorp_4089_cyrillic_altgr_extended", + scale_ratio: 1.0, + ), + }, + string_map: { + /// Start Common section + // Texts used in multiple locations with the same formatting + "common.username": "nome de utilizador", + "common.singleplayer": "Um jogador", + "common.multiplayer": "Multijogador", + "common.servers": "Servidores", + "common.quit": "Sair", + "common.settings": "Definições", + "common.languages": "Linguagens", + "common.interface": "Interface", + "common.gameplay": "Jogabilidade", + "common.controls": "Controlos", + "common.video": "Video", + "common.sound": "Som", + "common.resume": "Resumir", + "common.characters": "Personagens", + "common.close": "Fechar", + "common.yes": "Sim", + "common.no": "Não", + "common.back": "Voltar", + "common.create": "Criar", + "common.okay": "Okay", + "common.accept": "Aceitar", + "common.disclaimer": "Aviso", + "common.cancel": "Cancelar", + "common.none": "Nenhum", + "common.error": "Erro", + "common.fatal_error": "Erro fatal", + + // Message when connection to the server is lost + "common.connection_lost": r#"Conexâo perdida! +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.weapons.axe": "Machado", + "common.weapons.sword": "Espada", + "common.weapons.staff": "Cajado", + "common.weapons.bow": "Arco", + "common.weapons.hammer": "Martelo", + /// End Common section + + + /// Start Main screen section + "main.connecting": "Conectando", + "main.creating_world": "Criando o mundo", + + // Welcome notice that appears the first time Veloren is started + "main.notice": r#"Bem vindo a versão alpha de Veloren! + +Antes de começar a jogar, por favor tenha em mente que: + +- Isto é uma versão muito experimental. Prepare-se para defeitos, jogabilidade muito inacabada, mecanismos por polir e funcionalidades por +adicionar. +- Se tiver comentários construtivos ou defeitos para reportar, pode contactar-nos através do Reddit, GitLab ou o nosso servidor comunitário de +Discord. +- Veloren está licenciado sob a licensa código aberto GPL 3. Isto significa que pode jogar, modificar e redistribuir como quiser + (Contanto que o trabalho derivado seja também GPL 3). +- Veloren é um projeto comunitário sem lucro, e toda a gente que trabalha nele é um voluntário. Se gostar do que ve, considere juntar-se a equipa +de desenvolvimento ou a de artes! +- 'Voxel RPG' é um género em si mesmo. First-person shooters costumavam ser chamados de clones do DOOM. + +Tal como eles, nós estamos a tentar construir um género. Este jogo não é um clone e o seu desenvolvimento vai divergir de jogos existentes no +futuro. + +Obrigado por ler este aviso, nós esperamos que goste do jogo! + +~ A equipa do Veloren"#, + + // Login process description + "main.login_process": r#"Informação sobre o processo de Login: + +Se tiver problemas a logar: + +Tenha em atenção que é necessário uma conta +para jogar em servidores com autenticação. + +Para criar uma conta navegue até + +https://account.veloren.net."#, + "main.login.server_not_found": "Servidor não encontrado", + "main.login.authentication_error": "Erro de autenticação", + "main.login.server_full": "Servidor está cheio", + "main.login.untrusted_auth_server": "Server de autenticação não confiado", + "main.login.outdated_client_or_server": "Servidor endoideceu: Provavelmente as versões são incompativéis, verifique se há versões mais recentes.", + "main.login.timeout": "Tempo esgotado: O servidor não respondeu a tempo. (Sobrecarregado ou problemas de rede).", + "main.login.server_shut_down": "O servidor encerrou", + "main.login.already_logged_in": "Vocé ja está logado neste servidor.", + "main.login.network_error": "Error de rede", + "main.login.failed_sending_request": "Pedido ao servidor de autenticação falhou", + "main.login.client_crashed": "O cliente crashou", + + /// End Main screen section + + + /// Start HUD Section + "hud.do_not_show_on_startup": "Não mostre no início", + "hud.show_tips": "Mostrar dicas", + "hud.quests": "Missões", + "hud.you_died": "Você Morreu", + + "hud.press_key_to_show_keybindings_fmt": "Clique em {key} para mostrar as teclas mapeadas", + "hud.press_key_to_show_debug_info_fmt": "Clique em {key} para mostrar a informação de depuração", + "hud.press_key_to_toggle_keybindings_fmt": "Clique em {key} para mostrar/ocultar as teclas mapeadas", + "hud.press_key_to_toggle_debug_info_fmt": "Clique em {key} para mostrar/ocultar a informação de depuração", + + // Respawn message + "hud.press_key_to_respawn": r#"Clique em {key} para renascer na última fogueira visitada."#, + + // Welcome message + "hud.welcome": r#"Bem vindo a Alpha do Veloren!, + + +Algumas dicas antes de começar: + + +MAIS IMPORTANTE: Para definir o seu local de renascimento escreva /waypoint no chat. + +Isto também pode ser realizado depois de morto! + + +Clique em F1 para ver as teclas mapeadas. + +Escreva /help no chat para ver os comandos de chat + + +A muitos baús e outros objetos a aperecer no mundo aleatoriamente! + +Pressione o botão direito do mouse pare coletá-los. + +Para usar o que coletou basta abrir o inventário pressionando a tecla 'B'. + +Faça duplo clique nos items para usá-los ou equipá-los. + +Deite-os fora cliquando uma vez neles e depois outra fora do inventário. + + +As noites podem ser bastante escuras. + +Acenda a lanterna escrevendo /lantern no chat. + + +Quer libertar o mouse para fechar esta janela? Clique em TAB! + + +Aprecie a sua estadia no mundo de Veloren."#, + + "hud.settings.general": "Geral", + "hud.settings.none": "Nenhum", + "hud.settings.press_behavior.toggle": "Alternar", + "hud.settings.press_behavior.hold": "Segurar", + "hud.settings.help_window": "Janela de ajuda", + "hud.settings.debug_info": "Informação de depuração", + "hud.settings.tips_on_startup": "Dicas no início", + "hud.settings.ui_scale": "Escala da interface", + "hud.settings.relative_scaling": "Escala relativa", + "hud.settings.custom_scaling": "Escala customizada", + "hud.settings.crosshair": "Crosshair", + "hud.settings.transparency": "Transparência", + "hud.settings.hotbar": "Hotbar", + "hud.settings.toggle_shortcuts": "Mostar/Ocultar atalhos", + "hud.settings.toggle_bar_experience": "Mostar/Ocultar barra de experiência", + "hud.settings.scrolling_combat_text": "Texto de combate deslizante", + "hud.settings.single_damage_number": "Números de dano únicos", + "hud.settings.cumulated_damage": "Dano acumulado", + "hud.settings.incoming_damage": "Dano recebido", + "hud.settings.cumulated_incoming_damage": "Dano recebido acumulado", + "hud.settings.energybar_numbers": "Números da barra de energia", + "hud.settings.values": "Valores", + "hud.settings.percentages": "Percentagens", + "hud.settings.chat": "Chat", + "hud.settings.background_transparency": "Transparência do fundo", + + "hud.settings.pan_sensitivity": "Sensibilidade de rotação", + "hud.settings.zoom_sensitivity": "Sensibilidade de zoom", + "hud.settings.invert_scroll_zoom": "Inverter scroll zoom", + "hud.settings.invert_mouse_y_axis": "Inverter o eixo Y do mouse", + "hud.settings.free_look_behavior": "Ativação de rotação livre", + + "hud.settings.view_distance": "Alcance de visão", + "hud.settings.maximum_fps": "FPS máximo", + "hud.settings.fov": "Campo de visão(graus)", + "hud.settings.gamma": "Luminosidade", + "hud.settings.antialiasing_mode": "Modo de antialiasing", + "hud.settings.cloud_rendering_mode": "Modo de representação de nuvens", + "hud.settings.fluid_rendering_mode": "Modo de representação de fluídos", + "hud.settings.fluid_rendering_mode.cheap": "Barato", + "hud.settings.fluid_rendering_mode.shiny": "Brilhante", + "hud.settings.cloud_rendering_mode.regular": "Normal", + "hud.settings.fullscreen": "Tela cheia", + "hud.settings.save_window_size": "Gravar dimensões", + + "hud.settings.music_volume": "Volume da música", + "hud.settings.sound_effect_volume": "Volume dos efeitos sonoros", + "hud.settings.audio_device": "Dispositivo de aúdio", + + // Control list + "hud.settings.control_names": r#"Libertar mouse +Mostar/Ocultar janela de ajuda +Mostar/Ocultar interface +Mostar/Ocultar FPS e informação de depuração +Gravar captura de ecrã +Mostar/Ocultar nomes +Mostar/Ocultar tela cheia + + +Mover para frente +Mover para a esquerda +Mover para a direita +Mover para trás + +Saltar + +Planador + +Desviar + +Rolar + +Trepar + +Descer + +Auto caminhar + +Embainhar/sacar armas + +Equipar/remover capacete + +Sentar + +Montar + +Interagir + + +Ataque básico +Ataque/bloquear/apontar secundário + + +Habilidade 1 +Habilidade 2 +Habilidade 3 +Habilidade 4 +Habilidade 5 +Habilidade 6 +Habilidade 7 +Habilidade 8 +Habilidade 9 +Habilidade 10 + + +Menu de pausa +Definições +Social +Mapa +Livro de feitiços +Personagem +Registo de missões +Inventário + + + +Enviar mensagem de chat +Scroll chat + + +Comandos de chat: + +/alias [nome] - Mudar o seu nome de chat +/tp [nome] - Teletransporta-te para outro player +/jump - Deslocar a posição +/goto - Teletransporta-te para a posição +/kill - Suicidar +/pig - Invocar NPC de porco +/wolf - Invocar NPC do lobo +/help - Mostrar comandos de chat"#, + + "hud.social": "Social", + "hud.social.online": "Online", + "hud.social.friends": "Amigos", + "hud.social.not_yet_available": "Indisponível de momento", + "hud.social.faction": "Facção", + "hud.social.play_online_fmt": "{nb_player} jogador(es) online", + + "hud.spell": "Feitiço", + + "hud.free_look_indicator": "Rotação livre ativada", + /// End HUD section + + + /// Start chracter selection section + "char_selection.delete_permanently": "Deletar esta personagem permanentemente?", + "char_selection.change_server": "Mudar de servidor", + "char_selection.enter_world": "Entrar no mundo", + "char_selection.logout": "Desconectar", + "char_selection.create_new_charater": "Criar nova personagem", + "char_selection.character_creation": "Criação de personagem", + + "char_selection.human_default": "Humano padrão", + "char_selection.level_fmt": "Nível {level_nb}", + "char_selection.uncanny_valley": "Vale da estranheza", + "char_selection.plains_of_uncertainty": "Planícies da incerteza", + "char_selection.beard": "Barba", + "char_selection.hair_style": "Estilo do cabelo", + "char_selection.hair_color": "Cor do cabelo", + "char_selection.chest_color": "Cor do peitoral", + "char_selection.eye_color": "Cor dos olhos", + "char_selection.skin": "Cor da pele", + "char_selection.eyebrows": "Pestanas", + "char_selection.accessories": "Acessórios", + + /// End chracter selection section + + + /// Start character window section + "character_window.character_name": "Nome da personagem", + // Charater stats + "character_window.character_stats": r#"Resistência + +Aptidão fisíca + +Força de vontade +"#, + + + /// Start character window section + + + /// Start Escape Menu Section + "esc_menu.logout": "Desconectar", + "esc_menu.quit_game": "Sair do jogo", + /// End Escape Menu Section + } +) diff --git a/assets/voxygen/i18n/tr_TR.ron b/assets/voxygen/i18n/tr_TR.ron new file mode 100644 index 0000000000..8aaff2eef4 --- /dev/null +++ b/assets/voxygen/i18n/tr_TR.ron @@ -0,0 +1,388 @@ +/// Translation document instructions +/// +/// In order to keep localization documents readible please follow the following +/// rules: +/// - separate the string map sections using a commentary describing the purpose +/// of the next section +/// - prepend multi-line strings with a commentary +/// - append one blank lines after a multi-line strings and two after sections +/// +/// To add a new language in Veloren, just write an additional `.ron` file in +/// `assets/voxygen/i18n` and that's it! + +/// Localization for Turkish (Turkey) +VoxygenLocalization( + metadata: ( + language_name: "Türkçe (Türkiye)", + language_identifier: "tr_TR", + ), + convert_utf8_to_ascii: false, + fonts: { + "opensans": Font ( + asset_key: "voxygen.font.OpenSans-Regular", + scale_ratio: 1.0, + ), + "metamorph": Font ( + asset_key: "voxygen.font.Metamorphous-Regular", + scale_ratio: 1.0, + ), + "alkhemi": Font ( + asset_key: "voxygen.font.Alkhemikal", + scale_ratio: 1.0, + ), + "wizard": Font ( + asset_key: "voxygen.font.wizard", + scale_ratio: 1.0, + ), + "cyri": Font ( + asset_key: "voxygen.font.haxrcorp_4089_cyrillic_altgr_extended", + scale_ratio: 1.0, + ), + }, + string_map: { + /// Start Common section + // Texts used in multiple locations with the same formatting + "common.username": "kullanıcı adı", + "common.singleplayer": "Tek oyuncu", + "common.multiplayer": "Çok oyunculu", + "common.servers": "Sunucular", + "common.quit": "Çık", + "common.settings": "Ayarlar", + "common.languages": "Diller", + "common.interface": "Arayüz", + "common.gameplay": "Oynanış", + "common.controls": "Kontroller", + "common.video": "Video", + "common.sound": "Ses", + "common.resume": "Devam Et", + "common.characters": "Karakterler", + "common.close": "Kapat", + "common.yes": "Evet", + "common.no": "Hayır", + "common.back": "Geri", + "common.create": "Oluştur", + "common.okay": "Tamam", + "common.disclaimer": "Uyarı", + "common.cancel": "İptal Et", + "common.none": "Yok", + "common.error": "Hata", + "common.fatal_error": "Ölümcül hata", + "common.accept": "Kabul Et", + + // Message when connection to the server is lost + "common.connection_lost": r#"Bağlantı koptu! +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.weapons.axe": "Balta", + "common.weapons.sword": "Kılıç", + "common.weapons.staff": "Asa", + "common.weapons.bow": "Yay", + "common.weapons.hammer": "Çekiç", + /// End Common section + + + /// Start Main screen section + "main.connecting": "Bağlanılıyor", + "main.creating_world": "Dünya oluşturuluyor", + + // Welcome notice that appears the first time Veloren is started + "main.notice": r#"Veloren Alfa sürümüne hoşgeldin! + +Eğlenmeye başlamadan önce, lütfen bir kaç şeyi aklında tut: + +- Bu alfa sürümü daha çok yeni. Hatalar, bitmemiş oynanış, elden geçirilmemiş mekanikler ve eksik özellikler bulunuyor. +- Yapıcı geri bildirim veya hata raporların varsa, bize Reddit, GitLab veya Discord sunucumuzdan ulaşabilirsin. +- Veloren GPL 3 açık kaynak lisansı ile lisanslıdır. Bunun anlamı, oyunu istediğin gibi oynayabilir, değiştirebilir ve dağıtabilirsin +(türetilmiş çalışmalarda GPL 3 ile lisanslanmış olduğu sürece) +- Veloren kar gütmeyen bir topluluk projesidir ve üzerinde çalışan herkes birer gönüllüdür. +Gördüklerini beğendiysen, geliştirme veya sanat takımlarına katılabilirsin! +- 'Voxel RPG' kendi başına bir tür. Birinci şahıs nişancı oyunları önceden Doom kopyaları olarak adlandırılıyordu. + +Bizde onlar gibi bir niş inşa etmeye çalışıyoruz. Bu oyun bir kopya değil ve gelecekte gelişimi mevcut oyunlardan ayrılacak. + +Bu bildiriyi okumaya zaman ayırdığın için teşekkür ederiz, umarız ki oyundan memnun kalırsın! + +~ Veloren Geliştiricileri"#, + + // Login process description + "main.login_process": r#"Giriş işlemi hakkında bilgi: + +Eğer giriş yaparken sorunlarla karşılaşıyorsan: + +Lütfen kimlik doğrulaması gerektiren sunucularda +oynamak için bir hesaba ihtiyacın olduğunu hatırla. + +https://account.veloren.net adresinden + +bir hesap oluşturabilirsin."#, + "main.login.server_not_found": "Sunucu bulunamadı", + "main.login.authentication_error": "Sunucuda kimlik doğrulama hatası", + "main.login.server_full": "Sunucu dolu", + "main.login.untrusted_auth_server": "Kimlik doğrulama sunucusu güvenilir değil", + "main.login.outdated_client_or_server": "SunucuÇılgınaDöndü: Muhtemelen versiyonlar uyuşmuyor, güncellemeler için kontrol et.", + "main.login.timeout": "Zamanaşımı: Sunucu zamanında cevap vermedi. (Aşırı yüklenme veya ağ sorunları).", + "main.login.server_shut_down": "Sunucu kapandı", + "main.login.already_logged_in": "Zaten sunucuya giriş yapmışsın.", + "main.login.network_error": "Ağ hatası", + "main.login.failed_sending_request": "Kimlik doğrulama sunucusuna istek gönderilemedi", + "main.login.client_crashed": "İstemci çöktü", + + /// End Main screen section + + + /// Start HUD Section + "hud.do_not_show_on_startup": "Bunu açılışta gösterme", + "hud.show_tips": "Öneriler", + "hud.quests": "Görevler", + "hud.you_died": "Öldün", + + "hud.press_key_to_show_keybindings_fmt": "Kontrolleri göstermek için {key}'e bas", + "hud.press_key_to_show_debug_info_fmt": "Hata ayıklama bilgilerini göstermek için {key}'e bas", + "hud.press_key_to_toggle_keybindings_fmt": "Kontrolleri açmak veya kapamak için {key}'e bas", + "hud.press_key_to_toggle_debug_info_fmt": "Hata ayıklama bilgilerini açmak veya kapamak için {key}'e bas", + + // Respawn message + "hud.press_key_to_respawn": r#"Ziyaret ettiğin en son kamp ateşinde yeniden doğmak için {key}'e bas."#, + + // Welcome message + "hud.welcome": r#"Veloren Alfa sürümüne hoşgeldin!, + + +Başlamadan önce bazı ipuçları: + + +EN ÖNEMLİSİ: Yeniden doğma noktanı ayarlamak için sohbete /waypoint yaz. + +Bu ölmüşsen bile yapılabilir! + + +Kontrolleri görmek için F1'e bas. + +Sohbet komutlarını görmek için sohbete /help yaz. + + +Dünyada rastgele oluşan sandıklar ve başka objeler var! + +Onları toplamak için Sağ-Tık kullan. + +Topladıklarını kullanmak için 'B'ye basarak envanterini aç. + +Envanterindeki eşyaları kullanmak veya kuşanmak için iki kere üzerlerine tıkla. + +Üzerlerine bir kere tıklayıp ve sonra envaterin dışına tıklayarak onları at. + + +Veloren'de geceler oldukça karanlık olabiliyor. + +Sohbete /lantern yazarak fenerini yak. + + +Bu pencereyi kapatmak için imlecini serbest bırakmak mı istiyorsun? TAB'a bas! + + +Veloren'in Dünyasında sana iyi eğlenceler!"#, + + "hud.settings.general": "Genel", + "hud.settings.none": "Yok", + "hud.settings.press_behavior.toggle": "Aç/kapa", + "hud.settings.press_behavior.hold": "Basılı tut", + "hud.settings.help_window": "Yardım Penceresi", + "hud.settings.debug_info": "Hata Ayıklama Bilgileri", + "hud.settings.tips_on_startup": "Açılışta İpuçlarını Göster", + "hud.settings.ui_scale": "Arayüz Ölçeği", + "hud.settings.relative_scaling": "Otomatik Ölçek", + "hud.settings.custom_scaling": "Özel Ölçek", + "hud.settings.crosshair": "İmleç tipi", + "hud.settings.transparency": "Şeffaflık", + "hud.settings.hotbar": "Hotbar", + "hud.settings.toggle_shortcuts": "Kısayolları aç/kapa", + "hud.settings.toggle_bar_experience": "Tecrübe çubuğunu aç/kapa", + "hud.settings.scrolling_combat_text": "Verilen/Alınan Hasar Yazısı", + "hud.settings.single_damage_number": "Verilen Hasarı Tek Tek Göster", + "hud.settings.cumulated_damage": "Toplam Verilen Hasarı Göster", + "hud.settings.incoming_damage": "Alınan Hasarı Tek Tek Göster", + "hud.settings.cumulated_incoming_damage": "Toplam Alınan Hasarı Göster", + "hud.settings.energybar_numbers": "Enerji çubuğu değerleri", + "hud.settings.values": "Sayılar", + "hud.settings.percentages": "Yüzdeler", + "hud.settings.chat": "Sohbet", + "hud.settings.background_transparency": "Arkaplan Şeffaflığı", + "hud.settings.none": "Yok", + + "hud.settings.pan_sensitivity": "Kaydırma Hassaslığı", + "hud.settings.zoom_sensitivity": "Büyütme Hassaslığı", + "hud.settings.invert_scroll_zoom": "Kaydırma Büyütmesini ters çevir", + "hud.settings.invert_mouse_y_axis": "Fare Y eksenini ters çevir", + "hud.settings.free_look_behavior": "Serbest bakış davranışı", + + "hud.settings.view_distance": "Görüş Mesafesi", + "hud.settings.maximum_fps": "Maksimum FPS", + "hud.settings.fov": "Görüş alanı (derece)", + "hud.settings.gamma": "Gama", + "hud.settings.antialiasing_mode": "Kenar Yumuşatma Modu", + "hud.settings.cloud_rendering_mode": "Bulut Render Modu", + "hud.settings.fluid_rendering_mode": "Su Render Modu", + "hud.settings.fluid_rendering_mode.cheap": "Ucuz", + "hud.settings.fluid_rendering_mode.shiny": "Güzel", + "hud.settings.cloud_rendering_mode.regular": "Normal", + "hud.settings.fullscreen": "Tam ekran", + "hud.settings.save_window_size": "Pencere boyutunu kaydet", + + "hud.settings.music_volume": "Müzik Sesi", + "hud.settings.sound_effect_volume": "Efekt Sesi", + "hud.settings.audio_device": "Ses Aygıtı", + + // Control list + "hud.settings.control_names": r#"İmleci serbest bırak +Yardım Pencerisini aç/kapa +Arayüzü aç/kapa +FPS ve hata ayıklama bilgilerini aç/kapa +Ekran görüntüsü al +İsim etiketlerini aç/kapa +Tam ekranı aç/kapa + + +İleri Git +Sola Git +Sağa Git +Geriye Git + +Zıpla + +Planör + +Sıçra + +Yuvarlan + +Tırman + +İn + +Otomatik yürüme + +Silahları koy/çıkar + +Kaskı kuşan/çıkar + +Otur + +Bin + +Etkileşim + + +Basit Saldırı +İkincil Saldırı/Blok/Nişan Alma + + +Yetenek çubuğu Slot 1 +Yetenek çubuğu Slot 2 +Yetenek çubuğu Slot 3 +Yetenek çubuğu Slot 4 +Yetenek çubuğu Slot 5 +Yetenek çubuğu Slot 6 +Yetenek çubuğu Slot 7 +Yetenek çubuğu Slot 8 +Yetenek çubuğu Slot 9 +Yetenek çubuğu Slot 10 + + +Duraklatma Menüsü +Ayarlar +Sosyal +Harita +Büyü kitabı +Karakter +Görev kaydı +Çanta + + + +Sohbet Mesajı Gönder +Sohbeti Kaydır + + +Serbest bakış + + +Sohbet komutları: + +/alias [İsim] - Sohbet İsmini değiştir +/tp [İsim] - Seni başka bir oyuncuya ışınlar +/jump - Pozisyonunu kaydır +/goto - Bir pozisyona ışınlan +/kill - Kendini öldür +/pig - Domuz NPC'si oluştur +/wolf - Kurt NPC'si oluştur +/help - Sohbet komutlarını göster"#, + + "hud.social": "Sosyal", + "hud.social.online": "Çevrimiçi", + "hud.social.friends": "Arkadaşlar", + "hud.social.not_yet_available": "Şu anda kullanılabilir değil", + "hud.social.faction": "Klan", + "hud.social.play_online_fmt": "{nb_player} oyuncu çevrimiçi", + + "hud.spell": "Büyü", + + "hud.free_look_indicator": "Serbest bakış açık", + /// End HUD section + + + /// Start chracter selection section + // Character delete question + "char_selection.delete_permanently": r#"Bu karakteri kalıcı olarak +silmek istediğinden emin misin?"#, + + "char_selection.change_server": "Sunucu Değiştir", + "char_selection.enter_world": "Dünyaya Gir", + "char_selection.logout": "Çıkış yap", + "char_selection.create_new_charater": "Yeni Karakter Oluştur", + "char_selection.character_creation": "Karakter Oluşumu", + + "char_selection.human_default": "İnsan Varsayılanı", + "char_selection.level_fmt": "Seviye {level_nb}", + "char_selection.uncanny_valley": "Esrarengiz Vadi", + "char_selection.plains_of_uncertainty": "Belirsizlik Ovaları", + "char_selection.beard": "Sakal", + "char_selection.hair_style": "Saç Stili", + "char_selection.hair_color": "Saç Rengi", + "char_selection.chest_color": "Göğüs Rengi", + "char_selection.eye_color": "Göz Rengi", + "char_selection.skin": "Deri", + "char_selection.eyebrows": "Kaşlar", + "char_selection.accessories": "Aksesuarlar", + + /// End chracter selection section + + + /// Start character window section + "character_window.character_name": "Karakter Adı", + // Charater stats + "character_window.character_stats": r#"Dayanıklılık + +Fiziksel yetenek + +İrade gücü +"#, + + + /// Start character window section + + + /// Start Escape Menu Section + "esc_menu.logout": "Çıkış yap", + "esc_menu.quit_game": "Oyundan çık", + /// End Escape Menu Section + } +) diff --git a/assets/voxygen/item_image_manifest.ron b/assets/voxygen/item_image_manifest.ron index a53c7a6c8b..f9c40cf4ec 100644 --- a/assets/voxygen/item_image_manifest.ron +++ b/assets/voxygen/item_image_manifest.ron @@ -3,37 +3,224 @@ // VoxTrans(specifier, offset, (x_rot, y_rot, z_rot), zoom) ({ // Weapons - Tool(Bow): VoxTrans( + // Bows + Tool(Bow(BasicBow)): VoxTrans( "voxel.weapon.bow.simple-bow", (0.0, 0.0, 0.0), (90.0, 90.0, 0.0), 1.0, ), - Tool(Dagger): VoxTrans( + // Daggers + Tool(Dagger(BasicDagger)): VoxTrans( "voxel.weapon.dagger.dagger_rusty", (0.0, 0.0, -4.0), (-120.0, 90.0, 0.0), 1.1, ), - Tool(Sword): VoxTrans( + // Swords + Tool(Sword(Short0)): VoxTrans( + "voxel.weapon.sword.short_2h-0", + (0.0, 9.0, 0.0), (-90.0, 90.0, 0.0), 2.4, + ), + Tool(Sword(BasicSword)): VoxTrans( "voxel.weapon.sword.rusty_2h", (0.0, 9.0, 0.0), (-90.0, 90.0, 0.0), 2.4, ), - Tool(Axe): VoxTrans( + Tool(Sword(Zweihander0)): VoxTrans( + "voxel.weapon.sword.zweihander_2h-0", + (0.0, 9.0, 0.0), (-90.0, 90.0, 0.0), 2.4, + ), + Tool(Sword(WoodTraining)): VoxTrans( + "voxel.weapon.sword.wood_2h", + (0.0, 9.0, 0.0), (-90.0, 90.0, 0.0), 2.4, + ), + // Axes + Tool(Axe(BasicAxe)): VoxTrans( "voxel.weapon.axe.rusty_2h", (0.0, -8.0, 0.0), (-90.0, 90.0, 0.0), 2.0, ), - Tool(Hammer): VoxTrans( + // Hammers + Tool(Hammer(BasicHammer)): VoxTrans( "voxel.weapon.hammer.rusty_2h", (0.0, -8.0, 0.0), (-90.0, 90.0, 0.0), 2.0, ), - Tool(Staff): VoxTrans( + // Staffs + Tool(Staff(BasicStaff)): VoxTrans( "voxel.weapon.staff.wood-fire", (0.0, -9.0, 0.0), (90.0, 90.0, 0.0), 2.5, ), - Tool(Shield): VoxTrans( + Tool(Staff(Sceptre)): VoxTrans( + "voxel.weapon.staff.wood-nature", + (0.0, -9.0, 0.0), (90.0, 90.0, 0.0), 2.5, + ), + // Shields + Tool(Shield(BasicShield)): VoxTrans( "voxel.weapon.shield.wood-0", - (0.0, 9.0, 0.0), (-90.0, 90.0, 0.0), 2.4, + (0.0, 0.0, 0.0), (-90.0, 90.0, 0.0), 2.4, ), - Utility(Collar): VoxTrans( + // Other + Utility(Collar): Png( "element.icons.collar", - (0.0, 0.0, 0.0), (-90.0, 180.0, 10.0), 1.3, + ), + + // Armor + // Assassin Set + Armor(Chest(Assassin)): VoxTrans( + "voxel.armor.chest.assa", + (0.0, 0.0, 0.0), (-90.0, 180.0, 0.0), 1.2, + ), + Armor(Pants(Assassin)): VoxTrans( + "voxel.armor.pants.assa", + (0.0, 0.0, 0.0), (-90.0, 180.0, 0.0), 1.2, + ), + Armor(Belt(Assassin)): VoxTrans( + "voxel.armor.belt.assa", + (0.0, 0.0, 0.0), (-90.0, 180.0, 0.0), 1.8, + ), + Armor(Foot(Assassin)): VoxTrans( + "voxel.armor.foot.assa", + (0.0, 0.0, 0.0), (-95.0, 140.0, 0.0), 1.1, + ), + Armor(Hand(Assassin)): VoxTrans( + "voxel.armor.hand.assa_right", + (0.0, -1.0, 0.0), (-90.0, 135.0, 0.0), 1.0, + ), + Armor(Shoulder(Assassin)): VoxTrans( + "voxel.armor.shoulder.assa_right", + (0.0, 0.0, 0.0), (-90.0, 180.0, 0.0), 1.2, + ), + // Starting Armor - Plate + Armor(Chest(PlateGreen0)): VoxTrans( + "voxel.armor.chest.plate_green-0", + (0.0, 0.0, 0.0), (-90.0, 180.0, 0.0), 1.2, + ), + Armor(Pants(PlateGreen0)): VoxTrans( + "voxel.armor.pants.plate_green-0", + (0.0, 0.0, 0.0), (-90.0, 180.0, 0.0), 1.2, + ), + Armor(Belt(Plate0)): VoxTrans( + "voxel.armor.belt.plate-0", + (0.0, 0.0, 0.0), (-90.0, 180.0, 0.0), 1.8, + ), + Armor(Foot(Plate0)): VoxTrans( + "voxel.armor.foot.plate-0", + (0.0, 0.0, 0.0), (-95.0, 140.0, 0.0), 1.1, + ), + Armor(Hand(Plate0)): VoxTrans( + "voxel.armor.hand.plate_right-0", + (0.0, -1.0, 0.0), (-90.0, 135.0, 0.0), 1.0, + ), + Armor(Shoulder(Plate0)): VoxTrans( + "voxel.armor.shoulder.plate_right-0", + (0.0, 0.0, 0.0), (-90.0, 130.0, 0.0), 1.2, + ), + //Leather0 Armor + Armor(Chest(Leather0)): VoxTrans( + "voxel.armor.chest.leather-0", + (0.0, 0.0, 0.0), (-90.0, 180.0, 0.0), 1.2, + ), + Armor(Pants(Leather0)): VoxTrans( + "voxel.armor.pants.leather-0", + (0.0, 0.0, 0.0), (-90.0, 180.0, 0.0), 1.2, + ), + Armor(Belt(Leather0)): VoxTrans( + "voxel.armor.belt.leather-0", + (0.0, 0.0, 0.0), (-90.0, 180.0, 0.0), 1.8, + ), + Armor(Foot(Leather0)): VoxTrans( + "voxel.armor.foot.leather-0", + (0.0, 0.0, 0.0), (-95.0, 140.0, 0.0), 1.1, + ), + Armor(Hand(Leather0)): VoxTrans( + "voxel.armor.hand.leather_right-0", + (0.0, -1.0, 0.0), (-90.0, 135.0, 0.0), 1.0, + ), + Armor(Shoulder(Leather1)): VoxTrans( + "voxel.armor.shoulder.leather_right-1", + (0.0, 0.0, 0.0), (-90.0, 130.0, 0.0), 1.2, + ), + Armor(Shoulder(Leather0)): VoxTrans( + "voxel.armor.shoulder.leather_right-0", + (0.0, 0.0, 0.0), (-90.0, 130.0, 0.0), 1.2, + ), + //Linen Cloth + Armor(Chest(ClothBlue0)): VoxTrans( + "voxel.armor.chest.cloth_blue-0", + (0.0, 0.0, 0.0), (-90.0, 180.0, 0.0), 1.2, + ), + Armor(Pants(ClothBlue0)): VoxTrans( + "voxel.armor.pants.cloth_blue-0", + (0.0, 0.0, 0.0), (-90.0, 180.0, 0.0), 1.2, + ), + Armor(Belt(ClothBlue0)): VoxTrans( + "voxel.armor.belt.cloth_blue-0", + (0.0, 0.0, 0.0), (-90.0, 180.0, 0.0), 1.8, + ), + Armor(Foot(ClothBlue0)): VoxTrans( + "voxel.armor.foot.cloth_blue-0", + (0.0, 0.0, 0.0), (-95.0, 140.0, 0.0), 1.1, + ), + Armor(Hand(ClothBlue0)): VoxTrans( + "voxel.armor.hand.cloth_blue_right-0", + (0.0, -1.0, 0.0), (-90.0, 135.0, 0.0), 1.0, + ), + Armor(Shoulder(ClothBlue0)): VoxTrans( + "voxel.armor.shoulder.cloth_blue_right-0", + (0.0, 0.0, 0.0), (-90.0, 130.0, 0.0), 1.2, + ), + ////////////// + Armor(Chest(ClothGreen0)): VoxTrans( + "voxel.armor.chest.cloth_green-0", + (0.0, 0.0, 0.0), (-90.0, 180.0, 0.0), 1.2, + ), + Armor(Pants(ClothGreen0)): VoxTrans( + "voxel.armor.pants.cloth_green-0", + (0.0, 0.0, 0.0), (-90.0, 180.0, 0.0), 1.2, + ), + Armor(Belt(ClothGreen0)): VoxTrans( + "voxel.armor.belt.cloth_green-0", + (0.0, 0.0, 0.0), (-90.0, 180.0, 0.0), 1.8, + ), + Armor(Foot(ClothGreen0)): VoxTrans( + "voxel.armor.foot.cloth_green-0", + (0.0, 0.0, 0.0), (-95.0, 140.0, 0.0), 1.1, + ), + Armor(Hand(ClothGreen0)): VoxTrans( + "voxel.armor.hand.cloth_green_right-0", + (0.0, -1.0, 0.0), (-90.0, 135.0, 0.0), 1.0, + ), + Armor(Shoulder(ClothGreen0)): VoxTrans( + "voxel.armor.shoulder.cloth_green_right-0", + (0.0, 0.0, 0.0), (-90.0, 130.0, 0.0), 1.2, + ), + Armor(Shoulder(ClothGreen0)): VoxTrans( + "voxel.armor.shoulder.cloth_green_right-0", + (0.0, 0.0, 0.0), (-90.0, 130.0, 0.0), 1.2, + ), + ////// + Armor(Chest(ClothPurple0)): VoxTrans( + "voxel.armor.chest.cloth_purple-0", + (0.0, 0.0, 0.0), (-90.0, 180.0, 0.0), 1.2, + ), + Armor(Pants(ClothPurple0)): VoxTrans( + "voxel.armor.pants.cloth_purple-0", + (0.0, 0.0, 0.0), (-90.0, 180.0, 0.0), 1.2, + ), + Armor(Belt(ClothPurple0)): VoxTrans( + "voxel.armor.belt.cloth_purple-0", + (0.0, 0.0, 0.0), (-90.0, 180.0, 0.0), 1.8, + ), + Armor(Foot(ClothPurple0)): VoxTrans( + "voxel.armor.foot.cloth_purple-0", + (0.0, 0.0, 0.0), (-95.0, 140.0, 0.0), 1.1, + ), + Armor(Hand(ClothPurple0)): VoxTrans( + "voxel.armor.hand.cloth_purple_right-0", + (0.0, -1.0, 0.0), (-90.0, 135.0, 0.0), 1.0, + ), + Armor(Shoulder(ClothPurple0)): VoxTrans( + "voxel.armor.shoulder.cloth_purple_right-1", + (0.0, 0.0, 0.0), (-90.0, 130.0, 0.0), 1.2, + ), + Armor(Shoulder(ClothPurple0)): VoxTrans( + "voxel.armor.shoulder.cloth_purple_right-0", + (0.0, 0.0, 0.0), (-90.0, 130.0, 0.0), 1.2, ), // Consumables Consumable(Apple): VoxTrans( diff --git a/assets/voxygen/shaders/fluid-frag/cheap.glsl b/assets/voxygen/shaders/fluid-frag/cheap.glsl index b2e3d4b6ac..f3c92ab429 100644 --- a/assets/voxygen/shaders/fluid-frag/cheap.glsl +++ b/assets/voxygen/shaders/fluid-frag/cheap.glsl @@ -34,16 +34,6 @@ void main() { vec3 cam_to_frag = normalize(f_pos - cam_pos.xyz); - /* - // Round the position to the nearest triangular grid cell - vec3 hex_pos = f_pos * 2.0; - hex_pos = hex_pos + vec3(hex_pos.y * 1.4 / 3.0, hex_pos.y * 0.1, 0); - if (fract(hex_pos.x) > fract(hex_pos.y)) { - hex_pos += vec3(1.0, 1.0, 0); - } - hex_pos = floor(hex_pos); - */ - vec3 light, diffuse_light, ambient_light; get_sun_diffuse(f_norm, time_of_day.x, light, diffuse_light, ambient_light, 0.0); float point_shadow = shadow_at(f_pos,f_norm); @@ -52,7 +42,7 @@ void main() { vec3 point_light = light_at(f_pos, f_norm); light += point_light; diffuse_light += point_light; - vec3 surf_color = illuminate(srgb_to_linear(vec3(0.2, 0.2, 1.0)), light, diffuse_light, ambient_light); + vec3 surf_color = srgb_to_linear(vec3(0.4, 0.7, 2.0)) * light * diffuse_light * ambient_light; float fog_level = fog(f_pos.xyz, focus_pos.xyz, medium.x); vec4 clouds; diff --git a/assets/voxygen/shaders/fluid-frag/shiny.glsl b/assets/voxygen/shaders/fluid-frag/shiny.glsl index cb7a37544d..8d06ee468c 100644 --- a/assets/voxygen/shaders/fluid-frag/shiny.glsl +++ b/assets/voxygen/shaders/fluid-frag/shiny.glsl @@ -68,16 +68,6 @@ void main() { vec3 cam_to_frag = normalize(f_pos - cam_pos.xyz); float frag_dist = length(f_pos - cam_pos.xyz); - /* - // Round the position to the nearest triangular grid cell - vec3 hex_pos = f_pos * 2.0; - hex_pos = hex_pos + vec3(hex_pos.y * 1.4 / 3.0, hex_pos.y * 0.1, 0); - if (fract(hex_pos.x) > fract(hex_pos.y)) { - hex_pos += vec3(1.0, 1.0, 0); - } - hex_pos = floor(hex_pos); - */ - vec3 b_norm; if (f_norm.z > 0.0) { b_norm = vec3(1, 0, 0); @@ -111,7 +101,7 @@ void main() { vec3 point_light = light_at(f_pos, norm); light += point_light; diffuse_light += point_light; - vec3 surf_color = illuminate(srgb_to_linear(f_col), light, diffuse_light, ambient_light); + vec3 surf_color = srgb_to_linear(vec3(0.2, 0.5, 1.0)) * light * diffuse_light * ambient_light; float fog_level = fog(f_pos.xyz, focus_pos.xyz, medium.x); vec4 clouds; @@ -119,7 +109,7 @@ void main() { vec3 reflect_ray_dir = reflect(cam_to_frag, norm); // Hack to prevent the reflection ray dipping below the horizon and creating weird blue spots in the water - reflect_ray_dir.z = max(reflect_ray_dir.z, 0.05); + reflect_ray_dir.z = max(reflect_ray_dir.z, 0.01); vec4 _clouds; vec3 reflect_color = get_sky_color(reflect_ray_dir, time_of_day.x, f_pos, vec3(-100000), 0.25, false, _clouds) * f_light; diff --git a/assets/voxygen/shaders/fluid-vert.glsl b/assets/voxygen/shaders/fluid-vert.glsl index 2692e463a2..412b46bd80 100644 --- a/assets/voxygen/shaders/fluid-vert.glsl +++ b/assets/voxygen/shaders/fluid-vert.glsl @@ -27,6 +27,9 @@ void main() { f_pos.z *= min(1.0001 - 0.02 / pow(tick.x - load_time, 10.0), 1.0); f_pos.z -= 25.0 * pow(distance(focus_pos.xy, f_pos.xy) / view_distance.x, 20.0); + // Small waves + f_pos.z -= 0.05 + 0.05 * (sin(tick.x * 2.0 + f_pos.x * 2.0 + f_pos.y * 2.0) + 1.0) * 0.5; + f_col = vec3( float((v_col_light >> 8) & 0xFFu), float((v_col_light >> 16) & 0xFFu), diff --git a/assets/voxygen/shaders/include/light.glsl b/assets/voxygen/shaders/include/light.glsl index e937535b78..1496dd2d42 100644 --- a/assets/voxygen/shaders/include/light.glsl +++ b/assets/voxygen/shaders/include/light.glsl @@ -25,7 +25,7 @@ vec3 illuminate(vec3 color, vec3 light, vec3 diffuse, vec3 ambience) { } float attenuation_strength(vec3 rpos) { - return 1.0 / (rpos.x * rpos.x + rpos.y * rpos.y + rpos.z * rpos.z); + return 1.0 / pow(rpos.x * rpos.x + rpos.y * rpos.y + rpos.z * rpos.z, 0.6); } vec3 light_at(vec3 wpos, vec3 wnorm) { diff --git a/assets/voxygen/shaders/include/sky.glsl b/assets/voxygen/shaders/include/sky.glsl index 5b3869c8ac..7ac0dbc6c9 100644 --- a/assets/voxygen/shaders/include/sky.glsl +++ b/assets/voxygen/shaders/include/sky.glsl @@ -21,6 +21,8 @@ const vec3 SKY_NIGHT_MID = vec3(0.001, 0.005, 0.02); const vec3 SKY_NIGHT_BOT = vec3(0.002, 0.004, 0.004); const vec3 NIGHT_LIGHT = vec3(0.002, 0.01, 0.03); +const float UNDERWATER_MIST_DIST = 100.0; + vec3 get_sun_dir(float time_of_day) { const float TIME_FACTOR = (PI * 2.0) / (3600.0 * 24.0); @@ -202,7 +204,7 @@ float fog(vec3 f_pos, vec3 focus_pos, uint medium) { float max_fog = 1.0; if (medium == 1u) { - mist_radius = 96.0; + mist_radius = UNDERWATER_MIST_DIST; min_fog = 0.0; } diff --git a/assets/voxygen/shaders/skybox-frag.glsl b/assets/voxygen/shaders/skybox-frag.glsl index ab39a37c3c..d537a1f9eb 100644 --- a/assets/voxygen/shaders/skybox-frag.glsl +++ b/assets/voxygen/shaders/skybox-frag.glsl @@ -14,5 +14,13 @@ out vec4 tgt_color; void main() { vec4 _clouds; - tgt_color = vec4(get_sky_color(normalize(f_pos), time_of_day.x, cam_pos.xyz, vec3(-100000), 1.0, true, _clouds), 1.0); + float fog_level = fog(f_pos.xyz, focus_pos.xyz, medium.x); + + float dist = 100000.0; + if (medium.x == 1u) { + dist = UNDERWATER_MIST_DIST; + } + vec3 wpos = cam_pos.xyz + normalize(f_pos) * dist; + + tgt_color = vec4(get_sky_color(normalize(f_pos), time_of_day.x, cam_pos.xyz, wpos, 1.0, true, _clouds), 1.0); } diff --git a/assets/voxygen/voxel/armor/belt/assa.vox b/assets/voxygen/voxel/armor/belt/assa.vox new file mode 100644 index 0000000000..e6285a27cf --- /dev/null +++ b/assets/voxygen/voxel/armor/belt/assa.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ab185c2f3af358eb6f45d8ceb19d7df33417b13b327aae65ff1d296a7587e79 +size 1472 diff --git a/assets/voxygen/voxel/armor/belt/belt_none.vox b/assets/voxygen/voxel/armor/belt/belt_none.vox new file mode 100644 index 0000000000..aa27c2a7cb --- /dev/null +++ b/assets/voxygen/voxel/armor/belt/belt_none.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2be744a5ee964b6f325875424a32a121386a87f88c53cf61553b171c6ff9dad7 +size 1472 diff --git a/assets/voxygen/voxel/armor/belt/cloth_black.vox b/assets/voxygen/voxel/armor/belt/cloth_black.vox new file mode 100644 index 0000000000..025abd9ab0 --- /dev/null +++ b/assets/voxygen/voxel/armor/belt/cloth_black.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8900d6dc56512d531de0a31330d6f8e98a7982300e859a759c6d50221d48d58 +size 56019 diff --git a/assets/voxygen/voxel/armor/belt/cloth_blood.vox b/assets/voxygen/voxel/armor/belt/cloth_blood.vox new file mode 100644 index 0000000000..6ceecc6bcc --- /dev/null +++ b/assets/voxygen/voxel/armor/belt/cloth_blood.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a7b0dc5700924993498e85da238575afe82560eb731f5325208010195ec59a3f +size 1536 diff --git a/assets/voxygen/voxel/armor/belt/cloth_blue-0.vox b/assets/voxygen/voxel/armor/belt/cloth_blue-0.vox new file mode 100644 index 0000000000..bbfffeddfa --- /dev/null +++ b/assets/voxygen/voxel/armor/belt/cloth_blue-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c9105cf4a36363c634305678e58da2e0caed456ac58ece7cc2f75073af1d1cb +size 1480 diff --git a/assets/voxygen/voxel/armor/belt/cloth_green-0.vox b/assets/voxygen/voxel/armor/belt/cloth_green-0.vox new file mode 100644 index 0000000000..881e668464 --- /dev/null +++ b/assets/voxygen/voxel/armor/belt/cloth_green-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6947c00796247c7176aebff4d7b19c88416db20ce692245a864e1baaa9035350 +size 1480 diff --git a/assets/voxygen/voxel/armor/belt/cloth_grey.vox b/assets/voxygen/voxel/armor/belt/cloth_grey.vox new file mode 100644 index 0000000000..74eaecfe80 --- /dev/null +++ b/assets/voxygen/voxel/armor/belt/cloth_grey.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c789fb9004477fe3e1c18821d276e5461d0959375908d59c4ce043dc642cb64b +size 56019 diff --git a/assets/voxygen/voxel/armor/belt/cloth_purple-0.vox b/assets/voxygen/voxel/armor/belt/cloth_purple-0.vox new file mode 100644 index 0000000000..8671b16647 --- /dev/null +++ b/assets/voxygen/voxel/armor/belt/cloth_purple-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c5b5ff3e4c197686e9bae89cc776f13e3461fff9b168c68c570c4dccfc7c2d34 +size 1480 diff --git a/assets/voxygen/voxel/armor/belt/leather-0.vox b/assets/voxygen/voxel/armor/belt/leather-0.vox new file mode 100644 index 0000000000..e9a2e55758 --- /dev/null +++ b/assets/voxygen/voxel/armor/belt/leather-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9b2e1e7b2dc1fbf34d262567d38aa55a4e71c690516d4d895a240b47786c709e +size 1472 diff --git a/assets/voxygen/voxel/armor/belt/plate-0.vox b/assets/voxygen/voxel/armor/belt/plate-0.vox new file mode 100644 index 0000000000..274d084e72 --- /dev/null +++ b/assets/voxygen/voxel/armor/belt/plate-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a080bd77583d9ecefbf1d0f22d83a9d30f3594ee6254af961643cf4ed2bf1b7a +size 1472 diff --git a/assets/voxygen/voxel/armor/chest/assa.vox b/assets/voxygen/voxel/armor/chest/assa.vox new file mode 100644 index 0000000000..dc173f1cf0 --- /dev/null +++ b/assets/voxygen/voxel/armor/chest/assa.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ec2c2ec85bca46a9ae5db921064cd817cf29bf98080d186fd327256421f7a57 +size 2712 diff --git a/assets/voxygen/voxel/armor/chest/chest_none.vox b/assets/voxygen/voxel/armor/chest/chest_none.vox new file mode 100644 index 0000000000..1e9089c6b0 --- /dev/null +++ b/assets/voxygen/voxel/armor/chest/chest_none.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aaf05edac3fb92fab781293452dd074f915763bc3650cf79c4dbf356da3cfb23 +size 57075 diff --git a/assets/voxygen/voxel/armor/chest/cloth_blue-0.vox b/assets/voxygen/voxel/armor/chest/cloth_blue-0.vox new file mode 100644 index 0000000000..db4983e487 --- /dev/null +++ b/assets/voxygen/voxel/armor/chest/cloth_blue-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:86dae5747863ce7d6295579d615f9981f36cfabd90491135eae77b27ee4bc7d2 +size 2688 diff --git a/assets/voxygen/voxel/armor/chest/cloth_green-0.vox b/assets/voxygen/voxel/armor/chest/cloth_green-0.vox new file mode 100644 index 0000000000..46c430dfa0 --- /dev/null +++ b/assets/voxygen/voxel/armor/chest/cloth_green-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d036f47008c035f4523819e53933cca39461eb3dd51cde6a0e591c6d3f6f2629 +size 2688 diff --git a/assets/voxygen/voxel/armor/chest/cloth_purple-0.vox b/assets/voxygen/voxel/armor/chest/cloth_purple-0.vox new file mode 100644 index 0000000000..cc7af8ef79 --- /dev/null +++ b/assets/voxygen/voxel/armor/chest/cloth_purple-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:40b9e27d6ffa8129eae701e36a4e7e54ca864a1b8b47dc442eefe7ffb0bae9e7 +size 2688 diff --git a/assets/voxygen/voxel/armor/chest/leather-0.vox b/assets/voxygen/voxel/armor/chest/leather-0.vox new file mode 100644 index 0000000000..0b7da039d2 --- /dev/null +++ b/assets/voxygen/voxel/armor/chest/leather-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:942cd835b41b31f24848381a0e77df29aeb149fd90d6ef6835949964ede8bab7 +size 57211 diff --git a/assets/voxygen/voxel/armor/chest/none.vox b/assets/voxygen/voxel/armor/chest/none.vox deleted file mode 100644 index 81d8cd472d..0000000000 --- a/assets/voxygen/voxel/armor/chest/none.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4a9d575c5ff1c36714fe5a69ca6aad4eb2b16e4bcccfd924fc38e4c7ecbe94d5 -size 55915 diff --git a/assets/voxygen/voxel/armor/chest/plate_green-0.vox b/assets/voxygen/voxel/armor/chest/plate_green-0.vox new file mode 100644 index 0000000000..79466f4172 --- /dev/null +++ b/assets/voxygen/voxel/armor/chest/plate_green-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d91415da84dba3e5a7c1c321b9728d80f1a9ca05ec8707bf39003b8b13033a1 +size 57227 diff --git a/assets/voxygen/voxel/armor/foot/assa.vox b/assets/voxygen/voxel/armor/foot/assa.vox new file mode 100644 index 0000000000..48dfb84f1a --- /dev/null +++ b/assets/voxygen/voxel/armor/foot/assa.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8596adda7d5f16aced46959050ee8135f72123a1943531fdda11c816a86db380 +size 55963 diff --git a/assets/voxygen/voxel/armor/foot/cloth_blue-0.vox b/assets/voxygen/voxel/armor/foot/cloth_blue-0.vox new file mode 100644 index 0000000000..eb513adc8c --- /dev/null +++ b/assets/voxygen/voxel/armor/foot/cloth_blue-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:57ec1ba7989c2a583b3ae38f940c0b8438e397cf0b4d09d43f0d75f6c7dce028 +size 1480 diff --git a/assets/voxygen/voxel/armor/foot/cloth_green-0.vox b/assets/voxygen/voxel/armor/foot/cloth_green-0.vox new file mode 100644 index 0000000000..31ebc3f794 --- /dev/null +++ b/assets/voxygen/voxel/armor/foot/cloth_green-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a343d79c14eb6101ece034a34f64cdd7f1272f4d5ffdda2b5896732bc2b7ae36 +size 1480 diff --git a/assets/voxygen/voxel/armor/foot/cloth_purple-0.vox b/assets/voxygen/voxel/armor/foot/cloth_purple-0.vox new file mode 100644 index 0000000000..9165d0ac45 --- /dev/null +++ b/assets/voxygen/voxel/armor/foot/cloth_purple-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a45bd1b8ecfcab47da779269ec6dcf67a7e99a0e75f6523167f6e27c946d1b1 +size 1480 diff --git a/assets/voxygen/voxel/armor/foot/foot_none.vox b/assets/voxygen/voxel/armor/foot/foot_none.vox new file mode 100644 index 0000000000..8bb8442d00 --- /dev/null +++ b/assets/voxygen/voxel/armor/foot/foot_none.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7c2c8e06095499d1b72c17433fc401969166a7634e815965568b4c5326d63ea +size 55899 diff --git a/assets/voxygen/voxel/armor/foot/leather-0.vox b/assets/voxygen/voxel/armor/foot/leather-0.vox new file mode 100644 index 0000000000..1fc89ddb1b --- /dev/null +++ b/assets/voxygen/voxel/armor/foot/leather-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:85f32ee87cade27c5f8fe1ad748462f3f13559371bc4bd3cc0c47abbe7756cd1 +size 1480 diff --git a/assets/voxygen/voxel/armor/foot/plate-0.vox b/assets/voxygen/voxel/armor/foot/plate-0.vox new file mode 100644 index 0000000000..50d3eae09b --- /dev/null +++ b/assets/voxygen/voxel/armor/foot/plate-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:610e5b351d62943f88893791bfe8ca20838fd3c3635219886033dba6032170f2 +size 1480 diff --git a/assets/voxygen/voxel/armor/hand/assa_left.vox b/assets/voxygen/voxel/armor/hand/assa_left.vox index b103659d78..2ee60e1f18 100644 --- a/assets/voxygen/voxel/armor/hand/assa_left.vox +++ b/assets/voxygen/voxel/armor/hand/assa_left.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d3c8d6c4226337c43cd1d5b8ab2f251c38ccb9357a524697b672c0e63bf7f41e +oid sha256:d981e3ab25371195bdb81ab260b41e6fd985130969b96068dc560ea0412fc49a size 1240 diff --git a/assets/voxygen/voxel/armor/hand/assa_right.vox b/assets/voxygen/voxel/armor/hand/assa_right.vox index 2bf33c0563..5bd9116e8c 100644 --- a/assets/voxygen/voxel/armor/hand/assa_right.vox +++ b/assets/voxygen/voxel/armor/hand/assa_right.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:38f226fd0c2425db70c294dbe3566138cd49e05fde6c09f3d972de4a88751741 +oid sha256:b9e41c15237da8a886002d03f1d01558672212de1e8f57b5df207db2d1dd0566 size 55723 diff --git a/assets/voxygen/voxel/armor/hand/cloth_blue_left-0.vox b/assets/voxygen/voxel/armor/hand/cloth_blue_left-0.vox new file mode 100644 index 0000000000..0f13f1967e --- /dev/null +++ b/assets/voxygen/voxel/armor/hand/cloth_blue_left-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2facf25e29008eff1e95b7e2943ff96a776d8d8cff74c0fb9b68506a76c8b291 +size 55723 diff --git a/assets/voxygen/voxel/armor/hand/cloth_blue_right-0.vox b/assets/voxygen/voxel/armor/hand/cloth_blue_right-0.vox new file mode 100644 index 0000000000..94db99996f --- /dev/null +++ b/assets/voxygen/voxel/armor/hand/cloth_blue_right-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a9778605e9bd050a5fd79c553ee4ae1a0d6dcdc68c582b22090cfef609cc0b2c +size 1240 diff --git a/assets/voxygen/voxel/armor/hand/cloth_green_left-0.vox b/assets/voxygen/voxel/armor/hand/cloth_green_left-0.vox new file mode 100644 index 0000000000..23653e83c1 --- /dev/null +++ b/assets/voxygen/voxel/armor/hand/cloth_green_left-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:961948a44f60d0422d340e03e8328271f28bd653342d1d49ad2db8c2f7d93de1 +size 55723 diff --git a/assets/voxygen/voxel/armor/hand/cloth_green_right-0.vox b/assets/voxygen/voxel/armor/hand/cloth_green_right-0.vox new file mode 100644 index 0000000000..83da1d86f6 --- /dev/null +++ b/assets/voxygen/voxel/armor/hand/cloth_green_right-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de77fef40a136ed944b050fc0cff59dc78f043839f335ad4d578478b73d5b847 +size 55723 diff --git a/assets/voxygen/voxel/armor/hand/cloth_purple_left-0.vox b/assets/voxygen/voxel/armor/hand/cloth_purple_left-0.vox new file mode 100644 index 0000000000..8ffef537eb --- /dev/null +++ b/assets/voxygen/voxel/armor/hand/cloth_purple_left-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93dd0d8050e30b1349218efb63c2e669fa750da83156a6eded1395731b8e057d +size 55723 diff --git a/assets/voxygen/voxel/armor/hand/cloth_purple_right-0.vox b/assets/voxygen/voxel/armor/hand/cloth_purple_right-0.vox new file mode 100644 index 0000000000..8ffef537eb --- /dev/null +++ b/assets/voxygen/voxel/armor/hand/cloth_purple_right-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93dd0d8050e30b1349218efb63c2e669fa750da83156a6eded1395731b8e057d +size 55723 diff --git a/assets/voxygen/voxel/armor/hand/hand_left_none.vox b/assets/voxygen/voxel/armor/hand/hand_left_none.vox new file mode 100644 index 0000000000..f21b658e70 --- /dev/null +++ b/assets/voxygen/voxel/armor/hand/hand_left_none.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b9131c1364685750aa5a18b052be26ae0a08654a0cac99c006cf28d4bbae872d +size 1240 diff --git a/assets/voxygen/voxel/armor/hand/hand_right_none.vox b/assets/voxygen/voxel/armor/hand/hand_right_none.vox new file mode 100644 index 0000000000..ff3d290391 --- /dev/null +++ b/assets/voxygen/voxel/armor/hand/hand_right_none.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d7a8e559f0930ac92047a8dc141766210f6a566ca20a87496a0449111eb0192 +size 1240 diff --git a/assets/voxygen/voxel/armor/hand/leather_left-0.vox b/assets/voxygen/voxel/armor/hand/leather_left-0.vox new file mode 100644 index 0000000000..973ca21a3a --- /dev/null +++ b/assets/voxygen/voxel/armor/hand/leather_left-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:82d2fa6e7665eaedcf25ad4e3e42f761864535d0dc03d209855fe79bed4fe5d6 +size 1240 diff --git a/assets/voxygen/voxel/armor/hand/leather_right-0.vox b/assets/voxygen/voxel/armor/hand/leather_right-0.vox new file mode 100644 index 0000000000..e6c476e7f9 --- /dev/null +++ b/assets/voxygen/voxel/armor/hand/leather_right-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d4b55a00aa74cecb123bfacfd4a47047eb1bd321bea2c7d599226a67ca4e2f4 +size 1240 diff --git a/assets/voxygen/voxel/armor/hand/plate_left-0.vox b/assets/voxygen/voxel/armor/hand/plate_left-0.vox new file mode 100644 index 0000000000..17da189c5c --- /dev/null +++ b/assets/voxygen/voxel/armor/hand/plate_left-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b73779f79d87c6126c9769a82fae95e05fca1ae603273a8d1b99a7d65a5cbbad +size 1240 diff --git a/assets/voxygen/voxel/armor/hand/plate_right-0.vox b/assets/voxygen/voxel/armor/hand/plate_right-0.vox new file mode 100644 index 0000000000..9db01e9dc7 --- /dev/null +++ b/assets/voxygen/voxel/armor/hand/plate_right-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:58457547228410c17d04ad5b60329aa282b02888217e6d840806448120b47d6b +size 55723 diff --git a/assets/voxygen/voxel/armor/head/assa_mask.vox b/assets/voxygen/voxel/armor/head/assa_mask.vox new file mode 100644 index 0000000000..07dac5e2f7 --- /dev/null +++ b/assets/voxygen/voxel/armor/head/assa_mask.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4d088786a9c7c6ba623d637fa9d301c6565430449285cd9ad830a52be357bfa1 +size 1544 diff --git a/assets/voxygen/voxel/armor/pants/assa.vox b/assets/voxygen/voxel/armor/pants/assa.vox new file mode 100644 index 0000000000..0fd67628f4 --- /dev/null +++ b/assets/voxygen/voxel/armor/pants/assa.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7db069a83bdb723c5057c975d5a31950ccd7a550d2145b22a681db13f05d5be2 +size 1912 diff --git a/assets/voxygen/voxel/armor/pants/cloth_blue-0.vox b/assets/voxygen/voxel/armor/pants/cloth_blue-0.vox new file mode 100644 index 0000000000..87d313fc19 --- /dev/null +++ b/assets/voxygen/voxel/armor/pants/cloth_blue-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:57c43b492bb31f704ee3f78b0b030fb4588916d78742b0b832cdab44a482beb2 +size 2312 diff --git a/assets/voxygen/voxel/armor/pants/cloth_green-0.vox b/assets/voxygen/voxel/armor/pants/cloth_green-0.vox new file mode 100644 index 0000000000..ebf4a2685d --- /dev/null +++ b/assets/voxygen/voxel/armor/pants/cloth_green-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:510460353bc946a9e2f224d88d388122099abfecbebf13a3f2a16dfddc8a1ce5 +size 2312 diff --git a/assets/voxygen/voxel/armor/pants/cloth_purple-0.vox b/assets/voxygen/voxel/armor/pants/cloth_purple-0.vox new file mode 100644 index 0000000000..88b068b5d5 --- /dev/null +++ b/assets/voxygen/voxel/armor/pants/cloth_purple-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:91b30a998e7f395bef3f2adf8214f6a5b5c5f30b55807bb0c8fdc4d10c47b61a +size 2312 diff --git a/assets/voxygen/voxel/armor/pants/grayscale.vox b/assets/voxygen/voxel/armor/pants/grayscale.vox index 43c06d85a1..e3def7502b 100644 --- a/assets/voxygen/voxel/armor/pants/grayscale.vox +++ b/assets/voxygen/voxel/armor/pants/grayscale.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7d764227547e7dd1660ac5c39c4d9646f11c2c58efd8363702259b326e832a55 -size 56395 +oid sha256:7efe7e5563f5af4229118b9abb560f0e32472ae40416146bd5bbd12a99d66df5 +size 1912 diff --git a/assets/voxygen/voxel/armor/pants/leather-0.vox b/assets/voxygen/voxel/armor/pants/leather-0.vox new file mode 100644 index 0000000000..330bfe513f --- /dev/null +++ b/assets/voxygen/voxel/armor/pants/leather-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:218415ec556f4b15387ee3000291696de792a0393b037c8347a610810448e3e5 +size 1912 diff --git a/assets/voxygen/voxel/armor/pants/pants_none.vox b/assets/voxygen/voxel/armor/pants/pants_none.vox new file mode 100644 index 0000000000..c0297458bd --- /dev/null +++ b/assets/voxygen/voxel/armor/pants/pants_none.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b161523b19d3a236699e73930e108b8ac79efe6b71fbf9d8b5f63eaa23bd91dd +size 1880 diff --git a/assets/voxygen/voxel/armor/pants/plate_green-0.vox b/assets/voxygen/voxel/armor/pants/plate_green-0.vox new file mode 100644 index 0000000000..6520bd653a --- /dev/null +++ b/assets/voxygen/voxel/armor/pants/plate_green-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:70f97c30c4f7a4e0602ebcaccb1b248f618def4cf2a2d81b8d5d480813659d44 +size 1912 diff --git a/assets/voxygen/voxel/armor/shoulder/assa_left.vox b/assets/voxygen/voxel/armor/shoulder/assa_left.vox new file mode 100644 index 0000000000..ed416fed2f --- /dev/null +++ b/assets/voxygen/voxel/armor/shoulder/assa_left.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:68b31a19a383d3157f6754987ea4f7284e8bbb7e16705500ab9c7774e1de7a51 +size 1384 diff --git a/assets/voxygen/voxel/armor/shoulder/assa_right.vox b/assets/voxygen/voxel/armor/shoulder/assa_right.vox new file mode 100644 index 0000000000..ad59092ec3 --- /dev/null +++ b/assets/voxygen/voxel/armor/shoulder/assa_right.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:05df36be9cf12a9bfca9fe5d0c83a4fdafab077a1dc834ec121dc1072ecdf9d2 +size 1384 diff --git a/assets/voxygen/voxel/armor/shoulder/cloth_blue_left-0.vox b/assets/voxygen/voxel/armor/shoulder/cloth_blue_left-0.vox new file mode 100644 index 0000000000..32e876ce57 --- /dev/null +++ b/assets/voxygen/voxel/armor/shoulder/cloth_blue_left-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b41bf446f4612c3cd827940e1dc8595c5a623ce1afe31dfe9d028d7b777cf77a +size 1340 diff --git a/assets/voxygen/voxel/armor/shoulder/cloth_blue_right-0.vox b/assets/voxygen/voxel/armor/shoulder/cloth_blue_right-0.vox new file mode 100644 index 0000000000..32e876ce57 --- /dev/null +++ b/assets/voxygen/voxel/armor/shoulder/cloth_blue_right-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b41bf446f4612c3cd827940e1dc8595c5a623ce1afe31dfe9d028d7b777cf77a +size 1340 diff --git a/assets/voxygen/voxel/armor/shoulder/cloth_green_left-0.vox b/assets/voxygen/voxel/armor/shoulder/cloth_green_left-0.vox new file mode 100644 index 0000000000..c2d056ebb5 --- /dev/null +++ b/assets/voxygen/voxel/armor/shoulder/cloth_green_left-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:36750ddf18297e5f1ef2c9b4afecb38ded31464c76b655491059b58d081f1873 +size 1340 diff --git a/assets/voxygen/voxel/armor/shoulder/cloth_green_right-0.vox b/assets/voxygen/voxel/armor/shoulder/cloth_green_right-0.vox new file mode 100644 index 0000000000..c2d056ebb5 --- /dev/null +++ b/assets/voxygen/voxel/armor/shoulder/cloth_green_right-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:36750ddf18297e5f1ef2c9b4afecb38ded31464c76b655491059b58d081f1873 +size 1340 diff --git a/assets/voxygen/voxel/armor/shoulder/cloth_purple_left-0.vox b/assets/voxygen/voxel/armor/shoulder/cloth_purple_left-0.vox new file mode 100644 index 0000000000..19a1ee8e9b --- /dev/null +++ b/assets/voxygen/voxel/armor/shoulder/cloth_purple_left-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a386f52040323fb01893607aa815c45037143aa84e4b5c504175c0311bf2c45 +size 55823 diff --git a/assets/voxygen/voxel/armor/shoulder/cloth_purple_right-0.vox b/assets/voxygen/voxel/armor/shoulder/cloth_purple_right-0.vox new file mode 100644 index 0000000000..69c3b1ea6c --- /dev/null +++ b/assets/voxygen/voxel/armor/shoulder/cloth_purple_right-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d374ea5deb33c67c366ba76c960b7a7848d4126076ea44eb25dfc3dd10d4ab1 +size 1340 diff --git a/assets/voxygen/voxel/armor/shoulder/brown_left.vox b/assets/voxygen/voxel/armor/shoulder/leather_left-0.vox similarity index 100% rename from assets/voxygen/voxel/armor/shoulder/brown_left.vox rename to assets/voxygen/voxel/armor/shoulder/leather_left-0.vox diff --git a/assets/voxygen/voxel/armor/shoulder/leather_left-1.vox b/assets/voxygen/voxel/armor/shoulder/leather_left-1.vox new file mode 100644 index 0000000000..9650993c12 --- /dev/null +++ b/assets/voxygen/voxel/armor/shoulder/leather_left-1.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:27a5fcdacd90e3e5456d90a2399ed5444f32bf3d7812ffbee4c0433365565946 +size 1472 diff --git a/assets/voxygen/voxel/armor/shoulder/brown_right.vox b/assets/voxygen/voxel/armor/shoulder/leather_right-0.vox similarity index 100% rename from assets/voxygen/voxel/armor/shoulder/brown_right.vox rename to assets/voxygen/voxel/armor/shoulder/leather_right-0.vox diff --git a/assets/voxygen/voxel/armor/shoulder/leather_right-1.vox b/assets/voxygen/voxel/armor/shoulder/leather_right-1.vox new file mode 100644 index 0000000000..4dec6634ce --- /dev/null +++ b/assets/voxygen/voxel/armor/shoulder/leather_right-1.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8146c73f046f71bc9f501f1400ae8e9ee2702b5c746ebce54344b66b4a78255 +size 55955 diff --git a/assets/voxygen/voxel/armor/shoulder/plate_left-0.vox b/assets/voxygen/voxel/armor/shoulder/plate_left-0.vox new file mode 100644 index 0000000000..023047b426 --- /dev/null +++ b/assets/voxygen/voxel/armor/shoulder/plate_left-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db1ab248201355827dad3fc954354d67981629314bc74cfc1615ba684bd20c5d +size 1460 diff --git a/assets/voxygen/voxel/armor/shoulder/plate_right-0.vox b/assets/voxygen/voxel/armor/shoulder/plate_right-0.vox new file mode 100644 index 0000000000..45022728e4 --- /dev/null +++ b/assets/voxygen/voxel/armor/shoulder/plate_right-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44710553f64bdea121df4c2be97ae700d2216cde30623099517f2ea06121c29f +size 55943 diff --git a/assets/voxygen/voxel/biped_large_center_manifest.ron b/assets/voxygen/voxel/biped_large_center_manifest.ron index 9e8a1b70c6..880524ae39 100644 --- a/assets/voxygen/voxel/biped_large_center_manifest.ron +++ b/assets/voxygen/voxel/biped_large_center_manifest.ron @@ -27,4 +27,4 @@ center: ("npc.giant.female.torso_lower"), ) ), -}) \ No newline at end of file +}) diff --git a/assets/voxygen/voxel/biped_large_lateral_manifest.ron b/assets/voxygen/voxel/biped_large_lateral_manifest.ron index 0f05677a48..764872c8ef 100644 --- a/assets/voxygen/voxel/biped_large_lateral_manifest.ron +++ b/assets/voxygen/voxel/biped_large_lateral_manifest.ron @@ -67,4 +67,4 @@ lateral: ("npc.giant.female.foot_r"), ) ), -}) \ No newline at end of file +}) diff --git a/assets/voxygen/voxel/bird_medium_center_manifest.ron b/assets/voxygen/voxel/bird_medium_center_manifest.ron index 6951c0e7af..2d7b1ceebd 100644 --- a/assets/voxygen/voxel/bird_medium_center_manifest.ron +++ b/assets/voxygen/voxel/bird_medium_center_manifest.ron @@ -139,4 +139,5 @@ center: ("npc.eagle.female.tail"), ) ), -}) \ No newline at end of file +}) + diff --git a/assets/voxygen/voxel/bird_medium_lateral_manifest.ron b/assets/voxygen/voxel/bird_medium_lateral_manifest.ron index a934c5695e..26f5bdb9de 100644 --- a/assets/voxygen/voxel/bird_medium_lateral_manifest.ron +++ b/assets/voxygen/voxel/bird_medium_lateral_manifest.ron @@ -179,4 +179,4 @@ lateral: ("npc.eagle.female.leg_r"), ) ), -}) \ No newline at end of file +}) diff --git a/assets/voxygen/voxel/critter_center_manifest.ron b/assets/voxygen/voxel/critter_center_manifest.ron index 5f78275ad3..6c2ee8a5b7 100644 --- a/assets/voxygen/voxel/critter_center_manifest.ron +++ b/assets/voxygen/voxel/critter_center_manifest.ron @@ -263,4 +263,4 @@ center: ("npc.fungome.female.tail"), ), ), -}) \ No newline at end of file +}) diff --git a/assets/voxygen/voxel/figure/accessory/dwarf/warpaint-0.vox b/assets/voxygen/voxel/figure/accessory/dwarf/warpaint-0.vox index d7df1f190e..6384b30de5 100644 --- a/assets/voxygen/voxel/figure/accessory/dwarf/warpaint-0.vox +++ b/assets/voxygen/voxel/figure/accessory/dwarf/warpaint-0.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4d8702f89eb3203f4e7a844ea15cf8a8002058693413391e05477efd549eff24 -size 44411 +oid sha256:ee5ef8c75028aac457778b2f5fb20be0c8f2bc71eb71787f506ece2aa27d6583 +size 1304 diff --git a/assets/voxygen/voxel/figure/accessory/elf/headband-0.vox b/assets/voxygen/voxel/figure/accessory/elf/headband-0.vox index 923a803745..33c38a4369 100644 --- a/assets/voxygen/voxel/figure/accessory/elf/headband-0.vox +++ b/assets/voxygen/voxel/figure/accessory/elf/headband-0.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a6f1d5adf62ce3acce2907ccaa6814ee9609ab6c3f511898d8ca03a4ce43ba35 -size 55596 +oid sha256:4a992b96ae9b6d891a0c98f98742bdc1beeab441e93741ae48401fd3aa6321fa +size 1112 diff --git a/assets/voxygen/voxel/figure/accessory/orc/earring-female-0.vox b/assets/voxygen/voxel/figure/accessory/orc/earring-female-0.vox index 28fbc02c9e..23615fc3f8 100644 --- a/assets/voxygen/voxel/figure/accessory/orc/earring-female-0.vox +++ b/assets/voxygen/voxel/figure/accessory/orc/earring-female-0.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fc7e36908ae2a7d4118bfdaa291ae3866d4d987537f29418f2e4bc6917caf2c1 -size 44265 +oid sha256:6355cd59e15dab5e9f634faa080562cdd7397239f04c2a9b575bd6b856843ac8 +size 1100 diff --git a/assets/voxygen/voxel/figure/accessory/orc/earring-male-0.vox b/assets/voxygen/voxel/figure/accessory/orc/earring-male-0.vox index a0474a5be4..d4b9c24734 100644 --- a/assets/voxygen/voxel/figure/accessory/orc/earring-male-0.vox +++ b/assets/voxygen/voxel/figure/accessory/orc/earring-male-0.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4c6f0c2545760e788b7cd323f21d6dbd4314d4dc33ea750e06ef2d4f164eb8a6 -size 55649 +oid sha256:8f8793d0ef73b5e87a5bb3970bf28091b3acb8ce2d8e159583eafb4ec739c71d +size 1108 diff --git a/assets/voxygen/voxel/figure/accessory/orc/teeth-0.vox b/assets/voxygen/voxel/figure/accessory/orc/teeth-0.vox index 5de62aa839..d265eb3924 100644 --- a/assets/voxygen/voxel/figure/accessory/orc/teeth-0.vox +++ b/assets/voxygen/voxel/figure/accessory/orc/teeth-0.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:56afe629d354ba46de0a9620f8efe8621c724bee198da0d4e688261494fb62cb -size 55572 +oid sha256:e015a61cec39a4fed42e1994597c5de625118caa353ddda898229e4bf971194c +size 1104 diff --git a/assets/voxygen/voxel/figure/accessory/orc/teeth-1.vox b/assets/voxygen/voxel/figure/accessory/orc/teeth-1.vox index cf2adc92bd..e85bdfcbdf 100644 --- a/assets/voxygen/voxel/figure/accessory/orc/teeth-1.vox +++ b/assets/voxygen/voxel/figure/accessory/orc/teeth-1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:166de7e8a7ea76dba2092115c66b828ccbbf81940bbef3c908f57e14fbe95a00 -size 55572 +oid sha256:6b5800d8a12c7c27ba5454ccb11e09831ca2c468fee7072f78689f544b7bfa0e +size 1104 diff --git a/assets/voxygen/voxel/figure/accessory/orc/teeth-2.vox b/assets/voxygen/voxel/figure/accessory/orc/teeth-2.vox index 269776b72c..1ccd6cf112 100644 --- a/assets/voxygen/voxel/figure/accessory/orc/teeth-2.vox +++ b/assets/voxygen/voxel/figure/accessory/orc/teeth-2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:41dc5164763ff2af08af28b25962f7a61c80403ca2bea7e0bcef132f0b054a1f -size 55572 +oid sha256:4dc2020629ca9d664d34cfe1d47aabb16947200c6f73818ab3415a789b5dfeb5 +size 1104 diff --git a/assets/voxygen/voxel/figure/accessory/orc/warpaint-female-0.vox b/assets/voxygen/voxel/figure/accessory/orc/warpaint-female-0.vox index bec886a3da..5199d3841b 100644 --- a/assets/voxygen/voxel/figure/accessory/orc/warpaint-female-0.vox +++ b/assets/voxygen/voxel/figure/accessory/orc/warpaint-female-0.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:17cfb5e4f716fdb7c9c7617247a38f24c7ee72348c5ed2016e51dbec594a674b -size 57958 +oid sha256:635b1dfa3868c780910d235aa467ce821a78fd0c04e116089cd33ba86ad80e65 +size 1164 diff --git a/assets/voxygen/voxel/figure/accessory/orc/warpaint-female-1.vox b/assets/voxygen/voxel/figure/accessory/orc/warpaint-female-1.vox index b6594f60c9..2cfe197670 100644 --- a/assets/voxygen/voxel/figure/accessory/orc/warpaint-female-1.vox +++ b/assets/voxygen/voxel/figure/accessory/orc/warpaint-female-1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b589c82819788d4613403fcde382adb3789e6d55e19ca3fb497f39d438a02acd -size 57914 +oid sha256:eed5f71dde24d04a5584c3d8103515a897c2bbf6fdfcfd00646d99337a2524f2 +size 1120 diff --git a/assets/voxygen/voxel/figure/accessory/orc/warpaint-male-0.vox b/assets/voxygen/voxel/figure/accessory/orc/warpaint-male-0.vox index 4b1f2ff17d..e21855128a 100644 --- a/assets/voxygen/voxel/figure/accessory/orc/warpaint-male-0.vox +++ b/assets/voxygen/voxel/figure/accessory/orc/warpaint-male-0.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cea7b3d71c51f4c59695cedca70f1bfcfa549a76ef04586bcac3ffa06312cdeb -size 55805 +oid sha256:aaac3c35679745cb25a918857779379df8d800041f2803f72fbef08b65a584b5 +size 1264 diff --git a/assets/voxygen/voxel/figure/beard/danari/danari-0.vox b/assets/voxygen/voxel/figure/beard/danari/danari-0.vox index 70e0bcb070..349356722f 100644 --- a/assets/voxygen/voxel/figure/beard/danari/danari-0.vox +++ b/assets/voxygen/voxel/figure/beard/danari/danari-0.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5a197d1325db805082defdf64711753767bb612360197461c8dad00f7de359d8 -size 55808 +oid sha256:89121d3f2158974a75bc8f8264272bfa7756f7f0b1cc3805cd62c349a4a0110f +size 1304 diff --git a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-0.vox b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-0.vox index b9b6d6352b..06e48e1dd7 100644 --- a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-0.vox +++ b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-0.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:70054f395189378830ef2420a3746a0041fc0e0a95e3cf487e4bb4563648f048 -size 55635 +oid sha256:5a78f9c73a5de56e1eab202b448737cd9ac1b6450a23285d83b59d0065395340 +size 1152 diff --git a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-1.vox b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-1.vox index 3999c7750c..1077c4311f 100644 --- a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-1.vox +++ b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:587913a3dfbf311019f1503765483726fa0707be2f81997c197a89fd00516453 -size 55880 +oid sha256:1b9f2e9facd32e4270d604b6fbd060dde7f94c53ef481a28a6817400d1888fc4 +size 1384 diff --git a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-10.vox b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-10.vox index db9fbd9fd2..fee7e6aeb7 100644 --- a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-10.vox +++ b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-10.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:79c91c5fc166c761381466b532700ba554dcbbf98c0e0920cd1e89a079832068 -size 55700 +oid sha256:58e8369fcf98d22b1008eaf53ca9151041bfbd5d1a9ed9782cb3db769d1464cd +size 1216 diff --git a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-11.vox b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-11.vox index 8397734269..d7e7cba495 100644 --- a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-11.vox +++ b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-11.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:abf492023b2d38100700db8c503ca56cd2e59425976983a137c3eb3a2984ad1b -size 55608 +oid sha256:c9e5060691cd8aa7cf6fcb7f15ea4e349eb63b9f2c8969ecf3a1e84fc1988e8b +size 1112 diff --git a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-12.vox b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-12.vox index bd34efb2fb..b1acab0aae 100644 --- a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-12.vox +++ b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-12.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2d4e1c97b446e0254f8a2ebdf540e41ea78c3f8c879ab741f41cf5c4c2d53c4e -size 55743 +oid sha256:ea2e1e778a36f554b8cad25919baaee70685641079b479b28fe122dd86419f7e +size 1248 diff --git a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-13.vox b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-13.vox index 2d9ec7a83c..81974f0b84 100644 --- a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-13.vox +++ b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-13.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b8319d01bcd0205ff5f8d2c46568dbfa254b4ff7235a33db6fcc2536165a8ac6 -size 55767 +oid sha256:5ed9973b3f2d2b7e659aaa49d474df061571a5f7986c83de0a671d8946ba0c95 +size 1272 diff --git a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-14.vox b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-14.vox index 6c19a9756d..5658855d85 100644 --- a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-14.vox +++ b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-14.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:85a8b17cb040cbc8a4f2fcf4d62708fe58eb9bc44a6601330ed3fe651d4fde30 -size 56031 +oid sha256:6bb5ced957dd009b77338c6c9a377c54e74bc80829f987778ea358d1ad298148 +size 1536 diff --git a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-15.vox b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-15.vox index 08632e12fc..f0e147b81b 100644 --- a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-15.vox +++ b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-15.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c5690077afe2310d5d5a2d3213d67591873d8ba2aa568bcd4297d197bebb5f69 -size 56255 +oid sha256:d7c213d67cd905119d6a24d58be1f629ddd5a784a7bd741c5de9b5c01bdd26e2 +size 1760 diff --git a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-16.vox b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-16.vox index bed8c99481..88a55ebdd2 100644 --- a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-16.vox +++ b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-16.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e55728feb14ef92691f78eb22e1acb28d962701d9b4a107c1f2755374c86bd74 -size 56319 +oid sha256:9094a2b9035efa5b8253f64df9b30b79cb1a485bfc247dc9119915750d488c8e +size 1824 diff --git a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-17.vox b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-17.vox index d42a737df4..4d35630ce4 100644 --- a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-17.vox +++ b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-17.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5dd1ff13263637a199099ebd073a7b288830451799aeac3f6f36c057a8308472 -size 56015 +oid sha256:d2d41a2736dda2f7fbcfc11ff2937b8f908bb6e33b45d18a8360f47296386684 +size 1520 diff --git a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-18.vox b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-18.vox index 3722310430..5ece4b7bdb 100644 --- a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-18.vox +++ b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-18.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bed743c48f4b5364218606b1542fddfa4611c021678e24942cca7adb9c85c248 -size 44461 +oid sha256:fae60c3dbcda4404ef89e6fbc09e12c80c85c968ccba1f29e91f14cf4e0665e6 +size 1288 diff --git a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-19.vox b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-19.vox index cc441a1f3c..f51fa6ee5b 100644 --- a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-19.vox +++ b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-19.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ffbb87ed5aa901712594644e2a1d01c6957a9377860ac1f7686b143850240bed -size 56135 +oid sha256:ab857cffd5f157ca5e443af2877c2fabd3ee2f95b1df870f061a8e788bb04ee9 +size 1640 diff --git a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-2.vox b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-2.vox index 8388512d32..d2c6af0edc 100644 --- a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-2.vox +++ b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6c458fd3cd37a950ed2a0aba20f2574057f0b214b80a3f29787e4f885c50ac6b -size 55592 +oid sha256:f03e0d1762b49e99d350c25420822b5c5916888bc3d0783e7f38b610002acbd4 +size 1108 diff --git a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-20.vox b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-20.vox index 35143ca15e..6ab4ce661f 100644 --- a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-20.vox +++ b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-20.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8ca166da00ac7b9f22facfee633b72d5e329079ed88f1892bbd235f25993b842 -size 55823 +oid sha256:ef7b0909e5d665b64d2e8ee28c10b93ad8a0e3bb066df5a1772bfc5dd9919336 +size 1328 diff --git a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-3.vox b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-3.vox index b4557243fa..dbc5f5d671 100644 --- a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-3.vox +++ b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:22f78432ec6de234a6ea97bf23e2d8b8b92844dcf9c729b61fa6d6974d49f11b -size 55744 +oid sha256:a31013e7a8f584cfff875e730a66d525e81b777ef0a1d32e8e1d461b8913d785 +size 1248 diff --git a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-4.vox b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-4.vox index 2fa73c86d4..3d6f017615 100644 --- a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-4.vox +++ b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-4.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c5f7134d5a959664bc3c4a668f51f29415f8f90d4a4a8406fa1055087dc2fda9 -size 55660 +oid sha256:1a997e3ce8d0e4f0b98ad12c036fcc8af05a362aef46e618bf6fd5942b406b86 +size 1164 diff --git a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-5.vox b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-5.vox index 9cbdc737d2..05532071cb 100644 --- a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-5.vox +++ b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-5.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:97e5fe9cc441d008884432a939a28c51343a0896267444f6b81f3cb91f95c7f0 -size 56092 +oid sha256:79fe47c2e1a0827d3fa5ee43c2f20f56d483d2440a350ff6bac397953af54b95 +size 1608 diff --git a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-6.vox b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-6.vox index 45a3d7c420..d63c068df7 100644 --- a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-6.vox +++ b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-6.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5d7dbb993505870c5760a1fe076f0f8c5fdd1b782380d91afd2216f133ac16ef -size 56172 +oid sha256:de5c2b852f9310f62f94aafab0bfd711e129352ae5c9617ed3cb539dcc453c6e +size 1688 diff --git a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-7.vox b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-7.vox index 5a3206bdd1..d925d23530 100644 --- a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-7.vox +++ b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-7.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4656f1e1ac68a1ff25779f9c5ddf6dabfb6796b0f80fa7f506389e0f3213aaa3 -size 55636 +oid sha256:9b97cb3ddb387ee38614b1b42c90b7dca0c0c36bd4351bc39fa7907abf915578 +size 1152 diff --git a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-8.vox b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-8.vox index 84898f202c..d419959b79 100644 --- a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-8.vox +++ b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-8.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:168445edd3a04b4c31af94c50c3bafc8f4b18bb800609a01a1d787957798ba67 -size 55656 +oid sha256:28b6ebde1c0dabe2d40ee75b5fb9d5a601331efbfa135dd3f33d139cdb8b522c +size 1172 diff --git a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-9.vox b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-9.vox index 8789c39e08..37e30b75a6 100644 --- a/assets/voxygen/voxel/figure/beard/dwarf/dwarf-9.vox +++ b/assets/voxygen/voxel/figure/beard/dwarf/dwarf-9.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:329413b38efdd883ca78100336d06cfef8fe247934262ab7a8c10d2bb6831f7a -size 55644 +oid sha256:1224a5567a1350e8f9c7320e7d6764ce6e7a895dc3cb1b2364c85e66e6d035ec +size 1160 diff --git a/assets/voxygen/voxel/figure/beard/human/human-0.vox b/assets/voxygen/voxel/figure/beard/human/human-0.vox index 85e6a409fc..31db774e58 100644 --- a/assets/voxygen/voxel/figure/beard/human/human-0.vox +++ b/assets/voxygen/voxel/figure/beard/human/human-0.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d0c5efe8f1645d8104ab07e6412440614febc9b8ca95fdfdc0f0e8ffaee4f331 -size 55723 +oid sha256:9e0a3b287e0248ac91080ebf5de54918571c8cfb1b81fc9db2bd861c15c10e8d +size 1240 diff --git a/assets/voxygen/voxel/figure/beard/human/human-1.vox b/assets/voxygen/voxel/figure/beard/human/human-1.vox index 8c77eb6027..53e8761f90 100644 --- a/assets/voxygen/voxel/figure/beard/human/human-1.vox +++ b/assets/voxygen/voxel/figure/beard/human/human-1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3f2b9fa02e94502dab0d1969cb80c8d1b8487ad4e2f2856c3157f4dd916e14ad -size 46644 +oid sha256:a0068f185e10373f7ea1d5a859c225f76df6b0286d2b26227f030004f6838818 +size 1136 diff --git a/assets/voxygen/voxel/figure/beard/human/human-2.vox b/assets/voxygen/voxel/figure/beard/human/human-2.vox index 9afb46e0c6..5ece4b7bdb 100644 --- a/assets/voxygen/voxel/figure/beard/human/human-2.vox +++ b/assets/voxygen/voxel/figure/beard/human/human-2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c4be53d43ff9edae15b8ee553224d8829ba07423ae59a54d0ef62ddff8b87838 -size 58183 +oid sha256:fae60c3dbcda4404ef89e6fbc09e12c80c85c968ccba1f29e91f14cf4e0665e6 +size 1288 diff --git a/assets/voxygen/voxel/figure/beard/orc/2.vox b/assets/voxygen/voxel/figure/beard/orc/2.vox index 1159d73666..4c9b6affcc 100644 --- a/assets/voxygen/voxel/figure/beard/orc/2.vox +++ b/assets/voxygen/voxel/figure/beard/orc/2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:93ac4052c7f43806434a839ff560d8d3adbfc2415c69689a810848172a56665a -size 58452 +oid sha256:bf134a351e647345d55255633c2837e8ea6628496416ded1ada46cfb62d29138 +size 1540 diff --git a/assets/voxygen/voxel/figure/body/chest.vox b/assets/voxygen/voxel/figure/body/chest.vox index 5b603c33d2..304dce6dbd 100644 --- a/assets/voxygen/voxel/figure/body/chest.vox +++ b/assets/voxygen/voxel/figure/body/chest.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:88d68e0ece1a8029b4c437083ed31f404fb94ea39483acef9877dfdc6ed40b57 -size 55635 +oid sha256:0028bcc1fc7a78208467639c767cb999e7b1248c4c5619595af6453a06aa30ab +size 1152 diff --git a/assets/voxygen/voxel/figure/body/chest_female.vox b/assets/voxygen/voxel/figure/body/chest_female.vox index bbfbe470cb..b6219ec1cf 100644 --- a/assets/voxygen/voxel/figure/body/chest_female.vox +++ b/assets/voxygen/voxel/figure/body/chest_female.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:07d909f26e5e0eee95ccc6b2ddef03442fbcf70866daeeb91dedab6a69dd77f7 -size 45315 +oid sha256:c3dffb171111c349ce1873006e58935873357fcdc9cf30d69a87e195468457e1 +size 2208 diff --git a/assets/voxygen/voxel/figure/body/chest_male.vox b/assets/voxygen/voxel/figure/body/chest_male.vox index 2826a626a9..70d534e6ce 100644 --- a/assets/voxygen/voxel/figure/body/chest_male.vox +++ b/assets/voxygen/voxel/figure/body/chest_male.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a6ac0a625ef1f542e3614920e931697fe6f41503c80fcb2e6531d478161d8b61 -size 45323 +oid sha256:ee2210f0a3cbc05e3a8dc08d0bd2c3f957aa35c4835807ad787b9db0897540db +size 2216 diff --git a/assets/voxygen/voxel/figure/body/foot.vox b/assets/voxygen/voxel/figure/body/foot.vox index adb06abda1..0cbf680f10 100644 --- a/assets/voxygen/voxel/figure/body/foot.vox +++ b/assets/voxygen/voxel/figure/body/foot.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0de181956a0c6bf50cfb4eb4844a3509eb01f4adf1ad108a853a52e6e048a699 -size 55899 +oid sha256:21287486eb30ba437fb9f1cffa16a93e22d98ff35c6dab5e6f665fe34536020a +size 1416 diff --git a/assets/voxygen/voxel/figure/body/hand.vox b/assets/voxygen/voxel/figure/body/hand.vox index 053ab85c09..2fc57ec15f 100644 --- a/assets/voxygen/voxel/figure/body/hand.vox +++ b/assets/voxygen/voxel/figure/body/hand.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f828168f8ac886ca1b1947f20ead4b582dcf0b3f1f885629ac71819f6c50ac71 -size 55755 +oid sha256:5dcbebd44d164284b79ab97a3d4f0bc4a3a7088094f4c85b10955a23fda5d344 +size 1272 diff --git a/assets/voxygen/voxel/figure/body/pants_male.vox b/assets/voxygen/voxel/figure/body/pants_male.vox index a76a298be2..900c9e0569 100644 --- a/assets/voxygen/voxel/figure/body/pants_male.vox +++ b/assets/voxygen/voxel/figure/body/pants_male.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2486a04a6facfb002c0a504a1b6c138190df93e0b3a3a62da267c8c3f43dade7 -size 44831 +oid sha256:f46270fc3f1d46c32ddce368434debaca94ec2f94dc325ecc4df675fd7b82d5f +size 1724 diff --git a/assets/voxygen/voxel/figure/eyes/danari/female-0.vox b/assets/voxygen/voxel/figure/eyes/danari/female-0.vox index 1e07d63b51..36f9d053f4 100644 --- a/assets/voxygen/voxel/figure/eyes/danari/female-0.vox +++ b/assets/voxygen/voxel/figure/eyes/danari/female-0.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:af6830d432bf365bd571736a88495a5e714f2bb238307ad30d5b7ff1da3f3110 -size 44259 +oid sha256:320e5b32b7d383ad05a51b2a026c1235aedd54fcb87f3e2e8b2fa662102d6fa5 +size 1152 diff --git a/assets/voxygen/voxel/figure/eyes/danari/male-0.vox b/assets/voxygen/voxel/figure/eyes/danari/male-0.vox index 4cb9737f76..5f32d0a872 100644 --- a/assets/voxygen/voxel/figure/eyes/danari/male-0.vox +++ b/assets/voxygen/voxel/figure/eyes/danari/male-0.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3243ba5a786197eaf4fcbab2c511decf3c7d5a7c95a1c4f204e199cea1cd08c0 -size 55661 +oid sha256:ff1ac798ca93a041195e3efee2c1166670a3f13c2fc907a432f1c7b44c381c4c +size 1176 diff --git a/assets/voxygen/voxel/figure/eyes/danari/male-1.vox b/assets/voxygen/voxel/figure/eyes/danari/male-1.vox index c56fb21d85..e89a0d081c 100644 --- a/assets/voxygen/voxel/figure/eyes/danari/male-1.vox +++ b/assets/voxygen/voxel/figure/eyes/danari/male-1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:59d0f3818322a62cdfb61b8eb9528ff71c3eed832419b769492109c419fb02c0 -size 55629 +oid sha256:7cd5475e11718417f1b877d143b2cc75b43fb1f368581dd6f37b167fbdbb0aa5 +size 1144 diff --git a/assets/voxygen/voxel/figure/eyes/dwarf/male-0.vox b/assets/voxygen/voxel/figure/eyes/dwarf/male-0.vox index 4cb9737f76..5f32d0a872 100644 --- a/assets/voxygen/voxel/figure/eyes/dwarf/male-0.vox +++ b/assets/voxygen/voxel/figure/eyes/dwarf/male-0.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3243ba5a786197eaf4fcbab2c511decf3c7d5a7c95a1c4f204e199cea1cd08c0 -size 55661 +oid sha256:ff1ac798ca93a041195e3efee2c1166670a3f13c2fc907a432f1c7b44c381c4c +size 1176 diff --git a/assets/voxygen/voxel/figure/eyes/dwarf/male-1.vox b/assets/voxygen/voxel/figure/eyes/dwarf/male-1.vox index 133c89b750..8508f20ec7 100644 --- a/assets/voxygen/voxel/figure/eyes/dwarf/male-1.vox +++ b/assets/voxygen/voxel/figure/eyes/dwarf/male-1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:61048b0758d68f323a74b099b2a5e9b616f51deae2bbcb4eea3bbd22ff2ed205 -size 44243 +oid sha256:6f43066f4edb931616cc537cc555591ae01da86fd4bcc43977d68733be717713 +size 1136 diff --git a/assets/voxygen/voxel/figure/eyes/elf/female-0.vox b/assets/voxygen/voxel/figure/eyes/elf/female-0.vox index d0a33723b9..3117f03062 100644 --- a/assets/voxygen/voxel/figure/eyes/elf/female-0.vox +++ b/assets/voxygen/voxel/figure/eyes/elf/female-0.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1f93c0590c603f9b580dc970159908fac342b81752164d642ad62e8eaf360a7c -size 55635 +oid sha256:8cf208a53b7aa72af935be0155dbbea10225e543434a23dffd0f7afbe649ae99 +size 1152 diff --git a/assets/voxygen/voxel/figure/eyes/elf/male-0.vox b/assets/voxygen/voxel/figure/eyes/elf/male-0.vox index c56fb21d85..e89a0d081c 100644 --- a/assets/voxygen/voxel/figure/eyes/elf/male-0.vox +++ b/assets/voxygen/voxel/figure/eyes/elf/male-0.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:59d0f3818322a62cdfb61b8eb9528ff71c3eed832419b769492109c419fb02c0 -size 55629 +oid sha256:7cd5475e11718417f1b877d143b2cc75b43fb1f368581dd6f37b167fbdbb0aa5 +size 1144 diff --git a/assets/voxygen/voxel/figure/eyes/human/female-0.vox b/assets/voxygen/voxel/figure/eyes/human/female-0.vox index 92d9c14246..1cbb6c6220 100644 --- a/assets/voxygen/voxel/figure/eyes/human/female-0.vox +++ b/assets/voxygen/voxel/figure/eyes/human/female-0.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:21c5a4f82b33258a8d3af1c4b518e0a37cc088bfb1bbe2e4652b4a07aa323c74 -size 44259 +oid sha256:870cb62cf318d20b1ebab5afe572df817f07966be45bf78e42d43f231d8dc188 +size 1152 diff --git a/assets/voxygen/voxel/figure/eyes/human/male-0.vox b/assets/voxygen/voxel/figure/eyes/human/male-0.vox index c56fb21d85..e89a0d081c 100644 --- a/assets/voxygen/voxel/figure/eyes/human/male-0.vox +++ b/assets/voxygen/voxel/figure/eyes/human/male-0.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:59d0f3818322a62cdfb61b8eb9528ff71c3eed832419b769492109c419fb02c0 -size 55629 +oid sha256:7cd5475e11718417f1b877d143b2cc75b43fb1f368581dd6f37b167fbdbb0aa5 +size 1144 diff --git a/assets/voxygen/voxel/figure/eyes/human/male-1.vox b/assets/voxygen/voxel/figure/eyes/human/male-1.vox index 4cb9737f76..5f32d0a872 100644 --- a/assets/voxygen/voxel/figure/eyes/human/male-1.vox +++ b/assets/voxygen/voxel/figure/eyes/human/male-1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3243ba5a786197eaf4fcbab2c511decf3c7d5a7c95a1c4f204e199cea1cd08c0 -size 55661 +oid sha256:ff1ac798ca93a041195e3efee2c1166670a3f13c2fc907a432f1c7b44c381c4c +size 1176 diff --git a/assets/voxygen/voxel/figure/eyes/orc/female-0.vox b/assets/voxygen/voxel/figure/eyes/orc/female-0.vox index bc4322cab0..bfb89a681c 100644 --- a/assets/voxygen/voxel/figure/eyes/orc/female-0.vox +++ b/assets/voxygen/voxel/figure/eyes/orc/female-0.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9ac10923451391aa0066d9bcaed74a8ebb75d567a6b9647c8f7b72c780647a2e -size 55635 +oid sha256:e31d98bff4e3d183a605d312a444048a51021f0bec6bde94b44bf355e96a0d16 +size 1152 diff --git a/assets/voxygen/voxel/figure/eyes/orc/male-0.vox b/assets/voxygen/voxel/figure/eyes/orc/male-0.vox index 29b2ca100e..39b4cec076 100644 --- a/assets/voxygen/voxel/figure/eyes/orc/male-0.vox +++ b/assets/voxygen/voxel/figure/eyes/orc/male-0.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f12084720d46555fc7da25b97ccb965c6fdd2c9b714f8fc054b15c5b21580713 -size 55595 +oid sha256:ce9a5dcc298171c81c292331a85e4e46e859c9763915583343aad711e12f8fb1 +size 1112 diff --git a/assets/voxygen/voxel/figure/eyes/undead/female-0.vox b/assets/voxygen/voxel/figure/eyes/undead/female-0.vox index e7c919a0a3..ed58911c67 100644 --- a/assets/voxygen/voxel/figure/eyes/undead/female-0.vox +++ b/assets/voxygen/voxel/figure/eyes/undead/female-0.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:88a1168befcbfdc2873511d8cd9bbd565151670f59310cf112da3a897ff3014d -size 55595 +oid sha256:10289af4d395cd4a55183b3398295c1b468c996a7aad05474ed3aaf39161f1ef +size 1112 diff --git a/assets/voxygen/voxel/figure/eyes/undead/male-0.vox b/assets/voxygen/voxel/figure/eyes/undead/male-0.vox index a9bbe373ef..a42ef18611 100644 --- a/assets/voxygen/voxel/figure/eyes/undead/male-0.vox +++ b/assets/voxygen/voxel/figure/eyes/undead/male-0.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8ae79b438cafe7a78bfef431f286901ddbbdf6c4aed999b86b7543e73bf0ad75 -size 55595 +oid sha256:c1a84d7a62081ecf7bc5e3eb35f5537263889f3974b2261e4b7c11a682238c95 +size 1112 diff --git a/assets/voxygen/voxel/figure/hair/danari/female-0.vox b/assets/voxygen/voxel/figure/hair/danari/female-0.vox index 9e0363f1b0..c1758ba726 100644 --- a/assets/voxygen/voxel/figure/hair/danari/female-0.vox +++ b/assets/voxygen/voxel/figure/hair/danari/female-0.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7de1f0cf0f94dc577b22f41a284f37c31d8674221e82a67698a8c3f46a6ab417 -size 45525 +oid sha256:d70d8bbc0ed7ebcaffc14154d6542e77be28897366da42374eed19f67fe8e194 +size 2364 diff --git a/assets/voxygen/voxel/figure/hair/danari/female-1.vox b/assets/voxygen/voxel/figure/hair/danari/female-1.vox index 3019932143..9ce7a1d23d 100644 --- a/assets/voxygen/voxel/figure/hair/danari/female-1.vox +++ b/assets/voxygen/voxel/figure/hair/danari/female-1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:73a7623f6950249cffc3f029ccebb3f209fa15f6d57080b920ecb16f87fe9985 -size 59115 +oid sha256:3acd240b2dc5f68b4ace9a14b42bc7bb7d91e9f3f67ae409785ef0639aa0360e +size 2328 diff --git a/assets/voxygen/voxel/figure/hair/danari/male-0.vox b/assets/voxygen/voxel/figure/hair/danari/male-0.vox index 1013659af3..ca50e3c597 100644 --- a/assets/voxygen/voxel/figure/hair/danari/male-0.vox +++ b/assets/voxygen/voxel/figure/hair/danari/male-0.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a4f67ae300e73a5fea42a9fc2432e80ce4130fa4b23fe6053b04f7e5ca6952b9 -size 56299 +oid sha256:39b3c62cff1db93bc3f07ce166d9a9ccd0e7370de9a2ed75be5bcc3fd536d218 +size 1816 diff --git a/assets/voxygen/voxel/figure/hair/danari/male-1.vox b/assets/voxygen/voxel/figure/hair/danari/male-1.vox index b4f1f63106..36cef568f0 100644 --- a/assets/voxygen/voxel/figure/hair/danari/male-1.vox +++ b/assets/voxygen/voxel/figure/hair/danari/male-1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a34a8aec3b192c2a7228805fb4825b5e72b67689951bbc0ca23f5a351e522bea -size 58663 +oid sha256:c329e3ca026ff35f2574fac8d48af4f3b7f65951a491399de1001a527f471a1c +size 1792 diff --git a/assets/voxygen/voxel/figure/hair/dwarf/bald.vox b/assets/voxygen/voxel/figure/hair/dwarf/bald.vox index 5217c5760d..52519e0411 100644 --- a/assets/voxygen/voxel/figure/hair/dwarf/bald.vox +++ b/assets/voxygen/voxel/figure/hair/dwarf/bald.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f8675bcccc30b5c452a080507f3cccd59cd0279db43e3388cf21bc6fa2c15519 -size 55579 +oid sha256:85e829c141db6ee7c7d7a521c8ef26c45b7d97cc732e1230bb124e74204e459c +size 1096 diff --git a/assets/voxygen/voxel/figure/hair/dwarf/female-0.vox b/assets/voxygen/voxel/figure/hair/dwarf/female-0.vox index 6189315569..8e9df08c4f 100644 --- a/assets/voxygen/voxel/figure/hair/dwarf/female-0.vox +++ b/assets/voxygen/voxel/figure/hair/dwarf/female-0.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e97833f7e1e5420dd3193b15738eaae01cc42ee5ea0a10c25f70d0d631cfe234 -size 59195 +oid sha256:ddab65fcb39e2334262844464777012623ecf9dfc310b82a84e3c680460fa671 +size 2560 diff --git a/assets/voxygen/voxel/figure/hair/dwarf/female-1.vox b/assets/voxygen/voxel/figure/hair/dwarf/female-1.vox index d042496f30..854ddbe942 100644 --- a/assets/voxygen/voxel/figure/hair/dwarf/female-1.vox +++ b/assets/voxygen/voxel/figure/hair/dwarf/female-1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a23aa08a25fcd292a16eb896f9b8826fe6caefbc4642a2cde3aa89db581d2d04 -size 59323 +oid sha256:a70fb875fbc7f6beddbedf9b3d208c53d495ee6a9e6f78c32ecc2e62e54f4c09 +size 2688 diff --git a/assets/voxygen/voxel/figure/hair/dwarf/female-2.vox b/assets/voxygen/voxel/figure/hair/dwarf/female-2.vox index 78b4830f99..76afb1902f 100644 --- a/assets/voxygen/voxel/figure/hair/dwarf/female-2.vox +++ b/assets/voxygen/voxel/figure/hair/dwarf/female-2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8491baad5fdb761e2fe6bbe9f87de4d1c18c5d38be8a3518621cca928efa0265 -size 59131 +oid sha256:abaeca010745185c37dc46892814e2656ec4bc5a8901db3d505b94e7fdb3e8a6 +size 2496 diff --git a/assets/voxygen/voxel/figure/hair/dwarf/female-3.vox b/assets/voxygen/voxel/figure/hair/dwarf/female-3.vox index 37e802802e..3ea2051bd5 100644 --- a/assets/voxygen/voxel/figure/hair/dwarf/female-3.vox +++ b/assets/voxygen/voxel/figure/hair/dwarf/female-3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:126fcd7f2a62d7629e33f63eb309ae27f92e712146b09e5ac3e1345a170958e6 -size 59559 +oid sha256:57511c54c2450856f0f2eea91b4cf4933ebfc50aa4ea91d7a4f9153571ea814d +size 2924 diff --git a/assets/voxygen/voxel/figure/hair/dwarf/male-0.vox b/assets/voxygen/voxel/figure/hair/dwarf/male-0.vox index e273c10037..3c4fb074bf 100644 --- a/assets/voxygen/voxel/figure/hair/dwarf/male-0.vox +++ b/assets/voxygen/voxel/figure/hair/dwarf/male-0.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3e59a672ee68537160653a4bc36815e508c56e88bc183d5ddae82dd8cf1a5857 -size 57005 +oid sha256:2eddaa5ffb8b5f0abfd9769147b7168fc35157666ad98bd874d64333969b161d +size 2520 diff --git a/assets/voxygen/voxel/figure/hair/dwarf/male-1.vox b/assets/voxygen/voxel/figure/hair/dwarf/male-1.vox index f321c9e0b7..ed4196bb8b 100644 --- a/assets/voxygen/voxel/figure/hair/dwarf/male-1.vox +++ b/assets/voxygen/voxel/figure/hair/dwarf/male-1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bf11b892a7fe1a2d315c02c75f7eaec4e46b46b592b1769943e4f37066e4ccae -size 56283 +oid sha256:c60ed073ac070de5faf8e83b8ec41160cada993e8747f9192a03d8f345b4b5d3 +size 1800 diff --git a/assets/voxygen/voxel/figure/hair/elf/female-0.vox b/assets/voxygen/voxel/figure/hair/elf/female-0.vox index 75989991d2..cd30bb6c38 100644 --- a/assets/voxygen/voxel/figure/hair/elf/female-0.vox +++ b/assets/voxygen/voxel/figure/hair/elf/female-0.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c43639107b475f7918687b478e339ed3308ec44d07ed02ce4932a01ef0fd240f -size 57436 +oid sha256:affe57e1e04764bf002ff027719799dad1b8f3df1629f3f3bfec13b9e430fa33 +size 2952 diff --git a/assets/voxygen/voxel/figure/hair/elf/female-1.vox b/assets/voxygen/voxel/figure/hair/elf/female-1.vox index 16f68386b5..4259d071cd 100644 --- a/assets/voxygen/voxel/figure/hair/elf/female-1.vox +++ b/assets/voxygen/voxel/figure/hair/elf/female-1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d010560a49eadab4f0e8a76a6e07fbb6d385d7e771b4665fde40161f28425163 -size 56860 +oid sha256:2f6fcbe925ecd7a8249cbe81c7b394a32e14f2aeb031e69bae522f0bc7dc2954 +size 2376 diff --git a/assets/voxygen/voxel/figure/hair/elf/female-10.vox b/assets/voxygen/voxel/figure/hair/elf/female-10.vox index 6f562c6893..8c2670d908 100644 --- a/assets/voxygen/voxel/figure/hair/elf/female-10.vox +++ b/assets/voxygen/voxel/figure/hair/elf/female-10.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9ffa6ebdea30df3b996af356834a48aacd6e1ad9dfcfb3cae0fb6a4d4c8183b3 -size 58036 +oid sha256:d83728287cc2caa9cfa02cc0d6295879a08c2b6a90e1a8c922d636aa289fcd10 +size 3552 diff --git a/assets/voxygen/voxel/figure/hair/elf/female-11.vox b/assets/voxygen/voxel/figure/hair/elf/female-11.vox index 401ca43eb1..db849748bb 100644 --- a/assets/voxygen/voxel/figure/hair/elf/female-11.vox +++ b/assets/voxygen/voxel/figure/hair/elf/female-11.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:986449085be85193f06ccbb42584d92bc6143169f5c63aacc96b4340d85fafd5 -size 56504 +oid sha256:f1bdd7fc7cf521b96758442e1772a651726a4285537326e146b454bea602bdc7 +size 2020 diff --git a/assets/voxygen/voxel/figure/hair/elf/female-12.vox b/assets/voxygen/voxel/figure/hair/elf/female-12.vox index 15d2f5a4aa..d64aac0dc6 100644 --- a/assets/voxygen/voxel/figure/hair/elf/female-12.vox +++ b/assets/voxygen/voxel/figure/hair/elf/female-12.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8ce7fb066bcc8374fa73ef6535df87ea8ee1853621406c4016511bb70d9eaf10 -size 57484 +oid sha256:8be51f26eea7f5d9742d669bf0c0799f3619c21456e177bb1af45b55b76f16fc +size 3000 diff --git a/assets/voxygen/voxel/figure/hair/elf/female-13.vox b/assets/voxygen/voxel/figure/hair/elf/female-13.vox index e9d02a1b8a..d744df025f 100644 --- a/assets/voxygen/voxel/figure/hair/elf/female-13.vox +++ b/assets/voxygen/voxel/figure/hair/elf/female-13.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a00ca5d4566a7595dd2212d5f1ac1219aae16078e8fcb05527a5d8098c76d24b -size 57128 +oid sha256:1c266fa848e7f1690c6fc8e0e8004ea8f8db18c43cc4351aec526b4544c56273 +size 2644 diff --git a/assets/voxygen/voxel/figure/hair/elf/female-14.vox b/assets/voxygen/voxel/figure/hair/elf/female-14.vox index 5c8cfbf5d0..f3d513f8e1 100644 --- a/assets/voxygen/voxel/figure/hair/elf/female-14.vox +++ b/assets/voxygen/voxel/figure/hair/elf/female-14.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7ebafbf4ee56f80da3969fa636d6c5535fc3a25c0cfcb2507f21892de9a8d022 -size 56431 +oid sha256:35d5cf15aa12c8f107ce2ce66f7fba062ce38ed095d34940b4044c2a99b11c5a +size 1948 diff --git a/assets/voxygen/voxel/figure/hair/elf/female-15.vox b/assets/voxygen/voxel/figure/hair/elf/female-15.vox index 8756c72a47..2ac6422691 100644 --- a/assets/voxygen/voxel/figure/hair/elf/female-15.vox +++ b/assets/voxygen/voxel/figure/hair/elf/female-15.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b0dab20f6850994566a49f7713c782970898c8ebdb90653338f981e6e0e4df61 -size 45491 +oid sha256:8ce506e01c04f50a67199f914dff5b2cbd9340c24eb81553e8672747809f6331 +size 2384 diff --git a/assets/voxygen/voxel/figure/hair/elf/female-16.vox b/assets/voxygen/voxel/figure/hair/elf/female-16.vox index 1bf35a53f9..76de90d5d8 100644 --- a/assets/voxygen/voxel/figure/hair/elf/female-16.vox +++ b/assets/voxygen/voxel/figure/hair/elf/female-16.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:12054d5bb41092833e3060b17b5f781ff71530607ea1f05a3da5dcffa203bca6 -size 56839 +oid sha256:da6c1d63dd85c570c104b8573b23aedbe7d4d44d7e14b7ab05e1a5c1ff8ad7d8 +size 2356 diff --git a/assets/voxygen/voxel/figure/hair/elf/female-17.vox b/assets/voxygen/voxel/figure/hair/elf/female-17.vox index 5a95f00c2e..dd1360f8e6 100644 --- a/assets/voxygen/voxel/figure/hair/elf/female-17.vox +++ b/assets/voxygen/voxel/figure/hair/elf/female-17.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e0b4e122316f0c424b45d488c4f282557a644e94da41b2556306f670a0d03f17 -size 57423 +oid sha256:3b557e1912c92e2163fd060c005f0fd6167a3ca41c616f13af14e36680b58336 +size 2940 diff --git a/assets/voxygen/voxel/figure/hair/elf/female-18.vox b/assets/voxygen/voxel/figure/hair/elf/female-18.vox index 6aff62eaaa..844d2454fa 100644 --- a/assets/voxygen/voxel/figure/hair/elf/female-18.vox +++ b/assets/voxygen/voxel/figure/hair/elf/female-18.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f33c01e85f4d6ce8dfe10436c7b3772f97f4a51b392fc53bd19868b4e122b881 -size 57235 +oid sha256:7e85e4cfd2cd14dde11bd9d13acb38366036b585a4ba85efaebb3d61a00dedde +size 2752 diff --git a/assets/voxygen/voxel/figure/hair/elf/female-19.vox b/assets/voxygen/voxel/figure/hair/elf/female-19.vox index b6696b32e9..c055b9f51b 100644 --- a/assets/voxygen/voxel/figure/hair/elf/female-19.vox +++ b/assets/voxygen/voxel/figure/hair/elf/female-19.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0bf37d298cd79c6490428b827ba275b06e87024e6a2b863b8a1f96ebda3f3c82 -size 57183 +oid sha256:b55cd9e8ac02fdf51b2b92d45545fad23af631ab735655e3572cc4f2b6835dab +size 2700 diff --git a/assets/voxygen/voxel/figure/hair/elf/female-2.vox b/assets/voxygen/voxel/figure/hair/elf/female-2.vox index f0860a9c68..0f8d61b1be 100644 --- a/assets/voxygen/voxel/figure/hair/elf/female-2.vox +++ b/assets/voxygen/voxel/figure/hair/elf/female-2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d6139dca50f10f22ae5b8b77b67986857913e21cca6d3ba720bde51189bc95c6 -size 59558 +oid sha256:e511587486c499d79b532961d1bfd13f313b0e28620f152a0b82dd5443fda4b1 +size 2632 diff --git a/assets/voxygen/voxel/figure/hair/elf/female-20.vox b/assets/voxygen/voxel/figure/hair/elf/female-20.vox index 4be61e58e3..5a022cde25 100644 --- a/assets/voxygen/voxel/figure/hair/elf/female-20.vox +++ b/assets/voxygen/voxel/figure/hair/elf/female-20.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7f1f2860e3d049050c6f5a2c216b6e515677399ce617bced0aa1419db9b4fb1d -size 59333 +oid sha256:29e78db470fb10298b53b5cb85a25ae42fe2421dec68c675d823b957ab09b9dd +size 2460 diff --git a/assets/voxygen/voxel/figure/hair/elf/female-21.vox b/assets/voxygen/voxel/figure/hair/elf/female-21.vox index 9925607619..48cd890ad4 100644 --- a/assets/voxygen/voxel/figure/hair/elf/female-21.vox +++ b/assets/voxygen/voxel/figure/hair/elf/female-21.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8d1cdf8e3eace26b733572f39f42ce4440c2352992f3bc1400a43afd821462da -size 58226 +oid sha256:bdb7bbafc77b1549167c0b9198357b3ed787b8e8aa59d6b8cf25ef31ff50f371 +size 3716 diff --git a/assets/voxygen/voxel/figure/hair/elf/female-3.vox b/assets/voxygen/voxel/figure/hair/elf/female-3.vox index 1d1a2de731..67c6de95fb 100644 --- a/assets/voxygen/voxel/figure/hair/elf/female-3.vox +++ b/assets/voxygen/voxel/figure/hair/elf/female-3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1b92cbba8ae9455e12d556b88edda753a6b4e2e66b98b19ada6adbb2840a72b4 -size 56888 +oid sha256:1ae29cf0c8b365d0358bc9ab175a90c85fc5f616a5d8fd66382503c1257f3b9b +size 2404 diff --git a/assets/voxygen/voxel/figure/hair/elf/female-4.vox b/assets/voxygen/voxel/figure/hair/elf/female-4.vox index 22f90757b6..2d6b695a7c 100644 --- a/assets/voxygen/voxel/figure/hair/elf/female-4.vox +++ b/assets/voxygen/voxel/figure/hair/elf/female-4.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a858d60f0211d470e71c7c0f57d906f74983c57b4e9ca4b4ec631f399d319eef -size 57192 +oid sha256:95d2a6279a3adf51cf35cb5fde792d8a38538ef0edb5c137138392370ce01f1d +size 2708 diff --git a/assets/voxygen/voxel/figure/hair/elf/female-5.vox b/assets/voxygen/voxel/figure/hair/elf/female-5.vox index b5af8b622b..20d231ded1 100644 --- a/assets/voxygen/voxel/figure/hair/elf/female-5.vox +++ b/assets/voxygen/voxel/figure/hair/elf/female-5.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c394d60cb4c560685695f46ccd64ea99644fb0b32f2694f5b3fda7b19b752f00 -size 56796 +oid sha256:7f705e19f9e0d6b2535f22b97424ef29cba6ec319202647fbc05a241ac217bea +size 2312 diff --git a/assets/voxygen/voxel/figure/hair/elf/female-6.vox b/assets/voxygen/voxel/figure/hair/elf/female-6.vox index fd91992ce1..b1097c2c66 100644 --- a/assets/voxygen/voxel/figure/hair/elf/female-6.vox +++ b/assets/voxygen/voxel/figure/hair/elf/female-6.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:15bfdd21290dcdbcaa84cf0283b7dbe30e9ea87f04686bcae797390a90b3e2ec -size 59683 +oid sha256:7c558008dc134f8c056270186e3bcf5c14a55f02f2eecf8bedb3218b01a4e180 +size 2752 diff --git a/assets/voxygen/voxel/figure/hair/elf/female-7.vox b/assets/voxygen/voxel/figure/hair/elf/female-7.vox index 084e3e2a7a..67aefec497 100644 --- a/assets/voxygen/voxel/figure/hair/elf/female-7.vox +++ b/assets/voxygen/voxel/figure/hair/elf/female-7.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f5fc742fc4bbd044db463048d498441b050e91d2caa2215d752b11776a1ec44c -size 57108 +oid sha256:f0b1c1e57101215c679058304ee7047114dcfed6e5a8618c73a8b4f26377e9ac +size 2624 diff --git a/assets/voxygen/voxel/figure/hair/elf/female-8.vox b/assets/voxygen/voxel/figure/hair/elf/female-8.vox index 800d130ac8..fb06e14504 100644 --- a/assets/voxygen/voxel/figure/hair/elf/female-8.vox +++ b/assets/voxygen/voxel/figure/hair/elf/female-8.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7246ae4b8923b7eae180652d54a3e39f4bdbfa60585e84188874329c14e1d80c -size 57467 +oid sha256:3613c4c7bfd6018592f19376dd1f676928b6e603e7ee4c03483bc2466a5ec0a7 +size 2984 diff --git a/assets/voxygen/voxel/figure/hair/elf/female-9.vox b/assets/voxygen/voxel/figure/hair/elf/female-9.vox index 19e62e0c88..c83dfeea5a 100644 --- a/assets/voxygen/voxel/figure/hair/elf/female-9.vox +++ b/assets/voxygen/voxel/figure/hair/elf/female-9.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:886ebb20b0e5e68a3ce09406f1b291fec9cec34913ee21fbad6b3d6c618654e4 -size 46276 +oid sha256:fca6cc008ca885f98a78194ca58210d1f6697faa686d158ca1f0bd8029e1a987 +size 3168 diff --git a/assets/voxygen/voxel/figure/hair/elf/male-0.vox b/assets/voxygen/voxel/figure/hair/elf/male-0.vox index 301732b9c1..a3de59ccc9 100644 --- a/assets/voxygen/voxel/figure/hair/elf/male-0.vox +++ b/assets/voxygen/voxel/figure/hair/elf/male-0.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bbd2e2b0038a0150e4aaec2477724903a44437ff90609c92122897dd19e60942 -size 56379 +oid sha256:d6d6b9f6e4bdfa5ce5e1cae102803d59e42b1c1ac9778a72181459547355adf9 +size 1896 diff --git a/assets/voxygen/voxel/figure/hair/elf/male-1.vox b/assets/voxygen/voxel/figure/hair/elf/male-1.vox index 800d130ac8..fb06e14504 100644 --- a/assets/voxygen/voxel/figure/hair/elf/male-1.vox +++ b/assets/voxygen/voxel/figure/hair/elf/male-1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7246ae4b8923b7eae180652d54a3e39f4bdbfa60585e84188874329c14e1d80c -size 57467 +oid sha256:3613c4c7bfd6018592f19376dd1f676928b6e603e7ee4c03483bc2466a5ec0a7 +size 2984 diff --git a/assets/voxygen/voxel/figure/hair/elf/male-2.vox b/assets/voxygen/voxel/figure/hair/elf/male-2.vox index dac3a25e4e..1da5dee387 100644 --- a/assets/voxygen/voxel/figure/hair/elf/male-2.vox +++ b/assets/voxygen/voxel/figure/hair/elf/male-2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4c42e7da38ad6ef36e53c1fcfae73531f1dbf8adbf83b96a0f0f2981a248a5b7 -size 57026 +oid sha256:ef37ee588aa533263b94c0ccf0f81d303769530c4f606af4008928cf5b7331aa +size 2548 diff --git a/assets/voxygen/voxel/figure/hair/elf/male-3.vox b/assets/voxygen/voxel/figure/hair/elf/male-3.vox index c2f735d7a0..8afc3c4e99 100644 --- a/assets/voxygen/voxel/figure/hair/elf/male-3.vox +++ b/assets/voxygen/voxel/figure/hair/elf/male-3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:003df0ac0d6115d676fe153431b111fd69a327893004785040bf92fb32c11492 -size 59276 +oid sha256:b2cd7e4a007367a45c73ade5c4f2b549e8b15abcb0b5b0befafa4a4b39a9f0d2 +size 2296 diff --git a/assets/voxygen/voxel/figure/hair/human/female-0.vox b/assets/voxygen/voxel/figure/hair/human/female-0.vox index 75989991d2..cd30bb6c38 100644 --- a/assets/voxygen/voxel/figure/hair/human/female-0.vox +++ b/assets/voxygen/voxel/figure/hair/human/female-0.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c43639107b475f7918687b478e339ed3308ec44d07ed02ce4932a01ef0fd240f -size 57436 +oid sha256:affe57e1e04764bf002ff027719799dad1b8f3df1629f3f3bfec13b9e430fa33 +size 2952 diff --git a/assets/voxygen/voxel/figure/hair/human/female-1.vox b/assets/voxygen/voxel/figure/hair/human/female-1.vox index 8fe3c18232..480d525b91 100644 --- a/assets/voxygen/voxel/figure/hair/human/female-1.vox +++ b/assets/voxygen/voxel/figure/hair/human/female-1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:148b96d1a5c868aceffaf6d8ff8d27cf9827cc7183d538a9a3bfb57505ec0c89 -size 56860 +oid sha256:951038ce277d6194b8a11061312e0199c2df9f36a5d59d6193181307a99e56c6 +size 2376 diff --git a/assets/voxygen/voxel/figure/hair/human/female-10.vox b/assets/voxygen/voxel/figure/hair/human/female-10.vox index 6f562c6893..8c2670d908 100644 --- a/assets/voxygen/voxel/figure/hair/human/female-10.vox +++ b/assets/voxygen/voxel/figure/hair/human/female-10.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9ffa6ebdea30df3b996af356834a48aacd6e1ad9dfcfb3cae0fb6a4d4c8183b3 -size 58036 +oid sha256:d83728287cc2caa9cfa02cc0d6295879a08c2b6a90e1a8c922d636aa289fcd10 +size 3552 diff --git a/assets/voxygen/voxel/figure/hair/human/female-11.vox b/assets/voxygen/voxel/figure/hair/human/female-11.vox index 401ca43eb1..db849748bb 100644 --- a/assets/voxygen/voxel/figure/hair/human/female-11.vox +++ b/assets/voxygen/voxel/figure/hair/human/female-11.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:986449085be85193f06ccbb42584d92bc6143169f5c63aacc96b4340d85fafd5 -size 56504 +oid sha256:f1bdd7fc7cf521b96758442e1772a651726a4285537326e146b454bea602bdc7 +size 2020 diff --git a/assets/voxygen/voxel/figure/hair/human/female-12.vox b/assets/voxygen/voxel/figure/hair/human/female-12.vox index 15d2f5a4aa..d64aac0dc6 100644 --- a/assets/voxygen/voxel/figure/hair/human/female-12.vox +++ b/assets/voxygen/voxel/figure/hair/human/female-12.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8ce7fb066bcc8374fa73ef6535df87ea8ee1853621406c4016511bb70d9eaf10 -size 57484 +oid sha256:8be51f26eea7f5d9742d669bf0c0799f3619c21456e177bb1af45b55b76f16fc +size 3000 diff --git a/assets/voxygen/voxel/figure/hair/human/female-13.vox b/assets/voxygen/voxel/figure/hair/human/female-13.vox index e9d02a1b8a..d744df025f 100644 --- a/assets/voxygen/voxel/figure/hair/human/female-13.vox +++ b/assets/voxygen/voxel/figure/hair/human/female-13.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a00ca5d4566a7595dd2212d5f1ac1219aae16078e8fcb05527a5d8098c76d24b -size 57128 +oid sha256:1c266fa848e7f1690c6fc8e0e8004ea8f8db18c43cc4351aec526b4544c56273 +size 2644 diff --git a/assets/voxygen/voxel/figure/hair/human/female-14.vox b/assets/voxygen/voxel/figure/hair/human/female-14.vox index 5c8cfbf5d0..f3d513f8e1 100644 --- a/assets/voxygen/voxel/figure/hair/human/female-14.vox +++ b/assets/voxygen/voxel/figure/hair/human/female-14.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7ebafbf4ee56f80da3969fa636d6c5535fc3a25c0cfcb2507f21892de9a8d022 -size 56431 +oid sha256:35d5cf15aa12c8f107ce2ce66f7fba062ce38ed095d34940b4044c2a99b11c5a +size 1948 diff --git a/assets/voxygen/voxel/figure/hair/human/female-15.vox b/assets/voxygen/voxel/figure/hair/human/female-15.vox index fa7703c1f1..23848ed252 100644 --- a/assets/voxygen/voxel/figure/hair/human/female-15.vox +++ b/assets/voxygen/voxel/figure/hair/human/female-15.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e08de7a6a3a69c6d1dade59e52c2c57b67e65c61237318444ddd3940764d36cc -size 45495 +oid sha256:02fa7137248fc3e27300214ab845dd1fcdeb2707f123cf9d2f3fbc23ad3a954c +size 2388 diff --git a/assets/voxygen/voxel/figure/hair/human/female-16.vox b/assets/voxygen/voxel/figure/hair/human/female-16.vox index 1bf35a53f9..76de90d5d8 100644 --- a/assets/voxygen/voxel/figure/hair/human/female-16.vox +++ b/assets/voxygen/voxel/figure/hair/human/female-16.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:12054d5bb41092833e3060b17b5f781ff71530607ea1f05a3da5dcffa203bca6 -size 56839 +oid sha256:da6c1d63dd85c570c104b8573b23aedbe7d4d44d7e14b7ab05e1a5c1ff8ad7d8 +size 2356 diff --git a/assets/voxygen/voxel/figure/hair/human/female-17.vox b/assets/voxygen/voxel/figure/hair/human/female-17.vox index 5a95f00c2e..dd1360f8e6 100644 --- a/assets/voxygen/voxel/figure/hair/human/female-17.vox +++ b/assets/voxygen/voxel/figure/hair/human/female-17.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e0b4e122316f0c424b45d488c4f282557a644e94da41b2556306f670a0d03f17 -size 57423 +oid sha256:3b557e1912c92e2163fd060c005f0fd6167a3ca41c616f13af14e36680b58336 +size 2940 diff --git a/assets/voxygen/voxel/figure/hair/human/female-18.vox b/assets/voxygen/voxel/figure/hair/human/female-18.vox index 6aff62eaaa..844d2454fa 100644 --- a/assets/voxygen/voxel/figure/hair/human/female-18.vox +++ b/assets/voxygen/voxel/figure/hair/human/female-18.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f33c01e85f4d6ce8dfe10436c7b3772f97f4a51b392fc53bd19868b4e122b881 -size 57235 +oid sha256:7e85e4cfd2cd14dde11bd9d13acb38366036b585a4ba85efaebb3d61a00dedde +size 2752 diff --git a/assets/voxygen/voxel/figure/hair/human/female-19.vox b/assets/voxygen/voxel/figure/hair/human/female-19.vox index 9925607619..48cd890ad4 100644 --- a/assets/voxygen/voxel/figure/hair/human/female-19.vox +++ b/assets/voxygen/voxel/figure/hair/human/female-19.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8d1cdf8e3eace26b733572f39f42ce4440c2352992f3bc1400a43afd821462da -size 58226 +oid sha256:bdb7bbafc77b1549167c0b9198357b3ed787b8e8aa59d6b8cf25ef31ff50f371 +size 3716 diff --git a/assets/voxygen/voxel/figure/hair/human/female-2.vox b/assets/voxygen/voxel/figure/hair/human/female-2.vox index d49a22402b..2d8a57854a 100644 --- a/assets/voxygen/voxel/figure/hair/human/female-2.vox +++ b/assets/voxygen/voxel/figure/hair/human/female-2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a442b9712bf1cfeba5f2d8db2b6b86b10c8cad44b52810631615b16a1562a7bb -size 59578 +oid sha256:fad884bcd7ebd56c18df9717af7a40c00a7e3fd8c2a3d8a0f8da2b302d3d982e +size 2632 diff --git a/assets/voxygen/voxel/figure/hair/human/female-3.vox b/assets/voxygen/voxel/figure/hair/human/female-3.vox index a0856e47d2..2f8f0d2d2a 100644 --- a/assets/voxygen/voxel/figure/hair/human/female-3.vox +++ b/assets/voxygen/voxel/figure/hair/human/female-3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:03d215ee1300bde1de09f3e2fb1552ac4e8db406510d61da7c3a935165fc17b6 -size 56888 +oid sha256:cf159dfe30389760438ce06ed05c66e911f93f86cb0fd9bc7a00ce6a35f7ed54 +size 2404 diff --git a/assets/voxygen/voxel/figure/hair/human/female-4.vox b/assets/voxygen/voxel/figure/hair/human/female-4.vox index 22f90757b6..2d6b695a7c 100644 --- a/assets/voxygen/voxel/figure/hair/human/female-4.vox +++ b/assets/voxygen/voxel/figure/hair/human/female-4.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a858d60f0211d470e71c7c0f57d906f74983c57b4e9ca4b4ec631f399d319eef -size 57192 +oid sha256:95d2a6279a3adf51cf35cb5fde792d8a38538ef0edb5c137138392370ce01f1d +size 2708 diff --git a/assets/voxygen/voxel/figure/hair/human/female-5.vox b/assets/voxygen/voxel/figure/hair/human/female-5.vox index b5af8b622b..20d231ded1 100644 --- a/assets/voxygen/voxel/figure/hair/human/female-5.vox +++ b/assets/voxygen/voxel/figure/hair/human/female-5.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c394d60cb4c560685695f46ccd64ea99644fb0b32f2694f5b3fda7b19b752f00 -size 56796 +oid sha256:7f705e19f9e0d6b2535f22b97424ef29cba6ec319202647fbc05a241ac217bea +size 2312 diff --git a/assets/voxygen/voxel/figure/hair/human/female-6.vox b/assets/voxygen/voxel/figure/hair/human/female-6.vox index 01c8f897c2..22a75844b4 100644 --- a/assets/voxygen/voxel/figure/hair/human/female-6.vox +++ b/assets/voxygen/voxel/figure/hair/human/female-6.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:06fff76a6708d311ae6863ab884f371b2eb4a45ad941133a99e7415e3764b2a7 -size 59683 +oid sha256:be1836233f2b17b03e11f0c4644e03d21e5a76648cfef69e0a3546c62156141f +size 2752 diff --git a/assets/voxygen/voxel/figure/hair/human/female-7.vox b/assets/voxygen/voxel/figure/hair/human/female-7.vox index 084e3e2a7a..67aefec497 100644 --- a/assets/voxygen/voxel/figure/hair/human/female-7.vox +++ b/assets/voxygen/voxel/figure/hair/human/female-7.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f5fc742fc4bbd044db463048d498441b050e91d2caa2215d752b11776a1ec44c -size 57108 +oid sha256:f0b1c1e57101215c679058304ee7047114dcfed6e5a8618c73a8b4f26377e9ac +size 2624 diff --git a/assets/voxygen/voxel/figure/hair/human/female-8.vox b/assets/voxygen/voxel/figure/hair/human/female-8.vox index 800d130ac8..fb06e14504 100644 --- a/assets/voxygen/voxel/figure/hair/human/female-8.vox +++ b/assets/voxygen/voxel/figure/hair/human/female-8.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7246ae4b8923b7eae180652d54a3e39f4bdbfa60585e84188874329c14e1d80c -size 57467 +oid sha256:3613c4c7bfd6018592f19376dd1f676928b6e603e7ee4c03483bc2466a5ec0a7 +size 2984 diff --git a/assets/voxygen/voxel/figure/hair/human/female-9.vox b/assets/voxygen/voxel/figure/hair/human/female-9.vox index 19e62e0c88..c83dfeea5a 100644 --- a/assets/voxygen/voxel/figure/hair/human/female-9.vox +++ b/assets/voxygen/voxel/figure/hair/human/female-9.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:886ebb20b0e5e68a3ce09406f1b291fec9cec34913ee21fbad6b3d6c618654e4 -size 46276 +oid sha256:fca6cc008ca885f98a78194ca58210d1f6697faa686d158ca1f0bd8029e1a987 +size 3168 diff --git a/assets/voxygen/voxel/figure/hair/human/male-0.vox b/assets/voxygen/voxel/figure/hair/human/male-0.vox index ee8e0a5a30..456fda8663 100644 --- a/assets/voxygen/voxel/figure/hair/human/male-0.vox +++ b/assets/voxygen/voxel/figure/hair/human/male-0.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9c097140e71170f0d4608d2436749492d36b316bbe67e4e18afbf904bbcb8117 -size 56351 +oid sha256:2024f688a627847d713274522b18d6b8a8159fe89bdad49f53082086e3b79998 +size 1868 diff --git a/assets/voxygen/voxel/figure/hair/human/male-1.vox b/assets/voxygen/voxel/figure/hair/human/male-1.vox index ee8e0a5a30..456fda8663 100644 --- a/assets/voxygen/voxel/figure/hair/human/male-1.vox +++ b/assets/voxygen/voxel/figure/hair/human/male-1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9c097140e71170f0d4608d2436749492d36b316bbe67e4e18afbf904bbcb8117 -size 56351 +oid sha256:2024f688a627847d713274522b18d6b8a8159fe89bdad49f53082086e3b79998 +size 1868 diff --git a/assets/voxygen/voxel/figure/hair/human/male-10.vox b/assets/voxygen/voxel/figure/hair/human/male-10.vox index 86a4bf519f..526f3e9f41 100644 --- a/assets/voxygen/voxel/figure/hair/human/male-10.vox +++ b/assets/voxygen/voxel/figure/hair/human/male-10.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:53a158d070e5c1191f011efda7c0dfe07276973e5ce992c2e0cd9a6f7449d95d -size 58552 +oid sha256:cd6bb8be7c2972ac967afd8029a69b38ef62251c24d23c9444b6bc612334432d +size 1688 diff --git a/assets/voxygen/voxel/figure/hair/human/male-11.vox b/assets/voxygen/voxel/figure/hair/human/male-11.vox index 2b9dd79ce9..a421eefd11 100644 --- a/assets/voxygen/voxel/figure/hair/human/male-11.vox +++ b/assets/voxygen/voxel/figure/hair/human/male-11.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c1e881c9cbd41cc97d0b9cd1bc2f79cabfcc43d7d79debc9e901ec0827684a62 -size 56664 +oid sha256:22533597f6d8f7a81a1281084fe3a9b4c337a9d14ef71031cabab45474985cf8 +size 2184 diff --git a/assets/voxygen/voxel/figure/hair/human/male-12.vox b/assets/voxygen/voxel/figure/hair/human/male-12.vox index 704f80aded..ab45703d72 100644 --- a/assets/voxygen/voxel/figure/hair/human/male-12.vox +++ b/assets/voxygen/voxel/figure/hair/human/male-12.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3ed3799bade5ea5e9b4015a4214e092b651901f65b5503bfcb2565d9ed520aca -size 55640 +oid sha256:17a177635a44cce26bbd3200fcfc2a9b01a49b3fc7b5e3b781bb95f719ae63c8 +size 1160 diff --git a/assets/voxygen/voxel/figure/hair/human/male-13.vox b/assets/voxygen/voxel/figure/hair/human/male-13.vox index 7531279d73..c7f08044da 100644 --- a/assets/voxygen/voxel/figure/hair/human/male-13.vox +++ b/assets/voxygen/voxel/figure/hair/human/male-13.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ead8c89e70fc63335fa4bd3325462d087fe92f95f999019e70ed9551ccb3c51d -size 56728 +oid sha256:5df340fbade4cee1999fb1dbf3f60328eaa4315479e087776addf965a1b575a0 +size 2248 diff --git a/assets/voxygen/voxel/figure/hair/human/male-14.vox b/assets/voxygen/voxel/figure/hair/human/male-14.vox index 614217969f..4f3dab2ae6 100644 --- a/assets/voxygen/voxel/figure/hair/human/male-14.vox +++ b/assets/voxygen/voxel/figure/hair/human/male-14.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7667f9544ed63724899ea16708c3b22ff4410ea059b63cc59b7460ced0a3c962 -size 56416 +oid sha256:d17cedccc90f82b10157c26ca774b554057167224b91a94c548b87ee80fc0319 +size 1936 diff --git a/assets/voxygen/voxel/figure/hair/human/male-15.vox b/assets/voxygen/voxel/figure/hair/human/male-15.vox index 20f98be7b0..cbff54ebfc 100644 --- a/assets/voxygen/voxel/figure/hair/human/male-15.vox +++ b/assets/voxygen/voxel/figure/hair/human/male-15.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0a0b9927fcb7e6b1b0f6688b5959e443714a26a1896424db1adb948362430523 -size 56428 +oid sha256:95d6ba20b2c395413694f8604e91211245d560d95ef5bf818e73c134fe616a00 +size 1948 diff --git a/assets/voxygen/voxel/figure/hair/human/male-16.vox b/assets/voxygen/voxel/figure/hair/human/male-16.vox index 903aa62d3f..9661760017 100644 --- a/assets/voxygen/voxel/figure/hair/human/male-16.vox +++ b/assets/voxygen/voxel/figure/hair/human/male-16.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:03fa44f2e982b44ea9e4d20bd06f1e29646f38cdd2075ae4fba10c742be090dd -size 57680 +oid sha256:028a3a431f30b44c5b2dc95642952deb898b9c1ff0204de1c8ee450e567203df +size 3200 diff --git a/assets/voxygen/voxel/figure/hair/human/male-17.vox b/assets/voxygen/voxel/figure/hair/human/male-17.vox index 74e978fd4b..b449189faf 100644 --- a/assets/voxygen/voxel/figure/hair/human/male-17.vox +++ b/assets/voxygen/voxel/figure/hair/human/male-17.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d000ef9fd1a8dd2b92b7abb3b1ddaea069953afa6b4e1225bde6ebe48e941d57 -size 56584 +oid sha256:bd16b5c78c667715b5d1ee4fe0776af5b329c53cc9f4432cfc9261ae8e8e0c3c +size 2104 diff --git a/assets/voxygen/voxel/figure/hair/human/male-18.vox b/assets/voxygen/voxel/figure/hair/human/male-18.vox index 63940d939e..94e4e5a34b 100644 --- a/assets/voxygen/voxel/figure/hair/human/male-18.vox +++ b/assets/voxygen/voxel/figure/hair/human/male-18.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:14089f256144399d6397eedc0036794e2622d25b3a10765992706216247fec5b -size 56704 +oid sha256:8fc14c30703103be12546030c8e8c36e81ccbe794445b4f89bbff0dafb2ecbe6 +size 2224 diff --git a/assets/voxygen/voxel/figure/hair/human/male-19.vox b/assets/voxygen/voxel/figure/hair/human/male-19.vox index 1cc1df9dac..22725d666e 100644 --- a/assets/voxygen/voxel/figure/hair/human/male-19.vox +++ b/assets/voxygen/voxel/figure/hair/human/male-19.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a9d32f0bb9e34d7d93d1ecb219f3fc744b63916ea0f971338c2c95ce7bcf1349 -size 56416 +oid sha256:37febb8aa41738ff001853e76afd683d1346aa595986cdcf2b762fb7b5d39a9c +size 1936 diff --git a/assets/voxygen/voxel/figure/hair/human/male-2.vox b/assets/voxygen/voxel/figure/hair/human/male-2.vox index 32934f6105..017b950f0f 100644 --- a/assets/voxygen/voxel/figure/hair/human/male-2.vox +++ b/assets/voxygen/voxel/figure/hair/human/male-2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5a55636d8ea9abd185d161abb15bece85a65fb2706aa86c2486af4592f4561e6 -size 56747 +oid sha256:70ca7e4970b59b537f2e01ff0b8ca353edbf6eecfe09cae977687491fb3f618b +size 2264 diff --git a/assets/voxygen/voxel/figure/hair/human/male-20.vox b/assets/voxygen/voxel/figure/hair/human/male-20.vox index dac3a25e4e..1da5dee387 100644 --- a/assets/voxygen/voxel/figure/hair/human/male-20.vox +++ b/assets/voxygen/voxel/figure/hair/human/male-20.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4c42e7da38ad6ef36e53c1fcfae73531f1dbf8adbf83b96a0f0f2981a248a5b7 -size 57026 +oid sha256:ef37ee588aa533263b94c0ccf0f81d303769530c4f606af4008928cf5b7331aa +size 2548 diff --git a/assets/voxygen/voxel/figure/hair/human/male-3.vox b/assets/voxygen/voxel/figure/hair/human/male-3.vox index 800d130ac8..fb06e14504 100644 --- a/assets/voxygen/voxel/figure/hair/human/male-3.vox +++ b/assets/voxygen/voxel/figure/hair/human/male-3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7246ae4b8923b7eae180652d54a3e39f4bdbfa60585e84188874329c14e1d80c -size 57467 +oid sha256:3613c4c7bfd6018592f19376dd1f676928b6e603e7ee4c03483bc2466a5ec0a7 +size 2984 diff --git a/assets/voxygen/voxel/figure/hair/human/male-4.vox b/assets/voxygen/voxel/figure/hair/human/male-4.vox index 2b7a141222..2aca26fc08 100644 --- a/assets/voxygen/voxel/figure/hair/human/male-4.vox +++ b/assets/voxygen/voxel/figure/hair/human/male-4.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5f0ad3e0ac733f2c414f58975d9f3fe2c85d73fff709076826314151a1796c30 -size 56048 +oid sha256:f32db1626a76cad31ac5f6fd2434ba72dcae52951db6cb82bda903e849d82c06 +size 1568 diff --git a/assets/voxygen/voxel/figure/hair/human/male-5.vox b/assets/voxygen/voxel/figure/hair/human/male-5.vox index 07f1f501ba..648933841f 100644 --- a/assets/voxygen/voxel/figure/hair/human/male-5.vox +++ b/assets/voxygen/voxel/figure/hair/human/male-5.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:21bf17855229947784a3747d7385f646b72e7f9ab8cb289bef0d1e0719b98bad -size 56488 +oid sha256:65875c093e8b3a74b519f914d4e2f309f1e29dda003ae54c10eee21f5f1d1b7b +size 2008 diff --git a/assets/voxygen/voxel/figure/hair/human/male-6.vox b/assets/voxygen/voxel/figure/hair/human/male-6.vox index e010d18efd..72297429b2 100644 --- a/assets/voxygen/voxel/figure/hair/human/male-6.vox +++ b/assets/voxygen/voxel/figure/hair/human/male-6.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:658ac65e350c7a046d23e301a8d79153d198004fe4f0722accc443722e627e34 -size 58757 +oid sha256:12632fd6ca5195b45aa9c4239adbf467a4db0d558cfd9b5120ee5d70d90c8da8 +size 1884 diff --git a/assets/voxygen/voxel/figure/hair/human/male-7.vox b/assets/voxygen/voxel/figure/hair/human/male-7.vox index c5a8e712ef..f628b67325 100644 --- a/assets/voxygen/voxel/figure/hair/human/male-7.vox +++ b/assets/voxygen/voxel/figure/hair/human/male-7.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:09d1a2f620519b6c3c521bfb677f9b25362f893652b0b74929ec4f19fd4ee6cd -size 56420 +oid sha256:5bb469b98425dd33c26d9be23f13105b1fb14db595989df049e537d2ced6376c +size 1940 diff --git a/assets/voxygen/voxel/figure/hair/human/male-8.vox b/assets/voxygen/voxel/figure/hair/human/male-8.vox index 6e02c54ffb..ce47363876 100644 --- a/assets/voxygen/voxel/figure/hair/human/male-8.vox +++ b/assets/voxygen/voxel/figure/hair/human/male-8.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:12c07dd532873a363d3349d0cb8c1541c9d56f4de13adbf22316015e8b00a42e -size 56544 +oid sha256:4c71bbdda80e344851d8ac8fc6287ff59160b24eefcff63d4b04309ac868cc3d +size 2064 diff --git a/assets/voxygen/voxel/figure/hair/human/male-9.vox b/assets/voxygen/voxel/figure/hair/human/male-9.vox index cef5679567..7004e8d0c2 100644 --- a/assets/voxygen/voxel/figure/hair/human/male-9.vox +++ b/assets/voxygen/voxel/figure/hair/human/male-9.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bbf19442d4a77053591d89623ea69d31088ab3427ac339037669fc1dc2c62851 -size 56216 +oid sha256:2ceb3f931065997603972c458252fc7790cc6bf9c6cb2cebff572c5aedc0c5c2 +size 1736 diff --git a/assets/voxygen/voxel/figure/hair/orc/female-0.vox b/assets/voxygen/voxel/figure/hair/orc/female-0.vox index 504d5a244e..8a0b886359 100644 --- a/assets/voxygen/voxel/figure/hair/orc/female-0.vox +++ b/assets/voxygen/voxel/figure/hair/orc/female-0.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:722ff5a49bd37bbc2da3cc1e6ea1f19b2ad38d88fede8dd5c96355a1269009fc -size 58642 +oid sha256:6e8513b0166f1b666b3f30387b698a36cdc4f0e8f1b40ffe08e66bb1f8a067ba +size 1840 diff --git a/assets/voxygen/voxel/figure/hair/orc/female-1.vox b/assets/voxygen/voxel/figure/hair/orc/female-1.vox index 1af8813a08..1d8151a08e 100644 --- a/assets/voxygen/voxel/figure/hair/orc/female-1.vox +++ b/assets/voxygen/voxel/figure/hair/orc/female-1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:43b5e82e7fa965429288b1e6985e4449edc9e6a4b8d7386187d62153fd79d630 -size 58266 +oid sha256:77c1d8c6dfa1fa87c7cc55fa09770805d13bde44e20504eb0d0eb0fadd607964 +size 1464 diff --git a/assets/voxygen/voxel/figure/hair/orc/female-2.vox b/assets/voxygen/voxel/figure/hair/orc/female-2.vox index cf5f854aef..f345a4f5ec 100644 --- a/assets/voxygen/voxel/figure/hair/orc/female-2.vox +++ b/assets/voxygen/voxel/figure/hair/orc/female-2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4bc1d189819717568b92fc327e98d6c4c096cbe28eeb7595688137a5055a497a -size 58810 +oid sha256:b827cbf9db4d3d32ff41ac5d8b59e167075f17f645637de3b18a19464927bbc9 +size 2008 diff --git a/assets/voxygen/voxel/figure/hair/orc/female-3.vox b/assets/voxygen/voxel/figure/hair/orc/female-3.vox index 496c9266d2..4c6003d01e 100644 --- a/assets/voxygen/voxel/figure/hair/orc/female-3.vox +++ b/assets/voxygen/voxel/figure/hair/orc/female-3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:71ebeb3025d03aa0300a9ce1924932faa5616451e726aa72e573b2aaf2a283b4 -size 59946 +oid sha256:0a75131b529cffd94b2e8c805c12bbf1bd3192a869dae0aef2cdafa94375a79d +size 3136 diff --git a/assets/voxygen/voxel/figure/hair/orc/female-4.vox b/assets/voxygen/voxel/figure/hair/orc/female-4.vox index b38b1b738c..e4d645dbe3 100644 --- a/assets/voxygen/voxel/figure/hair/orc/female-4.vox +++ b/assets/voxygen/voxel/figure/hair/orc/female-4.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0032b74cd99c530ff56872324407353fb84b524e03bca1617ed88ab1e61978ba -size 58378 +oid sha256:6a44e8d31745129f38735413e272e40add8962d1255abd0d0ca73b6f046b8401 +size 1576 diff --git a/assets/voxygen/voxel/figure/hair/orc/female-5.vox b/assets/voxygen/voxel/figure/hair/orc/female-5.vox index c2513264c0..c3f9b229d6 100644 --- a/assets/voxygen/voxel/figure/hair/orc/female-5.vox +++ b/assets/voxygen/voxel/figure/hair/orc/female-5.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6f2c75b22f7587adb3960ac15db9841bd249f0fee37fabd3de0859a8e27a0eca -size 60158 +oid sha256:b22d1657dcbf09109168c8ac565aa049a2cc00b529c39840fa7f452e1e54ba91 +size 3348 diff --git a/assets/voxygen/voxel/figure/hair/orc/female-6.vox b/assets/voxygen/voxel/figure/hair/orc/female-6.vox index bbfcfc7b23..362af34643 100644 --- a/assets/voxygen/voxel/figure/hair/orc/female-6.vox +++ b/assets/voxygen/voxel/figure/hair/orc/female-6.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:54950e3b327e36e547467518511baaf04cb99a282488e7da45db88eccba8d7e0 -size 59566 +oid sha256:e35d4a7a3f12e59cc16cbfa36c1f07ee34beaae66ed3a3ef22408a16b0aebc97 +size 2756 diff --git a/assets/voxygen/voxel/figure/hair/orc/male-0.vox b/assets/voxygen/voxel/figure/hair/orc/male-0.vox index 4b5acbada3..b2f875cbae 100644 --- a/assets/voxygen/voxel/figure/hair/orc/male-0.vox +++ b/assets/voxygen/voxel/figure/hair/orc/male-0.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:393785a5fe056830402ef38e3e3c20d6dee7373b0b48d2331b97d712cfe82dc0 -size 56067 +oid sha256:2e1d5544f54b8ca06619965bc3ef8142a8c140024a2c38bc6ccf6a61d2d1dc5c +size 1584 diff --git a/assets/voxygen/voxel/figure/hair/orc/male-1.vox b/assets/voxygen/voxel/figure/hair/orc/male-1.vox index 9820089eb4..3f56d06ddf 100644 --- a/assets/voxygen/voxel/figure/hair/orc/male-1.vox +++ b/assets/voxygen/voxel/figure/hair/orc/male-1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3911e0ac35fc471bd3b13d00be925aef393c74ba6154119dc22b0622c769e484 -size 56554 +oid sha256:ecf277433dd8023f2e8d48a6d792597a37d0ec556122c55d2747a828fe42580d +size 2032 diff --git a/assets/voxygen/voxel/figure/hair/orc/male-2.vox b/assets/voxygen/voxel/figure/hair/orc/male-2.vox index a4302b8d6f..82a8db4dab 100644 --- a/assets/voxygen/voxel/figure/hair/orc/male-2.vox +++ b/assets/voxygen/voxel/figure/hair/orc/male-2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f6d6d31fc96b07cc7ff4dd916d0d0c9cc4b29305a42c12f12225843e70df0126 -size 56399 +oid sha256:6f492d4568ebcffb8ddc6e9dc2ad4d60a2fb26da07dedc074ab5c5a8ad1b6d18 +size 1876 diff --git a/assets/voxygen/voxel/figure/hair/orc/male-3.vox b/assets/voxygen/voxel/figure/hair/orc/male-3.vox index d095f82fc4..b01b5a0035 100644 --- a/assets/voxygen/voxel/figure/hair/orc/male-3.vox +++ b/assets/voxygen/voxel/figure/hair/orc/male-3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:47b7919e337153e35bc5b3075edffef23847a93cf956cdd1993c27871b559810 -size 56527 +oid sha256:598472d24ee293ec70eacf044b858ade57bc463ea0686bb3e624e655427f76b6 +size 2004 diff --git a/assets/voxygen/voxel/figure/hair/orc/male-4.vox b/assets/voxygen/voxel/figure/hair/orc/male-4.vox index 5c7b40de06..eeb3a067ea 100644 --- a/assets/voxygen/voxel/figure/hair/orc/male-4.vox +++ b/assets/voxygen/voxel/figure/hair/orc/male-4.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ac19295ce12b7c9da1cf54b6ca0a44dac60a846131f234f09fa441495af16c00 -size 56083 +oid sha256:3aa93b8d72347f767e7ac426031588cb8dcb2ac1783a01fef229586e55b23810 +size 1560 diff --git a/assets/voxygen/voxel/figure/hair/orc/male-5.vox b/assets/voxygen/voxel/figure/hair/orc/male-5.vox index 75d77a361b..cbd2aa387d 100644 --- a/assets/voxygen/voxel/figure/hair/orc/male-5.vox +++ b/assets/voxygen/voxel/figure/hair/orc/male-5.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:40d35793c6273fd3e0df04d78317b6973a326a0e884f19b937e1d916928359f5 -size 55875 +oid sha256:fc434af16b04768ae07a8052d1106b847dfca0a13eba0f0f61aaf8a3ae245108 +size 1352 diff --git a/assets/voxygen/voxel/figure/hair/orc/male-6.vox b/assets/voxygen/voxel/figure/hair/orc/male-6.vox index 2c97b71641..9005904b48 100644 --- a/assets/voxygen/voxel/figure/hair/orc/male-6.vox +++ b/assets/voxygen/voxel/figure/hair/orc/male-6.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c047a63a9a8db66dd509ad357aa700344088c0d2bcc6e5df135a60f5604bdb99 -size 56515 +oid sha256:c9e3b4ae37c06dc30927dca14111b22ab8331c21cb36f4802a3ab1f180dfa990 +size 2004 diff --git a/assets/voxygen/voxel/figure/hair/undead/female-1.vox b/assets/voxygen/voxel/figure/hair/undead/female-1.vox index 1383440cac..144b5d96f6 100644 --- a/assets/voxygen/voxel/figure/hair/undead/female-1.vox +++ b/assets/voxygen/voxel/figure/hair/undead/female-1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:98d421448617831a503fac225f7700b5df682cada8a6f71bfb8686cfca420594 -size 57499 +oid sha256:acd22b0a08cf9957c6ccd753bb42ea28416f03cb94a7992cd627021c1a701d03 +size 3016 diff --git a/assets/voxygen/voxel/figure/hair/undead/female-2.vox b/assets/voxygen/voxel/figure/hair/undead/female-2.vox index 1c11a21c1f..21e4a2ff84 100644 --- a/assets/voxygen/voxel/figure/hair/undead/female-2.vox +++ b/assets/voxygen/voxel/figure/hair/undead/female-2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:886e9c3d5e63bc4310fe21c6e6cd46edc0ff9e8f48c41fcf8ee123e304f8798e -size 56392 +oid sha256:9cbd8d99641825f711f10e79107f5b1a81a232e957243e470e65b334a37a9c2f +size 1880 diff --git a/assets/voxygen/voxel/figure/hair/undead/female-3.vox b/assets/voxygen/voxel/figure/hair/undead/female-3.vox index ad7e613302..f3ddccc5f1 100644 --- a/assets/voxygen/voxel/figure/hair/undead/female-3.vox +++ b/assets/voxygen/voxel/figure/hair/undead/female-3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d629f9b892301c4c5f4ee9bf261f60769ee8ab9f06ddff3a65cbe920a4e5ad30 -size 56406 +oid sha256:0c5c991cc7fb399e2a33293aa3aefaf659aa45027701c1e05bd5bd7a6a1d70ff +size 1892 diff --git a/assets/voxygen/voxel/figure/hair/undead/male-1.vox b/assets/voxygen/voxel/figure/hair/undead/male-1.vox index b238461fde..5edc433b8c 100644 --- a/assets/voxygen/voxel/figure/hair/undead/male-1.vox +++ b/assets/voxygen/voxel/figure/hair/undead/male-1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:254102f083bd647ffc735221a91be002e2237d505ff9840ef605c69f59285e6a -size 55895 +oid sha256:d13b6572d9a830d3fc02f4254ef368b340d9d85c5d307875a993a0eecd29572d +size 1412 diff --git a/assets/voxygen/voxel/figure/head/danari/female.vox b/assets/voxygen/voxel/figure/head/danari/female.vox index acb8a39990..8868d56f30 100644 --- a/assets/voxygen/voxel/figure/head/danari/female.vox +++ b/assets/voxygen/voxel/figure/head/danari/female.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6afe627cf97d5bf0fd3982f9a390a5aac74bb2f9048eafdc984edcef5147045b -size 57731 +oid sha256:5b10d54c8bef697cb5d34fe313d1e744a47c4588de1c281dde5b629ed88b045f +size 3248 diff --git a/assets/voxygen/voxel/figure/head/danari/male.vox b/assets/voxygen/voxel/figure/head/danari/male.vox index 2937aace25..22decee560 100644 --- a/assets/voxygen/voxel/figure/head/danari/male.vox +++ b/assets/voxygen/voxel/figure/head/danari/male.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dcddfd3a9045dc01518318c8abf21c896384cf4ac1b395fc198f66e48e51272e -size 57747 +oid sha256:903282a49a23745bed03fcc7271dd9cf8b704229deeb172fe223f6929871981d +size 3264 diff --git a/assets/voxygen/voxel/figure/head/dwarf/female.vox b/assets/voxygen/voxel/figure/head/dwarf/female.vox index e3242ef85e..2984389c8a 100644 --- a/assets/voxygen/voxel/figure/head/dwarf/female.vox +++ b/assets/voxygen/voxel/figure/head/dwarf/female.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9678639c8662bbd2ab8c5979dfaa383f5fa5983d2472eb566b3c147365d2ab90 -size 57531 +oid sha256:a7bd7d802ee07b5784c5d7c672a488efd3e70ed2fec974ba806e37f842732094 +size 3048 diff --git a/assets/voxygen/voxel/figure/head/dwarf/male.vox b/assets/voxygen/voxel/figure/head/dwarf/male.vox index 7c5ae68e07..8bab58bd76 100644 --- a/assets/voxygen/voxel/figure/head/dwarf/male.vox +++ b/assets/voxygen/voxel/figure/head/dwarf/male.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:04e5bb53701ad6bcb95b383de6df28900d0c210560a40c70f47aabde98a3ac14 -size 57539 +oid sha256:4e8d32cbc846775bc86184df4865bf01057b91fe8b4a9dd0d891129e29d6771b +size 3056 diff --git a/assets/voxygen/voxel/figure/head/elf/female.vox b/assets/voxygen/voxel/figure/head/elf/female.vox index 1827c5676d..35b451df5a 100644 --- a/assets/voxygen/voxel/figure/head/elf/female.vox +++ b/assets/voxygen/voxel/figure/head/elf/female.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:249a73e5a3118dde82784e30daa14615c6b8340fadd2628b7e776ed586c149a2 -size 57851 +oid sha256:c8a9917cb6c018de09704a5b2c1244814a1f8b9c06702752a3d2c888cf7dea43 +size 3368 diff --git a/assets/voxygen/voxel/figure/head/elf/male.vox b/assets/voxygen/voxel/figure/head/elf/male.vox index e050f7ed04..bc33a011e0 100644 --- a/assets/voxygen/voxel/figure/head/elf/male.vox +++ b/assets/voxygen/voxel/figure/head/elf/male.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:75d03a797e76f9db75d3d98c991244042ea0295cf364abc28455f6a61be3d9a1 -size 57827 +oid sha256:1271ff8991fecd5ee1b12aad07877c54528e10f63d3dbfb2c7263f3efe705284 +size 3344 diff --git a/assets/voxygen/voxel/figure/head/human/female.vox b/assets/voxygen/voxel/figure/head/human/female.vox index 95943bfd01..f6e3d34884 100644 --- a/assets/voxygen/voxel/figure/head/human/female.vox +++ b/assets/voxygen/voxel/figure/head/human/female.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9c278d0c3aa53c002df0261830ff8637da77f68743841d7160d13f69275694ca -size 57827 +oid sha256:1297599c2467ce610c7a0d902be69e648e53dbf7034a3defe5ed06f1b1c77d34 +size 3344 diff --git a/assets/voxygen/voxel/figure/head/human/male.vox b/assets/voxygen/voxel/figure/head/human/male.vox index 4cf9b53885..6e9ffab9d0 100644 --- a/assets/voxygen/voxel/figure/head/human/male.vox +++ b/assets/voxygen/voxel/figure/head/human/male.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2323f14bcb9f26f96e4e8df8b164e2fbf6de7aaa59ee787f3130d2d0985c883d -size 57819 +oid sha256:1fdf5705ef1376f43a1ff147dd6539209c7cd759d0075693b493439fbc8a4cc2 +size 3336 diff --git a/assets/voxygen/voxel/figure/head/orc/female.vox b/assets/voxygen/voxel/figure/head/orc/female.vox index 2f95c47a23..309f3bfe66 100644 --- a/assets/voxygen/voxel/figure/head/orc/female.vox +++ b/assets/voxygen/voxel/figure/head/orc/female.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1b788a472ced0a98d6bcab4f1b5c46068d3f30b966709921bd3d7db30f2d365a -size 57737 +oid sha256:a5ed0b6d1c545b7a24a92f0cb5a481736c50263f43f93276bb4813452d7223e2 +size 3216 diff --git a/assets/voxygen/voxel/figure/head/orc/male.vox b/assets/voxygen/voxel/figure/head/orc/male.vox index 6277f12885..b84af7b9b3 100644 --- a/assets/voxygen/voxel/figure/head/orc/male.vox +++ b/assets/voxygen/voxel/figure/head/orc/male.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c37c8abe7bac77d4a2b3f5c5771c53a8d117fb978b813f28374f3c4c391f446b -size 57846 +oid sha256:f5735aa6e4facad62b3e5fffed8c70f9c54acf95f1d326624cb6b7a1d9e8c535 +size 3308 diff --git a/assets/voxygen/voxel/figure/head/undead/female.vox b/assets/voxygen/voxel/figure/head/undead/female.vox index 87ff3b858e..9dc1d84f33 100644 --- a/assets/voxygen/voxel/figure/head/undead/female.vox +++ b/assets/voxygen/voxel/figure/head/undead/female.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0916b4f848e9c68fd67b25c86ec153b6c341e6e4169f54836c6146667087ed66 -size 57783 +oid sha256:0f7e459f4f4f5acc312d533650b6d207ab74a4a90ce6ab9c92f0c24845a81691 +size 3300 diff --git a/assets/voxygen/voxel/figure/head/undead/male.vox b/assets/voxygen/voxel/figure/head/undead/male.vox index b843358682..e28b12e47d 100644 --- a/assets/voxygen/voxel/figure/head/undead/male.vox +++ b/assets/voxygen/voxel/figure/head/undead/male.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7a881c157cd16c49e0bdcee82308a563f38d88d1d4061defed1c4580225e31e4 -size 57499 +oid sha256:d1cb58732a4086bf5f48f727d800de2bed3230b87c975f38dbc30044715fb3eb +size 3016 diff --git a/assets/voxygen/voxel/fixture/selection_bg.vox b/assets/voxygen/voxel/fixture/selection_bg.vox index 52af3cfac2..ad322ea087 100644 --- a/assets/voxygen/voxel/fixture/selection_bg.vox +++ b/assets/voxygen/voxel/fixture/selection_bg.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1ecf2cfd0b8dee28998263b4e823b9175906d724ff053d0f7c7c95f7cd427865 -size 650331 +oid sha256:cf4c380f75e788fe67c6f3673e0c638eb4ff467f512b73a6a57dd371e0c14ef8 +size 595564 diff --git a/assets/voxygen/voxel/humanoid_armor_belt_manifest.ron b/assets/voxygen/voxel/humanoid_armor_belt_manifest.ron index 393fd07bad..10fd3396d4 100644 --- a/assets/voxygen/voxel/humanoid_armor_belt_manifest.ron +++ b/assets/voxygen/voxel/humanoid_armor_belt_manifest.ron @@ -1,10 +1,52 @@ -({ - Dark:( - vox_spec: ("armor.belt.dark", (-4.0, -3.5, 2.0)), +(( + default:( + vox_spec: ("armor.belt.belt_none", (-5.0, -3.5, 2.0)), color: None ), - Cloth:( - vox_spec: ("armor.belt.cloth_turq", (-4.0, -3.5, -6.0)), - color: None - ) -}) \ No newline at end of file + map: { + Dark:( + vox_spec: ("armor.belt.dark", (-4.0, -3.5, 2.0)), + color: None + ), + TurqCloth:( + vox_spec: ("armor.belt.cloth_turq", (-4.0, -3.5, -6.0)), + color: None + ), + BloodCloth:( + vox_spec: ("armor.belt.cloth_blood", (-4.0, -3.5, -6.0)), + color: Some((29, 26, 33)) + ), + BlackCloth:( + vox_spec: ("armor.belt.cloth_black", (-4.0, -3.5, -6.0)), + color: Some((29, 26, 33)) + ), + Assassin:( + vox_spec: ("armor.belt.assa", (-5.0, -3.5, 2.0)), + color: None + ), + Dark:( + vox_spec: ("armor.belt.dark", (-4.0, -3.5, 2.0)), + color: None + ), + Plate0:( + vox_spec: ("armor.belt.plate-0", (-5.0, -3.5, 2.0)), + color: None + ), + Leather0:( + vox_spec: ("armor.belt.leather-0", (-5.0, -3.5, 2.0)), + color: None + ), + ClothPurple0:( + vox_spec: ("armor.belt.cloth_purple-0", (-5.0, -3.5, 2.0)), + color: None + ), + ClothBlue0:( + vox_spec: ("armor.belt.cloth_blue-0", (-5.0, -3.5, 2.0)), + color: None + ), + ClothGreen0:( + vox_spec: ("armor.belt.cloth_green-0", (-5.0, -3.5, 2.0)), + color: None + ), + }, +)) diff --git a/assets/voxygen/voxel/humanoid_armor_chest_manifest.ron b/assets/voxygen/voxel/humanoid_armor_chest_manifest.ron index 651e5364c3..a311ef9ae7 100644 --- a/assets/voxygen/voxel/humanoid_armor_chest_manifest.ron +++ b/assets/voxygen/voxel/humanoid_armor_chest_manifest.ron @@ -1,30 +1,60 @@ -({ - Blue: ( - vox_spec: ("armor.chest.grayscale", (-7.0, -3.5, 2.0)), - color: Some((44, 74, 109)) - ), - Brown: ( - vox_spec: ("armor.chest.grayscale", (-7.0, -3.5, 2.0)), - color: Some((90, 49, 43)) - ), - Dark: ( - vox_spec: ("armor.chest.grayscale", (-7.0, -3.5, 2.0)), - color: Some((73, 63, 59)) - ), - Green: ( - vox_spec: ("armor.chest.grayscale", (-7.0, -3.5, 2.0)), - color: Some((59, 95, 67)) - ), - Orange: ( - vox_spec: ("armor.chest.grayscale", (-7.0, -3.5, 2.0)), - color: Some((109, 58, 58)) - ), - Midnight: ( - vox_spec: ("armor.chest.grayscale", (-7.0, -3.5, 2.0)), - color: Some((29, 26, 33)) - ), - Kimono: ( - vox_spec: ("armor.chest.cloth_red_kimono", (-7.0, -3.5, 2.0)), +(( + default: ( + vox_spec: ("armor.chest.chest_none", (-7.0, -3.5, 2.0)), color: None - ) -}) \ No newline at end of file + ), + map: { + Blue: ( + vox_spec: ("armor.chest.grayscale", (-7.0, -3.5, 2.0)), + color: Some((44, 74, 109)) + ), + Brown: ( + vox_spec: ("armor.chest.grayscale", (-7.0, -3.5, 2.0)), + color: Some((90, 49, 43)) + ), + Dark: ( + vox_spec: ("armor.chest.grayscale", (-7.0, -3.5, 2.0)), + color: Some((73, 63, 59)) + ), + Green: ( + vox_spec: ("armor.chest.grayscale", (-7.0, -3.5, 2.0)), + color: Some((59, 95, 67)) + ), + Orange: ( + vox_spec: ("armor.chest.grayscale", (-7.0, -3.5, 2.0)), + color: Some((109, 58, 58)) + ), + Midnight: ( + vox_spec: ("armor.chest.grayscale", (-7.0, -3.5, 2.0)), + color: Some((29, 26, 33)) + ), + Assassin: ( + vox_spec: ("armor.chest.assa", (-7.0, -3.5, 2.0)), + color: None + ), + Kimono: ( + vox_spec: ("armor.chest.cloth_red_kimono", (-7.0, -3.5, 2.0)), + color: None + ), + PlateGreen0: ( + vox_spec: ("armor.chest.plate_green-0", (-7.0, -3.5, 2.0)), + color: None + ), + Leather0: ( + vox_spec: ("armor.chest.leather-0", (-7.0, -3.5, 2.0)), + color: None + ), + ClothPurple0:( + vox_spec: ("armor.chest.cloth_purple-0", (-7.0, -3.5, 1.0)), + color: None + ), + ClothBlue0:( + vox_spec: ("armor.chest.cloth_blue-0", (-7.0, -3.5, 1.0)), + color: None + ), + ClothGreen0:( + vox_spec: ("armor.chest.cloth_green-0", (-7.0, -3.5, 1.0)), + color: None + ), + }, +)) diff --git a/assets/voxygen/voxel/humanoid_armor_foot_manifest.ron b/assets/voxygen/voxel/humanoid_armor_foot_manifest.ron index 77ccd35b65..99f2e8580e 100644 --- a/assets/voxygen/voxel/humanoid_armor_foot_manifest.ron +++ b/assets/voxygen/voxel/humanoid_armor_foot_manifest.ron @@ -1,19 +1,44 @@ -({ - //This shouldn't be bare, but what is? - Bare: ( - vox_spec: ("armor.foot.cloth_sandals", (-2.5, -3.5, -9.0)), +(( + default: ( + vox_spec: ("armor.foot.foot_none", (-2.5, -3.5, -9.0)), color: None ), - Dark: ( - vox_spec: ("armor.foot.dark-0", (-2.5, -3.5, -9.0)), - color: None - ), - Sandal: ( - vox_spec: ("armor.foot.cloth_sandals", (-2.5, -2.5, -9.0)), - color: None - ), - Jester: ( - vox_spec: ("armor.foot.dark_jester-elf_shoe", (-2.5, -3.0, -9.0)), - color: None - ) -}) \ No newline at end of file + map: { + Dark: ( + vox_spec: ("armor.foot.dark-0", (-2.5, -3.5, -9.0)), + color: None + ), + Assassin: ( + vox_spec: ("armor.foot.assa", (-2.5, -3.5, -9.0)), + color: None + ), + Sandal: ( + vox_spec: ("armor.foot.cloth_sandals", (-2.5, -2.5, -9.0)), + color: None + ), + Jester: ( + vox_spec: ("armor.foot.dark_jester-elf_shoe", (-2.5, -3.0, -9.0)), + color: None + ), + Plate0: ( + vox_spec: ("armor.foot.plate-0", (-2.5, -3.5, -9.0)), + color: None + ), + Leather0: ( + vox_spec: ("armor.foot.leather-0", (-2.5, -3.5, -9.0)), + color: None + ), + ClothPurple0:( + vox_spec: ("armor.foot.cloth_purple-0", (-2.5, -3.5, -9.0)), + color: None + ), + ClothBlue0:( + vox_spec: ("armor.foot.cloth_blue-0", (-2.5, -3.5, -9.0)), + color: None + ), + ClothGreen0:( + vox_spec: ("armor.foot.cloth_green-0", (-2.5, -3.5, -9.0)), + color: None + ), + }, +)) diff --git a/assets/voxygen/voxel/humanoid_armor_hand_manifest.ron b/assets/voxygen/voxel/humanoid_armor_hand_manifest.ron index 897d6a8a66..bb6f5fcb47 100644 --- a/assets/voxygen/voxel/humanoid_armor_hand_manifest.ron +++ b/assets/voxygen/voxel/humanoid_armor_hand_manifest.ron @@ -1,22 +1,84 @@ -({ - Bare: ( +(( + default: ( left: ( - vox_spec: ("armor.hand.bare_left", (-1.5, -1.5, -7.0)), + vox_spec: ("armor.hand.hand_right_none", (-1.5, -1.5, -7.0)), color: None ), right: ( - vox_spec: ("armor.hand.bare_right", (-1.5, -1.5, -7.0)), + vox_spec: ("armor.hand.hand_right_none", (-1.5, -1.5, -7.0)), color: None ) ), - Cloth: ( - left: ( - vox_spec: ("armor.hand.cloth_basic_left", (-1.5, -1.5, -7.0)), - color: None + map: { + Assassin: ( + left: ( + vox_spec: ("armor.hand.assa_right", (-1.5, -1.5, -7.0)), + color: None + ), + right: ( + vox_spec: ("armor.hand.assa_right", (-1.5, -1.5, -7.0)), + color: None + ) ), - right: ( - vox_spec: ("armor.hand.cloth_basic_right", (-1.5, -1.5, -7.0)), - color: None - ) - ) -}) \ No newline at end of file + Cloth: ( + left: ( + vox_spec: ("armor.hand.cloth_basic_right", (-1.5, -1.5, -7.0)), + color: None + ), + right: ( + vox_spec: ("armor.hand.cloth_basic_right", (-1.5, -1.5, -7.0)), + color: None + ) + ), + Plate0: ( + left: ( + vox_spec: ("armor.hand.plate_right-0", (-1.5, -1.5, -7.0)), + color: None + ), + right: ( + vox_spec: ("armor.hand.plate_right-0", (-1.5, -1.5, -7.0)), + color: None + ) + ), + Leather0: ( + left: ( + vox_spec: ("armor.hand.leather_right-0", (-1.5, -1.5, -7.0)), + color: None + ), + right: ( + vox_spec: ("armor.hand.leather_right-0", (-1.5, -1.5, -7.0)), + color: None + ) + ), + ClothPurple0: ( + left: ( + vox_spec: ("armor.hand.cloth_purple_right-0", (-1.5, -1.5, -7.0)), + color: None + ), + right: ( + vox_spec: ("armor.hand.cloth_purple_right-0", (-1.5, -1.5, -7.0)), + color: None + ) + ), + ClothBlue0: ( + left: ( + vox_spec: ("armor.hand.cloth_blue_right-0", (-1.5, -1.5, -7.0)), + color: None + ), + right: ( + vox_spec: ("armor.hand.cloth_blue_right-0", (-1.5, -1.5, -7.0)), + color: None + ) + ), + ClothGreen0: ( + left: ( + vox_spec: ("armor.hand.cloth_green_right-0", (-1.5, -1.5, -7.0)), + color: None + ), + right: ( + vox_spec: ("armor.hand.cloth_green_right-0", (-1.5, -1.5, -7.0)), + color: None + ) + ), + }, +)) diff --git a/assets/voxygen/voxel/humanoid_armor_pants_manifest.ron b/assets/voxygen/voxel/humanoid_armor_pants_manifest.ron index 3e7810448f..8d04e54fa2 100644 --- a/assets/voxygen/voxel/humanoid_armor_pants_manifest.ron +++ b/assets/voxygen/voxel/humanoid_armor_pants_manifest.ron @@ -1,26 +1,56 @@ -({ - Blue: ( - vox_spec: ("armor.pants.grayscale", (-5.0, -3.5, 1.0)), +(( + default: ( + vox_spec: ("armor.pants.pants_none", (-5.0, -3.5, 1.0)), color: Some((28, 66, 109)) ), - Brown: ( - vox_spec: ("armor.pants.grayscale", (-5.0, -3.5, 1.0)), - color: Some((54, 30, 26)) - ), - Dark: ( - vox_spec: ("armor.pants.grayscale", (-5.0, -3.5, 1.0)), - color: Some((24, 19, 17)) - ), - Green: ( - vox_spec: ("armor.pants.grayscale", (-5.0, -3.5, 1.0)), - color: Some((49, 95, 59)) - ), - Orange: ( - vox_spec: ("armor.pants.grayscale", (-5.0, -3.5, 1.0)), - color: Some((148, 52, 33)) - ), - Kimono: ( - vox_spec: ("armor.pants.cloth_red_kimono", (-5.0, -3.5, 1.0)), - color: None - ) -}) \ No newline at end of file + map: { + Blue: ( + vox_spec: ("armor.pants.grayscale", (-5.0, -3.5, 1.0)), + color: Some((28, 66, 109)) + ), + Brown: ( + vox_spec: ("armor.pants.grayscale", (-5.0, -3.5, 1.0)), + color: Some((54, 30, 26)) + ), + Dark: ( + vox_spec: ("armor.pants.grayscale", (-5.0, -3.5, 1.0)), + color: Some((24, 19, 17)) + ), + Green: ( + vox_spec: ("armor.pants.grayscale", (-5.0, -3.5, 1.0)), + color: Some((49, 95, 59)) + ), + Orange: ( + vox_spec: ("armor.pants.grayscale", (-5.0, -3.5, 1.0)), + color: Some((148, 52, 33)) + ), + Assassin: ( + vox_spec: ("armor.pants.assa", (-5.0, -3.5, 1.0)), + color: None + ), + Kimono: ( + vox_spec: ("armor.pants.cloth_red_kimono", (-5.0, -3.5, 0.0)), + color: None + ), + PlateGreen0: ( + vox_spec: ("armor.pants.plate_green-0", (-5.0, -3.5, 1.0)), + color: None + ), + Leather0: ( + vox_spec: ("armor.pants.leather-0", (-5.0, -3.5, 1.0)), + color: None + ), + ClothPurple0:( + vox_spec: ("armor.pants.cloth_purple-0", (-5.0, -3.5, 0.0)), + color: None + ), + ClothBlue0:( + vox_spec: ("armor.pants.cloth_blue-0", (-5.0, -3.5, 0.0)), + color: None + ), + ClothGreen0:( + vox_spec: ("armor.pants.cloth_green-0", (-5.0, -3.5, 0.0)), + color: None + ), + }, +)) diff --git a/assets/voxygen/voxel/humanoid_armor_shoulder_manifest.ron b/assets/voxygen/voxel/humanoid_armor_shoulder_manifest.ron index 7d4722990e..9789b7292b 100644 --- a/assets/voxygen/voxel/humanoid_armor_shoulder_manifest.ron +++ b/assets/voxygen/voxel/humanoid_armor_shoulder_manifest.ron @@ -1,33 +1,115 @@ -({ +(( //This shouldn't be the none option, but what is? - None: ( + default: ( left: ( - vox_spec: ("armor.empty", (-3.0, -3.5, 0.1)), + vox_spec: ("armor.empty", (-3.0, -3.5, 1.0)), color: None ), right: ( - vox_spec: ("armor.empty", (-2.0, -3.5, 0.1)), + vox_spec: ("armor.empty", (-2.0, -3.5, 1.0)), color: None ) ), - Brown1: ( - left: ( - vox_spec: ("armor.shoulder.brown_left", (-3.0, -3.5, 0.1)), - color: None + map: { + Brown1: ( + left: ( + vox_spec: ("armor.shoulder.brown_right", (-3.0, -3.5, 1.0)), + color: None + ), + right: ( + vox_spec: ("armor.shoulder.brown_right", (-2.0, -3.5, 1.0)), + color: None + ) ), - right: ( - vox_spec: ("armor.shoulder.brown_right", (-2.0, -3.5, 0.1)), - color: None - ) - ), - Chain: ( - left: ( - vox_spec: ("armor.shoulder.chain_left-1", (-4.0, -3.5, 0.1)), - color: None + Assassin: ( + left: ( + vox_spec: ("armor.shoulder.assa_right", (-4.0, -3.5, 1.0)), + color: None + ), + right: ( + vox_spec: ("armor.shoulder.assa_right", (-2.0, -3.5, 1.0)), + color: None + ) ), - right: ( - vox_spec: ("armor.shoulder.chain_right-1", (-2.0, -3.5, 0.1)), - color: None - ) - ) -}) \ No newline at end of file + Assassin: ( + left: ( + vox_spec: ("armor.shoulder.assa_right", (-4.0, -3.5, 1.0)), + color: None + ), + right: ( + vox_spec: ("armor.shoulder.assa_right", (-2.0, -3.5, 1.0)), + color: None + ) + ), + Chain: ( + left: ( + vox_spec: ("armor.shoulder.chain_right-1", (-4.0, -3.5, 1.0)), + color: None + ), + right: ( + vox_spec: ("armor.shoulder.chain_right-1", (-2.0, -3.5, 1.0)), + color: None + ) + ), + Plate0: ( + left: ( + vox_spec: ("armor.shoulder.plate_right-0", (-3.6, -3.5, 1.0)), + color: None + ), + right: ( + vox_spec: ("armor.shoulder.plate_right-0", (-2.6, -3.5, 1.0)), + color: None + ) + ), + Leather0: ( + left: ( + vox_spec: ("armor.shoulder.leather_right-0", (-3.2, -3.5, 1.0)), + color: None + ), + right: ( + vox_spec: ("armor.shoulder.leather_right-0", (-1.8, -3.5, 1.0)), + color: None + ) + ), + Leather1: ( + left: ( + vox_spec: ("armor.shoulder.leather_right-1", (-3.6, -4.5, 1.0)), + color: None + ), + right: ( + vox_spec: ("armor.shoulder.leather_right-1", (-2.6, -4.5, 1.0)), + color: None + ) + ), + ClothPurple0: ( + left: ( + vox_spec: ("armor.shoulder.cloth_purple_right-0", (-3.2, -3.5, 1.0)), + color: None + ), + right: ( + vox_spec: ("armor.shoulder.cloth_purple_right-0", (-1.8, -3.5, 1.0)), + color: None + ) + ), + ClothBlue0: ( + left: ( + vox_spec: ("armor.shoulder.cloth_blue_left-0", (-3.2, -3.5, 1.0)), + color: None + ), + right: ( + vox_spec: ("armor.shoulder.cloth_blue_right-0", (-1.8, -3.5, 1.0)), + color: None + ) + ), + ClothGreen0: ( + left: ( + vox_spec: ("armor.shoulder.cloth_green_left-0", (-3.2, -3.5, 1.0)), + color: None + ), + right: ( + vox_spec: ("armor.shoulder.cloth_green_right-0", (-1.8, -3.5, 1.0)), + color: None + ) + ), + }, +)) diff --git a/assets/voxygen/voxel/humanoid_head_manifest.ron b/assets/voxygen/voxel/humanoid_head_manifest.ron index 9e67fcb95b..ea061ff7f2 100644 --- a/assets/voxygen/voxel/humanoid_head_manifest.ron +++ b/assets/voxygen/voxel/humanoid_head_manifest.ron @@ -266,4 +266,4 @@ Some(("figure.accessory.danari.horns-0", (4, 9, 8))),] ), // More here -}) \ No newline at end of file +}) diff --git a/assets/voxygen/voxel/humanoid_main_weapon_manifest.ron b/assets/voxygen/voxel/humanoid_main_weapon_manifest.ron new file mode 100644 index 0000000000..5a689b103d --- /dev/null +++ b/assets/voxygen/voxel/humanoid_main_weapon_manifest.ron @@ -0,0 +1,58 @@ +({ + Sword(BasicSword): ( + vox_spec: ("weapon.sword.rusty_2h", (-1.5, -6.5, -4.0)), + color: None + ), + Sword(Rapier): ( + vox_spec: ("weapon.sword.rusty_2h", (-1.5, -6.5, -4.0)), + color: None + ), + Sword(WoodTraining): ( + vox_spec: ("weapon.sword.wood_2h", (-1.5, -6.5, -4.0)), + color: None + ), + Sword(Zweihander0): ( + vox_spec: ("weapon.sword.zweihander_2h-0", (-1.5, -6.5, -4.0)), + color: None + ), + Sword(Short0): ( + vox_spec: ("weapon.sword.short_2h-0", (-1.5, -6.5, -1.0)), + color: None + ), + Axe(BasicAxe): ( + vox_spec: ("weapon.axe.rusty_2h", (-1.5, -5.0, -4.0)), + color: None + ), + Hammer(BasicHammer): ( + vox_spec: ("weapon.hammer.rusty_2h", (-2.5, -5.5, -4.0)), + color: None + ), + Dagger(BasicDagger): ( + vox_spec: ("weapon.hammer.rusty_2h", (-2.5, -5.5, -4.0)), // TODO + color: None + ), + Shield(BasicShield): ( + vox_spec: ("weapon.shield.wood-0", (-2.5, -6.5, -2.0)), + color: None + ), + Bow(BasicBow): ( + vox_spec: ("weapon.bow.simple-bow", (-1.0, -6.0, -2.0)), + color: None + ), + Staff(BasicStaff): ( + vox_spec: ("weapon.staff.wood-fire", (-1.0, -6.0, -3.0)), + color: None + ), + Staff(Sceptre): ( + vox_spec: ("weapon.staff.wood-nature", (-1.0, -6.0, -5.0)), + color: None + ), + Debug(Boost): ( + vox_spec: ("weapon.debug_wand", (-1.5, -9.5, -4.0)), + color: None + ), + Debug(Possess): ( + vox_spec: ("weapon.debug_wand", (-1.5, -9.5, -4.0)), + color: None + ), +}) diff --git a/assets/voxygen/voxel/npc/eagle/female/leg_l.vox b/assets/voxygen/voxel/npc/eagle/female/leg_l.vox index 38e5e2c5c6..31b8befb4f 100644 --- a/assets/voxygen/voxel/npc/eagle/female/leg_l.vox +++ b/assets/voxygen/voxel/npc/eagle/female/leg_l.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b6e82c2c806c245f8fdebb830b0763a1aa796593c041ad4ace556c8e413f5aa9 -size 55651 +oid sha256:30a26bcede8cd210e71cc743ce08cc29ff76df8b55be39ca81ba1ac93d20d909 +size 1168 diff --git a/assets/voxygen/voxel/npc/eagle/female/leg_r.vox b/assets/voxygen/voxel/npc/eagle/female/leg_r.vox index a2ec2f7233..fdf449ec92 100644 --- a/assets/voxygen/voxel/npc/eagle/female/leg_r.vox +++ b/assets/voxygen/voxel/npc/eagle/female/leg_r.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7ecb3129efdb691a6b81d691bd34e01920bf0c9703d9e76bd6fafaeac978146f -size 55651 +oid sha256:e5bda2e9383f59ec4317f8e3c57175fe2acafa5a067fa8c9c1eef9e4650fef46 +size 1168 diff --git a/assets/voxygen/voxel/npc/eagle/female/tail.vox b/assets/voxygen/voxel/npc/eagle/female/tail.vox index f7bfb10410..1d805965b7 100644 --- a/assets/voxygen/voxel/npc/eagle/female/tail.vox +++ b/assets/voxygen/voxel/npc/eagle/female/tail.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:10fe121790e8434a04bcfc1288693d8ac30171aa991a15e7533fcb62290e2368 -size 55675 +oid sha256:615dc2933805af3f0be6241021305ef5da3490d28e3774bf83d8030e5ef966db +size 1192 diff --git a/assets/voxygen/voxel/npc/eagle/female/torso.vox b/assets/voxygen/voxel/npc/eagle/female/torso.vox index c299b03331..17a4a09ea4 100644 --- a/assets/voxygen/voxel/npc/eagle/female/torso.vox +++ b/assets/voxygen/voxel/npc/eagle/female/torso.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0f2df57bf231b5cdf34ce748f51394bc5fa67fff021244408babd2fbb40ce7f3 -size 56619 +oid sha256:8a7bf5e7a20fc8b2a924eee317123760f9ceba4f714e1a5ad6e34735111b634c +size 2136 diff --git a/assets/voxygen/voxel/npc/eagle/female/wing_l.vox b/assets/voxygen/voxel/npc/eagle/female/wing_l.vox index c989207c3c..71dbf9a9b8 100644 --- a/assets/voxygen/voxel/npc/eagle/female/wing_l.vox +++ b/assets/voxygen/voxel/npc/eagle/female/wing_l.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e9c4bc7aac5811e9189116501858b5a1cf12187e6e08d6798e6810c04154ffdf -size 56027 +oid sha256:5a8c4852cb663caf77805a111f8b4d8ae27b17bf5819e281d3f1b3d6f0866250 +size 1532 diff --git a/assets/voxygen/voxel/npc/eagle/female/wing_r.vox b/assets/voxygen/voxel/npc/eagle/female/wing_r.vox index b2aa360724..53ddbe5680 100644 --- a/assets/voxygen/voxel/npc/eagle/female/wing_r.vox +++ b/assets/voxygen/voxel/npc/eagle/female/wing_r.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:65369f781827ace2267b450a5c40027748f1077a1245d5493c166571349af727 -size 56027 +oid sha256:4a9efd962517729b3aaedebf4d8bb08914885670edd5fbb134f49f28cf837c2f +size 1532 diff --git a/assets/voxygen/voxel/npc/eagle/male/leg_l.vox b/assets/voxygen/voxel/npc/eagle/male/leg_l.vox index 38e5e2c5c6..31b8befb4f 100644 --- a/assets/voxygen/voxel/npc/eagle/male/leg_l.vox +++ b/assets/voxygen/voxel/npc/eagle/male/leg_l.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b6e82c2c806c245f8fdebb830b0763a1aa796593c041ad4ace556c8e413f5aa9 -size 55651 +oid sha256:30a26bcede8cd210e71cc743ce08cc29ff76df8b55be39ca81ba1ac93d20d909 +size 1168 diff --git a/assets/voxygen/voxel/npc/eagle/male/leg_r.vox b/assets/voxygen/voxel/npc/eagle/male/leg_r.vox index a2ec2f7233..fdf449ec92 100644 --- a/assets/voxygen/voxel/npc/eagle/male/leg_r.vox +++ b/assets/voxygen/voxel/npc/eagle/male/leg_r.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7ecb3129efdb691a6b81d691bd34e01920bf0c9703d9e76bd6fafaeac978146f -size 55651 +oid sha256:e5bda2e9383f59ec4317f8e3c57175fe2acafa5a067fa8c9c1eef9e4650fef46 +size 1168 diff --git a/assets/voxygen/voxel/npc/eagle/male/tail.vox b/assets/voxygen/voxel/npc/eagle/male/tail.vox index f7bfb10410..1d805965b7 100644 --- a/assets/voxygen/voxel/npc/eagle/male/tail.vox +++ b/assets/voxygen/voxel/npc/eagle/male/tail.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:10fe121790e8434a04bcfc1288693d8ac30171aa991a15e7533fcb62290e2368 -size 55675 +oid sha256:615dc2933805af3f0be6241021305ef5da3490d28e3774bf83d8030e5ef966db +size 1192 diff --git a/assets/voxygen/voxel/npc/eagle/male/torso.vox b/assets/voxygen/voxel/npc/eagle/male/torso.vox index c299b03331..17a4a09ea4 100644 --- a/assets/voxygen/voxel/npc/eagle/male/torso.vox +++ b/assets/voxygen/voxel/npc/eagle/male/torso.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0f2df57bf231b5cdf34ce748f51394bc5fa67fff021244408babd2fbb40ce7f3 -size 56619 +oid sha256:8a7bf5e7a20fc8b2a924eee317123760f9ceba4f714e1a5ad6e34735111b634c +size 2136 diff --git a/assets/voxygen/voxel/npc/eagle/male/wing_l.vox b/assets/voxygen/voxel/npc/eagle/male/wing_l.vox index c989207c3c..71dbf9a9b8 100644 --- a/assets/voxygen/voxel/npc/eagle/male/wing_l.vox +++ b/assets/voxygen/voxel/npc/eagle/male/wing_l.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e9c4bc7aac5811e9189116501858b5a1cf12187e6e08d6798e6810c04154ffdf -size 56027 +oid sha256:5a8c4852cb663caf77805a111f8b4d8ae27b17bf5819e281d3f1b3d6f0866250 +size 1532 diff --git a/assets/voxygen/voxel/npc/eagle/male/wing_r.vox b/assets/voxygen/voxel/npc/eagle/male/wing_r.vox index b2aa360724..53ddbe5680 100644 --- a/assets/voxygen/voxel/npc/eagle/male/wing_r.vox +++ b/assets/voxygen/voxel/npc/eagle/male/wing_r.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:65369f781827ace2267b450a5c40027748f1077a1245d5493c166571349af727 -size 56027 +oid sha256:4a9efd962517729b3aaedebf4d8bb08914885670edd5fbb134f49f28cf837c2f +size 1532 diff --git a/assets/voxygen/voxel/npc/oger/hand-l.vox b/assets/voxygen/voxel/npc/oger/hand-l.vox index 605d6363f9..bdccb7e17c 100644 --- a/assets/voxygen/voxel/npc/oger/hand-l.vox +++ b/assets/voxygen/voxel/npc/oger/hand-l.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:64beb9f9cabf9cd887b8fe7d6323bdf0908063359809e2c18da58733fb9b82bc -size 44439 +oid sha256:08ccc11c9c68ab06d320a75f9e90edb9f969e31c3935c2effec650065642a6da +size 1332 diff --git a/assets/voxygen/voxel/npc/wolf/female/ears.vox b/assets/voxygen/voxel/npc/wolf/female/ears.vox index b7c6231844..4b24762f6f 100644 --- a/assets/voxygen/voxel/npc/wolf/female/ears.vox +++ b/assets/voxygen/voxel/npc/wolf/female/ears.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:85da6b879004886b43a159a04b65417ab5d2ce7025f40ddf840f6a6099bd7e0a -size 44307 +oid sha256:91cf8e0b2c7598c5aff97e7c5e298b72ca3d4c1bb856e3aa27f4da069851cde6 +size 1200 diff --git a/assets/voxygen/voxel/npc/wolf/female/foot_lf.vox b/assets/voxygen/voxel/npc/wolf/female/foot_lf.vox index 7c5c2e8b64..647177db46 100644 --- a/assets/voxygen/voxel/npc/wolf/female/foot_lf.vox +++ b/assets/voxygen/voxel/npc/wolf/female/foot_lf.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9f24f04d38cceb52344d33de69baeead27cb50fec15c6ef80d6115a4be6a419f -size 44451 +oid sha256:c95b0a86d6e29ba1235df27cf3f9f9807fe69b1725f005e197b3283075d858af +size 1344 diff --git a/assets/voxygen/voxel/npc/wolf/female/foot_rf.vox b/assets/voxygen/voxel/npc/wolf/female/foot_rf.vox index 5473932907..bed2196da8 100644 --- a/assets/voxygen/voxel/npc/wolf/female/foot_rf.vox +++ b/assets/voxygen/voxel/npc/wolf/female/foot_rf.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a0e5984c410c1cf6891ae966541e25eb19ffefb56a2bf82d0d762c9d4b5464b0 -size 44451 +oid sha256:5280204a15fcc66257d5240c2a31f93ef6a081b9bd2195d1cf89cd9199cd1bfb +size 1344 diff --git a/assets/voxygen/voxel/npc/wolf/female/head_lower.vox b/assets/voxygen/voxel/npc/wolf/female/head_lower.vox index 51bfcf9e2d..fccf4fecdf 100644 --- a/assets/voxygen/voxel/npc/wolf/female/head_lower.vox +++ b/assets/voxygen/voxel/npc/wolf/female/head_lower.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:77d567a024aabc463b938e662f0340d1d88a62686950e12cdd583039fd32b893 -size 46691 +oid sha256:c4b4b8ebb5db40ffbb8007c07cd832132ab18153f3aeeefb6c10638317e5d5bd +size 3584 diff --git a/assets/voxygen/voxel/npc/wolf/female/head_upper.vox b/assets/voxygen/voxel/npc/wolf/female/head_upper.vox index f750396fb1..61236f7f75 100644 --- a/assets/voxygen/voxel/npc/wolf/female/head_upper.vox +++ b/assets/voxygen/voxel/npc/wolf/female/head_upper.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:649ef3c87c3505e8599c75726236ff8e9d13caedd0bdec1155bd437cb486425f -size 47755 +oid sha256:8a7af96a369d3e9c94f331738360dab9bcc72feaa3bc5bb40771a908338ed6c9 +size 4648 diff --git a/assets/voxygen/voxel/npc/wolf/female/jaw.vox b/assets/voxygen/voxel/npc/wolf/female/jaw.vox index df6a3470b6..e7b1e1b2b6 100644 --- a/assets/voxygen/voxel/npc/wolf/female/jaw.vox +++ b/assets/voxygen/voxel/npc/wolf/female/jaw.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3190632201cc65f1a57b944cc07fd182ae3eceec2fc2852ffb3da3cd1a02d53e -size 44387 +oid sha256:9ad7e4b713398aa999a59718ed00363b1fd77e211dc5fef292a697f4eb873e69 +size 1280 diff --git a/assets/voxygen/voxel/npc/wolf/female/tail.vox b/assets/voxygen/voxel/npc/wolf/female/tail.vox index 3cbae3bb41..7fccdc8c1d 100644 --- a/assets/voxygen/voxel/npc/wolf/female/tail.vox +++ b/assets/voxygen/voxel/npc/wolf/female/tail.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:25d41aef2c2b86c287b46ba301c8009c010750fa6c892e778ba76605c7055544 -size 44779 +oid sha256:51f6077b009e3b66cb96b536780f3219bb4cdab8ba1584700c1e3febedc93161 +size 1672 diff --git a/assets/voxygen/voxel/npc/wolf/female/torso_back.vox b/assets/voxygen/voxel/npc/wolf/female/torso_back.vox index fbcf070931..f943384c01 100644 --- a/assets/voxygen/voxel/npc/wolf/female/torso_back.vox +++ b/assets/voxygen/voxel/npc/wolf/female/torso_back.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:393e513cb20d41b71e093a782938b33ed1dae801e19875342b2db72c5e964782 -size 48667 +oid sha256:13613d30abe1f4c3fadd57dc726a010e93c3e831a36ad5e374974d167f0bc161 +size 5560 diff --git a/assets/voxygen/voxel/npc/wolf/female/torso_front.vox b/assets/voxygen/voxel/npc/wolf/female/torso_front.vox index d2e23b9d34..0bfd40e870 100644 --- a/assets/voxygen/voxel/npc/wolf/female/torso_front.vox +++ b/assets/voxygen/voxel/npc/wolf/female/torso_front.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0c555e7dd857f908b787a53118d17d908a96762e3fe10f63a692d2969ac67eb5 -size 48863 +oid sha256:9146b97a1d8f3a9e1574c9aecfe7561b900dfa23bb3ceefe267c50a98c78d937 +size 5756 diff --git a/assets/voxygen/voxel/npc/wolf/male/ears.vox b/assets/voxygen/voxel/npc/wolf/male/ears.vox index b7c6231844..4b24762f6f 100644 --- a/assets/voxygen/voxel/npc/wolf/male/ears.vox +++ b/assets/voxygen/voxel/npc/wolf/male/ears.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:85da6b879004886b43a159a04b65417ab5d2ce7025f40ddf840f6a6099bd7e0a -size 44307 +oid sha256:91cf8e0b2c7598c5aff97e7c5e298b72ca3d4c1bb856e3aa27f4da069851cde6 +size 1200 diff --git a/assets/voxygen/voxel/npc/wolf/male/foot_lf.vox b/assets/voxygen/voxel/npc/wolf/male/foot_lf.vox index 7c5c2e8b64..647177db46 100644 --- a/assets/voxygen/voxel/npc/wolf/male/foot_lf.vox +++ b/assets/voxygen/voxel/npc/wolf/male/foot_lf.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9f24f04d38cceb52344d33de69baeead27cb50fec15c6ef80d6115a4be6a419f -size 44451 +oid sha256:c95b0a86d6e29ba1235df27cf3f9f9807fe69b1725f005e197b3283075d858af +size 1344 diff --git a/assets/voxygen/voxel/npc/wolf/male/foot_rf.vox b/assets/voxygen/voxel/npc/wolf/male/foot_rf.vox index 5473932907..bed2196da8 100644 --- a/assets/voxygen/voxel/npc/wolf/male/foot_rf.vox +++ b/assets/voxygen/voxel/npc/wolf/male/foot_rf.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a0e5984c410c1cf6891ae966541e25eb19ffefb56a2bf82d0d762c9d4b5464b0 -size 44451 +oid sha256:5280204a15fcc66257d5240c2a31f93ef6a081b9bd2195d1cf89cd9199cd1bfb +size 1344 diff --git a/assets/voxygen/voxel/npc/wolf/male/head_lower.vox b/assets/voxygen/voxel/npc/wolf/male/head_lower.vox index 51bfcf9e2d..fccf4fecdf 100644 --- a/assets/voxygen/voxel/npc/wolf/male/head_lower.vox +++ b/assets/voxygen/voxel/npc/wolf/male/head_lower.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:77d567a024aabc463b938e662f0340d1d88a62686950e12cdd583039fd32b893 -size 46691 +oid sha256:c4b4b8ebb5db40ffbb8007c07cd832132ab18153f3aeeefb6c10638317e5d5bd +size 3584 diff --git a/assets/voxygen/voxel/npc/wolf/male/head_upper.vox b/assets/voxygen/voxel/npc/wolf/male/head_upper.vox index f750396fb1..61236f7f75 100644 --- a/assets/voxygen/voxel/npc/wolf/male/head_upper.vox +++ b/assets/voxygen/voxel/npc/wolf/male/head_upper.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:649ef3c87c3505e8599c75726236ff8e9d13caedd0bdec1155bd437cb486425f -size 47755 +oid sha256:8a7af96a369d3e9c94f331738360dab9bcc72feaa3bc5bb40771a908338ed6c9 +size 4648 diff --git a/assets/voxygen/voxel/npc/wolf/male/jaw.vox b/assets/voxygen/voxel/npc/wolf/male/jaw.vox index df6a3470b6..e7b1e1b2b6 100644 --- a/assets/voxygen/voxel/npc/wolf/male/jaw.vox +++ b/assets/voxygen/voxel/npc/wolf/male/jaw.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3190632201cc65f1a57b944cc07fd182ae3eceec2fc2852ffb3da3cd1a02d53e -size 44387 +oid sha256:9ad7e4b713398aa999a59718ed00363b1fd77e211dc5fef292a697f4eb873e69 +size 1280 diff --git a/assets/voxygen/voxel/npc/wolf/male/tail.vox b/assets/voxygen/voxel/npc/wolf/male/tail.vox index 3cbae3bb41..7fccdc8c1d 100644 --- a/assets/voxygen/voxel/npc/wolf/male/tail.vox +++ b/assets/voxygen/voxel/npc/wolf/male/tail.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:25d41aef2c2b86c287b46ba301c8009c010750fa6c892e778ba76605c7055544 -size 44779 +oid sha256:51f6077b009e3b66cb96b536780f3219bb4cdab8ba1584700c1e3febedc93161 +size 1672 diff --git a/assets/voxygen/voxel/npc/wolf/male/torso_back.vox b/assets/voxygen/voxel/npc/wolf/male/torso_back.vox index fbcf070931..f943384c01 100644 --- a/assets/voxygen/voxel/npc/wolf/male/torso_back.vox +++ b/assets/voxygen/voxel/npc/wolf/male/torso_back.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:393e513cb20d41b71e093a782938b33ed1dae801e19875342b2db72c5e964782 -size 48667 +oid sha256:13613d30abe1f4c3fadd57dc726a010e93c3e831a36ad5e374974d167f0bc161 +size 5560 diff --git a/assets/voxygen/voxel/npc/wolf/male/torso_front.vox b/assets/voxygen/voxel/npc/wolf/male/torso_front.vox index d2e23b9d34..0bfd40e870 100644 --- a/assets/voxygen/voxel/npc/wolf/male/torso_front.vox +++ b/assets/voxygen/voxel/npc/wolf/male/torso_front.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0c555e7dd857f908b787a53118d17d908a96762e3fe10f63a692d2969ac67eb5 -size 48863 +oid sha256:9146b97a1d8f3a9e1574c9aecfe7561b900dfa23bb3ceefe267c50a98c78d937 +size 5756 diff --git a/assets/voxygen/voxel/object/anvil.vox b/assets/voxygen/voxel/object/anvil.vox index 5c801a2586..8d3c033b0f 100644 --- a/assets/voxygen/voxel/object/anvil.vox +++ b/assets/voxygen/voxel/object/anvil.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:efa901f8c256ca65e71fd240ab27877839c867276878a4403ca33e3947cc52d6 -size 56637 +oid sha256:6fd553f1bce1b7e69562dab4db0a00a4963e55d89afbbcaa105ce67d8509194b +size 2208 diff --git a/assets/voxygen/voxel/object/bedroll.vox b/assets/voxygen/voxel/object/bedroll.vox index 78562780d5..ac8724c200 100644 --- a/assets/voxygen/voxel/object/bedroll.vox +++ b/assets/voxygen/voxel/object/bedroll.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ae74df38fcbc0ba5e9930db73f06740985bf2ce78258293d66451f64f193a3ad -size 51684 +oid sha256:bdb48ba161538e1da75df41a62eb2755baa716a583b3383421ae84201bb434ba +size 8576 diff --git a/assets/voxygen/voxel/object/bench.vox b/assets/voxygen/voxel/object/bench.vox index 22846826b5..fbf3641a50 100644 --- a/assets/voxygen/voxel/object/bench.vox +++ b/assets/voxygen/voxel/object/bench.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f956ba5f857163cbba699cc497f6d40db3a8ae7ba215b37806daddfc7d43cb5d -size 56305 +oid sha256:c1e904bb8d9382847b11deff551a3e3610f3660de5bec59b64f3c149803088d8 +size 1876 diff --git a/assets/voxygen/voxel/object/bomb.vox b/assets/voxygen/voxel/object/bomb.vox index c0f948ad32..8a7947e5e3 100644 --- a/assets/voxygen/voxel/object/bomb.vox +++ b/assets/voxygen/voxel/object/bomb.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b58a2013132620e61f62ac44708bd7a48edab2a53f7b9afbfc9052815e556ed9 -size 58586 +oid sha256:0b48eb8e678f0a878d65793ae9baacac7d554c7cc6eb7f736eb264bda6f7a1b7 +size 4140 diff --git a/assets/voxygen/voxel/object/campfire_lit.vox b/assets/voxygen/voxel/object/campfire_lit.vox index 12a87b01a5..12f28c3713 100644 --- a/assets/voxygen/voxel/object/campfire_lit.vox +++ b/assets/voxygen/voxel/object/campfire_lit.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:97cf1fa4d3e9545264d435ffe5bfa0f19259bd8114612e175beec900599b34db -size 58944 +oid sha256:dd530e5e53f79f66bbd2269ae2204aefc761c29d8244034216aa93dd9f36d099 +size 4460 diff --git a/assets/voxygen/voxel/object/carpet.vox b/assets/voxygen/voxel/object/carpet.vox index 952eb56040..85a3ebf80e 100644 --- a/assets/voxygen/voxel/object/carpet.vox +++ b/assets/voxygen/voxel/object/carpet.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9f6cec067f42eeced17be10965f24823e1f5e920e564c4d5172481fe5cab461c -size 47340 +oid sha256:145abedf68f9b4dba75f378045ff1e0076a1f011d1b29d1303e9347839c45f91 +size 4232 diff --git a/assets/voxygen/voxel/object/crate.vox b/assets/voxygen/voxel/object/crate.vox index 13c53699a1..77fd5a3e1f 100644 --- a/assets/voxygen/voxel/object/crate.vox +++ b/assets/voxygen/voxel/object/crate.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0ff9a7415ce335019e74384a1da24d0db2bf96d9e2a318b8c6c55c4e1539b2e7 -size 52827 +oid sha256:35c78b9f42ef171ddc9fc26bc64cb0f9f433cd1da44323180cbda40d22b49595 +size 9720 diff --git a/assets/voxygen/voxel/object/door_spooky.vox b/assets/voxygen/voxel/object/door_spooky.vox index 51f8eca2b8..3be4d63b22 100644 --- a/assets/voxygen/voxel/object/door_spooky.vox +++ b/assets/voxygen/voxel/object/door_spooky.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:df6b8d028f0334f37746418b8317de992e1645ad8076eb084e5a210c0753e7cc -size 69180 +oid sha256:71b959f2805d8a26cee6054b485599eda6a820bff804683d010ea59e165184ee +size 26072 diff --git a/assets/voxygen/voxel/object/gravestone.vox b/assets/voxygen/voxel/object/gravestone.vox index 56fc1d4707..c2030d1cc9 100644 --- a/assets/voxygen/voxel/object/gravestone.vox +++ b/assets/voxygen/voxel/object/gravestone.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4efe0580b5cccf7f9754703d032513984940bfdd044ac43dff2f79507624ae6e -size 56333 +oid sha256:3d12268a3171416e773d900ec95a68a9438486b1dc6fb6172df267438142ed9d +size 1904 diff --git a/assets/voxygen/voxel/object/gravestone_2.vox b/assets/voxygen/voxel/object/gravestone_2.vox index dd4cab6027..1889aa6259 100644 --- a/assets/voxygen/voxel/object/gravestone_2.vox +++ b/assets/voxygen/voxel/object/gravestone_2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:46c126ef04c3f242337d492240fee7464f82ead1c5dd20c0f9a776133e5d4b1c -size 57269 +oid sha256:2877f464b675a09e69ff19796bb322e029f9fe631f403fb8cd3c02026db65cd5 +size 2840 diff --git a/assets/voxygen/voxel/object/key.vox b/assets/voxygen/voxel/object/key.vox index 3f34358f32..fe09eb10fb 100644 --- a/assets/voxygen/voxel/object/key.vox +++ b/assets/voxygen/voxel/object/key.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b4592865022662696d7698c7c40d991eb18cb97660dcd36a291f57be1bb28828 -size 45239 +oid sha256:d3e50732b3ecebcca03f4c37ff40cb956a10d5425e28e55302c8c38d8af92cc9 +size 2128 diff --git a/assets/voxygen/voxel/object/key_gold.vox b/assets/voxygen/voxel/object/key_gold.vox index ec96f40a16..eaf0c3d39f 100644 --- a/assets/voxygen/voxel/object/key_gold.vox +++ b/assets/voxygen/voxel/object/key_gold.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1990da07d4666119dc68e7e9ef690a776fd06352db2803710416a928de2e048c -size 45239 +oid sha256:a120d2b72e1543f46279cc99166aa9e218d16a91b8c9c058f88c9708b007710b +size 2128 diff --git a/assets/voxygen/voxel/object/lantern_ground.vox b/assets/voxygen/voxel/object/lantern_ground.vox index 4f6f50f8d2..5fe8fddaf5 100644 --- a/assets/voxygen/voxel/object/lantern_ground.vox +++ b/assets/voxygen/voxel/object/lantern_ground.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3a27b4da28d5096aa06ce4914482363e1d16641796823e70e2745607d3df5444 -size 45187 +oid sha256:6a4fe6620b8da74a9f096d3db0ed8695623e233c49ab57921f12c1c5b702980e +size 2076 diff --git a/assets/voxygen/voxel/object/lantern_ground_open.vox b/assets/voxygen/voxel/object/lantern_ground_open.vox index 1fa33490fb..1c38f45fec 100644 --- a/assets/voxygen/voxel/object/lantern_ground_open.vox +++ b/assets/voxygen/voxel/object/lantern_ground_open.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:731339f131b1a59900d827f2ed26ba553a1beb09136f0112abc2f5ec74949982 -size 44791 +oid sha256:c43633801341bc31a89118827332e975e2fbab2e3ace4148121b6196dce3b088 +size 1680 diff --git a/assets/voxygen/voxel/object/lantern_standing.vox b/assets/voxygen/voxel/object/lantern_standing.vox index bf7497401a..c8fc3f1db8 100644 --- a/assets/voxygen/voxel/object/lantern_standing.vox +++ b/assets/voxygen/voxel/object/lantern_standing.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1b54d15b34e42a613fd1d90ff62f0cded7ee7cd1db0853c2e28a25572752df9d -size 49334 +oid sha256:c73516141b65bfe71d813624c5e89ffcc41e64edfee2f21dbdcfdd44610bcb47 +size 6224 diff --git a/assets/voxygen/voxel/object/lantern_standing_2.vox b/assets/voxygen/voxel/object/lantern_standing_2.vox index 58f2f0e1d0..47e3ea28d9 100644 --- a/assets/voxygen/voxel/object/lantern_standing_2.vox +++ b/assets/voxygen/voxel/object/lantern_standing_2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c613adb439de0a8cfab026f89d97a0df1c6a465e1321becd91128a09e38453b0 -size 50431 +oid sha256:b600d263f843b4da8b8f7fbc6cdb50bbeaf7d94c4afcd29fc6ef81dcc14a9790 +size 7320 diff --git a/assets/voxygen/voxel/object/potion_blue.vox b/assets/voxygen/voxel/object/potion_blue.vox index 0d896db3f6..6feb366a85 100644 --- a/assets/voxygen/voxel/object/potion_blue.vox +++ b/assets/voxygen/voxel/object/potion_blue.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5153dcd60bf16898964759a7344728dc1e4a07f437a2b5b76c6ddcb366119fbd -size 44447 +oid sha256:ba35218bf76f9b3977ba6b92cfd1e56e66d443698ef5f3d2467a11cdd37d4ecc +size 1336 diff --git a/assets/voxygen/voxel/object/potion_green.vox b/assets/voxygen/voxel/object/potion_green.vox index 4fe10a451b..5fdb6abce5 100644 --- a/assets/voxygen/voxel/object/potion_green.vox +++ b/assets/voxygen/voxel/object/potion_green.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2925a582f0ce3d2bfdd26f5591cf4d652aac0b558ee16067d9272a6710e2bf78 -size 44447 +oid sha256:ac4c0003941030e1e2aa8678bfec3c3cc01d674a07b55d216686dbf2a9fdcb77 +size 1336 diff --git a/assets/voxygen/voxel/object/potion_red.vox b/assets/voxygen/voxel/object/potion_red.vox index fadd6c69fd..2243528656 100644 --- a/assets/voxygen/voxel/object/potion_red.vox +++ b/assets/voxygen/voxel/object/potion_red.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3734cb5df4d04a3373d72ebf361e7e95196906349aa32107af32b79836b884c1 -size 55889 +oid sha256:9a43b225d21834389f13cf6da5cf9de70fb094db570284c32dff394c728e4337 +size 1400 diff --git a/assets/voxygen/voxel/object/potion_turq.vox b/assets/voxygen/voxel/object/potion_turq.vox index 8bdbc01c74..c5c84fdbbd 100644 --- a/assets/voxygen/voxel/object/potion_turq.vox +++ b/assets/voxygen/voxel/object/potion_turq.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0c9c944dd7bc205288e0b28148d939252df5537f90ec8fa2b9cc18e8fe863921 -size 55889 +oid sha256:ba70c60b89f8a9c78604f6be439a11549d428e394e2eac23a7d54f96654e048e +size 1400 diff --git a/assets/voxygen/voxel/object/pouch.vox b/assets/voxygen/voxel/object/pouch.vox index 4f863db0a9..555b7f2d0c 100644 --- a/assets/voxygen/voxel/object/pouch.vox +++ b/assets/voxygen/voxel/object/pouch.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:41c5c4dacb7050121ce597d73957976e7476630e0078c2d9536fe179855b8edf -size 58277 +oid sha256:f7d7d595a9729254476993268e26f6657f3094a1a48370f4b5113ddb69198d53 +size 3848 diff --git a/assets/voxygen/voxel/object/pumpkin.vox b/assets/voxygen/voxel/object/pumpkin.vox index 6d406220d0..2fb3151468 100644 --- a/assets/voxygen/voxel/object/pumpkin.vox +++ b/assets/voxygen/voxel/object/pumpkin.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f6609b77d07e74b2dd5222a465f0698740fa39d1771bff64cb5365f26f376d72 -size 45676 +oid sha256:d5613fa852cc7434e6c79cef11f2aee2ddb1e2e4cb3c63625aad3537ea5ce230 +size 2568 diff --git a/assets/voxygen/voxel/object/pumpkin_2.vox b/assets/voxygen/voxel/object/pumpkin_2.vox index 34ec74a7d0..9d3956a32f 100644 --- a/assets/voxygen/voxel/object/pumpkin_2.vox +++ b/assets/voxygen/voxel/object/pumpkin_2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:42e348d35023976eea5e3a6fd0f669a95e1b139a58ed5200c0ebb9820dbb54ef -size 45720 +oid sha256:1c84fd47e6bf52a4149cc34a465b847b3980731d9887449618a3c93fabe8bd25 +size 2612 diff --git a/assets/voxygen/voxel/object/pumpkin_3.vox b/assets/voxygen/voxel/object/pumpkin_3.vox index b36fcf376b..e3b4822909 100644 --- a/assets/voxygen/voxel/object/pumpkin_3.vox +++ b/assets/voxygen/voxel/object/pumpkin_3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:379de50a57739e51fc9d6782ddb5378cd42ed14748043d06e0a5c4ee2f3c4476 -size 45688 +oid sha256:b54413b3b8ba82f53f0e202ca44fa1d439c941ceaff458aa745a35fcb834c0ab +size 2580 diff --git a/assets/voxygen/voxel/object/pumpkin_4.vox b/assets/voxygen/voxel/object/pumpkin_4.vox index da2c128131..768eb28ac0 100644 --- a/assets/voxygen/voxel/object/pumpkin_4.vox +++ b/assets/voxygen/voxel/object/pumpkin_4.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eab7e45966b3dfc58d597d862b2501de0fe4c35400f4d54eeff7382f534da82f -size 45700 +oid sha256:328f0ef26286adf0a5729934a3b6190b5d9d2b6b66ab416d0f161007daa252bd +size 2592 diff --git a/assets/voxygen/voxel/object/pumpkin_5.vox b/assets/voxygen/voxel/object/pumpkin_5.vox index 977bb144e3..86117ab44e 100644 --- a/assets/voxygen/voxel/object/pumpkin_5.vox +++ b/assets/voxygen/voxel/object/pumpkin_5.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:525fed83b20342435c4e6e60ec52eaac25d83deb616958d8ddb2a6af8dad2ff2 -size 45724 +oid sha256:5587dd40fc9c95136601cbcb17e24965f167fd3202127c3f04c4855980d695cf +size 2616 diff --git a/assets/voxygen/voxel/object/scarecrow.vox b/assets/voxygen/voxel/object/scarecrow.vox index 0bd474a89f..2248fa9456 100644 --- a/assets/voxygen/voxel/object/scarecrow.vox +++ b/assets/voxygen/voxel/object/scarecrow.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:480a42912cc917d034da2a65f6841b67203accf8dc42f62fde446eb060516000 -size 57691 +oid sha256:b97144011503ac468c5b48fa8976a4c76fa8e045127235e51469d67b222f5e09 +size 3260 diff --git a/assets/voxygen/voxel/object/window_spooky.vox b/assets/voxygen/voxel/object/window_spooky.vox index 7360c573cc..a8105ded09 100644 --- a/assets/voxygen/voxel/object/window_spooky.vox +++ b/assets/voxygen/voxel/object/window_spooky.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:35944786a274f505a1733e95a3051c76e50e62425c3f44279d0e8027e6f531e6 -size 52396 +oid sha256:f6260bc765a4ae920b44b6437f71b4d8ae14dc924b4669a72cf9bcde7d1e199d +size 9288 diff --git a/assets/voxygen/voxel/quadruped_medium_central_manifest.ron b/assets/voxygen/voxel/quadruped_medium_central_manifest.ron index 8e3d3b12d6..b1d556b3d8 100644 --- a/assets/voxygen/voxel/quadruped_medium_central_manifest.ron +++ b/assets/voxygen/voxel/quadruped_medium_central_manifest.ron @@ -480,4 +480,4 @@ central: ("npc.tarasque.male.tail"), ), ), -}) \ No newline at end of file +}) diff --git a/assets/voxygen/voxel/quadruped_medium_lateral_manifest.ron b/assets/voxygen/voxel/quadruped_medium_lateral_manifest.ron index 8e7b0b65c6..69c104c2fa 100644 --- a/assets/voxygen/voxel/quadruped_medium_lateral_manifest.ron +++ b/assets/voxygen/voxel/quadruped_medium_lateral_manifest.ron @@ -287,4 +287,4 @@ lateral: ("npc.tarasque.female.foot_rb"), ), ), -}) \ No newline at end of file +}) diff --git a/assets/voxygen/voxel/quadruped_small_central_manifest.ron b/assets/voxygen/voxel/quadruped_small_central_manifest.ron index b2805684ba..5a48727736 100644 --- a/assets/voxygen/voxel/quadruped_small_central_manifest.ron +++ b/assets/voxygen/voxel/quadruped_small_central_manifest.ron @@ -251,4 +251,4 @@ central: ("npc.holladon.female.chest"), ), ), -}) \ No newline at end of file +}) diff --git a/assets/voxygen/voxel/quadruped_small_lateral_manifest.ron b/assets/voxygen/voxel/quadruped_small_lateral_manifest.ron index 5b102d6b11..17657d7b07 100644 --- a/assets/voxygen/voxel/quadruped_small_lateral_manifest.ron +++ b/assets/voxygen/voxel/quadruped_small_lateral_manifest.ron @@ -447,4 +447,4 @@ lateral: ("npc.holladon.female.foot_br"), ), ), -}) \ No newline at end of file +}) diff --git a/assets/voxygen/voxel/sprite/blueberry/1.vox b/assets/voxygen/voxel/sprite/blueberry/1.vox index f512f25e44..c91c17bddf 100644 --- a/assets/voxygen/voxel/sprite/blueberry/1.vox +++ b/assets/voxygen/voxel/sprite/blueberry/1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9c2fc29e68eb500b5dd4e6a02248002e3fe65ec45bef84b49467b141226332b2 -size 55931 +oid sha256:64d3a1a67ceb19fd1ec41ac941cdfc5622b1dba566069d41947d5dd617d26092 +size 1448 diff --git a/assets/voxygen/voxel/sprite/blueberry/2.vox b/assets/voxygen/voxel/sprite/blueberry/2.vox index 529bfaa59c..377b391b9c 100644 --- a/assets/voxygen/voxel/sprite/blueberry/2.vox +++ b/assets/voxygen/voxel/sprite/blueberry/2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f1a4027cbb01457fc5d82c0b856a25d6aed491b22547e6ceb4e44b94335462fb -size 55955 +oid sha256:8f1c69b8e7d6de285f395b30430eb3b40fcac7b07ee81d2ce42c37503de1aaa9 +size 1472 diff --git a/assets/voxygen/voxel/sprite/blueberry/3.vox b/assets/voxygen/voxel/sprite/blueberry/3.vox index 2c5a8e17dc..9fb7f6c58a 100644 --- a/assets/voxygen/voxel/sprite/blueberry/3.vox +++ b/assets/voxygen/voxel/sprite/blueberry/3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ddf19ef01220cd6022b14fe0358eb6ea6065b1a6eecc4cc931895adaf3837683 -size 55983 +oid sha256:3b36eab27a99a630d85762daad91421eaf90ea1f0412342cea1bcdc383e3736f +size 1500 diff --git a/assets/voxygen/voxel/sprite/blueberry/4.vox b/assets/voxygen/voxel/sprite/blueberry/4.vox index e44eb68faa..20d48ab751 100644 --- a/assets/voxygen/voxel/sprite/blueberry/4.vox +++ b/assets/voxygen/voxel/sprite/blueberry/4.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:92efb6fb4f8a5ec82f7e3cae272d288b4aeacd75188f4f54dc0786f113ce54d1 -size 55847 +oid sha256:b420454a5b6a3fd3450bd6e9c4d1f7e736c047c598ce3900ea8ede525c303b8e +size 1364 diff --git a/assets/voxygen/voxel/sprite/blueberry/5.vox b/assets/voxygen/voxel/sprite/blueberry/5.vox index d9b9f2b347..0fc528fba9 100644 --- a/assets/voxygen/voxel/sprite/blueberry/5.vox +++ b/assets/voxygen/voxel/sprite/blueberry/5.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d5e36ccccf42ced2b26125d9f0a97cd2ea8a0f2f236af930b58f70eb4c8d9449 -size 55863 +oid sha256:747f1b67b3a85ad3678499ca7b2aad1fe73e5320537d9e5e13c3bb0153fd9207 +size 1380 diff --git a/assets/voxygen/voxel/sprite/blueberry/6.vox b/assets/voxygen/voxel/sprite/blueberry/6.vox index 32872237d7..f6b12a4a1f 100644 --- a/assets/voxygen/voxel/sprite/blueberry/6.vox +++ b/assets/voxygen/voxel/sprite/blueberry/6.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:20764bf02c5d4bad24e94344d90b5b6fd8ea29b6bbbb00621c6a899c04565a6c -size 55891 +oid sha256:2112936f1444d89665cf3b359611485f6f864a8a2a85d2b3eeb66e76266448d6 +size 1408 diff --git a/assets/voxygen/voxel/sprite/blueberry/7.vox b/assets/voxygen/voxel/sprite/blueberry/7.vox index d46306f4ef..fb649aaaf2 100644 --- a/assets/voxygen/voxel/sprite/blueberry/7.vox +++ b/assets/voxygen/voxel/sprite/blueberry/7.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9b45e70a17f702c78b9e32c94949c6420a6bcdbed46d45604f4b92a4f7566cd8 -size 55675 +oid sha256:ad3f7b6fef393959e230cd620a2bd722ac9b5d0b7e633d4b03103d53ad202241 +size 1192 diff --git a/assets/voxygen/voxel/sprite/blueberry/8.vox b/assets/voxygen/voxel/sprite/blueberry/8.vox index 47b456bad0..2fc1a8508d 100644 --- a/assets/voxygen/voxel/sprite/blueberry/8.vox +++ b/assets/voxygen/voxel/sprite/blueberry/8.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:47b930f188fcf2e8c936234deb8b503a1cc5d3b98afb39c3496b2af31a70412d -size 55687 +oid sha256:ccb9c87e5b65227469985adb049390435ae94ff43364e925234c00bde84e0dbd +size 1204 diff --git a/assets/voxygen/voxel/sprite/blueberry/9.vox b/assets/voxygen/voxel/sprite/blueberry/9.vox index cfbf76b948..dcfb6f8347 100644 --- a/assets/voxygen/voxel/sprite/blueberry/9.vox +++ b/assets/voxygen/voxel/sprite/blueberry/9.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bbf6407f2d05e4e8488873d66dd6ca867986f983d86acb9e1b18fd639ddda567 -size 55703 +oid sha256:04bf9753a1bd82903e4c3d0da1a8d1ba0ee834bc959f0ae4146e4a7d42d23302 +size 1220 diff --git a/assets/voxygen/voxel/sprite/cacti/cactus_round.vox b/assets/voxygen/voxel/sprite/cacti/cactus_round.vox index 0215a44371..a8552fc18d 100644 --- a/assets/voxygen/voxel/sprite/cacti/cactus_round.vox +++ b/assets/voxygen/voxel/sprite/cacti/cactus_round.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:429d3b5b1c4b331d5771d7b8af8e05abf8a2758847f967d62d83b81616fc44fd -size 44811 +oid sha256:0ee7ed801ba8a7cae2767eb46571d366f3961a1f24a8691e4313080941d2f911 +size 1700 diff --git a/assets/voxygen/voxel/sprite/dead_bush/1.vox b/assets/voxygen/voxel/sprite/dead_bush/1.vox index 9024bda738..331d6d2f63 100644 --- a/assets/voxygen/voxel/sprite/dead_bush/1.vox +++ b/assets/voxygen/voxel/sprite/dead_bush/1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:37f8d6b7c359c2327b0a5909936c6d21c7083a0606e8c66774d730444eaef397 -size 56841 +oid sha256:409a3be1ffd47e65a5a9ded066270093ea4bf02ecbb4d36160909bf9a6a3c062 +size 2088 diff --git a/assets/voxygen/voxel/sprite/dead_bush/2.vox b/assets/voxygen/voxel/sprite/dead_bush/2.vox index 6576fb3caf..26c1c0a132 100644 --- a/assets/voxygen/voxel/sprite/dead_bush/2.vox +++ b/assets/voxygen/voxel/sprite/dead_bush/2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:66f80d9e670a0d81b85a3b778ba43ee66574284ecf9b9f7065146a249b9ecb3c -size 56733 +oid sha256:d5c5614269b45198f1d357b2588b13ee89da9060c33a7b47fb7b909bf86e6b08 +size 1980 diff --git a/assets/voxygen/voxel/sprite/dead_bush/3.vox b/assets/voxygen/voxel/sprite/dead_bush/3.vox index 6a9610f8b0..1e02e7c7bb 100644 --- a/assets/voxygen/voxel/sprite/dead_bush/3.vox +++ b/assets/voxygen/voxel/sprite/dead_bush/3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a1507b8612b31cca4ee38248580ba16716708ef3c2d9aaa54adea27ee5a5714c -size 56365 +oid sha256:8fbd0c96e868b1fa4d2db548e126132074b9ec65e178ede62623c4060a4f9055 +size 1612 diff --git a/assets/voxygen/voxel/sprite/dead_bush/4.vox b/assets/voxygen/voxel/sprite/dead_bush/4.vox index 56ee404c7d..234b229812 100644 --- a/assets/voxygen/voxel/sprite/dead_bush/4.vox +++ b/assets/voxygen/voxel/sprite/dead_bush/4.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:db68cd44a962ac77385a3495e9fa6cd5bd7a140ff56c661122d0b7af1be9617e -size 56161 +oid sha256:9a17d27c9bf07f64ad97cf208e050dcb253d122605bb2a7d382d36520a6965f5 +size 1408 diff --git a/assets/voxygen/voxel/sprite/ferns/1.vox b/assets/voxygen/voxel/sprite/ferns/1.vox index 2aa6031c82..75fd3a3bd7 100644 --- a/assets/voxygen/voxel/sprite/ferns/1.vox +++ b/assets/voxygen/voxel/sprite/ferns/1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4fbf52bcea93e7b55ae1953de4e978f6af710e2bc6d8b757e8771ca7ec659c51 -size 56242 +oid sha256:4836e23cf5198c56b1038c10206d2cf8f347d6543bd8fff7d5454489aa2b4d39 +size 1492 diff --git a/assets/voxygen/voxel/sprite/ferns/10.vox b/assets/voxygen/voxel/sprite/ferns/10.vox index 9b52a08f97..54e4d15389 100644 --- a/assets/voxygen/voxel/sprite/ferns/10.vox +++ b/assets/voxygen/voxel/sprite/ferns/10.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a231d28f92b612f084c37177d3a7558d80c76391ea758cea0fad467a3ac88efb -size 56086 +oid sha256:683039c5426944b423bb4a23b0a9ca6a2d4bd14a324e7f2c4726848d16949b3f +size 1336 diff --git a/assets/voxygen/voxel/sprite/ferns/11.vox b/assets/voxygen/voxel/sprite/ferns/11.vox index 5082549f7f..2f4af4358c 100644 --- a/assets/voxygen/voxel/sprite/ferns/11.vox +++ b/assets/voxygen/voxel/sprite/ferns/11.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ede46ea52aacc78f8b5cf4b1f9c3370b19bfa1d18a99d70046bf9d80c8be8ab0 -size 56002 +oid sha256:bf81d0e53f133b3c6b70c1ce0b0131dd50e72e24bb66ffeba68d7e5bdf1b465e +size 1252 diff --git a/assets/voxygen/voxel/sprite/ferns/12.vox b/assets/voxygen/voxel/sprite/ferns/12.vox index 36be1560b7..05e9acd4ce 100644 --- a/assets/voxygen/voxel/sprite/ferns/12.vox +++ b/assets/voxygen/voxel/sprite/ferns/12.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:912f4c77a170aef3ff325aca40758633aa4e2f1db6b19beb19552c43842af21b -size 55982 +oid sha256:3b1d92ec5430f277258c4c2e20478b1fc9a4d30263b3775af4bef13a85734acf +size 1232 diff --git a/assets/voxygen/voxel/sprite/ferns/2.vox b/assets/voxygen/voxel/sprite/ferns/2.vox index 28127128d5..1f07ba16c7 100644 --- a/assets/voxygen/voxel/sprite/ferns/2.vox +++ b/assets/voxygen/voxel/sprite/ferns/2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a4623532da0096db30f552218bef29e2498174648a5be165bb86c9edc8d652f5 -size 56243 +oid sha256:e2add2e985cbce8013739551123934b9f2bee65cc9e7da55c8c267ae50c92261 +size 1492 diff --git a/assets/voxygen/voxel/sprite/ferns/3.vox b/assets/voxygen/voxel/sprite/ferns/3.vox index 512ffb48e4..874758e60d 100644 --- a/assets/voxygen/voxel/sprite/ferns/3.vox +++ b/assets/voxygen/voxel/sprite/ferns/3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a13c4d18ce74ee4ab289e278651757ab5a8d85efe59bf08a879bcbc239ce3423 -size 56178 +oid sha256:22867c342215aa2dd177cf611d64f554a009483a5133da6d21344748ffbc2c6d +size 1428 diff --git a/assets/voxygen/voxel/sprite/ferns/4.vox b/assets/voxygen/voxel/sprite/ferns/4.vox index 611fa073d8..5188d75411 100644 --- a/assets/voxygen/voxel/sprite/ferns/4.vox +++ b/assets/voxygen/voxel/sprite/ferns/4.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:92ddf7001c4721c35b112d19f0cc90aea3f641885d6a9541a4eee36dea8d175b -size 56179 +oid sha256:ea5527cd5f1dea6155d43eb3052632684988160e9bef4283d7cee0cd562b56f4 +size 1428 diff --git a/assets/voxygen/voxel/sprite/ferns/5.vox b/assets/voxygen/voxel/sprite/ferns/5.vox index d9471eb9e9..af1c62ad8b 100644 --- a/assets/voxygen/voxel/sprite/ferns/5.vox +++ b/assets/voxygen/voxel/sprite/ferns/5.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d63edb0ed69a1a6a5cfcbda07a563ec7217687bfdcaa465809721844c9cce749 -size 56218 +oid sha256:b7fee466deac4265ffab7c9b84def8a4735b04b129bc6d9ad816c127630f0781 +size 1468 diff --git a/assets/voxygen/voxel/sprite/ferns/6.vox b/assets/voxygen/voxel/sprite/ferns/6.vox index 90a1ce4d9e..4d46b5f85f 100644 --- a/assets/voxygen/voxel/sprite/ferns/6.vox +++ b/assets/voxygen/voxel/sprite/ferns/6.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9bc276049c0ac255427a509ce3efa01cc82c7790c99415d74d8ade4a99ed06f5 -size 56219 +oid sha256:70cafdf06c4db42cbec34aa1862dbfe7d524423ce96e5ec689f150a425984f15 +size 1468 diff --git a/assets/voxygen/voxel/sprite/ferns/7.vox b/assets/voxygen/voxel/sprite/ferns/7.vox index c667bd4926..15091de26f 100644 --- a/assets/voxygen/voxel/sprite/ferns/7.vox +++ b/assets/voxygen/voxel/sprite/ferns/7.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bcd71e709f991c3e27e2b91a41428191807a6b5c6b6bffe01d0779f96afd7993 -size 56102 +oid sha256:866fd6cd69ef6682170c6250b01fed115c5501d87324f1010a457cdcb9d47e25 +size 1352 diff --git a/assets/voxygen/voxel/sprite/ferns/8.vox b/assets/voxygen/voxel/sprite/ferns/8.vox index 99578f0760..4ad53ad439 100644 --- a/assets/voxygen/voxel/sprite/ferns/8.vox +++ b/assets/voxygen/voxel/sprite/ferns/8.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:70465d5ff3c6754fa6fa409cf7547ce8dfbed8f377651ae1524011280aacbf4a -size 56122 +oid sha256:06ec44ea19df2a79b449d33e123044f51a2bf8c91dfee5b605f23cf265c90f3c +size 1372 diff --git a/assets/voxygen/voxel/sprite/ferns/9.vox b/assets/voxygen/voxel/sprite/ferns/9.vox index 64fdccc480..2643c1290d 100644 --- a/assets/voxygen/voxel/sprite/ferns/9.vox +++ b/assets/voxygen/voxel/sprite/ferns/9.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2972e1fb37bb29ed193fb9824b34724604bb5f07c95d70b44047f1ddb08f8b96 -size 56074 +oid sha256:6115029f7249fadfe7cde813165edd1984614e77fe141a64ceab67fcc5da0827 +size 1324 diff --git a/assets/voxygen/voxel/sprite/flowers/flower_blue_1.vox b/assets/voxygen/voxel/sprite/flowers/flower_blue_1.vox index 752c381cc6..48002ce197 100644 --- a/assets/voxygen/voxel/sprite/flowers/flower_blue_1.vox +++ b/assets/voxygen/voxel/sprite/flowers/flower_blue_1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:137b23eab91e066b9a6439ad12689bdbc7282c71f36c6c294b2f71de73334c28 -size 44323 +oid sha256:7eb7347e9c09878225b65e02b78662bd0aeca1b9f43eb8dac8d8dc04fe9fc1c5 +size 1216 diff --git a/assets/voxygen/voxel/sprite/flowers/flower_blue_2.vox b/assets/voxygen/voxel/sprite/flowers/flower_blue_2.vox index c63e9bcbee..887979f3f6 100644 --- a/assets/voxygen/voxel/sprite/flowers/flower_blue_2.vox +++ b/assets/voxygen/voxel/sprite/flowers/flower_blue_2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:09db5a4f07d37a7806e5557d599d4ac30e5528a06e12bee31740a17dc41f7c1f -size 44267 +oid sha256:b703d56f42792ed69e3c8dc31f657679f9edb52a9f96cf984ddfef94e95dab36 +size 1160 diff --git a/assets/voxygen/voxel/sprite/flowers/flower_blue_3.vox b/assets/voxygen/voxel/sprite/flowers/flower_blue_3.vox index 7a660a83bd..517245ae49 100644 --- a/assets/voxygen/voxel/sprite/flowers/flower_blue_3.vox +++ b/assets/voxygen/voxel/sprite/flowers/flower_blue_3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8c8c6c7160c27780e81cc77429b8ff2c01cc6ddeb27d4240b3fe41a1b0901253 -size 44428 +oid sha256:f7a489e63e9fb08a85a7a5538fc34f1e8aeec0079bc0f53641fc7a52cb7d5398 +size 1320 diff --git a/assets/voxygen/voxel/sprite/flowers/flower_blue_4.vox b/assets/voxygen/voxel/sprite/flowers/flower_blue_4.vox index 27913073cb..f152e801ca 100644 --- a/assets/voxygen/voxel/sprite/flowers/flower_blue_4.vox +++ b/assets/voxygen/voxel/sprite/flowers/flower_blue_4.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5b7d423ee6519166df1982cac0fd95d41611d371bbe265328cd1f09291b54c06 -size 44652 +oid sha256:efd82c0a3e493408605b28554e8f8cf06a4d5105bbe39a44a5015039b7af0ca8 +size 1544 diff --git a/assets/voxygen/voxel/sprite/flowers/flower_blue_5.vox b/assets/voxygen/voxel/sprite/flowers/flower_blue_5.vox index 8f7bf1e67e..18d6b0c320 100644 --- a/assets/voxygen/voxel/sprite/flowers/flower_blue_5.vox +++ b/assets/voxygen/voxel/sprite/flowers/flower_blue_5.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eefdbb220918b2d4c2399f6e33d8760456635c3603682417aa70800b498fd77c -size 44275 +oid sha256:ef17073547a52c82ae5ec6d159341bbd06b1207370104d149f5eb1a2cdef154b +size 1168 diff --git a/assets/voxygen/voxel/sprite/flowers/flower_blue_6.vox b/assets/voxygen/voxel/sprite/flowers/flower_blue_6.vox index b2116625e8..b5f2325130 100644 --- a/assets/voxygen/voxel/sprite/flowers/flower_blue_6.vox +++ b/assets/voxygen/voxel/sprite/flowers/flower_blue_6.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:294f4804ea76d2bf2f3e910521edbcbe331881467ed31c3332c227d674057b14 -size 55870 +oid sha256:ee772f4dc359b26295b581b0455fbfdac43b2a9492a5e5c86409c0c6199e069c +size 1384 diff --git a/assets/voxygen/voxel/sprite/flowers/flower_blue_7.vox b/assets/voxygen/voxel/sprite/flowers/flower_blue_7.vox index c36b462514..ff254a3ca8 100644 --- a/assets/voxygen/voxel/sprite/flowers/flower_blue_7.vox +++ b/assets/voxygen/voxel/sprite/flowers/flower_blue_7.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:25a792f45739c95c1f831874aef54a568c7aa3ed3f3217256a07b6974c4c36b0 -size 55800 +oid sha256:71fd10306b8300fc0c902fd623881912ce5bd0d1d27360c6190547ad8d834e82 +size 1316 diff --git a/assets/voxygen/voxel/sprite/flowers/flower_pink_1.vox b/assets/voxygen/voxel/sprite/flowers/flower_pink_1.vox index ecd86bb9c0..9af8666c65 100644 --- a/assets/voxygen/voxel/sprite/flowers/flower_pink_1.vox +++ b/assets/voxygen/voxel/sprite/flowers/flower_pink_1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d688b6111f1c5d15b527157489f61d3385beeb8e25088bca5fec282621305a4d -size 44271 +oid sha256:bc1ad943bd98f0ef598f86b0cee51967c743b133d378935cca3598740b37258b +size 1164 diff --git a/assets/voxygen/voxel/sprite/flowers/flower_pink_2.vox b/assets/voxygen/voxel/sprite/flowers/flower_pink_2.vox index 523afec55c..5e05558b60 100644 --- a/assets/voxygen/voxel/sprite/flowers/flower_pink_2.vox +++ b/assets/voxygen/voxel/sprite/flowers/flower_pink_2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:04bd938016b6f17ea0f2cbdfd2cc1b5e91722f612f586ea8b467ecba0fafa01a -size 44228 +oid sha256:4f4ac49f2721e239bb6c252ec377a3cfc09b9124aad7a0118fdd13e46b7cc2fa +size 1136 diff --git a/assets/voxygen/voxel/sprite/flowers/flower_pink_3.vox b/assets/voxygen/voxel/sprite/flowers/flower_pink_3.vox index a6c7428511..8d843e9d84 100644 --- a/assets/voxygen/voxel/sprite/flowers/flower_pink_3.vox +++ b/assets/voxygen/voxel/sprite/flowers/flower_pink_3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2bff7bde8c9b4ee9b1f9f9731a4d11e2f3ea7f08759fa57c617ae6062651e99b -size 44239 +oid sha256:73a6bed4042c40ab264997ede1cc031881c5ac16963eebe0fb8028538d3aac16 +size 1132 diff --git a/assets/voxygen/voxel/sprite/flowers/flower_pink_4.vox b/assets/voxygen/voxel/sprite/flowers/flower_pink_4.vox index fd95d29ac0..ec5f42c7cc 100644 --- a/assets/voxygen/voxel/sprite/flowers/flower_pink_4.vox +++ b/assets/voxygen/voxel/sprite/flowers/flower_pink_4.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e9ce9d1cd76d0d671c574f3f5be2bb6f94196146d1f2276bcd672d803f31bc3b -size 56162 +oid sha256:48c069ba7699e466130a037ac6ca928799882dd4332aef9f45c2872a8042144a +size 1676 diff --git a/assets/voxygen/voxel/sprite/flowers/flower_purple_1.vox b/assets/voxygen/voxel/sprite/flowers/flower_purple_1.vox index da46bed104..f0810d733e 100644 --- a/assets/voxygen/voxel/sprite/flowers/flower_purple_1.vox +++ b/assets/voxygen/voxel/sprite/flowers/flower_purple_1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5d41bfdd3cb5f31ba7f60ffdf1028bdf44bd3e2fb642df7744584bdf268d264b -size 44535 +oid sha256:4d93a37bcc70093efb1ed9170f7ae2f7bdc9807fb85c12efc9c062a89f9a1089 +size 1428 diff --git a/assets/voxygen/voxel/sprite/flowers/flower_red_1.vox b/assets/voxygen/voxel/sprite/flowers/flower_red_1.vox index 415db9edae..0f0b7e6187 100644 --- a/assets/voxygen/voxel/sprite/flowers/flower_red_1.vox +++ b/assets/voxygen/voxel/sprite/flowers/flower_red_1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:433252d0bd38f1d0087de74ad0fe0ecd14afc6bea71e2f40780b398776c35d22 -size 44607 +oid sha256:fd95cc9f1571bea2110f2d383f6ec14de52e094c54b162e805dbc5bc8a112690 +size 1500 diff --git a/assets/voxygen/voxel/sprite/flowers/flower_red_2.vox b/assets/voxygen/voxel/sprite/flowers/flower_red_2.vox index 5f30e611de..f64fd1119c 100644 --- a/assets/voxygen/voxel/sprite/flowers/flower_red_2.vox +++ b/assets/voxygen/voxel/sprite/flowers/flower_red_2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d94da7f4213a2e58dc77784c438bc16aa47ffc6f3db17c9f282f557ccdd2fe0e -size 55870 +oid sha256:1738e714df2a4159c12d2c22bbfbce803a264903d8e4918a8733ef62da2b66dc +size 1384 diff --git a/assets/voxygen/voxel/sprite/flowers/flower_red_3.vox b/assets/voxygen/voxel/sprite/flowers/flower_red_3.vox index ee0cbf4fbc..16b7152784 100644 --- a/assets/voxygen/voxel/sprite/flowers/flower_red_3.vox +++ b/assets/voxygen/voxel/sprite/flowers/flower_red_3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d83823d8624c54d2c13010e64a7d886c7b933ab4d8639517760b60e190ec7e18 -size 55800 +oid sha256:26baf67a9a181ca644d5d1795e77bd268c50bf06fc944a19297996b7f23dd0ad +size 1316 diff --git a/assets/voxygen/voxel/sprite/flowers/flower_white_1.vox b/assets/voxygen/voxel/sprite/flowers/flower_white_1.vox index c6d54d4e52..4cb0d56bcf 100644 --- a/assets/voxygen/voxel/sprite/flowers/flower_white_1.vox +++ b/assets/voxygen/voxel/sprite/flowers/flower_white_1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ce257a89884fa3fa377ecb49b1c5225c97dc96703294b1af81661adc731edf6c -size 44275 +oid sha256:85ef3695d6a4e555818ee0082922964837fa3ab124738ed2335cdf0641a32aa9 +size 1168 diff --git a/assets/voxygen/voxel/sprite/flowers/flower_white_2.vox b/assets/voxygen/voxel/sprite/flowers/flower_white_2.vox index ef88a12560..2a751c3a38 100644 --- a/assets/voxygen/voxel/sprite/flowers/flower_white_2.vox +++ b/assets/voxygen/voxel/sprite/flowers/flower_white_2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bc3886df0e32965e2dc4c1496f6d7f89ce64b0bf93f26346c7b019906bd3a4ef -size 55800 +oid sha256:fdd1c58bef68ad77c3754aa53e8581f1b0faf11d7e21fbb3121dff3d89d95576 +size 1316 diff --git a/assets/voxygen/voxel/sprite/flowers/flower_yellow_1.vox b/assets/voxygen/voxel/sprite/flowers/flower_yellow_1.vox index a09fc8d4b3..afa82dfb8e 100644 --- a/assets/voxygen/voxel/sprite/flowers/flower_yellow_1.vox +++ b/assets/voxygen/voxel/sprite/flowers/flower_yellow_1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dd382675806c5cf98fd4b93cb406995cfd70f6abe6d3794e8ad626f336251d29 -size 44243 +oid sha256:03f488ef3c37b844210be98384d88d6842cbd0c15ffef4caec13d4ee3c1570e1 +size 1136 diff --git a/assets/voxygen/voxel/sprite/flowers/sunflower_1.vox b/assets/voxygen/voxel/sprite/flowers/sunflower_1.vox index 39985e6f4c..4af86c570b 100644 --- a/assets/voxygen/voxel/sprite/flowers/sunflower_1.vox +++ b/assets/voxygen/voxel/sprite/flowers/sunflower_1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e0de3698a419e3c68ee479e3c7fd8a24b0c1e4a5402b3ab007e77cad2d206a22 -size 44415 +oid sha256:bdc7e2fc8f7ae6e14f0a31a54207a96824a66611da196f062ae9e5445337abfd +size 1308 diff --git a/assets/voxygen/voxel/sprite/flowers/sunflower_2.vox b/assets/voxygen/voxel/sprite/flowers/sunflower_2.vox index 116259a969..eae0d79ac9 100644 --- a/assets/voxygen/voxel/sprite/flowers/sunflower_2.vox +++ b/assets/voxygen/voxel/sprite/flowers/sunflower_2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:23a009406df7b1d14c79c6dc7fd140e75b9db1794fabcd461a68f8f79f910161 -size 44483 +oid sha256:41f2cb970b63ecb415748ba3de225f0dd31f7ccbae9fcc0111eb57c1eed71af5 +size 1376 diff --git a/assets/voxygen/voxel/sprite/fruit/apple.vox b/assets/voxygen/voxel/sprite/fruit/apple.vox index 5efb481e2f..4e16d1ab70 100644 --- a/assets/voxygen/voxel/sprite/fruit/apple.vox +++ b/assets/voxygen/voxel/sprite/fruit/apple.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1e8ae144bb978a28d02025d5b5ba0b9de7bdee33fcfc64959e5f4751bc83a6f0 -size 57675 +oid sha256:7616be8382963a21f068f72e2c4c3034bd33f8c40bb6c544156eda6512405301 +size 3192 diff --git a/assets/voxygen/voxel/sprite/grass/grass_long_1.vox b/assets/voxygen/voxel/sprite/grass/grass_long_1.vox index 279d6f446f..e8dcdc3bec 100644 --- a/assets/voxygen/voxel/sprite/grass/grass_long_1.vox +++ b/assets/voxygen/voxel/sprite/grass/grass_long_1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a9a8cea09c3994b43158b62be8b675edfae73229ea05167728d5cf0bd6656d14 -size 44551 +oid sha256:f4d348f0534f4b6952452d359fc7883125f9a2f0081ab7b172439f8cbba29f9a +size 1444 diff --git a/assets/voxygen/voxel/sprite/grass/grass_long_2.vox b/assets/voxygen/voxel/sprite/grass/grass_long_2.vox index a8e9c6302c..97a20a442d 100644 --- a/assets/voxygen/voxel/sprite/grass/grass_long_2.vox +++ b/assets/voxygen/voxel/sprite/grass/grass_long_2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ad9a6155fc8244c02b61922ac360543bacf0fbca2c72891271f6635d0d361c75 -size 44503 +oid sha256:2a51e75e4168b50ecbddf93f73446a99eee7170f505fec14b26845b8352b36af +size 1396 diff --git a/assets/voxygen/voxel/sprite/grass/grass_long_3.vox b/assets/voxygen/voxel/sprite/grass/grass_long_3.vox index 4158bac628..da62315abe 100644 --- a/assets/voxygen/voxel/sprite/grass/grass_long_3.vox +++ b/assets/voxygen/voxel/sprite/grass/grass_long_3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:385da09d1fbca9875f06876c3aea58bf89a06f960d2426b9c5a79ae3064d46e4 -size 44535 +oid sha256:57ce1b9198565ab871b5ffa75eed3c33d98e460417d6b3bd9d0f16f0e6078f57 +size 1428 diff --git a/assets/voxygen/voxel/sprite/grass/grass_long_4.vox b/assets/voxygen/voxel/sprite/grass/grass_long_4.vox index 6231f60bd5..72cf6e18b0 100644 --- a/assets/voxygen/voxel/sprite/grass/grass_long_4.vox +++ b/assets/voxygen/voxel/sprite/grass/grass_long_4.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b822e17f16fc7a3580b36ac3dfaab97bf8827bdfb87beaa2bfdf48cda0ccb5b5 -size 44487 +oid sha256:f669703367068650a538e54ef145e974a05781913bb161e6623cebe138f9819d +size 1380 diff --git a/assets/voxygen/voxel/sprite/grass/grass_long_5.vox b/assets/voxygen/voxel/sprite/grass/grass_long_5.vox index 87f15a2517..12d5a172a0 100644 --- a/assets/voxygen/voxel/sprite/grass/grass_long_5.vox +++ b/assets/voxygen/voxel/sprite/grass/grass_long_5.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:846c44590d2cf2f76c13297cec5f4bf5588c24718560f2bf4ae0f88fa7a22862 -size 44535 +oid sha256:73512c97c009b922ba2dba87a76b22a88480ae1d176a29f1522c6093f588d605 +size 1428 diff --git a/assets/voxygen/voxel/sprite/grass/grass_long_6.vox b/assets/voxygen/voxel/sprite/grass/grass_long_6.vox index 6b5b8d671f..7619938d93 100644 --- a/assets/voxygen/voxel/sprite/grass/grass_long_6.vox +++ b/assets/voxygen/voxel/sprite/grass/grass_long_6.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a0f790e13d900de42906770e982757db98ace1e8170d76c1e34b142c3a02a1b6 -size 44539 +oid sha256:fffddbb1896ceb76169b1d6b4336049b9420f6286a6499199081f9cf7b4f7b92 +size 1432 diff --git a/assets/voxygen/voxel/sprite/grass/grass_long_7.vox b/assets/voxygen/voxel/sprite/grass/grass_long_7.vox index 931f5c59d6..a0c962a166 100644 --- a/assets/voxygen/voxel/sprite/grass/grass_long_7.vox +++ b/assets/voxygen/voxel/sprite/grass/grass_long_7.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c1a444e329a61d03fcf46b5e9d2d2ef5c15d9c18d40a08fe65e751b18a1577fa -size 44511 +oid sha256:fabcd5006ceb04101df626a5741e7e2f8db7879624dec8699746d2ba7262a62f +size 1404 diff --git a/assets/voxygen/voxel/sprite/grass/grass_med_1.vox b/assets/voxygen/voxel/sprite/grass/grass_med_1.vox index dd8ae959c0..a654b7d8c2 100644 --- a/assets/voxygen/voxel/sprite/grass/grass_med_1.vox +++ b/assets/voxygen/voxel/sprite/grass/grass_med_1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9a951513b8b79f557a959838bc544ad4d19de65e3c9d6c4888dcdae40028fc3e -size 44339 +oid sha256:b39aea74e38cbc9734a0814f660ae31aac52668917d7c65b0563ca9935d6f69a +size 1232 diff --git a/assets/voxygen/voxel/sprite/grass/grass_med_2.vox b/assets/voxygen/voxel/sprite/grass/grass_med_2.vox index d285e54822..69f60e761f 100644 --- a/assets/voxygen/voxel/sprite/grass/grass_med_2.vox +++ b/assets/voxygen/voxel/sprite/grass/grass_med_2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e1d099c794ac2c7c6443a602d6a75d476639076fd0cb5842ddab7134d5004221 -size 44395 +oid sha256:b1d5aa23a9e1fc7818712e2aede308f422ca24a11f1dc6203335352192b5180c +size 1288 diff --git a/assets/voxygen/voxel/sprite/grass/grass_med_3.vox b/assets/voxygen/voxel/sprite/grass/grass_med_3.vox index ba7ca2d0da..c643ed573f 100644 --- a/assets/voxygen/voxel/sprite/grass/grass_med_3.vox +++ b/assets/voxygen/voxel/sprite/grass/grass_med_3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fd2d98727aa16e0d53a4d5722852c1eaad14f5e1639c0554c53f0e78692c3d56 -size 44355 +oid sha256:5b6087272bb20c7ad3decae12c4d13d093781a8a94144ead8198e009956d59a3 +size 1248 diff --git a/assets/voxygen/voxel/sprite/grass/grass_med_4.vox b/assets/voxygen/voxel/sprite/grass/grass_med_4.vox index 5357415cd8..612ec9e2d6 100644 --- a/assets/voxygen/voxel/sprite/grass/grass_med_4.vox +++ b/assets/voxygen/voxel/sprite/grass/grass_med_4.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5c47b69346bc2e067726f34ff1fea356814ae8a9562e739664e9d67c2198ef5c -size 44351 +oid sha256:510f33fc7b45c52d7675de08a56402a01b1f76716a6de82569697641213ef418 +size 1244 diff --git a/assets/voxygen/voxel/sprite/grass/grass_med_5.vox b/assets/voxygen/voxel/sprite/grass/grass_med_5.vox index 339d381391..67f1325f45 100644 --- a/assets/voxygen/voxel/sprite/grass/grass_med_5.vox +++ b/assets/voxygen/voxel/sprite/grass/grass_med_5.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e4c14736a4fc99a063e3f095919c337ffa1c35aead85338cfcc3d8f53147f7a3 -size 44371 +oid sha256:46ff8cd7c1a9358d6fe120b58941b3ea4ac0dcd127924076cae0c9478cafecc5 +size 1264 diff --git a/assets/voxygen/voxel/sprite/grass/grass_short_1.vox b/assets/voxygen/voxel/sprite/grass/grass_short_1.vox index 3a5727ff7c..584fdfae8c 100644 --- a/assets/voxygen/voxel/sprite/grass/grass_short_1.vox +++ b/assets/voxygen/voxel/sprite/grass/grass_short_1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dcfe61508867889fb9db63a3486c4ac837781fa8d88c6fa7d7f1860a960a86d3 -size 44247 +oid sha256:ec8ceb63b25e07aa37ba7e3b5ec6c18ee627ebfc94bbaf49024b9e985288ab57 +size 1140 diff --git a/assets/voxygen/voxel/sprite/grass/grass_short_2.vox b/assets/voxygen/voxel/sprite/grass/grass_short_2.vox index 281e109b45..04e0750466 100644 --- a/assets/voxygen/voxel/sprite/grass/grass_short_2.vox +++ b/assets/voxygen/voxel/sprite/grass/grass_short_2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:de5bcee610a356e7967d2c1a6dbd8986fa5dd01da2452867fb33d594d23d5fe3 -size 44251 +oid sha256:26f222ad0fa2391131ecc0e801984439c07a9fe279968706f83d55241023ee60 +size 1144 diff --git a/assets/voxygen/voxel/sprite/grass/grass_short_3.vox b/assets/voxygen/voxel/sprite/grass/grass_short_3.vox index d28434ad0c..986532b8f5 100644 --- a/assets/voxygen/voxel/sprite/grass/grass_short_3.vox +++ b/assets/voxygen/voxel/sprite/grass/grass_short_3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0199be7c161f654639cd9b18b87e2c8ab8df463bd94b23084d6d2ae86ca12ad5 -size 44251 +oid sha256:5d332bd2f9e98b1c50b84867623e3a5a6be3e874310350cabbe5259bc0eab37e +size 1144 diff --git a/assets/voxygen/voxel/sprite/grass/grass_short_4.vox b/assets/voxygen/voxel/sprite/grass/grass_short_4.vox index 10f4dc7ff6..399a79bff3 100644 --- a/assets/voxygen/voxel/sprite/grass/grass_short_4.vox +++ b/assets/voxygen/voxel/sprite/grass/grass_short_4.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cfede63847e63890c2ab85708a63f2f518ed54656c0292130c741d9dd72133f9 -size 44239 +oid sha256:fd8b7f18021cb3fc2e17159b0ab247de46c1f8785ab47b637cdf4a6b36c7e977 +size 1132 diff --git a/assets/voxygen/voxel/sprite/grass/grass_short_5.vox b/assets/voxygen/voxel/sprite/grass/grass_short_5.vox index 0b390bdf28..6153cf80d9 100644 --- a/assets/voxygen/voxel/sprite/grass/grass_short_5.vox +++ b/assets/voxygen/voxel/sprite/grass/grass_short_5.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:acaa2231a3d6e58869d26322e5c3b426c290f606b8c724cd606242c099d5e94e -size 44263 +oid sha256:3d2e7b3390728d10d7075b88a9a7df75d80a2643a211e8a7523d428263c83866 +size 1156 diff --git a/assets/voxygen/voxel/sprite/leafy_plant/1.vox b/assets/voxygen/voxel/sprite/leafy_plant/1.vox index 509ba0afb5..13258089d6 100644 --- a/assets/voxygen/voxel/sprite/leafy_plant/1.vox +++ b/assets/voxygen/voxel/sprite/leafy_plant/1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:febe526cc5e78ad0f8b5665eb32865e533790a43968d2ebbdc99219198040095 -size 56643 +oid sha256:2f7230dc9d14f13b7bad03fcc2cda7922e6898745c18791916d8fa59c5709bcb +size 1892 diff --git a/assets/voxygen/voxel/sprite/leafy_plant/10.vox b/assets/voxygen/voxel/sprite/leafy_plant/10.vox index f93ea337c5..73d3b3901d 100644 --- a/assets/voxygen/voxel/sprite/leafy_plant/10.vox +++ b/assets/voxygen/voxel/sprite/leafy_plant/10.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ed217eb3d68bbea14ce09fdb183b836d5891bed6f44cd0e021434b7b1b7f3391 -size 55911 +oid sha256:63accce104181146bbe0e02f7c1f22f3d849387c4da7975c23e6d9aa0174f8fa +size 1160 diff --git a/assets/voxygen/voxel/sprite/leafy_plant/2.vox b/assets/voxygen/voxel/sprite/leafy_plant/2.vox index c3906fdb15..daddc2cd70 100644 --- a/assets/voxygen/voxel/sprite/leafy_plant/2.vox +++ b/assets/voxygen/voxel/sprite/leafy_plant/2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:04aa9b7cfe0c1422b817fb4742c8a838a6bea0592884664c0161c2247b6359d2 -size 56091 +oid sha256:56fff236d95573b242fa086eb7c9d0ea88199d1b1c4509d072a84ff389c43618 +size 1340 diff --git a/assets/voxygen/voxel/sprite/leafy_plant/3.vox b/assets/voxygen/voxel/sprite/leafy_plant/3.vox index 754cf39ca2..a4cb1b017d 100644 --- a/assets/voxygen/voxel/sprite/leafy_plant/3.vox +++ b/assets/voxygen/voxel/sprite/leafy_plant/3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:11b1f467c25f10c789550626abc5d55496ba1db2f2c93c1931baaaf1ebd9e76e -size 56182 +oid sha256:b376fd6ae77ee6b70b840ae836c3f45f9a534982793b6399b1e75e80f340ce40 +size 1432 diff --git a/assets/voxygen/voxel/sprite/leafy_plant/4.vox b/assets/voxygen/voxel/sprite/leafy_plant/4.vox index 6ac863df32..21506dc484 100644 --- a/assets/voxygen/voxel/sprite/leafy_plant/4.vox +++ b/assets/voxygen/voxel/sprite/leafy_plant/4.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:56500574106d5f9fb09a5b4a30d04bf39793cd9a2031c649e853634da1c8ca94 -size 56058 +oid sha256:b486ba258a8e9b780ce48a660814762593306520b901e058b5f803e50b4ed7f9 +size 1308 diff --git a/assets/voxygen/voxel/sprite/leafy_plant/5.vox b/assets/voxygen/voxel/sprite/leafy_plant/5.vox index 46688b58c9..6dca485f98 100644 --- a/assets/voxygen/voxel/sprite/leafy_plant/5.vox +++ b/assets/voxygen/voxel/sprite/leafy_plant/5.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:31090b38462baa9e057d9f70dc891dac169024a7a01b067217922b6816423451 -size 56035 +oid sha256:96113dd1de793a91c1b4eda784f89cc65396c41aa930274c748ee7afce666de0 +size 1284 diff --git a/assets/voxygen/voxel/sprite/leafy_plant/6.vox b/assets/voxygen/voxel/sprite/leafy_plant/6.vox index 1195bcfbf8..1ea45c7fe1 100644 --- a/assets/voxygen/voxel/sprite/leafy_plant/6.vox +++ b/assets/voxygen/voxel/sprite/leafy_plant/6.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bb29a2be29f4a9cbb4c8fe85c183f5e714b7755f0a8543ae14fd0bacb3f7955b -size 56043 +oid sha256:2546700413ad30593ca2f51c22f1b51dc9b94b43c9cbaa38ffecf18a7addbd07 +size 1292 diff --git a/assets/voxygen/voxel/sprite/leafy_plant/7.vox b/assets/voxygen/voxel/sprite/leafy_plant/7.vox index 75333653f0..57d2ee507f 100644 --- a/assets/voxygen/voxel/sprite/leafy_plant/7.vox +++ b/assets/voxygen/voxel/sprite/leafy_plant/7.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:133a4f32641a65843c38ecbb05863567813106b7ae3f652864af95f2b0d7ffdf -size 56003 +oid sha256:c50625eb6a07a0a3eb04975fa769b6301ad0f4f05f433adb1e3cb5b6b85b712d +size 1252 diff --git a/assets/voxygen/voxel/sprite/leafy_plant/8.vox b/assets/voxygen/voxel/sprite/leafy_plant/8.vox index c6d2d69999..f75a876043 100644 --- a/assets/voxygen/voxel/sprite/leafy_plant/8.vox +++ b/assets/voxygen/voxel/sprite/leafy_plant/8.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cfb5be221fdfeb5f16fbcf220cf487ed7e80c7078f042edfc6fbaabc2c0cc3b5 -size 56091 +oid sha256:5d37384289721949cfeb63c6429454d0356470c52a0d682a1147be46e801fa4d +size 1340 diff --git a/assets/voxygen/voxel/sprite/leafy_plant/9.vox b/assets/voxygen/voxel/sprite/leafy_plant/9.vox index 300ec11865..b4996a9d93 100644 --- a/assets/voxygen/voxel/sprite/leafy_plant/9.vox +++ b/assets/voxygen/voxel/sprite/leafy_plant/9.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e5b12020e170dffd9a6ef27e6b1c52df70a8500108e7a250949241e59725843a -size 55938 +oid sha256:74ffee6cdbda6bfed82453eb285a8d6f3d4bbc01abed21d73a96caf1ef075188 +size 1188 diff --git a/assets/voxygen/voxel/sprite/lianas/liana-0.vox b/assets/voxygen/voxel/sprite/lianas/liana-0.vox index 17d6c9ff16..7c41f0ff64 100644 --- a/assets/voxygen/voxel/sprite/lianas/liana-0.vox +++ b/assets/voxygen/voxel/sprite/lianas/liana-0.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cc7e966c151df969eba998d7db42b4f9c2692baac06007c578e5fd5f76257a8d -size 44614 +oid sha256:a814d732fb05062d88a69ca031a44ca0a7602d8176c4c2f7bd2fa297b5b6983f +size 1504 diff --git a/assets/voxygen/voxel/sprite/lianas/liana-1.vox b/assets/voxygen/voxel/sprite/lianas/liana-1.vox index 10c0f82c93..91a84ddfcf 100644 --- a/assets/voxygen/voxel/sprite/lianas/liana-1.vox +++ b/assets/voxygen/voxel/sprite/lianas/liana-1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:736508e09dadf421bda08cd7071bb343b5409d7228016fcd191934d9bdce16ee -size 44542 +oid sha256:aba2b0f74360c68d55869aa119bc8d12be11b31f8e4d7841938e1b7f98ddd2b6 +size 1432 diff --git a/assets/voxygen/voxel/sprite/lingonberry/1.vox b/assets/voxygen/voxel/sprite/lingonberry/1.vox index 810c35a96a..495ef481a7 100644 --- a/assets/voxygen/voxel/sprite/lingonberry/1.vox +++ b/assets/voxygen/voxel/sprite/lingonberry/1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d7360f39a8586ca2ffb7ab9a83915dd2f7f71f918659b28c9dd2f74b7571fade -size 55962 +oid sha256:c06c3509d8bceffb5f7bd663e86a1c88d5ef72c4fc86e57511c13756bce3e998 +size 1208 diff --git a/assets/voxygen/voxel/sprite/lingonberry/2.vox b/assets/voxygen/voxel/sprite/lingonberry/2.vox index e1e91b4819..97b6479f80 100644 --- a/assets/voxygen/voxel/sprite/lingonberry/2.vox +++ b/assets/voxygen/voxel/sprite/lingonberry/2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:573d189a28e73f31b0ef844d24d09b64f3ff9a1352d79b144e60cadcdb86ba3b -size 55894 +oid sha256:3d365f5e3d4295fde9e893f77cdc521d6c725e1d22ba833cbdfc01abe9dbe628 +size 1408 diff --git a/assets/voxygen/voxel/sprite/lingonberry/3.vox b/assets/voxygen/voxel/sprite/lingonberry/3.vox index 4afa3888c3..221289e105 100644 --- a/assets/voxygen/voxel/sprite/lingonberry/3.vox +++ b/assets/voxygen/voxel/sprite/lingonberry/3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c2de4a70cbcc2fdc620943dbe540e74209ce0e31690f80a8503fedadeb3cf7ec -size 55819 +oid sha256:effa3d5c5776959346288693fc8c9eeab3f9510c099ffc523858419dd4867c22 +size 1332 diff --git a/assets/voxygen/voxel/sprite/mushrooms/mushroom-0.vox b/assets/voxygen/voxel/sprite/mushrooms/mushroom-0.vox index f4788d36a4..a2824a0262 100644 --- a/assets/voxygen/voxel/sprite/mushrooms/mushroom-0.vox +++ b/assets/voxygen/voxel/sprite/mushrooms/mushroom-0.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7b3b9a5b946e477c2fc83415453b375c7d20e2a745c5775dfaea4444d605ccd4 -size 44267 +oid sha256:65ed706fdb0b4ac5e66f22d2edcfc78dea308a51f3616e35cadac11ce8c22656 +size 1160 diff --git a/assets/voxygen/voxel/sprite/mushrooms/mushroom-10.vox b/assets/voxygen/voxel/sprite/mushrooms/mushroom-10.vox index 624733a756..f293502f1b 100644 --- a/assets/voxygen/voxel/sprite/mushrooms/mushroom-10.vox +++ b/assets/voxygen/voxel/sprite/mushrooms/mushroom-10.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7a2508a2a557f5b3c6473ec7a00af1f46583d145a85f5bb8437c0097ee271066 -size 44555 +oid sha256:1bd2decf66c5b2c4712e7f2ae77ae4c530e79373a0ceed111f7254e98dbced6c +size 1448 diff --git a/assets/voxygen/voxel/sprite/mushrooms/mushroom-3.vox b/assets/voxygen/voxel/sprite/mushrooms/mushroom-3.vox index 6878d73760..fac5b3ca1f 100644 --- a/assets/voxygen/voxel/sprite/mushrooms/mushroom-3.vox +++ b/assets/voxygen/voxel/sprite/mushrooms/mushroom-3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9136b9445bc4ebd23744d9105ebdc570fc678f563d9cb493e7747dfa1efb96c0 -size 44351 +oid sha256:d262dc556c2c28fbba8d964aa7c2c42d78bec410e3aa1ee71eb353a7701a8b0e +size 1244 diff --git a/assets/voxygen/voxel/sprite/mushrooms/mushroom-4.vox b/assets/voxygen/voxel/sprite/mushrooms/mushroom-4.vox index 00ff0ad517..b7e0dba6dc 100644 --- a/assets/voxygen/voxel/sprite/mushrooms/mushroom-4.vox +++ b/assets/voxygen/voxel/sprite/mushrooms/mushroom-4.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c0448145f03e200e4f09a78023d7f30b0899a6800c7ef1b293be259e69b70626 -size 55931 +oid sha256:192b8f2baddda973d5b9e55e2aaf0fe8dcb3ddc5be5d242cd6bab319b6f8a763 +size 1448 diff --git a/assets/voxygen/voxel/sprite/mushrooms/mushroom-5.vox b/assets/voxygen/voxel/sprite/mushrooms/mushroom-5.vox index 3132e61eb2..f32e812b5d 100644 --- a/assets/voxygen/voxel/sprite/mushrooms/mushroom-5.vox +++ b/assets/voxygen/voxel/sprite/mushrooms/mushroom-5.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5585c33e889261346e527ab7915d00bfe2a4481259c102f33508c56a444f2e29 -size 44619 +oid sha256:5811aaf9f24505b2d089c9adc176ec906b746b506ae7e64434bc10638b3efd00 +size 1512 diff --git a/assets/voxygen/voxel/sprite/mushrooms/mushroom-6.vox b/assets/voxygen/voxel/sprite/mushrooms/mushroom-6.vox index 3731991771..a3af68eb4a 100644 --- a/assets/voxygen/voxel/sprite/mushrooms/mushroom-6.vox +++ b/assets/voxygen/voxel/sprite/mushrooms/mushroom-6.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:02db7e016c7b20412e757547c7f86276974c467906a35b4c70883a3b8128acda -size 44447 +oid sha256:588d579a9c4dc18c5795459eb27b89082ace9ffabc2034815a0cff750464c9be +size 1340 diff --git a/assets/voxygen/voxel/sprite/mushrooms/mushroom-7.vox b/assets/voxygen/voxel/sprite/mushrooms/mushroom-7.vox index 86ad24fcd0..0a5fa93168 100644 --- a/assets/voxygen/voxel/sprite/mushrooms/mushroom-7.vox +++ b/assets/voxygen/voxel/sprite/mushrooms/mushroom-7.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e2a25c0a08d80855400475b82bc2423af1f2af054efdefba4c42c0064652a8e4 -size 44331 +oid sha256:e0c01c8e11e19b510b7762389782721d55737857ed49230b557a59f10c5e932c +size 1224 diff --git a/assets/voxygen/voxel/sprite/mushrooms/mushroom-8.vox b/assets/voxygen/voxel/sprite/mushrooms/mushroom-8.vox index 656f084ddf..9ce82ae5a2 100644 --- a/assets/voxygen/voxel/sprite/mushrooms/mushroom-8.vox +++ b/assets/voxygen/voxel/sprite/mushrooms/mushroom-8.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0e645c79d7fca501ce13f11c065f7a7316fc2859ad8b56db90644a9f821efbf6 -size 44359 +oid sha256:0ba9246881224580ae0b3df4a4ed7da8119744c48c62f2ab68eec3bb988a9513 +size 1252 diff --git a/assets/voxygen/voxel/sprite/mushrooms/mushroom-9.vox b/assets/voxygen/voxel/sprite/mushrooms/mushroom-9.vox index 99ba72460f..a081aa830e 100644 --- a/assets/voxygen/voxel/sprite/mushrooms/mushroom-9.vox +++ b/assets/voxygen/voxel/sprite/mushrooms/mushroom-9.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9da8d612e2456f3a4a30de1ae800eb3e49e7c39625cb76f5b237f3ec4b241f5e -size 44539 +oid sha256:845460d4711a46dfd8666ed99591d50e846d3c35cc78e1a8fb2db62eba459d93 +size 1432 diff --git a/assets/voxygen/voxel/sprite/pumpkin/1.vox b/assets/voxygen/voxel/sprite/pumpkin/1.vox index acfb86a4c8..731d773e04 100644 --- a/assets/voxygen/voxel/sprite/pumpkin/1.vox +++ b/assets/voxygen/voxel/sprite/pumpkin/1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:78d3c588742f2e5a27038f9941f31938ea1903543b436e036f5ca1909380e348 -size 30911 +oid sha256:09aedb0c998e662d2d9cb8a38d31094316804442b6aa68cb5533c043c07b87b8 +size 2568 diff --git a/assets/voxygen/voxel/sprite/pumpkin/2.vox b/assets/voxygen/voxel/sprite/pumpkin/2.vox index fe8002e648..a26eae8383 100644 --- a/assets/voxygen/voxel/sprite/pumpkin/2.vox +++ b/assets/voxygen/voxel/sprite/pumpkin/2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3e592eb67bee97b702c557a80b81482fdb79235844b96afdc92a7f8268d40299 -size 30955 +oid sha256:cdf17c9e4feac356bf4941df983bfdb1c25bbe151d124dc24e177b793553bc99 +size 2612 diff --git a/assets/voxygen/voxel/sprite/pumpkin/3.vox b/assets/voxygen/voxel/sprite/pumpkin/3.vox index 66be67fa0e..bbbace60ec 100644 --- a/assets/voxygen/voxel/sprite/pumpkin/3.vox +++ b/assets/voxygen/voxel/sprite/pumpkin/3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3cdaaa989326d92a54159aa9ae0b9dccb2f83f3fa0bf4235ad5bb46fa08bb461 -size 30923 +oid sha256:c42591c770fe910efb091b607e8f9c86f39ac687d70766251ee2a7f0e3da303e +size 2580 diff --git a/assets/voxygen/voxel/sprite/pumpkin/4.vox b/assets/voxygen/voxel/sprite/pumpkin/4.vox index 06160bec4f..8aea98cb56 100644 --- a/assets/voxygen/voxel/sprite/pumpkin/4.vox +++ b/assets/voxygen/voxel/sprite/pumpkin/4.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2caec7e41197dfaad625ca100de8f190772483ff8b7ebadc88cd5703a443e569 -size 30935 +oid sha256:735a9f6b32f207bf1ae0e1551c8789f08116991d97743e93620406b1d2850d2d +size 2592 diff --git a/assets/voxygen/voxel/sprite/pumpkin/5.vox b/assets/voxygen/voxel/sprite/pumpkin/5.vox index 3731b6d0c1..2bdf3cef8c 100644 --- a/assets/voxygen/voxel/sprite/pumpkin/5.vox +++ b/assets/voxygen/voxel/sprite/pumpkin/5.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b7cacac223c653c8b73e02b47fc55a3695fe06a798b5993b3387a6e3540fbd85 -size 30959 +oid sha256:260a5e45c90cbc153ecf1846a3461980710c648f682f62cf416d25c4c078db04 +size 2616 diff --git a/assets/voxygen/voxel/sprite/velorite/velorite_1.vox b/assets/voxygen/voxel/sprite/velorite/velorite_1.vox index ec1768dd96..ceea2e97cd 100644 --- a/assets/voxygen/voxel/sprite/velorite/velorite_1.vox +++ b/assets/voxygen/voxel/sprite/velorite/velorite_1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7e96ae991ebf5cfa72ca348ec430668967fc04e75f458e843e4cae62ef4ef788 -size 44436 +oid sha256:8eececfffca6379c845a18ad21c226b6e76279574b09ab3db1303db65361f511 +size 1332 diff --git a/assets/voxygen/voxel/sprite/velorite/velorite_10.vox b/assets/voxygen/voxel/sprite/velorite/velorite_10.vox index fa686f0dbc..802b532def 100644 --- a/assets/voxygen/voxel/sprite/velorite/velorite_10.vox +++ b/assets/voxygen/voxel/sprite/velorite/velorite_10.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a07f51840fa53de0f62d21283eff60b6c88fa5a26c69b3c847c50120c274c88d -size 44480 +oid sha256:322d7832c4196899797335e7c4eb41887954a38b8b735ff0497b16d6043e3419 +size 1376 diff --git a/assets/voxygen/voxel/sprite/velorite/velorite_2.vox b/assets/voxygen/voxel/sprite/velorite/velorite_2.vox index ded60d71e4..c1d8e9ee63 100644 --- a/assets/voxygen/voxel/sprite/velorite/velorite_2.vox +++ b/assets/voxygen/voxel/sprite/velorite/velorite_2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1e010457fc3f41d6d704429ec71323994757fec4c5149a6334a8e9bcb63dd3c1 -size 44512 +oid sha256:3cdad254625676493f1e3b1546a6d8b37c781251dc0ae2ea25de559f542dedc6 +size 1408 diff --git a/assets/voxygen/voxel/sprite/velorite/velorite_3.vox b/assets/voxygen/voxel/sprite/velorite/velorite_3.vox index 8724a042cb..531f1f6e81 100644 --- a/assets/voxygen/voxel/sprite/velorite/velorite_3.vox +++ b/assets/voxygen/voxel/sprite/velorite/velorite_3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:55b32b3a4eca12587bbb848de8e326cbd264b066144d5d2ca37feac0112a29bc -size 44452 +oid sha256:6d69c57dcaedf01985aae2e232c3db9b9da244baea9dddfbdb4bb509511acc43 +size 1348 diff --git a/assets/voxygen/voxel/sprite/velorite/velorite_4.vox b/assets/voxygen/voxel/sprite/velorite/velorite_4.vox index 83febbe7aa..35e5cebf53 100644 --- a/assets/voxygen/voxel/sprite/velorite/velorite_4.vox +++ b/assets/voxygen/voxel/sprite/velorite/velorite_4.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d95ebea771ed4438c4bad4b84a87edb32da65eb187b6ae4642daeb93fd73c8cb -size 44436 +oid sha256:cbdad9241fadbca80a21a0254b19d80c16d85ff32492482d899b28e9148aaf15 +size 1332 diff --git a/assets/voxygen/voxel/sprite/velorite/velorite_5.vox b/assets/voxygen/voxel/sprite/velorite/velorite_5.vox index 44f201fda0..7fdd8afea9 100644 --- a/assets/voxygen/voxel/sprite/velorite/velorite_5.vox +++ b/assets/voxygen/voxel/sprite/velorite/velorite_5.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f457b24de972880941f663cad3dd5687079df763f4bcdc69230bbaf6ba318606 -size 44468 +oid sha256:80887f9fb2ddbc44fa26b295bafd895263fe0191723bcbf14377c06627fe82fd +size 1364 diff --git a/assets/voxygen/voxel/sprite/velorite/velorite_6.vox b/assets/voxygen/voxel/sprite/velorite/velorite_6.vox index 64857bf36a..a737463af4 100644 --- a/assets/voxygen/voxel/sprite/velorite/velorite_6.vox +++ b/assets/voxygen/voxel/sprite/velorite/velorite_6.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0b9fca017e724914507a6604f9bc22ffd929e1282227726168e2d4d55c9ca974 -size 44408 +oid sha256:e2cd51a3ed11b54706e5e2e90d6e9bc1eea32f7db464b0e0d5a66414a251c734 +size 1304 diff --git a/assets/voxygen/voxel/sprite/velorite/velorite_7.vox b/assets/voxygen/voxel/sprite/velorite/velorite_7.vox index 73c5972a1a..2815dd9a59 100644 --- a/assets/voxygen/voxel/sprite/velorite/velorite_7.vox +++ b/assets/voxygen/voxel/sprite/velorite/velorite_7.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:51142b773a0723eea1ecec2edce35fbfe0794a843bc655e92c1052d862b5cc78 -size 44508 +oid sha256:97e197a7e220f44a6c324f32512f744ec1206dab2e5aacf6d3a07a2881930a1a +size 1404 diff --git a/assets/voxygen/voxel/sprite/velorite/velorite_8.vox b/assets/voxygen/voxel/sprite/velorite/velorite_8.vox index 9faeb98634..39f3f6af7b 100644 --- a/assets/voxygen/voxel/sprite/velorite/velorite_8.vox +++ b/assets/voxygen/voxel/sprite/velorite/velorite_8.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2689f902b3d28c73f0d54afd09e6b564330610f02ee9de17ce98c3cf6623db6a -size 44340 +oid sha256:8e1eac4471f5a4b15c3fb1bb59bbdabd29024531b9fb92394bcc1f95844700ea +size 1236 diff --git a/assets/voxygen/voxel/sprite/velorite/velorite_9.vox b/assets/voxygen/voxel/sprite/velorite/velorite_9.vox index 5e72537ace..a39e99564b 100644 --- a/assets/voxygen/voxel/sprite/velorite/velorite_9.vox +++ b/assets/voxygen/voxel/sprite/velorite/velorite_9.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ae35ed953bc5b0bd0196f095c9d5dbce1048b3fbbbf51aeeea9ac81a0196f49e -size 44416 +oid sha256:b31d490ccf8ba14e09b6e1605c292fc1cd37ad5831d8b59793575005ec3272be +size 1312 diff --git a/assets/voxygen/voxel/sprite/velorite/velorite_ore.vox b/assets/voxygen/voxel/sprite/velorite/velorite_ore.vox index d7caf61052..0e34869701 100644 --- a/assets/voxygen/voxel/sprite/velorite/velorite_ore.vox +++ b/assets/voxygen/voxel/sprite/velorite/velorite_ore.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1412107a5ce73b80dd8f91a9a61a232012680cd11e8c16c797ebf25388a1444b -size 57693 +oid sha256:c2670533afcfb70f2ecac6586ce863e02d067f68c208f7237c707461e06b6e7a +size 3212 diff --git a/assets/voxygen/voxel/sprite/welwitch/1.vox b/assets/voxygen/voxel/sprite/welwitch/1.vox index b47af24c3b..3a2c76cbeb 100644 --- a/assets/voxygen/voxel/sprite/welwitch/1.vox +++ b/assets/voxygen/voxel/sprite/welwitch/1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a37b145fbd1e82dd6eff3512545be3e5dff7f9f07a15c095301994f7348afae3 -size 57636 +oid sha256:af1dbfe90347bd5c196b02fc19ab1f9c8cbc3db6a483b9d8d681bef448002e37 +size 3152 diff --git a/assets/voxygen/voxel/weapon/axe/orc-0.vox b/assets/voxygen/voxel/weapon/axe/orc-0.vox new file mode 100644 index 0000000000..f135b207e5 --- /dev/null +++ b/assets/voxygen/voxel/weapon/axe/orc-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:122f08460e44fbcc59e835e47c312ad22c2c2f41faf11f1eade23604080ae707 +size 1556 diff --git a/assets/voxygen/voxel/weapon/hammer/orc-0.vox b/assets/voxygen/voxel/weapon/hammer/orc-0.vox new file mode 100644 index 0000000000..f03ca4f4be --- /dev/null +++ b/assets/voxygen/voxel/weapon/hammer/orc-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ed85da5c6bdfb732f8668289abe16b91af608d128599e7471050800390c3c84 +size 1968 diff --git a/assets/voxygen/voxel/weapon/projectile/fire-bolt-0.vox b/assets/voxygen/voxel/weapon/projectile/fire-bolt-0.vox new file mode 100644 index 0000000000..fed4afe7ea --- /dev/null +++ b/assets/voxygen/voxel/weapon/projectile/fire-bolt-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec4e54b888ffd13401966692126b944c93a50bc2dffad859e5a66f6c91b4010b +size 1804 diff --git a/assets/voxygen/voxel/weapon/projectile/fire-bolt-1.vox b/assets/voxygen/voxel/weapon/projectile/fire-bolt-1.vox new file mode 100644 index 0000000000..0ff9320b16 --- /dev/null +++ b/assets/voxygen/voxel/weapon/projectile/fire-bolt-1.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e21be7a7667ffbf0ec9c1bdcc13476cd7c6a416afff352ecd188b6e51700d990 +size 5416 diff --git a/assets/voxygen/voxel/weapon/projectile/fire-bolt-2.vox b/assets/voxygen/voxel/weapon/projectile/fire-bolt-2.vox deleted file mode 100644 index 133b9c16c7..0000000000 --- a/assets/voxygen/voxel/weapon/projectile/fire-bolt-2.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8d15904841c98667bcb01da55d1d7ad2aa7fd5d3358b72d7070ee89e2a420800 -size 56123 diff --git a/assets/voxygen/voxel/weapon/projectile/fire-bolt.vox b/assets/voxygen/voxel/weapon/projectile/fire-bolt.vox deleted file mode 100644 index 385f737523..0000000000 --- a/assets/voxygen/voxel/weapon/projectile/fire-bolt.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2f57b1e7622e4af69e25010dace42b46a2b4628ecf31e438b5ed3d57c726bc72 -size 56287 diff --git a/assets/voxygen/voxel/weapon/projectile/leaf.vox b/assets/voxygen/voxel/weapon/projectile/leaf.vox index 5424426691..c8cac78836 100644 --- a/assets/voxygen/voxel/weapon/projectile/leaf.vox +++ b/assets/voxygen/voxel/weapon/projectile/leaf.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fce17a25351dd63d00de7850ca81d9a71ea93d713587bb23b3ef0cf0ba4f00a9 -size 55755 +oid sha256:7483ea5a59bf63b62cdb3d7a7c9ed7ce8d06fcc7afd8ca0c4b3fd482a0107bcb +size 1272 diff --git a/assets/voxygen/voxel/weapon/projectile/nature-bolt.vox b/assets/voxygen/voxel/weapon/projectile/nature-bolt.vox index d264912a00..621509ac91 100644 --- a/assets/voxygen/voxel/weapon/projectile/nature-bolt.vox +++ b/assets/voxygen/voxel/weapon/projectile/nature-bolt.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:477af654cf4a713e4c1128dfc64519482b8c12219c49cada4acc85e80713f5c0 -size 56123 +oid sha256:171a9e9eda4d240a86ec111c95c07d0373ab78885ba153759514a17ff08ec1b2 +size 1640 diff --git a/assets/voxygen/voxel/weapon/projectile/simple-arrow.vox b/assets/voxygen/voxel/weapon/projectile/simple-arrow.vox index 4cfe04e2da..36e4d33d25 100644 --- a/assets/voxygen/voxel/weapon/projectile/simple-arrow.vox +++ b/assets/voxygen/voxel/weapon/projectile/simple-arrow.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6cb25e13383c652a6b1cd27282db67ed86f1954e784e4d645d676df125742a9a -size 55647 +oid sha256:506e9c9675bfbd21278a9d01f44c025ae560f05ddec37412f7da394457f2fc0f +size 1164 diff --git a/assets/voxygen/voxel/weapon/projectile/snake-arrow.vox b/assets/voxygen/voxel/weapon/projectile/snake-arrow.vox index c0691fab73..ab253258cd 100644 --- a/assets/voxygen/voxel/weapon/projectile/snake-arrow.vox +++ b/assets/voxygen/voxel/weapon/projectile/snake-arrow.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:05be44bed311c4b7900e5fdcad6438bb3a0003ed4cb645c5d693f5f1a17006cd -size 55679 +oid sha256:964372054cad9962a6f0429bdb9b1ea5794e53e0e822d2a7f9cb6be268bcdf37 +size 1196 diff --git a/assets/voxygen/voxel/weapon/staff/orc-0.vox b/assets/voxygen/voxel/weapon/staff/orc-0.vox new file mode 100644 index 0000000000..803866fe57 --- /dev/null +++ b/assets/voxygen/voxel/weapon/staff/orc-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:659a247fc5db33cc65640e8d51c61de73ce17bc8ac40bc6d92331c45ca833207 +size 1392 diff --git a/assets/voxygen/voxel/weapon/sword/short_2h-0.vox b/assets/voxygen/voxel/weapon/sword/short_2h-0.vox new file mode 100644 index 0000000000..291ca561c8 --- /dev/null +++ b/assets/voxygen/voxel/weapon/sword/short_2h-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df2356d9eea495f7d2975a664eaab89bbfd2cd2c04bd3c7cd8de87c59416eb5d +size 55992 diff --git a/assets/world/module/human/door_big.vox b/assets/world/module/human/door_big.vox index a7b1fb2f37..03e2a5d720 100644 --- a/assets/world/module/human/door_big.vox +++ b/assets/world/module/human/door_big.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ea44b43263f79ca708b3b0fa196ed4eb2157521f4349b0c97524757950e4c59e -size 47099 +oid sha256:716c2f9e7c7fbdd2a0ce1b261967233d262223f905d4c2a23774527920211358 +size 3992 diff --git a/assets/world/structure/dungeon/meso_sewer_temple.vox b/assets/world/structure/dungeon/meso_sewer_temple.vox index 212170d4ed..4172cbf334 100644 --- a/assets/world/structure/dungeon/meso_sewer_temple.vox +++ b/assets/world/structure/dungeon/meso_sewer_temple.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c4c8d26d1273cff385a660bb3d8aaeda94263e77c9fdcda63ceaac7366d9de03 -size 1384956 +oid sha256:d186262d231775818d52c9d7613d2e832a03573981370f894e07c6bc25c5f81e +size 1330472 diff --git a/assets/world/structure/dungeon/ruins.vox b/assets/world/structure/dungeon/ruins.vox index af0aa47308..7141dda66b 100644 --- a/assets/world/structure/dungeon/ruins.vox +++ b/assets/world/structure/dungeon/ruins.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e5dd9935b439a64ecee8a58a5854189314a37714e76cc3388183afdff2ec2d10 -size 850124 +oid sha256:218bfbde154a099d7b2410337eab9e28682bab5a255eda5f20e96d035d142c27 +size 795640 diff --git a/assets/world/structure/dungeon/ruins_2.vox b/assets/world/structure/dungeon/ruins_2.vox index c8eb22eed8..8d919aa986 100644 --- a/assets/world/structure/dungeon/ruins_2.vox +++ b/assets/world/structure/dungeon/ruins_2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:439b57e8560b6b9167a992e83d94bc37da98e74552d304ed864cf1a3456f2c28 -size 750932 +oid sha256:0401ea93aeaa1b57248a309c49bc0f9b003dad971d2dbe5073b9c3a8d10f6226 +size 707824 diff --git a/assets/world/structure/human/blacksmith.vox b/assets/world/structure/human/blacksmith.vox index 78b85ca0fc..ff36b1c097 100644 --- a/assets/world/structure/human/blacksmith.vox +++ b/assets/world/structure/human/blacksmith.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0d5383bc6a28d2014ff5b2e170f86b20d36aad06224731f6c01a5cd3a7b44c2d -size 83276 +oid sha256:02de8d2db9d4046dbad44eef6b5e3f4ea827ca6a77a6076d121731ebd1b2fe65 +size 40168 diff --git a/assets/world/structure/human/house_1.vox b/assets/world/structure/human/house_1.vox index 4ea261776f..48cf82623a 100644 --- a/assets/world/structure/human/house_1.vox +++ b/assets/world/structure/human/house_1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ff60c969d0b7d20b6de9e2fbcf5037675802e62b1580187983e3819a15761537 -size 8612 +oid sha256:ca799602961fa0d786081834352dd9c92e0149293d3f330517cef0fb0e90f88e +size 13400 diff --git a/assets/world/structure/human/mage_tower.vox b/assets/world/structure/human/mage_tower.vox index 0d2115c4c3..6969d0000b 100644 --- a/assets/world/structure/human/mage_tower.vox +++ b/assets/world/structure/human/mage_tower.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:db4f7b604c35763c28aeafcfe7dc1d1722b2db77838677ffa5ef4fb08581be9d -size 41004 +oid sha256:f49b9458defb5de77c45e2f5266dadab448d1320f9593657df0e8f43ae260ff1 +size 76032 diff --git a/assets/world/structure/human/stables_1.vox b/assets/world/structure/human/stables_1.vox index ce5cf90ba3..4eb4a8e59d 100644 --- a/assets/world/structure/human/stables_1.vox +++ b/assets/world/structure/human/stables_1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4317ed2385e4a5da44a53a6c74c3b797c086a67290b2d4f722eb479557871479 -size 30660 +oid sha256:3a309d39bd5c3fafb402d249e76cf1ab6f22fcf1ba64491b466729b8fcf65aaa +size 49752 diff --git a/assets/world/structure/human/town_hall.vox b/assets/world/structure/human/town_hall.vox index 8befbaa750..1c2b0d9943 100644 --- a/assets/world/structure/human/town_hall.vox +++ b/assets/world/structure/human/town_hall.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:42595711180fbecf049f52b4e4c39a8d34d732d4aae841e7e32bd317a39c49e2 -size 80900 +oid sha256:5b7d7368adb164d98b2275cb228c0e75c4c57af0af6cfcc8080b420fbc404c8b +size 46848 diff --git a/assets/world/structure/human/town_hall_spire.vox b/assets/world/structure/human/town_hall_spire.vox index f23eb7e8dc..0e7218ab28 100644 --- a/assets/world/structure/human/town_hall_spire.vox +++ b/assets/world/structure/human/town_hall_spire.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:81bed37162a2179b1e3cc9cf2b1a78fe2498acc9bbbbbca521884c87f0babe85 -size 81773 +oid sha256:9bc99805b91d0db7767b3228ef8c69b13dfa344fe6fd607c309f87c847f1473d +size 48640 diff --git a/assets/world/structure/natural/tower-ruin.vox b/assets/world/structure/natural/tower-ruin.vox index 3a93401000..daf8e581ad 100644 --- a/assets/world/structure/natural/tower-ruin.vox +++ b/assets/world/structure/natural/tower-ruin.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b517ad8d5eec968b1fffb9a8b86d0a42841db2587e38fedd9c0be61c4f6668f3 -size 108341 +oid sha256:9ec122d3d5f63af2210361c215845b582c15e15f9c7f1a9a65afcaf9d77accca +size 53856 diff --git a/assets/world/structure/natural/witch-hut.vox b/assets/world/structure/natural/witch-hut.vox index 38680d217a..306f65b77f 100644 --- a/assets/world/structure/natural/witch-hut.vox +++ b/assets/world/structure/natural/witch-hut.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2901a54ea9a00e87575080069eaac436962e83394dbd207b5322ab6c6c725c0c -size 72628 +oid sha256:64d9e6236966f747004b3de4a5a8b00fb98223787a984b526790956e7d0f9d4b +size 18144 diff --git a/assets/world/tree/acacia/1.vox b/assets/world/tree/acacia/1.vox index 7f3bb1b173..310198c54f 100644 --- a/assets/world/tree/acacia/1.vox +++ b/assets/world/tree/acacia/1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:96fbf34cd1b8bf56bf6bd369ddfbbba6ba181b0ffbd7367c15a1a32a0dd25379 -size 77084 +oid sha256:3e1fee1ea15e891aa424ea8054f5ea5bb02f1e6991c771d4191f0e655aba109b +size 22600 diff --git a/assets/world/tree/acacia/2.vox b/assets/world/tree/acacia/2.vox index c80037b118..08cb8d7e49 100644 --- a/assets/world/tree/acacia/2.vox +++ b/assets/world/tree/acacia/2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5b89cd2aa4c79d86637e82f325bdb5f3ebb89e0c216c97e891b1f05f7f14bf91 -size 56643 +oid sha256:976e990871ab219ca3023eaaad8d7e92a5ed4823555b819dabce6c60581a922f +size 2160 diff --git a/assets/world/tree/acacia/3.vox b/assets/world/tree/acacia/3.vox index 30d4e6bf6a..cb06009f12 100644 --- a/assets/world/tree/acacia/3.vox +++ b/assets/world/tree/acacia/3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b086b9949e2025fc674b0df09ce8d490b646537ee89cfbd70717db0c253afbc2 -size 57551 +oid sha256:3d9bb5949defcad8260a0293a6e42429440dfff4833edfa9a04caf06ef5895e3 +size 3068 diff --git a/assets/world/tree/acacia/4.vox b/assets/world/tree/acacia/4.vox index cdee6ba1c6..30b2e0efde 100644 --- a/assets/world/tree/acacia/4.vox +++ b/assets/world/tree/acacia/4.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0ed2d8fe61bae4f075f95e5f1a14936cadab3bc69eac0784672557942314d878 -size 72196 +oid sha256:2071db98db659494ee497e7ed728c3cbf838fb7f02594b5255417e5e13e182ac +size 17712 diff --git a/assets/world/tree/acacia/5.vox b/assets/world/tree/acacia/5.vox index f744a7aaec..9cf8015236 100644 --- a/assets/world/tree/acacia/5.vox +++ b/assets/world/tree/acacia/5.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9dc5d76617a8aa6ae70e692b30e7f71ba6e32b558a1934446eca77ebdabb59f1 -size 88204 +oid sha256:9fc04f31dd7fb85219500d6145233663e6f1a040aed8b4acc84585e626c10b82 +size 33720 diff --git a/assets/world/tree/acacia_2/1.vox b/assets/world/tree/acacia_2/1.vox index cda1574acc..1e34877f5c 100644 --- a/assets/world/tree/acacia_2/1.vox +++ b/assets/world/tree/acacia_2/1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c8f5224352c662e4400b16f0ebff2ee7accdf188b20748d5049f16f7011902bd -size 51468 +oid sha256:e1b58989ac01175fba006ec70815959a8cdc7fe3035c43f3464a06afd5f65f98 +size 8360 diff --git a/assets/world/tree/acacia_2/2.vox b/assets/world/tree/acacia_2/2.vox index 32ecce590e..b7719a4cec 100644 --- a/assets/world/tree/acacia_2/2.vox +++ b/assets/world/tree/acacia_2/2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fcbe884c673e8e16911318fe228bfba6bc36e65bc1f8c26c9706d92719eac97c -size 44527 +oid sha256:5b17758334983bbd97eef5a66b64c1828bee6df480b745ed2e47e046c047f10e +size 1420 diff --git a/assets/world/tree/acacia_2/3.vox b/assets/world/tree/acacia_2/3.vox index 8bc06e54cc..d0c14bc134 100644 --- a/assets/world/tree/acacia_2/3.vox +++ b/assets/world/tree/acacia_2/3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9734b6769fa66c77ddee14490b1c6a1241048fbdf7f7cfacfefb77c045e484b2 -size 44795 +oid sha256:adc156f886d8fddc6c456ec85c21c0561aee7fa5f51a1a9b074b704e3c0b92ad +size 1688 diff --git a/assets/world/tree/acacia_2/4.vox b/assets/world/tree/acacia_2/4.vox index 6bc02dac6e..ebeb422216 100644 --- a/assets/world/tree/acacia_2/4.vox +++ b/assets/world/tree/acacia_2/4.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c2a53a49c63b45712ee7ddcf9c6ec991193bc17041d12f63264e6372e112c056 -size 51196 +oid sha256:ece352f8ce6034fd20efca429b46426a66a7a2e637a6ec82b8e718af14ceb547 +size 8088 diff --git a/assets/world/tree/acacia_2/5.vox b/assets/world/tree/acacia_2/5.vox index 0c22065caa..77c24923f8 100644 --- a/assets/world/tree/acacia_2/5.vox +++ b/assets/world/tree/acacia_2/5.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cdea24bb04530868486a9b50a84c756a5a90981a70af1bb3c50c1ca72e3b666e -size 51672 +oid sha256:c030cffb4f8f5f908a70046bef904daa4e065d78f718ec22579a05139fba4103 +size 8564 diff --git a/assets/world/tree/acacia_savannah/1.vox b/assets/world/tree/acacia_savannah/1.vox index cda1574acc..1e34877f5c 100644 --- a/assets/world/tree/acacia_savannah/1.vox +++ b/assets/world/tree/acacia_savannah/1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c8f5224352c662e4400b16f0ebff2ee7accdf188b20748d5049f16f7011902bd -size 51468 +oid sha256:e1b58989ac01175fba006ec70815959a8cdc7fe3035c43f3464a06afd5f65f98 +size 8360 diff --git a/assets/world/tree/acacia_savannah/2.vox b/assets/world/tree/acacia_savannah/2.vox index 32ecce590e..b7719a4cec 100644 --- a/assets/world/tree/acacia_savannah/2.vox +++ b/assets/world/tree/acacia_savannah/2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fcbe884c673e8e16911318fe228bfba6bc36e65bc1f8c26c9706d92719eac97c -size 44527 +oid sha256:5b17758334983bbd97eef5a66b64c1828bee6df480b745ed2e47e046c047f10e +size 1420 diff --git a/assets/world/tree/acacia_savannah/3.vox b/assets/world/tree/acacia_savannah/3.vox index 8bc06e54cc..d0c14bc134 100644 --- a/assets/world/tree/acacia_savannah/3.vox +++ b/assets/world/tree/acacia_savannah/3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9734b6769fa66c77ddee14490b1c6a1241048fbdf7f7cfacfefb77c045e484b2 -size 44795 +oid sha256:adc156f886d8fddc6c456ec85c21c0561aee7fa5f51a1a9b074b704e3c0b92ad +size 1688 diff --git a/assets/world/tree/acacia_savannah/4.vox b/assets/world/tree/acacia_savannah/4.vox index 6bc02dac6e..ebeb422216 100644 --- a/assets/world/tree/acacia_savannah/4.vox +++ b/assets/world/tree/acacia_savannah/4.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c2a53a49c63b45712ee7ddcf9c6ec991193bc17041d12f63264e6372e112c056 -size 51196 +oid sha256:ece352f8ce6034fd20efca429b46426a66a7a2e637a6ec82b8e718af14ceb547 +size 8088 diff --git a/assets/world/tree/acacia_savannah/5.vox b/assets/world/tree/acacia_savannah/5.vox index 0c22065caa..77c24923f8 100644 --- a/assets/world/tree/acacia_savannah/5.vox +++ b/assets/world/tree/acacia_savannah/5.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cdea24bb04530868486a9b50a84c756a5a90981a70af1bb3c50c1ca72e3b666e -size 51672 +oid sha256:c030cffb4f8f5f908a70046bef904daa4e065d78f718ec22579a05139fba4103 +size 8564 diff --git a/assets/world/tree/birch/1.vox b/assets/world/tree/birch/1.vox index a9ad3ad272..e7b73f2e3d 100644 --- a/assets/world/tree/birch/1.vox +++ b/assets/world/tree/birch/1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b4feb6fa04b9a6f690fcc7d38b95f7241f60755ce01f7f997085604e31b77c4e -size 81146 +oid sha256:12d70c9eb73e1dcdacb0d69bd9a15779c14330b9abf300fc72d8dbc5aeb94fc2 +size 26648 diff --git a/assets/world/tree/birch/10.vox b/assets/world/tree/birch/10.vox index a4d6dc6e5c..55b2cb4255 100644 --- a/assets/world/tree/birch/10.vox +++ b/assets/world/tree/birch/10.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:44bf3260cc277fbc8d4dee3bf03ecee2731bba50be71c9cd0bfd8c09e6e15a47 -size 64047 +oid sha256:e41bc0f1f3dd4e132bc36f882c24f3b86250c45094a6148b54eebbc8ec390357 +size 9548 diff --git a/assets/world/tree/birch/11.vox b/assets/world/tree/birch/11.vox index 953562c42e..8308161019 100644 --- a/assets/world/tree/birch/11.vox +++ b/assets/world/tree/birch/11.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:116453e56fa397af73a745f9ea65c57c9a9e789fef9343b941e2dba3fdac2f48 -size 60803 +oid sha256:45a343718083ea858bfad37877c325f6f7072c8d8e6bfb733f52f99741a1e2a7 +size 6304 diff --git a/assets/world/tree/birch/12.vox b/assets/world/tree/birch/12.vox index 953562c42e..8308161019 100644 --- a/assets/world/tree/birch/12.vox +++ b/assets/world/tree/birch/12.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:116453e56fa397af73a745f9ea65c57c9a9e789fef9343b941e2dba3fdac2f48 -size 60803 +oid sha256:45a343718083ea858bfad37877c325f6f7072c8d8e6bfb733f52f99741a1e2a7 +size 6304 diff --git a/assets/world/tree/birch/2.vox b/assets/world/tree/birch/2.vox index 0b89405a7d..88b07be8e4 100644 --- a/assets/world/tree/birch/2.vox +++ b/assets/world/tree/birch/2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8065a64cf3e79c94d1d4e12917a428efa145d1c8cb30279a67f71c781cbe7ff1 -size 78771 +oid sha256:4509282720a2888e579608a6e980653e0011e6d9efa0e8e3ab949e526275455a +size 24272 diff --git a/assets/world/tree/birch/3.vox b/assets/world/tree/birch/3.vox index b86528f3f1..0ba3461cfe 100644 --- a/assets/world/tree/birch/3.vox +++ b/assets/world/tree/birch/3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b4d2e54569129b94ba9e53d7a704862819fc696956cfb9766168230b8b4667e5 -size 65746 +oid sha256:4862bd818c18d3f182d6d4131a74154fd594ef97889efbfd42502f3bad8a1ad5 +size 11248 diff --git a/assets/world/tree/birch/4.vox b/assets/world/tree/birch/4.vox index 0c4c4326a5..13fc3a7710 100644 --- a/assets/world/tree/birch/4.vox +++ b/assets/world/tree/birch/4.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6c69b2bba7f3bc783388ca543f2949b43e26845633993f5ead407b8658739b42 -size 62803 +oid sha256:2e39d763277a9b3b6faba30e0437e5222b66acaa27e588151f215db5487a9a72 +size 8304 diff --git a/assets/world/tree/birch/5.vox b/assets/world/tree/birch/5.vox index 23a5ea04c5..f0b4fb9f2a 100644 --- a/assets/world/tree/birch/5.vox +++ b/assets/world/tree/birch/5.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5edb7f5238465dbef648ca870b5f757dfe6e0d169981e758f3732072889378dc -size 65646 +oid sha256:05fcb5e3434ff0a00f721f6ed4cbba409d09b5db696008d42a546d2d16d415cb +size 11148 diff --git a/assets/world/tree/birch/6.vox b/assets/world/tree/birch/6.vox index 3446c136ca..6ad324f14d 100644 --- a/assets/world/tree/birch/6.vox +++ b/assets/world/tree/birch/6.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:16f732bc64a135c159a4b79354baf98ee3635af364a07bcde87ea90db3be06fb -size 59982 +oid sha256:6243ed0c14c0da325de68696f69386f52ca3a878f7691599864aa9402e825cba +size 5484 diff --git a/assets/world/tree/birch/7.vox b/assets/world/tree/birch/7.vox index 457b7c0289..53a6e5af94 100644 --- a/assets/world/tree/birch/7.vox +++ b/assets/world/tree/birch/7.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b526678365634589a95cd450908e2c3bb18d90f9f8844209f57da1621ce9ec30 -size 61482 +oid sha256:341ff6145c2435b03258bd75da404fdd1ce186507dfd04b380224a1558867003 +size 6984 diff --git a/assets/world/tree/birch/8.vox b/assets/world/tree/birch/8.vox index 3b80814a10..c004751306 100644 --- a/assets/world/tree/birch/8.vox +++ b/assets/world/tree/birch/8.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:39146dbe33335e1bcdd2dc20d5a4fa6461ebc78661ab09334c73bbd70b803bad -size 63562 +oid sha256:f163166734a983cba401e68b8fccaf0b077a59150b1f2e829f5540dd15e3e6f0 +size 9064 diff --git a/assets/world/tree/birch/9.vox b/assets/world/tree/birch/9.vox index 0053d0af1f..3889a13a27 100644 --- a/assets/world/tree/birch/9.vox +++ b/assets/world/tree/birch/9.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7aef2d5997afbd3bc54b94ceb4e7a9cef2571f60419eff6232198dd66f97fc8b -size 61114 +oid sha256:431603f089ba004d648faf2dc75cbb332893af50c84330581f4ff5bc2d4ddd5d +size 6616 diff --git a/assets/world/tree/desert_palm/1.vox b/assets/world/tree/desert_palm/1.vox index 0c4eb78c72..bec36a7ddf 100644 --- a/assets/world/tree/desert_palm/1.vox +++ b/assets/world/tree/desert_palm/1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3c513ebf3211c3d54b2c3c6958611ee9f731631358c526abc99d7cd5d319ebfb -size 57052 +oid sha256:abe347ac442a2afc287869f9d2256c5af2b6507f4d1fa370f39769a95119713c +size 2568 diff --git a/assets/world/tree/desert_palm/10.vox b/assets/world/tree/desert_palm/10.vox index fb4bdcff49..c0daf1cff2 100644 --- a/assets/world/tree/desert_palm/10.vox +++ b/assets/world/tree/desert_palm/10.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b354e9dcb5d0248c2c5a6ff957a6672056857db2fff866dc95eeeaf42f73d602 -size 57840 +oid sha256:06a39754b0d316639d487275ea85534eb6a325a4d70b4e987450c1c702f12e01 +size 3356 diff --git a/assets/world/tree/desert_palm/2.vox b/assets/world/tree/desert_palm/2.vox index ee651885f5..7c582c5ae1 100644 --- a/assets/world/tree/desert_palm/2.vox +++ b/assets/world/tree/desert_palm/2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:63d2ef68f5f9a3784d07b4c76b44ae142de65c5b6a7b07648216b316a5c72311 -size 57020 +oid sha256:807b9c55da8106d93d538d2e55b9cb3056cd01c35d98eb6cead69a9814e71225 +size 2536 diff --git a/assets/world/tree/desert_palm/3.vox b/assets/world/tree/desert_palm/3.vox index 5876b4ba4b..c8862eaee3 100644 --- a/assets/world/tree/desert_palm/3.vox +++ b/assets/world/tree/desert_palm/3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:19074146b71d0cad6ebf4706ce0951be12d3af06b4afe17d594a12275c877b02 -size 57212 +oid sha256:a8869e83bc5fd1263d512153ea1e30296ffcce3d87f319edd488ee4d1c9fb4a7 +size 2728 diff --git a/assets/world/tree/desert_palm/4.vox b/assets/world/tree/desert_palm/4.vox index 7d13d8b3d8..83ee9bcdbb 100644 --- a/assets/world/tree/desert_palm/4.vox +++ b/assets/world/tree/desert_palm/4.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:22e6d4bcc29a4e0a8c35835e1c0fcc372053c80accbb0f0599bcaf7299ce4a7b -size 57148 +oid sha256:d9d7b5343efd602dfbb5f2fa61ad2882a67a1554a977f14d68b916229e284409 +size 2664 diff --git a/assets/world/tree/desert_palm/5.vox b/assets/world/tree/desert_palm/5.vox index e4ced51f77..3ca1dc1d68 100644 --- a/assets/world/tree/desert_palm/5.vox +++ b/assets/world/tree/desert_palm/5.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bd6107d228e05a15a9ff2c8acb219d4db818b408dfcd2ee558d8ed7203070c03 -size 57152 +oid sha256:d37842b815dcb28c0c2004d150ef2f0cbb466a1fc64934beb469e6f8312502c8 +size 2668 diff --git a/assets/world/tree/desert_palm/6.vox b/assets/world/tree/desert_palm/6.vox index 9057fb584b..93e02f1ba3 100644 --- a/assets/world/tree/desert_palm/6.vox +++ b/assets/world/tree/desert_palm/6.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8af2b8ed51ad5224cedc87d481fed965935bf75280a5a6f19120d43a544e5db8 -size 57252 +oid sha256:06876ab785668631c73147d4cea201e40579746055cab5f505f0d3017e21fe88 +size 2768 diff --git a/assets/world/tree/desert_palm/7.vox b/assets/world/tree/desert_palm/7.vox index eb7e973649..4445dbf3b3 100644 --- a/assets/world/tree/desert_palm/7.vox +++ b/assets/world/tree/desert_palm/7.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:156a9c3592e0d9a0fb90f1459b1c8310fe33f3dced04eb58c3cbcdd866cf139a -size 57524 +oid sha256:b7ae32444793fe113333e6969597eb8864b5212b0326eb0506c68cbde224d810 +size 3040 diff --git a/assets/world/tree/desert_palm/8.vox b/assets/world/tree/desert_palm/8.vox index b4beddc15d..579d53bf10 100644 --- a/assets/world/tree/desert_palm/8.vox +++ b/assets/world/tree/desert_palm/8.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7257c5316e7a8b8dd559bc0c511ed0b9b84eafdc758568fe53a71c0e0f7527ea -size 57188 +oid sha256:c33f5c43adf96b9a405f50b29bdb226b2775b3cca69692f3629afcc558f54cab +size 2704 diff --git a/assets/world/tree/desert_palm/9.vox b/assets/world/tree/desert_palm/9.vox index 7a6c2ec610..58315225c9 100644 --- a/assets/world/tree/desert_palm/9.vox +++ b/assets/world/tree/desert_palm/9.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a200ed2670bcdf2d7c1ef42aaf23dc253d1d6f87d0723c6a985465ca99259cb4 -size 57636 +oid sha256:3005d011c0a2cb0117adafffbb884c97ee8b6491e104cbcb97410be325acc096 +size 3152 diff --git a/assets/world/tree/desert_palm_old/1.vox b/assets/world/tree/desert_palm_old/1.vox index fff6ba1b91..bec36a7ddf 100644 --- a/assets/world/tree/desert_palm_old/1.vox +++ b/assets/world/tree/desert_palm_old/1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:db332ddd98b5175986dce254759eee3e6561cd559dcb9f58218ad7113577a1cd -size 46479 +oid sha256:abe347ac442a2afc287869f9d2256c5af2b6507f4d1fa370f39769a95119713c +size 2568 diff --git a/assets/world/tree/desert_palm_old/10.vox b/assets/world/tree/desert_palm_old/10.vox index f1d77777ec..e05ad08d54 100644 --- a/assets/world/tree/desert_palm_old/10.vox +++ b/assets/world/tree/desert_palm_old/10.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3c3d3ef277cf6d52bebcd9478e51f7779dfe3c7b4f2e3fd1a611b993108249ac -size 46138 +oid sha256:10cebeb0facf61c5e5b01e0cb4a2c53d3871677f3c120ac14164afc89df32b87 +size 3004 diff --git a/assets/world/tree/desert_palm_old/2.vox b/assets/world/tree/desert_palm_old/2.vox index 50d106ffcf..a182725d0a 100644 --- a/assets/world/tree/desert_palm_old/2.vox +++ b/assets/world/tree/desert_palm_old/2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e330bf9979b2c4f59c33e464dcdf4bb25fc4cf3348ab4e191f6f3c36bfca5f6a -size 46189 +oid sha256:caca1a9c7c717e3dcc2fe5787e69139d816ddd2cb0cb5ad54c51298f28764a9e +size 3056 diff --git a/assets/world/tree/desert_palm_old/3.vox b/assets/world/tree/desert_palm_old/3.vox index 7e2c279a1d..60a255cea8 100644 --- a/assets/world/tree/desert_palm_old/3.vox +++ b/assets/world/tree/desert_palm_old/3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9dd9002762da1a11816e42066b937fc943d94f095ffe1cd28ad64df6f09cf7da -size 46585 +oid sha256:51016319e64f1df1a5121e14a488aacf35e29c5676fcba4ffcc595c439c22508 +size 3452 diff --git a/assets/world/tree/desert_palm_old/4.vox b/assets/world/tree/desert_palm_old/4.vox index 5080c63b60..c523f8be06 100644 --- a/assets/world/tree/desert_palm_old/4.vox +++ b/assets/world/tree/desert_palm_old/4.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:65edf5be2cb4e192bc0f575c63c3824e20fd454bd7766b92624078404b27ba05 -size 46289 +oid sha256:5460e522e7026bf2f0f1b4f46f7d7fcff0e675c8cfcb216f39978f61f2bb4a96 +size 3156 diff --git a/assets/world/tree/desert_palm_old/5.vox b/assets/world/tree/desert_palm_old/5.vox index 63613e35f0..282c8bce65 100644 --- a/assets/world/tree/desert_palm_old/5.vox +++ b/assets/world/tree/desert_palm_old/5.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4d1507a908ac2381b29045ef6d4b52d7868e3e712bd1d3e4c7635127f86ac088 -size 46145 +oid sha256:71ad147f6040ddca601f6eb35f06963bca0b5a0c9fdc9f848605487212bbd475 +size 3012 diff --git a/assets/world/tree/desert_palm_old/6.vox b/assets/world/tree/desert_palm_old/6.vox index a5e24de749..0b4b8b6d25 100644 --- a/assets/world/tree/desert_palm_old/6.vox +++ b/assets/world/tree/desert_palm_old/6.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b1c8184dd48feaf4665fa5e866a01080894494a1893c95b9465eb34f8bcb0c5a -size 46113 +oid sha256:e139c706a46394f4f84f0a3c948976a96c08d41b683a14bd47559d54f688a9e4 +size 2980 diff --git a/assets/world/tree/desert_palm_old/7.vox b/assets/world/tree/desert_palm_old/7.vox index 1fe792529b..9631bc5e3f 100644 --- a/assets/world/tree/desert_palm_old/7.vox +++ b/assets/world/tree/desert_palm_old/7.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:57ad80786e3e98e941693ace3c12d840de97bc13ac1c61b72f94db4ced3cd372 -size 46355 +oid sha256:ff5522828c67a45e8debcf1137fd871cab50e1dcd7d0d8d8fe1d82571284e6b1 +size 3236 diff --git a/assets/world/tree/desert_palm_old/8.vox b/assets/world/tree/desert_palm_old/8.vox index 673abcfb43..2e87ef74b0 100644 --- a/assets/world/tree/desert_palm_old/8.vox +++ b/assets/world/tree/desert_palm_old/8.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c2b901ce347828826e297c47a33000156f741ed43f33e2639317022a98f2a5dc -size 46257 +oid sha256:4d2711eabe9972f49449441e2ef0742b07b6e718cf4a81bbaba24c98ebc05b5a +size 3124 diff --git a/assets/world/tree/desert_palm_old/9.vox b/assets/world/tree/desert_palm_old/9.vox index 29756cff4b..f81f3e583f 100644 --- a/assets/world/tree/desert_palm_old/9.vox +++ b/assets/world/tree/desert_palm_old/9.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:557b27a10044a9e4228a77e8534e69382a22219c77a99e553feab6be4b03cc12 -size 46289 +oid sha256:db651fae2577f2d6d0e2c5e74484dba793edffe914313b90a1aaf0aafb22fffa +size 3156 diff --git a/assets/world/tree/fruit/1.vox b/assets/world/tree/fruit/1.vox index b4cf33a833..9d3539eeb5 100644 --- a/assets/world/tree/fruit/1.vox +++ b/assets/world/tree/fruit/1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a0f89bd6bbe56c3759edee2155c4461d408e727b11261d78408a887557d73ec0 -size 45945 +oid sha256:525d55c479c0aebe717dc8eba0cde69c1177b1feaa85e4fb83991d68460cc682 +size 3360 diff --git a/assets/world/tree/fruit/2.vox b/assets/world/tree/fruit/2.vox index fa1e2f3a19..b4c19ba55a 100644 --- a/assets/world/tree/fruit/2.vox +++ b/assets/world/tree/fruit/2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9462cb554dbf83893e634226ccb9db149d03e490d122e6d1876d225581538754 -size 47877 +oid sha256:9452cd1dfe06d4eb4a51b0536ae4836b77fbf02d4d80da1ed227a4d4ea93ff32 +size 4768 diff --git a/assets/world/tree/fruit/3.vox b/assets/world/tree/fruit/3.vox index 4843141be7..592f0f86c5 100644 --- a/assets/world/tree/fruit/3.vox +++ b/assets/world/tree/fruit/3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1f3e8d2ec16b41db66190ba43bd8910d45fbab113dbe2d498db0d3e01f33ef1a -size 49165 +oid sha256:b0544810cad5496d0c7d6bb6973a6c7ded441f3184258efef27e6b8a1735605e +size 6056 diff --git a/assets/world/tree/fruit/4.vox b/assets/world/tree/fruit/4.vox index 58aa6273d7..a36a86f668 100644 --- a/assets/world/tree/fruit/4.vox +++ b/assets/world/tree/fruit/4.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:621466a1e25e08b1c80eb3d017a3fb0233e6f3182053277a9aef5a1bcfc2611f -size 45317 +oid sha256:cd38a56cb16eada7b1ece8dc1c3ef57fdac6c067ffbc0c21caaaa7845f5bdf53 +size 2208 diff --git a/assets/world/tree/fruit/5.vox b/assets/world/tree/fruit/5.vox index a68ed85026..b873c149a7 100644 --- a/assets/world/tree/fruit/5.vox +++ b/assets/world/tree/fruit/5.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:139b5e7ab4df1a969f0a090de0bdf87ecfae58b157d9c12091b79152f3f00659 -size 48853 +oid sha256:c71e99296fd036f1188fc249c9a6cde56bb28ca87a27c9552841ef1bf7f26e6e +size 5744 diff --git a/assets/world/tree/fruit/6.vox b/assets/world/tree/fruit/6.vox index 6fff562c22..8ad90de1b1 100644 --- a/assets/world/tree/fruit/6.vox +++ b/assets/world/tree/fruit/6.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3dad59c08180acc8f8ed3307e6ec7561098c4d8777bde48fd4007608deb3f415 -size 49153 +oid sha256:7c80c9cb3abf230ba078fe7d0762c86656763acfb1f7a3906d0af19e751c81fa +size 6044 diff --git a/assets/world/tree/mangroves/1.vox b/assets/world/tree/mangroves/1.vox index a2ddeafc07..01c27e08d2 100644 --- a/assets/world/tree/mangroves/1.vox +++ b/assets/world/tree/mangroves/1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f7a77de284af943c8037ce526cf953bfeba5cecc0c7a618eb1235de2b1d8397b -size 92800 +oid sha256:8b2216711df71746938e13dd5d764d2d440b9b41342e870db311c31edd863b55 +size 38312 diff --git a/assets/world/tree/mangroves/2.vox b/assets/world/tree/mangroves/2.vox index e4dac3cd19..3ee653ec0b 100644 --- a/assets/world/tree/mangroves/2.vox +++ b/assets/world/tree/mangroves/2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:130e42d52d64da1838b02c05452633c79405bc6c539d600d0ab5b4cca8e0d97b -size 82388 +oid sha256:3071e34a8192189c7f7c70bc4a75a06122c27a82e0bfc8d299c8843f8f42b6be +size 27900 diff --git a/assets/world/tree/mangroves/3.vox b/assets/world/tree/mangroves/3.vox index e100044a42..bf9fb014b2 100644 --- a/assets/world/tree/mangroves/3.vox +++ b/assets/world/tree/mangroves/3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7735e2b70eb6e9c73e179f2bc9e93ea4fc115583ffd8b9a2d7e5f818372f1b42 -size 107016 +oid sha256:c35603fdbec8a0ed14cbf58133fefd999b457dda56bf8bb66ea519fa65a4bf04 +size 52528 diff --git a/assets/world/tree/mangroves/4.vox b/assets/world/tree/mangroves/4.vox index 72f4f68fee..4499836fcb 100644 --- a/assets/world/tree/mangroves/4.vox +++ b/assets/world/tree/mangroves/4.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a2e50b5dd0588d478cbc9eef360d3d0f35baa8984b0c12612e12b1ab271b19c6 -size 103344 +oid sha256:4dbca327b6129910e95f235c2c6d334b2ec0b77b192030ff0c5eb620fedaaff0 +size 48860 diff --git a/assets/world/tree/mangroves/5.vox b/assets/world/tree/mangroves/5.vox index 1ed5180763..ee34c5a1ce 100644 --- a/assets/world/tree/mangroves/5.vox +++ b/assets/world/tree/mangroves/5.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7b14f0750c28c624d3ba7d40a91c94b523cabeb093cecda28fc513ae27e965a3 -size 99336 +oid sha256:28c0db8409627938b41986bf976d8ff5a84f86e036fb385fb52228b743ad5c73 +size 44852 diff --git a/assets/world/tree/mangroves/6.vox b/assets/world/tree/mangroves/6.vox index 1d119e2641..6a479a72f5 100644 --- a/assets/world/tree/mangroves/6.vox +++ b/assets/world/tree/mangroves/6.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4d63e1d72070ffd05d13514002c382e3ea5bcabb060cacc7e0d2fb8ae1bdcfa5 -size 117544 +oid sha256:05ae9ce6977e4b7ff6752023e53a6488e4ea8b2873f5aeb726dc83ffdbe85fbc +size 63060 diff --git a/assets/world/tree/mangroves/7.vox b/assets/world/tree/mangroves/7.vox index 10d1879771..dbfb89aae5 100644 --- a/assets/world/tree/mangroves/7.vox +++ b/assets/world/tree/mangroves/7.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:32aa2cea45cbeac63e1997e3887c8a5ba7f5d3bd3ec97007a2d8262791d19187 -size 104228 +oid sha256:963035ca5f4ab5b436620c1de7a0ef2e9ae8b57c54cd055db5c935f6147bd082 +size 49744 diff --git a/assets/world/tree/mangroves/8.vox b/assets/world/tree/mangroves/8.vox index 00d278c049..af66eaadfb 100644 --- a/assets/world/tree/mangroves/8.vox +++ b/assets/world/tree/mangroves/8.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:812ab3d5234040d75fa97b05aa5f50ac5f11bc79baf1c30f5280ca3badf6924b -size 123004 +oid sha256:3aaa46ee933a356a7b4f9f2fdb93ce4ec6b8383be6bc202022d461291de19bb9 +size 68520 diff --git a/assets/world/tree/oak_green/1.vox b/assets/world/tree/oak_green/1.vox index c2227fc623..2f3f218fc4 100644 --- a/assets/world/tree/oak_green/1.vox +++ b/assets/world/tree/oak_green/1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:90cb2531d3a7bbf5a856b93abed2b4fa6c99038d2b1c119c01319e9bc6b092bd -size 80540 +oid sha256:0ae73d01cec664140951e5352897e23d1be22023e298e6f23640b7114f3afe2d +size 37436 diff --git a/assets/world/tree/oak_green/2.vox b/assets/world/tree/oak_green/2.vox index 1ab9fe3e60..efe83ff0c5 100644 --- a/assets/world/tree/oak_green/2.vox +++ b/assets/world/tree/oak_green/2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8cbe46a82f64ec25e3dba71606d2215e601b2bc643b7422fb50a8f1d253fb531 -size 88800 +oid sha256:3a3a77fac13fddda713f3ab5ccce14db9e823f12f1a2a4635fa62e476180d73c +size 45696 diff --git a/assets/world/tree/oak_green/3.vox b/assets/world/tree/oak_green/3.vox index 988d4a93bd..eb25589e2c 100644 --- a/assets/world/tree/oak_green/3.vox +++ b/assets/world/tree/oak_green/3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c7c63b94c8bdc6d41fdd22f1ce1426e8abbf2d7f1cc4d3e2feb24782a2015535 -size 126300 +oid sha256:4187d7ed8d8e68f8dec18e4ac1a58843c618820bf3c5eaa18147debc9d99e885 +size 71820 diff --git a/assets/world/tree/oak_green/4.vox b/assets/world/tree/oak_green/4.vox index 7bcd66bd37..94b332c90b 100644 --- a/assets/world/tree/oak_green/4.vox +++ b/assets/world/tree/oak_green/4.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5862b4a6bf51df3a0659e1f007cf408714a4db659fda78370b5fad732c08eaa9 -size 89452 +oid sha256:c548dd81c891b427eee64181abfcfab93e5f4a0b8e094c615abf6d6d7b05d536 +size 46348 diff --git a/assets/world/tree/oak_green/5.vox b/assets/world/tree/oak_green/5.vox index 09686c3c71..8e8a0024d8 100644 --- a/assets/world/tree/oak_green/5.vox +++ b/assets/world/tree/oak_green/5.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ebac9342727decad370699b7e77517518fcd82062eba6496d4cafa35360b403d -size 106552 +oid sha256:ab50dbd7b07351299187edafc3a57b27fe7a1547a570d808612ee0897858c4b7 +size 52072 diff --git a/assets/world/tree/oak_green/6.vox b/assets/world/tree/oak_green/6.vox index 44a55fa64e..251daa43ae 100644 --- a/assets/world/tree/oak_green/6.vox +++ b/assets/world/tree/oak_green/6.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:257fbc96e69cf00c6b0dd93df953dea53ee3cf628e296ba04259f887e83d7d1b -size 112496 +oid sha256:b59539ce4aa45d8c68ca2d44c7ded05870f5d56185b996eafd8606cdb4a1e1cf +size 69392 diff --git a/assets/world/tree/oak_green/7.vox b/assets/world/tree/oak_green/7.vox index 4809311ae6..94b332c90b 100644 --- a/assets/world/tree/oak_green/7.vox +++ b/assets/world/tree/oak_green/7.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6623f234e6a591a4f73934f192351eec1280a0c92208cd6e227e4c368a7e2e14 -size 123856 +oid sha256:c548dd81c891b427eee64181abfcfab93e5f4a0b8e094c615abf6d6d7b05d536 +size 46348 diff --git a/assets/world/tree/oak_green/8.vox b/assets/world/tree/oak_green/8.vox index 76bcb46efc..a9b43adb18 100644 --- a/assets/world/tree/oak_green/8.vox +++ b/assets/world/tree/oak_green/8.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c44033a6b7996f42022f79cb18323431f06dae59273713f3b943cad2a4cb6f2e -size 116232 +oid sha256:d377ea2188ec402c601ee1ab84f557eb0777154ac05e36f0f3448ed3800956c8 +size 73128 diff --git a/assets/world/tree/oak_green/9.vox b/assets/world/tree/oak_green/9.vox index 50dcb81feb..9169bc887b 100644 --- a/assets/world/tree/oak_green/9.vox +++ b/assets/world/tree/oak_green/9.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:94bae0b39a4c902082c96deaee17371a3334ac6aa48fd268bf49c61258903344 -size 135498 +oid sha256:885b58ef71185d76fb4874b40f2c6bdb70864d3cd2c644a45a3bd7c5b024a999 +size 81020 diff --git a/assets/world/tree/oak_stump/1.vox b/assets/world/tree/oak_stump/1.vox index 80a25d58f6..3b3f2cf5a5 100644 --- a/assets/world/tree/oak_stump/1.vox +++ b/assets/world/tree/oak_stump/1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:60135681a5a9565c77b3bb4b9227ac861d1c522ddbd94c03909aa0b3112848c4 -size 49680 +oid sha256:247892994e6005f1976cf20ade31fb1326152a62a4323734ca588ab9dddb4f9c +size 6576 diff --git a/assets/world/tree/oak_stump/2.vox b/assets/world/tree/oak_stump/2.vox index 5ce3b7e4eb..2a51198c40 100644 --- a/assets/world/tree/oak_stump/2.vox +++ b/assets/world/tree/oak_stump/2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:120026d00835e35c953b642e855a02cfce3d9ad4298cf2f9cba7727c9b29d098 -size 49968 +oid sha256:2eaa74f4f81276aac5111fd91b360e4b898fe18ce297eca274f0ce2f3d2a1a04 +size 6864 diff --git a/assets/world/tree/oak_stump/3.vox b/assets/world/tree/oak_stump/3.vox index c8e6bdcf19..83b184d872 100644 --- a/assets/world/tree/oak_stump/3.vox +++ b/assets/world/tree/oak_stump/3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2729b990855302cdca585049beddd7d1fd6277da8e24aaf82fc500f2390a53d5 -size 62136 +oid sha256:3ae1917ba5eed0708123ba960529e6c2c4087bb10aeafbc7b55b69a61eb73707 +size 7656 diff --git a/assets/world/tree/oak_stump/4.vox b/assets/world/tree/oak_stump/4.vox index 0083b4c41e..9a7e716831 100644 --- a/assets/world/tree/oak_stump/4.vox +++ b/assets/world/tree/oak_stump/4.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:efdd4d2545af5cdefdebe0b3903a00f6de067b53aebfbbacafa947f092cbe1f8 -size 50108 +oid sha256:6cd731b9357f59d0fb415e8e6179f85c3458ee7370f1f9b586721c60845b45ba +size 7004 diff --git a/assets/world/tree/oak_stump/5.vox b/assets/world/tree/oak_stump/5.vox index 139c635908..6d9a195b59 100644 --- a/assets/world/tree/oak_stump/5.vox +++ b/assets/world/tree/oak_stump/5.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d0b05790bfa582be6f11287e74c44bf82c9fb637718764b9e729f098263e2cc1 -size 50012 +oid sha256:bf110f9d82e0081f2344db1dfd7b88af43d02cb6e8ba7fc7ea08b2d970befa76 +size 6908 diff --git a/assets/world/tree/oak_stump/6.vox b/assets/world/tree/oak_stump/6.vox index eeb323998a..ce701351fc 100644 --- a/assets/world/tree/oak_stump/6.vox +++ b/assets/world/tree/oak_stump/6.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:055279ff59c34829980312ca87c754d73a102ed8af2b189dec0f2e4f754627c6 -size 52528 +oid sha256:534a823b86deacc40f887be78a928c73f67ea7307e27732f078bb9f84ddbe026 +size 9424 diff --git a/assets/world/tree/oak_stump/7.vox b/assets/world/tree/oak_stump/7.vox index 2d389a29d2..b481f6944e 100644 --- a/assets/world/tree/oak_stump/7.vox +++ b/assets/world/tree/oak_stump/7.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c5485e1bc4137a80608dbd2985ef0f7da829f2a989f14ff123cf7812f4a71487 -size 50052 +oid sha256:2c363912985f3b962b7a18c79f74fab8739386f9a78807c85dd5559b1f1dc3e1 +size 6948 diff --git a/assets/world/tree/oak_stump/8.vox b/assets/world/tree/oak_stump/8.vox index 161c58761b..985d99785f 100644 --- a/assets/world/tree/oak_stump/8.vox +++ b/assets/world/tree/oak_stump/8.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8204fd6e324d35461e2613e88f58417661365d120461428ee351b9a6a33cf2ba -size 51596 +oid sha256:78c157df55e0028c0538d8be481c09c9803c37b2cb6eb375411449b8ffc3954d +size 8492 diff --git a/assets/world/tree/oak_stump/9.vox b/assets/world/tree/oak_stump/9.vox index c3a84e0d36..2752b62850 100644 --- a/assets/world/tree/oak_stump/9.vox +++ b/assets/world/tree/oak_stump/9.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:626a92a02facc274f467c6c1f28291d1cc0b9a6fa2227945fa36e0d55c3a489e -size 51648 +oid sha256:fd7c515c14d7131f0f7f3c242c8fe20d1bfc9fe517d6e692c2ece492ea722490 +size 8544 diff --git a/assets/world/tree/pine_green/1.vox b/assets/world/tree/pine_green/1.vox index 5eb72f10a6..aff8542ab7 100644 --- a/assets/world/tree/pine_green/1.vox +++ b/assets/world/tree/pine_green/1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8425e0432a170d171f90da4697be6574316934b5cb70e1aab47ce23149bafce8 -size 50448 +oid sha256:452a242cff15ae0d80bc233a36ff673026015c6ff4c56acc03e315f395969802 +size 7340 diff --git a/assets/world/tree/pine_green/2.vox b/assets/world/tree/pine_green/2.vox index 24afa41987..82e67039d2 100644 --- a/assets/world/tree/pine_green/2.vox +++ b/assets/world/tree/pine_green/2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c95e7949bf4193e6387e80144e2d21e914b9326992223302f8f4a798cf70fd55 -size 54148 +oid sha256:63f7af9419dd79437bbff5268811efe8bc9d383c2a679c00f16d8436ec40b1b0 +size 11040 diff --git a/assets/world/tree/pine_green/3.vox b/assets/world/tree/pine_green/3.vox index d78aa31454..43143fa598 100644 --- a/assets/world/tree/pine_green/3.vox +++ b/assets/world/tree/pine_green/3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c0fb6ae560bfd38100e37777f6da28447df0495535bb83e0dd7cceac4894a153 -size 56140 +oid sha256:03f1d60dcaf4808b98629d11871ae720007bcdded0f27b37fdc98372258561df +size 13032 diff --git a/assets/world/tree/pine_green/4.vox b/assets/world/tree/pine_green/4.vox index 060aa15fc3..c7da7adbce 100644 --- a/assets/world/tree/pine_green/4.vox +++ b/assets/world/tree/pine_green/4.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:776fd4e706994a8625f5df1c279b8b6783a056872c6d6e072e27ae908d159169 -size 48309 +oid sha256:1e6f1eafbc4b594ae5be130c43301720f8aada84007a7552a40a79fe9b988233 +size 5192 diff --git a/assets/world/tree/pine_green/5.vox b/assets/world/tree/pine_green/5.vox index 235e87c5e8..30e610e514 100644 --- a/assets/world/tree/pine_green/5.vox +++ b/assets/world/tree/pine_green/5.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4e497b28721e695dadf945e56cc0d7368bb62fcb8e903bb1f1a1ebc9776d9db1 -size 50952 +oid sha256:dcacca2633e35e45a6ee91ce4b7c2db788432c2631d52b2f263fa3c8519f786e +size 7844 diff --git a/assets/world/tree/pine_green/6.vox b/assets/world/tree/pine_green/6.vox index 3a58cb6df0..742db1aa45 100644 --- a/assets/world/tree/pine_green/6.vox +++ b/assets/world/tree/pine_green/6.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:971a3eb44ddb4defd5057a5320641b13b33ee634e3f837ed3d453b2912fa5d42 -size 49053 +oid sha256:0911b8fa5de4439e6b80c1b737e4dc3ccb838ae38ca6b3cccd484cd73bb21a4a +size 5936 diff --git a/assets/world/tree/pine_green/7.vox b/assets/world/tree/pine_green/7.vox index 9a5db1987f..9ff4d59072 100644 --- a/assets/world/tree/pine_green/7.vox +++ b/assets/world/tree/pine_green/7.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:04e84e3982fda2f265169ac055f51b59dcfe4315c72a6befe16ad7308fc85b7b -size 54588 +oid sha256:044140ac4829f5268593e4f85fc8ee0cbc490f455bec51e15537a2d538955c9f +size 11480 diff --git a/assets/world/tree/pine_green/8.vox b/assets/world/tree/pine_green/8.vox index 60ad8714ec..95a159a4e2 100644 --- a/assets/world/tree/pine_green/8.vox +++ b/assets/world/tree/pine_green/8.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f9f09a2e98e67ad2a40951854b06fedc4121df40d36fc37483875803c8736190 -size 50265 +oid sha256:57b6361728e93961360f6960f7c2333f80c54728c21c5e89310cb8eefa0ffceb +size 7148 diff --git a/assets/world/tree/poplar/1.vox b/assets/world/tree/poplar/1.vox index def9050b24..ed3297d265 100644 --- a/assets/world/tree/poplar/1.vox +++ b/assets/world/tree/poplar/1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:22ab052663f6331b628d55d1c997581758e7a39944594a95290e362751882bf3 -size 63195 +oid sha256:f34a32263631310be34730f1032c32ba9c9d92cf270421afa0e15cdc6f1130f1 +size 20080 diff --git a/assets/world/tree/poplar/10.vox b/assets/world/tree/poplar/10.vox index a69da34efd..36df0db41d 100644 --- a/assets/world/tree/poplar/10.vox +++ b/assets/world/tree/poplar/10.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:53259a9f379c965713dea6152b5ec85c48311d23a77aafc7a064702207fbf5b7 -size 67107 +oid sha256:c7c9b18022d58fe8d9c7c688fc82d1b8c4412fba15a709de10f4fbee5f8fb222 +size 23992 diff --git a/assets/world/tree/poplar/2.vox b/assets/world/tree/poplar/2.vox index 64c3241203..b9c26d8440 100644 --- a/assets/world/tree/poplar/2.vox +++ b/assets/world/tree/poplar/2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:db88af7a8c07b8146efbff78233f530f41022b9144fff07a46c90c72777699e9 -size 61183 +oid sha256:9b005d48d75414b736e7b221482b5c88ac3b34f71024d2219a3ecfa2c97cbe37 +size 18068 diff --git a/assets/world/tree/poplar/3.vox b/assets/world/tree/poplar/3.vox index fb927c3c22..ebbc29d519 100644 --- a/assets/world/tree/poplar/3.vox +++ b/assets/world/tree/poplar/3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b4c095d2f496aa2b0a531087cf64cf475217f583acc0492aa9496a20aafa9e8f -size 56455 +oid sha256:8d6795c479b8fa760868201ff5674b5a5daffdcbcf2b4bcdbc04bedeefd96740 +size 13340 diff --git a/assets/world/tree/poplar/4.vox b/assets/world/tree/poplar/4.vox index eab3776c31..53ac07d0ad 100644 --- a/assets/world/tree/poplar/4.vox +++ b/assets/world/tree/poplar/4.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8bca70d737f4d56202f81bd861f7891dc3c40574381cc46279c736a182cbf303 -size 54823 +oid sha256:7745c4a0b133a2ba6bf92c414de402f99e5244d39e5ecc628423697c434e815f +size 11708 diff --git a/assets/world/tree/poplar/5.vox b/assets/world/tree/poplar/5.vox index d38ec13c58..03a8586ac8 100644 --- a/assets/world/tree/poplar/5.vox +++ b/assets/world/tree/poplar/5.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9a7f16377fe5928bba4c1019941307e02bbe1edc8749874d560a797ce93cab39 -size 59219 +oid sha256:f5c2592f0334f8bc2bda48a84681773e767a3c56e0b0926a456420dcef65e5aa +size 16104 diff --git a/assets/world/tree/poplar/6.vox b/assets/world/tree/poplar/6.vox index f4ca924b8f..d5105806be 100644 --- a/assets/world/tree/poplar/6.vox +++ b/assets/world/tree/poplar/6.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f62a65ea5a10a2e30bc1a76cea02e78b1fa28d099832629f218ae29da6596672 -size 53167 +oid sha256:3cbd44e2ca546f754209d6d7e06c3227e29f9d2f83dc89d19db0fb563fa68097 +size 10052 diff --git a/assets/world/tree/poplar/7.vox b/assets/world/tree/poplar/7.vox index fd11e7e94d..be6aa613c7 100644 --- a/assets/world/tree/poplar/7.vox +++ b/assets/world/tree/poplar/7.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:12b2c6b44bc6fc52517559636c5ff7d42a2c127449652c47e094cd1253f11a19 -size 55883 +oid sha256:0e3c16156865a61a783bfb383ecce1f7f1605b930f759991616b4e0febdedb1b +size 12768 diff --git a/assets/world/tree/poplar/8.vox b/assets/world/tree/poplar/8.vox index bececb963a..6e8172d3a5 100644 --- a/assets/world/tree/poplar/8.vox +++ b/assets/world/tree/poplar/8.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:946470b5b7f4942e539b5da12c906513601d2145725ce7074d833d48526ee242 -size 59583 +oid sha256:f91dcf761ca66bbff6dc51ef1230d5036270e346fdc400491fb5e1994b4ba931 +size 16468 diff --git a/assets/world/tree/poplar/9.vox b/assets/world/tree/poplar/9.vox index 9c68248183..c20d4b714c 100644 --- a/assets/world/tree/poplar/9.vox +++ b/assets/world/tree/poplar/9.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bd00eb99e4be1b0274233ded21fde4e25bf7f213342ff981e90ed80d0389be90 -size 58867 +oid sha256:3f785e547995287fa907242c19b71f4d62b5b4e624e200a63b8a63ef0c31436c +size 15752 diff --git a/assets/world/tree/snow_pine/1.vox b/assets/world/tree/snow_pine/1.vox index 2a69754469..839c651e58 100644 --- a/assets/world/tree/snow_pine/1.vox +++ b/assets/world/tree/snow_pine/1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e6e72f82b2a6a69a0a10f4a10aa33a96f9539306fee5afb1318073ac6cd17a40 -size 65748 +oid sha256:06f15f6e5080ebf960781647af3fe84b5cfb9441daf9b67fc994ebd657274feb +size 11264 diff --git a/assets/world/tree/snow_pine/2.vox b/assets/world/tree/snow_pine/2.vox index 5d862699d3..5b7ea048e2 100644 --- a/assets/world/tree/snow_pine/2.vox +++ b/assets/world/tree/snow_pine/2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2fba53a6780a1bccbe7c793d0cd7c4e09e6fdbdd9d29e0e0292ed08fd1e30a42 -size 72092 +oid sha256:ae9bc1551d8f6b729391a73fef04b754e0428de0d38e2a3c0c3d3e6bd6e6af20 +size 17608 diff --git a/assets/world/tree/snow_pine/3.vox b/assets/world/tree/snow_pine/3.vox index 7d8f3bc357..b2d45eb909 100644 --- a/assets/world/tree/snow_pine/3.vox +++ b/assets/world/tree/snow_pine/3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:593684e9d2cacba31a92e1d8510a3e7fd91c7fde7b4ad00956892e3a92b92a2a -size 75472 +oid sha256:4bb20e35a1467fd09e835262a38f595f96b76e9af7f9f6dcaa6d5c04ade08b6d +size 20988 diff --git a/assets/world/tree/snow_pine/4.vox b/assets/world/tree/snow_pine/4.vox index c4830fcbc7..8924349364 100644 --- a/assets/world/tree/snow_pine/4.vox +++ b/assets/world/tree/snow_pine/4.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:34727e053d0a4dab81d8c67145e8c2abe87ecb08be47b75f8d810d1341e8bad2 -size 61557 +oid sha256:4c0c15bb57f7dcf5833d769427a8654b85116965bc1a314c56a67866ed448d51 +size 7064 diff --git a/assets/world/tree/snow_pine/5.vox b/assets/world/tree/snow_pine/5.vox index a5b85ea83e..d7e69de1e4 100644 --- a/assets/world/tree/snow_pine/5.vox +++ b/assets/world/tree/snow_pine/5.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7ffec069805e7e621116cf0a5f6e24d3787fe6c5a016e2978fa3eb450be33364 -size 65216 +oid sha256:ebaad973e1ed66869b0065ab13ba05b873a51f7775bfffb27f3522ded927e353 +size 10732 diff --git a/assets/world/tree/snow_pine/6.vox b/assets/world/tree/snow_pine/6.vox index 02e0f9a7a6..cc06334769 100644 --- a/assets/world/tree/snow_pine/6.vox +++ b/assets/world/tree/snow_pine/6.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ee3dbdb687aa41d920fa608821298b6724f0d70bc09daeab157ab63e707dbd31 -size 62269 +oid sha256:ed6c63f0927ce6ff927c4172a099dbbc8fdd60a9bf37da9564cc9f4ec0b82d0d +size 7776 diff --git a/assets/world/tree/snow_pine/7.vox b/assets/world/tree/snow_pine/7.vox index 29192ca0bb..dc1fcc3045 100644 --- a/assets/world/tree/snow_pine/7.vox +++ b/assets/world/tree/snow_pine/7.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:04f6da6320c0e05c88a6d1fae1f1b26b414fcd5a1b67e9315c8cc8e975876409 -size 70028 +oid sha256:33a522078e71d2ba350f52bb30c346b837a64ff2a73fa933acf405243ab9c35e +size 15544 diff --git a/assets/world/tree/snow_pine/8.vox b/assets/world/tree/snow_pine/8.vox index 96c02d39df..89f7c65bbb 100644 --- a/assets/world/tree/snow_pine/8.vox +++ b/assets/world/tree/snow_pine/8.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9c2816b253ef0edb372f5d4d3b28cb8e4d376f3bac1242f637dc74130d346ff6 -size 64313 +oid sha256:cdc1bfe73e9a5d0a64e33b86227898243fa7243e81cc8cb302359accb6dc10f9 +size 9820 diff --git a/assets/world/tree/temperate_small/1.vox b/assets/world/tree/temperate_small/1.vox index 01304a1d6a..e90312ffef 100644 --- a/assets/world/tree/temperate_small/1.vox +++ b/assets/world/tree/temperate_small/1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1e7732d8f01169d6ec8aec60e8226ff6ae3a24a372d4cd30967839714fb50fbf -size 45145 +oid sha256:14e448a46ff8dac488730dc11d873c6d4cfd185f8ff10c8209ebf27dd2602f1b +size 2036 diff --git a/assets/world/tree/temperate_small/2.vox b/assets/world/tree/temperate_small/2.vox index 57736a5011..e2f2f5c293 100644 --- a/assets/world/tree/temperate_small/2.vox +++ b/assets/world/tree/temperate_small/2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ed87cdd4f58d1d218d7b8c5789a6b2501bb5838e902634bc14ebcd5e803f455c -size 45361 +oid sha256:f248fa9cb5f8831740d71096ad10943edc6abc49b63cc726840b8cab3e0ba956 +size 2252 diff --git a/assets/world/tree/temperate_small/3.vox b/assets/world/tree/temperate_small/3.vox index 5d4a123a52..1ae64c5904 100644 --- a/assets/world/tree/temperate_small/3.vox +++ b/assets/world/tree/temperate_small/3.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:45568304006a9642619f9cc6e0a6d44240d9a6560980e9d9f20e318faba57a7b -size 45341 +oid sha256:b58e2f1b8c9d02e5f1a3c529a4b8adc1c4268e48f78c0068ef5a690de8e402cf +size 2232 diff --git a/assets/world/tree/temperate_small/4.vox b/assets/world/tree/temperate_small/4.vox index 99ef2aaa60..0b8f22c344 100644 --- a/assets/world/tree/temperate_small/4.vox +++ b/assets/world/tree/temperate_small/4.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a75707ba1a44887e8930029f2d837d0a7f6adce86614ac8fdb45fd467278a130 -size 45009 +oid sha256:e762fa4f9824e0baeaa287a24b5dc3f726c4be9146eaf067b445c6c1800401a3 +size 1900 diff --git a/assets/world/tree/temperate_small/5.vox b/assets/world/tree/temperate_small/5.vox index 3c0eca03ae..d24f7a73cd 100644 --- a/assets/world/tree/temperate_small/5.vox +++ b/assets/world/tree/temperate_small/5.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bd60587804d68157abf50641920baabc4463f71be7955b04bf7b39cd12078279 -size 45001 +oid sha256:85f7ec25448c758e1e62af70e77307096f1f6072e521a3b2b1672fbc2fee2d18 +size 1892 diff --git a/assets/world/tree/temperate_small/6.vox b/assets/world/tree/temperate_small/6.vox index 10bea0a7a7..23c3902c45 100644 --- a/assets/world/tree/temperate_small/6.vox +++ b/assets/world/tree/temperate_small/6.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:57590bd0944e1f810f4c09a0f425156ff58c7a2990c3ee7c28030a3ed7be0820 -size 45177 +oid sha256:053a32d35758d59b113bcc3a7c733b751a699f0bf521a274c83fe27c933dc81b +size 2068 diff --git a/assets/world/tree/willow/1.vox b/assets/world/tree/willow/1.vox index 9eee2810f4..1ca5ecc517 100644 --- a/assets/world/tree/willow/1.vox +++ b/assets/world/tree/willow/1.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5d8af7e482178ad773717a5c4d4a0c39b04363166f21e46492971f1c2b755969 -size 87604 +oid sha256:749ebea80dee38d0a287ec370c378fcb873e306d95a33c9c3858758896afde39 +size 44492 diff --git a/assets/world/tree/willow/2.vox b/assets/world/tree/willow/2.vox index 27daf7ecac..a5e8f56817 100644 --- a/assets/world/tree/willow/2.vox +++ b/assets/world/tree/willow/2.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fc5289388be68a9e1b69feb895346fc7e705e020df7a7685e70d0a15f669d6ce -size 66648 +oid sha256:3af5f90f9ac95c3cee1188b6d760e057dffa5d460486290f35e13026f61a4e6b +size 23536 diff --git a/client/Cargo.toml b/client/Cargo.toml index e638dc1251..2b76763b42 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -15,6 +15,6 @@ num = "0.2.0" num_cpus = "1.10.1" log = "0.4.8" specs = "0.15.1" -vek = { version = "0.9.9", features = ["serde"] } +vek = { version = "0.10.0", features = ["serde"] } hashbrown = { version = "0.6.2", features = ["rayon", "serde", "nightly"] } authc = { git = "https://gitlab.com/veloren/auth.git", rev = "65571ade0d954a0e0bd995fdb314854ff146ab97" } diff --git a/client/src/lib.rs b/client/src/lib.rs index c848803a09..d5bde04a28 100644 --- a/client/src/lib.rs +++ b/client/src/lib.rs @@ -15,7 +15,8 @@ pub use specs::{ use byteorder::{ByteOrder, LittleEndian}; use common::{ comp::{ - self, ControlEvent, Controller, ControllerInputs, InventoryManip, InventoryUpdateEvent, + self, ControlAction, ControlEvent, Controller, ControllerInputs, InventoryManip, + InventoryUpdateEvent, }, event::{EventBus, SfxEvent, SfxEventItem}, msg::{ @@ -34,7 +35,7 @@ use common::{ // can pull out map drawing into common somehow. use hashbrown::HashMap; use image::DynamicImage; -use log::warn; +use log::{error, warn}; use num::traits::FloatConst; use std::{ net::SocketAddr, @@ -120,6 +121,11 @@ impl Client { // Initialize `State` let mut state = State::default(); + // Client-only components + state + .ecs_mut() + .register::>(); + let entity = state.ecs_mut().apply_entity_package(entity_package); *state.ecs_mut().write_resource() = time_of_day; @@ -384,6 +390,78 @@ impl Client { .send_message(ClientMsg::ControlEvent(ControlEvent::Unmount)); } + pub fn respawn(&mut self) { + if self + .state + .ecs() + .read_storage::() + .get(self.entity) + .map_or(false, |s| s.is_dead) + { + self.postbox + .send_message(ClientMsg::ControlEvent(ControlEvent::Respawn)); + } + } + + /// Checks whether a player can swap their weapon+ability `Loadout` settings + /// and sends the `ControlAction` event that signals to do the swap. + pub fn swap_loadout(&mut self) { + let can_swap = self + .state + .ecs() + .read_storage::() + .get(self.entity) + .map(|cs| cs.can_swap()); + match can_swap { + Some(true) => self.control_action(ControlAction::SwapLoadout), + Some(false) => {}, + None => warn!("Can't swap, client entity doesn't have a `CharacterState`"), + } + } + + pub fn toggle_wield(&mut self) { + let is_wielding = self + .state + .ecs() + .read_storage::() + .get(self.entity) + .map(|cs| cs.is_wield()); + + match is_wielding { + Some(true) => self.control_action(ControlAction::Unwield), + Some(false) => self.control_action(ControlAction::Wield), + None => warn!("Can't toggle wield, client entity doesn't have a `CharacterState`"), + } + } + + pub fn toggle_sit(&mut self) { + let is_sitting = self + .state + .ecs() + .read_storage::() + .get(self.entity) + .map(|cs| matches!(cs, comp::CharacterState::Sit)); + + match is_sitting { + Some(true) => self.control_action(ControlAction::Stand), + Some(false) => self.control_action(ControlAction::Sit), + None => warn!("Can't toggle sit, client entity doesn't have a `CharacterState`"), + } + } + + fn control_action(&mut self, control_action: ControlAction) { + if let Some(controller) = self + .state + .ecs() + .write_storage::() + .get_mut(self.entity) + { + controller.actions.push(control_action); + } + self.postbox + .send_message(ClientMsg::ControlAction(control_action)); + } + pub fn view_distance(&self) -> Option { self.view_distance } pub fn loaded_distance(&self) -> f32 { self.loaded_distance } @@ -467,10 +545,26 @@ impl Client { // 1) Handle input from frontend. // Pass character actions from frontend input to the player's entity. if let ClientState::Character = self.client_state { - self.state.write_component(self.entity, Controller { - inputs: inputs.clone(), - events: Vec::new(), - }); + if let Err(err) = self + .state + .ecs() + .write_storage::() + .entry(self.entity) + .map(|entry| { + entry + .or_insert_with(|| Controller { + inputs: inputs.clone(), + events: Vec::new(), + actions: Vec::new(), + }) + .inputs = inputs.clone(); + }) + { + error!( + "Couldn't access controller component on client entity: {:?}", + err + ); + } self.postbox .send_message(ClientMsg::ControllerInputs(inputs)); } @@ -489,11 +583,11 @@ impl Client { { if last_character_states .get(entity) - .map(|&l| !client_character_state.is_same_state(&l.0)) + .map(|l| !client_character_state.same_variant(&l.0)) .unwrap_or(true) { let _ = last_character_states - .insert(entity, comp::Last(*client_character_state)); + .insert(entity, comp::Last(client_character_state.clone())); } } } @@ -725,8 +819,15 @@ impl Client { ServerMsg::TimeOfDay(time_of_day) => { *self.state.ecs_mut().write_resource() = time_of_day; }, - ServerMsg::EcsSync(sync_package) => { - self.state.ecs_mut().apply_sync_package(sync_package); + ServerMsg::EntitySync(entity_sync_package) => { + self.state + .ecs_mut() + .apply_entity_sync_package(entity_sync_package); + }, + ServerMsg::CompSync(comp_sync_package) => { + self.state + .ecs_mut() + .apply_comp_sync_package(comp_sync_package); }, ServerMsg::CreateEntity(entity_package) => { self.state.ecs_mut().apply_entity_package(entity_package); @@ -763,29 +864,6 @@ impl Client { .allocate(entity_builder.entity, Some(client_uid)); self.entity = entity_builder.with(uid).build(); }, - ServerMsg::EntityPos { entity, pos } => { - if let Some(entity) = self.state.ecs().entity_from_uid(entity) { - self.state.write_component(entity, pos); - } - }, - ServerMsg::EntityVel { entity, vel } => { - if let Some(entity) = self.state.ecs().entity_from_uid(entity) { - self.state.write_component(entity, vel); - } - }, - ServerMsg::EntityOri { entity, ori } => { - if let Some(entity) = self.state.ecs().entity_from_uid(entity) { - self.state.write_component(entity, ori); - } - }, - ServerMsg::EntityCharacterState { - entity, - character_state, - } => { - if let Some(entity) = self.state.ecs().entity_from_uid(entity) { - self.state.write_component(entity, character_state); - } - }, ServerMsg::InventoryUpdate(inventory, event) => { match event { InventoryUpdateEvent::CollectFailed => { @@ -804,8 +882,7 @@ impl Client { self.state .ecs() .read_resource::>() - .emitter() - .emit(SfxEventItem::at_player_position(SfxEvent::Inventory(event))); + .emit_now(SfxEventItem::at_player_position(SfxEvent::Inventory(event))); }, ServerMsg::TerrainChunkUpdate { key, chunk } => { if let Ok(chunk) = chunk { diff --git a/common/Cargo.toml b/common/Cargo.toml index f70c8c1b6c..69d7217c7a 100644 --- a/common/Cargo.toml +++ b/common/Cargo.toml @@ -11,7 +11,7 @@ no-assets = [] specs-idvs = { git = "https://gitlab.com/veloren/specs-idvs.git" } specs = { version = "0.15.1", features = ["serde", "nightly", "storage-event-control"] } -vek = { version = "0.9.9", features = ["serde"] } +vek = { version = "0.10.0", features = ["serde"] } dot_vox = "4.0.0" image = "0.22.3" mio = "0.6.19" diff --git a/common/src/assets/mod.rs b/common/src/assets/mod.rs index cadff415de..cdfa7fa1f2 100644 --- a/common/src/assets/mod.rs +++ b/common/src/assets/mod.rs @@ -19,8 +19,8 @@ use std::{ /// The error returned by asset loading functions #[derive(Debug, Clone)] pub enum Error { - /// An internal error occurred. - Internal(Arc), + /// Parsing error occurred. + ParseError(Arc), /// An asset of a different type has already been loaded with this /// specifier. InvalidType, @@ -28,10 +28,16 @@ pub enum Error { NotFound(String), } +impl Error { + pub fn parse_error(err: E) -> Self { + Self::ParseError(Arc::new(err)) + } +} + impl fmt::Display for Error { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { - Error::Internal(err) => err.fmt(f), + Error::ParseError(err) => write!(f, "{:?}", err), Error::InvalidType => write!( f, "an asset of a different type has already been loaded with this specifier." @@ -110,7 +116,16 @@ pub fn load_glob(specifier: &str) -> Result>> let assets = Arc::new( glob_matches .into_iter() - .filter_map(|name| load(&specifier.replace("*", &name)).ok()) + .filter_map(|name| { + load(&specifier.replace("*", &name)) + .map_err(|e| { + error!( + "Failed to load \"{}\" as part of glob \"{}\" with error: {:?}", + name, specifier, e + ) + }) + .ok() + }) .collect::>(), ); let clone = Arc::clone(&assets); @@ -226,7 +241,7 @@ impl Asset for DynamicImage { fn parse(mut buf_reader: BufReader) -> Result { let mut buf = Vec::new(); buf_reader.read_to_end(&mut buf)?; - Ok(image::load_from_memory(&buf).unwrap()) + image::load_from_memory(&buf).map_err(Error::parse_error) } } @@ -236,7 +251,7 @@ impl Asset for DotVoxData { fn parse(mut buf_reader: BufReader) -> Result { let mut buf = Vec::new(); buf_reader.read_to_end(&mut buf)?; - Ok(dot_vox::load_bytes(&buf).unwrap()) + dot_vox::load_bytes(&buf).map_err(Error::parse_error) } } @@ -245,7 +260,7 @@ impl Asset for Value { const ENDINGS: &'static [&'static str] = &["json"]; fn parse(buf_reader: BufReader) -> Result { - Ok(serde_json::from_reader(buf_reader).unwrap()) + serde_json::from_reader(buf_reader).map_err(Error::parse_error) } } diff --git a/common/src/comp/ability.rs b/common/src/comp/ability.rs new file mode 100644 index 0000000000..0b009b270f --- /dev/null +++ b/common/src/comp/ability.rs @@ -0,0 +1,187 @@ +use crate::{ + comp::{ + item::Item, Body, CharacterState, EnergySource, Gravity, LightEmitter, Projectile, + StateUpdate, + }, + states::{triple_strike::*, *}, + sys::character_behavior::JoinData, +}; +use specs::{Component, FlaggedStorage}; +use specs_idvs::IDVStorage; +use std::time::Duration; + +#[derive(Clone, PartialEq, Debug, Serialize, Deserialize)] +pub enum CharacterAbility { + BasicMelee { + energy_cost: u32, + buildup_duration: Duration, + recover_duration: Duration, + base_healthchange: i32, + range: f32, + max_angle: f32, + }, + BasicRanged { + energy_cost: u32, + holdable: bool, + prepare_duration: Duration, + recover_duration: Duration, + projectile: Projectile, + projectile_body: Body, + projectile_light: Option, + projectile_gravity: Option, + }, + Boost { + duration: Duration, + only_up: bool, + }, + DashMelee { + buildup_duration: Duration, + recover_duration: Duration, + base_damage: u32, + }, + BasicBlock, + Roll, + TripleStrike { + base_damage: u32, + needs_timing: bool, + }, +} + +impl CharacterAbility { + /// Attempts to fulfill requirements, mutating `update` (taking energy) if + /// applicable. + pub fn requirements_paid(&self, data: &JoinData, update: &mut StateUpdate) -> bool { + match self { + CharacterAbility::TripleStrike { .. } => { + data.physics.on_ground + && data.body.is_humanoid() + && data.inputs.look_dir.xy().magnitude_squared() > 0.01 + }, + CharacterAbility::Roll => { + data.physics.on_ground + && data.body.is_humanoid() + && data.vel.0.xy().magnitude_squared() > 0.5 + && update + .energy + .try_change_by(-220, EnergySource::Ability) + .is_ok() + }, + CharacterAbility::DashMelee { .. } => update + .energy + .try_change_by(-700, EnergySource::Ability) + .is_ok(), + CharacterAbility::BasicMelee { energy_cost, .. } => update + .energy + .try_change_by(-(*energy_cost as i32), EnergySource::Ability) + .is_ok(), + CharacterAbility::BasicRanged { energy_cost, .. } => update + .energy + .try_change_by(-(*energy_cost as i32), EnergySource::Ability) + .is_ok(), + _ => true, + } + } +} + +#[derive(Clone, PartialEq, Debug, Serialize, Deserialize)] +pub struct ItemConfig { + pub item: Item, + pub ability1: Option, + pub ability2: Option, + pub ability3: Option, + pub block_ability: Option, + pub dodge_ability: Option, +} + +#[derive(Clone, PartialEq, Default, Debug, Serialize, Deserialize)] +pub struct Loadout { + pub active_item: Option, + pub second_item: Option, + + pub shoulder: Option, + pub chest: Option, + pub belt: Option, + pub hand: Option, + pub pants: Option, + pub foot: Option, +} + +impl From<&CharacterAbility> for CharacterState { + fn from(ability: &CharacterAbility) -> Self { + match ability { + CharacterAbility::BasicMelee { + buildup_duration, + recover_duration, + base_healthchange, + range, + max_angle, + energy_cost: _, + } => CharacterState::BasicMelee(basic_melee::Data { + exhausted: false, + buildup_duration: *buildup_duration, + recover_duration: *recover_duration, + base_healthchange: *base_healthchange, + range: *range, + max_angle: *max_angle, + }), + CharacterAbility::BasicRanged { + holdable, + prepare_duration, + recover_duration, + projectile, + projectile_body, + projectile_light, + projectile_gravity, + energy_cost: _, + } => CharacterState::BasicRanged(basic_ranged::Data { + exhausted: false, + prepare_timer: Duration::default(), + holdable: *holdable, + prepare_duration: *prepare_duration, + recover_duration: *recover_duration, + projectile: projectile.clone(), + projectile_body: *projectile_body, + projectile_light: *projectile_light, + projectile_gravity: *projectile_gravity, + }), + CharacterAbility::Boost { duration, only_up } => CharacterState::Boost(boost::Data { + duration: *duration, + only_up: *only_up, + }), + CharacterAbility::DashMelee { + buildup_duration, + recover_duration, + base_damage, + } => CharacterState::DashMelee(dash_melee::Data { + initialize: true, + exhausted: false, + buildup_duration: *buildup_duration, + recover_duration: *recover_duration, + base_damage: *base_damage, + }), + CharacterAbility::BasicBlock => CharacterState::BasicBlock, + CharacterAbility::Roll => CharacterState::Roll(roll::Data { + remaining_duration: Duration::from_millis(700), + was_wielded: false, // false by default. utils might set it to true + }), + CharacterAbility::TripleStrike { + base_damage, + needs_timing, + } => CharacterState::TripleStrike(triple_strike::Data { + base_damage: *base_damage, + stage: triple_strike::Stage::First, + stage_exhausted: false, + stage_time_active: Duration::default(), + initialized: false, + transition_style: match *needs_timing { + true => TransitionStyle::Timed(TimingState::NotPressed), + false => TransitionStyle::Hold(HoldingState::Holding), + }, + }), + } + } +} + +impl Component for Loadout { + type Storage = FlaggedStorage>; +} diff --git a/common/src/comp/body.rs b/common/src/comp/body.rs index f75acce151..a777c4ace5 100644 --- a/common/src/comp/body.rs +++ b/common/src/comp/body.rs @@ -16,7 +16,7 @@ use crate::{ }; use specs::{Component, FlaggedStorage}; use specs_idvs::IDVStorage; -use std::{fs::File, io::BufReader, sync::Arc}; +use std::{fs::File, io::BufReader}; #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] #[repr(u32)] @@ -84,7 +84,7 @@ impl< const ENDINGS: &'static [&'static str] = &["json"]; fn parse(buf_reader: BufReader) -> Result { - serde_json::de::from_reader(buf_reader).map_err(|e| assets::Error::Internal(Arc::new(e))) + serde_json::de::from_reader(buf_reader).map_err(assets::Error::parse_error) } } diff --git a/common/src/comp/body/humanoid.rs b/common/src/comp/body/humanoid.rs index 557956e790..f68b323a5a 100644 --- a/common/src/comp/body/humanoid.rs +++ b/common/src/comp/body/humanoid.rs @@ -5,12 +5,6 @@ use vek::Rgb; pub struct Body { pub race: Race, pub body_type: BodyType, - pub chest: Chest, - pub belt: Belt, - pub pants: Pants, - pub hand: Hand, - pub foot: Foot, - pub shoulder: Shoulder, pub hair_style: u8, pub beard: u8, pub eyebrows: Eyebrows, @@ -33,12 +27,6 @@ impl Body { Self { race, body_type, - chest: *(&ALL_CHESTS).choose(rng).unwrap(), - belt: *(&ALL_BELTS).choose(rng).unwrap(), - pants: *(&ALL_PANTS).choose(rng).unwrap(), - hand: *(&ALL_HANDS).choose(rng).unwrap(), - foot: *(&ALL_FEET).choose(rng).unwrap(), - shoulder: *(&ALL_SHOULDERS).choose(rng).unwrap(), hair_style: rng.gen_range(0, race.num_hair_styles(body_type)), beard: rng.gen_range(0, race.num_beards(body_type)), eyebrows: *(&ALL_EYEBROWS).choose(rng).unwrap(), @@ -125,7 +113,7 @@ impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies { } // Hair Colors -pub const DANARI_HAIR_COLORS: [(u8, u8, u8); 11] = [ +pub const DANARI_HAIR_COLORS: [(u8, u8, u8); 12] = [ (198, 169, 113), // Philosopher's Grey //(245, 232, 175), // Cream Blonde //(228, 208, 147), // Gold Blonde @@ -141,9 +129,10 @@ pub const DANARI_HAIR_COLORS: [(u8, u8, u8); 11] = [ (107, 32, 60), // Grape Purple (135, 38, 39), // Dark Red (88, 26, 29), // Wine Red - //(146, 32, 32), // Autumn Red + //(146, 32, 32), // Autumn Red + (20, 19, 17), // Black ]; -pub const DWARF_HAIR_COLORS: [(u8, u8, u8); 20] = [ +pub const DWARF_HAIR_COLORS: [(u8, u8, u8); 21] = [ (245, 232, 175), // Cream Blonde (228, 208, 147), // Gold Blonde (228, 223, 141), // Platinum Blonde @@ -164,8 +153,9 @@ pub const DWARF_HAIR_COLORS: [(u8, u8, u8); 20] = [ (163, 186, 192), // Matte Green (84, 139, 107), // Grass Green (48, 61, 52), // Dark Green + (20, 19, 17), // Black ]; -pub const ELF_HAIR_COLORS: [(u8, u8, u8); 23] = [ +pub const ELF_HAIR_COLORS: [(u8, u8, u8); 24] = [ (66, 83, 113), // Mysterious Blue (13, 76, 41), // Rainforest Green (245, 232, 175), // Cream Blonde @@ -189,8 +179,9 @@ pub const ELF_HAIR_COLORS: [(u8, u8, u8); 23] = [ (163, 186, 192), // Matte Green (84, 139, 107), // Grass Green (48, 61, 52), // Dark Green + (20, 19, 17), // Black ]; -pub const HUMAN_HAIR_COLORS: [(u8, u8, u8); 21] = [ +pub const HUMAN_HAIR_COLORS: [(u8, u8, u8); 22] = [ (245, 232, 175), // Cream Blonde (228, 208, 147), // Gold Blonde (228, 223, 141), // Platinum Blonde @@ -212,8 +203,9 @@ pub const HUMAN_HAIR_COLORS: [(u8, u8, u8); 21] = [ (163, 186, 192), // Matte Green (84, 139, 107), // Grass Green (48, 61, 52), // Dark Green + (20, 19, 17), // Black ]; -pub const ORC_HAIR_COLORS: [(u8, u8, u8); 10] = [ +pub const ORC_HAIR_COLORS: [(u8, u8, u8); 11] = [ (66, 66, 59), // Wise Grey //(107, 76, 51), // Oak Skin4 //(203, 154, 98), // Light Skin4 @@ -226,8 +218,9 @@ pub const ORC_HAIR_COLORS: [(u8, u8, u8); 10] = [ (135, 38, 39), // Dark Red (88, 26, 29), // Wine Red (66, 83, 113), // Mysterious Blue + (20, 19, 17), // Black ]; -pub const UNDEAD_HAIR_COLORS: [(u8, u8, u8); 21] = [ +pub const UNDEAD_HAIR_COLORS: [(u8, u8, u8); 22] = [ //(245, 232, 175), // Cream Blonde (228, 208, 147), // Gold Blonde //(228, 223, 141), // Platinum Blonde @@ -252,6 +245,7 @@ pub const UNDEAD_HAIR_COLORS: [(u8, u8, u8); 21] = [ (163, 186, 192), // Matte Green (84, 139, 107), // Grass Green (48, 61, 52), // Dark Green + (20, 19, 17), // Black ]; // Skin colors @@ -477,81 +471,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 Chest { - Blue = 0, - Brown = 1, - Dark = 2, - Green = 3, - Orange = 4, - Midnight = 5, - Kimono = 6, -} -pub const ALL_CHESTS: [Chest; 7] = [ - Chest::Blue, - Chest::Brown, - Chest::Dark, - Chest::Green, - Chest::Orange, - Chest::Midnight, - Chest::Kimono, -]; - -#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] -#[repr(u32)] -pub enum Belt { - Dark = 0, - Cloth = 1, -} -pub const ALL_BELTS: [Belt; 2] = [Belt::Dark, Belt::Cloth]; - -#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] -#[repr(u32)] -pub enum Pants { - Blue = 0, - Brown = 1, - Dark = 2, - Green = 3, - Orange = 4, - Kimono = 5, -} -pub const ALL_PANTS: [Pants; 6] = [ - Pants::Blue, - Pants::Brown, - Pants::Dark, - Pants::Green, - Pants::Orange, - Pants::Kimono, -]; - -#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] -#[repr(u32)] -pub enum Hand { - Bare = 0, - Cloth = 1, -} -pub const ALL_HANDS: [Hand; 2] = [Hand::Bare, Hand::Cloth]; - -#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] -#[repr(u32)] -pub enum Foot { - Bare = 0, - Dark = 1, - Sandal = 2, - Jester = 3, -} -pub const ALL_FEET: [Foot; 4] = [Foot::Bare, Foot::Dark, Foot::Sandal, Foot::Jester]; - -#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] -#[repr(u32)] -pub enum Shoulder { - None = 0, - Brown1 = 1, - Chain = 2, -} -pub const ALL_SHOULDERS: [Shoulder; 3] = [Shoulder::None, Shoulder::Brown1, Shoulder::Chain]; - #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] #[repr(u32)] pub enum Eyebrows { diff --git a/common/src/comp/body/object.rs b/common/src/comp/body/object.rs index 514a191bf1..d179884062 100644 --- a/common/src/comp/body/object.rs +++ b/common/src/comp/body/object.rs @@ -55,6 +55,7 @@ pub enum Body { BoltFire = 49, ArrowSnake = 50, CampfireLit = 51, + BoltFireBig = 52, } impl Body { @@ -64,7 +65,7 @@ impl Body { } } -const ALL_OBJECTS: [Body; 51] = [ +const ALL_OBJECTS: [Body; 52] = [ Body::Arrow, Body::Bomb, Body::Scarecrow, @@ -115,5 +116,6 @@ const ALL_OBJECTS: [Body; 51] = [ Body::CarpetHumanSquircle, Body::CraftingBench, Body::BoltFire, + Body::BoltFireBig, Body::ArrowSnake, ]; diff --git a/common/src/comp/character_state.rs b/common/src/comp/character_state.rs index ec19fa7e30..6cc4f90e12 100644 --- a/common/src/comp/character_state.rs +++ b/common/src/comp/character_state.rs @@ -1,126 +1,135 @@ -use specs::{Component, FlaggedStorage, HashMapStorage}; -//use specs_idvs::IDVStorage; -use std::time::Duration; +use crate::{ + comp::{Energy, Loadout, Ori, Pos, Vel}, + event::{LocalEvent, ServerEvent}, + states::*, + sys::character_behavior::JoinData, +}; +use serde::{Deserialize, Serialize}; +use specs::{Component, FlaggedStorage, HashMapStorage, VecStorage}; +use std::collections::VecDeque; -#[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize, Eq, Hash)] -pub enum MovementState { - Stand, - Sit, - Run, - Jump, - Fall, - Glide, - Swim, - Climb, +/// Data returned from character behavior fn's to Character Behavior System. +pub struct StateUpdate { + pub character: CharacterState, + pub pos: Pos, + pub vel: Vel, + pub ori: Ori, + pub energy: Energy, + pub loadout: Loadout, + pub local_events: VecDeque, + pub server_events: VecDeque, } -#[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize, Eq, Hash)] -pub enum ActionState { +impl From<&JoinData<'_>> for StateUpdate { + fn from(data: &JoinData) -> Self { + StateUpdate { + pos: *data.pos, + vel: *data.vel, + ori: *data.ori, + energy: *data.energy, + loadout: data.loadout.clone(), + character: data.character.clone(), + local_events: VecDeque::new(), + server_events: VecDeque::new(), + } + } +} +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +pub enum CharacterState { Idle, - Wield { - time_left: Duration, - }, - Attack { - time_left: Duration, - applied: bool, - }, - Block { - time_active: Duration, - }, - Roll { - time_left: Duration, - // Whether character was wielding before they started roll - was_wielding: bool, - }, - Charge { - time_left: Duration, - }, - //Carry, + Climb, + Sit, + Glide, + /// A basic blocking state + BasicBlock, + /// Player is busy equipping or unequipping weapons + Equipping(equipping::Data), + /// Player is holding a weapon and can perform other actions + Wielding, + /// A dodge where player can roll + Roll(roll::Data), + /// A basic melee attack (e.g. sword) + BasicMelee(basic_melee::Data), + /// A basic ranged attack (e.g. bow) + BasicRanged(basic_ranged::Data), + /// A force will boost you into a direction for some duration + Boost(boost::Data), + /// Dash forward and then attack + DashMelee(dash_melee::Data), + /// A three-stage attack where each attack pushes player forward + /// and successive attacks increase in damage, while player holds button. + TripleStrike(triple_strike::Data), } -impl ActionState { +impl CharacterState { pub fn is_wield(&self) -> bool { - if let Self::Wield { .. } = self { - true - } else { - false + match self { + CharacterState::Wielding + | CharacterState::BasicMelee(_) + | CharacterState::BasicRanged(_) + | CharacterState::DashMelee(_) + | CharacterState::TripleStrike(_) + | CharacterState::BasicBlock => true, + _ => false, } } - pub fn is_action_finished(&self) -> bool { + pub fn can_swap(&self) -> bool { match self { - Self::Wield { time_left } - | Self::Attack { time_left, .. } - | Self::Roll { time_left, .. } - | Self::Charge { time_left } => *time_left == Duration::default(), - Self::Idle | Self::Block { .. } => false, + CharacterState::Wielding => true, + _ => false, } } pub fn is_attack(&self) -> bool { - if let Self::Attack { .. } = self { - true - } else { - false + match self { + CharacterState::BasicMelee(_) + | CharacterState::BasicRanged(_) + | CharacterState::DashMelee(_) + | CharacterState::TripleStrike(_) => true, + _ => false, } } pub fn is_block(&self) -> bool { - if let Self::Block { .. } = self { - true - } else { - false + match self { + CharacterState::BasicBlock => true, + _ => false, } } - pub fn is_roll(&self) -> bool { - if let Self::Roll { .. } = self { - true - } else { - false + pub fn is_dodge(&self) -> bool { + match self { + CharacterState::Roll(_) => true, + _ => false, } } - pub fn is_charge(&self) -> bool { - if let Self::Charge { .. } = self { - true - } else { - false - } - } -} - -#[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize, Eq, Hash)] -pub struct CharacterState { - pub movement: MovementState, - pub action: ActionState, -} - -impl CharacterState { - pub fn is_same_movement(&self, other: &Self) -> bool { - // Check if enum item is the same without looking at the inner data - std::mem::discriminant(&self.movement) == std::mem::discriminant(&other.movement) - } - - pub fn is_same_action(&self, other: &Self) -> bool { - // Check if enum item is the same without looking at the inner data - std::mem::discriminant(&self.action) == std::mem::discriminant(&other.action) - } - - pub fn is_same_state(&self, other: &Self) -> bool { - self.is_same_movement(other) && self.is_same_action(other) + /// Compares for shallow equality (does not check internal struct equality) + pub fn same_variant(&self, other: &Self) -> bool { + // Check if state is the same without looking at the inner data + std::mem::discriminant(self) == std::mem::discriminant(other) } } impl Default for CharacterState { - fn default() -> Self { - Self { - movement: MovementState::Jump, - action: ActionState::Idle, - } - } + fn default() -> Self { Self::Idle } } impl Component for CharacterState { type Storage = FlaggedStorage>; } + +#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize)] +pub struct Attacking { + pub base_healthchange: i32, + pub range: f32, + pub max_angle: f32, + pub applied: bool, + pub hit_count: u32, + pub knockback: f32, +} + +impl Component for Attacking { + type Storage = VecStorage; +} diff --git a/common/src/comp/controller.rs b/common/src/comp/controller.rs index 63faaa7133..5852ad56ec 100644 --- a/common/src/comp/controller.rs +++ b/common/src/comp/controller.rs @@ -1,4 +1,4 @@ -use crate::sync::Uid; +use crate::{sync::Uid, util::Dir}; use specs::{Component, FlaggedStorage}; use specs_idvs::IDVStorage; use std::time::Duration; @@ -12,14 +12,23 @@ pub enum ControlEvent { Mount(Uid), Unmount, InventoryManip(InventoryManip), - //Respawn, + Respawn, +} + +#[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize)] +pub enum ControlAction { + SwapLoadout, + Wield, + Unwield, + Sit, + Stand, } -/// The various states an input can be in #[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize)] -pub enum InputState { - Pressed, - Unpressed, +enum Freshness { + New, + TickedOnce, + Old, } /// Whether a key is pressed or unpressed @@ -28,101 +37,116 @@ pub enum InputState { pub struct Input { /// Should not be pub because duration should /// always be reset when state is updated - state: InputState, + pressed: bool, /// Should only be updated by npc agents /// through appropriate fn duration: Duration, - /// Turned off first tick after switching states - just_changed: bool, - /// Set when `set_state` is called. Needed so - /// tick after change doesn't immediately unset `just_changed` - dirty: bool, + /// How fresh is the last change to the input state + freshness: Freshness, } impl Input { fn tick(&mut self, dt: Duration) { // Increase how long input has been in current state self.duration = self.duration.checked_add(dt).unwrap_or_default(); - if self.dirty { - // Unset dirty first tick after changing into current state - self.dirty = false; - } else { - // Otherwise, just changed is always false - self.just_changed = false; - } + self.tick_freshness(); } - /// Whether input is in `InputState::Pressed` state - pub fn is_pressed(&self) -> bool { self.state == InputState::Pressed } + fn tick_freshness(&mut self) { + self.freshness = match self.freshness { + Freshness::New => Freshness::TickedOnce, + Freshness::TickedOnce => Freshness::Old, + Freshness::Old => Freshness::Old, + }; + } - /// Whether it's the first frame this input has been in - /// its current state - pub fn is_just_pressed(&self) -> bool { self.just_changed && self.is_pressed() } + /// Update input with newer version + /// Used to update inputs with input recieved from clients + pub fn update_with_new(&mut self, new: Self) { + if self.pressed != new.pressed { + self.freshness = Freshness::New; + } - /// Whether input has been in current state longer than + self.pressed = new.pressed; + self.duration = new.duration; + } + + /// Whether input is being pressed down + pub fn is_pressed(&self) -> bool { self.pressed } + + /// Whether it's the first frame this input has been pressed + pub fn is_just_pressed(&self) -> bool { self.is_pressed() && self.freshness != Freshness::Old } + + /// Whether it's the first frame this input has been unpressed + pub fn is_just_unpressed(&self) -> bool { + !self.is_pressed() && self.freshness != Freshness::Old + } + + /// Whether input has been pressed longer than /// `DEFAULT_HOLD_DURATION` pub fn is_held_down(&self) -> bool { self.is_pressed() && self.duration >= DEFAULT_HOLD_DURATION } - /// Handles logic of updating state of Input - pub fn set_state(&mut self, new_state: bool) { - // Only update if state switches - match (self.is_pressed(), new_state) { - (false, true) => { - self.just_changed = true; - self.dirty = true; - self.state = InputState::Pressed; - self.duration = Duration::default(); - }, - (true, false) => { - self.just_changed = true; - self.dirty = true; - self.state = InputState::Unpressed; - self.duration = Duration::default(); - }, - (_, _) => {}, - }; + /// Whether input has been unpressed longer than + /// `DEFAULT_HOLD_DURATION` + pub fn is_held_up(&self) -> bool { + !self.is_pressed() && self.duration >= DEFAULT_HOLD_DURATION } - /// Increases `input::duration` by `dur` + /// Whether input has been pressed for longer than `threshold` duration + pub fn held_for_dur(&self, threshold: Duration) -> bool { + self.is_pressed() && self.duration >= threshold + } + + /// Handles logic of updating state of Input + pub fn set_state(&mut self, pressed: bool) { + if self.pressed != pressed { + self.pressed = pressed; + self.duration = Duration::default(); + self.freshness = Freshness::New; + } + } + + /// Increases `input.duration` by `dur` pub fn inc_dur(&mut self, dur: Duration) { self.duration = self.duration.checked_add(dur).unwrap_or_default(); } - /// Returns `input::duration` + /// Returns `input.duration` pub fn get_dur(&self) -> Duration { self.duration } } impl Default for Input { fn default() -> Self { Self { - state: InputState::Unpressed, + pressed: false, duration: Duration::default(), - just_changed: false, - dirty: false, + freshness: Freshness::New, } } } +#[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize)] +pub enum Climb { + Up, + Down, + Hold, +} + #[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)] pub struct ControllerInputs { - // When adding new inputs: - // 1. Add to tick() update pub primary: Input, pub secondary: Input, - pub sit: Input, + pub ability3: Input, pub jump: Input, pub roll: Input, pub glide: Input, - pub climb: Input, - pub climb_down: Input, pub wall_leap: Input, - pub respawn: Input, - pub toggle_wield: Input, pub charge: Input, + pub climb: Option, pub move_dir: Vec2, - pub look_dir: Vec3, + pub look_dir: Dir, } #[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)] @@ -130,6 +154,7 @@ pub struct Controller { pub inputs: ControllerInputs, // TODO: consider SmallVec pub events: Vec, + pub actions: Vec, } impl ControllerInputs { @@ -137,33 +162,42 @@ impl ControllerInputs { pub fn tick(&mut self, dt: Duration) { self.primary.tick(dt); self.secondary.tick(dt); - self.sit.tick(dt); + self.ability3.tick(dt); self.jump.tick(dt); self.roll.tick(dt); self.glide.tick(dt); - self.climb.tick(dt); - self.climb_down.tick(dt); self.wall_leap.tick(dt); - self.respawn.tick(dt); - self.toggle_wield.tick(dt); self.charge.tick(dt); } - /// Updates `inputs.move_dir`. - pub fn update_move_dir(&mut self) { - self.move_dir = if self.move_dir.magnitude_squared() > 1.0 { - // Cap move_dir to 1 - self.move_dir.normalized() - } else { - self.move_dir - }; + pub fn tick_freshness(&mut self) { + self.primary.tick_freshness(); + self.secondary.tick_freshness(); + self.ability3.tick_freshness(); + self.jump.tick_freshness(); + self.roll.tick_freshness(); + self.glide.tick_freshness(); + self.wall_leap.tick_freshness(); + self.charge.tick_freshness(); } - /// Updates `inputs.look_dir` - pub fn update_look_dir(&mut self) { - self.look_dir - .try_normalized() - .unwrap_or(self.move_dir.into()); + /// Updates Controller inputs with new version received from the client + pub fn update_with_new(&mut self, new: Self) { + self.primary.update_with_new(new.primary); + self.secondary.update_with_new(new.secondary); + self.ability3.update_with_new(new.ability3); + self.jump.update_with_new(new.jump); + self.roll.update_with_new(new.roll); + self.glide.update_with_new(new.glide); + self.wall_leap.update_with_new(new.wall_leap); + self.charge.update_with_new(new.charge); + self.climb = new.climb; + self.move_dir = new.move_dir; + self.look_dir = new.look_dir; + } + + pub fn holding_ability_key(&self) -> bool { + self.primary.is_pressed() || self.secondary.is_pressed() || self.ability3.is_pressed() } } diff --git a/common/src/comp/energy.rs b/common/src/comp/energy.rs index 6a0c1853f8..bbc481daca 100644 --- a/common/src/comp/energy.rs +++ b/common/src/comp/energy.rs @@ -11,10 +11,10 @@ pub struct Energy { #[derive(Clone, Copy, Debug, Serialize, Deserialize)] pub enum EnergySource { - CastSpell, - Roll, + Ability, Climb, LevelUp, + HitEnemy, Regen, Revive, Unknown, diff --git a/common/src/comp/inventory/item/armor.rs b/common/src/comp/inventory/item/armor.rs new file mode 100644 index 0000000000..88cd537203 --- /dev/null +++ b/common/src/comp/inventory/item/armor.rs @@ -0,0 +1,178 @@ +#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] +#[repr(u32)] +pub enum Chest { + Blue = 1, + Brown = 2, + Dark = 3, + Green = 4, + Orange = 5, + Midnight = 6, + Kimono = 7, + Assassin = 8, + PlateGreen0 = 9, + Leather0 = 10, + ClothPurple0 = 11, + ClothBlue0 = 12, + ClothGreen0 = 13, +} +pub const ALL_CHESTS: [Chest; 13] = [ + Chest::Blue, + Chest::Brown, + Chest::Dark, + Chest::Green, + Chest::Orange, + Chest::Midnight, + Chest::Kimono, + Chest::Assassin, + Chest::PlateGreen0, + Chest::Leather0, + Chest::ClothPurple0, + Chest::ClothBlue0, + Chest::ClothGreen0, +]; + +#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] +#[repr(u32)] +pub enum Belt { + None = 0, + Dark = 1, + TurqCloth = 2, + BloodCloth = 3, + BlackCloth = 4, + Assassin = 5, + Plate0 = 6, + Leather0 = 7, + ClothPurple0 = 8, + ClothBlue0 = 9, + ClothGreen0 = 10, +} +pub const ALL_BELTS: [Belt; 11] = [ + Belt::None, + Belt::Dark, + Belt::TurqCloth, + Belt::BloodCloth, + Belt::BlackCloth, + Belt::Assassin, + Belt::Plate0, + Belt::Leather0, + Belt::ClothPurple0, + Belt::ClothBlue0, + Belt::ClothGreen0, +]; + +#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] +#[repr(u32)] +pub enum Pants { + None = 0, + Blue = 1, + Brown = 2, + Dark = 3, + Green = 4, + Orange = 5, + Kimono = 6, + Assassin = 7, + PlateGreen0 = 8, + Leather0 = 9, + ClothPurple0 = 10, + ClothBlue0 = 11, + ClothGreen0 = 12, +} +pub const ALL_PANTS: [Pants; 13] = [ + Pants::None, + Pants::Blue, + Pants::Brown, + Pants::Dark, + Pants::Green, + Pants::Orange, + Pants::Kimono, + Pants::Assassin, + Pants::PlateGreen0, + Pants::Leather0, + Pants::ClothPurple0, + Pants::ClothBlue0, + Pants::ClothGreen0, +]; + +#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] +#[repr(u32)] +pub enum Hand { + Cloth = 1, + Assassin = 2, + Plate0 = 3, + Leather0 = 4, + ClothPurple0 = 5, + ClothBlue0 = 6, + ClothGreen0 = 7, +} +pub const ALL_HANDS: [Hand; 7] = [ + Hand::Cloth, + Hand::Assassin, + Hand::Plate0, + Hand::Leather0, + Hand::ClothPurple0, + Hand::ClothBlue0, + Hand::ClothGreen0, +]; + +#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] +#[repr(u32)] +pub enum Foot { + Dark = 1, + Sandal = 2, + Jester = 3, + Assassin = 4, + Plate0 = 5, + Leather0 = 6, + ClothPurple0 = 7, + ClothBlue0 = 8, + ClothGreen0 = 9, +} +pub const ALL_FEET: [Foot; 9] = [ + Foot::Dark, + Foot::Sandal, + Foot::Jester, + Foot::Assassin, + Foot::Plate0, + Foot::Leather0, + Foot::ClothPurple0, + Foot::ClothBlue0, + Foot::ClothGreen0, +]; + +#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] +#[repr(u32)] +pub enum Shoulder { + Brown1 = 1, + Chain = 2, + Assassin = 3, + Plate0 = 4, + Leather0 = 5, + Leather1 = 6, + ClothPurple0 = 7, + ClothBlue0 = 8, + ClothGreen0 = 9, +} +pub const ALL_SHOULDERS: [Shoulder; 9] = [ + Shoulder::Brown1, + Shoulder::Chain, + Shoulder::Assassin, + Shoulder::Plate0, + Shoulder::Leather0, + Shoulder::Leather1, + Shoulder::ClothPurple0, + Shoulder::ClothBlue0, + Shoulder::ClothGreen0, +]; + +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] +pub enum Armor { + Shoulder(Shoulder), + Chest(Chest), + Belt(Belt), + Hand(Hand), + Pants(Pants), + Foot(Foot), +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] +pub struct Stats(pub u32); diff --git a/common/src/comp/inventory/item.rs b/common/src/comp/inventory/item/mod.rs similarity index 51% rename from common/src/comp/inventory/item.rs rename to common/src/comp/inventory/item/mod.rs index dd25ef9e4f..5cc42d5b8e 100644 --- a/common/src/comp/inventory/item.rs +++ b/common/src/comp/inventory/item/mod.rs @@ -1,96 +1,20 @@ +pub mod armor; +pub mod tool; + +// Reexports +pub use tool::{DebugKind, SwordKind, Tool, ToolKind}; + use crate::{ assets::{self, Asset}, effect::Effect, terrain::{Block, BlockKind}, }; -//use rand::prelude::*; use rand::seq::SliceRandom; use specs::{Component, FlaggedStorage}; use specs_idvs::IDVStorage; -use std::{fs::File, io::BufReader, time::Duration}; +use std::{fs::File, io::BufReader}; #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] -pub enum Tool { - Sword, - Axe, - Hammer, - Bow, - Dagger, - Staff, - Shield, - Debug(Debug), -} - -// TODO: Allow override in item ron? -impl Tool { - pub fn wield_duration(&self) -> Duration { - match self { - Tool::Sword => Duration::from_millis(800), - Tool::Axe => Duration::from_millis(1000), - Tool::Hammer => Duration::from_millis(1000), - Tool::Bow => Duration::from_millis(800), - Tool::Dagger => Duration::from_millis(300), - Tool::Staff => Duration::from_millis(800), - Tool::Shield => Duration::from_millis(1000), - Tool::Debug(_) => Duration::from_millis(0), - } - } - - pub fn attack_buildup_duration(&self) -> Duration { - match self { - Tool::Sword => Duration::from_millis(100), - Tool::Axe => Duration::from_millis(700), - Tool::Hammer => Duration::from_millis(700), - Tool::Bow => Duration::from_millis(0), - Tool::Dagger => Duration::from_millis(100), - Tool::Staff => Duration::from_millis(400), - Tool::Shield => Duration::from_millis(100), - Tool::Debug(_) => Duration::from_millis(0), - } - } - - pub fn attack_recover_duration(&self) -> Duration { - match self { - Tool::Sword => Duration::from_millis(500), - Tool::Axe => Duration::from_millis(100), - Tool::Hammer => Duration::from_millis(100), - Tool::Bow => Duration::from_millis(800), - Tool::Dagger => Duration::from_millis(400), - Tool::Staff => Duration::from_millis(300), - Tool::Shield => Duration::from_millis(1000), - Tool::Debug(_) => Duration::from_millis(0), - } - } - - pub fn attack_duration(&self) -> Duration { - self.attack_buildup_duration() + self.attack_recover_duration() - } -} - -#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] -pub enum Debug { - Boost, - Possess, -} - -#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] -pub enum Armor { - // TODO: Don't make armor be a body part. Wearing enemy's head is funny but also a creepy - // thing to do. - Helmet, - Shoulders, - Chestplate, - Belt, - Gloves, - Pants, - Boots, - Back, - Tabard, - Gem, - Necklace, -} - -#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum Consumable { Apple, Cheese, @@ -101,24 +25,43 @@ pub enum Consumable { PotionMinor, } -#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum Utility { Collar, } -#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum Ingredient { Flower, Grass, } +fn default_amount() -> u32 { 1 } + #[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum ItemKind { - Tool { kind: Tool, power: u32 }, - Armor { kind: Armor, power: u32 }, - Consumable { kind: Consumable, effect: Effect }, - Utility { kind: Utility }, - Ingredient(Ingredient), + /// Something wieldable + Tool(tool::Tool), + Armor { + kind: armor::Armor, + stats: armor::Stats, + }, + Consumable { + kind: Consumable, + effect: Effect, + #[serde(default = "default_amount")] + amount: u32, + }, + Utility { + kind: Utility, + #[serde(default = "default_amount")] + amount: u32, + }, + Ingredient { + kind: Ingredient, + #[serde(default = "default_amount")] + amount: u32, + }, } #[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] @@ -132,11 +75,21 @@ impl Asset for Item { const ENDINGS: &'static [&'static str] = &["ron"]; fn parse(buf_reader: BufReader) -> Result { - Ok(ron::de::from_reader(buf_reader).unwrap()) + ron::de::from_reader(buf_reader).map_err(assets::Error::parse_error) } } impl Item { + // TODO: consider alternatives such as default abilities that can be added to a + // loadout when no weapon is present + pub fn empty() -> Self { + Self { + name: "Empty Item".to_owned(), + description: "This item may grant abilities, but is invisible".to_owned(), + kind: ItemKind::Tool(Tool::empty()), + } + } + pub fn name(&self) -> &str { &self.name } pub fn description(&self) -> &str { &self.description } @@ -174,9 +127,43 @@ impl Item { "common.items.collar", "common.items.weapons.starter_sword", "common.items.weapons.starter_axe", + "common.items.weapons.staff_nature", "common.items.weapons.starter_hammer", "common.items.weapons.starter_bow", "common.items.weapons.starter_staff", + "common.items.armor.belt.plate_0", + "common.items.armor.belt.leather_0", + "common.items.armor.chest.plate_green_0", + "common.items.armor.chest.leather_0", + "common.items.armor.foot.plate_0", + "common.items.armor.foot.leather_0", + "common.items.armor.pants.plate_green_0", + "common.items.armor.belt.leather_0", + "common.items.armor.shoulder.plate_0", + "common.items.armor.shoulder.leather_1", + "common.items.armor.shoulder.leather_0", + "common.items.armor.hand.leather_0", + "common.items.armor.hand.plate_0", + "common.items.weapons.wood_sword", + "common.items.weapons.short_sword_0", + "common.items.armor.belt.cloth_blue_0", + "common.items.armor.chest.cloth_blue_0", + "common.items.armor.foot.cloth_blue_0", + "common.items.armor.pants.cloth_blue_0", + "common.items.armor.shoulder.cloth_blue_0", + "common.items.armor.hand.cloth_blue_0", + "common.items.armor.belt.cloth_green_0", + "common.items.armor.chest.cloth_green_0", + "common.items.armor.foot.cloth_green_0", + "common.items.armor.pants.cloth_green_0", + "common.items.armor.shoulder.cloth_green_0", + "common.items.armor.hand.cloth_green_0", + "common.items.armor.belt.cloth_purple_0", + "common.items.armor.chest.cloth_purple_0", + "common.items.armor.foot.cloth_purple_0", + "common.items.armor.pants.cloth_purple_0", + "common.items.armor.shoulder.cloth_purple_0", + "common.items.armor.hand.cloth_purple_0", ] .choose(&mut rand::thread_rng()) .unwrap(), // Can't fail diff --git a/common/src/comp/inventory/item/tool.rs b/common/src/comp/inventory/item/tool.rs new file mode 100644 index 0000000000..a440eb9ca7 --- /dev/null +++ b/common/src/comp/inventory/item/tool.rs @@ -0,0 +1,267 @@ +use crate::comp::{ + body::object, projectile, Body, CharacterAbility, Gravity, HealthChange, HealthSource, + LightEmitter, Projectile, +}; +use std::time::Duration; + +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] +pub enum SwordKind { + BasicSword, + Rapier, + Zweihander0, + WoodTraining, + Short0, +} +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] +pub enum AxeKind { + BasicAxe, +} +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] +pub enum HammerKind { + BasicHammer, +} +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] +pub enum BowKind { + BasicBow, +} +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] +pub enum DaggerKind { + BasicDagger, +} +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] +pub enum StaffKind { + BasicStaff, + Sceptre, +} +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] +pub enum ShieldKind { + BasicShield, +} + +#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] +pub enum DebugKind { + Boost, + Possess, +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] +pub enum ToolKind { + Sword(SwordKind), + Axe(AxeKind), + Hammer(HammerKind), + Bow(BowKind), + Dagger(DaggerKind), + Staff(StaffKind), + Shield(ShieldKind), + Debug(DebugKind), + /// This is an placeholder item, it is used by non-humanoid npcs to attack + Empty, +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] +pub struct Tool { + pub kind: ToolKind, + equip_time_millis: u32, + // TODO: item specific abilities +} + +impl Tool { + pub fn empty() -> Self { + Self { + kind: ToolKind::Empty, + equip_time_millis: 0, + } + } + + pub fn equip_time(&self) -> Duration { Duration::from_millis(self.equip_time_millis as u64) } + + pub fn get_abilities(&self) -> Vec { + use CharacterAbility::*; + use DebugKind::*; + use ToolKind::*; + + match self.kind { + Sword(_) => vec![ + TripleStrike { + base_damage: 5, + needs_timing: false, + }, + DashMelee { + buildup_duration: Duration::from_millis(500), + recover_duration: Duration::from_millis(500), + base_damage: 10, + }, + ], + Axe(_) => vec![ + TripleStrike { + base_damage: 7, + needs_timing: true, + }, + BasicMelee { + energy_cost: 100, + buildup_duration: Duration::from_millis(700), + recover_duration: Duration::from_millis(100), + base_healthchange: -12, + range: 3.5, + max_angle: 30.0, + }, + ], + Hammer(_) => vec![BasicMelee { + energy_cost: 0, + buildup_duration: Duration::from_millis(700), + recover_duration: Duration::from_millis(300), + base_healthchange: -10, + range: 3.5, + max_angle: 60.0, + }], + Bow(_) => vec![BasicRanged { + energy_cost: 0, + holdable: true, + prepare_duration: Duration::from_millis(100), + recover_duration: Duration::from_millis(500), + projectile: Projectile { + hit_ground: vec![projectile::Effect::Stick], + hit_wall: vec![projectile::Effect::Stick], + hit_entity: vec![ + projectile::Effect::Damage(HealthChange { + // TODO: This should not be fixed (?) + amount: -5, + cause: HealthSource::Projectile { owner: None }, + }), + projectile::Effect::Knockback(10.0), + projectile::Effect::RewardEnergy(100), + projectile::Effect::Vanish, + ], + time_left: Duration::from_secs(15), + owner: None, + }, + projectile_body: Body::Object(object::Body::Arrow), + projectile_light: None, + projectile_gravity: Some(Gravity(0.1)), + }], + Dagger(_) => vec![BasicMelee { + energy_cost: 0, + buildup_duration: Duration::from_millis(100), + recover_duration: Duration::from_millis(400), + base_healthchange: -5, + range: 3.5, + max_angle: 60.0, + }], + Staff(StaffKind::BasicStaff) => vec![ + BasicMelee { + energy_cost: 0, + buildup_duration: Duration::from_millis(0), + recover_duration: Duration::from_millis(300), + base_healthchange: -1, + range: 10.0, + max_angle: 45.0, + }, + BasicRanged { + energy_cost: 0, + holdable: false, + prepare_duration: Duration::from_millis(0), + recover_duration: Duration::from_millis(200), + projectile: Projectile { + hit_ground: vec![projectile::Effect::Vanish], + hit_wall: vec![projectile::Effect::Vanish], + hit_entity: vec![ + projectile::Effect::Damage(HealthChange { + // TODO: This should not be fixed (?) + amount: -1, + cause: HealthSource::Projectile { owner: None }, + }), + projectile::Effect::RewardEnergy(100), + projectile::Effect::Vanish, + ], + time_left: Duration::from_secs(20), + owner: None, + }, + projectile_body: Body::Object(object::Body::BoltFire), + projectile_light: Some(LightEmitter { + col: (0.72, 0.11, 0.11).into(), + ..Default::default() + }), + + projectile_gravity: None, + }, + BasicRanged { + energy_cost: 400, + holdable: false, + prepare_duration: Duration::from_millis(800), + recover_duration: Duration::from_millis(50), + projectile: Projectile { + hit_ground: vec![ + projectile::Effect::Explode { power: 1.4 }, + projectile::Effect::Vanish, + ], + hit_wall: vec![ + projectile::Effect::Explode { power: 1.4 }, + projectile::Effect::Vanish, + ], + hit_entity: vec![ + projectile::Effect::Explode { power: 1.4 }, + projectile::Effect::Vanish, + ], + time_left: Duration::from_secs(20), + owner: None, + }, + projectile_body: Body::Object(object::Body::BoltFireBig), + projectile_light: Some(LightEmitter { + col: (0.72, 0.11, 0.11).into(), + ..Default::default() + }), + + projectile_gravity: None, + }, + ], + Staff(StaffKind::Sceptre) => vec![ + BasicMelee { + energy_cost: 0, + buildup_duration: Duration::from_millis(0), + recover_duration: Duration::from_millis(300), + base_healthchange: -1, + range: 10.0, + max_angle: 45.0, + }, + BasicMelee { + energy_cost: 350, + buildup_duration: Duration::from_millis(0), + recover_duration: Duration::from_millis(1000), + base_healthchange: 15, + range: 10.0, + max_angle: 45.0, + }, + ], + Shield(_) => vec![BasicBlock], + Debug(kind) => match kind { + DebugKind::Boost => vec![ + CharacterAbility::Boost { + duration: Duration::from_millis(50), + only_up: false, + }, + CharacterAbility::Boost { + 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_ground: vec![projectile::Effect::Stick], + hit_wall: 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: None, + projectile_gravity: None, + }], + }, + Empty => vec![], + } + } +} diff --git a/common/src/comp/inventory/mod.rs b/common/src/comp/inventory/mod.rs index 6861e59d01..c5ee442e96 100644 --- a/common/src/comp/inventory/mod.rs +++ b/common/src/comp/inventory/mod.rs @@ -1,9 +1,7 @@ pub mod item; -// Reexports -pub use item::{Consumable, Debug, Item, ItemKind, Tool}; - use crate::assets; +use item::{Consumable, Item, ItemKind}; use specs::{Component, FlaggedStorage, HashMapStorage}; use specs_idvs::IDVStorage; use std::ops::Not; @@ -14,6 +12,7 @@ pub const MAX_PICKUP_RANGE_SQR: f32 = 64.0; #[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] pub struct Inventory { pub slots: Vec>, + pub amount: u32, } /// Errors which the methods on `Inventory` produce @@ -29,16 +28,123 @@ impl Inventory { pub fn len(&self) -> usize { self.slots.len() } + pub fn recount_items(&mut self) { + self.amount = self.slots.iter().filter(|i| i.is_some()).count() as u32; + } + + /// Adds a new item to the first fitting group of the inventory or starts a + /// new group. Returns the item again if no space was found. + pub fn push(&mut self, item: Item) -> Option { + let item = match item.kind { + ItemKind::Tool(_) | ItemKind::Armor { .. } => self.add_to_first_empty(item), + ItemKind::Utility { + kind: item_kind, + amount: new_amount, + } => { + for slot in &mut self.slots { + if slot + .as_ref() + .map(|s| s.name() == item.name()) + .unwrap_or(false) + && slot + .as_ref() + .map(|s| s.description() == item.description()) + .unwrap_or(false) + { + if let Some(Item { + kind: ItemKind::Utility { kind, amount }, + .. + }) = slot + { + if item_kind == *kind { + *amount += new_amount; + self.recount_items(); + return None; + } + } + } + } + // It didn't work + self.add_to_first_empty(item) + }, + ItemKind::Consumable { + kind: item_kind, + amount: new_amount, + .. + } => { + for slot in &mut self.slots { + if slot + .as_ref() + .map(|s| s.name() == item.name()) + .unwrap_or(false) + && slot + .as_ref() + .map(|s| s.description() == item.description()) + .unwrap_or(false) + { + if let Some(Item { + kind: ItemKind::Consumable { kind, amount, .. }, + .. + }) = slot + { + if item_kind == *kind { + *amount += new_amount; + self.recount_items(); + return None; + } + } + } + } + // It didn't work + self.add_to_first_empty(item) + }, + ItemKind::Ingredient { + kind: item_kind, + amount: new_amount, + } => { + for slot in &mut self.slots { + if slot + .as_ref() + .map(|s| s.name() == item.name()) + .unwrap_or(false) + && slot + .as_ref() + .map(|s| s.description() == item.description()) + .unwrap_or(false) + { + if let Some(Item { + kind: ItemKind::Ingredient { kind, amount }, + .. + }) = slot + { + if item_kind == *kind { + *amount += new_amount; + self.recount_items(); + return None; + } + } + } + } + // It didn't work + self.add_to_first_empty(item) + }, + }; + self.recount_items(); + item + } + /// Adds a new item to the first empty slot of the inventory. Returns the /// item again if no free slot was found. - pub fn push(&mut self, item: Item) -> Option { - match self.slots.iter_mut().find(|slot| slot.is_none()) { + fn add_to_first_empty(&mut self, item: Item) -> Option { + let item = match self.slots.iter_mut().find(|slot| slot.is_none()) { Some(slot) => { *slot = Some(item); None }, None => Some(item), - } + }; + self.recount_items(); + item } /// Add a series of items to inventory, returning any which do not fit as an @@ -54,6 +160,7 @@ impl Inventory { leftovers.push(item); } } + self.recount_items(); if leftovers.len() > 0 { Err(Error::Full(leftovers)) } else { @@ -91,6 +198,7 @@ impl Inventory { Some(slot) => { let old = slot.take(); *slot = Some(item); + self.recount_items(); Ok(old) }, None => Err(item), @@ -121,14 +229,73 @@ impl Inventory { /// Remove an item from the slot pub fn remove(&mut self, cell: usize) -> Option { - self.slots.get_mut(cell).and_then(|item| item.take()) + let item = self.slots.get_mut(cell).and_then(|item| item.take()); + self.recount_items(); + item + } + + /// Remove just one item from the slot + pub fn take(&mut self, cell: usize) -> Option { + if let Some(Some(item)) = self.slots.get_mut(cell) { + let mut return_item = item.clone(); + match &mut item.kind { + ItemKind::Tool(_) | ItemKind::Armor { .. } => self.remove(cell), + ItemKind::Utility { kind, amount } => { + if *amount <= 1 { + self.remove(cell) + } else { + *amount -= 1; + return_item.kind = ItemKind::Utility { + kind: *kind, + amount: 1, + }; + self.recount_items(); + Some(return_item) + } + }, + ItemKind::Consumable { + kind, + amount, + effect, + } => { + if *amount <= 1 { + self.remove(cell) + } else { + *amount -= 1; + return_item.kind = ItemKind::Consumable { + kind: *kind, + effect: *effect, + amount: 1, + }; + self.recount_items(); + Some(return_item) + } + }, + ItemKind::Ingredient { kind, amount } => { + if *amount <= 1 { + self.remove(cell) + } else { + *amount -= 1; + return_item.kind = ItemKind::Ingredient { + kind: *kind, + amount: 1, + }; + self.recount_items(); + Some(return_item) + } + }, + } + } else { + None + } } } impl Default for Inventory { fn default() -> Inventory { let mut inventory = Inventory { - slots: vec![None; 25], + slots: vec![None; 18], + amount: 0, }; inventory.push(assets::load_expect_cloned("common.items.cheese")); inventory.push(assets::load_expect_cloned("common.items.apple")); diff --git a/common/src/comp/inventory/test.rs b/common/src/comp/inventory/test.rs index f2665d7cb5..51498159c2 100644 --- a/common/src/comp/inventory/test.rs +++ b/common/src/comp/inventory/test.rs @@ -15,6 +15,7 @@ fn create_default_count() { assert_eq!(Inventory::default().count(), 2) } fn push_full() { let mut inv = Inventory { slots: TEST_ITEMS.iter().map(|a| Some(a.clone())).collect(), + amount: 0, }; assert_eq!( inv.push(TEST_ITEMS[0].clone()).unwrap(), @@ -27,6 +28,7 @@ fn push_full() { fn push_all_full() { let mut inv = Inventory { slots: TEST_ITEMS.iter().map(|a| Some(a.clone())).collect(), + amount: 0, }; let Error::Full(leftovers) = inv .push_all(TEST_ITEMS.iter().map(|a| a.clone())) @@ -40,6 +42,7 @@ fn push_all_full() { fn push_unique_all_full() { let mut inv = Inventory { slots: TEST_ITEMS.iter().map(|a| Some(a.clone())).collect(), + amount: 0, }; inv.push_all_unique(TEST_ITEMS.iter().map(|a| a.clone())) .expect("Pushing unique items into an inventory that already contains them didn't work!"); @@ -51,6 +54,7 @@ fn push_unique_all_full() { fn push_all_empty() { let mut inv = Inventory { slots: vec![None, None], + amount: 0, }; inv.push_all(TEST_ITEMS.iter().map(|a| a.clone())) .expect("Pushing items into an empty inventory didn't work!"); @@ -62,6 +66,7 @@ fn push_all_empty() { fn push_all_unique_empty() { let mut inv = Inventory { slots: vec![None, None], + amount: 0, }; inv.push_all_unique(TEST_ITEMS.iter().map(|a| a.clone())) .expect( diff --git a/common/src/comp/mod.rs b/common/src/comp/mod.rs index 1c49afab0b..00079da365 100644 --- a/common/src/comp/mod.rs +++ b/common/src/comp/mod.rs @@ -1,3 +1,4 @@ +mod ability; mod admin; pub mod agent; mod body; @@ -15,26 +16,27 @@ mod stats; mod visual; // Reexports +pub use ability::{CharacterAbility, ItemConfig, Loadout}; pub use admin::Admin; pub use agent::{Agent, Alignment}; pub use body::{ biped_large, bird_medium, bird_small, critter, dragon, fish_medium, fish_small, humanoid, object, quadruped_medium, quadruped_small, AllBodies, Body, BodyData, }; -pub use character_state::{ActionState, CharacterState, MovementState}; +pub use character_state::{Attacking, CharacterState, StateUpdate}; pub use controller::{ - ControlEvent, Controller, ControllerInputs, Input, InputState, InventoryManip, MountState, - Mounting, + Climb, ControlAction, ControlEvent, Controller, ControllerInputs, Input, InventoryManip, + MountState, Mounting, }; pub use energy::{Energy, EnergySource}; pub use inputs::CanBuild; pub use inventory::{ - item, Inventory, InventoryUpdate, InventoryUpdateEvent, Item, ItemKind, MAX_PICKUP_RANGE_SQR, + item, item::Item, Inventory, InventoryUpdate, InventoryUpdateEvent, MAX_PICKUP_RANGE_SQR, }; pub use last::Last; pub use location::{Waypoint, WaypointArea}; pub use phys::{ForceUpdate, Gravity, Mass, Ori, PhysicsState, Pos, Scale, Sticky, Vel}; pub use player::Player; pub use projectile::Projectile; -pub use stats::{Equipment, Exp, HealthChange, HealthSource, Level, Stats}; +pub use stats::{Exp, HealthChange, HealthSource, Level, Stats}; pub use visual::LightEmitter; diff --git a/common/src/comp/phys.rs b/common/src/comp/phys.rs index c1c54d80ce..202eed9cf9 100644 --- a/common/src/comp/phys.rs +++ b/common/src/comp/phys.rs @@ -1,4 +1,4 @@ -use crate::sync::Uid; +use crate::{sync::Uid, util::Dir}; use specs::{Component, FlaggedStorage, NullStorage}; use specs_idvs::IDVStorage; use vek::*; @@ -21,7 +21,7 @@ impl Component for Vel { // Orientation #[derive(Copy, Clone, Default, Debug, PartialEq, Serialize, Deserialize)] -pub struct Ori(pub Vec3); +pub struct Ori(pub Dir); impl Component for Ori { type Storage = IDVStorage; diff --git a/common/src/comp/projectile.rs b/common/src/comp/projectile.rs index 785c1e318d..8ff384a87a 100644 --- a/common/src/comp/projectile.rs +++ b/common/src/comp/projectile.rs @@ -3,23 +3,46 @@ use specs::{Component, FlaggedStorage}; use specs_idvs::IDVStorage; use std::time::Duration; -#[derive(Clone, Debug, Serialize, Deserialize)] +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] pub enum Effect { Damage(comp::HealthChange), + Knockback(f32), + RewardEnergy(u32), + Explode { power: f32 }, Vanish, Stick, Possess, } -#[derive(Clone, Debug, Serialize, Deserialize)] +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] pub struct Projectile { - pub owner: Uid, // TODO: use SmallVec for these effects pub hit_ground: Vec, pub hit_wall: Vec, pub hit_entity: Vec, /// Time left until the projectile will despawn pub time_left: Duration, + pub owner: Option, +} + +impl Projectile { + pub fn set_owner(&mut self, new_owner: Uid) { + self.owner = Some(new_owner); + for e in self + .hit_ground + .iter_mut() + .chain(self.hit_wall.iter_mut()) + .chain(self.hit_entity.iter_mut()) + { + if let Effect::Damage(comp::HealthChange { + cause: comp::HealthSource::Projectile { owner, .. }, + .. + }) = e + { + *owner = Some(new_owner); + } + } + } } impl Component for Projectile { diff --git a/common/src/comp/stats.rs b/common/src/comp/stats.rs index aaa768fee3..1c31af1187 100644 --- a/common/src/comp/stats.rs +++ b/common/src/comp/stats.rs @@ -15,6 +15,7 @@ pub struct HealthChange { #[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, Serialize, Deserialize)] pub enum HealthSource { Attack { by: Uid }, // TODO: Implement weapon + Projectile { owner: Option }, Suicide, World, Revive, @@ -42,13 +43,6 @@ pub struct Level { amount: u32, } -#[derive(Clone, PartialEq, Eq, Hash, Debug, Serialize, Deserialize)] -pub struct Equipment { - pub main: Option, - pub alt: Option, - // TODO: Armor -} - impl Health { pub fn current(&self) -> u32 { self.current } @@ -125,7 +119,6 @@ pub struct Stats { pub health: Health, pub level: Level, pub exp: Exp, - pub equipment: Equipment, pub endurance: u32, pub fitness: u32, pub willpower: u32, @@ -142,11 +135,11 @@ impl Stats { } // TODO: Delete this once stat points will be a thing - pub fn update_max_hp(&mut self) { self.health.set_maximum(27 + 15 * self.level.amount); } + pub fn update_max_hp(&mut self) { self.health.set_maximum(52 + 3 * self.level.amount); } } impl Stats { - pub fn new(name: String, body: Body, main: Option) -> Self { + pub fn new(name: String, body: Body) -> Self { let race = if let comp::Body::Humanoid(hbody) = body { Some(hbody.race) } else { @@ -178,7 +171,6 @@ impl Stats { current: 0, maximum: 50, }, - equipment: Equipment { main, alt: None }, endurance, fitness, willpower, diff --git a/common/src/event.rs b/common/src/event.rs index 0ba59b7274..6721107fd7 100644 --- a/common/src/event.rs +++ b/common/src/event.rs @@ -1,5 +1,5 @@ -use crate::{comp, sync::Uid}; -use comp::{item::Tool, InventoryUpdateEvent}; +use crate::{comp, sync::Uid, util::Dir}; +use comp::{item::ToolKind, InventoryUpdateEvent}; use parking_lot::Mutex; use serde::Deserialize; use specs::Entity as EcsEntity; @@ -32,7 +32,6 @@ pub enum SfxEvent { Run, Roll, Climb, - Swim, GliderOpen, Glide, GliderClose, @@ -40,27 +39,30 @@ pub enum SfxEvent { Fall, ExperienceGained, LevelUp, - Wield(Tool), - Unwield(Tool), + Wield(ToolKind), + Unwield(ToolKind), Inventory(InventoryUpdateEvent), } pub enum LocalEvent { + /// Applies upward force to entity's `Vel` Jump(EcsEntity), + /// Applies the `force` to `entity`'s `Vel` + ApplyForce { entity: EcsEntity, force: Vec3 }, + /// Applies leaping force to `entity`'s `Vel` away from `wall_dir` direction WallLeap { entity: EcsEntity, wall_dir: Vec3, }, - Boost { - entity: EcsEntity, - vel: Vec3, - }, + /// Applies `vel` velocity to `entity` + Boost { entity: EcsEntity, vel: Vec3 }, } pub enum ServerEvent { Explosion { pos: Vec3, - radius: f32, + power: f32, + owner: Option, }, Damage { uid: Uid, @@ -74,7 +76,7 @@ pub enum ServerEvent { Respawn(EcsEntity), Shoot { entity: EcsEntity, - dir: Vec3, + dir: Dir, body: comp::Body, light: Option, projectile: comp::Projectile, @@ -99,6 +101,7 @@ pub enum ServerEvent { CreateNpc { pos: comp::Pos, stats: comp::Stats, + loadout: comp::Loadout, body: comp::Body, agent: comp::Agent, alignment: comp::Alignment, @@ -130,7 +133,7 @@ impl EventBus { } } - pub fn emit(&self, event: E) { self.queue.lock().push_front(event); } + pub fn emit_now(&self, event: E) { self.queue.lock().push_back(event); } pub fn recv_all(&self) -> impl ExactSizeIterator { std::mem::replace(self.queue.lock().deref_mut(), VecDeque::new()).into_iter() @@ -143,7 +146,9 @@ pub struct Emitter<'a, E> { } impl<'a, E> Emitter<'a, E> { - pub fn emit(&mut self, event: E) { self.events.push_front(event); } + pub fn emit(&mut self, event: E) { self.events.push_back(event); } + + pub fn append(&mut self, other: &mut VecDeque) { self.events.append(other) } } impl<'a, E> Drop for Emitter<'a, E> { diff --git a/common/src/figure/mod.rs b/common/src/figure/mod.rs index 4a3e6aa787..0be11c7bf6 100644 --- a/common/src/figure/mod.rs +++ b/common/src/figure/mod.rs @@ -149,10 +149,8 @@ impl MatSegment { _ => None, }) } -} -impl From<&DotVoxData> for MatSegment { - fn from(dot_vox_data: &DotVoxData) -> Self { + pub fn from_vox(dot_vox_data: &DotVoxData, flipped: bool) -> Self { if let Some(model) = dot_vox_data.models.get(0) { let palette = dot_vox_data .palette @@ -186,7 +184,16 @@ impl From<&DotVoxData> for MatSegment { }; vol.set( - Vec3::new(voxel.x, voxel.y, voxel.z).map(|e| i32::from(e)), + Vec3::new( + if flipped { + model.size.x as u8 - 1 - voxel.x + } else { + voxel.x + }, + voxel.y, + voxel.z, + ) + .map(|e| i32::from(e)), block, ) .unwrap(); @@ -198,3 +205,7 @@ impl From<&DotVoxData> for MatSegment { } } } + +impl From<&DotVoxData> for MatSegment { + fn from(dot_vox_data: &DotVoxData) -> Self { Self::from_vox(dot_vox_data, false) } +} diff --git a/common/src/lib.rs b/common/src/lib.rs index 45e2ce2404..70df9a2c1d 100644 --- a/common/src/lib.rs +++ b/common/src/lib.rs @@ -25,6 +25,7 @@ pub mod path; pub mod ray; pub mod region; pub mod state; +pub mod states; pub mod sync; pub mod sys; pub mod terrain; diff --git a/common/src/msg/client.rs b/common/src/msg/client.rs index 2b2ec63f33..970208cc23 100644 --- a/common/src/msg/client.rs +++ b/common/src/msg/client.rs @@ -18,6 +18,7 @@ pub enum ClientMsg { Spectate, ControllerInputs(comp::ControllerInputs), ControlEvent(comp::ControlEvent), + ControlAction(comp::ControlAction), SetViewDistance(u32), BreakBlock(Vec3), PlaceBlock(Vec3, Block), diff --git a/common/src/msg/ecs_packet.rs b/common/src/msg/ecs_packet.rs index 1a8b10df2a..7c6c29aa38 100644 --- a/common/src/msg/ecs_packet.rs +++ b/common/src/msg/ecs_packet.rs @@ -21,6 +21,11 @@ sum_type! { Mass(comp::Mass), Gravity(comp::Gravity), Sticky(comp::Sticky), + Loadout(comp::Loadout), + CharacterState(comp::CharacterState), + Pos(comp::Pos), + Vel(comp::Vel), + Ori(comp::Ori), } } // Automatically derive From for EcsCompPhantom @@ -41,6 +46,11 @@ sum_type! { Mass(PhantomData), Gravity(PhantomData), Sticky(PhantomData), + Loadout(PhantomData), + CharacterState(PhantomData), + Pos(PhantomData), + Vel(PhantomData), + Ori(PhantomData), } } impl sync::CompPacket for EcsCompPacket { @@ -61,6 +71,11 @@ impl sync::CompPacket for EcsCompPacket { EcsCompPacket::Mass(comp) => sync::handle_insert(comp, entity, world), EcsCompPacket::Gravity(comp) => sync::handle_insert(comp, entity, world), EcsCompPacket::Sticky(comp) => sync::handle_insert(comp, entity, world), + EcsCompPacket::Loadout(comp) => sync::handle_insert(comp, entity, world), + EcsCompPacket::CharacterState(comp) => sync::handle_insert(comp, entity, world), + EcsCompPacket::Pos(comp) => sync::handle_insert(comp, entity, world), + EcsCompPacket::Vel(comp) => sync::handle_insert(comp, entity, world), + EcsCompPacket::Ori(comp) => sync::handle_insert(comp, entity, world), } } @@ -79,6 +94,11 @@ impl sync::CompPacket for EcsCompPacket { EcsCompPacket::Mass(comp) => sync::handle_modify(comp, entity, world), EcsCompPacket::Gravity(comp) => sync::handle_modify(comp, entity, world), EcsCompPacket::Sticky(comp) => sync::handle_modify(comp, entity, world), + EcsCompPacket::Loadout(comp) => sync::handle_modify(comp, entity, world), + EcsCompPacket::CharacterState(comp) => sync::handle_modify(comp, entity, world), + EcsCompPacket::Pos(comp) => sync::handle_modify(comp, entity, world), + EcsCompPacket::Vel(comp) => sync::handle_modify(comp, entity, world), + EcsCompPacket::Ori(comp) => sync::handle_modify(comp, entity, world), } } @@ -99,6 +119,13 @@ impl sync::CompPacket for EcsCompPacket { EcsCompPhantom::Mass(_) => sync::handle_remove::(entity, world), EcsCompPhantom::Gravity(_) => sync::handle_remove::(entity, world), EcsCompPhantom::Sticky(_) => sync::handle_remove::(entity, world), + EcsCompPhantom::Loadout(_) => sync::handle_remove::(entity, world), + EcsCompPhantom::CharacterState(_) => { + sync::handle_remove::(entity, world) + }, + EcsCompPhantom::Pos(_) => sync::handle_remove::(entity, world), + EcsCompPhantom::Vel(_) => sync::handle_remove::(entity, world), + EcsCompPhantom::Ori(_) => sync::handle_remove::(entity, world), } } } diff --git a/common/src/msg/server.rs b/common/src/msg/server.rs index 87bf35c708..f2186ebab0 100644 --- a/common/src/msg/server.rs +++ b/common/src/msg/server.rs @@ -158,25 +158,10 @@ pub enum ServerMsg { }, SetPlayerEntity(u64), TimeOfDay(state::TimeOfDay), - EcsSync(sync::SyncPackage), + EntitySync(sync::EntitySyncPackage), + CompSync(sync::CompSyncPackage), CreateEntity(sync::EntityPackage), DeleteEntity(u64), - EntityPos { - entity: u64, - pos: comp::Pos, - }, - EntityVel { - entity: u64, - vel: comp::Vel, - }, - EntityOri { - entity: u64, - ori: comp::Ori, - }, - EntityCharacterState { - entity: u64, - character_state: comp::CharacterState, - }, InventoryUpdate(comp::Inventory, comp::InventoryUpdateEvent), TerrainChunkUpdate { key: Vec2, diff --git a/common/src/net/post2.rs b/common/src/net/post2.rs index ee9e7303e5..95307ac4bd 100644 --- a/common/src/net/post2.rs +++ b/common/src/net/post2.rs @@ -332,7 +332,8 @@ mod tests { #[test] fn connect() { - let (mut postoffice, sock) = create_postoffice::<(), ()>(0).unwrap(); + let (mut postoffice, bound) = create_postoffice::<(), ()>(0).unwrap(); + let sock = (std::net::Ipv4Addr::LOCALHOST, bound.port()); let _client0 = PostBox::<(), ()>::to(sock).unwrap(); let _client1 = PostBox::<(), ()>::to(sock).unwrap(); @@ -364,7 +365,8 @@ mod tests { #[test] fn send_recv() { - let (mut postoffice, sock) = create_postoffice::<(), i32>(2).unwrap(); + let (mut postoffice, bound) = create_postoffice::<(), i32>(2).unwrap(); + let sock = (std::net::Ipv4Addr::LOCALHOST, bound.port()); let test_msgs = vec![1, 1337, 42, -48]; let mut client = PostBox::::to(sock).unwrap(); @@ -386,7 +388,8 @@ mod tests { #[test] #[ignore] fn send_recv_huge() { - let (mut postoffice, sock) = create_postoffice::<(), Vec>(3).unwrap(); + let (mut postoffice, bound) = create_postoffice::<(), Vec>(3).unwrap(); + let sock = (std::net::Ipv4Addr::LOCALHOST, bound.port()); let test_msgs: Vec> = (0..5) .map(|i| (0..100000).map(|j| i * 2 + j).collect()) .collect(); @@ -410,7 +413,8 @@ mod tests { #[test] fn send_recv_both() { - let (mut postoffice, sock) = create_postoffice::(4).unwrap(); + let (mut postoffice, bound) = create_postoffice::(4).unwrap(); + let sock = (std::net::Ipv4Addr::LOCALHOST, bound.port()); let mut client = PostBox::::to(sock).unwrap(); loop_for(Duration::from_millis(250), || ()); let mut server = postoffice.new_postboxes().next().unwrap(); diff --git a/common/src/path.rs b/common/src/path.rs index 1d21b51819..85e8f174af 100644 --- a/common/src/path.rs +++ b/common/src/path.rs @@ -218,8 +218,26 @@ where ]; DIRS.iter() - .map(move |dir| pos + dir) - .filter(move |pos| is_walkable(pos)) + .map(move |dir| (pos, dir)) + .filter(move |(pos, dir)| { + is_walkable(pos) + && ((dir.z < 1 + || vol + .get(pos + Vec3::unit_z() * 2) + .map(|b| !b.is_solid()) + .unwrap_or(true)) + && (dir.z < 2 + || vol + .get(pos + Vec3::unit_z() * 3) + .map(|b| !b.is_solid()) + .unwrap_or(true)) + && (dir.z >= 0 + || vol + .get(pos + *dir + Vec3::unit_z() * 2) + .map(|b| !b.is_solid()) + .unwrap_or(true))) + }) + .map(move |(pos, dir)| pos + dir) .chain( DIAGONALS .iter() diff --git a/common/src/state.rs b/common/src/state.rs index 0fbd3202d0..62f492e513 100644 --- a/common/src/state.rs +++ b/common/src/state.rs @@ -40,7 +40,7 @@ pub struct DeltaTime(pub f32); /// this value, the game's physics will begin to produce time lag. Ideally, we'd /// avoid such a situation. const MAX_DELTA_TIME: f32 = 1.0; -const HUMANOID_JUMP_ACCEL: f32 = 26.0; +const HUMANOID_JUMP_ACCEL: f32 = 16.0; #[derive(Default)] pub struct BlockChange { @@ -106,6 +106,7 @@ impl State { // Uids for sync ecs.register_sync_marker(); // Register server -> all clients synced components. + ecs.register::(); ecs.register::(); ecs.register::(); ecs.register::(); @@ -119,12 +120,12 @@ impl State { ecs.register::(); ecs.register::(); ecs.register::(); + ecs.register::(); // Register components send from clients -> server ecs.register::(); // Register components send directly from server -> all but one client - ecs.register::(); ecs.register::(); // Register components synced from client -> server -> all other clients @@ -138,7 +139,6 @@ impl State { ecs.register::>(); ecs.register::>(); ecs.register::>(); - ecs.register::>(); ecs.register::(); ecs.register::(); ecs.register::(); @@ -147,6 +147,7 @@ impl State { ecs.register::(); ecs.register::(); ecs.register::(); + ecs.register::(); // Register synced resources used by the ECS. ecs.insert(TimeOfDay(0.0)); @@ -354,6 +355,13 @@ impl State { vel.0.z = HUMANOID_JUMP_ACCEL; } }, + LocalEvent::ApplyForce { entity, force } => { + // TODO: this sets the velocity directly to the value of `force`, consider + // renaming the event or changing the behavior + if let Some(vel) = velocities.get_mut(entity) { + vel.0 = force; + } + }, LocalEvent::WallLeap { entity, wall_dir } => { if let (Some(vel), Some(_controller)) = (velocities.get_mut(entity), controllers.get_mut(entity)) diff --git a/common/src/states/basic_block.rs b/common/src/states/basic_block.rs new file mode 100644 index 0000000000..b60b7e548f --- /dev/null +++ b/common/src/states/basic_block.rs @@ -0,0 +1,26 @@ +use super::utils::*; +use crate::{ + comp::StateUpdate, + sys::character_behavior::{CharacterBehavior, JoinData}, +}; + +// const BLOCK_ACCEL: f32 = 30.0; +// const BLOCK_SPEED: f32 = 75.0; + +#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize, Eq, Hash)] +pub struct Data; + +impl CharacterBehavior for Data { + fn behavior(&self, data: &JoinData) -> StateUpdate { + let mut update = StateUpdate::from(data); + + handle_move(&data, &mut update, 0.4); + + if !data.physics.on_ground + || !(data.inputs.secondary.is_pressed() || data.inputs.primary.is_pressed()) + { + attempt_wield(data, &mut update); + } + update + } +} diff --git a/common/src/states/basic_melee.rs b/common/src/states/basic_melee.rs new file mode 100644 index 0000000000..d67681cc0c --- /dev/null +++ b/common/src/states/basic_melee.rs @@ -0,0 +1,93 @@ +use crate::{ + comp::{Attacking, CharacterState, EnergySource, StateUpdate}, + states::utils::*, + sys::character_behavior::*, +}; +use std::time::Duration; + +#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize)] +pub struct Data { + /// How long until state should deal damage + pub buildup_duration: Duration, + /// How long the state has until exiting + pub recover_duration: Duration, + /// Base damage (negative) or healing (positive) + pub base_healthchange: i32, + /// Max range + pub range: f32, + /// Max angle (45.0 will give you a 90.0 angle window) + pub max_angle: f32, + /// Whether the attack can deal more damage + pub exhausted: bool, +} + +impl CharacterBehavior for Data { + fn behavior(&self, data: &JoinData) -> StateUpdate { + let mut update = StateUpdate::from(data); + + handle_move(data, &mut update, 0.7); + handle_jump(data, &mut update); + + if self.buildup_duration != Duration::default() { + // Build up + update.character = CharacterState::BasicMelee(Data { + buildup_duration: self + .buildup_duration + .checked_sub(Duration::from_secs_f32(data.dt.0)) + .unwrap_or_default(), + recover_duration: self.recover_duration, + base_healthchange: self.base_healthchange, + range: self.range, + max_angle: self.max_angle, + exhausted: false, + }); + } else if !self.exhausted { + // Hit attempt + data.updater.insert(data.entity, Attacking { + base_healthchange: self.base_healthchange, + range: self.range, + max_angle: self.max_angle.to_radians(), + applied: false, + hit_count: 0, + knockback: 0.0, + }); + + update.character = CharacterState::BasicMelee(Data { + buildup_duration: self.buildup_duration, + recover_duration: self.recover_duration, + base_healthchange: self.base_healthchange, + range: self.range, + max_angle: self.max_angle, + exhausted: true, + }); + } else if self.recover_duration != Duration::default() { + // Recovery + update.character = CharacterState::BasicMelee(Data { + buildup_duration: self.buildup_duration, + recover_duration: self + .recover_duration + .checked_sub(Duration::from_secs_f32(data.dt.0)) + .unwrap_or_default(), + base_healthchange: self.base_healthchange, + range: self.range, + max_angle: self.max_angle, + exhausted: true, + }); + } else { + // Done + update.character = CharacterState::Wielding; + // Make sure attack component is removed + data.updater.remove::(data.entity); + } + + // Grant energy on successful hit + if let Some(attack) = data.attacking { + if attack.applied && attack.hit_count > 0 { + data.updater.remove::(data.entity); + update.energy.change_by(100, EnergySource::HitEnemy); + } + } + + update + } +} diff --git a/common/src/states/basic_ranged.rs b/common/src/states/basic_ranged.rs new file mode 100644 index 0000000000..3652c40e1e --- /dev/null +++ b/common/src/states/basic_ranged.rs @@ -0,0 +1,97 @@ +use crate::{ + comp::{Body, CharacterState, Gravity, LightEmitter, Projectile, StateUpdate}, + event::ServerEvent, + states::utils::*, + sys::character_behavior::*, +}; +use std::time::Duration; + +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +pub struct Data { + /// Can you hold the abilty beyond the prepare duration + pub holdable: bool, + /// How long we have to prepare the weapon + pub prepare_duration: Duration, + /// How long we prepared the weapon already + pub prepare_timer: Duration, + /// How long the state has until exiting + pub recover_duration: Duration, + pub projectile: Projectile, + pub projectile_body: Body, + pub projectile_light: Option, + pub projectile_gravity: Option, + /// Whether the attack fired already + pub exhausted: bool, +} + +impl CharacterBehavior for Data { + fn behavior(&self, data: &JoinData) -> StateUpdate { + let mut update = StateUpdate::from(data); + + handle_move(data, &mut update, 0.3); + handle_jump(data, &mut update); + + if self.prepare_timer < self.prepare_duration + || self.holdable && !self.exhausted && data.inputs.holding_ability_key() + { + // Prepare (draw the bow) + update.character = CharacterState::BasicRanged(Data { + prepare_timer: self.prepare_timer + Duration::from_secs_f32(data.dt.0), + holdable: self.holdable, + prepare_duration: self.prepare_duration, + recover_duration: self.recover_duration, + projectile: self.projectile.clone(), + projectile_body: self.projectile_body, + projectile_light: self.projectile_light, + projectile_gravity: self.projectile_gravity, + exhausted: false, + }); + } else if !self.exhausted { + // Fire + let mut projectile = self.projectile.clone(); + projectile.set_owner(*data.uid); + update.server_events.push_front(ServerEvent::Shoot { + entity: data.entity, + dir: data.inputs.look_dir, + body: self.projectile_body, + projectile, + light: self.projectile_light, + gravity: self.projectile_gravity, + }); + + update.character = CharacterState::BasicRanged(Data { + prepare_timer: self.prepare_timer, + holdable: self.holdable, + prepare_duration: self.prepare_duration, + recover_duration: self.recover_duration, + projectile: self.projectile.clone(), + projectile_body: self.projectile_body, + projectile_light: self.projectile_light, + projectile_gravity: self.projectile_gravity, + exhausted: true, + }); + } else if self.recover_duration != Duration::default() { + // Recovery + update.character = CharacterState::BasicRanged(Data { + prepare_timer: self.prepare_timer, + holdable: self.holdable, + prepare_duration: self.prepare_duration, + recover_duration: self + .recover_duration + .checked_sub(Duration::from_secs_f32(data.dt.0)) + .unwrap_or_default(), + projectile: self.projectile.clone(), + projectile_body: self.projectile_body, + projectile_light: self.projectile_light, + projectile_gravity: self.projectile_gravity, + exhausted: true, + }); + return update; + } else { + // Done + update.character = CharacterState::Wielding; + } + + update + } +} diff --git a/common/src/states/boost.rs b/common/src/states/boost.rs new file mode 100644 index 0000000000..71d1e948a2 --- /dev/null +++ b/common/src/states/boost.rs @@ -0,0 +1,51 @@ +use crate::{ + comp::{Attacking, CharacterState, EnergySource, StateUpdate}, + states::utils::*, + sys::character_behavior::*, +}; +use std::time::Duration; + +#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize)] +pub struct Data { + /// How long the state has until exiting + pub duration: Duration, + pub only_up: bool, +} + +impl CharacterBehavior for Data { + fn behavior(&self, data: &JoinData) -> StateUpdate { + let mut update = StateUpdate::from(data); + + handle_move(data, &mut update, 1.0); + + // Still going + if self.duration != Duration::default() { + if self.only_up { + update.vel.0.z += 500.0 * data.dt.0; + } else { + update.vel.0 += *data.inputs.look_dir * 500.0 * data.dt.0; + } + update.character = CharacterState::Boost(Data { + duration: self + .duration + .checked_sub(Duration::from_secs_f32(data.dt.0)) + .unwrap_or_default(), + only_up: self.only_up, + }); + } + // Done + else { + update.character = CharacterState::Wielding; + } + + // Grant energy on successful hit + if let Some(attack) = data.attacking { + if attack.applied && attack.hit_count > 0 { + data.updater.remove::(data.entity); + update.energy.change_by(100, EnergySource::HitEnemy); + } + } + + update + } +} diff --git a/common/src/states/climb.rs b/common/src/states/climb.rs new file mode 100644 index 0000000000..7ddf2a7d57 --- /dev/null +++ b/common/src/states/climb.rs @@ -0,0 +1,98 @@ +use crate::{ + comp::{CharacterState, Climb, EnergySource, StateUpdate}, + event::LocalEvent, + sys::{ + character_behavior::{CharacterBehavior, JoinData}, + phys::GRAVITY, + }, + util::Dir, +}; +use vek::{ + vec::{Vec2, Vec3}, + Lerp, +}; + +const HUMANOID_CLIMB_ACCEL: f32 = 5.0; +const CLIMB_SPEED: f32 = 5.0; + +#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize, Eq, Hash)] +pub struct Data; + +impl CharacterBehavior for Data { + fn behavior(&self, data: &JoinData) -> StateUpdate { + let mut update = StateUpdate::from(data); + + // If no wall is in front of character or we stopped climbing; + let (wall_dir, climb) = if let (Some(wall_dir), Some(climb), false) = ( + data.physics.on_wall, + data.inputs.climb, + data.physics.on_ground, + ) { + (wall_dir, climb) + } else { + if data.inputs.jump.is_pressed() { + // They've climbed atop something, give them a boost + update + .local_events + .push_front(LocalEvent::Jump(data.entity)); + } + update.character = CharacterState::Idle {}; + return update; + }; + + // Move player + update.vel.0 += Vec2::broadcast(data.dt.0) + * data.inputs.move_dir + * if update.vel.0.magnitude_squared() < CLIMB_SPEED.powf(2.0) { + HUMANOID_CLIMB_ACCEL + } else { + 0.0 + }; + + // Expend energy if climbing + let energy_use = match climb { + Climb::Up | Climb::Down => 8, + Climb::Hold => 1, + }; + if let Err(_) = update + .energy + .try_change_by(-energy_use, EnergySource::Climb) + { + update.character = CharacterState::Idle {}; + } + + // Set orientation direction based on wall direction + let ori_dir = Vec2::from(wall_dir); + + // Smooth orientation + update.ori.0 = Dir::slerp_to_vec3( + update.ori.0, + ori_dir.into(), + if data.physics.on_ground { 9.0 } else { 2.0 } * data.dt.0, + ); + + // Apply Vertical Climbing Movement + if update.vel.0.z <= CLIMB_SPEED { + match climb { + Climb::Down => { + update.vel.0 -= + data.dt.0 * update.vel.0.map(|e| e.abs().powf(1.5) * e.signum() * 6.0); + }, + Climb::Up => { + update.vel.0.z = (update.vel.0.z + data.dt.0 * GRAVITY * 1.25).min(CLIMB_SPEED); + }, + Climb::Hold => { + // Antigrav + update.vel.0.z = (update.vel.0.z + data.dt.0 * GRAVITY * 1.5).min(CLIMB_SPEED); + update.vel.0 = Lerp::lerp( + update.vel.0, + Vec3::zero(), + 30.0 * data.dt.0 / (1.0 - update.vel.0.z.min(0.0) * 5.0), + ); + }, + } + } + + update + } +} diff --git a/common/src/states/dash_melee.rs b/common/src/states/dash_melee.rs new file mode 100644 index 0000000000..580eef21b5 --- /dev/null +++ b/common/src/states/dash_melee.rs @@ -0,0 +1,102 @@ +use crate::{ + comp::{Attacking, CharacterState, EnergySource, StateUpdate}, + states::utils::*, + sys::character_behavior::*, +}; +use std::time::Duration; +use vek::Vec3; + +const DASH_SPEED: f32 = 19.0; + +#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize, Eq, Hash)] +pub struct Data { + /// How long until state should deal damage + pub buildup_duration: Duration, + /// How long the state has until exiting + pub recover_duration: Duration, + /// Base damage + pub base_damage: u32, + /// Whether the attack can deal more damage + pub exhausted: bool, + pub initialize: bool, +} + +impl CharacterBehavior for Data { + fn behavior(&self, data: &JoinData) -> StateUpdate { + let mut update = StateUpdate::from(data); + + if self.initialize { + update.vel.0 = *data.inputs.look_dir * 20.0; + if let Some(dir) = Vec3::from(data.vel.0.xy()).try_normalized() { + update.ori.0 = dir.into(); + } + } + + if self.buildup_duration != Duration::default() && data.physics.touch_entity.is_none() { + // Build up (this will move you forward) + update.vel.0 = Vec3::new(0.0, 0.0, update.vel.0.z) + + (update.vel.0 * Vec3::new(1.0, 1.0, 0.0) + + 1.5 * data.inputs.move_dir.try_normalized().unwrap_or_default()) + .try_normalized() + .unwrap_or_default() + * DASH_SPEED; + + update.character = CharacterState::DashMelee(Data { + buildup_duration: self + .buildup_duration + .checked_sub(Duration::from_secs_f32(data.dt.0)) + .unwrap_or_default(), + recover_duration: self.recover_duration, + base_damage: self.base_damage, + exhausted: false, + initialize: false, + }); + } else if !self.exhausted { + // Hit attempt + data.updater.insert(data.entity, Attacking { + base_healthchange: -(self.base_damage as i32), + range: 3.5, + max_angle: 180_f32.to_radians(), + applied: false, + hit_count: 0, + knockback: 0.0, + }); + + update.character = CharacterState::DashMelee(Data { + buildup_duration: Duration::default(), + recover_duration: self.recover_duration, + base_damage: self.base_damage, + exhausted: true, + initialize: false, + }); + } else if self.recover_duration != Duration::default() { + // Recovery + handle_move(data, &mut update, 0.7); + update.character = CharacterState::DashMelee(Data { + buildup_duration: self.buildup_duration, + recover_duration: self + .recover_duration + .checked_sub(Duration::from_secs_f32(data.dt.0)) + .unwrap_or_default(), + base_damage: self.base_damage, + exhausted: true, + initialize: false, + }); + } else { + // Done + update.character = CharacterState::Wielding; + // Make sure attack component is removed + data.updater.remove::(data.entity); + } + + // Grant energy on successful hit + if let Some(attack) = data.attacking { + if attack.applied && attack.hit_count > 0 { + data.updater.remove::(data.entity); + update.energy.change_by(100, EnergySource::HitEnemy); + } + } + + update + } +} diff --git a/common/src/states/equipping.rs b/common/src/states/equipping.rs new file mode 100644 index 0000000000..29cf1d8453 --- /dev/null +++ b/common/src/states/equipping.rs @@ -0,0 +1,37 @@ +use super::utils::*; +use crate::{ + comp::{CharacterState, StateUpdate}, + sys::character_behavior::{CharacterBehavior, JoinData}, +}; +use std::time::Duration; + +#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize, Eq, Hash)] +pub struct Data { + /// Time left before next state + pub time_left: Duration, +} + +impl CharacterBehavior for Data { + fn behavior(&self, data: &JoinData) -> StateUpdate { + let mut update = StateUpdate::from(data); + + handle_move(&data, &mut update, 1.0); + handle_jump(&data, &mut update); + + if self.time_left == Duration::default() { + // Wield delay has expired + update.character = CharacterState::Wielding; + } else { + // Wield delay hasn't expired yet + // Update wield delay + update.character = CharacterState::Equipping(Data { + time_left: self + .time_left + .checked_sub(Duration::from_secs_f32(data.dt.0)) + .unwrap_or_default(), + }); + } + + update + } +} diff --git a/common/src/states/glide.rs b/common/src/states/glide.rs new file mode 100644 index 0000000000..3e6759780d --- /dev/null +++ b/common/src/states/glide.rs @@ -0,0 +1,59 @@ +use crate::{ + comp::{CharacterState, StateUpdate}, + sys::character_behavior::{CharacterBehavior, JoinData}, + util::Dir, +}; +use vek::Vec2; + +// Gravity is 9.81 * 4, so this makes gravity equal to .15 +const GLIDE_ANTIGRAV: f32 = crate::sys::phys::GRAVITY * 0.90; +const GLIDE_ACCEL: f32 = 12.0; +const GLIDE_SPEED: f32 = 45.0; + +#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize, Eq, Hash)] +pub struct Data; + +impl CharacterBehavior for Data { + fn behavior(&self, data: &JoinData) -> StateUpdate { + let mut update = StateUpdate::from(data); + + // If glide button isn't held or player is on ground, end glide + if !data.inputs.glide.is_pressed() || data.physics.on_ground { + update.character = CharacterState::Idle; + return update; + } + + // If there is a wall in front of character go to climb + if let Some(_) = data.physics.on_wall { + update.character = CharacterState::Climb; + return update; + } + + // Move player according to movement direction vector + update.vel.0 += Vec2::broadcast(data.dt.0) + * data.inputs.move_dir + * if data.vel.0.magnitude_squared() < GLIDE_SPEED.powf(2.0) { + GLIDE_ACCEL + } else { + 0.0 + }; + + // Determine orientation vector from movement direction vector + let ori_dir = Vec2::from(update.vel.0); + update.ori.0 = Dir::slerp_to_vec3(update.ori.0, ori_dir.into(), 2.0 * data.dt.0); + + // Apply Glide antigrav lift + if Vec2::::from(update.vel.0).magnitude_squared() < GLIDE_SPEED.powf(2.0) + && update.vel.0.z < 0.0 + { + let lift = GLIDE_ANTIGRAV + update.vel.0.z.abs().powf(2.0) * 0.15; + update.vel.0.z += data.dt.0 + * lift + * (Vec2::::from(update.vel.0).magnitude() * 0.075) + .min(1.0) + .max(0.2); + } + + update + } +} diff --git a/common/src/states/idle.rs b/common/src/states/idle.rs new file mode 100644 index 0000000000..c403d43115 --- /dev/null +++ b/common/src/states/idle.rs @@ -0,0 +1,40 @@ +use super::utils::*; +use crate::{ + comp::StateUpdate, + sys::character_behavior::{CharacterBehavior, JoinData}, +}; + +pub struct Data; + +impl CharacterBehavior for Data { + fn behavior(&self, data: &JoinData) -> StateUpdate { + let mut update = StateUpdate::from(data); + + handle_move(data, &mut update, 1.0); + handle_jump(data, &mut update); + handle_primary_wield(data, &mut update); + handle_climb(data, &mut update); + handle_glide(data, &mut update); + handle_dodge_input(data, &mut update); + + update + } + + fn wield(&self, data: &JoinData) -> StateUpdate { + let mut update = StateUpdate::from(data); + attempt_wield(data, &mut update); + update + } + + fn sit(&self, data: &JoinData) -> StateUpdate { + let mut update = StateUpdate::from(data); + attempt_sit(data, &mut update); + update + } + + fn swap_loadout(&self, data: &JoinData) -> StateUpdate { + let mut update = StateUpdate::from(data); + attempt_swap_loadout(data, &mut update); + update + } +} diff --git a/common/src/states/mod.rs b/common/src/states/mod.rs new file mode 100644 index 0000000000..e6294bcb69 --- /dev/null +++ b/common/src/states/mod.rs @@ -0,0 +1,14 @@ +pub mod basic_block; +pub mod basic_melee; +pub mod basic_ranged; +pub mod boost; +pub mod climb; +pub mod dash_melee; +pub mod equipping; +pub mod glide; +pub mod idle; +pub mod roll; +pub mod sit; +pub mod triple_strike; +pub mod utils; +pub mod wielding; diff --git a/common/src/states/roll.rs b/common/src/states/roll.rs new file mode 100644 index 0000000000..420f06cf0b --- /dev/null +++ b/common/src/states/roll.rs @@ -0,0 +1,54 @@ +use crate::{ + comp::{CharacterState, StateUpdate}, + sys::character_behavior::{CharacterBehavior, JoinData}, + util::Dir, +}; +use std::time::Duration; +use vek::Vec3; + +const ROLL_SPEED: f32 = 25.0; +#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize, Eq, Hash)] +pub struct Data { + /// How long the state has until exiting + pub remaining_duration: Duration, + /// Had weapon + pub was_wielded: bool, +} + +impl CharacterBehavior for Data { + fn behavior(&self, data: &JoinData) -> StateUpdate { + let mut update = StateUpdate::from(data); + + // Update velocity + update.vel.0 = Vec3::new(0.0, 0.0, update.vel.0.z) + + (update.vel.0 * Vec3::new(1.0, 1.0, 0.0) + + 0.25 * data.inputs.move_dir.try_normalized().unwrap_or_default()) + .try_normalized() + .unwrap_or_default() + * ROLL_SPEED; + + // Smooth orientation + update.ori.0 = Dir::slerp_to_vec3(update.ori.0, update.vel.0, 9.0 * data.dt.0); + + if self.remaining_duration == Duration::default() { + // Roll duration has expired + update.vel.0 *= 0.3; + if self.was_wielded { + update.character = CharacterState::Wielding; + } else { + update.character = CharacterState::Idle; + } + } else { + // Otherwise, tick down remaining_duration + update.character = CharacterState::Roll(Data { + remaining_duration: self + .remaining_duration + .checked_sub(Duration::from_secs_f32(data.dt.0)) + .unwrap_or_default(), + was_wielded: self.was_wielded, + }); + } + + update + } +} diff --git a/common/src/states/sit.rs b/common/src/states/sit.rs new file mode 100644 index 0000000000..8dd7f9471f --- /dev/null +++ b/common/src/states/sit.rs @@ -0,0 +1,36 @@ +use super::utils::*; +use crate::{ + comp::{CharacterState, StateUpdate}, + sys::character_behavior::{CharacterBehavior, JoinData}, +}; + +#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize, Eq, Hash)] +pub struct Data; + +impl CharacterBehavior for Data { + fn behavior(&self, data: &JoinData) -> StateUpdate { + let mut update = StateUpdate::from(data); + + handle_primary_wield(data, &mut update); + + // Try to Fall/Stand up/Move + if !data.physics.on_ground || data.inputs.move_dir.magnitude_squared() > 0.0 { + update.character = CharacterState::Idle; + } + + update + } + + fn wield(&self, data: &JoinData) -> StateUpdate { + let mut update = StateUpdate::from(data); + attempt_wield(data, &mut update); + update + } + + fn stand(&self, data: &JoinData) -> StateUpdate { + let mut update = StateUpdate::from(data); + // Try to Fall/Stand up/Move + update.character = CharacterState::Idle; + update + } +} diff --git a/common/src/states/triple_strike.rs b/common/src/states/triple_strike.rs new file mode 100644 index 0000000000..9421dbcbd7 --- /dev/null +++ b/common/src/states/triple_strike.rs @@ -0,0 +1,228 @@ +use crate::{ + comp::{Attacking, CharacterState, EnergySource, StateUpdate}, + states::utils::*, + sys::character_behavior::{CharacterBehavior, JoinData}, +}; +use std::time::Duration; +use vek::vec::Vec3; +use HoldingState::*; +use TimingState::*; +use TransitionStyle::*; + +// In millis +const STAGE_DURATION: u64 = 700; +const TIMING_DELAY: u64 = 350; +const INITIAL_ACCEL: f32 = 90.0; +const BASE_SPEED: f32 = 25.0; + +#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize, Eq, Hash)] +pub enum Stage { + First, + Second, + Third, +} + +#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize, Eq, Hash)] +pub enum TimingState { + NotPressed, + PressedEarly, + Success, +} + +#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize, Eq, Hash)] +pub enum HoldingState { + Holding, + Released, +} + +#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize, Eq, Hash)] +pub enum TransitionStyle { + /// Player must time a button press properly to transition + Timed(TimingState), + /// Player must hold button for whole move + Hold(HoldingState), +} + +/// ### A sequence of 3 incrementally increasing attacks. +/// +/// While holding down the `primary` button, perform a series of 3 attacks, +/// each one pushes the player forward as the character steps into the swings. +/// The player can let go of the left mouse button at any time +/// and stop their attacks by interrupting the attack animation. +#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize, Eq, Hash)] +pub struct Data { + /// The tool this state will read to handle damage, etc. + pub base_damage: u32, + /// What stage (of 3) the attack is in + pub stage: Stage, + /// How long current stage has been active + pub stage_time_active: Duration, + /// Whether current stage has exhausted its attack + pub stage_exhausted: bool, + /// Whether state has performed intialization logic + pub initialized: bool, + /// What this instance's current transition stat is + pub transition_style: TransitionStyle, +} + +impl CharacterBehavior for Data { + fn behavior(&self, data: &JoinData) -> StateUpdate { + let mut update = StateUpdate::from(data); + + let stage_time_active = self + .stage_time_active + .checked_add(Duration::from_secs_f32(data.dt.0)) + .unwrap_or(Duration::default()); + + if !self.initialized { + update.vel.0 = Vec3::zero(); + if let Some(dir) = data.inputs.look_dir.try_normalized() { + update.ori.0 = dir.into(); + } + } + let initialized = true; + + // Update transition + let transition_style = match self.transition_style { + Timed(state) => match state { + NotPressed => { + if data.inputs.primary.is_just_pressed() { + if stage_time_active > Duration::from_millis(TIMING_DELAY) { + Timed(Success) + } else { + Timed(PressedEarly) + } + } else { + self.transition_style + } + }, + _ => self.transition_style, + }, + Hold(_) => { + if !data.inputs.primary.is_pressed() { + Hold(Released) + } else { + self.transition_style + } + }, + }; + + // Handle hit applied + if let Some(attack) = data.attacking { + if attack.applied && attack.hit_count > 0 { + // Take energy on successful hit + update.energy.change_by(100, EnergySource::HitEnemy); + // Always remove component + data.updater.remove::(data.entity); + } + } + + // Handling movement + if stage_time_active < Duration::from_millis(STAGE_DURATION / 3) { + let adjusted_accel = match (self.stage, data.physics.touch_entity.is_none()) { + (Stage::First, true) => INITIAL_ACCEL, + (Stage::Second, true) => INITIAL_ACCEL * 0.75, + (Stage::Third, true) => INITIAL_ACCEL * 0.75, + (_, _) => 0.0, + }; + + // Move player forward while in first third of each stage + if update.vel.0.magnitude_squared() < BASE_SPEED.powf(2.0) { + update.vel.0 = update.vel.0 + + data.dt.0 + * (if data.physics.on_ground { + Vec3::new(0.0, 0.0, 500.0) // Jump upwards if on ground + } else { + Vec3::one() + } + adjusted_accel * Vec3::from(data.ori.0.xy())); + let mag2 = update.vel.0.magnitude_squared(); + if mag2 > BASE_SPEED.powf(2.0) { + update.vel.0 = update.vel.0.normalized() * BASE_SPEED; + } + }; + } else { + handle_orientation(data, &mut update, 50.0); + } + + // Handling attacking + update.character = if stage_time_active > Duration::from_millis(STAGE_DURATION / 2) + && !self.stage_exhausted + { + let dmg = match self.stage { + Stage::First => self.base_damage / 2, + Stage::Second => self.base_damage, + Stage::Third => (self.base_damage as f32 * 1.5) as u32, + }; + + // Try to deal damage in second half of stage + data.updater.insert(data.entity, Attacking { + base_healthchange: -(dmg as i32), + range: 3.5, + max_angle: 180_f32.to_radians(), + applied: false, + hit_count: 0, + knockback: 16.0, + }); + + CharacterState::TripleStrike(Data { + base_damage: self.base_damage, + stage: self.stage, + stage_time_active, + stage_exhausted: true, + initialized, + transition_style, + }) + } else if stage_time_active > Duration::from_millis(STAGE_DURATION) { + let next_stage = + // Determine whether stage can transition based on TransitionStyle + if let Hold(Holding) | Timed(Success) = transition_style { + // Determine what stage to transition to + match self.stage { + Stage::First => Some(Stage::Second), + Stage::Second => Some(Stage::Third), + Stage::Third => None, + } + } + // Player messed up inputs, don't transition + else { None }; + + if let Some(stage) = next_stage { + CharacterState::TripleStrike(Data { + base_damage: self.base_damage, + stage, + stage_time_active: Duration::default(), + stage_exhausted: false, + initialized, + transition_style: match transition_style { + Hold(_) => Hold(Holding), + Timed(_) => Timed(NotPressed), + }, + }) + } else { + // Make sure attack component is removed + data.updater.remove::(data.entity); + // Done + CharacterState::Wielding + } + } else { + CharacterState::TripleStrike(Data { + base_damage: self.base_damage, + stage: self.stage, + stage_time_active, + stage_exhausted: self.stage_exhausted, + initialized, + transition_style, + }) + }; + + // Grant energy on successful hit + if let Some(attack) = data.attacking { + if attack.applied && attack.hit_count > 0 { + data.updater.remove::(data.entity); + update.energy.change_by(100, EnergySource::HitEnemy); + } + } + + update + } +} diff --git a/common/src/states/utils.rs b/common/src/states/utils.rs new file mode 100644 index 0000000000..cf06820cf6 --- /dev/null +++ b/common/src/states/utils.rs @@ -0,0 +1,241 @@ +use crate::{ + comp::{ + item::{ItemKind, Tool}, + CharacterState, StateUpdate, + }, + event::LocalEvent, + states::*, + sys::{character_behavior::JoinData, phys::GRAVITY}, + util::Dir, +}; +use vek::vec::Vec2; + +pub const MOVEMENT_THRESHOLD_VEL: f32 = 3.0; +const BASE_HUMANOID_ACCEL: f32 = 100.0; +const BASE_HUMANOID_SPEED: f32 = 170.0; +const BASE_HUMANOID_AIR_ACCEL: f32 = 15.0; +const BASE_HUMANOID_AIR_SPEED: f32 = 8.0; +const BASE_HUMANOID_WATER_ACCEL: f32 = 70.0; +const BASE_HUMANOID_WATER_SPEED: f32 = 120.0; +// const BASE_HUMANOID_CLIMB_ACCEL: f32 = 10.0; +// const ROLL_SPEED: f32 = 17.0; +// const CHARGE_SPEED: f32 = 20.0; +// const GLIDE_ACCEL: f32 = 15.0; +// const GLIDE_SPEED: f32 = 45.0; +// const BLOCK_ACCEL: f32 = 30.0; +// const BLOCK_SPEED: f32 = 75.0; +// Gravity is 9.81 * 4, so this makes gravity equal to .15 //TODO: <- is wrong +// +// const GLIDE_ANTIGRAV: f32 = GRAVITY * 0.96; +// const CLIMB_SPEED: f32 = 5.0; +// const CLIMB_COST: i32 = 5; + +/// Handles updating `Components` to move player based on state of `JoinData` +pub fn handle_move(data: &JoinData, update: &mut StateUpdate, efficiency: f32) { + if data.physics.in_fluid { + swim_move(data, update, efficiency); + } else { + basic_move(data, update, efficiency); + } +} + +/// Updates components to move player as if theyre on ground or in air +fn basic_move(data: &JoinData, update: &mut StateUpdate, efficiency: f32) { + let (accel, speed): (f32, f32) = if data.physics.on_ground { + (BASE_HUMANOID_ACCEL, BASE_HUMANOID_SPEED) + } else { + (BASE_HUMANOID_AIR_ACCEL, BASE_HUMANOID_AIR_SPEED) + }; + + // Move player according to move_dir + if update.vel.0.magnitude_squared() < speed.powf(2.0) { + update.vel.0 = + update.vel.0 + Vec2::broadcast(data.dt.0) * data.inputs.move_dir * accel * efficiency; + let mag2 = update.vel.0.magnitude_squared(); + if mag2 > speed.powf(2.0) { + update.vel.0 = update.vel.0.normalized() * speed; + } + } + + handle_orientation(data, update, 20.0); +} + +pub fn handle_orientation(data: &JoinData, update: &mut StateUpdate, strength: f32) { + // Set direction based on move direction + let ori_dir = if update.character.is_attack() || update.character.is_block() { + Vec2::from(*data.inputs.look_dir) + } else { + Vec2::from(data.inputs.move_dir) + }; + + // Smooth orientation + update.ori.0 = Dir::slerp_to_vec3(update.ori.0, ori_dir.into(), strength * data.dt.0); +} + +/// Updates components to move player as if theyre swimming +fn swim_move(data: &JoinData, update: &mut StateUpdate, efficiency: f32) { + // Update velocity + update.vel.0 += Vec2::broadcast(data.dt.0) + * data.inputs.move_dir + * if update.vel.0.magnitude_squared() < BASE_HUMANOID_WATER_SPEED.powf(2.0) { + BASE_HUMANOID_WATER_ACCEL + } else { + 0.0 + } + * efficiency; + + handle_orientation(data, update, if data.physics.on_ground { 9.0 } else { 2.0 }); + + // Swim + if data.inputs.jump.is_pressed() { + update.vel.0.z = + (update.vel.0.z + data.dt.0 * GRAVITY * 2.25).min(BASE_HUMANOID_WATER_SPEED); + } +} + +/// First checks whether `primary` input is pressed, then +/// attempts to go into Equipping state, otherwise Idle +pub fn handle_primary_wield(data: &JoinData, update: &mut StateUpdate) { + if data.inputs.primary.is_pressed() { + attempt_wield(data, update); + } +} + +/// If a tool is equipped, goes into Equipping state, otherwise goes to Idle +pub fn attempt_wield(data: &JoinData, update: &mut StateUpdate) { + if let Some(ItemKind::Tool(tool)) = data.loadout.active_item.as_ref().map(|i| &i.item.kind) { + update.character = CharacterState::Equipping(equipping::Data { + time_left: tool.equip_time(), + }); + } else { + update.character = CharacterState::Idle; + }; +} + +/// Checks that player can `Sit` and updates `CharacterState` if so +pub fn attempt_sit(data: &JoinData, update: &mut StateUpdate) { + if data.physics.on_ground && data.body.is_humanoid() { + update.character = CharacterState::Sit; + } +} + +/// Checks that player can `Climb` and updates `CharacterState` if so +pub fn handle_climb(data: &JoinData, update: &mut StateUpdate) { + if data.inputs.climb.is_some() + && data.physics.on_wall.is_some() + && !data.physics.on_ground + //&& update.vel.0.z < 0.0 + && data.body.is_humanoid() + && update.energy.current() > 100 + { + update.character = CharacterState::Climb; + } +} + +/// Checks that player can Swap Weapons and updates `Loadout` if so +pub fn attempt_swap_loadout(_data: &JoinData, update: &mut StateUpdate) { + if update.loadout.second_item.is_some() { + std::mem::swap( + &mut update.loadout.active_item, + &mut update.loadout.second_item, + ); + } +} + +/// Checks that player can glide and updates `CharacterState` if so +pub fn handle_glide(data: &JoinData, update: &mut StateUpdate) { + if let CharacterState::Idle { .. } | CharacterState::Wielding { .. } = update.character { + if data.inputs.glide.is_pressed() + && !data.physics.on_ground + && !data.physics.in_fluid + && data.body.is_humanoid() + { + update.character = CharacterState::Glide; + } + } +} + +/// Checks that player can jump and sends jump event if so +pub fn handle_jump(data: &JoinData, update: &mut StateUpdate) { + if data.inputs.jump.is_pressed() && data.physics.on_ground && !data.physics.in_fluid { + update + .local_events + .push_front(LocalEvent::Jump(data.entity)); + } +} + +/// Will attempt to go into `loadout.active_item.ability1` +pub fn handle_ability1_input(data: &JoinData, update: &mut StateUpdate) { + if data.inputs.primary.is_pressed() { + if let Some(ability) = data + .loadout + .active_item + .as_ref() + .and_then(|i| i.ability1.as_ref()) + .filter(|ability| ability.requirements_paid(data, update)) + { + update.character = ability.into(); + } + } +} + +/// Will attempt to go into `loadout.active_item.ability2` +pub fn handle_ability2_input(data: &JoinData, update: &mut StateUpdate) { + if data.inputs.secondary.is_pressed() { + if let Some(ability) = data + .loadout + .active_item + .as_ref() + .and_then(|i| i.ability2.as_ref()) + .filter(|ability| ability.requirements_paid(data, update)) + { + update.character = ability.into(); + } + } +} + +/// Will attempt to go into `loadout.active_item.ability3` +pub fn handle_ability3_input(data: &JoinData, update: &mut StateUpdate) { + if data.inputs.ability3.is_pressed() { + if let Some(ability) = data + .loadout + .active_item + .as_ref() + .and_then(|i| i.ability3.as_ref()) + .filter(|ability| ability.requirements_paid(data, update)) + { + update.character = ability.into(); + } + } +} + +/// Checks that player can perform a dodge, then +/// attempts to go into `loadout.active_item.dodge_ability` +pub fn handle_dodge_input(data: &JoinData, update: &mut StateUpdate) { + if data.inputs.roll.is_pressed() { + if let Some(ability) = data + .loadout + .active_item + .as_ref() + .and_then(|i| i.dodge_ability.as_ref()) + .filter(|ability| ability.requirements_paid(data, update)) + { + if data.character.is_wield() { + update.character = ability.into(); + if let CharacterState::Roll(roll) = &mut update.character { + roll.was_wielded = true; + } + } else { + update.character = ability.into(); + } + } + } +} + +pub fn unwrap_tool_data<'a>(data: &'a JoinData) -> Option<&'a Tool> { + if let Some(ItemKind::Tool(tool)) = data.loadout.active_item.as_ref().map(|i| &i.item.kind) { + Some(tool) + } else { + None + } +} diff --git a/common/src/states/wielding.rs b/common/src/states/wielding.rs new file mode 100644 index 0000000000..6babe4f85d --- /dev/null +++ b/common/src/states/wielding.rs @@ -0,0 +1,42 @@ +use super::utils::*; +use crate::{ + comp::{CharacterState, StateUpdate}, + sys::character_behavior::{CharacterBehavior, JoinData}, +}; + +pub struct Data; + +impl CharacterBehavior for Data { + fn behavior(&self, data: &JoinData) -> StateUpdate { + let mut update = StateUpdate::from(data); + + handle_move(&data, &mut update, 1.0); + handle_jump(&data, &mut update); + handle_climb(&data, &mut update); + handle_glide(&data, &mut update); + handle_ability1_input(&data, &mut update); + handle_ability2_input(&data, &mut update); + handle_ability3_input(&data, &mut update); + handle_dodge_input(&data, &mut update); + + update + } + + fn sit(&self, data: &JoinData) -> StateUpdate { + let mut update = StateUpdate::from(data); + attempt_sit(data, &mut update); + update + } + + fn unwield(&self, data: &JoinData) -> StateUpdate { + let mut update = StateUpdate::from(data); + update.character = CharacterState::Idle; + update + } + + fn swap_loadout(&self, data: &JoinData) -> StateUpdate { + let mut update = StateUpdate::from(data); + attempt_swap_loadout(data, &mut update); + update + } +} diff --git a/common/src/sync/mod.rs b/common/src/sync/mod.rs index cce991d1df..914793c024 100644 --- a/common/src/sync/mod.rs +++ b/common/src/sync/mod.rs @@ -7,8 +7,8 @@ mod uid; // Reexports pub use packet::{ - handle_insert, handle_modify, handle_remove, CompPacket, EntityPackage, StatePackage, - SyncPackage, + handle_insert, handle_modify, handle_remove, CompPacket, CompSyncPackage, EntityPackage, + EntitySyncPackage, StatePackage, }; pub use sync_ext::WorldSyncExt; pub use track::UpdateTracker; diff --git a/common/src/sync/packet.rs b/common/src/sync/packet.rs index ef7a419c22..6c0f9c115b 100644 --- a/common/src/sync/packet.rs +++ b/common/src/sync/packet.rs @@ -23,18 +23,22 @@ pub trait CompPacket: Clone + Debug + Send + 'static { pub fn handle_insert(comp: C, entity: Entity, world: &World) { if let Err(err) = world.write_storage::().insert(entity, comp) { error!("Error inserting component: {:?}", err); - }; + } } /// Useful for implementing CompPacket trait pub fn handle_modify(comp: C, entity: Entity, world: &World) { - let _ = world + if world .write_storage::() .get_mut(entity) - .map(|c| *c = comp); + .map(|c| *c = comp) + .is_none() + { + error!("Error modifying synced component, it doesn't seem to exist"); + } } /// Useful for implementing CompPacket trait pub fn handle_remove(entity: Entity, world: &World) { - let _ = world.write_storage::().remove(entity); + world.write_storage::().remove(entity); } #[derive(Copy, Clone, Debug, Serialize, Deserialize)] @@ -81,12 +85,11 @@ impl StatePackage

{ } #[derive(Clone, Debug, Serialize, Deserialize)] -pub struct SyncPackage { - pub comp_updates: Vec<(u64, CompUpdateKind

)>, +pub struct EntitySyncPackage { pub created_entities: Vec, pub deleted_entities: Vec, } -impl SyncPackage

{ +impl EntitySyncPackage { pub fn new<'a>( uids: &ReadStorage<'a, Uid>, uid_tracker: &UpdateTracker, @@ -100,11 +103,48 @@ impl SyncPackage

{ .collect(); Self { - comp_updates: Vec::new(), created_entities, deleted_entities, } } +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct CompSyncPackage { + // TODO: this can be made to take less space by clumping updates for the same entity together + pub comp_updates: Vec<(u64, CompUpdateKind

)>, +} + +impl CompSyncPackage

{ + pub fn new() -> Self { + Self { + comp_updates: Vec::new(), + } + } + + pub fn comp_inserted(&mut self, uid: Uid, comp: C) + where + P: From, + { + self.comp_updates + .push((uid.into(), CompUpdateKind::Inserted(comp.into()))); + } + + pub fn comp_modified(&mut self, uid: Uid, comp: C) + where + P: From, + { + self.comp_updates + .push((uid.into(), CompUpdateKind::Modified(comp.into()))); + } + + pub fn comp_removed(&mut self, uid: Uid) + where + P::Phantom: From>, + { + self.comp_updates + .push((uid.into(), CompUpdateKind::Removed(PhantomData::.into()))); + } pub fn with_component<'a, C: Component + Clone + Send + Sync>( mut self, diff --git a/common/src/sync/sync_ext.rs b/common/src/sync/sync_ext.rs index a84bdcb0b8..a8224b62a5 100644 --- a/common/src/sync/sync_ext.rs +++ b/common/src/sync/sync_ext.rs @@ -1,5 +1,7 @@ use super::{ - packet::{CompPacket, CompUpdateKind, EntityPackage, StatePackage, SyncPackage}, + packet::{ + CompPacket, CompSyncPackage, CompUpdateKind, EntityPackage, EntitySyncPackage, StatePackage, + }, track::UpdateTracker, uid::{Uid, UidAllocator}, }; @@ -27,7 +29,8 @@ pub trait WorldSyncExt { entity_package: EntityPackage

, ) -> specs::Entity; fn apply_state_package(&mut self, state_package: StatePackage

); - fn apply_sync_package(&mut self, package: SyncPackage

); + fn apply_entity_sync_package(&mut self, package: EntitySyncPackage); + fn apply_comp_sync_package(&mut self, package: CompSyncPackage

); } impl WorldSyncExt for specs::World { @@ -106,24 +109,30 @@ impl WorldSyncExt for specs::World { //self.maintain(); } - fn apply_sync_package(&mut self, package: SyncPackage

) { + fn apply_entity_sync_package(&mut self, package: EntitySyncPackage) { // Take ownership of the fields - let SyncPackage { - comp_updates, + let EntitySyncPackage { created_entities, deleted_entities, } = package; // Attempt to create entities - for entity_uid in created_entities { - create_entity_with_uid(self, entity_uid); - } + created_entities.into_iter().for_each(|uid| { + create_entity_with_uid(self, uid); + }); + // Attempt to delete entities that were marked for deletion + deleted_entities.into_iter().for_each(|uid| { + self.delete_entity_and_clear_from_uid_allocator(uid); + }); + } + + fn apply_comp_sync_package(&mut self, package: CompSyncPackage

) { // Update components - for (entity_uid, update) in comp_updates { + package.comp_updates.into_iter().for_each(|(uid, update)| { if let Some(entity) = self .read_resource::() - .retrieve_entity_internal(entity_uid) + .retrieve_entity_internal(uid) { match update { CompUpdateKind::Inserted(packet) => { @@ -137,12 +146,7 @@ impl WorldSyncExt for specs::World { }, } } - } - - // Attempt to delete entities that were marked for deletion - for entity_uid in deleted_entities { - self.delete_entity_and_clear_from_uid_allocator(entity_uid); - } + }); } } diff --git a/common/src/sys/agent.rs b/common/src/sys/agent.rs index 9d8415ea28..b11dcf22bb 100644 --- a/common/src/sys/agent.rs +++ b/common/src/sys/agent.rs @@ -1,9 +1,10 @@ use crate::{ - comp::{self, agent::Activity, Agent, Alignment, Controller, MountState, Pos, Stats}, + comp::{self, agent::Activity, Agent, Alignment, Controller, MountState, Ori, Pos, Stats}, path::Chaser, state::Time, sync::UidAllocator, terrain::TerrainGrid, + util::Dir, vol::ReadVol, }; use rand::{thread_rng, Rng}; @@ -21,6 +22,7 @@ impl<'a> System<'a> for Sys { Read<'a, Time>, Entities<'a>, ReadStorage<'a, Pos>, + ReadStorage<'a, Ori>, ReadStorage<'a, Stats>, ReadExpect<'a, TerrainGrid>, ReadStorage<'a, Alignment>, @@ -36,6 +38,7 @@ impl<'a> System<'a> for Sys { time, entities, positions, + orientations, stats, terrain, alignments, @@ -44,9 +47,10 @@ impl<'a> System<'a> for Sys { mount_states, ): Self::SystemData, ) { - for (entity, pos, alignment, agent, controller, mount_state) in ( + for (entity, pos, ori, alignment, agent, controller, mount_state) in ( &entities, &positions, + &orientations, alignments.maybe(), &mut agents, &mut controllers, @@ -72,6 +76,9 @@ impl<'a> System<'a> for Sys { let mut inputs = &mut controller.inputs; + // Default to looking in orientation direction + inputs.look_dir = ori.0; + const AVG_FOLLOW_DIST: f32 = 6.0; const MAX_FOLLOW_DIST: f32 = 12.0; const MAX_CHASE_DIST: f32 = 24.0; @@ -161,6 +168,10 @@ impl<'a> System<'a> for Sys { .copied() .unwrap_or(Alignment::Owned(*target)), ) { + if let Some(dir) = Dir::from_unnormalized(tgt_pos.0 - pos.0) { + inputs.look_dir = dir; + } + // Don't attack entities we are passive towards // TODO: This is here, it's a bit of a hack if let Some(alignment) = alignment { @@ -174,11 +185,10 @@ impl<'a> System<'a> for Sys { let dist_sqrd = pos.0.distance_squared(tgt_pos.0); if dist_sqrd < MIN_ATTACK_DIST.powf(2.0) { // Close-range attack - inputs.look_dir = tgt_pos.0 - pos.0; inputs.move_dir = Vec2::from(tgt_pos.0 - pos.0) .try_normalized() .unwrap_or(Vec2::unit_y()) - * 0.01; + * 0.7; inputs.primary.set_state(true); } else if dist_sqrd < MAX_CHASE_DIST.powf(2.0) || (dist_sqrd < SIGHT_DIST.powf(2.0) && !*been_close) @@ -251,7 +261,10 @@ impl<'a> System<'a> for Sys { if let Some(stats) = stats.get(entity) { // Only if the attack was recent if stats.health.last_change.0 < 5.0 { - if let comp::HealthSource::Attack { by } = stats.health.last_change.1.cause { + if let comp::HealthSource::Attack { by } + | comp::HealthSource::Projectile { owner: Some(by) } = + stats.health.last_change.1.cause + { if !agent.activity.is_attack() { if let Some(attacker) = uid_allocator.retrieve_entity_internal(by.id()) { diff --git a/common/src/sys/character_behavior.rs b/common/src/sys/character_behavior.rs new file mode 100644 index 0000000000..fbd1414398 --- /dev/null +++ b/common/src/sys/character_behavior.rs @@ -0,0 +1,239 @@ +use crate::{ + comp::{ + Attacking, Body, CharacterState, ControlAction, Controller, ControllerInputs, Energy, + Loadout, Mounting, Ori, PhysicsState, Pos, StateUpdate, Stats, Vel, + }, + event::{EventBus, LocalEvent, ServerEvent}, + state::DeltaTime, + states, + sync::{Uid, UidAllocator}, +}; + +use specs::{Entities, Entity, Join, LazyUpdate, Read, ReadStorage, System, WriteStorage}; + +// use std::collections::VecDeque; + +pub trait CharacterBehavior { + fn behavior(&self, data: &JoinData) -> StateUpdate; + // Impl these to provide behavior for these inputs + fn swap_loadout(&self, data: &JoinData) -> StateUpdate { StateUpdate::from(data) } + fn wield(&self, data: &JoinData) -> StateUpdate { StateUpdate::from(data) } + fn unwield(&self, data: &JoinData) -> StateUpdate { StateUpdate::from(data) } + fn sit(&self, data: &JoinData) -> StateUpdate { StateUpdate::from(data) } + fn stand(&self, data: &JoinData) -> StateUpdate { StateUpdate::from(data) } + fn handle_event(&self, data: &JoinData, event: ControlAction) -> StateUpdate { + match event { + ControlAction::SwapLoadout => self.swap_loadout(data), + ControlAction::Wield => self.wield(data), + ControlAction::Unwield => self.unwield(data), + ControlAction::Sit => self.sit(data), + ControlAction::Stand => self.stand(data), + } + } + // fn init(data: &JoinData) -> CharacterState; +} + +/// Read-Only Data sent from Character Behavior System to bahvior fn's +pub struct JoinData<'a> { + pub entity: Entity, + pub uid: &'a Uid, + pub character: &'a CharacterState, + pub pos: &'a Pos, + pub vel: &'a Vel, + pub ori: &'a Ori, + pub dt: &'a DeltaTime, + pub controller: &'a Controller, + pub inputs: &'a ControllerInputs, + pub stats: &'a Stats, + pub energy: &'a Energy, + pub loadout: &'a Loadout, + pub body: &'a Body, + pub physics: &'a PhysicsState, + pub attacking: Option<&'a Attacking>, + pub updater: &'a LazyUpdate, +} + +pub type JoinTuple<'a> = ( + Entity, + &'a Uid, + &'a mut CharacterState, + &'a mut Pos, + &'a mut Vel, + &'a mut Ori, + &'a mut Energy, + &'a mut Loadout, + &'a mut Controller, + &'a Stats, + &'a Body, + &'a PhysicsState, + Option<&'a Attacking>, +); + +fn incorporate_update(tuple: &mut JoinTuple, state_update: StateUpdate) { + *tuple.2 = state_update.character; + *tuple.3 = state_update.pos; + *tuple.4 = state_update.vel; + *tuple.5 = state_update.ori; + *tuple.6 = state_update.energy; + *tuple.7 = state_update.loadout; +} + +impl<'a> JoinData<'a> { + fn new(j: &'a JoinTuple<'a>, updater: &'a LazyUpdate, dt: &'a DeltaTime) -> Self { + Self { + entity: j.0, + uid: j.1, + character: j.2, + pos: j.3, + vel: j.4, + ori: j.5, + energy: j.6, + loadout: j.7, + controller: j.8, + inputs: &j.8.inputs, + stats: j.9, + body: j.10, + physics: j.11, + attacking: j.12, + updater, + dt, + } + } +} + +/// ## Character Behavior System +/// Passes `JoinData` to `CharacterState`'s `behavior` handler fn's. Recieves a +/// `StateUpdate` in return and performs updates to ECS Components from that. +pub struct Sys; + +impl<'a> System<'a> for Sys { + type SystemData = ( + Entities<'a>, + Read<'a, UidAllocator>, + Read<'a, EventBus>, + Read<'a, EventBus>, + Read<'a, DeltaTime>, + Read<'a, LazyUpdate>, + WriteStorage<'a, CharacterState>, + WriteStorage<'a, Pos>, + WriteStorage<'a, Vel>, + WriteStorage<'a, Ori>, + WriteStorage<'a, Energy>, + WriteStorage<'a, Loadout>, + WriteStorage<'a, Controller>, + ReadStorage<'a, Stats>, + ReadStorage<'a, Body>, + ReadStorage<'a, PhysicsState>, + ReadStorage<'a, Attacking>, + ReadStorage<'a, Uid>, + ReadStorage<'a, Mounting>, + ); + + fn run( + &mut self, + ( + entities, + _uid_allocator, + server_bus, + local_bus, + dt, + updater, + mut character_states, + mut positions, + mut velocities, + mut orientations, + mut energies, + mut loadouts, + mut controllers, + stats, + bodies, + physics_states, + attacking_storage, + uids, + mountings, + ): Self::SystemData, + ) { + let mut server_emitter = server_bus.emitter(); + let mut local_emitter = local_bus.emitter(); + + let mut join_iter = ( + &entities, + &uids, + &mut character_states, + &mut positions, + &mut velocities, + &mut orientations, + &mut energies, + &mut loadouts, + &mut controllers, + &stats, + &bodies, + &physics_states, + attacking_storage.maybe(), + ) + .join(); + + while let Some(mut tuple) = join_iter.next() { + // Being dead overrides all other states + if tuple.9.is_dead { + // Do nothing + continue; + } + // If mounted, character state is controlled by mount + // TODO: Make mounting a state + if let Some(Mounting(_)) = mountings.get(tuple.0) { + *tuple.2 = CharacterState::Sit {}; + continue; + } + + let actions = std::mem::replace(&mut tuple.8.actions, Vec::new()); + for action in actions { + let j = JoinData::new(&tuple, &updater, &dt); + let mut state_update = match j.character { + CharacterState::Idle => states::idle::Data.handle_event(&j, action), + CharacterState::Climb => states::climb::Data.handle_event(&j, action), + CharacterState::Glide => states::glide::Data.handle_event(&j, action), + CharacterState::Sit => { + states::sit::Data::handle_event(&states::sit::Data, &j, action) + }, + CharacterState::BasicBlock => { + states::basic_block::Data.handle_event(&j, action) + }, + CharacterState::Roll(data) => data.handle_event(&j, action), + CharacterState::Wielding => states::wielding::Data.handle_event(&j, action), + CharacterState::Equipping(data) => data.handle_event(&j, action), + CharacterState::TripleStrike(data) => data.handle_event(&j, action), + CharacterState::BasicMelee(data) => data.handle_event(&j, action), + CharacterState::BasicRanged(data) => data.handle_event(&j, action), + CharacterState::Boost(data) => data.handle_event(&j, action), + CharacterState::DashMelee(data) => data.handle_event(&j, action), + }; + local_emitter.append(&mut state_update.local_events); + server_emitter.append(&mut state_update.server_events); + incorporate_update(&mut tuple, state_update); + } + + let j = JoinData::new(&tuple, &updater, &dt); + + let mut state_update = match j.character { + CharacterState::Idle => states::idle::Data.behavior(&j), + CharacterState::Climb => states::climb::Data.behavior(&j), + CharacterState::Glide => states::glide::Data.behavior(&j), + CharacterState::Sit => states::sit::Data::behavior(&states::sit::Data, &j), + CharacterState::BasicBlock => states::basic_block::Data.behavior(&j), + CharacterState::Roll(data) => data.behavior(&j), + CharacterState::Wielding => states::wielding::Data.behavior(&j), + CharacterState::Equipping(data) => data.behavior(&j), + CharacterState::TripleStrike(data) => data.behavior(&j), + CharacterState::BasicMelee(data) => data.behavior(&j), + CharacterState::BasicRanged(data) => data.behavior(&j), + CharacterState::Boost(data) => data.behavior(&j), + CharacterState::DashMelee(data) => data.behavior(&j), + }; + + local_emitter.append(&mut state_update.local_events); + server_emitter.append(&mut state_update.server_events); + incorporate_update(&mut tuple, state_update); + } + } +} diff --git a/common/src/sys/cleanup.rs b/common/src/sys/cleanup.rs deleted file mode 100644 index dd9f03867c..0000000000 --- a/common/src/sys/cleanup.rs +++ /dev/null @@ -1,12 +0,0 @@ -use crate::comp::Controller; -use specs::{System, WriteStorage}; - -/// This system will allow NPCs to modify their controller -pub struct Sys; -impl<'a> System<'a> for Sys { - type SystemData = WriteStorage<'a, Controller>; - - fn run(&mut self, _controllers: Self::SystemData) { - // TODO: More stuff here - } -} diff --git a/common/src/sys/combat.rs b/common/src/sys/combat.rs index 47921877b8..1d2675e679 100644 --- a/common/src/sys/combat.rs +++ b/common/src/sys/combat.rs @@ -1,21 +1,16 @@ use crate::{ comp::{ - ActionState::*, Body, CharacterState, Controller, HealthChange, HealthSource, Item, - ItemKind, Ori, Pos, Scale, Stats, + Agent, Attacking, Body, CharacterState, HealthChange, HealthSource, Ori, Pos, Scale, Stats, }, event::{EventBus, LocalEvent, ServerEvent}, - state::DeltaTime, sync::Uid, + util::Dir, }; use specs::{Entities, Join, Read, ReadStorage, System, WriteStorage}; -use std::time::Duration; use vek::*; -const BLOCK_EFFICIENCY: f32 = 0.9; - -const ATTACK_RANGE: f32 = 3.5; -const ATTACK_ANGLE: f32 = 45.0; -const BLOCK_ANGLE: f32 = 180.0; +pub const BLOCK_EFFICIENCY: f32 = 0.9; +pub const BLOCK_ANGLE: f32 = 180.0; /// This system is responsible for handling accepted inputs like moving or /// attacking @@ -25,14 +20,14 @@ impl<'a> System<'a> for Sys { Entities<'a>, Read<'a, EventBus>, Read<'a, EventBus>, - Read<'a, DeltaTime>, ReadStorage<'a, Uid>, ReadStorage<'a, Pos>, ReadStorage<'a, Ori>, ReadStorage<'a, Scale>, - ReadStorage<'a, Controller>, + ReadStorage<'a, Agent>, ReadStorage<'a, Body>, ReadStorage<'a, Stats>, + WriteStorage<'a, Attacking>, WriteStorage<'a, CharacterState>, ); @@ -42,136 +37,118 @@ impl<'a> System<'a> for Sys { entities, server_bus, local_bus, - dt, uids, positions, orientations, scales, - controllers, + agents, bodies, stats, - mut character_states, + mut attacking_storage, + character_states, ): Self::SystemData, ) { let mut server_emitter = server_bus.emitter(); - let mut _local_emitter = local_bus.emitter(); - + let mut local_emitter = local_bus.emitter(); // Attacks - for (entity, uid, pos, ori, scale_maybe, _, attacker_stats) in ( + for (entity, uid, pos, ori, scale_maybe, attack) in ( &entities, &uids, &positions, &orientations, scales.maybe(), - &controllers, - &stats, + &mut attacking_storage, ) .join() { - let recover_duration = if let Some(Item { - kind: ItemKind::Tool { kind, .. }, - .. - }) = attacker_stats.equipment.main + if attack.applied { + continue; + } + attack.applied = true; + + // Go through all other entities + for ( + b, + uid_b, + pos_b, + ori_b, + scale_b_maybe, + agent_b_maybe, + character_b, + stats_b, + body_b, + ) in ( + &entities, + &uids, + &positions, + &orientations, + scales.maybe(), + agents.maybe(), + &character_states, + &stats, + &bodies, + ) + .join() { - kind.attack_recover_duration() - } else { - Duration::from_millis(250) - }; + // 2D versions + let pos2 = Vec2::from(pos.0); + let pos_b2 = Vec2::::from(pos_b.0); + let ori2 = Vec2::from(*ori.0); - let (deal_damage, should_end) = if let Some(Attack { time_left, applied }) = - &mut character_states.get_mut(entity).map(|c| &mut c.action) - { - *time_left = time_left - .checked_sub(Duration::from_secs_f32(dt.0)) - .unwrap_or_default(); - if !*applied && recover_duration > *time_left { - *applied = true; - (true, false) - } else if *time_left == Duration::default() { - (false, true) - } else { - (false, false) - } - } else { - (false, false) - }; + // Scales + let scale = scale_maybe.map_or(1.0, |s| s.0); + let scale_b = scale_b_maybe.map_or(1.0, |s| s.0); + let rad_b = body_b.radius() * scale_b; - if deal_damage { - if let Some(Attack { .. }) = &character_states.get(entity).map(|c| c.action) { - // Go through all other entities - for (b, uid_b, pos_b, ori_b, scale_b_maybe, character_b, stats_b, body_b) in ( - &entities, - &uids, - &positions, - &orientations, - scales.maybe(), - &character_states, - &stats, - &bodies, - ) - .join() - { - // 2D versions - let pos2 = Vec2::from(pos.0); - let pos_b2: Vec2 = Vec2::from(pos_b.0); - let ori2 = Vec2::from(ori.0); + // Check if it is a hit + if entity != b + && !stats_b.is_dead + // Spherical wedge shaped attack field + && pos.0.distance_squared(pos_b.0) < (rad_b + scale * attack.range).powi(2) + && ori2.angle_between(pos_b2 - pos2) < attack.max_angle + (rad_b / pos2.distance(pos_b2)).atan() + { + // Weapon gives base damage + let mut healthchange = attack.base_healthchange as f32; - // Scales - let scale = scale_maybe.map_or(1.0, |s| s.0); - let scale_b = scale_b_maybe.map_or(1.0, |s| s.0); - let rad_b = body_b.radius() * scale_b; + // TODO: remove this, either it will remain unused or be used as a temporary + // gameplay balance + //// NPCs do less damage + //if agent_maybe.is_some() { + // healthchange = (healthchange / 1.5).min(-1.0); + //} - // Check if it is a hit - if entity != b - && !stats_b.is_dead - // Spherical wedge shaped attack field - && pos.0.distance_squared(pos_b.0) < (rad_b + scale * ATTACK_RANGE).powi(2) - && ori2.angle_between(pos_b2 - pos2) < ATTACK_ANGLE.to_radians() / 2.0 + (rad_b / pos2.distance(pos_b2)).atan() - { - // Weapon gives base damage - let mut dmg = if let Some(ItemKind::Tool { power, .. }) = - attacker_stats.equipment.main.as_ref().map(|i| &i.kind) - { - *power as i32 - } else { - 1 - }; - - // Block - if character_b.action.is_block() - && ori_b.0.angle_between(pos.0 - pos_b.0) - < BLOCK_ANGLE.to_radians() / 2.0 - { - dmg = (dmg as f32 * (1.0 - BLOCK_EFFICIENCY)) as i32 - } - - server_emitter.emit(ServerEvent::Damage { - uid: *uid_b, - change: HealthChange { - amount: -dmg, - cause: HealthSource::Attack { by: *uid }, - }, - }); - } + // TODO: remove this when there is a better way to target healing + // Don't heal npc's hp + if agent_b_maybe.is_some() && healthchange > 0.0 { + healthchange = 0.0; } - } - } - if should_end { - if let Some(character) = &mut character_states.get_mut(entity) { - character.action = Wield { - time_left: Duration::default(), - }; - } - } + if rand::random() { + healthchange = healthchange * 1.2; + } - if let Some(Wield { time_left }) = - &mut character_states.get_mut(entity).map(|c| &mut c.action) - { - if *time_left != Duration::default() { - *time_left = time_left - .checked_sub(Duration::from_secs_f32(dt.0)) - .unwrap_or_default(); + // Block + if character_b.is_block() + && ori_b.0.angle_between(pos.0 - pos_b.0) < BLOCK_ANGLE.to_radians() / 2.0 + { + healthchange = healthchange * (1.0 - BLOCK_EFFICIENCY) + } + + server_emitter.emit(ServerEvent::Damage { + uid: *uid_b, + change: HealthChange { + amount: healthchange as i32, + cause: HealthSource::Attack { by: *uid }, + }, + }); + if attack.knockback != 0.0 { + local_emitter.emit(LocalEvent::ApplyForce { + entity: b, + force: attack.knockback + * *Dir::slerp(ori.0, Dir::new(Vec3::new(0.0, 0.0, 1.0)), 0.5), + }); + } + attack.hit_count += 1; } } } diff --git a/common/src/sys/controller.rs b/common/src/sys/controller.rs index bcc3f4701a..ceb49f9e9c 100644 --- a/common/src/sys/controller.rs +++ b/common/src/sys/controller.rs @@ -1,245 +1,19 @@ -use super::movement::ROLL_DURATION; use crate::{ - comp::{ - self, item, projectile, ActionState, ActionState::*, Body, CharacterState, ControlEvent, - Controller, ControllerInputs, Energy, EnergySource, HealthChange, HealthSource, ItemKind, - Mounting, MovementState, MovementState::*, PhysicsState, Projectile, Stats, Vel, - }, - event::{Emitter, EventBus, LocalEvent, ServerEvent}, + comp::{CharacterState, ControlEvent, Controller}, + event::{EventBus, LocalEvent, ServerEvent}, state::DeltaTime, sync::{Uid, UidAllocator}, }; use specs::{ saveload::{Marker, MarkerAllocator}, - Entities, Entity, Join, Read, ReadStorage, System, WriteStorage, + Entities, Join, Read, ReadStorage, System, WriteStorage, }; -use std::time::Duration; -use vek::*; -const CHARGE_COST: i32 = 200; -const ROLL_COST: i32 = 30; +// const CHARGE_COST: i32 = 200; +// const ROLL_COST: i32 = 30; -/// # Controller System -/// #### Responsible for validating controller inputs and setting new Character -/// States ---- -/// -/// **Writes:** -/// `CharacterState`, `ControllerInputs` -/// -/// **Reads:** -/// `Stats`, `Vel`, `PhysicsState`, `Uid`, `Mounting` -/// -/// _TODO: Join ActionStates and MovementStates into one and have a handle() -/// trait / fn?_ _TODO: Move weapon action to trait fn?_ pub struct Sys; -impl Sys { - /// Assumes `input.primary` has been pressed - /// handles primary actions. ie. equipping, mainhand weapon attacks. - /// - /// Returns the `ActionState` that occurred - fn handle_primary( - inputs: &mut ControllerInputs, - character: &mut CharacterState, - stats: &Stats, - entity: Entity, - uid: &Uid, - server_emitter: &mut Emitter<'_, ServerEvent>, - local_emitter: &mut Emitter<'_, LocalEvent>, - ) -> ActionState { - match stats.equipment.main.as_ref().map(|i| &i.kind) { - // Character is wielding something - Some(ItemKind::Tool { kind, power, .. }) => { - let attack_duration = kind.attack_duration(); - let wield_duration = kind.wield_duration(); - - // Since primary input was pressed, set - // action to new Wield, in case of - // instant primary actions - if character.action == Idle { - character.action = Wield { - time_left: wield_duration, - }; - } - - match kind { - item::Tool::Bow if character.action.is_action_finished() => { - // Immediately end the wield - server_emitter.emit(ServerEvent::Shoot { - entity, - dir: inputs.look_dir, - body: comp::Body::Object(comp::object::Body::Arrow), - light: None, - gravity: Some(comp::Gravity(0.3)), - projectile: Projectile { - owner: *uid, - hit_ground: vec![projectile::Effect::Stick], - hit_wall: vec![projectile::Effect::Stick], - hit_entity: vec![ - projectile::Effect::Damage(HealthChange { - amount: -(*power as i32), - cause: HealthSource::Attack { by: *uid }, - }), - projectile::Effect::Vanish, - ], - time_left: Duration::from_secs(15), - }, - }); - Attack { - time_left: attack_duration, - applied: false, // We don't want to do a melee attack - } - //character.action - }, - item::Tool::Debug(item::Debug::Boost) => { - local_emitter.emit(LocalEvent::Boost { - entity, - vel: inputs.look_dir * 7.0, - }); - character.action - }, - - item::Tool::Debug(item::Debug::Possess) - if character.action.is_action_finished() => - { - server_emitter.emit(ServerEvent::Shoot { - entity, - gravity: Some(comp::Gravity(0.1)), - dir: inputs.look_dir, - body: comp::Body::Object(comp::object::Body::ArrowSnake), - light: Some(comp::LightEmitter { - col: (0.0, 1.0, 0.3).into(), - ..Default::default() - }), - projectile: Projectile { - owner: *uid, - hit_ground: vec![projectile::Effect::Stick], - hit_wall: vec![projectile::Effect::Stick], - hit_entity: vec![ - projectile::Effect::Stick, - projectile::Effect::Possess, - ], - time_left: Duration::from_secs(10), - }, - }); - - character.action - } - // All other weapons - _ if character.action.is_action_finished() => Attack { - time_left: attack_duration, - applied: false, - }, - _ => { - // Return the new Wield action - character.action - }, - } - }, - // Without a weapon - None => { - // Attack - if !character.action.is_attack() { - Attack { - time_left: Duration::from_millis(250), - applied: false, - } - } else { - character.action - } - }, - _ => character.action, - } - } - - /// Assumes `input.seconday` has been pressed - /// handles seconday actions. ie. blocking, althand weapons - /// - /// Returns the `ActionState` that occurred - fn handle_secondary( - inputs: &mut ControllerInputs, - character: &mut CharacterState, - stats: &Stats, - entity: Entity, - uid: &Uid, - server_emitter: &mut Emitter<'_, ServerEvent>, - local_emitter: &mut Emitter<'_, LocalEvent>, - ) -> ActionState { - match stats.equipment.main.as_ref().map(|i| &i.kind) { - // Character is wielding something - Some(ItemKind::Tool { kind, power, .. }) => { - let attack_duration = kind.attack_duration(); - let wield_duration = kind.wield_duration(); - - // Since primary input was pressed, set - // action to new Wield, in case of - // instant primary actions - if character.action == Idle { - character.action = Wield { - time_left: wield_duration, - }; - } - - match kind { - // Magical Bolt - item::Tool::Staff - if character.movement == Stand && character.action.is_action_finished() => - { - server_emitter.emit(ServerEvent::Shoot { - entity, - dir: inputs.look_dir, - body: comp::Body::Object(comp::object::Body::BoltFire), - gravity: Some(comp::Gravity(0.0)), - light: Some(comp::LightEmitter { - col: (0.72, 0.11, 0.11).into(), - strength: 10.0, - offset: Vec3::new(0.0, -5.0, 2.0), - }), - projectile: Projectile { - owner: *uid, - hit_ground: vec![projectile::Effect::Vanish], - hit_wall: vec![projectile::Effect::Vanish], - hit_entity: vec![ - projectile::Effect::Damage(HealthChange { - amount: -(*power as i32), - cause: HealthSource::Attack { by: *uid }, - }), - projectile::Effect::Vanish, - ], - time_left: Duration::from_secs(5), - }, - }); - // TODO: Don't play melee animation - Attack { - time_left: attack_duration, - applied: true, // We don't want to do a melee attack - } - } - - // Go upward - item::Tool::Debug(item::Debug::Boost) => { - local_emitter.emit(LocalEvent::Boost { - entity, - vel: Vec3::new(0.0, 0.0, 7.0), - }); - - character.action - }, - - // All other weapons block - _ if character.action.is_action_finished() => Block { - time_active: Duration::from_secs(0), - }, - - _ => character.action, - } - }, - - _ => character.action, - } - } -} - impl<'a> System<'a> for Sys { type SystemData = ( Entities<'a>, @@ -249,13 +23,7 @@ impl<'a> System<'a> for Sys { Read<'a, DeltaTime>, WriteStorage<'a, Controller>, WriteStorage<'a, CharacterState>, - ReadStorage<'a, Stats>, - WriteStorage<'a, Energy>, - ReadStorage<'a, Body>, - ReadStorage<'a, Vel>, - ReadStorage<'a, PhysicsState>, ReadStorage<'a, Uid>, - ReadStorage<'a, Mounting>, ); fn run( @@ -264,89 +32,38 @@ impl<'a> System<'a> for Sys { entities, uid_allocator, server_bus, - local_bus, - dt, + _local_bus, + _dt, mut controllers, mut character_states, - stats, - mut energies, - bodies, - velocities, - physics_states, uids, - mountings, ): Self::SystemData, ) { let mut server_emitter = server_bus.emitter(); - let mut local_emitter = local_bus.emitter(); - for ( - entity, - uid, - controller, - mut character, - stats, - mut energy, - body, - vel, - physics, - mount, - ) in ( - &entities, - &uids, - &mut controllers, - &mut character_states, - &stats, - &mut energies.restrict_mut(), - &bodies, - &velocities, - &physics_states, - mountings.maybe(), - ) - .join() + + for (entity, _uid, controller, character_state) in + (&entities, &uids, &mut controllers, &mut character_states).join() { - let inputs = &mut controller.inputs; + let mut inputs = &mut controller.inputs; - // --------------------------------------- - // Common actions for multiple states as closure fn's for convenience - // Returns a Wield action, or Idle if nothing to wield - let try_wield = |stats: &Stats| -> ActionState { - // Get weapon to wield - if let Some(ItemKind::Tool { kind, .. }) = - stats.equipment.main.as_ref().map(|i| &i.kind) - { - let wield_duration = kind.wield_duration(); - Wield { - time_left: wield_duration, - } - } else { - Idle - } + // Note(imbris): I avoided incrementing the duration with inputs.tick() because + // this is being done manually in voxygen right now so it would double up on + // speed of time. + // Perhaphs the duration aspects of inputs could be + // calculated exclusively on the server (since the client can't be + // trusted anyway). It needs to be considered if these calculations + // being on the client are critical for responsiveness/client-side prediction. + inputs.tick_freshness(); + + // Update `inputs.move_dir`. + inputs.move_dir = if inputs.move_dir.magnitude_squared() > 1.0 { + // Cap move_dir to 1 + inputs.move_dir.normalized() + } else { + inputs.move_dir }; - let get_state_from_move_dir = |move_dir: &Vec2| -> MovementState { - if move_dir.magnitude_squared() > 0.0 { - Run - } else { - Stand - } - }; - - // End common actions - // --------------------------------------- - - // Being dead overrides all other states - if stats.is_dead { - // Only options: click respawn - // prevent instant-respawns (i.e. player was holding attack) - // by disallowing while input is held down - if inputs.respawn.is_pressed() && !inputs.respawn.is_held_down() { - server_emitter.emit(ServerEvent::Respawn(entity)); - } - // Or do nothing - continue; - } - - // Process controller events + // Process other controller events for event in controller.events.drain(..) { match event { ControlEvent::Mount(mountee_uid) => { @@ -358,384 +75,12 @@ impl<'a> System<'a> for Sys { }, ControlEvent::Unmount => server_emitter.emit(ServerEvent::Unmount(entity)), ControlEvent::InventoryManip(manip) => { + *character_state = CharacterState::Idle; server_emitter.emit(ServerEvent::InventoryManip(entity, manip)) - }, /*ControlEvent::Respawn => { - if state.is_dead { - server_emitter.emit(ServerEvent::Respawn(entity)), - } - }*/ + }, + ControlEvent::Respawn => server_emitter.emit(ServerEvent::Respawn(entity)), } } - - // If mounted, character state is controlled by mount - if mount.is_some() { - character.movement = Sit; - continue; - } - - inputs.update_look_dir(); - inputs.update_move_dir(); - - match (character.action, character.movement) { - // Jumping, one frame state that calls jump server event - (_, Jump) => { - character.movement = Fall; - local_emitter.emit(LocalEvent::Jump(entity)); - }, - // Charging + Any Movement, prioritizes finishing charge - // over movement states - (Charge { time_left }, _) => { - inputs.update_move_dir(); - if time_left == Duration::default() || vel.0.magnitude_squared() < 10.0 { - character.action = try_wield(stats); - } else { - character.action = Charge { - time_left: time_left - .checked_sub(Duration::from_secs_f32(dt.0)) - .unwrap_or_default(), - }; - } - if let Some(uid_b) = physics.touch_entity { - server_emitter.emit(ServerEvent::Damage { - uid: uid_b, - change: HealthChange { - amount: -20, - cause: HealthSource::Attack { by: *uid }, - }, - }); - - character.action = try_wield(stats); - } - }, - // Rolling + Any Movement, prioritizes finishing charge - // over movement states - ( - Roll { - time_left, - was_wielding, - }, - _, - ) => { - if time_left == Duration::default() { - if was_wielding { - character.action = try_wield(stats); - } else { - character.action = Idle; - } - } else { - character.action = Roll { - time_left: time_left - .checked_sub(Duration::from_secs_f32(dt.0)) - .unwrap_or_default(), - was_wielding, - } - } - }, - // Any Action + Falling - (action_state, Fall) => { - character.movement = get_state_from_move_dir(&inputs.move_dir); - if inputs.glide.is_pressed() && can_glide(body) { - character.movement = Glide; - continue; - } - // Try to climb - if let (true, Some(_wall_dir)) = ( - (inputs.climb.is_pressed() | inputs.climb_down.is_pressed()) - && can_climb(body), - physics.on_wall, - ) { - character.movement = Climb; - continue; - } - // Reset to Falling while not standing on ground, - // otherwise keep the state given above - if !physics.on_ground { - if physics.in_fluid { - character.movement = Swim; - } else { - character.movement = Fall; - } - } else { - character.movement = Stand; - continue; - } - - match action_state { - // Unwield if buttons pressed - Wield { .. } | Attack { .. } => { - if inputs.toggle_wield.is_just_pressed() { - character.action = Idle; - } - }, - // Try to wield if any of buttons pressed - Idle => { - if inputs.primary.is_pressed() || inputs.secondary.is_pressed() { - character.action = try_wield(stats); - continue; - } - }, - // Cancel blocks - Block { .. } => { - character.action = try_wield(stats); - continue; - }, - // Don't change action - Charge { .. } | Roll { .. } => {}, - } - if inputs.primary.is_pressed() { - character.action = Self::handle_primary( - inputs, - character, - stats, - entity, - uid, - &mut server_emitter, - &mut local_emitter, - ); - } else if inputs.secondary.is_pressed() { - character.action = Self::handle_secondary( - inputs, - character, - stats, - entity, - uid, - &mut server_emitter, - &mut local_emitter, - ); - } - }, - // Any Action + Swimming - (_action_state, Swim) => { - character.movement = get_state_from_move_dir(&inputs.move_dir); - - if !physics.on_ground && physics.in_fluid { - character.movement = Swim; - } - if inputs.primary.is_pressed() { - character.action = Self::handle_primary( - inputs, - character, - stats, - entity, - uid, - &mut server_emitter, - &mut local_emitter, - ); - } else if inputs.secondary.is_pressed() { - character.action = Self::handle_secondary( - inputs, - character, - stats, - entity, - uid, - &mut server_emitter, - &mut local_emitter, - ); - } - }, - // Blocking, restricted look_dir compared to other states - (Block { .. }, Stand) | (Block { .. }, Run) => { - character.movement = get_state_from_move_dir(&inputs.move_dir); - - if !inputs.secondary.is_pressed() { - character.action = try_wield(stats); - } else { - character.action = Self::handle_secondary( - inputs, - character, - stats, - entity, - uid, - &mut server_emitter, - &mut local_emitter, - ); - } - - if !physics.on_ground { - if physics.in_fluid { - character.movement = Swim; - } else { - character.movement = Fall; - } - } - }, - // Standing and Running states, typical states :shrug: - (action_state, Run) | (action_state, Stand) => { - character.movement = get_state_from_move_dir(&inputs.move_dir); - // Try to sit - if inputs.sit.is_pressed() && physics.on_ground && body.is_humanoid() { - character.movement = Sit; - continue; - } - - // Try to climb - - if let (true, Some(_wall_dir)) = ( - (inputs.climb.is_pressed() | inputs.climb_down.is_pressed()) - && can_climb(body), - physics.on_wall, - ) { - character.movement = Climb; - continue; - } - - // Try to swim - if !physics.on_ground { - if physics.in_fluid { - character.movement = Swim; - } else { - character.movement = Fall; - } - } - - // While on ground ... - if physics.on_ground { - // Try to jump - if inputs.jump.is_pressed() { - character.movement = Jump; - continue; - } - - // Try to charge - if inputs.charge.is_pressed() && !inputs.charge.is_held_down() { - if energy - .get_mut_unchecked() - .try_change_by(-CHARGE_COST, EnergySource::CastSpell) - .is_ok() - { - character.action = Charge { - time_left: Duration::from_millis(250), - }; - } - continue; - } - - // Try to roll - if character.movement == Run - && inputs.roll.is_pressed() - && body.is_humanoid() - { - if energy - .get_mut_unchecked() - .try_change_by(-ROLL_COST, EnergySource::Roll) - .is_ok() - { - character.action = Roll { - time_left: ROLL_DURATION, - was_wielding: character.action.is_wield(), - }; - } - continue; - } - } - // While not on ground ... - else { - // Try to glide - if physics.on_wall == None && inputs.glide.is_pressed() && can_glide(&body) - { - character.movement = Glide; - continue; - } - } - - // Tool Actions - if inputs.toggle_wield.is_just_pressed() { - match action_state { - Wield { .. } | Attack { .. } => { - // Prevent instantaneous reequipping by checking - // for done wielding - if character.action.is_action_finished() { - character.action = Idle; - } - continue; - }, - Idle => { - character.action = try_wield(stats); - continue; - }, - Charge { .. } | Roll { .. } | Block { .. } => {}, - } - } - if inputs.primary.is_pressed() { - character.action = Self::handle_primary( - inputs, - character, - stats, - entity, - uid, - &mut server_emitter, - &mut local_emitter, - ); - } else if inputs.secondary.is_pressed() { - character.action = Self::handle_secondary( - inputs, - character, - stats, - entity, - uid, - &mut server_emitter, - &mut local_emitter, - ); - } - }, - // Sitting - (_, Sit) => { - character.action = Idle; - character.movement = get_state_from_move_dir(&inputs.move_dir); - - // character.movement will be Stand after updating when - // no movement has occurred - if character.movement == Stand { - character.movement = Sit; - } - if inputs.jump.is_pressed() { - character.movement = Jump; - continue; - } - if !physics.on_ground { - character.movement = Fall; - } - }, - // Any Action + Gliding, shouldnt care about action, - // because should be Idle - (_, Glide) => { - character.action = Idle; - - if !inputs.glide.is_pressed() { - character.movement = Fall; - } else if let (Some(_wall_dir), true) = (physics.on_wall, can_climb(body)) { - character.movement = Climb; - } - - if physics.on_ground { - character.movement = Stand - } - }, - // Any Action + Climbing, shouldnt care about action, - // because should be Idle - (_, Climb) => { - character.action = Idle; - if let None = physics.on_wall { - if inputs.jump.is_pressed() { - character.movement = Jump; - } else { - character.movement = Fall; - } - } - if physics.on_ground { - character.movement = Stand; - } - }, /* In case of adding new states - * (_, _) => { - * println!("UNKNOWN STATE"); - * character.action = Idle; - * character.movement = Fall; - * } */ - }; } } } - -fn can_glide(body: &Body) -> bool { body.is_humanoid() } - -fn can_climb(body: &Body) -> bool { body.is_humanoid() } diff --git a/common/src/sys/mod.rs b/common/src/sys/mod.rs index b8251fbc21..832dc37d63 100644 --- a/common/src/sys/mod.rs +++ b/common/src/sys/mod.rs @@ -1,9 +1,8 @@ pub mod agent; -mod cleanup; +pub mod character_behavior; pub mod combat; pub mod controller; mod mount; -pub mod movement; pub mod phys; mod projectile; mod stats; @@ -12,30 +11,24 @@ mod stats; use specs::DispatcherBuilder; // System names +pub const CHARACTER_BEHAVIOR_SYS: &str = "character_behavior_sys"; +pub const COMBAT_SYS: &str = "combat_sys"; pub const AGENT_SYS: &str = "agent_sys"; pub const CONTROLLER_SYS: &str = "controller_sys"; pub const MOUNT_SYS: &str = "mount_sys"; pub const PHYS_SYS: &str = "phys_sys"; -pub const MOVEMENT_SYS: &str = "movement_sys"; pub const PROJECTILE_SYS: &str = "projectile_sys"; -pub const COMBAT_SYS: &str = "combat_sys"; pub const STATS_SYS: &str = "stats_sys"; -pub const CLEANUP_SYS: &str = "cleanup_sys"; pub fn add_local_systems(dispatch_builder: &mut DispatcherBuilder) { dispatch_builder.add(agent::Sys, AGENT_SYS, &[]); dispatch_builder.add(mount::Sys, MOUNT_SYS, &[AGENT_SYS]); dispatch_builder.add(controller::Sys, CONTROLLER_SYS, &[AGENT_SYS, MOUNT_SYS]); - dispatch_builder.add(movement::Sys, MOVEMENT_SYS, &[]); - dispatch_builder.add(combat::Sys, COMBAT_SYS, &[CONTROLLER_SYS]); - dispatch_builder.add(stats::Sys, STATS_SYS, &[COMBAT_SYS]); - dispatch_builder.add(phys::Sys, PHYS_SYS, &[ + dispatch_builder.add(character_behavior::Sys, CHARACTER_BEHAVIOR_SYS, &[ CONTROLLER_SYS, - MOUNT_SYS, - MOVEMENT_SYS, - COMBAT_SYS, - STATS_SYS, ]); + dispatch_builder.add(stats::Sys, STATS_SYS, &[]); + dispatch_builder.add(phys::Sys, PHYS_SYS, &[CONTROLLER_SYS, MOUNT_SYS, STATS_SYS]); dispatch_builder.add(projectile::Sys, PROJECTILE_SYS, &[PHYS_SYS]); - dispatch_builder.add(cleanup::Sys, CLEANUP_SYS, &[PHYS_SYS]); + dispatch_builder.add(combat::Sys, COMBAT_SYS, &[PROJECTILE_SYS]); } diff --git a/common/src/sys/movement.rs b/common/src/sys/movement.rs deleted file mode 100644 index 439ff9ceea..0000000000 --- a/common/src/sys/movement.rs +++ /dev/null @@ -1,261 +0,0 @@ -use super::phys::GRAVITY; -use crate::{ - comp::{ - ActionState, CharacterState, Controller, Energy, EnergySource, Mounting, MovementState::*, - Ori, PhysicsState, Pos, Stats, Vel, - }, - event::{EventBus, ServerEvent}, - state::DeltaTime, - sync::Uid, - terrain::TerrainGrid, -}; -use specs::{Entities, Join, Read, ReadExpect, ReadStorage, System, WriteStorage}; -use std::time::Duration; -use vek::*; - -pub const ROLL_DURATION: Duration = Duration::from_millis(600); - -const BASE_HUMANOID_ACCEL: f32 = 100.0; -const BASE_HUMANOID_SPEED: f32 = 120.0; -const BASE_HUMANOID_AIR_ACCEL: f32 = 15.0; -const BASE_HUMANOID_AIR_SPEED: f32 = 100.0; -const BASE_HUMANOID_WATER_ACCEL: f32 = 70.0; -const BASE_HUMANOID_WATER_SPEED: f32 = 120.0; -const BASE_HUMANOID_CLIMB_ACCEL: f32 = 10.0; -const ROLL_SPEED: f32 = 17.0; -const CHARGE_SPEED: f32 = 20.0; -const GLIDE_ACCEL: f32 = 15.0; -const GLIDE_SPEED: f32 = 45.0; -const BLOCK_ACCEL: f32 = 30.0; -const BLOCK_SPEED: f32 = 75.0; -// Gravity is 9.81 * 4, so this makes gravity equal to .15 -const GLIDE_ANTIGRAV: f32 = GRAVITY * 0.96; -const CLIMB_SPEED: f32 = 5.0; -const CLIMB_COST: i32 = 5; - -pub const MOVEMENT_THRESHOLD_VEL: f32 = 3.0; - -/// # Movement System -/// #### Applies forces, calculates new positions and velocities,7 -/// #### based on Controller(Inputs) and CharacterState. -/// ---- -/// -/// **Writes:** -/// Pos, Vel, Ori -/// -/// **Reads:** -/// Uid, Stats, Controller, PhysicsState, CharacterState, Mounting -pub struct Sys; -impl<'a> System<'a> for Sys { - type SystemData = ( - Entities<'a>, - ReadExpect<'a, TerrainGrid>, - Read<'a, EventBus>, - Read<'a, DeltaTime>, - WriteStorage<'a, Pos>, - WriteStorage<'a, Vel>, - WriteStorage<'a, Ori>, - WriteStorage<'a, Energy>, - ReadStorage<'a, Uid>, - ReadStorage<'a, Stats>, - ReadStorage<'a, Controller>, - ReadStorage<'a, PhysicsState>, - ReadStorage<'a, CharacterState>, - ReadStorage<'a, Mounting>, - ); - - fn run( - &mut self, - ( - entities, - _terrain, - _server_bus, - dt, - mut positions, - mut velocities, - mut orientations, - mut energies, - uids, - stats, - controllers, - physics_states, - character_states, - mountings, - ): Self::SystemData, - ) { - // Apply movement inputs - for ( - _entity, - mut _pos, - mut vel, - mut ori, - mut energy, - _uid, - stats, - controller, - physics, - character, - mount, - ) in ( - &entities, - &mut positions, - &mut velocities, - &mut orientations, - &mut energies.restrict_mut(), - &uids, - &stats, - &controllers, - &physics_states, - &character_states, - mountings.maybe(), - ) - .join() - { - if stats.is_dead { - continue; - } - - if mount.is_some() { - continue; - } - - let inputs = &controller.inputs; - - if character.action.is_roll() { - vel.0 = Vec3::new(0.0, 0.0, vel.0.z) - + (vel.0 * Vec3::new(1.0, 1.0, 0.0) - + 1.5 * inputs.move_dir.try_normalized().unwrap_or_default()) - .try_normalized() - .unwrap_or_default() - * ROLL_SPEED; - } else if character.action.is_charge() { - vel.0 = Vec3::new(0.0, 0.0, vel.0.z) - + (vel.0 * Vec3::new(1.0, 1.0, 0.0) - + 1.5 * inputs.move_dir.try_normalized().unwrap_or_default()) - .try_normalized() - .unwrap_or_default() - * CHARGE_SPEED; - } else if character.action.is_block() { - vel.0 += Vec2::broadcast(dt.0) - * inputs.move_dir - * match physics.on_ground { - true if vel.0.magnitude_squared() < BLOCK_SPEED.powf(2.0) => BLOCK_ACCEL, - _ => 0.0, - } - } else { - // Move player according to move_dir - vel.0 += Vec2::broadcast(dt.0) - * inputs.move_dir - * match (physics.on_ground, &character.movement) { - (true, Run) - if vel.0.magnitude_squared() - < (BASE_HUMANOID_SPEED + stats.fitness as f32 * 50.0).powf(2.0) => - { - BASE_HUMANOID_ACCEL - }, - (false, Climb) - if vel.0.magnitude_squared() < BASE_HUMANOID_SPEED.powf(2.0) => - { - BASE_HUMANOID_CLIMB_ACCEL - }, - (false, Glide) if vel.0.magnitude_squared() < GLIDE_SPEED.powf(2.0) => { - GLIDE_ACCEL - }, - (false, Fall) | (false, Jump) - if vel.0.magnitude_squared() - < (BASE_HUMANOID_AIR_SPEED + stats.fitness as f32 * 10.0) - .powf(2.0) => - { - BASE_HUMANOID_AIR_ACCEL - }, - (false, Swim) - if vel.0.magnitude_squared() - < (BASE_HUMANOID_WATER_SPEED + stats.fitness as f32 * 30.0) - .powf(2.0) => - { - BASE_HUMANOID_WATER_ACCEL + stats.fitness as f32 * 10.0 - }, - _ => 0.0, - }; - } - - // Set direction based on move direction when on the ground - let ori_dir = if - //character.action.is_wield() || - character.action.is_attack() || character.action.is_block() { - Vec2::from(inputs.look_dir).normalized() - } else if let (Climb, Some(wall_dir)) = (character.movement, physics.on_wall) { - if Vec2::::from(wall_dir).magnitude_squared() > 0.001 { - Vec2::from(wall_dir).normalized() - } else { - Vec2::from(inputs.move_dir) - } - } else if let Glide = character.movement { - // Note: non-gliding forces will also affect velocity and thus orientation - // producing potentially unexpected changes in direction - Vec2::from(vel.0) - } else { - if let ActionState::Roll { .. } = character.action { - // So can can't spin/slip around while rolling - Vec2::from(vel.0) - } else { - Vec2::from(inputs.move_dir) - } - }; - - if ori_dir.magnitude_squared() > 0.0001 - && (ori.0.normalized() - Vec3::from(ori_dir).normalized()).magnitude_squared() - > 0.001 - { - ori.0 = vek::ops::Slerp::slerp( - ori.0, - ori_dir.into(), - if physics.on_ground { 9.0 } else { 2.0 } * dt.0, - ); - } - - // Glide - if character.movement == Glide - && Vec2::::from(vel.0).magnitude_squared() < GLIDE_SPEED.powf(2.0) - && vel.0.z < 0.0 - { - let lift = GLIDE_ANTIGRAV + vel.0.z.abs().powf(2.0) * 0.15; - vel.0.z += dt.0 - * lift - * (Vec2::::from(vel.0).magnitude() * 0.075) - .min(1.0) - .max(0.2); - } - - // Climb - if let (true, Some(_wall_dir)) = ( - character.movement == Climb && vel.0.z <= CLIMB_SPEED, - physics.on_wall, - ) { - if inputs.climb_down.is_pressed() && !inputs.climb.is_pressed() { - if energy - .get_mut_unchecked() - .try_change_by(-CLIMB_COST, EnergySource::Climb) - .is_ok() - { - vel.0 -= dt.0 * vel.0.map(|e| e.abs().powf(1.5) * e.signum() * 6.0); - } - } else if inputs.climb.is_pressed() && !inputs.climb_down.is_pressed() { - if energy - .get_mut_unchecked() - .try_change_by(-CLIMB_COST, EnergySource::Climb) - .is_ok() - { - vel.0.z = (vel.0.z + dt.0 * GRAVITY * 1.25).min(CLIMB_SPEED).max(0.0); - } - } else { - vel.0.z = (vel.0.z - dt.0 * GRAVITY * 0.01).min(CLIMB_SPEED); - } - } - - if character.movement == Swim && inputs.jump.is_pressed() { - vel.0.z = (vel.0.z + dt.0 * GRAVITY * 1.25).min(BASE_HUMANOID_WATER_SPEED); - } - } - } -} diff --git a/common/src/sys/phys.rs b/common/src/sys/phys.rs index d57f0af012..2546af51a9 100644 --- a/common/src/sys/phys.rs +++ b/common/src/sys/phys.rs @@ -9,7 +9,7 @@ use crate::{ use specs::{Entities, Join, Read, ReadExpect, ReadStorage, System, WriteStorage}; use vek::*; -pub const GRAVITY: f32 = 9.81 * 7.0; +pub const GRAVITY: f32 = 9.81 * 5.0; const BOUYANCY: f32 = 0.0; // Friction values used for linear damping. They are unitless quantities. The // value of these quantities must be between zero and one. They represent the diff --git a/common/src/sys/projectile.rs b/common/src/sys/projectile.rs index 99c1cc42bf..0174f4299f 100644 --- a/common/src/sys/projectile.rs +++ b/common/src/sys/projectile.rs @@ -1,10 +1,15 @@ use crate::{ - comp::{projectile, HealthSource, Ori, PhysicsState, Projectile, Vel}, - event::{EventBus, ServerEvent}, + comp::{ + projectile, Energy, EnergySource, HealthSource, Ori, PhysicsState, Pos, Projectile, Vel, + }, + event::{EventBus, LocalEvent, ServerEvent}, state::DeltaTime, + sync::UidAllocator, + util::Dir, }; -use specs::{Entities, Join, Read, ReadStorage, System, WriteStorage}; +use specs::{saveload::MarkerAllocator, Entities, Join, Read, ReadStorage, System, WriteStorage}; use std::time::Duration; +use vek::*; /// This system is responsible for handling projectile effect triggers pub struct Sys; @@ -12,11 +17,15 @@ impl<'a> System<'a> for Sys { type SystemData = ( Entities<'a>, Read<'a, DeltaTime>, + Read<'a, UidAllocator>, + Read<'a, EventBus>, Read<'a, EventBus>, + ReadStorage<'a, Pos>, ReadStorage<'a, PhysicsState>, ReadStorage<'a, Vel>, WriteStorage<'a, Ori>, WriteStorage<'a, Projectile>, + WriteStorage<'a, Energy>, ); fn run( @@ -24,18 +33,24 @@ impl<'a> System<'a> for Sys { ( entities, dt, + uid_allocator, + local_bus, server_bus, + positions, physics_states, velocities, mut orientations, mut projectiles, + mut energies, ): Self::SystemData, ) { + let mut local_emitter = local_bus.emitter(); let mut server_emitter = server_bus.emitter(); // Attacks - for (entity, physics, ori, projectile) in ( + for (entity, pos, physics, ori, projectile) in ( &entities, + &positions, &physics_states, &mut orientations, &mut projectiles, @@ -46,6 +61,13 @@ impl<'a> System<'a> for Sys { if physics.on_ground { for effect in projectile.hit_ground.drain(..) { match effect { + projectile::Effect::Explode { power } => { + server_emitter.emit(ServerEvent::Explosion { + pos: pos.0, + power, + owner: projectile.owner, + }) + }, projectile::Effect::Vanish => server_emitter.emit(ServerEvent::Destroy { entity, cause: HealthSource::World, @@ -58,6 +80,13 @@ impl<'a> System<'a> for Sys { else if physics.on_wall.is_some() { for effect in projectile.hit_wall.drain(..) { match effect { + projectile::Effect::Explode { power } => { + server_emitter.emit(ServerEvent::Explosion { + pos: pos.0, + power, + owner: projectile.owner, + }) + }, projectile::Effect::Vanish => server_emitter.emit(ServerEvent::Destroy { entity, cause: HealthSource::World, @@ -73,18 +102,51 @@ impl<'a> System<'a> for Sys { projectile::Effect::Damage(change) => { server_emitter.emit(ServerEvent::Damage { uid: other, change }) }, + projectile::Effect::Knockback(knockback) => { + if let Some(entity) = + uid_allocator.retrieve_entity_internal(other.into()) + { + local_emitter.emit(LocalEvent::ApplyForce { + entity, + force: knockback + * *Dir::slerp(ori.0, Dir::new(Vec3::unit_z()), 0.5), + }); + } + }, + projectile::Effect::RewardEnergy(energy) => { + if let Some(energy_mut) = projectile + .owner + .and_then(|o| uid_allocator.retrieve_entity_internal(o.into())) + .and_then(|o| energies.get_mut(o)) + { + energy_mut.change_by(energy as i32, EnergySource::HitEnemy); + } + }, + projectile::Effect::Explode { power } => { + server_emitter.emit(ServerEvent::Explosion { + pos: pos.0, + power, + owner: projectile.owner, + }) + }, projectile::Effect::Vanish => server_emitter.emit(ServerEvent::Destroy { entity, cause: HealthSource::World, }), - projectile::Effect::Possess => server_emitter - .emit(ServerEvent::Possess(projectile.owner.into(), other)), + projectile::Effect::Possess => { + if let Some(owner) = projectile.owner { + server_emitter.emit(ServerEvent::Possess(owner.into(), other)); + } + }, _ => {}, } } } else { - if let Some(vel) = velocities.get(entity) { - ori.0 = vel.0.normalized(); + if let Some(dir) = velocities + .get(entity) + .and_then(|vel| vel.0.try_normalized()) + { + ori.0 = dir.into(); } } diff --git a/common/src/sys/stats.rs b/common/src/sys/stats.rs index e5c3760880..61396bc8fb 100644 --- a/common/src/sys/stats.rs +++ b/common/src/sys/stats.rs @@ -1,11 +1,11 @@ use crate::{ - comp::{ActionState, CharacterState, Energy, EnergySource, HealthSource, MovementState, Stats}, + comp::{CharacterState, Energy, EnergySource, HealthSource, Stats}, event::{EventBus, ServerEvent}, state::DeltaTime, }; use specs::{Entities, Join, Read, ReadStorage, System, WriteStorage}; -const ENERGY_REGEN_ACCEL: f32 = 20.0; +const ENERGY_REGEN_ACCEL: f32 = 10.0; /// This system kills players, levels them up, and regenerates energy. pub struct Sys; @@ -74,8 +74,8 @@ impl<'a> System<'a> for Sys { } // Accelerate recharging energy if not wielding. - match character_state.action { - ActionState::Idle => { + match character_state { + CharacterState::Idle { .. } | CharacterState::Sit { .. } => { if { let energy = energy.get_unchecked(); energy.current() < energy.maximum() @@ -87,36 +87,17 @@ impl<'a> System<'a> for Sys { as i32, EnergySource::Regen, ); - energy.regen_rate += ENERGY_REGEN_ACCEL * dt.0; + energy.regen_rate = + (energy.regen_rate + ENERGY_REGEN_ACCEL * dt.0).min(100.0); } }, - // All other states do not regen and set the rate back to zero. - _ => { + // Wield does not regen and sets the rate back to zero. + CharacterState::Wielding { .. } => { if energy.get_unchecked().regen_rate != 0.0 { energy.get_mut_unchecked().regen_rate = 0.0 } }, - } - - match character_state.movement { - MovementState::Climb => { - if energy.get_unchecked().regen_rate != 0.0 { - energy.get_mut_unchecked().regen_rate = 0.0 - } - }, - MovementState::Glide => { - if energy.get_unchecked().regen_rate != 0.0 { - energy.get_mut_unchecked().regen_rate = 0.0 - } - }, - MovementState::Swim => { - if energy.get_unchecked().regen_rate != 0.0 { - energy.get_mut_unchecked().regen_rate = 0.0 - } - }, - _ => { - continue; - }, + _ => {}, } } } diff --git a/common/src/util/color.rs b/common/src/util/color.rs new file mode 100644 index 0000000000..a1b91394da --- /dev/null +++ b/common/src/util/color.rs @@ -0,0 +1,141 @@ +use vek::{Mat3, Rgb, Rgba, Vec3}; + +#[inline(always)] +pub fn srgb_to_linear(col: Rgb) -> Rgb { + col.map(|c| { + if c <= 0.104 { + c * 0.08677088 + } else { + 0.012522878 * c + 0.682171111 * c * c + 0.305306011 * c * c * c + } + }) +} + +#[inline(always)] +pub fn linear_to_srgb(col: Rgb) -> Rgb { + col.map(|c| { + if c <= 0.0060 { + c * 11.500726 + } else { + let s1 = c.sqrt(); + let s2 = s1.sqrt(); + let s3 = s2.sqrt(); + 0.585122381 * s1 + 0.783140355 * s2 - 0.368262736 * s3 + } + }) +} + +#[inline(always)] +pub fn srgba_to_linear(col: Rgba) -> Rgba { + Rgba::from_translucent(srgb_to_linear(Rgb::from(col)), col.a) +} + +#[inline(always)] +pub fn linear_to_srgba(col: Rgba) -> Rgba { + Rgba::from_translucent(linear_to_srgb(Rgb::from(col)), col.a) +} + +/// Convert rgb to hsv. Expects rgb to be [0, 1]. +#[inline(always)] +pub fn rgb_to_hsv(rgb: Rgb) -> Vec3 { + let (r, g, b) = rgb.into_tuple(); + let (max, min, diff, add) = { + let (max, min, diff, add) = if r > g { + (r, g, g - b, 0.0) + } else { + (g, r, b - r, 2.0) + }; + if b > max { + (b, min, r - g, 4.0) + } else { + (max, b.min(min), diff, add) + } + }; + + let v = max; + let h = if max == min { + 0.0 + } else { + let mut h = 60.0 * (add + diff / (max - min)); + if h < 0.0 { + h += 360.0; + } + h + }; + let s = if max == 0.0 { 0.0 } else { (max - min) / max }; + + Vec3::new(h, s, v) +} + +/// Convert hsv to rgb. Expects h [0, 360], s [0, 1], v [0, 1] +#[inline(always)] +pub fn hsv_to_rgb(hsv: Vec3) -> Rgb { + let (h, s, v) = hsv.into_tuple(); + let c = s * v; + let h = h / 60.0; + let x = c * (1.0 - (h % 2.0 - 1.0).abs()); + let m = v - c; + + let (r, g, b) = if h >= 0.0 && h <= 1.0 { + (c, x, 0.0) + } else if h <= 2.0 { + (x, c, 0.0) + } else if h <= 3.0 { + (0.0, c, x) + } else if h <= 4.0 { + (0.0, x, c) + } else if h <= 5.0 { + (x, 0.0, c) + } else { + (c, 0.0, x) + }; + + Rgb::new(r + m, g + m, b + m) +} + +/// Convert linear rgb to CIExyY +#[inline(always)] +pub fn rgb_to_xyy(rgb: Rgb) -> Vec3 { + // XYZ + let xyz = Mat3::new( + 0.4124, 0.3576, 0.1805, 0.2126, 0.7152, 0.0722, 0.0193, 0.1192, 0.9504, + ) * Vec3::from(rgb); + + let sum = xyz.sum(); + Vec3::new(xyz.x / sum, xyz.y / sum, xyz.y) +} + +/// Convert to CIExyY to linear rgb +#[inline(always)] +pub fn xyy_to_rgb(xyy: Vec3) -> Rgb { + let xyz = Vec3::new( + xyy.z / xyy.y * xyy.x, + xyy.z, + xyy.z / xyy.y * (1.0 - xyy.x - xyy.y), + ); + + Rgb::from( + Mat3::new( + 3.2406, -1.5372, -0.4986, -0.9689, 1.8758, 0.0415, 0.0557, -0.2040, 1.0570, + ) * xyz, + ) +} + +// TO-DO: speed this up +#[inline(always)] +pub fn saturate_srgb(col: Rgb, value: f32) -> Rgb { + let mut hsv = rgb_to_hsv(srgb_to_linear(col)); + hsv.y *= 1.0 + value; + linear_to_srgb(hsv_to_rgb(hsv).map(|e| e.min(1.0).max(0.0))) +} + +/// Preserves the luma of one color while changing its chromaticty to match the +/// other +#[inline(always)] +pub fn chromify_srgb(luma: Rgb, chroma: Rgb) -> Rgb { + let l = rgb_to_xyy(srgb_to_linear(luma)).z; + let mut xyy = rgb_to_xyy(srgb_to_linear(chroma)); + xyy.z = l; + + linear_to_srgb(xyy_to_rgb(xyy).map(|e| e.min(1.0).max(0.0))) +} diff --git a/common/src/util/dir.rs b/common/src/util/dir.rs new file mode 100644 index 0000000000..4ea54d2bc7 --- /dev/null +++ b/common/src/util/dir.rs @@ -0,0 +1,186 @@ +use vek::*; + +/// Type representing a direction using Vec3 that is normalized and NaN free +/// These properties are enforced actively via panics when `debug_assertions` is +/// enabled +#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize)] +#[serde(into = "SerdeDir")] +#[serde(from = "SerdeDir")] +pub struct Dir(Vec3); +impl Default for Dir { + fn default() -> Self { Self(Vec3::unit_y()) } +} + +// Validate at Deserialization +#[derive(Copy, Clone, Debug, Serialize, Deserialize)] +struct SerdeDir(Vec3); +impl From for Dir { + fn from(dir: SerdeDir) -> Self { + let dir = dir.0; + if dir.map(f32::is_nan).reduce_or() { + warn!("Deserialized dir containing NaNs, replacing with default"); + Default::default() + } else if !dir.is_normalized() { + warn!("Deserialized unnormalized dir, replacing with default"); + Default::default() + } else { + Self(dir) + } + } +} +impl Into for Dir { + fn into(self) -> SerdeDir { SerdeDir(*self) } +} +/*pub enum TryFromVec3Error { + ContainsNans, + NotNormalized, +} + +impl TryFrom> for Dir { + type Error = TryFromVec3Error; + + fn try_from(v: Vec3) -> Result { + if v.map(f32::is_nan).reduce_or() { + Err(TryFromVec3Error::ContainsNans) + } else { + v.try_normalized() + .map(|n| Self(n)) + .ok_or(TryFromVec3Error::NotNormalized) + } + } +}*/ + +impl Dir { + pub fn new(dir: Vec3) -> Self { + debug_assert!(!dir.map(f32::is_nan).reduce_or()); + debug_assert!(dir.is_normalized()); + Self(dir) + } + + pub fn from_unnormalized(dirs: Vec3) -> Option { + dirs.try_normalized().map(|dir| { + #[cfg(debug_assertions)] + { + if dir.map(f32::is_nan).reduce_or() { + panic!("{} => {}", dirs, dir); + } + } + Self(dir) + }) + } + + pub fn slerp(from: Self, to: Self, factor: f32) -> Self { + Self(slerp_normalized(from.0, to.0, factor)) + } + + /// Note: this uses `from` if `to` is unormalizable + pub fn slerp_to_vec3(from: Self, to: Vec3, factor: f32) -> Self { + Self(slerp_to_unnormalized(from.0, to, factor).unwrap_or_else(|e| e)) + } + + pub fn is_valid(&self) -> bool { !self.0.map(f32::is_nan).reduce_or() && self.is_normalized() } +} + +impl std::ops::Deref for Dir { + type Target = Vec3; + + fn deref(&self) -> &Vec3 { &self.0 } +} + +impl From> for Dir { + fn from(dir: Vec3) -> Self { Dir::new(dir.into()) } +} +/// Begone ye NaN's +/// Slerp two `Vec3`s skipping the slerp if their directions are very close +/// This avoids a case where `vek`s slerp produces NaN's +/// Additionally, it avoids unnecessary calculations if they are near identical +/// Assumes `from` and `to` are normalized and returns a normalized vector +#[inline(always)] +fn slerp_normalized(from: vek::Vec3, to: vek::Vec3, factor: f32) -> vek::Vec3 { + debug_assert!(!to.map(f32::is_nan).reduce_or()); + debug_assert!(!from.map(f32::is_nan).reduce_or()); + // Ensure from is normalized + #[cfg(debug_assertions)] + { + if { + let len_sq = from.magnitude_squared(); + len_sq < 0.999 || len_sq > 1.001 + } { + panic!("Called slerp_normalized with unnormalized from: {:?}", from); + } + } + // Ensure to is normalized + #[cfg(debug_assertions)] + { + if { + let len_sq = from.magnitude_squared(); + len_sq < 0.999 || len_sq > 1.001 + } { + panic!("Called slerp_normalized with unnormalized to: {:?}", to); + } + } + + let dot = from.dot(to); + if dot >= 1.0 - 1E-6 { + // Close together, just use to + return to; + } + + let (from, to, factor) = if dot < -0.999 { + // Not linearly independent (slerp will fail since it doesn't check for this) + // Instead we will choose a midpoint and slerp from or to that depending on the + // factor + let mid_dir = if from.z.abs() > 0.999 { + // If vec's lie along the z-axis default to (1, 0, 0) as midpoint + Vec3::unit_x() + } else { + // Default to picking midpoint in the xy plane + Vec3::new(from.y, -from.x, 0.0).normalized() + }; + + if factor > 0.5 { + (mid_dir, to, factor * 2.0 - 1.0) + } else { + (from, mid_dir, factor * 2.0) + } + } else { + (from, to, factor) + }; + + let slerped = Vec3::slerp(from, to, factor); + let slerped_normalized = slerped.normalized(); + // Ensure normalization worked + // This should not be possible but I will leave it here for now just in case + // something was missed + #[cfg(debug_assertions)] + { + if !slerped_normalized.is_normalized() || slerped_normalized.map(f32::is_nan).reduce_or() { + panic!( + "Failed to normalize {:?} produced from:\nslerp(\n {:?},\n {:?},\n \ + {:?},\n)\nWith result: {:?})", + slerped, from, to, factor, slerped_normalized + ); + } + } + + slerped_normalized +} + +/// Begone ye NaN's +/// Slerp two `Vec3`s skipping the slerp if their directions are very close +/// This avoids a case where `vek`s slerp produces NaN's +/// Additionally, it avoids unnecessary calculations if they are near identical +/// Assumes `from` is normalized and returns a normalized vector, but `to` +/// doesn't need to be normalized +/// Returns `Err(from)`` if `to` is unormalizable +// TODO: in some cases we might want to base the slerp rate on the magnitude of +// `to` for example when `to` is velocity and `from` is orientation +fn slerp_to_unnormalized( + from: Vec3, + to: Vec3, + factor: f32, +) -> Result, Vec3> { + to.try_normalized() + .map(|to| slerp_normalized(from, to, factor)) + .ok_or(from) +} diff --git a/common/src/util/mod.rs b/common/src/util/mod.rs index 83e1aee722..ff0d99e80b 100644 --- a/common/src/util/mod.rs +++ b/common/src/util/mod.rs @@ -1,142 +1,12 @@ +mod color; +mod dir; + pub const GIT_VERSION: &str = include_str!(concat!(env!("OUT_DIR"), "/githash")); lazy_static::lazy_static! { - pub static ref GIT_HASH: &'static str = include_str!(concat!(env!("OUT_DIR"), "/githash")).split("/").nth(0).expect("failed to retrieve git_hash!"); - pub static ref GIT_DATE: &'static str = include_str!(concat!(env!("OUT_DIR"), "/githash")).split("/").nth(1).expect("failed to retrieve git_date!"); + pub static ref GIT_HASH: &'static str = GIT_VERSION.split("/").nth(0).expect("failed to retrieve git_hash!"); + pub static ref GIT_DATE: &'static str = GIT_VERSION.split("/").nth(1).expect("failed to retrieve git_date!"); } -use vek::{Mat3, Rgb, Rgba, Vec3}; - -#[inline(always)] -pub fn srgb_to_linear(col: Rgb) -> Rgb { - col.map(|c| { - if c <= 0.104 { - c * 0.08677088 - } else { - 0.012522878 * c + 0.682171111 * c * c + 0.305306011 * c * c * c - } - }) -} -#[inline(always)] -pub fn linear_to_srgb(col: Rgb) -> Rgb { - col.map(|c| { - if c <= 0.0060 { - c * 11.500726 - } else { - let s1 = c.sqrt(); - let s2 = s1.sqrt(); - let s3 = s2.sqrt(); - 0.585122381 * s1 + 0.783140355 * s2 - 0.368262736 * s3 - } - }) -} -#[inline(always)] -pub fn srgba_to_linear(col: Rgba) -> Rgba { - Rgba::from_translucent(srgb_to_linear(Rgb::from(col)), col.a) -} -#[inline(always)] -pub fn linear_to_srgba(col: Rgba) -> Rgba { - Rgba::from_translucent(linear_to_srgb(Rgb::from(col)), col.a) -} - -/// Convert rgb to hsv. Expects rgb to be [0, 1]. -#[inline(always)] -pub fn rgb_to_hsv(rgb: Rgb) -> Vec3 { - let (r, g, b) = rgb.into_tuple(); - let (max, min, diff, add) = { - let (max, min, diff, add) = if r > g { - (r, g, g - b, 0.0) - } else { - (g, r, b - r, 2.0) - }; - if b > max { - (b, min, r - g, 4.0) - } else { - (max, b.min(min), diff, add) - } - }; - - let v = max; - let h = if max == min { - 0.0 - } else { - let mut h = 60.0 * (add + diff / (max - min)); - if h < 0.0 { - h += 360.0; - } - h - }; - let s = if max == 0.0 { 0.0 } else { (max - min) / max }; - - Vec3::new(h, s, v) -} -/// Convert hsv to rgb. Expects h [0, 360], s [0, 1], v [0, 1] -#[inline(always)] -pub fn hsv_to_rgb(hsv: Vec3) -> Rgb { - let (h, s, v) = hsv.into_tuple(); - let c = s * v; - let h = h / 60.0; - let x = c * (1.0 - (h % 2.0 - 1.0).abs()); - let m = v - c; - - let (r, g, b) = if h >= 0.0 && h <= 1.0 { - (c, x, 0.0) - } else if h <= 2.0 { - (x, c, 0.0) - } else if h <= 3.0 { - (0.0, c, x) - } else if h <= 4.0 { - (0.0, x, c) - } else if h <= 5.0 { - (x, 0.0, c) - } else { - (c, 0.0, x) - }; - - Rgb::new(r + m, g + m, b + m) -} -/// Convert linear rgb to CIExyY -#[inline(always)] -pub fn rgb_to_xyy(rgb: Rgb) -> Vec3 { - // XYZ - let xyz = Mat3::new( - 0.4124, 0.3576, 0.1805, 0.2126, 0.7152, 0.0722, 0.0193, 0.1192, 0.9504, - ) * Vec3::from(rgb); - - let sum = xyz.sum(); - Vec3::new(xyz.x / sum, xyz.y / sum, xyz.y) -} -/// Convert to CIExyY to linear rgb -#[inline(always)] -pub fn xyy_to_rgb(xyy: Vec3) -> Rgb { - let xyz = Vec3::new( - xyy.z / xyy.y * xyy.x, - xyy.z, - xyy.z / xyy.y * (1.0 - xyy.x - xyy.y), - ); - - Rgb::from( - Mat3::new( - 3.2406, -1.5372, -0.4986, -0.9689, 1.8758, 0.0415, 0.0557, -0.2040, 1.0570, - ) * xyz, - ) -} - -// TO-DO: speed this up -#[inline(always)] -pub fn saturate_srgb(col: Rgb, value: f32) -> Rgb { - let mut hsv = rgb_to_hsv(srgb_to_linear(col)); - hsv.y *= 1.0 + value; - linear_to_srgb(hsv_to_rgb(hsv).map(|e| e.min(1.0).max(0.0))) -} - -/// Preserves the luma of one color while changing its chromaticty to match the -/// other -#[inline(always)] -pub fn chromify_srgb(luma: Rgb, chroma: Rgb) -> Rgb { - let l = rgb_to_xyy(srgb_to_linear(luma)).z; - let mut xyy = rgb_to_xyy(srgb_to_linear(chroma)); - xyy.z = l; - - linear_to_srgb(xyy_to_rgb(xyy).map(|e| e.min(1.0).max(0.0))) -} +pub use color::*; +pub use dir::*; diff --git a/rust-toolchain b/rust-toolchain index 47892367f9..be5bcdaf12 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1 +1 @@ -nightly-2020-02-06 +nightly-2020-03-05 diff --git a/server-cli/Dockerfile b/server-cli/Dockerfile index eacecc7846..ee9c4009a5 100644 --- a/server-cli/Dockerfile +++ b/server-cli/Dockerfile @@ -2,7 +2,9 @@ FROM debian:stable-slim ARG PROJECTNAME=server-cli -COPY ./server-cli/docker-run.sh /opt/docker-run.sh COPY ./veloren-server-cli /opt/veloren-server-cli COPY ./assets/common /opt/assets/common COPY ./assets/world /opt/assets/world + +WORKDIR /opt +CMD [ "sh", "-c", "RUST_LOG=info,common=debug,common::net=info RUST_BACKTRACE=1 /opt/veloren-server-cli" ] diff --git a/server-cli/docker-compose.yml b/server-cli/docker-compose.yml index ba9badf7de..d4e52b364f 100644 --- a/server-cli/docker-compose.yml +++ b/server-cli/docker-compose.yml @@ -1,4 +1,4 @@ -version: "3.7" +version: "3.5" services: game-server: @@ -11,7 +11,14 @@ services: update_config: parallelism: 2 delay: 10s - order: stop-first + order: stop-first failure_action: rollback restart_policy: condition: on-failure + watchtower: + image: containrrr/watchtower + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - /root/.docker/config.json:/config.json + command: --interval 30 --cleanup + diff --git a/server-cli/docker-run.sh b/server-cli/docker-run.sh deleted file mode 100755 index e965090fdb..0000000000 --- a/server-cli/docker-run.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -cd /opt -RUST_LOG=info,common=debug,common::net=info RUST_BACKTRACE=1 /opt/veloren-server-cli diff --git a/server-cli/src/main.rs b/server-cli/src/main.rs index 466d5d9b79..0702f341e1 100644 --- a/server-cli/src/main.rs +++ b/server-cli/src/main.rs @@ -9,9 +9,12 @@ const TPS: u64 = 30; fn main() { // Init logging + if let Err(_) = std::env::var("RUST_LOG") { + std::env::set_var("RUST_LOG", "info"); + } pretty_env_logger::init(); - info!("Starting server-cli..."); + info!("Starting server..."); // Set up an fps clock let mut clock = Clock::start(); @@ -23,7 +26,7 @@ fn main() { // Create server let mut server = Server::new(settings).expect("Failed to create server instance!"); - info!("Server is ready to accept connections"); + info!("Server is ready to accept connections."); info!("Metrics port: {}", metrics_port); loop { diff --git a/server/Cargo.toml b/server/Cargo.toml index c86adf42d8..e93df3f701 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -16,7 +16,7 @@ specs-idvs = { git = "https://gitlab.com/veloren/specs-idvs.git" } log = "0.4.8" specs = { version = "0.15.1", features = ["shred-derive"] } -vek = "0.9.9" +vek = "0.10.0" uvth = "3.1.1" lazy_static = "1.4.0" scan_fmt = "0.2.4" diff --git a/server/src/cmd.rs b/server/src/cmd.rs index 096f75df5a..b9a107d4d8 100644 --- a/server/src/cmd.rs +++ b/server/src/cmd.rs @@ -12,6 +12,7 @@ use common::{ state::TimeOfDay, sync::{Uid, WorldSyncExt}, terrain::TerrainChunkSize, + util::Dir, vol::RectVolSize, }; use rand::Rng; @@ -504,7 +505,8 @@ fn handle_spawn(server: &mut Server, entity: EcsEntity, args: String, action: &C .state .create_npc( pos, - comp::Stats::new(get_npc_name(id).into(), body, None), + comp::Stats::new(get_npc_name(id).into(), body), + comp::Loadout::default(), body, ) .with(comp::Vel(vel)) @@ -710,15 +712,14 @@ fn handle_object(server: &mut Server, entity: EcsEntity, args: String, _action: .with(comp::Ori( // converts player orientation into a 90° rotation for the object by using the axis // with the highest value - ori.0 - .map(|e| { - if e.abs() == ori.0.map(|e| e.abs()).reduce_partial_max() { - e - } else { - 0.0 - } - }) - .normalized(), + Dir::from_unnormalized(ori.0.map(|e| { + if e.abs() == ori.0.map(|e| e.abs()).reduce_partial_max() { + e + } else { + 0.0 + } + })) + .unwrap_or_default(), )) .build(); server.notify_client( @@ -828,14 +829,18 @@ fn handle_lantern(server: &mut Server, entity: EcsEntity, args: String, action: } fn handle_explosion(server: &mut Server, entity: EcsEntity, args: String, action: &ChatCommand) { - let radius = scan_fmt!(&args, action.arg_fmt, f32).unwrap_or(8.0); + let power = scan_fmt!(&args, action.arg_fmt, f32).unwrap_or(8.0); + let ecs = server.state.ecs(); match server.state.read_component_cloned::(entity) { - Some(pos) => server - .state - .ecs() - .read_resource::>() - .emit(ServerEvent::Explosion { pos: pos.0, radius }), + Some(pos) => { + ecs.read_resource::>() + .emit_now(ServerEvent::Explosion { + pos: pos.0, + power, + owner: ecs.read_storage::().get(entity).copied(), + }) + }, None => server.notify_client( entity, ServerMsg::private(String::from("You have no position!")), diff --git a/server/src/events/entity_creation.rs b/server/src/events/entity_creation.rs index 642795c0cd..77987794ab 100644 --- a/server/src/events/entity_creation.rs +++ b/server/src/events/entity_creation.rs @@ -1,7 +1,10 @@ use crate::{sys, Server, StateExt}; -use common::comp::{ - self, Agent, Alignment, Body, Gravity, LightEmitter, Pos, Projectile, Scale, Stats, Vel, - WaypointArea, +use common::{ + comp::{ + self, Agent, Alignment, Body, Gravity, LightEmitter, Loadout, Pos, Projectile, Scale, + Stats, Vel, WaypointArea, + }, + util::Dir, }; use specs::{Builder, Entity as EcsEntity, WorldExt}; use vek::{Rgb, Vec3}; @@ -24,6 +27,7 @@ pub fn handle_create_npc( server: &mut Server, pos: Pos, stats: Stats, + loadout: Loadout, body: Body, agent: Agent, alignment: Alignment, @@ -31,7 +35,7 @@ pub fn handle_create_npc( ) { server .state - .create_npc(pos, stats, body) + .create_npc(pos, stats, loadout, body) .with(agent) .with(scale) .with(alignment) @@ -41,7 +45,7 @@ pub fn handle_create_npc( pub fn handle_shoot( server: &mut Server, entity: EcsEntity, - dir: Vec3, + dir: Dir, body: Body, light: Option, projectile: Projectile, @@ -59,7 +63,7 @@ pub fn handle_shoot( // TODO: Player height pos.z += 1.2; - let mut builder = state.create_projectile(Pos(pos), Vel(dir * 100.0), body, projectile); + let mut builder = state.create_projectile(Pos(pos), Vel(*dir * 100.0), body, projectile); if let Some(light) = light { builder = builder.with(light) } diff --git a/server/src/events/entity_manipulation.rs b/server/src/events/entity_manipulation.rs index 022c17ce74..59eb020f02 100644 --- a/server/src/events/entity_manipulation.rs +++ b/server/src/events/entity_manipulation.rs @@ -1,14 +1,16 @@ use crate::{client::Client, Server, SpawnPoint, StateExt}; use common::{ - comp::{self, HealthChange, HealthSource, Player, Stats}, + assets, + comp::{self, object, Body, HealthChange, HealthSource, Item, Player, Stats}, msg::ServerMsg, state::BlockChange, sync::{Uid, WorldSyncExt}, + sys::combat::{BLOCK_ANGLE, BLOCK_EFFICIENCY}, terrain::{Block, TerrainGrid}, vol::{ReadVol, Vox}, }; use log::error; -use specs::{Entity as EcsEntity, WorldExt}; +use specs::{join::Join, Entity as EcsEntity, WorldExt}; use vek::Vec3; pub fn handle_damage(server: &Server, uid: Uid, change: HealthChange) { @@ -26,7 +28,9 @@ pub fn handle_destroy(server: &mut Server, entity: EcsEntity, cause: HealthSourc // Chat message if let Some(player) = state.ecs().read_storage::().get(entity) { - let msg = if let HealthSource::Attack { by } = cause { + let msg = if let HealthSource::Attack { by } + | HealthSource::Projectile { owner: Some(by) } = cause + { state.ecs().entity_from_uid(by.into()).and_then(|attacker| { state .ecs() @@ -48,7 +52,9 @@ pub fn handle_destroy(server: &mut Server, entity: EcsEntity, cause: HealthSourc // Give EXP to the killer if entity had stats let mut stats = state.ecs().write_storage::(); if let Some(entity_stats) = stats.get(entity).cloned() { - if let HealthSource::Attack { by } = cause { + if let HealthSource::Attack { by } | HealthSource::Projectile { owner: Some(by) } = + cause + { state.ecs().entity_from_uid(by.into()).map(|attacker| { if let Some(attacker_stats) = stats.get_mut(attacker) { // TODO: Discuss whether we should give EXP by Player @@ -90,10 +96,43 @@ pub fn handle_destroy(server: &mut Server, entity: EcsEntity, cause: HealthSourc .write_storage::() .insert(entity, comp::CharacterState::default()); } else { + if state.ecs().read_storage::().contains(entity) { + // Replace npc with loot + let _ = state + .ecs() + .write_storage() + .insert(entity, Body::Object(object::Body::Pouch)); + let _ = state.ecs().write_storage().insert( + entity, + assets::load_expect_cloned::("common.items.cheese"), + ); + state.ecs().write_storage::().remove(entity); + state.ecs().write_storage::().remove(entity); + state + .ecs() + .write_storage::() + .remove(entity); + state + .ecs() + .write_storage::() + .remove(entity); + state + .ecs() + .write_storage::() + .remove(entity); + } else { + if let Err(err) = state.delete_entity_recorded(entity) { + error!("Failed to delete destroyed entity: {:?}", err); + } + } + + // TODO: Add Delete(time_left: Duration) component + /* // If not a player delete the entity if let Err(err) = state.delete_entity_recorded(entity) { error!("Failed to delete destroyed entity: {:?}", err); } + */ } } @@ -151,9 +190,51 @@ pub fn handle_respawn(server: &Server, entity: EcsEntity) { } } -pub fn handle_explosion(server: &Server, pos: Vec3, radius: f32) { +pub fn handle_explosion(server: &Server, pos: Vec3, power: f32, owner: Option) { + // Go through all other entities + let hit_range = 3.0 * power; + let ecs = &server.state.ecs(); + for (pos_b, ori_b, character_b, stats_b) in ( + &ecs.read_storage::(), + &ecs.read_storage::(), + &ecs.read_storage::(), + &mut ecs.write_storage::(), + ) + .join() + { + let distance_squared = pos.distance_squared(pos_b.0); + // Check if it is a hit + if !stats_b.is_dead + // Spherical wedge shaped attack field + // RADIUS + && distance_squared < hit_range.powi(2) + { + // Weapon gives base damage + let mut dmg = ((1.0 - distance_squared / hit_range.powi(2)) * power * 10.0) as u32; + + if rand::random() { + dmg += 1; + } + + // Block + if character_b.is_block() + && ori_b.0.angle_between(pos - pos_b.0) < BLOCK_ANGLE.to_radians() / 2.0 + { + dmg = (dmg as f32 * (1.0 - BLOCK_EFFICIENCY)) as u32 + } + + stats_b.health.change_by(HealthChange { + amount: -(dmg as i32), + cause: HealthSource::Projectile { owner }, + }); + } + } + const RAYS: usize = 500; + // Color terrain + let mut touched_blocks = Vec::new(); + let color_range = power * 2.7; for _ in 0..RAYS { let dir = Vec3::new( rand::random::() - 0.5, @@ -162,12 +243,44 @@ pub fn handle_explosion(server: &Server, pos: Vec3, radius: f32) { ) .normalized(); - let ecs = server.state.ecs(); - let mut block_change = ecs.write_resource::(); + let _ = ecs + .read_resource::() + .ray(pos, pos + dir * color_range) + .until(|_| rand::random::() < 0.05) + .for_each(|pos| touched_blocks.push(pos)) + .cast(); + } + + let terrain = ecs.read_resource::(); + let mut block_change = ecs.write_resource::(); + for block_pos in touched_blocks { + if let Ok(block) = terrain.get(block_pos) { + let diff2 = block_pos.map(|b| b as f32).distance_squared(pos); + let fade = (1.0 - diff2 / color_range.powi(2)).max(0.0); + if let Some(mut color) = block.get_color() { + let r = color[0] as f32 + (fade * (color[0] as f32 * 0.5 - color[0] as f32)); + let g = color[1] as f32 + (fade * (color[1] as f32 * 0.3 - color[1] as f32)); + let b = color[2] as f32 + (fade * (color[2] as f32 * 0.3 - color[2] as f32)); + color[0] = r as u8; + color[1] = g as u8; + color[2] = b as u8; + block_change.set(block_pos, Block::new(block.kind(), color)); + } + } + } + + // Destroy terrain + for _ in 0..RAYS { + let dir = Vec3::new( + rand::random::() - 0.5, + rand::random::() - 0.5, + rand::random::() - 0.15, + ) + .normalized(); let _ = ecs .read_resource::() - .ray(pos, pos + dir * radius) + .ray(pos, pos + dir * power) .until(|_| rand::random::() < 0.05) .for_each(|pos| block_change.set(pos, Block::empty())) .cast(); diff --git a/server/src/events/interaction.rs b/server/src/events/interaction.rs index 7d7e3fd124..9f34e6d8ed 100644 --- a/server/src/events/interaction.rs +++ b/server/src/events/interaction.rs @@ -3,7 +3,8 @@ use crate::{ Server, }; use common::{ - assets, comp, + assets, + comp::{self, item}, msg::ServerMsg, sync::{Uid, WorldSyncExt}, }; @@ -66,6 +67,16 @@ pub fn handle_possess(server: &Server, possessor_uid: Uid, possesse_uid: Uid) { ecs.entity_from_uid(possessor_uid.into()), ecs.entity_from_uid(possesse_uid.into()), ) { + // Check that entities still exist + if !(possessor.gen().is_alive() && ecs.is_alive(possessor)) + || !(possesse.gen().is_alive() && ecs.is_alive(possesse)) + { + error!( + "Error possessing! either the possessor entity or possesse entity no longer exists" + ); + return; + } + // You can't possess other players let mut clients = ecs.write_storage::(); if clients.get_mut(possesse).is_none() { @@ -77,46 +88,29 @@ pub fn handle_possess(server: &Server, possessor_uid: Uid, possesse_uid: Uid) { e ) }); - // Create inventory if it doesn't exist - { - let mut inventories = ecs.write_storage::(); - if let Some(inventory) = inventories.get_mut(possesse) { - inventory.push(assets::load_expect_cloned("common.items.debug.possess")); - } else { - inventories - .insert(possesse, comp::Inventory { - slots: vec![ - Some(assets::load_expect_cloned("common.items.debug.possess")), - None, - None, - None, - None, - None, - None, - None, - ], - }) - .err() - .map(|e| { - error!( - "Error inserting inventory component during possession: {:?}", - e - ) - }); - } + // Put possess item into loadout + let mut loadouts = ecs.write_storage::(); + let loadout = loadouts + .entry(possesse) + .expect("Could not read loadouts component while possessing") + .or_insert(comp::Loadout::default()); + + let item = assets::load_expect_cloned::("common.items.debug.possess"); + if let item::ItemKind::Tool(tool) = item.kind { + let mut abilities = tool.get_abilities(); + let mut ability_drain = abilities.drain(..); + let debug_item = comp::ItemConfig { + item, + ability1: ability_drain.next(), + ability2: ability_drain.next(), + ability3: ability_drain.next(), + block_ability: None, + dodge_ability: None, + }; + std::mem::swap(&mut loadout.active_item, &mut loadout.second_item); + loadout.active_item = Some(debug_item); } - ecs.write_storage::() - .insert( - possesse, - comp::InventoryUpdate::new(comp::InventoryUpdateEvent::Possession), - ) - .err() - .map(|e| { - error!( - "Error inserting inventory update component during possession: {:?}", - e - ) - }); + // Move player component { let mut players = ecs.write_storage::(); diff --git a/server/src/events/inventory_manip.rs b/server/src/events/inventory_manip.rs index 1973410290..f5929ec4f5 100644 --- a/server/src/events/inventory_manip.rs +++ b/server/src/events/inventory_manip.rs @@ -1,6 +1,6 @@ use crate::{Server, StateExt}; use common::{ - comp::{self, Pos, MAX_PICKUP_RANGE_SQR}, + comp::{self, item, Pos, MAX_PICKUP_RANGE_SQR}, sync::WorldSyncExt, terrain::block::Block, vol::{ReadVol, Vox}, @@ -83,38 +83,77 @@ pub fn handle_inventory(server: &mut Server, entity: EcsEntity, manip: comp::Inv } }, - comp::InventoryManip::Use(slot) => { + comp::InventoryManip::Use(slot_idx) => { let item_opt = state .ecs() .write_storage::() .get_mut(entity) - .and_then(|inv| inv.remove(slot)); + .and_then(|inv| inv.take(slot_idx)); let mut event = comp::InventoryUpdateEvent::Used; if let Some(item) = item_opt { - match item.kind { - comp::ItemKind::Tool { .. } => { - if let Some(stats) = - state.ecs().write_storage::().get_mut(entity) + match &item.kind { + item::ItemKind::Tool(tool) => { + if let Some(loadout) = + state.ecs().write_storage::().get_mut(entity) { // Insert old item into inventory - if let Some(old_item) = stats.equipment.main.take() { + if let Some(old_item) = loadout.active_item.take() { state .ecs() .write_storage::() .get_mut(entity) - .map(|inv| inv.insert(slot, old_item)); + .map(|inv| inv.insert(slot_idx, old_item.item)); } - stats.equipment.main = Some(item); + let mut abilities = tool.get_abilities(); + let mut ability_drain = abilities.drain(..); + let active_item = comp::ItemConfig { + item, + ability1: ability_drain.next(), + ability2: ability_drain.next(), + ability3: ability_drain.next(), + block_ability: Some(comp::CharacterAbility::BasicBlock), + dodge_ability: Some(comp::CharacterAbility::Roll), + }; + loadout.active_item = Some(active_item); } }, - comp::ItemKind::Consumable { kind, effect } => { - event = comp::InventoryUpdateEvent::Consumed(kind); - state.apply_effect(entity, effect); + + item::ItemKind::Consumable { kind, effect, .. } => { + event = comp::InventoryUpdateEvent::Consumed(*kind); + state.apply_effect(entity, *effect); }, - comp::ItemKind::Utility { kind } => match kind { + + item::ItemKind::Armor { kind, .. } => { + if let Some(loadout) = + state.ecs().write_storage::().get_mut(entity) + { + use comp::item::armor::Armor::*; + let slot = match kind.clone() { + Shoulder(_) => &mut loadout.shoulder, + Chest(_) => &mut loadout.chest, + Belt(_) => &mut loadout.belt, + Hand(_) => &mut loadout.hand, + Pants(_) => &mut loadout.pants, + Foot(_) => &mut loadout.foot, + }; + + // Insert old item into inventory + if let Some(old_item) = slot.take() { + state + .ecs() + .write_storage::() + .get_mut(entity) + .map(|inv| inv.insert(slot_idx, old_item)); + } + + *slot = Some(item); + } + }, + + item::ItemKind::Utility { kind, .. } => match kind { comp::item::Utility::Collar => { let reinsert = if let Some(pos) = state.read_storage::().get(entity) @@ -171,7 +210,7 @@ pub fn handle_inventory(server: &mut Server, entity: EcsEntity, manip: comp::Inv .ecs() .write_storage::() .get_mut(entity) - .map(|inv| inv.insert(slot, item)); + .map(|inv| inv.insert(slot_idx, item)); } }, }, @@ -180,7 +219,7 @@ pub fn handle_inventory(server: &mut Server, entity: EcsEntity, manip: comp::Inv .ecs() .write_storage::() .get_mut(entity) - .map(|inv| inv.insert(slot, item)); + .map(|inv| inv.insert(slot_idx, item)); }, } } @@ -217,7 +256,7 @@ pub fn handle_inventory(server: &mut Server, entity: EcsEntity, manip: comp::Inv .read_storage::() .get(entity) .copied() - .unwrap_or(comp::Ori(Vec3::unit_y())), + .unwrap_or_default(), item, )); } @@ -230,7 +269,7 @@ pub fn handle_inventory(server: &mut Server, entity: EcsEntity, manip: comp::Inv // Drop items for (pos, ori, item) in dropped_items { - let vel = ori.0.normalized() * 5.0 + let vel = *ori.0 * 5.0 + Vec3::unit_z() * 10.0 + Vec3::::zero().map(|_| rand::thread_rng().gen::() - 0.5) * 4.0; diff --git a/server/src/events/mod.rs b/server/src/events/mod.rs index dd9f3b332c..22607c185a 100644 --- a/server/src/events/mod.rs +++ b/server/src/events/mod.rs @@ -45,7 +45,9 @@ impl Server { for event in events { match event { - ServerEvent::Explosion { pos, radius } => handle_explosion(&self, pos, radius), + ServerEvent::Explosion { pos, power, owner } => { + handle_explosion(&self, pos, power, owner) + }, ServerEvent::Shoot { entity, dir, @@ -76,11 +78,12 @@ impl Server { ServerEvent::CreateNpc { pos, stats, + loadout, body, agent, alignment, scale, - } => handle_create_npc(self, pos, stats, body, agent, alignment, scale), + } => handle_create_npc(self, pos, stats, loadout, body, agent, alignment, scale), ServerEvent::CreateWaypoint(pos) => handle_create_waypoint(self, pos), ServerEvent::ClientDisconnect(entity) => { frontend_events.push(handle_client_disconnect(self, entity)) diff --git a/server/src/lib.rs b/server/src/lib.rs index faedb28664..5c83b273a7 100644 --- a/server/src/lib.rs +++ b/server/src/lib.rs @@ -83,7 +83,6 @@ impl Server { pub fn new(settings: ServerSettings) -> Result { let mut state = State::default(); state.ecs_mut().insert(EventBus::::default()); - // TODO: anything but this state .ecs_mut() .insert(AuthProvider::new(settings.auth_server_address.clone())); @@ -209,6 +208,11 @@ impl Server { server_settings: settings.clone(), }; debug!("created veloren server with: {:?}", &settings); + log::info!( + "Server version: {}[{}]", + *common::util::GIT_HASH, + *common::util::GIT_DATE + ); Ok(this) } @@ -473,7 +477,7 @@ impl Server { .notify(ServerMsg::InitialSync { // Send client their entity entity_package: TrackedComps::fetch(&self.state.ecs()) - .create_entity_package(entity), + .create_entity_package(entity, None, None, None), server_info: self.server_info.clone(), time_of_day: *self.state.ecs().read_resource(), world_map: self.map.clone(), diff --git a/server/src/state_ext.rs b/server/src/state_ext.rs index 421dfc9fe7..458339b690 100644 --- a/server/src/state_ext.rs +++ b/server/src/state_ext.rs @@ -1,10 +1,12 @@ use crate::{client::Client, settings::ServerSettings, sys::sentinel::DeletedEntities, SpawnPoint}; use common::{ - assets, comp, + assets, + comp::{self, item}, effect::Effect, msg::{ClientState, ServerMsg}, state::State, sync::{Uid, WorldSyncExt}, + util::Dir, }; use log::warn; use specs::{Builder, Entity as EcsEntity, EntityBuilder as EcsEntityBuilder, Join, WorldExt}; @@ -17,6 +19,7 @@ pub trait StateExt { &mut self, pos: comp::Pos, stats: comp::Stats, + loadout: comp::Loadout, body: comp::Body, ) -> EcsEntityBuilder; fn create_object(&mut self, pos: comp::Pos, object: comp::object::Body) -> EcsEntityBuilder; @@ -81,13 +84,14 @@ impl StateExt for State { &mut self, pos: comp::Pos, stats: comp::Stats, + loadout: comp::Loadout, body: comp::Body, ) -> EcsEntityBuilder { self.ecs_mut() .create_entity_synced() .with(pos) .with(comp::Vel(Vec3::zero())) - .with(comp::Ori(Vec3::unit_y())) + .with(comp::Ori::default()) .with(comp::Controller::default()) .with(body) .with(stats) @@ -95,6 +99,7 @@ impl StateExt for State { .with(comp::Energy::new(500)) .with(comp::Gravity(1.0)) .with(comp::CharacterState::default()) + .with(loadout) } /// Build a static object entity @@ -103,7 +108,7 @@ impl StateExt for State { .create_entity_synced() .with(pos) .with(comp::Vel(Vec3::zero())) - .with(comp::Ori(Vec3::unit_y())) + .with(comp::Ori::default()) .with(comp::Body::Object(object)) .with(comp::Mass(100.0)) .with(comp::Gravity(1.0)) @@ -122,7 +127,7 @@ impl StateExt for State { .create_entity_synced() .with(pos) .with(vel) - .with(comp::Ori(vel.0.normalized())) + .with(comp::Ori(Dir::from_unnormalized(vel.0).unwrap_or_default())) .with(comp::Mass(0.0)) .with(body) .with(projectile) @@ -138,17 +143,17 @@ impl StateExt for State { server_settings: &ServerSettings, ) { // Give no item when an invalid specifier is given - let main = main.and_then(|specifier| assets::load_cloned(&specifier).ok()); + let main = main.and_then(|specifier| assets::load_cloned::(&specifier).ok()); let spawn_point = self.ecs().read_resource::().0; self.write_component(entity, body); - self.write_component(entity, comp::Stats::new(name, body, main)); + self.write_component(entity, comp::Stats::new(name, body)); self.write_component(entity, comp::Energy::new(1000)); self.write_component(entity, comp::Controller::default()); self.write_component(entity, comp::Pos(spawn_point)); self.write_component(entity, comp::Vel(Vec3::zero())); - self.write_component(entity, comp::Ori(Vec3::unit_y())); + self.write_component(entity, comp::Ori::default()); self.write_component(entity, comp::Gravity(1.0)); self.write_component(entity, comp::CharacterState::default()); self.write_component(entity, comp::Alignment::Owned(entity)); @@ -157,6 +162,34 @@ impl StateExt for State { entity, comp::InventoryUpdate::new(comp::InventoryUpdateEvent::default()), ); + + self.write_component( + entity, + if let Some(item::ItemKind::Tool(tool)) = main.as_ref().map(|i| &i.kind) { + let mut abilities = tool.get_abilities(); + let mut ability_drain = abilities.drain(..); + comp::Loadout { + active_item: main.map(|item| comp::ItemConfig { + item, + ability1: ability_drain.next(), + ability2: ability_drain.next(), + ability3: ability_drain.next(), + block_ability: Some(comp::CharacterAbility::BasicBlock), + dodge_ability: Some(comp::CharacterAbility::Roll), + }), + second_item: None, + shoulder: None, + chest: None, + belt: None, + hand: None, + pants: None, + foot: None, + } + } else { + comp::Loadout::default() + }, + ); + // Make sure physics are accepted. self.write_component(entity, comp::ForceUpdate); diff --git a/server/src/sys/entity_sync.rs b/server/src/sys/entity_sync.rs index 62bc7521a7..619458d61c 100644 --- a/server/src/sys/entity_sync.rs +++ b/server/src/sys/entity_sync.rs @@ -7,11 +7,11 @@ use crate::{ Tick, }; use common::{ - comp::{CharacterState, ForceUpdate, Inventory, InventoryUpdate, Last, Ori, Pos, Vel}, + comp::{ForceUpdate, Inventory, InventoryUpdate, Last, Ori, Pos, Vel}, msg::ServerMsg, region::{Event as RegionEvent, RegionMap}, state::TimeOfDay, - sync::Uid, + sync::{CompSyncPackage, Uid}, }; use specs::{ Entities, Entity as EcsEntity, Join, Read, ReadExpect, ReadStorage, System, Write, WriteStorage, @@ -30,13 +30,11 @@ impl<'a> System<'a> for Sys { ReadStorage<'a, Pos>, ReadStorage<'a, Vel>, ReadStorage<'a, Ori>, - ReadStorage<'a, CharacterState>, ReadStorage<'a, Inventory>, ReadStorage<'a, RegionSubscription>, WriteStorage<'a, Last>, WriteStorage<'a, Last>, WriteStorage<'a, Last>, - WriteStorage<'a, Last>, WriteStorage<'a, Client>, WriteStorage<'a, ForceUpdate>, WriteStorage<'a, InventoryUpdate>, @@ -57,13 +55,11 @@ impl<'a> System<'a> for Sys { positions, velocities, orientations, - character_states, inventories, subscriptions, mut last_pos, mut last_vel, mut last_ori, - mut last_character_state, mut clients, mut force_updates, mut inventory_updates, @@ -116,22 +112,18 @@ impl<'a> System<'a> for Sys { continue; } let entity = entities.entity(*id); - if let Some((uid, pos, vel, ori, character_state)) = - uids.get(entity).and_then(|uid| { - positions.get(entity).map(|pos| { - ( - uid, - pos, - velocities.get(entity), - orientations.get(entity), - character_states.get(entity), - ) - }) + if let Some((_uid, pos, vel, ori)) = uids.get(entity).and_then(|uid| { + positions.get(entity).map(|pos| { + (uid, pos, velocities.get(entity), orientations.get(entity)) }) - { - let create_msg = ServerMsg::CreateEntity( - tracked_comps.create_entity_package(entity), - ); + }) { + let create_msg = + ServerMsg::CreateEntity(tracked_comps.create_entity_package( + entity, + Some(*pos), + vel.copied(), + ori.copied(), + )); for (client, regions, client_entity, _) in &mut subscribers { if maybe_key .as_ref() @@ -141,14 +133,6 @@ impl<'a> System<'a> for Sys { && *client_entity != entity { client.notify(create_msg.clone()); - send_initial_unsynced_components( - client, - uid, - pos, - vel, - ori, - character_state, - ); } } } @@ -172,18 +156,19 @@ impl<'a> System<'a> for Sys { // Sync tracked components // Get deleted entities in this region from DeletedEntities - let sync_msg = ServerMsg::EcsSync( - trackers.create_sync_package( - &tracked_comps, - region.entities(), - deleted_entities - .take_deleted_in_region(key) - .unwrap_or_else(|| Vec::new()), - ), + let (entity_sync_package, comp_sync_package) = trackers.create_sync_packages( + &tracked_comps, + region.entities(), + deleted_entities + .take_deleted_in_region(key) + .unwrap_or_else(|| Vec::new()), ); - for (client, _, _, _) in &mut subscribers { - client.notify(sync_msg.clone()); - } + let entity_sync_msg = ServerMsg::EntitySync(entity_sync_package); + let comp_sync_msg = ServerMsg::CompSync(comp_sync_package); + subscribers.iter_mut().for_each(move |(client, _, _, _)| { + client.notify(entity_sync_msg.clone()); + client.notify(comp_sync_msg.clone()); + }); let mut send_msg = |msg: ServerMsg, entity: EcsEntity, @@ -191,117 +176,112 @@ impl<'a> System<'a> for Sys { force_update: Option<&ForceUpdate>, throttle: bool| { for (client, _, client_entity, client_pos) in &mut subscribers { - let update = if client_entity == &entity { + if if client_entity == &entity { // Don't send client physics updates about itself unless force update is set force_update.is_some() } else if !throttle { - // Update rate not thottled by distance + // Send the message if not throttling true } else { // Throttle update rate based on distance to client let distance_sq = client_pos.0.distance_squared(pos.0); + let id_staggered_tick = tick + entity.id() as u64; // More entities farther away so checks start there if distance_sq > 300.0f32.powi(2) { - (tick + entity.id() as u64) % 32 == 0 + id_staggered_tick % 32 == 0 } else if distance_sq > 250.0f32.powi(2) { - (tick + entity.id() as u64) % 16 == 0 + id_staggered_tick % 16 == 0 } else if distance_sq > 200.0f32.powi(2) { - (tick + entity.id() as u64) % 8 == 0 + id_staggered_tick % 8 == 0 } else if distance_sq > 150.0f32.powi(2) { - (tick + entity.id() as u64) % 4 == 0 + id_staggered_tick % 4 == 0 } else if distance_sq > 100.0f32.powi(2) { - (tick + entity.id() as u64) % 2 == 0 + id_staggered_tick % 2 == 0 } else { true // Closer than 100 blocks } - }; - - if update { + } { client.notify(msg.clone()); } } }; // Sync physics components - for (_, entity, &uid, &pos, maybe_vel, maybe_ori, character_state, force_update) in ( + for (_, entity, &uid, &pos, maybe_vel, maybe_ori, force_update) in ( region.entities(), &entities, &uids, &positions, velocities.maybe(), orientations.maybe(), - character_states.maybe(), force_updates.maybe(), ) .join() { + let mut comp_sync_package = CompSyncPackage::new(); + let mut throttle = true; // TODO: An entity that stoppped moving on a tick that it wasn't sent to the // player will never have it's position updated - if last_pos.get(entity).map(|&l| l.0 != pos).unwrap_or(true) { - let _ = last_pos.insert(entity, Last(pos)); - send_msg( - ServerMsg::EntityPos { - entity: uid.into(), - pos, - }, - entity, - pos, - force_update, - true, - ); + match last_pos.get(entity).map(|&l| l.0 != pos) { + Some(false) => {}, + Some(true) => { + let _ = last_pos.insert(entity, Last(pos)); + comp_sync_package.comp_modified(uid, pos); + }, + None => { + let _ = last_pos.insert(entity, Last(pos)); + throttle = false; + comp_sync_package.comp_inserted(uid, pos); + }, } if let Some(&vel) = maybe_vel { - if last_vel.get(entity).map(|&l| l.0 != vel).unwrap_or(true) { - let _ = last_vel.insert(entity, Last(vel)); - send_msg( - ServerMsg::EntityVel { - entity: uid.into(), - vel, - }, - entity, - pos, - force_update, - true, - ); + match last_vel.get(entity).map(|&l| l.0 != vel) { + Some(false) => {}, + Some(true) => { + let _ = last_vel.insert(entity, Last(vel)); + comp_sync_package.comp_modified(uid, vel); + }, + None => { + let _ = last_vel.insert(entity, Last(vel)); + throttle = false; + comp_sync_package.comp_inserted(uid, vel); + }, } + } else if last_vel.remove(entity).is_some() { + // Send removal message if Vel was removed + // Note: we don't have to handle this for position because the entity will be + // removed from the client by the region system + throttle = false; + comp_sync_package.comp_removed::(uid); } if let Some(&ori) = maybe_ori { - if last_ori.get(entity).map(|&l| l.0 != ori).unwrap_or(true) { - let _ = last_ori.insert(entity, Last(ori)); - send_msg( - ServerMsg::EntityOri { - entity: uid.into(), - ori, - }, - entity, - pos, - force_update, - true, - ); + match last_ori.get(entity).map(|&l| l.0 != ori) { + Some(false) => {}, + Some(true) => { + let _ = last_ori.insert(entity, Last(ori)); + comp_sync_package.comp_modified(uid, ori); + }, + None => { + let _ = last_ori.insert(entity, Last(ori)); + throttle = false; + comp_sync_package.comp_inserted(uid, ori); + }, } + } else if last_ori.remove(entity).is_some() { + // Send removal message if Ori was removed + throttle = false; + comp_sync_package.comp_removed::(uid); } - if let Some(&character_state) = character_state { - if last_character_state - .get(entity) - .map(|&l| !character_state.is_same_state(&l.0)) - .unwrap_or(true) - { - let _ = last_character_state.insert(entity, Last(character_state)); - send_msg( - ServerMsg::EntityCharacterState { - entity: uid.into(), - character_state, - }, - entity, - pos, - force_update, - false, - ); - } - } + send_msg( + ServerMsg::CompSync(comp_sync_package), + entity, + pos, + force_update, + throttle, + ); } } @@ -350,27 +330,3 @@ impl<'a> System<'a> for Sys { timer.end(); } } - -pub fn send_initial_unsynced_components( - client: &mut Client, - uid: &Uid, - pos: &Pos, - vel: Option<&Vel>, - ori: Option<&Ori>, - character_state: Option<&CharacterState>, -) { - let entity = (*uid).into(); - client.notify(ServerMsg::EntityPos { entity, pos: *pos }); - if let Some(&vel) = vel { - client.notify(ServerMsg::EntityVel { entity, vel }); - } - if let Some(&ori) = ori { - client.notify(ServerMsg::EntityOri { entity, ori }); - } - if let Some(&character_state) = character_state { - client.notify(ServerMsg::EntityCharacterState { - entity, - character_state, - }); - } -} diff --git a/server/src/sys/message.rs b/server/src/sys/message.rs index 156e13b860..c43d565dbf 100644 --- a/server/src/sys/message.rs +++ b/server/src/sys/message.rs @@ -1,7 +1,7 @@ use super::SysTimer; use crate::{auth_provider::AuthProvider, client::Client, CLIENT_TIMEOUT}; use common::{ - comp::{Admin, CanBuild, Controller, ForceUpdate, Ori, Player, Pos, Stats, Vel}, + comp::{Admin, CanBuild, ControlEvent, Controller, ForceUpdate, Ori, Player, Pos, Stats, Vel}, event::{EventBus, ServerEvent}, msg::{ validate_chat_msg, ChatMsgValidationError, ClientMsg, ClientState, PlayerListUpdate, @@ -45,7 +45,7 @@ impl<'a> System<'a> for Sys { &mut self, ( entities, - server_emitter, + server_event_bus, time, terrain, mut timer, @@ -68,6 +68,8 @@ impl<'a> System<'a> for Sys { let time = time.0; + let mut server_emitter = server_event_bus.emitter(); + let mut new_chat_msgs = Vec::new(); // Player list to send new players. @@ -206,7 +208,7 @@ impl<'a> System<'a> for Sys { }, ClientState::Character => { if let Some(controller) = controllers.get_mut(entity) { - controller.inputs = inputs; + controller.inputs.update_with_new(inputs); } }, ClientState::Pending => {}, @@ -218,12 +220,31 @@ impl<'a> System<'a> for Sys { client.error_state(RequestStateError::Impossible) }, ClientState::Character => { + // Skip respawn if client entity is alive + if let &ControlEvent::Respawn = &event { + if stats.get(entity).map_or(true, |s| !s.is_dead) { + continue; + } + } if let Some(controller) = controllers.get_mut(entity) { controller.events.push(event); } }, ClientState::Pending => {}, }, + ClientMsg::ControlAction(event) => match client.client_state { + ClientState::Connected + | ClientState::Registered + | ClientState::Spectator => { + client.error_state(RequestStateError::Impossible) + }, + ClientState::Character => { + if let Some(controller) = controllers.get_mut(entity) { + controller.actions.push(event); + } + }, + ClientState::Pending => {}, + }, ClientMsg::ChatMsg { message } => match client.client_state { ClientState::Connected => client.error_state(RequestStateError::Impossible), ClientState::Registered diff --git a/server/src/sys/sentinel.rs b/server/src/sys/sentinel.rs index a9cc0106a0..9b388e61cd 100644 --- a/server/src/sys/sentinel.rs +++ b/server/src/sys/sentinel.rs @@ -1,11 +1,11 @@ use super::SysTimer; use common::{ comp::{ - Body, CanBuild, Energy, Gravity, Item, LightEmitter, Mass, MountState, Mounting, Player, - Scale, Stats, Sticky, + Body, CanBuild, CharacterState, Energy, Gravity, Item, LightEmitter, Loadout, Mass, + MountState, Mounting, Ori, Player, Pos, Scale, Stats, Sticky, Vel, }, msg::EcsCompPacket, - sync::{EntityPackage, SyncPackage, Uid, UpdateTracker, WorldSyncExt}, + sync::{CompSyncPackage, EntityPackage, EntitySyncPackage, Uid, UpdateTracker, WorldSyncExt}, }; use hashbrown::HashMap; use specs::{ @@ -51,9 +51,17 @@ pub struct TrackedComps<'a> { pub mass: ReadStorage<'a, Mass>, pub sticky: ReadStorage<'a, Sticky>, pub gravity: ReadStorage<'a, Gravity>, + pub loadout: ReadStorage<'a, Loadout>, + pub character_state: ReadStorage<'a, CharacterState>, } impl<'a> TrackedComps<'a> { - pub fn create_entity_package(&self, entity: EcsEntity) -> EntityPackage { + pub fn create_entity_package( + &self, + entity: EcsEntity, + pos: Option, + vel: Option, + ori: Option, + ) -> EntityPackage { let uid = self .uid .get(entity) @@ -104,6 +112,18 @@ impl<'a> TrackedComps<'a> { .get(entity) .copied() .map(|c| comps.push(c.into())); + self.loadout + .get(entity) + .cloned() + .map(|c| comps.push(c.into())); + self.character_state + .get(entity) + .cloned() + .map(|c| comps.push(c.into())); + // Add untracked comps + pos.map(|c| comps.push(c.into())); + vel.map(|c| comps.push(c.into())); + ori.map(|c| comps.push(c.into())); EntityPackage { uid, comps } } @@ -124,15 +144,19 @@ pub struct ReadTrackers<'a> { pub mass: ReadExpect<'a, UpdateTracker>, pub sticky: ReadExpect<'a, UpdateTracker>, pub gravity: ReadExpect<'a, UpdateTracker>, + pub loadout: ReadExpect<'a, UpdateTracker>, + pub character_state: ReadExpect<'a, UpdateTracker>, } impl<'a> ReadTrackers<'a> { - pub fn create_sync_package( + pub fn create_sync_packages( &self, comps: &TrackedComps, filter: impl Join + Copy, deleted_entities: Vec, - ) -> SyncPackage { - SyncPackage::new(&comps.uid, &self.uid, filter, deleted_entities) + ) -> (EntitySyncPackage, CompSyncPackage) { + let entity_sync_package = + EntitySyncPackage::new(&comps.uid, &self.uid, filter, deleted_entities); + let comp_sync_package = CompSyncPackage::new() .with_component(&comps.uid, &*self.body, &comps.body, filter) .with_component(&comps.uid, &*self.player, &comps.player, filter) .with_component(&comps.uid, &*self.stats, &comps.stats, filter) @@ -151,6 +175,15 @@ impl<'a> ReadTrackers<'a> { .with_component(&comps.uid, &*self.mass, &comps.mass, filter) .with_component(&comps.uid, &*self.sticky, &comps.sticky, filter) .with_component(&comps.uid, &*self.gravity, &comps.gravity, filter) + .with_component(&comps.uid, &*self.loadout, &comps.loadout, filter) + .with_component( + &comps.uid, + &*self.character_state, + &comps.character_state, + filter, + ); + + (entity_sync_package, comp_sync_package) } } @@ -170,6 +203,8 @@ pub struct WriteTrackers<'a> { mass: WriteExpect<'a, UpdateTracker>, sticky: WriteExpect<'a, UpdateTracker>, gravity: WriteExpect<'a, UpdateTracker>, + loadout: WriteExpect<'a, UpdateTracker>, + character_state: WriteExpect<'a, UpdateTracker>, } fn record_changes(comps: &TrackedComps, trackers: &mut WriteTrackers) { @@ -188,6 +223,10 @@ fn record_changes(comps: &TrackedComps, trackers: &mut WriteTrackers) { trackers.mass.record_changes(&comps.mass); trackers.sticky.record_changes(&comps.sticky); trackers.gravity.record_changes(&comps.gravity); + trackers.loadout.record_changes(&comps.loadout); + trackers + .character_state + .record_changes(&comps.character_state); } pub fn register_trackers(world: &mut World) { @@ -205,6 +244,8 @@ pub fn register_trackers(world: &mut World) { world.register_tracker::(); world.register_tracker::(); world.register_tracker::(); + world.register_tracker::(); + world.register_tracker::(); } /// Deleted entities grouped by region diff --git a/server/src/sys/subscription.rs b/server/src/sys/subscription.rs index f9de9609ba..36a2a64b9c 100644 --- a/server/src/sys/subscription.rs +++ b/server/src/sys/subscription.rs @@ -4,7 +4,7 @@ use super::{ }; use crate::client::{self, Client, RegionSubscription}; use common::{ - comp::{CharacterState, Ori, Player, Pos, Vel}, + comp::{Ori, Player, Pos, Vel}, msg::ServerMsg, region::{region_in_vd, regions_in_vd, Event as RegionEvent, RegionMap}, sync::Uid, @@ -29,7 +29,6 @@ impl<'a> System<'a> for Sys { ReadStorage<'a, Pos>, ReadStorage<'a, Vel>, ReadStorage<'a, Ori>, - ReadStorage<'a, CharacterState>, ReadStorage<'a, Player>, WriteStorage<'a, Client>, WriteStorage<'a, RegionSubscription>, @@ -47,7 +46,6 @@ impl<'a> System<'a> for Sys { positions, velocities, orientations, - character_states, players, mut clients, mut subscriptions, @@ -182,31 +180,26 @@ impl<'a> System<'a> for Sys { // already within the set of subscribed regions if subscription.regions.insert(key.clone()) { if let Some(region) = region_map.get(key) { - for (uid, pos, vel, ori, character_state, _, entity) in ( - &uids, + for (pos, vel, ori, _, entity) in ( &positions, velocities.maybe(), orientations.maybe(), - character_states.maybe(), region.entities(), &entities, ) .join() - .filter(|(_, _, _, _, _, _, e)| *e != client_entity) + .filter(|(_, _, _, _, e)| *e != client_entity) { - // Send message to create entity and tracked components + // Send message to create entity and tracked components and physics + // components client.notify(ServerMsg::CreateEntity( - tracked_comps.create_entity_package(entity), + tracked_comps.create_entity_package( + entity, + Some(*pos), + vel.copied(), + ori.copied(), + ), )); - // Send message to create physics components - super::entity_sync::send_initial_unsynced_components( - client, - uid, - pos, - vel, - ori, - character_state, - ); } } } @@ -242,30 +235,24 @@ pub fn initialize_region_subscription(world: &World, entity: specs::Entity) { let tracked_comps = TrackedComps::fetch(world); for key in ®ions { if let Some(region) = region_map.get(*key) { - for (uid, pos, vel, ori, character_state, _, entity) in ( - &tracked_comps.uid, + for (pos, vel, ori, _, entity) in ( &world.read_storage::(), // We assume all these entities have a position world.read_storage::().maybe(), world.read_storage::().maybe(), - world.read_storage::().maybe(), region.entities(), &world.entities(), ) .join() { - // Send message to create entity and tracked components + // Send message to create entity and tracked components and physics components client.notify(ServerMsg::CreateEntity( - tracked_comps.create_entity_package(entity), + tracked_comps.create_entity_package( + entity, + Some(*pos), + vel.copied(), + ori.copied(), + ), )); - // Send message to create physics components - super::entity_sync::send_initial_unsynced_components( - client, - uid, - pos, - vel, - ori, - character_state, - ); } } } diff --git a/server/src/sys/terrain.rs b/server/src/sys/terrain.rs index 1cbcfe62f3..dbc6bcd513 100644 --- a/server/src/sys/terrain.rs +++ b/server/src/sys/terrain.rs @@ -2,7 +2,7 @@ use super::SysTimer; use crate::{chunk_generator::ChunkGenerator, client::Client, Tick}; use common::{ assets, - comp::{self, item, Player, Pos}, + comp::{self, item, CharacterAbility, Item, ItemConfig, Player, Pos}, event::{EventBus, ServerEvent}, generation::EntityKind, msg::ServerMsg, @@ -12,7 +12,7 @@ use common::{ }; use rand::{seq::SliceRandom, Rng}; use specs::{Join, Read, ReadStorage, System, Write, WriteExpect, WriteStorage}; -use std::sync::Arc; +use std::{sync::Arc, time::Duration}; use vek::*; /// This system will handle loading generated chunks and unloading @@ -38,7 +38,7 @@ impl<'a> System<'a> for Sys { fn run( &mut self, ( - server_emitter, + server_event_bus, tick, mut timer, mut chunk_generator, @@ -51,6 +51,8 @@ impl<'a> System<'a> for Sys { ) { timer.start(); + let mut server_emitter = server_event_bus.emitter(); + // Fetch any generated `TerrainChunk`s and insert them into the terrain. // Also, send the chunk data to anybody that is close by. 'insert_terrain_chunks: while let Some((key, res)) = chunk_generator.recv_new_chunk() { @@ -112,6 +114,7 @@ impl<'a> System<'a> for Sys { ) -> &'a str { &body_data.species[&species].generic } + const SPAWN_NPCS: &'static [fn() -> ( String, comp::Body, @@ -126,7 +129,9 @@ impl<'a> System<'a> for Sys { get_npc_name(&NPC_NAMES.humanoid, body.race) ), comp::Body::Humanoid(body), - Some(assets::load_expect_cloned("common.items.weapons.staff_1")), + Some(assets::load_expect_cloned( + "common.items.weapons.starter_axe", + )), comp::Alignment::Npc, ) }) as _, @@ -135,7 +140,9 @@ impl<'a> System<'a> for Sys { ( format!("{} Bandit", get_npc_name(&NPC_NAMES.humanoid, body.race)), comp::Body::Humanoid(body), - Some(assets::load_expect_cloned("common.items.weapons.staff_1")), + Some(assets::load_expect_cloned( + "common.items.weapons.short_sword_0", + )), comp::Alignment::Enemy, ) }) as _, @@ -180,14 +187,104 @@ impl<'a> System<'a> for Sys { .choose(&mut rand::thread_rng()) .expect("SPAWN_NPCS is nonempty")( ); - let mut stats = comp::Stats::new(name, body, main); + let mut stats = comp::Stats::new(name, body); + + let active_item = + if let Some(item::ItemKind::Tool(tool)) = main.as_ref().map(|i| &i.kind) { + let mut abilities = tool.get_abilities(); + let mut ability_drain = abilities.drain(..); + + main.map(|item| comp::ItemConfig { + item, + ability1: ability_drain.next(), + ability2: ability_drain.next(), + ability3: ability_drain.next(), + block_ability: None, + dodge_ability: Some(comp::CharacterAbility::Roll), + }) + } else { + Some(ItemConfig { + // We need the empty item so npcs can attack + item: Item::empty(), + ability1: Some(CharacterAbility::BasicMelee { + energy_cost: 0, + buildup_duration: Duration::from_millis(0), + recover_duration: Duration::from_millis(400), + base_healthchange: -4, + range: 3.5, + max_angle: 60.0, + }), + ability2: None, + ability3: None, + block_ability: None, + dodge_ability: None, + }) + }; + + let mut loadout = match alignment { + comp::Alignment::Npc => comp::Loadout { + active_item, + second_item: None, + shoulder: Some(assets::load_expect_cloned( + "common.items.armor.shoulder.leather_0", + )), + chest: Some(assets::load_expect_cloned( + "common.items.armor.chest.leather_0", + )), + belt: Some(assets::load_expect_cloned( + "common.items.armor.belt.plate_0", + )), + hand: Some(assets::load_expect_cloned( + "common.items.armor.hand.plate_0", + )), + pants: Some(assets::load_expect_cloned( + "common.items.armor.pants.plate_green_0", + )), + foot: Some(assets::load_expect_cloned( + "common.items.armor.foot.leather_0", + )), + }, + comp::Alignment::Enemy => comp::Loadout { + active_item, + second_item: None, + shoulder: Some(assets::load_expect_cloned( + "common.items.armor.shoulder.leather_0", + )), + chest: Some(assets::load_expect_cloned( + "common.items.armor.chest.plate_green_0", + )), + belt: Some(assets::load_expect_cloned( + "common.items.armor.belt.plate_0", + )), + hand: Some(assets::load_expect_cloned( + "common.items.armor.hand.plate_0", + )), + pants: Some(assets::load_expect_cloned( + "common.items.armor.pants.plate_green_0", + )), + foot: Some(assets::load_expect_cloned( + "common.items.armor.foot.plate_0", + )), + }, + _ => comp::Loadout { + active_item, + second_item: None, + shoulder: None, + chest: None, + belt: None, + hand: None, + pants: None, + foot: None, + }, + }; let mut scale = 1.0; // TODO: Remove this and implement scaling or level depending on stuff like // species instead - stats.level.set_level(rand::thread_rng().gen_range(1, 4)); + stats.level.set_level(rand::thread_rng().gen_range(1, 9)); + // Replace stuff if it's a boss if let EntityKind::Boss = entity.kind { if rand::random::() < 0.65 { let body_new = comp::humanoid::Body::random(); @@ -199,27 +296,70 @@ impl<'a> System<'a> for Sys { get_npc_name(&NPC_NAMES.humanoid, body_new.race) ), body, - Some(assets::load_expect_cloned("common.items.weapons.hammer_1")), ); } - stats.level.set_level(rand::thread_rng().gen_range(8, 15)); + loadout = comp::Loadout { + active_item: Some(comp::ItemConfig { + item: assets::load_expect_cloned( + "common.items.weapons.zweihander_sword_0", + ), + ability1: Some(CharacterAbility::BasicMelee { + energy_cost: 0, + buildup_duration: Duration::from_millis(800), + recover_duration: Duration::from_millis(200), + base_healthchange: -13, + range: 3.5, + max_angle: 60.0, + }), + ability2: None, + ability3: None, + block_ability: None, + dodge_ability: None, + }), + second_item: None, + shoulder: Some(assets::load_expect_cloned( + "common.items.armor.shoulder.plate_0", + )), + chest: Some(assets::load_expect_cloned( + "common.items.armor.chest.plate_green_0", + )), + belt: Some(assets::load_expect_cloned( + "common.items.armor.belt.plate_0", + )), + hand: Some(assets::load_expect_cloned( + "common.items.armor.hand.plate_0", + )), + pants: Some(assets::load_expect_cloned( + "common.items.armor.pants.plate_green_0", + )), + foot: Some(assets::load_expect_cloned( + "common.items.armor.foot.plate_0", + )), + }; + + stats.level.set_level(rand::thread_rng().gen_range(30, 35)); scale = 2.0 + rand::random::(); } stats.update_max_hp(); + stats .health .set_to(stats.health.maximum(), comp::HealthSource::Revive); - if let Some(item::Item { - kind: item::ItemKind::Tool { power, .. }, - .. - }) = &mut stats.equipment.main + + // TODO: This code sets an appropriate base_damage for the enemy. This doesn't + // work because the damage is now saved in an ability + /* + if let Some(item::ItemKind::Tool(item::ToolData { base_damage, .. })) = + &mut loadout.active_item.map(|i| i.item.kind) { - *power = stats.level.level() * 3; + *base_damage = stats.level.level() as u32 * 3; } + */ server_emitter.emit(ServerEvent::CreateNpc { pos: Pos(entity.pos), stats, + loadout, body, alignment, agent: comp::Agent::default().with_patrol_origin(entity.pos), diff --git a/voxygen/Cargo.toml b/voxygen/Cargo.toml index 21049a4c4c..4db7486a20 100644 --- a/voxygen/Cargo.toml +++ b/voxygen/Cargo.toml @@ -11,6 +11,7 @@ default-run = "veloren-voxygen" [features] gl = ["gfx_device_gl"] singleplayer = ["server"] +tweak = ["const-tweaker"] default = ["gl", "singleplayer", "msgbox"] @@ -24,8 +25,8 @@ gfx_device_gl = { version = "0.16.2", optional = true } gfx_window_glutin = "0.31.0" glutin = "0.21.1" winit = { version = "0.19.4", features = ["serde"] } -conrod_core = { git = "https://gitlab.com/veloren/conrod.git", branch = "hide_text" } -conrod_winit = { git = "https://gitlab.com/veloren/conrod.git", branch = "hide_text" } +conrod_core = { git = "https://gitlab.com/veloren/conrod.git", branch = "capucho/hide_text_cursor_fix" } +conrod_winit = { git = "https://gitlab.com/veloren/conrod.git", branch = "capucho/hide_text_cursor_fix" } euc = "0.3.0" # ECS @@ -33,7 +34,7 @@ specs = "0.15.1" specs-idvs = { git = "https://gitlab.com/veloren/specs-idvs.git" } # Mathematics -vek = { version = "0.9.9", features = ["serde"] } +vek = { version = "0.10.0", features = ["serde"] } # Controller gilrs = { version = "0.7", features = ["serde"] } @@ -67,6 +68,7 @@ bincode = "1.2" deunicode = "1.0" uvth = "3.1.1" authc = { git = "https://gitlab.com/veloren/auth.git", rev = "65571ade0d954a0e0bd995fdb314854ff146ab97" } +const-tweaker = { version = "0.2.5", optional = true } [target.'cfg(target_os = "macos")'.dependencies] dispatch = "0.1.4" diff --git a/voxygen/examples/character_renderer.rs b/voxygen/examples/character_renderer.rs index ae07183f5e..c19515da68 100644 --- a/voxygen/examples/character_renderer.rs +++ b/voxygen/examples/character_renderer.rs @@ -1,4 +1,4 @@ -use common::{assets, comp}; +use common::comp; use gfx_window_glutin::init_headless; use vek::*; use veloren_voxygen::{render, scene::simple as scene}; @@ -27,10 +27,16 @@ fn main() { // Create character let body = comp::humanoid::Body::random(); - const STARTER_BOW: &str = "common.items.weapons.starter_bow"; - let equipment = comp::Equipment { - main: assets::load_cloned(STARTER_BOW).ok(), - alt: None, + + let loadout = comp::Loadout { + active_item: None, + second_item: None, + shoulder: None, + chest: None, + belt: None, + hand: None, + pants: None, + foot: None, }; // Setup scene (using the character selection screen `Scene`) @@ -49,7 +55,7 @@ fn main() { // Render renderer.clear(); - scene.render(&mut renderer, 0, Some(body), &equipment); + scene.render(&mut renderer, 0, Some(body), Some(&loadout)); renderer.flush(); // Get image diff --git a/voxygen/src/anim/character/alpha.rs b/voxygen/src/anim/character/alpha.rs new file mode 100644 index 0000000000..74573fc146 --- /dev/null +++ b/voxygen/src/anim/character/alpha.rs @@ -0,0 +1,548 @@ +use super::{super::Animation, CharacterSkeleton, SkeletonAttr}; +use common::comp::item::ToolKind; +use std::f32::consts::PI; +use vek::*; + +pub struct AlphaAnimation; + +impl Animation for AlphaAnimation { + type Dependency = (Option, f32, f64); + type Skeleton = CharacterSkeleton; + + fn update_skeleton( + skeleton: &Self::Skeleton, + (active_tool_kind, velocity, _global_time): Self::Dependency, + anim_time: f64, + rate: &mut f32, + skeleton_attr: &SkeletonAttr, + ) -> Self::Skeleton { + *rate = 1.0; + let mut next = (*skeleton).clone(); + + let lab = 1.0; + + let foot = (((5.0) + / (0.2 + + 4.8 + * ((anim_time as f32 * lab as f32 * 1.3 * velocity).sin()).powf(2.0 as f32))) + .sqrt()) + * ((anim_time as f32 * lab as f32 * 1.3 * velocity).sin()); + + let accel_med = 1.0 - (anim_time as f32 * 16.0 * lab as f32).cos(); + let accel_slow = 1.0 - (anim_time as f32 * 12.0 * lab as f32).cos(); + let accel_fast = 1.0 - (anim_time as f32 * 24.0 * lab as f32).cos(); + let decel = (anim_time as f32 * 16.0 * lab as f32).min(PI / 2.0).sin(); + let push = anim_time as f32 * lab as f32 * 4.0; + let slow = (((5.0) + / (0.4 + 4.6 * ((anim_time as f32 * lab as f32 * 9.0).sin()).powf(2.0 as f32))) + .sqrt()) + * ((anim_time as f32 * lab as f32 * 9.0).sin()); + let quick = (((5.0) + / (0.4 + 4.6 * ((anim_time as f32 * lab as f32 * 18.0).sin()).powf(2.0 as f32))) + .sqrt()) + * ((anim_time as f32 * lab as f32 * 18.0).sin()); + let slower = (((5.0) + / (0.1 + 4.9 * ((anim_time as f32 * lab as f32 * 4.0).sin()).powf(2.0 as f32))) + .sqrt()) + * ((anim_time as f32 * lab as f32 * 4.0).sin()); + let slowax = (((5.0) + / (0.1 + 4.9 * ((anim_time as f32 * lab as f32 * 4.0 + 1.9).cos()).powf(2.0 as f32))) + .sqrt()) + * ((anim_time as f32 * lab as f32 * 4.0 + 1.9).cos()); + + match active_tool_kind { + //TODO: Inventory + Some(ToolKind::Sword(_)) => { + next.head.offset = Vec3::new( + 0.0 + skeleton_attr.neck_right, + -2.0 + skeleton_attr.neck_forward, + skeleton_attr.neck_height + 14.0, + ); + next.head.ori = Quaternion::rotation_z(slow * -0.25) + * Quaternion::rotation_x(0.0 + slow * 0.15) + * Quaternion::rotation_y(slow * -0.15); + next.head.scale = Vec3::one() * skeleton_attr.head_scale; + + next.chest.offset = Vec3::new(0.0, 0.0, 7.0); + next.chest.ori = Quaternion::rotation_z(slow * 0.4) + * Quaternion::rotation_x(0.0 + slow * -0.2) + * Quaternion::rotation_y(slow * 0.2); + next.chest.scale = Vec3::one(); + + next.belt.offset = Vec3::new(0.0, 0.0, -2.0); + next.belt.ori = next.chest.ori * -0.3; + next.belt.scale = Vec3::one(); + + next.shorts.offset = Vec3::new(0.0, 0.0, -5.0); + next.shorts.ori = next.chest.ori * -0.45; + next.shorts.scale = Vec3::one(); + + next.l_hand.offset = Vec3::new(-0.25, -5.0, 1.0); + next.l_hand.ori = Quaternion::rotation_x(1.27); + next.l_hand.scale = Vec3::one() * 1.05; + next.r_hand.offset = Vec3::new(1.25, -5.5, -2.0); + next.r_hand.ori = Quaternion::rotation_x(1.27); + next.r_hand.scale = Vec3::one() * 1.05; + next.main.offset = Vec3::new(0.0, 0.0, 0.0); + next.main.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(0.0); + next.main.scale = Vec3::one(); + + next.control.offset = Vec3::new(-10.0 + push * 5.0, 6.0 + push * 5.0, 2.0); + next.control.ori = Quaternion::rotation_x(-1.4 + slow * 0.4) + * Quaternion::rotation_y(slow * -1.3) + * Quaternion::rotation_z(1.4 + slow * -0.5); + next.control.scale = Vec3::one(); + + next.l_foot.offset = Vec3::new(-3.4, slow * -3.0 + quick * 3.0 - 4.0, 8.0); + next.l_foot.ori = Quaternion::rotation_x(slow * 0.6) + * Quaternion::rotation_y((slow * -0.2).max(0.0)); + next.l_foot.scale = Vec3::one(); + + next.r_foot.offset = Vec3::new(3.4, slow * 3.0 + quick * -3.0 + 5.0, 8.0); + next.r_foot.ori = Quaternion::rotation_x(slow * -0.6) + * Quaternion::rotation_y((slow * 0.2).min(0.0)); + next.r_foot.scale = Vec3::one(); + next.torso.offset = Vec3::new(0.0, 0.0, 0.1) * skeleton_attr.scaler; + next.torso.ori = Quaternion::rotation_z(0.0) + * Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(0.0); + next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; + }, + Some(ToolKind::Axe(_)) => { + next.head.offset = Vec3::new( + 0.0 + skeleton_attr.neck_right + slowax * 2.0, + 0.0 + skeleton_attr.neck_forward + slowax * -2.0, + skeleton_attr.neck_height + 13.0, + ); + next.head.ori = Quaternion::rotation_z(slowax * 0.25) + * Quaternion::rotation_x(0.0 + slowax * 0.2) + * Quaternion::rotation_y(slowax * 0.2); + next.head.scale = Vec3::one() * skeleton_attr.head_scale; + + next.chest.offset = Vec3::new(0.0, 0.0, 7.0); + next.chest.ori = Quaternion::rotation_z(slowax * 0.2) + * Quaternion::rotation_x(0.0 + slowax * 0.2) + * Quaternion::rotation_y(slowax * 0.2); + next.chest.scale = Vec3::one(); + + next.belt.offset = Vec3::new(0.0, 0.0, -2.0); + next.belt.ori = next.chest.ori * -0.2; + next.belt.scale = Vec3::one(); + + next.shorts.offset = Vec3::new(0.0, 0.0, -5.0); + next.shorts.ori = next.chest.ori * -0.15; + next.shorts.scale = Vec3::one(); + + next.l_hand.offset = Vec3::new(-4.0, 3.0, 2.0); + next.l_hand.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_z(3.14 - 0.3) + * Quaternion::rotation_y(-0.8); + next.l_hand.scale = Vec3::one() * 1.08; + next.r_hand.offset = Vec3::new(-2.5, 9.0, 0.0); + next.r_hand.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_z(3.14 - 0.3) + * Quaternion::rotation_y(-0.8); + next.r_hand.scale = Vec3::one() * 1.06; + next.main.offset = Vec3::new(-6.0, 10.0, -5.0); + next.main.ori = Quaternion::rotation_x(1.27) + * Quaternion::rotation_y(-0.3) + * Quaternion::rotation_z(-0.8); + next.main.scale = Vec3::one(); + + next.control.offset = Vec3::new(0.0, 0.0 + slowax * 8.2, 6.0); + next.control.ori = Quaternion::rotation_x(0.8) + * Quaternion::rotation_y(-0.3) + * Quaternion::rotation_z(-0.7 + slowax * -1.9); + next.control.scale = Vec3::one(); + next.torso.offset = Vec3::new(0.0, 0.0, 0.1) * skeleton_attr.scaler; + next.torso.ori = Quaternion::rotation_z(0.0) + * Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(0.0); + next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; + }, + Some(ToolKind::Hammer(_)) => { + next.l_hand.offset = Vec3::new(0.0, 3.0, 8.0); + next.l_hand.ori = Quaternion::rotation_x(1.27); + next.l_hand.scale = Vec3::one() * 1.05; + next.r_hand.offset = Vec3::new(0.0, 0.0, -3.0); + next.r_hand.ori = Quaternion::rotation_x(1.27); + next.r_hand.scale = Vec3::one() * 1.05; + next.main.offset = Vec3::new(0.0, 6.0, -1.0); + next.main.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(0.0); + next.main.scale = Vec3::one(); + next.head.offset = Vec3::new( + 0.0 + skeleton_attr.neck_right, + -2.0 + skeleton_attr.neck_forward, + skeleton_attr.neck_height + 12.0, + ); + next.head.ori = Quaternion::rotation_z(slower * 0.05) + * Quaternion::rotation_x(0.0 + slower * 0.05) + * Quaternion::rotation_y(slower * 0.05); + next.head.scale = Vec3::one() * skeleton_attr.head_scale; + + next.chest.offset = Vec3::new(0.0, 0.0, 7.0); + next.chest.ori = Quaternion::rotation_z(slower * 0.2) + * Quaternion::rotation_x(0.0 + slower * 0.2) + * Quaternion::rotation_y(slower * 0.2); + next.chest.scale = Vec3::one(); + + next.belt.offset = Vec3::new(0.0, 0.0, -2.0); + next.belt.ori = next.chest.ori * -0.2; + next.belt.scale = Vec3::one(); + + next.shorts.offset = Vec3::new(0.0, 0.0, -5.0); + next.shorts.ori = next.chest.ori * -0.15; + next.shorts.scale = Vec3::one(); + next.torso.offset = Vec3::new(0.0, 0.0, 0.1) * skeleton_attr.scaler; + next.torso.ori = Quaternion::rotation_z(0.0) + * Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(0.0); + next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; + + if velocity > 0.5 { + next.l_foot.offset = Vec3::new(-3.4, foot * -2.0, 8.0); + next.l_foot.ori = Quaternion::rotation_x(foot * -0.4) + * Quaternion::rotation_z((slower * 0.6).max(0.0)); + next.l_foot.scale = Vec3::one(); + + next.r_foot.offset = Vec3::new(3.4, foot * 2.0, 8.0); + next.r_foot.ori = Quaternion::rotation_x(foot * 0.4) + * Quaternion::rotation_z((slower * 0.6).max(0.0)); + next.r_foot.scale = Vec3::one(); + next.torso.offset = Vec3::new(0.0, 0.0, 0.1) * skeleton_attr.scaler; + next.torso.ori = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(-0.15); + next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; + } else { + next.l_foot.offset = Vec3::new(-3.4, -2.5, 8.0 + (slower * 2.5).max(0.0)); + next.l_foot.ori = Quaternion::rotation_x(slower * -0.2 - 0.2) + * Quaternion::rotation_z((slower * 1.0).max(0.0)); + next.l_foot.scale = Vec3::one(); + + next.r_foot.offset = Vec3::new(3.4, 3.5 - slower * 2.0, 8.0); + next.r_foot.ori = Quaternion::rotation_x(slower * 0.1) + * Quaternion::rotation_z((slower * 0.5).max(0.0)); + next.r_foot.scale = Vec3::one(); + next.torso.offset = Vec3::new(0.0, 0.0, 0.1) * skeleton_attr.scaler; + next.torso.ori = Quaternion::rotation_z(0.0) + * Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(0.0); + next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; + } + + next.control.offset = Vec3::new(-6.0, 3.0 + slower * 2.0, 8.0 + slower * 5.0); + next.control.ori = Quaternion::rotation_x(-0.2 + slower * 1.8) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(1.4 + 1.57); + next.control.scale = Vec3::one(); + + next.torso.offset = Vec3::new(0.0, 0.0, 0.1) * skeleton_attr.scaler; + next.torso.ori = Quaternion::rotation_z(0.0) + * Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(0.0); + next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; + }, + Some(ToolKind::Staff(_)) => { + next.head.offset = Vec3::new( + 0.0 + skeleton_attr.neck_right, + 0.0 + skeleton_attr.neck_forward + decel * 0.8, + skeleton_attr.neck_height + 14.0, + ); + next.head.ori = Quaternion::rotation_z(decel * 0.25) + * Quaternion::rotation_x(0.0 + decel * 0.1) + * Quaternion::rotation_y(decel * -0.1); + next.head.scale = Vec3::one() * skeleton_attr.head_scale; + + next.chest.offset = Vec3::new(0.0, 0.0, 7.0); + next.chest.ori = Quaternion::rotation_z(decel * -0.2) + * Quaternion::rotation_x(0.0 + decel * -0.2) + * Quaternion::rotation_y(decel * 0.2); + next.chest.scale = Vec3::one(); + + next.belt.offset = Vec3::new(0.0, 0.0, -2.0); + next.belt.ori = Quaternion::rotation_z(decel * -0.1) + * Quaternion::rotation_x(0.0 + decel * -0.1) + * Quaternion::rotation_y(decel * 0.1); + next.belt.scale = Vec3::one(); + + next.shorts.offset = Vec3::new(0.0, 0.0, -5.0); + next.belt.ori = Quaternion::rotation_z(decel * -0.08) + * Quaternion::rotation_x(0.0 + decel * -0.08) + * Quaternion::rotation_y(decel * 0.08); + next.shorts.scale = Vec3::one(); + next.l_hand.offset = Vec3::new(0.0, 1.0, 0.0); + next.l_hand.ori = Quaternion::rotation_x(1.27); + next.l_hand.scale = Vec3::one() * 1.05; + next.r_hand.offset = Vec3::new(0.0, 0.0, 10.0); + next.r_hand.ori = Quaternion::rotation_x(1.27); + next.r_hand.scale = Vec3::one() * 1.05; + next.main.offset = Vec3::new(0.0, 6.0, -4.0); + next.main.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(0.0); + next.main.scale = Vec3::one(); + + next.control.offset = Vec3::new(-8.0 - slow * 1.0, 3.0 - slow * 5.0, 0.0); + next.control.ori = Quaternion::rotation_x(-1.2) + * Quaternion::rotation_y(slow * 1.5) + * Quaternion::rotation_z(1.4 + slow * 0.5); + next.control.scale = Vec3::one(); + next.torso.offset = Vec3::new(0.0, 0.0, 0.1) * skeleton_attr.scaler; + next.torso.ori = Quaternion::rotation_z(0.0) + * Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(0.0); + next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; + }, + Some(ToolKind::Shield(_)) => { + next.head.offset = Vec3::new( + 0.0 + skeleton_attr.neck_right, + 0.0 + skeleton_attr.neck_forward + decel * 0.8, + skeleton_attr.neck_height + 21.0, + ); + next.head.ori = Quaternion::rotation_z(decel * 0.25) + * Quaternion::rotation_x(0.0 + decel * 0.1) + * Quaternion::rotation_y(decel * -0.1); + next.head.scale = Vec3::one() * skeleton_attr.head_scale; + + next.chest.offset = Vec3::new(0.0, 0.0, 7.0); + next.chest.ori = Quaternion::rotation_z(decel * -0.2) + * Quaternion::rotation_x(0.0 + decel * -0.2) + * Quaternion::rotation_y(decel * 0.2); + next.chest.scale = Vec3::one(); + + next.belt.offset = Vec3::new(0.0, 0.0, 5.0); + next.belt.ori = Quaternion::rotation_z(decel * -0.1) + * Quaternion::rotation_x(0.0 + decel * -0.1) + * Quaternion::rotation_y(decel * 0.1); + next.belt.scale = Vec3::one(); + + next.shorts.offset = Vec3::new(0.0, 0.0, 2.0); + next.belt.ori = Quaternion::rotation_z(decel * -0.08) + * Quaternion::rotation_x(0.0 + decel * -0.08) + * Quaternion::rotation_y(decel * 0.08); + next.shorts.scale = Vec3::one(); + next.l_hand.offset = + Vec3::new(-8.0 + accel_slow * 10.0, 8.0 + accel_fast * 3.0, 0.0); + next.l_hand.ori = Quaternion::rotation_z(-0.8) + * Quaternion::rotation_x(0.0 + accel_med * -0.8) + * Quaternion::rotation_y(0.0 + accel_med * -0.4); + next.l_hand.scale = Vec3::one() * 1.01; + + next.r_hand.offset = + Vec3::new(-8.0 + accel_slow * 10.0, 8.0 + accel_fast * 3.0, -2.0); + next.r_hand.ori = Quaternion::rotation_z(-0.8) + * Quaternion::rotation_x(0.0 + accel_med * -0.8) + * Quaternion::rotation_y(0.0 + accel_med * -0.4); + next.r_hand.scale = Vec3::one() * 1.01; + + next.main.offset = Vec3::new( + -8.0 + accel_slow * 10.0 + skeleton_attr.weapon_x, + 8.0 + accel_fast * 3.0, + 0.0, + ); + next.main.ori = Quaternion::rotation_z(-0.8) + * Quaternion::rotation_x(0.0 + accel_med * -0.8) + * Quaternion::rotation_y(0.0 + accel_med * -0.4); + next.main.scale = Vec3::one(); + next.torso.offset = Vec3::new(0.0, 0.0, 0.1) * skeleton_attr.scaler; + next.torso.ori = Quaternion::rotation_z(0.0) + * Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(0.0); + next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; + }, + Some(ToolKind::Bow(_)) => { + next.head.offset = Vec3::new( + 0.0 + skeleton_attr.neck_right, + 0.0 + skeleton_attr.neck_forward + decel * 0.8, + skeleton_attr.neck_height + 21.0, + ); + next.head.ori = Quaternion::rotation_z(decel * -0.25) + * Quaternion::rotation_x(0.0 + decel * -0.1) + * Quaternion::rotation_y(decel * -0.1); + next.head.scale = Vec3::one() * skeleton_attr.head_scale; + + next.chest.offset = Vec3::new(0.0, 0.0, 7.0); + next.chest.ori = Quaternion::rotation_z(decel * -0.2) + * Quaternion::rotation_x(0.0 + decel * -0.2) + * Quaternion::rotation_y(decel * 0.2); + next.chest.scale = Vec3::one(); + + next.belt.offset = Vec3::new(0.0, 0.0, 5.0); + next.belt.ori = Quaternion::rotation_z(decel * -0.1) + * Quaternion::rotation_x(0.0 + decel * -0.1) + * Quaternion::rotation_y(decel * 0.1); + next.belt.scale = Vec3::one(); + + next.shorts.offset = Vec3::new(0.0, 0.0, 2.0); + next.belt.ori = Quaternion::rotation_z(decel * -0.08) + * Quaternion::rotation_x(0.0 + decel * -0.08) + * Quaternion::rotation_y(decel * 0.08); + next.shorts.scale = Vec3::one(); + next.l_hand.offset = Vec3::new(1.0, -4.0, -1.0); + next.l_hand.ori = Quaternion::rotation_x(1.27) + * Quaternion::rotation_y(-0.6) + * Quaternion::rotation_z(-0.3); + next.l_hand.scale = Vec3::one() * 1.05; + next.r_hand.offset = Vec3::new(3.0, -1.0, -6.0); + next.r_hand.ori = Quaternion::rotation_x(1.27) + * Quaternion::rotation_y(-0.6) + * Quaternion::rotation_z(-0.3); + next.r_hand.scale = Vec3::one() * 1.05; + next.main.offset = Vec3::new(3.0, 2.0, -13.0); + next.main.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_y(0.3) + * Quaternion::rotation_z(-0.6); + next.main.scale = Vec3::one(); + + next.control.offset = Vec3::new(-7.0, 6.0, 6.0); + next.control.ori = Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(0.0); + next.control.scale = Vec3::one(); + next.torso.offset = Vec3::new(0.0, 0.0, 0.1) * skeleton_attr.scaler; + next.torso.ori = Quaternion::rotation_z(0.0) + * Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(0.0); + next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; + }, + Some(ToolKind::Dagger(_)) => { + next.head.offset = Vec3::new( + 0.0 + skeleton_attr.neck_right, + -2.0 + skeleton_attr.neck_forward + decel * 0.8, + skeleton_attr.neck_height + 21.0, + ); + next.head.ori = Quaternion::rotation_z(decel * 0.25) + * Quaternion::rotation_x(0.0 + decel * 0.1) + * Quaternion::rotation_y(decel * -0.1); + next.head.scale = Vec3::one() * skeleton_attr.head_scale; + + next.chest.offset = Vec3::new(0.0, 0.0, 7.0); + next.chest.ori = Quaternion::rotation_z(decel * -0.2) + * Quaternion::rotation_x(0.0 + decel * -0.2) + * Quaternion::rotation_y(decel * 0.2); + next.chest.scale = Vec3::one(); + + next.belt.offset = Vec3::new(0.0, 0.0, 5.0); + next.belt.ori = Quaternion::rotation_z(decel * -0.1) + * Quaternion::rotation_x(0.0 + decel * -0.1) + * Quaternion::rotation_y(decel * 0.1); + next.belt.scale = Vec3::one(); + + next.shorts.offset = Vec3::new(0.0, 0.0, 2.0); + next.belt.ori = Quaternion::rotation_z(decel * -0.08) + * Quaternion::rotation_x(0.0 + decel * -0.08) + * Quaternion::rotation_y(decel * 0.08); + next.shorts.scale = Vec3::one(); + next.l_hand.offset = + Vec3::new(-8.0 + accel_slow * 10.0, 8.0 + accel_fast * 3.0, 0.0); + next.l_hand.ori = Quaternion::rotation_z(-0.8) + * Quaternion::rotation_x(0.0 + accel_med * -0.8) + * Quaternion::rotation_y(0.0 + accel_med * -0.4); + next.l_hand.scale = Vec3::one() * 1.01; + + next.r_hand.offset = + Vec3::new(-8.0 + accel_slow * 10.0, 8.0 + accel_fast * 3.0, -2.0); + next.r_hand.ori = Quaternion::rotation_z(-0.8) + * Quaternion::rotation_x(0.0 + accel_med * -0.8) + * Quaternion::rotation_y(0.0 + accel_med * -0.4); + next.r_hand.scale = Vec3::one() * 1.01; + + next.main.offset = Vec3::new( + -8.0 + accel_slow * 10.0 + skeleton_attr.weapon_x, + 8.0 + accel_fast * 3.0, + 0.0, + ); + next.main.ori = Quaternion::rotation_z(-0.8) + * Quaternion::rotation_x(0.0 + accel_med * -0.8) + * Quaternion::rotation_y(0.0 + accel_med * -0.4); + next.main.scale = Vec3::one(); + next.torso.offset = Vec3::new(0.0, 0.0, 0.1) * skeleton_attr.scaler; + next.torso.ori = Quaternion::rotation_z(0.0) + * Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(0.0); + next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; + }, + Some(ToolKind::Debug(_)) => { + next.head.offset = Vec3::new( + 0.0 + skeleton_attr.neck_right, + -2.0 + skeleton_attr.neck_forward + decel * 0.8, + skeleton_attr.neck_height + 14.0, + ); + next.head.ori = Quaternion::rotation_x(0.0); + next.head.scale = Vec3::one() * skeleton_attr.head_scale; + + next.chest.offset = Vec3::new(0.0, 0.0, 7.0); + next.chest.ori = Quaternion::rotation_z(decel * -0.2) + * Quaternion::rotation_x(0.0 + decel * -0.2) + * Quaternion::rotation_y(decel * 0.2); + next.chest.scale = Vec3::one(); + + next.belt.offset = Vec3::new(0.0, 0.0, -2.0); + next.belt.ori = Quaternion::rotation_x(0.0); + next.belt.scale = Vec3::one(); + + next.shorts.offset = Vec3::new(0.0, 0.0, -5.0); + next.belt.ori = Quaternion::rotation_x(0.0); + next.shorts.scale = Vec3::one(); + + next.l_hand.offset = + Vec3::new(-8.0 + accel_slow * 10.0, 8.0 + accel_fast * 3.0, 0.0); + next.l_hand.ori = Quaternion::rotation_z(-0.8) + * Quaternion::rotation_x(0.0 + accel_med * -0.8) + * Quaternion::rotation_y(0.0 + accel_med * -0.4); + next.l_hand.scale = Vec3::one() * 1.01; + + next.r_hand.offset = + Vec3::new(-8.0 + accel_slow * 10.0, 8.0 + accel_fast * 3.0, -2.0); + next.r_hand.ori = Quaternion::rotation_z(-0.8) + * Quaternion::rotation_x(0.0 + accel_med * -0.8) + * Quaternion::rotation_y(0.0 + accel_med * -0.4); + next.r_hand.scale = Vec3::one() * 1.01; + + next.main.offset = Vec3::new( + -8.0 + accel_slow * 10.0 + skeleton_attr.weapon_x, + 8.0 + accel_fast * 3.0, + 0.0, + ); + next.main.ori = Quaternion::rotation_z(-0.8) + * Quaternion::rotation_x(0.0 + accel_med * -0.8) + * Quaternion::rotation_y(0.0 + accel_med * -0.4); + next.main.scale = Vec3::one(); + next.torso.offset = Vec3::new(0.0, 0.0, 0.1) * skeleton_attr.scaler; + next.torso.ori = Quaternion::rotation_z(0.0) + * Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(0.0); + next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; + }, + _ => {}, + } + + next.l_shoulder.offset = Vec3::new(-5.0, 0.0, 4.7); + next.l_shoulder.ori = Quaternion::rotation_x(0.0); + next.l_shoulder.scale = Vec3::one() * 1.1; + + next.r_shoulder.offset = Vec3::new(5.0, 0.0, 4.7); + next.r_shoulder.ori = Quaternion::rotation_x(0.0); + next.r_shoulder.scale = Vec3::one() * 1.1; + + next.glider.offset = Vec3::new(0.0, 5.0, 0.0); + next.glider.ori = Quaternion::rotation_y(0.0); + next.glider.scale = Vec3::one() * 0.0; + + next.lantern.offset = Vec3::new(0.0, 0.0, 0.0); + next.lantern.ori = Quaternion::rotation_x(0.0); + next.lantern.scale = Vec3::one() * 0.0; + + next.l_control.offset = Vec3::new(0.0, 0.0, 0.0); + next.l_control.ori = Quaternion::rotation_x(0.0); + next.l_control.scale = Vec3::one(); + + next.r_control.offset = Vec3::new(0.0, 0.0, 0.0); + next.r_control.ori = Quaternion::rotation_x(0.0); + next.r_control.scale = Vec3::one(); + next + } +} diff --git a/voxygen/src/anim/character/attack.rs b/voxygen/src/anim/character/attack.rs deleted file mode 100644 index 3cc674e799..0000000000 --- a/voxygen/src/anim/character/attack.rs +++ /dev/null @@ -1,287 +0,0 @@ -use super::{super::Animation, CharacterSkeleton, SkeletonAttr}; -use common::comp::item::Tool; -use std::f32::consts::PI; -use vek::*; - -pub struct Input { - pub attack: bool, -} -pub struct AttackAnimation; - -impl Animation for AttackAnimation { - type Dependency = (Option, f64); - type Skeleton = CharacterSkeleton; - - fn update_skeleton( - skeleton: &Self::Skeleton, - (active_tool_kind, _global_time): Self::Dependency, - anim_time: f64, - _rate: &mut f32, - skeleton_attr: &SkeletonAttr, - ) -> Self::Skeleton { - let mut next = (*skeleton).clone(); - - let lab = 1.0; - let accel_med = 1.0 - (anim_time as f32 * 16.0 * lab as f32).cos(); - let accel_slow = 1.0 - (anim_time as f32 * 12.0 * lab as f32).cos(); - let accel_fast = 1.0 - (anim_time as f32 * 24.0 * lab as f32).cos(); - let decel = (anim_time as f32 * 16.0 * lab as f32).min(PI / 2.0).sin(); - - let slow = (((5.0) - / (1.1 + 3.9 * ((anim_time as f32 * lab as f32 * 12.4).sin()).powf(2.0 as f32))) - .sqrt()) - * ((anim_time as f32 * lab as f32 * 12.4).sin()); - - next.head.offset = Vec3::new( - 0.0 + skeleton_attr.neck_right, - -2.0 + skeleton_attr.neck_forward + decel * 0.8, - skeleton_attr.neck_height + 21.0, - ); - next.head.ori = Quaternion::rotation_z(decel * 0.25) - * Quaternion::rotation_x(0.0 + decel * 0.1) - * Quaternion::rotation_y(decel * -0.1); - next.head.scale = Vec3::one() * skeleton_attr.head_scale; - - next.chest.offset = Vec3::new(0.0, 0.0, 7.0); - next.chest.ori = Quaternion::rotation_z(decel * -0.2) - * Quaternion::rotation_x(0.0 + decel * -0.2) - * Quaternion::rotation_y(decel * 0.2); - next.chest.scale = Vec3::one(); - - next.belt.offset = Vec3::new(0.0, 0.0, 5.0); - next.belt.ori = Quaternion::rotation_z(decel * -0.1) - * Quaternion::rotation_x(0.0 + decel * -0.1) - * Quaternion::rotation_y(decel * 0.1); - next.belt.scale = Vec3::one(); - - next.shorts.offset = Vec3::new(0.0, 0.0, 2.0); - next.belt.ori = Quaternion::rotation_z(decel * -0.08) - * Quaternion::rotation_x(0.0 + decel * -0.08) - * Quaternion::rotation_y(decel * 0.08); - next.shorts.scale = Vec3::one(); - - match active_tool_kind { - //TODO: Inventory - Some(Tool::Sword) => { - next.l_hand.offset = Vec3::new(0.0, 1.0, 0.0); - next.l_hand.ori = Quaternion::rotation_x(1.27); - next.l_hand.scale = Vec3::one() * 1.04; - next.r_hand.offset = Vec3::new(0.0, 0.0, -3.0); - next.r_hand.ori = Quaternion::rotation_x(1.27); - next.r_hand.scale = Vec3::one() * 1.05; - next.main.offset = Vec3::new(0.0, 6.0, -1.0); - next.main.ori = Quaternion::rotation_x(-0.3) - * Quaternion::rotation_y(0.0) - * Quaternion::rotation_z(0.0); - next.main.scale = Vec3::one(); - - next.control.offset = Vec3::new(-8.0 - slow * 1.0, 3.0 - slow * 5.0, 0.0); - next.control.ori = Quaternion::rotation_x(-1.2) - * Quaternion::rotation_y(slow * 1.5) - * Quaternion::rotation_z(1.4 + slow * 0.5); - next.control.scale = Vec3::one(); - }, - Some(Tool::Axe) => { - next.l_hand.offset = - Vec3::new(-8.0 + accel_slow * 10.0, 8.0 + accel_fast * 3.0, 0.0); - next.l_hand.ori = Quaternion::rotation_z(-0.8) - * Quaternion::rotation_x(0.0 + accel_med * -0.8) - * Quaternion::rotation_y(0.0 + accel_med * -0.4); - next.l_hand.scale = Vec3::one() * 1.01; - - next.r_hand.offset = - Vec3::new(-8.0 + accel_slow * 10.0, 8.0 + accel_fast * 3.0, -2.0); - next.r_hand.ori = Quaternion::rotation_z(-0.8) - * Quaternion::rotation_x(0.0 + accel_med * -0.8) - * Quaternion::rotation_y(0.0 + accel_med * -0.4); - next.r_hand.scale = Vec3::one() * 1.01; - - next.main.offset = Vec3::new( - -8.0 + accel_slow * 10.0 + skeleton_attr.weapon_x, - 8.0 + accel_fast * 3.0, - 0.0, - ); - next.main.ori = Quaternion::rotation_z(-0.8) - * Quaternion::rotation_x(0.0 + accel_med * -0.8) - * Quaternion::rotation_y(0.0 + accel_med * -0.4); - next.main.scale = Vec3::one(); - }, - Some(Tool::Hammer) => { - next.l_hand.offset = - Vec3::new(-8.0 + accel_slow * 10.0, 8.0 + accel_fast * 3.0, 0.0); - next.l_hand.ori = Quaternion::rotation_z(-0.8) - * Quaternion::rotation_x(0.0 + accel_med * -0.8) - * Quaternion::rotation_y(0.0 + accel_med * -0.4); - next.l_hand.scale = Vec3::one() * 1.01; - - next.r_hand.offset = - Vec3::new(-8.0 + accel_slow * 10.0, 8.0 + accel_fast * 3.0, -2.0); - next.r_hand.ori = Quaternion::rotation_z(-0.8) - * Quaternion::rotation_x(0.0 + accel_med * -0.8) - * Quaternion::rotation_y(0.0 + accel_med * -0.4); - next.r_hand.scale = Vec3::one() * 1.01; - - next.main.offset = Vec3::new( - -8.0 + accel_slow * 10.0 + skeleton_attr.weapon_x, - 8.0 + accel_fast * 3.0, - 0.0, - ); - next.main.ori = Quaternion::rotation_z(-0.8) - * Quaternion::rotation_x(0.0 + accel_med * -0.8) - * Quaternion::rotation_y(0.0 + accel_med * -0.4); - next.main.scale = Vec3::one(); - }, - Some(Tool::Staff) => { - next.l_hand.offset = - Vec3::new(-8.0 + accel_slow * 10.0, 8.0 + accel_fast * 3.0, 0.0); - next.l_hand.ori = Quaternion::rotation_z(-0.8) - * Quaternion::rotation_x(0.0 + accel_med * -0.8) - * Quaternion::rotation_y(0.0 + accel_med * -0.4); - next.l_hand.scale = Vec3::one() * 1.01; - - next.r_hand.offset = - Vec3::new(-8.0 + accel_slow * 10.0, 8.0 + accel_fast * 3.0, -2.0); - next.r_hand.ori = Quaternion::rotation_z(-0.8) - * Quaternion::rotation_x(0.0 + accel_med * -0.8) - * Quaternion::rotation_y(0.0 + accel_med * -0.4); - next.r_hand.scale = Vec3::one() * 1.01; - - next.main.offset = Vec3::new( - -8.0 + accel_slow * 10.0 + skeleton_attr.weapon_x, - 8.0 + accel_fast * 3.0, - 0.0, - ); - next.main.ori = Quaternion::rotation_z(-0.8) - * Quaternion::rotation_x(0.0 + accel_med * -0.8) - * Quaternion::rotation_y(0.0 + accel_med * -0.4); - next.main.scale = Vec3::one(); - }, - Some(Tool::Shield) => { - next.l_hand.offset = - Vec3::new(-8.0 + accel_slow * 10.0, 8.0 + accel_fast * 3.0, 0.0); - next.l_hand.ori = Quaternion::rotation_z(-0.8) - * Quaternion::rotation_x(0.0 + accel_med * -0.8) - * Quaternion::rotation_y(0.0 + accel_med * -0.4); - next.l_hand.scale = Vec3::one() * 1.01; - - next.r_hand.offset = - Vec3::new(-8.0 + accel_slow * 10.0, 8.0 + accel_fast * 3.0, -2.0); - next.r_hand.ori = Quaternion::rotation_z(-0.8) - * Quaternion::rotation_x(0.0 + accel_med * -0.8) - * Quaternion::rotation_y(0.0 + accel_med * -0.4); - next.r_hand.scale = Vec3::one() * 1.01; - - next.main.offset = Vec3::new( - -8.0 + accel_slow * 10.0 + skeleton_attr.weapon_x, - 8.0 + accel_fast * 3.0, - 0.0, - ); - next.main.ori = Quaternion::rotation_z(-0.8) - * Quaternion::rotation_x(0.0 + accel_med * -0.8) - * Quaternion::rotation_y(0.0 + accel_med * -0.4); - next.main.scale = Vec3::one(); - }, - Some(Tool::Bow) => { - next.l_hand.offset = Vec3::new(-7.0, -2.0 + slow * 5.0, -1.0); - next.l_hand.ori = Quaternion::rotation_x(PI / 2.0) - * Quaternion::rotation_y(-0.3) - * Quaternion::rotation_z(0.3); - next.l_hand.scale = Vec3::one() * 1.01; - next.r_hand.offset = Vec3::new(1.0, 8.0, 2.5); - next.r_hand.ori = Quaternion::rotation_x(PI / 2.0) - * Quaternion::rotation_y(0.3) - * Quaternion::rotation_z(0.3); - next.r_hand.scale = Vec3::one() * 1.01; - next.main.offset = Vec3::new( - -4.0 + skeleton_attr.weapon_x, - 15.0 + skeleton_attr.weapon_y, - -4.0, - ); - next.main.ori = Quaternion::rotation_x(0.0) - * Quaternion::rotation_y(0.4) - * Quaternion::rotation_z(0.0); - next.main.scale = Vec3::one(); - }, - Some(Tool::Dagger) => { - next.l_hand.offset = - Vec3::new(-8.0 + accel_slow * 10.0, 8.0 + accel_fast * 3.0, 0.0); - next.l_hand.ori = Quaternion::rotation_z(-0.8) - * Quaternion::rotation_x(0.0 + accel_med * -0.8) - * Quaternion::rotation_y(0.0 + accel_med * -0.4); - next.l_hand.scale = Vec3::one() * 1.01; - - next.r_hand.offset = - Vec3::new(-8.0 + accel_slow * 10.0, 8.0 + accel_fast * 3.0, -2.0); - next.r_hand.ori = Quaternion::rotation_z(-0.8) - * Quaternion::rotation_x(0.0 + accel_med * -0.8) - * Quaternion::rotation_y(0.0 + accel_med * -0.4); - next.r_hand.scale = Vec3::one() * 1.01; - - next.main.offset = Vec3::new( - -8.0 + accel_slow * 10.0 + skeleton_attr.weapon_x, - 8.0 + accel_fast * 3.0, - 0.0, - ); - next.main.ori = Quaternion::rotation_z(-0.8) - * Quaternion::rotation_x(0.0 + accel_med * -0.8) - * Quaternion::rotation_y(0.0 + accel_med * -0.4); - next.main.scale = Vec3::one(); - }, - Some(Tool::Debug(_)) => { - next.l_hand.offset = - Vec3::new(-8.0 + accel_slow * 10.0, 8.0 + accel_fast * 3.0, 0.0); - next.l_hand.ori = Quaternion::rotation_z(-0.8) - * Quaternion::rotation_x(0.0 + accel_med * -0.8) - * Quaternion::rotation_y(0.0 + accel_med * -0.4); - next.l_hand.scale = Vec3::one() * 1.01; - - next.r_hand.offset = - Vec3::new(-8.0 + accel_slow * 10.0, 8.0 + accel_fast * 3.0, -2.0); - next.r_hand.ori = Quaternion::rotation_z(-0.8) - * Quaternion::rotation_x(0.0 + accel_med * -0.8) - * Quaternion::rotation_y(0.0 + accel_med * -0.4); - next.r_hand.scale = Vec3::one() * 1.01; - - next.main.offset = Vec3::new( - -8.0 + accel_slow * 10.0 + skeleton_attr.weapon_x, - 8.0 + accel_fast * 3.0, - 0.0, - ); - next.main.ori = Quaternion::rotation_z(-0.8) - * Quaternion::rotation_x(0.0 + accel_med * -0.8) - * Quaternion::rotation_y(0.0 + accel_med * -0.4); - next.main.scale = Vec3::one(); - }, - _ => {}, - } - next.l_shoulder.offset = Vec3::new(-5.0, 0.0, 4.7); - next.l_shoulder.ori = Quaternion::rotation_x(0.0); - next.l_shoulder.scale = Vec3::one() * 1.1; - - next.r_shoulder.offset = Vec3::new(5.0, 0.0, 4.7); - next.r_shoulder.ori = Quaternion::rotation_x(0.0); - next.r_shoulder.scale = Vec3::one() * 1.1; - - next.glider.offset = Vec3::new(0.0, 5.0, 0.0); - next.glider.ori = Quaternion::rotation_y(0.0); - next.glider.scale = Vec3::one() * 0.0; - - next.lantern.offset = Vec3::new(0.0, 0.0, 0.0); - next.lantern.ori = Quaternion::rotation_x(0.0); - next.lantern.scale = Vec3::one() * 0.0; - - next.torso.offset = Vec3::new(0.0, -0.2, 0.1) * skeleton_attr.scaler; - next.torso.ori = - Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0) * Quaternion::rotation_y(0.0); - next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; - - next.l_control.offset = Vec3::new(0.0, 0.0, 0.0); - next.l_control.ori = Quaternion::rotation_x(0.0); - next.l_control.scale = Vec3::one(); - - next.r_control.offset = Vec3::new(0.0, 0.0, 0.0); - next.r_control.ori = Quaternion::rotation_x(0.0); - next.r_control.scale = Vec3::one(); - next - } -} diff --git a/voxygen/src/anim/character/beta.rs b/voxygen/src/anim/character/beta.rs new file mode 100644 index 0000000000..a06a876332 --- /dev/null +++ b/voxygen/src/anim/character/beta.rs @@ -0,0 +1,132 @@ +use super::{super::Animation, CharacterSkeleton, SkeletonAttr}; +use common::comp::item::ToolKind; +use vek::*; + +pub struct BetaAnimation; + +impl Animation for BetaAnimation { + type Dependency = (Option, f32, f64); + type Skeleton = CharacterSkeleton; + + fn update_skeleton( + skeleton: &Self::Skeleton, + (active_tool_kind, _velocity, _global_time): Self::Dependency, + anim_time: f64, + rate: &mut f32, + skeleton_attr: &SkeletonAttr, + ) -> Self::Skeleton { + *rate = 1.0; + let mut next = (*skeleton).clone(); + + let lab = 1.0; + + let fast = (((5.0) + / (1.1 + 3.9 * ((anim_time as f32 * lab as f32 * 28.0).sin()).powf(2.0 as f32))) + .sqrt()) + * ((anim_time as f32 * lab as f32 * 28.0).sin()); + let footquick = (((5.0) + / (0.4 + 4.6 * ((anim_time as f32 * lab as f32 * 14.0).sin()).powf(2.0 as f32))) + .sqrt()) + * ((anim_time as f32 * lab as f32 * 14.0).sin()); + let foot = (((5.0) + / (1.1 + 3.9 * ((anim_time as f32 * lab as f32 * 14.0).sin()).powf(2.0 as f32))) + .sqrt()) + * ((anim_time as f32 * lab as f32 * 14.0).sin()); + let slow = (((5.0) + / (0.6 + 4.4 * ((anim_time as f32 * lab as f32 * 14.0).sin()).powf(2.0 as f32))) + .sqrt()) + * ((anim_time as f32 * lab as f32 * 14.0).sin()); + + match active_tool_kind { + //TODO: Inventory + Some(ToolKind::Axe(_)) | Some(ToolKind::Hammer(_)) | Some(ToolKind::Sword(_)) => { + //INTENTION: SWORD + next.head.offset = Vec3::new( + 0.0 + skeleton_attr.neck_right, + -2.0 + skeleton_attr.neck_forward, + skeleton_attr.neck_height + 14.0, + ); + next.head.ori = Quaternion::rotation_z(slow * -0.18) + * Quaternion::rotation_x(-0.1 + slow * -0.28) + * Quaternion::rotation_y(0.2 + slow * 0.18); + next.head.scale = Vec3::one() * skeleton_attr.head_scale; + + next.chest.offset = Vec3::new(0.0 + foot * 2.0, 0.0, 7.0); + next.chest.ori = Quaternion::rotation_z(slow * 0.2) + * Quaternion::rotation_x(0.0 + slow * 0.2) + * Quaternion::rotation_y(slow * -0.1); + next.chest.scale = Vec3::one(); + + next.belt.offset = Vec3::new(0.0, 0.0, -2.0); + next.belt.ori = Quaternion::rotation_z(slow * 0.1) + * Quaternion::rotation_x(0.0 + slow * 0.1) + * Quaternion::rotation_y(slow * -0.04); + next.belt.scale = Vec3::one(); + + next.shorts.offset = Vec3::new(0.0, 0.0, -5.0); + next.shorts.ori = Quaternion::rotation_z(slow * 0.1) + * Quaternion::rotation_x(0.0 + slow * 0.1) + * Quaternion::rotation_y(slow * -0.05); + next.shorts.scale = Vec3::one(); + + next.l_hand.offset = Vec3::new(0.0, 1.0, 0.0); + next.l_hand.ori = Quaternion::rotation_x(1.27); + next.l_hand.scale = Vec3::one() * 1.04; + next.r_hand.offset = Vec3::new(0.0, 0.0, -3.0); + next.r_hand.ori = Quaternion::rotation_x(1.27); + next.r_hand.scale = Vec3::one() * 1.05; + next.main.offset = Vec3::new(0.0, 6.0, -1.0); + next.main.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(0.0); + next.main.scale = Vec3::one(); + + next.control.offset = Vec3::new(-8.0 + slow * 1.5, 1.5 + slow * 1.0, 0.0); + next.control.ori = Quaternion::rotation_x(-1.4) + * Quaternion::rotation_y(slow * 2.0 + 0.7) + * Quaternion::rotation_z(1.7 - slow * 0.4 + fast * 0.6); + next.control.scale = Vec3::one(); + next.l_foot.offset = Vec3::new(-3.4, footquick * -9.5, 8.0); + next.l_foot.ori = Quaternion::rotation_x(footquick * 0.3) + * Quaternion::rotation_y(footquick * -0.6); + next.l_foot.scale = Vec3::one(); + + next.r_foot.offset = Vec3::new(3.4, footquick * 9.5, 8.0); + next.r_foot.ori = Quaternion::rotation_x(footquick * -0.3) + * Quaternion::rotation_y(footquick * 0.2); + next.r_foot.scale = Vec3::one(); + next.torso.offset = Vec3::new(0.0, 0.0, 0.1) * skeleton_attr.scaler; + next.torso.ori = Quaternion::rotation_z(0.0) + * Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(0.0); + next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; + }, + _ => {}, + } + + next.l_shoulder.offset = Vec3::new(-5.0, 0.0, 4.7); + next.l_shoulder.ori = Quaternion::rotation_x(0.0); + next.l_shoulder.scale = Vec3::one() * 1.1; + + next.r_shoulder.offset = Vec3::new(5.0, 0.0, 4.7); + next.r_shoulder.ori = Quaternion::rotation_x(0.0); + next.r_shoulder.scale = Vec3::one() * 1.1; + + next.glider.offset = Vec3::new(0.0, 5.0, 0.0); + next.glider.ori = Quaternion::rotation_y(0.0); + next.glider.scale = Vec3::one() * 0.0; + + next.lantern.offset = Vec3::new(0.0, 0.0, 0.0); + next.lantern.ori = Quaternion::rotation_x(0.0); + next.lantern.scale = Vec3::one() * 0.0; + + next.l_control.offset = Vec3::new(0.0, 0.0, 0.0); + next.l_control.ori = Quaternion::rotation_x(0.0); + next.l_control.scale = Vec3::one(); + + next.r_control.offset = Vec3::new(0.0, 0.0, 0.0); + next.r_control.ori = Quaternion::rotation_x(0.0); + next.r_control.scale = Vec3::one(); + next + } +} diff --git a/voxygen/src/anim/character/block.rs b/voxygen/src/anim/character/block.rs index 53cff1dda0..a9e58b8756 100644 --- a/voxygen/src/anim/character/block.rs +++ b/voxygen/src/anim/character/block.rs @@ -1,5 +1,5 @@ use super::{super::Animation, CharacterSkeleton, SkeletonAttr}; -use common::comp::item::Tool; +use common::comp::item::ToolKind; use std::{f32::consts::PI, ops::Mul}; use vek::*; @@ -9,7 +9,7 @@ pub struct Input { pub struct BlockAnimation; impl Animation for BlockAnimation { - type Dependency = (Option, f64); + type Dependency = (Option, f64); type Skeleton = CharacterSkeleton; fn update_skeleton( @@ -62,7 +62,7 @@ impl Animation for BlockAnimation { match active_tool_kind { //TODO: Inventory - Some(Tool::Sword) => { + Some(ToolKind::Sword(_)) => { next.l_hand.offset = Vec3::new(0.0, -5.0, -5.0); next.l_hand.ori = Quaternion::rotation_x(1.27); next.l_hand.scale = Vec3::one() * 1.04; @@ -81,7 +81,7 @@ impl Animation for BlockAnimation { * Quaternion::rotation_z(-1.57); next.control.scale = Vec3::one(); }, - Some(Tool::Axe) => { + Some(ToolKind::Axe(_)) => { next.l_hand.offset = Vec3::new( -6.0 + wave_ultra_slow_cos * 1.0, 3.5 + wave_ultra_slow_cos * 0.5, @@ -106,7 +106,7 @@ impl Animation for BlockAnimation { * Quaternion::rotation_z(0.0); next.main.scale = Vec3::one(); }, - Some(Tool::Hammer) => { + Some(ToolKind::Hammer(_)) => { next.l_hand.offset = Vec3::new(-7.0, 3.5, 6.5); next.l_hand.ori = Quaternion::rotation_x(2.07) * Quaternion::rotation_y(0.0) @@ -127,7 +127,7 @@ impl Animation for BlockAnimation { * Quaternion::rotation_z(-0.85); next.main.scale = Vec3::one(); }, - Some(Tool::Staff) => { + Some(ToolKind::Staff(_)) => { next.l_hand.offset = Vec3::new( -6.0 + wave_ultra_slow_cos * 1.0, 3.5 + wave_ultra_slow_cos * 0.5, @@ -152,7 +152,7 @@ impl Animation for BlockAnimation { * Quaternion::rotation_z(0.0); next.main.scale = Vec3::one(); }, - Some(Tool::Shield) => { + Some(ToolKind::Shield(_)) => { next.l_hand.offset = Vec3::new( -6.0 + wave_ultra_slow_cos * 1.0, 3.5 + wave_ultra_slow_cos * 0.5, @@ -177,7 +177,7 @@ impl Animation for BlockAnimation { * Quaternion::rotation_z(0.0); next.main.scale = Vec3::one(); }, - Some(Tool::Bow) => { + Some(ToolKind::Bow(_)) => { next.l_hand.offset = Vec3::new( -6.0 + wave_ultra_slow_cos * 1.0, 3.5 + wave_ultra_slow_cos * 0.5, @@ -202,7 +202,7 @@ impl Animation for BlockAnimation { * Quaternion::rotation_z(0.0); next.main.scale = Vec3::one(); }, - Some(Tool::Dagger) => { + Some(ToolKind::Dagger(_)) => { next.l_hand.offset = Vec3::new( -6.0 + wave_ultra_slow_cos * 1.0, 3.5 + wave_ultra_slow_cos * 0.5, @@ -223,7 +223,7 @@ impl Animation for BlockAnimation { * Quaternion::rotation_z(0.0); next.main.scale = Vec3::one(); }, - Some(Tool::Debug(_)) => { + Some(ToolKind::Debug(_)) => { next.l_hand.offset = Vec3::new(-7.0, 3.5, 6.5); next.l_hand.ori = Quaternion::rotation_x(2.07) * Quaternion::rotation_y(0.0) @@ -274,6 +274,13 @@ impl Animation for BlockAnimation { next.torso.ori = Quaternion::rotation_x(0.0); next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; + next.l_control.offset = Vec3::new(0.0, 0.0, 0.0); + next.l_control.ori = Quaternion::rotation_x(0.0); + next.l_control.scale = Vec3::one(); + + next.r_control.offset = Vec3::new(0.0, 0.0, 0.0); + next.r_control.ori = Quaternion::rotation_x(0.0); + next.r_control.scale = Vec3::one(); next } } diff --git a/voxygen/src/anim/character/blockidle.rs b/voxygen/src/anim/character/blockidle.rs index 09ac00407d..0c7551b71b 100644 --- a/voxygen/src/anim/character/blockidle.rs +++ b/voxygen/src/anim/character/blockidle.rs @@ -1,5 +1,5 @@ use super::{super::Animation, CharacterSkeleton, SkeletonAttr}; -use common::comp::item::Tool; +use common::comp::item::ToolKind; use std::{f32::consts::PI, ops::Mul}; use vek::*; @@ -9,7 +9,7 @@ pub struct Input { pub struct BlockIdleAnimation; impl Animation for BlockIdleAnimation { - type Dependency = (Option, f64); + type Dependency = (Option, f64); type Skeleton = CharacterSkeleton; fn update_skeleton( @@ -61,7 +61,7 @@ impl Animation for BlockIdleAnimation { match active_tool_kind { //TODO: Inventory - Some(Tool::Sword) => { + Some(ToolKind::Sword(_)) => { next.l_hand.offset = Vec3::new(0.0, -5.0, -5.0); next.l_hand.ori = Quaternion::rotation_x(1.27); next.l_hand.scale = Vec3::one() * 1.04; @@ -80,7 +80,7 @@ impl Animation for BlockIdleAnimation { * Quaternion::rotation_z(-1.57); next.control.scale = Vec3::one(); }, - Some(Tool::Axe) => { + Some(ToolKind::Axe(_)) => { next.l_hand.offset = Vec3::new( -6.0 + wave_ultra_slow_cos * 1.0, 3.5 + wave_ultra_slow_cos * 0.5, @@ -105,7 +105,7 @@ impl Animation for BlockIdleAnimation { * Quaternion::rotation_z(0.0); next.main.scale = Vec3::one(); }, - Some(Tool::Hammer) => { + Some(ToolKind::Hammer(_)) => { next.l_hand.offset = Vec3::new(-7.0, 3.5 + wave_ultra_slow * 2.0, 6.5); next.l_hand.ori = Quaternion::rotation_x(2.07) * Quaternion::rotation_y(0.0) @@ -126,7 +126,7 @@ impl Animation for BlockIdleAnimation { * Quaternion::rotation_z(-0.85); next.main.scale = Vec3::one(); }, - Some(Tool::Staff) => { + Some(ToolKind::Staff(_)) => { next.l_hand.offset = Vec3::new( -6.0 + wave_ultra_slow_cos * 1.0, 3.5 + wave_ultra_slow_cos * 0.5, @@ -151,7 +151,7 @@ impl Animation for BlockIdleAnimation { * Quaternion::rotation_z(0.0); next.main.scale = Vec3::one(); }, - Some(Tool::Shield) => { + Some(ToolKind::Shield(_)) => { next.l_hand.offset = Vec3::new( -6.0 + wave_ultra_slow_cos * 1.0, 3.5 + wave_ultra_slow_cos * 0.5, @@ -176,7 +176,7 @@ impl Animation for BlockIdleAnimation { * Quaternion::rotation_z(0.0); next.main.scale = Vec3::one(); }, - Some(Tool::Bow) => { + Some(ToolKind::Bow(_)) => { next.l_hand.offset = Vec3::new( -6.0 + wave_ultra_slow_cos * 1.0, 3.5 + wave_ultra_slow_cos * 0.5, @@ -201,7 +201,7 @@ impl Animation for BlockIdleAnimation { * Quaternion::rotation_z(0.0); next.main.scale = Vec3::one(); }, - Some(Tool::Dagger) => { + Some(ToolKind::Dagger(_)) => { next.l_hand.offset = Vec3::new( -6.0 + wave_ultra_slow_cos * 1.0, 3.5 + wave_ultra_slow_cos * 0.5, @@ -222,7 +222,7 @@ impl Animation for BlockIdleAnimation { * Quaternion::rotation_z(0.0); next.main.scale = Vec3::one(); }, - Some(Tool::Debug(_)) => { + Some(ToolKind::Debug(_)) => { next.l_hand.offset = Vec3::new(-7.0, 3.5 + wave_ultra_slow * 2.0, 6.5); next.l_hand.ori = Quaternion::rotation_x(2.07) * Quaternion::rotation_y(0.0) @@ -273,6 +273,13 @@ impl Animation for BlockIdleAnimation { next.torso.ori = Quaternion::rotation_x(0.0); next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; + next.l_control.offset = Vec3::new(0.0, 0.0, 0.0); + next.l_control.ori = Quaternion::rotation_x(0.0); + next.l_control.scale = Vec3::one(); + + next.r_control.offset = Vec3::new(0.0, 0.0, 0.0); + next.r_control.ori = Quaternion::rotation_x(0.0); + next.r_control.scale = Vec3::one(); next } } diff --git a/voxygen/src/anim/character/charge.rs b/voxygen/src/anim/character/charge.rs index 18203270c9..bb6e3b168b 100644 --- a/voxygen/src/anim/character/charge.rs +++ b/voxygen/src/anim/character/charge.rs @@ -1,87 +1,163 @@ use super::{super::Animation, CharacterSkeleton, SkeletonAttr}; -use common::comp::item::Tool; +use common::comp::item::ToolKind; use std::f32::consts::PI; use vek::*; -pub struct Input { - pub attack: bool, -} pub struct ChargeAnimation; impl Animation for ChargeAnimation { - type Dependency = (Option, f64); + type Dependency = (Option, f32, f64); type Skeleton = CharacterSkeleton; fn update_skeleton( skeleton: &Self::Skeleton, - (_active_tool_kind, _global_time): Self::Dependency, + (active_tool_kind, velocity, _global_time): Self::Dependency, anim_time: f64, - _rate: &mut f32, + rate: &mut f32, skeleton_attr: &SkeletonAttr, ) -> Self::Skeleton { + *rate = 1.0; + let mut next = (*skeleton).clone(); - let wave_stop_quick = (anim_time as f32 * 8.0).min(PI / 2.0).sin(); - let constant = 8.0; + let lab = 1.0; - let wave_cos = (((5.0) - / (1.1 + 3.9 * ((anim_time as f32 * constant as f32 * 2.4).sin()).powf(2.0 as f32))) + let foot = (((5.0) + / (0.2 + 4.8 * ((anim_time as f32 * lab as f32 * 8.0).sin()).powf(2.0 as f32))) .sqrt()) - * ((anim_time as f32 * constant as f32 * 1.5).sin()); - let wave_cos_dub = (((5.0) - / (1.1 + 3.9 * ((anim_time as f32 * constant as f32 * 4.8).sin()).powf(2.0 as f32))) + * ((anim_time as f32 * lab as f32 * 8.0).sin()); + let foote = (((5.0) + / (0.5 + 4.5 * ((anim_time as f32 * lab as f32 * 8.0 + 1.57).sin()).powf(2.0 as f32))) .sqrt()) - * ((anim_time as f32 * constant as f32 * 1.5).sin()); + * ((anim_time as f32 * lab as f32 * 8.0).sin()); + let stress = (((5.0) + / (0.5 + 4.5 * ((anim_time as f32 * lab as f32 * 20.0).cos()).powf(2.0 as f32))) + .sqrt()) + * ((anim_time as f32 * lab as f32 * 20.0).cos()); + let quick = (((5.0) + / (3.5 + 1.5 * ((anim_time as f32 * lab as f32 * 8.0).sin()).powf(2.0 as f32))) + .sqrt()) + * ((anim_time as f32 * lab as f32 * 8.0).sin()); + let quicka = (((5.0) + / (3.5 + + 1.5 + * ((anim_time as f32 * lab as f32 * 8.0 + PI / 2.0).sin()).powf(2.0 as f32))) + .sqrt()) + * ((anim_time as f32 * lab as f32 * 8.0 + PI / 2.0).sin()); + let stop = ((anim_time as f32).powf(0.3 as f32)).min(1.2); + let stopa = ((anim_time as f32).powf(0.9 as f32)).min(5.0); + next.head.offset = Vec3::new( - 0.0 + skeleton_attr.neck_right, - 5.0 + skeleton_attr.neck_forward, - skeleton_attr.neck_height + 19.0 + wave_cos * 2.0, + 0.0 + stop * -2.0 + skeleton_attr.neck_right, + -2.0 + stop * 2.5 + skeleton_attr.neck_forward, + skeleton_attr.neck_height + 14.0, ); - next.head.ori = - Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0) * Quaternion::rotation_y(0.0); + next.head.ori = Quaternion::rotation_z(stop * -1.0) + * Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(stop * -0.3); next.head.scale = Vec3::one() * skeleton_attr.head_scale; - next.chest.offset = Vec3::new(0.0, 0.0, 7.0 + wave_cos * 2.0); - next.chest.ori = Quaternion::rotation_x(-0.7) * Quaternion::rotation_z(-0.9); + next.chest.offset = Vec3::new(0.0, 0.0, 7.0); + next.chest.ori = Quaternion::rotation_z(stop * 1.2 + stress * stop * 0.02) + * Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(0.0); next.chest.scale = Vec3::one(); - next.belt.offset = Vec3::new(0.0, 0.0, 5.0 + wave_cos * 2.0); - next.belt.ori = Quaternion::rotation_x(-0.6) * Quaternion::rotation_z(-0.9); + next.belt.offset = Vec3::new(0.0, 0.0, -2.0); + next.belt.ori = Quaternion::rotation_z(stop * -0.5); next.belt.scale = Vec3::one(); - next.shorts.offset = Vec3::new(0.0, 0.0, 2.0 + wave_cos * 2.0); - next.shorts.ori = Quaternion::rotation_x(-0.5) * Quaternion::rotation_z(-0.9); + next.shorts.offset = Vec3::new(0.0, 0.0, -5.0); + next.shorts.ori = Quaternion::rotation_z(stop * -0.7); next.shorts.scale = Vec3::one(); - next.l_hand.offset = Vec3::new(-8.0, -7.5, 5.0); - next.l_hand.ori = Quaternion::rotation_z(0.5) - * Quaternion::rotation_x(wave_stop_quick * -1.5 + 0.5 + 1.57) - * Quaternion::rotation_y(-0.6); - next.l_hand.scale = Vec3::one() * 1.01; + match active_tool_kind { + //TODO: Inventory + Some(ToolKind::Staff(_)) => { + next.l_hand.offset = Vec3::new(1.0, -2.0, -5.0); + next.l_hand.ori = Quaternion::rotation_x(1.47) * Quaternion::rotation_y(-0.3); + next.l_hand.scale = Vec3::one() * 1.05; + next.r_hand.offset = Vec3::new(9.0, 1.0, 0.0); + next.r_hand.ori = Quaternion::rotation_x(1.8) + * Quaternion::rotation_y(0.5) + * Quaternion::rotation_z(-0.27); + next.r_hand.scale = Vec3::one() * 1.05; + next.main.offset = Vec3::new(9.2, 8.4, 13.2); + next.main.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_y(3.14 + 0.3) + * Quaternion::rotation_z(0.9); + next.main.scale = Vec3::one(); - next.r_hand.offset = Vec3::new(-8.0, -8.0, 3.0); - next.r_hand.ori = Quaternion::rotation_z(0.5) - * Quaternion::rotation_x(wave_stop_quick * -1.5 + 0.5 + 1.57) - * Quaternion::rotation_y(-0.6); - next.r_hand.scale = Vec3::one() * 1.01; + next.control.offset = Vec3::new( + -7.0 + quick * 3.5 * (1.0 / (stopa + 0.1)), + 6.0 + quicka * 3.5 * (1.0 / (stopa + 0.1)), + 6.0 - stop * 3.0, + ); + next.control.ori = Quaternion::rotation_x(stop * -0.2) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(stop * 0.2); + next.control.scale = Vec3::one(); + }, + Some(ToolKind::Bow(_)) => { + next.l_hand.offset = Vec3::new(1.0, -4.0 + stop * -1.0, 0.0); + next.l_hand.ori = Quaternion::rotation_x(1.20) + * Quaternion::rotation_y(-0.6) + * Quaternion::rotation_z(-0.3); + next.l_hand.scale = Vec3::one() * 1.05; + next.r_hand.offset = Vec3::new(3.0, -1.0, -5.0); + next.r_hand.ori = Quaternion::rotation_x(1.20) + * Quaternion::rotation_y(-0.6) + * Quaternion::rotation_z(-0.3); + next.r_hand.scale = Vec3::one() * 1.05; + next.main.offset = Vec3::new(3.0, 2.0, -13.0); + next.main.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_y(0.3) + * Quaternion::rotation_z(-0.6); + next.main.scale = Vec3::one(); - next.l_foot.offset = Vec3::new(-3.4, 0.0 + wave_cos * 1.0, 6.0 - wave_cos_dub * 0.7); - next.l_foot.ori = Quaternion::rotation_x(-0.0 - wave_cos * 0.8); - next.l_foot.scale = Vec3::one(); + next.control.offset = Vec3::new(-9.0 + stop * 13.0, 6.0 + stop * 4.0, 8.0); + next.control.ori = Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(stop * -0.5) + * Quaternion::rotation_z(stop * -0.9); + next.control.scale = Vec3::one(); + }, + _ => {}, + } + if velocity > 0.5 { + next.l_foot.offset = Vec3::new(-3.4 - foot * 1.5, foote * 2.0, 8.0); + next.l_foot.ori = Quaternion::rotation_x(foote * -0.1) + * Quaternion::rotation_z(0.4) + * Quaternion::rotation_y(0.15); + next.l_foot.scale = Vec3::one(); - next.r_foot.offset = Vec3::new(3.4, 0.0 - wave_cos * 1.0, 6.0 - wave_cos_dub * 0.7); - next.r_foot.ori = Quaternion::rotation_x(-0.0 + wave_cos * 0.8); - next.r_foot.scale = Vec3::one(); + next.r_foot.offset = Vec3::new(3.4 + foot * 1.5, foote * -1.5, 8.0); + next.r_foot.ori = Quaternion::rotation_x(0.0) + * Quaternion::rotation_z(0.4) + * Quaternion::rotation_y(0.0); + next.r_foot.scale = Vec3::one(); + next.torso.offset = + Vec3::new(0.0 + foot * 0.03, foote * 0.05, 0.1) * skeleton_attr.scaler; + next.torso.ori = Quaternion::rotation_z(0.0) + * Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(0.0); + next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; + } else { + next.l_foot.offset = Vec3::new(-3.4, -2.5 + stop * -1.3, 8.0); + next.l_foot.ori = Quaternion::rotation_x(stop * -0.2 - 0.2 + stop * stress * 0.02) + * Quaternion::rotation_z(stop * 0.1) + * Quaternion::rotation_y(stop * 0.08); + next.l_foot.scale = Vec3::one(); - next.main.offset = Vec3::new( - -8.0 + skeleton_attr.weapon_x, - 0.0 + skeleton_attr.weapon_y, - 5.0, - ); - next.main.ori = Quaternion::rotation_z(-0.0) - * Quaternion::rotation_x(wave_stop_quick * -1.5 + 0.7) - * Quaternion::rotation_y(-0.5); - next.main.scale = Vec3::one(); + next.r_foot.offset = Vec3::new(3.4, 3.5 + stop * 1.5, 8.0); + next.r_foot.ori = + Quaternion::rotation_x(stop * 0.1) * Quaternion::rotation_z(stop * 0.1); + next.r_foot.scale = Vec3::one(); + next.torso.offset = Vec3::new(0.0, 0.0, 0.1) * skeleton_attr.scaler; + next.torso.ori = Quaternion::rotation_z(0.0) + * Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(0.0); + next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; + } next.l_shoulder.offset = Vec3::new(-5.0, 0.0, 4.7); next.l_shoulder.ori = Quaternion::rotation_x(0.0); @@ -99,15 +175,13 @@ impl Animation for ChargeAnimation { next.lantern.ori = Quaternion::rotation_x(0.0); next.lantern.scale = Vec3::one() * 0.0; - next.torso.offset = Vec3::new(0.0, 0.0, 0.1) * skeleton_attr.scaler; - next.torso.ori = - Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0) * Quaternion::rotation_y(0.0); - next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; - - next.control.offset = Vec3::new(0.0, 0.0, 0.0); - next.control.ori = Quaternion::rotation_x(0.0); - next.control.scale = Vec3::one(); + next.l_control.offset = Vec3::new(0.0, 0.0, 0.0); + next.l_control.ori = Quaternion::rotation_x(0.0); + next.l_control.scale = Vec3::one(); + next.r_control.offset = Vec3::new(0.0, 0.0, 0.0); + next.r_control.ori = Quaternion::rotation_x(0.0); + next.r_control.scale = Vec3::one(); next } } diff --git a/voxygen/src/anim/character/cidle.rs b/voxygen/src/anim/character/cidle.rs deleted file mode 100644 index a33d6d0ed9..0000000000 --- a/voxygen/src/anim/character/cidle.rs +++ /dev/null @@ -1,285 +0,0 @@ -use super::{super::Animation, CharacterSkeleton, SkeletonAttr}; - -use common::comp::item::Tool; -use std::{f32::consts::PI, ops::Mul}; -use vek::*; - -pub struct Input { - pub attack: bool, -} -pub struct CidleAnimation; - -impl Animation for CidleAnimation { - type Dependency = (Option, f64); - type Skeleton = CharacterSkeleton; - - fn update_skeleton( - skeleton: &Self::Skeleton, - (active_tool_kind, global_time): Self::Dependency, - anim_time: f64, - _rate: &mut f32, - skeleton_attr: &SkeletonAttr, - ) -> Self::Skeleton { - let mut next = (*skeleton).clone(); - - let wave_ultra_slow = (anim_time as f32 * 0.5 + PI).sin(); - let wave_ultra_slow_cos = (anim_time as f32 * 3.0 + PI).cos(); - let wave_slow_cos = (anim_time as f32 * 6.0 + PI).cos(); - let wave_slow = (anim_time as f32 * 6.0 + PI).sin(); - - let head_look = Vec2::new( - ((global_time + anim_time) as f32 / 1.5) - .floor() - .mul(7331.0) - .sin() - * 0.3, - ((global_time + anim_time) as f32 / 1.5) - .floor() - .mul(1337.0) - .sin() - * 0.15, - ); - next.head.offset = Vec3::new( - 0.0 + skeleton_attr.neck_right + wave_slow_cos * 0.5, - -2.0 + skeleton_attr.neck_forward, - skeleton_attr.neck_height + 21.0 + wave_ultra_slow * 0.6, - ); - next.head.ori = - Quaternion::rotation_z(head_look.x) * Quaternion::rotation_x(head_look.y.abs()); - next.head.scale = Vec3::one() * skeleton_attr.head_scale; - - next.chest.offset = Vec3::new(0.0 + wave_slow_cos * 0.5, 0.0, 7.0 + wave_ultra_slow * 0.5); - next.chest.ori = Quaternion::rotation_y(wave_ultra_slow_cos * 0.04); - next.chest.scale = Vec3::one(); - - next.belt.offset = Vec3::new(0.0 + wave_slow_cos * 0.5, 0.0, 5.0 + wave_ultra_slow * 0.5); - next.belt.ori = Quaternion::rotation_y(wave_ultra_slow_cos * 0.03); - next.belt.scale = Vec3::one() * 1.02; - - next.shorts.offset = Vec3::new(0.0 + wave_slow_cos * 0.5, 0.0, 2.0 + wave_ultra_slow * 0.5); - next.shorts.ori = Quaternion::rotation_x(0.0); - next.shorts.scale = Vec3::one(); - - match active_tool_kind { - //TODO: Inventory - Some(Tool::Sword) => { - next.l_hand.offset = Vec3::new(-0.25, -5.0, -5.0); - next.l_hand.ori = Quaternion::rotation_x(1.47) * Quaternion::rotation_y(-0.2); - next.l_hand.scale = Vec3::one() * 1.04; - next.r_hand.offset = Vec3::new(1.25, -5.5, -8.0); - next.r_hand.ori = Quaternion::rotation_x(1.47) * Quaternion::rotation_y(0.3); - next.r_hand.scale = Vec3::one() * 1.05; - next.main.offset = Vec3::new(0.0, 0.0, -6.0); - next.main.ori = Quaternion::rotation_x(-0.1) - * Quaternion::rotation_y(0.0) - * Quaternion::rotation_z(0.0); - next.main.scale = Vec3::one(); - - next.control.offset = Vec3::new(-7.0, 6.0, 6.0); - next.control.ori = Quaternion::rotation_x(0.0) - * Quaternion::rotation_y(0.0) - * Quaternion::rotation_z(0.0); - next.control.scale = Vec3::one(); - }, - Some(Tool::Axe) => { - next.l_hand.offset = Vec3::new( - -6.5 + wave_ultra_slow_cos * 1.0, - -0.5 + wave_ultra_slow_cos * 0.5, - 6.0 + wave_ultra_slow * 1.0, - ); - next.l_hand.ori = Quaternion::rotation_x(0.13) * Quaternion::rotation_z(-0.25); - next.l_hand.scale = Vec3::one() * 1.01; - next.r_hand.offset = Vec3::new( - -3.0 + wave_ultra_slow_cos * 1.0, - 6.5 + wave_ultra_slow_cos * 0.5, - 6.0 + wave_ultra_slow * 1.0, - ); - next.r_hand.ori = Quaternion::rotation_x(0.13) - * Quaternion::rotation_z(2.98) - * Quaternion::rotation_y(-0.50); - next.r_hand.scale = Vec3::one() * 1.01; - next.main.offset = Vec3::new( - -5.0 + skeleton_attr.weapon_x + wave_ultra_slow_cos * 1.0, - 8.5 + skeleton_attr.weapon_y + wave_ultra_slow_cos * 0.5, - -0.5 + wave_ultra_slow * 1.0, - ); - next.main.ori = Quaternion::rotation_x(1.70) - * Quaternion::rotation_y(-0.25) - * Quaternion::rotation_z(0.0); - next.main.scale = Vec3::one(); - }, - Some(Tool::Hammer) => { - next.l_hand.offset = Vec3::new(-7.0, 4.0, 3.0); - next.l_hand.ori = Quaternion::rotation_x(1.27 + wave_ultra_slow * -0.1) - * Quaternion::rotation_y(0.0) - * Quaternion::rotation_z(-0.3); - next.l_hand.scale = Vec3::one() * 1.01; - next.r_hand.offset = Vec3::new(7.0, 2.5, -1.25); - next.r_hand.ori = Quaternion::rotation_x(1.27 + wave_ultra_slow * -0.1) - * Quaternion::rotation_y(0.0) - * Quaternion::rotation_z(-0.3); - next.r_hand.scale = Vec3::one() * 1.01; - next.main.offset = Vec3::new( - 5.0 + skeleton_attr.weapon_x, - 8.75 + skeleton_attr.weapon_y, - -2.5, - ); - next.main.ori = Quaternion::rotation_x(-0.3) - * Quaternion::rotation_y(-1.27) - * Quaternion::rotation_z(wave_ultra_slow * 0.2); - next.main.scale = Vec3::one(); - }, - Some(Tool::Staff) => { - next.l_hand.offset = Vec3::new( - -6.0 + wave_ultra_slow_cos * 1.0, - 1.0 + wave_ultra_slow_cos * 0.5, - 5.0 + wave_ultra_slow * 1.0, - ); - next.l_hand.ori = Quaternion::rotation_x(1.27); - next.l_hand.scale = Vec3::one() * 1.0; - next.r_hand.offset = Vec3::new( - -6.0 + wave_ultra_slow_cos * 1.0, - -1.5 + wave_ultra_slow_cos * 0.5, - -2.0 + wave_ultra_slow * 1.0, - ); - next.r_hand.ori = Quaternion::rotation_x(1.27); - next.r_hand.scale = Vec3::one() * 1.01; - next.main.offset = Vec3::new( - -6.0 + skeleton_attr.weapon_x + wave_ultra_slow_cos * 1.0, - 8.5 + skeleton_attr.weapon_y + wave_ultra_slow_cos * 0.5, - 17.0 + wave_ultra_slow * 1.0, - ); - next.main.ori = Quaternion::rotation_x(-0.3 + PI) - * Quaternion::rotation_y(0.0) - * Quaternion::rotation_z(0.0); - next.main.scale = Vec3::one(); - }, - Some(Tool::Shield) => { - next.l_hand.offset = Vec3::new( - -6.0 + wave_ultra_slow_cos * 1.0, - 3.5 + wave_ultra_slow_cos * 0.5, - 0.0 + wave_ultra_slow * 1.0, - ); - next.l_hand.ori = Quaternion::rotation_x(-0.3); - next.l_hand.scale = Vec3::one() * 1.01; - next.r_hand.offset = Vec3::new( - -6.0 + wave_ultra_slow_cos * 1.0, - 3.0 + wave_ultra_slow_cos * 0.5, - -2.0 + wave_ultra_slow * 1.0, - ); - next.r_hand.ori = Quaternion::rotation_x(-0.3); - next.r_hand.scale = Vec3::one() * 1.01; - next.main.offset = Vec3::new( - -6.0 + skeleton_attr.weapon_x + wave_ultra_slow_cos * 1.0, - 4.5 + skeleton_attr.weapon_y + wave_ultra_slow_cos * 0.5, - 0.0 + wave_ultra_slow * 1.0, - ); - next.main.ori = Quaternion::rotation_x(-0.3) - * Quaternion::rotation_y(0.0) - * Quaternion::rotation_z(0.0); - next.main.scale = Vec3::one(); - }, - Some(Tool::Bow) => { - next.l_hand.offset = Vec3::new( - -1.0 + wave_ultra_slow_cos * 1.0, - 3.0 + wave_ultra_slow_cos * 0.5, - 5.0 + wave_ultra_slow * 1.0, - ); - next.l_hand.ori = Quaternion::rotation_x(PI / 2.0) - * Quaternion::rotation_y(-0.3) - * Quaternion::rotation_z(0.3); - next.l_hand.scale = Vec3::one() * 1.01; - next.r_hand.offset = Vec3::new( - 1.0 + wave_ultra_slow_cos * 1.0, - 8.0 + wave_ultra_slow_cos * 0.5, - 2.5 + wave_ultra_slow * 1.0, - ); - next.r_hand.ori = Quaternion::rotation_x(PI / 2.0) - * Quaternion::rotation_y(0.3) - * Quaternion::rotation_z(0.3); - next.r_hand.scale = Vec3::one() * 1.01; - next.main.offset = Vec3::new( - -4.0 + skeleton_attr.weapon_x + wave_ultra_slow_cos * 1.0, - 15.0 + skeleton_attr.weapon_y + wave_ultra_slow_cos * 0.5, - -4.0 + wave_ultra_slow * 1.0, - ); - next.main.ori = Quaternion::rotation_x(0.0) - * Quaternion::rotation_y(0.4) - * Quaternion::rotation_z(0.0); - next.main.scale = Vec3::one(); - }, - Some(Tool::Dagger) => { - next.l_hand.offset = Vec3::new( - -6.0 + wave_ultra_slow_cos * 1.0, - 3.5 + wave_ultra_slow_cos * 0.5, - 0.0 + wave_ultra_slow * 1.0, - ); - next.l_hand.ori = Quaternion::rotation_x(-0.3); - next.l_hand.scale = Vec3::one() * 1.01; - next.r_hand.offset = Vec3::new(-6.0, 3.0, -2.0); - next.r_hand.ori = Quaternion::rotation_x(-0.3); - next.r_hand.scale = Vec3::one() * 1.01; - next.main.offset = Vec3::new( - -6.0 + skeleton_attr.weapon_x, - 4.5 + skeleton_attr.weapon_y, - 0.0, - ); - next.main.ori = Quaternion::rotation_x(-0.3) - * Quaternion::rotation_y(0.0) - * Quaternion::rotation_z(0.0); - next.main.scale = Vec3::one(); - }, - Some(Tool::Debug(_)) => { - next.l_hand.offset = Vec3::new(-7.0, 4.0, 3.0); - next.l_hand.ori = Quaternion::rotation_x(1.27 + wave_ultra_slow * -0.1) - * Quaternion::rotation_y(0.0) - * Quaternion::rotation_z(-0.3); - next.l_hand.scale = Vec3::one() * 1.01; - next.r_hand.offset = Vec3::new(7.0, 2.5, -1.25); - next.r_hand.ori = Quaternion::rotation_x(1.27 + wave_ultra_slow * -0.1) - * Quaternion::rotation_y(0.0) - * Quaternion::rotation_z(-0.3); - next.r_hand.scale = Vec3::one() * 1.01; - next.main.offset = Vec3::new( - 5.0 + skeleton_attr.weapon_x, - 8.75 + skeleton_attr.weapon_y, - -2.5, - ); - next.main.ori = Quaternion::rotation_x(-0.3) - * Quaternion::rotation_y(-1.27) - * Quaternion::rotation_z(wave_ultra_slow * 0.2); - next.main.scale = Vec3::one(); - }, - _ => {}, - } - next.l_foot.offset = Vec3::new(-3.4, -1.5, 8.0 + wave_slow * 0.2); - next.l_foot.ori = Quaternion::rotation_x(wave_ultra_slow_cos * 0.015); - next.l_foot.scale = Vec3::one(); - - next.r_foot.offset = Vec3::new(3.4, 3.0, 8.0 + wave_slow_cos * 0.2); - next.r_foot.ori = Quaternion::rotation_x(wave_ultra_slow * 0.015); - next.r_foot.scale = Vec3::one(); - - next.l_shoulder.offset = Vec3::new(-5.0, 0.0, 5.0); - next.l_shoulder.ori = Quaternion::rotation_x(0.0); - next.l_shoulder.scale = Vec3::one() * 1.1; - - next.r_shoulder.offset = Vec3::new(5.0, 0.0, 5.0); - next.r_shoulder.ori = Quaternion::rotation_x(0.0); - next.r_shoulder.scale = Vec3::one() * 1.1; - - next.glider.offset = Vec3::new(0.0, 5.0, 0.0); - next.glider.ori = Quaternion::rotation_y(0.0); - next.glider.scale = Vec3::one() * 0.0; - - next.lantern.offset = Vec3::new(0.0, 0.0, 0.0); - next.lantern.ori = Quaternion::rotation_x(0.0); - next.lantern.scale = Vec3::one() * 0.0; - - next.torso.offset = Vec3::new(0.0, -0.2, 0.1) * skeleton_attr.scaler; - next.torso.ori = Quaternion::rotation_x(0.0); - next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; - - next - } -} diff --git a/voxygen/src/anim/character/climb.rs b/voxygen/src/anim/character/climb.rs index b95ec99a84..463a4fdd0e 100644 --- a/voxygen/src/anim/character/climb.rs +++ b/voxygen/src/anim/character/climb.rs @@ -1,11 +1,12 @@ use super::{super::Animation, CharacterSkeleton, SkeletonAttr}; -use common::comp::item::Tool; +use common::comp::item::ToolKind; +use std::f32::consts::PI; use vek::*; pub struct ClimbAnimation; impl Animation for ClimbAnimation { - type Dependency = (Option, Vec3, Vec3, f64); + type Dependency = (Option, Vec3, Vec3, f64); type Skeleton = CharacterSkeleton; fn update_skeleton( @@ -21,66 +22,69 @@ impl Animation for ClimbAnimation { *rate = speed; let constant = 1.0; - let wave = (anim_time as f32 * constant as f32 * 1.5).sin(); - let wave_cos = (anim_time as f32 * constant as f32 * 1.5).cos(); + let smooth = (anim_time as f32 * constant as f32 * 1.5).sin(); + let smootha = (anim_time as f32 * constant as f32 * 1.5 + PI / 2.0).sin(); - let wave_test = (((5.0) + let quick = (((5.0) / (0.6 + 4.0 * ((anim_time as f32 * constant as f32 * 1.5).sin()).powf(2.0 as f32))) .sqrt()) * ((anim_time as f32 * constant as f32 * 1.5).sin()); - let wave_testc = (((5.0) - / (0.6 + 4.0 * ((anim_time as f32 * constant as f32 * 1.5).cos()).powf(2.0 as f32))) + let quicka = (((5.0) + / (0.6 + + 4.0 + * ((anim_time as f32 * constant as f32 * 1.5 + PI / 2.0).sin()) + .powf(2.0 as f32))) .sqrt()) - * ((anim_time as f32 * constant as f32 * 1.5).cos()); + * ((anim_time as f32 * constant as f32 * 1.5 + PI / 2.0).sin()); next.head.offset = Vec3::new( 0.0, - -1.0 + skeleton_attr.neck_forward, - skeleton_attr.neck_height + 18.5 + wave_cos * 1.3, + -4.0 + skeleton_attr.neck_forward, + skeleton_attr.neck_height + 13.50 + smootha * 0.2, ); - next.head.ori = Quaternion::rotation_z(wave * 0.1) + next.head.ori = Quaternion::rotation_z(smooth * 0.1) * Quaternion::rotation_x(0.6) - * Quaternion::rotation_y(wave_test * 0.1); + * Quaternion::rotation_y(quick * 0.1); next.head.scale = Vec3::one() * skeleton_attr.head_scale; - next.chest.offset = Vec3::new(0.0, 1.0, 5.0 + wave_cos * 1.1); - next.chest.ori = Quaternion::rotation_z(wave_test * 0.25) + next.chest.offset = Vec3::new(0.0, 1.0, 5.0 + smootha * 1.1); + next.chest.ori = Quaternion::rotation_z(quick * 0.25) * Quaternion::rotation_x(-0.15) - * Quaternion::rotation_y(wave_test * -0.12); + * Quaternion::rotation_y(quick * -0.12); next.chest.scale = Vec3::one(); - next.belt.offset = Vec3::new(0.0, 1.0, 3.5 + wave_cos * 1.1); - next.belt.ori = Quaternion::rotation_z(wave_test * 0.25) * Quaternion::rotation_x(0.0); + next.belt.offset = Vec3::new(0.0, 1.0, -2.0); + next.belt.ori = Quaternion::rotation_z(quick * 0.0) * Quaternion::rotation_x(0.0); next.belt.scale = Vec3::one(); - next.shorts.offset = Vec3::new(0.0, 1.0, 1.0 + wave_cos * 1.1); - next.shorts.ori = Quaternion::rotation_z(wave_test * 0.25) + next.shorts.offset = Vec3::new(0.0, 1.0, -5.0); + next.shorts.ori = Quaternion::rotation_z(quick * 0.0) * Quaternion::rotation_x(0.1) - * Quaternion::rotation_y(wave_test * 0.10); + * Quaternion::rotation_y(quick * 0.10); next.shorts.scale = Vec3::one(); - next.l_hand.offset = Vec3::new(-6.0, -0.25 + wave_testc * 1.5, 6.0 - wave_test * 4.0); - next.l_hand.ori = Quaternion::rotation_x(2.2 + wave_testc * 0.5); + next.l_hand.offset = Vec3::new(-6.0, -0.25 + quicka * 1.5, 6.0 - quick * 4.0); + next.l_hand.ori = Quaternion::rotation_x(2.2 + quicka * 0.5); next.l_hand.scale = Vec3::one(); - next.r_hand.offset = Vec3::new(6.0, -0.25 - wave_testc * 1.5, 6.0 + wave_test * 4.0); - next.r_hand.ori = Quaternion::rotation_x(2.2 - wave_testc * 0.5); + next.r_hand.offset = Vec3::new(6.0, -0.25 - quicka * 1.5, 6.0 + quick * 4.0); + next.r_hand.ori = Quaternion::rotation_x(2.2 - quicka * 0.5); next.r_hand.scale = Vec3::one(); - next.l_foot.offset = Vec3::new(-3.4, 1.0, 6.0 + wave_test * 2.5); - next.l_foot.ori = Quaternion::rotation_x(0.2 - wave_testc * 0.5); + next.l_foot.offset = Vec3::new(-3.4, 1.0, 6.0 + quick * 2.5); + next.l_foot.ori = Quaternion::rotation_x(0.2 - quicka * 0.5); next.l_foot.scale = Vec3::one(); - next.r_foot.offset = Vec3::new(3.4, 1.0, 6.0 - wave_test * 2.5); - next.r_foot.ori = Quaternion::rotation_x(0.2 + wave_testc * 0.5); + next.r_foot.offset = Vec3::new(3.4, 1.0, 6.0 - quick * 2.5); + next.r_foot.ori = Quaternion::rotation_x(0.2 + quicka * 0.5); next.r_foot.scale = Vec3::one(); next.l_shoulder.offset = Vec3::new(-5.0, 0.0, 4.7); - next.l_shoulder.ori = Quaternion::rotation_x(wave_cos * 0.15); + next.l_shoulder.ori = Quaternion::rotation_x(smootha * 0.15); next.l_shoulder.scale = Vec3::one() * 1.1; next.r_shoulder.offset = Vec3::new(5.0, 0.0, 4.7); - next.r_shoulder.ori = Quaternion::rotation_x(wave * 0.15); + next.r_shoulder.ori = Quaternion::rotation_x(smooth * 0.15); next.r_shoulder.scale = Vec3::one() * 1.1; next.glider.offset = Vec3::new(0.0, 5.0, 0.0); @@ -92,8 +96,7 @@ impl Animation for ClimbAnimation { -5.0 + skeleton_attr.weapon_y, 18.0, ); - next.main.ori = - Quaternion::rotation_y(2.5) * Quaternion::rotation_z(1.57 + wave_cos * 0.25); + next.main.ori = Quaternion::rotation_y(2.5) * Quaternion::rotation_z(1.57 + smootha * 0.25); next.main.scale = Vec3::one(); next.second.offset = Vec3::new( @@ -108,7 +111,7 @@ impl Animation for ClimbAnimation { next.lantern.ori = Quaternion::rotation_x(0.0); next.lantern.scale = Vec3::one() * 0.0; - next.torso.offset = Vec3::new(0.0, -0.2 + wave * -0.08, 0.4) * skeleton_attr.scaler; + next.torso.offset = Vec3::new(0.0, -0.2 + smooth * -0.08, 0.4) * skeleton_attr.scaler; next.torso.ori = Quaternion::rotation_x(0.0) * Quaternion::rotation_y(0.0); next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; diff --git a/voxygen/src/anim/character/crun.rs b/voxygen/src/anim/character/crun.rs deleted file mode 100644 index cf12ef8c56..0000000000 --- a/voxygen/src/anim/character/crun.rs +++ /dev/null @@ -1,187 +0,0 @@ -use super::{ - super::{Animation, }, - CharacterSkeleton,SkeletonAttr -}; -use common::comp::item::Tool; -use std::f32::consts::PI; -use std::ops::Mul; -use vek::*; - -pub struct WieldAnimation; - -impl Animation for WieldAnimation { - type Skeleton = CharacterSkeleton; - type Dependency = (f32, f64); - - fn update_skeleton( - skeleton: &Self::Skeleton, - (velocity, global_time): Self::Dependency, - anim_time: f64, - rate: &mut f32, - skeleton_attr: &SkeletonAttr, - ) -> Self::Skeleton { - let mut next = (*skeleton).clone(); - - let wave = (anim_time as f32 * 12.0).sin(); - let wave_cos = (anim_time as f32 * 12.0).cos(); - let wave_diff = (anim_time as f32 * 12.0 + PI / 2.0).sin(); - let wave_cos_dub = (anim_time as f32 * 24.0).cos(); - let wave_stop = (anim_time as f32 * 5.0).min(PI / 2.0).sin(); - - let head_look = Vec2::new( - ((global_time + anim_time) as f32 / 2.0) - .floor() - .mul(7331.0) - .sin() - * 0.2, - ((global_time + anim_time) as f32 / 2.0) - .floor() - .mul(1337.0) - .sin() - * 0.1, - ); - - match Tool::Bow { - //TODO: Inventory - Some(Tool::Sword) => { - next.l_hand.offset = Vec3::new(0.0, -5.0, -5.0); - next.l_hand.ori = Quaternion::rotation_x(1.27); - next.l_hand.scale = Vec3::one() * 1.04; - next.r_hand.offset = Vec3::new(0.0, -6.0, -8.0); - next.r_hand.ori = Quaternion::rotation_x(1.27); - next.r_hand.scale = Vec3::one() * 1.05; - next.main.offset = Vec3::new( - 0.0, - 0.0, - -6.0, - ); - next.main.ori = Quaternion::rotation_x(-0.3) - * Quaternion::rotation_y(0.0) - * Quaternion::rotation_z(0.0); - next.main.scale = Vec3::one(); - - next.control.offset = Vec3::new( - -8.0, - 4.0, - 6.0, - ); - next.control.ori = Quaternion::rotation_x(0.0) - * Quaternion::rotation_y(0.0) - * Quaternion::rotation_z(0.0); - next.control.scale = Vec3::one(); - }, - Tool::Axe => { - next.l_hand.offset = Vec3::new(-6.0, 3.5, 0.0); - next.l_hand.ori = Quaternion::rotation_x(-0.3); - next.l_hand.scale = Vec3::one() * 1.01; - next.r_hand.offset = Vec3::new(-6.0, 3.0, -2.0); - next.r_hand.ori = Quaternion::rotation_x(-0.3); - next.r_hand.scale = Vec3::one() * 1.01; - next.weapon.offset = Vec3::new( - -6.0 + skeleton_attr.weapon_x, - 4.5 + skeleton_attr.weapon_y, - 0.0, - ); - next.weapon.ori = Quaternion::rotation_x(-0.3) - * Quaternion::rotation_y(0.0) - * Quaternion::rotation_z(0.0); - next.weapon.scale = Vec3::one(); - } - Tool::Hammer => { - next.l_hand.offset = Vec3::new(-7.0, 8.25, 3.0); - next.l_hand.ori = Quaternion::rotation_x(-0.3) - * Quaternion::rotation_y(-1.2) - * Quaternion::rotation_z(wave * -0.25); - next.l_hand.scale = Vec3::one() * 1.01; - next.r_hand.offset = Vec3::new(7.0, 7.0, -1.5); - next.r_hand.ori = Quaternion::rotation_x(-0.3) - * Quaternion::rotation_y(-1.2) - * Quaternion::rotation_z(wave * -0.25); - next.r_hand.scale = Vec3::one() * 1.01; - next.weapon.offset = Vec3::new( - 5.0 + skeleton_attr.weapon_x, - 8.75 + skeleton_attr.weapon_y, - -2.0, - ); - next.weapon.ori = Quaternion::rotation_x(-0.3) - * Quaternion::rotation_y(-1.2) - * Quaternion::rotation_z(wave * -0.25); - next.weapon.scale = Vec3::one(); - } - Tool::Staff => { - next.l_hand.offset = Vec3::new(-6.0, 3.5, 0.0); - next.l_hand.ori = Quaternion::rotation_x(-0.3); - next.l_hand.scale = Vec3::one() * 1.01; - next.r_hand.offset = Vec3::new(-6.0, 3.0, -2.0); - next.r_hand.ori = Quaternion::rotation_x(-0.3); - next.r_hand.scale = Vec3::one() * 1.01; - next.weapon.offset = Vec3::new( - -6.0 + skeleton_attr.weapon_x, - 4.5 + skeleton_attr.weapon_y, - 0.0, - ); - next.weapon.ori = Quaternion::rotation_x(-0.3) - * Quaternion::rotation_y(0.0) - * Quaternion::rotation_z(0.0); - next.weapon.scale = Vec3::one(); - } - Tool::SwordShield => { - next.l_hand.offset = Vec3::new(-6.0, 3.5, 0.0); - next.l_hand.ori = Quaternion::rotation_x(-0.3); - next.l_hand.scale = Vec3::one() * 1.01; - next.r_hand.offset = Vec3::new(-6.0, 3.0, -2.0); - next.r_hand.ori = Quaternion::rotation_x(-0.3); - next.r_hand.scale = Vec3::one() * 1.01; - next.weapon.offset = Vec3::new( - -6.0 + skeleton_attr.weapon_x, - 4.5 + skeleton_attr.weapon_y, - 0.0, - ); - next.weapon.ori = Quaternion::rotation_x(-0.3) - * Quaternion::rotation_y(0.0) - * Quaternion::rotation_z(0.0); - next.weapon.scale = Vec3::one(); - } - Tool::Bow => { - next.l_hand.offset = Vec3::new(-4.0, 5.0, 0.0); - next.l_hand.ori = Quaternion::rotation_x(0.0) - * Quaternion::rotation_y(-1.9) - * Quaternion::rotation_z(0.85); - next.l_hand.scale = Vec3::one() * 1.01; - next.r_hand.offset = Vec3::new(2.0, 8.0, -3.5); - next.r_hand.ori = Quaternion::rotation_x(0.0) - * Quaternion::rotation_y(-1.7) - * Quaternion::rotation_z(0.85); - next.r_hand.scale = Vec3::one() * 1.01; - next.weapon.offset = Vec3::new( - 9.0 + skeleton_attr.weapon_x, - 10.0 + skeleton_attr.weapon_y, - -3.0, - ); - next.weapon.ori = Quaternion::rotation_x(0.0) - * Quaternion::rotation_y(-1.7) - * Quaternion::rotation_z(0.85 + 3.14); - next.weapon.scale = Vec3::one(); - } - Tool::Daggers => { - next.l_hand.offset = Vec3::new(-6.0, 3.5, 0.0); - next.l_hand.ori = Quaternion::rotation_x(-0.3); - next.l_hand.scale = Vec3::one() * 1.01; - next.r_hand.offset = Vec3::new(-6.0, 3.0, -2.0); - next.r_hand.ori = Quaternion::rotation_x(-0.3); - next.r_hand.scale = Vec3::one() * 1.01; - next.weapon.offset = Vec3::new( - -6.0 + skeleton_attr.weapon_x, - 4.5 + skeleton_attr.weapon_y, - 0.0, - ); - next.weapon.ori = Quaternion::rotation_x(-0.3) - * Quaternion::rotation_y(0.0) - * Quaternion::rotation_z(0.0); - next.weapon.scale = Vec3::one(); - } - } - - next - } -} diff --git a/voxygen/src/anim/character/dash.rs b/voxygen/src/anim/character/dash.rs new file mode 100644 index 0000000000..05f64819c7 --- /dev/null +++ b/voxygen/src/anim/character/dash.rs @@ -0,0 +1,124 @@ +use super::{super::Animation, CharacterSkeleton, SkeletonAttr}; +use common::comp::item::ToolKind; +use vek::*; + +pub struct Input { + pub attack: bool, +} +pub struct DashAnimation; + +impl Animation for DashAnimation { + type Dependency = (Option, f64); + type Skeleton = CharacterSkeleton; + + fn update_skeleton( + skeleton: &Self::Skeleton, + (active_tool_kind, _global_time): Self::Dependency, + anim_time: f64, + rate: &mut f32, + skeleton_attr: &SkeletonAttr, + ) -> Self::Skeleton { + *rate = 1.0; + let mut next = (*skeleton).clone(); + let lab = 1.0; + + let foot = (((5.0) + / (1.1 + 3.9 * ((anim_time as f32 * lab as f32 * 25.0).sin()).powf(2.0 as f32))) + .sqrt()) + * ((anim_time as f32 * lab as f32 * 25.0).sin()); + + let slow = (((5.0) + / (1.1 + 3.9 * ((anim_time as f32 * lab as f32 * 12.4).sin()).powf(2.0 as f32))) + .sqrt()) + * ((anim_time as f32 * lab as f32 * 12.4).sin()); + + match active_tool_kind { + //TODO: Inventory + Some(ToolKind::Sword(_)) => { + next.head.offset = Vec3::new( + 0.0 + skeleton_attr.neck_right, + -2.0 + skeleton_attr.neck_forward, + skeleton_attr.neck_height + 12.0, + ); + next.head.ori = Quaternion::rotation_z(0.0) + * Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(0.0); + next.head.scale = Vec3::one() * skeleton_attr.head_scale; + + next.chest.offset = Vec3::new(0.0, 0.0, 7.0 + slow * 2.0); + next.chest.ori = Quaternion::rotation_x(-0.5) * Quaternion::rotation_z(-0.7); + next.chest.scale = Vec3::one(); + + next.belt.offset = Vec3::new(0.0, 1.0, -1.0); + next.belt.ori = Quaternion::rotation_x(0.2) * Quaternion::rotation_z(0.2); + next.belt.scale = Vec3::one(); + + next.shorts.offset = Vec3::new(0.0, 3.0, -3.0); + next.shorts.ori = Quaternion::rotation_x(0.4) * Quaternion::rotation_z(0.3); + next.shorts.scale = Vec3::one(); + + next.l_hand.offset = Vec3::new(0.0, 1.0, 0.0); + next.l_hand.ori = Quaternion::rotation_x(1.27); + next.l_hand.scale = Vec3::one() * 1.04; + next.r_hand.offset = Vec3::new(0.0, 0.0, -3.0); + next.r_hand.ori = Quaternion::rotation_x(1.27); + next.r_hand.scale = Vec3::one() * 1.05; + next.main.offset = Vec3::new(0.0, 6.0, -1.0); + next.main.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(0.0); + next.main.scale = Vec3::one(); + + next.control.offset = Vec3::new(-8.0 - slow * 0.5, 3.0 - foot * 0.6, 3.0); + next.control.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(1.1 + slow * 0.2); + next.control.scale = Vec3::one(); + next.l_foot.offset = Vec3::new(-1.4, foot * 3.0 + 2.0, 8.0); + next.l_foot.ori = Quaternion::rotation_x(foot * -0.4 - 0.8); + next.l_foot.scale = Vec3::one(); + + next.r_foot.offset = Vec3::new(5.4, foot * -3.0 - 1.0, 8.0); + next.r_foot.ori = Quaternion::rotation_x(foot * 0.4 - 0.8); + next.r_foot.scale = Vec3::one(); + }, + _ => {}, + } + next.head.offset = Vec3::new( + 0.0 + skeleton_attr.neck_right, + -2.0 + skeleton_attr.neck_forward, + skeleton_attr.neck_height + 12.0, + ); + next.head.ori = Quaternion::rotation_x(0.5); + + next.l_shoulder.offset = Vec3::new(-5.0, 0.0, 4.7); + next.l_shoulder.ori = Quaternion::rotation_x(0.0); + next.l_shoulder.scale = Vec3::one() * 1.1; + + next.r_shoulder.offset = Vec3::new(5.0, 0.0, 4.7); + next.r_shoulder.ori = Quaternion::rotation_x(0.0); + next.r_shoulder.scale = Vec3::one() * 1.1; + + next.glider.offset = Vec3::new(0.0, 5.0, 0.0); + next.glider.ori = Quaternion::rotation_y(0.0); + next.glider.scale = Vec3::one() * 0.0; + + next.lantern.offset = Vec3::new(0.0, 0.0, 0.0); + next.lantern.ori = Quaternion::rotation_x(0.0); + next.lantern.scale = Vec3::one() * 0.0; + + next.torso.offset = Vec3::new(0.0, 0.0, 0.1) * skeleton_attr.scaler; + next.torso.ori = + Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0) * Quaternion::rotation_y(0.0); + next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; + + next.l_control.offset = Vec3::new(0.0, 0.0, 0.0); + next.l_control.ori = Quaternion::rotation_x(0.0); + next.l_control.scale = Vec3::one(); + + next.r_control.offset = Vec3::new(0.0, 0.0, 0.0); + next.r_control.ori = Quaternion::rotation_x(0.0); + next.r_control.scale = Vec3::one(); + next + } +} diff --git a/voxygen/src/anim/character/equip.rs b/voxygen/src/anim/character/equip.rs new file mode 100644 index 0000000000..d7c1f2d764 --- /dev/null +++ b/voxygen/src/anim/character/equip.rs @@ -0,0 +1,254 @@ +use super::{super::Animation, CharacterSkeleton, SkeletonAttr}; +use common::comp::item::ToolKind; +use std::{f32::consts::PI, ops::Mul}; + +use vek::*; + +pub struct EquipAnimation; + +impl Animation for EquipAnimation { + type Dependency = (Option, f32, f64); + type Skeleton = CharacterSkeleton; + + fn update_skeleton( + skeleton: &Self::Skeleton, + (active_tool_kind, velocity, global_time): Self::Dependency, + anim_time: f64, + rate: &mut f32, + skeleton_attr: &SkeletonAttr, + ) -> Self::Skeleton { + *rate = 1.0; + let mut next = (*skeleton).clone(); + + let lab = 1.0; + + let short = (((5.0) + / (1.5 + 3.5 * ((anim_time as f32 * lab as f32 * 16.0).sin()).powf(2.0 as f32))) + .sqrt()) + * ((anim_time as f32 * lab as f32 * 16.0).sin()); + + let equip_slow = 1.0 + (anim_time as f32 * 12.0 + PI).cos(); + let equip_slowa = 1.0 + (anim_time as f32 * 12.0 + PI / 4.0).cos(); + + let wave_ultra_slow = (anim_time as f32 * 10.0 + PI).sin(); + let wave_ultra_slow_cos = (anim_time as f32 * 30.0 + PI).cos(); + + let wave = (anim_time as f32 * 16.0).sin(); + match active_tool_kind { + //TODO: Inventory + Some(ToolKind::Sword(_)) => { + next.l_hand.offset = Vec3::new(-0.25, -5.0, -5.0); + next.l_hand.ori = Quaternion::rotation_x(1.57) * Quaternion::rotation_y(-0.2); + next.l_hand.scale = Vec3::one() * 1.04; + next.r_hand.offset = Vec3::new(1.25, -5.5, -8.0); + next.r_hand.ori = Quaternion::rotation_x(1.57) * Quaternion::rotation_y(0.3); + next.r_hand.scale = Vec3::one() * 1.05; + next.main.offset = Vec3::new(0.0, 0.0, -6.0); + next.main.ori = Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(0.0); + next.main.scale = Vec3::one(); + + next.control.offset = + Vec3::new(-3.0 + equip_slowa * -1.5, -5.0, 12.0 + equip_slow * 1.5); + next.control.ori = Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(2.5) + * Quaternion::rotation_z(1.57); + next.control.scale = Vec3::one(); + }, + Some(ToolKind::Axe(_)) => { + next.l_hand.offset = Vec3::new(-4.0, 3.0, 6.0); + next.l_hand.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_z(3.14 - 0.3) + * Quaternion::rotation_y(-0.8); + next.l_hand.scale = Vec3::one() * 1.08; + next.r_hand.offset = Vec3::new(-2.5, 9.0, 4.0); + next.r_hand.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_z(3.14 - 0.3) + * Quaternion::rotation_y(-0.8); + next.r_hand.scale = Vec3::one() * 1.06; + next.main.offset = Vec3::new(-6.0, 10.0, -1.0); + next.main.ori = Quaternion::rotation_x(1.27) + * Quaternion::rotation_y(-0.3) + * Quaternion::rotation_z(-0.8); + next.main.scale = Vec3::one(); + + next.control.offset = Vec3::new(0.0, 0.0, 0.0); + next.control.ori = Quaternion::rotation_x(0.2) + * Quaternion::rotation_y(-0.3) + * Quaternion::rotation_z(0.0); + next.control.scale = Vec3::one(); + }, + Some(ToolKind::Hammer(_)) => { + next.l_hand.offset = Vec3::new(-7.0 + 9.0, 4.6 + 1.5, 7.5 - 1.6); + next.l_hand.ori = Quaternion::rotation_x(0.0) * Quaternion::rotation_y(0.32); + next.l_hand.scale = Vec3::one() * 1.08; + next.r_hand.offset = Vec3::new(8.0, 5.75, 4.0); + next.r_hand.ori = Quaternion::rotation_x(0.0) * Quaternion::rotation_y(0.22); + next.r_hand.scale = Vec3::one() * 1.06; + next.main.offset = Vec3::new(6.0, 7.0, 0.0); + next.main.ori = Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(-1.35) + * Quaternion::rotation_z(1.57); + next.main.scale = Vec3::one(); + + next.control.offset = + Vec3::new(-3.0 + equip_slowa * -1.5, -12.0, 12.0 + equip_slow * 1.5); + next.control.ori = Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(1.35 + 2.5) + * Quaternion::rotation_z(0.0); + next.control.scale = Vec3::one(); + }, + Some(ToolKind::Staff(_)) => { + next.l_hand.offset = Vec3::new(1.0, -2.0, -5.0); + next.l_hand.ori = Quaternion::rotation_x(1.47) * Quaternion::rotation_y(-0.3); + next.l_hand.scale = Vec3::one() * 1.05; + next.r_hand.offset = Vec3::new(9.0, 1.0, 0.0); + next.r_hand.ori = Quaternion::rotation_x(1.8) + * Quaternion::rotation_y(0.5) + * Quaternion::rotation_z(-0.27); + next.r_hand.scale = Vec3::one() * 1.05; + next.main.offset = Vec3::new(11.0, 9.0, 10.0); + next.main.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_y(3.14 + 0.3) + * Quaternion::rotation_z(0.9); + next.main.scale = Vec3::one(); + + next.control.offset = Vec3::new(-7.0, 6.0, 6.0); + next.control.ori = Quaternion::rotation_x(wave_ultra_slow * 0.2) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(wave_ultra_slow_cos * 0.1); + next.control.scale = Vec3::one(); + }, + Some(ToolKind::Shield(_)) => { + next.l_hand.offset = Vec3::new(-6.0, 3.5, 0.0); + next.l_hand.ori = Quaternion::rotation_x(-0.3); + next.l_hand.scale = Vec3::one() * 1.01; + next.r_hand.offset = Vec3::new(-6.0, 3.0, -2.0); + next.r_hand.ori = Quaternion::rotation_x(-0.3); + next.r_hand.scale = Vec3::one() * 1.01; + next.main.offset = Vec3::new( + -6.0 + skeleton_attr.weapon_x, + 4.5 + skeleton_attr.weapon_y, + 0.0, + ); + next.main.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(0.0); + next.main.scale = Vec3::one(); + }, + Some(ToolKind::Bow(_)) => { + next.l_hand.offset = Vec3::new(1.0, -4.0, -1.0); + next.l_hand.ori = Quaternion::rotation_x(1.20) + * Quaternion::rotation_y(-0.6) + * Quaternion::rotation_z(-0.3); + next.l_hand.scale = Vec3::one() * 1.05; + next.r_hand.offset = Vec3::new(3.0, -1.0, -5.0); + next.r_hand.ori = Quaternion::rotation_x(1.20) + * Quaternion::rotation_y(-0.6) + * Quaternion::rotation_z(-0.3); + next.r_hand.scale = Vec3::one() * 1.05; + next.main.offset = Vec3::new(3.0, 2.0, -13.0); + next.main.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_y(0.3) + * Quaternion::rotation_z(-0.6); + next.main.scale = Vec3::one(); + + next.control.offset = Vec3::new(-7.0, 6.0, 6.0); + next.control.ori = Quaternion::rotation_x(wave_ultra_slow * 0.2) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(wave_ultra_slow_cos * 0.1); + next.control.scale = Vec3::one(); + }, + Some(ToolKind::Dagger(_)) => { + next.l_hand.offset = Vec3::new(-6.0, 3.5, 0.0); + next.l_hand.ori = Quaternion::rotation_x(-0.3); + next.l_hand.scale = Vec3::one() * 1.01; + next.r_hand.offset = Vec3::new(-6.0, 3.0, -2.0); + next.r_hand.ori = Quaternion::rotation_x(-0.3); + next.r_hand.scale = Vec3::one() * 1.01; + next.main.offset = Vec3::new( + -6.0 + skeleton_attr.weapon_x, + 4.5 + skeleton_attr.weapon_y, + 0.0, + ); + next.main.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(0.0); + next.main.scale = Vec3::one(); + }, + Some(ToolKind::Debug(_)) => { + next.l_hand.offset = Vec3::new(-7.0, 4.0, 3.0); + next.l_hand.ori = Quaternion::rotation_x(1.27 + wave * 0.25) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(0.0); + next.l_hand.scale = Vec3::one() * 1.01; + next.r_hand.offset = Vec3::new(7.0, 2.5, -1.25); + next.r_hand.ori = Quaternion::rotation_x(1.27 + wave * 0.25) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(-0.3); + next.r_hand.scale = Vec3::one() * 1.01; + next.main.offset = Vec3::new( + 5.0 + skeleton_attr.weapon_x, + 8.75 + skeleton_attr.weapon_y, + -2.0, + ); + next.main.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_y(-1.27) + * Quaternion::rotation_z(wave * -0.25); + next.main.scale = Vec3::one(); + }, + _ => {}, + } + let head_look = Vec2::new( + ((global_time + anim_time) as f32 / 6.0) + .floor() + .mul(7331.0) + .sin() + * 0.2, + ((global_time + anim_time) as f32 / 6.0) + .floor() + .mul(1337.0) + .sin() + * 0.1, + ); + + if velocity > 0.5 { + next.torso.offset = Vec3::new(0.0, 0.0, 0.0) * skeleton_attr.scaler; + next.torso.ori = Quaternion::rotation_x(-0.2); + next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; + } else { + next.head.offset = Vec3::new( + 0.0, + -3.0 + skeleton_attr.neck_forward, + skeleton_attr.neck_height + 13.0 + short * 0.2, + ); + next.head.ori = + Quaternion::rotation_z(head_look.x) * Quaternion::rotation_x(head_look.y); + next.head.scale = Vec3::one() * skeleton_attr.head_scale; + next.l_foot.offset = Vec3::new(-3.4, -2.5, 8.0); + next.l_foot.ori = Quaternion::rotation_x(wave_ultra_slow_cos * 0.035 - 0.2); + next.l_foot.scale = Vec3::one(); + + next.r_foot.offset = Vec3::new(3.4, 3.5, 8.0); + next.r_foot.ori = Quaternion::rotation_x(wave_ultra_slow * 0.035); + next.r_foot.scale = Vec3::one(); + + next.chest.offset = Vec3::new(0.0, 0.0, 7.0); + next.chest.ori = Quaternion::rotation_z(0.0); + next.chest.scale = Vec3::one(); + + next.belt.offset = Vec3::new(0.0, 0.0, -2.0); + next.belt.ori = Quaternion::rotation_z(0.0); + next.belt.scale = Vec3::one(); + + next.shorts.offset = Vec3::new(0.0, 0.0, -5.0); + next.shorts.ori = Quaternion::rotation_z(0.0); + next.shorts.scale = Vec3::one(); + next.torso.offset = Vec3::new(0.0, 0.0, 0.1) * skeleton_attr.scaler; + next.torso.ori = Quaternion::rotation_x(0.0); + next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; + } + next + } +} diff --git a/voxygen/src/anim/character/gliding.rs b/voxygen/src/anim/character/gliding.rs index 5eacea3e85..50df85942c 100644 --- a/voxygen/src/anim/character/gliding.rs +++ b/voxygen/src/anim/character/gliding.rs @@ -1,12 +1,12 @@ use super::{super::Animation, CharacterSkeleton, SkeletonAttr}; -use common::comp::item::Tool; +use common::comp::item::ToolKind; use std::{f32::consts::PI, ops::Mul}; use vek::*; pub struct GlidingAnimation; impl Animation for GlidingAnimation { - type Dependency = (Option, Vec3, Vec3, Vec3, f64); + type Dependency = (Option, Vec3, Vec3, Vec3, f64); type Skeleton = CharacterSkeleton; fn update_skeleton( @@ -20,12 +20,12 @@ impl Animation for GlidingAnimation { let speed = Vec2::::from(velocity).magnitude(); - let wave_slow = (anim_time as f32 * 7.0).sin(); - let wave_slow_cos = (anim_time as f32 * 7.0).cos(); + let quick = (anim_time as f32 * 7.0).sin(); + let quicka = (anim_time as f32 * 7.0 + PI / 2.0).sin(); let wave_stop = (anim_time as f32 * 1.5).min(PI / 2.0).sin(); - let wave_very_slow = (anim_time as f32 * 3.0).sin(); - let wave_very_slow_alt = (anim_time as f32 * 2.5).sin(); - let wave_very_slow_cos = (anim_time as f32 * 3.0).cos(); + let slow = (anim_time as f32 * 3.0).sin(); + let slowb = (anim_time as f32 * 3.0 + PI).sin(); + let slowa = (anim_time as f32 * 3.0 + PI / 2.0).sin(); let head_look = Vec2::new( ((global_time + anim_time) as f32 / 4.0) @@ -60,48 +60,40 @@ impl Animation for GlidingAnimation { -2.0 + skeleton_attr.neck_forward, skeleton_attr.neck_height + 12.0, ); - next.head.ori = Quaternion::rotation_x(0.35 - wave_very_slow * 0.10 + head_look.y) - * Quaternion::rotation_z(head_look.x + wave_very_slow_cos * 0.15); + next.head.ori = Quaternion::rotation_x(0.35 - slow * 0.10 + head_look.y) + * Quaternion::rotation_z(head_look.x + slowa * 0.15); next.head.scale = Vec3::one() * skeleton_attr.head_scale; next.chest.offset = Vec3::new(0.0, 0.0, -2.0); - next.chest.ori = Quaternion::rotation_z(wave_very_slow_cos * 0.2); + next.chest.ori = Quaternion::rotation_z(slowa * 0.2); next.chest.scale = Vec3::one(); - next.belt.offset = Vec3::new(0.0, 0.0, -4.0); - next.belt.ori = Quaternion::rotation_z(wave_very_slow_cos * 0.25); + next.belt.offset = Vec3::new(0.0, 0.0, -2.0); + next.belt.ori = Quaternion::rotation_z(slowa * 0.25); next.belt.scale = Vec3::one(); - next.shorts.offset = Vec3::new(0.0, 0.0, -7.0); - next.shorts.ori = Quaternion::rotation_z(wave_very_slow_cos * 0.25); + next.shorts.offset = Vec3::new(0.0, 0.0, -5.0); + next.shorts.ori = Quaternion::rotation_z(slowa * 0.35); next.shorts.scale = Vec3::one(); - next.l_hand.offset = Vec3::new( - -9.5 + wave_very_slow_cos * -1.5, - -3.0 + wave_very_slow_cos * 1.5, - 6.0, - ); - next.l_hand.ori = Quaternion::rotation_x(-2.7 + wave_very_slow_cos * -0.1); + next.l_hand.offset = Vec3::new(-9.5 + slowa * -1.5, -3.0 + slowa * 1.5, 6.0); + next.l_hand.ori = Quaternion::rotation_x(-2.7 + slowa * -0.1); next.l_hand.scale = Vec3::one(); - next.r_hand.offset = Vec3::new( - 9.5 + wave_very_slow_cos * -1.5, - -3.0 + wave_very_slow_cos * -1.5, - 6.0, - ); - next.r_hand.ori = Quaternion::rotation_x(-2.7 + wave_very_slow_cos * -0.10); + next.r_hand.offset = Vec3::new(9.5 + slowa * -1.5, -3.0 + slowa * -1.5, 6.0); + next.r_hand.ori = Quaternion::rotation_x(-2.7 + slowa * -0.10); next.r_hand.scale = Vec3::one(); next.l_foot.offset = Vec3::new(-3.4, 1.0, -2.0); next.l_foot.ori = Quaternion::rotation_x( - (wave_stop * -0.7 - wave_slow_cos * -0.21 + wave_very_slow * 0.19) * speed * 0.04, + (wave_stop * -0.7 - quicka * -0.21 + slow * 0.19) * speed * 0.04, ); next.l_foot.scale = Vec3::one(); next.r_foot.offset = Vec3::new(3.4, 1.0, -2.0); next.r_foot.ori = Quaternion::rotation_x( - (wave_stop * -0.8 + wave_slow * -0.25 + wave_very_slow_alt * 0.13) * speed * 0.04, + (wave_stop * -0.8 + quick * -0.25 + slowb * 0.13) * speed * 0.04, ); next.r_foot.scale = Vec3::one(); @@ -113,9 +105,8 @@ impl Animation for GlidingAnimation { next.r_shoulder.ori = Quaternion::rotation_x(0.0); next.r_shoulder.scale = Vec3::one() * 1.1; - next.glider.offset = Vec3::new(0.0, -13.0 + wave_very_slow * 0.10, 6.0); - next.glider.ori = - Quaternion::rotation_x(1.0) * Quaternion::rotation_y(wave_very_slow_cos * 0.04); + next.glider.offset = Vec3::new(0.0, -13.0 + slow * 0.10, 6.0); + next.glider.ori = Quaternion::rotation_x(1.0) * Quaternion::rotation_y(slowa * 0.04); next.glider.scale = Vec3::one(); next.main.offset = Vec3::new( @@ -139,7 +130,7 @@ impl Animation for GlidingAnimation { next.lantern.scale = Vec3::one() * 0.0; next.torso.offset = Vec3::new(0.0, 6.0, 15.0) / 11.0 * skeleton_attr.scaler; - next.torso.ori = Quaternion::rotation_x(-0.05 * speed.max(12.0) + wave_very_slow * 0.10) + next.torso.ori = Quaternion::rotation_x(-0.05 * speed.max(12.0) + slow * 0.10) * Quaternion::rotation_y(tilt * 16.0); next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; diff --git a/voxygen/src/anim/character/idle.rs b/voxygen/src/anim/character/idle.rs index 57949cb125..4ef9a75a3e 100644 --- a/voxygen/src/anim/character/idle.rs +++ b/voxygen/src/anim/character/idle.rs @@ -17,41 +17,27 @@ impl Animation for IdleAnimation { ) -> Self::Skeleton { let mut next = (*skeleton).clone(); - let wave_ultra_slow = (anim_time as f32 * 1.0 + PI).sin(); - let wave_ultra_slow_cos = (anim_time as f32 * 1.0 + PI).cos(); - let wave_ultra_slow_abs = ((anim_time as f32 * 0.5 + PI).sin()) + 1.0; + let wave_ultra_slow = (anim_time as f32 * 1.0).sin(); + let wave_ultra_slow_cos = (anim_time as f32 * 1.0 + PI / 2.0).sin(); + let head_abs = ((anim_time as f32 * 0.5 + PI).sin()) + 1.0; - /*let head_look = Vec2::new( - ((global_time + anim_time) as f32 / 12.0) - .floor() - .mul(7331.0) - .sin() - * 0.5, - ((global_time + anim_time) as f32 / 12.0) - .floor() - .mul(1337.0) - .sin() - * 0.25, - );*/ next.head.offset = Vec3::new( 0.0 + skeleton_attr.neck_right, -2.0 + skeleton_attr.neck_forward, - skeleton_attr.neck_height + 21.0 + wave_ultra_slow * 0.1, + skeleton_attr.neck_height + 14.0 + wave_ultra_slow * 0.1 + head_abs * -0.5, ); - /*next.head.ori = - Quaternion::rotation_z(head_look.x) * Quaternion::rotation_x(head_look.y.abs());*/ - next.head.scale = Vec3::one() * skeleton_attr.head_scale; + next.head.scale = Vec3::one() * skeleton_attr.head_scale - head_abs * 0.05; next.chest.offset = Vec3::new(0.0, 0.0, 7.0 + wave_ultra_slow * 0.1); next.chest.ori = Quaternion::rotation_x(0.0); - next.chest.scale = Vec3::one() + wave_ultra_slow_abs * 0.05; + next.chest.scale = Vec3::one() + head_abs * 0.05; - next.belt.offset = Vec3::new(0.0, 0.0, 5.0 + wave_ultra_slow * 0.1); + next.belt.offset = Vec3::new(0.0, 0.0, -2.0 + wave_ultra_slow * 0.1); next.belt.ori = Quaternion::rotation_x(0.0); - next.belt.scale = Vec3::one() + wave_ultra_slow_abs * 0.05; + next.belt.scale = Vec3::one() - head_abs * 0.05; - next.shorts.offset = Vec3::new(0.0, 0.0, 2.0 + wave_ultra_slow * 0.1); + next.shorts.offset = Vec3::new(0.0, 0.0, -5.0 + wave_ultra_slow * 0.1); next.shorts.ori = Quaternion::rotation_x(0.0); next.shorts.scale = Vec3::one(); @@ -67,10 +53,10 @@ impl Animation for IdleAnimation { next.r_hand.offset = Vec3::new( 7.0, -0.25 + wave_ultra_slow_cos * 0.15, - 5.0 + wave_ultra_slow * 0.5 + wave_ultra_slow_abs * -0.05, + 5.0 + wave_ultra_slow * 0.5 + head_abs * -0.05, ); next.r_hand.ori = Quaternion::rotation_x(0.0 + wave_ultra_slow * -0.06); - next.r_hand.scale = Vec3::one() + wave_ultra_slow_abs * -0.05; + next.r_hand.scale = Vec3::one() + head_abs * -0.05; next.l_foot.offset = Vec3::new(-3.4, -0.1, 8.0); next.l_foot.ori = Quaternion::identity(); @@ -82,11 +68,11 @@ impl Animation for IdleAnimation { next.l_shoulder.offset = Vec3::new(-5.0, 0.0, 5.0); next.l_shoulder.ori = Quaternion::rotation_x(0.0); - next.l_shoulder.scale = (Vec3::one() + wave_ultra_slow_abs * -0.05) * 1.15; + next.l_shoulder.scale = (Vec3::one() + head_abs * -0.05) * 1.15; next.r_shoulder.offset = Vec3::new(5.0, 0.0, 5.0); next.r_shoulder.ori = Quaternion::rotation_x(0.0); - next.r_shoulder.scale = (Vec3::one() + wave_ultra_slow_abs * -0.05) * 1.15; + next.r_shoulder.scale = (Vec3::one() + head_abs * -0.05) * 1.15; next.glider.offset = Vec3::new(0.0, 5.0, 0.0); next.glider.ori = Quaternion::rotation_y(0.0); @@ -98,7 +84,7 @@ impl Animation for IdleAnimation { 18.0, ); next.main.ori = Quaternion::rotation_y(2.5) * Quaternion::rotation_z(1.57); - next.main.scale = Vec3::one() + wave_ultra_slow_abs * -0.05; + next.main.scale = Vec3::one() + head_abs * -0.05; next.second.offset = Vec3::new( 0.0 + skeleton_attr.weapon_x, diff --git a/voxygen/src/anim/character/jump.rs b/voxygen/src/anim/character/jump.rs index b19f3f5ba4..ba90251487 100644 --- a/voxygen/src/anim/character/jump.rs +++ b/voxygen/src/anim/character/jump.rs @@ -1,12 +1,11 @@ use super::{super::Animation, CharacterSkeleton, SkeletonAttr}; -use common::comp::item::Tool; +use common::comp::item::ToolKind; use std::f32::consts::PI; use vek::*; pub struct JumpAnimation; - impl Animation for JumpAnimation { - type Dependency = (Option, f64); + type Dependency = (Option, f64); type Skeleton = CharacterSkeleton; fn update_skeleton( @@ -17,66 +16,65 @@ impl Animation for JumpAnimation { skeleton_attr: &SkeletonAttr, ) -> Self::Skeleton { let mut next = (*skeleton).clone(); - let wave = (anim_time as f32 * 14.0).sin(); - let wave_slow = (anim_time as f32 * 7.0).sin(); - let wave_stop = (anim_time as f32 * 4.5).min(PI / 2.0).sin(); - let wave_stop_alt = (anim_time as f32 * 5.0).min(PI / 2.0).sin(); + let quick = (anim_time as f32 * 14.0).sin(); + let slow = (anim_time as f32 * 7.0).sin(); + let stop = (anim_time as f32 * 1.5).min(PI / 2.0).sin(); next.head.offset = Vec3::new( 0.0 + skeleton_attr.neck_right, -3.0 + skeleton_attr.neck_forward, - skeleton_attr.neck_height + 21.0, + skeleton_attr.neck_height + 13.0, ); - next.head.ori = Quaternion::rotation_x(0.25 + wave_stop * 0.1 + wave_slow * 0.04); + next.head.ori = Quaternion::rotation_x(0.25 + stop * 0.1 + slow * 0.04); next.head.scale = Vec3::one() * skeleton_attr.head_scale; next.chest.offset = Vec3::new(0.0, 0.0, 8.0); next.chest.ori = Quaternion::rotation_z(0.0); next.chest.scale = Vec3::one() * 1.01; - next.belt.offset = Vec3::new(0.0, 0.0, 6.0); + next.belt.offset = Vec3::new(0.0, 0.0, -2.0); next.belt.ori = Quaternion::rotation_z(0.0); next.belt.scale = Vec3::one(); - next.shorts.offset = Vec3::new(0.0, 0.0, 3.0); + next.shorts.offset = Vec3::new(0.0, 0.0, -5.0); next.shorts.ori = Quaternion::rotation_z(0.0); next.shorts.scale = Vec3::one(); next.l_hand.offset = Vec3::new( - -6.0 + wave_stop * -1.8, - -0.25 + wave_stop * 1.7, - 2.0 + wave_stop * 3.2 - wave * 0.4, + -6.0 + stop * -1.8, + -0.25 + stop * 2.0, + 2.0 + stop * 3.2 - quick * 0.4, ); - next.l_hand.ori = Quaternion::rotation_x(wave_stop_alt * 1.2 + wave_slow * 0.2) - * Quaternion::rotation_y(wave_stop_alt * 0.2); + next.l_hand.ori = + Quaternion::rotation_x(stop * 1.2 + slow * 0.3) * Quaternion::rotation_y(stop * 0.2); next.l_hand.scale = Vec3::one(); next.r_hand.offset = Vec3::new( - 6.0 + wave_stop * 1.8, - -0.25 + wave_stop * -1.7, - 2.0 + wave_stop * 3.2 - wave * 0.4, + 6.0 + stop * 1.8, + -0.25 + stop * -2.0, + 2.0 + stop * 3.2 - quick * 0.4, ); - next.r_hand.ori = Quaternion::rotation_x(-wave_stop_alt * 1.2 + wave_slow * -0.2) - * Quaternion::rotation_y(wave_stop_alt * -0.2); + next.r_hand.ori = + Quaternion::rotation_x(-stop * 1.2 + slow * -0.3) * Quaternion::rotation_y(stop * -0.2); next.r_hand.scale = Vec3::one(); next.l_foot.offset = Vec3::new(-3.4, 1.0, 6.0); - next.l_foot.ori = Quaternion::rotation_x(wave_stop * -1.2 + wave_slow * -0.2); + next.l_foot.ori = Quaternion::rotation_x(stop * -1.2 + slow * -0.3); next.l_foot.scale = Vec3::one(); next.r_foot.offset = Vec3::new(3.4, -1.0, 6.0); - next.r_foot.ori = Quaternion::rotation_x(wave_stop * 1.2 + wave_slow * 0.2); + next.r_foot.ori = Quaternion::rotation_x(stop * 1.2 + slow * 0.3); next.r_foot.scale = Vec3::one(); next.l_shoulder.offset = Vec3::new(-5.0, 0.0, 4.7); - next.l_shoulder.ori = Quaternion::rotation_x(wave_stop_alt * 0.3); + next.l_shoulder.ori = Quaternion::rotation_x(stop * 0.3); next.l_shoulder.scale = Vec3::one() * 1.1; next.r_shoulder.offset = Vec3::new(5.0, 0.0, 4.7); - next.r_shoulder.ori = Quaternion::rotation_x(-wave_stop_alt * 0.3); + next.r_shoulder.ori = Quaternion::rotation_x(-stop * 0.3); next.r_shoulder.scale = Vec3::one() * 1.1; - next.glider.offset = Vec3::new(0.0, 5.0, 0.0); + next.glider.offset = Vec3::new(0.0, 0.0, 10.0); next.glider.ori = Quaternion::rotation_y(0.0); next.glider.scale = Vec3::one() * 0.0; diff --git a/voxygen/src/anim/character/mod.rs b/voxygen/src/anim/character/mod.rs index 727d0f0918..26cf805191 100644 --- a/voxygen/src/anim/character/mod.rs +++ b/voxygen/src/anim/character/mod.rs @@ -1,31 +1,36 @@ -pub mod attack; +pub mod alpha; +pub mod beta; pub mod block; pub mod blockidle; pub mod charge; -pub mod cidle; pub mod climb; +pub mod dash; +pub mod equip; pub mod gliding; pub mod idle; pub mod jump; pub mod roll; pub mod run; +pub mod shoot; pub mod sit; +pub mod spin; pub mod stand; pub mod swim; pub mod wield; // Reexports pub use self::{ - attack::AttackAnimation, block::BlockAnimation, blockidle::BlockIdleAnimation, - charge::ChargeAnimation, cidle::CidleAnimation, climb::ClimbAnimation, - gliding::GlidingAnimation, idle::IdleAnimation, jump::JumpAnimation, roll::RollAnimation, - run::RunAnimation, sit::SitAnimation, stand::StandAnimation, swim::SwimAnimation, + alpha::AlphaAnimation, beta::BetaAnimation, block::BlockAnimation, + blockidle::BlockIdleAnimation, charge::ChargeAnimation, climb::ClimbAnimation, + dash::DashAnimation, equip::EquipAnimation, gliding::GlidingAnimation, idle::IdleAnimation, + jump::JumpAnimation, roll::RollAnimation, run::RunAnimation, shoot::ShootAnimation, + sit::SitAnimation, spin::SpinAnimation, stand::StandAnimation, swim::SwimAnimation, wield::WieldAnimation, }; use super::{Bone, Skeleton}; use crate::render::FigureBoneData; -use common::comp::{self, item::Tool}; +use common::comp::{self, item::ToolKind}; #[derive(Clone, Default)] pub struct CharacterSkeleton { @@ -69,10 +74,10 @@ impl Skeleton for CharacterSkeleton { let head_mat = self.head.compute_base_matrix(); [ - FigureBoneData::new(torso_mat * head_mat), + FigureBoneData::new(torso_mat * chest_mat * head_mat), FigureBoneData::new(torso_mat * chest_mat), - FigureBoneData::new(torso_mat * self.belt.compute_base_matrix()), - FigureBoneData::new(torso_mat * self.shorts.compute_base_matrix()), + FigureBoneData::new(torso_mat * chest_mat * self.belt.compute_base_matrix()), + FigureBoneData::new(torso_mat * chest_mat * self.shorts.compute_base_matrix()), FigureBoneData::new(torso_mat * chest_mat * control_mat * l_control_mat * l_hand_mat), FigureBoneData::new(torso_mat * chest_mat * control_mat * r_control_mat * r_hand_mat), FigureBoneData::new(torso_mat * self.l_foot.compute_base_matrix()), @@ -227,27 +232,27 @@ impl<'a> From<&'a comp::humanoid::Body> for SkeletonAttr { (Danari, Male) => 0.0, (Danari, Female) => 0.0, }, - weapon_x: match Tool::Hammer { - // TODO: Inventory - Tool::Sword => 0.0, - Tool::Axe => 3.0, - Tool::Hammer => 0.0, - Tool::Shield => 3.0, - Tool::Staff => 3.0, - Tool::Bow => 0.0, - Tool::Dagger => 0.0, - Tool::Debug(_) => 0.0, + weapon_x: match ToolKind::Empty { + ToolKind::Sword(_) => 0.0, + ToolKind::Axe(_) => 3.0, + ToolKind::Hammer(_) => 0.0, + ToolKind::Shield(_) => 3.0, + ToolKind::Staff(_) => 3.0, + ToolKind::Bow(_) => 0.0, + ToolKind::Dagger(_) => 0.0, + ToolKind::Debug(_) => 0.0, + ToolKind::Empty => 0.0, }, - weapon_y: match Tool::Hammer { - // TODO: Inventory - Tool::Sword => -1.25, - Tool::Axe => 0.0, - Tool::Hammer => -2.0, - Tool::Shield => 0.0, - Tool::Staff => 0.0, - Tool::Bow => -2.0, - Tool::Dagger => -2.0, - Tool::Debug(_) => 0.0, + weapon_y: match ToolKind::Empty { + ToolKind::Sword(_) => -1.25, + ToolKind::Axe(_) => 0.0, + ToolKind::Hammer(_) => -2.0, + ToolKind::Shield(_) => 0.0, + ToolKind::Staff(_) => 0.0, + ToolKind::Bow(_) => -2.0, + ToolKind::Dagger(_) => -2.0, + ToolKind::Debug(_) => 0.0, + ToolKind::Empty => 0.0, }, } } diff --git a/voxygen/src/anim/character/roll.rs b/voxygen/src/anim/character/roll.rs index 5dc42b8eed..2357bfd180 100644 --- a/voxygen/src/anim/character/roll.rs +++ b/voxygen/src/anim/character/roll.rs @@ -1,21 +1,22 @@ use super::{super::Animation, CharacterSkeleton, SkeletonAttr}; -use common::comp::item::Tool; +use common::comp::item::ToolKind; use std::f32::consts::PI; use vek::*; pub struct RollAnimation; impl Animation for RollAnimation { - type Dependency = (Option, Vec3, Vec3, f64); + type Dependency = (Option, Vec3, Vec3, f64); type Skeleton = CharacterSkeleton; fn update_skeleton( skeleton: &Self::Skeleton, (_active_tool_kind, orientation, last_ori, _global_time): Self::Dependency, anim_time: f64, - _rate: &mut f32, + rate: &mut f32, skeleton_attr: &SkeletonAttr, ) -> Self::Skeleton { + *rate = 1.0; let mut next = (*skeleton).clone(); let wave = (anim_time as f32 * 5.5).sin(); @@ -41,7 +42,7 @@ impl Animation for RollAnimation { next.head.offset = Vec3::new( 0.0 + skeleton_attr.neck_right, -2.0 + skeleton_attr.neck_forward, - skeleton_attr.neck_height + 17.0 + wave_dub * -8.0, + skeleton_attr.neck_height + 12.0 + wave_dub * -8.0, ); next.head.ori = Quaternion::rotation_x(wave_dub * 0.4); next.head.scale = Vec3::one(); @@ -50,11 +51,11 @@ impl Animation for RollAnimation { next.chest.ori = Quaternion::rotation_x(wave_dub * 0.4); next.chest.scale = Vec3::one() * 1.01; - next.belt.offset = Vec3::new(0.0, 0.0, 5.0 + wave_dub * -3.0); + next.belt.offset = Vec3::new(0.0, 0.0, -2.0 + wave_dub * -3.0); next.belt.ori = Quaternion::rotation_x(0.0 + wave_dub * 0.4); next.belt.scale = Vec3::one(); - next.shorts.offset = Vec3::new(0.0, 0.0, 2.0 + wave_dub * -2.0); + next.shorts.offset = Vec3::new(0.0, 0.0, -5.0 + wave_dub * -2.0); next.shorts.ori = Quaternion::rotation_x(0.0 + wave_dub * 0.4); next.shorts.scale = Vec3::one(); diff --git a/voxygen/src/anim/character/run.rs b/voxygen/src/anim/character/run.rs index a4c92e3bce..27643664a1 100644 --- a/voxygen/src/anim/character/run.rs +++ b/voxygen/src/anim/character/run.rs @@ -1,12 +1,12 @@ use super::{super::Animation, CharacterSkeleton, SkeletonAttr}; -use common::comp::item::Tool; +use common::comp::item::ToolKind; use std::{f32::consts::PI, ops::Mul}; use vek::*; pub struct RunAnimation; impl Animation for RunAnimation { - type Dependency = (Option, Vec3, Vec3, Vec3, f64); + type Dependency = (Option, Vec3, Vec3, Vec3, f64); type Skeleton = CharacterSkeleton; fn update_skeleton( @@ -19,32 +19,32 @@ impl Animation for RunAnimation { let mut next = (*skeleton).clone(); let speed = Vec2::::from(velocity).magnitude(); - *rate = speed; + *rate = 1.0; let lab = 1.0; let long = (((5.0) - / (1.5 + 3.5 * ((anim_time as f32 * lab as f32 * 0.66).sin()).powf(2.0 as f32))) + / (1.5 + 3.5 * ((anim_time as f32 * lab as f32 * 8.0).sin()).powf(2.0 as f32))) .sqrt()) - * ((anim_time as f32 * lab as f32 * 0.66).sin()); + * ((anim_time as f32 * lab as f32 * 8.0).sin()); let short = (((5.0) - / (1.5 + 3.5 * ((anim_time as f32 * lab as f32 * 1.32).sin()).powf(2.0 as f32))) + / (1.5 + 3.5 * ((anim_time as f32 * lab as f32 * 16.0).sin()).powf(2.0 as f32))) .sqrt()) - * ((anim_time as f32 * lab as f32 * 1.32).sin()); + * ((anim_time as f32 * lab as f32 * 16.0).sin()); let shortalt = (((5.0) / (1.5 + 3.5 - * ((anim_time as f32 * lab as f32 * 1.32 + PI / 2.0).sin()).powf(2.0 as f32))) + * ((anim_time as f32 * lab as f32 * 16.0 + PI / 2.0).sin()).powf(2.0 as f32))) .sqrt()) - * ((anim_time as f32 * lab as f32 * 1.32 + PI / 2.0).sin()); + * ((anim_time as f32 * lab as f32 * 16.0 + PI / 2.0).sin()); let foot = (((5.0) - / (1.1 + 3.9 * ((anim_time as f32 * lab as f32 * 1.32).sin()).powf(2.0 as f32))) + / (1.1 + 3.9 * ((anim_time as f32 * lab as f32 * 16.0).sin()).powf(2.0 as f32))) .sqrt()) - * ((anim_time as f32 * lab as f32 * 1.32).sin()); + * ((anim_time as f32 * lab as f32 * 16.0).sin()); - let wave_stop = (anim_time as f32 * 2.6).min(PI / 2.0 / 2.0).sin(); + let wave_stop = (anim_time as f32 * 26.0).min(PI / 2.0 / 2.0).sin(); let head_look = Vec2::new( ((global_time + anim_time) as f32 / 18.0) @@ -76,27 +76,27 @@ impl Animation for RunAnimation { next.head.offset = Vec3::new( 0.0, -3.0 + skeleton_attr.neck_forward, - skeleton_attr.neck_height + 20.0 + short * 1.3, + skeleton_attr.neck_height + 13.0 + short * 0.3, ); - next.head.ori = Quaternion::rotation_z(head_look.x + long * 0.1) + next.head.ori = Quaternion::rotation_z(head_look.x + long * -0.1 - short * 0.3) * Quaternion::rotation_x(head_look.y + 0.35); next.head.scale = Vec3::one() * skeleton_attr.head_scale; - next.chest.offset = Vec3::new(0.0, 0.0, 7.0 + short * 1.1); - next.chest.ori = Quaternion::rotation_z(short * 0.2); + next.chest.offset = Vec3::new(0.0, 0.0, 10.5 + short * 1.1); + next.chest.ori = Quaternion::rotation_z(short * 0.3); next.chest.scale = Vec3::one(); - next.belt.offset = Vec3::new(0.0, 0.0, 5.0 + short * 1.1); - next.belt.ori = Quaternion::rotation_z(short * 0.35); + next.belt.offset = Vec3::new(0.0, 0.0, -2.0); + next.belt.ori = Quaternion::rotation_z(short * 0.25); next.belt.scale = Vec3::one(); - next.shorts.offset = Vec3::new(0.0, 0.0, 2.0 + short * 1.1); - next.shorts.ori = Quaternion::rotation_z(short * 0.6); + next.shorts.offset = Vec3::new(0.0, 0.0, -5.0); + next.shorts.ori = Quaternion::rotation_z(short * 0.4); next.shorts.scale = Vec3::one(); next.l_hand.offset = Vec3::new( -6.0 + wave_stop * -1.0, - -0.25 + short * 2.0, + -0.25 + short * 3.0, 5.0 + short * -1.5, ); next.l_hand.ori = @@ -105,18 +105,18 @@ impl Animation for RunAnimation { next.r_hand.offset = Vec3::new( 6.0 + wave_stop * 1.0, - -0.25 + short * -2.0, + -0.25 + short * -3.0, 5.0 + short * 1.5, ); next.r_hand.ori = Quaternion::rotation_x(0.8 + short * -1.2) * Quaternion::rotation_y(wave_stop * -0.1); next.r_hand.scale = Vec3::one(); - next.l_foot.offset = Vec3::new(-3.4, foot * 1.0, 6.0); + next.l_foot.offset = Vec3::new(-3.4, foot * 1.0, 9.5); next.l_foot.ori = Quaternion::rotation_x(foot * -1.2); next.l_foot.scale = Vec3::one(); - next.r_foot.offset = Vec3::new(3.4, foot * -1.0, 6.0); + next.r_foot.offset = Vec3::new(3.4, foot * -1.0, 9.5); next.r_foot.ori = Quaternion::rotation_x(foot * 1.2); next.r_foot.scale = Vec3::one(); @@ -128,7 +128,7 @@ impl Animation for RunAnimation { next.r_shoulder.ori = Quaternion::rotation_x(short * -0.15); next.r_shoulder.scale = Vec3::one() * 1.1; - next.glider.offset = Vec3::new(0.0, 5.0, 0.0); + next.glider.offset = Vec3::new(0.0, 0.0, 10.0); next.glider.ori = Quaternion::rotation_y(0.0); next.glider.scale = Vec3::one() * 0.0; @@ -152,7 +152,7 @@ impl Animation for RunAnimation { next.lantern.ori = Quaternion::rotation_y(0.0); next.lantern.scale = Vec3::one() * 0.0; - next.torso.offset = Vec3::new(0.0, -0.3 + shortalt * -0.065, 0.4) * skeleton_attr.scaler; + next.torso.offset = Vec3::new(0.0, -0.3 + shortalt * -0.065, 0.0) * skeleton_attr.scaler; next.torso.ori = Quaternion::rotation_x(wave_stop * speed * -0.05 + wave_stop * speed * -0.005) * Quaternion::rotation_y(tilt); diff --git a/voxygen/src/anim/character/shoot.rs b/voxygen/src/anim/character/shoot.rs new file mode 100644 index 0000000000..26f0d6c443 --- /dev/null +++ b/voxygen/src/anim/character/shoot.rs @@ -0,0 +1,167 @@ +use super::{super::Animation, CharacterSkeleton, SkeletonAttr}; +use common::comp::item::ToolKind; +use vek::*; + +pub struct ShootAnimation; + +impl Animation for ShootAnimation { + type Dependency = (Option, f32, f64); + type Skeleton = CharacterSkeleton; + + fn update_skeleton( + skeleton: &Self::Skeleton, + (active_tool_kind, velocity, _global_time): Self::Dependency, + anim_time: f64, + rate: &mut f32, + skeleton_attr: &SkeletonAttr, + ) -> Self::Skeleton { + *rate = 1.0; + + let mut next = (*skeleton).clone(); + + let lab = 1.0; + + let foot = (((5.0) + / (0.2 + 4.8 * ((anim_time as f32 * lab as f32 * 8.0).sin()).powf(2.0 as f32))) + .sqrt()) + * ((anim_time as f32 * lab as f32 * 8.0).sin()); + let foote = (((5.0) + / (0.5 + 4.5 * ((anim_time as f32 * lab as f32 * 8.0 + 1.57).sin()).powf(2.0 as f32))) + .sqrt()) + * ((anim_time as f32 * lab as f32 * 8.0).sin()); + + let exp = ((anim_time as f32).powf(0.3 as f32)).min(1.2); + + next.head.offset = Vec3::new( + 0.0 + skeleton_attr.neck_right, + -2.0 + skeleton_attr.neck_forward, + skeleton_attr.neck_height + 14.0, + ); + next.head.ori = Quaternion::rotation_z(exp * -0.4) + * Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(exp * 0.1); + next.head.scale = Vec3::one() * skeleton_attr.head_scale; + + next.chest.offset = Vec3::new(0.0, 0.0 - exp * 1.5, 7.0); + next.chest.ori = Quaternion::rotation_z(0.4 + exp * 1.0) + * Quaternion::rotation_x(0.0 + exp * 0.2) + * Quaternion::rotation_y(exp * -0.08); + next.chest.scale = Vec3::one(); + + next.belt.offset = Vec3::new(0.0, 0.0 + exp * 1.0, -2.0); + next.belt.ori = next.chest.ori * -0.1; + next.belt.scale = Vec3::one(); + + next.shorts.offset = Vec3::new(0.0, exp * 1.0, -5.0); + next.shorts.ori = next.chest.ori * -0.08; + next.shorts.scale = Vec3::one(); + + match active_tool_kind { + //TODO: Inventory + Some(ToolKind::Staff(_)) => { + next.l_hand.offset = Vec3::new(1.0, -2.0, -5.0); + next.l_hand.ori = Quaternion::rotation_x(1.47) * Quaternion::rotation_y(-0.3); + next.l_hand.scale = Vec3::one() * 1.05; + next.r_hand.offset = Vec3::new(9.0, 1.0, 0.0); + next.r_hand.ori = Quaternion::rotation_x(1.8) + * Quaternion::rotation_y(0.5) + * Quaternion::rotation_z(-0.27); + next.r_hand.scale = Vec3::one() * 1.05; + next.main.offset = Vec3::new(9.2, 8.4, 13.2); + next.main.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_y(3.14 + 0.3) + * Quaternion::rotation_z(0.9); + next.main.scale = Vec3::one(); + + next.control.offset = Vec3::new(-7.0, 6.0, 6.0 - exp * 5.0); + next.control.ori = Quaternion::rotation_x(exp * 1.3) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(exp * 1.5); + next.control.scale = Vec3::one(); + }, + Some(ToolKind::Bow(_)) => { + next.l_hand.offset = Vec3::new(1.0 - exp * 2.0, -4.0 - exp * 7.0, -1.0 + exp * 6.0); + next.l_hand.ori = Quaternion::rotation_x(1.20) + * Quaternion::rotation_y(-0.6 + exp * 0.8) + * Quaternion::rotation_z(-0.3 + exp * 0.9); + next.l_hand.scale = Vec3::one() * 1.05; + next.r_hand.offset = Vec3::new(3.0, -1.0, -5.0); + next.r_hand.ori = Quaternion::rotation_x(1.20) + * Quaternion::rotation_y(-0.6) + * Quaternion::rotation_z(-0.3); + next.r_hand.scale = Vec3::one() * 1.05; + next.main.offset = Vec3::new(3.0, 2.0, -13.0); + next.main.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_y(0.3) + * Quaternion::rotation_z(-0.6); + next.main.scale = Vec3::one(); + + next.control.offset = Vec3::new(-9.0, 6.0, 8.0); + next.control.ori = Quaternion::rotation_x(exp * 0.4) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(0.0); + next.control.scale = Vec3::one(); + }, + _ => {}, + } + if velocity > 0.5 { + next.l_foot.offset = + Vec3::new(-3.4 - foot * 1.0 + exp * -1.0, foote * 0.8 + exp * 1.5, 8.0); + next.l_foot.ori = Quaternion::rotation_x(exp * 0.5) + * Quaternion::rotation_z(exp * 0.4) + * Quaternion::rotation_y(0.15); + next.l_foot.scale = Vec3::one(); + + next.r_foot.offset = + Vec3::new(3.4 + foot * 1.0 + exp * 1.0, foote * -0.8 + exp * -1.0, 8.0); + next.r_foot.ori = Quaternion::rotation_x(exp * -0.5) + * Quaternion::rotation_z(exp * 0.4) + * Quaternion::rotation_y(0.0); + next.r_foot.scale = Vec3::one(); + next.torso.offset = Vec3::new(0.0, 0.0, 0.1) * skeleton_attr.scaler; + next.torso.ori = Quaternion::rotation_z(0.0) + * Quaternion::rotation_x(-0.15) + * Quaternion::rotation_y(0.0); + next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; + } else { + next.l_foot.offset = Vec3::new(-3.4, -2.5, 8.0 + exp * 2.5); + next.l_foot.ori = + Quaternion::rotation_x(exp * -0.2 - 0.2) * Quaternion::rotation_z(exp * 1.0); + next.l_foot.scale = Vec3::one(); + + next.r_foot.offset = Vec3::new(3.4, 3.5 - exp * 2.0, 8.0); + next.r_foot.ori = Quaternion::rotation_x(exp * 0.1) * Quaternion::rotation_z(exp * 0.5); + next.r_foot.scale = Vec3::one(); + next.torso.offset = Vec3::new(0.0, 0.0, 0.1) * skeleton_attr.scaler; + next.torso.ori = Quaternion::rotation_z(0.0) + * Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(0.0); + next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; + } + + next.l_shoulder.offset = Vec3::new(-5.0, 0.0, 4.7); + next.l_shoulder.ori = Quaternion::rotation_x(0.0); + next.l_shoulder.scale = Vec3::one() * 1.1; + + next.r_shoulder.offset = Vec3::new(5.0, 0.0, 4.7); + next.r_shoulder.ori = Quaternion::rotation_x(0.0); + next.r_shoulder.scale = Vec3::one() * 1.1; + + next.glider.offset = Vec3::new(0.0, 5.0, 0.0); + next.glider.ori = Quaternion::rotation_y(0.0); + next.glider.scale = Vec3::one() * 0.0; + + next.lantern.offset = Vec3::new(0.0, 0.0, 0.0); + next.lantern.ori = Quaternion::rotation_x(0.0); + next.lantern.scale = Vec3::one() * 0.0; + + next.l_control.offset = Vec3::new(0.0, 0.0, 0.0); + next.l_control.ori = Quaternion::rotation_x(0.0); + next.l_control.scale = Vec3::one(); + + next.r_control.offset = Vec3::new(0.0, 0.0, 0.0); + next.r_control.ori = Quaternion::rotation_x(0.0); + next.r_control.scale = Vec3::one(); + next + } +} diff --git a/voxygen/src/anim/character/sit.rs b/voxygen/src/anim/character/sit.rs index a4a8f4a210..4dadd1e095 100644 --- a/voxygen/src/anim/character/sit.rs +++ b/voxygen/src/anim/character/sit.rs @@ -1,12 +1,12 @@ use super::{super::Animation, CharacterSkeleton, SkeletonAttr}; -use common::comp::item::Tool; +use common::comp::item::ToolKind; use std::{f32::consts::PI, ops::Mul}; use vek::*; pub struct SitAnimation; impl Animation for SitAnimation { - type Dependency = (Option, f64); + type Dependency = (Option, f64); type Skeleton = CharacterSkeleton; fn update_skeleton( @@ -18,12 +18,10 @@ impl Animation for SitAnimation { ) -> Self::Skeleton { let mut next = (*skeleton).clone(); - let wave_slow = (anim_time as f32 * 1.0 + PI).sin(); - let wave_slow_cos = (anim_time as f32 * 1.0 + PI).cos(); - let wave_stop = (anim_time as f32 * 3.0).min(PI / 2.0).sin(); - let wave_slow_abs = ((anim_time as f32 * 0.5 + PI).sin()) + 1.0; - let wave_ultra_slow = (anim_time as f32 * 0.3 + PI).sin(); - let wave_ultra_slow_cos = (anim_time as f32 * 0.3 + PI).cos(); + let slow = (anim_time as f32 * 1.0).sin(); + let slowa = (anim_time as f32 * 1.0 + PI / 2.0).sin(); + let stop = (anim_time as f32 * 3.0).min(PI / 2.0).sin(); + let slow_abs = ((anim_time as f32 * 0.3).sin()) + 1.0; let head_look = Vec2::new( ((global_time + anim_time) as f32 / 18.0) @@ -39,69 +37,49 @@ impl Animation for SitAnimation { ); next.head.offset = Vec3::new( 0.0 + skeleton_attr.neck_right, - wave_stop * -3.6 + skeleton_attr.neck_forward, - skeleton_attr.neck_height + 21.0 + wave_slow * 0.1 + wave_stop * -0.8, + -3.0 + skeleton_attr.neck_forward, + skeleton_attr.neck_height + 14.0 + slow * 0.1 + stop * -0.8, ); - next.head.ori = - Quaternion::rotation_z(head_look.x + wave_ultra_slow * 0.2 - wave_slow * 0.1) - * Quaternion::rotation_x( - (wave_ultra_slow_cos * -0.2 + wave_slow * 0.1 + head_look.y).abs(), - ); + next.head.ori = Quaternion::rotation_z(head_look.x + slow * 0.2 - slow * 0.1) + * Quaternion::rotation_x((slowa * -0.1 + slow * 0.1 + head_look.y).abs()); next.head.scale = Vec3::one() * skeleton_attr.head_scale; - next.chest.offset = Vec3::new( - 0.0, - wave_stop * -0.4, - 7.0 + wave_slow * 0.1 + wave_stop * -0.8, - ); - next.chest.ori = Quaternion::rotation_x(wave_stop * 0.15); - next.chest.scale = Vec3::one() + wave_slow_abs * 0.05; + next.chest.offset = Vec3::new(0.0, stop * -0.4, 7.0 + slow * 0.1 + stop * -0.8); + next.chest.ori = Quaternion::rotation_x(stop * 0.15); + next.chest.scale = Vec3::one() + slow_abs * 0.05; - next.belt.offset = Vec3::new(0.0, wave_stop * 1.2, 5.0); - next.belt.ori = Quaternion::rotation_x(wave_stop * 0.3); - next.belt.scale = (Vec3::one() + wave_slow_abs * 0.05) * 1.02; + next.belt.offset = Vec3::new(0.0, stop * 1.2, -2.0); + next.belt.ori = Quaternion::rotation_x(stop * 0.3); + next.belt.scale = (Vec3::one() + slow_abs * 0.05) * 1.02; - next.shorts.offset = Vec3::new(0.0, wave_stop * 2.5, 2.0 + wave_stop * 0.6); - next.shorts.ori = Quaternion::rotation_x(wave_stop * 0.6); + next.shorts.offset = Vec3::new(0.0, stop * 2.5, -5.0 + stop * 0.6); + next.shorts.ori = Quaternion::rotation_x(stop * 0.6); next.shorts.scale = Vec3::one(); - next.l_hand.offset = Vec3::new( - -6.0, - -0.25 + wave_ultra_slow_cos * 0.15, - 7.0 + wave_ultra_slow * 0.7 + wave_stop * -2.0, - ); + next.l_hand.offset = Vec3::new(-6.0, -0.25 + slowa * 0.15, 6.0 + slow * 0.7 + stop * -2.0); - next.l_hand.ori = - Quaternion::rotation_x(0.0 + wave_slow_cos * -0.1 + wave_ultra_slow * 0.1); - next.l_hand.scale = Vec3::one() + wave_slow_abs * -0.05; + next.l_hand.ori = Quaternion::rotation_x(0.0 + slowa * -0.1 + slow * 0.1); + next.l_hand.scale = Vec3::one() + slow_abs * -0.05; - next.r_hand.offset = Vec3::new( - 6.0, - -0.25 + wave_ultra_slow_cos * 0.15, - 7.0 + wave_ultra_slow * 0.7 + wave_stop * -2.0, - ); - next.r_hand.ori = - Quaternion::rotation_x(0.0 + wave_slow * -0.1 + wave_ultra_slow_cos * 0.1); - next.r_hand.scale = Vec3::one() + wave_slow_abs * -0.05; + next.r_hand.offset = Vec3::new(6.0, -0.25 + slowa * 0.15, 6.0 + slow * 0.7 + stop * -2.0); + next.r_hand.ori = Quaternion::rotation_x(0.0 + slow * -0.1 + slowa * 0.1); + next.r_hand.scale = Vec3::one() + slow_abs * -0.05; next.l_foot.offset = Vec3::new(-3.4, -0.1, 8.0); - next.l_foot.ori = - Quaternion::rotation_x(wave_slow * 0.1 + wave_stop * 1.2 + wave_ultra_slow * 0.1); + next.l_foot.ori = Quaternion::rotation_x(slow * 0.1 + stop * 1.2 + slow * 0.1); next.l_foot.scale = Vec3::one(); next.r_foot.offset = Vec3::new(3.4, -0.1, 8.0); - next.r_foot.ori = Quaternion::rotation_x( - wave_slow_cos * 0.1 + wave_stop * 1.2 + wave_ultra_slow_cos * 0.1, - ); + next.r_foot.ori = Quaternion::rotation_x(slowa * 0.1 + stop * 1.2 + slowa * 0.1); next.r_foot.scale = Vec3::one(); next.l_shoulder.offset = Vec3::new(-5.0, 0.0, 4.7); next.l_shoulder.ori = Quaternion::rotation_x(0.0); - next.l_shoulder.scale = (Vec3::one() + wave_slow_abs * -0.05) * 1.15; + next.l_shoulder.scale = (Vec3::one() + slow_abs * -0.05) * 1.15; next.r_shoulder.offset = Vec3::new(5.0, 0.0, 4.7); next.r_shoulder.ori = Quaternion::rotation_x(0.0); - next.r_shoulder.scale = (Vec3::one() + wave_slow_abs * -0.05) * 1.15; + next.r_shoulder.scale = (Vec3::one() + slow_abs * -0.05) * 1.15; next.glider.offset = Vec3::new(0.0, 5.0, 0.0); next.glider.ori = Quaternion::rotation_y(0.0); @@ -113,7 +91,7 @@ impl Animation for SitAnimation { 15.0, ); next.main.ori = Quaternion::rotation_y(2.5) * Quaternion::rotation_z(1.57); - next.main.scale = Vec3::one() + wave_slow_abs * -0.05; + next.main.scale = Vec3::one() + slow_abs * -0.05; next.second.offset = Vec3::new( 0.0 + skeleton_attr.weapon_x, @@ -127,7 +105,7 @@ impl Animation for SitAnimation { next.lantern.ori = Quaternion::rotation_x(0.0); next.lantern.scale = Vec3::one() * 0.0; - next.torso.offset = Vec3::new(0.0, -0.2, wave_stop * -0.16) * skeleton_attr.scaler; + next.torso.offset = Vec3::new(0.0, -0.2, stop * -0.16) * skeleton_attr.scaler; next.torso.ori = Quaternion::rotation_x(0.0); next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; diff --git a/voxygen/src/anim/character/sneak.rs b/voxygen/src/anim/character/sneak.rs deleted file mode 100644 index 8872add2fb..0000000000 --- a/voxygen/src/anim/character/sneak.rs +++ /dev/null @@ -1,147 +0,0 @@ -use super::{ - super::{Animation, }, - CharacterSkeleton,SkeletonAttr -}; -use std::f32::consts::PI; -use std::ops::Mul; -use vek::*; - -pub struct SneakAnimation; - -impl Animation for SneakAnimation { - type Skeleton = CharacterSkeleton; - type Dependency = (Vec3, Vec3, Vec3, f64); - - fn update_skeleton( - skeleton: &Self::Skeleton, - (velocity, orientation, last_ori, global_time): Self::Dependency, - anim_time: f64, - rate: &mut f32, - skeleton_attr: &SkeletonAttr, - ) -> Self::Skeleton { - let mut next = (*skeleton).clone(); - - let speed = Vec2::::from(velocity).magnitude(); - *rate = speed; - - let constant = 1.0; - let wave = (((5.0) - / (1.1 + 3.9 * ((anim_time as f32 * constant as f32 * 1.2).sin()).powf(2.0 as f32))) - .sqrt()) - * ((anim_time as f32 * constant as f32 * 1.2).sin()); - let wavecos = (((5.0) - / (1.1 + 3.9 * ((anim_time as f32 * constant as f32 * 1.2).sin()).powf(2.0 as f32))) - .sqrt()) - * ((anim_time as f32 * constant as f32 * 1.2).cos()); - let wave_cos = (((5.0) - / (1.1 + 3.9 * ((anim_time as f32 * constant as f32 * 2.4).sin()).powf(2.0 as f32))) - .sqrt()) - * ((anim_time as f32 * constant as f32 * 1.5).sin()); - let wave_cos_dub = (((5.0) - / (1.1 + 3.9 * ((anim_time as f32 * constant as f32 * 4.8).sin()).powf(2.0 as f32))) - .sqrt()) - * ((anim_time as f32 * constant as f32 * 1.5).sin()); - let wave_slow = (anim_time as f32 * 0.1).sin(); - let wave_diff = (anim_time as f32 * 0.6).sin(); - let wave_stop = (anim_time as f32 * 2.6).min(PI / 2.0).sin(); - let head_look = Vec2::new( - ((global_time + anim_time) as f32 * 0.25) - .floor() - .mul(7331.0) - .sin() - * 0.4, - ((global_time + anim_time) as f32 * 0.25) - .floor() - .mul(1337.0) - .sin() - * 0.2, - ); - - let ori = Vec2::from(orientation); - let last_ori = Vec2::from(last_ori); - - let tilt = if Vec2::new(ori, last_ori) - .map(|o| Vec2::::from(o).magnitude_squared()) - .map(|m| m > 0.001 && m.is_finite()) - .reduce_and() - && ori.angle_between(last_ori).is_finite() - { - ori.angle_between(last_ori).min(0.5) - * last_ori.determine_side(Vec2::zero(), ori).signum() - } else { - 0.0 - } * 1.3; - - next.head.offset = Vec3::new( - 0.0, - 0.0 + skeleton_attr.neck_forward, - skeleton_attr.neck_height + 16.0, - ); - next.head.ori = Quaternion::rotation_z(head_look.x + wave * 0.1) - * Quaternion::rotation_x(head_look.y + 0.05); - next.head.scale = Vec3::one() * skeleton_attr.head_scale; - - next.chest.offset = Vec3::new(0.0, -1.5, 3.0 + wave_slow * 2.0); - next.chest.ori = Quaternion::rotation_x(-0.5) * Quaternion::rotation_z(wave * 0.15); - next.chest.scale = Vec3::one(); - - next.belt.offset = Vec3::new(0.0, 0.0, 1.5 + wave_cos * 0.3); - next.belt.ori = Quaternion::rotation_x(-0.1) * Quaternion::rotation_z(wave * 0.25); - next.belt.scale = Vec3::one(); - - next.shorts.offset = Vec3::new(0.0, 1.0, -1.0 + wave_cos * 0.3); - next.shorts.ori = Quaternion::rotation_x(0.2) * Quaternion::rotation_z(wave * 0.4); - next.shorts.scale = Vec3::one(); - - next.l_hand.offset = Vec3::new(-5.0 + wave_stop * -0.5, 2.25, 4.0 - wave * 1.0); - next.l_hand.ori = - Quaternion::rotation_x(1.5 + wave_cos * 0.1) * Quaternion::rotation_y(wave_stop * 0.1); - next.l_hand.scale = Vec3::one(); - - next.r_hand.offset = Vec3::new(5.0 + wave_stop * 0.5, 2.25, 4.0 + wave * 1.0); - next.r_hand.ori = Quaternion::rotation_x(1.5 + wave_cos * -0.1) - * Quaternion::rotation_y(wave_stop * -0.1); - next.r_hand.scale = Vec3::one(); - - next.l_foot.offset = Vec3::new(-3.4, 5.0 + wave * -3.0, 4.0); - next.l_foot.ori = Quaternion::rotation_x(-0.8 + wavecos * 0.15); - next.l_foot.scale = Vec3::one(); - - next.r_foot.offset = Vec3::new(3.4, 5.0 + wave * 3.0, 4.0); - next.r_foot.ori = Quaternion::rotation_x(-0.8 - wavecos * 0.15); - next.r_foot.scale = Vec3::one(); - - next.main.offset = Vec3::new( - -7.0 + skeleton_attr.weapon_x, - -5.0 + skeleton_attr.weapon_y, - 15.0, - ); - next.main.ori = - Quaternion::rotation_y(2.5) * Quaternion::rotation_z(1.57 + wave_cos * 0.25); - next.main.scale = Vec3::one(); - - next.l_shoulder.offset = Vec3::new(-5.0, 0.0, 4.7); - next.l_shoulder.ori = Quaternion::rotation_x(wavecos * 0.05); - next.l_shoulder.scale = Vec3::one() * 1.1; - - next.r_shoulder.offset = Vec3::new(5.0, 0.0, 4.7); - next.r_shoulder.ori = Quaternion::rotation_x(wave * 0.05); - next.r_shoulder.scale = Vec3::one() * 1.1; - - next.glider.offset = Vec3::new(0.0, 5.0, 0.0); - next.glider.ori = Quaternion::rotation_y(0.0); - next.glider.scale = Vec3::one() * 0.0; - - next.lantern.offset = Vec3::new(0.0, 5.0, 0.0); - next.lantern.ori = Quaternion::rotation_y(0.0); - next.lantern.scale = Vec3::one() * 0.0; - - next.torso.offset = Vec3::new(0.0, 0.3 + wave * -0.08, 0.4) * skeleton_attr.scaler; - next.torso.ori = - Quaternion::rotation_x(wave_stop * speed * -0.03 + wave_diff * speed * -0.005) - * Quaternion::rotation_y(tilt); - next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; - - next - } -} diff --git a/voxygen/src/anim/character/spin.rs b/voxygen/src/anim/character/spin.rs new file mode 100644 index 0000000000..27d3391da9 --- /dev/null +++ b/voxygen/src/anim/character/spin.rs @@ -0,0 +1,122 @@ +use super::{super::Animation, CharacterSkeleton, SkeletonAttr}; +use common::comp::item::ToolKind; +use std::f32::consts::PI; +use vek::*; + +pub struct Input { + pub attack: bool, +} +pub struct SpinAnimation; + +impl Animation for SpinAnimation { + type Dependency = (Option, f64); + type Skeleton = CharacterSkeleton; + + fn update_skeleton( + skeleton: &Self::Skeleton, + (active_tool_kind, _global_time): Self::Dependency, + anim_time: f64, + rate: &mut f32, + skeleton_attr: &SkeletonAttr, + ) -> Self::Skeleton { + *rate = 1.0; + let mut next = (*skeleton).clone(); + + let lab = 1.0; + + let foot = (((5.0) + / (1.1 + 3.9 * ((anim_time as f32 * lab as f32 * 10.32).sin()).powf(2.0 as f32))) + .sqrt()) + * ((anim_time as f32 * lab as f32 * 10.32).sin()); + + let decel = (anim_time as f32 * 16.0 * lab as f32).min(PI / 2.0).sin(); + + let spin = (anim_time as f32 * 2.8 * lab as f32).sin(); + let spinhalf = (anim_time as f32 * 1.4 * lab as f32).sin(); + + match active_tool_kind { + //TODO: Inventory + Some(ToolKind::Axe(_)) | Some(ToolKind::Hammer(_)) | Some(ToolKind::Sword(_)) => { + //INTENTION: SWORD + next.l_hand.offset = Vec3::new(0.0, 1.0, 0.0); + next.l_hand.ori = Quaternion::rotation_x(1.27); + next.l_hand.scale = Vec3::one() * 1.04; + next.r_hand.offset = Vec3::new(0.0, 0.0, -3.0); + next.r_hand.ori = Quaternion::rotation_x(1.27); + next.r_hand.scale = Vec3::one() * 1.05; + next.main.offset = Vec3::new(0.0, 6.0, -1.0); + next.main.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(0.0); + next.main.scale = Vec3::one(); + + next.control.offset = Vec3::new(-4.5 + spinhalf * 4.0, 11.0, 8.0); + next.control.ori = Quaternion::rotation_x(-1.7) + * Quaternion::rotation_y(0.2 + spin * -2.0) + * Quaternion::rotation_z(1.4 + spin * 0.1); + next.control.scale = Vec3::one(); + next.head.offset = Vec3::new( + 0.0 + skeleton_attr.neck_right, + -2.0 + skeleton_attr.neck_forward + spin * -0.8, + skeleton_attr.neck_height + 14.0, + ); + next.head.ori = Quaternion::rotation_z(spin * -0.25) + * Quaternion::rotation_x(0.0 + spin * -0.1) + * Quaternion::rotation_y(spin * -0.2); + next.head.scale = Vec3::one() * skeleton_attr.head_scale; + next.chest.offset = Vec3::new(0.0, 0.0, 7.0); + next.chest.ori = Quaternion::rotation_z(spin * 0.1) + * Quaternion::rotation_x(0.0 + spin * 0.1) + * Quaternion::rotation_y(decel * -0.2); + next.chest.scale = Vec3::one(); + + next.belt.offset = Vec3::new(0.0, 0.0, -2.0); + next.belt.ori = next.chest.ori * -0.1; + next.belt.scale = Vec3::one(); + + next.shorts.offset = Vec3::new(0.0, 0.0, -5.0); + next.belt.ori = next.chest.ori * -0.08; + next.shorts.scale = Vec3::one(); + next.torso.offset = Vec3::new(0.0, 0.0, 0.1) * skeleton_attr.scaler; + next.torso.ori = Quaternion::rotation_z((spin * 7.0).max(0.3)) + * Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(0.0); + next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; + }, + + _ => {}, + } + next.l_foot.offset = Vec3::new(-3.4, foot * 1.0, 8.0); + next.l_foot.ori = Quaternion::rotation_x(foot * -1.2); + next.l_foot.scale = Vec3::one(); + + next.r_foot.offset = Vec3::new(3.4, foot * -1.0, 8.0); + next.r_foot.ori = Quaternion::rotation_x(foot * 1.2); + next.r_foot.scale = Vec3::one(); + + next.l_shoulder.offset = Vec3::new(-5.0, 0.0, 4.7); + next.l_shoulder.ori = Quaternion::rotation_x(0.0); + next.l_shoulder.scale = Vec3::one() * 1.1; + + next.r_shoulder.offset = Vec3::new(5.0, 0.0, 4.7); + next.r_shoulder.ori = Quaternion::rotation_x(0.0); + next.r_shoulder.scale = Vec3::one() * 1.1; + + next.glider.offset = Vec3::new(0.0, 5.0, 0.0); + next.glider.ori = Quaternion::rotation_y(0.0); + next.glider.scale = Vec3::one() * 0.0; + + next.lantern.offset = Vec3::new(0.0, 0.0, 0.0); + next.lantern.ori = Quaternion::rotation_x(0.0); + next.lantern.scale = Vec3::one() * 0.0; + + next.l_control.offset = Vec3::new(0.0, 0.0, 0.0); + next.l_control.ori = Quaternion::rotation_x(0.0); + next.l_control.scale = Vec3::one(); + + next.r_control.offset = Vec3::new(0.0, 0.0, 0.0); + next.r_control.ori = Quaternion::rotation_x(0.0); + next.r_control.scale = Vec3::one(); + next + } +} diff --git a/voxygen/src/anim/character/stand.rs b/voxygen/src/anim/character/stand.rs index 116cf5db09..74b77ff306 100644 --- a/voxygen/src/anim/character/stand.rs +++ b/voxygen/src/anim/character/stand.rs @@ -1,12 +1,12 @@ use super::{super::Animation, CharacterSkeleton, SkeletonAttr}; -use common::comp::item::Tool; +use common::comp::item::ToolKind; use std::ops::Mul; use vek::*; pub struct StandAnimation; impl Animation for StandAnimation { - type Dependency = (Option, f64); + type Dependency = (Option, f64); type Skeleton = CharacterSkeleton; fn update_skeleton( @@ -36,23 +36,23 @@ impl Animation for StandAnimation { next.head.offset = Vec3::new( 0.0 + skeleton_attr.neck_right, -3.0 + skeleton_attr.neck_forward, - skeleton_attr.neck_height + 21.0 + slow * 0.3, + skeleton_attr.neck_height + 14.0 + slow * 0.3 + breathe * -0.05, ); next.head.ori = Quaternion::rotation_z(head_look.x) * Quaternion::rotation_x(head_look.y.abs()); - next.head.scale = Vec3::one() * skeleton_attr.head_scale; + next.head.scale = Vec3::one() * skeleton_attr.head_scale + breathe * -0.05; next.chest.offset = Vec3::new(0.0, 0.0, 7.0 + slow * 0.3); next.chest.ori = Quaternion::rotation_z(head_look.x * 0.6); - next.chest.scale = Vec3::one() * 1.01; + next.chest.scale = Vec3::one() * 1.01 + breathe * 0.05; - next.belt.offset = Vec3::new(0.0, 0.0, 5.0 + slow * 0.3); - next.belt.ori = Quaternion::rotation_z(head_look.x * 0.4); - next.belt.scale = Vec3::one() + breathe * 0.05; + next.belt.offset = Vec3::new(0.0, 0.0, -2.0); //5 + next.belt.ori = Quaternion::rotation_z(head_look.x * -0.1); + next.belt.scale = Vec3::one() + breathe * -0.05; - next.shorts.offset = Vec3::new(0.0, 0.0, 2.0 + slow * 0.3); - next.shorts.ori = Quaternion::rotation_x(0.0); - next.shorts.scale = Vec3::one(); + next.shorts.offset = Vec3::new(0.0, 0.0, -5.0); //2 + next.shorts.ori = Quaternion::rotation_x(head_look.x * -0.2); + next.shorts.scale = Vec3::one() + breathe * -0.05; next.l_hand.offset = Vec3::new(-7.0, -0.25 + slow * 0.15, 5.0 + slow * 0.5); @@ -79,14 +79,14 @@ impl Animation for StandAnimation { next.r_shoulder.ori = Quaternion::rotation_x(0.0); next.r_shoulder.scale = (Vec3::one() + breathe * -0.05) * 1.15; - next.glider.offset = Vec3::new(0.0, 5.0, 0.0); + next.glider.offset = Vec3::new(0.0, 0.0, 10.0); next.glider.ori = Quaternion::rotation_y(0.0); next.glider.scale = Vec3::one() * 0.0; next.main.offset = Vec3::new( -7.0 + skeleton_attr.weapon_x, -5.0 + skeleton_attr.weapon_y, - 18.0, + 15.0, ); next.main.ori = Quaternion::rotation_y(2.5) * Quaternion::rotation_z(1.57); next.main.scale = Vec3::one(); diff --git a/voxygen/src/anim/character/swim.rs b/voxygen/src/anim/character/swim.rs index 8b8220277d..9b5e1193f8 100644 --- a/voxygen/src/anim/character/swim.rs +++ b/voxygen/src/anim/character/swim.rs @@ -1,106 +1,94 @@ use super::{super::Animation, CharacterSkeleton, SkeletonAttr}; -use common::comp::item::Tool; +use common::comp::item::ToolKind; use std::{f32::consts::PI, ops::Mul}; use vek::*; pub struct SwimAnimation; impl Animation for SwimAnimation { - type Dependency = (Option, f32, f32, f64); + type Dependency = (Option, Vec3, f32, f64); type Skeleton = CharacterSkeleton; fn update_skeleton( skeleton: &Self::Skeleton, - (_active_tool_kind, velocity, orientation, global_time): Self::Dependency, + (_active_tool_kind, velocity, _orientation, global_time): Self::Dependency, anim_time: f64, - _rate: &mut f32, + rate: &mut f32, skeleton_attr: &SkeletonAttr, ) -> Self::Skeleton { let mut next = (*skeleton).clone(); - let wave = (anim_time as f32 * velocity * 1.2).sin(); - let wave_cos = (anim_time as f32 * velocity * 1.2).cos(); + let speed = Vec2::::from(velocity).magnitude(); + *rate = 1.0; + + let lab = 1.0; + + let short = (anim_time as f32 * lab as f32 * 2.0 * speed / 5.0).sin(); + + let shortalt = (anim_time as f32 * lab as f32 * 2.0 * speed / 5.0 + PI / 2.0).sin(); + + let foot = (anim_time as f32 * lab as f32 * 2.0 * speed / 5.0).sin(); + + let wave_stop = (anim_time as f32 * 3.0 * speed / 5.0) + .min(PI / 2.0 / 2.0) + .sin(); - let wave_diff = (anim_time as f32 * velocity * 0.6).sin(); - let wave_cos_dub = (anim_time as f32 * velocity * 2.4).cos(); - let wave_stop = (anim_time as f32 * 2.6).min(PI / 2.0).sin(); let head_look = Vec2::new( - ((global_time + anim_time) as f32 / 2.0) + ((global_time + anim_time) as f32 / 18.0) .floor() .mul(7331.0) .sin() * 0.2, - ((global_time + anim_time) as f32 / 2.0) + ((global_time + anim_time) as f32 / 18.0) .floor() .mul(1337.0) .sin() * 0.1, ); - let vel = Vec2::from(velocity); - let ori = (Vec2::from(orientation)).normalized(); - - let _tilt = if Vec2::new(ori, vel) - .map(|v| Vec2::::from(v).magnitude_squared()) - .reduce_partial_min() - > 0.001 - { - vel.normalized().dot(ori.normalized()).min(1.0).acos() - } else { - 0.0 - }; - next.head.offset = Vec3::new( 0.0, -3.0 + skeleton_attr.neck_forward, - skeleton_attr.neck_height + 21.0 + wave_cos * 1.3, + skeleton_attr.neck_height + 13.0 + short * 0.3, ); - next.head.ori = Quaternion::rotation_z(head_look.x + wave * 0.1) + next.head.ori = Quaternion::rotation_z(head_look.x - short * 0.3) * Quaternion::rotation_x(head_look.y + 0.35); next.head.scale = Vec3::one() * skeleton_attr.head_scale; - next.chest.offset = Vec3::new(0.0, 0.0, 7.0 + wave_cos * 1.1); - next.chest.ori = Quaternion::rotation_z(wave * 0.2); + next.chest.offset = Vec3::new(0.0, 0.0, 7.0 + short * 1.1); + next.chest.ori = Quaternion::rotation_z(short * 0.3); next.chest.scale = Vec3::one(); - next.belt.offset = Vec3::new(0.0, 0.0, 5.0 + wave_cos * 1.1); - next.belt.ori = Quaternion::rotation_z(wave * 0.35); + next.belt.offset = Vec3::new(0.0, 0.0, -2.0); + next.belt.ori = Quaternion::rotation_z(short * 0.25); next.belt.scale = Vec3::one(); - next.shorts.offset = Vec3::new(0.0, 0.0, 2.0 + wave_cos * 1.1); - next.shorts.ori = Quaternion::rotation_z(wave * 0.6); + next.shorts.offset = Vec3::new(0.0, 0.0, -5.0); + next.shorts.ori = Quaternion::rotation_z(short * 0.4); next.shorts.scale = Vec3::one(); - next.l_hand.offset = Vec3::new( - -6.0 + wave_cos_dub * 1.0, - -0.25 + wave_cos * 5.0, - 5.0 - wave * 1.5, - ); - next.l_hand.ori = Quaternion::rotation_x(wave_cos * 0.8); + next.l_hand.offset = Vec3::new(-6.0, -0.25 - foot * 1.0, 5.0 + foot * -2.5); + next.l_hand.ori = Quaternion::rotation_x(0.8 + foot * -0.5) * Quaternion::rotation_y(0.2); next.l_hand.scale = Vec3::one(); - next.r_hand.offset = Vec3::new( - 6.0 - wave_cos_dub * 1.0, - -0.25 - wave_cos * 5.0, - 5.0 + wave * 1.5, - ); - next.r_hand.ori = Quaternion::rotation_x(wave_cos * -0.8); + next.r_hand.offset = Vec3::new(6.0, -0.25 + foot * 1.0, 5.0 + foot * 2.5); + next.r_hand.ori = Quaternion::rotation_x(0.8 + foot * 0.5) * Quaternion::rotation_y(-0.2); next.r_hand.scale = Vec3::one(); - next.l_foot.offset = Vec3::new(-3.4, 0.0 + wave_cos * 1.0, 6.0 - wave_cos_dub * 0.7); - next.l_foot.ori = Quaternion::rotation_x(-0.0 - wave_cos * 1.5); + next.l_foot.offset = Vec3::new(-3.4, 6.0 + foot * 1.0, 0.0 + foot * 5.5); + next.l_foot.ori = Quaternion::rotation_x(-1.40 + foot * 0.5); next.l_foot.scale = Vec3::one(); - next.r_foot.offset = Vec3::new(3.4, 0.0 - wave_cos * 1.0, 6.0 - wave_cos_dub * 0.7); - next.r_foot.ori = Quaternion::rotation_x(-0.0 + wave_cos * 1.5); + next.r_foot.offset = Vec3::new(3.4, 6.0 - foot * 1.0, 0.0 + foot * -5.5); + next.r_foot.ori = Quaternion::rotation_x(-1.40 + foot * -0.5); next.r_foot.scale = Vec3::one(); - next.l_shoulder.offset = Vec3::new(-5.0, 0.0, 4.7); - next.l_shoulder.ori = Quaternion::rotation_x(wave_cos * 0.15); + next.l_shoulder.offset = Vec3::new(-5.0, -1.0, 4.7); + next.l_shoulder.ori = Quaternion::rotation_x(short * 0.15); next.l_shoulder.scale = Vec3::one() * 1.1; - next.r_shoulder.offset = Vec3::new(5.0, 0.0, 4.7); - next.r_shoulder.ori = Quaternion::rotation_x(wave * 0.15); + next.r_shoulder.offset = Vec3::new(5.0, -1.0, 4.7); + next.r_shoulder.ori = Quaternion::rotation_x(short * -0.15); next.r_shoulder.scale = Vec3::one() * 1.1; next.glider.offset = Vec3::new(0.0, 5.0, 0.0); @@ -110,10 +98,9 @@ impl Animation for SwimAnimation { next.main.offset = Vec3::new( -7.0 + skeleton_attr.weapon_x, -5.0 + skeleton_attr.weapon_y, - 18.0, + 15.0, ); - next.main.ori = - Quaternion::rotation_y(2.5) * Quaternion::rotation_z(1.57 + wave_cos * 0.25); + next.main.ori = Quaternion::rotation_y(2.5) * Quaternion::rotation_z(1.57 + short * 0.25); next.main.scale = Vec3::one(); next.second.offset = Vec3::new( @@ -128,10 +115,9 @@ impl Animation for SwimAnimation { next.lantern.ori = Quaternion::rotation_y(0.0); next.lantern.scale = Vec3::one() * 0.0; - next.torso.offset = Vec3::new(0.0, -0.2 + wave * -0.08, 0.4) * skeleton_attr.scaler; + next.torso.offset = Vec3::new(0.0, -0.3 + shortalt * -0.065, 0.4) * skeleton_attr.scaler; next.torso.ori = - Quaternion::rotation_x(wave_stop * velocity * -0.06 + wave_diff * velocity * -0.005) - * Quaternion::rotation_y(0.0); + Quaternion::rotation_x(speed * -0.190 * wave_stop * 1.6) * Quaternion::rotation_y(0.0); next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; next.control.offset = Vec3::new(0.0, 0.0, 0.0); @@ -145,6 +131,7 @@ impl Animation for SwimAnimation { next.r_control.offset = Vec3::new(0.0, 0.0, 0.0); next.r_control.ori = Quaternion::rotation_x(0.0); next.r_control.scale = Vec3::one(); + next } } diff --git a/voxygen/src/anim/character/wield.rs b/voxygen/src/anim/character/wield.rs index 9e882fed3c..a35edb4b6c 100644 --- a/voxygen/src/anim/character/wield.rs +++ b/voxygen/src/anim/character/wield.rs @@ -1,165 +1,113 @@ use super::{super::Animation, CharacterSkeleton, SkeletonAttr}; -use common::comp::item::Tool; -use std::f32::consts::PI; - +use common::comp::item::ToolKind; +use std::{f32::consts::PI, ops::Mul}; use vek::*; pub struct WieldAnimation; impl Animation for WieldAnimation { - type Dependency = (Option, f32, f64); + type Dependency = (Option, f32, f64); type Skeleton = CharacterSkeleton; fn update_skeleton( skeleton: &Self::Skeleton, - (active_tool_kind, velocity, _global_time): Self::Dependency, + (active_tool_kind, velocity, global_time): Self::Dependency, anim_time: f64, rate: &mut f32, skeleton_attr: &SkeletonAttr, ) -> Self::Skeleton { + *rate = 1.0; let mut next = (*skeleton).clone(); + let slow_cos = (anim_time as f32 * 6.0 + PI).cos(); + let ultra_slow = (anim_time as f32 * 1.0 + PI).sin(); + let ultra_slow_cos = (anim_time as f32 * 3.0 + PI).cos(); - let speed = Vec2::::from(velocity).magnitude(); - *rate = speed; - - let wave_ultra_slow = (anim_time as f32 * 3.0 + PI).sin(); - let wave_ultra_slow_cos = (anim_time as f32 * 3.0 + PI).cos(); - - let wave = (anim_time as f32 * 1.0).sin(); - let wave_stop = (anim_time as f32 * 2.6).min(PI / 2.0).sin(); + let wave = (anim_time as f32 * 16.0).sin(); match active_tool_kind { //TODO: Inventory - Some(Tool::Sword) => { - next.l_hand.offset = Vec3::new(0.0, -5.0, -5.0); - next.l_hand.ori = Quaternion::rotation_x(1.27); + Some(ToolKind::Sword(_)) => { + next.l_hand.offset = Vec3::new(-0.25, -5.0, -5.0); + next.l_hand.ori = Quaternion::rotation_x(1.47) * Quaternion::rotation_y(-0.2); next.l_hand.scale = Vec3::one() * 1.04; - next.r_hand.offset = Vec3::new(0.0, -6.0, -8.0); - next.r_hand.ori = Quaternion::rotation_x(1.27); + next.r_hand.offset = Vec3::new(1.25, -5.5, -8.0); + next.r_hand.ori = Quaternion::rotation_x(1.47) * Quaternion::rotation_y(0.3); next.r_hand.scale = Vec3::one() * 1.05; next.main.offset = Vec3::new(0.0, 0.0, -6.0); - next.main.ori = Quaternion::rotation_x(-0.3) + next.main.ori = Quaternion::rotation_x(-0.1) * Quaternion::rotation_y(0.0) * Quaternion::rotation_z(0.0); next.main.scale = Vec3::one(); - next.control.offset = Vec3::new(-8.0, 4.0, 6.0); - next.control.ori = Quaternion::rotation_x(0.0) + next.control.offset = Vec3::new(-7.0, 6.0, 6.0); + next.control.ori = Quaternion::rotation_x(ultra_slow * 0.15) * Quaternion::rotation_y(0.0) - * Quaternion::rotation_z(0.0); + * Quaternion::rotation_z(ultra_slow_cos * 0.08); next.control.scale = Vec3::one(); }, - Some(Tool::Axe) => { - next.l_hand.offset = Vec3::new(-6.5, -0.5, 6.0); - next.l_hand.ori = Quaternion::rotation_x(0.13) * Quaternion::rotation_z(-0.25); - next.l_hand.scale = Vec3::one() * 1.01; - next.r_hand.offset = Vec3::new(-3.0, 6.5, 6.0); - next.r_hand.ori = Quaternion::rotation_x(0.13) - * Quaternion::rotation_z(2.98) - * Quaternion::rotation_y(-0.50); - next.r_hand.scale = Vec3::one() * 1.01; - next.main.offset = Vec3::new( - -5.0 + skeleton_attr.weapon_x, - 8.5 + skeleton_attr.weapon_y, - -0.5, - ); - next.main.ori = Quaternion::rotation_x(1.70) - * Quaternion::rotation_y(-0.25) - * Quaternion::rotation_z(0.0); - next.main.scale = Vec3::one(); - }, - Some(Tool::Hammer) => { - next.l_hand.offset = Vec3::new(-7.0, 4.0, 3.0); - next.l_hand.ori = Quaternion::rotation_x(1.27 + wave * 0.25) - * Quaternion::rotation_y(0.0) - * Quaternion::rotation_z(0.0); - next.l_hand.scale = Vec3::one() * 1.01; - next.r_hand.offset = Vec3::new(7.0, 2.5, -1.25); - next.r_hand.ori = Quaternion::rotation_x(1.27 + wave * 0.25) - * Quaternion::rotation_y(0.0) - * Quaternion::rotation_z(-0.3); - next.r_hand.scale = Vec3::one() * 1.01; - next.main.offset = Vec3::new( - 5.0 + skeleton_attr.weapon_x, - 8.75 + skeleton_attr.weapon_y, - -2.0, - ); - next.main.ori = Quaternion::rotation_x(-0.3) - * Quaternion::rotation_y(-1.27) - * Quaternion::rotation_z(wave * -0.25); - next.main.scale = Vec3::one(); - }, - Some(Tool::Staff) => { - next.l_hand.offset = Vec3::new( - -6.0 + wave_ultra_slow_cos * 1.0, - 1.0 + wave_ultra_slow_cos * 0.5, - 5.0 + wave_ultra_slow * 1.0, - ); - next.l_hand.ori = Quaternion::rotation_x(1.27); - next.l_hand.scale = Vec3::one() * 1.0; - next.r_hand.offset = Vec3::new( - -6.0 + wave_ultra_slow_cos * 1.0, - -1.5 + wave_ultra_slow_cos * 0.5, - -2.0 + wave_ultra_slow * 1.0, - ); - next.r_hand.ori = Quaternion::rotation_x(1.27); - next.r_hand.scale = Vec3::one() * 1.01; - next.main.offset = Vec3::new( - -6.0 + skeleton_attr.weapon_x + wave_ultra_slow_cos * 1.0, - 8.5 + skeleton_attr.weapon_y + wave_ultra_slow_cos * 0.5, - 17.0 + wave_ultra_slow * 1.0, - ); - next.main.ori = Quaternion::rotation_x(-0.3 + PI) - * Quaternion::rotation_y(0.0) - * Quaternion::rotation_z(0.0); - next.main.scale = Vec3::one(); - }, - Some(Tool::Shield) => { - next.l_hand.offset = Vec3::new(-6.0, 3.5, 0.0); - next.l_hand.ori = Quaternion::rotation_x(-0.3); - next.l_hand.scale = Vec3::one() * 1.01; - next.r_hand.offset = Vec3::new(-6.0, 3.0, -2.0); - next.r_hand.ori = Quaternion::rotation_x(-0.3); - next.r_hand.scale = Vec3::one() * 1.01; - next.main.offset = Vec3::new( - -6.0 + skeleton_attr.weapon_x, - 4.5 + skeleton_attr.weapon_y, - 0.0, - ); - next.main.ori = Quaternion::rotation_x(-0.3) - * Quaternion::rotation_y(0.0) - * Quaternion::rotation_z(0.0); - next.main.scale = Vec3::one(); - }, - Some(Tool::Bow) => { - next.l_hand.offset = Vec3::new( - -1.0 - wave_ultra_slow_cos * 1.0, - 3.0 + wave_ultra_slow_cos * 0.5, - 5.0 + wave_ultra_slow * 1.0, - ); - next.l_hand.ori = Quaternion::rotation_x(PI / 2.0) + Some(ToolKind::Axe(_)) => { + next.l_hand.offset = Vec3::new(-4.0, 3.0, 6.0); + next.l_hand.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_z(3.14 - 0.3) + * Quaternion::rotation_y(-0.8); + next.l_hand.scale = Vec3::one() * 1.08; + next.r_hand.offset = Vec3::new(-2.5, 9.0, 4.0); + next.r_hand.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_z(3.14 - 0.3) + * Quaternion::rotation_y(-0.8); + next.r_hand.scale = Vec3::one() * 1.06; + next.main.offset = Vec3::new(-6.0, 10.0, -1.0); + next.main.ori = Quaternion::rotation_x(1.27) * Quaternion::rotation_y(-0.3) - * Quaternion::rotation_z(0.3); - next.l_hand.scale = Vec3::one() * 1.01; - next.r_hand.offset = Vec3::new( - 1.0 + wave_ultra_slow_cos * 1.0, - 8.0 + wave_ultra_slow_cos * 0.5, - 2.5 + wave_ultra_slow * 1.0, - ); - next.r_hand.ori = Quaternion::rotation_x(PI / 2.0) - * Quaternion::rotation_y(0.3) - * Quaternion::rotation_z(0.3); - next.r_hand.scale = Vec3::one() * 1.01; - next.main.offset = Vec3::new( - -4.0 + skeleton_attr.weapon_x + wave_ultra_slow_cos * 1.0, - 15.0 + skeleton_attr.weapon_y + wave_ultra_slow_cos * 0.5, - -4.0 + wave_ultra_slow * 1.0, - ); - next.main.ori = Quaternion::rotation_x(0.0) - * Quaternion::rotation_y(0.4) - * Quaternion::rotation_z(0.0); + * Quaternion::rotation_z(-0.8); next.main.scale = Vec3::one(); + + next.control.offset = Vec3::new(0.0, 0.0, 0.0); + next.control.ori = Quaternion::rotation_x(ultra_slow_cos * 0.1 + 0.2) + * Quaternion::rotation_y(-0.3) + * Quaternion::rotation_z(ultra_slow * 0.1 + 0.0); + next.control.scale = Vec3::one(); }, - Some(Tool::Dagger) => { + Some(ToolKind::Hammer(_)) => { + next.l_hand.offset = Vec3::new(-7.0, 4.6, 7.5); + next.l_hand.ori = Quaternion::rotation_x(0.3) * Quaternion::rotation_y(0.32); + next.l_hand.scale = Vec3::one() * 1.08; + next.r_hand.offset = Vec3::new(8.0, 5.75, 4.0); + next.r_hand.ori = Quaternion::rotation_x(0.3) * Quaternion::rotation_y(0.22); + next.r_hand.scale = Vec3::one() * 1.06; + next.main.offset = Vec3::new(6.0, 7.0, 0.0); + next.main.ori = Quaternion::rotation_x(0.3) + * Quaternion::rotation_y(-1.35) + * Quaternion::rotation_z(1.57); + next.main.scale = Vec3::one(); + + next.control.offset = Vec3::new(0.0, 0.0, 0.0); + next.control.ori = Quaternion::rotation_x(ultra_slow * 0.15) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(ultra_slow_cos * 0.08); + next.control.scale = Vec3::one(); + }, + Some(ToolKind::Staff(_)) => { + next.l_hand.offset = Vec3::new(1.0, -2.0, -5.0); + next.l_hand.ori = Quaternion::rotation_x(1.47) * Quaternion::rotation_y(-0.3); + next.l_hand.scale = Vec3::one() * 1.05; + next.r_hand.offset = Vec3::new(9.0, 1.0, 0.0); + next.r_hand.ori = Quaternion::rotation_x(1.8) + * Quaternion::rotation_y(0.5) + * Quaternion::rotation_z(-0.27); + next.r_hand.scale = Vec3::one() * 1.05; + next.main.offset = Vec3::new(9.2, 8.4, 13.2); + next.main.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_y(3.14 + 0.3) + * Quaternion::rotation_z(0.9); + next.main.scale = Vec3::one(); + + next.control.offset = Vec3::new(-14.0, 1.8, 3.0); + next.control.ori = Quaternion::rotation_x(ultra_slow * 0.2) + * Quaternion::rotation_y(-0.2) + * Quaternion::rotation_z(ultra_slow_cos * 0.1); + next.control.scale = Vec3::one(); + }, + Some(ToolKind::Shield(_)) => { next.l_hand.offset = Vec3::new(-6.0, 3.5, 0.0); next.l_hand.ori = Quaternion::rotation_x(-0.3); next.l_hand.scale = Vec3::one() * 1.01; @@ -176,7 +124,47 @@ impl Animation for WieldAnimation { * Quaternion::rotation_z(0.0); next.main.scale = Vec3::one(); }, - Some(Tool::Debug(_)) => { + Some(ToolKind::Bow(_)) => { + next.l_hand.offset = Vec3::new(1.0, -4.0, -1.0); + next.l_hand.ori = Quaternion::rotation_x(1.20) + * Quaternion::rotation_y(-0.6) + * Quaternion::rotation_z(-0.3); + next.l_hand.scale = Vec3::one() * 1.05; + next.r_hand.offset = Vec3::new(3.0, -1.0, -5.0); + next.r_hand.ori = Quaternion::rotation_x(1.20) + * Quaternion::rotation_y(-0.6) + * Quaternion::rotation_z(-0.3); + next.r_hand.scale = Vec3::one() * 1.05; + next.main.offset = Vec3::new(3.0, 2.0, -13.0); + next.main.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_y(0.3) + * Quaternion::rotation_z(-0.6); + next.main.scale = Vec3::one(); + + next.control.offset = Vec3::new(-7.0, 6.0, 6.0); + next.control.ori = Quaternion::rotation_x(ultra_slow * 0.2) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(ultra_slow_cos * 0.1); + next.control.scale = Vec3::one(); + }, + Some(ToolKind::Dagger(_)) => { + next.l_hand.offset = Vec3::new(-6.0, 3.5, 0.0); + next.l_hand.ori = Quaternion::rotation_x(-0.3); + next.l_hand.scale = Vec3::one() * 1.01; + next.r_hand.offset = Vec3::new(-6.0, 3.0, -2.0); + next.r_hand.ori = Quaternion::rotation_x(-0.3); + next.r_hand.scale = Vec3::one() * 1.01; + next.main.offset = Vec3::new( + -6.0 + skeleton_attr.weapon_x, + 4.5 + skeleton_attr.weapon_y, + 0.0, + ); + next.main.ori = Quaternion::rotation_x(-0.3) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(0.0); + next.main.scale = Vec3::one(); + }, + Some(ToolKind::Debug(_)) => { next.l_hand.offset = Vec3::new(-7.0, 4.0, 3.0); next.l_hand.ori = Quaternion::rotation_x(1.27 + wave * 0.25) * Quaternion::rotation_y(0.0) @@ -199,17 +187,76 @@ impl Animation for WieldAnimation { }, _ => {}, } - next.torso.offset = Vec3::new(0.0, 0.3 + wave * -0.08, 0.4) * skeleton_attr.scaler; - next.torso.ori = Quaternion::rotation_x(wave_stop * -0.2); - next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; - next.l_control.offset = Vec3::new(0.0, 0.0, 0.0); - next.l_control.ori = Quaternion::rotation_x(0.0); - next.l_control.scale = Vec3::one(); + if velocity > 0.5 { + next.torso.offset = Vec3::new(0.0, 0.0, 0.0) * skeleton_attr.scaler; + next.torso.ori = Quaternion::rotation_x(-0.2); + next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; + + next.l_control.offset = Vec3::new(0.0, 0.0, 0.0); + next.l_control.ori = Quaternion::rotation_x(0.0); + next.l_control.scale = Vec3::one(); + + next.r_control.offset = Vec3::new(0.0, 0.0, 0.0); + next.r_control.ori = Quaternion::rotation_x(0.0); + next.r_control.scale = Vec3::one(); + } else { + let head_look = Vec2::new( + ((global_time + anim_time) as f32 / 10.0) + .floor() + .mul(7331.0) + .sin() + * 0.2, + ((global_time + anim_time) as f32 / 10.0) + .floor() + .mul(1337.0) + .sin() + * 0.1, + ); + next.head.offset = Vec3::new( + 0.0 + skeleton_attr.neck_right, + -2.0 + skeleton_attr.neck_forward, + skeleton_attr.neck_height + 14.0 + ultra_slow * 0.1, + ); + next.head.ori = + Quaternion::rotation_z(head_look.x) * Quaternion::rotation_x(head_look.y.abs()); + next.head.scale = Vec3::one() * skeleton_attr.head_scale; + + next.chest.offset = Vec3::new(0.0 + slow_cos * 0.5, 0.0, 7.0 + ultra_slow * 0.5); + next.chest.ori = + Quaternion::rotation_y(ultra_slow_cos * 0.04) * Quaternion::rotation_z(0.15); + next.chest.scale = Vec3::one(); + + next.belt.offset = Vec3::new(0.0, 0.0, -2.0); + next.belt.ori = + Quaternion::rotation_y(ultra_slow_cos * 0.03) * Quaternion::rotation_z(0.22); + next.belt.scale = Vec3::one() * 1.02; + + next.shorts.offset = Vec3::new(0.0, 0.0, -5.0); + next.shorts.ori = Quaternion::rotation_z(0.3); + next.shorts.scale = Vec3::one(); + + next.l_foot.offset = Vec3::new(-3.4, -2.5, 9.0); + next.l_foot.ori = Quaternion::rotation_x(ultra_slow_cos * 0.035 - 0.2); + next.l_foot.scale = Vec3::one(); + + next.r_foot.offset = Vec3::new(3.4, 3.5, 9.0); + next.r_foot.ori = Quaternion::rotation_x(ultra_slow * 0.035); + next.r_foot.scale = Vec3::one(); + + next.torso.offset = Vec3::new(0.0, 0.0, 0.0) * skeleton_attr.scaler; + next.torso.ori = Quaternion::rotation_x(0.0); + next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; + + next.l_control.offset = Vec3::new(0.0, 0.0, 0.0); + next.l_control.ori = Quaternion::rotation_x(0.0); + next.l_control.scale = Vec3::one(); + + next.r_control.offset = Vec3::new(0.0, 0.0, 0.0); + next.r_control.ori = Quaternion::rotation_x(0.0); + next.r_control.scale = Vec3::one(); + } - next.r_control.offset = Vec3::new(0.0, 0.0, 0.0); - next.r_control.ori = Quaternion::rotation_x(0.0); - next.r_control.scale = Vec3::one(); next } } diff --git a/voxygen/src/anim/critter/idle.rs b/voxygen/src/anim/critter/idle.rs index cefa1f1401..fe9827bb4c 100644 --- a/voxygen/src/anim/critter/idle.rs +++ b/voxygen/src/anim/critter/idle.rs @@ -41,9 +41,9 @@ impl Animation for IdleAnimation { next.chest.offset = Vec3::new( 0.0, skeleton_attr.chest.0, - skeleton_attr.chest.1 + wave * 1.0, + skeleton_attr.chest.1 + wave * 0.3, ) / 18.0; - next.chest.ori = Quaternion::rotation_y(wave_slow * 0.2); + next.chest.ori = Quaternion::rotation_y(wave_slow * 0.06); next.chest.scale = Vec3::one() / 18.0; next.feet_f.offset = Vec3::new(0.0, skeleton_attr.feet_f.0, skeleton_attr.feet_f.1) / 18.0; @@ -56,7 +56,7 @@ impl Animation for IdleAnimation { next.tail.offset = Vec3::new(0.0, skeleton_attr.tail.0 + wave * 1.0, skeleton_attr.tail.1) / 18.0; - next.tail.ori = Quaternion::rotation_y(wave_slow * 0.25); + next.tail.ori = Quaternion::rotation_y(wave_slow * 0.05); next.tail.scale = Vec3::one() / 18.0; next diff --git a/voxygen/src/anim/critter/run.rs b/voxygen/src/anim/critter/run.rs index 23710a901e..a2918c958e 100644 --- a/voxygen/src/anim/critter/run.rs +++ b/voxygen/src/anim/critter/run.rs @@ -44,7 +44,7 @@ impl Animation for RunAnimation { next.tail.offset = Vec3::new(0.0, skeleton_attr.tail.0 + wave * 1.0, skeleton_attr.tail.1) / 18.0; - next.tail.ori = Quaternion::rotation_y(wave_slow * 0.25); + next.tail.ori = Quaternion::rotation_y(wave_slow * 0.08); next.tail.scale = Vec3::one() / 18.0; next diff --git a/voxygen/src/anim/mod.rs b/voxygen/src/anim/mod.rs index 347df6f7e6..13eaff91f1 100644 --- a/voxygen/src/anim/mod.rs +++ b/voxygen/src/anim/mod.rs @@ -12,9 +12,10 @@ pub mod quadruped_medium; pub mod quadruped_small; use crate::render::FigureBoneData; +use common::comp::{self, item::tool::ToolKind}; use vek::*; -#[derive(Copy, Clone)] +#[derive(Copy, Clone, Debug)] pub struct Bone { pub offset: Vec3, pub ori: Quaternion, @@ -43,7 +44,7 @@ impl Bone { // TODO: Make configurable. let factor = (15.0 * dt).min(1.0); self.offset += (target.offset - self.offset) * factor; - self.ori = vek::ops::Slerp::slerp(self.ori, target.ori, factor); + self.ori = vek::Slerp::slerp(self.ori, target.ori, factor); self.scale += (target.scale - self.scale) * factor; } } @@ -57,6 +58,142 @@ pub trait Skeleton: Send + Sync + 'static { fn interpolate(&mut self, target: &Self, dt: f32); } +// rustc complains that `SkeletonAttr` fields are never read. +// Pls remove when they are. +#[allow(dead_code)] +pub struct SkeletonAttr { + scaler: f32, + head_scale: f32, + neck_height: f32, + neck_forward: f32, + neck_right: f32, + weapon_x: f32, + weapon_y: f32, +} + +impl SkeletonAttr { + pub fn calculate_scale(body: &comp::humanoid::Body) -> f32 { + use comp::humanoid::{BodyType::*, Race::*}; + match (body.race, body.body_type) { + (Orc, Male) => 0.95, + (Orc, Female) => 0.8, + (Human, Male) => 0.8, + (Human, Female) => 0.75, + (Elf, Male) => 0.85, + (Elf, Female) => 0.8, + (Dwarf, Male) => 0.7, + (Dwarf, Female) => 0.65, + (Undead, Male) => 0.8, + (Undead, Female) => 0.75, + (Danari, Male) => 0.58, + (Danari, Female) => 0.58, + } + } +} + +impl Default for SkeletonAttr { + fn default() -> Self { + Self { + scaler: 1.0, + head_scale: 1.0, + neck_height: 1.0, + neck_forward: 1.0, + neck_right: 1.0, + weapon_x: 1.0, + weapon_y: 1.0, + } + } +} + +impl<'a> From<&'a comp::humanoid::Body> for SkeletonAttr { + fn from(body: &'a comp::humanoid::Body) -> Self { + use comp::humanoid::{BodyType::*, Race::*}; + Self { + scaler: SkeletonAttr::calculate_scale(body), + head_scale: match (body.race, body.body_type) { + (Orc, Male) => 0.9, + (Orc, Female) => 1.0, + (Human, Male) => 1.0, + (Human, Female) => 1.0, + (Elf, Male) => 0.95, + (Elf, Female) => 1.0, + (Dwarf, Male) => 1.0, + (Dwarf, Female) => 1.0, + (Undead, Male) => 1.0, + (Undead, Female) => 1.0, + (Danari, Male) => 1.15, + (Danari, Female) => 1.15, + }, + neck_height: match (body.race, body.body_type) { + (Orc, Male) => 0.0, + (Orc, Female) => 0.0, + (Human, Male) => 0.0, + (Human, Female) => 0.0, + (Elf, Male) => 0.0, + (Elf, Female) => 0.0, + (Dwarf, Male) => 0.0, + (Dwarf, Female) => 0.0, + (Undead, Male) => 0.5, + (Undead, Female) => 0.5, + (Danari, Male) => 0.5, + (Danari, Female) => 0.5, + }, + neck_forward: match (body.race, body.body_type) { + (Orc, Male) => 0.0, + (Orc, Female) => 0.0, + (Human, Male) => 0.5, + (Human, Female) => 0.0, + (Elf, Male) => 0.5, + (Elf, Female) => 0.5, + (Dwarf, Male) => 0.5, + (Dwarf, Female) => 0.0, + (Undead, Male) => 0.5, + (Undead, Female) => 0.5, + (Danari, Male) => 0.0, + (Danari, Female) => 0.0, + }, + neck_right: match (body.race, body.body_type) { + (Orc, Male) => 0.0, + (Orc, Female) => 0.0, + (Human, Male) => 0.0, + (Human, Female) => 0.0, + (Elf, Male) => 0.0, + (Elf, Female) => 0.0, + (Dwarf, Male) => 0.0, + (Dwarf, Female) => 0.0, + (Undead, Male) => 0.0, + (Undead, Female) => 0.0, + (Danari, Male) => 0.0, + (Danari, Female) => 0.0, + }, + weapon_x: match ToolKind::Empty { + // TODO: Inventory + ToolKind::Sword(_) => 0.0, + ToolKind::Axe(_) => 3.0, + ToolKind::Hammer(_) => 0.0, + ToolKind::Shield(_) => 3.0, + ToolKind::Staff(_) => 3.0, + ToolKind::Bow(_) => 0.0, + ToolKind::Dagger(_) => 0.0, + ToolKind::Debug(_) => 0.0, + ToolKind::Empty => 0.0, + }, + weapon_y: match ToolKind::Empty { + // TODO: Inventory + ToolKind::Sword(_) => -1.25, + ToolKind::Axe(_) => 0.0, + ToolKind::Hammer(_) => -2.0, + ToolKind::Shield(_) => 0.0, + ToolKind::Staff(_) => 0.0, + ToolKind::Bow(_) => -2.0, + ToolKind::Dagger(_) => -2.0, + ToolKind::Debug(_) => 0.0, + ToolKind::Empty => 0.0, + }, + } + } +} + pub trait Animation { type Skeleton: Skeleton; type Dependency; diff --git a/voxygen/src/audio/mod.rs b/voxygen/src/audio/mod.rs index 1709649c89..299a8c53fe 100644 --- a/voxygen/src/audio/mod.rs +++ b/voxygen/src/audio/mod.rs @@ -238,11 +238,8 @@ impl AudioFrontend { /// Returns the default audio device. /// Does not return rodio Device struct in case our audio backend changes. -pub fn get_default_device() -> String { - rodio::default_output_device() - .expect("No audio output devices detected.") - .name() - .expect("Unable to get device name") +pub fn get_default_device() -> Option { + rodio::default_output_device().map(|dev| dev.name().expect("Unable to get device name")) } /// Returns a vec of the audio devices available. diff --git a/voxygen/src/audio/sfx/event_mapper/movement/mod.rs b/voxygen/src/audio/sfx/event_mapper/movement/mod.rs index d222042a64..36dc653303 100644 --- a/voxygen/src/audio/sfx/event_mapper/movement/mod.rs +++ b/voxygen/src/audio/sfx/event_mapper/movement/mod.rs @@ -4,7 +4,10 @@ use crate::audio::sfx::{SfxTriggerItem, SfxTriggers}; use common::{ - comp::{ActionState, Body, CharacterState, Item, ItemKind, MovementState, Pos, Stats, Vel}, + comp::{ + item::{Item, ItemKind}, + Body, CharacterState, ItemConfig, Loadout, PhysicsState, Pos, Vel, + }, event::{EventBus, SfxEvent, SfxEventItem}, state::State, }; @@ -14,14 +17,26 @@ use std::time::{Duration, Instant}; use vek::*; #[derive(Clone)] -struct LastSfxEvent { +struct PreviousEntityState { event: SfxEvent, - weapon_drawn: bool, time: Instant, + weapon_drawn: bool, + on_ground: bool, +} + +impl Default for PreviousEntityState { + fn default() -> Self { + Self { + event: SfxEvent::Idle, + time: Instant::now(), + weapon_drawn: false, + on_ground: true, + } + } } pub struct MovementEventMapper { - event_history: HashMap, + event_history: HashMap, } impl MovementEventMapper { @@ -35,17 +50,21 @@ impl MovementEventMapper { const SFX_DIST_LIMIT_SQR: f32 = 20000.0; let ecs = state.ecs(); + let sfx_event_bus = ecs.read_resource::>(); + let mut sfx_emitter = sfx_event_bus.emitter(); + let player_position = ecs .read_storage::() .get(player_entity) .map_or(Vec3::zero(), |pos| pos.0); - for (entity, pos, vel, body, stats, character) in ( + for (entity, pos, vel, body, physics, loadout, character) in ( &ecs.entities(), &ecs.read_storage::(), &ecs.read_storage::(), &ecs.read_storage::(), - &ecs.read_storage::(), + &ecs.read_storage::(), + ecs.read_storage::().maybe(), ecs.read_storage::().maybe(), ) .join() @@ -57,43 +76,36 @@ impl MovementEventMapper { let state = self .event_history .entry(entity) - .or_insert_with(|| LastSfxEvent { - event: SfxEvent::Idle, - weapon_drawn: false, - time: Instant::now(), - }); + .or_insert_with(|| PreviousEntityState::default()); let mapped_event = match body { - Body::Humanoid(_) => Self::map_movement_event(character, state, vel.0, stats), + Body::Humanoid(_) => { + Self::map_movement_event(character, physics, state, vel.0, loadout) + }, Body::QuadrupedMedium(_) | Body::QuadrupedSmall(_) | Body::BirdMedium(_) | Body::BirdSmall(_) - | Body::BipedLarge(_) => { - Self::map_non_humanoid_movement_event(character, vel.0) - }, + | Body::BipedLarge(_) => Self::map_non_humanoid_movement_event(physics, vel.0), _ => SfxEvent::Idle, // Ignore fish, critters, etc... }; // Check for SFX config entry for this movement if Self::should_emit(state, triggers.get_key_value(&mapped_event)) { - ecs.read_resource::>() - .emitter() - .emit(SfxEventItem::new( - mapped_event, - Some(pos.0), - Some(Self::get_volume_for_body_type(body)), - )); + sfx_emitter.emit(SfxEventItem::new( + mapped_event, + Some(pos.0), + Some(Self::get_volume_for_body_type(body)), + )); - // Update the last play time - state.event = mapped_event; state.time = Instant::now(); - state.weapon_drawn = Self::has_weapon_drawn(character.action); - } else { - // Keep the last event, it may not have an SFX trigger but it helps us determine - // the next one - state.event = mapped_event; } + + // update state to determine the next event. We only record the time (above) if + // it was dispatched + state.event = mapped_event; + state.weapon_drawn = Self::weapon_drawn(character); + state.on_ground = physics.on_ground; } } @@ -121,12 +133,12 @@ impl MovementEventMapper { /// file(s) to play) 2. The sfx has not been played since it's timeout /// threshold has elapsed, which prevents firing every tick fn should_emit( - last_play_entry: &LastSfxEvent, + previous_state: &PreviousEntityState, sfx_trigger_item: Option<(&SfxEvent, &SfxTriggerItem)>, ) -> bool { if let Some((event, item)) = sfx_trigger_item { - if &last_play_entry.event == event { - last_play_entry.time.elapsed().as_secs_f64() >= item.threshold + if &previous_state.event == event { + previous_state.time.elapsed().as_secs_f64() >= item.threshold } else { true } @@ -135,89 +147,85 @@ impl MovementEventMapper { } } - /// Voxygen has an existing list of character states via `MovementState::*` - /// and `ActionState::*` however that list does not provide enough - /// resolution to target specific entity events, such as opening or - /// closing the glider. These methods translate those entity states with - /// some additional data into more specific `SfxEvent`'s which we attach - /// sounds to + /// Voxygen has an existing list of character states however that list does + /// not provide enough resolution to target specific entity events, such + /// as opening or closing the glider. These methods translate those + /// entity states with some additional data into more specific + /// `SfxEvent`'s which we attach sounds to fn map_movement_event( - current_event: &CharacterState, - previous_event: &LastSfxEvent, + character_state: &CharacterState, + physics_state: &PhysicsState, + previous_state: &PreviousEntityState, vel: Vec3, - stats: &Stats, + loadout: Option<&Loadout>, ) -> SfxEvent { - // Handle any weapon wielding changes up front. Doing so here first simplifies - // handling the movement/action state later, since they don't require querying - // stats or previous wield state. - if let Some(Item { - kind: ItemKind::Tool { kind, .. }, - .. - }) = stats.equipment.main - { - if let Some(wield_event) = match ( - previous_event.weapon_drawn, - current_event.action.is_roll(), - Self::has_weapon_drawn(current_event.action), - ) { - (false, false, true) => Some(SfxEvent::Wield(kind)), - (true, false, false) => Some(SfxEvent::Unwield(kind)), - _ => None, - } { - return wield_event; + // Handle wield state changes + if let Some(active_loadout) = loadout { + if let Some(ItemConfig { + item: + Item { + kind: ItemKind::Tool(data), + .. + }, + .. + }) = active_loadout.active_item + { + if let Some(wield_event) = match ( + previous_state.weapon_drawn, + character_state.is_dodge(), + Self::weapon_drawn(character_state), + ) { + (false, false, true) => Some(SfxEvent::Wield(data.kind)), + (true, false, false) => Some(SfxEvent::Unwield(data.kind)), + _ => None, + } { + return wield_event; + } } } + // Match run state + if physics_state.on_ground && vel.magnitude() > 0.1 + || !previous_state.on_ground && physics_state.on_ground + { + return SfxEvent::Run; + } + // Match all other Movemement and Action states - match ( - current_event.movement, - current_event.action, - previous_event.event.clone(), - ) { - (_, ActionState::Roll { .. }, _) => SfxEvent::Roll, - (MovementState::Climb, ..) => SfxEvent::Climb, - (MovementState::Swim, ..) => SfxEvent::Swim, - (MovementState::Run, ..) => { - // If the entitys's velocity is very low, they may be stuck, or walking into a - // solid object. We should not trigger the run SFX in this case, - // even if their move state indicates running. The 0.1 value is - // an approximation from playtesting scenarios where this can occur. - if vel.magnitude() > 0.1 { - SfxEvent::Run - } else { - SfxEvent::Idle - } - }, - (MovementState::Jump, ..) => SfxEvent::Jump, - (MovementState::Fall, _, SfxEvent::Glide) => SfxEvent::GliderClose, - (MovementState::Stand, _, SfxEvent::Fall) => SfxEvent::Run, - (MovementState::Fall, _, SfxEvent::Jump) => SfxEvent::Idle, - (MovementState::Fall, _, _) => SfxEvent::Fall, - (MovementState::Glide, _, previous_event) => { + match (previous_state.event, character_state) { + (_, CharacterState::Roll { .. }) => SfxEvent::Roll, + (_, CharacterState::Climb { .. }) => SfxEvent::Climb, + (SfxEvent::Glide, CharacterState::Idle { .. }) => SfxEvent::GliderClose, + (previous_event, CharacterState::Glide { .. }) => { if previous_event != SfxEvent::GliderOpen && previous_event != SfxEvent::Glide { SfxEvent::GliderOpen } else { SfxEvent::Glide } }, - (MovementState::Stand, _, SfxEvent::Glide) => SfxEvent::GliderClose, _ => SfxEvent::Idle, } } /// Maps a limited set of movements for other non-humanoid entities - fn map_non_humanoid_movement_event(current_event: &CharacterState, vel: Vec3) -> SfxEvent { - if current_event.movement == MovementState::Run && vel.magnitude() > 0.1 { + fn map_non_humanoid_movement_event(physics_state: &PhysicsState, vel: Vec3) -> SfxEvent { + if physics_state.on_ground && vel.magnitude() > 0.1 { SfxEvent::Run } else { SfxEvent::Idle } } - /// Returns true for any state where the player has their weapon drawn. This - /// helps us manage the wield/unwield sfx events - fn has_weapon_drawn(state: ActionState) -> bool { - state.is_wield() | state.is_attack() | state.is_block() | state.is_charge() + /// This helps us determine whether we should be emitting the Wield/Unwield + /// events. For now, consider either CharacterState::Wielding or + /// ::Equipping to mean the weapon is drawn. This will need updating if the + /// animations change to match the wield_duration associated with the weapon + fn weapon_drawn(character: &CharacterState) -> bool { + character.is_wield() + || match character { + CharacterState::Equipping { .. } => true, + _ => false, + } } /// Returns a relative volume value for a body type. This helps us emit sfx diff --git a/voxygen/src/audio/sfx/event_mapper/movement/tests.rs b/voxygen/src/audio/sfx/event_mapper/movement/tests.rs index 251efba8a5..6d7d8325ba 100644 --- a/voxygen/src/audio/sfx/event_mapper/movement/tests.rs +++ b/voxygen/src/audio/sfx/event_mapper/movement/tests.rs @@ -2,109 +2,104 @@ use super::*; use common::{ assets, comp::{ - bird_small, humanoid, item::Tool, quadruped_medium, quadruped_small, ActionState, Body, - MovementState, Stats, + bird_small, humanoid, + item::tool::{AxeKind, BowKind, ToolKind}, + quadruped_medium, quadruped_small, Body, CharacterState, ItemConfig, Loadout, PhysicsState, }, event::SfxEvent, + states, }; use std::time::{Duration, Instant}; #[test] fn no_item_config_no_emit() { - let last_sfx_event = LastSfxEvent { - event: SfxEvent::Idle, - weapon_drawn: false, - time: Instant::now(), - }; - - let result = MovementEventMapper::should_emit(&last_sfx_event, None); + let previous_state = PreviousEntityState::default(); + let result = MovementEventMapper::should_emit(&previous_state, None); assert_eq!(result, false); } #[test] fn config_but_played_since_threshold_no_emit() { - let event = SfxEvent::Run; - let trigger_item = SfxTriggerItem { files: vec![String::from("some.path.to.sfx.file")], threshold: 1.0, }; // Triggered a 'Run' 0 seconds ago - let last_sfx_event = LastSfxEvent { + let previous_state = PreviousEntityState { event: SfxEvent::Run, - weapon_drawn: false, time: Instant::now(), + weapon_drawn: false, + on_ground: true, }; - let result = MovementEventMapper::should_emit(&last_sfx_event, Some((&event, &trigger_item))); + let result = + MovementEventMapper::should_emit(&previous_state, Some((&SfxEvent::Run, &trigger_item))); assert_eq!(result, false); } #[test] fn config_and_not_played_since_threshold_emits() { - let event = SfxEvent::Run; - let trigger_item = SfxTriggerItem { files: vec![String::from("some.path.to.sfx.file")], threshold: 0.5, }; - let last_sfx_event = LastSfxEvent { + let previous_state = PreviousEntityState { event: SfxEvent::Idle, - weapon_drawn: false, time: Instant::now().checked_add(Duration::from_secs(1)).unwrap(), + weapon_drawn: false, + on_ground: true, }; - let result = MovementEventMapper::should_emit(&last_sfx_event, Some((&event, &trigger_item))); + let result = + MovementEventMapper::should_emit(&previous_state, Some((&SfxEvent::Run, &trigger_item))); assert_eq!(result, true); } #[test] fn same_previous_event_elapsed_emits() { - let event = SfxEvent::Run; - let trigger_item = SfxTriggerItem { files: vec![String::from("some.path.to.sfx.file")], threshold: 0.5, }; - let last_sfx_event = LastSfxEvent { + let previous_state = PreviousEntityState { event: SfxEvent::Run, - weapon_drawn: false, time: Instant::now() .checked_sub(Duration::from_millis(500)) .unwrap(), + weapon_drawn: false, + on_ground: true, }; - let result = MovementEventMapper::should_emit(&last_sfx_event, Some((&event, &trigger_item))); + let result = + MovementEventMapper::should_emit(&previous_state, Some((&SfxEvent::Run, &trigger_item))); assert_eq!(result, true); } #[test] fn maps_idle() { - let stats = Stats::new( - String::from("test"), - Body::Humanoid(humanoid::Body::random()), - None, - ); - let result = MovementEventMapper::map_movement_event( - &CharacterState { - movement: MovementState::Stand, - action: ActionState::Idle, + &CharacterState::Idle {}, + &PhysicsState { + on_ground: true, + on_wall: None, + touch_entity: None, + in_fluid: false, }, - &LastSfxEvent { + &PreviousEntityState { event: SfxEvent::Idle, - weapon_drawn: false, time: Instant::now(), + weapon_drawn: false, + on_ground: true, }, Vec3::zero(), - &stats, + None, ); assert_eq!(result, SfxEvent::Idle); @@ -112,24 +107,22 @@ fn maps_idle() { #[test] fn maps_run_with_sufficient_velocity() { - let stats = Stats::new( - String::from("test"), - Body::Humanoid(humanoid::Body::random()), - None, - ); - let result = MovementEventMapper::map_movement_event( - &CharacterState { - movement: MovementState::Run, - action: ActionState::Idle, + &CharacterState::Idle {}, + &PhysicsState { + on_ground: true, + on_wall: None, + touch_entity: None, + in_fluid: false, }, - &LastSfxEvent { + &PreviousEntityState { event: SfxEvent::Idle, - weapon_drawn: false, time: Instant::now(), + weapon_drawn: false, + on_ground: true, }, Vec3::new(0.5, 0.8, 0.0), - &stats, + None, ); assert_eq!(result, SfxEvent::Run); @@ -137,24 +130,45 @@ fn maps_run_with_sufficient_velocity() { #[test] fn does_not_map_run_with_insufficient_velocity() { - let stats = Stats::new( - String::from("test"), - Body::Humanoid(humanoid::Body::random()), + let result = MovementEventMapper::map_movement_event( + &CharacterState::Idle {}, + &PhysicsState { + on_ground: true, + on_wall: None, + touch_entity: None, + in_fluid: false, + }, + &PreviousEntityState { + event: SfxEvent::Idle, + time: Instant::now(), + weapon_drawn: false, + on_ground: true, + }, + Vec3::new(0.02, 0.0001, 0.0), None, ); + assert_eq!(result, SfxEvent::Idle); +} + +#[test] +fn does_not_map_run_with_sufficient_velocity_but_not_on_ground() { let result = MovementEventMapper::map_movement_event( - &CharacterState { - movement: MovementState::Run, - action: ActionState::Idle, + &CharacterState::Idle {}, + &PhysicsState { + on_ground: false, + on_wall: None, + touch_entity: None, + in_fluid: false, }, - &LastSfxEvent { + &PreviousEntityState { event: SfxEvent::Idle, - weapon_drawn: false, time: Instant::now(), + weapon_drawn: false, + on_ground: false, }, - Vec3::new(0.02, 0.0001, 0.0), - &stats, + Vec3::new(0.5, 0.8, 0.0), + None, ); assert_eq!(result, SfxEvent::Idle); @@ -162,77 +176,48 @@ fn does_not_map_run_with_insufficient_velocity() { #[test] fn maps_roll() { - let stats = Stats::new( - String::from("test"), - Body::Humanoid(humanoid::Body::random()), - None, - ); - let result = MovementEventMapper::map_movement_event( - &CharacterState { - action: ActionState::Roll { - time_left: Duration::new(1, 0), - was_wielding: false, - }, - movement: MovementState::Run, + &CharacterState::Roll(states::roll::Data { + remaining_duration: Duration::from_millis(300), + was_wielded: true, + }), + &PhysicsState { + on_ground: true, + on_wall: None, + touch_entity: None, + in_fluid: false, }, - &LastSfxEvent { + &PreviousEntityState { event: SfxEvent::Run, - weapon_drawn: false, time: Instant::now(), + weapon_drawn: false, + on_ground: true, }, Vec3::zero(), - &stats, + None, ); assert_eq!(result, SfxEvent::Roll); } -#[test] -fn maps_fall() { - let stats = Stats::new( - String::from("test"), - Body::Humanoid(humanoid::Body::random()), - None, - ); - - let result = MovementEventMapper::map_movement_event( - &CharacterState { - movement: MovementState::Fall, - action: ActionState::Idle, - }, - &LastSfxEvent { - event: SfxEvent::Fall, - weapon_drawn: false, - time: Instant::now(), - }, - Vec3::zero(), - &stats, - ); - - assert_eq!(result, SfxEvent::Fall); -} - #[test] fn maps_land_on_ground_to_run() { - let stats = Stats::new( - String::from("test"), - Body::Humanoid(humanoid::Body::random()), - None, - ); - let result = MovementEventMapper::map_movement_event( - &CharacterState { - movement: MovementState::Stand, - action: ActionState::Idle, + &CharacterState::Idle {}, + &PhysicsState { + on_ground: true, + on_wall: None, + touch_entity: None, + in_fluid: false, }, - &LastSfxEvent { - event: SfxEvent::Fall, - weapon_drawn: false, + &PreviousEntityState { + event: SfxEvent::Idle, time: Instant::now(), + weapon_drawn: false, + on_ground: false, }, Vec3::zero(), - &stats, + None, ); assert_eq!(result, SfxEvent::Run); @@ -240,24 +225,22 @@ fn maps_land_on_ground_to_run() { #[test] fn maps_glider_open() { - let stats = Stats::new( - String::from("test"), - Body::Humanoid(humanoid::Body::random()), - None, - ); - let result = MovementEventMapper::map_movement_event( - &CharacterState { - movement: MovementState::Glide, - action: ActionState::Idle, + &CharacterState::Glide {}, + &PhysicsState { + on_ground: false, + on_wall: None, + touch_entity: None, + in_fluid: false, }, - &LastSfxEvent { + &PreviousEntityState { event: SfxEvent::Jump, - weapon_drawn: false, time: Instant::now(), + weapon_drawn: false, + on_ground: false, }, Vec3::zero(), - &stats, + None, ); assert_eq!(result, SfxEvent::GliderOpen); @@ -265,24 +248,22 @@ fn maps_glider_open() { #[test] fn maps_glide() { - let stats = Stats::new( - String::from("test"), - Body::Humanoid(humanoid::Body::random()), - None, - ); - let result = MovementEventMapper::map_movement_event( - &CharacterState { - movement: MovementState::Glide, - action: ActionState::Idle, + &CharacterState::Glide {}, + &PhysicsState { + on_ground: false, + on_wall: None, + touch_entity: None, + in_fluid: false, }, - &LastSfxEvent { + &PreviousEntityState { event: SfxEvent::Glide, - weapon_drawn: false, time: Instant::now(), + weapon_drawn: false, + on_ground: false, }, Vec3::zero(), - &stats, + None, ); assert_eq!(result, SfxEvent::Glide); @@ -290,143 +271,129 @@ fn maps_glide() { #[test] fn maps_glider_close_when_closing_mid_flight() { - let stats = Stats::new( - String::from("test"), - Body::Humanoid(humanoid::Body::random()), - None, - ); - let result = MovementEventMapper::map_movement_event( - &CharacterState { - movement: MovementState::Fall, - action: ActionState::Idle, + &CharacterState::Idle {}, + &PhysicsState { + on_ground: false, + on_wall: None, + touch_entity: None, + in_fluid: false, }, - &LastSfxEvent { + &PreviousEntityState { event: SfxEvent::Glide, - weapon_drawn: false, time: Instant::now(), + weapon_drawn: false, + on_ground: false, }, Vec3::zero(), - &stats, + None, ); assert_eq!(result, SfxEvent::GliderClose); } #[test] +#[ignore] fn maps_glider_close_when_landing() { - let stats = Stats::new( - String::from("test"), - Body::Humanoid(humanoid::Body::random()), - None, - ); - let result = MovementEventMapper::map_movement_event( - &CharacterState { - movement: MovementState::Stand, - action: ActionState::Idle, + &CharacterState::Idle {}, + &PhysicsState { + on_ground: true, + on_wall: None, + touch_entity: None, + in_fluid: false, }, - &LastSfxEvent { + &PreviousEntityState { event: SfxEvent::Glide, - weapon_drawn: false, time: Instant::now(), + weapon_drawn: false, + on_ground: false, }, Vec3::zero(), - &stats, + None, ); assert_eq!(result, SfxEvent::GliderClose); } #[test] -fn maps_wield() { - let stats = Stats::new( - String::from("test"), - Body::Humanoid(humanoid::Body::random()), - Some(assets::load_expect_cloned( - "common.items.weapons.starter_sword", - )), - ); +fn maps_wield_while_equipping() { + let mut loadout = Loadout::default(); + + loadout.active_item = Some(ItemConfig { + item: assets::load_expect_cloned("common.items.weapons.starter_axe"), + ability1: None, + ability2: None, + ability3: None, + block_ability: None, + dodge_ability: None, + }); let result = MovementEventMapper::map_movement_event( - &CharacterState { - movement: MovementState::Stand, - action: ActionState::Wield { - time_left: Duration::from_millis(800), - }, + &CharacterState::Equipping(states::equipping::Data { + time_left: Duration::from_millis(10), + }), + &PhysicsState { + on_ground: true, + on_wall: None, + touch_entity: None, + in_fluid: false, }, - &LastSfxEvent { + &PreviousEntityState { event: SfxEvent::Idle, - weapon_drawn: false, time: Instant::now(), + weapon_drawn: false, + on_ground: true, }, Vec3::zero(), - &stats, + Some(&loadout), ); - assert_eq!(result, SfxEvent::Wield(Tool::Sword)); + assert_eq!(result, SfxEvent::Wield(ToolKind::Axe(AxeKind::BasicAxe))); } #[test] fn maps_unwield() { - let stats = Stats::new( - String::from("test"), - Body::Humanoid(humanoid::Body::random()), - Some(assets::load_expect_cloned( - "common.items.weapons.starter_axe", - )), - ); + let mut loadout = Loadout::default(); + + loadout.active_item = Some(ItemConfig { + item: assets::load_expect_cloned("common.items.weapons.starter_bow"), + ability1: None, + ability2: None, + ability3: None, + block_ability: None, + dodge_ability: None, + }); let result = MovementEventMapper::map_movement_event( - &CharacterState { - movement: MovementState::Stand, - action: ActionState::Idle, + &CharacterState::default(), + &PhysicsState { + on_ground: true, + on_wall: None, + touch_entity: None, + in_fluid: false, }, - &LastSfxEvent { + &PreviousEntityState { event: SfxEvent::Idle, - weapon_drawn: true, time: Instant::now(), + weapon_drawn: true, + on_ground: true, }, Vec3::zero(), - &stats, + Some(&loadout), ); - assert_eq!(result, SfxEvent::Unwield(Tool::Axe)); -} - -#[test] -fn does_not_map_wield_when_no_main_weapon() { - let stats = Stats::new( - String::from("test"), - Body::Humanoid(humanoid::Body::random()), - None, - ); - - let result = MovementEventMapper::map_movement_event( - &CharacterState { - movement: MovementState::Run, - action: ActionState::Wield { - time_left: Duration::from_millis(600), - }, - }, - &LastSfxEvent { - event: SfxEvent::Idle, - weapon_drawn: false, - time: Instant::now(), - }, - Vec3::new(0.5, 0.8, 0.0), - &stats, - ); - - assert_eq!(result, SfxEvent::Run); + assert_eq!(result, SfxEvent::Unwield(ToolKind::Bow(BowKind::BasicBow))); } #[test] fn maps_quadrupeds_running() { let result = MovementEventMapper::map_non_humanoid_movement_event( - &CharacterState { - movement: MovementState::Run, - action: ActionState::Idle, + &PhysicsState { + on_ground: true, + on_wall: None, + touch_entity: None, + in_fluid: false, }, Vec3::new(0.5, 0.8, 0.0), ); diff --git a/voxygen/src/audio/sfx/event_mapper/progression.rs b/voxygen/src/audio/sfx/event_mapper/progression.rs index 7c05db0360..01ab1cc82c 100644 --- a/voxygen/src/audio/sfx/event_mapper/progression.rs +++ b/voxygen/src/audio/sfx/event_mapper/progression.rs @@ -53,8 +53,7 @@ impl ProgressionEventMapper { if sfx_trigger_item.is_some() { ecs.read_resource::>() - .emitter() - .emit(SfxEventItem::at_player_position(mapped_event)); + .emit_now(SfxEventItem::at_player_position(mapped_event)); } } diff --git a/voxygen/src/audio/sfx/mod.rs b/voxygen/src/audio/sfx/mod.rs index 86771e86c2..ef40c85663 100644 --- a/voxygen/src/audio/sfx/mod.rs +++ b/voxygen/src/audio/sfx/mod.rs @@ -70,10 +70,12 @@ impl SfxMgr { .get(player_entity) .map_or(Vec3::zero(), |pos| pos.0); - let player_ori = ecs + let player_ori = *ecs .read_storage::() .get(player_entity) - .map_or(Vec3::zero(), |pos| pos.0); + .copied() + .unwrap_or_default() + .0; audio.set_listener_pos(&player_position, &player_ori); diff --git a/voxygen/src/controller.rs b/voxygen/src/controller.rs index 77049acc21..6fe0d76260 100644 --- a/voxygen/src/controller.rs +++ b/voxygen/src/controller.rs @@ -115,12 +115,6 @@ impl From<&crate::settings::GamepadSettings> for ControllerSettings { map.entry(settings.game_buttons.bag) .or_default() .push(GameInput::Bag); - map.entry(settings.game_buttons.quest_log) - .or_default() - .push(GameInput::QuestLog); - map.entry(settings.game_buttons.character_window) - .or_default() - .push(GameInput::CharacterWindow); map.entry(settings.game_buttons.social) .or_default() .push(GameInput::Social); @@ -160,6 +154,9 @@ impl From<&crate::settings::GamepadSettings> for ControllerSettings { map.entry(settings.game_buttons.toggle_wield) .or_default() .push(GameInput::ToggleWield); + map.entry(settings.game_buttons.swap_loadout) + .or_default() + .push(GameInput::SwapLoadout); map.entry(settings.game_buttons.charge) .or_default() .push(GameInput::Charge); diff --git a/voxygen/src/ecs/comp.rs b/voxygen/src/ecs/comp.rs index 492b8543a9..8d051f0588 100644 --- a/voxygen/src/ecs/comp.rs +++ b/voxygen/src/ecs/comp.rs @@ -1,3 +1,4 @@ +use common::util::Dir; use specs::Component; use specs_idvs::IDVStorage; use vek::*; @@ -32,7 +33,7 @@ impl Component for HpFloaterList { #[derive(Copy, Clone, Debug)] pub struct Interpolated { pub pos: Vec3, - pub ori: Vec3, + pub ori: Dir, } impl Component for Interpolated { type Storage = IDVStorage; diff --git a/voxygen/src/ecs/sys/floater.rs b/voxygen/src/ecs/sys/floater.rs index f9f05f5540..2c3e54a3dd 100644 --- a/voxygen/src/ecs/sys/floater.rs +++ b/voxygen/src/ecs/sys/floater.rs @@ -70,7 +70,7 @@ impl<'a> System<'a> for Sys { // (maybe health changes could be sent to the client as a list // of events) if match health.last_change.1.cause { - HealthSource::Attack { by } => { + HealthSource::Attack { by } | HealthSource::Projectile { owner: Some(by) } => { let by_me = my_uid.map_or(false, |&uid| by == uid); // If the attack was by me also reset this timer if by_me { @@ -80,11 +80,10 @@ impl<'a> System<'a> for Sys { }, HealthSource::Suicide => my_entity.0 == entity, HealthSource::World => my_entity.0 == entity, - HealthSource::Revive => false, - HealthSource::Command => true, HealthSource::LevelUp => my_entity.0 == entity, + HealthSource::Command => true, HealthSource::Item => true, - HealthSource::Unknown => false, + _ => false, } { hp_floater_list.floaters.push(HpFloater { timer: 0.0, diff --git a/voxygen/src/ecs/sys/interpolation.rs b/voxygen/src/ecs/sys/interpolation.rs index 80ddfc6261..dccfdddb95 100644 --- a/voxygen/src/ecs/sys/interpolation.rs +++ b/voxygen/src/ecs/sys/interpolation.rs @@ -2,6 +2,7 @@ use crate::ecs::comp::Interpolated; use common::{ comp::{Ori, Pos, Vel}, state::DeltaTime, + util::Dir, }; use log::warn; use specs::{Entities, Join, Read, ReadStorage, System, WriteStorage}; @@ -29,14 +30,7 @@ impl<'a> System<'a> for Sys { // Update interpolation values if i.pos.distance_squared(pos.0) < 64.0 * 64.0 { i.pos = Lerp::lerp(i.pos, pos.0 + vel.0 * 0.03, 10.0 * dt.0); - let ori_interp = Slerp::slerp(i.ori, ori.0, 5.0 * dt.0); - // Check for NaNs - // TODO: why are we getting NaNs here! Zero-length ori vectors? - i.ori = if !ori_interp.map(|e| e.is_nan()).reduce_or() { - ori_interp - } else { - ori.0 - }; + i.ori = Dir::slerp(i.ori, ori.0, 5.0 * dt.0); } else { i.pos = pos.0; i.ori = ori.0; diff --git a/voxygen/src/hud/bag.rs b/voxygen/src/hud/bag.rs index 70e27498de..8bb4a2a7d8 100644 --- a/voxygen/src/hud/bag.rs +++ b/voxygen/src/hud/bag.rs @@ -1,22 +1,26 @@ use super::{ img_ids::{Imgs, ImgsRot}, item_imgs::{ItemImgs, ItemKey}, - Event as HudEvent, TEXT_COLOR, + Event as HudEvent, Show, CRITICAL_HP_COLOR, LOW_HP_COLOR, TEXT_COLOR, UI_HIGHLIGHT_0, UI_MAIN, + XP_COLOR, +}; +use crate::{ + i18n::VoxygenLocalization, + ui::{fonts::ConrodVoxygenFonts, ImageFrame, Tooltip, TooltipManager, Tooltipable}, }; -use crate::ui::{fonts::ConrodVoxygenFonts, ImageFrame, Tooltip, TooltipManager, Tooltipable}; use client::Client; +use common::comp::{item::ItemKind, Stats}; use conrod_core::{ color, image, - widget::{self, Button, Image, Rectangle}, - widget_ids, Color, Positionable, Sizeable, Widget, WidgetCommon, + widget::{self, Button, Image, Rectangle, Text}, + widget_ids, Color, Colorable, Labelable, Positionable, Sizeable, Widget, WidgetCommon, }; +// widget_ids! { - struct Ids { + pub struct Ids { + test, bag_close, - bag_top, - bag_mid, - bag_bot, inv_alignment, inv_grid_1, inv_grid_2, @@ -25,7 +29,66 @@ widget_ids! { map_title, inv_slots[], items[], + amounts[], + amounts_bg[], tooltip[], + bg, + bg_frame, + char_ico, + coin_ico, + space_txt, + currency_txt, + inventory_title, + inventory_title_bg, + scrollbar_bg, + stats_button, + tab_1, + tab_2, + tab_3, + tab_4, + //Stats + stats_alignment, + level, + exp_rectangle, + exp_progress_rectangle, + expbar, + exp, + divider, + statnames, + stats, + //Armor Slots + slots_bg, + head_bg, + neck_bg, + chest_bg, + shoulder_bg, + hands_bg, + legs_bg, + belt_bg, + ring_r_bg, + ring_l_bg, + foot_bg, + back_bg, + tabard_bg, + mainhand_bg, + offhand_bg, + head_ico, + neck_ico, + chest_ico, + shoulder_ico, + hands_ico, + legs_ico, + belt_ico, + ring_r_ico, + ring_l_ico, + foot_ico, + back_ico, + tabard_ico, + mainhand_ico, + offhand_ico, + end_ico, + fit_ico, + wp_ico, } } @@ -41,6 +104,9 @@ pub struct Bag<'a> { rot_imgs: &'a ImgsRot, tooltip_manager: &'a mut TooltipManager, pulse: f32, + localized_strings: &'a std::sync::Arc, + stats: &'a Stats, + show: &'a Show, } impl<'a> Bag<'a> { @@ -52,6 +118,9 @@ impl<'a> Bag<'a> { rot_imgs: &'a ImgsRot, tooltip_manager: &'a mut TooltipManager, pulse: f32, + localized_strings: &'a std::sync::Arc, + stats: &'a Stats, + show: &'a Show, ) -> Self { Self { client, @@ -62,6 +131,9 @@ impl<'a> Bag<'a> { rot_imgs, tooltip_manager, pulse, + localized_strings, + stats, + show, } } } @@ -72,13 +144,14 @@ pub struct State { selected_slot: Option, } -const BAG_SCALE: f64 = 4.0; - pub enum Event { HudEvent(HudEvent), + Stats, Close, } +/* +*/ impl<'a> Widget for Bag<'a> { type Event = Option; type State = State; @@ -104,6 +177,19 @@ impl<'a> Widget for Bag<'a> { Some(inv) => inv, None => return None, }; + let exp_percentage = (self.stats.exp.current() as f64) / (self.stats.exp.maximum() as f64); + let exp_treshold = format!( + "{}/{} {}", + self.stats.exp.current(), + self.stats.exp.maximum(), + &self.localized_strings.get("hud.bag.exp") + ); + let space_used = inventory.amount; + let space_max = inventory.slots.len(); + let bag_space = format!("{}/{}", space_used, space_max); + let bag_space_percentage = space_used as f32 / space_max as f32; + let level = (self.stats.level.level()).to_string(); + let currency = 0; // TODO: Add as a Stat maybe? // Tooltips let item_tooltip = Tooltip::new({ @@ -124,28 +210,393 @@ impl<'a> Widget for Bag<'a> { .title_text_color(TEXT_COLOR) .font_id(self.fonts.cyri.conrod_id) .desc_text_color(TEXT_COLOR); - - // Bag parts - Image::new(self.imgs.bag_bot) - .w_h(58.0 * BAG_SCALE, 9.0 * BAG_SCALE) - .bottom_right_with_margins_on(ui.window, 60.0, 5.0) - .set(state.ids.bag_bot, ui); - let mid_height = ((inventory.len() + 4) / 5) as f64 * 44.0; - Image::new(self.imgs.bag_mid) - .w_h(58.0 * BAG_SCALE, mid_height) - .up_from(state.ids.bag_bot, 0.0) - .set(state.ids.bag_mid, ui); - Image::new(self.imgs.bag_top) - .w_h(58.0 * BAG_SCALE, 9.0 * BAG_SCALE) - .up_from(state.ids.bag_mid, 0.0) - .set(state.ids.bag_top, ui); - + // BG + Image::new(if self.show.stats { + self.imgs.inv_bg_stats + } else { + self.imgs.inv_bg_armor + }) + .w_h(424.0, 708.0) + .bottom_right_with_margins_on(ui.window, 60.0, 5.0) + .color(Some(UI_MAIN)) + .set(state.ids.bg, ui); + Image::new(self.imgs.inv_frame) + .w_h(424.0, 708.0) + .middle_of(state.ids.bg) + .color(Some(UI_HIGHLIGHT_0)) + .set(state.ids.bg_frame, ui); + // Title + Text::new(&format!( + "{}{}", + &self.stats.name, + &self.localized_strings.get("hud.bag.inventory") + )) + .mid_top_with_margin_on(state.ids.bg_frame, 9.0) + .font_id(self.fonts.cyri.conrod_id) + .font_size(self.fonts.cyri.scale(22)) + .color(Color::Rgba(0.0, 0.0, 0.0, 1.0)) + .set(state.ids.inventory_title_bg, ui); + Text::new(&format!( + "{}{}", + &self.stats.name, + &self.localized_strings.get("hud.bag.inventory") + )) + .top_left_with_margins_on(state.ids.inventory_title_bg, 2.0, 2.0) + .font_id(self.fonts.cyri.conrod_id) + .font_size(self.fonts.cyri.scale(22)) + .color(TEXT_COLOR) + .set(state.ids.inventory_title, ui); + // Scrollbar-BG + Image::new(self.imgs.scrollbar_bg) + .w_h(9.0, 173.0) + .bottom_right_with_margins_on(state.ids.bg_frame, 42.0, 3.0) + .color(Some(UI_HIGHLIGHT_0)) + .set(state.ids.scrollbar_bg, ui); + // Char Pixel-Art + Image::new(self.imgs.char_art) + .w_h(40.0, 37.0) + .top_left_with_margins_on(state.ids.bg, 4.0, 2.0) + .set(state.ids.char_ico, ui); + // Coin Icon and Currency Text + Image::new(self.imgs.coin_ico) + .w_h(16.0, 17.0) + .bottom_left_with_margins_on(state.ids.bg_frame, 2.0, 43.0) + .set(state.ids.coin_ico, ui); + Text::new(&format!("{}", currency)) + .bottom_left_with_margins_on(state.ids.bg_frame, 6.0, 64.0) + .font_id(self.fonts.cyri.conrod_id) + .font_size(self.fonts.cyri.scale(14)) + .color(Color::Rgba(0.871, 0.863, 0.05, 1.0)) + .set(state.ids.currency_txt, ui); + //Free Bag-Space + Text::new(&bag_space) + .bottom_right_with_margins_on(state.ids.bg_frame, 6.0, 43.0) + .font_id(self.fonts.cyri.conrod_id) + .font_size(self.fonts.cyri.scale(14)) + .color(if bag_space_percentage < 0.8 { + TEXT_COLOR + } else if bag_space_percentage < 1.0 { + LOW_HP_COLOR + } else { + CRITICAL_HP_COLOR + }) + .set(state.ids.space_txt, ui); // Alignment for Grid - Rectangle::fill_with([56.0 * BAG_SCALE, mid_height], color::TRANSPARENT) - .top_left_with_margins_on(state.ids.bag_mid, 0.0, 3.0 * BAG_SCALE) + Rectangle::fill_with([362.0, 200.0], color::TRANSPARENT) + .bottom_left_with_margins_on(state.ids.bg_frame, 29.0, 44.0) .scroll_kids_vertically() .set(state.ids.inv_alignment, ui); + if !self.show.stats { + // Title + Text::new(&format!( + "{}{}", + &self.stats.name, + &self.localized_strings.get("hud.bag.inventory") + )) + .mid_top_with_margin_on(state.ids.bg_frame, 9.0) + .font_id(self.fonts.cyri.conrod_id) + .font_size(self.fonts.cyri.scale(22)) + .color(Color::Rgba(0.0, 0.0, 0.0, 1.0)) + .set(state.ids.inventory_title_bg, ui); + Text::new(&format!( + "{}{}", + &self.stats.name, + &self.localized_strings.get("hud.bag.inventory") + )) + .top_left_with_margins_on(state.ids.inventory_title_bg, 2.0, 2.0) + .font_id(self.fonts.cyri.conrod_id) + .font_size(self.fonts.cyri.scale(22)) + .color(TEXT_COLOR) + .set(state.ids.inventory_title, ui); + //Armor Slots + //Slots BG + /*Image::new(self.imgs.inv_runes) + .w_h(424.0, 454.0) + .mid_top_with_margin_on(state.ids.bg, 0.0) + .color(Some(UI_HIGHLIGHT_0)) + .floating(true) + .set(state.ids.slots_bg, ui); + Image::new(self.imgs.inv_slots) + .w_h(424.0, 401.0) + .mid_top_with_margin_on(state.ids.bg, 57.0) + .color(Some(UI_HIGHLIGHT_0)) + .set(state.ids.slots_bg, ui);*/ + // Armor Slots + //Head + Image::new(self.imgs.armor_slot) + .w_h(45.0, 45.0) + .mid_top_with_margin_on(state.ids.bg_frame, 60.0) + .color(Some(UI_HIGHLIGHT_0)) + .set(state.ids.head_bg, ui); + Button::image(self.imgs.head_bg) + .w_h(32.0, 40.0) + .image_color(UI_MAIN) + .middle_of(state.ids.head_bg) + .with_tooltip(self.tooltip_manager, "Helmet", "", &item_tooltip) + .set(state.ids.head_ico, ui); + //Necklace + Image::new(self.imgs.armor_slot) + .w_h(45.0, 45.0) + .mid_bottom_with_margin_on(state.ids.head_bg, -55.0) + .color(Some(UI_HIGHLIGHT_0)) + .set(state.ids.neck_bg, ui); + Button::image(self.imgs.necklace_bg) + .w_h(40.0, 31.0) + .image_color(UI_MAIN) + .middle_of(state.ids.neck_bg) + .with_tooltip(self.tooltip_manager, "Neck", "", &item_tooltip) + .set(state.ids.neck_ico, ui); + //Chest + Image::new(self.imgs.armor_slot) // different graphics for empty/non empty + .w_h(85.0, 85.0) + .mid_bottom_with_margin_on(state.ids.neck_bg, -95.0) + .color(Some(UI_HIGHLIGHT_0)) + .set(state.ids.chest_bg, ui); + Button::image(self.imgs.chest_bg) + .w_h(64.0, 42.0) + .image_color(UI_MAIN) + .middle_of(state.ids.chest_bg) + .with_tooltip(self.tooltip_manager, "Chest", "", &item_tooltip) + .set(state.ids.chest_ico, ui); + //Shoulder + Image::new(self.imgs.armor_slot) + .w_h(70.0, 70.0) + .bottom_left_with_margins_on(state.ids.chest_bg, 0.0, -80.0) + .color(Some(UI_HIGHLIGHT_0)) + .set(state.ids.shoulder_bg, ui); + Button::image(self.imgs.shoulders_bg) + .w_h(60.0, 36.0) + .image_color(UI_MAIN) + .middle_of(state.ids.shoulder_bg) + .with_tooltip(self.tooltip_manager, "Shoulders", "", &item_tooltip) + .set(state.ids.shoulder_ico, ui); + //Hands + Image::new(self.imgs.armor_slot) + .w_h(70.0, 70.0) + .bottom_right_with_margins_on(state.ids.chest_bg, 0.0, -80.0) + .color(Some(UI_HIGHLIGHT_0)) + .set(state.ids.hands_bg, ui); + Button::image(self.imgs.hands_bg) + .w_h(55.0, 60.0) + .image_color(UI_MAIN) + .middle_of(state.ids.hands_bg) + .with_tooltip(self.tooltip_manager, "Hands", "", &item_tooltip) + .set(state.ids.hands_ico, ui); + //Belt + Image::new(self.imgs.armor_slot) + .w_h(45.0, 45.0) + .mid_bottom_with_margin_on(state.ids.chest_bg, -55.0) + .color(Some(UI_HIGHLIGHT_0)) + .set(state.ids.belt_bg, ui); + Button::image(self.imgs.belt_bg) + .w_h(40.0, 23.0) + .image_color(UI_MAIN) + .middle_of(state.ids.belt_bg) + .with_tooltip(self.tooltip_manager, "Belt", "", &item_tooltip) + .set(state.ids.belt_ico, ui); + //Legs + Image::new(self.imgs.armor_slot) + .w_h(85.0, 85.0) + .mid_bottom_with_margin_on(state.ids.belt_bg, -95.0) + .color(Some(UI_HIGHLIGHT_0)) + .set(state.ids.legs_bg, ui); + Button::image(self.imgs.legs_bg) + .w_h(48.0, 70.0) + .image_color(UI_MAIN) + .middle_of(state.ids.legs_bg) + .with_tooltip(self.tooltip_manager, "Legs", "", &item_tooltip) + .set(state.ids.legs_ico, ui); + //Ring-L + Image::new(self.imgs.armor_slot) + .w_h(45.0, 45.0) + .bottom_right_with_margins_on(state.ids.shoulder_bg, -55.0, 0.0) + .color(Some(UI_HIGHLIGHT_0)) + .set(state.ids.ring_l_bg, ui); + Button::image(self.imgs.ring_l_bg) + .w_h(36.0, 40.0) + .image_color(UI_MAIN) + .middle_of(state.ids.ring_l_bg) + .with_tooltip(self.tooltip_manager, "Left Ring", "", &item_tooltip) + .set(state.ids.ring_l_ico, ui); + //Ring-R + Image::new(self.imgs.armor_slot) + .w_h(45.0, 45.0) + .bottom_left_with_margins_on(state.ids.hands_bg, -55.0, 0.0) + .color(Some(UI_HIGHLIGHT_0)) + .set(state.ids.ring_r_bg, ui); + Button::image(self.imgs.ring_r_bg) + .w_h(36.0, 40.0) + .image_color(UI_MAIN) + .middle_of(state.ids.ring_r_bg) + .with_tooltip(self.tooltip_manager, "Right Ring", "", &item_tooltip) + .set(state.ids.ring_r_ico, ui); + //Back + Image::new(self.imgs.armor_slot) + .w_h(45.0, 45.0) + .down_from(state.ids.ring_l_bg, 10.0) + .color(Some(UI_HIGHLIGHT_0)) + .set(state.ids.back_bg, ui); + Button::image(self.imgs.back_bg) + .w_h(33.0, 40.0) + .image_color(UI_MAIN) + .middle_of(state.ids.back_bg) + .with_tooltip(self.tooltip_manager, "Back", "", &item_tooltip) + .set(state.ids.back_ico, ui); + //Foot + Image::new(self.imgs.armor_slot) + .w_h(45.0, 45.0) + .down_from(state.ids.ring_r_bg, 10.0) + .color(Some(UI_HIGHLIGHT_0)) + .set(state.ids.foot_bg, ui); + Button::image(self.imgs.feet_bg) + .w_h(32.0, 40.0) + .image_color(UI_MAIN) + .middle_of(state.ids.foot_bg) + .with_tooltip(self.tooltip_manager, "Feet", "", &item_tooltip) + .set(state.ids.foot_ico, ui); + //Tabard + Image::new(self.imgs.armor_slot) + .w_h(70.0, 70.0) + .top_right_with_margins_on(state.ids.bg_frame, 80.5, 53.0) + .color(Some(UI_HIGHLIGHT_0)) + .set(state.ids.tabard_bg, ui); + Button::image(self.imgs.tabard_bg) + .w_h(60.0, 60.0) + .image_color(UI_MAIN) + .middle_of(state.ids.tabard_bg) + .with_tooltip(self.tooltip_manager, "Tabard", "", &item_tooltip) + .set(state.ids.tabard_ico, ui); + //Mainhand/Left-Slot + Image::new(self.imgs.armor_slot) + .w_h(85.0, 85.0) + .bottom_right_with_margins_on(state.ids.back_bg, -95.0, 0.0) + .color(Some(UI_HIGHLIGHT_0)) + .set(state.ids.mainhand_bg, ui); + Button::image(self.imgs.mainhand_bg) + .w_h(75.0, 75.0) + .image_color(UI_MAIN) + .middle_of(state.ids.mainhand_bg) + .with_tooltip(self.tooltip_manager, "Mainhand", "", &item_tooltip) + .set(state.ids.mainhand_ico, ui); + //Offhand/Right-Slot + Image::new(self.imgs.armor_slot) + .w_h(85.0, 85.0) + .bottom_left_with_margins_on(state.ids.foot_bg, -95.0, 0.0) + .color(Some(UI_HIGHLIGHT_0)) + .set(state.ids.offhand_bg, ui); + Button::image(self.imgs.offhand_bg) + .w_h(75.0, 75.0) + .image_color(UI_MAIN) + .middle_of(state.ids.offhand_bg) + .with_tooltip(self.tooltip_manager, "Offhand", "", &item_tooltip) + .set(state.ids.offhand_ico, ui); + } else { + // Stats + // Title + Text::new(&format!( + "{}{}", + &self.stats.name, + &self.localized_strings.get("hud.bag.stats_title") + )) + .mid_top_with_margin_on(state.ids.bg_frame, 9.0) + .font_id(self.fonts.cyri.conrod_id) + .font_size(self.fonts.cyri.scale(22)) + .color(Color::Rgba(0.0, 0.0, 0.0, 1.0)) + .set(state.ids.inventory_title_bg, ui); + Text::new(&format!( + "{}{}", + &self.stats.name, + &self.localized_strings.get("hud.bag.stats_title") + )) + .top_left_with_margins_on(state.ids.inventory_title_bg, 2.0, 2.0) + .font_id(self.fonts.cyri.conrod_id) + .font_size(self.fonts.cyri.scale(22)) + .color(TEXT_COLOR) + .set(state.ids.inventory_title, ui); + // Alignment for Stats + Rectangle::fill_with([418.0, 384.0], color::TRANSPARENT) + .mid_top_with_margin_on(state.ids.bg_frame, 48.0) + .scroll_kids_vertically() + .set(state.ids.stats_alignment, ui); + // Level + Text::new(&level) + .mid_top_with_margin_on(state.ids.stats_alignment, 10.0) + .font_id(self.fonts.cyri.conrod_id) + .font_size(self.fonts.cyri.scale(30)) + .color(TEXT_COLOR) + .set(state.ids.level, ui); + + // Exp-Bar Background + Rectangle::fill_with([170.0, 10.0], color::BLACK) + .mid_top_with_margin_on(state.ids.stats_alignment, 50.0) + .set(state.ids.exp_rectangle, ui); + + // Exp-Bar Progress + Rectangle::fill_with([170.0 * (exp_percentage), 6.0], XP_COLOR) // 0.8 = Experience percentage + .mid_left_with_margin_on(state.ids.expbar, 1.0) + .set(state.ids.exp_progress_rectangle, ui); + + // Exp-Bar Foreground Frame + Image::new(self.imgs.progress_frame) + .w_h(170.0, 10.0) + .middle_of(state.ids.exp_rectangle) + .color(Some(UI_HIGHLIGHT_0)) + .set(state.ids.expbar, ui); + + // Exp-Text + Text::new(&exp_treshold) + .mid_top_with_margin_on(state.ids.expbar, 10.0) + .font_id(self.fonts.cyri.conrod_id) + .font_size(self.fonts.cyri.scale(15)) + .color(TEXT_COLOR) + .set(state.ids.exp, ui); + + // Divider + /*Image::new(self.imgs.divider) + .w_h(50.0, 5.0) + .mid_top_with_margin_on(state.ids.exp, 30.0) + .color(Some(UI_HIGHLIGHT_0)) + .set(state.ids.divider, ui);*/ + + // Stats + Text::new( + &self + .localized_strings + .get("character_window.character_stats"), + ) + .top_left_with_margins_on(state.ids.stats_alignment, 120.0, 150.0) + .font_id(self.fonts.cyri.conrod_id) + .font_size(self.fonts.cyri.scale(16)) + .color(TEXT_COLOR) + .set(state.ids.statnames, ui); + Image::new(self.imgs.endurance_ico) + .w_h(30.0, 30.0) + .top_left_with_margins_on(state.ids.statnames, -10.0, -40.0) + .color(Some(UI_HIGHLIGHT_0)) + .set(state.ids.end_ico, ui); + Image::new(self.imgs.fitness_ico) + .w_h(30.0, 30.0) + .down_from(state.ids.end_ico, 10.0) + .color(Some(UI_HIGHLIGHT_0)) + .set(state.ids.fit_ico, ui); + Image::new(self.imgs.willpower_ico) + .w_h(30.0, 30.0) + .down_from(state.ids.fit_ico, 10.0) + .color(Some(UI_HIGHLIGHT_0)) + .set(state.ids.wp_ico, ui); + + Text::new(&format!( + "{}\n\n{}\n\n{}", + self.stats.endurance, self.stats.fitness, self.stats.willpower + )) + .top_right_with_margins_on(state.ids.stats_alignment, 120.0, 150.0) + .font_id(self.fonts.cyri.conrod_id) + .font_size(self.fonts.cyri.scale(16)) + .color(TEXT_COLOR) + .set(state.ids.stats, ui); + } + // Bag Slots // Create available inventory slot widgets if state.ids.inv_slots.len() < inventory.len() { state.update(|s| { @@ -161,6 +612,20 @@ impl<'a> Widget for Bag<'a> { .resize(inventory.len(), &mut ui.widget_id_generator()); }); } + if state.ids.amounts.len() < inventory.len() { + state.update(|s| { + s.ids + .amounts + .resize(inventory.len(), &mut ui.widget_id_generator()); + }); + } + if state.ids.amounts_bg.len() < inventory.len() { + state.update(|s| { + s.ids + .amounts_bg + .resize(inventory.len(), &mut ui.widget_id_generator()); + }); + } // Expand img id cache to the number of slots if state.img_id_cache.len() < inventory.len() { state.update(|s| { @@ -170,8 +635,8 @@ impl<'a> Widget for Bag<'a> { // Display inventory contents for (i, item) in inventory.slots().iter().enumerate() { - let x = i % 5; - let y = i / 5; + let x = i % 9; + let y = i / 9; let is_selected = Some(i) == state.selected_slot; @@ -184,15 +649,11 @@ impl<'a> Widget for Bag<'a> { }) .top_left_with_margins_on( state.ids.inv_alignment, - 0.0 + y as f64 * (40.0 + 2.0), - 0.0 + x as f64 * (40.0 + 2.0), + 0.0 + y as f64 * (40.0), + 0.0 + x as f64 * (40.0), ) - .wh(if is_selected { [40.0; 2] } else { [40.0; 2] }) - .image_color(if is_selected { - color::WHITE - } else { - color::DARK_YELLOW - }); + .wh([40.0; 2]) + .image_color(UI_MAIN); let slot_widget_clicked = if let Some(item) = item { slot_widget @@ -229,6 +690,7 @@ impl<'a> Widget for Bag<'a> { } // Item if let Some(kind) = item.as_ref().map(|i| ItemKey::from(i)) { + //Stack Size Button::image(match &state.img_id_cache[i] { Some((cached_kind, id)) if cached_kind == &kind => *id, _ => { @@ -238,20 +700,39 @@ impl<'a> Widget for Bag<'a> { .unwrap_or(self.imgs.not_found); state.update(|s| s.img_id_cache[i] = Some((kind, id))); id - } + }, }) .wh(if is_selected { [32.0; 2] } else { [30.0; 2] }) - .middle_of(state.ids.inv_slots[i]) // TODO: Items need to be assigned to a certain slot and then placed like in this example - //.label("5x") // TODO: Quantity goes here... - //.label_font_id(self.fonts.opensans) - //.label_font_size(12) - //.label_x(Relative::Scalar(10.0)) - //.label_y(Relative::Scalar(-10.0)) - //.label_color(TEXT_COLOR) - //.parent(state.ids.inv_slots[i]) + .middle_of(state.ids.inv_slots[i]) .graphics_for(state.ids.inv_slots[i]) .set(state.ids.items[i], ui); } + if let Some(item) = item { + if let Some(amount) = match item.kind { + ItemKind::Tool { .. } | ItemKind::Armor { .. } => None, + ItemKind::Utility { amount, .. } + | ItemKind::Consumable { amount, .. } + | ItemKind::Ingredient { amount, .. } => Some(amount), + } { + if amount > 1 { + Text::new(&format!("{}", &amount)) + .top_right_with_margins_on(state.ids.items[i], -4.0, 0.0) + .font_id(self.fonts.cyri.conrod_id) + .floating(true) + .font_size(self.fonts.cyri.scale(12)) + .color(Color::Rgba(0.0, 0.0, 0.0, 1.0)) + .floating(true) + .set(state.ids.amounts_bg[i], ui); + Text::new(&format!("{}", &amount)) + .bottom_left_with_margins_on(state.ids.amounts_bg[i], 1.0, 1.0) + .font_id(self.fonts.cyri.conrod_id) + .font_size(self.fonts.cyri.scale(12)) + .color(TEXT_COLOR) + .floating(true) + .set(state.ids.amounts[i], ui); + } + } + } } // Drop selected item @@ -261,19 +742,75 @@ impl<'a> Widget for Bag<'a> { state.update(|s| s.selected_slot = None); } } - + // Stats Button + if Button::image(self.imgs.button) + .w_h(92.0, 22.0) + .mid_top_with_margin_on(state.ids.bg, 435.0) + .hover_image(self.imgs.button_hover) + .press_image(self.imgs.button_press) + .label(if self.show.stats { + &self.localized_strings.get("hud.bag.armor") + } else { + &self.localized_strings.get("hud.bag.stats") + }) + .label_y(conrod_core::position::Relative::Scalar(1.0)) + .label_color(TEXT_COLOR) + .label_font_size(self.fonts.cyri.scale(12)) + .label_font_id(self.fonts.cyri.conrod_id) + .set(state.ids.stats_button, ui) + .was_clicked() + { + return Some(Event::Stats); + }; + // Tabs + if Button::image(self.imgs.inv_tab_active) + .w_h(28.0, 44.0) + .bottom_left_with_margins_on(state.ids.bg, 172.0, 13.0) + .image_color(UI_MAIN) + .set(state.ids.tab_1, ui) + .was_clicked() + {} + if Button::image(self.imgs.inv_tab_inactive) + .w_h(28.0, 44.0) + .hover_image(self.imgs.inv_tab_inactive_hover) + .press_image(self.imgs.inv_tab_inactive_press) + .image_color(UI_HIGHLIGHT_0) + .down_from(state.ids.tab_1, 0.0) + .with_tooltip(self.tooltip_manager, "Not yet Available", "", &item_tooltip) + .set(state.ids.tab_2, ui) + .was_clicked() + {} + if Button::image(self.imgs.inv_tab_inactive) + .w_h(28.0, 44.0) + .hover_image(self.imgs.inv_tab_inactive_hover) + .press_image(self.imgs.inv_tab_inactive_press) + .down_from(state.ids.tab_2, 0.0) + .image_color(UI_HIGHLIGHT_0) + .with_tooltip(self.tooltip_manager, "Not yet Available", "", &item_tooltip) + .set(state.ids.tab_3, ui) + .was_clicked() + {} + if Button::image(self.imgs.inv_tab_inactive) + .w_h(28.0, 44.0) + .hover_image(self.imgs.inv_tab_inactive_hover) + .press_image(self.imgs.inv_tab_inactive_press) + .down_from(state.ids.tab_3, 0.0) + .image_color(UI_HIGHLIGHT_0) + .with_tooltip(self.tooltip_manager, "Not yet Available", "", &item_tooltip) + .set(state.ids.tab_4, ui) + .was_clicked() + {} // Close button - if Button::image(self.imgs.close_button) - .w_h(28.0, 28.0) - .hover_image(self.imgs.close_button_hover) - .press_image(self.imgs.close_button_press) - .top_right_with_margins_on(state.ids.bag_top, 0.0, 0.0) + if Button::image(self.imgs.close_btn) + .w_h(24.0, 25.0) + .hover_image(self.imgs.close_btn_hover) + .press_image(self.imgs.close_btn_press) + .top_right_with_margins_on(state.ids.bg, 0.0, 0.0) .set(state.ids.bag_close, ui) .was_clicked() { event = Some(Event::Close); } - event } } diff --git a/voxygen/src/hud/buttons.rs b/voxygen/src/hud/buttons.rs index 65c0a209c4..926436bc68 100644 --- a/voxygen/src/hud/buttons.rs +++ b/voxygen/src/hud/buttons.rs @@ -1,21 +1,19 @@ +use super::{img_ids::Imgs, Windows, BLACK, CRITICAL_HP_COLOR, LOW_HP_COLOR, TEXT_COLOR}; +use crate::ui::{fonts::ConrodVoxygenFonts, ToggleButton}; +use client::Client; use conrod_core::{ widget::{self, Button, Image, Text}, widget_ids, Colorable, Labelable, Positionable, Sizeable, Widget, WidgetCommon, }; -use super::{img_ids::Imgs, Windows, TEXT_COLOR}; -use crate::ui::{fonts::ConrodVoxygenFonts, ToggleButton}; - widget_ids! { struct Ids { bag, bag_text, + bag_space_bg, + bag_space, bag_show_map, - character_button, - character_button_bg, map_button, - qlog_button, - qlog_button_bg, settings_button, social_button, social_button_bg, @@ -26,6 +24,7 @@ widget_ids! { #[derive(WidgetCommon)] pub struct Buttons<'a> { + client: &'a Client, open_windows: &'a Windows, show_map: bool, show_bag: bool, @@ -38,6 +37,7 @@ pub struct Buttons<'a> { impl<'a> Buttons<'a> { pub fn new( + client: &'a Client, open_windows: &'a Windows, show_map: bool, show_bag: bool, @@ -45,6 +45,7 @@ impl<'a> Buttons<'a> { fonts: &'a ConrodVoxygenFonts, ) -> Self { Self { + client, open_windows, show_map, show_bag, @@ -65,8 +66,6 @@ pub enum Event { ToggleMap, ToggleSocial, ToggleSpell, - ToggleQuest, - ToggleCharacter, } impl<'a> Widget for Buttons<'a> { @@ -84,6 +83,11 @@ impl<'a> Widget for Buttons<'a> { fn update(self, args: widget::UpdateArgs) -> Self::Event { let widget::UpdateArgs { state, ui, .. } = args; + let invs = self.client.inventories(); + let inventory = match invs.get(self.client.entity()) { + Some(inv) => inv, + None => return None, + }; // Bag if !self.show_map { @@ -116,6 +120,30 @@ impl<'a> Widget for Buttons<'a> { .color(TEXT_COLOR) .set(state.ids.bag_text, ui); } + if !self.show_bag { + let space_used = inventory.amount; + let space_max = inventory.slots.len(); + let bag_space = format!("{}/{}", space_used, space_max); + let bag_space_percentage = space_used as f32 / space_max as f32; + Text::new(&bag_space) + .mid_top_with_margin_on(state.ids.bag, -15.0) + .font_size(12) + .font_id(self.fonts.cyri.conrod_id) + .color(BLACK) + .set(state.ids.bag_space_bg, ui); + Text::new(&bag_space) + .top_left_with_margins_on(state.ids.bag_space_bg, -1.0, -1.0) + .font_size(12) + .font_id(self.fonts.cyri.conrod_id) + .color(if bag_space_percentage < 0.8 { + TEXT_COLOR + } else if bag_space_percentage < 1.0 { + LOW_HP_COLOR + } else { + CRITICAL_HP_COLOR + }) + .set(state.ids.bag_space, ui); + } // 0 Settings if Button::image(self.imgs.settings) @@ -169,15 +197,6 @@ impl<'a> Widget for Buttons<'a> { .w_h(28.0, 25.0) .left_from(state.ids.map_button, 10.0) .set(state.ids.spellbook_button_bg, ui); - Image::new(self.imgs.character_button) - .w_h(27.0, 25.0) - .left_from(state.ids.spellbook_button_bg, 10.0) - .set(state.ids.character_button_bg, ui); - Image::new(self.imgs.qlog_button) - .w_h(23.0, 25.0) - .left_from(state.ids.character_button_bg, 10.0) - .set(state.ids.qlog_button_bg, ui); - // Other Windows can only be accessed when `Settings` is closed. // Opening `Settings` will close all other Windows, including the `Bag`. // Opening the `Map` won't close the previously displayed windows. @@ -217,42 +236,6 @@ impl<'a> Widget for Buttons<'a> { { return Some(Event::ToggleSpell); } - - // 4 Char-Window - if Button::image(self.imgs.character_button) - .w_h(27.0, 25.0) - .left_from(state.ids.spellbook_button, 10.0) - .hover_image(self.imgs.character_hover) - .press_image(self.imgs.character_press) - .label("C") - .label_font_id(self.fonts.cyri.conrod_id) - .label_font_size(10) - .label_color(TEXT_COLOR) - .label_y(conrod_core::position::Relative::Scalar(-7.0)) - .label_x(conrod_core::position::Relative::Scalar(10.0)) - .set(state.ids.character_button, ui) - .was_clicked() - { - return Some(Event::ToggleCharacter); - } - - // 5 Quest-Log - if Button::image(self.imgs.qlog_button) - .w_h(23.0, 25.0) - .left_from(state.ids.character_button, 10.0) - .hover_image(self.imgs.qlog_hover) - .press_image(self.imgs.qlog_press) - .label("L") - .label_font_id(self.fonts.cyri.conrod_id) - .label_font_size(10) - .label_color(TEXT_COLOR) - .label_y(conrod_core::position::Relative::Scalar(-7.0)) - .label_x(conrod_core::position::Relative::Scalar(10.0)) - .set(state.ids.qlog_button, ui) - .was_clicked() - { - return Some(Event::ToggleQuest); - } } None diff --git a/voxygen/src/hud/character_window.rs b/voxygen/src/hud/character_window.rs deleted file mode 100644 index 48b460a16f..0000000000 --- a/voxygen/src/hud/character_window.rs +++ /dev/null @@ -1,416 +0,0 @@ -use super::{img_ids::Imgs, Show, TEXT_COLOR, XP_COLOR}; -use crate::{i18n::VoxygenLocalization, ui::fonts::ConrodVoxygenFonts}; -use common::comp::Stats; -use conrod_core::{ - color, - widget::{self, Button, Image, Rectangle, Text}, - widget_ids, Color, Colorable, Positionable, Sizeable, Widget, WidgetCommon, -}; - -widget_ids! { - pub struct Ids { - charwindow, - charwindow_gradient, - charwindow_close, - charwindow_exp_progress_rectangle, - charwindow_exp_rectangle, - charwindow_frame, - content_align, - charwindow_rectangle, - charwindow_tab1, - charwindow_tab1_exp, - charwindow_tab1_expbar, - charwindow_tab1_level, - charwindow_tab1_statnames, - charwindow_tab1_stats, - charwindow_tab_bg, - charwindow_title, - window_3, - tab_bg, - tab_small_open, - tab_small_closed, - xp_charwindow, - divider, - head_bg, - shoulders_bg, - hands_bg, - belt_bg, - legs_bg, - feet_bg, - ring_r_bg, - ring_l_bg, - tabard_bg, - chest_bg, - back_bg, - gem_bg, - necklace_bg, - mainhand_bg, - offhand_bg, - charwindow_bg, - head_grid, - shoulders_grid, - hands_grid, - belt_grid, - legs_grid, - feet_grid, - ring_r_grid, - ring_l_grid, - tabard_grid, - chest_grid, - back_grid, - gem_grid, - necklace_grid, - mainhand_grid, - offhand_grid, - - - } -} - -#[derive(WidgetCommon)] -pub struct CharacterWindow<'a> { - _show: &'a Show, - imgs: &'a Imgs, - fonts: &'a ConrodVoxygenFonts, - stats: &'a Stats, - localized_strings: &'a std::sync::Arc, - - #[conrod(common_builder)] - common: widget::CommonBuilder, -} - -impl<'a> CharacterWindow<'a> { - pub fn new( - _show: &'a Show, - stats: &'a Stats, - imgs: &'a Imgs, - fonts: &'a ConrodVoxygenFonts, - localized_strings: &'a std::sync::Arc, - ) -> Self { - Self { - _show, - imgs, - fonts, - stats, - localized_strings, - common: widget::CommonBuilder::default(), - } - } -} - -/*pub struct State { - ids: Ids, -}*/ - -pub enum Event { - Close, -} - -impl<'a> Widget for CharacterWindow<'a> { - type Event = Option; - type State = Ids; - type Style = (); - - fn init_state(&self, id_gen: widget::id::Generator) -> Self::State { Ids::new(id_gen) } - - fn style(&self) -> Self::Style { () } - - fn update(self, args: widget::UpdateArgs) -> Self::Event { - let widget::UpdateArgs { id, state, ui, .. } = args; - - let exp_percentage = (self.stats.exp.current() as f64) / (self.stats.exp.maximum() as f64); - let exp_treshold = format!("{}/{}", self.stats.exp.current(), self.stats.exp.maximum()); - let level = (self.stats.level.level()).to_string(); - - // Frame - Image::new(self.imgs.window_3) - .middle_of(id) - .top_left_with_margins_on(ui.window, 200.0, 215.0) - .w_h(103.0 * 4.0, 122.0 * 4.0) - .set(state.charwindow_frame, ui); - - // Icon - //Image::new(self.imgs.charwindow_icon) - //.w_h(40.0, 40.0) - //.top_left_with_margins_on(state.charwindow_frame, 4.0, 4.0) - //.set(state.charwindow_icon, ui); - - // X-Button - if Button::image(self.imgs.close_button) - .w_h(28.0, 28.0) - .hover_image(self.imgs.close_button_hover) - .press_image(self.imgs.close_button_press) - .top_right_with_margins_on(state.charwindow_frame, 0.0, 0.0) - .set(state.charwindow_close, ui) - .was_clicked() - { - return Some(Event::Close); - } - - // Title - // TODO: Use an actual character name. - Text::new( - &self - .localized_strings - .get("character_window.character_name"), - ) - .mid_top_with_margin_on(state.charwindow_frame, 6.0) - .font_id(self.fonts.cyri.conrod_id) - .font_size(self.fonts.cyri.scale(14)) - .color(TEXT_COLOR) - .set(state.charwindow_title, ui); - - // Content Alignment - Rectangle::fill_with([95.0 * 4.0, 108.0 * 4.0], color::TRANSPARENT) - .mid_top_with_margin_on(state.charwindow_frame, 40.0) - .set(state.content_align, ui); - - // Gradient BG - Image::new(self.imgs.charwindow_gradient) - .w_h(95.0 * 4.0, 108.0 * 4.0) - .middle_of(state.content_align) - .set(state.charwindow_gradient, ui); - - // Contents - - // Head - Image::new(self.imgs.head_bg) - .w_h(28.0 * 1.8, 28.0 * 1.8) - .mid_top_with_margin_on(state.content_align, 5.0) - .color(Some(Color::Rgba(1.0, 1.0, 1.0, 0.1))) - .set(state.head_bg, ui); - Button::image(self.imgs.grid) - .w_h(28.0 * 1.8, 28.0 * 1.8) - .middle_of(state.head_bg) - .set(state.head_grid, ui); - - // Ring R - Image::new(self.imgs.ring_r_bg) - .w_h(28.0 * 1.8, 28.0 * 1.8) - .bottom_right_with_margins_on(state.content_align, 20.0, 20.0) - .color(Some(Color::Rgba(1.0, 1.0, 1.0, 0.1))) - .set(state.ring_r_bg, ui); - Button::image(self.imgs.grid) - .w_h(28.0 * 1.8, 28.0 * 1.8) - .middle_of(state.ring_r_bg) - .set(state.ring_r_grid, ui); - // Feet - Image::new(self.imgs.feet_bg) - .w_h(28.0 * 1.8, 28.0 * 1.8) - .up_from(state.ring_r_bg, 10.0) - .color(Some(Color::Rgba(1.0, 1.0, 1.0, 0.1))) - .set(state.feet_bg, ui); - Button::image(self.imgs.grid) - .w_h(28.0 * 1.8, 28.0 * 1.8) - .middle_of(state.feet_bg) - .set(state.feet_grid, ui); - // Legs - Image::new(self.imgs.legs_bg) - .w_h(28.0 * 1.8, 28.0 * 1.8) - .up_from(state.feet_bg, 10.0) - .color(Some(Color::Rgba(1.0, 1.0, 1.0, 0.1))) - .set(state.legs_bg, ui); - Button::image(self.imgs.grid) - .w_h(28.0 * 1.8, 28.0 * 1.8) - .middle_of(state.legs_bg) - .set(state.legs_grid, ui); - // Belt - Image::new(self.imgs.belt_bg) - .w_h(28.0 * 1.8, 28.0 * 1.8) - .up_from(state.legs_bg, 10.0) - .color(Some(Color::Rgba(1.0, 1.0, 1.0, 0.1))) - .set(state.belt_bg, ui); - Button::image(self.imgs.grid) - .w_h(28.0 * 1.8, 28.0 * 1.8) - .middle_of(state.belt_bg) - .set(state.belt_grid, ui); - // Hands - Image::new(self.imgs.hands_bg) - .w_h(28.0 * 1.8, 28.0 * 1.8) - .up_from(state.belt_bg, 10.0) - .color(Some(Color::Rgba(1.0, 1.0, 1.0, 0.1))) - .set(state.hands_bg, ui); - Button::image(self.imgs.grid) - .w_h(28.0 * 1.8, 28.0 * 1.8) - .middle_of(state.hands_bg) - .set(state.hands_grid, ui); - // Shoulders - Image::new(self.imgs.shoulders_bg) - .w_h(28.0 * 1.8, 28.0 * 1.8) - .up_from(state.hands_bg, 10.0) - .color(Some(Color::Rgba(1.0, 1.0, 1.0, 0.1))) - .set(state.shoulders_bg, ui); - Button::image(self.imgs.grid) - .w_h(28.0 * 1.8, 28.0 * 1.8) - .middle_of(state.shoulders_bg) - .set(state.shoulders_grid, ui); - // Ring L - Image::new(self.imgs.ring_l_bg) - .w_h(28.0 * 1.8, 28.0 * 1.8) - .bottom_left_with_margins_on(state.content_align, 20.0, 20.0) - .color(Some(Color::Rgba(1.0, 1.0, 1.0, 0.1))) - .set(state.ring_l_bg, ui); - Button::image(self.imgs.grid) - .w_h(28.0 * 1.8, 28.0 * 1.8) - .middle_of(state.ring_l_bg) - .set(state.ring_l_grid, ui); - // Tabard - Image::new(self.imgs.tabard_bg) - .w_h(28.0 * 1.8, 28.0 * 1.8) - .up_from(state.ring_l_bg, 10.0) - .color(Some(Color::Rgba(1.0, 1.0, 1.0, 0.1))) - .set(state.tabard_bg, ui); - Button::image(self.imgs.grid) - .w_h(28.0 * 1.8, 28.0 * 1.8) - .middle_of(state.tabard_bg) - .set(state.tabard_grid, ui); - // Chest - Image::new(self.imgs.chest_bg) - .w_h(28.0 * 1.8, 28.0 * 1.8) - .up_from(state.tabard_bg, 10.0) - .color(Some(Color::Rgba(1.0, 1.0, 1.0, 0.1))) - .set(state.chest_bg, ui); - Button::image(self.imgs.grid) - .w_h(28.0 * 1.8, 28.0 * 1.8) - .middle_of(state.chest_bg) - .set(state.chest_grid, ui); - // Back - Image::new(self.imgs.back_bg) - .w_h(28.0 * 1.8, 28.0 * 1.8) - .up_from(state.chest_bg, 10.0) - .color(Some(Color::Rgba(1.0, 1.0, 1.0, 0.1))) - .set(state.back_bg, ui); - Button::image(self.imgs.grid) - .w_h(28.0 * 1.8, 28.0 * 1.8) - .middle_of(state.back_bg) - .set(state.back_grid, ui); - // Gem - Image::new(self.imgs.gem_bg) - .w_h(28.0 * 1.8, 28.0 * 1.8) - .up_from(state.back_bg, 10.0) - .color(Some(Color::Rgba(1.0, 1.0, 1.0, 0.1))) - .set(state.gem_bg, ui); - Button::image(self.imgs.grid) - .w_h(28.0 * 1.8, 28.0 * 1.8) - .middle_of(state.gem_bg) - .set(state.gem_grid, ui); - // Necklace - Image::new(self.imgs.necklace_bg) - .w_h(28.0 * 1.8, 28.0 * 1.8) - .up_from(state.gem_bg, 10.0) - .color(Some(Color::Rgba(1.0, 1.0, 1.0, 0.1))) - .set(state.necklace_bg, ui); - Button::image(self.imgs.grid) - .w_h(28.0 * 1.8, 28.0 * 1.8) - .middle_of(state.necklace_bg) - .set(state.necklace_grid, ui); - - // Weapon Main Hand - Image::new(self.imgs.mainhand_bg) - .w_h(28.0 * 2.2, 28.0 * 2.2) - .bottom_right_with_margins_on(state.ring_l_bg, 0.0, -115.0) - .color(Some(Color::Rgba(1.0, 1.0, 1.0, 0.1))) - .set(state.mainhand_bg, ui); - Button::image(self.imgs.grid) - .w_h(28.0 * 2.2, 28.0 * 2.2) - .middle_of(state.mainhand_bg) - .set(state.mainhand_grid, ui); - // Weapon Off-Hand - Image::new(self.imgs.offhand_bg) - .w_h(28.0 * 2.2, 28.0 * 2.2) - .bottom_left_with_margins_on(state.ring_r_bg, 0.0, -115.0) - .color(Some(Color::Rgba(1.0, 1.0, 1.0, 0.1))) - .set(state.offhand_bg, ui); - Button::image(self.imgs.grid) - .w_h(28.0 * 2.2, 28.0 * 2.2) - .middle_of(state.offhand_bg) - .set(state.offhand_grid, ui); - - // Stats Tab - - // Tab BG - Image::new(self.imgs.tab_bg) - .w_h(51.0 * 4.0, 115.0 * 4.0) - .top_left_with_margins_on(state.charwindow_frame, 28.0, -200.0) - .set(state.charwindow_tab_bg, ui); - - // Tab Rectangle - Rectangle::fill_with([45.0 * 4.0, 104.0 * 4.0], color::TRANSPARENT) - .top_left_with_margins_on(state.charwindow_tab_bg, 7.0 * 4.0, 4.0 * 4.0) - .set(state.charwindow_rectangle, ui); - - // TODO: Add this back in when we have multiple tabs. - // Tab Button -> - // Button::image(self.imgs.charwindow_tab) - //.w_h(65.0, 23.0) - //.top_left_with_margins_on(state.charwindow_tab_bg, -18.0, 1.8) - //.label("Stats") - //.label_color(TEXT_COLOR) - //.label_font_size(14) - //.set(state.charwindow_tab1, ui); - - // Level - Text::new(&level) - .mid_top_with_margin_on(state.charwindow_rectangle, 10.0) - .font_id(self.fonts.cyri.conrod_id) - .font_size(self.fonts.cyri.scale(30)) - .color(TEXT_COLOR) - .set(state.charwindow_tab1_level, ui); - - // Exp-Bar Background - Rectangle::fill_with([170.0, 10.0], color::BLACK) - .mid_top_with_margin_on(state.charwindow_rectangle, 50.0) - .set(state.charwindow_exp_rectangle, ui); - - // Exp-Bar Progress - Rectangle::fill_with([170.0 * (exp_percentage), 6.0], XP_COLOR) // 0.8 = Experience percentage - .mid_left_with_margin_on(state.charwindow_tab1_expbar, 1.0) - .set(state.charwindow_exp_progress_rectangle, ui); - - // Exp-Bar Foreground Frame - Image::new(self.imgs.progress_frame) - .w_h(170.0, 10.0) - .middle_of(state.charwindow_exp_rectangle) - .set(state.charwindow_tab1_expbar, ui); - - // Exp-Text - Text::new(&exp_treshold) - .mid_top_with_margin_on(state.charwindow_tab1_expbar, 10.0) - .font_id(self.fonts.cyri.conrod_id) - .font_size(self.fonts.cyri.scale(15)) - .color(TEXT_COLOR) - .set(state.charwindow_tab1_exp, ui); - - // Divider - - Image::new(self.imgs.divider) - .w_h(38.0 * 4.0, 5.0 * 4.0) - .mid_top_with_margin_on(state.charwindow_tab1_exp, 30.0) - .set(state.divider, ui); - - // Stats - Text::new( - &self - .localized_strings - .get("character_window.character_stats"), - ) - .top_left_with_margins_on(state.charwindow_rectangle, 140.0, 5.0) - .font_id(self.fonts.cyri.conrod_id) - .font_size(self.fonts.cyri.scale(16)) - .color(TEXT_COLOR) - .set(state.charwindow_tab1_statnames, ui); - - // TODO: Shows actual stat points. - Text::new(&format!( - "{}\n\n{}\n\n{}", - self.stats.endurance, self.stats.fitness, self.stats.willpower - )) - .top_right_with_margins_on(state.charwindow_rectangle, 140.0, 5.0) - .font_id(self.fonts.cyri.conrod_id) - .font_size(self.fonts.cyri.scale(16)) - .color(TEXT_COLOR) - .set(state.charwindow_tab1_stats, ui); - - None - } -} diff --git a/voxygen/src/hud/esc_menu.rs b/voxygen/src/hud/esc_menu.rs index a1d547107f..230d23b2df 100644 --- a/voxygen/src/hud/esc_menu.rs +++ b/voxygen/src/hud/esc_menu.rs @@ -83,12 +83,6 @@ impl<'a> Widget for EscMenu<'a> { .mid_top_with_margin_on(state.ids.esc_bg, -34.0) .set(state.ids.banner_top, ui); - /*Image::new(self.imgs.fireplace) - .w_h(210.0, 60.0) - .color(Some(Color::Rgba(1.0, 1.0, 1.0, 0.8))) - .mid_top_with_margin_on(state.ids.esc_bg, 5.0) - .set(state.ids.fireplace, ui);*/ - // Resume if Button::image(self.imgs.button) .mid_bottom_with_margin_on(state.ids.banner_top, -60.0) diff --git a/voxygen/src/hud/img_ids.rs b/voxygen/src/hud/img_ids.rs index 8139982d88..b62913d453 100644 --- a/voxygen/src/hud/img_ids.rs +++ b/voxygen/src/hud/img_ids.rs @@ -9,12 +9,11 @@ rotation_image_ids! { tt_side: "voxygen/element/frames/tt_test_edge", tt_corner: "voxygen/element/frames/tt_test_corner_tr", + + indicator_mmap_small: "voxygen.element.buttons.indicator_mmap_small", ////////////////////////////////////////////////////////////////////////////////////////////////////// - - // Minimap - indicator_mmap_small: "voxygen.element.buttons.indicator_mmap_small", } } @@ -22,16 +21,6 @@ image_ids! { pub struct Imgs { - // Bag - bag_contents: "voxygen.element.frames.bag", - inv_grid: "voxygen.element.frames.inv_grid", - inv_slot: "voxygen.element.buttons.inv_slot", - inv_slot_sel: "voxygen.element.buttons.inv_slot_sel", - grid_inv: "voxygen.element.buttons.grid_inv", - bag_top: "voxygen.element.bag.top", - bag_mid: "voxygen.element.bag.mid", - bag_bot: "voxygen.element.bag.bot", - // Skillbar xp_bar_mid: "voxygen.element.skillbar.xp_bar_mid", xp_bar_left: "voxygen.element.skillbar.xp_bar_left", @@ -67,10 +56,6 @@ image_ids! { tab_small_open: "voxygen.element.frames.tab_small_open", tab_small_closed: "voxygen.element.frames.tab_small_closed", - // MiniMap - mmap_frame: "voxygen.element.frames.mmap", - mmap_frame_closed: "voxygen.element.frames.mmap_closed", - // Missing: Buff Frame Animation .gif ?! we could do animation in ui.maintain, or in shader? window_frame: "voxygen.element.frames.window2", @@ -93,71 +78,30 @@ image_ids! { slider_indicator: "voxygen.element.slider.indicator", esc_frame: "voxygen.element.frames.esc_menu", - // Map Window - map_frame_l: "voxygen.element.frames.map_l", - map_frame_r: "voxygen.element.frames.map_r", - map_frame_bl: "voxygen.element.frames.map_bl", - map_frame_br: "voxygen.element.frames.map_br", - pos_indicator: "voxygen.element.buttons.qlog", - // Chat-Arrows chat_arrow: "voxygen.element.buttons.arrow_down", chat_arrow_mo: "voxygen.element.buttons.arrow_down_hover", chat_arrow_press: "voxygen.element.buttons.arrow_down_press", - // Crosshair - crosshair_inner: "voxygen.element.misc_bg.crosshair_inner", - //////////////////////////////////////////////////////////////////////// - // Esc-Menu - fireplace: "voxygen.element.misc_bg.fireplace", - // Skill Icons - twohsword_m1: "voxygen.element.icons.2hsword_m1", - twohsword_m2: "voxygen.element.icons.2hsword_m2", - twohhammer_m1: "voxygen.element.icons.2hhammer_m1", - twohhammer_m2: "voxygen.element.icons.2hhammer_m2", - twohaxe_m1: "voxygen.element.icons.2haxe_m1", - twohaxe_m2: "voxygen.element.icons.2haxe_m2", - bow_m1: "voxygen.element.icons.bow_m1", bow_m2: "voxygen.element.icons.bow_m2", - staff_m1: "voxygen.element.icons.staff_m1", - staff_m2: "voxygen.element.icons.staff_m2", - flyingrod_m1: "voxygen.element.icons.debug_wand_m1", - flyingrod_m2: "voxygen.element.icons.debug_wand_m2", - charge: "voxygen.element.icons.skill_charge_3", - // Icons flower: "voxygen.element.icons.item_flower", grass: "voxygen.element.icons.item_grass", - apple: "voxygen.element.icons.item_apple", - mushroom: "voxygen.element.icons.item_mushroom", - skull: "voxygen.element.icons.skull", - skull_2: "voxygen.element.icons.skull_2", + + // Minimap // Map - indicator_mmap: "voxygen.element.buttons.indicator_mmap", indicator_mmap_2: "voxygen.element.buttons.indicator_mmap_2", indicator_mmap_3: "voxygen.element.buttons.indicator_mmap_3", - // Crosshair - - crosshair_outer_round: "voxygen.element.misc_bg.crosshair_outer_1", - crosshair_outer_round_edges: "voxygen.element.misc_bg.crosshair_outer_2", - crosshair_outer_edges: "voxygen.element.misc_bg.crosshair_outer_3", - - crosshair_bg: "voxygen.element.misc_bg.crosshair_bg", - crosshair_bg_hover: "voxygen.element.misc_bg.crosshair_bg_hover", - crosshair_bg_press: "voxygen.element.misc_bg.crosshair_bg_press", - crosshair_bg_pressed: "voxygen.element.misc_bg.crosshair_bg_pressed", - // Checkboxes and Radio buttons - check: "voxygen.element.buttons.radio.inactive", check_mo: "voxygen.element.buttons.radio.inactive_hover", check_press: "voxygen.element.buttons.radio.press", @@ -169,20 +113,6 @@ image_ids! { checkbox_checked: "voxygen.element.buttons.checkbox.active", checkbox_checked_mo: "voxygen.element.buttons.checkbox.hover", - // Buttons - mmap_closed: "voxygen.element.buttons.button_mmap_closed", - mmap_closed_hover: "voxygen.element.buttons.button_mmap_closed_hover", - mmap_closed_press: "voxygen.element.buttons.button_mmap_closed_press", - mmap_open: "voxygen.element.buttons.button_mmap_open", - mmap_open_hover: "voxygen.element.buttons.button_mmap_open_hover", - mmap_open_press: "voxygen.element.buttons.button_mmap_open_press", - mmap_plus: "voxygen.element.buttons.min_plus.mmap_button-plus", - mmap_plus_hover: "voxygen.element.buttons.min_plus.mmap_button-plus_hover", - mmap_plus_press: "voxygen.element.buttons.min_plus.mmap_button-plus_press", - mmap_minus: "voxygen.element.buttons.min_plus.mmap_button-min", - mmap_minus_hover: "voxygen.element.buttons.min_plus.mmap_button-min_hover", - mmap_minus_press: "voxygen.element.buttons.min_plus.mmap_button-min_press", - // Grid grid: "voxygen.element.buttons.grid", grid_hover: "voxygen.element.buttons.grid", @@ -204,17 +134,102 @@ image_ids! { spellbook_hover: "voxygen.element.buttons.spellbook_hover", spellbook_press: "voxygen.element.buttons.spellbook_press", - character_button: "voxygen.element.buttons.character", - character_hover: "voxygen.element.buttons.character_hover", - character_press: "voxygen.element.buttons.character_press", - - qlog_button: "voxygen.element.buttons.qlog", - qlog_hover: "voxygen.element.buttons.qlog_hover", - qlog_press: "voxygen.element.buttons.qlog_press", - // Charwindow xp_charwindow: "voxygen.element.frames.xp_charwindow", divider: "voxygen.element.frames.divider_charwindow", + + + // Items + potion_red: "voxygen.voxel.object.potion_red", + potion_green: "voxygen.voxel.object.potion_green", + potion_blue: "voxygen.voxel.object.potion_blue", + key: "voxygen.voxel.object.key", + key_gold: "voxygen.voxel.object.key_gold", + + +////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + // Skill Icons + twohsword_m1: "voxygen.element.icons.2hsword_m1", + twohsword_m2: "voxygen.element.icons.2hsword_m2", + twohhammer_m1: "voxygen.element.icons.2hhammer_m1", + twohhammer_m2: "voxygen.element.icons.2hhammer_m2", + twohaxe_m1: "voxygen.element.icons.2haxe_m1", + twohaxe_m2: "voxygen.element.icons.2haxe_m2", + bow_m1: "voxygen.element.icons.bow_m1", + //bow_m2: "voxygen.element.icons.bow_m2", + staff_m1: "voxygen.element.icons.staff_m1", + staff_m2: "voxygen.element.icons.staff_m2", + flyingrod_m1: "voxygen.element.icons.debug_wand_m1", + flyingrod_m2: "voxygen.element.icons.debug_wand_m2", + charge: "voxygen.element.icons.skill_charge_3", + + // Other Icons/Art + skull: "voxygen.element.icons.skull", + skull_2: "voxygen.element.icons.skull_2", + fireplace: "voxygen.element.misc_bg.fireplace", + + // Crosshair + crosshair_inner: "voxygen.element.misc_bg.crosshair_inner", + + crosshair_outer_round: "voxygen.element.misc_bg.crosshair_outer_1", + crosshair_outer_round_edges: "voxygen.element.misc_bg.crosshair_outer_2", + crosshair_outer_edges: "voxygen.element.misc_bg.crosshair_outer_3", + + crosshair_bg: "voxygen.element.misc_bg.crosshair_bg", + crosshair_bg_hover: "voxygen.element.misc_bg.crosshair_bg_hover", + crosshair_bg_press: "voxygen.element.misc_bg.crosshair_bg_press", + crosshair_bg_pressed: "voxygen.element.misc_bg.crosshair_bg_pressed", + + // Map + map_bg: "voxygen.element.misc_bg.map_bg", + map_frame: "voxygen.element.misc_bg.map_frame", + map_frame_art: "voxygen.element.misc_bg.map_frame_art", + indicator_mmap: "voxygen.element.buttons.indicator_mmap", + + // MiniMap + mmap_frame: "voxygen.element.frames.mmap", + mmap_frame_2: "voxygen.element.frames.mmap_frame", + mmap_frame_closed: "voxygen.element.frames.mmap_closed", + mmap_closed: "voxygen.element.buttons.button_mmap_closed", + mmap_closed_hover: "voxygen.element.buttons.button_mmap_closed_hover", + mmap_closed_press: "voxygen.element.buttons.button_mmap_closed_press", + mmap_open: "voxygen.element.buttons.button_mmap_open", + mmap_open_hover: "voxygen.element.buttons.button_mmap_open_hover", + mmap_open_press: "voxygen.element.buttons.button_mmap_open_press", + mmap_plus: "voxygen.element.buttons.min_plus.mmap_button-plus", + mmap_plus_hover: "voxygen.element.buttons.min_plus.mmap_button-plus_hover", + mmap_plus_press: "voxygen.element.buttons.min_plus.mmap_button-plus_press", + mmap_minus: "voxygen.element.buttons.min_plus.mmap_button-min", + mmap_minus_hover: "voxygen.element.buttons.min_plus.mmap_button-min_hover", + mmap_minus_press: "voxygen.element.buttons.min_plus.mmap_button-min_press", + + // Close-Button + close_btn: "voxygen.element.buttons.close_btn", + close_btn_hover: "voxygen.element.buttons.close_btn_hover", + close_btn_press: "voxygen.element.buttons.close_btn_press", + close_button: "voxygen.element.buttons.close_btn", + close_button_hover: "voxygen.element.buttons.close_btn_hover", + close_button_press: "voxygen.element.buttons.close_btn_press", + + // Inventory + coin_ico: "voxygen.element.icons.coin", + inv_bg_armor: "voxygen.element.misc_bg.inv_bg_0", + inv_bg_stats: "voxygen.element.misc_bg.inv_bg_1", + inv_frame: "voxygen.element.misc_bg.inv_frame", + char_art: "voxygen.element.icons.character", + inv_slot: "voxygen.element.buttons.inv_slot", + inv_slot_sel: "voxygen.element.buttons.inv_slot_sel", + scrollbar_bg: "voxygen.element.slider.scrollbar", + inv_tab_active: "voxygen.element.buttons.inv_tab_active", + inv_tab_inactive: "voxygen.element.buttons.inv_tab_inactive", + inv_tab_inactive_hover: "voxygen.element.buttons.inv_tab_inactive", + inv_tab_inactive_press: "voxygen.element.buttons.inv_tab_inactive", + inv_slots: "voxygen.element.misc_bg.inv_slots", + inv_runes: "voxygen.element.misc_bg.inv_runes", + armor_slot: "voxygen.element.buttons.armor_slot", head_bg: "voxygen.element.icons.head", shoulders_bg: "voxygen.element.icons.shoulders", hands_bg: "voxygen.element.icons.hands", @@ -226,44 +241,25 @@ image_ids! { tabard_bg: "voxygen.element.icons.tabard", chest_bg: "voxygen.element.icons.chest", back_bg: "voxygen.element.icons.back", - gem_bg: "voxygen.element.icons.gem", necklace_bg: "voxygen.element.icons.necklace", mainhand_bg: "voxygen.element.icons.mainhand", offhand_bg: "voxygen.element.icons.offhand", - - // Close button - close_button: "voxygen.element.buttons.x", - close_button_hover: "voxygen.element.buttons.x_hover", - close_button_press: "voxygen.element.buttons.x_press", - - - // Items - potion_red: "voxygen.voxel.object.potion_red", - potion_green: "voxygen.voxel.object.potion_green", - potion_blue: "voxygen.voxel.object.potion_blue", - key: "voxygen.voxel.object.key", - key_gold: "voxygen.voxel.object.key_gold", - - - - - -////////////////////////////////////////////////////////////////////////////////////////////////////// - - + willpower_ico: "voxygen.element.icons.willpower", + endurance_ico: "voxygen.element.icons.endurance", + fitness_ico: "voxygen.element.icons.fitness", not_found:"voxygen.element.not_found", help:"voxygen.element.help", - charwindow_gradient:"voxygen.element.misc_bg.charwindow", - death_bg: "voxygen.background.death", hurt_bg: "voxygen.background.hurt", banner_top: "voxygen.element.frames.banner_top", - + // Icons + fire_spell_1: "voxygen.element.icons.fire_spell_0", + heal_0: "voxygen.element.icons.heal_0", // Buttons button: "voxygen.element.buttons.button", @@ -275,8 +271,6 @@ image_ids! { enemy_health_bg: "voxygen.element.frames.enemybar_bg", // Enemy Bar Content: enemy_bar: "voxygen.element.skillbar.enemy_bar_content", - // Spell Book Window - spellbook_icon: "voxygen.element.icons.spellbook", // Bag bag: "voxygen.element.buttons.bag.closed", bag_hover: "voxygen.element.buttons.bag.closed_hover", @@ -296,13 +290,6 @@ image_ids! { progress_frame: "voxygen.element.frames.progress_bar", progress: "voxygen.element.misc_bg.progress", - // Quest-Log Window - questlog_icon: "voxygen.element.icons.questlog", - - - // Social Window - social_icon: "voxygen.element.icons.social", - nothing: (), } diff --git a/voxygen/src/hud/item_imgs.rs b/voxygen/src/hud/item_imgs.rs index 2bc94ea31b..84566e45c0 100644 --- a/voxygen/src/hud/item_imgs.rs +++ b/voxygen/src/hud/item_imgs.rs @@ -1,7 +1,11 @@ use crate::ui::{Graphic, SampleStrat, Transform, Ui}; use common::{ assets::{self, watch::ReloadIndicator, Asset}, - comp::item::{Armor, Consumable, Ingredient, Item, ItemKind, Tool, Utility}, + comp::item::{ + armor::Armor, + tool::{Tool, ToolKind}, + Consumable, Ingredient, Item, ItemKind, Utility, + }, }; use conrod_core::image::Id; use dot_vox::DotVoxData; @@ -14,20 +18,21 @@ use vek::*; #[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum ItemKey { - Tool(Tool), + Tool(ToolKind), Armor(Armor), Utility(Utility), Consumable(Consumable), Ingredient(Ingredient), + Empty, } impl From<&Item> for ItemKey { fn from(item: &Item) -> Self { match &item.kind { - ItemKind::Tool { kind, .. } => ItemKey::Tool(kind.clone()), + ItemKind::Tool(Tool { kind, .. }) => ItemKey::Tool(kind.clone()), ItemKind::Armor { kind, .. } => ItemKey::Armor(kind.clone()), - ItemKind::Utility { kind } => ItemKey::Utility(kind.clone()), + ItemKind::Utility { kind, .. } => ItemKey::Utility(kind.clone()), ItemKind::Consumable { kind, .. } => ItemKey::Consumable(kind.clone()), - ItemKind::Ingredient(kind) => ItemKey::Ingredient(kind.clone()), + ItemKind::Ingredient { kind, .. } => ItemKey::Ingredient(kind.clone()), } } } @@ -73,7 +78,7 @@ impl Asset for ItemImagesSpec { const ENDINGS: &'static [&'static str] = &["ron"]; fn parse(buf_reader: BufReader) -> Result { - Ok(ron::de::from_reader(buf_reader).expect("Error parsing item images spec")) + ron::de::from_reader(buf_reader).map_err(assets::Error::parse_error) } } diff --git a/voxygen/src/hud/map.rs b/voxygen/src/hud/map.rs index 0b237c72ec..fcb29999d7 100644 --- a/voxygen/src/hud/map.rs +++ b/voxygen/src/hud/map.rs @@ -1,32 +1,40 @@ use super::{ img_ids::{Imgs, ImgsRot}, - Show, TEXT_COLOR, + Show, TEXT_COLOR, UI_HIGHLIGHT_0, UI_MAIN, +}; +use crate::{ + i18n::VoxygenLocalization, + ui::{fonts::ConrodVoxygenFonts, img_ids}, }; -use crate::ui::{fonts::ConrodVoxygenFonts, img_ids}; use client::{self, Client}; use common::{comp, terrain::TerrainChunkSize, vol::RectVolSize}; use conrod_core::{ color, widget::{self, Button, Image, Rectangle, Text}, - widget_ids, Color, Colorable, Positionable, Sizeable, Widget, WidgetCommon, + widget_ids, Colorable, Positionable, Sizeable, Widget, WidgetCommon, }; +//use const_tweaker::tweak; use specs::WorldExt; use vek::*; +/*#[tweak(min = 0.0, max = 40.0, step = 1.0)] +const X: f64 = 10.0; +#[tweak(min = 0.0, max = 40.0, step = 1.0)] +const Y: f64 = 10.0;*/ widget_ids! { struct Ids { - map_frame, - map_bg, - map_icon, - map_close, - map_title, - map_frame_l, - map_frame_r, - map_frame_bl, - map_frame_br, + frame, + bg, + icon, + close, + title, + map_align, + qlog_align, location_name, indicator, grid, + map_title, + qlog_title, } } @@ -41,7 +49,7 @@ pub struct Map<'a> { #[conrod(common_builder)] common: widget::CommonBuilder, _pulse: f32, - velocity: f32, + localized_strings: &'a std::sync::Arc, } impl<'a> Map<'a> { pub fn new( @@ -52,7 +60,7 @@ impl<'a> Map<'a> { world_map: &'a (img_ids::Rotations, Vec2), fonts: &'a ConrodVoxygenFonts, pulse: f32, - velocity: f32, + localized_strings: &'a std::sync::Arc, ) -> Self { Self { _show: show, @@ -63,7 +71,7 @@ impl<'a> Map<'a> { fonts, common: widget::CommonBuilder::default(), _pulse: pulse, - velocity, + localized_strings, } } } @@ -91,87 +99,96 @@ impl<'a> Widget for Map<'a> { fn update(self, args: widget::UpdateArgs) -> Self::Event { let widget::UpdateArgs { state, ui, .. } = args; - // Set map transparency to 0.5 when player is moving - let mut fade = 1.0; - if self.velocity > 2.5 { - fade = 0.7 - }; - - // BG - Rectangle::fill_with([824.0, 976.0], color::TRANSPARENT) - .mid_top_with_margin_on(ui.window, 15.0) - .scroll_kids() - .scroll_kids_vertically() - .set(state.ids.map_bg, ui); // Frame - Image::new(self.imgs.map_frame_l) - .top_left_with_margins_on(state.ids.map_bg, 0.0, 0.0) - .w_h(412.0, 488.0) - .color(Some(Color::Rgba(1.0, 1.0, 1.0, fade))) - .set(state.ids.map_frame_l, ui); - Image::new(self.imgs.map_frame_r) - .right_from(state.ids.map_frame_l, 0.0) - .color(Some(Color::Rgba(1.0, 1.0, 1.0, fade))) - .w_h(412.0, 488.0) - .set(state.ids.map_frame_r, ui); - Image::new(self.imgs.map_frame_br) - .down_from(state.ids.map_frame_r, 0.0) - .w_h(412.0, 488.0) - .color(Some(Color::Rgba(1.0, 1.0, 1.0, fade))) - .set(state.ids.map_frame_br, ui); - Image::new(self.imgs.map_frame_bl) - .down_from(state.ids.map_frame_l, 0.0) - .w_h(412.0, 488.0) - .color(Some(Color::Rgba(1.0, 1.0, 1.0, fade))) - .set(state.ids.map_frame_bl, ui); + Image::new(self.imgs.map_bg) + .w_h(1052.0, 886.0) + .mid_top_with_margin_on(ui.window, 5.0) + .color(Some(UI_MAIN)) + .set(state.ids.bg, ui); + + Image::new(self.imgs.map_frame) + .w_h(1052.0, 886.0) + .middle_of(state.ids.bg) + .color(Some(UI_HIGHLIGHT_0)) + .set(state.ids.frame, ui); + + // Map Content Alignment + Rectangle::fill_with([814.0, 834.0], color::TRANSPARENT) + .top_right_with_margins_on(state.ids.frame, 46.0, 2.0) + .set(state.ids.map_align, ui); + + // Questlog Content Alignment + Rectangle::fill_with([232.0, 814.0], color::TRANSPARENT) + .top_left_with_margins_on(state.ids.frame, 44.0, 2.0) + .set(state.ids.qlog_align, ui); // Icon Image::new(self.imgs.map_icon) - .w_h(224.0 / 3.0, 224.0 / 3.0) - .top_left_with_margins_on(state.ids.map_frame, -10.0, -10.0) - .color(Some(Color::Rgba(1.0, 1.0, 1.0, fade))) - .set(state.ids.map_icon, ui); + .w_h(30.0, 30.0) + .top_left_with_margins_on(state.ids.frame, 6.0, 8.0) + .set(state.ids.icon, ui); + + // Map Title + Text::new(&self.localized_strings.get("hud.map.map_title")) + .mid_top_with_margin_on(state.ids.frame, 3.0) + .font_id(self.fonts.cyri.conrod_id) + .font_size(self.fonts.cyri.scale(29)) + .color(TEXT_COLOR) + .set(state.ids.map_title, ui); + + // Questlog Title + Text::new(&format!( + "{}", + &self.localized_strings.get("hud.map.qlog_title") + )) + .mid_top_with_margin_on(state.ids.qlog_align, 6.0) + .font_id(self.fonts.cyri.conrod_id) + .font_size(self.fonts.cyri.scale(21)) + .color(TEXT_COLOR) + .set(state.ids.qlog_title, ui); // X-Button if Button::image(self.imgs.close_button) - .w_h(28.0, 28.0) - .hover_image(self.imgs.close_button_hover) - .press_image(self.imgs.close_button_press) - .color(Color::Rgba(1.0, 1.0, 1.0, fade - 0.5)) - .top_right_with_margins_on(state.ids.map_frame_r, 0.0, 0.0) - .set(state.ids.map_close, ui) + .w_h(24.0, 25.0) + .hover_image(self.imgs.close_btn_hover) + .press_image(self.imgs.close_btn_press) + .top_right_with_margins_on(state.ids.frame, 0.0, 0.0) + .set(state.ids.close, ui) .was_clicked() { return Some(Event::Close); } // Location Name - match self.client.current_chunk() { + /*match self.client.current_chunk() { Some(chunk) => Text::new(chunk.meta().name()) - .mid_top_with_margin_on(state.ids.map_bg, 55.0) + .mid_top_with_margin_on(state.ids.bg, 55.0) .font_size(self.fonts.alkhemi.scale(60)) .color(TEXT_COLOR) .font_id(self.fonts.alkhemi.conrod_id) - .parent(state.ids.map_frame_r) + .parent(state.ids.frame) .set(state.ids.location_name, ui), None => Text::new(" ") - .mid_top_with_margin_on(state.ids.map_bg, 3.0) + .mid_top_with_margin_on(state.ids.bg, 3.0) .font_size(self.fonts.alkhemi.scale(40)) .font_id(self.fonts.alkhemi.conrod_id) .color(TEXT_COLOR) .set(state.ids.location_name, ui), - } - + }*/ + Image::new(self.imgs.map_frame_art) + .mid_top_with_margin_on(state.ids.map_align, 5.0) + .w_h(765.0, 765.0) + .parent(state.ids.bg) + .set(state.ids.grid, ui); // Map Image let (world_map, worldsize) = self.world_map; let worldsize = worldsize.map2(TerrainChunkSize::RECT_SIZE, |e, f| e as f64 * f as f64); Image::new(world_map.none) - .middle_of(state.ids.map_bg) - .color(Some(Color::Rgba(1.0, 1.0, 1.0, fade + 0.5))) - .w_h(700.0, 700.0) - .parent(state.ids.map_bg) + .mid_top_with_margin_on(state.ids.map_align, 10.0) + .w_h(760.0, 760.0) + .parent(state.ids.bg) .set(state.ids.grid, ui); // Coordinates let player_pos = self @@ -182,8 +199,8 @@ impl<'a> Widget for Map<'a> { .get(self.client.entity()) .map_or(Vec3::zero(), |pos| pos.0); - let x = player_pos.x as f64 / worldsize.x * 700.0; - let y = player_pos.y as f64 / worldsize.y * 700.0; + let x = player_pos.x as f64 / worldsize.x * 760.0; + let y = player_pos.y as f64 / worldsize.y * 760.0; let indic_scale = 0.6; Image::new(self.rot_imgs.indicator_mmap_small.target_north) .bottom_left_with_margins_on( @@ -192,7 +209,7 @@ impl<'a> Widget for Map<'a> { x - 32.0 * indic_scale / 2.0, ) .w_h(32.0 * indic_scale, 37.0 * indic_scale) - .color(Some(Color::Rgba(1.0, 1.0, 1.0, 1.0))) + .color(Some(UI_HIGHLIGHT_0)) .floating(true) .parent(ui.window) .set(state.ids.indicator, ui); diff --git a/voxygen/src/hud/minimap.rs b/voxygen/src/hud/minimap.rs index 7fd5190b32..484fd6a1a1 100644 --- a/voxygen/src/hud/minimap.rs +++ b/voxygen/src/hud/minimap.rs @@ -1,6 +1,6 @@ use super::{ img_ids::{Imgs, ImgsRot}, - Show, HP_COLOR, TEXT_COLOR, + Show, HP_COLOR, TEXT_COLOR, UI_HIGHLIGHT_0, UI_MAIN, }; use crate::ui::{fonts::ConrodVoxygenFonts, img_ids}; use client::{self, Client}; @@ -17,6 +17,7 @@ use vek::*; widget_ids! { struct Ids { mmap_frame, + mmap_frame_2, mmap_frame_bg, mmap_location, mmap_button, @@ -103,14 +104,20 @@ impl<'a> Widget for MiniMap<'a> { fn update(self, args: widget::UpdateArgs) -> Self::Event { let widget::UpdateArgs { state, ui, .. } = args; let zoom = state.zoom; + const SCALE: f64 = 1.5; if self.show.mini_map { Image::new(self.imgs.mmap_frame) - .w_h(100.0 * 3.0, 100.0 * 3.0) - .top_right_with_margins_on(ui.window, 5.0, 5.0) + .w_h(174.0 * SCALE, 190.0 * SCALE) + .top_right_with_margins_on(ui.window, 0.0, 5.0) + .color(Some(UI_MAIN)) .set(state.ids.mmap_frame, ui); - - Rectangle::fill_with([92.0 * 3.0, 82.0 * 3.0], color::TRANSPARENT) - .mid_top_with_margin_on(state.ids.mmap_frame, 13.0 * 3.0 + 3.0) + Image::new(self.imgs.mmap_frame_2) + .w_h(174.0 * SCALE, 190.0 * SCALE) + .middle_of(state.ids.mmap_frame) + .color(Some(UI_HIGHLIGHT_0)) + .set(state.ids.mmap_frame_2, ui); + Rectangle::fill_with([170.0 * SCALE, 170.0 * SCALE], color::TRANSPARENT) + .mid_top_with_margin_on(state.ids.mmap_frame_2, 18.0 * SCALE) .set(state.ids.mmap_frame_bg, ui); // Map size @@ -138,10 +145,11 @@ impl<'a> Widget for MiniMap<'a> { let can_zoom_out = zoom > min_zoom; if Button::image(self.imgs.mmap_minus) - .w_h(100.0 * 0.30, 100.0 * 0.30) + .w_h(16.0 * SCALE, 18.0 * SCALE) .hover_image(self.imgs.mmap_minus_hover) .press_image(self.imgs.mmap_minus_press) .top_left_with_margins_on(state.ids.mmap_frame, 0.0, 0.0) + .image_color(UI_HIGHLIGHT_0) .enabled(can_zoom_out) .set(state.ids.mmap_minus, ui) .was_clicked() @@ -153,10 +161,11 @@ impl<'a> Widget for MiniMap<'a> { // set_image_dims(zoom); } if Button::image(self.imgs.mmap_plus) - .w_h(100.0 * 0.30, 100.0 * 0.30) + .w_h(18.0 * SCALE, 18.0 * SCALE) .hover_image(self.imgs.mmap_plus_hover) .press_image(self.imgs.mmap_plus_press) - .right_from(state.ids.mmap_minus, 6.0) + .right_from(state.ids.mmap_minus, 0.0) + .image_color(UI_HIGHLIGHT_0) .enabled(can_zoom_in) .set(state.ids.mmap_plus, ui) .was_clicked() @@ -195,7 +204,7 @@ impl<'a> Widget for MiniMap<'a> { // Map Image Image::new(world_map.source_north) .middle_of(state.ids.mmap_frame_bg) - .w_h(92.0 * 3.0, 82.0 * 3.0) + .w_h(170.0 * SCALE, 170.0 * SCALE) .parent(state.ids.mmap_frame_bg) .source_rectangle(rect_src) .set(state.ids.grid, ui); @@ -205,14 +214,15 @@ impl<'a> Widget for MiniMap<'a> { Image::new(self.rot_imgs.indicator_mmap_small.none) .middle_of(state.ids.grid) .w_h(32.0 * ind_scale, 37.0 * ind_scale) - .color(Some(Color::Rgba(1.0, 1.0, 1.0, 1.0))) + .color(Some(UI_HIGHLIGHT_0)) .floating(true) .parent(ui.window) .set(state.ids.indicator, ui); } else { Image::new(self.imgs.mmap_frame_closed) - .w_h(100.0 * 2.0, 11.0 * 2.0) - .top_right_with_margins_on(ui.window, 5.0, 5.0) + .w_h(174.0 * SCALE, 18.0 * SCALE) + .color(Some(UI_MAIN)) + .top_right_with_margins_on(ui.window, 0.0, 5.0) .set(state.ids.mmap_frame, ui); } @@ -221,11 +231,7 @@ impl<'a> Widget for MiniMap<'a> { } else { self.imgs.mmap_closed }) - .wh(if self.show.mini_map { - [100.0 * 0.3; 2] - } else { - [100.0 * 0.2; 2] - }) + .w_h(18.0 * SCALE, 18.0 * SCALE) .hover_image(if self.show.mini_map { self.imgs.mmap_open_hover } else { @@ -237,6 +243,7 @@ impl<'a> Widget for MiniMap<'a> { self.imgs.mmap_closed_press }) .top_right_with_margins_on(state.ids.mmap_frame, 0.0, 0.0) + .image_color(UI_HIGHLIGHT_0) .set(state.ids.mmap_button, ui) .was_clicked() { @@ -299,15 +306,8 @@ impl<'a> Widget for MiniMap<'a> { // Title match self.client.current_chunk() { Some(chunk) => Text::new(chunk.meta().name()) - .mid_top_with_margin_on( - state.ids.mmap_frame, - if self.show.mini_map { 6.0 } else { 0.0 }, - ) - .font_size( - self.fonts - .cyri - .scale(if self.show.mini_map { 20 } else { 18 }), - ) + .mid_top_with_margin_on(state.ids.mmap_frame, 2.0) + .font_size(self.fonts.cyri.scale(18)) .font_id(self.fonts.cyri.conrod_id) .color(TEXT_COLOR) .set(state.ids.mmap_location, ui), diff --git a/voxygen/src/hud/mod.rs b/voxygen/src/hud/mod.rs index f5a0a89ad8..706f909c90 100644 --- a/voxygen/src/hud/mod.rs +++ b/voxygen/src/hud/mod.rs @@ -1,13 +1,11 @@ mod bag; mod buttons; -mod character_window; mod chat; mod esc_menu; mod img_ids; mod item_imgs; mod map; mod minimap; -mod quest; mod settings_window; mod skillbar; mod social; @@ -19,7 +17,6 @@ use std::time::Duration; use bag::Bag; use buttons::Buttons; -use character_window::CharacterWindow; use chat::Chat; use chrono::NaiveTime; use esc_menu::EscMenu; @@ -27,7 +24,6 @@ use img_ids::Imgs; use item_imgs::ItemImgs; use map::Map; use minimap::MiniMap; -use quest::Quest; use serde::{Deserialize, Serialize}; use settings_window::{SettingsTab, SettingsWindow}; use skillbar::Skillbar; @@ -56,10 +52,12 @@ use vek::*; const XP_COLOR: Color = Color::Rgba(0.59, 0.41, 0.67, 1.0); const TEXT_COLOR: Color = Color::Rgba(1.0, 1.0, 1.0, 1.0); +const TEXT_BG: Color = Color::Rgba(0.0, 0.0, 0.0, 1.0); //const TEXT_COLOR_GREY: Color = Color::Rgba(1.0, 1.0, 1.0, 0.5); const MENU_BG: Color = Color::Rgba(0.0, 0.0, 0.0, 0.4); //const TEXT_COLOR_2: Color = Color::Rgba(0.0, 0.0, 0.0, 1.0); const TEXT_COLOR_3: Color = Color::Rgba(1.0, 1.0, 1.0, 0.1); +const BLACK: Color = Color::Rgba(0.0, 0.0, 0.0, 1.0); //const BG_COLOR: Color = Color::Rgba(1.0, 1.0, 1.0, 0.8); const HP_COLOR: Color = Color::Rgba(0.33, 0.63, 0.0, 1.0); const LOW_HP_COLOR: Color = Color::Rgba(0.93, 0.59, 0.03, 1.0); @@ -67,6 +65,8 @@ const CRITICAL_HP_COLOR: Color = Color::Rgba(0.79, 0.19, 0.17, 1.0); const MANA_COLOR: Color = Color::Rgba(0.29, 0.62, 0.75, 0.9); //const FOCUS_COLOR: Color = Color::Rgba(1.0, 0.56, 0.04, 1.0); //const RAGE_COLOR: Color = Color::Rgba(0.5, 0.04, 0.13, 1.0); + +// Chat Colors const META_COLOR: Color = Color::Rgba(1.0, 1.0, 0.0, 1.0); const TELL_COLOR: Color = Color::Rgba(0.98, 0.71, 1.0, 1.0); const PRIVATE_COLOR: Color = Color::Rgba(1.0, 1.0, 0.0, 1.0); // Difference between private and tell? @@ -77,6 +77,12 @@ const GROUP_COLOR: Color = Color::Rgba(0.47, 0.84, 1.0, 1.0); const FACTION_COLOR: Color = Color::Rgba(0.24, 1.0, 0.48, 1.0); const KILL_COLOR: Color = Color::Rgba(1.0, 0.17, 0.17, 1.0); +// UI Color-Theme +const UI_MAIN: Color = Color::Rgba(0.61, 0.70, 0.70, 1.0); // Greenish Blue +//const UI_MAIN: Color = Color::Rgba(0.1, 0.1, 0.1, 0.97); // Dark +const UI_HIGHLIGHT_0: Color = Color::Rgba(0.79, 1.09, 1.09, 1.0); +//const UI_DARK_0: Color = Color::Rgba(0.25, 0.37, 0.37, 1.0); + /// Distance at which nametags are visible const NAMETAG_RANGE: f32 = 40.0; /// Time nametags stay visible after doing damage even if they are out of range @@ -175,6 +181,10 @@ widget_ids! { small_window, social_window, settings_window, + + // Free look indicator + free_look_txt, + free_look_bg, } } @@ -226,6 +236,7 @@ pub enum Event { Logout, Quit, ChangeLanguage(LanguageMetadata), + ChangeFreeLookBehavior(PressBehavior), } // TODO: Are these the possible layouts we want? @@ -266,6 +277,11 @@ pub enum ShortcutNumbers { On, Off, } +#[derive(Clone, Copy, Debug, Serialize, Deserialize)] +pub enum PressBehavior { + Toggle = 0, + Hold = 1, +} pub struct Show { ui: bool, @@ -275,8 +291,6 @@ pub struct Show { bag: bool, social: bool, spell: bool, - quest: bool, - character_window: bool, esc_menu: bool, open_windows: Windows, map: bool, @@ -285,6 +299,8 @@ pub struct Show { settings_tab: SettingsTab, social_tab: SocialTab, want_grab: bool, + stats: bool, + free_look: bool, } impl Show { fn bag(&mut self, open: bool) { @@ -300,30 +316,15 @@ impl Show { self.want_grab = true; } - fn character_window(&mut self, open: bool) { - self.character_window = open; - self.bag = false; - self.want_grab = !open; - } - fn social(&mut self, open: bool) { self.social = open; self.spell = false; - self.quest = false; self.want_grab = !open; } fn spell(&mut self, open: bool) { self.social = false; self.spell = open; - self.quest = false; - self.want_grab = !open; - } - - fn quest(&mut self, open: bool) { - self.social = false; - self.spell = false; - self.quest = open; self.want_grab = !open; } @@ -331,8 +332,6 @@ impl Show { fn toggle_mini_map(&mut self) { self.mini_map = !self.mini_map; } - fn toggle_char_window(&mut self) { self.character_window = !self.character_window } - fn settings(&mut self, open: bool) { self.open_windows = if open { Windows::Settings @@ -342,7 +341,6 @@ impl Show { self.bag = false; self.social = false; self.spell = false; - self.quest = false; self.want_grab = !open; } @@ -362,9 +360,7 @@ impl Show { || self.esc_menu || self.map || self.social - || self.quest || self.spell - || self.character_window || match self.open_windows { Windows::None => false, _ => true, @@ -374,9 +370,7 @@ impl Show { self.esc_menu = false; self.map = false; self.social = false; - self.quest = false; self.spell = false; - self.character_window = false; self.open_windows = Windows::None; self.want_grab = true; @@ -406,25 +400,16 @@ impl Show { fn toggle_social(&mut self) { self.social = !self.social; self.spell = false; - self.quest = false; } fn open_social_tab(&mut self, social_tab: SocialTab) { self.social_tab = social_tab; self.spell = false; - self.quest = false; } fn toggle_spell(&mut self) { self.spell = !self.spell; self.social = false; - self.quest = false; - } - - fn toggle_quest(&mut self) { - self.quest = !self.quest; - self.spell = false; - self.social = false; } } @@ -499,14 +484,14 @@ impl Hud { map: false, ui: true, social: false, - quest: false, spell: false, - character_window: false, mini_map: true, settings_tab: SettingsTab::Interface, social_tab: SocialTab::Online, want_grab: true, ingame: true, + stats: false, + free_look: false, }, to_focus: None, never_show: false, @@ -868,7 +853,7 @@ impl Hud { .color(if floater.hp_change < 0 { Color::Rgba(0.0, 0.0, 0.0, fade) } else { - Color::Rgba(0.1, 1.0, 0.1, 0.0) + Color::Rgba(0.0, 0.0, 0.0, 1.0) }) .x_y(0.0, y - 3.0) .position_ingame(ingame_pos) @@ -880,7 +865,7 @@ impl Hud { .color(if floater.hp_change < 0 { Color::Rgba(font_col.r, font_col.g, font_col.b, fade) } else { - Color::Rgba(0.1, 1.0, 0.1, 0.0) + Color::Rgba(0.1, 1.0, 0.1, 1.0) }) .position_ingame(ingame_pos) .set(sct_id, ui_widgets); @@ -1601,6 +1586,7 @@ impl Hud { // Bag button and nearby icons match Buttons::new( + client, &self.show.open_windows, self.show.map, self.show.bag, @@ -1611,10 +1597,8 @@ impl Hud { { Some(buttons::Event::ToggleBag) => self.show.toggle_bag(), Some(buttons::Event::ToggleSettings) => self.show.toggle_settings(), - Some(buttons::Event::ToggleCharacter) => self.show.toggle_char_window(), Some(buttons::Event::ToggleSocial) => self.show.toggle_social(), Some(buttons::Event::ToggleSpell) => self.show.toggle_spell(), - Some(buttons::Event::ToggleQuest) => self.show.toggle_quest(), Some(buttons::Event::ToggleMap) => self.show.toggle_map(), None => {}, } @@ -1636,6 +1620,9 @@ impl Hud { // Bag contents if self.show.bag { + let ecs = client.state().ecs(); + let stats = ecs.read_storage::(); + let player_stats = stats.get(client.entity()).unwrap(); match Bag::new( client, &self.imgs, @@ -1644,10 +1631,14 @@ impl Hud { &self.rot_imgs, tooltip_manager, self.pulse, + &self.voxygen_i18n, + &player_stats, + &self.show, ) .set(self.ids.bag, ui_widgets) { Some(bag::Event::HudEvent(event)) => events.push(event), + Some(bag::Event::Stats) => self.show.stats = !self.show.stats, Some(bag::Event::Close) => { self.show.bag(false); self.force_ungrab = true; @@ -1659,22 +1650,25 @@ impl Hud { // Skillbar // Get player stats let ecs = client.state().ecs(); - let stats = ecs.read_storage::(); - let energy = ecs.read_storage::(); - let character_state = ecs.read_storage::(); let entity = client.entity(); - let controller = ecs.read_storage::(); - if let (Some(stats), Some(energy), Some(character_state), Some(controller)) = ( + let stats = ecs.read_storage::(); + let loadouts = ecs.read_storage::(); + let energies = ecs.read_storage::(); + let character_states = ecs.read_storage::(); + let controllers = ecs.read_storage::(); + if let (Some(stats), Some(loadout), Some(energy), Some(character_state), Some(controller)) = ( stats.get(entity), - energy.get(entity), - character_state.get(entity), - controller.get(entity).map(|c| &c.inputs), + loadouts.get(entity), + energies.get(entity), + character_states.get(entity), + controllers.get(entity).map(|c| &c.inputs), ) { Skillbar::new( global_state, &self.imgs, &self.fonts, &stats, + &loadout, &energy, &character_state, self.pulse, @@ -1818,6 +1812,9 @@ impl Hud { settings_window::Event::AdjustWindowSize(new_size) => { events.push(Event::AdjustWindowSize(new_size)); }, + settings_window::Event::ChangeFreeLookBehavior(behavior) => { + events.push(Event::ChangeFreeLookBehavior(behavior)); + }, } } } @@ -1842,28 +1839,6 @@ impl Hud { } } - // Character Window - if self.show.character_window { - let ecs = client.state().ecs(); - let stats = ecs.read_storage::(); - let player_stats = stats.get(client.entity()).unwrap(); - match CharacterWindow::new( - &self.show, - &player_stats, - &self.imgs, - &self.fonts, - &self.voxygen_i18n, - ) - .set(self.ids.character_window, ui_widgets) - { - Some(character_window::Event::Close) => { - self.show.character_window(false); - self.force_ungrab = true; - }, - None => {}, - } - } - // Spellbook if self.show.spell { match Spell::new( @@ -1882,25 +1857,6 @@ impl Hud { None => {}, } } - - // Quest Log - if self.show.quest { - match Quest::new( - &self.show, - client, - &self.imgs, - &self.fonts, - &self.voxygen_i18n, - ) - .set(self.ids.quest, ui_widgets) - { - Some(quest::Event::Close) => { - self.show.quest(false); - self.force_ungrab = true; - }, - None => {}, - } - } // Map if self.show.map { match Map::new( @@ -1911,7 +1867,7 @@ impl Hud { &self.world_map, &self.fonts, self.pulse, - self.velocity, + &self.voxygen_i18n, ) .set(self.ids.map, ui_widgets) { @@ -1932,8 +1888,8 @@ impl Hud { }, Some(esc_menu::Event::Close) => { self.show.esc_menu = false; - self.show.want_grab = false; - self.force_ungrab = true; + self.show.want_grab = true; + self.force_ungrab = false; // Unpause the game if we are on singleplayer if let Some(singleplayer) = global_state.singleplayer.as_ref() { @@ -1961,6 +1917,22 @@ impl Hud { } } + // Free look indicator + if self.show.free_look { + Text::new(&self.voxygen_i18n.get("hud.free_look_indicator")) + .color(TEXT_BG) + .mid_top_with_margin_on(ui_widgets.window, 100.0) + .font_id(self.fonts.cyri.conrod_id) + .font_size(self.fonts.cyri.scale(20)) + .set(self.ids.free_look_bg, ui_widgets); + Text::new(&self.voxygen_i18n.get("hud.free_look_indicator")) + .color(KILL_COLOR) + .top_left_with_margins_on(self.ids.free_look_bg, -1.0, -1.0) + .font_id(self.fonts.cyri.conrod_id) + .font_size(self.fonts.cyri.scale(20)) + .set(self.ids.free_look_txt, ui_widgets); + } + events } @@ -2047,14 +2019,6 @@ impl Hud { self.show.toggle_bag(); true }, - GameInput::QuestLog => { - self.show.toggle_quest(); - true - }, - GameInput::CharacterWindow => { - self.show.toggle_char_window(); - true - }, GameInput::Social => { self.show.toggle_social(); true @@ -2132,4 +2096,6 @@ impl Hud { self.ui.render(renderer, Some(globals)); } } + + pub fn free_look(&mut self, free_look: bool) { self.show.free_look = free_look; } } diff --git a/voxygen/src/hud/quest.rs b/voxygen/src/hud/quest.rs deleted file mode 100644 index 795abfd475..0000000000 --- a/voxygen/src/hud/quest.rs +++ /dev/null @@ -1,117 +0,0 @@ -use super::{img_ids::Imgs, Show, TEXT_COLOR}; -use crate::{i18n::VoxygenLocalization, ui::fonts::ConrodVoxygenFonts}; -use client::{self, Client}; -use conrod_core::{ - color, - widget::{self, Button, Image, Rectangle, Text}, - widget_ids, Colorable, Positionable, Sizeable, Widget, WidgetCommon, -}; - -widget_ids! { - pub struct Ids { - quest_frame, - quest_close, - quest_title, - frame, - content_align, - } -} - -#[derive(WidgetCommon)] -pub struct Quest<'a> { - _show: &'a Show, - _client: &'a Client, - - imgs: &'a Imgs, - fonts: &'a ConrodVoxygenFonts, - localized_strings: &'a std::sync::Arc, - #[conrod(common_builder)] - common: widget::CommonBuilder, -} - -impl<'a> Quest<'a> { - pub fn new( - show: &'a Show, - _client: &'a Client, - imgs: &'a Imgs, - fonts: &'a ConrodVoxygenFonts, - localized_strings: &'a std::sync::Arc, - ) -> Self { - Self { - _show: show, - imgs, - _client, - fonts, - localized_strings, - common: widget::CommonBuilder::default(), - } - } -} - -/*pub struct State { - ids: Ids, -}*/ - -pub enum Event { - Close, -} - -impl<'a> Widget for Quest<'a> { - type Event = Option; - type State = Ids; - type Style = (); - - fn init_state(&self, id_gen: widget::id::Generator) -> Self::State { Ids::new(id_gen) } - - fn style(&self) -> Self::Style { () } - - fn update(self, args: widget::UpdateArgs) -> Self::Event { - let widget::UpdateArgs { - id: _, state, ui, .. - } = args; - - if self._show.character_window { - Image::new(self.imgs.window_3) - .top_left_with_margins_on(ui.window, 200.0, 658.0) - .w_h(103.0 * 4.0, 122.0 * 4.0) - .set(state.quest_frame, ui); - } else { - Image::new(self.imgs.window_3) - .top_left_with_margins_on(ui.window, 200.0, 25.0) - .w_h(103.0 * 4.0, 122.0 * 4.0) - .set(state.quest_frame, ui); - } - - // X-Button - if Button::image(self.imgs.close_button) - .w_h(28.0, 28.0) - .hover_image(self.imgs.close_button_hover) - .press_image(self.imgs.close_button_press) - .top_right_with_margins_on(state.quest_frame, 0.0, 0.0) - .set(state.quest_close, ui) - .was_clicked() - { - return Some(Event::Close); - } - - // Title - // TODO: Use an actual character name. - Text::new(&self.localized_strings.get("hud.quests")) - .mid_top_with_margin_on(state.quest_frame, 6.0) - .font_id(self.fonts.cyri.conrod_id) - .font_size(self.fonts.cyri.scale(14)) - .color(TEXT_COLOR) - .set(state.quest_title, ui); - - // Content Alignment - Rectangle::fill_with([95.0 * 4.0, 108.0 * 4.0], color::TRANSPARENT) - .mid_top_with_margin_on(state.quest_frame, 40.0) - .set(state.content_align, ui); - - // Contents - - // Frame - - None - } -} diff --git a/voxygen/src/hud/settings_window.rs b/voxygen/src/hud/settings_window.rs index 1c63978804..d8a3db3109 100644 --- a/voxygen/src/hud/settings_window.rs +++ b/voxygen/src/hud/settings_window.rs @@ -1,6 +1,6 @@ use super::{ - img_ids::Imgs, BarNumbers, CrosshairType, Intro, ShortcutNumbers, Show, XpBar, MENU_BG, - TEXT_COLOR, + img_ids::Imgs, BarNumbers, CrosshairType, Intro, PressBehavior, ShortcutNumbers, Show, XpBar, + MENU_BG, TEXT_COLOR, }; use crate::{ i18n::{list_localizations, LanguageMetadata, VoxygenLocalization}, @@ -141,7 +141,8 @@ widget_ids! { sct_num_dur_text, sct_num_dur_slider, sct_num_dur_value, - + free_look_behavior_text, + free_look_behavior_list } } @@ -220,6 +221,7 @@ pub enum Event { SctPlayerBatch(bool), SctDamageBatch(bool), ChangeLanguage(LanguageMetadata), + ChangeFreeLookBehavior(PressBehavior), } pub enum ScaleChange { @@ -1254,6 +1256,45 @@ impl<'a> Widget for SettingsWindow<'a> { .graphics_for(state.ids.mouse_y_invert_button) .color(TEXT_COLOR) .set(state.ids.mouse_y_invert_label, ui); + + // Free look behaviour + Text::new( + &self + .localized_strings + .get("hud.settings.free_look_behavior"), + ) + .down_from(state.ids.mouse_zoom_invert_button, 10.0) + .font_size(self.fonts.cyri.scale(14)) + .font_id(self.fonts.cyri.conrod_id) + .color(TEXT_COLOR) + .set(state.ids.free_look_behavior_text, ui); + + let mode_label_list = [ + &self + .localized_strings + .get("hud.settings.press_behavior.toggle"), + &self + .localized_strings + .get("hud.settings.press_behavior.hold"), + ]; + + // Get which free look behavior is currently active + let selected = self.global_state.settings.gameplay.free_look_behavior as usize; + + if let Some(clicked) = DropDownList::new(&mode_label_list, Some(selected)) + .w_h(200.0, 30.0) + .color(MENU_BG) + .label_color(TEXT_COLOR) + .label_font_id(self.fonts.cyri.conrod_id) + .down_from(state.ids.free_look_behavior_text, 8.0) + .set(state.ids.free_look_behavior_list, ui) + { + match clicked { + 0 => events.push(Event::ChangeFreeLookBehavior(PressBehavior::Toggle)), + 1 => events.push(Event::ChangeFreeLookBehavior(PressBehavior::Hold)), + _ => unreachable!(), + } + } } // 3) Controls Tab -------------------------------- @@ -1358,8 +1399,6 @@ impl<'a> Widget for SettingsWindow<'a> { {}\n\ {}\n\ {}\n\ - {}\n\ - {}\n\ \n\ \n\ \n\ @@ -1367,6 +1406,7 @@ impl<'a> Widget for SettingsWindow<'a> { {}\n\ \n\ \n\ + {}\n\ \n\ \n\ \n\ @@ -1412,11 +1452,12 @@ impl<'a> Widget for SettingsWindow<'a> { controls.social, controls.map, controls.spellbook, - controls.character_window, - controls.quest_log, + //controls.character_window, + //controls.quest_log, controls.bag, controls.enter, "Mouse Wheel", // Scroll chat + controls.free_look )) .color(TEXT_COLOR) .right_from(state.ids.controls_text, 0.0) diff --git a/voxygen/src/hud/skillbar.rs b/voxygen/src/hud/skillbar.rs index 91781e43eb..2c1f3136dd 100644 --- a/voxygen/src/hud/skillbar.rs +++ b/voxygen/src/hud/skillbar.rs @@ -1,6 +1,6 @@ use super::{ - img_ids::Imgs, BarNumbers, ShortcutNumbers, XpBar, CRITICAL_HP_COLOR, HP_COLOR, LOW_HP_COLOR, - MANA_COLOR, TEXT_COLOR, XP_COLOR, + img_ids::Imgs, BarNumbers, ShortcutNumbers, XpBar, BLACK, CRITICAL_HP_COLOR, HP_COLOR, + LOW_HP_COLOR, MANA_COLOR, TEXT_COLOR, XP_COLOR, }; use crate::{ i18n::{i18n_asset_key, VoxygenLocalization}, @@ -10,8 +10,11 @@ use crate::{ use common::{ assets::load_expect, comp::{ - item::{Debug, Tool}, - ActionState, CharacterState, ControllerInputs, Energy, ItemKind, Stats, + item::{ + tool::{DebugKind, StaffKind, Tool, ToolKind}, + ItemKind, + }, + CharacterState, ControllerInputs, Energy, Loadout, Stats, }, }; use conrod_core::{ @@ -19,7 +22,12 @@ use conrod_core::{ widget::{self, Button, Image, Rectangle, Text}, widget_ids, Color, Colorable, Positionable, Sizeable, Widget, WidgetCommon, }; + use std::time::{Duration, Instant}; +/* +use const_tweaker::tweak; +#[tweak(min = 0.0, max = 1.0, step = 0.01)] +const RGB: f32 = 0.1;*/ widget_ids! { struct Ids { @@ -111,6 +119,7 @@ pub struct Skillbar<'a> { imgs: &'a Imgs, fonts: &'a ConrodVoxygenFonts, stats: &'a Stats, + loadout: &'a Loadout, energy: &'a Energy, character_state: &'a CharacterState, controller: &'a ControllerInputs, @@ -126,17 +135,19 @@ impl<'a> Skillbar<'a> { imgs: &'a Imgs, fonts: &'a ConrodVoxygenFonts, stats: &'a Stats, + loadout: &'a Loadout, energy: &'a Energy, character_state: &'a CharacterState, pulse: f32, controller: &'a ControllerInputs, ) -> Self { Self { + global_state, imgs, fonts, stats, + loadout, energy, - global_state, current_resource: ResourceType::Mana, common: widget::CommonBuilder::default(), character_state, @@ -539,8 +550,8 @@ impl<'a> Widget for Skillbar<'a> { .set(state.ids.hotbar_align, ui); // M1 Slot - match self.character_state.action { - ActionState::Attack { .. } => { + match self.character_state { + CharacterState::BasicMelee { .. } => { if self.controller.primary.is_pressed() { let fade_pulse = (self.pulse * 4.0/* speed factor */).cos() * 0.5 + 0.6; //Animation timer; Image::new(self.imgs.skillbar_slot_big) @@ -580,49 +591,58 @@ impl<'a> Widget for Skillbar<'a> { // M1 Slot Image::new(self.imgs.skillbar_slot_big_bg) .w_h(38.0 * scale, 38.0 * scale) - .color(match self.stats.equipment.main.as_ref().map(|i| &i.kind) { - Some(ItemKind::Tool { kind, .. }) => match kind { - Tool::Bow => Some(BG_COLOR_2), - Tool::Staff => Some(BG_COLOR_2), + .color( + match self.loadout.active_item.as_ref().map(|i| &i.item.kind) { + Some(ItemKind::Tool(Tool { kind, .. })) => match kind { + ToolKind::Bow(_) => Some(BG_COLOR_2), + ToolKind::Staff(_) => Some(BG_COLOR_2), + _ => Some(BG_COLOR_2), + }, _ => Some(BG_COLOR_2), }, - _ => Some(BG_COLOR_2), - }) + ) .middle_of(state.ids.m1_slot) .set(state.ids.m1_slot_bg, ui); - Button::image(match self.stats.equipment.main.as_ref().map(|i| &i.kind) { - Some(ItemKind::Tool { kind, .. }) => match kind { - Tool::Sword => self.imgs.twohsword_m1, - Tool::Hammer => self.imgs.twohhammer_m1, - Tool::Axe => self.imgs.twohaxe_m1, - Tool::Bow => self.imgs.bow_m1, - Tool::Staff => self.imgs.staff_m1, - Tool::Debug(Debug::Boost) => self.imgs.flyingrod_m1, - _ => self.imgs.twohaxe_m1, + Button::image( + match self.loadout.active_item.as_ref().map(|i| &i.item.kind) { + Some(ItemKind::Tool(Tool { kind, .. })) => match kind { + ToolKind::Sword(_) => self.imgs.twohsword_m1, + ToolKind::Hammer(_) => self.imgs.twohhammer_m1, + ToolKind::Axe(_) => self.imgs.twohaxe_m1, + ToolKind::Bow(_) => self.imgs.bow_m1, + ToolKind::Staff(_) => self.imgs.staff_m1, + ToolKind::Debug(DebugKind::Boost) => self.imgs.flyingrod_m1, + _ => self.imgs.nothing, + }, + _ => self.imgs.nothing, }, - _ => self.imgs.twohaxe_m1, - }) // Insert Icon here - .w(match self.stats.equipment.main.as_ref().map(|i| &i.kind) { - Some(ItemKind::Tool { kind, .. }) => match kind { - Tool::Bow => 30.0 * scale, - Tool::Staff => 32.0 * scale, + ) // Insert Icon here + .w( + match self.loadout.active_item.as_ref().map(|i| &i.item.kind) { + Some(ItemKind::Tool(Tool { kind, .. })) => match kind { + ToolKind::Bow(_) => 30.0 * scale, + ToolKind::Staff(_) => 32.0 * scale, + _ => 38.0 * scale, + }, _ => 38.0 * scale, }, - _ => 38.0 * scale, - }) - .h(match self.stats.equipment.main.as_ref().map(|i| &i.kind) { - Some(ItemKind::Tool { kind, .. }) => match kind { - Tool::Bow => 30.0 * scale, - Tool::Staff => 32.0 * scale, + ) + .h( + match self.loadout.active_item.as_ref().map(|i| &i.item.kind) { + Some(ItemKind::Tool(Tool { kind, .. })) => match kind { + ToolKind::Bow(_) => 30.0 * scale, + ToolKind::Staff(_) => 32.0 * scale, + _ => 38.0 * scale, + }, _ => 38.0 * scale, }, - _ => 38.0 * scale, - }) + ) .middle_of(state.ids.m1_slot_bg) .set(state.ids.m1_content, ui); // M2 Slot - match self.character_state.action { - ActionState::Block { .. } => { + match self.character_state { + /* + CharacterState::BasicBlock { .. } => { let fade_pulse = (self.pulse * 4.0/* speed factor */).cos() * 0.5 + 0.6; //Animation timer; if self.controller.secondary.is_pressed() { Image::new(self.imgs.skillbar_slot_big) @@ -641,8 +661,8 @@ impl<'a> Widget for Skillbar<'a> { .right_from(state.ids.m1_slot, 0.0) .set(state.ids.m2_slot, ui); } - }, - ActionState::Attack { .. } => { + },*/ + CharacterState::BasicMelee { .. } => { let fade_pulse = (self.pulse * 4.0/* speed factor */).cos() * 0.5 + 0.6; //Animation timer; if self.controller.secondary.is_pressed() { Image::new(self.imgs.skillbar_slot_big) @@ -672,45 +692,74 @@ impl<'a> Widget for Skillbar<'a> { Image::new(self.imgs.skillbar_slot_big_bg) .w_h(38.0 * scale, 38.0 * scale) - .color(match self.stats.equipment.main.as_ref().map(|i| &i.kind) { - Some(ItemKind::Tool { kind, .. }) => match kind { - Tool::Bow => Some(BG_COLOR_2), - Tool::Staff => Some(BG_COLOR_2), + .color( + match self.loadout.active_item.as_ref().map(|i| &i.item.kind) { + Some(ItemKind::Tool(Tool { kind, .. })) => match kind { + ToolKind::Bow(_) => Some(BG_COLOR_2), + ToolKind::Staff(_) => Some(BG_COLOR_2), + _ => Some(BG_COLOR_2), + }, _ => Some(BG_COLOR_2), }, - _ => Some(BG_COLOR_2), - }) + ) .middle_of(state.ids.m2_slot) .set(state.ids.m2_slot_bg, ui); - Button::image(match self.stats.equipment.main.as_ref().map(|i| &i.kind) { - Some(ItemKind::Tool { kind, .. }) => match kind { - Tool::Sword => self.imgs.twohsword_m2, - Tool::Hammer => self.imgs.twohhammer_m2, - Tool::Axe => self.imgs.twohaxe_m2, - Tool::Bow => self.imgs.bow_m2, - Tool::Staff => self.imgs.staff_m2, - Tool::Debug(Debug::Boost) => self.imgs.flyingrod_m2, - _ => self.imgs.twohaxe_m2, + Button::image( + match self.loadout.active_item.as_ref().map(|i| &i.item.kind) { + Some(ItemKind::Tool(Tool { kind, .. })) => match kind { + ToolKind::Sword(_) => self.imgs.charge, + ToolKind::Hammer(_) => self.imgs.nothing, + ToolKind::Axe(_) => self.imgs.nothing, + ToolKind::Bow(_) => self.imgs.nothing, + ToolKind::Staff(StaffKind::Sceptre) => self.imgs.heal_0, + ToolKind::Staff(_) => self.imgs.staff_m2, + ToolKind::Debug(DebugKind::Boost) => self.imgs.flyingrod_m2, + _ => self.imgs.nothing, + }, + _ => self.imgs.nothing, }, - _ => self.imgs.twohaxe_m2, - }) // Insert Icon here - .w(match self.stats.equipment.main.as_ref().map(|i| &i.kind) { - Some(ItemKind::Tool { kind, .. }) => match kind { - Tool::Bow => 30.0 * scale, - Tool::Staff => 30.0 * scale, + ) // Insert Icon here + .w( + match self.loadout.active_item.as_ref().map(|i| &i.item.kind) { + Some(ItemKind::Tool(Tool { kind, .. })) => match kind { + ToolKind::Staff(_) => 30.0 * scale, + _ => 38.0 * scale, + }, _ => 38.0 * scale, }, - _ => 38.0 * scale, - }) - .h(match self.stats.equipment.main.as_ref().map(|i| &i.kind) { - Some(ItemKind::Tool { kind, .. }) => match kind { - Tool::Bow => 30.0 * scale, - Tool::Staff => 30.0 * scale, + ) + .h( + match self.loadout.active_item.as_ref().map(|i| &i.item.kind) { + Some(ItemKind::Tool(Tool { kind, .. })) => match kind { + ToolKind::Staff(_) => 30.0 * scale, + _ => 38.0 * scale, + }, _ => 38.0 * scale, }, - _ => 38.0 * scale, - }) + ) .middle_of(state.ids.m2_slot_bg) + .image_color( + match self.loadout.active_item.as_ref().map(|i| &i.item.kind) { + Some(ItemKind::Tool(Tool { kind, .. })) => match kind { + ToolKind::Sword(_) => { + if self.energy.current() as f64 >= 200.0 { + Color::Rgba(1.0, 1.0, 1.0, 1.0) + } else { + Color::Rgba(0.3, 0.3, 0.3, 0.8) + } + }, + ToolKind::Staff(StaffKind::Sceptre) => { + if self.energy.current() as f64 >= 400.0 { + Color::Rgba(1.0, 1.0, 1.0, 1.0) + } else { + Color::Rgba(0.3, 0.3, 0.3, 0.8) + } + }, + _ => Color::Rgba(1.0, 1.0, 1.0, 1.0), + }, + _ => Color::Rgba(1.0, 1.0, 1.0, 1.0), + }, + ) .set(state.ids.m2_content, ui); //Slot 5 Image::new(self.imgs.skillbar_slot) @@ -755,8 +804,9 @@ impl<'a> Widget for Skillbar<'a> { // Slot 1 // TODO: Don't hardcode this to one Skill... // Frame flashes whenever the active skill inside this slot is activated - match self.character_state.action { - ActionState::Charge { time_left } => { + match self.character_state { + /* + CharacterState::Charge { time_left } => { let fade = time_left.as_secs_f32() * 10.0; Image::new(self.imgs.skillbar_slot_l) .w_h(20.0 * scale, 20.0 * scale) @@ -773,7 +823,7 @@ impl<'a> Widget for Skillbar<'a> { ))) .floating(true) .set(state.ids.slot1_act, ui); - }, + },*/ _ => { Image::new(self.imgs.skillbar_slot_l) .w_h(20.0 * scale, 20.0 * scale) @@ -783,19 +833,35 @@ impl<'a> Widget for Skillbar<'a> { } Image::new(self.imgs.skillbar_slot_bg) .w_h(19.5 * scale, 19.5 * scale) - .color(Some(BG_COLOR)) + .color( + match self.loadout.active_item.as_ref().map(|i| &i.item.kind) { + Some(ItemKind::Tool(Tool { kind, .. })) => match kind { + ToolKind::Staff(StaffKind::BasicStaff) => Some(BLACK), + _ => Some(BG_COLOR), + }, + _ => Some(BG_COLOR), + }, + ) .middle_of(state.ids.slot1) .set(state.ids.slot1_bg, ui); // TODO: Changeable slot image - Image::new(self.imgs.charge) - .w_h(18.0 * scale, 18.0 * scale) - .color(if self.energy.current() as f64 >= 200.0 { - Some(Color::Rgba(1.0, 1.0, 1.0, 1.0)) - } else { - Some(Color::Rgba(0.4, 0.4, 0.4, 1.0)) - }) - .middle_of(state.ids.slot1_bg) - .set(state.ids.slot1_icon, ui); + match self.loadout.active_item.as_ref().map(|i| &i.item.kind) { + Some(ItemKind::Tool(Tool { kind, .. })) => match kind { + ToolKind::Staff(StaffKind::BasicStaff) => { + Image::new(self.imgs.fire_spell_1) + .w_h(18.0 * scale, 18.0 * scale) + .color(if self.energy.current() as f64 >= 500.0 { + Some(Color::Rgba(1.0, 1.0, 1.0, 1.0)) + } else { + Some(Color::Rgba(0.3, 0.3, 0.3, 0.8)) + }) + .middle_of(state.ids.slot1_bg) + .set(state.ids.slot1_icon, ui); + }, + _ => {}, + }, + _ => {}, + } // Slot 6 Image::new(self.imgs.skillbar_slot) .w_h(20.0 * scale, 20.0 * scale) diff --git a/voxygen/src/hud/social.rs b/voxygen/src/hud/social.rs index fb57e8523e..c278ec1963 100644 --- a/voxygen/src/hud/social.rs +++ b/voxygen/src/hud/social.rs @@ -1,4 +1,4 @@ -use super::{img_ids::Imgs, Show, TEXT_COLOR, TEXT_COLOR_3}; +use super::{img_ids::Imgs, Show, TEXT_COLOR, TEXT_COLOR_3, UI_MAIN}; use crate::{i18n::VoxygenLocalization, ui::fonts::ConrodVoxygenFonts}; use client::{self, Client}; @@ -88,17 +88,11 @@ impl<'a> Widget for Social<'a> { let mut events = Vec::new(); - if self.show.character_window { - Image::new(self.imgs.window_3) - .top_left_with_margins_on(ui.window, 200.0, 658.0) - .w_h(103.0 * 4.0, 122.0 * 4.0) - .set(ids.social_frame, ui); - } else { - Image::new(self.imgs.window_3) - .top_left_with_margins_on(ui.window, 200.0, 25.0) - .w_h(103.0 * 4.0, 122.0 * 4.0) - .set(ids.social_frame, ui); - } + Image::new(self.imgs.window_3) + .top_left_with_margins_on(ui.window, 200.0, 25.0) + .color(Some(UI_MAIN)) + .w_h(103.0 * 4.0, 122.0 * 4.0) + .set(ids.social_frame, ui); // X-Button if Button::image(self.imgs.close_button) @@ -138,6 +132,7 @@ impl<'a> Widget for Social<'a> { Image::new(self.imgs.social_frame) .w_h(99.0 * 4.0, 100.0 * 4.0) .mid_bottom_of(ids.align) + .color(Some(UI_MAIN)) .set(ids.frame, ui); // Online Tab @@ -163,6 +158,7 @@ impl<'a> Widget for Social<'a> { .label_font_size(self.fonts.cyri.scale(14)) .label_font_id(self.fonts.cyri.conrod_id) .parent(ids.frame) + .color(UI_MAIN) .label_color(TEXT_COLOR) .set(ids.online_tab, ui) .was_clicked() @@ -229,6 +225,7 @@ impl<'a> Widget for Social<'a> { .label_font_size(self.fonts.cyri.scale(14)) .label_font_id(self.fonts.cyri.conrod_id) .parent(ids.frame) + .color(UI_MAIN) .label_color(TEXT_COLOR_3) .set(ids.friends_tab, ui) .was_clicked() @@ -260,6 +257,7 @@ impl<'a> Widget for Social<'a> { .parent(ids.frame) .label_font_size(self.fonts.cyri.scale(14)) .label_font_id(self.fonts.cyri.conrod_id) + .color(UI_MAIN) .label_color(TEXT_COLOR_3) .set(ids.faction_tab, ui) .was_clicked() diff --git a/voxygen/src/hud/spell.rs b/voxygen/src/hud/spell.rs index ca49c4b30c..a35d4bf029 100644 --- a/voxygen/src/hud/spell.rs +++ b/voxygen/src/hud/spell.rs @@ -1,4 +1,4 @@ -use super::{img_ids::Imgs, Show, TEXT_COLOR}; +use super::{img_ids::Imgs, Show, TEXT_COLOR, UI_MAIN}; use crate::ui::fonts::ConrodVoxygenFonts; use conrod_core::{ color, @@ -74,17 +74,11 @@ impl<'a> Widget for Spell<'a> { id: _, state, ui, .. } = args; - if self._show.character_window { - Image::new(self.imgs.window_3) - .top_left_with_margins_on(ui.window, 200.0, 658.0) - .w_h(103.0 * 4.0, 122.0 * 4.0) - .set(state.spell_frame, ui); - } else { - Image::new(self.imgs.window_3) - .top_left_with_margins_on(ui.window, 200.0, 25.0) - .w_h(103.0 * 4.0, 122.0 * 4.0) - .set(state.spell_frame, ui); - } + Image::new(self.imgs.window_3) + .top_left_with_margins_on(ui.window, 200.0, 25.0) + .w_h(103.0 * 4.0, 122.0 * 4.0) + .color(Some(UI_MAIN)) + .set(state.spell_frame, ui); // X-Button if Button::image(self.imgs.close_button) diff --git a/voxygen/src/i18n.rs b/voxygen/src/i18n.rs index 3b8064a849..81b758a128 100644 --- a/voxygen/src/i18n.rs +++ b/voxygen/src/i18n.rs @@ -108,7 +108,8 @@ impl Asset for VoxygenLocalization { /// Load the translations located in the input buffer and convert them /// into a `VoxygenLocalization` object. fn parse(buf_reader: BufReader) -> Result { - let mut asked_localization: VoxygenLocalization = from_reader(buf_reader).unwrap(); + let mut asked_localization: VoxygenLocalization = + from_reader(buf_reader).map_err(assets::Error::parse_error)?; // Update the text if UTF-8 to ASCII conversion is enabled if asked_localization.convert_utf8_to_ascii { diff --git a/voxygen/src/key_state.rs b/voxygen/src/key_state.rs index e07474e0db..61b86128ae 100644 --- a/voxygen/src/key_state.rs +++ b/voxygen/src/key_state.rs @@ -5,6 +5,12 @@ pub struct KeyState { pub left: bool, pub up: bool, pub down: bool, + pub climb_up: bool, + pub climb_down: bool, + pub toggle_wield: bool, + pub toggle_sit: bool, + pub swap_loadout: bool, + pub respawn: bool, pub analog_matrix: Vec2, } @@ -15,6 +21,12 @@ impl KeyState { left: false, up: false, down: false, + climb_up: false, + climb_down: false, + toggle_wield: false, + toggle_sit: false, + swap_loadout: false, + respawn: false, analog_matrix: Vec2::zero(), } } @@ -35,4 +47,14 @@ impl KeyState { dir.normalized() } } + + pub fn climb(&self) -> Option { + use common::comp::Climb; + match (self.climb_up, self.climb_down) { + (true, false) => Some(Climb::Up), + (false, true) => Some(Climb::Down), + (true, true) => Some(Climb::Hold), + (false, false) => None, + } + } } diff --git a/voxygen/src/main.rs b/voxygen/src/main.rs index f2a091daf0..b4b400aeac 100644 --- a/voxygen/src/main.rs +++ b/voxygen/src/main.rs @@ -1,4 +1,5 @@ #![deny(unsafe_code)] +#![feature(bool_to_option)] #![recursion_limit = "2048"] use veloren_voxygen::{ @@ -7,7 +8,7 @@ use veloren_voxygen::{ logging, menu::main::MainMenuState, meta::Meta, - settings::Settings, + settings::{AudioOutput, Settings}, window::Window, Direction, GlobalState, PlayState, PlayStateResult, }; @@ -17,6 +18,8 @@ use log::{debug, error}; use std::{mem, panic, str::FromStr}; fn main() { + #[cfg(feature = "tweak")] + const_tweaker::run().expect("Could not run server"); // Initialize logging. let term_log_level = std::env::var_os("VOXYGEN_LOG") .and_then(|env| env.to_str().map(|s| s.to_owned())) @@ -44,16 +47,13 @@ fn main() { panic!("Failed to save settings: {:?}", err); } - let audio_device = || match &settings.audio.audio_device { - Some(d) => d.to_string(), - None => audio::get_default_device(), - }; - - let mut audio = if settings.audio.audio_on { - AudioFrontend::new(audio_device(), settings.audio.max_sfx_channels) - } else { - AudioFrontend::no_audio() - }; + let mut audio = match settings.audio.output { + AudioOutput::Off => None, + AudioOutput::Automatic => audio::get_default_device(), + AudioOutput::Device(ref dev) => Some(dev.clone()), + } + .map(|dev| AudioFrontend::new(dev, settings.audio.max_sfx_channels)) + .unwrap_or_else(AudioFrontend::no_audio); audio.set_music_volume(settings.audio.music_volume); audio.set_sfx_volume(settings.audio.sfx_volume); @@ -123,7 +123,7 @@ fn main() { and the events that led up to the panic as possible. \n\ Voxygen has logged information about the problem (including this \ - message) to the file {:#?}. Please include the contents of this \ + message) to the file {}. Please include the contents of this \ file in your bug report. \n\ > Error information\n\ @@ -131,13 +131,17 @@ fn main() { The information below is intended for developers and testers.\n\ \n\ Panic Payload: {:?}\n\ - PanicInfo: {}", - // TODO: Verify that this works - Settings::get_settings_path() + PanicInfo: {}\n\ + Game version: {} [{}]", + Settings::load() + .log + .logs_path .join("voxygen-.log") .display(), reason, panic_info, + common::util::GIT_HASH.to_string(), + common::util::GIT_DATE.to_string() ); error!( diff --git a/voxygen/src/menu/char_selection/mod.rs b/voxygen/src/menu/char_selection/mod.rs index 23b43d7eb9..3ca05435d4 100644 --- a/voxygen/src/menu/char_selection/mod.rs +++ b/voxygen/src/menu/char_selection/mod.rs @@ -112,18 +112,12 @@ impl PlayState for CharSelectionState { } // Render the scene. + let loadout = self.char_selection_ui.get_loadout(); self.scene.render( global_state.window.renderer_mut(), self.client.borrow().get_tick(), humanoid_body.clone(), - &comp::Equipment { - main: self - .char_selection_ui - .get_character_data() - .and_then(|data| data.tool) - .and_then(|tool| assets::load_cloned(&tool).ok()), - alt: None, - }, + loadout.as_ref(), ); // Draw the UI to the screen. diff --git a/voxygen/src/menu/char_selection/ui.rs b/voxygen/src/menu/char_selection/ui.rs index 561381b271..2c8d7ac104 100644 --- a/voxygen/src/menu/char_selection/ui.rs +++ b/voxygen/src/menu/char_selection/ui.rs @@ -22,6 +22,7 @@ use conrod_core::{ widget::{text_box::Event as TextBoxEvent, Button, Image, Rectangle, Scrollbar, Text, TextBox}, widget_ids, Borderable, Color, Colorable, Labelable, Positionable, Sizeable, UiCell, Widget, }; +use std::sync::Arc; const STARTER_HAMMER: &str = "common.items.weapons.starter_hammer"; const STARTER_BOW: &str = "common.items.weapons.starter_bow"; @@ -30,6 +31,10 @@ const STARTER_STAFF: &str = "common.items.weapons.starter_staff"; const STARTER_SWORD: &str = "common.items.weapons.starter_sword"; const STARTER_DAGGER: &str = "common.items.weapons.starter_dagger"; +// UI Color-Theme +const UI_MAIN: Color = Color::Rgba(0.61, 0.70, 0.70, 1.0); // Greenish Blue +//const UI_HIGHLIGHT_0: Color = Color::Rgba(0.79, 1.09, 1.09, 1.0); + widget_ids! { struct Ids { // Background and logo @@ -251,6 +256,7 @@ pub enum Mode { Create { name: String, body: humanoid::Body, + loadout: comp::Loadout, tool: Option<&'static str>, }, } @@ -263,7 +269,7 @@ pub struct CharSelectionUi { fonts: ConrodVoxygenFonts, //character_creation: bool, info_content: InfoContent, - voxygen_i18n: std::sync::Arc, + voxygen_i18n: Arc, //deletion_confirmation: bool, /* pub character_name: String, @@ -317,7 +323,9 @@ impl CharSelectionUi { pub fn get_character_data(&self) -> Option { match &self.mode { Mode::Select(data) => data.clone(), - Mode::Create { name, body, tool } => Some(CharacterData { + Mode::Create { + name, body, tool, .. + } => Some(CharacterData { name: name.clone(), body: comp::Body::Humanoid(body.clone()), tool: tool.map(|specifier| specifier.to_string()), @@ -325,6 +333,45 @@ impl CharSelectionUi { } } + pub fn get_loadout(&mut self) -> Option { + match &mut self.mode { + Mode::Select(characterdata) => { + let loadout = comp::Loadout { + active_item: characterdata + .as_ref() + .and_then(|d| d.tool.as_ref()) + .map(|tool| comp::ItemConfig { + item: (*load_expect::(&tool)).clone(), + ability1: None, + ability2: None, + ability3: None, + block_ability: None, + dodge_ability: None, + }), + second_item: None, + shoulder: None, + chest: None, + belt: None, + hand: None, + pants: None, + foot: None, + }; + Some(loadout) + }, + Mode::Create { loadout, tool, .. } => { + loadout.active_item = tool.map(|tool| comp::ItemConfig { + item: (*load_expect::(tool)).clone(), + ability1: None, + ability2: None, + ability3: None, + block_ability: None, + dodge_ability: None, + }); + Some(loadout.clone()) + }, + } + } + // TODO: Split this into multiple modules or functions. fn update_layout(&mut self, global_state: &mut GlobalState, client: &Client) -> Vec { let mut events = Vec::new(); @@ -363,6 +410,7 @@ impl CharSelectionUi { Image::new(self.imgs.info_frame) .w_h(550.0, 150.0) .middle_of(self.ids.info_bg) + .color(Some(UI_MAIN)) .set(self.ids.info_frame, ui_widgets); Rectangle::fill_with([275.0, 150.0], color::TRANSPARENT) .bottom_left_with_margins_on(self.ids.info_frame, 0.0, 0.0) @@ -430,6 +478,7 @@ impl CharSelectionUi { .set(self.ids.server_frame_bg, ui_widgets); Image::new(self.imgs.server_frame) .w_h(400.0, 100.0) + .color(Some(UI_MAIN)) .middle_of(self.ids.server_frame_bg) .set(self.ids.server_frame, ui_widgets); @@ -440,6 +489,7 @@ impl CharSelectionUi { Image::new(self.imgs.charlist_frame) .w_h(400.0, 800.0) .middle_of(self.ids.charlist_bg) + .color(Some(UI_MAIN)) .set(self.ids.charlist_frame, ui_widgets); Rectangle::fill_with([386.0, 783.0], color::TRANSPARENT) .middle_of(self.ids.charlist_bg) @@ -449,7 +499,7 @@ impl CharSelectionUi { Scrollbar::y_axis(self.ids.charlist_alignment) .thickness(5.0) .auto_hide(true) - .rgba(0.0, 0.0, 0., 0.0) + .color(UI_MAIN) .set(self.ids.selection_scrollbar, ui_widgets); // Server Name Text::new(&client.server_info.name) @@ -646,13 +696,19 @@ impl CharSelectionUi { self.mode = Mode::Create { name: "Character Name".to_string(), body: humanoid::Body::random(), + loadout: comp::Loadout::default(), tool: Some(STARTER_SWORD), }; } }, // Character_Creation // ////////////////////////////////////////////////////////////////////// - Mode::Create { name, body, tool } => { + Mode::Create { + name, + body, + loadout: _, + tool, + } => { let mut to_select = false; // Back Button if Button::image(self.imgs.button) @@ -686,12 +742,12 @@ impl CharSelectionUi { .set(self.ids.create_button, ui_widgets) .was_clicked() { - // TODO: Save character. - global_state.meta.add_character(CharacterData { - name: name.clone(), - body: comp::Body::Humanoid(body.clone()), - tool: tool.map(|tool| tool.to_string()), - }); + global_state.meta.selected_character = + global_state.meta.add_character(CharacterData { + name: name.clone(), + body: comp::Body::Humanoid(body.clone()), + tool: tool.map(|tool| tool.to_string()), + }); to_select = true; } // Character Name Input @@ -731,6 +787,7 @@ impl CharSelectionUi { Image::new(self.imgs.charlist_frame) .w_h(400.0, ui_widgets.win_h - ui_widgets.win_h * 0.19) .middle_of(self.ids.creation_bg) + .color(Some(UI_MAIN)) .set(self.ids.charlist_frame, ui_widgets); Rectangle::fill_with( [386.0, ui_widgets.win_h - ui_widgets.win_h * 0.19], @@ -838,13 +895,6 @@ impl CharSelectionUi { "", &tooltip_human, ) - /*.tooltip_image( - if let humanoid::BodyType::Male = body.body_type { - self.imgs.human_m - } else { - self.imgs.human_f - }, - )*/ .set(self.ids.race_1, ui_widgets) .was_clicked() { @@ -1003,10 +1053,6 @@ impl CharSelectionUi { { *tool = Some(STARTER_HAMMER); } - // REMOVE THIS AFTER IMPLEMENTATION - /*Rectangle::fill_with([67.0, 67.0], color::rgba(0.0, 0.0, 0.0, 0.8)) - .middle_of(self.ids.hammer) - .set(self.ids.hammer_grey, ui_widgets);*/ // Bow Image::new(self.imgs.bow) @@ -1266,21 +1312,28 @@ impl CharSelectionUi { .set(self.ids.beard_slider, ui_widgets); } // Chest - let current_chest = body.chest; + /*let armor = load_glob::("common.items.armor.chest.*") + .expect("Unable to load armor!"); if let Some(new_val) = char_slider( self.ids.beard_slider, self.voxygen_i18n.get("char_selection.chest_color"), self.ids.chest_text, - humanoid::ALL_CHESTS.len() - 1, - humanoid::ALL_CHESTS + armor.len() - 1, + armor .iter() - .position(|&c| c == current_chest) + .position(|c| { + loadout + .chest + .as_ref() + .map(|lc| lc == c.borrow()) + .unwrap_or_default() + }) .unwrap_or(0), self.ids.chest_slider, ui_widgets, ) { - body.chest = humanoid::ALL_CHESTS[new_val]; - } + loadout.chest = Some((*armor[new_val]).clone()); + }*/ // Pants /*let current_pants = body.pants; if let Some(new_val) = char_slider( @@ -1298,7 +1351,7 @@ impl CharSelectionUi { body.pants = humanoid::ALL_PANTS[new_val]; }*/ Rectangle::fill_with([20.0, 20.0], color::TRANSPARENT) - .down_from(self.ids.chest_slider, 15.0) + .down_from(self.ids.beard_slider, 15.0) .set(self.ids.space, ui_widgets); if to_select { diff --git a/voxygen/src/menu/main/mod.rs b/voxygen/src/menu/main/mod.rs index 145d8e9b16..3e873f048d 100644 --- a/voxygen/src/menu/main/mod.rs +++ b/voxygen/src/menu/main/mod.rs @@ -36,7 +36,7 @@ impl PlayState for MainMenuState { let mut client_init: Option = None; // Kick off title music - if global_state.settings.audio.audio_on && global_state.audio.music_enabled() { + if global_state.settings.audio.output.is_enabled() && global_state.audio.music_enabled() { global_state.audio.play_title_music(); } diff --git a/voxygen/src/menu/main/ui.rs b/voxygen/src/menu/main/ui.rs index 8832cc7e59..0ba0007e33 100644 --- a/voxygen/src/menu/main/ui.rs +++ b/voxygen/src/menu/main/ui.rs @@ -20,6 +20,10 @@ use conrod_core::{ use rand::{seq::SliceRandom, thread_rng}; use std::time::Duration; +// UI Color-Theme +/*const UI_MAIN: Color = Color::Rgba(0.61, 0.70, 0.70, 1.0); // Greenish Blue +const UI_HIGHLIGHT_0: Color = Color::Rgba(0.79, 1.09, 1.09, 1.0);*/ + widget_ids! { struct Ids { // Background and logo @@ -172,6 +176,7 @@ impl MainMenuUi { "voxygen.background.bg_6", "voxygen.background.bg_7", "voxygen.background.bg_8", + "voxygen.background.bg_9", ]; let mut rng = thread_rng(); @@ -428,7 +433,7 @@ impl MainMenuUi { .hover_image(self.imgs.button_hover) .press_image(self.imgs.button_press) .label_y(Relative::Scalar(2.0)) - .label("Accept") + .label(&self.voxygen_i18n.get("common.accept")) .label_font_size(self.fonts.cyri.scale(22)) .label_color(TEXT_COLOR) .label_font_id(self.fonts.cyri.conrod_id) @@ -459,7 +464,7 @@ impl MainMenuUi { }; } // Info Window - Rectangle::fill_with([550.0, 400.0], color::BLACK) + Rectangle::fill_with([550.0, 250.0], color::BLACK) .top_left_with_margins_on(ui_widgets.window, 40.0, 40.0) .color(Color::Rgba(0.0, 0.0, 0.0, 0.95)) .set(self.ids.info_frame, ui_widgets); diff --git a/voxygen/src/mesh/terrain.rs b/voxygen/src/mesh/terrain.rs index 50a76f1b55..362fb81408 100644 --- a/voxygen/src/mesh/terrain.rs +++ b/voxygen/src/mesh/terrain.rs @@ -20,8 +20,7 @@ trait Blendable { impl Blendable for BlockKind { fn is_blended(&self) -> bool { match self { - BlockKind::Leaves => false, - _ => true, + _ => false, } } } diff --git a/voxygen/src/mesh/vol.rs b/voxygen/src/mesh/vol.rs index 6c219898e9..76979bf2e8 100644 --- a/voxygen/src/mesh/vol.rs +++ b/voxygen/src/mesh/vol.rs @@ -85,7 +85,7 @@ fn get_col_quad(dirs: &[Vec3], cols: &[[[Rgba; 3]; 3]; 3]) -> Vec4 0 { let col = Rgb::new(col.r, col.g, col.b).map(|e| e as f32); if Vec3::::from(primary_col).distance_squared(Vec3::from(col)) - < (0.25f32 * 256.0).powf(2.0) + < (0.025f32 * 256.0).powf(2.0) { color += col; total += 256.0; diff --git a/voxygen/src/meta.rs b/voxygen/src/meta.rs index bbfee9dd27..af884eee76 100644 --- a/voxygen/src/meta.rs +++ b/voxygen/src/meta.rs @@ -2,7 +2,7 @@ use common::comp; use directories::ProjectDirs; use log::warn; use serde_derive::{Deserialize, Serialize}; -use std::{fs, io, path::PathBuf}; +use std::{fs, io::Write, path::PathBuf}; #[derive(Clone, Debug, Serialize, Deserialize)] #[repr(C)] @@ -28,20 +28,24 @@ impl Meta { } } - pub fn add_character(&mut self, data: CharacterData) { self.characters.push(data); } + pub fn add_character(&mut self, data: CharacterData) -> usize { + self.characters.push(data); + // return new character's index + self.characters.len() - 1 + } pub fn load() -> Self { let path = Self::get_meta_path(); if let Ok(file) = fs::File::open(&path) { - match bincode::deserialize_from(file) { + match ron::de::from_reader(file) { Ok(s) => return s, Err(e) => { log::warn!("Failed to parse meta file! Fallback to default. {}", e); // Rename the corrupted settings file let mut new_path = path.to_owned(); new_path.pop(); - new_path.push("meta.invalid.dat"); + new_path.push("meta.invalid.ron"); if let Err(err) = std::fs::rename(path, new_path) { log::warn!("Failed to rename meta file. {}", err); } @@ -67,14 +71,16 @@ impl Meta { if let Some(dir) = path.parent() { fs::create_dir_all(dir)?; } - bincode::serialize_into(fs::File::create(path)?, self) - .map_err(|e| io::Error::new(io::ErrorKind::Other, e))?; + let mut meta_file = fs::File::create(path)?; + + let s: &str = &ron::ser::to_string_pretty(self, ron::ser::PrettyConfig::default()).unwrap(); + meta_file.write_all(s.as_bytes()).unwrap(); Ok(()) } pub fn get_meta_path() -> PathBuf { if let Some(val) = std::env::var_os("VOXYGEN_CONFIG") { - let meta = PathBuf::from(val).join("meta.dat"); + let meta = PathBuf::from(val).join("meta.ron"); if meta.exists() || meta.parent().map(|x| x.exists()).unwrap_or(false) { return meta; } @@ -83,6 +89,6 @@ impl Meta { let proj_dirs = ProjectDirs::from("net", "veloren", "voxygen") .expect("System's $HOME directory path not found!"); - proj_dirs.config_dir().join("meta").with_extension("dat") + proj_dirs.config_dir().join("meta").with_extension("ron") } } diff --git a/voxygen/src/scene/camera.rs b/voxygen/src/scene/camera.rs index 9eb279d3c5..bb29781c25 100644 --- a/voxygen/src/scene/camera.rs +++ b/voxygen/src/scene/camera.rs @@ -6,7 +6,7 @@ use vek::*; const NEAR_PLANE: f32 = 0.5; const FAR_PLANE: f32 = 100000.0; -const FIRST_PERSON_INTERP_TIME: f32 = 0.05; +const FIRST_PERSON_INTERP_TIME: f32 = 0.1; const THIRD_PERSON_INTERP_TIME: f32 = 0.1; pub const MIN_ZOOM: f32 = 0.1; diff --git a/voxygen/src/scene/figure/cache.rs b/voxygen/src/scene/figure/cache.rs index dcace2126d..26961df98c 100644 --- a/voxygen/src/scene/figure/cache.rs +++ b/voxygen/src/scene/figure/cache.rs @@ -6,7 +6,10 @@ use crate::{ }; use common::{ assets::watch::ReloadIndicator, - comp::{ActionState, Body, CharacterState, Equipment, MovementState}, + comp::{ + item::{tool::ToolKind, ItemKind}, + Body, CharacterState, Item, Loadout, + }, }; use hashbrown::{hash_map::Entry, HashMap}; use std::{ @@ -17,25 +20,38 @@ use std::{ #[derive(PartialEq, Eq, Hash, Clone)] enum FigureKey { Simple(Body), - Complex( - Body, - Option, - CameraMode, - Option, - ), + Complex(Body, CameraMode, CharacterCacheKey), } #[derive(PartialEq, Eq, Hash, Clone)] -struct CharacterStateCacheKey { - movement: Discriminant, - action: Discriminant, +struct CharacterCacheKey { + state: Option>, // TODO: Can this be simplified? + active_tool: Option, + shoulder: Option, + chest: Option, + belt: Option, + hand: Option, + pants: Option, + foot: Option, } -impl From<&CharacterState> for CharacterStateCacheKey { - fn from(cs: &CharacterState) -> Self { +impl CharacterCacheKey { + fn from(cs: Option<&CharacterState>, loadout: &Loadout) -> Self { Self { - movement: discriminant(&cs.movement), - action: discriminant(&cs.action), + state: cs.map(|cs| discriminant(cs)), + active_tool: if let Some(ItemKind::Tool(tool)) = + loadout.active_item.as_ref().map(|i| &i.item.kind) + { + Some(tool.kind) + } else { + None + }, + shoulder: loadout.shoulder.clone(), + chest: loadout.chest.clone(), + belt: loadout.belt.clone(), + hand: loadout.hand.clone(), + pants: loadout.pants.clone(), + foot: loadout.foot.clone(), } } } @@ -60,7 +76,7 @@ impl FigureModelCache { &mut self, renderer: &mut Renderer, body: Body, - equipment: Option<&Equipment>, + loadout: Option<&Loadout>, tick: u64, camera_mode: CameraMode, character_state: Option<&CharacterState>, @@ -69,12 +85,11 @@ impl FigureModelCache { for<'a> &'a common::comp::Body: std::convert::TryInto, Skel::Attr: Default, { - let key = if equipment.is_some() { + let key = if let Some(loadout) = loadout { FigureKey::Complex( body, - equipment.cloned(), camera_mode, - character_state.map(|cs| CharacterStateCacheKey::from(cs)), + CharacterCacheKey::from(character_state, loadout), ) } else { FigureKey::Simple(body) @@ -107,6 +122,12 @@ impl FigureModelCache { HumArmorPantsSpec::load_watched(&mut self.manifest_indicator); let humanoid_armor_foot_spec = HumArmorFootSpec::load_watched(&mut self.manifest_indicator); + let humanoid_main_weapon_spec = + HumMainWeaponSpec::load_watched(&mut self.manifest_indicator); + + // TODO: This is bad code, maybe this method should return Option<_> + let default_loadout = Loadout::default(); + let loadout = loadout.unwrap_or(&default_loadout); [ match camera_mode { @@ -126,61 +147,66 @@ impl FigureModelCache { CameraMode::FirstPerson => None, }, match camera_mode { - CameraMode::ThirdPerson => { - Some(humanoid_armor_chest_spec.mesh_chest(&body)) - }, + CameraMode::ThirdPerson => Some( + humanoid_armor_chest_spec.mesh_chest(&body, loadout), + ), CameraMode::FirstPerson => None, }, match camera_mode { CameraMode::ThirdPerson => { - Some(humanoid_armor_belt_spec.mesh_belt(&body)) - }, - CameraMode::FirstPerson => None, - }, - match camera_mode { - CameraMode::ThirdPerson => { - Some(humanoid_armor_pants_spec.mesh_pants(&body)) - }, - CameraMode::FirstPerson => None, - }, - if camera_mode == CameraMode::FirstPerson - && character_state - .map(|cs| cs.action.is_roll()) - .unwrap_or_default() - { - None - } else { - Some(humanoid_armor_hand_spec.mesh_left_hand(&body)) - }, - if character_state - .map(|cs| cs.action.is_roll()) - .unwrap_or_default() - { - None - } else { - Some(humanoid_armor_hand_spec.mesh_right_hand(&body)) - }, - match camera_mode { - CameraMode::ThirdPerson => { - Some(humanoid_armor_foot_spec.mesh_left_foot(&body)) - }, - CameraMode::FirstPerson => None, - }, - match camera_mode { - CameraMode::ThirdPerson => { - Some(humanoid_armor_foot_spec.mesh_right_foot(&body)) + Some(humanoid_armor_belt_spec.mesh_belt(&body, loadout)) }, CameraMode::FirstPerson => None, }, match camera_mode { CameraMode::ThirdPerson => Some( - humanoid_armor_shoulder_spec.mesh_left_shoulder(&body), + humanoid_armor_pants_spec.mesh_pants(&body, loadout), + ), + CameraMode::FirstPerson => None, + }, + if camera_mode == CameraMode::FirstPerson + && character_state + .map(|cs| cs.is_dodge()) + .unwrap_or_default() + { + None + } else { + Some( + humanoid_armor_hand_spec.mesh_left_hand(&body, loadout), + ) + }, + if character_state.map(|cs| cs.is_dodge()).unwrap_or_default() { + None + } else { + Some( + humanoid_armor_hand_spec + .mesh_right_hand(&body, loadout), + ) + }, + match camera_mode { + CameraMode::ThirdPerson => Some( + humanoid_armor_foot_spec.mesh_left_foot(&body, loadout), ), CameraMode::FirstPerson => None, }, match camera_mode { CameraMode::ThirdPerson => Some( - humanoid_armor_shoulder_spec.mesh_right_shoulder(&body), + humanoid_armor_foot_spec + .mesh_right_foot(&body, loadout), + ), + CameraMode::FirstPerson => None, + }, + match camera_mode { + CameraMode::ThirdPerson => Some( + humanoid_armor_shoulder_spec + .mesh_left_shoulder(&body, loadout), + ), + CameraMode::FirstPerson => None, + }, + match camera_mode { + CameraMode::ThirdPerson => Some( + humanoid_armor_shoulder_spec + .mesh_right_shoulder(&body, loadout), ), CameraMode::FirstPerson => None, }, @@ -188,13 +214,13 @@ impl FigureModelCache { if camera_mode != CameraMode::FirstPerson || character_state .map(|cs| { - cs.action.is_attack() - || cs.action.is_block() - || cs.action.is_wield() + cs.is_attack() || cs.is_block() || cs.is_wield() }) .unwrap_or_default() { - Some(mesh_main(equipment.and_then(|e| e.main.as_ref()))) + Some(humanoid_main_weapon_spec.mesh_main_weapon( + loadout.active_item.as_ref().map(|i| &i.item.kind), + )) } else { None }, diff --git a/voxygen/src/scene/figure/load.rs b/voxygen/src/scene/figure/load.rs index 4b54912c35..fcb221726d 100644 --- a/voxygen/src/scene/figure/load.rs +++ b/voxygen/src/scene/figure/load.rs @@ -10,15 +10,16 @@ use common::{ bird_small, critter::{BodyType as CBodyType, Species as CSpecies}, dragon, fish_medium, fish_small, - humanoid::{ - Belt, Body, BodyType, Chest, EyeColor, Eyebrows, Foot, Hand, Pants, Race, Shoulder, - Skin, + humanoid::{Body, BodyType, EyeColor, Eyebrows, Race, Skin}, + item::{ + armor::{Armor, Belt, Chest, Foot, Hand, Pants, Shoulder}, + tool::{Tool, ToolKind}, + ItemKind, }, - item::Tool, object, quadruped_medium::{BodyType as QMBodyType, Species as QMSpecies}, quadruped_small::{BodyType as QSBodyType, Species as QSSpecies}, - Item, ItemKind, + Loadout, }, figure::{DynaUnionizer, MatSegment, Material, Segment}, }; @@ -49,6 +50,9 @@ fn graceful_load_segment(mesh_name: &str) -> Segment { fn graceful_load_mat_segment(mesh_name: &str) -> MatSegment { MatSegment::from(graceful_load_vox(mesh_name).as_ref()) } +fn graceful_load_mat_segment_flipped(mesh_name: &str) -> MatSegment { + MatSegment::from_vox(graceful_load_vox(mesh_name).as_ref(), true) +} fn generate_mesh(segment: &Segment, offset: Vec3) -> Mesh { Meshable::::generate_mesh(segment, offset).0 @@ -135,7 +139,7 @@ impl Asset for HumHeadSpec { const ENDINGS: &'static [&'static str] = &["ron"]; fn parse(buf_reader: BufReader) -> Result { - Ok(ron::de::from_reader(buf_reader).expect("Error parsing humanoid head spec")) + ron::de::from_reader(buf_reader).map_err(assets::Error::parse_error) } } @@ -230,60 +234,76 @@ impl HumHeadSpec { // Armor spects should be in the same order, top to bottom. // These seem overly split up, but wanted to keep the armor seperated // unlike head which is done above. - #[derive(Serialize, Deserialize)] -pub struct HumArmorShoulderSpec(HashMap); +pub struct ArmorVoxSpecMap +where + K: std::hash::Hash + std::cmp::Eq, +{ + default: S, + map: HashMap, +} #[derive(Serialize, Deserialize)] -pub struct HumArmorChestSpec(HashMap); +pub struct HumArmorShoulderSpec(ArmorVoxSpecMap); #[derive(Serialize, Deserialize)] -pub struct HumArmorHandSpec(HashMap); +pub struct HumArmorChestSpec(ArmorVoxSpecMap); #[derive(Serialize, Deserialize)] -pub struct HumArmorBeltSpec(HashMap); +pub struct HumArmorHandSpec(ArmorVoxSpecMap); #[derive(Serialize, Deserialize)] -pub struct HumArmorPantsSpec(HashMap); +pub struct HumArmorBeltSpec(ArmorVoxSpecMap); #[derive(Serialize, Deserialize)] -pub struct HumArmorFootSpec(HashMap); +pub struct HumArmorPantsSpec(ArmorVoxSpecMap); +#[derive(Serialize, Deserialize)] +pub struct HumArmorFootSpec(ArmorVoxSpecMap); +#[derive(Serialize, Deserialize)] +pub struct HumMainWeaponSpec(HashMap); impl Asset for HumArmorShoulderSpec { const ENDINGS: &'static [&'static str] = &["ron"]; fn parse(buf_reader: BufReader) -> Result { - Ok(ron::de::from_reader(buf_reader).expect("Error parsing humanoid armor shoulder spec")) + ron::de::from_reader(buf_reader).map_err(assets::Error::parse_error) } } impl Asset for HumArmorChestSpec { const ENDINGS: &'static [&'static str] = &["ron"]; fn parse(buf_reader: BufReader) -> Result { - Ok(ron::de::from_reader(buf_reader).expect("Error parsing humanoid armor chest spec")) + ron::de::from_reader(buf_reader).map_err(assets::Error::parse_error) } } impl Asset for HumArmorHandSpec { const ENDINGS: &'static [&'static str] = &["ron"]; fn parse(buf_reader: BufReader) -> Result { - Ok(ron::de::from_reader(buf_reader).expect("Error parsing humanoid armor hand spec")) + ron::de::from_reader(buf_reader).map_err(assets::Error::parse_error) } } impl Asset for HumArmorBeltSpec { const ENDINGS: &'static [&'static str] = &["ron"]; fn parse(buf_reader: BufReader) -> Result { - Ok(ron::de::from_reader(buf_reader).expect("Error parsing humanoid armor belt spec")) + ron::de::from_reader(buf_reader).map_err(assets::Error::parse_error) } } impl Asset for HumArmorPantsSpec { const ENDINGS: &'static [&'static str] = &["ron"]; fn parse(buf_reader: BufReader) -> Result { - Ok(ron::de::from_reader(buf_reader).expect("Error parsing humanoid armor pants spec")) + ron::de::from_reader(buf_reader).map_err(assets::Error::parse_error) } } impl Asset for HumArmorFootSpec { const ENDINGS: &'static [&'static str] = &["ron"]; fn parse(buf_reader: BufReader) -> Result { - Ok(ron::de::from_reader(buf_reader).expect("Error parsing humanoid armor foot spec")) + ron::de::from_reader(buf_reader).map_err(assets::Error::parse_error) + } +} +impl Asset for HumMainWeaponSpec { + const ENDINGS: &'static [&'static str] = &["ron"]; + + fn parse(buf_reader: BufReader) -> Result { + ron::de::from_reader(buf_reader).map_err(assets::Error::parse_error) } } @@ -293,42 +313,54 @@ impl HumArmorShoulderSpec { .unwrap() } - pub fn mesh_left_shoulder(&self, body: &Body) -> Mesh { - let spec = match self.0.get(&body.shoulder) { - Some(spec) => spec, - None => { - error!("No shoulder specification exists for {:?}", body.shoulder); - return load_mesh("not_found", Vec3::new(-3.0, -3.5, 0.1)); - }, + fn mesh_shoulder(&self, body: &Body, loadout: &Loadout, flipped: bool) -> Mesh { + let spec = if let Some(ItemKind::Armor { + kind: Armor::Shoulder(shoulder), + .. + }) = loadout.shoulder.as_ref().map(|i| &i.kind) + { + match self.0.map.get(&shoulder) { + Some(spec) => spec, + None => { + error!("No shoulder specification exists for {:?}", shoulder); + return load_mesh("not_found", Vec3::new(-3.0, -3.5, 0.1)); + }, + } + } else { + &self.0.default }; let shoulder_segment = color_segment( - graceful_load_mat_segment(&spec.left.vox_spec.0), + if flipped { + graceful_load_mat_segment_flipped(&spec.left.vox_spec.0) + } 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), ); - generate_mesh(&shoulder_segment, Vec3::from(spec.left.vox_spec.1)) + // TODO: use this if we can + /*let mut offset = spec.vox_spec.1; + if flipped { + offset[0] = -(shoulder_segment.size().x as f32) - offset[0]; + }*/ + let offset = if flipped { + spec.left.vox_spec.1 + } else { + spec.right.vox_spec.1 + }; + + generate_mesh(&shoulder_segment, Vec3::from(offset)) } - pub fn mesh_right_shoulder(&self, body: &Body) -> Mesh { - let spec = match self.0.get(&body.shoulder) { - Some(spec) => spec, - None => { - error!("No shoulder specification exists for {:?}", body.shoulder); - return load_mesh("not_found", Vec3::new(-2.0, -3.5, 0.1)); - }, - }; + pub fn mesh_left_shoulder(&self, body: &Body, loadout: &Loadout) -> Mesh { + self.mesh_shoulder(body, loadout, true) + } - let shoulder_segment = color_segment( - 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), - ); - - generate_mesh(&shoulder_segment, Vec3::from(spec.right.vox_spec.1)) + pub fn mesh_right_shoulder(&self, body: &Body, loadout: &Loadout) -> Mesh { + self.mesh_shoulder(body, loadout, false) } } @@ -338,13 +370,21 @@ impl HumArmorChestSpec { .unwrap() } - pub fn mesh_chest(&self, body: &Body) -> Mesh { - let spec = match self.0.get(&body.chest) { - Some(spec) => spec, - None => { - error!("No chest specification exists for {:?}", body.chest); - return load_mesh("not_found", Vec3::new(-7.0, -3.5, 2.0)); - }, + pub fn mesh_chest(&self, body: &Body, loadout: &Loadout) -> Mesh { + let spec = if let Some(ItemKind::Armor { + kind: Armor::Chest(chest), + .. + }) = loadout.chest.as_ref().map(|i| &i.kind) + { + match self.0.map.get(&chest) { + Some(spec) => spec, + None => { + error!("No chest specification exists for {:?}", loadout.chest); + return load_mesh("not_found", Vec3::new(-7.0, -3.5, 2.0)); + }, + } + } else { + &self.0.default }; let color = |mat_segment| { @@ -356,7 +396,7 @@ impl HumArmorChestSpec { ) }; - let bare_chest = graceful_load_mat_segment("armor.chest.none"); + let bare_chest = graceful_load_mat_segment("armor.empty"); let mut chest_armor = graceful_load_mat_segment(&spec.vox_spec.0); @@ -381,42 +421,49 @@ impl HumArmorHandSpec { .unwrap() } - pub fn mesh_left_hand(&self, body: &Body) -> Mesh { - let spec = match self.0.get(&body.hand) { - Some(spec) => spec, - None => { - error!("No hand specification exists for {:?}", body.hand); - return load_mesh("not_found", Vec3::new(-1.5, -1.5, -7.0)); - }, + fn mesh_hand(&self, body: &Body, loadout: &Loadout, flipped: bool) -> Mesh { + let spec = if let Some(ItemKind::Armor { + kind: Armor::Hand(hand), + .. + }) = loadout.hand.as_ref().map(|i| &i.kind) + { + match self.0.map.get(&hand) { + Some(spec) => spec, + None => { + error!("No hand specification exists for {:?}", hand); + return load_mesh("not_found", Vec3::new(-1.5, -1.5, -7.0)); + }, + } + } else { + &self.0.default }; let hand_segment = color_segment( - graceful_load_mat_segment(&spec.left.vox_spec.0), + if flipped { + graceful_load_mat_segment_flipped(&spec.left.vox_spec.0) + } 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), ); - generate_mesh(&hand_segment, Vec3::from(spec.left.vox_spec.1)) + let offset = if flipped { + spec.left.vox_spec.1 + } else { + spec.right.vox_spec.1 + }; + + generate_mesh(&hand_segment, Vec3::from(offset)) } - pub fn mesh_right_hand(&self, body: &Body) -> Mesh { - let spec = match self.0.get(&body.hand) { - Some(spec) => spec, - None => { - error!("No hand specification exists for {:?}", body.hand); - return load_mesh("not_found", Vec3::new(-1.5, -1.5, -7.0)); - }, - }; + pub fn mesh_left_hand(&self, body: &Body, loadout: &Loadout) -> Mesh { + self.mesh_hand(body, loadout, true) + } - let hand_segment = color_segment( - 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), - ); - - generate_mesh(&hand_segment, Vec3::from(spec.right.vox_spec.1)) + pub fn mesh_right_hand(&self, body: &Body, loadout: &Loadout) -> Mesh { + self.mesh_hand(body, loadout, false) } } @@ -426,13 +473,21 @@ impl HumArmorBeltSpec { .unwrap() } - pub fn mesh_belt(&self, body: &Body) -> Mesh { - let spec = match self.0.get(&body.belt) { - Some(spec) => spec, - None => { - error!("No belt specification exists for {:?}", body.belt); - return load_mesh("not_found", Vec3::new(-4.0, -3.5, 2.0)); - }, + pub fn mesh_belt(&self, body: &Body, loadout: &Loadout) -> Mesh { + let spec = if let Some(ItemKind::Armor { + kind: Armor::Belt(belt), + .. + }) = loadout.belt.as_ref().map(|i| &i.kind) + { + match self.0.map.get(&belt) { + Some(spec) => spec, + None => { + error!("No belt specification exists for {:?}", belt); + return load_mesh("not_found", Vec3::new(-4.0, -3.5, 2.0)); + }, + } + } else { + &self.0.default }; let belt_segment = color_segment( @@ -452,13 +507,21 @@ impl HumArmorPantsSpec { .unwrap() } - pub fn mesh_pants(&self, body: &Body) -> Mesh { - let spec = match self.0.get(&body.pants) { - Some(spec) => spec, - None => { - error!("No pants specification exists for {:?}", body.pants); - return load_mesh("not_found", Vec3::new(-5.0, -3.5, 1.0)); - }, + pub fn mesh_pants(&self, body: &Body, loadout: &Loadout) -> Mesh { + let spec = if let Some(ItemKind::Armor { + kind: Armor::Pants(pants), + .. + }) = loadout.pants.as_ref().map(|i| &i.kind) + { + match self.0.map.get(&pants) { + Some(spec) => spec, + None => { + error!("No pants specification exists for {:?}", pants); + return load_mesh("not_found", Vec3::new(-5.0, -3.5, 1.0)); + }, + } + } else { + &self.0.default }; let color = |mat_segment| { @@ -470,7 +533,7 @@ impl HumArmorPantsSpec { ) }; - let bare_pants = graceful_load_mat_segment("armor.pants.grayscale"); + let bare_pants = graceful_load_mat_segment("armor.empty"); let mut pants_armor = graceful_load_mat_segment(&spec.vox_spec.0); @@ -495,17 +558,29 @@ impl HumArmorFootSpec { .unwrap() } - pub fn mesh_left_foot(&self, body: &Body) -> Mesh { - let spec = match self.0.get(&body.foot) { - Some(spec) => spec, - None => { - error!("No foot specification exists for {:?}", body.foot); - return load_mesh("not_found", Vec3::new(-2.5, -3.5, -9.0)); - }, + fn mesh_foot(&self, body: &Body, loadout: &Loadout, flipped: bool) -> Mesh { + let spec = if let Some(ItemKind::Armor { + kind: Armor::Foot(foot), + .. + }) = loadout.foot.as_ref().map(|i| &i.kind) + { + match self.0.map.get(&foot) { + Some(spec) => spec, + None => { + error!("No foot specification exists for {:?}", foot); + return load_mesh("not_found", Vec3::new(-2.5, -3.5, -9.0)); + }, + } + } else { + &self.0.default }; let foot_segment = color_segment( - graceful_load_mat_segment(&spec.vox_spec.0), + if flipped { + graceful_load_mat_segment_flipped(&spec.vox_spec.0) + } 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), @@ -514,44 +589,38 @@ impl HumArmorFootSpec { generate_mesh(&foot_segment, Vec3::from(spec.vox_spec.1)) } - pub fn mesh_right_foot(&self, body: &Body) -> Mesh { - let spec = match self.0.get(&body.foot) { - Some(spec) => spec, - None => { - error!("No foot specification exists for {:?}", body.foot); - return load_mesh("not_found", Vec3::new(-2.5, -3.5, -9.0)); - }, - }; + pub fn mesh_left_foot(&self, body: &Body, loadout: &Loadout) -> Mesh { + self.mesh_foot(body, loadout, true) + } - let foot_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), - ); - - generate_mesh(&foot_segment, Vec3::from(spec.vox_spec.1)) + pub fn mesh_right_foot(&self, body: &Body, loadout: &Loadout) -> Mesh { + self.mesh_foot(body, loadout, false) } } -pub fn mesh_main(item: Option<&Item>) -> Mesh { - if let Some(item) = item { - let (name, offset) = match item.kind { - ItemKind::Tool { kind, .. } => match kind { - Tool::Sword => ("weapon.sword.rusty_2h", Vec3::new(-1.5, -6.5, -4.0)), - Tool::Axe => ("weapon.axe.rusty_2h", Vec3::new(-1.5, -5.0, -4.0)), - Tool::Hammer => ("weapon.hammer.rusty_2h", Vec3::new(-2.5, -5.5, -4.0)), - Tool::Dagger => ("weapon.hammer.rusty_2h", Vec3::new(-2.5, -5.5, -4.0)), - Tool::Shield => ("weapon.axe.rusty_2h", Vec3::new(-2.5, -6.5, -2.0)), - Tool::Bow => ("weapon.bow.simple-bow", Vec3::new(-1.0, -6.0, -2.0)), - Tool::Staff => ("weapon.staff.wood-fire", Vec3::new(-1.0, -6.0, -3.0)), - Tool::Debug(_) => ("weapon.debug_wand", Vec3::new(-1.5, -9.5, -4.0)), - }, - _ => return Mesh::new(), +impl HumMainWeaponSpec { + pub fn load_watched(indicator: &mut ReloadIndicator) -> Arc { + assets::load_watched::("voxygen.voxel.humanoid_main_weapon_manifest", indicator) + .unwrap() + } + + pub fn mesh_main_weapon(&self, item_kind: Option<&ItemKind>) -> Mesh { + let tool_kind = if let Some(ItemKind::Tool(Tool { kind, .. })) = item_kind { + kind + } else { + return Mesh::new(); }; - load_mesh(name, offset) - } else { - Mesh::new() + + let spec = match self.0.get(tool_kind) { + Some(spec) => spec, + None => { + error!("No hand specification exists for {:?}", tool_kind); + return load_mesh("not_found", Vec3::new(-1.5, -1.5, -7.0)); + }, + }; + + let tool_kind_segment = graceful_load_segment(&spec.vox_spec.0); + generate_mesh(&tool_kind_segment, Vec3::from(spec.vox_spec.1)) } } @@ -598,7 +667,7 @@ impl Asset for QuadrupedSmallCentralSpec { const ENDINGS: &'static [&'static str] = &["ron"]; fn parse(buf_reader: BufReader) -> Result { - Ok(ron::de::from_reader(buf_reader).expect("Error parsing quad_small central spec")) + ron::de::from_reader(buf_reader).map_err(assets::Error::parse_error) } } @@ -606,7 +675,7 @@ impl Asset for QuadrupedSmallLateralSpec { const ENDINGS: &'static [&'static str] = &["ron"]; fn parse(buf_reader: BufReader) -> Result { - Ok(ron::de::from_reader(buf_reader).expect("Error parsing quadruped small lateral spec")) + ron::de::from_reader(buf_reader).map_err(assets::Error::parse_error) } } @@ -759,7 +828,7 @@ impl Asset for QuadrupedMediumCentralSpec { const ENDINGS: &'static [&'static str] = &["ron"]; fn parse(buf_reader: BufReader) -> Result { - Ok(ron::de::from_reader(buf_reader).expect("Error parsing quadruped medium central spec")) + ron::de::from_reader(buf_reader).map_err(assets::Error::parse_error) } } @@ -767,7 +836,7 @@ impl Asset for QuadrupedMediumLateralSpec { const ENDINGS: &'static [&'static str] = &["ron"]; fn parse(buf_reader: BufReader) -> Result { - Ok(ron::de::from_reader(buf_reader).expect("Error parsing quadruped medium lateral spec")) + ron::de::from_reader(buf_reader).map_err(assets::Error::parse_error) } } @@ -1005,7 +1074,7 @@ impl Asset for BirdMediumCenterSpec { const ENDINGS: &'static [&'static str] = &["ron"]; fn parse(buf_reader: BufReader) -> Result { - Ok(ron::de::from_reader(buf_reader).expect("Error parsing bird medium center spec")) + ron::de::from_reader(buf_reader).map_err(assets::Error::parse_error) } } @@ -1013,7 +1082,7 @@ impl Asset for BirdMediumLateralSpec { const ENDINGS: &'static [&'static str] = &["ron"]; fn parse(buf_reader: BufReader) -> Result { - Ok(ron::de::from_reader(buf_reader).expect("Error parsing bird medium lateral spec")) + ron::de::from_reader(buf_reader).map_err(assets::Error::parse_error) } } @@ -1163,7 +1232,7 @@ impl Asset for CritterCenterSpec { const ENDINGS: &'static [&'static str] = &["ron"]; fn parse(buf_reader: BufReader) -> Result { - Ok(ron::de::from_reader(buf_reader).expect("Error parsing critter center spec")) + ron::de::from_reader(buf_reader).map_err(assets::Error::parse_error) } } @@ -1518,7 +1587,7 @@ impl Asset for BipedLargeCenterSpec { const ENDINGS: &'static [&'static str] = &["ron"]; fn parse(buf_reader: BufReader) -> Result { - Ok(ron::de::from_reader(buf_reader).expect("Error parsing biped large center spec")) + ron::de::from_reader(buf_reader).map_err(assets::Error::parse_error) } } @@ -1526,7 +1595,7 @@ impl Asset for BipedLargeLateralSpec { const ENDINGS: &'static [&'static str] = &["ron"]; fn parse(buf_reader: BufReader) -> Result { - Ok(ron::de::from_reader(buf_reader).expect("Error parsing biped large lateral spec")) + ron::de::from_reader(buf_reader).map_err(assets::Error::parse_error) } } @@ -1796,7 +1865,8 @@ pub fn mesh_object(obj: object::Body) -> Mesh { Body::Pouch => ("object.pouch", Vec3::new(-5.5, -4.5, 0.0)), Body::CraftingBench => ("object.crafting_bench", Vec3::new(-9.5, -7.0, 0.0)), Body::ArrowSnake => ("weapon.projectile.snake-arrow", Vec3::new(-1.5, -6.5, 0.0)), - Body::BoltFire => ("weapon.projectile.fire-bolt", Vec3::new(-3.0, -5.5, -3.0)), + Body::BoltFire => ("weapon.projectile.fire-bolt-0", Vec3::new(-3.0, -5.5, -3.0)), + Body::BoltFireBig => ("weapon.projectile.fire-bolt-1", Vec3::new(-6.0, -6.0, -6.0)), }; load_mesh(name, offset) } diff --git a/voxygen/src/scene/figure/mod.rs b/voxygen/src/scene/figure/mod.rs index 47a0674246..5fa3f1e485 100644 --- a/voxygen/src/scene/figure/mod.rs +++ b/voxygen/src/scene/figure/mod.rs @@ -12,6 +12,7 @@ use crate::{ object::ObjectSkeleton, quadruped_medium::QuadrupedMediumSkeleton, quadruped_small::QuadrupedSmallSkeleton, Animation, Skeleton, }, + ecs::comp::Interpolated, render::{Consts, FigureBoneData, FigureLocals, Globals, Light, Renderer, Shadow}, scene::{ camera::{Camera, CameraMode}, @@ -20,10 +21,11 @@ use crate::{ }; use common::{ comp::{ - ActionState::*, Body, CharacterState, ItemKind, Last, MovementState::*, Ori, Pos, Scale, - Stats, Vel, + item::ItemKind, Body, CharacterState, Last, Loadout, Ori, PhysicsState, Pos, Scale, Stats, + Vel, }, state::State, + states::triple_strike, terrain::TerrainChunk, vol::RectRasterableVol, }; @@ -34,6 +36,8 @@ use treeculler::{BVol, BoundingSphere}; use vek::*; const DAMAGE_FADE_COEFFICIENT: f64 = 5.0; +const MOVING_THRESHOLD: f32 = 0.7; +const MOVING_THRESHOLD_SQR: f32 = MOVING_THRESHOLD * MOVING_THRESHOLD; pub struct FigureMgr { model_cache: FigureModelCache, @@ -113,19 +117,36 @@ impl FigureMgr { .get(scene_data.player_entity) .map_or(Vec3::zero(), |pos| pos.0); - for (entity, pos, ori, scale, body, character, last_character, stats) in ( + for ( + entity, + pos, + interpolated, + vel, + scale, + body, + character, + last_character, + physics, + stats, + loadout, + ) in ( &ecs.entities(), &ecs.read_storage::(), - ecs.read_storage::().maybe(), + ecs.read_storage::().maybe(), + &ecs.read_storage::(), ecs.read_storage::().maybe(), &ecs.read_storage::(), ecs.read_storage::().maybe(), ecs.read_storage::>().maybe(), + &ecs.read_storage::(), ecs.read_storage::().maybe(), + ecs.read_storage::().maybe(), ) .join() { - let ori = ori.copied().unwrap_or(Ori(Vec3::unit_y())); + let (pos, ori) = interpolated + .map(|i| (Pos(i.pos), *i.ori)) + .unwrap_or((*pos, Vec3::unit_y())); // Don't process figures outside the vd let vd_frac = Vec2::from(pos.0 - player_pos) @@ -367,20 +388,13 @@ impl FigureMgr { let scale = scale.map(|s| s.0).unwrap_or(1.0); - let mut movement_animation_rate = 1.0; - let mut action_animation_rate = 1.0; + let mut state_animation_rate = 1.0; - let vel = ecs - .read_storage::() - .get(entity) - .cloned() - .unwrap_or_default(); - - let active_tool_kind = if let Some(ItemKind::Tool { kind, .. }) = stats - .and_then(|s| s.equipment.main.as_ref()) - .map(|i| &i.kind) - { - Some(*kind) + let active_item_kind = loadout + .and_then(|l| l.active_item.as_ref()) + .map(|i| &i.item.kind); + let active_tool_kind = if let Some(ItemKind::Tool(tool)) = active_item_kind { + Some(tool.kind) } else { None }; @@ -392,7 +406,7 @@ impl FigureMgr { .get_or_create_model( renderer, *body, - stats.map(|s| &s.equipment), + loadout, tick, CameraMode::default(), None, @@ -408,116 +422,197 @@ impl FigureMgr { _ => continue, }; - if !character.is_same_movement(&last_character.0) { - state.movement_time = 0.0; - } - if !character.is_same_action(&last_character.0) { - state.action_time = 0.0; + if !character.same_variant(&last_character.0) { + state.state_time = 0.0; } - let target_base = match &character.movement { - Stand => anim::character::StandAnimation::update_skeleton( + let target_base = match ( + physics.on_ground, + vel.0.magnitude_squared() > MOVING_THRESHOLD_SQR, // Moving + physics.in_fluid, // In water + ) { + // Standing + (true, false, _) => anim::character::StandAnimation::update_skeleton( &CharacterSkeleton::new(), (active_tool_kind, time), - state.movement_time, - &mut movement_animation_rate, + state.state_time, + &mut state_animation_rate, skeleton_attr, ), - Run => anim::character::RunAnimation::update_skeleton( + // Running + (true, true, _) => anim::character::RunAnimation::update_skeleton( &CharacterSkeleton::new(), - (active_tool_kind, vel.0, ori.0, state.last_ori, time), - state.movement_time, - &mut movement_animation_rate, + (active_tool_kind, vel.0, ori, state.last_ori, time), + state.state_time, + &mut state_animation_rate, skeleton_attr, ), - Jump | Fall => anim::character::JumpAnimation::update_skeleton( + // In air + (false, _, false) => anim::character::JumpAnimation::update_skeleton( &CharacterSkeleton::new(), (active_tool_kind, time), - state.movement_time, - &mut movement_animation_rate, + state.state_time, + &mut state_animation_rate, skeleton_attr, ), - Glide => anim::character::GlidingAnimation::update_skeleton( + // Swim + (false, _, true) => anim::character::SwimAnimation::update_skeleton( &CharacterSkeleton::new(), - (active_tool_kind, vel.0, ori.0, state.last_ori, time), - state.movement_time, - &mut movement_animation_rate, - skeleton_attr, - ), - Swim => anim::character::SwimAnimation::update_skeleton( - &CharacterSkeleton::new(), - (active_tool_kind, vel.0.magnitude(), ori.0.magnitude(), time), - state.movement_time, - &mut movement_animation_rate, - skeleton_attr, - ), - Climb => anim::character::ClimbAnimation::update_skeleton( - &CharacterSkeleton::new(), - (active_tool_kind, vel.0, ori.0, time), - state.movement_time, - &mut movement_animation_rate, - skeleton_attr, - ), - Sit => anim::character::SitAnimation::update_skeleton( - &CharacterSkeleton::new(), - (active_tool_kind, time), - state.movement_time, - &mut movement_animation_rate, + (active_tool_kind, vel.0, ori.magnitude(), time), + state.state_time, + &mut state_animation_rate, skeleton_attr, ), }; - let target_bones = match (&character.movement, &character.action) { - (Stand, Wield { .. }) => anim::character::CidleAnimation::update_skeleton( - &target_base, - (active_tool_kind, time), - state.action_time, - &mut action_animation_rate, - skeleton_attr, - ), - (Stand, Block { .. }) => { - anim::character::BlockIdleAnimation::update_skeleton( + let target_bones = match &character { + CharacterState::Roll { .. } => { + anim::character::RollAnimation::update_skeleton( &target_base, - (active_tool_kind, time), - state.action_time, - &mut action_animation_rate, + (active_tool_kind, ori, state.last_ori, time), + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ) + }, + CharacterState::BasicMelee(_) => { + anim::character::AlphaAnimation::update_skeleton( + &target_base, + (active_tool_kind, vel.0.magnitude(), time), + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ) + }, + CharacterState::BasicRanged(data) => { + if data.exhausted { + anim::character::ShootAnimation::update_skeleton( + &target_base, + (active_tool_kind, vel.0.magnitude(), time), + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ) + } else { + anim::character::ChargeAnimation::update_skeleton( + &target_base, + (active_tool_kind, vel.0.magnitude(), time), + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ) + } + }, + CharacterState::Boost(_) => { + anim::character::AlphaAnimation::update_skeleton( + &target_base, + (active_tool_kind, vel.0.magnitude(), time), + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ) + }, + CharacterState::DashMelee(_) => { + anim::character::DashAnimation::update_skeleton( + &target_base, + (active_tool_kind, time), + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ) + }, + CharacterState::TripleStrike(s) => match s.stage { + triple_strike::Stage::First => { + anim::character::AlphaAnimation::update_skeleton( + &target_base, + (active_tool_kind, vel.0.magnitude(), time), + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ) + }, + triple_strike::Stage::Second => { + anim::character::SpinAnimation::update_skeleton( + &target_base, + (active_tool_kind, time), + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ) + }, + triple_strike::Stage::Third => { + anim::character::BetaAnimation::update_skeleton( + &target_base, + (active_tool_kind, vel.0.magnitude(), time), + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ) + }, + }, + CharacterState::BasicBlock { .. } => { + anim::character::BlockIdleAnimation::update_skeleton( + &CharacterSkeleton::new(), + (active_tool_kind, time), + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ) + }, + /* + CharacterState::Charge(_) => { + anim::character::ChargeAnimation::update_skeleton( + &target_base, + (active_tool_kind, time), + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ) + }*/ + CharacterState::Equipping { .. } => { + anim::character::EquipAnimation::update_skeleton( + &target_base, + (active_tool_kind, vel.0.magnitude(), time), + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ) + }, + CharacterState::Wielding { .. } => { + anim::character::WieldAnimation::update_skeleton( + &target_base, + (active_tool_kind, vel.0.magnitude(), time), + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ) + }, + CharacterState::Glide { .. } => { + anim::character::GlidingAnimation::update_skeleton( + &target_base, + (active_tool_kind, vel.0, ori, state.last_ori, time), + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ) + }, + CharacterState::Climb { .. } => { + anim::character::ClimbAnimation::update_skeleton( + &CharacterSkeleton::new(), + (active_tool_kind, vel.0, ori, time), + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ) + }, + CharacterState::Sit { .. } => { + anim::character::SitAnimation::update_skeleton( + &CharacterSkeleton::new(), + (active_tool_kind, time), + state.state_time, + &mut state_animation_rate, skeleton_attr, ) }, - (_, Attack { .. }) => anim::character::AttackAnimation::update_skeleton( - &target_base, - (active_tool_kind, time), - state.action_time, - &mut action_animation_rate, - skeleton_attr, - ), - (_, Wield { .. }) => anim::character::WieldAnimation::update_skeleton( - &target_base, - (active_tool_kind, vel.0.magnitude(), time), - state.action_time, - &mut action_animation_rate, - skeleton_attr, - ), - (_, Roll { .. }) => anim::character::RollAnimation::update_skeleton( - &target_base, - (active_tool_kind, ori.0, state.last_ori, time), - state.action_time, - &mut action_animation_rate, - skeleton_attr, - ), - (_, Block { .. }) => anim::character::BlockAnimation::update_skeleton( - &target_base, - (active_tool_kind, time), - state.action_time, - &mut action_animation_rate, - skeleton_attr, - ), - (_, Charge { .. }) => anim::character::ChargeAnimation::update_skeleton( - &target_base, - (active_tool_kind, time), - state.action_time, - &mut action_animation_rate, - skeleton_attr, - ), _ => target_base, }; @@ -525,13 +620,11 @@ impl FigureMgr { state.update( renderer, pos.0, - vel.0, - ori.0, + ori, scale, col, dt, - movement_animation_rate, - action_animation_rate, + state_animation_rate, lpindex, true, ); @@ -542,7 +635,7 @@ impl FigureMgr { .get_or_create_model( renderer, *body, - stats.map(|s| &s.equipment), + loadout, tick, CameraMode::default(), None, @@ -561,30 +654,41 @@ impl FigureMgr { _ => continue, }; - if !character.is_same_movement(&last_character.0) { - state.movement_time = 0.0; + if !character.same_variant(&last_character.0) { + state.state_time = 0.0; } - let target_base = match character.movement { - Stand => anim::quadruped_small::IdleAnimation::update_skeleton( - &QuadrupedSmallSkeleton::new(), - time, - state.movement_time, - &mut movement_animation_rate, - skeleton_attr, - ), - Run => anim::quadruped_small::RunAnimation::update_skeleton( + let target_base = match ( + physics.on_ground, + vel.0.magnitude_squared() > MOVING_THRESHOLD_SQR, // Moving + physics.in_fluid, // In water + ) { + // Standing + (true, false, false) => { + anim::quadruped_small::IdleAnimation::update_skeleton( + &QuadrupedSmallSkeleton::new(), + time, + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ) + }, + // Running + (true, true, false) => { + anim::quadruped_small::RunAnimation::update_skeleton( + &QuadrupedSmallSkeleton::new(), + (vel.0.magnitude(), time), + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ) + }, + // In air + (false, _, false) => anim::quadruped_small::JumpAnimation::update_skeleton( &QuadrupedSmallSkeleton::new(), (vel.0.magnitude(), time), - state.movement_time, - &mut movement_animation_rate, - skeleton_attr, - ), - Jump => anim::quadruped_small::JumpAnimation::update_skeleton( - &QuadrupedSmallSkeleton::new(), - (vel.0.magnitude(), time), - state.movement_time, - &mut movement_animation_rate, + state.state_time, + &mut state_animation_rate, skeleton_attr, ), @@ -596,13 +700,11 @@ impl FigureMgr { state.update( renderer, pos.0, - vel.0, - ori.0, + ori, scale, col, dt, - movement_animation_rate, - action_animation_rate, + state_animation_rate, lpindex, true, ); @@ -613,7 +715,7 @@ impl FigureMgr { .get_or_create_model( renderer, *body, - stats.map(|s| &s.equipment), + loadout, tick, CameraMode::default(), None, @@ -632,32 +734,45 @@ impl FigureMgr { _ => continue, }; - if !character.is_same_movement(&last_character.0) { - state.movement_time = 0.0; + if !character.same_variant(&last_character.0) { + state.state_time = 0.0; } - let target_base = match character.movement { - Stand => anim::quadruped_medium::IdleAnimation::update_skeleton( - &QuadrupedMediumSkeleton::new(), - time, - state.movement_time, - &mut movement_animation_rate, - skeleton_attr, - ), - Run => anim::quadruped_medium::RunAnimation::update_skeleton( - &QuadrupedMediumSkeleton::new(), - (vel.0.magnitude(), time), - state.movement_time, - &mut movement_animation_rate, - skeleton_attr, - ), - Jump => anim::quadruped_medium::JumpAnimation::update_skeleton( - &QuadrupedMediumSkeleton::new(), - (vel.0.magnitude(), time), - state.movement_time, - &mut movement_animation_rate, - skeleton_attr, - ), + let target_base = match ( + physics.on_ground, + vel.0.magnitude_squared() > MOVING_THRESHOLD_SQR, // Moving + physics.in_fluid, // In water + ) { + // Standing + (true, false, false) => { + anim::quadruped_medium::IdleAnimation::update_skeleton( + &QuadrupedMediumSkeleton::new(), + time, + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ) + }, + // Running + (true, true, false) => { + anim::quadruped_medium::RunAnimation::update_skeleton( + &QuadrupedMediumSkeleton::new(), + (vel.0.magnitude(), time), + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ) + }, + // In air + (false, _, false) => { + anim::quadruped_medium::JumpAnimation::update_skeleton( + &QuadrupedMediumSkeleton::new(), + (vel.0.magnitude(), time), + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ) + }, // TODO! _ => state.skeleton_mut().clone(), @@ -667,13 +782,11 @@ impl FigureMgr { state.update( renderer, pos.0, - vel.0, - ori.0, + ori, scale, col, dt, - movement_animation_rate, - action_animation_rate, + state_animation_rate, lpindex, true, ); @@ -684,7 +797,7 @@ impl FigureMgr { .get_or_create_model( renderer, *body, - stats.map(|s| &s.equipment), + loadout, tick, CameraMode::default(), None, @@ -701,30 +814,37 @@ impl FigureMgr { _ => continue, }; - if !character.is_same_movement(&last_character.0) { - state.movement_time = 0.0; + if !character.same_variant(&last_character.0) { + state.state_time = 0.0; } - let target_base = match character.movement { - Stand => anim::bird_medium::IdleAnimation::update_skeleton( + let target_base = match ( + physics.on_ground, + vel.0.magnitude_squared() > MOVING_THRESHOLD_SQR, // Moving + physics.in_fluid, // In water + ) { + // Standing + (true, false, false) => anim::bird_medium::IdleAnimation::update_skeleton( &BirdMediumSkeleton::new(), time, - state.movement_time, - &mut movement_animation_rate, + state.state_time, + &mut state_animation_rate, skeleton_attr, ), - Run => anim::bird_medium::RunAnimation::update_skeleton( + // Running + (true, true, false) => anim::bird_medium::RunAnimation::update_skeleton( &BirdMediumSkeleton::new(), (vel.0.magnitude(), time), - state.movement_time, - &mut movement_animation_rate, + state.state_time, + &mut state_animation_rate, skeleton_attr, ), - Jump => anim::bird_medium::JumpAnimation::update_skeleton( + // In air + (false, _, false) => anim::bird_medium::JumpAnimation::update_skeleton( &BirdMediumSkeleton::new(), (vel.0.magnitude(), time), - state.movement_time, - &mut movement_animation_rate, + state.state_time, + &mut state_animation_rate, skeleton_attr, ), @@ -736,13 +856,11 @@ impl FigureMgr { state.update( renderer, pos.0, - vel.0, - ori.0, + ori, scale, col, dt, - movement_animation_rate, - action_animation_rate, + state_animation_rate, lpindex, true, ); @@ -753,7 +871,7 @@ impl FigureMgr { .get_or_create_model( renderer, *body, - stats.map(|s| &s.equipment), + loadout, tick, CameraMode::default(), None, @@ -770,30 +888,37 @@ impl FigureMgr { _ => continue, }; - if !character.is_same_movement(&last_character.0) { - state.movement_time = 0.0; + if !character.same_variant(&last_character.0) { + state.state_time = 0.0; } - let target_base = match character.movement { - Stand => anim::fish_medium::IdleAnimation::update_skeleton( + let target_base = match ( + physics.on_ground, + vel.0.magnitude_squared() > MOVING_THRESHOLD_SQR, // Moving + physics.in_fluid, // In water + ) { + // Standing + (true, false, false) => anim::fish_medium::IdleAnimation::update_skeleton( &FishMediumSkeleton::new(), time, - state.movement_time, - &mut movement_animation_rate, + state.state_time, + &mut state_animation_rate, skeleton_attr, ), - Run => anim::fish_medium::RunAnimation::update_skeleton( + // Running + (true, true, false) => anim::fish_medium::RunAnimation::update_skeleton( &FishMediumSkeleton::new(), (vel.0.magnitude(), time), - state.movement_time, - &mut movement_animation_rate, + state.state_time, + &mut state_animation_rate, skeleton_attr, ), - Jump => anim::fish_medium::JumpAnimation::update_skeleton( + // In air + (false, _, false) => anim::fish_medium::JumpAnimation::update_skeleton( &FishMediumSkeleton::new(), (vel.0.magnitude(), time), - state.movement_time, - &mut movement_animation_rate, + state.state_time, + &mut state_animation_rate, skeleton_attr, ), @@ -805,13 +930,11 @@ impl FigureMgr { state.update( renderer, pos.0, - vel.0, - ori.0, + ori, scale, col, dt, - movement_animation_rate, - action_animation_rate, + state_animation_rate, lpindex, true, ); @@ -822,7 +945,7 @@ impl FigureMgr { .get_or_create_model( renderer, *body, - stats.map(|s| &s.equipment), + loadout, tick, CameraMode::default(), None, @@ -839,30 +962,37 @@ impl FigureMgr { _ => continue, }; - if !character.is_same_movement(&last_character.0) { - state.movement_time = 0.0; + if !character.same_variant(&last_character.0) { + state.state_time = 0.0; } - let target_base = match character.movement { - Stand => anim::dragon::IdleAnimation::update_skeleton( + let target_base = match ( + physics.on_ground, + vel.0.magnitude_squared() > MOVING_THRESHOLD_SQR, // Moving + physics.in_fluid, // In water + ) { + // Standing + (true, false, false) => anim::dragon::IdleAnimation::update_skeleton( &DragonSkeleton::new(), time, - state.movement_time, - &mut movement_animation_rate, + state.state_time, + &mut state_animation_rate, skeleton_attr, ), - Run => anim::dragon::RunAnimation::update_skeleton( + // Running + (true, true, false) => anim::dragon::RunAnimation::update_skeleton( &DragonSkeleton::new(), (vel.0.magnitude(), time), - state.movement_time, - &mut movement_animation_rate, + state.state_time, + &mut state_animation_rate, skeleton_attr, ), - Jump => anim::dragon::JumpAnimation::update_skeleton( + // In air + (false, _, false) => anim::dragon::JumpAnimation::update_skeleton( &DragonSkeleton::new(), (vel.0.magnitude(), time), - state.movement_time, - &mut movement_animation_rate, + state.state_time, + &mut state_animation_rate, skeleton_attr, ), @@ -874,13 +1004,11 @@ impl FigureMgr { state.update( renderer, pos.0, - vel.0, - ori.0, + ori, scale, col, dt, - movement_animation_rate, - action_animation_rate, + state_animation_rate, lpindex, true, ); @@ -891,7 +1019,7 @@ impl FigureMgr { .get_or_create_model( renderer, *body, - stats.map(|s| &s.equipment), + loadout, tick, CameraMode::default(), None, @@ -908,30 +1036,37 @@ impl FigureMgr { _ => continue, }; - if !character.is_same_movement(&last_character.0) { - state.movement_time = 0.0; + if !character.same_variant(&last_character.0) { + state.state_time = 0.0; } - let target_base = match character.movement { - Stand => anim::critter::IdleAnimation::update_skeleton( + let target_base = match ( + physics.on_ground, + vel.0.magnitude_squared() > MOVING_THRESHOLD_SQR, // Moving + physics.in_fluid, // In water + ) { + // Standing + (true, false, false) => anim::critter::IdleAnimation::update_skeleton( &CritterSkeleton::new(), time, - state.movement_time, - &mut movement_animation_rate, + state.state_time, + &mut state_animation_rate, skeleton_attr, ), - Run => anim::critter::RunAnimation::update_skeleton( + // Running + (true, true, false) => anim::critter::RunAnimation::update_skeleton( &CritterSkeleton::new(), (vel.0.magnitude(), time), - state.movement_time, - &mut movement_animation_rate, + state.state_time, + &mut state_animation_rate, skeleton_attr, ), - Jump => anim::critter::JumpAnimation::update_skeleton( + // In air + (false, _, false) => anim::critter::JumpAnimation::update_skeleton( &CritterSkeleton::new(), (vel.0.magnitude(), time), - state.movement_time, - &mut movement_animation_rate, + state.state_time, + &mut state_animation_rate, skeleton_attr, ), @@ -943,13 +1078,11 @@ impl FigureMgr { state.update( renderer, pos.0, - vel.0, - ori.0, + ori, scale, col, dt, - movement_animation_rate, - action_animation_rate, + state_animation_rate, lpindex, true, ); @@ -960,7 +1093,7 @@ impl FigureMgr { .get_or_create_model( renderer, *body, - stats.map(|s| &s.equipment), + loadout, tick, CameraMode::default(), None, @@ -977,30 +1110,37 @@ impl FigureMgr { _ => continue, }; - if !character.is_same_movement(&last_character.0) { - state.movement_time = 0.0; + if !character.same_variant(&last_character.0) { + state.state_time = 0.0; } - let target_base = match character.movement { - Stand => anim::bird_small::IdleAnimation::update_skeleton( + let target_base = match ( + physics.on_ground, + vel.0.magnitude_squared() > MOVING_THRESHOLD_SQR, // Moving + physics.in_fluid, // In water + ) { + // Standing + (true, false, false) => anim::bird_small::IdleAnimation::update_skeleton( &BirdSmallSkeleton::new(), time, - state.movement_time, - &mut movement_animation_rate, + state.state_time, + &mut state_animation_rate, skeleton_attr, ), - Run => anim::bird_small::RunAnimation::update_skeleton( + // Running + (true, true, false) => anim::bird_small::RunAnimation::update_skeleton( &BirdSmallSkeleton::new(), (vel.0.magnitude(), time), - state.movement_time, - &mut movement_animation_rate, + state.state_time, + &mut state_animation_rate, skeleton_attr, ), - Jump => anim::bird_small::JumpAnimation::update_skeleton( + // In air + (false, _, false) => anim::bird_small::JumpAnimation::update_skeleton( &BirdSmallSkeleton::new(), (vel.0.magnitude(), time), - state.movement_time, - &mut movement_animation_rate, + state.state_time, + &mut state_animation_rate, skeleton_attr, ), @@ -1012,13 +1152,11 @@ impl FigureMgr { state.update( renderer, pos.0, - vel.0, - ori.0, + ori, scale, col, dt, - movement_animation_rate, - action_animation_rate, + state_animation_rate, lpindex, true, ); @@ -1029,7 +1167,7 @@ impl FigureMgr { .get_or_create_model( renderer, *body, - stats.map(|s| &s.equipment), + loadout, tick, CameraMode::default(), None, @@ -1046,30 +1184,37 @@ impl FigureMgr { _ => continue, }; - if !character.is_same_movement(&last_character.0) { - state.movement_time = 0.0; + if !character.same_variant(&last_character.0) { + state.state_time = 0.0; } - let target_base = match character.movement { - Stand => anim::fish_small::IdleAnimation::update_skeleton( + let target_base = match ( + physics.on_ground, + vel.0.magnitude_squared() > MOVING_THRESHOLD_SQR, // Moving + physics.in_fluid, // In water + ) { + // Standing + (true, false, false) => anim::fish_small::IdleAnimation::update_skeleton( &FishSmallSkeleton::new(), time, - state.movement_time, - &mut movement_animation_rate, + state.state_time, + &mut state_animation_rate, skeleton_attr, ), - Run => anim::fish_small::RunAnimation::update_skeleton( + // Running + (true, true, false) => anim::fish_small::RunAnimation::update_skeleton( &FishSmallSkeleton::new(), (vel.0.magnitude(), time), - state.movement_time, - &mut movement_animation_rate, + state.state_time, + &mut state_animation_rate, skeleton_attr, ), - Jump => anim::fish_small::JumpAnimation::update_skeleton( + // In air + (false, _, false) => anim::fish_small::JumpAnimation::update_skeleton( &FishSmallSkeleton::new(), (vel.0.magnitude(), time), - state.movement_time, - &mut movement_animation_rate, + state.state_time, + &mut state_animation_rate, skeleton_attr, ), @@ -1081,13 +1226,11 @@ impl FigureMgr { state.update( renderer, pos.0, - vel.0, - ori.0, + ori, scale, col, dt, - movement_animation_rate, - action_animation_rate, + state_animation_rate, lpindex, true, ); @@ -1098,7 +1241,7 @@ impl FigureMgr { .get_or_create_model( renderer, *body, - stats.map(|s| &s.equipment), + loadout, tick, CameraMode::default(), None, @@ -1115,30 +1258,37 @@ impl FigureMgr { _ => continue, }; - if !character.is_same_movement(&last_character.0) { - state.movement_time = 0.0; + if !character.same_variant(&last_character.0) { + state.state_time = 0.0; } - let target_base = match character.movement { - Stand => anim::biped_large::IdleAnimation::update_skeleton( + let target_base = match ( + physics.on_ground, + vel.0.magnitude_squared() > MOVING_THRESHOLD_SQR, // Moving + physics.in_fluid, // In water + ) { + // Standing + (true, false, false) => anim::biped_large::IdleAnimation::update_skeleton( &BipedLargeSkeleton::new(), time, - state.movement_time, - &mut movement_animation_rate, + state.state_time, + &mut state_animation_rate, skeleton_attr, ), - Run => anim::biped_large::RunAnimation::update_skeleton( + // Running + (true, true, false) => anim::biped_large::RunAnimation::update_skeleton( &BipedLargeSkeleton::new(), (vel.0.magnitude(), time), - state.movement_time, - &mut movement_animation_rate, + state.state_time, + &mut state_animation_rate, skeleton_attr, ), - Jump => anim::biped_large::JumpAnimation::update_skeleton( + // In air + (false, _, false) => anim::biped_large::JumpAnimation::update_skeleton( &BipedLargeSkeleton::new(), (vel.0.magnitude(), time), - state.movement_time, - &mut movement_animation_rate, + state.state_time, + &mut state_animation_rate, skeleton_attr, ), @@ -1150,13 +1300,11 @@ impl FigureMgr { state.update( renderer, pos.0, - vel.0, - ori.0, + ori, scale, col, dt, - movement_animation_rate, - action_animation_rate, + state_animation_rate, lpindex, true, ); @@ -1171,13 +1319,11 @@ impl FigureMgr { state.update( renderer, pos.0, - vel.0, - ori.0, + ori, scale, col, dt, - movement_animation_rate, - action_animation_rate, + state_animation_rate, lpindex, true, ); @@ -1226,17 +1372,18 @@ impl FigureMgr { let character_state_storage = state.read_storage::(); let character_state = character_state_storage.get(player_entity); - for (entity, _, _, body, stats, _) in ( + for (entity, _, _, body, _, loadout, _) in ( &ecs.entities(), &ecs.read_storage::(), ecs.read_storage::().maybe(), &ecs.read_storage::(), ecs.read_storage::().maybe(), + ecs.read_storage::().maybe(), ecs.read_storage::().maybe(), ) .join() - // Don't render dead entities - .filter(|(_, _, _, _, stats, _)| stats.map_or(true, |s| !s.is_dead)) + // Don't render dead entities + .filter(|(_, _, _, _, stats, _, _)| stats.map_or(true, |s| !s.is_dead)) { let is_player = entity == player_entity; let player_camera_mode = if is_player { @@ -1244,7 +1391,6 @@ impl FigureMgr { } else { CameraMode::default() }; - let stats = stats.map(|s| &s.equipment); let character_state = if is_player { character_state } else { None }; let FigureMgr { @@ -1282,7 +1428,7 @@ impl FigureMgr { .get_or_create_model( renderer, *body, - stats, + loadout, tick, player_camera_mode, character_state, @@ -1298,7 +1444,7 @@ impl FigureMgr { .get_or_create_model( renderer, *body, - stats, + loadout, tick, player_camera_mode, character_state, @@ -1314,7 +1460,7 @@ impl FigureMgr { .get_or_create_model( renderer, *body, - stats, + loadout, tick, player_camera_mode, character_state, @@ -1330,7 +1476,7 @@ impl FigureMgr { .get_or_create_model( renderer, *body, - stats, + loadout, tick, player_camera_mode, character_state, @@ -1346,7 +1492,7 @@ impl FigureMgr { .get_or_create_model( renderer, *body, - stats, + loadout, tick, player_camera_mode, character_state, @@ -1362,7 +1508,7 @@ impl FigureMgr { .get_or_create_model( renderer, *body, - stats, + loadout, tick, player_camera_mode, character_state, @@ -1378,7 +1524,7 @@ impl FigureMgr { .get_or_create_model( renderer, *body, - stats, + loadout, tick, player_camera_mode, character_state, @@ -1394,7 +1540,7 @@ impl FigureMgr { .get_or_create_model( renderer, *body, - stats, + loadout, tick, player_camera_mode, character_state, @@ -1410,7 +1556,7 @@ impl FigureMgr { .get_or_create_model( renderer, *body, - stats, + loadout, tick, player_camera_mode, character_state, @@ -1426,7 +1572,7 @@ impl FigureMgr { .get_or_create_model( renderer, *body, - stats, + loadout, tick, player_camera_mode, character_state, @@ -1442,7 +1588,7 @@ impl FigureMgr { .get_or_create_model( renderer, *body, - stats, + loadout, tick, player_camera_mode, character_state, @@ -1526,11 +1672,8 @@ impl FigureMgr { pub struct FigureState { bone_consts: Consts, locals: Consts, - movement_time: f64, - action_time: f64, + state_time: f64, skeleton: S, - pos: Vec3, - ori: Vec3, last_ori: Vec3, lpindex: u8, visible: bool, @@ -1543,11 +1686,8 @@ impl FigureState { .create_consts(&skeleton.compute_matrices()) .unwrap(), locals: renderer.create_consts(&[FigureLocals::default()]).unwrap(), - movement_time: 0.0, - action_time: 0.0, + state_time: 0.0, skeleton, - pos: Vec3::zero(), - ori: Vec3::zero(), last_ori: Vec3::zero(), lpindex: 0, visible: false, @@ -1558,36 +1698,24 @@ impl FigureState { &mut self, renderer: &mut Renderer, pos: Vec3, - vel: Vec3, ori: Vec3, scale: f32, col: Rgba, dt: f32, - movement_rate: f32, - action_rate: f32, + state_animation_rate: f32, lpindex: u8, visible: bool, ) { self.visible = visible; self.lpindex = lpindex; + // What is going on here? + // (note: that ori is now the slerped ori) self.last_ori = Lerp::lerp(self.last_ori, ori, 15.0 * dt); - // Update interpolation values - // TODO: use values from Interpolated component instead of recalculating - if self.pos.distance_squared(pos) < 64.0 * 64.0 { - self.pos = Lerp::lerp(self.pos, pos + vel * 0.03, 10.0 * dt); - self.ori = Slerp::slerp(self.ori, ori, 5.0 * dt); - } else { - self.pos = pos; - self.ori = ori; - } + self.state_time += (dt * state_animation_rate) as f64; - self.movement_time += (dt * movement_rate) as f64; - self.action_time += (dt * action_rate) as f64; - - // TODO: what are the interpolated ori values used for if not here??? let mat = Mat4::::identity() - * Mat4::translation_3d(self.pos) + * Mat4::translation_3d(pos) * Mat4::rotation_z(-ori.x.atan2(ori.y)) * Mat4::rotation_x(ori.z.atan2(Vec2::from(ori).magnitude())) * Mat4::scaling_3d(Vec3::from(0.8 * scale)); diff --git a/voxygen/src/scene/mod.rs b/voxygen/src/scene/mod.rs index 02996bca7e..d9d28d6e0f 100644 --- a/voxygen/src/scene/mod.rs +++ b/voxygen/src/scene/mod.rs @@ -35,6 +35,10 @@ const LIGHT_DIST_RADIUS: f32 = 64.0; // The distance beyond which lights may not const SHADOW_DIST_RADIUS: f32 = 8.0; const SHADOW_MAX_DIST: f32 = 96.0; // The distance beyond which shadows may not be visible +/// Above this speed is considered running +/// Used for first person camera effects +const RUNNING_THRESHOLD: f32 = 0.7; + struct Skybox { model: Model, locals: Consts, @@ -126,6 +130,8 @@ impl Scene { /// Set the block position that the player is interacting with pub fn set_select_pos(&mut self, pos: Option>) { self.select_pos = pos; } + pub fn select_pos(&self) -> Option> { self.select_pos } + /// Handle an incoming user input event (e.g.: cursor moved, key pressed, /// window closed). /// @@ -174,19 +180,27 @@ impl Scene { gamma: f32, ) { // Get player position. - let player_pos = scene_data - .state - .ecs() + let ecs = scene_data.state.ecs(); + + let player_pos = ecs .read_storage::() .get(scene_data.player_entity) .map_or(Vec3::zero(), |pos| pos.0); - let player_rolling = scene_data - .state - .ecs() + let player_rolling = ecs .read_storage::() .get(scene_data.player_entity) - .map_or(false, |cs| cs.action.is_roll()); + .map_or(false, |cs| cs.is_dodge()); + + let is_running = ecs + .read_storage::() + .get(scene_data.player_entity) + .map(|v| v.0.magnitude_squared() > RUNNING_THRESHOLD.powi(2)); + + let on_ground = ecs + .read_storage::() + .get(scene_data.player_entity) + .map(|p| p.on_ground); let player_scale = match scene_data .state @@ -211,9 +225,11 @@ impl Scene { let up = match self.camera.get_mode() { CameraMode::FirstPerson => { if player_rolling { - player_scale * 0.8_f32 + player_scale * 0.8 + } else if is_running.unwrap_or(false) && on_ground.unwrap_or(false) { + player_scale * 1.6 + (scene_data.state.get_time() as f32 * 17.0).sin() * 0.05 } else { - player_scale * 1.6_f32 + player_scale * 1.6 } }, CameraMode::ThirdPerson => 1.2, diff --git a/voxygen/src/scene/simple.rs b/voxygen/src/scene/simple.rs index c12a6f9641..34aaec83e4 100644 --- a/voxygen/src/scene/simple.rs +++ b/voxygen/src/scene/simple.rs @@ -15,7 +15,7 @@ use crate::{ window::{Event, PressState}, }; use common::{ - comp::{humanoid, Body, Equipment}, + comp::{humanoid, Body, Loadout}, terrain::BlockKind, vol::{BaseVol, ReadVol, Vox}, }; @@ -192,13 +192,11 @@ impl Scene { self.figure_state.update( renderer, Vec3::zero(), - Vec3::zero(), Vec3::new(self.char_ori.sin(), -self.char_ori.cos(), 0.0), 1.0, Rgba::broadcast(1.0), 1.0 / 60.0, // TODO: Use actual deltatime here? 1.0, - 1.0, 0, true, ); @@ -209,7 +207,7 @@ impl Scene { renderer: &mut Renderer, tick: u64, body: Option, - equipment: &Equipment, + loadout: Option<&Loadout>, ) { renderer.render_skybox(&self.skybox.model, &self.globals, &self.skybox.locals); @@ -219,7 +217,7 @@ impl Scene { .get_or_create_model( renderer, Body::Humanoid(body), - Some(equipment), + loadout, tick, CameraMode::default(), None, diff --git a/voxygen/src/session.rs b/voxygen/src/session.rs index 52421d3975..4fa2b2b833 100644 --- a/voxygen/src/session.rs +++ b/voxygen/src/session.rs @@ -1,11 +1,12 @@ use crate::{ ecs::MyEntity, - hud::{DebugInfo, Event as HudEvent, Hud}, + hud::{DebugInfo, Event as HudEvent, Hud, PressBehavior}, i18n::{i18n_asset_key, VoxygenLocalization}, key_state::KeyState, menu::char_selection::CharSelectionState, render::Renderer, scene::{camera, Scene, SceneData}, + settings::AudioOutput, window::{AnalogGameInput, Event, GameInput}, Direction, Error, GlobalState, PlayState, PlayStateResult, }; @@ -17,6 +18,7 @@ use common::{ comp::{Pos, Vel, MAX_PICKUP_RANGE_SQR}, msg::ClientState, terrain::{Block, BlockKind}, + util::Dir, vol::ReadVol, ChatType, }; @@ -76,6 +78,7 @@ impl SessionState { /// Tick the session (and the client attached to it). fn tick(&mut self, dt: Duration) -> Result { self.inputs.tick(dt); + for event in self.client.borrow_mut().tick( self.inputs.clone(), dt, @@ -154,6 +157,9 @@ impl PlayState for SessionState { ) .unwrap(); + let mut ori = self.scene.camera().get_orientation(); + let mut free_look = false; + // Game loop let mut current_client_state = self.client.borrow().get_client_state(); while let ClientState::Pending | ClientState::Character = current_client_state { @@ -266,24 +272,19 @@ impl PlayState for SessionState { if let Some(select_pos) = select_pos { client.remove_block(select_pos); } - } else if client - .state() - .read_storage::() - .get(client.entity()) - .map(|cs| { - cs.action.is_wield() - || cs.action.is_block() - || cs.action.is_attack() - }) - .unwrap_or(false) - { + } else { self.inputs.secondary.set_state(state); - } else if state { - if let Some(select_pos) = select_pos { + + // Check for select_block that is highlighted + if let Some(select_pos) = self.scene.select_pos() { client.collect_block(select_pos); } } }, + + Event::InputUpdate(GameInput::Ability3, state) => { + self.inputs.ability3.set_state(state); + }, Event::InputUpdate(GameInput::Roll, state) => { let client = self.client.borrow(); if client @@ -303,15 +304,25 @@ impl PlayState for SessionState { self.inputs.roll.set_state(state); } }, - Event::InputUpdate(GameInput::Respawn, state) => { - self.inputs.respawn.set_state(state); - }, + Event::InputUpdate(GameInput::Respawn, state) + if state != self.key_state.respawn => + { + self.key_state.respawn = state; + if state { + self.client.borrow_mut().respawn(); + } + } Event::InputUpdate(GameInput::Jump, state) => { self.inputs.jump.set_state(state); }, - Event::InputUpdate(GameInput::Sit, state) => { - self.inputs.sit.set_state(state); - }, + Event::InputUpdate(GameInput::Sit, state) + if state != self.key_state.toggle_sit => + { + self.key_state.toggle_sit = state; + if state { + self.client.borrow_mut().toggle_sit(); + } + } Event::InputUpdate(GameInput::MoveForward, state) => self.key_state.up = state, Event::InputUpdate(GameInput::MoveBack, state) => self.key_state.down = state, Event::InputUpdate(GameInput::MoveLeft, state) => self.key_state.left = state, @@ -320,14 +331,30 @@ impl PlayState for SessionState { self.inputs.glide.set_state(state); }, Event::InputUpdate(GameInput::Climb, state) => { - self.inputs.climb.set_state(state) + self.key_state.climb_up = state; }, Event::InputUpdate(GameInput::ClimbDown, state) => { - self.inputs.climb_down.set_state(state) + self.key_state.climb_down = state; }, Event::InputUpdate(GameInput::WallLeap, state) => { self.inputs.wall_leap.set_state(state) }, + Event::InputUpdate(GameInput::ToggleWield, state) + if state != self.key_state.toggle_wield => + { + self.key_state.toggle_wield = state; + if state { + self.client.borrow_mut().toggle_wield(); + } + } + Event::InputUpdate(GameInput::SwapLoadout, state) + if state != self.key_state.swap_loadout => + { + self.key_state.swap_loadout = state; + if state { + self.client.borrow_mut().swap_loadout(); + } + } Event::InputUpdate(GameInput::Mount, true) => { let mut client = self.client.borrow_mut(); if client.is_mounted() { @@ -381,7 +408,7 @@ impl PlayState for SessionState { ) .join() .filter(|(_, pos, _)| { - pos.0.distance_squared(player_pos.0) < 3.0 * 3.0 + pos.0.distance_squared(player_pos.0) < MAX_PICKUP_RANGE_SQR }) .min_by_key(|(_, pos, _)| { (pos.0.distance_squared(player_pos.0) * 1000.0) as i32 @@ -393,12 +420,22 @@ impl PlayState for SessionState { } } }, - Event::InputUpdate(GameInput::ToggleWield, state) => { - self.inputs.toggle_wield.set_state(state) - }, Event::InputUpdate(GameInput::Charge, state) => { self.inputs.charge.set_state(state); }, + Event::InputUpdate(GameInput::FreeLook, state) => { + match (global_state.settings.gameplay.free_look_behavior, state) { + (PressBehavior::Toggle, true) => { + free_look = !free_look; + self.hud.free_look(free_look); + }, + (PressBehavior::Hold, state) => { + free_look = state; + self.hud.free_look(free_look); + }, + _ => {}, + }; + }, Event::AnalogGameInput(input) => match input { AnalogGameInput::MovementX(v) => { self.key_state.analog_matrix.x = v; @@ -418,9 +455,12 @@ impl PlayState for SessionState { } } + if !free_look { + ori = self.scene.camera().get_orientation(); + self.inputs.look_dir = Dir::from_unnormalized(cam_dir).unwrap(); + } // Calculate the movement input vector of the player from the current key // presses and the camera direction. - let ori = self.scene.camera().get_orientation(); let unit_vecs = ( Vec2::new(ori[0].cos(), -ori[0].sin()), Vec2::new(ori[0].sin(), ori[0].cos()), @@ -428,7 +468,7 @@ impl PlayState for SessionState { let dir_vec = self.key_state.dir_vec(); self.inputs.move_dir = unit_vecs.0 * dir_vec[0] + unit_vecs.1 * dir_vec[1]; - self.inputs.look_dir = cam_dir; + self.inputs.climb = self.key_state.climb(); // Runs if either in a multiplayer server or the singleplayer server is unpaused if global_state.singleplayer.is_none() @@ -596,7 +636,7 @@ impl PlayState for SessionState { HudEvent::ChangeAudioDevice(name) => { global_state.audio.set_device(name.clone()); - global_state.settings.audio.audio_device = Some(name); + global_state.settings.audio.output = AudioOutput::Device(name); global_state.settings.save_to_file_warn(); }, HudEvent::ChangeMaxFPS(fps) => { @@ -673,6 +713,9 @@ impl PlayState for SessionState { global_state.settings.graphics.window_size = new_size; global_state.settings.save_to_file_warn(); }, + HudEvent::ChangeFreeLookBehavior(behavior) => { + global_state.settings.gameplay.free_look_behavior = behavior; + }, } } diff --git a/voxygen/src/settings.rs b/voxygen/src/settings.rs index 78431b2dd1..fddf225fb1 100644 --- a/voxygen/src/settings.rs +++ b/voxygen/src/settings.rs @@ -1,5 +1,5 @@ use crate::{ - hud::{BarNumbers, CrosshairType, Intro, ShortcutNumbers, XpBar}, + hud::{BarNumbers, CrosshairType, Intro, PressBehavior, ShortcutNumbers, XpBar}, i18n, render::{AaMode, CloudMode, FluidMode}, ui::ScaleMode, @@ -18,6 +18,7 @@ use std::{fs, io::prelude::*, path::PathBuf}; pub struct ControlSettings { pub primary: KeyMouse, pub secondary: KeyMouse, + pub ability3: KeyMouse, pub toggle_cursor: KeyMouse, pub escape: KeyMouse, pub enter: KeyMouse, @@ -35,8 +36,6 @@ pub struct ControlSettings { pub mount: KeyMouse, pub map: KeyMouse, pub bag: KeyMouse, - pub quest_log: KeyMouse, - pub character_window: KeyMouse, pub social: KeyMouse, pub spellbook: KeyMouse, pub settings: KeyMouse, @@ -50,7 +49,9 @@ pub struct ControlSettings { pub respawn: KeyMouse, pub interact: KeyMouse, pub toggle_wield: KeyMouse, + pub swap_loadout: KeyMouse, pub charge: KeyMouse, + pub free_look: KeyMouse, } /// Since Macbook trackpads lack middle click, on OS X we default to LShift @@ -68,6 +69,7 @@ impl Default for ControlSettings { Self { primary: KeyMouse::Mouse(MouseButton::Left), secondary: KeyMouse::Mouse(MouseButton::Right), + ability3: KeyMouse::Key(VirtualKeyCode::Key1), toggle_cursor: KeyMouse::Key(VirtualKeyCode::Tab), escape: KeyMouse::Key(VirtualKeyCode::Escape), enter: KeyMouse::Key(VirtualKeyCode::Return), @@ -85,8 +87,6 @@ impl Default for ControlSettings { mount: KeyMouse::Key(VirtualKeyCode::F), map: KeyMouse::Key(VirtualKeyCode::M), bag: KeyMouse::Key(VirtualKeyCode::B), - quest_log: KeyMouse::Key(VirtualKeyCode::L), - character_window: KeyMouse::Key(VirtualKeyCode::C), social: KeyMouse::Key(VirtualKeyCode::O), spellbook: KeyMouse::Key(VirtualKeyCode::P), settings: KeyMouse::Key(VirtualKeyCode::N), @@ -100,7 +100,9 @@ impl Default for ControlSettings { respawn: KeyMouse::Key(VirtualKeyCode::Space), interact: KeyMouse::Mouse(MouseButton::Right), toggle_wield: KeyMouse::Key(VirtualKeyCode::T), + swap_loadout: KeyMouse::Key(VirtualKeyCode::Q), charge: KeyMouse::Key(VirtualKeyCode::Key1), + free_look: KeyMouse::Key(VirtualKeyCode::L), } } } @@ -183,6 +185,7 @@ pub mod con_settings { pub respawn: Button, pub interact: Button, pub toggle_wield: Button, + pub swap_loadout: Button, pub charge: Button, } @@ -268,6 +271,7 @@ pub mod con_settings { respawn: Button::Simple(GilButton::RightTrigger2), interact: Button::Simple(GilButton::LeftTrigger2), toggle_wield: Button::Simple(GilButton::DPadLeft), + swap_loadout: Button::Simple(GilButton::Unknown), charge: Button::Simple(GilButton::Unknown), } } @@ -344,6 +348,7 @@ pub struct GameplaySettings { pub shortcut_numbers: ShortcutNumbers, pub bar_numbers: BarNumbers, pub ui_scale: ScaleMode, + pub free_look_behavior: PressBehavior, } impl Default for GameplaySettings { @@ -361,10 +366,11 @@ impl Default for GameplaySettings { chat_transp: 0.4, crosshair_type: CrosshairType::Round, intro_show: Intro::Show, - xp_bar: XpBar::OnGain, + xp_bar: XpBar::Always, shortcut_numbers: ShortcutNumbers::On, bar_numbers: BarNumbers::Off, ui_scale: ScaleMode::RelativeToWindow([1920.0, 1080.0].into()), + free_look_behavior: PressBehavior::Toggle, } } } @@ -457,7 +463,26 @@ impl Default for GraphicsSettings { } } } +#[derive(Clone, Debug, Serialize, Deserialize)] +pub enum AudioOutput { + /// Veloren's audio system wont work on some systems, + /// so you can use this to disable it, and allow the + /// game to function + // If this option is disabled, functions in the rodio + // library MUST NOT be called. + Off, + Automatic, + Device(String), +} +impl AudioOutput { + pub fn is_enabled(&self) -> bool { + match self { + Self::Off => false, + _ => true, + } + } +} /// `AudioSettings` controls the volume of different audio subsystems and which /// device is used. #[derive(Clone, Debug, Serialize, Deserialize)] @@ -469,8 +494,7 @@ pub struct AudioSettings { pub max_sfx_channels: usize, /// Audio Device that Voxygen will use to play audio. - pub audio_device: Option, - pub audio_on: bool, + pub output: AudioOutput, } impl Default for AudioSettings { @@ -480,8 +504,7 @@ impl Default for AudioSettings { music_volume: 0.4, sfx_volume: 0.6, max_sfx_channels: 10, - audio_device: None, - audio_on: true, + output: AudioOutput::Automatic, } } } diff --git a/voxygen/src/ui/graphic/renderer.rs b/voxygen/src/ui/graphic/renderer.rs index 653b386ce5..946b464a54 100644 --- a/voxygen/src/ui/graphic/renderer.rs +++ b/voxygen/src/ui/graphic/renderer.rs @@ -57,10 +57,30 @@ impl Vert { } } +#[derive(Clone, Copy)] +struct VsOut(Rgba); +impl euc::Interpolate for VsOut { + #[inline(always)] + fn lerp2(a: Self, b: Self, x: f32, y: f32) -> Self { + //a * x + b * y + Self(a.0.map2(b.0, |a, b| a.mul_add(x, b * y))) + } + + #[inline(always)] + fn lerp3(a: Self, b: Self, c: Self, x: f32, y: f32, z: f32) -> Self { + //a * x + b * y + c * z + Self( + a.0.map2(b.0.map2(c.0, |b, c| b.mul_add(y, c * z)), |a, bc| { + a.mul_add(x, bc) + }), + ) + } +} + impl<'a> Pipeline for Voxel { type Pixel = [u8; 4]; type Vertex = Vert; - type VsOut = Rgba; + type VsOut = VsOut; #[inline(always)] fn vert( @@ -75,12 +95,12 @@ impl<'a> Pipeline for Voxel { let light = Rgba::from_opaque(Rgb::from(*ao_level as f32 / 4.0 + 0.25)); let color = light * srgba_to_linear(Rgba::from_opaque(*col)); let position = (self.mvp * Vec4::from_point(*pos)).xyz().into_array(); - (position, color) + (position, VsOut(color)) } #[inline(always)] fn frag(&self, color: &Self::VsOut) -> Self::Pixel { - linear_to_srgba(*color) + linear_to_srgba(color.0) .map(|e| (e * 255.0) as u8) .into_array() } diff --git a/voxygen/src/window.rs b/voxygen/src/window.rs index f052ec73a2..f54e0eabf1 100644 --- a/voxygen/src/window.rs +++ b/voxygen/src/window.rs @@ -16,6 +16,7 @@ use vek::*; pub enum GameInput { Primary, Secondary, + Ability3, ToggleCursor, MoveForward, MoveBack, @@ -49,6 +50,8 @@ pub enum GameInput { Interact, ToggleWield, Charge, + SwapLoadout, + FreeLook, } /// Represents a key that the game menus recognise after input mapping @@ -359,6 +362,9 @@ impl Window { map.entry(settings.controls.secondary) .or_default() .push(GameInput::Secondary); + map.entry(settings.controls.ability3) + .or_default() + .push(GameInput::Ability3); map.entry(settings.controls.toggle_cursor) .or_default() .push(GameInput::ToggleCursor); @@ -410,12 +416,6 @@ impl Window { map.entry(settings.controls.bag) .or_default() .push(GameInput::Bag); - map.entry(settings.controls.quest_log) - .or_default() - .push(GameInput::QuestLog); - map.entry(settings.controls.character_window) - .or_default() - .push(GameInput::CharacterWindow); map.entry(settings.controls.social) .or_default() .push(GameInput::Social); @@ -455,9 +455,15 @@ impl Window { map.entry(settings.controls.toggle_wield) .or_default() .push(GameInput::ToggleWield); + map.entry(settings.controls.swap_loadout) + .or_default() + .push(GameInput::SwapLoadout); map.entry(settings.controls.charge) .or_default() .push(GameInput::Charge); + map.entry(settings.controls.free_look) + .or_default() + .push(GameInput::FreeLook); let keypress_map = HashMap::new(); diff --git a/world/Cargo.toml b/world/Cargo.toml index 4dd4c22b71..0ff1838510 100644 --- a/world/Cargo.toml +++ b/world/Cargo.toml @@ -7,10 +7,10 @@ edition = "2018" [dependencies] bincode = "1.2.0" common = { package = "veloren-common", path = "../common" } -bitvec = "0.15.2" +bitvec = "0.17.4" image = "0.22.3" itertools = "0.8.2" -vek = "0.9.9" +vek = "0.10.0" noise = { version = "0.6.0", default-features = false } num = "0.2.0" ordered-float = "1.0" diff --git a/world/src/block/mod.rs b/world/src/block/mod.rs index 3c61e20936..a994baf712 100644 --- a/world/src/block/mod.rs +++ b/world/src/block/mod.rs @@ -628,7 +628,11 @@ pub fn block_from_structure( ) .map(|e| e as u8), )), - StructureBlock::Fruit => Some(Block::new(BlockKind::Apple, Rgb::new(194, 30, 37))), + StructureBlock::Fruit => Some(if field.get(pos + structure_pos) % 3 > 0 { + Block::empty() + } else { + Block::new(BlockKind::Apple, Rgb::new(194, 30, 37)) + }), StructureBlock::Chest => Some(if structure_seed % 10 < 7 { Block::empty() } else { diff --git a/world/src/block/natural.rs b/world/src/block/natural.rs index 8e472e53e6..0c2814dada 100644 --- a/world/src/block/natural.rs +++ b/world/src/block/natural.rs @@ -56,7 +56,7 @@ pub fn structure_gen<'a>( ForestKind::Palm => &PALMS, ForestKind::Savannah => &ACACIAS, ForestKind::Oak if QUIRKY_RAND.get(st_seed) % 16 == 7 => &OAK_STUMPS, - ForestKind::Oak if QUIRKY_RAND.get(st_seed) % 8 == 7 => &FRUIT_TREES, + ForestKind::Oak if QUIRKY_RAND.get(st_seed) % 19 == 7 => &FRUIT_TREES, ForestKind::Oak if QUIRKY_RAND.get(st_seed) % 14 == 7 => &BIRCHES, ForestKind::Oak => &OAKS, ForestKind::Pine => &PINES, @@ -87,7 +87,7 @@ impl Asset for StructuresSpec { const ENDINGS: &'static [&'static str] = &["ron"]; fn parse(buf_reader: BufReader) -> Result { - Ok(ron::de::from_reader(buf_reader).expect("Error parsing structure specs")) + ron::de::from_reader(buf_reader).map_err(assets::Error::parse_error) } } diff --git a/world/src/sim/util.rs b/world/src/sim/util.rs index 3d7e6cfd63..e194a9aed5 100644 --- a/world/src/sim/util.rs +++ b/world/src/sim/util.rs @@ -1,5 +1,5 @@ use super::WORLD_SIZE; -use bitvec::prelude::{bitbox, bitvec, BitBox}; +use bitvec::prelude::{bitbox, BitBox}; use common::{terrain::TerrainChunkSize, vol::RectVolSize}; use noise::{MultiFractal, NoiseFn, Perlin, Point2, Point3, Point4, Seedable}; use num::Float; @@ -368,10 +368,11 @@ pub fn get_oceans(oldh: impl Fn(usize) -> F + Sync) -> BitBox { while let Some(chunk_idx) = stack.pop() { // println!("Ocean chunk {:?}: {:?}", uniform_idx_as_vec2(chunk_idx), // oldh(chunk_idx)); - if *is_ocean.at(chunk_idx) { + let mut is_ocean = is_ocean.get_mut(chunk_idx).unwrap(); + if *is_ocean { continue; } - *is_ocean.at(chunk_idx) = true; + *is_ocean = true; stack.extend(neighbors(chunk_idx).filter(|&neighbor_idx| { // println!("Ocean neighbor: {:?}: {:?}", uniform_idx_as_vec2(neighbor_idx), // oldh(neighbor_idx));