diff --git a/.cargo/config b/.cargo/config index 041039b191..3e8860a59c 100644 --- a/.cargo/config +++ b/.cargo/config @@ -11,13 +11,14 @@ csv-import = "run --manifest-path common/Cargo.toml --features=bin_csv --bin csv # server-cli server = "run --bin veloren-server-cli" test-server = "run --bin veloren-server-cli --no-default-features --features simd" -tracy-server = "run --bin veloren-server-cli --no-default-features --features tracy,simd --profile no_overflow" -tracy-world-server = "run --bin veloren-server-cli --features tracy,simd --profile no_overflow" -tracy-world-server-debuginfo = "run --bin veloren-server-cli --features tracy,simd --profile no_overflow_debuginfo" -tracy-world-server-releasedebuginfo = "run --bin veloren-server-cli --features tracy,simd --profile releasedebuginfo" +tracy-server = "run --bin veloren-server-cli --features tracy,simd --profile no_overflow" +tracy-server-debuginfo = "run --bin veloren-server-cli --features tracy,simd --profile no_overflow_debuginfo" +tracy-server-releasedebuginfo = "run --bin veloren-server-cli --features tracy,simd --profile releasedebuginfo" +tracy-test-server = "run --bin veloren-server-cli --no-default-features --features tracy,simd --profile no_overflow" # voxygen test-voxygen = "run --bin veloren-voxygen --no-default-features --features simd,egui-ui,shaderc-from-source" tracy-voxygen = "run --bin veloren-voxygen --no-default-features --features tracy,simd,egui-ui,shaderc-from-source --profile no_overflow" dbg-voxygen = "run --bin veloren-voxygen --profile debuginfo" # misc swarm = "run --bin swarm --features client/bin_bot,client/tick_network --" +ci-clippy = "clippy --all-targets --locked --features=bin_cmd_doc_gen,bin_compression,bin_csv,bin_graphviz,bin_bot,bin_asset_migrate,asset_tweak" diff --git a/CHANGELOG.md b/CHANGELOG.md index 2b1ea72812..2865d3e5b0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,14 +8,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ### Added - +- Chat commands to mute and unmute players - Waypoints saved between sessions and shared with group members. - New rocks - Weapon trails - Hostile agent will now abort pursuing their target based on multiple metrics - Admin command to reload all chunks on the server - Furniture and waypoints in site2 towns -- text input for trading +- Text input for trading - Themed Site CliffTown, hoodoo/arabic inspired stone structures inhabited by mountaineer NPCs. - NPCs now have rudimentary personalities - Added Belarusian translation @@ -24,6 +24,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add stealth stat on Bag UI - Water caves - Modular weapons +- Added Thai translation +- Skiing and ice skating +- Added loot ownership for NPC drops +- Bamboo collectibles now spawn near rivers +- Chest sprites can longer be exploded +- Smoke varies by temperature, humidity, time of day and house +- Added loot ownership for drops from mining +- Added an option for experience number accumulation. +- Added an option for damage number rounding (when greater than or equal to 1.0). +- Added sliders for incoming/non-incoming damage accumulation duration. +- New ambience sounds +- Slider for ambience volume +- Weather generated on server is sent to clients, and seen on clients as rain/clouds. +- Updated Brazilian Portuguese Translation ### Changed @@ -33,8 +47,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Enable new giant trees, changed what entities spawn at them - Stealth is now shown as a percentage in Stats Diary UI - Stealth effects from sneaking and armor are evaluated independently. Armor now has effects even when not sneaking +- Zoom-in effect when aiming bow is now optional +- Non-Humanoid NPCs now pick up consumables when less than full health and use them to heal up. +- Changed module component modifier costs to the following scheme, based on base material: 1 -> 2 -> 5 -> 10 -> 15 -> 25 +- Damage from the same source dealt in the same tick will now be grouped up. +- Critical hits are now shown differently in the damage numbers. +- Fall damage and some (extra) buffs/debuffs now show up in the damage numbers. +- Optimized sprite processing decreasing the startup time of voxygen (and long freezes when trying + to enter the world when this hasn't finished). +- Metadata added to music files. Listen to the soundtrack more easily! ### Removed +- Removed the options for single and cumulated damage. ### Fixed - Fixed bug that would sometimes cause taking a screenshot to panic because a buffer was mapped at the wrong time. @@ -46,6 +70,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed an error where '{amount} Exp' floater did not use existing localizations - Fix villagers seeing cultists and familiar enemies through objects. - Menacing agents are now less spammy with their menacing messages +- Fixed the title screen FPS cap not applying when the background FPS limit was set higher than 60 FPS +- Fixed an issue where the hurt animation would "jump" whenever you lost/gained health. +- Fixed a bug where multiple damage sources in the same tick would show up as a singular attack. +- Fixed an issue where, if the same amount of healing and damage was received in the same tick, nothing would be shown. +- UI sfx now play from UI instead of from camera (allowing stereo sfx) +- Most sfx now correctly play when camera is underwater +- All sounds now stop upon quitting to main menu +- Combat music now loops and ends properly ## [0.12.0] - 2022-02-19 diff --git a/Cargo.lock b/Cargo.lock index 5bc38c8590..a4c72f2ef9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -191,6 +191,12 @@ dependencies = [ "serde", ] +[[package]] +name = "arrayvec" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" + [[package]] name = "as-slice" version = "0.1.5" @@ -214,17 +220,17 @@ dependencies = [ [[package]] name = "assets_manager" -version = "0.7.2" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bec562a7c25c1aa60d4394cb96c914aa9236ae53dddf5e89ea8aac8a20d98c0" +checksum = "c53a8477ada5edbd6ba3b0698aabaa76b352454aedc8c8dca0c6328fc8313b7e" dependencies = [ "ab_glyph", "ahash 0.7.6", "bincode", "crossbeam-channel", "log", - "notify 4.0.17", - "parking_lot 0.11.2", + "notify", + "parking_lot 0.12.0", "ron 0.7.0", "serde", "serde_json", @@ -417,7 +423,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "afa748e348ad3be8263be728124b24a24f268266f6f5d58af9d75f6a40b5c587" dependencies = [ "arrayref", - "arrayvec", + "arrayvec 0.5.2", "constant_time_eq", ] @@ -1461,16 +1467,6 @@ dependencies = [ "syn 1.0.90", ] -[[package]] -name = "deflate" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73770f8e1fe7d64df17ca66ad28994a0a623ea497fa69486e14984e715c5d174" -dependencies = [ - "adler32", - "byteorder", -] - [[package]] name = "deflate" version = "1.0.0" @@ -1756,6 +1752,16 @@ dependencies = [ "str-buf", ] +[[package]] +name = "etagere" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6301151a318f367f392c31395beb1cfba5ccd9abc44d1db0db3a4b27b9601c89" +dependencies = [ + "euclid", + "svg_fmt", +] + [[package]] name = "euc" version = "0.5.3" @@ -1920,25 +1926,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "fsevent" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ab7d1bd1bd33cc98b0889831b72da23c0aa4df9cec7e0702f46ecea04b35db6" -dependencies = [ - "bitflags", - "fsevent-sys 2.0.1", -] - -[[package]] -name = "fsevent-sys" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f41b048a94555da0f42f1d632e2e19510084fb8e303b0daa2816e733fb3644a0" -dependencies = [ - "libc", -] - [[package]] name = "fsevent-sys" version = "4.1.0" @@ -1948,22 +1935,6 @@ dependencies = [ "libc", ] -[[package]] -name = "fuchsia-zircon" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" -dependencies = [ - "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 = "funty" version = "1.2.0" @@ -2069,6 +2040,19 @@ dependencies = [ "byteorder", ] +[[package]] +name = "generator" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1d9279ca822891c1a4dae06d185612cf8fc6acfe5dff37781b41297811b12ee" +dependencies = [ + "cc", + "libc", + "log", + "rustversion", + "winapi 0.3.9", +] + [[package]] name = "generic-array" version = "0.12.4" @@ -2144,7 +2128,7 @@ name = "gfx-backend-dx11" version = "0.8.0" source = "git+https://github.com/gfx-rs/gfx?rev=27a1dae3796d33d23812f2bb8c7e3b5aea18b521#27a1dae3796d33d23812f2bb8c7e3b5aea18b521" dependencies = [ - "arrayvec", + "arrayvec 0.5.2", "bitflags", "gfx-auxil", "gfx-hal", @@ -2165,7 +2149,7 @@ name = "gfx-backend-dx12" version = "0.8.0" source = "git+https://github.com/gfx-rs/gfx?rev=27a1dae3796d33d23812f2bb8c7e3b5aea18b521#27a1dae3796d33d23812f2bb8c7e3b5aea18b521" dependencies = [ - "arrayvec", + "arrayvec 0.5.2", "bit-set", "bitflags", "d3d12", @@ -2196,7 +2180,7 @@ name = "gfx-backend-gl" version = "0.8.1" source = "git+https://github.com/gfx-rs/gfx?rev=27a1dae3796d33d23812f2bb8c7e3b5aea18b521#27a1dae3796d33d23812f2bb8c7e3b5aea18b521" dependencies = [ - "arrayvec", + "arrayvec 0.5.2", "bitflags", "fxhash", "gfx-auxil", @@ -2219,7 +2203,7 @@ name = "gfx-backend-metal" version = "0.8.1" source = "git+https://github.com/gfx-rs/gfx?rev=27a1dae3796d33d23812f2bb8c7e3b5aea18b521#27a1dae3796d33d23812f2bb8c7e3b5aea18b521" dependencies = [ - "arrayvec", + "arrayvec 0.5.2", "bitflags", "block", "cocoa-foundation", @@ -2245,7 +2229,7 @@ name = "gfx-backend-vulkan" version = "0.8.0" source = "git+https://github.com/gfx-rs/gfx?rev=27a1dae3796d33d23812f2bb8c7e3b5aea18b521#27a1dae3796d33d23812f2bb8c7e3b5aea18b521" dependencies = [ - "arrayvec", + "arrayvec 0.5.2", "ash", "byteorder", "core-graphics-types", @@ -2502,8 +2486,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" dependencies = [ "ahash 0.7.6", - "rayon", - "serde", ] [[package]] @@ -2513,6 +2495,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c21d40587b92fa6a6c6e3c1bdbf87d75511db5672f9c93175574b3a00df1758" dependencies = [ "ahash 0.7.6", + "rayon", + "serde", ] [[package]] @@ -2751,16 +2735,16 @@ dependencies = [ [[package]] name = "image" -version = "0.23.14" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24ffcb7e7244a9bf19d35bf2883b9c080c4ced3c07a9895572178cdb8f13f6a1" +checksum = "28edd9d7bc256be2502e325ac0628bde30b7001b9b52e0abe31a1a9dc2701212" dependencies = [ "bytemuck", "byteorder", "color_quant", "jpeg-decoder", "num-iter", - "num-rational 0.3.2", + "num-rational 0.4.0", "num-traits", "png", ] @@ -2786,17 +2770,6 @@ dependencies = [ "lazy_static", ] -[[package]] -name = "inotify" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4816c66d2c8ae673df83366c18341538f234a26d65a9ecea5c348b453ac1d02f" -dependencies = [ - "bitflags", - "inotify-sys", - "libc", -] - [[package]] name = "inotify" version = "0.9.6" @@ -2848,15 +2821,6 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9448015e586b611e5d322f6703812bbca2f1e709d5773ecd38ddb4e3bb649504" -[[package]] -name = "iovec" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" -dependencies = [ - "libc", -] - [[package]] name = "itertools" version = "0.10.3" @@ -2909,9 +2873,9 @@ dependencies = [ [[package]] name = "jpeg-decoder" -version = "0.1.22" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229d53d58899083193af11e15917b5640cd40b29ff475a1fe4ef725deb02d0f2" +checksum = "9478aa10f73e7528198d75109c8be5cd7d15fb530238040148d5f9a22d4c5b3b" [[package]] name = "js-sys" @@ -3079,6 +3043,15 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33a33a362ce288760ec6a508b94caaec573ae7d3bbbd91b87aa0bad4456839db" +[[package]] +name = "libmimalloc-sys" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ca136052550448f55df7898c6dbe651c6b574fe38a0d9ea687a9f8088a2e2c" +dependencies = [ + "cc", +] + [[package]] name = "libsqlite3-sys" version = "0.20.1" @@ -3152,6 +3125,19 @@ dependencies = [ "cfg-if 1.0.0", ] +[[package]] +name = "loom" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" +dependencies = [ + "cfg-if 1.0.0", + "generator", + "scoped-tls", + "tracing", + "tracing-subscriber", +] + [[package]] name = "loupe" version = "0.1.3" @@ -3309,6 +3295,15 @@ dependencies = [ "objc", ] +[[package]] +name = "mimalloc" +version = "0.1.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f64ad83c969af2e732e907564deb0d0ed393cec4af80776f77dd77a1a427698" +dependencies = [ + "libmimalloc-sys", +] + [[package]] name = "minifb" version = "0.22.0" @@ -3335,15 +3330,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" -[[package]] -name = "miniz_oxide" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "791daaae1ed6889560f8c4359194f56648355540573244a5448a83ba1ecc7435" -dependencies = [ - "adler32", -] - [[package]] name = "miniz_oxide" version = "0.4.4" @@ -3355,22 +3341,12 @@ dependencies = [ ] [[package]] -name = "mio" -version = "0.6.23" +name = "miniz_oxide" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4" +checksum = "6f5c75688da582b8ffc1f1799e9db273f32133c49e048f614d22ec3256773ccc" dependencies = [ - "cfg-if 0.1.10", - "fuchsia-zircon", - "fuchsia-zircon-sys", - "iovec", - "kernel32-sys", - "libc", - "log", - "miow 0.2.2", - "net2", - "slab", - "winapi 0.2.8", + "adler", ] [[package]] @@ -3381,7 +3357,7 @@ checksum = "8067b404fe97c70829f082dec8bcf4f71225d7eaea1d8645349cb76fa06205cc" dependencies = [ "libc", "log", - "miow 0.3.7", + "miow", "ntapi", "winapi 0.3.9", ] @@ -3394,24 +3370,12 @@ checksum = "52da4364ffb0e4fe33a9841a98a3f3014fb964045ce4f7a45a398243c8d6b0c9" dependencies = [ "libc", "log", - "miow 0.3.7", + "miow", "ntapi", "wasi 0.11.0+wasi-snapshot-preview1", "winapi 0.3.9", ] -[[package]] -name = "mio-extras" -version = "2.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52403fe290012ce777c4626790c8951324a2b9e3316b3143779c72b029742f19" -dependencies = [ - "lazycell", - "log", - "mio 0.6.23", - "slab", -] - [[package]] name = "mio-misc" version = "1.2.2" @@ -3424,18 +3388,6 @@ dependencies = [ "mio 0.7.14", ] -[[package]] -name = "miow" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d" -dependencies = [ - "kernel32-sys", - "net2", - "winapi 0.2.8", - "ws2_32-sys", -] - [[package]] name = "miow" version = "0.3.7" @@ -3606,17 +3558,6 @@ dependencies = [ "jni-sys", ] -[[package]] -name = "net2" -version = "0.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "391630d12b68002ae1e25e8f974306474966550ad82dac6886fb8910c19568ae" -dependencies = [ - "cfg-if 0.1.10", - "libc", - "winapi 0.3.9", -] - [[package]] name = "nibble_vec" version = "0.1.0" @@ -3727,33 +3668,15 @@ dependencies = [ [[package]] name = "notify" -version = "4.0.17" +version = "5.0.0-pre.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae03c8c853dba7bfd23e571ff0cff7bc9dceb40a4cd684cd1681824183f45257" -dependencies = [ - "bitflags", - "filetime", - "fsevent", - "fsevent-sys 2.0.1", - "inotify 0.7.1", - "libc", - "mio 0.6.23", - "mio-extras", - "walkdir 2.3.2", - "winapi 0.3.9", -] - -[[package]] -name = "notify" -version = "5.0.0-pre.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d13c22db70a63592e098fb51735bab36646821e6389a0ba171f3549facdf0b74" +checksum = "553f9844ad0b0824605c20fb55a661679782680410abfb1a8144c2e7e437e7a7" dependencies = [ "bitflags", "crossbeam-channel", "filetime", - "fsevent-sys 4.1.0", - "inotify 0.9.6", + "fsevent-sys", + "inotify", "kqueue", "libc", "mio 0.8.2", @@ -3883,17 +3806,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "num-rational" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - [[package]] name = "num-rational" version = "0.4.0" @@ -4099,6 +4011,15 @@ dependencies = [ "num-traits", ] +[[package]] +name = "ordered-float" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96bcbab4bfea7a59c2c0fe47211a1ac4e3e96bea6eb446d704f310bc5c732ae2" +dependencies = [ + "num-traits", +] + [[package]] name = "os_str_bytes" version = "6.0.0" @@ -4387,14 +4308,14 @@ dependencies = [ [[package]] name = "png" -version = "0.16.8" +version = "0.17.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c3287920cb847dee3de33d301c463fba14dda99db24214ddf93f83d3021f4c6" +checksum = "dc38c0ad57efb786dd57b9864e5b18bae478c00c824dc55a38bbc9da95dde3ba" dependencies = [ "bitflags", "crc32fast", - "deflate 0.8.6", - "miniz_oxide 0.3.7", + "deflate", + "miniz_oxide 0.5.3", ] [[package]] @@ -4490,9 +4411,9 @@ dependencies = [ [[package]] name = "profiling" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9145ac0af1d93c638c98c40cf7d25665f427b2a44ad0a99b1dccf3e2f25bb987" +checksum = "2f61dcf0b917cd75d4521d7343d1ffff3d1583054133c9b5cbea3375c703c40d" dependencies = [ "profiling-procmacros", "tracy-client", @@ -4500,9 +4421,9 @@ dependencies = [ [[package]] name = "profiling-procmacros" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "151b4774158c69aae073abb06d0cf879c4657966e6f2d7535d9b0e94e85500af" +checksum = "98eee3c112f2a6f784b6713fe1d7fb7d6506e066121c0a49371fdb976f72bae5" dependencies = [ "quote 1.0.17", "syn 1.0.90", @@ -5178,9 +5099,9 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "0.3.0" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ee86d63972a7c661d1536fefe8c3c8407321c3df668891286de28abcd087360" +checksum = "e7522c9de787ff061458fe9a829dc790a3f5b22dc571694fc5883f448b94d9a9" dependencies = [ "base64", ] @@ -5554,12 +5475,12 @@ checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2" [[package]] name = "shred" -version = "0.12.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb0210289d693217926314867c807e0b7b42f7e23c136adb31f8697f5bf242d3" +checksum = "102269e720bb814df57e136161cad841f2b6f411e003ac748fc48aaf2363bea3" dependencies = [ - "arrayvec", - "hashbrown 0.11.2", + "arrayvec 0.7.2", + "hashbrown 0.12.0", "mopa", "rayon", "shred-derive", @@ -5727,11 +5648,12 @@ dependencies = [ [[package]] name = "specs" -version = "0.16.2" -source = "git+https://github.com/amethyst/specs.git?rev=f985bec5d456f7b0dd8aae99848f9473c2cd9d46#f985bec5d456f7b0dd8aae99848f9473c2cd9d46" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ea85dac2880f84d4025ff5ace80cda6d8bc43bc88b6a389b9277fcf894b51e9" dependencies = [ "crossbeam-queue", - "hashbrown 0.11.2", + "hashbrown 0.12.0", "hibitset", "log", "rayon", @@ -5745,7 +5667,8 @@ dependencies = [ [[package]] name = "specs-derive" version = "0.4.1" -source = "git+https://github.com/amethyst/specs.git?rev=f985bec5d456f7b0dd8aae99848f9473c2cd9d46#f985bec5d456f7b0dd8aae99848f9473c2cd9d46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e23e09360f3d2190fec4222cd9e19d3158d5da948c0d1ea362df617dd103511" dependencies = [ "proc-macro2 1.0.36", "quote 1.0.17", @@ -5755,7 +5678,7 @@ dependencies = [ [[package]] name = "specs-idvs" version = "0.1.1" -source = "git+https://gitlab.com/veloren/specs-idvs.git?rev=8be2abcddf8f524cb5876e8dd20a7e47cfaf7573#8be2abcddf8f524cb5876e8dd20a7e47cfaf7573" +source = "git+https://gitlab.com/veloren/specs-idvs.git?rev=c17abc638f23ef221ce7384c7dd77eef757b82f4#c17abc638f23ef221ce7384c7dd77eef757b82f4" dependencies = [ "specs", ] @@ -6310,9 +6233,9 @@ dependencies = [ [[package]] name = "tracing-tracy" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773057bb2b440e868776522a0587f732b1125116f12aca0eb37dea48d55ad2cd" +checksum = "23a42311a35ed976d72f359de43e9fe028ec9d9f1051c4c52bd05a4f66ff3cbf" dependencies = [ "tracing-core", "tracing-subscriber", @@ -6321,19 +6244,20 @@ dependencies = [ [[package]] name = "tracy-client" -version = "0.12.7" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dffcb26a0c786a0e154afdf21284969ff23759f42f156bcfddddae1a3c2404f2" +checksum = "42ebfe7a24c18b5ba86d8920c124b41b942352f863fbe0c84d3d63428fa1860f" dependencies = [ + "loom", "once_cell", "tracy-client-sys", ] [[package]] name = "tracy-client-sys" -version = "0.16.0" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6226e4e77f0d46ce7ebb0a4b1daa82790035248b75bbf605b932a1d7b3b22b6d" +checksum = "178d021455e83078bb38c00b70046b95117ef0a0312cbef925f426d833d11c79" dependencies = [ "cc", ] @@ -6380,9 +6304,9 @@ dependencies = [ [[package]] name = "tuple_utils" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44834418e2c5b16f47bedf35c28e148db099187dd5feee6367fb2525863af4f1" +checksum = "cffaaf9392ef73cd30828797152476aaa2fa37a17856934fa63d4843f34290e9" [[package]] name = "twox-hash" @@ -6546,7 +6470,7 @@ dependencies = [ "bincode", "byteorder", "clap 3.1.8", - "hashbrown 0.11.2", + "hashbrown 0.12.0", "image", "num 0.4.0", "quinn", @@ -6588,7 +6512,7 @@ dependencies = [ "dot_vox", "enum-iterator", "fxhash", - "hashbrown 0.11.2", + "hashbrown 0.12.0", "indexmap", "kiddo 0.1.7", "lazy_static", @@ -6674,7 +6598,7 @@ version = "0.10.0" dependencies = [ "bincode", "flate2", - "hashbrown 0.11.2", + "hashbrown 0.12.0", "image", "num-traits", "serde", @@ -6692,7 +6616,7 @@ name = "veloren-common-state" version = "0.10.0" dependencies = [ "bincode", - "hashbrown 0.11.2", + "hashbrown 0.12.0", "num_cpus", "rayon", "scopeguard", @@ -6714,9 +6638,9 @@ dependencies = [ name = "veloren-common-systems" version = "0.10.0" dependencies = [ - "hashbrown 0.11.2", + "hashbrown 0.12.0", "indexmap", - "ordered-float 2.10.0", + "ordered-float 3.0.0", "rand 0.8.5", "rayon", "slab", @@ -6727,6 +6651,7 @@ dependencies = [ "veloren-common-base", "veloren-common-ecs", "veloren-common-net", + "veloren-common-state", ] [[package]] @@ -6764,7 +6689,7 @@ dependencies = [ [[package]] name = "veloren-network-protocol" -version = "0.6.0" +version = "0.6.1" dependencies = [ "async-channel", "async-trait", @@ -6818,10 +6743,11 @@ dependencies = [ "crossbeam-channel", "enumset", "futures-util", - "hashbrown 0.11.2", + "hashbrown 0.12.0", "humantime", "itertools", "lazy_static", + "noise", "num_cpus", "portpicker", "prometheus", @@ -6834,7 +6760,7 @@ dependencies = [ "ron 0.7.0", "rusqlite", "rustls 0.20.4", - "rustls-pemfile 0.3.0", + "rustls-pemfile 1.0.0", "serde", "serde_json", "slab", @@ -6863,6 +6789,7 @@ dependencies = [ "clap 3.1.8", "crossterm 0.23.2", "lazy_static", + "mimalloc", "num_cpus", "ron 0.7.0", "serde", @@ -6903,11 +6830,12 @@ dependencies = [ "egui_wgpu_backend", "egui_winit_platform", "enum-iterator", + "etagere", "euc", "gilrs", "glyph_brush", "guillotiere", - "hashbrown 0.11.2", + "hashbrown 0.12.0", "iced_native", "iced_winit", "image", @@ -6915,11 +6843,12 @@ dependencies = [ "itertools", "keyboard-keynames", "lazy_static", + "mimalloc", "mumble-link", "native-dialog", "num 0.4.0", "num_cpus", - "ordered-float 2.10.0", + "ordered-float 3.0.0", "profiling", "rand 0.8.5", "rand_chacha 0.3.1", @@ -6962,6 +6891,7 @@ version = "0.10.0" dependencies = [ "bytemuck", "lazy_static", + "mimalloc", "vek 0.15.8", "veloren-common", "veloren-voxygen-dynlib", @@ -6980,7 +6910,7 @@ version = "0.1.0" dependencies = [ "find_folder", "libloading 0.7.3", - "notify 5.0.0-pre.14", + "notify", "tracing", ] @@ -7011,7 +6941,7 @@ dependencies = [ "clap 3.1.8", "deunicode", "git2", - "hashbrown 0.11.2", + "hashbrown 0.12.0", "ron 0.7.0", "serde", "tracing", @@ -7029,12 +6959,12 @@ dependencies = [ "clap 3.1.8", "criterion", "csv", - "deflate 1.0.0", + "deflate", "enum-iterator", "fallible-iterator", "flate2", "fxhash", - "hashbrown 0.11.2", + "hashbrown 0.12.0", "image", "itertools", "kiddo 0.2.4", @@ -7045,7 +6975,7 @@ dependencies = [ "noisy_float", "num 0.4.0", "num-traits", - "ordered-float 2.10.0", + "ordered-float 3.0.0", "packed_simd_2", "probability", "rand 0.8.5", @@ -7619,7 +7549,7 @@ name = "wgpu" version = "0.8.0" source = "git+https://github.com/gfx-rs/wgpu.git?rev=a92b8549a8e2cb9dac781bafc5ed32828f3caf46#a92b8549a8e2cb9dac781bafc5ed32828f3caf46" dependencies = [ - "arrayvec", + "arrayvec 0.5.2", "js-sys", "log", "naga", @@ -7639,7 +7569,7 @@ name = "wgpu-core" version = "0.8.0" source = "git+https://github.com/gfx-rs/wgpu.git?rev=a92b8549a8e2cb9dac781bafc5ed32828f3caf46#a92b8549a8e2cb9dac781bafc5ed32828f3caf46" dependencies = [ - "arrayvec", + "arrayvec 0.5.2", "bitflags", "cfg_aliases", "copyless", @@ -7906,16 +7836,6 @@ dependencies = [ "winapi 0.3.9", ] -[[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", - "winapi-build", -] - [[package]] name = "wyz" version = "0.4.0" diff --git a/Cargo.toml b/Cargo.toml index f910686269..fec9ce5a35 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -35,7 +35,6 @@ overflow-checks = true debug-assertions = true panic = "abort" debug = false -codegen-units = 8 lto = false incremental = true # All packages that aren't members of this workspace diff --git a/assets/common/abilities/custom/arthropods/antlion/charge.ron b/assets/common/abilities/custom/arthropods/antlion/charge.ron index b30662dd84..0cc8c7035d 100644 --- a/assets/common/abilities/custom/arthropods/antlion/charge.ron +++ b/assets/common/abilities/custom/arthropods/antlion/charge.ron @@ -2,13 +2,13 @@ DashMelee( energy_cost: 0, melee_constructor: ( kind: Stab( - damage: 15.0, + damage: 30.0, poise: 20.0, knockback: 10.0, energy_regen: 0.0, ), scaled: Some(Stab( - damage: 60.0, + damage: 120.0, poise: 45.0, knockback: 25.0, energy_regen: 0.0, @@ -18,10 +18,10 @@ DashMelee( ), energy_drain: 0, forward_speed: 3.0, - buildup_duration: 0.3, - charge_duration: 4.0, + buildup_duration: 0.6, + charge_duration: 8.0, swing_duration: 0.1, - recover_duration: 0.4, + recover_duration: 0.8, ori_modifier: 0.1, charge_through: false, is_interruptible: false, diff --git a/assets/common/abilities/custom/arthropods/antlion/singlestrike.ron b/assets/common/abilities/custom/arthropods/antlion/singlestrike.ron index 7a406cc784..894d933fcc 100644 --- a/assets/common/abilities/custom/arthropods/antlion/singlestrike.ron +++ b/assets/common/abilities/custom/arthropods/antlion/singlestrike.ron @@ -2,17 +2,17 @@ ComboMelee( stage_data: [ ( stage: 1, - base_damage: 37, + base_damage: 74, damage_increase: 0, base_poise_damage: 27.5, poise_damage_increase: 0, knockback: 9.0, range: 3.0, angle: 60.0, - base_buildup_duration: 0.7, + base_buildup_duration: 1.4, base_swing_duration: 0.1, hit_timing: 0.5, - base_recover_duration: 0.4, + base_recover_duration: 0.8, forward_movement: 1.0, damage_kind: Crushing, damage_effect: Some(Buff(( diff --git a/assets/common/abilities/custom/arthropods/blackwidow/poisonball.ron b/assets/common/abilities/custom/arthropods/blackwidow/poisonball.ron index 0cf8078f70..faad0f0faa 100644 --- a/assets/common/abilities/custom/arthropods/blackwidow/poisonball.ron +++ b/assets/common/abilities/custom/arthropods/blackwidow/poisonball.ron @@ -1,10 +1,10 @@ BasicRanged( energy_cost: 0, - buildup_duration: 0.6, - recover_duration: 0.35, + buildup_duration: 1.2, + recover_duration: 0.7, projectile: Poisonball( - damage: 25.0, - radius: 3.0, + damage: 70.0, + radius: 3.5, energy_regen: 0, min_falloff: 0.2, ), @@ -14,6 +14,6 @@ BasicRanged( ..Default::default() }),*/ projectile_speed: 260.0, - num_projectiles: 3, + num_projectiles: 1, projectile_spread: 0.3, ) \ No newline at end of file diff --git a/assets/common/abilities/custom/arthropods/blackwidow/singlestrike.ron b/assets/common/abilities/custom/arthropods/blackwidow/singlestrike.ron index f93dc5f540..22c9e9cb68 100644 --- a/assets/common/abilities/custom/arthropods/blackwidow/singlestrike.ron +++ b/assets/common/abilities/custom/arthropods/blackwidow/singlestrike.ron @@ -2,17 +2,17 @@ ComboMelee( stage_data: [ ( stage: 1, - base_damage: 25, + base_damage: 50, damage_increase: 0, base_poise_damage: 16, poise_damage_increase: 0, knockback: 2.0, range: 3.0, angle: 60.0, - base_buildup_duration: 0.4, + base_buildup_duration: 0.8, base_swing_duration: 0.1, hit_timing: 0.5, - base_recover_duration: 0.4, + base_recover_duration: 0.8, forward_movement: 1.0, damage_kind: Piercing, damage_effect: Some(Buff(( diff --git a/assets/common/abilities/custom/arthropods/hornbeetle/leap.ron b/assets/common/abilities/custom/arthropods/hornbeetle/leap.ron index fd676b982e..13f0bbcada 100644 --- a/assets/common/abilities/custom/arthropods/hornbeetle/leap.ron +++ b/assets/common/abilities/custom/arthropods/hornbeetle/leap.ron @@ -1,12 +1,12 @@ LeapMelee( energy_cost: 0, - buildup_duration: 0.5, - movement_duration: 0.4, + buildup_duration: 1.0, + movement_duration: 0.8, swing_duration: 0.075, - recover_duration: 0.2, + recover_duration: 0.4, melee_constructor: ( kind: Bash( - damage: 30.0, + damage: 60.0, poise: 20.0, knockback: 4.0, energy_regen: 0.0, diff --git a/assets/common/abilities/custom/arthropods/hornbeetle/singlestrike.ron b/assets/common/abilities/custom/arthropods/hornbeetle/singlestrike.ron index 06a049559b..ca5fde82f5 100644 --- a/assets/common/abilities/custom/arthropods/hornbeetle/singlestrike.ron +++ b/assets/common/abilities/custom/arthropods/hornbeetle/singlestrike.ron @@ -2,17 +2,17 @@ ComboMelee( stage_data: [ ( stage: 1, - base_damage: 27, + base_damage: 54, damage_increase: 0, base_poise_damage: 20, poise_damage_increase: 0, knockback: 5.0, range: 3.0, angle: 60.0, - base_buildup_duration: 0.4, + base_buildup_duration: 0.8, base_swing_duration: 0.1, hit_timing: 0.5, - base_recover_duration: 0.4, + base_recover_duration: 0.8, forward_movement: 1.0, damage_kind: Crushing, ), diff --git a/assets/common/abilities/custom/arthropods/tarantula/leap.ron b/assets/common/abilities/custom/arthropods/tarantula/leap.ron index f556131d65..054e3da70c 100644 --- a/assets/common/abilities/custom/arthropods/tarantula/leap.ron +++ b/assets/common/abilities/custom/arthropods/tarantula/leap.ron @@ -1,12 +1,12 @@ LeapMelee( energy_cost: 0, - buildup_duration: 0.5, - movement_duration: 0.4, + buildup_duration: 1.0, + movement_duration: 0.8, swing_duration: 0.075, - recover_duration: 0.2, + recover_duration: 0.4, melee_constructor: ( kind: Bash( - damage: 35.0, + damage: 70.0, poise: 30.0, knockback: 1.0, energy_regen: 0.0, diff --git a/assets/common/abilities/custom/arthropods/tarantula/singlestrike.ron b/assets/common/abilities/custom/arthropods/tarantula/singlestrike.ron index e201771290..beecea26cb 100644 --- a/assets/common/abilities/custom/arthropods/tarantula/singlestrike.ron +++ b/assets/common/abilities/custom/arthropods/tarantula/singlestrike.ron @@ -2,17 +2,17 @@ ComboMelee( stage_data: [ ( stage: 1, - base_damage: 30, + base_damage: 60, damage_increase: 0, base_poise_damage: 21, poise_damage_increase: 0, knockback: 3.0, range: 3.0, angle: 60.0, - base_buildup_duration: 0.4, + base_buildup_duration: 0.8, base_swing_duration: 0.1, hit_timing: 0.5, - base_recover_duration: 0.4, + base_recover_duration: 0.8, forward_movement: 1.0, damage_kind: Piercing, damage_effect: Some(Buff(( diff --git a/assets/common/abilities/custom/arthropods/weevil/singlestrike.ron b/assets/common/abilities/custom/arthropods/weevil/singlestrike.ron index 891fba2e05..bf8c3376f4 100644 --- a/assets/common/abilities/custom/arthropods/weevil/singlestrike.ron +++ b/assets/common/abilities/custom/arthropods/weevil/singlestrike.ron @@ -2,17 +2,17 @@ ComboMelee( stage_data: [ ( stage: 1, - base_damage: 22, + base_damage: 44, damage_increase: 0, base_poise_damage: 14, poise_damage_increase: 0, knockback: 3.0, range: 3.0, angle: 60.0, - base_buildup_duration: 0.4, + base_buildup_duration: 0.8, base_swing_duration: 0.1, hit_timing: 0.5, - base_recover_duration: 0.4, + base_recover_duration: 0.8, forward_movement: 1.0, damage_kind: Crushing, ), diff --git a/assets/common/abilities/custom/arthropods/weevil/threadshot.ron b/assets/common/abilities/custom/arthropods/weevil/threadshot.ron index cc8938deb0..df2e9ee30e 100644 --- a/assets/common/abilities/custom/arthropods/weevil/threadshot.ron +++ b/assets/common/abilities/custom/arthropods/weevil/threadshot.ron @@ -1,8 +1,8 @@ BasicBeam( - buildup_duration: 0.2, - recover_duration: 0.2, + buildup_duration: 0.4, + recover_duration: 0.4, beam_duration: 1.0, - damage: 0.6, + damage: 1.2, tick_rate: 15.0, range: 30.0, max_angle: 1.0, diff --git a/assets/common/abilities/custom/asp/firebomb.ron b/assets/common/abilities/custom/asp/firebomb.ron index 02b54ed7f3..27e06879f4 100644 --- a/assets/common/abilities/custom/asp/firebomb.ron +++ b/assets/common/abilities/custom/asp/firebomb.ron @@ -1,9 +1,9 @@ BasicRanged( energy_cost: 0, - buildup_duration: 0.8, - recover_duration: 0.35, + buildup_duration: 1.6, + recover_duration: 0.7, projectile: Fireball( - damage: 13.0, + damage: 26.0, radius: 5.0, energy_regen: 0, min_falloff: 0.5, diff --git a/assets/common/abilities/custom/asp/singlestrike.ron b/assets/common/abilities/custom/asp/singlestrike.ron index bf66750e24..e67747b071 100644 --- a/assets/common/abilities/custom/asp/singlestrike.ron +++ b/assets/common/abilities/custom/asp/singlestrike.ron @@ -2,17 +2,17 @@ ComboMelee( stage_data: [ ( stage: 1, - base_damage: 14.0, + base_damage: 28.0, damage_increase: 0, base_poise_damage: 28, poise_damage_increase: 0, knockback: 3.0, range: 3.5, angle: 60.0, - base_buildup_duration: 0.6, + base_buildup_duration: 1.2, base_swing_duration: 0.1, hit_timing: 0.5, - base_recover_duration: 0.2, + base_recover_duration: 0.4, forward_movement: 2.0, damage_kind: Crushing, ), diff --git a/assets/common/abilities/custom/basilisk/dash.ron b/assets/common/abilities/custom/basilisk/dash.ron index 34a1b77bc3..ef6cf6b01f 100644 --- a/assets/common/abilities/custom/basilisk/dash.ron +++ b/assets/common/abilities/custom/basilisk/dash.ron @@ -2,13 +2,13 @@ DashMelee( energy_cost: 0, melee_constructor: ( kind: Bash( - damage: 12.0, + damage: 24.0, poise: 25.0, knockback: 4.0, energy_regen: 0.0, ), scaled: Some(Bash( - damage: 18.0, + damage: 36.0, poise: 0.0, knockback: 17.0, energy_regen: 0.0, @@ -18,10 +18,10 @@ DashMelee( ), energy_drain: 0, forward_speed: 4.0, - buildup_duration: 0.8, - charge_duration: 1.0, + buildup_duration: 1.6, + charge_duration: 2.0, swing_duration: 0.1, - recover_duration: 1.0, + recover_duration: 2.0, ori_modifier: 0.3, charge_through: false, is_interruptible: false, diff --git a/assets/common/abilities/custom/basilisk/petrify.ron b/assets/common/abilities/custom/basilisk/petrify.ron index d5914137d3..dc48f20b3f 100644 --- a/assets/common/abilities/custom/basilisk/petrify.ron +++ b/assets/common/abilities/custom/basilisk/petrify.ron @@ -1,9 +1,9 @@ BasicBeam( - buildup_duration: 0.9, + buildup_duration: 1.8, recover_duration: 1.0, - beam_duration: 1.0, - damage: 42.0, - tick_rate: 0.5, + beam_duration: 1.15, + damage: 64.0, + tick_rate: 0.35, range: 22.0, max_angle: 5.0, damage_effect: Some(Buff(( diff --git a/assets/common/abilities/custom/basilisk/triplestrike.ron b/assets/common/abilities/custom/basilisk/triplestrike.ron index 9a7e49b3bd..d78252af9d 100644 --- a/assets/common/abilities/custom/basilisk/triplestrike.ron +++ b/assets/common/abilities/custom/basilisk/triplestrike.ron @@ -2,14 +2,14 @@ ComboMelee( stage_data: [ ( stage: 1, - base_damage: 18.0, + base_damage: 36.0, damage_increase: 0, base_poise_damage: 15, poise_damage_increase: 0, knockback: 3.0, range: 2.8, angle: 30.0, - base_buildup_duration: 0.7, + base_buildup_duration: 1.4, base_swing_duration: 0.07, hit_timing: 0.5, base_recover_duration: 0.3, @@ -18,14 +18,14 @@ ComboMelee( ), ( stage: 2, - base_damage: 18.0, + base_damage: 36.0, damage_increase: 0, base_poise_damage: 18, poise_damage_increase: 0, knockback: 3.0, range: 2.8, angle: 30.0, - base_buildup_duration: 0.4, + base_buildup_duration: 0.8, base_swing_duration: 0.07, hit_timing: 0.5, base_recover_duration: 0.3, @@ -34,14 +34,14 @@ ComboMelee( ), ( stage: 3, - base_damage: 18.0, + base_damage: 36.0, damage_increase: 0, base_poise_damage: 20, poise_damage_increase: 0, knockback: 3.0, range: 2.8, angle: 30.0, - base_buildup_duration: 0.4, + base_buildup_duration: 0.8, base_swing_duration: 0.07, hit_timing: 0.5, base_recover_duration: 0.3, diff --git a/assets/common/abilities/custom/beastclaws/basic.ron b/assets/common/abilities/custom/beastclaws/basic.ron index 22a98bfc32..4829d1aa99 100644 --- a/assets/common/abilities/custom/beastclaws/basic.ron +++ b/assets/common/abilities/custom/beastclaws/basic.ron @@ -1,11 +1,11 @@ BasicMelee( energy_cost: 0, - buildup_duration: 0.25, + buildup_duration: 0.5, swing_duration: 0.1, - recover_duration: 0.25, + recover_duration: 0.5, melee_constructor: ( kind: Slash( - damage: 20.0, + damage: 40.0, poise: 40.0, knockback: 25.0, energy_regen: 0.0, diff --git a/assets/common/abilities/custom/birdlargebasic/dash.ron b/assets/common/abilities/custom/birdlargebasic/dash.ron index ce53e9dd44..91d68c93a3 100644 --- a/assets/common/abilities/custom/birdlargebasic/dash.ron +++ b/assets/common/abilities/custom/birdlargebasic/dash.ron @@ -2,13 +2,13 @@ DashMelee( energy_cost: 0, melee_constructor: ( kind: Bash( - damage: 8.0, + damage: 16.0, poise: 50.0, knockback: 6.0, energy_regen: 0.0, ), scaled: Some(Bash( - damage: 15.0, + damage: 30.0, poise: 100.0, knockback: 12.0, energy_regen: 0.0, @@ -18,10 +18,10 @@ DashMelee( ), energy_drain: 0, forward_speed: 1.9, - buildup_duration: 0.5, - charge_duration: 3.0, + buildup_duration: 1.0, + charge_duration: 6.0, swing_duration: 0.1, - recover_duration: 0.7, + recover_duration: 1.4, ori_modifier: 0.3, charge_through: false, is_interruptible: false, diff --git a/assets/common/abilities/custom/birdlargebasic/summontornadoes.ron b/assets/common/abilities/custom/birdlargebasic/summontornadoes.ron index 3eb2a494d6..16183d10b5 100644 --- a/assets/common/abilities/custom/birdlargebasic/summontornadoes.ron +++ b/assets/common/abilities/custom/birdlargebasic/summontornadoes.ron @@ -1,7 +1,7 @@ BasicSummon( - buildup_duration: 0.5, + buildup_duration: 0.75, cast_duration: 0.2, - recover_duration: 0.2, + recover_duration: 0.3, summon_amount: 12, summon_distance: (4, 9), summon_info: ( diff --git a/assets/common/abilities/custom/birdlargebasic/triplestrike.ron b/assets/common/abilities/custom/birdlargebasic/triplestrike.ron index 5fc9b43899..03bba2f8d8 100644 --- a/assets/common/abilities/custom/birdlargebasic/triplestrike.ron +++ b/assets/common/abilities/custom/birdlargebasic/triplestrike.ron @@ -2,49 +2,49 @@ ComboMelee( stage_data: [ ( stage: 1, - base_damage: 11.0, + base_damage: 22.0, damage_increase: 0, base_poise_damage: 0, poise_damage_increase: 0, knockback: 5.0, range: 4.5, angle: 30.0, - base_buildup_duration: 0.4, + base_buildup_duration: 0.8, base_swing_duration: 0.1, hit_timing: 0.5, - base_recover_duration: 0.3, + base_recover_duration: 0.6, forward_movement: 3.0, damage_kind: Crushing, ), ( stage: 2, - base_damage: 9.0, + base_damage: 18.0, damage_increase: 0, base_poise_damage: 0, poise_damage_increase: 0, knockback: 5.0, range: 3.5, angle: 30.0, - base_buildup_duration: 0.4, + base_buildup_duration: 0.8, base_swing_duration: 0.1, hit_timing: 0.5, - base_recover_duration: 0.3, + base_recover_duration: 0.6, forward_movement: 3.0, damage_kind: Crushing, ), ( stage: 3, - base_damage: 14.0, + base_damage: 28.0, damage_increase: 0, base_poise_damage: 0, poise_damage_increase: 0, knockback: 10.0, range: 3.5, angle: 30.0, - base_buildup_duration: 0.65, + base_buildup_duration: 1.3, base_swing_duration: 0.1, hit_timing: 0.5, - base_recover_duration: 0.3, + base_recover_duration: 0.6, forward_movement: 3.5, damage_kind: Crushing, ), diff --git a/assets/common/abilities/custom/birdlargebreathe/firebomb.ron b/assets/common/abilities/custom/birdlargebreathe/firebomb.ron index a3708e2740..c94ac890ba 100644 --- a/assets/common/abilities/custom/birdlargebreathe/firebomb.ron +++ b/assets/common/abilities/custom/birdlargebreathe/firebomb.ron @@ -1,9 +1,9 @@ BasicRanged( energy_cost: 0, - buildup_duration: 0.5, - recover_duration: 0.35, + buildup_duration: 1.0, + recover_duration: 0.7, projectile: Fireball( - damage: 10.0, + damage: 20.0, radius: 5.0, energy_regen: 5.0, min_falloff: 0.5, diff --git a/assets/common/abilities/custom/birdlargebreathe/flamethrower.ron b/assets/common/abilities/custom/birdlargebreathe/flamethrower.ron index 6b6ccdff31..50c9cec231 100644 --- a/assets/common/abilities/custom/birdlargebreathe/flamethrower.ron +++ b/assets/common/abilities/custom/birdlargebreathe/flamethrower.ron @@ -1,8 +1,8 @@ BasicBeam( - buildup_duration: 0.4, - recover_duration: 0.25, + buildup_duration: 0.8, + recover_duration: 0.5, beam_duration: 0.5, - damage: 5.0, + damage: 10.0, tick_rate: 3.0, range: 15.0, max_angle: 22.5, diff --git a/assets/common/abilities/custom/birdlargebreathe/triplestrike.ron b/assets/common/abilities/custom/birdlargebreathe/triplestrike.ron index c8c932a288..5875d42e14 100644 --- a/assets/common/abilities/custom/birdlargebreathe/triplestrike.ron +++ b/assets/common/abilities/custom/birdlargebreathe/triplestrike.ron @@ -2,17 +2,17 @@ ComboMelee( stage_data: [ ( stage: 1, - base_damage: 10.0, + base_damage: 20.0, damage_increase: 0, base_poise_damage: 0, poise_damage_increase: 0, knockback: 5.0, range: 4.5, angle: 30.0, - base_buildup_duration: 0.4, + base_buildup_duration: 0.8, base_swing_duration: 0.1, hit_timing: 0.5, - base_recover_duration: 0.3, + base_recover_duration: 0.6, forward_movement: 2.0, damage_kind: Slashing, damage_effect: Some(Buff(( @@ -24,17 +24,17 @@ ComboMelee( ), ( stage: 2, - base_damage: 8.0, + base_damage: 16.0, damage_increase: 0, base_poise_damage: 0, poise_damage_increase: 0, knockback: 5.0, range: 3.5, angle: 30.0, - base_buildup_duration: 0.4, + base_buildup_duration: 0.8, base_swing_duration: 0.1, hit_timing: 0.5, - base_recover_duration: 0.3, + base_recover_duration: 0.6, forward_movement: 1.5, damage_kind: Slashing, damage_effect: Some(Buff(( @@ -46,17 +46,17 @@ ComboMelee( ), ( stage: 3, - base_damage: 13.0, + base_damage: 26.0, damage_increase: 0, base_poise_damage: 0, poise_damage_increase: 0, knockback: 10.0, range: 3.5, angle: 30.0, - base_buildup_duration: 0.65, + base_buildup_duration: 1.3, base_swing_duration: 0.1, hit_timing: 0.5, - base_recover_duration: 0.3, + base_recover_duration: 0.6, forward_movement: 1.5, damage_kind: Slashing, damage_effect: Some(Buff(( diff --git a/assets/common/abilities/custom/birdlargefire/firebomb.ron b/assets/common/abilities/custom/birdlargefire/firebomb.ron index a3708e2740..c94ac890ba 100644 --- a/assets/common/abilities/custom/birdlargefire/firebomb.ron +++ b/assets/common/abilities/custom/birdlargefire/firebomb.ron @@ -1,9 +1,9 @@ BasicRanged( energy_cost: 0, - buildup_duration: 0.5, - recover_duration: 0.35, + buildup_duration: 1.0, + recover_duration: 0.7, projectile: Fireball( - damage: 10.0, + damage: 20.0, radius: 5.0, energy_regen: 5.0, min_falloff: 0.5, diff --git a/assets/common/abilities/custom/birdlargefire/fireshockwave.ron b/assets/common/abilities/custom/birdlargefire/fireshockwave.ron index 36671dc626..9989b39290 100644 --- a/assets/common/abilities/custom/birdlargefire/fireshockwave.ron +++ b/assets/common/abilities/custom/birdlargefire/fireshockwave.ron @@ -1,9 +1,9 @@ Shockwave( energy_cost: 60.0, - buildup_duration: 0.7, + buildup_duration: 1.4, swing_duration: 0.1, - recover_duration: 0.2, - damage: 20.0, + recover_duration: 0.4, + damage: 40.0, poise_damage: 0, knockback: ( strength: 25.0, direction: Away), shockwave_angle: 360.0, diff --git a/assets/common/abilities/custom/birdlargefire/flamethrower.ron b/assets/common/abilities/custom/birdlargefire/flamethrower.ron index 6b6ccdff31..50c9cec231 100644 --- a/assets/common/abilities/custom/birdlargefire/flamethrower.ron +++ b/assets/common/abilities/custom/birdlargefire/flamethrower.ron @@ -1,8 +1,8 @@ BasicBeam( - buildup_duration: 0.4, - recover_duration: 0.25, + buildup_duration: 0.8, + recover_duration: 0.5, beam_duration: 0.5, - damage: 5.0, + damage: 10.0, tick_rate: 3.0, range: 15.0, max_angle: 22.5, diff --git a/assets/common/abilities/custom/birdlargefire/triplestrike.ron b/assets/common/abilities/custom/birdlargefire/triplestrike.ron index c8c932a288..bcfd0cd2bd 100644 --- a/assets/common/abilities/custom/birdlargefire/triplestrike.ron +++ b/assets/common/abilities/custom/birdlargefire/triplestrike.ron @@ -2,17 +2,17 @@ ComboMelee( stage_data: [ ( stage: 1, - base_damage: 10.0, + base_damage: 20.0, damage_increase: 0, base_poise_damage: 0, poise_damage_increase: 0, knockback: 5.0, range: 4.5, angle: 30.0, - base_buildup_duration: 0.4, + base_buildup_duration: 0.8, base_swing_duration: 0.1, hit_timing: 0.5, - base_recover_duration: 0.3, + base_recover_duration: 0.6, forward_movement: 2.0, damage_kind: Slashing, damage_effect: Some(Buff(( @@ -24,17 +24,17 @@ ComboMelee( ), ( stage: 2, - base_damage: 8.0, + base_damage: 16.0, damage_increase: 0, base_poise_damage: 0, poise_damage_increase: 0, knockback: 5.0, range: 3.5, angle: 30.0, - base_buildup_duration: 0.4, + base_buildup_duration: 0.8, base_swing_duration: 0.1, hit_timing: 0.5, - base_recover_duration: 0.3, + base_recover_duration: 0.6, forward_movement: 1.5, damage_kind: Slashing, damage_effect: Some(Buff(( @@ -46,17 +46,17 @@ ComboMelee( ), ( stage: 3, - base_damage: 13.0, + base_damage: 26.0, damage_increase: 0, base_poise_damage: 0, poise_damage_increase: 0, knockback: 10.0, range: 3.5, angle: 30.0, - base_buildup_duration: 0.65, + base_buildup_duration: 0.375, base_swing_duration: 0.1, hit_timing: 0.5, - base_recover_duration: 0.3, + base_recover_duration: 0.6, forward_movement: 1.5, damage_kind: Slashing, damage_effect: Some(Buff(( diff --git a/assets/common/abilities/custom/claygolem/laser.ron b/assets/common/abilities/custom/claygolem/laser.ron index cb07b26331..f4879337d7 100644 --- a/assets/common/abilities/custom/claygolem/laser.ron +++ b/assets/common/abilities/custom/claygolem/laser.ron @@ -1,8 +1,8 @@ BasicBeam( - buildup_duration: 0.5, - recover_duration: 0.4, + buildup_duration: 0.75, + recover_duration: 0.8, beam_duration: 0.25, - damage: 7.0, + damage: 10.5, tick_rate: 2.0, range: 40.0, max_angle: 1.0, diff --git a/assets/common/abilities/custom/claygolem/rocket.ron b/assets/common/abilities/custom/claygolem/rocket.ron index 5b5a87cc02..b077118f29 100644 --- a/assets/common/abilities/custom/claygolem/rocket.ron +++ b/assets/common/abilities/custom/claygolem/rocket.ron @@ -1,9 +1,9 @@ BasicRanged( energy_cost: 0, - buildup_duration: 0.8, - recover_duration: 0.5, + buildup_duration: 1.2, + recover_duration: 1.0, projectile: ClayRocket( - damage: 50.0, + damage: 75.0, knockback: 18.0, radius: 5.0, min_falloff: 0.75, diff --git a/assets/common/abilities/custom/claygolem/shockwave.ron b/assets/common/abilities/custom/claygolem/shockwave.ron index 2d9a425735..ec82804242 100644 --- a/assets/common/abilities/custom/claygolem/shockwave.ron +++ b/assets/common/abilities/custom/claygolem/shockwave.ron @@ -1,9 +1,9 @@ Shockwave( energy_cost: 0, - buildup_duration: 1.5, + buildup_duration: 2.25, swing_duration: 0.12, - recover_duration: 1.2, - damage: 50.0, + recover_duration: 2.4, + damage: 75.0, poise_damage: 50, knockback: (strength: 30.0, direction: TowardsUp), shockwave_angle: 180.0, diff --git a/assets/common/abilities/custom/claygolem/strike.ron b/assets/common/abilities/custom/claygolem/strike.ron index c49c68b75f..3656a04d84 100644 --- a/assets/common/abilities/custom/claygolem/strike.ron +++ b/assets/common/abilities/custom/claygolem/strike.ron @@ -1,11 +1,11 @@ BasicMelee( energy_cost: 0, - buildup_duration: 0.8, + buildup_duration: 1.2, swing_duration: 0.1, - recover_duration: 0.5, + recover_duration: 1.0, melee_constructor: ( kind: Bash( - damage: 20.0, + damage: 30.0, poise: 50.0, knockback: 10.0, energy_regen: 0.0, diff --git a/assets/common/abilities/custom/deadwood/dash.ron b/assets/common/abilities/custom/deadwood/dash.ron index 853c25462e..7d76336e98 100644 --- a/assets/common/abilities/custom/deadwood/dash.ron +++ b/assets/common/abilities/custom/deadwood/dash.ron @@ -2,13 +2,13 @@ DashMelee( energy_cost: 0, melee_constructor: ( kind: Bash( - damage: 8.0, + damage: 16.0, poise: 25.0, knockback: 4.0, energy_regen: 0.0, ), scaled: Some(Bash( - damage: 15.0, + damage: 30.0, poise: 0.0, knockback: 17.0, energy_regen: 0.0, @@ -18,10 +18,10 @@ DashMelee( ), energy_drain: 0, forward_speed: 3, - buildup_duration: 0.5, - charge_duration: 1.0, + buildup_duration: 1.0, + charge_duration: 2.0, swing_duration: 0.1, - recover_duration: 1.0, + recover_duration: 2.0, ori_modifier: 0.1, charge_through: true, is_interruptible: false, diff --git a/assets/common/abilities/custom/deadwood/lifestealbeam.ron b/assets/common/abilities/custom/deadwood/lifestealbeam.ron index 9f3964953a..32f44e4c63 100644 --- a/assets/common/abilities/custom/deadwood/lifestealbeam.ron +++ b/assets/common/abilities/custom/deadwood/lifestealbeam.ron @@ -1,8 +1,8 @@ BasicBeam( - buildup_duration: 0.25, - recover_duration: 0.25, + buildup_duration: 0.5, + recover_duration: 0.5, beam_duration: 1, - damage: 3.0, + damage: 6.0, tick_rate: 2.0, range: 25.0, max_angle: 1.0, diff --git a/assets/common/abilities/custom/harvester/explodingpumpkin.ron b/assets/common/abilities/custom/harvester/explodingpumpkin.ron index 23800d70a6..95f1404eba 100644 --- a/assets/common/abilities/custom/harvester/explodingpumpkin.ron +++ b/assets/common/abilities/custom/harvester/explodingpumpkin.ron @@ -1,9 +1,9 @@ BasicRanged( energy_cost: 0, - buildup_duration: 0.5, - recover_duration: 0.8, + buildup_duration: 0.75, + recover_duration: 1.6, projectile: ExplodingPumpkin( - damage: 25.0, + damage: 37.5, knockback: 25.0, radius: 5.0, min_falloff: 0.6, diff --git a/assets/common/abilities/custom/harvester/firebreath.ron b/assets/common/abilities/custom/harvester/firebreath.ron index 8a95a1f296..21659fa41f 100644 --- a/assets/common/abilities/custom/harvester/firebreath.ron +++ b/assets/common/abilities/custom/harvester/firebreath.ron @@ -1,8 +1,8 @@ BasicBeam( - buildup_duration: 0.7, - recover_duration: 0.6, + buildup_duration: 1.4, + recover_duration: 0.9, beam_duration: 1.0, - damage: 6.0, + damage: 9.0, tick_rate: 1.5, range: 20.0, max_angle: 15.0, diff --git a/assets/common/abilities/custom/harvester/scythe.ron b/assets/common/abilities/custom/harvester/scythe.ron index 6beea854eb..18d22ccfc9 100644 --- a/assets/common/abilities/custom/harvester/scythe.ron +++ b/assets/common/abilities/custom/harvester/scythe.ron @@ -1,11 +1,11 @@ BasicMelee( energy_cost: 0, - buildup_duration: 0.6, + buildup_duration: 0.9, swing_duration: 0.1, - recover_duration: 0.6, + recover_duration: 1.2, melee_constructor: ( kind: Slash( - damage: 14.0, + damage: 21.0, poise: 10.0, knockback: 10.0, energy_regen: 0.0, diff --git a/assets/common/abilities/custom/husk/singlestrike.ron b/assets/common/abilities/custom/husk/singlestrike.ron index 42fa5e98e3..c1cb3fcb03 100644 --- a/assets/common/abilities/custom/husk/singlestrike.ron +++ b/assets/common/abilities/custom/husk/singlestrike.ron @@ -2,17 +2,17 @@ ComboMelee( stage_data: [ ( stage: 1, - base_damage: 16.0, + base_damage: 32.0, damage_increase: 0, base_poise_damage: 12, poise_damage_increase: 0, knockback: 5.0, range: 2.5, angle: 60.0, - base_buildup_duration: 0.25, + base_buildup_duration: 0.5, base_swing_duration: 0.07, hit_timing: 0.5, - base_recover_duration: 0.25, + base_recover_duration: 0.5, forward_movement: 0.5, damage_kind: Crushing, ), diff --git a/assets/common/abilities/custom/husk/triplestrike.ron b/assets/common/abilities/custom/husk/triplestrike.ron index 56d2ecc260..9dd54c69e3 100644 --- a/assets/common/abilities/custom/husk/triplestrike.ron +++ b/assets/common/abilities/custom/husk/triplestrike.ron @@ -2,49 +2,49 @@ ComboMelee( stage_data: [ ( stage: 1, - base_damage: 16.0, + base_damage: 32.0, damage_increase: 0, base_poise_damage: 6, poise_damage_increase: 0, knockback: 3.0, range: 2.5, angle: 30.0, - base_buildup_duration: 0.2, + base_buildup_duration: 0.4, base_swing_duration: 0.07, hit_timing: 0.5, - base_recover_duration: 0.2, + base_recover_duration: 0.4, forward_movement: 1.0, damage_kind: Crushing, ), ( stage: 2, - base_damage: 16.0, + base_damage: 32.0, damage_increase: 0, base_poise_damage: 8, poise_damage_increase: 0, knockback: 3.0, range: 2.5, angle: 30.0, - base_buildup_duration: 0.22, + base_buildup_duration: 0.44, base_swing_duration: 0.07, hit_timing: 0.5, - base_recover_duration: 0.2, + base_recover_duration: 0.4, forward_movement: 0.0, damage_kind: Crushing, ), ( stage: 3, - base_damage: 16.0, + base_damage: 32.0, damage_increase: 0, base_poise_damage: 10, poise_damage_increase: 0, knockback: 3.0, range: 2.5, angle: 30.0, - base_buildup_duration: 0.2, + base_buildup_duration: 0.4, base_swing_duration: 0.07, hit_timing: 0.5, - base_recover_duration: 0.2, + base_recover_duration: 0.4, forward_movement: 1.0, damage_kind: Crushing, ), diff --git a/assets/common/abilities/custom/husk_brute/chargedmelee.ron b/assets/common/abilities/custom/husk_brute/chargedmelee.ron index 68c9bb8a50..5d664c2217 100644 --- a/assets/common/abilities/custom/husk_brute/chargedmelee.ron +++ b/assets/common/abilities/custom/husk_brute/chargedmelee.ron @@ -3,13 +3,13 @@ ChargedMelee( energy_drain: 0, melee_constructor: ( kind: Bash( - damage: 5.0, + damage: 10.0, poise: 50.0, knockback: 0.0, energy_regen: 0.0, ), scaled: Some(Bash( - damage: 45.0, + damage: 90.0, poise: 150.0, knockback: 0.0, energy_regen: 0.0, @@ -17,8 +17,8 @@ ChargedMelee( range: 3.5, angle: 45.0, ), - charge_duration: 1.5, + charge_duration: 3.0, swing_duration: 0.1, hit_timing: 0.8, - recover_duration: 0.5, + recover_duration: 1.0, ) diff --git a/assets/common/abilities/custom/husk_brute/singlestrike.ron b/assets/common/abilities/custom/husk_brute/singlestrike.ron index ef4b204ef2..3671cc3c19 100644 --- a/assets/common/abilities/custom/husk_brute/singlestrike.ron +++ b/assets/common/abilities/custom/husk_brute/singlestrike.ron @@ -2,17 +2,17 @@ ComboMelee( stage_data: [ ( stage: 1, - base_damage: 20.0, + base_damage: 40.0, damage_increase: 0, base_poise_damage: 12, poise_damage_increase: 0, knockback: 5.0, range: 3.5, angle: 60.0, - base_buildup_duration: 0.5, + base_buildup_duration: 1.0, base_swing_duration: 0.2, hit_timing: 0.5, - base_recover_duration: 0.5, + base_recover_duration: 1.0, forward_movement: 0.5, damage_kind: Crushing, ), diff --git a/assets/common/abilities/custom/mandragora/basic.ron b/assets/common/abilities/custom/mandragora/basic.ron index cf44dd6b25..17a7d9ecd7 100644 --- a/assets/common/abilities/custom/mandragora/basic.ron +++ b/assets/common/abilities/custom/mandragora/basic.ron @@ -1,11 +1,11 @@ BasicMelee( energy_cost: 0, - buildup_duration: 0.2, + buildup_duration: 0.4, swing_duration: 0.05, - recover_duration: 0.3, + recover_duration: 0.6, melee_constructor: ( kind: Bash( - damage: 4, + damage: 8, poise: 5, knockback: 0, energy_regen: 0, diff --git a/assets/common/abilities/custom/mandragora/scream.ron b/assets/common/abilities/custom/mandragora/scream.ron index f7625a5a76..2918f7caa5 100644 --- a/assets/common/abilities/custom/mandragora/scream.ron +++ b/assets/common/abilities/custom/mandragora/scream.ron @@ -1,10 +1,10 @@ SpinMelee( - buildup_duration: 0.5, + buildup_duration: 0.25, swing_duration: 0.3, - recover_duration: 0.5, + recover_duration: 1.0, melee_constructor: ( kind: SonicWave( - damage: 5, + damage: 10, poise: 100, knockback: 20, ), diff --git a/assets/common/abilities/custom/maneater/poisonball.ron b/assets/common/abilities/custom/maneater/poisonball.ron index 8b13e59ecf..d36d3902b9 100644 --- a/assets/common/abilities/custom/maneater/poisonball.ron +++ b/assets/common/abilities/custom/maneater/poisonball.ron @@ -1,9 +1,9 @@ BasicRanged( energy_cost: 0, - buildup_duration: 0.8, - recover_duration: 0.35, + buildup_duration: 1.6, + recover_duration: 0.7, projectile: NecroticSphere( - damage: 26.0, + damage: 52.0, radius: 5.0, energy_regen: 0, min_falloff: 0.5, diff --git a/assets/common/abilities/custom/maneater/singlestrike.ron b/assets/common/abilities/custom/maneater/singlestrike.ron index ac08ed7a97..0d6865c74b 100644 --- a/assets/common/abilities/custom/maneater/singlestrike.ron +++ b/assets/common/abilities/custom/maneater/singlestrike.ron @@ -2,17 +2,17 @@ ComboMelee( stage_data: [ ( stage: 1, - base_damage: 20.0, + base_damage: 40.0, damage_increase: 0, base_poise_damage: 28, poise_damage_increase: 0, knockback: 3.0, range: 3.5, angle: 60.0, - base_buildup_duration: 0.5, + base_buildup_duration: 1.0, base_swing_duration: 0.075, hit_timing: 0.5, - base_recover_duration: 0.2, + base_recover_duration: 0.4, forward_movement: 2.0, damage_kind: Crushing, ), diff --git a/assets/common/abilities/custom/mindflayer/cursedflames.ron b/assets/common/abilities/custom/mindflayer/cursedflames.ron index 122d85f834..c1085dd0b9 100644 --- a/assets/common/abilities/custom/mindflayer/cursedflames.ron +++ b/assets/common/abilities/custom/mindflayer/cursedflames.ron @@ -1,8 +1,8 @@ BasicBeam( - buildup_duration: 0.40, - recover_duration: 0.50, + buildup_duration: 0.3, + recover_duration: 1.0, beam_duration: 1.0, - damage: 15.0, + damage: 22.5, tick_rate: 5.0, range: 22.0, max_angle: 15.0, diff --git a/assets/common/abilities/custom/mindflayer/necroticsphere.ron b/assets/common/abilities/custom/mindflayer/necroticsphere.ron index e353fd46fe..3327dc170d 100644 --- a/assets/common/abilities/custom/mindflayer/necroticsphere.ron +++ b/assets/common/abilities/custom/mindflayer/necroticsphere.ron @@ -1,9 +1,9 @@ BasicRanged( energy_cost: 0, - buildup_duration: 0.75, - recover_duration: 0.4, + buildup_duration: 1.125, + recover_duration: 0.8, projectile: NecroticSphere( - damage: 45.0, + damage: 67.5, radius: 5.0, min_falloff: 0.9, ), diff --git a/assets/common/abilities/custom/mindflayer/necroticvortex.ron b/assets/common/abilities/custom/mindflayer/necroticvortex.ron index 2234840015..ab8458e42a 100644 --- a/assets/common/abilities/custom/mindflayer/necroticvortex.ron +++ b/assets/common/abilities/custom/mindflayer/necroticvortex.ron @@ -1,10 +1,10 @@ SpinMelee( - buildup_duration: 0.8, + buildup_duration: 1.2, swing_duration: 0.5, - recover_duration: 0.6, + recover_duration: 1.2, melee_constructor: ( kind: NecroticVortex( - damage: 20.0, + damage: 30.0, pull: 7.0, lifesteal: 2.0, ), diff --git a/assets/common/abilities/custom/minotaur/charge.ron b/assets/common/abilities/custom/minotaur/charge.ron index fbe24cc225..69169c86dc 100644 --- a/assets/common/abilities/custom/minotaur/charge.ron +++ b/assets/common/abilities/custom/minotaur/charge.ron @@ -2,13 +2,13 @@ DashMelee( energy_cost: 0, melee_constructor: ( kind: Stab( - damage: 15.0, + damage: 22.5, poise: 25.0, knockback: 10.0, energy_regen: 0.0, ), scaled: Some(Stab( - damage: 60.0, + damage: 90.0, poise: 100.0, knockback: 30.0, energy_regen: 0.0, @@ -24,10 +24,10 @@ DashMelee( ), energy_drain: 0, forward_speed: 5.0, - buildup_duration: 0.4, - charge_duration: 4.0, + buildup_duration: 0.6, + charge_duration: 8.0, swing_duration: 0.1, - recover_duration: 1.7, + recover_duration: 3.4, ori_modifier: 0.1, charge_through: false, is_interruptible: false, diff --git a/assets/common/abilities/custom/minotaur/cleave.ron b/assets/common/abilities/custom/minotaur/cleave.ron index 8724657bd8..e7705d0bed 100644 --- a/assets/common/abilities/custom/minotaur/cleave.ron +++ b/assets/common/abilities/custom/minotaur/cleave.ron @@ -3,7 +3,7 @@ ChargedMelee( energy_drain: 0, melee_constructor: ( kind: Slash( - damage: 5.0, + damage: 7.5, poise: 50.0, knockback: 0.0, energy_regen: 0.0, @@ -17,9 +17,9 @@ ChargedMelee( range: 5.0, angle: 45.0, ), - charge_duration: 1.5, + charge_duration: 4.5, swing_duration: 0.1, hit_timing: 0.8, - recover_duration: 0.5, + recover_duration: 1.0, specifier: Some(GroundCleave), ) diff --git a/assets/common/abilities/custom/minotaur/cripplingstrike.ron b/assets/common/abilities/custom/minotaur/cripplingstrike.ron index 490be6f94f..7023af4d94 100644 --- a/assets/common/abilities/custom/minotaur/cripplingstrike.ron +++ b/assets/common/abilities/custom/minotaur/cripplingstrike.ron @@ -1,8 +1,8 @@ BasicMelee( energy_cost: 0, - buildup_duration: 0.3, + buildup_duration: 0.45, swing_duration: 0.1, - recover_duration: 0.6, + recover_duration: 1.2, melee_constructor: ( kind: Slash( damage: 15.0, diff --git a/assets/common/abilities/custom/oni/dash.ron b/assets/common/abilities/custom/oni/dash.ron index f5f7c9fa0e..ec5b8559df 100644 --- a/assets/common/abilities/custom/oni/dash.ron +++ b/assets/common/abilities/custom/oni/dash.ron @@ -2,13 +2,13 @@ DashMelee( energy_cost: 0, melee_constructor: ( kind: Slash( - damage: 8.0, + damage: 16.0, poise: 0.0, knockback: 8.0, energy_regen: 0.0, ), scaled: Some(Slash( - damage: 16.0, + damage: 32.0, poise: 0.0, knockback: 7.0, energy_regen: 0.0, @@ -18,10 +18,10 @@ DashMelee( ), energy_drain: 0, forward_speed: 3.0, - buildup_duration: 0.5, - charge_duration: 3.0, + buildup_duration: 1.0, + charge_duration: 6.0, swing_duration: 0.35, - recover_duration: 1.2, + recover_duration: 2.4, ori_modifier: 0.3, charge_through: false, is_interruptible: true, diff --git a/assets/common/abilities/custom/oni/doublestrike.ron b/assets/common/abilities/custom/oni/doublestrike.ron index 3f39a42911..964c17d7d7 100644 --- a/assets/common/abilities/custom/oni/doublestrike.ron +++ b/assets/common/abilities/custom/oni/doublestrike.ron @@ -2,17 +2,17 @@ ComboMelee( stage_data: [ ( stage: 1, - base_damage: 9.0, + base_damage: 18.0, damage_increase: 1.0, base_poise_damage: 0, poise_damage_increase: 0, knockback: 4.0, range: 3.5, angle: 50.0, - base_buildup_duration: 0.6, + base_buildup_duration: 1.2, base_swing_duration: 0.12, hit_timing: 0.5, - base_recover_duration: 0.6, + base_recover_duration: 1.2, forward_movement: 3.5, damage_kind: Slashing, damage_effect: Some(Buff(( @@ -24,17 +24,17 @@ ComboMelee( ), ( stage: 2, - base_damage: 13.0, + base_damage: 26.0, damage_increase: 1.5, base_poise_damage: 0, poise_damage_increase: 0, knockback: 16.0, range: 5.5, angle: 15.0, - base_buildup_duration: 0.5, + base_buildup_duration: 1.0, base_swing_duration: 0.15, hit_timing: 0.5, - base_recover_duration: 1.2, + base_recover_duration: 2.4, forward_movement: 4.5, damage_kind: Slashing, damage_effect: Some(Buff(( diff --git a/assets/common/abilities/custom/quadlowbasic/singlestrike.ron b/assets/common/abilities/custom/quadlowbasic/singlestrike.ron index cf0349d12c..029d76c5c3 100644 --- a/assets/common/abilities/custom/quadlowbasic/singlestrike.ron +++ b/assets/common/abilities/custom/quadlowbasic/singlestrike.ron @@ -2,17 +2,17 @@ ComboMelee( stage_data: [ ( stage: 1, - base_damage: 20.0, + base_damage: 40.0, damage_increase: 0, base_poise_damage: 28, poise_damage_increase: 0, knockback: 3.0, range: 2.0, angle: 60.0, - base_buildup_duration: 0.6, + base_buildup_duration: 1.2, base_swing_duration: 0.07, hit_timing: 0.5, - base_recover_duration: 0.4, + base_recover_duration: 0.8, forward_movement: 3.0, damage_kind: Crushing, ), diff --git a/assets/common/abilities/custom/quadlowbasic/triplestrike.ron b/assets/common/abilities/custom/quadlowbasic/triplestrike.ron index 308860f0ee..8ec5e213aa 100644 --- a/assets/common/abilities/custom/quadlowbasic/triplestrike.ron +++ b/assets/common/abilities/custom/quadlowbasic/triplestrike.ron @@ -2,49 +2,49 @@ ComboMelee( stage_data: [ ( stage: 1, - base_damage: 14.0, + base_damage: 28.0, damage_increase: 0, base_poise_damage: 15, poise_damage_increase: 0, knockback: 3.0, range: 2.2, angle: 30.0, - base_buildup_duration: 0.65, + base_buildup_duration: 1.3, base_swing_duration: 0.07, hit_timing: 0.5, - base_recover_duration: 0.3, + base_recover_duration: 0.6, forward_movement: 2.0, damage_kind: Crushing, ), ( stage: 2, - base_damage: 14.0, + base_damage: 28.0, damage_increase: 0, base_poise_damage: 18, poise_damage_increase: 0, knockback: 3.0, range: 2.2, angle: 30.0, - base_buildup_duration: 0.4, + base_buildup_duration: 0.8, base_swing_duration: 0.07, hit_timing: 0.5, - base_recover_duration: 0.3, + base_recover_duration: 0.6, forward_movement: 1.5, damage_kind: Crushing, ), ( stage: 3, - base_damage: 14.0, + base_damage: 28.0, damage_increase: 0, base_poise_damage: 20, poise_damage_increase: 0, knockback: 3.0, range: 2.2, angle: 30.0, - base_buildup_duration: 0.4, + base_buildup_duration: 0.8, base_swing_duration: 0.07, hit_timing: 0.5, - base_recover_duration: 0.3, + base_recover_duration: 0.6, forward_movement: 1.5, damage_kind: Crushing, ), diff --git a/assets/common/abilities/custom/quadlowbeam/lifestealbeam.ron b/assets/common/abilities/custom/quadlowbeam/lifestealbeam.ron index ca19726b1e..aa79163362 100644 --- a/assets/common/abilities/custom/quadlowbeam/lifestealbeam.ron +++ b/assets/common/abilities/custom/quadlowbeam/lifestealbeam.ron @@ -1,8 +1,8 @@ BasicBeam( - buildup_duration: 0.25, - recover_duration: 0.25, + buildup_duration: 0.5, + recover_duration: 0.5, beam_duration: 1.0, - damage: 3.0, + damage: 6.0, tick_rate: 2.0, range: 25.0, max_angle: 1.0, diff --git a/assets/common/abilities/custom/quadlowbreathe/dash.ron b/assets/common/abilities/custom/quadlowbreathe/dash.ron index af63c687b7..1da1da9b23 100644 --- a/assets/common/abilities/custom/quadlowbreathe/dash.ron +++ b/assets/common/abilities/custom/quadlowbreathe/dash.ron @@ -2,13 +2,13 @@ DashMelee( energy_cost: 0, melee_constructor: ( kind: Bash( - damage: 8.0, + damage: 16.0, poise: 25.0, knockback: 4.0, energy_regen: 0.0, ), scaled: Some(Bash( - damage: 15.0, + damage: 30.0, poise: 0.0, knockback: 17.0, energy_regen: 0.0, @@ -18,10 +18,10 @@ DashMelee( ), energy_drain: 0, forward_speed: 4.0, - buildup_duration: 0.5, - charge_duration: 1.0, + buildup_duration: 1.0, + charge_duration: 2.0, swing_duration: 0.1, - recover_duration: 1.0, + recover_duration: 2.0, ori_modifier: 0.3, charge_through: false, is_interruptible: false, diff --git a/assets/common/abilities/custom/quadlowbreathe/flamethrower.ron b/assets/common/abilities/custom/quadlowbreathe/flamethrower.ron index 3b89fcec4a..c27b2c6d41 100644 --- a/assets/common/abilities/custom/quadlowbreathe/flamethrower.ron +++ b/assets/common/abilities/custom/quadlowbreathe/flamethrower.ron @@ -1,8 +1,8 @@ BasicBeam( - buildup_duration: 0.4, - recover_duration: 0.25, + buildup_duration: 0.8, + recover_duration: 0.5, beam_duration: 0.5, - damage: 7.0, + damage: 14.0, tick_rate: 3.0, range: 15.0, max_angle: 22.5, diff --git a/assets/common/abilities/custom/quadlowbreathe/triplestrike.ron b/assets/common/abilities/custom/quadlowbreathe/triplestrike.ron index f17dcdedbb..09afac5aa1 100644 --- a/assets/common/abilities/custom/quadlowbreathe/triplestrike.ron +++ b/assets/common/abilities/custom/quadlowbreathe/triplestrike.ron @@ -2,49 +2,49 @@ ComboMelee( stage_data: [ ( stage: 1, - base_damage: 22.0, + base_damage: 44.0, damage_increase: 0, base_poise_damage: 20, poise_damage_increase: 0, knockback: 3.0, range: 2.5, angle: 30.0, - base_buildup_duration: 0.65, + base_buildup_duration: 1.3, base_swing_duration: 0.1, hit_timing: 0.5, - base_recover_duration: 0.3, + base_recover_duration: 0.6, forward_movement: 2.0, damage_kind: Crushing, ), ( stage: 2, - base_damage: 22.0, + base_damage: 44.0, damage_increase: 0, base_poise_damage: 20, poise_damage_increase: 0, knockback: 3.0, range: 2.5, angle: 30.0, - base_buildup_duration: 0.4, + base_buildup_duration: 0.8, base_swing_duration: 0.1, hit_timing: 0.5, - base_recover_duration: 0.3, + base_recover_duration: 0.6, forward_movement: 1.5, damage_kind: Crushing, ), ( stage: 3, - base_damage: 22.0, + base_damage: 44.0, damage_increase: 0, base_poise_damage: 20, poise_damage_increase: 0, knockback: 3.0, range: 2.5, angle: 30.0, - base_buildup_duration: 0.4, + base_buildup_duration: 0.8, base_swing_duration: 0.1, hit_timing: 0.5, - base_recover_duration: 0.3, + base_recover_duration: 0.6, forward_movement: 1.5, damage_kind: Crushing, ), diff --git a/assets/common/abilities/custom/quadlowquick/dash.ron b/assets/common/abilities/custom/quadlowquick/dash.ron index 4a8a65b283..3bd8252e9c 100644 --- a/assets/common/abilities/custom/quadlowquick/dash.ron +++ b/assets/common/abilities/custom/quadlowquick/dash.ron @@ -2,13 +2,13 @@ DashMelee( energy_cost: 0, melee_constructor: ( kind: Bash( - damage: 4.0, + damage: 8.0, poise: 30.0, knockback: 2.0, energy_regen: 0.0, ), scaled: Some(Bash( - damage: 8.0, + damage: 16.0, poise: 0.0, knockback: 7.0, energy_regen: 0.0, @@ -18,10 +18,10 @@ DashMelee( ), energy_drain: 0, forward_speed: 2.0, - buildup_duration: 0.5, - charge_duration: 0.8, + buildup_duration: 1.0, + charge_duration: 1.6, swing_duration: 0.1, - recover_duration: 1.0, + recover_duration: 2.0, ori_modifier: 0.3, charge_through: false, is_interruptible: false, diff --git a/assets/common/abilities/custom/quadlowquick/quadstrike.ron b/assets/common/abilities/custom/quadlowquick/quadstrike.ron index b8575523ff..86105bad1f 100644 --- a/assets/common/abilities/custom/quadlowquick/quadstrike.ron +++ b/assets/common/abilities/custom/quadlowquick/quadstrike.ron @@ -2,65 +2,65 @@ ComboMelee( stage_data: [ ( stage: 1, - base_damage: 6.0, + base_damage: 12.0, damage_increase: 0, base_poise_damage: 15, poise_damage_increase: 0, knockback: 1.0, range: 2.5, angle: 30.0, - base_buildup_duration: 0.6, + base_buildup_duration: 1.2, base_swing_duration: 0.1, hit_timing: 0.5, - base_recover_duration: 0.1, + base_recover_duration: 0.2, forward_movement: 1.5, damage_kind: Crushing, ), ( stage: 2, - base_damage: 6.0, + base_damage: 12.0, damage_increase: 0, base_poise_damage: 15, poise_damage_increase: 0, knockback: 1.0, range: 2.5, angle: 30.0, - base_buildup_duration: 0.15, + base_buildup_duration: 0.3, base_swing_duration: 0.07, hit_timing: 0.5, - base_recover_duration: 0.1, + base_recover_duration: 0.2, forward_movement: 0.8, damage_kind: Crushing, ), ( stage: 3, - base_damage: 6.0, + base_damage: 12.0, damage_increase: 0, base_poise_damage: 15, poise_damage_increase: 0, knockback: 1.0, range: 2.5, angle: 30.0, - base_buildup_duration: 0.2, + base_buildup_duration: 0.4, base_swing_duration: 0.07, hit_timing: 0.5, - base_recover_duration: 0.1, + base_recover_duration: 0.2, forward_movement: 0.8, damage_kind: Crushing, ), ( stage: 4, - base_damage: 6.0, + base_damage: 12.0, damage_increase: 0, base_poise_damage: 15, poise_damage_increase: 0, knockback: 8.0, range: 2.5, angle: 30.0, - base_buildup_duration: 0.2, + base_buildup_duration: 0.4, base_swing_duration: 0.07, hit_timing: 0.5, - base_recover_duration: 0.1, + base_recover_duration: 0.2, forward_movement: 0.8, damage_kind: Crushing, ), diff --git a/assets/common/abilities/custom/quadlowranged/firebomb.ron b/assets/common/abilities/custom/quadlowranged/firebomb.ron index 7b4fe7b0f0..4c5bd4ae78 100644 --- a/assets/common/abilities/custom/quadlowranged/firebomb.ron +++ b/assets/common/abilities/custom/quadlowranged/firebomb.ron @@ -1,9 +1,9 @@ BasicRanged( energy_cost: 0, - buildup_duration: 0.8, - recover_duration: 0.35, + buildup_duration: 1.6, + recover_duration: 0.7, projectile: NecroticSphere( - damage: 13.0, + damage: 26.0, radius: 5.0, energy_regen: 0, min_falloff: 0.5, diff --git a/assets/common/abilities/custom/quadlowtail/charged.ron b/assets/common/abilities/custom/quadlowtail/charged.ron index ff3ae1f4a0..921492fd75 100644 --- a/assets/common/abilities/custom/quadlowtail/charged.ron +++ b/assets/common/abilities/custom/quadlowtail/charged.ron @@ -3,13 +3,13 @@ ChargedMelee( energy_drain: 0, melee_constructor: ( kind: Bash( - damage: 4.0, + damage: 8.0, poise: 30.0, knockback: 10.0, energy_regen: 0.0, ), scaled: Some(Bash( - damage: 20.0, + damage: 40.0, poise: 80.0, knockback: 20.0, energy_regen: 0.0, @@ -17,7 +17,7 @@ ChargedMelee( range: 6.0, angle: 90.0, ), - charge_duration: 0.8, + charge_duration: 3.2, swing_duration: 0.7, hit_timing: 0.9, recover_duration: 0.7, diff --git a/assets/common/abilities/custom/quadlowtail/triplestrike.ron b/assets/common/abilities/custom/quadlowtail/triplestrike.ron index 36c18555bc..e29963745f 100644 --- a/assets/common/abilities/custom/quadlowtail/triplestrike.ron +++ b/assets/common/abilities/custom/quadlowtail/triplestrike.ron @@ -2,39 +2,39 @@ ComboMelee( stage_data: [ ( stage: 1, - base_damage: 8.0, + base_damage: 16.0, damage_increase: 0, base_poise_damage: 0, poise_damage_increase: 22, knockback: 10.0, range: 2.2, angle: 30.0, - base_buildup_duration: 0.65, + base_buildup_duration: 1.3, base_swing_duration: 0.1, hit_timing: 0.5, - base_recover_duration: 0.2, + base_recover_duration: 0.4, forward_movement: 2.0, damage_kind: Crushing, ), ( stage: 2, - base_damage: 8.0, + base_damage: 16.0, damage_increase: 0, base_poise_damage: 22, poise_damage_increase: 0, knockback: 10.0, range: 2.2, angle: 30.0, - base_buildup_duration: 0.2, + base_buildup_duration: 0.4, base_swing_duration: 0.1, hit_timing: 0.5, - base_recover_duration: 0.2, + base_recover_duration: 0.4, forward_movement: 1.0, damage_kind: Crushing, ), ( stage: 3, - base_damage: 8.0, + base_damage: 16.0, damage_increase: 0, base_poise_damage: 22, poise_damage_increase: 0, @@ -44,7 +44,7 @@ ComboMelee( base_buildup_duration: 0.2, base_swing_duration: 0.1, hit_timing: 0.5, - base_recover_duration: 0.2, + base_recover_duration: 0.4, forward_movement: 1.0, damage_kind: Crushing, ), diff --git a/assets/common/abilities/custom/quadmedbasic/singlestrike.ron b/assets/common/abilities/custom/quadmedbasic/singlestrike.ron index 2b654ced93..83187d3a6f 100644 --- a/assets/common/abilities/custom/quadmedbasic/singlestrike.ron +++ b/assets/common/abilities/custom/quadmedbasic/singlestrike.ron @@ -2,17 +2,17 @@ ComboMelee( stage_data: [ ( stage: 1, - base_damage: 10.0, + base_damage: 20.0, damage_increase: 0, base_poise_damage: 28, poise_damage_increase: 0, knockback: 3.0, range: 2.7, angle: 60.0, - base_buildup_duration: 0.4, + base_buildup_duration: 0.8, base_swing_duration: 0.1, hit_timing: 0.5, - base_recover_duration: 0.4, + base_recover_duration: 0.8, forward_movement: 1.0, damage_kind: Crushing, ), diff --git a/assets/common/abilities/custom/quadmedbasic/triplestrike.ron b/assets/common/abilities/custom/quadmedbasic/triplestrike.ron index c0ce86171f..b44794f5e0 100644 --- a/assets/common/abilities/custom/quadmedbasic/triplestrike.ron +++ b/assets/common/abilities/custom/quadmedbasic/triplestrike.ron @@ -2,49 +2,49 @@ ComboMelee( stage_data: [ ( stage: 1, - base_damage: 5.0, + base_damage: 10.0, damage_increase: 0, base_poise_damage: 15, poise_damage_increase: 0, knockback: 5.0, range: 2.5, angle: 30.0, - base_buildup_duration: 0.45, + base_buildup_duration: 0.9, base_swing_duration: 0.07, hit_timing: 0.5, - base_recover_duration: 0.2, + base_recover_duration: 0.4, forward_movement: 1.0, damage_kind: Crushing, ), ( stage: 2, - base_damage: 5.0, + base_damage: 10.0, damage_increase: 0, base_poise_damage: 18, poise_damage_increase: 0, knockback: 5.0, range: 2.5, angle: 30.0, - base_buildup_duration: 0.4, + base_buildup_duration: 0.8, base_swing_duration: 0.07, hit_timing: 0.5, - base_recover_duration: 0.2, + base_recover_duration: 0.4, forward_movement: 0.0, damage_kind: Crushing, ), ( stage: 3, - base_damage: 5.0, + base_damage: 10.0, damage_increase: 0, base_poise_damage: 20, poise_damage_increase: 0, knockback: 5.0, range: 2.5, angle: 30.0, - base_buildup_duration: 0.4, + base_buildup_duration: 0.8, base_swing_duration: 0.07, hit_timing: 0.5, - base_recover_duration: 0.2, + base_recover_duration: 0.4, forward_movement: 1.0, damage_kind: Crushing, ), diff --git a/assets/common/abilities/custom/quadmedcharge/dash.ron b/assets/common/abilities/custom/quadmedcharge/dash.ron index f8cdd68571..cabbaabe49 100644 --- a/assets/common/abilities/custom/quadmedcharge/dash.ron +++ b/assets/common/abilities/custom/quadmedcharge/dash.ron @@ -2,15 +2,15 @@ DashMelee( energy_cost: 0, melee_constructor: ( kind: Bash( - damage: 7.0, + damage: 14.0, poise: 28.0, knockback: 8.0, energy_regen: 0.0, ), scaled: Some(Bash( - damage: 28.0, - poise: 40.0, - knockback: 17.0, + damage: 65.0, + poise: 35.0, + knockback: 14.0, energy_regen: 0.0, )), range: 2.5, @@ -18,10 +18,10 @@ DashMelee( ), energy_drain: 0, forward_speed: 2.0, - buildup_duration: 0.5, - charge_duration: 1.2, + buildup_duration: 1.0, + charge_duration: 2.4, swing_duration: 0.1, - recover_duration: 1.1, + recover_duration: 2.2, ori_modifier: 0.3, charge_through: false, is_interruptible: false, diff --git a/assets/common/abilities/custom/quadmedcharge/doublestrike.ron b/assets/common/abilities/custom/quadmedcharge/doublestrike.ron index 73b31feec1..4dd983ac9f 100644 --- a/assets/common/abilities/custom/quadmedcharge/doublestrike.ron +++ b/assets/common/abilities/custom/quadmedcharge/doublestrike.ron @@ -2,33 +2,33 @@ ComboMelee( stage_data: [ ( stage: 1, - base_damage: 25.0, + base_damage: 50.0, damage_increase: 0, base_poise_damage: 22, poise_damage_increase: 0, knockback: 4.0, range: 2.5, angle: 30.0, - base_buildup_duration: 0.65, + base_buildup_duration: 1.3, base_swing_duration: 0.1, hit_timing: 0.5, - base_recover_duration: 0.3, + base_recover_duration: 0.6, forward_movement: 1.0, damage_kind: Crushing, ), ( stage: 2, - base_damage: 37.0, + base_damage: 74.0, damage_increase: 0, base_poise_damage: 0, poise_damage_increase: 22, knockback: 4.0, range: 2.5, angle: 30.0, - base_buildup_duration: 0.4, + base_buildup_duration: 0.8, base_swing_duration: 0.1, hit_timing: 0.5, - base_recover_duration: 0.3, + base_recover_duration: 0.6, forward_movement: 0.5, damage_kind: Crushing, ), diff --git a/assets/common/abilities/custom/quadmedhoof/basic.ron b/assets/common/abilities/custom/quadmedhoof/basic.ron index 86baf681b0..b96a88ad48 100644 --- a/assets/common/abilities/custom/quadmedhoof/basic.ron +++ b/assets/common/abilities/custom/quadmedhoof/basic.ron @@ -1,11 +1,11 @@ BasicMelee( energy_cost: 0, - buildup_duration: 0.65, + buildup_duration: 1.15, swing_duration: 0.3, - recover_duration: 0.35, + recover_duration: 0.85, melee_constructor: ( kind: Bash( - damage: 10.0, + damage:20.0, poise: 28.0, knockback: 25.0, energy_regen: 0.0, diff --git a/assets/common/abilities/custom/quadmedjump/doublestrike.ron b/assets/common/abilities/custom/quadmedjump/doublestrike.ron index 37eb39aaa5..7be5133c5b 100644 --- a/assets/common/abilities/custom/quadmedjump/doublestrike.ron +++ b/assets/common/abilities/custom/quadmedjump/doublestrike.ron @@ -2,33 +2,33 @@ ComboMelee( stage_data: [ ( stage: 1, - base_damage: 8.0, + base_damage: 16.0, damage_increase: 0, base_poise_damage: 30, poise_damage_increase: 0, knockback: 4.0, range: 2.2, angle: 30.0, - base_buildup_duration: 0.65, + base_buildup_duration: 1.3, base_swing_duration: 0.1, hit_timing: 0.5, - base_recover_duration: 0.3, + base_recover_duration: 0.6, forward_movement: 1.0, damage_kind: Crushing, ), ( stage: 2, - base_damage: 8.0, + base_damage: 16.0, damage_increase: 0, base_poise_damage: 30, poise_damage_increase: 0, knockback: 4.0, range: 2.2, angle: 30.0, - base_buildup_duration: 0.4, + base_buildup_duration: 0.8, base_swing_duration: 0.1, hit_timing: 0.5, - base_recover_duration: 0.3, + base_recover_duration: 0.6, forward_movement: 1.5, damage_kind: Crushing, ), diff --git a/assets/common/abilities/custom/quadmedjump/leap.ron b/assets/common/abilities/custom/quadmedjump/leap.ron index db4d7b1bc2..fdae6ece52 100644 --- a/assets/common/abilities/custom/quadmedjump/leap.ron +++ b/assets/common/abilities/custom/quadmedjump/leap.ron @@ -1,19 +1,19 @@ LeapMelee( energy_cost: 0, - buildup_duration: 0.5, - movement_duration: 0.4, + buildup_duration: 1.5, + movement_duration: 0.8, swing_duration: 0.075, - recover_duration: 0.2, + recover_duration: 0.6, melee_constructor: ( kind: Bash( - damage: 12.0, + damage: 36.0, poise: 60.0, knockback: 4.0, energy_regen: 0.0, ), - range: 4.5, + range: 6.75, angle: 180.0, ), - forward_leap_strength: 40.0, + forward_leap_strength: 45.0, vertical_leap_strength: 10.0, ) diff --git a/assets/common/abilities/custom/quadmedjump/quickleap.ron b/assets/common/abilities/custom/quadmedjump/quickleap.ron index 771e8d55a7..2c6757aaec 100644 --- a/assets/common/abilities/custom/quadmedjump/quickleap.ron +++ b/assets/common/abilities/custom/quadmedjump/quickleap.ron @@ -1,12 +1,12 @@ LeapMelee( energy_cost: 0, - buildup_duration: 0.2, - movement_duration: 0.3, + buildup_duration: 0.8, + movement_duration: 0.6, swing_duration: 0.075, - recover_duration: 0.125, + recover_duration: 0.25, melee_constructor: ( kind: Bash( - damage: 8.0, + damage: 16.0, poise: 30.0, knockback: 2.0, energy_regen: 0.0, diff --git a/assets/common/abilities/custom/quadmedquick/dash.ron b/assets/common/abilities/custom/quadmedquick/dash.ron index a39225f2f4..9033f9b256 100644 --- a/assets/common/abilities/custom/quadmedquick/dash.ron +++ b/assets/common/abilities/custom/quadmedquick/dash.ron @@ -2,13 +2,13 @@ DashMelee( energy_cost: 0, melee_constructor: ( kind: Bash( - damage: 7.5, + damage: 15.0, poise: 28.0, knockback: 3.0, energy_regen: 0.0, ), scaled: Some(Bash( - damage: 2.0, + damage: 4.0, poise: 28.0, knockback: 7.0, energy_regen: 0.0, @@ -17,11 +17,11 @@ DashMelee( angle: 45.0, ), energy_drain: 0, - forward_speed: 2.5, - buildup_duration: 1.2, - charge_duration: 1.0, + forward_speed: 1.8, + buildup_duration: 1.5, + charge_duration: 1.2, swing_duration: 0.1, - recover_duration: 1.0, + recover_duration: 2.0, ori_modifier: 0.3, charge_through: false, is_interruptible: false, diff --git a/assets/common/abilities/custom/quadmedquick/triplestrike.ron b/assets/common/abilities/custom/quadmedquick/triplestrike.ron index 7c2f8980e6..c95d362a9b 100644 --- a/assets/common/abilities/custom/quadmedquick/triplestrike.ron +++ b/assets/common/abilities/custom/quadmedquick/triplestrike.ron @@ -2,49 +2,49 @@ ComboMelee( stage_data: [ ( stage: 1, - base_damage: 10.0, + base_damage: 20.0, damage_increase: 0, base_poise_damage: 15, poise_damage_increase: 0, knockback: 5.0, range: 2.2, angle: 40.0, - base_buildup_duration: 0.6, + base_buildup_duration: 1.2, base_swing_duration: 0.15, hit_timing: 0.5, - base_recover_duration: 0.4, + base_recover_duration: 0.8, forward_movement: 0.3, damage_kind: Crushing, ), ( stage: 2, - base_damage: 10.0, + base_damage: 20.0, damage_increase: 0, base_poise_damage: 17, poise_damage_increase: 0, knockback: 5.0, range: 2.2, angle: 40.0, - base_buildup_duration: 0.4, + base_buildup_duration: 0.8, base_swing_duration: 0.15, hit_timing: 0.5, - base_recover_duration: 0.3, + base_recover_duration: 0.6, forward_movement: 0.5, damage_kind: Crushing, ), ( stage: 3, - base_damage: 10.0, + base_damage: 20.0, damage_increase: 0, base_poise_damage: 20, poise_damage_increase: 0, knockback: 5.0, range: 2.2, angle: 40.0, - base_buildup_duration: 0.4, + base_buildup_duration: 0.8, base_swing_duration: 0.15, hit_timing: 0.5, - base_recover_duration: 0.3, + base_recover_duration: 0.6, forward_movement: 0.5, damage_kind: Crushing, ), diff --git a/assets/common/abilities/custom/quadsmallbasic/singlestrike.ron b/assets/common/abilities/custom/quadsmallbasic/singlestrike.ron index 73ad450775..13f769b28b 100644 --- a/assets/common/abilities/custom/quadsmallbasic/singlestrike.ron +++ b/assets/common/abilities/custom/quadsmallbasic/singlestrike.ron @@ -2,17 +2,17 @@ ComboMelee( stage_data: [ ( stage: 1, - base_damage: 3.0, + base_damage: 6.0, damage_increase: 0, base_poise_damage: 10, poise_damage_increase: 0, knockback: 1.0, range: 1.5, angle: 50.0, - base_buildup_duration: 0.3, + base_buildup_duration: 0.6, base_swing_duration: 0.15, hit_timing: 0.5, - base_recover_duration: 0.3, + base_recover_duration: 0.6, forward_movement: 1.0, damage_kind: Crushing, ), diff --git a/assets/common/abilities/custom/stonegolemfist/shockwave.ron b/assets/common/abilities/custom/stonegolemfist/shockwave.ron index 0f9ac664d1..03b105a6c5 100644 --- a/assets/common/abilities/custom/stonegolemfist/shockwave.ron +++ b/assets/common/abilities/custom/stonegolemfist/shockwave.ron @@ -1,9 +1,9 @@ Shockwave( energy_cost: 0, - buildup_duration: 0.6, + buildup_duration: 1.2, swing_duration: 0.12, - recover_duration: 1.2, - damage: 50.0, + recover_duration: 2.4, + damage: 100.0, poise_damage: 50, knockback: (strength: 40.0, direction: TowardsUp), shockwave_angle: 100.0, diff --git a/assets/common/abilities/custom/stonegolemfist/singlestrike.ron b/assets/common/abilities/custom/stonegolemfist/singlestrike.ron index eec00b7c17..3cab9f4341 100644 --- a/assets/common/abilities/custom/stonegolemfist/singlestrike.ron +++ b/assets/common/abilities/custom/stonegolemfist/singlestrike.ron @@ -2,17 +2,17 @@ ComboMelee( stage_data: [ ( stage: 1, - base_damage: 30.0, + base_damage: 60.0, damage_increase: 0, base_poise_damage: 40, poise_damage_increase: 0, knockback: 3.0, range: 3.5, angle: 60.0, - base_buildup_duration: 0.9, + base_buildup_duration: 1.8, base_swing_duration: 0.1, hit_timing: 0.5, - base_recover_duration: 0.9, + base_recover_duration: 1.8, forward_movement: 3.0, damage_kind: Crushing, ), diff --git a/assets/common/abilities/custom/stonegolemfist/spin.ron b/assets/common/abilities/custom/stonegolemfist/spin.ron index dece734a86..a06ddca64c 100644 --- a/assets/common/abilities/custom/stonegolemfist/spin.ron +++ b/assets/common/abilities/custom/stonegolemfist/spin.ron @@ -1,10 +1,10 @@ SpinMelee( - buildup_duration: 0.1, + buildup_duration: 0.2, swing_duration: 0.3, recover_duration: 0.1, melee_constructor: ( kind: Bash( - damage: 50.0, + damage: 100.0, poise: 30.0, knockback: 0.0, energy_regen: 0.0, diff --git a/assets/common/abilities/custom/theropodbasic/dash.ron b/assets/common/abilities/custom/theropodbasic/dash.ron index e62f53d02e..cfb2a8b436 100644 --- a/assets/common/abilities/custom/theropodbasic/dash.ron +++ b/assets/common/abilities/custom/theropodbasic/dash.ron @@ -2,13 +2,13 @@ DashMelee( energy_cost: 0, melee_constructor: ( kind: Bash( - damage: 12.0, + damage: 20.0, poise: 0.0, knockback: 8.0, energy_regen: 0.0, ), scaled: Some(Bash( - damage: 16.0, + damage: 25.0, poise: 0.0, knockback: 17.0, energy_regen: 0.0, @@ -18,10 +18,10 @@ DashMelee( ), energy_drain: 0, forward_speed: 2.0, - buildup_duration: 0.5, - charge_duration: 1.2, + buildup_duration: 1.0, + charge_duration: 2.4, swing_duration: 0.1, - recover_duration: 1.1, + recover_duration: 1.8, ori_modifier: 0.3, charge_through: false, is_interruptible: false, diff --git a/assets/common/abilities/custom/theropodbasic/singlestrike.ron b/assets/common/abilities/custom/theropodbasic/singlestrike.ron index 1226876cdd..b7eb76c785 100644 --- a/assets/common/abilities/custom/theropodbasic/singlestrike.ron +++ b/assets/common/abilities/custom/theropodbasic/singlestrike.ron @@ -2,17 +2,17 @@ ComboMelee( stage_data: [ ( stage: 1, - base_damage: 27.0, + base_damage: 54.0, damage_increase: 0, base_poise_damage: 40, poise_damage_increase: 0, knockback: 4.0, range: 7.5, angle: 60.0, - base_buildup_duration: 0.4, + base_buildup_duration: 0.8, base_swing_duration: 0.15, hit_timing: 0.5, - base_recover_duration: 0.4, + base_recover_duration: 0.8, forward_movement: 3.0, damage_kind: Crushing, ), diff --git a/assets/common/abilities/custom/theropodbasic/triplestrike.ron b/assets/common/abilities/custom/theropodbasic/triplestrike.ron index 7516469eb9..00b8f619c0 100644 --- a/assets/common/abilities/custom/theropodbasic/triplestrike.ron +++ b/assets/common/abilities/custom/theropodbasic/triplestrike.ron @@ -2,49 +2,49 @@ ComboMelee( stage_data: [ ( stage: 1, - base_damage: 30.0, + base_damage: 40.0, damage_increase: 0, - base_poise_damage: 35, + base_poise_damage: 32.5, poise_damage_increase: 0, knockback: 3.0, range: 7.5, angle: 30.0, - base_buildup_duration: 0.7, + base_buildup_duration: 1.3, + base_swing_duration: 0.15, + hit_timing: 0.5, + base_recover_duration: 0.5, + forward_movement: 1.0, + damage_kind: Crushing, + ), + ( + stage: 2, + base_damage: 50.0, + damage_increase: 0, + base_poise_damage: 32.5, + poise_damage_increase: 0, + knockback: 3.0, + range: 5.5, + angle: 30.0, + base_buildup_duration: 0.2, base_swing_duration: 0.15, hit_timing: 0.5, base_recover_duration: 0.3, forward_movement: 1.0, damage_kind: Crushing, ), - ( - stage: 2, - base_damage: 34.0, - damage_increase: 0, - base_poise_damage: 35, - poise_damage_increase: 0, - knockback: 3.0, - range: 5.5, - angle: 30.0, - base_buildup_duration: 0.4, - base_swing_duration: 0.15, - hit_timing: 0.5, - base_recover_duration: 0.15, - forward_movement: 1.0, - damage_kind: Crushing, - ), ( stage: 3, - base_damage: 40.0, + base_damage: 60.0, damage_increase: 0, - base_poise_damage: 35, + base_poise_damage: 32.5, poise_damage_increase: 0, knockback: 25.0, range: 5.5, angle: 30.0, - base_buildup_duration: 0.3, + base_buildup_duration: 0.4, base_swing_duration: 0.125, hit_timing: 0.5, - base_recover_duration: 0.9, + base_recover_duration: 1.6, forward_movement: 1.0, damage_kind: Crushing, ), diff --git a/assets/common/abilities/custom/theropodbird/singlestrike.ron b/assets/common/abilities/custom/theropodbird/singlestrike.ron index d7932993cc..79386cf00a 100644 --- a/assets/common/abilities/custom/theropodbird/singlestrike.ron +++ b/assets/common/abilities/custom/theropodbird/singlestrike.ron @@ -2,17 +2,17 @@ ComboMelee( stage_data: [ ( stage: 1, - base_damage: 11.0, + base_damage: 22.0, damage_increase: 0, base_poise_damage: 28, poise_damage_increase: 0, knockback: 2.0, range: 3.0, angle: 15.0, - base_buildup_duration: 0.4, + base_buildup_duration: 0.8, base_swing_duration: 0.15, hit_timing: 0.5, - base_recover_duration: 0.4, + base_recover_duration: 0.8, forward_movement: 3.0, damage_kind: Crushing, ), diff --git a/assets/common/abilities/custom/theropodbird/triplestrike.ron b/assets/common/abilities/custom/theropodbird/triplestrike.ron index 51d8a24280..8c91bbb8ee 100644 --- a/assets/common/abilities/custom/theropodbird/triplestrike.ron +++ b/assets/common/abilities/custom/theropodbird/triplestrike.ron @@ -2,7 +2,23 @@ ComboMelee( stage_data: [ ( stage: 1, - base_damage: 11.0, + base_damage: 16.5, + damage_increase: 0, + base_poise_damage: 20, + poise_damage_increase: 0, + knockback: 3.0, + range: 3.0, + angle: 15.0, + base_buildup_duration: 0.95, + base_swing_duration: 0.15, + hit_timing: 0.5, + base_recover_duration: 0.50, + forward_movement: 1.0, + damage_kind: Crushing, + ), + ( + stage: 2, + base_damage: 30.0, damage_increase: 0, base_poise_damage: 20, poise_damage_increase: 0, @@ -12,39 +28,23 @@ ComboMelee( base_buildup_duration: 0.65, base_swing_duration: 0.15, hit_timing: 0.5, - base_recover_duration: 0.3, - forward_movement: 1.0, - damage_kind: Crushing, - ), - ( - stage: 2, - base_damage: 15.0, - damage_increase: 0, - base_poise_damage: 20, - poise_damage_increase: 0, - knockback: 3.0, - range: 3.0, - angle: 15.0, - base_buildup_duration: 0.4, - base_swing_duration: 0.15, - hit_timing: 0.5, - base_recover_duration: 0.15, + base_recover_duration: 0.50, forward_movement: 1.0, damage_kind: Crushing, ), ( stage: 3, - base_damage: 18.0, + base_damage: 36.0, damage_increase: 0, base_poise_damage: 20, poise_damage_increase: 0, knockback: 3.0, range: 3.0, angle: 15.0, - base_buildup_duration: 0.35, + base_buildup_duration: 0.525, base_swing_duration: 0.125, hit_timing: 0.5, - base_recover_duration: 0.9, + base_recover_duration: 1.25, forward_movement: 1.0, damage_kind: Crushing, ), diff --git a/assets/common/abilities/custom/tidalwarrior/bubbles.ron b/assets/common/abilities/custom/tidalwarrior/bubbles.ron index d0466b356a..0892d87e0b 100644 --- a/assets/common/abilities/custom/tidalwarrior/bubbles.ron +++ b/assets/common/abilities/custom/tidalwarrior/bubbles.ron @@ -1,8 +1,8 @@ BasicBeam( - buildup_duration: 0.5, - recover_duration: 0.5, + buildup_duration: 0.75, + recover_duration: 1.0, beam_duration: 2.5, - damage: 5.0, + damage: 7.5, tick_rate: 2.0, range: 25.0, max_angle: 15.0, diff --git a/assets/common/abilities/custom/tidalwarrior/pincer.ron b/assets/common/abilities/custom/tidalwarrior/pincer.ron index 8b52b39ed2..2fc9d1d32f 100644 --- a/assets/common/abilities/custom/tidalwarrior/pincer.ron +++ b/assets/common/abilities/custom/tidalwarrior/pincer.ron @@ -1,11 +1,11 @@ BasicMelee( energy_cost: 0, - buildup_duration: 0.3, + buildup_duration: 0.45, swing_duration: 0.1, - recover_duration: 0.6, + recover_duration: 1.2, melee_constructor: ( kind: Bash( - damage: 5.0, + damage: 7.5, poise: 0.0, knockback: 50.0, energy_regen: 0.0, diff --git a/assets/common/abilities/custom/tidalwarrior/scuttle.ron b/assets/common/abilities/custom/tidalwarrior/scuttle.ron index 36d4651e66..662abe2d75 100644 --- a/assets/common/abilities/custom/tidalwarrior/scuttle.ron +++ b/assets/common/abilities/custom/tidalwarrior/scuttle.ron @@ -8,7 +8,7 @@ DashMelee( energy_regen: 0.0, ), scaled: Some(Bash( - damage: 25.0, + damage: 12.5, poise: 40.0, knockback: 30.0, energy_regen: 0.0, @@ -18,10 +18,10 @@ DashMelee( ), energy_drain: 0, forward_speed: 10.0, - buildup_duration: 0.4, - charge_duration: 2.0, + buildup_duration: 0.6, + charge_duration: 4.0, swing_duration: 0.1, - recover_duration: 0.5, + recover_duration: 1.0, ori_modifier: 0.3, charge_through: false, is_interruptible: false, diff --git a/assets/common/abilities/custom/tidalwarrior/totem.ron b/assets/common/abilities/custom/tidalwarrior/totem.ron index 0f6ffaac43..3e94c0a1e3 100644 --- a/assets/common/abilities/custom/tidalwarrior/totem.ron +++ b/assets/common/abilities/custom/tidalwarrior/totem.ron @@ -1,7 +1,7 @@ BasicSummon( - buildup_duration: 0.5, + buildup_duration: 0.75, cast_duration: 1.0, - recover_duration: 0.5, + recover_duration: 0.75, summon_amount: 1, summon_distance: (1, 1), summon_info: ( diff --git a/assets/common/abilities/custom/tidalwarrior/totem_wave.ron b/assets/common/abilities/custom/tidalwarrior/totem_wave.ron index 7271a351dd..e384f2f05c 100644 --- a/assets/common/abilities/custom/tidalwarrior/totem_wave.ron +++ b/assets/common/abilities/custom/tidalwarrior/totem_wave.ron @@ -1,9 +1,9 @@ Shockwave( energy_cost: 0, - buildup_duration: 0.4, + buildup_duration: 0.6, swing_duration: 0.1, - recover_duration: 3.5, - damage: 1.0, + recover_duration: 7.0, + damage: 1.5, poise_damage: 0, knockback: ( strength: 18.0, direction: Away), shockwave_angle: 360.0, diff --git a/assets/common/abilities/custom/tornado/spin.ron b/assets/common/abilities/custom/tornado/spin.ron index 4b040a1c92..fe87bdedf9 100644 --- a/assets/common/abilities/custom/tornado/spin.ron +++ b/assets/common/abilities/custom/tornado/spin.ron @@ -4,7 +4,7 @@ SpinMelee( recover_duration: 0.0, melee_constructor: ( kind: Slash( - damage: 40.0, + damage: 80.0, poise: 0.0, knockback: 50.0, energy_regen: 0.0, diff --git a/assets/common/abilities/custom/turret/arrows.ron b/assets/common/abilities/custom/turret/arrows.ron index 88867de18a..5d3bbb1494 100644 --- a/assets/common/abilities/custom/turret/arrows.ron +++ b/assets/common/abilities/custom/turret/arrows.ron @@ -1,9 +1,9 @@ BasicRanged( energy_cost: 0, - buildup_duration: 1.0, - recover_duration: 0.3, + buildup_duration: 1.5, + recover_duration: 0.45, projectile: Arrow( - damage: 20.0, + damage: 30.0, knockback: 5.0, energy_regen: 10.0, ), diff --git a/assets/common/abilities/custom/turret/flamethrower.ron b/assets/common/abilities/custom/turret/flamethrower.ron index 30fabdc45e..e42dfa2fd1 100644 --- a/assets/common/abilities/custom/turret/flamethrower.ron +++ b/assets/common/abilities/custom/turret/flamethrower.ron @@ -1,8 +1,8 @@ BasicBeam( - buildup_duration: 0.25, - recover_duration: 0.25, - beam_duration: 1.0, - damage: 3.5, + buildup_duration: 0.375, + recover_duration: 0.375, + beam_duration: 2.0, + damage: 5.25, tick_rate: 3.0, range: 20.0, max_angle: 15.0, diff --git a/assets/common/abilities/custom/wendigomagic/frostbomb.ron b/assets/common/abilities/custom/wendigomagic/frostbomb.ron index 37f8295f9f..42ac390148 100644 --- a/assets/common/abilities/custom/wendigomagic/frostbomb.ron +++ b/assets/common/abilities/custom/wendigomagic/frostbomb.ron @@ -1,9 +1,9 @@ BasicRanged( energy_cost: 0, buildup_duration: 0.5, - recover_duration: 0.35, + recover_duration: 1.4, projectile: Frostball( - damage: 12.0, + damage: 24.0, radius: 5.0, min_falloff: 0.5, ), diff --git a/assets/common/abilities/custom/wendigomagic/singlestrike.ron b/assets/common/abilities/custom/wendigomagic/singlestrike.ron index 94083f6be7..753baeef8c 100644 --- a/assets/common/abilities/custom/wendigomagic/singlestrike.ron +++ b/assets/common/abilities/custom/wendigomagic/singlestrike.ron @@ -2,17 +2,17 @@ ComboMelee( stage_data: [ ( stage: 1, - base_damage: 18.0, + base_damage: 36.0, damage_increase: 0, base_poise_damage: 40, poise_damage_increase: 0, knockback: 3.0, range: 2.5, angle: 30.0, - base_buildup_duration: 0.6, - base_swing_duration: 0.2, + base_buildup_duration: 1.2, + base_swing_duration: 0.4, hit_timing: 0.5, - base_recover_duration: 0.4, + base_recover_duration: 0.8, forward_movement: 5.0, damage_kind: Crushing, ), diff --git a/assets/common/abilities/custom/woodgolem/shockwave.ron b/assets/common/abilities/custom/woodgolem/shockwave.ron index 45e34c9b48..ae016860cb 100644 --- a/assets/common/abilities/custom/woodgolem/shockwave.ron +++ b/assets/common/abilities/custom/woodgolem/shockwave.ron @@ -1,9 +1,9 @@ Shockwave( energy_cost: 0, - buildup_duration: 1.5, + buildup_duration: 4.5, swing_duration: 0.12, - recover_duration: 1.2, - damage: 20.0, + recover_duration: 3.6, + damage: 60.0, poise_damage: 30, knockback: (strength: 30.0, direction: TowardsUp), shockwave_angle: 90.0, diff --git a/assets/common/abilities/custom/woodgolem/spin.ron b/assets/common/abilities/custom/woodgolem/spin.ron index 81e3a01214..0d13cecb2d 100644 --- a/assets/common/abilities/custom/woodgolem/spin.ron +++ b/assets/common/abilities/custom/woodgolem/spin.ron @@ -1,10 +1,10 @@ SpinMelee( - buildup_duration: 0.35, + buildup_duration: 1.05, swing_duration: 0.3, - recover_duration: 0.2, + recover_duration: 0.6, melee_constructor: ( kind: Bash( - damage: 15.0, + damage: 45.0, poise: 30.0, knockback: 20.0, energy_regen: 0.0, diff --git a/assets/common/abilities/custom/woodgolem/strike.ron b/assets/common/abilities/custom/woodgolem/strike.ron index 5dd0dd6715..4e9f5dedd0 100644 --- a/assets/common/abilities/custom/woodgolem/strike.ron +++ b/assets/common/abilities/custom/woodgolem/strike.ron @@ -1,11 +1,11 @@ BasicMelee( energy_cost: 0, - buildup_duration: 0.8, + buildup_duration: 2.4, swing_duration: 0.1, - recover_duration: 0.5, + recover_duration: 1.5, melee_constructor: ( kind: Bash( - damage: 10.0, + damage: 30.0, poise: 25.0, knockback: 15.0, energy_regen: 0.0, diff --git a/assets/common/abilities/custom/yeti/frostbreath.ron b/assets/common/abilities/custom/yeti/frostbreath.ron index a4e8052047..0574864e5f 100644 --- a/assets/common/abilities/custom/yeti/frostbreath.ron +++ b/assets/common/abilities/custom/yeti/frostbreath.ron @@ -1,8 +1,8 @@ BasicBeam( - buildup_duration: 0.8, - recover_duration: 0.25, - beam_duration: 0.25, - damage: 1.0, + buildup_duration: 1.2, + recover_duration: 0.5, + beam_duration: 0.5, + damage: 1.5, tick_rate: 5.0, range: 15.0, max_angle: 30.0, diff --git a/assets/common/abilities/custom/yeti/icespikes.ron b/assets/common/abilities/custom/yeti/icespikes.ron index f7ede09e73..51b0469973 100644 --- a/assets/common/abilities/custom/yeti/icespikes.ron +++ b/assets/common/abilities/custom/yeti/icespikes.ron @@ -1,9 +1,9 @@ Shockwave( energy_cost: 0, - buildup_duration: 0.6, + buildup_duration: 0.9, swing_duration: 0.15, - recover_duration: 1.0, - damage: 10.0, + recover_duration: 2.0, + damage: 15.0, poise_damage: 10, knockback: (strength: 18.0, direction: Up), shockwave_angle: 90.0, diff --git a/assets/common/abilities/custom/yeti/snowball.ron b/assets/common/abilities/custom/yeti/snowball.ron index e437a73f7a..f422698a0a 100644 --- a/assets/common/abilities/custom/yeti/snowball.ron +++ b/assets/common/abilities/custom/yeti/snowball.ron @@ -1,9 +1,9 @@ BasicRanged( energy_cost: 0, - buildup_duration: 0.5, - recover_duration: 0.9, + buildup_duration: 0.75, + recover_duration: 1.8, projectile: Snowball( - damage: 20.0, + damage: 30.0, radius: 5.0, min_falloff: 0.7, ), diff --git a/assets/common/abilities/custom/yeti/strike.ron b/assets/common/abilities/custom/yeti/strike.ron index 20fcb6ce98..cf3aa1c6c2 100644 --- a/assets/common/abilities/custom/yeti/strike.ron +++ b/assets/common/abilities/custom/yeti/strike.ron @@ -1,8 +1,8 @@ BasicMelee( energy_cost: 0, - buildup_duration: 0.8, + buildup_duration: 1.2, swing_duration: 0.1, - recover_duration: 1.0, + recover_duration: 2.0, melee_constructor: ( kind: Bash( damage: 10.0, diff --git a/assets/common/abilities/gnarling/axe/chop.ron b/assets/common/abilities/gnarling/axe/chop.ron index 9b8c9e8c06..079f32e12e 100644 --- a/assets/common/abilities/gnarling/axe/chop.ron +++ b/assets/common/abilities/gnarling/axe/chop.ron @@ -1,11 +1,11 @@ BasicMelee( energy_cost: 0, - buildup_duration: 0.2, + buildup_duration: 0.3, swing_duration: 0.05, - recover_duration: 0.3, + recover_duration: 0.45, melee_constructor: ( kind: Slash( - damage: 6, + damage: 9, poise: 5, knockback: 0, energy_regen: 0, diff --git a/assets/common/abilities/gnarling/blowgun/dart.ron b/assets/common/abilities/gnarling/blowgun/dart.ron index daaf02bb08..bbc473fdf4 100644 --- a/assets/common/abilities/gnarling/blowgun/dart.ron +++ b/assets/common/abilities/gnarling/blowgun/dart.ron @@ -1,7 +1,7 @@ BasicRanged( energy_cost: 0, - buildup_duration: 0.5, - recover_duration: 0.3, + buildup_duration: 0.75, + recover_duration: 0.45, projectile: Arrow( damage: 4, knockback: 0, diff --git a/assets/common/abilities/gnarling/chieftain/firebarrage.ron b/assets/common/abilities/gnarling/chieftain/firebarrage.ron index 86419e2598..bd703b01e9 100644 --- a/assets/common/abilities/gnarling/chieftain/firebarrage.ron +++ b/assets/common/abilities/gnarling/chieftain/firebarrage.ron @@ -1,9 +1,9 @@ BasicRanged( energy_cost: 0, - buildup_duration: 0.55, - recover_duration: 0.4, + buildup_duration: 0.825, + recover_duration: 0.6, projectile: Fireball( - damage: 9.0, + damage: 13.5, radius: 2.0, energy_regen: 10.0, min_falloff: 0.5, diff --git a/assets/common/abilities/gnarling/chieftain/fireshockwave.ron b/assets/common/abilities/gnarling/chieftain/fireshockwave.ron index 2ef7625f3d..b1d28fb0dc 100644 --- a/assets/common/abilities/gnarling/chieftain/fireshockwave.ron +++ b/assets/common/abilities/gnarling/chieftain/fireshockwave.ron @@ -1,9 +1,9 @@ Shockwave( energy_cost: 0, - buildup_duration: 0.65, + buildup_duration: 0.975, swing_duration: 0.1, - recover_duration: 0.4, - damage: 20, + recover_duration: 0.6, + damage: 30, poise_damage: 0, knockback: ( strength: 25, direction: Away), shockwave_angle: 360, diff --git a/assets/common/abilities/gnarling/chieftain/flamestrike.ron b/assets/common/abilities/gnarling/chieftain/flamestrike.ron index 5138a43371..13d0f3b7e9 100644 --- a/assets/common/abilities/gnarling/chieftain/flamestrike.ron +++ b/assets/common/abilities/gnarling/chieftain/flamestrike.ron @@ -1,11 +1,11 @@ BasicMelee( energy_cost: 0, - buildup_duration: 0.4, + buildup_duration: 0.6, swing_duration: 0.1, - recover_duration: 0.3, + recover_duration: 0.45, melee_constructor: ( kind: Bash( - damage: 8, + damage: 12, poise: 10, knockback: 0, energy_regen: 0, diff --git a/assets/common/abilities/gnarling/chieftain/greentotem.ron b/assets/common/abilities/gnarling/chieftain/greentotem.ron index a9d412382e..5d3d3ec69c 100644 --- a/assets/common/abilities/gnarling/chieftain/greentotem.ron +++ b/assets/common/abilities/gnarling/chieftain/greentotem.ron @@ -1,7 +1,7 @@ BasicSummon( - buildup_duration: 0.25, + buildup_duration: 0.375, cast_duration: 0.5, - recover_duration: 0.25, + recover_duration: 0.375, summon_amount: 1, summon_distance: (1, 4), summon_info: ( diff --git a/assets/common/abilities/gnarling/chieftain/redtotem.ron b/assets/common/abilities/gnarling/chieftain/redtotem.ron index efa9423cf6..b1e0aa165b 100644 --- a/assets/common/abilities/gnarling/chieftain/redtotem.ron +++ b/assets/common/abilities/gnarling/chieftain/redtotem.ron @@ -1,7 +1,7 @@ BasicSummon( - buildup_duration: 0.25, + buildup_duration: 0.375, cast_duration: 0.5, - recover_duration: 0.25, + recover_duration: 0.375, summon_amount: 1, summon_distance: (1, 4), summon_info: ( diff --git a/assets/common/abilities/gnarling/chieftain/whitetotem.ron b/assets/common/abilities/gnarling/chieftain/whitetotem.ron index b01fd9c5fe..0a6921e2ca 100644 --- a/assets/common/abilities/gnarling/chieftain/whitetotem.ron +++ b/assets/common/abilities/gnarling/chieftain/whitetotem.ron @@ -1,7 +1,7 @@ BasicSummon( - buildup_duration: 0.25, + buildup_duration: 0.375, cast_duration: 0.5, - recover_duration: 0.25, + recover_duration: 0.375, summon_amount: 1, summon_distance: (1, 4), summon_info: ( diff --git a/assets/common/abilities/gnarling/dagger/stab.ron b/assets/common/abilities/gnarling/dagger/stab.ron index 59e77ff8a4..3435cfcf2c 100644 --- a/assets/common/abilities/gnarling/dagger/stab.ron +++ b/assets/common/abilities/gnarling/dagger/stab.ron @@ -1,11 +1,11 @@ BasicMelee( energy_cost: 0, - buildup_duration: 0.1, + buildup_duration: 0.15, swing_duration: 0.05, - recover_duration: 0.25, + recover_duration: 0.375, melee_constructor: ( kind: Stab( - damage: 4, + damage: 6, poise: 0, knockback: 0, energy_regen: 0, diff --git a/assets/common/abilities/gnarling/totem/green.ron b/assets/common/abilities/gnarling/totem/green.ron index f8b1f9d57f..b00647dc59 100644 --- a/assets/common/abilities/gnarling/totem/green.ron +++ b/assets/common/abilities/gnarling/totem/green.ron @@ -1,18 +1,18 @@ BasicAura( - buildup_duration: 0.25, + buildup_duration: 0.375, cast_duration: 0.5, - recover_duration: 0.25, + recover_duration: 0.375, targets: InGroup, auras: [ ( kind: Regeneration, - strength: 5, + strength: 7.5, duration: Some(5), category: Magical, ), ( kind: ProtectingWard, - strength: 0.50, + strength: 0.75, duration: Some(5), category: Magical, ), diff --git a/assets/common/abilities/gnarling/totem/red.ron b/assets/common/abilities/gnarling/totem/red.ron index d81c964356..834f3f2bea 100644 --- a/assets/common/abilities/gnarling/totem/red.ron +++ b/assets/common/abilities/gnarling/totem/red.ron @@ -1,12 +1,12 @@ BasicAura( - buildup_duration: 0.25, + buildup_duration: 0.375, cast_duration: 0.5, - recover_duration: 0.25, + recover_duration: 0.375, targets: OutOfGroup, auras: [ ( kind: Burning, - strength: 0.5, + strength: 0.75, duration: Some(5), category: Magical, ), diff --git a/assets/common/abilities/gnarling/totem/white.ron b/assets/common/abilities/gnarling/totem/white.ron index 45c986c11d..9c55f4c302 100644 --- a/assets/common/abilities/gnarling/totem/white.ron +++ b/assets/common/abilities/gnarling/totem/white.ron @@ -1,12 +1,12 @@ BasicAura( - buildup_duration: 0.25, + buildup_duration: 0.375, cast_duration: 0.5, - recover_duration: 0.25, + recover_duration: 0.375, targets: InGroup, auras: [ ( kind: Hastened, - strength: 0.5, + strength: 0.75, duration: Some(5), category: Magical, ), diff --git a/assets/common/component_recipe_book.ron b/assets/common/component_recipe_book.ron index 8ac0446a32..0ef473e489 100644 --- a/assets/common/component_recipe_book.ron +++ b/assets/common/component_recipe_book.ron @@ -126,7 +126,7 @@ item: "common.items.modular.weapon.primary.hammer.spikedmace", ), material: ("common.items.mineral.ingot.bloodsteel", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.sharp_fang", 20)), + modifier: Some(("common.items.crafting_ing.animal_misc.sharp_fang", 15)), additional_inputs: [ (Item("common.items.tool.craftsman_hammer"), 0), ], @@ -138,7 +138,7 @@ item: "common.items.modular.weapon.primary.hammer.spikedmace", ), material: ("common.items.mineral.ingot.orichalcum", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.sharp_fang", 50)), + modifier: Some(("common.items.crafting_ing.animal_misc.sharp_fang", 25)), additional_inputs: [ (Item("common.items.tool.craftsman_hammer"), 0), ], @@ -198,7 +198,7 @@ item: "common.items.modular.weapon.primary.hammer.warhammer", ), material: ("common.items.mineral.ingot.bloodsteel", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.claw", 20)), + modifier: Some(("common.items.crafting_ing.animal_misc.claw", 15)), additional_inputs: [ (Item("common.items.tool.craftsman_hammer"), 0), ], @@ -210,7 +210,7 @@ item: "common.items.modular.weapon.primary.hammer.warhammer", ), material: ("common.items.mineral.ingot.orichalcum", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.claw", 50)), + modifier: Some(("common.items.crafting_ing.animal_misc.claw", 25)), additional_inputs: [ (Item("common.items.tool.craftsman_hammer"), 0), ], @@ -270,7 +270,7 @@ item: "common.items.modular.weapon.primary.hammer.maul", ), material: ("common.items.mineral.ingot.bloodsteel", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.long_tusk", 20)), + modifier: Some(("common.items.crafting_ing.animal_misc.long_tusk", 15)), additional_inputs: [ (Item("common.items.tool.craftsman_hammer"), 0), ], @@ -282,7 +282,7 @@ item: "common.items.modular.weapon.primary.hammer.maul", ), material: ("common.items.mineral.ingot.orichalcum", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.long_tusk", 50)), + modifier: Some(("common.items.crafting_ing.animal_misc.long_tusk", 25)), additional_inputs: [ (Item("common.items.tool.craftsman_hammer"), 0), ], @@ -342,7 +342,7 @@ item: "common.items.modular.weapon.primary.hammer.greatmace", ), material: ("common.items.mineral.ingot.bloodsteel", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.strong_pincer", 20)), + modifier: Some(("common.items.crafting_ing.animal_misc.strong_pincer", 15)), additional_inputs: [ (Item("common.items.tool.craftsman_hammer"), 0), ], @@ -354,7 +354,7 @@ item: "common.items.modular.weapon.primary.hammer.greatmace", ), material: ("common.items.mineral.ingot.orichalcum", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.strong_pincer", 50)), + modifier: Some(("common.items.crafting_ing.animal_misc.strong_pincer", 25)), additional_inputs: [ (Item("common.items.tool.craftsman_hammer"), 0), ], @@ -414,7 +414,7 @@ item: "common.items.modular.weapon.primary.hammer.greathammer", ), material: ("common.items.mineral.ingot.bloodsteel", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.large_horn", 20)), + modifier: Some(("common.items.crafting_ing.animal_misc.large_horn", 15)), additional_inputs: [ (Item("common.items.tool.craftsman_hammer"), 0), ], @@ -426,7 +426,7 @@ item: "common.items.modular.weapon.primary.hammer.greathammer", ), material: ("common.items.mineral.ingot.orichalcum", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.large_horn", 50)), + modifier: Some(("common.items.crafting_ing.animal_misc.large_horn", 25)), additional_inputs: [ (Item("common.items.tool.craftsman_hammer"), 0), ], @@ -486,7 +486,7 @@ item: "common.items.modular.weapon.primary.hammer.ornate", ), material: ("common.items.mineral.ingot.bloodsteel", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.elegant_crest", 20)), + modifier: Some(("common.items.crafting_ing.animal_misc.elegant_crest", 15)), additional_inputs: [ (Item("common.items.tool.craftsman_hammer"), 0), ], @@ -498,7 +498,7 @@ item: "common.items.modular.weapon.primary.hammer.ornate", ), material: ("common.items.mineral.ingot.orichalcum", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.elegant_crest", 50)), + modifier: Some(("common.items.crafting_ing.animal_misc.elegant_crest", 25)), additional_inputs: [ (Item("common.items.tool.craftsman_hammer"), 0), ], @@ -631,7 +631,7 @@ item: "common.items.modular.weapon.primary.sword.sawblade", ), material: ("common.items.mineral.ingot.bloodsteel", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.sharp_fang", 20)), + modifier: Some(("common.items.crafting_ing.animal_misc.sharp_fang", 15)), additional_inputs: [ (Item("common.items.tool.craftsman_hammer"), 0), ], @@ -643,7 +643,7 @@ item: "common.items.modular.weapon.primary.sword.sawblade", ), material: ("common.items.mineral.ingot.orichalcum", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.sharp_fang", 50)), + modifier: Some(("common.items.crafting_ing.animal_misc.sharp_fang", 25)), additional_inputs: [ (Item("common.items.tool.craftsman_hammer"), 0), ], @@ -703,7 +703,7 @@ item: "common.items.modular.weapon.primary.sword.katana", ), material: ("common.items.mineral.ingot.bloodsteel", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.claw", 20)), + modifier: Some(("common.items.crafting_ing.animal_misc.claw", 15)), additional_inputs: [ (Item("common.items.tool.craftsman_hammer"), 0), ], @@ -715,7 +715,7 @@ item: "common.items.modular.weapon.primary.sword.katana", ), material: ("common.items.mineral.ingot.orichalcum", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.claw", 50)), + modifier: Some(("common.items.crafting_ing.animal_misc.claw", 25)), additional_inputs: [ (Item("common.items.tool.craftsman_hammer"), 0), ], @@ -775,7 +775,7 @@ item: "common.items.modular.weapon.primary.sword.zweihander", ), material: ("common.items.mineral.ingot.bloodsteel", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.long_tusk", 20)), + modifier: Some(("common.items.crafting_ing.animal_misc.long_tusk", 15)), additional_inputs: [ (Item("common.items.tool.craftsman_hammer"), 0), ], @@ -787,7 +787,7 @@ item: "common.items.modular.weapon.primary.sword.zweihander", ), material: ("common.items.mineral.ingot.orichalcum", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.long_tusk", 50)), + modifier: Some(("common.items.crafting_ing.animal_misc.long_tusk", 25)), additional_inputs: [ (Item("common.items.tool.craftsman_hammer"), 0), ], @@ -847,7 +847,7 @@ item: "common.items.modular.weapon.primary.sword.sabre", ), material: ("common.items.mineral.ingot.bloodsteel", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.strong_pincer", 20)), + modifier: Some(("common.items.crafting_ing.animal_misc.strong_pincer", 15)), additional_inputs: [ (Item("common.items.tool.craftsman_hammer"), 0), ], @@ -859,7 +859,7 @@ item: "common.items.modular.weapon.primary.sword.sabre", ), material: ("common.items.mineral.ingot.orichalcum", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.strong_pincer", 50)), + modifier: Some(("common.items.crafting_ing.animal_misc.strong_pincer", 25)), additional_inputs: [ (Item("common.items.tool.craftsman_hammer"), 0), ], @@ -919,7 +919,7 @@ item: "common.items.modular.weapon.primary.sword.greatsword", ), material: ("common.items.mineral.ingot.bloodsteel", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.large_horn", 20)), + modifier: Some(("common.items.crafting_ing.animal_misc.large_horn", 15)), additional_inputs: [ (Item("common.items.tool.craftsman_hammer"), 0), ], @@ -931,7 +931,7 @@ item: "common.items.modular.weapon.primary.sword.greatsword", ), material: ("common.items.mineral.ingot.orichalcum", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.large_horn", 50)), + modifier: Some(("common.items.crafting_ing.animal_misc.large_horn", 25)), additional_inputs: [ (Item("common.items.tool.craftsman_hammer"), 0), ], @@ -991,7 +991,7 @@ item: "common.items.modular.weapon.primary.sword.ornate", ), material: ("common.items.mineral.ingot.bloodsteel", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.elegant_crest", 20)), + modifier: Some(("common.items.crafting_ing.animal_misc.elegant_crest", 15)), additional_inputs: [ (Item("common.items.tool.craftsman_hammer"), 0), ], @@ -1003,7 +1003,7 @@ item: "common.items.modular.weapon.primary.sword.ornate", ), material: ("common.items.mineral.ingot.orichalcum", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.elegant_crest", 50)), + modifier: Some(("common.items.crafting_ing.animal_misc.elegant_crest", 25)), additional_inputs: [ (Item("common.items.tool.craftsman_hammer"), 0), ], @@ -1136,7 +1136,7 @@ item: "common.items.modular.weapon.primary.axe.jagged", ), material: ("common.items.mineral.ingot.bloodsteel", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.sharp_fang", 20)), + modifier: Some(("common.items.crafting_ing.animal_misc.sharp_fang", 15)), additional_inputs: [ (Item("common.items.tool.craftsman_hammer"), 0), ], @@ -1148,7 +1148,7 @@ item: "common.items.modular.weapon.primary.axe.jagged", ), material: ("common.items.mineral.ingot.orichalcum", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.sharp_fang", 50)), + modifier: Some(("common.items.crafting_ing.animal_misc.sharp_fang", 25)), additional_inputs: [ (Item("common.items.tool.craftsman_hammer"), 0), ], @@ -1208,7 +1208,7 @@ item: "common.items.modular.weapon.primary.axe.battleaxe", ), material: ("common.items.mineral.ingot.bloodsteel", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.claw", 20)), + modifier: Some(("common.items.crafting_ing.animal_misc.claw", 15)), additional_inputs: [ (Item("common.items.tool.craftsman_hammer"), 0), ], @@ -1220,7 +1220,7 @@ item: "common.items.modular.weapon.primary.axe.battleaxe", ), material: ("common.items.mineral.ingot.orichalcum", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.claw", 50)), + modifier: Some(("common.items.crafting_ing.animal_misc.claw", 25)), additional_inputs: [ (Item("common.items.tool.craftsman_hammer"), 0), ], @@ -1280,7 +1280,7 @@ item: "common.items.modular.weapon.primary.axe.poleaxe", ), material: ("common.items.mineral.ingot.bloodsteel", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.long_tusk", 20)), + modifier: Some(("common.items.crafting_ing.animal_misc.long_tusk", 15)), additional_inputs: [ (Item("common.items.tool.craftsman_hammer"), 0), ], @@ -1292,7 +1292,7 @@ item: "common.items.modular.weapon.primary.axe.poleaxe", ), material: ("common.items.mineral.ingot.orichalcum", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.long_tusk", 50)), + modifier: Some(("common.items.crafting_ing.animal_misc.long_tusk", 25)), additional_inputs: [ (Item("common.items.tool.craftsman_hammer"), 0), ], @@ -1352,7 +1352,7 @@ item: "common.items.modular.weapon.primary.axe.labrys", ), material: ("common.items.mineral.ingot.bloodsteel", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.strong_pincer", 20)), + modifier: Some(("common.items.crafting_ing.animal_misc.strong_pincer", 15)), additional_inputs: [ (Item("common.items.tool.craftsman_hammer"), 0), ], @@ -1364,7 +1364,7 @@ item: "common.items.modular.weapon.primary.axe.labrys", ), material: ("common.items.mineral.ingot.orichalcum", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.strong_pincer", 50)), + modifier: Some(("common.items.crafting_ing.animal_misc.strong_pincer", 25)), additional_inputs: [ (Item("common.items.tool.craftsman_hammer"), 0), ], @@ -1424,7 +1424,7 @@ item: "common.items.modular.weapon.primary.axe.greataxe", ), material: ("common.items.mineral.ingot.bloodsteel", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.large_horn", 20)), + modifier: Some(("common.items.crafting_ing.animal_misc.large_horn", 15)), additional_inputs: [ (Item("common.items.tool.craftsman_hammer"), 0), ], @@ -1436,7 +1436,7 @@ item: "common.items.modular.weapon.primary.axe.greataxe", ), material: ("common.items.mineral.ingot.orichalcum", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.large_horn", 50)), + modifier: Some(("common.items.crafting_ing.animal_misc.large_horn", 25)), additional_inputs: [ (Item("common.items.tool.craftsman_hammer"), 0), ], @@ -1496,7 +1496,7 @@ item: "common.items.modular.weapon.primary.axe.ornate", ), material: ("common.items.mineral.ingot.bloodsteel", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.elegant_crest", 20)), + modifier: Some(("common.items.crafting_ing.animal_misc.elegant_crest", 15)), additional_inputs: [ (Item("common.items.tool.craftsman_hammer"), 0), ], @@ -1508,7 +1508,7 @@ item: "common.items.modular.weapon.primary.axe.ornate", ), material: ("common.items.mineral.ingot.orichalcum", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.elegant_crest", 50)), + modifier: Some(("common.items.crafting_ing.animal_misc.elegant_crest", 25)), additional_inputs: [ (Item("common.items.tool.craftsman_hammer"), 0), ], @@ -1523,7 +1523,6 @@ material: ("common.items.log.wood", 5), modifier: None, additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1535,7 +1534,6 @@ material: ("common.items.log.bamboo", 5), modifier: None, additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1547,7 +1545,6 @@ material: ("common.items.log.hardwood", 5), modifier: None, additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1559,7 +1556,6 @@ material: ("common.items.log.ironwood", 5), modifier: None, additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1571,7 +1567,6 @@ material: ("common.items.log.frostwood", 5), modifier: None, additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1583,7 +1578,6 @@ material: ("common.items.log.eldwood", 5), modifier: None, additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1595,7 +1589,6 @@ material: ("common.items.log.wood", 5), modifier: Some(("common.items.crafting_ing.animal_misc.sharp_fang", 1)), additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1607,7 +1600,6 @@ material: ("common.items.log.bamboo", 5), modifier: Some(("common.items.crafting_ing.animal_misc.sharp_fang", 2)), additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1619,7 +1611,6 @@ material: ("common.items.log.hardwood", 5), modifier: Some(("common.items.crafting_ing.animal_misc.sharp_fang", 5)), additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1631,7 +1622,6 @@ material: ("common.items.log.ironwood", 5), modifier: Some(("common.items.crafting_ing.animal_misc.sharp_fang", 10)), additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1641,9 +1631,8 @@ item: "common.items.modular.weapon.primary.bow.composite", ), material: ("common.items.log.frostwood", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.sharp_fang", 20)), + modifier: Some(("common.items.crafting_ing.animal_misc.sharp_fang", 15)), additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1653,9 +1642,8 @@ item: "common.items.modular.weapon.primary.bow.composite", ), material: ("common.items.log.eldwood", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.sharp_fang", 50)), + modifier: Some(("common.items.crafting_ing.animal_misc.sharp_fang", 25)), additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1667,7 +1655,6 @@ material: ("common.items.log.wood", 5), modifier: Some(("common.items.crafting_ing.animal_misc.large_horn", 1)), additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1679,7 +1666,6 @@ material: ("common.items.log.bamboo", 5), modifier: Some(("common.items.crafting_ing.animal_misc.large_horn", 2)), additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1691,7 +1677,6 @@ material: ("common.items.log.hardwood", 5), modifier: Some(("common.items.crafting_ing.animal_misc.large_horn", 5)), additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1703,7 +1688,6 @@ material: ("common.items.log.ironwood", 5), modifier: Some(("common.items.crafting_ing.animal_misc.large_horn", 10)), additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1713,9 +1697,8 @@ item: "common.items.modular.weapon.primary.bow.greatbow", ), material: ("common.items.log.frostwood", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.large_horn", 20)), + modifier: Some(("common.items.crafting_ing.animal_misc.large_horn", 15)), additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1725,9 +1708,8 @@ item: "common.items.modular.weapon.primary.bow.greatbow", ), material: ("common.items.log.eldwood", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.large_horn", 50)), + modifier: Some(("common.items.crafting_ing.animal_misc.large_horn", 25)), additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1739,7 +1721,6 @@ material: ("common.items.log.wood", 5), modifier: Some(("common.items.crafting_ing.animal_misc.long_tusk", 1)), additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1751,7 +1732,6 @@ material: ("common.items.log.bamboo", 5), modifier: Some(("common.items.crafting_ing.animal_misc.long_tusk", 2)), additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1763,7 +1743,6 @@ material: ("common.items.log.hardwood", 5), modifier: Some(("common.items.crafting_ing.animal_misc.long_tusk", 5)), additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1775,7 +1754,6 @@ material: ("common.items.log.ironwood", 5), modifier: Some(("common.items.crafting_ing.animal_misc.long_tusk", 10)), additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1785,9 +1763,8 @@ item: "common.items.modular.weapon.primary.bow.longbow", ), material: ("common.items.log.frostwood", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.long_tusk", 20)), + modifier: Some(("common.items.crafting_ing.animal_misc.long_tusk", 15)), additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1797,9 +1774,8 @@ item: "common.items.modular.weapon.primary.bow.longbow", ), material: ("common.items.log.eldwood", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.long_tusk", 50)), + modifier: Some(("common.items.crafting_ing.animal_misc.long_tusk", 25)), additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1811,7 +1787,6 @@ material: ("common.items.log.wood", 5), modifier: Some(("common.items.crafting_ing.animal_misc.elegant_crest", 1)), additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1823,7 +1798,6 @@ material: ("common.items.log.bamboo", 5), modifier: Some(("common.items.crafting_ing.animal_misc.elegant_crest", 2)), additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1835,7 +1809,6 @@ material: ("common.items.log.hardwood", 5), modifier: Some(("common.items.crafting_ing.animal_misc.elegant_crest", 5)), additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1847,7 +1820,6 @@ material: ("common.items.log.ironwood", 5), modifier: Some(("common.items.crafting_ing.animal_misc.elegant_crest", 10)), additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1857,9 +1829,8 @@ item: "common.items.modular.weapon.primary.bow.ornate", ), material: ("common.items.log.frostwood", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.elegant_crest", 20)), + modifier: Some(("common.items.crafting_ing.animal_misc.elegant_crest", 15)), additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1869,9 +1840,8 @@ item: "common.items.modular.weapon.primary.bow.ornate", ), material: ("common.items.log.eldwood", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.elegant_crest", 50)), + modifier: Some(("common.items.crafting_ing.animal_misc.elegant_crest", 25)), additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1883,7 +1853,6 @@ material: ("common.items.log.wood", 5), modifier: Some(("common.items.crafting_ing.animal_misc.claw", 1)), additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1895,7 +1864,6 @@ material: ("common.items.log.bamboo", 5), modifier: Some(("common.items.crafting_ing.animal_misc.claw", 2)), additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1907,7 +1875,6 @@ material: ("common.items.log.hardwood", 5), modifier: Some(("common.items.crafting_ing.animal_misc.claw", 5)), additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1919,7 +1886,6 @@ material: ("common.items.log.ironwood", 5), modifier: Some(("common.items.crafting_ing.animal_misc.claw", 10)), additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1929,9 +1895,8 @@ item: "common.items.modular.weapon.primary.bow.shortbow", ), material: ("common.items.log.frostwood", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.claw", 20)), + modifier: Some(("common.items.crafting_ing.animal_misc.claw", 15)), additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1941,9 +1906,8 @@ item: "common.items.modular.weapon.primary.bow.shortbow", ), material: ("common.items.log.eldwood", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.claw", 50)), + modifier: Some(("common.items.crafting_ing.animal_misc.claw", 25)), additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1955,7 +1919,6 @@ material: ("common.items.log.wood", 5), modifier: Some(("common.items.crafting_ing.animal_misc.strong_pincer", 1)), additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1967,7 +1930,6 @@ material: ("common.items.log.bamboo", 5), modifier: Some(("common.items.crafting_ing.animal_misc.strong_pincer", 2)), additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1979,7 +1941,6 @@ material: ("common.items.log.hardwood", 5), modifier: Some(("common.items.crafting_ing.animal_misc.strong_pincer", 5)), additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -1991,7 +1952,6 @@ material: ("common.items.log.ironwood", 5), modifier: Some(("common.items.crafting_ing.animal_misc.strong_pincer", 10)), additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -2001,9 +1961,8 @@ item: "common.items.modular.weapon.primary.bow.warbow", ), material: ("common.items.log.frostwood", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.strong_pincer", 20)), + modifier: Some(("common.items.crafting_ing.animal_misc.strong_pincer", 15)), additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -2013,9 +1972,8 @@ item: "common.items.modular.weapon.primary.bow.warbow", ), material: ("common.items.log.eldwood", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.strong_pincer", 50)), + modifier: Some(("common.items.crafting_ing.animal_misc.strong_pincer", 25)), additional_inputs: [ - (Item("common.items.crafting_ing.sticky_thread"), 3), ], craft_sprite: Some(CraftingBench), ), @@ -2074,7 +2032,7 @@ item: "common.items.modular.weapon.primary.staff.brand", ), material: ("common.items.log.frostwood", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.claw", 20)), + modifier: Some(("common.items.crafting_ing.animal_misc.claw", 15)), additional_inputs: [ (Item("common.items.crafting_ing.leather.leather_strips"), 2), ], @@ -2086,7 +2044,7 @@ item: "common.items.modular.weapon.primary.staff.brand", ), material: ("common.items.log.eldwood", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.claw", 50)), + modifier: Some(("common.items.crafting_ing.animal_misc.claw", 25)), additional_inputs: [ (Item("common.items.crafting_ing.leather.leather_strips"), 2), ], @@ -2146,7 +2104,7 @@ item: "common.items.modular.weapon.primary.staff.grandstaff", ), material: ("common.items.log.frostwood", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.large_horn", 20)), + modifier: Some(("common.items.crafting_ing.animal_misc.large_horn", 15)), additional_inputs: [ (Item("common.items.crafting_ing.leather.leather_strips"), 2), ], @@ -2158,7 +2116,7 @@ item: "common.items.modular.weapon.primary.staff.grandstaff", ), material: ("common.items.log.eldwood", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.large_horn", 50)), + modifier: Some(("common.items.crafting_ing.animal_misc.large_horn", 25)), additional_inputs: [ (Item("common.items.crafting_ing.leather.leather_strips"), 2), ], @@ -2218,7 +2176,7 @@ item: "common.items.modular.weapon.primary.staff.longpole", ), material: ("common.items.log.frostwood", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.long_tusk", 20)), + modifier: Some(("common.items.crafting_ing.animal_misc.long_tusk", 15)), additional_inputs: [ (Item("common.items.crafting_ing.leather.leather_strips"), 2), ], @@ -2230,7 +2188,7 @@ item: "common.items.modular.weapon.primary.staff.longpole", ), material: ("common.items.log.eldwood", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.long_tusk", 50)), + modifier: Some(("common.items.crafting_ing.animal_misc.long_tusk", 25)), additional_inputs: [ (Item("common.items.crafting_ing.leather.leather_strips"), 2), ], @@ -2290,7 +2248,7 @@ item: "common.items.modular.weapon.primary.staff.ornate", ), material: ("common.items.log.frostwood", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.elegant_crest", 20)), + modifier: Some(("common.items.crafting_ing.animal_misc.elegant_crest", 15)), additional_inputs: [ (Item("common.items.crafting_ing.leather.leather_strips"), 2), ], @@ -2302,7 +2260,7 @@ item: "common.items.modular.weapon.primary.staff.ornate", ), material: ("common.items.log.eldwood", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.elegant_crest", 50)), + modifier: Some(("common.items.crafting_ing.animal_misc.elegant_crest", 25)), additional_inputs: [ (Item("common.items.crafting_ing.leather.leather_strips"), 2), ], @@ -2362,7 +2320,7 @@ item: "common.items.modular.weapon.primary.staff.pole", ), material: ("common.items.log.frostwood", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.sharp_fang", 20)), + modifier: Some(("common.items.crafting_ing.animal_misc.sharp_fang", 15)), additional_inputs: [ (Item("common.items.crafting_ing.leather.leather_strips"), 2), ], @@ -2374,7 +2332,7 @@ item: "common.items.modular.weapon.primary.staff.pole", ), material: ("common.items.log.eldwood", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.sharp_fang", 50)), + modifier: Some(("common.items.crafting_ing.animal_misc.sharp_fang", 25)), additional_inputs: [ (Item("common.items.crafting_ing.leather.leather_strips"), 2), ], @@ -2434,7 +2392,7 @@ item: "common.items.modular.weapon.primary.staff.rod", ), material: ("common.items.log.frostwood", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.strong_pincer", 20)), + modifier: Some(("common.items.crafting_ing.animal_misc.strong_pincer", 15)), additional_inputs: [ (Item("common.items.crafting_ing.leather.leather_strips"), 2), ], @@ -2446,7 +2404,7 @@ item: "common.items.modular.weapon.primary.staff.rod", ), material: ("common.items.log.eldwood", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.strong_pincer", 50)), + modifier: Some(("common.items.crafting_ing.animal_misc.strong_pincer", 25)), additional_inputs: [ (Item("common.items.crafting_ing.leather.leather_strips"), 2), ], @@ -2579,7 +2537,7 @@ item: "common.items.modular.weapon.primary.sceptre.arbor", ), material: ("common.items.log.frostwood", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.long_tusk", 20)), + modifier: Some(("common.items.crafting_ing.animal_misc.long_tusk", 15)), additional_inputs: [ (Item("common.items.crafting_ing.leather.leather_strips"), 2), ], @@ -2591,7 +2549,7 @@ item: "common.items.modular.weapon.primary.sceptre.arbor", ), material: ("common.items.log.eldwood", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.long_tusk", 50)), + modifier: Some(("common.items.crafting_ing.animal_misc.long_tusk", 25)), additional_inputs: [ (Item("common.items.crafting_ing.leather.leather_strips"), 2), ], @@ -2651,7 +2609,7 @@ item: "common.items.modular.weapon.primary.sceptre.cane", ), material: ("common.items.log.frostwood", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.strong_pincer", 20)), + modifier: Some(("common.items.crafting_ing.animal_misc.strong_pincer", 15)), additional_inputs: [ (Item("common.items.crafting_ing.leather.leather_strips"), 2), ], @@ -2663,7 +2621,7 @@ item: "common.items.modular.weapon.primary.sceptre.cane", ), material: ("common.items.log.eldwood", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.strong_pincer", 50)), + modifier: Some(("common.items.crafting_ing.animal_misc.strong_pincer", 25)), additional_inputs: [ (Item("common.items.crafting_ing.leather.leather_strips"), 2), ], @@ -2723,7 +2681,7 @@ item: "common.items.modular.weapon.primary.sceptre.crook", ), material: ("common.items.log.frostwood", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.sharp_fang", 20)), + modifier: Some(("common.items.crafting_ing.animal_misc.sharp_fang", 15)), additional_inputs: [ (Item("common.items.crafting_ing.leather.leather_strips"), 2), ], @@ -2735,7 +2693,7 @@ item: "common.items.modular.weapon.primary.sceptre.crook", ), material: ("common.items.log.eldwood", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.sharp_fang", 50)), + modifier: Some(("common.items.crafting_ing.animal_misc.sharp_fang", 25)), additional_inputs: [ (Item("common.items.crafting_ing.leather.leather_strips"), 2), ], @@ -2795,7 +2753,7 @@ item: "common.items.modular.weapon.primary.sceptre.crozier", ), material: ("common.items.log.frostwood", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.claw", 20)), + modifier: Some(("common.items.crafting_ing.animal_misc.claw", 15)), additional_inputs: [ (Item("common.items.crafting_ing.leather.leather_strips"), 2), ], @@ -2807,7 +2765,7 @@ item: "common.items.modular.weapon.primary.sceptre.crozier", ), material: ("common.items.log.eldwood", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.claw", 50)), + modifier: Some(("common.items.crafting_ing.animal_misc.claw", 25)), additional_inputs: [ (Item("common.items.crafting_ing.leather.leather_strips"), 2), ], @@ -2867,7 +2825,7 @@ item: "common.items.modular.weapon.primary.sceptre.grandsceptre", ), material: ("common.items.log.frostwood", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.large_horn", 20)), + modifier: Some(("common.items.crafting_ing.animal_misc.large_horn", 15)), additional_inputs: [ (Item("common.items.crafting_ing.leather.leather_strips"), 2), ], @@ -2879,7 +2837,7 @@ item: "common.items.modular.weapon.primary.sceptre.grandsceptre", ), material: ("common.items.log.eldwood", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.large_horn", 50)), + modifier: Some(("common.items.crafting_ing.animal_misc.large_horn", 25)), additional_inputs: [ (Item("common.items.crafting_ing.leather.leather_strips"), 2), ], @@ -2939,7 +2897,7 @@ item: "common.items.modular.weapon.primary.sceptre.ornate", ), material: ("common.items.log.frostwood", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.elegant_crest", 20)), + modifier: Some(("common.items.crafting_ing.animal_misc.elegant_crest", 15)), additional_inputs: [ (Item("common.items.crafting_ing.leather.leather_strips"), 2), ], @@ -2951,7 +2909,7 @@ item: "common.items.modular.weapon.primary.sceptre.ornate", ), material: ("common.items.log.eldwood", 5), - modifier: Some(("common.items.crafting_ing.animal_misc.elegant_crest", 50)), + modifier: Some(("common.items.crafting_ing.animal_misc.elegant_crest", 25)), additional_inputs: [ (Item("common.items.crafting_ing.leather.leather_strips"), 2), ], diff --git a/assets/common/credits.ron b/assets/common/credits.ron index 8ad77d49e4..4a54dad80a 100644 --- a/assets/common/credits.ron +++ b/assets/common/credits.ron @@ -101,7 +101,14 @@ license_link: "https://creativecommons.org/licenses/by-sa/3.0/", modifications: "Added additional characters.", notes: "Derived from Wizard", - )], + ), ( + name: "Sarabun", + authors: ["Suppakit Chalermlarp"], + asset_path: "voxygen/font/Sarabun-Regular.ttf", + // License appears to be satisfied by inclusion of its text file. + license: "OFL", + license_link: "https://scripts.sil.org/OFL", + ),], other_art: [], /// Entry format: /// ``` diff --git a/assets/common/entity/wild/aggressive/mammoth.ron b/assets/common/entity/wild/peaceful/mammoth.ron similarity index 100% rename from assets/common/entity/wild/aggressive/mammoth.ron rename to assets/common/entity/wild/peaceful/mammoth.ron diff --git a/assets/common/items/armor/alchemist/belt.ron b/assets/common/items/armor/alchemist/belt.ron index 5c2ec37c6b..2e36b32a10 100644 --- a/assets/common/items/armor/alchemist/belt.ron +++ b/assets/common/items/armor/alchemist/belt.ron @@ -3,13 +3,7 @@ ItemDef( description: "", kind: Armor(( kind: Belt, - stats: ( - protection: Some(Normal(8.0)), - poise_resilience: Some(Normal(1.0)), - energy_max: Some(2.0), - energy_reward: Some(0.025), - crit_power: Some(0.02), - ), + stats: FromSet("Alchemist"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/alchemist/chest.ron b/assets/common/items/armor/alchemist/chest.ron index 1bfd138182..fa19b234e8 100644 --- a/assets/common/items/armor/alchemist/chest.ron +++ b/assets/common/items/armor/alchemist/chest.ron @@ -3,13 +3,7 @@ ItemDef( description: "", kind: Armor(( kind: Chest, - stats: ( - protection: Some(Normal(48.0)), - poise_resilience: Some(Normal(6.0)), - energy_max: Some(13.5), - energy_reward: Some(0.135), - crit_power: Some(0.125), - ), + stats: FromSet("Alchemist"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/alchemist/hat.ron b/assets/common/items/armor/alchemist/hat.ron index 80f8fd0ed5..66d75300f9 100644 --- a/assets/common/items/armor/alchemist/hat.ron +++ b/assets/common/items/armor/alchemist/hat.ron @@ -3,13 +3,7 @@ ItemDef( description: "It seems like a parrot was perched up here.", kind: Armor(( kind: Head, - stats: ( - protection: Some(Normal(4.0)), - poise_resilience: Some(Normal(1.0)), - energy_max: Some(1.0), - energy_reward: Some(0.015), - crit_power: Some(0.02), - ), + stats: FromSet("Alchemist"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/alchemist/pants.ron b/assets/common/items/armor/alchemist/pants.ron index 14a702cbe9..5bc425f0a3 100644 --- a/assets/common/items/armor/alchemist/pants.ron +++ b/assets/common/items/armor/alchemist/pants.ron @@ -3,13 +3,7 @@ ItemDef( description: "", kind: Armor(( kind: Pants, - stats: ( - protection: Some(Normal(32.0)), - poise_resilience: Some(Normal(4.0)), - energy_max: Some(9.0), - energy_reward: Some(0.1), - crit_power: Some(0.08), - ), + stats: FromSet("Alchemist"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/assassin/belt.ron b/assets/common/items/armor/assassin/belt.ron index 97fc7563ed..1a8ff20c8d 100644 --- a/assets/common/items/armor/assassin/belt.ron +++ b/assets/common/items/armor/assassin/belt.ron @@ -3,9 +3,7 @@ ItemDef( description: "Only the best for a member of the creed.", kind: Armor(( kind: Belt, - stats: ( - protection: Some(Normal(2.0)), - ), + stats: FromSet("Assassin"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/assassin/chest.ron b/assets/common/items/armor/assassin/chest.ron index 031d4900c9..da39459f32 100644 --- a/assets/common/items/armor/assassin/chest.ron +++ b/assets/common/items/armor/assassin/chest.ron @@ -3,9 +3,7 @@ ItemDef( description: "Only the best for a member of the creed.", kind: Armor(( kind: Chest, - stats: ( - protection: Some(Normal(15.0)), - ), + stats: FromSet("Assassin"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/assassin/foot.ron b/assets/common/items/armor/assassin/foot.ron index e79d1d9011..ad90eec795 100644 --- a/assets/common/items/armor/assassin/foot.ron +++ b/assets/common/items/armor/assassin/foot.ron @@ -3,9 +3,7 @@ ItemDef( description: "Only the best for a member of the creed.", kind: Armor(( kind: Foot, - stats: ( - protection: Some(Normal(4.0)), - ), + stats: FromSet("Assassin"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/assassin/hand.ron b/assets/common/items/armor/assassin/hand.ron index a7197e4475..00f5e307dc 100644 --- a/assets/common/items/armor/assassin/hand.ron +++ b/assets/common/items/armor/assassin/hand.ron @@ -3,9 +3,7 @@ ItemDef( description: "Only the best for a member of the creed.", kind: Armor(( kind: Hand, - stats: ( - protection: Some(Normal(6.0)), - ), + stats: FromSet("Assassin"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/assassin/head.ron b/assets/common/items/armor/assassin/head.ron index ef556a3e5b..d87e777480 100644 --- a/assets/common/items/armor/assassin/head.ron +++ b/assets/common/items/armor/assassin/head.ron @@ -3,8 +3,8 @@ ItemDef( description: "A general assassination mask preventing the wearer from being identified.", kind: Armor(( kind: Head, - stats: ( - ), + stats: Direct(( + )), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/assassin/pants.ron b/assets/common/items/armor/assassin/pants.ron index 84c994c016..36db88be36 100644 --- a/assets/common/items/armor/assassin/pants.ron +++ b/assets/common/items/armor/assassin/pants.ron @@ -3,10 +3,7 @@ ItemDef( description: "Only the best for a member of the creed.", kind: Armor(( kind: Pants, - stats: ( - protection: Some(Normal(10.0)), - poise_resilience: Some(Normal(1.0)), - ), + stats: FromSet("Assassin"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/assassin/shoulder.ron b/assets/common/items/armor/assassin/shoulder.ron index 587d83f11d..031eca6283 100644 --- a/assets/common/items/armor/assassin/shoulder.ron +++ b/assets/common/items/armor/assassin/shoulder.ron @@ -3,9 +3,7 @@ ItemDef( description: "Only the best for a member of the creed.", kind: Armor(( kind: Shoulder, - stats: ( - protection: Some(Normal(8.0)), - ), + stats: FromSet("Assassin"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/blacksmith/belt.ron b/assets/common/items/armor/blacksmith/belt.ron index 11274009b7..640042bcda 100644 --- a/assets/common/items/armor/blacksmith/belt.ron +++ b/assets/common/items/armor/blacksmith/belt.ron @@ -3,13 +3,7 @@ ItemDef( description: "", kind: Armor(( kind: Belt, - stats: ( - protection: Some(Normal(8.0)), - poise_resilience: Some(Normal(1.0)), - energy_max: Some(2.0), - energy_reward: Some(0.025), - crit_power: Some(0.02), - ), + stats: FromSet("Blacksmith"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/blacksmith/chest.ron b/assets/common/items/armor/blacksmith/chest.ron index 41c83ba1a8..6a2ac4d833 100644 --- a/assets/common/items/armor/blacksmith/chest.ron +++ b/assets/common/items/armor/blacksmith/chest.ron @@ -3,13 +3,7 @@ ItemDef( description: "", kind: Armor(( kind: Chest, - stats: ( - protection: Some(Normal(48.0)), - poise_resilience: Some(Normal(6.0)), - energy_max: Some(13.5), - energy_reward: Some(0.135), - crit_power: Some(0.125), - ), + stats: FromSet("Blacksmith"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/blacksmith/hand.ron b/assets/common/items/armor/blacksmith/hand.ron index 7b2cdc5b2c..43523e7cd3 100644 --- a/assets/common/items/armor/blacksmith/hand.ron +++ b/assets/common/items/armor/blacksmith/hand.ron @@ -3,13 +3,7 @@ ItemDef( description: "", kind: Armor(( kind: Hand, - stats: ( - protection: Some(Normal(16.0)), - poise_resilience: Some(Normal(2.0)), - energy_max: Some(4.5), - energy_reward: Some(0.045), - crit_power: Some(0.04), - ), + stats: FromSet("Blacksmith"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/blacksmith/hat.ron b/assets/common/items/armor/blacksmith/hat.ron index 127c06f106..571d778085 100644 --- a/assets/common/items/armor/blacksmith/hat.ron +++ b/assets/common/items/armor/blacksmith/hat.ron @@ -3,13 +3,7 @@ ItemDef( description: "", kind: Armor(( kind: Head, - stats: ( - protection: Some(Normal(4.0)), - poise_resilience: Some(Normal(1.0)), - energy_max: Some(1.0), - energy_reward: Some(0.015), - crit_power: Some(0.02), - ), + stats: FromSet("Blacksmith"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/blacksmith/pants.ron b/assets/common/items/armor/blacksmith/pants.ron index c1866f5139..8a852939ed 100644 --- a/assets/common/items/armor/blacksmith/pants.ron +++ b/assets/common/items/armor/blacksmith/pants.ron @@ -3,13 +3,7 @@ ItemDef( description: "", kind: Armor(( kind: Pants, - stats: ( - protection: Some(Normal(32.0)), - poise_resilience: Some(Normal(4.0)), - energy_max: Some(9.0), - energy_reward: Some(0.1), - crit_power: Some(0.08), - ), + stats: FromSet("Blacksmith"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/bonerattler/belt.ron b/assets/common/items/armor/bonerattler/belt.ron index f641604dd3..5aebef259e 100644 --- a/assets/common/items/armor/bonerattler/belt.ron +++ b/assets/common/items/armor/bonerattler/belt.ron @@ -3,9 +3,7 @@ ItemDef( description: "Sections of vertebrae fastened together with hide and a bonerattler eye for the buckle.", kind: Armor(( kind: Belt, - stats: ( - protection: Some(Normal(3.0)), - ), + stats: FromSet("Bonerattler"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/bonerattler/chest.ron b/assets/common/items/armor/bonerattler/chest.ron index 8e06c20c2a..ec03a8861e 100644 --- a/assets/common/items/armor/bonerattler/chest.ron +++ b/assets/common/items/armor/bonerattler/chest.ron @@ -3,9 +3,7 @@ ItemDef( description: "The spiny back and hide of a bonerattler fastened together into a protective cuirass.", kind: Armor(( kind: Chest, - stats: ( - protection: Some(Normal(25.0)), - ), + stats: FromSet("Bonerattler"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/bonerattler/foot.ron b/assets/common/items/armor/bonerattler/foot.ron index f065bdcb52..351acafd5a 100644 --- a/assets/common/items/armor/bonerattler/foot.ron +++ b/assets/common/items/armor/bonerattler/foot.ron @@ -3,9 +3,7 @@ ItemDef( description: "Boots made from the claws and hide of a bonerattler.", kind: Armor(( kind: Foot, - stats: ( - protection: Some(Normal(5.0)), - ), + stats: FromSet("Bonerattler"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/bonerattler/hand.ron b/assets/common/items/armor/bonerattler/hand.ron index 469e9539cc..616bc797a2 100644 --- a/assets/common/items/armor/bonerattler/hand.ron +++ b/assets/common/items/armor/bonerattler/hand.ron @@ -3,9 +3,7 @@ ItemDef( description: "The hide and bone from a bonerattler provide strong protection for the wearer.", kind: Armor(( kind: Hand, - stats: ( - protection: Some(Normal(10.0)), - ), + stats: FromSet("Bonerattler"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/bonerattler/pants.ron b/assets/common/items/armor/bonerattler/pants.ron index 26c4a75c41..3dccb1a024 100644 --- a/assets/common/items/armor/bonerattler/pants.ron +++ b/assets/common/items/armor/bonerattler/pants.ron @@ -3,9 +3,7 @@ ItemDef( description: "Assorted bones and hide from a bonerattler provide protection around the wearer's legs.", kind: Armor(( kind: Pants, - stats: ( - protection: Some(Normal(20.0)), - ), + stats: FromSet("Bonerattler"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/bonerattler/shoulder.ron b/assets/common/items/armor/bonerattler/shoulder.ron index 12fa1e0547..a0698677f6 100644 --- a/assets/common/items/armor/bonerattler/shoulder.ron +++ b/assets/common/items/armor/bonerattler/shoulder.ron @@ -3,9 +3,7 @@ ItemDef( description: "Roughly formed bonerattler hide provide some strong protection.", kind: Armor(( kind: Shoulder, - stats: ( - protection: Some(Normal(15.0)), - ), + stats: FromSet("Bonerattler"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/chef/belt.ron b/assets/common/items/armor/chef/belt.ron index 738a8d10a8..7908e6fb44 100644 --- a/assets/common/items/armor/chef/belt.ron +++ b/assets/common/items/armor/chef/belt.ron @@ -3,13 +3,7 @@ ItemDef( description: "", kind: Armor(( kind: Belt, - stats: ( - protection: Some(Normal(8.0)), - poise_resilience: Some(Normal(1.0)), - energy_max: Some(2.0), - energy_reward: Some(0.025), - crit_power: Some(0.02), - ), + stats: FromSet("Chef"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/chef/chest.ron b/assets/common/items/armor/chef/chest.ron index cfc3672d1b..52829ecccf 100644 --- a/assets/common/items/armor/chef/chest.ron +++ b/assets/common/items/armor/chef/chest.ron @@ -3,13 +3,7 @@ ItemDef( description: "", kind: Armor(( kind: Chest, - stats: ( - protection: Some(Normal(48.0)), - poise_resilience: Some(Normal(6.0)), - energy_max: Some(13.5), - energy_reward: Some(0.135), - crit_power: Some(0.125), - ), + stats: FromSet("Chef"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/chef/hat.ron b/assets/common/items/armor/chef/hat.ron index c5250bebef..6c2ffbe420 100644 --- a/assets/common/items/armor/chef/hat.ron +++ b/assets/common/items/armor/chef/hat.ron @@ -3,13 +3,7 @@ ItemDef( description: "", kind: Armor(( kind: Head, - stats: ( - protection: Some(Normal(4.0)), - poise_resilience: Some(Normal(1.0)), - energy_max: Some(1.0), - energy_reward: Some(0.015), - crit_power: Some(0.02), - ), + stats: FromSet("Chef"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/chef/pants.ron b/assets/common/items/armor/chef/pants.ron index 153f5cdcff..ff597f0b0e 100644 --- a/assets/common/items/armor/chef/pants.ron +++ b/assets/common/items/armor/chef/pants.ron @@ -3,13 +3,7 @@ ItemDef( description: "", kind: Armor(( kind: Pants, - stats: ( - protection: Some(Normal(32.0)), - poise_resilience: Some(Normal(4.0)), - energy_max: Some(9.0), - energy_reward: Some(0.1), - crit_power: Some(0.08), - ), + stats: FromSet("Chef"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/cloth/druid/back.ron b/assets/common/items/armor/cloth/druid/back.ron index c1c3676ab4..a40337e89b 100644 --- a/assets/common/items/armor/cloth/druid/back.ron +++ b/assets/common/items/armor/cloth/druid/back.ron @@ -3,12 +3,7 @@ ItemDef( description: "Incredibly light, with the essence of nature.", kind: Armor(( kind: Back, - stats: ( - protection: Some(Normal(3.0)), - energy_max: Some(3.3), - energy_reward: Some(0.034), - stealth: Some(0.034), - ), + stats: FromSet("Lifecloth"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/cloth/druid/belt.ron b/assets/common/items/armor/cloth/druid/belt.ron index 5b5cfc6b9f..9a58232388 100644 --- a/assets/common/items/armor/cloth/druid/belt.ron +++ b/assets/common/items/armor/cloth/druid/belt.ron @@ -3,12 +3,7 @@ ItemDef( description: "Incredibly light, with the essence of nature.", kind: Armor(( kind: Belt, - stats: ( - protection: Some(Normal(3.0)), - energy_max: Some(3.3), - energy_reward: Some(0.034), - stealth: Some(0.034), - ), + stats: FromSet("Lifecloth"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/cloth/druid/chest.ron b/assets/common/items/armor/cloth/druid/chest.ron index ed0a3e144e..1300ab75c0 100644 --- a/assets/common/items/armor/cloth/druid/chest.ron +++ b/assets/common/items/armor/cloth/druid/chest.ron @@ -3,12 +3,7 @@ ItemDef( description: "Incredibly light, with the essence of nature.", kind: Armor(( kind: Chest, - stats: ( - protection: Some(Normal(18.0)), - energy_max: Some(19.8), - energy_reward: Some(0.2), - stealth: Some(0.2), - ), + stats: FromSet("Lifecloth"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/cloth/druid/foot.ron b/assets/common/items/armor/cloth/druid/foot.ron index 63d1ca531f..04f19a6d2c 100644 --- a/assets/common/items/armor/cloth/druid/foot.ron +++ b/assets/common/items/armor/cloth/druid/foot.ron @@ -3,12 +3,7 @@ ItemDef( description: "Incredibly light, with the essence of nature.", kind: Armor(( kind: Foot, - stats: ( - protection: Some(Normal(6.0)), - energy_max: Some(6.6), - energy_reward: Some(0.067), - stealth: Some(0.067), - ), + stats: FromSet("Lifecloth"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/cloth/druid/hand.ron b/assets/common/items/armor/cloth/druid/hand.ron index 06162821f1..fa0a1487e9 100644 --- a/assets/common/items/armor/cloth/druid/hand.ron +++ b/assets/common/items/armor/cloth/druid/hand.ron @@ -3,12 +3,7 @@ ItemDef( description: "Incredibly light, with the essence of nature.", kind: Armor(( kind: Hand, - stats: ( - protection: Some(Normal(6.0)), - energy_max: Some(6.6), - energy_reward: Some(0.067), - stealth: Some(0.067), - ), + stats: FromSet("Lifecloth"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/cloth/druid/pants.ron b/assets/common/items/armor/cloth/druid/pants.ron index e142e7a565..1313557a4f 100644 --- a/assets/common/items/armor/cloth/druid/pants.ron +++ b/assets/common/items/armor/cloth/druid/pants.ron @@ -3,12 +3,7 @@ ItemDef( description: "Incredibly light, with the essence of nature.", kind: Armor(( kind: Pants, - stats: ( - protection: Some(Normal(12.0)), - energy_max: Some(13.2), - energy_reward: Some(0.134), - stealth: Some(0.134), - ), + stats: FromSet("Lifecloth"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/cloth/druid/shoulder.ron b/assets/common/items/armor/cloth/druid/shoulder.ron index 71ba67a04d..290e4e930f 100644 --- a/assets/common/items/armor/cloth/druid/shoulder.ron +++ b/assets/common/items/armor/cloth/druid/shoulder.ron @@ -3,12 +3,7 @@ ItemDef( description: "Incredibly light, with the essence of nature.", kind: Armor(( kind: Shoulder, - stats: ( - protection: Some(Normal(12.0)), - energy_max: Some(13.2), - energy_reward: Some(0.134), - stealth: Some(0.134), - ), + stats: FromSet("Lifecloth"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/cloth/linen/back.ron b/assets/common/items/armor/cloth/linen/back.ron index 1b8915e1cb..81554f4cd1 100644 --- a/assets/common/items/armor/cloth/linen/back.ron +++ b/assets/common/items/armor/cloth/linen/back.ron @@ -3,12 +3,7 @@ ItemDef( description: "Roughly stitched, but it seems to hold.", kind: Armor(( kind: Back, - stats: ( - protection: Some(Normal(1.0)), - energy_max: Some(0.8), - energy_reward: Some(0.009), - stealth: Some(0.009), - ), + stats: FromSet("Linen"), )), quality: Low, tags: [ diff --git a/assets/common/items/armor/cloth/linen/belt.ron b/assets/common/items/armor/cloth/linen/belt.ron index bb3807061f..7f30c346b1 100644 --- a/assets/common/items/armor/cloth/linen/belt.ron +++ b/assets/common/items/armor/cloth/linen/belt.ron @@ -3,12 +3,7 @@ ItemDef( description: "Roughly stitched, but it seems to hold.", kind: Armor(( kind: Belt, - stats: ( - protection: Some(Normal(1.0)), - energy_max: Some(0.8), - energy_reward: Some(0.009), - stealth: Some(0.009), - ), + stats: FromSet("Linen"), )), quality: Low, tags: [ diff --git a/assets/common/items/armor/cloth/linen/chest.ron b/assets/common/items/armor/cloth/linen/chest.ron index ec2236a261..6294a7afaa 100644 --- a/assets/common/items/armor/cloth/linen/chest.ron +++ b/assets/common/items/armor/cloth/linen/chest.ron @@ -3,12 +3,7 @@ ItemDef( description: "Roughly stitched, but it seems to hold.", kind: Armor(( kind: Chest, - stats: ( - protection: Some(Normal(5.0)), - energy_max: Some(5.0), - energy_reward: Some(0.051), - stealth: Some(0.051), - ), + stats: FromSet("Linen"), )), quality: Low, tags: [ diff --git a/assets/common/items/armor/cloth/linen/foot.ron b/assets/common/items/armor/cloth/linen/foot.ron index 4df179cc82..99639158b3 100644 --- a/assets/common/items/armor/cloth/linen/foot.ron +++ b/assets/common/items/armor/cloth/linen/foot.ron @@ -3,12 +3,7 @@ ItemDef( description: "Roughly stitched, but it seems to hold.", kind: Armor(( kind: Foot, - stats: ( - protection: Some(Normal(2.0)), - energy_max: Some(1.7), - energy_reward: Some(0.017), - stealth: Some(0.017), - ), + stats: FromSet("Linen"), )), quality: Low, tags: [ diff --git a/assets/common/items/armor/cloth/linen/hand.ron b/assets/common/items/armor/cloth/linen/hand.ron index 0adb4ef1d4..b4e2cfe1c7 100644 --- a/assets/common/items/armor/cloth/linen/hand.ron +++ b/assets/common/items/armor/cloth/linen/hand.ron @@ -3,12 +3,7 @@ ItemDef( description: "Roughly stitched, but it seems to hold.", kind: Armor(( kind: Hand, - stats: ( - protection: Some(Normal(2.0)), - energy_max: Some(1.7), - energy_reward: Some(0.017), - stealth: Some(0.017), - ), + stats: FromSet("Linen"), )), quality: Low, tags: [ diff --git a/assets/common/items/armor/cloth/linen/pants.ron b/assets/common/items/armor/cloth/linen/pants.ron index 84bb7c95b6..d1f56c3337 100644 --- a/assets/common/items/armor/cloth/linen/pants.ron +++ b/assets/common/items/armor/cloth/linen/pants.ron @@ -3,12 +3,7 @@ ItemDef( description: "Roughly stitched, but it seems to hold.", kind: Armor(( kind: Pants, - stats: ( - protection: Some(Normal(3.0)), - energy_max: Some(3.3), - energy_reward: Some(0.034), - stealth: Some(0.034), - ), + stats: FromSet("Linen"), )), quality: Low, tags: [ diff --git a/assets/common/items/armor/cloth/linen/shoulder.ron b/assets/common/items/armor/cloth/linen/shoulder.ron index 6a953f7794..e78612f823 100644 --- a/assets/common/items/armor/cloth/linen/shoulder.ron +++ b/assets/common/items/armor/cloth/linen/shoulder.ron @@ -3,12 +3,7 @@ ItemDef( description: "Roughly stitched, but it seems to hold.", kind: Armor(( kind: Shoulder, - stats: ( - protection: Some(Normal(3.0)), - energy_max: Some(3.3), - energy_reward: Some(0.034), - stealth: Some(0.034), - ), + stats: FromSet("Linen"), )), quality: Low, tags: [ diff --git a/assets/common/items/armor/cloth/moonweave/back.ron b/assets/common/items/armor/cloth/moonweave/back.ron index 4c7a754bf9..7b3fe04fc1 100644 --- a/assets/common/items/armor/cloth/moonweave/back.ron +++ b/assets/common/items/armor/cloth/moonweave/back.ron @@ -3,12 +3,7 @@ ItemDef( description: "The fabric dances silently, like moonlight.", kind: Armor(( kind: Back, - stats: ( - protection: Some(Normal(4.0)), - energy_max: Some(4.1), - energy_reward: Some(0.042), - stealth: Some(0.042), - ), + stats: FromSet("Moonweave"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/cloth/moonweave/belt.ron b/assets/common/items/armor/cloth/moonweave/belt.ron index 1252964f16..4799e78f73 100644 --- a/assets/common/items/armor/cloth/moonweave/belt.ron +++ b/assets/common/items/armor/cloth/moonweave/belt.ron @@ -3,12 +3,7 @@ ItemDef( description: "The fabric dances silently, like moonlight.", kind: Armor(( kind: Belt, - stats: ( - protection: Some(Normal(4.0)), - energy_max: Some(4.1), - energy_reward: Some(0.042), - stealth: Some(0.042), - ), + stats: FromSet("Moonweave"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/cloth/moonweave/chest.ron b/assets/common/items/armor/cloth/moonweave/chest.ron index 60bff72375..7434648d3d 100644 --- a/assets/common/items/armor/cloth/moonweave/chest.ron +++ b/assets/common/items/armor/cloth/moonweave/chest.ron @@ -3,12 +3,7 @@ ItemDef( description: "The fabric dances silently, like moonlight.", kind: Armor(( kind: Chest, - stats: ( - protection: Some(Normal(23.0)), - energy_max: Some(24.8), - energy_reward: Some(0.252), - stealth: Some(0.252), - ), + stats: FromSet("Moonweave"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/cloth/moonweave/foot.ron b/assets/common/items/armor/cloth/moonweave/foot.ron index b498232757..f6f78973b0 100644 --- a/assets/common/items/armor/cloth/moonweave/foot.ron +++ b/assets/common/items/armor/cloth/moonweave/foot.ron @@ -3,12 +3,7 @@ ItemDef( description: "The fabric dances silently, like moonlight.", kind: Armor(( kind: Foot, - stats: ( - protection: Some(Normal(8.0)), - energy_max: Some(8.3), - energy_reward: Some(0.084), - stealth: Some(0.084), - ), + stats: FromSet("Moonweave"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/cloth/moonweave/hand.ron b/assets/common/items/armor/cloth/moonweave/hand.ron index 655b6decb9..762bff327a 100644 --- a/assets/common/items/armor/cloth/moonweave/hand.ron +++ b/assets/common/items/armor/cloth/moonweave/hand.ron @@ -3,12 +3,7 @@ ItemDef( description: "The fabric dances silently, like moonlight.", kind: Armor(( kind: Hand, - stats: ( - protection: Some(Normal(8.0)), - energy_max: Some(8.3), - energy_reward: Some(0.084), - stealth: Some(0.084), - ), + stats: FromSet("Moonweave"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/cloth/moonweave/pants.ron b/assets/common/items/armor/cloth/moonweave/pants.ron index 8b89b32be2..7fbebcecd7 100644 --- a/assets/common/items/armor/cloth/moonweave/pants.ron +++ b/assets/common/items/armor/cloth/moonweave/pants.ron @@ -3,12 +3,7 @@ ItemDef( description: "The fabric dances silently, like moonlight.", kind: Armor(( kind: Pants, - stats: ( - protection: Some(Normal(17.0)), - energy_max: Some(16.5), - energy_reward: Some(0.168), - stealth: Some(0.168), - ), + stats: FromSet("Moonweave"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/cloth/moonweave/shoulder.ron b/assets/common/items/armor/cloth/moonweave/shoulder.ron index 0ed0d7eecb..c2e4198fdf 100644 --- a/assets/common/items/armor/cloth/moonweave/shoulder.ron +++ b/assets/common/items/armor/cloth/moonweave/shoulder.ron @@ -3,12 +3,7 @@ ItemDef( description: "The fabric dances silently, like moonlight.", kind: Armor(( kind: Shoulder, - stats: ( - protection: Some(Normal(17.0)), - energy_max: Some(16.5), - energy_reward: Some(0.168), - stealth: Some(0.168), - ), + stats: FromSet("Moonweave"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/cloth/silken/back.ron b/assets/common/items/armor/cloth/silken/back.ron index 1a202e3af8..88c8b3c0e6 100644 --- a/assets/common/items/armor/cloth/silken/back.ron +++ b/assets/common/items/armor/cloth/silken/back.ron @@ -3,12 +3,7 @@ ItemDef( description: "Weaved with care by a skilled tailor.", kind: Armor(( kind: Back, - stats: ( - protection: Some(Normal(2.0)), - energy_max: Some(2.5), - energy_reward: Some(0.025), - stealth: Some(0.025), - ), + stats: FromSet("Silk"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/cloth/silken/belt.ron b/assets/common/items/armor/cloth/silken/belt.ron index e489678f4d..df3f2e6cda 100644 --- a/assets/common/items/armor/cloth/silken/belt.ron +++ b/assets/common/items/armor/cloth/silken/belt.ron @@ -3,12 +3,7 @@ ItemDef( description: "Weaved with care by a skilled tailor.", kind: Armor(( kind: Belt, - stats: ( - protection: Some(Normal(2.0)), - energy_max: Some(2.5), - energy_reward: Some(0.025), - stealth: Some(0.025), - ), + stats: FromSet("Silk"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/cloth/silken/chest.ron b/assets/common/items/armor/cloth/silken/chest.ron index 3ffa71dadf..42009d9050 100644 --- a/assets/common/items/armor/cloth/silken/chest.ron +++ b/assets/common/items/armor/cloth/silken/chest.ron @@ -3,12 +3,7 @@ ItemDef( description: "Weaved with care by a skilled tailor.", kind: Armor(( kind: Chest, - stats: ( - protection: Some(Normal(14.0)), - energy_max: Some(14.9), - energy_reward: Some(0.15), - stealth: Some(0.15), - ), + stats: FromSet("Silk"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/cloth/silken/foot.ron b/assets/common/items/armor/cloth/silken/foot.ron index 362ec5a430..ee77086448 100644 --- a/assets/common/items/armor/cloth/silken/foot.ron +++ b/assets/common/items/armor/cloth/silken/foot.ron @@ -3,12 +3,7 @@ ItemDef( description: "Weaved with care by a skilled tailor.", kind: Armor(( kind: Foot, - stats: ( - protection: Some(Normal(5.0)), - energy_max: Some(5.0), - energy_reward: Some(0.05), - stealth: Some(0.05), - ), + stats: FromSet("Silk"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/cloth/silken/hand.ron b/assets/common/items/armor/cloth/silken/hand.ron index 8f330c1bfd..2327aa11ed 100644 --- a/assets/common/items/armor/cloth/silken/hand.ron +++ b/assets/common/items/armor/cloth/silken/hand.ron @@ -3,12 +3,7 @@ ItemDef( description: "Weaved with care by a skilled tailor.", kind: Armor(( kind: Hand, - stats: ( - protection: Some(Normal(5.0)), - energy_max: Some(5.0), - energy_reward: Some(0.05), - stealth: Some(0.05), - ), + stats: FromSet("Silk"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/cloth/silken/pants.ron b/assets/common/items/armor/cloth/silken/pants.ron index fb47370107..fbfbeaa18f 100644 --- a/assets/common/items/armor/cloth/silken/pants.ron +++ b/assets/common/items/armor/cloth/silken/pants.ron @@ -3,12 +3,7 @@ ItemDef( description: "Weaved with care by a skilled tailor.", kind: Armor(( kind: Pants, - stats: ( - protection: Some(Normal(9.0)), - energy_max: Some(9.9), - energy_reward: Some(0.1), - stealth: Some(0.1), - ), + stats: FromSet("Silk"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/cloth/silken/shoulder.ron b/assets/common/items/armor/cloth/silken/shoulder.ron index f122689ce6..a13902d07a 100644 --- a/assets/common/items/armor/cloth/silken/shoulder.ron +++ b/assets/common/items/armor/cloth/silken/shoulder.ron @@ -3,12 +3,7 @@ ItemDef( description: "Weaved with care by a skilled tailor.", kind: Armor(( kind: Shoulder, - stats: ( - protection: Some(Normal(9.0)), - energy_max: Some(9.9), - energy_reward: Some(0.1), - stealth: Some(0.1), - ), + stats: FromSet("Silk"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/cloth/sunsilk/back.ron b/assets/common/items/armor/cloth/sunsilk/back.ron index 35a5e32d0c..c342619520 100644 --- a/assets/common/items/armor/cloth/sunsilk/back.ron +++ b/assets/common/items/armor/cloth/sunsilk/back.ron @@ -3,12 +3,7 @@ ItemDef( description: "It radiates with the sun's power, and the grace to harness it.", kind: Armor(( kind: Back, - stats: ( - protection: Some(Normal(5.0)), - energy_max: Some(5.0), - energy_reward: Some(0.05), - stealth: Some(0.05), - ), + stats: FromSet("Sunsilk"), )), quality: Legendary, tags: [ diff --git a/assets/common/items/armor/cloth/sunsilk/belt.ron b/assets/common/items/armor/cloth/sunsilk/belt.ron index e3084bd54f..1628c04073 100644 --- a/assets/common/items/armor/cloth/sunsilk/belt.ron +++ b/assets/common/items/armor/cloth/sunsilk/belt.ron @@ -3,12 +3,7 @@ ItemDef( description: "It radiates with the sun's power, and the grace to harness it.", kind: Armor(( kind: Belt, - stats: ( - protection: Some(Normal(5.0)), - energy_max: Some(5.0), - energy_reward: Some(0.05), - stealth: Some(0.05), - ), + stats: FromSet("Sunsilk"), )), quality: Legendary, tags: [ diff --git a/assets/common/items/armor/cloth/sunsilk/chest.ron b/assets/common/items/armor/cloth/sunsilk/chest.ron index d6886b189d..2a52797564 100644 --- a/assets/common/items/armor/cloth/sunsilk/chest.ron +++ b/assets/common/items/armor/cloth/sunsilk/chest.ron @@ -3,12 +3,7 @@ ItemDef( description: "It radiates with the sun's power, and the grace to harness it.", kind: Armor(( kind: Chest, - stats: ( - protection: Some(Normal(27.0)), - energy_max: Some(30.0), - energy_reward: Some(0.3), - stealth: Some(0.3), - ), + stats: FromSet("Sunsilk"), )), quality: Legendary, tags: [ diff --git a/assets/common/items/armor/cloth/sunsilk/foot.ron b/assets/common/items/armor/cloth/sunsilk/foot.ron index e80b3d49c1..457eedfe80 100644 --- a/assets/common/items/armor/cloth/sunsilk/foot.ron +++ b/assets/common/items/armor/cloth/sunsilk/foot.ron @@ -3,12 +3,7 @@ ItemDef( description: "It radiates with the sun's power, and the grace to harness it.", kind: Armor(( kind: Foot, - stats: ( - protection: Some(Normal(9.0)), - energy_max: Some(10.0), - energy_reward: Some(0.1), - stealth: Some(0.1), - ), + stats: FromSet("Sunsilk"), )), quality: Legendary, tags: [ diff --git a/assets/common/items/armor/cloth/sunsilk/hand.ron b/assets/common/items/armor/cloth/sunsilk/hand.ron index 901816aca7..9bdf2b6aaf 100644 --- a/assets/common/items/armor/cloth/sunsilk/hand.ron +++ b/assets/common/items/armor/cloth/sunsilk/hand.ron @@ -3,12 +3,7 @@ ItemDef( description: "It radiates with the sun's power, and the grace to harness it.", kind: Armor(( kind: Hand, - stats: ( - protection: Some(Normal(9.0)), - energy_max: Some(10.0), - energy_reward: Some(0.1), - stealth: Some(0.1), - ), + stats: FromSet("Sunsilk"), )), quality: Legendary, tags: [ diff --git a/assets/common/items/armor/cloth/sunsilk/pants.ron b/assets/common/items/armor/cloth/sunsilk/pants.ron index f300ea476c..a1c59ab70e 100644 --- a/assets/common/items/armor/cloth/sunsilk/pants.ron +++ b/assets/common/items/armor/cloth/sunsilk/pants.ron @@ -3,12 +3,7 @@ ItemDef( description: "It radiates with the sun's power, and the grace to harness it.", kind: Armor(( kind: Pants, - stats: ( - protection: Some(Normal(18.0)), - energy_max: Some(20.0), - energy_reward: Some(0.2), - stealth: Some(0.2), - ), + stats: FromSet("Sunsilk"), )), quality: Legendary, tags: [ diff --git a/assets/common/items/armor/cloth/sunsilk/shoulder.ron b/assets/common/items/armor/cloth/sunsilk/shoulder.ron index 6335185022..83c2081dcd 100644 --- a/assets/common/items/armor/cloth/sunsilk/shoulder.ron +++ b/assets/common/items/armor/cloth/sunsilk/shoulder.ron @@ -3,12 +3,7 @@ ItemDef( description: "It radiates with the sun's power, and the grace to harness it.", kind: Armor(( kind: Shoulder, - stats: ( - protection: Some(Normal(18.0)), - energy_max: Some(20.0), - energy_reward: Some(0.2), - stealth: Some(0.2), - ), + stats: FromSet("Sunsilk"), )), quality: Legendary, tags: [ diff --git a/assets/common/items/armor/cloth/woolen/back.ron b/assets/common/items/armor/cloth/woolen/back.ron index e908e7fe83..63ac05f837 100644 --- a/assets/common/items/armor/cloth/woolen/back.ron +++ b/assets/common/items/armor/cloth/woolen/back.ron @@ -3,12 +3,7 @@ ItemDef( description: "Thick and ready for the snow.", kind: Armor(( kind: Back, - stats: ( - protection: Some(Normal(2.0)), - energy_max: Some(1.7), - energy_reward: Some(0.017), - stealth: Some(0.017), - ), + stats: FromSet("Wool"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/cloth/woolen/belt.ron b/assets/common/items/armor/cloth/woolen/belt.ron index 8133649aa3..a24c1cdd51 100644 --- a/assets/common/items/armor/cloth/woolen/belt.ron +++ b/assets/common/items/armor/cloth/woolen/belt.ron @@ -3,12 +3,7 @@ ItemDef( description: "Thick and ready for the snow.", kind: Armor(( kind: Belt, - stats: ( - protection: Some(Normal(2.0)), - energy_max: Some(1.7), - energy_reward: Some(0.017), - stealth: Some(0.017), - ), + stats: FromSet("Wool"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/cloth/woolen/chest.ron b/assets/common/items/armor/cloth/woolen/chest.ron index 4b95bf5d55..1dbe953b21 100644 --- a/assets/common/items/armor/cloth/woolen/chest.ron +++ b/assets/common/items/armor/cloth/woolen/chest.ron @@ -3,12 +3,7 @@ ItemDef( description: "Thick and ready for the snow.", kind: Armor(( kind: Chest, - stats: ( - protection: Some(Normal(9.0)), - energy_max: Some(9.9), - energy_reward: Some(0.099), - stealth: Some(0.099), - ), + stats: FromSet("Wool"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/cloth/woolen/foot.ron b/assets/common/items/armor/cloth/woolen/foot.ron index b2d5f28866..5b761ba6a0 100644 --- a/assets/common/items/armor/cloth/woolen/foot.ron +++ b/assets/common/items/armor/cloth/woolen/foot.ron @@ -3,12 +3,7 @@ ItemDef( description: "Thick and ready for the snow.", kind: Armor(( kind: Foot, - stats: ( - protection: Some(Normal(3.0)), - energy_max: Some(3.3), - energy_reward: Some(0.033), - stealth: Some(0.033), - ), + stats: FromSet("Wool"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/cloth/woolen/hand.ron b/assets/common/items/armor/cloth/woolen/hand.ron index a1ac5db7b5..25c71d48e8 100644 --- a/assets/common/items/armor/cloth/woolen/hand.ron +++ b/assets/common/items/armor/cloth/woolen/hand.ron @@ -3,12 +3,7 @@ ItemDef( description: "Thick and ready for the snow.", kind: Armor(( kind: Hand, - stats: ( - protection: Some(Normal(3.0)), - energy_max: Some(3.3), - energy_reward: Some(0.033), - stealth: Some(0.033), - ), + stats: FromSet("Wool"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/cloth/woolen/pants.ron b/assets/common/items/armor/cloth/woolen/pants.ron index ece0326885..1f1ca1d10a 100644 --- a/assets/common/items/armor/cloth/woolen/pants.ron +++ b/assets/common/items/armor/cloth/woolen/pants.ron @@ -3,12 +3,7 @@ ItemDef( description: "Thick and ready for the snow.", kind: Armor(( kind: Pants, - stats: ( - protection: Some(Normal(6.0)), - energy_max: Some(6.6), - energy_reward: Some(0.066), - stealth: Some(0.066), - ), + stats: FromSet("Wool"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/cloth/woolen/shoulder.ron b/assets/common/items/armor/cloth/woolen/shoulder.ron index 08e9b07dbb..751d2949f9 100644 --- a/assets/common/items/armor/cloth/woolen/shoulder.ron +++ b/assets/common/items/armor/cloth/woolen/shoulder.ron @@ -3,12 +3,7 @@ ItemDef( description: "Thick and ready for the snow.", kind: Armor(( kind: Shoulder, - stats: ( - protection: Some(Normal(6.0)), - energy_max: Some(6.6), - energy_reward: Some(0.066), - stealth: Some(0.066), - ), + stats: FromSet("Wool"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/cloth_blue/belt.ron b/assets/common/items/armor/cloth_blue/belt.ron index 69d968e597..5865b79b69 100644 --- a/assets/common/items/armor/cloth_blue/belt.ron +++ b/assets/common/items/armor/cloth_blue/belt.ron @@ -3,9 +3,7 @@ ItemDef( description: "A stylish rough fabric belt, dyed blue.", kind: Armor(( kind: Belt, - stats: ( - protection: Some(Normal(1.0)), - ), + stats: FromSet("Cloth Blue"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/cloth_blue/chest.ron b/assets/common/items/armor/cloth_blue/chest.ron index ef461e8892..6af5468f7e 100644 --- a/assets/common/items/armor/cloth_blue/chest.ron +++ b/assets/common/items/armor/cloth_blue/chest.ron @@ -3,9 +3,7 @@ ItemDef( description: "A stylish rough fabric surcoat, dyed blue.", kind: Armor(( kind: Chest, - stats: ( - protection: Some(Normal(1.0)), - ), + stats: FromSet("Cloth Blue"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/cloth_blue/foot.ron b/assets/common/items/armor/cloth_blue/foot.ron index 97a12ede60..351f04bc5e 100644 --- a/assets/common/items/armor/cloth_blue/foot.ron +++ b/assets/common/items/armor/cloth_blue/foot.ron @@ -3,8 +3,7 @@ ItemDef( description: "Cobbled rough fabric boots, dyed blue.", kind: Armor(( kind: Foot, - stats: ( - ), + stats: FromSet("Cloth Blue"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/cloth_blue/hand.ron b/assets/common/items/armor/cloth_blue/hand.ron index fde98338f8..dfa3026b65 100644 --- a/assets/common/items/armor/cloth_blue/hand.ron +++ b/assets/common/items/armor/cloth_blue/hand.ron @@ -3,8 +3,7 @@ ItemDef( description: "Rough cloth bracelets provide a stylish fashion statement, dyed blue.", kind: Armor(( kind: Hand, - stats: ( - ), + stats: FromSet("Cloth Blue"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/cloth_blue/pants.ron b/assets/common/items/armor/cloth_blue/pants.ron index 464eed3c06..180d74388a 100644 --- a/assets/common/items/armor/cloth_blue/pants.ron +++ b/assets/common/items/armor/cloth_blue/pants.ron @@ -3,9 +3,7 @@ ItemDef( description: "A stylish, rough fabric skirt, dyed blue.", kind: Armor(( kind: Pants, - stats: ( - protection: Some(Normal(1.0)), - ), + stats: FromSet("Cloth Blue"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/cloth_blue/shoulder_0.ron b/assets/common/items/armor/cloth_blue/shoulder_0.ron index fdc31a93de..a9aefee0e2 100644 --- a/assets/common/items/armor/cloth_blue/shoulder_0.ron +++ b/assets/common/items/armor/cloth_blue/shoulder_0.ron @@ -3,9 +3,7 @@ ItemDef( description: "A rough fabric coat, dyed blue.", kind: Armor(( kind: Shoulder, - stats: ( - protection: Some(Normal(1.0)), - ), + stats: FromSet("Cloth Blue"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/cloth_blue/shoulder_1.ron b/assets/common/items/armor/cloth_blue/shoulder_1.ron index e6c0c16b8c..15c781c7e1 100644 --- a/assets/common/items/armor/cloth_blue/shoulder_1.ron +++ b/assets/common/items/armor/cloth_blue/shoulder_1.ron @@ -3,9 +3,7 @@ ItemDef( description: "Simple shoulderpads made from blue cloth.", kind: Armor(( kind: Shoulder, - stats: ( - protection: Some(Normal(1.0)), - ), + stats: FromSet("Cloth Blue"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/cloth_green/belt.ron b/assets/common/items/armor/cloth_green/belt.ron index ea0a20c3f9..9197a6a3ba 100644 --- a/assets/common/items/armor/cloth_green/belt.ron +++ b/assets/common/items/armor/cloth_green/belt.ron @@ -3,9 +3,7 @@ ItemDef( description: "A stylish rough fabric belt, dyed green.", kind: Armor(( kind: Belt, - stats: ( - protection: Some(Normal(1.0)), - ), + stats: FromSet("Cloth Green"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/cloth_green/chest.ron b/assets/common/items/armor/cloth_green/chest.ron index 2cd14c3f97..755326baac 100644 --- a/assets/common/items/armor/cloth_green/chest.ron +++ b/assets/common/items/armor/cloth_green/chest.ron @@ -3,9 +3,7 @@ ItemDef( description: "A stylish rough fabric surcoat, dyed green.", kind: Armor(( kind: Chest, - stats: ( - protection: Some(Normal(1.0)), - ), + stats: FromSet("Cloth Green"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/cloth_green/foot.ron b/assets/common/items/armor/cloth_green/foot.ron index 48bb9b1e22..f215777783 100644 --- a/assets/common/items/armor/cloth_green/foot.ron +++ b/assets/common/items/armor/cloth_green/foot.ron @@ -3,8 +3,7 @@ ItemDef( description: "Cobbled rough fabric boots, dyed green.", kind: Armor(( kind: Foot, - stats: ( - ), + stats: FromSet("Cloth Green"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/cloth_green/hand.ron b/assets/common/items/armor/cloth_green/hand.ron index 8101005912..816e634156 100644 --- a/assets/common/items/armor/cloth_green/hand.ron +++ b/assets/common/items/armor/cloth_green/hand.ron @@ -3,8 +3,7 @@ ItemDef( description: "Rough cloth bracelets provide a stylish fashion statement, dyed green.", kind: Armor(( kind: Hand, - stats: ( - ), + stats: FromSet("Cloth Green"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/cloth_green/pants.ron b/assets/common/items/armor/cloth_green/pants.ron index 7670a2d559..1bc22bbd4f 100644 --- a/assets/common/items/armor/cloth_green/pants.ron +++ b/assets/common/items/armor/cloth_green/pants.ron @@ -3,9 +3,7 @@ ItemDef( description: "A stylish, rough fabric skirt, dyed green.", kind: Armor(( kind: Pants, - stats: ( - protection: Some(Normal(1.0)), - ), + stats: FromSet("Cloth Green"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/cloth_green/shoulder.ron b/assets/common/items/armor/cloth_green/shoulder.ron index 9c0ca61e10..252bd5c2d9 100644 --- a/assets/common/items/armor/cloth_green/shoulder.ron +++ b/assets/common/items/armor/cloth_green/shoulder.ron @@ -3,9 +3,7 @@ ItemDef( description: "A rough fabric coat, dyed green.", kind: Armor(( kind: Shoulder, - stats: ( - protection: Some(Normal(1.0)), - ), + stats: FromSet("Cloth Green"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/cloth_purple/belt.ron b/assets/common/items/armor/cloth_purple/belt.ron index c8bdd00660..a67f23bf81 100644 --- a/assets/common/items/armor/cloth_purple/belt.ron +++ b/assets/common/items/armor/cloth_purple/belt.ron @@ -3,9 +3,7 @@ ItemDef( description: "A stylish rough fabric belt, dyed purple.", kind: Armor(( kind: Belt, - stats: ( - protection: Some(Normal(1.0)), - ), + stats: FromSet("Cloth Purple"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/cloth_purple/chest.ron b/assets/common/items/armor/cloth_purple/chest.ron index 49fd67f1fc..a470bfb153 100644 --- a/assets/common/items/armor/cloth_purple/chest.ron +++ b/assets/common/items/armor/cloth_purple/chest.ron @@ -3,9 +3,7 @@ ItemDef( description: "A stylish rough fabric surcoat, dyed purple.", kind: Armor(( kind: Chest, - stats: ( - protection: Some(Normal(1.0)), - ), + stats: FromSet("Cloth Purple"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/cloth_purple/foot.ron b/assets/common/items/armor/cloth_purple/foot.ron index e708eea7bc..9d2dc25c3b 100644 --- a/assets/common/items/armor/cloth_purple/foot.ron +++ b/assets/common/items/armor/cloth_purple/foot.ron @@ -3,8 +3,7 @@ ItemDef( description: "Cobbled rough fabric boots, dyed purple.", kind: Armor(( kind: Foot, - stats: ( - ), + stats: FromSet("Cloth Purple"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/cloth_purple/hand.ron b/assets/common/items/armor/cloth_purple/hand.ron index c41b8e21d0..8df308c1ef 100644 --- a/assets/common/items/armor/cloth_purple/hand.ron +++ b/assets/common/items/armor/cloth_purple/hand.ron @@ -3,8 +3,7 @@ ItemDef( description: "Rough cloth bracelets provide a stylish fashion statement, dyed purple.", kind: Armor(( kind: Hand, - stats: ( - ), + stats: FromSet("Cloth Purple"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/cloth_purple/pants.ron b/assets/common/items/armor/cloth_purple/pants.ron index 04b9b81f88..aa88a3e3ca 100644 --- a/assets/common/items/armor/cloth_purple/pants.ron +++ b/assets/common/items/armor/cloth_purple/pants.ron @@ -3,9 +3,7 @@ ItemDef( description: "A stylish, rough fabric skirt, dyed purple.", kind: Armor(( kind: Pants, - stats: ( - protection: Some(Normal(1.0)), - ), + stats: FromSet("Cloth Purple"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/cloth_purple/shoulder.ron b/assets/common/items/armor/cloth_purple/shoulder.ron index a4b562055d..f4fc7da738 100644 --- a/assets/common/items/armor/cloth_purple/shoulder.ron +++ b/assets/common/items/armor/cloth_purple/shoulder.ron @@ -3,9 +3,7 @@ ItemDef( description: "A rough fabric coat, dyed purple.", kind: Armor(( kind: Shoulder, - stats: ( - protection: Some(Normal(1.0)), - ), + stats: FromSet("Cloth Purple"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/cultist/bandana.ron b/assets/common/items/armor/cultist/bandana.ron index d3b492fd38..028318def2 100644 --- a/assets/common/items/armor/cultist/bandana.ron +++ b/assets/common/items/armor/cultist/bandana.ron @@ -3,14 +3,14 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( protection: Some(Normal(8.0)), poise_resilience: Some(Normal(1.0)), energy_max: Some(2.0), energy_reward: Some(0.025), crit_power: Some(0.01), stealth: Some(0.04), - ), + )), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/cultist/belt.ron b/assets/common/items/armor/cultist/belt.ron index 8603c7580e..3cc9661407 100644 --- a/assets/common/items/armor/cultist/belt.ron +++ b/assets/common/items/armor/cultist/belt.ron @@ -3,14 +3,7 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Belt, - stats: ( - protection: Some(Normal(8.0)), - poise_resilience: Some(Normal(1.0)), - energy_max: Some(2.0), - energy_reward: Some(0.025), - crit_power: Some(0.02), - stealth: Some(0.02), - ), + stats: FromSet("Cultist"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/cultist/chest.ron b/assets/common/items/armor/cultist/chest.ron index 4724079176..4dae8cda0b 100644 --- a/assets/common/items/armor/cultist/chest.ron +++ b/assets/common/items/armor/cultist/chest.ron @@ -3,14 +3,7 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Chest, - stats: ( - protection: Some(Normal(44.0)), - poise_resilience: Some(Normal(5.0)), - energy_max: Some(13.5), - energy_reward: Some(0.135), - crit_power: Some(0.125), - stealth: Some(0.125), - ), + stats: FromSet("Cultist"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/cultist/foot.ron b/assets/common/items/armor/cultist/foot.ron index a47adba653..567163434e 100644 --- a/assets/common/items/armor/cultist/foot.ron +++ b/assets/common/items/armor/cultist/foot.ron @@ -3,14 +3,7 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Foot, - stats: ( - protection: Some(Normal(16.0)), - poise_resilience: Some(Normal(2.0)), - energy_max: Some(4.5), - energy_reward: Some(0.045), - crit_power: Some(0.04), - stealth: Some(0.04), - ), + stats: FromSet("Cultist"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/cultist/hand.ron b/assets/common/items/armor/cultist/hand.ron index 8609194829..90d48879ae 100644 --- a/assets/common/items/armor/cultist/hand.ron +++ b/assets/common/items/armor/cultist/hand.ron @@ -3,14 +3,7 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Hand, - stats: ( - protection: Some(Normal(16.0)), - poise_resilience: Some(Normal(2.0)), - energy_max: Some(4.5), - energy_reward: Some(0.045), - crit_power: Some(0.04), - stealth: Some(0.04), - ), + stats: FromSet("Cultist"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/cultist/necklace.ron b/assets/common/items/armor/cultist/necklace.ron index 371b2ad6a2..e33300f2e1 100644 --- a/assets/common/items/armor/cultist/necklace.ron +++ b/assets/common/items/armor/cultist/necklace.ron @@ -3,12 +3,12 @@ ItemDef( description: "You can still feel the Mindflayer's presence within this amulet...", kind: Armor(( kind: Neck, - stats: ( + stats: Direct(( protection: Some(Normal(2.0)), energy_max: Some(4.5), energy_reward: Some(0.05), crit_power: Some(0.03), - ), + )), )), quality: Epic, tags: [], diff --git a/assets/common/items/armor/cultist/pants.ron b/assets/common/items/armor/cultist/pants.ron index 54360a1464..79540e02ea 100644 --- a/assets/common/items/armor/cultist/pants.ron +++ b/assets/common/items/armor/cultist/pants.ron @@ -3,14 +3,7 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Pants, - stats: ( - protection: Some(Normal(30.0)), - poise_resilience: Some(Normal(4.0)), - energy_max: Some(9.0), - energy_reward: Some(0.1), - crit_power: Some(0.08), - stealth: Some(0.08), - ), + stats: FromSet("Cultist"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/cultist/ring.ron b/assets/common/items/armor/cultist/ring.ron index faef387548..2114360af3 100644 --- a/assets/common/items/armor/cultist/ring.ron +++ b/assets/common/items/armor/cultist/ring.ron @@ -3,12 +3,12 @@ ItemDef( description: "Once belonged to a cultist.", kind: Armor(( kind: Ring, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), energy_max: Some(5), energy_reward: Some(0.025), crit_power: Some(0.02), - ), + )), )), quality: Epic, tags: [], diff --git a/assets/common/items/armor/cultist/shoulder.ron b/assets/common/items/armor/cultist/shoulder.ron index 6a0cb8d03d..09bba89e87 100644 --- a/assets/common/items/armor/cultist/shoulder.ron +++ b/assets/common/items/armor/cultist/shoulder.ron @@ -3,14 +3,7 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Shoulder, - stats: ( - protection: Some(Normal(30.0)), - poise_resilience: Some(Normal(5.0)), - energy_max: Some(9.0), - energy_reward: Some(0.1), - crit_power: Some(0.08), - stealth: Some(0.08), - ), + stats: FromSet("Cultist"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/ferocious/back.ron b/assets/common/items/armor/ferocious/back.ron index 8114b4237d..0cbfc6bb6d 100644 --- a/assets/common/items/armor/ferocious/back.ron +++ b/assets/common/items/armor/ferocious/back.ron @@ -3,9 +3,7 @@ ItemDef( description: "The dark side of nature", kind: Armor(( kind: Back, - stats: ( - protection: Some(Normal(6.0)), - ), + stats: FromSet("Ferocious"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/ferocious/belt.ron b/assets/common/items/armor/ferocious/belt.ron index e893b940c2..6cc72fa7f6 100644 --- a/assets/common/items/armor/ferocious/belt.ron +++ b/assets/common/items/armor/ferocious/belt.ron @@ -3,9 +3,7 @@ ItemDef( description: "The dark side of nature", kind: Armor(( kind: Belt, - stats: ( - protection: Some(Normal(12.0)), - ), + stats: FromSet("Ferocious"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/ferocious/chest.ron b/assets/common/items/armor/ferocious/chest.ron index bc3476f3b3..4e3efd16d5 100644 --- a/assets/common/items/armor/ferocious/chest.ron +++ b/assets/common/items/armor/ferocious/chest.ron @@ -3,9 +3,7 @@ ItemDef( description: "The dark side of nature", kind: Armor(( kind: Chest, - stats: ( - protection: Some(Normal(60.0)), - ), + stats: FromSet("Ferocious"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/ferocious/foot.ron b/assets/common/items/armor/ferocious/foot.ron index eda365f1c4..47d5b25fdc 100644 --- a/assets/common/items/armor/ferocious/foot.ron +++ b/assets/common/items/armor/ferocious/foot.ron @@ -3,9 +3,7 @@ ItemDef( description: "The dark side of nature", kind: Armor(( kind: Foot, - stats: ( - protection: Some(Normal(12.0)), - ), + stats: FromSet("Ferocious"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/ferocious/hand.ron b/assets/common/items/armor/ferocious/hand.ron index 821d94d7c5..84125c4ac0 100644 --- a/assets/common/items/armor/ferocious/hand.ron +++ b/assets/common/items/armor/ferocious/hand.ron @@ -3,9 +3,7 @@ ItemDef( description: "The dark side of nature", kind: Armor(( kind: Hand, - stats: ( - protection: Some(Normal(24.0)), - ), + stats: FromSet("Ferocious"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/ferocious/pants.ron b/assets/common/items/armor/ferocious/pants.ron index 34a4b19f4f..3b60a847d9 100644 --- a/assets/common/items/armor/ferocious/pants.ron +++ b/assets/common/items/armor/ferocious/pants.ron @@ -3,9 +3,7 @@ ItemDef( description: "The dark side of nature", kind: Armor(( kind: Pants, - stats: ( - protection: Some(Normal(48.0)), - ), + stats: FromSet("Ferocious"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/ferocious/shoulder.ron b/assets/common/items/armor/ferocious/shoulder.ron index bca663ee2d..83c30c030d 100644 --- a/assets/common/items/armor/ferocious/shoulder.ron +++ b/assets/common/items/armor/ferocious/shoulder.ron @@ -3,9 +3,7 @@ ItemDef( description: "The dark side of nature", kind: Armor(( kind: Shoulder, - stats: ( - protection: Some(Normal(36.0)), - ), + stats: FromSet("Ferocious"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/hide/carapace/back.ron b/assets/common/items/armor/hide/carapace/back.ron index bf409190ca..da04e5f403 100644 --- a/assets/common/items/armor/hide/carapace/back.ron +++ b/assets/common/items/armor/hide/carapace/back.ron @@ -3,11 +3,7 @@ ItemDef( description: "Made from the shell that once shielded a beast.", kind: Armor(( kind: Back, - stats: ( - protection: Some(Normal(5.0)), - crit_power: Some(0.067), - stealth: Some(0.067), - ), + stats: FromSet("Carapace"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/hide/carapace/belt.ron b/assets/common/items/armor/hide/carapace/belt.ron index ced5190a65..fe1982f927 100644 --- a/assets/common/items/armor/hide/carapace/belt.ron +++ b/assets/common/items/armor/hide/carapace/belt.ron @@ -3,11 +3,7 @@ ItemDef( description: "Made from the shell that once shielded a beast.", kind: Armor(( kind: Belt, - stats: ( - protection: Some(Normal(5.0)), - crit_power: Some(0.067), - stealth: Some(0.067), - ), + stats: FromSet("Carapace"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/hide/carapace/chest.ron b/assets/common/items/armor/hide/carapace/chest.ron index a70dae5758..7483ef8ce1 100644 --- a/assets/common/items/armor/hide/carapace/chest.ron +++ b/assets/common/items/armor/hide/carapace/chest.ron @@ -3,11 +3,7 @@ ItemDef( description: "Made from the shell that once shielded a beast.", kind: Armor(( kind: Chest, - stats: ( - protection: Some(Normal(29.0)), - crit_power: Some(0.399), - stealth: Some(0.399), - ), + stats: FromSet("Carapace"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/hide/carapace/foot.ron b/assets/common/items/armor/hide/carapace/foot.ron index 9cf5f29847..5d57b06ab4 100644 --- a/assets/common/items/armor/hide/carapace/foot.ron +++ b/assets/common/items/armor/hide/carapace/foot.ron @@ -3,11 +3,7 @@ ItemDef( description: "Made from the shell that once shielded a beast.", kind: Armor(( kind: Foot, - stats: ( - protection: Some(Normal(10.0)), - crit_power: Some(0.133), - stealth: Some(0.133), - ), + stats: FromSet("Carapace"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/hide/carapace/hand.ron b/assets/common/items/armor/hide/carapace/hand.ron index fc51b424da..eacb63bc8c 100644 --- a/assets/common/items/armor/hide/carapace/hand.ron +++ b/assets/common/items/armor/hide/carapace/hand.ron @@ -3,11 +3,7 @@ ItemDef( description: "Made from the shell that once shielded a beast.", kind: Armor(( kind: Hand, - stats: ( - protection: Some(Normal(10.0)), - crit_power: Some(0.133), - stealth: Some(0.133), - ), + stats: FromSet("Carapace"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/hide/carapace/pants.ron b/assets/common/items/armor/hide/carapace/pants.ron index bc810a5033..0cbbe046cc 100644 --- a/assets/common/items/armor/hide/carapace/pants.ron +++ b/assets/common/items/armor/hide/carapace/pants.ron @@ -3,11 +3,7 @@ ItemDef( description: "Made from the shell that once shielded a beast.", kind: Armor(( kind: Pants, - stats: ( - protection: Some(Normal(19.0)), - crit_power: Some(0.266), - stealth: Some(0.266), - ), + stats: FromSet("Carapace"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/hide/carapace/shoulder.ron b/assets/common/items/armor/hide/carapace/shoulder.ron index b305dace7d..9796dc072c 100644 --- a/assets/common/items/armor/hide/carapace/shoulder.ron +++ b/assets/common/items/armor/hide/carapace/shoulder.ron @@ -3,11 +3,7 @@ ItemDef( description: "Made from the shell that once shielded a beast.", kind: Armor(( kind: Shoulder, - stats: ( - protection: Some(Normal(19.0)), - crit_power: Some(0.266), - stealth: Some(0.266), - ), + stats: FromSet("Carapace"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/hide/dragonscale/back.ron b/assets/common/items/armor/hide/dragonscale/back.ron index c0a0e654b2..febd71ef5e 100644 --- a/assets/common/items/armor/hide/dragonscale/back.ron +++ b/assets/common/items/armor/hide/dragonscale/back.ron @@ -3,11 +3,7 @@ ItemDef( description: "Crafted from the scales of a legendary creature, power can be felt pulsing through it.", kind: Armor(( kind: Back, - stats: ( - protection: Some(Normal(7.0)), - crit_power: Some(0.1), - stealth: Some(0.1), - ), + stats: FromSet("Dragonscale"), )), quality: Legendary, tags: [ diff --git a/assets/common/items/armor/hide/dragonscale/belt.ron b/assets/common/items/armor/hide/dragonscale/belt.ron index 723b552d7a..db4f9e90d8 100644 --- a/assets/common/items/armor/hide/dragonscale/belt.ron +++ b/assets/common/items/armor/hide/dragonscale/belt.ron @@ -3,11 +3,7 @@ ItemDef( description: "Crafted from the scales of a legendary creature, power can be felt pulsing through it.", kind: Armor(( kind: Belt, - stats: ( - protection: Some(Normal(7.0)), - crit_power: Some(0.1), - stealth: Some(0.1), - ), + stats: FromSet("Dragonscale"), )), quality: Legendary, tags: [ diff --git a/assets/common/items/armor/hide/dragonscale/chest.ron b/assets/common/items/armor/hide/dragonscale/chest.ron index fdf6cd64b3..5a90705f8d 100644 --- a/assets/common/items/armor/hide/dragonscale/chest.ron +++ b/assets/common/items/armor/hide/dragonscale/chest.ron @@ -3,11 +3,7 @@ ItemDef( description: "Crafted from the scales of a legendary creature, power can be felt pulsing through it.", kind: Armor(( kind: Chest, - stats: ( - protection: Some(Normal(42.0)), - crit_power: Some(0.6), - stealth: Some(0.6), - ), + stats: FromSet("Dragonscale"), )), quality: Legendary, tags: [ diff --git a/assets/common/items/armor/hide/dragonscale/foot.ron b/assets/common/items/armor/hide/dragonscale/foot.ron index 8153c83f96..98315fbc8a 100644 --- a/assets/common/items/armor/hide/dragonscale/foot.ron +++ b/assets/common/items/armor/hide/dragonscale/foot.ron @@ -3,11 +3,7 @@ ItemDef( description: "Crafted from the scales of a legendary creature, power can be felt pulsing through it.", kind: Armor(( kind: Foot, - stats: ( - protection: Some(Normal(14.0)), - crit_power: Some(0.2), - stealth: Some(0.2), - ), + stats: FromSet("Dragonscale"), )), quality: Legendary, tags: [ diff --git a/assets/common/items/armor/hide/dragonscale/hand.ron b/assets/common/items/armor/hide/dragonscale/hand.ron index c62d11a6a3..01f2bd728d 100644 --- a/assets/common/items/armor/hide/dragonscale/hand.ron +++ b/assets/common/items/armor/hide/dragonscale/hand.ron @@ -3,11 +3,7 @@ ItemDef( description: "Crafted from the scales of a legendary creature, power can be felt pulsing through it.", kind: Armor(( kind: Hand, - stats: ( - protection: Some(Normal(14.0)), - crit_power: Some(0.2), - stealth: Some(0.2), - ), + stats: FromSet("Dragonscale"), )), quality: Legendary, tags: [ diff --git a/assets/common/items/armor/hide/dragonscale/pants.ron b/assets/common/items/armor/hide/dragonscale/pants.ron index 188102448a..28f68ced8e 100644 --- a/assets/common/items/armor/hide/dragonscale/pants.ron +++ b/assets/common/items/armor/hide/dragonscale/pants.ron @@ -3,11 +3,7 @@ ItemDef( description: "Crafted from the scales of a legendary creature, power can be felt pulsing through it.", kind: Armor(( kind: Pants, - stats: ( - protection: Some(Normal(28.0)), - crit_power: Some(0.4), - stealth: Some(0.4), - ), + stats: FromSet("Dragonscale"), )), quality: Legendary, tags: [ diff --git a/assets/common/items/armor/hide/dragonscale/shoulder.ron b/assets/common/items/armor/hide/dragonscale/shoulder.ron index 63f7256c49..3b320fb5f4 100644 --- a/assets/common/items/armor/hide/dragonscale/shoulder.ron +++ b/assets/common/items/armor/hide/dragonscale/shoulder.ron @@ -3,11 +3,7 @@ ItemDef( description: "Crafted from the scales of a legendary creature, power can be felt pulsing through it.", kind: Armor(( kind: Shoulder, - stats: ( - protection: Some(Normal(28.0)), - crit_power: Some(0.4), - stealth: Some(0.4), - ), + stats: FromSet("Dragonscale"), )), quality: Legendary, tags: [ diff --git a/assets/common/items/armor/hide/leather/back.ron b/assets/common/items/armor/hide/leather/back.ron index 4adc1ff818..0b75471cca 100644 --- a/assets/common/items/armor/hide/leather/back.ron +++ b/assets/common/items/armor/hide/leather/back.ron @@ -3,11 +3,7 @@ ItemDef( description: "Swift like the wind.", kind: Armor(( kind: Back, - stats: ( - protection: Some(Normal(2.0)), - crit_power: Some(0.034), - stealth: Some(0.034), - ), + stats: FromSet("Leather"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/hide/leather/belt.ron b/assets/common/items/armor/hide/leather/belt.ron index f81cbf10b9..d99194f516 100644 --- a/assets/common/items/armor/hide/leather/belt.ron +++ b/assets/common/items/armor/hide/leather/belt.ron @@ -3,11 +3,7 @@ ItemDef( description: "Swift like the wind.", kind: Armor(( kind: Belt, - stats: ( - protection: Some(Normal(2.0)), - crit_power: Some(0.034), - stealth: Some(0.034), - ), + stats: FromSet("Leather"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/hide/leather/chest.ron b/assets/common/items/armor/hide/leather/chest.ron index ad761240a8..eb02994efe 100644 --- a/assets/common/items/armor/hide/leather/chest.ron +++ b/assets/common/items/armor/hide/leather/chest.ron @@ -3,11 +3,7 @@ ItemDef( description: "Swift like the wind.", kind: Armor(( kind: Chest, - stats: ( - protection: Some(Normal(14.0)), - crit_power: Some(0.201), - stealth: Some(0.034), - ), + stats: FromSet("Leather"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/hide/leather/foot.ron b/assets/common/items/armor/hide/leather/foot.ron index 14f021d493..3feb9ba69f 100644 --- a/assets/common/items/armor/hide/leather/foot.ron +++ b/assets/common/items/armor/hide/leather/foot.ron @@ -3,11 +3,7 @@ ItemDef( description: "Swift like the wind.", kind: Armor(( kind: Foot, - stats: ( - protection: Some(Normal(5.0)), - crit_power: Some(0.067), - stealth: Some(0.067), - ), + stats: FromSet("Leather"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/hide/leather/hand.ron b/assets/common/items/armor/hide/leather/hand.ron index 2a926909c7..02ed49162c 100644 --- a/assets/common/items/armor/hide/leather/hand.ron +++ b/assets/common/items/armor/hide/leather/hand.ron @@ -3,11 +3,7 @@ ItemDef( description: "Swift like the wind.", kind: Armor(( kind: Hand, - stats: ( - protection: Some(Normal(5.0)), - crit_power: Some(0.067), - stealth: Some(0.067), - ), + stats: FromSet("Leather"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/hide/leather/head.ron b/assets/common/items/armor/hide/leather/head.ron index 2aebcd5cf3..03f079baf0 100644 --- a/assets/common/items/armor/hide/leather/head.ron +++ b/assets/common/items/armor/hide/leather/head.ron @@ -3,9 +3,9 @@ ItemDef( description: "Swift like the wind.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), - ), + )), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/hide/leather/pants.ron b/assets/common/items/armor/hide/leather/pants.ron index 7d5a76f157..3be47c210b 100644 --- a/assets/common/items/armor/hide/leather/pants.ron +++ b/assets/common/items/armor/hide/leather/pants.ron @@ -3,11 +3,7 @@ ItemDef( description: "Swift like the wind.", kind: Armor(( kind: Pants, - stats: ( - protection: Some(Normal(10.0)), - crit_power: Some(0.134), - stealth: Some(0.134), - ), + stats: FromSet("Leather"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/hide/leather/shoulder.ron b/assets/common/items/armor/hide/leather/shoulder.ron index f2413abcc2..244df35fe3 100644 --- a/assets/common/items/armor/hide/leather/shoulder.ron +++ b/assets/common/items/armor/hide/leather/shoulder.ron @@ -3,11 +3,7 @@ ItemDef( description: "Swift like the wind.", kind: Armor(( kind: Shoulder, - stats: ( - protection: Some(Normal(10.0)), - crit_power: Some(0.134), - stealth: Some(0.134), - ), + stats: FromSet("Leather"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/hide/primal/back.ron b/assets/common/items/armor/hide/primal/back.ron index 624641ad03..bcf2e5f20c 100644 --- a/assets/common/items/armor/hide/primal/back.ron +++ b/assets/common/items/armor/hide/primal/back.ron @@ -3,11 +3,7 @@ ItemDef( description: "Smithed from hide tougher than steel.", kind: Armor(( kind: Back, - stats: ( - protection: Some(Normal(6.0)), - crit_power: Some(0.084), - stealth: Some(0.084), - ), + stats: FromSet("Plate"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/hide/primal/belt.ron b/assets/common/items/armor/hide/primal/belt.ron index 2387669ada..fe5c4c22b6 100644 --- a/assets/common/items/armor/hide/primal/belt.ron +++ b/assets/common/items/armor/hide/primal/belt.ron @@ -3,11 +3,7 @@ ItemDef( description: "Smithed from hide tougher than steel.", kind: Armor(( kind: Belt, - stats: ( - protection: Some(Normal(6.0)), - crit_power: Some(0.084), - stealth: Some(0.084), - ), + stats: FromSet("Plate"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/hide/primal/chest.ron b/assets/common/items/armor/hide/primal/chest.ron index 4ac6f833d2..c560c76059 100644 --- a/assets/common/items/armor/hide/primal/chest.ron +++ b/assets/common/items/armor/hide/primal/chest.ron @@ -3,11 +3,7 @@ ItemDef( description: "Smithed from hide tougher than steel.", kind: Armor(( kind: Chest, - stats: ( - protection: Some(Normal(36.0)), - crit_power: Some(0.501), - stealth: Some(0.501), - ), + stats: FromSet("Plate"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/hide/primal/foot.ron b/assets/common/items/armor/hide/primal/foot.ron index 3f905de0b2..65b5179465 100644 --- a/assets/common/items/armor/hide/primal/foot.ron +++ b/assets/common/items/armor/hide/primal/foot.ron @@ -3,11 +3,7 @@ ItemDef( description: "Smithed from hide tougher than steel.", kind: Armor(( kind: Foot, - stats: ( - protection: Some(Normal(12.0)), - crit_power: Some(0.167), - stealth: Some(0.167), - ), + stats: FromSet("Plate"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/hide/primal/hand.ron b/assets/common/items/armor/hide/primal/hand.ron index 806f857ba7..f8de941d8f 100644 --- a/assets/common/items/armor/hide/primal/hand.ron +++ b/assets/common/items/armor/hide/primal/hand.ron @@ -3,11 +3,7 @@ ItemDef( description: "Smithed from hide tougher than steel.", kind: Armor(( kind: Hand, - stats: ( - protection: Some(Normal(12.0)), - crit_power: Some(0.167), - stealth: Some(0.167), - ), + stats: FromSet("Plate"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/hide/primal/pants.ron b/assets/common/items/armor/hide/primal/pants.ron index f196b279c1..35459d5f75 100644 --- a/assets/common/items/armor/hide/primal/pants.ron +++ b/assets/common/items/armor/hide/primal/pants.ron @@ -3,11 +3,7 @@ ItemDef( description: "Smithed from hide tougher than steel.", kind: Armor(( kind: Pants, - stats: ( - protection: Some(Normal(24.0)), - crit_power: Some(0.334), - stealth: Some(0.334), - ), + stats: FromSet("Plate"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/hide/primal/shoulder.ron b/assets/common/items/armor/hide/primal/shoulder.ron index e8251e45e6..0bcc44707a 100644 --- a/assets/common/items/armor/hide/primal/shoulder.ron +++ b/assets/common/items/armor/hide/primal/shoulder.ron @@ -3,11 +3,7 @@ ItemDef( description: "Smithed from hide tougher than steel.", kind: Armor(( kind: Shoulder, - stats: ( - protection: Some(Normal(24.0)), - crit_power: Some(0.334), - stealth: Some(0.334), - ), + stats: FromSet("Plate"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/hide/rawhide/back.ron b/assets/common/items/armor/hide/rawhide/back.ron index 8a2e4249dc..9e2305d5dc 100644 --- a/assets/common/items/armor/hide/rawhide/back.ron +++ b/assets/common/items/armor/hide/rawhide/back.ron @@ -3,11 +3,7 @@ ItemDef( description: "Tightly packed pieces of leather. Light-weight and sturdy!", kind: Armor(( kind: Back, - stats: ( - protection: Some(Normal(1.0)), - crit_power: Some(0.017), - stealth: Some(0.017), - ), + stats: FromSet("Rawhide"), )), quality: Low, tags: [ diff --git a/assets/common/items/armor/hide/rawhide/belt.ron b/assets/common/items/armor/hide/rawhide/belt.ron index cff903dc18..0b07a3ea1b 100644 --- a/assets/common/items/armor/hide/rawhide/belt.ron +++ b/assets/common/items/armor/hide/rawhide/belt.ron @@ -3,11 +3,7 @@ ItemDef( description: "Tightly packed pieces of leather. Light-weight and sturdy!", kind: Armor(( kind: Belt, - stats: ( - protection: Some(Normal(1.0)), - crit_power: Some(0.017), - stealth: Some(0.017), - ), + stats: FromSet("Rawhide"), )), quality: Low, tags: [ diff --git a/assets/common/items/armor/hide/rawhide/chest.ron b/assets/common/items/armor/hide/rawhide/chest.ron index de9acc653a..1b4aa2ea12 100644 --- a/assets/common/items/armor/hide/rawhide/chest.ron +++ b/assets/common/items/armor/hide/rawhide/chest.ron @@ -3,11 +3,7 @@ ItemDef( description: "Tightly packed pieces of leather. Light-weight and sturdy!", kind: Armor(( kind: Chest, - stats: ( - protection: Some(Normal(7.0)), - crit_power: Some(0.099), - stealth: Some(0.099), - ), + stats: FromSet("Rawhide"), )), quality: Low, tags: [ diff --git a/assets/common/items/armor/hide/rawhide/foot.ron b/assets/common/items/armor/hide/rawhide/foot.ron index 5a1ebb8d19..cfde177e58 100644 --- a/assets/common/items/armor/hide/rawhide/foot.ron +++ b/assets/common/items/armor/hide/rawhide/foot.ron @@ -3,11 +3,7 @@ ItemDef( description: "Tightly packed pieces of leather. Light-weight and sturdy!", kind: Armor(( kind: Foot, - stats: ( - protection: Some(Normal(2.0)), - crit_power: Some(0.033), - stealth: Some(0.033), - ), + stats: FromSet("Rawhide"), )), quality: Low, tags: [ diff --git a/assets/common/items/armor/hide/rawhide/hand.ron b/assets/common/items/armor/hide/rawhide/hand.ron index d039162e12..077bdb8cf5 100644 --- a/assets/common/items/armor/hide/rawhide/hand.ron +++ b/assets/common/items/armor/hide/rawhide/hand.ron @@ -3,11 +3,7 @@ ItemDef( description: "Tightly packed pieces of leather. Light-weight and sturdy!", kind: Armor(( kind: Hand, - stats: ( - protection: Some(Normal(2.0)), - crit_power: Some(0.033), - stealth: Some(0.033), - ), + stats: FromSet("Rawhide"), )), quality: Low, tags: [ diff --git a/assets/common/items/armor/hide/rawhide/pants.ron b/assets/common/items/armor/hide/rawhide/pants.ron index 4721844289..7c61204d04 100644 --- a/assets/common/items/armor/hide/rawhide/pants.ron +++ b/assets/common/items/armor/hide/rawhide/pants.ron @@ -3,11 +3,7 @@ ItemDef( description: "Tightly packed pieces of leather. Light-weight and sturdy!", kind: Armor(( kind: Pants, - stats: ( - protection: Some(Normal(5.0)), - crit_power: Some(0.066), - stealth: Some(0.066), - ), + stats: FromSet("Rawhide"), )), quality: Low, tags: [ diff --git a/assets/common/items/armor/hide/rawhide/shoulder.ron b/assets/common/items/armor/hide/rawhide/shoulder.ron index 1f224706a4..39384b414b 100644 --- a/assets/common/items/armor/hide/rawhide/shoulder.ron +++ b/assets/common/items/armor/hide/rawhide/shoulder.ron @@ -3,11 +3,7 @@ ItemDef( description: "Tightly packed pieces of leather. Light-weight and sturdy!", kind: Armor(( kind: Shoulder, - stats: ( - protection: Some(Normal(5.0)), - crit_power: Some(0.066), - stealth: Some(0.066), - ), + stats: FromSet("Rawhide"), )), quality: Low, tags: [ diff --git a/assets/common/items/armor/hide/scale/back.ron b/assets/common/items/armor/hide/scale/back.ron index 70f4a4c797..d7d2149b22 100644 --- a/assets/common/items/armor/hide/scale/back.ron +++ b/assets/common/items/armor/hide/scale/back.ron @@ -3,11 +3,7 @@ ItemDef( description: "Each embedded scale provides additional protection.", kind: Armor(( kind: Back, - stats: ( - protection: Some(Normal(4.0)), - crit_power: Some(0.05), - stealth: Some(0.05), - ), + stats: FromSet("Scale"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/hide/scale/belt.ron b/assets/common/items/armor/hide/scale/belt.ron index 5f89b47c5a..ac50922579 100644 --- a/assets/common/items/armor/hide/scale/belt.ron +++ b/assets/common/items/armor/hide/scale/belt.ron @@ -3,11 +3,7 @@ ItemDef( description: "Each embedded scale provides additional protection.", kind: Armor(( kind: Belt, - stats: ( - protection: Some(Normal(4.0)), - crit_power: Some(0.05), - stealth: Some(0.05), - ), + stats: FromSet("Scale"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/hide/scale/chest.ron b/assets/common/items/armor/hide/scale/chest.ron index 429d1e3b9c..fd63d11048 100644 --- a/assets/common/items/armor/hide/scale/chest.ron +++ b/assets/common/items/armor/hide/scale/chest.ron @@ -3,11 +3,7 @@ ItemDef( description: "Each embedded scale provides additional protection.", kind: Armor(( kind: Chest, - stats: ( - protection: Some(Normal(21.0)), - crit_power: Some(0.3), - stealth: Some(0.3), - ), + stats: FromSet("Scale"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/hide/scale/foot.ron b/assets/common/items/armor/hide/scale/foot.ron index 12d59c852c..fe6d4c41f0 100644 --- a/assets/common/items/armor/hide/scale/foot.ron +++ b/assets/common/items/armor/hide/scale/foot.ron @@ -3,11 +3,7 @@ ItemDef( description: "Each embedded scale provides additional protection.", kind: Armor(( kind: Foot, - stats: ( - protection: Some(Normal(7.0)), - crit_power: Some(0.1), - stealth: Some(0.1), - ), + stats: FromSet("Scale"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/hide/scale/hand.ron b/assets/common/items/armor/hide/scale/hand.ron index 60b87f77a6..1a8f5010c3 100644 --- a/assets/common/items/armor/hide/scale/hand.ron +++ b/assets/common/items/armor/hide/scale/hand.ron @@ -3,11 +3,7 @@ ItemDef( description: "Each embedded scale provides additional protection.", kind: Armor(( kind: Hand, - stats: ( - protection: Some(Normal(7.0)), - crit_power: Some(0.1), - stealth: Some(0.1), - ), + stats: FromSet("Scale"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/hide/scale/pants.ron b/assets/common/items/armor/hide/scale/pants.ron index ddb2830034..d663584755 100644 --- a/assets/common/items/armor/hide/scale/pants.ron +++ b/assets/common/items/armor/hide/scale/pants.ron @@ -3,11 +3,7 @@ ItemDef( description: "Each embedded scale provides additional protection.", kind: Armor(( kind: Pants, - stats: ( - protection: Some(Normal(14.0)), - crit_power: Some(0.2), - stealth: Some(0.2), - ), + stats: FromSet("Scale"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/hide/scale/shoulder.ron b/assets/common/items/armor/hide/scale/shoulder.ron index 8c3b210499..f36d421ce7 100644 --- a/assets/common/items/armor/hide/scale/shoulder.ron +++ b/assets/common/items/armor/hide/scale/shoulder.ron @@ -3,11 +3,7 @@ ItemDef( description: "Each embedded scale provides additional protection.", kind: Armor(( kind: Shoulder, - stats: ( - protection: Some(Normal(14.0)), - crit_power: Some(0.2), - stealth: Some(0.2), - ), + stats: FromSet("Scale"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/leather_plate/belt.ron b/assets/common/items/armor/leather_plate/belt.ron index 8d70c155b3..5d79eff754 100644 --- a/assets/common/items/armor/leather_plate/belt.ron +++ b/assets/common/items/armor/leather_plate/belt.ron @@ -3,10 +3,7 @@ ItemDef( description: "Leather adorned with steel for better protection.", kind: Armor(( kind: Belt, - stats: ( - protection: Some(Normal(8.0)), - poise_resilience: Some(Normal(2.0)), - ), + stats: FromSet("Leather Plate"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/leather_plate/chest.ron b/assets/common/items/armor/leather_plate/chest.ron index 8328aaacf6..a7c0bd954a 100644 --- a/assets/common/items/armor/leather_plate/chest.ron +++ b/assets/common/items/armor/leather_plate/chest.ron @@ -3,10 +3,7 @@ ItemDef( description: "Leather adorned with steel for better protection.", kind: Armor(( kind: Chest, - stats: ( - protection: Some(Normal(48.0)), - poise_resilience: Some(Normal(12.0)), - ), + stats: FromSet("Leather Plate"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/leather_plate/foot.ron b/assets/common/items/armor/leather_plate/foot.ron index da4c47c088..20c9a8a14b 100644 --- a/assets/common/items/armor/leather_plate/foot.ron +++ b/assets/common/items/armor/leather_plate/foot.ron @@ -3,10 +3,7 @@ ItemDef( description: "Leather adorned with steel for better protection.", kind: Armor(( kind: Foot, - stats: ( - protection: Some(Normal(16.0)), - poise_resilience: Some(Normal(4.0)), - ), + stats: FromSet("Leather Plate"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/leather_plate/hand.ron b/assets/common/items/armor/leather_plate/hand.ron index a95d29183b..ef2a25893f 100644 --- a/assets/common/items/armor/leather_plate/hand.ron +++ b/assets/common/items/armor/leather_plate/hand.ron @@ -3,10 +3,7 @@ ItemDef( description: "Leather adorned with steel for better protection.", kind: Armor(( kind: Hand, - stats: ( - protection: Some(Normal(16.0)), - poise_resilience: Some(Normal(4.0)), - ), + stats: FromSet("Leather Plate"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/leather_plate/helmet.ron b/assets/common/items/armor/leather_plate/helmet.ron index 69c56b679e..7c4c466bc4 100644 --- a/assets/common/items/armor/leather_plate/helmet.ron +++ b/assets/common/items/armor/leather_plate/helmet.ron @@ -3,10 +3,7 @@ ItemDef( description: "Leather adorned with steel for better protection.", kind: Armor(( kind: Head, - stats: ( - protection: Some(Normal(32.0)), - poise_resilience: Some(Normal(8.0)), - ), + stats: FromSet("Leather Plate"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/leather_plate/pants.ron b/assets/common/items/armor/leather_plate/pants.ron index bfbb570f39..919d6988ed 100644 --- a/assets/common/items/armor/leather_plate/pants.ron +++ b/assets/common/items/armor/leather_plate/pants.ron @@ -3,10 +3,7 @@ ItemDef( description: "Leather adorned with steel for better protection.", kind: Armor(( kind: Pants, - stats: ( - protection: Some(Normal(32.0)), - poise_resilience: Some(Normal(8.0)), - ), + stats: FromSet("Leather Plate"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/leather_plate/shoulder.ron b/assets/common/items/armor/leather_plate/shoulder.ron index 83875c2701..1359971d08 100644 --- a/assets/common/items/armor/leather_plate/shoulder.ron +++ b/assets/common/items/armor/leather_plate/shoulder.ron @@ -3,10 +3,7 @@ ItemDef( description: "Leather adorned with steel for better protection.", kind: Armor(( kind: Shoulder, - stats: ( - protection: Some(Normal(32.0)), - poise_resilience: Some(Normal(8.0)), - ), + stats: FromSet("Leather Plate"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/mail/bloodsteel/back.ron b/assets/common/items/armor/mail/bloodsteel/back.ron index bb49252326..a2c0e843ed 100644 --- a/assets/common/items/armor/mail/bloodsteel/back.ron +++ b/assets/common/items/armor/mail/bloodsteel/back.ron @@ -3,10 +3,7 @@ ItemDef( description: "Forged to preserve life, at the cost of another.", kind: Armor(( kind: Back, - stats: ( - protection: Some(Normal(10.0)), - poise_resilience: Some(Normal(2.5)), - ), + stats: FromSet("Bloodsteel"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/mail/bloodsteel/belt.ron b/assets/common/items/armor/mail/bloodsteel/belt.ron index abd65918e7..45527fc71d 100644 --- a/assets/common/items/armor/mail/bloodsteel/belt.ron +++ b/assets/common/items/armor/mail/bloodsteel/belt.ron @@ -3,10 +3,7 @@ ItemDef( description: "Forged to preserve life, at the cost of another.", kind: Armor(( kind: Belt, - stats: ( - protection: Some(Normal(10.0)), - poise_resilience: Some(Normal(2.5)), - ), + stats: FromSet("Bloodsteel"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/mail/bloodsteel/chest.ron b/assets/common/items/armor/mail/bloodsteel/chest.ron index c41b293e79..26d49647af 100644 --- a/assets/common/items/armor/mail/bloodsteel/chest.ron +++ b/assets/common/items/armor/mail/bloodsteel/chest.ron @@ -3,10 +3,7 @@ ItemDef( description: "Forged to preserve life, at the cost of another.", kind: Armor(( kind: Chest, - stats: ( - protection: Some(Normal(60.0)), - poise_resilience: Some(Normal(15.0)), - ), + stats: FromSet("Bloodsteel"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/mail/bloodsteel/foot.ron b/assets/common/items/armor/mail/bloodsteel/foot.ron index e500fca026..6d20bcf2e9 100644 --- a/assets/common/items/armor/mail/bloodsteel/foot.ron +++ b/assets/common/items/armor/mail/bloodsteel/foot.ron @@ -3,10 +3,7 @@ ItemDef( description: "Forged to preserve life, at the cost of another.", kind: Armor(( kind: Foot, - stats: ( - protection: Some(Normal(20.0)), - poise_resilience: Some(Normal(5.0)), - ), + stats: FromSet("Bloodsteel"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/mail/bloodsteel/hand.ron b/assets/common/items/armor/mail/bloodsteel/hand.ron index 1c197cde4c..e7ccccec14 100644 --- a/assets/common/items/armor/mail/bloodsteel/hand.ron +++ b/assets/common/items/armor/mail/bloodsteel/hand.ron @@ -3,10 +3,7 @@ ItemDef( description: "Forged to preserve life, at the cost of another.", kind: Armor(( kind: Hand, - stats: ( - protection: Some(Normal(20.0)), - poise_resilience: Some(Normal(5.0)), - ), + stats: FromSet("Bloodsteel"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/mail/bloodsteel/pants.ron b/assets/common/items/armor/mail/bloodsteel/pants.ron index b24f2b9d6f..7340c1a2e1 100644 --- a/assets/common/items/armor/mail/bloodsteel/pants.ron +++ b/assets/common/items/armor/mail/bloodsteel/pants.ron @@ -3,10 +3,7 @@ ItemDef( description: "Forged to preserve life, at the cost of another.", kind: Armor(( kind: Pants, - stats: ( - protection: Some(Normal(40.0)), - poise_resilience: Some(Normal(10.0)), - ), + stats: FromSet("Bloodsteel"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/mail/bloodsteel/shoulder.ron b/assets/common/items/armor/mail/bloodsteel/shoulder.ron index 2714ca2ad3..d3ed50f3f5 100644 --- a/assets/common/items/armor/mail/bloodsteel/shoulder.ron +++ b/assets/common/items/armor/mail/bloodsteel/shoulder.ron @@ -3,10 +3,7 @@ ItemDef( description: "Forged to preserve life, at the cost of another.", kind: Armor(( kind: Shoulder, - stats: ( - protection: Some(Normal(40.0)), - poise_resilience: Some(Normal(10.0)), - ), + stats: FromSet("Bloodsteel"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/mail/bronze/back.ron b/assets/common/items/armor/mail/bronze/back.ron index b596a0344c..84eb05a591 100644 --- a/assets/common/items/armor/mail/bronze/back.ron +++ b/assets/common/items/armor/mail/bronze/back.ron @@ -3,10 +3,7 @@ ItemDef( description: "'Heavy and dull, but it can take a punch.'", kind: Armor(( kind: Back, - stats: ( - protection: Some(Normal(2.0)), - poise_resilience: Some(Normal(0.5)), - ), + stats: FromSet("Bronze"), )), quality: Low, tags: [ diff --git a/assets/common/items/armor/mail/bronze/belt.ron b/assets/common/items/armor/mail/bronze/belt.ron index 7bfb7483e0..7499ec33f8 100644 --- a/assets/common/items/armor/mail/bronze/belt.ron +++ b/assets/common/items/armor/mail/bronze/belt.ron @@ -3,10 +3,7 @@ ItemDef( description: "'Heavy and dull, but it can take a punch.'", kind: Armor(( kind: Belt, - stats: ( - protection: Some(Normal(2.0)), - poise_resilience: Some(Normal(0.5)), - ), + stats: FromSet("Bronze"), )), quality: Low, tags: [ diff --git a/assets/common/items/armor/mail/bronze/chest.ron b/assets/common/items/armor/mail/bronze/chest.ron index 8a1a400ca7..90a42331ef 100644 --- a/assets/common/items/armor/mail/bronze/chest.ron +++ b/assets/common/items/armor/mail/bronze/chest.ron @@ -3,10 +3,7 @@ ItemDef( description: "Heavy and dull, but it can take a punch.", kind: Armor(( kind: Chest, - stats: ( - protection: Some(Normal(12.0)), - poise_resilience: Some(Normal(3.0)), - ), + stats: FromSet("Bronze"), )), quality: Low, tags: [ diff --git a/assets/common/items/armor/mail/bronze/foot.ron b/assets/common/items/armor/mail/bronze/foot.ron index 9c147f2d5b..777aec3869 100644 --- a/assets/common/items/armor/mail/bronze/foot.ron +++ b/assets/common/items/armor/mail/bronze/foot.ron @@ -3,10 +3,7 @@ ItemDef( description: "'Heavy and dull, but it can take a punch.", kind: Armor(( kind: Foot, - stats: ( - protection: Some(Normal(4.0)), - poise_resilience: Some(Normal(1.0)), - ), + stats: FromSet("Bronze"), )), quality: Low, tags: [ diff --git a/assets/common/items/armor/mail/bronze/hand.ron b/assets/common/items/armor/mail/bronze/hand.ron index 2d8d0b32b6..44297bab33 100644 --- a/assets/common/items/armor/mail/bronze/hand.ron +++ b/assets/common/items/armor/mail/bronze/hand.ron @@ -3,10 +3,7 @@ ItemDef( description: "'Heavy and dull, but it can take a punch.'", kind: Armor(( kind: Hand, - stats: ( - protection: Some(Normal(4.0)), - poise_resilience: Some(Normal(1.0)), - ), + stats: FromSet("Bronze"), )), quality: Low, tags: [ diff --git a/assets/common/items/armor/mail/bronze/pants.ron b/assets/common/items/armor/mail/bronze/pants.ron index 0713fd0d33..4542414ed7 100644 --- a/assets/common/items/armor/mail/bronze/pants.ron +++ b/assets/common/items/armor/mail/bronze/pants.ron @@ -3,10 +3,7 @@ ItemDef( description: "'Heavy and dull, but it can take a punch.'", kind: Armor(( kind: Pants, - stats: ( - protection: Some(Normal(8.0)), - poise_resilience: Some(Normal(2.0)), - ), + stats: FromSet("Bronze"), )), quality: Low, tags: [ diff --git a/assets/common/items/armor/mail/bronze/shoulder.ron b/assets/common/items/armor/mail/bronze/shoulder.ron index 1dc186daee..7f2b008ada 100644 --- a/assets/common/items/armor/mail/bronze/shoulder.ron +++ b/assets/common/items/armor/mail/bronze/shoulder.ron @@ -3,10 +3,7 @@ ItemDef( description: "Heavy and dull, but it can take a punch.", kind: Armor(( kind: Shoulder, - stats: ( - protection: Some(Normal(8.0)), - poise_resilience: Some(Normal(2.0)), - ), + stats: FromSet("Bronze"), )), quality: Low, tags: [ diff --git a/assets/common/items/armor/mail/cobalt/back.ron b/assets/common/items/armor/mail/cobalt/back.ron index 919f053a20..f0aa201f6f 100644 --- a/assets/common/items/armor/mail/cobalt/back.ron +++ b/assets/common/items/armor/mail/cobalt/back.ron @@ -3,10 +3,7 @@ ItemDef( description: "Ornamental and impenetrable, the metal will never dull.", kind: Armor(( kind: Back, - stats: ( - protection: Some(Normal(8.0)), - poise_resilience: Some(Normal(2.0)), - ), + stats: FromSet("Cobalt"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/mail/cobalt/belt.ron b/assets/common/items/armor/mail/cobalt/belt.ron index 0341238898..05ad53cecf 100644 --- a/assets/common/items/armor/mail/cobalt/belt.ron +++ b/assets/common/items/armor/mail/cobalt/belt.ron @@ -3,10 +3,7 @@ ItemDef( description: "Ornamental and impenetrable, the metal will never dull.", kind: Armor(( kind: Belt, - stats: ( - protection: Some(Normal(8.0)), - poise_resilience: Some(Normal(2.0)), - ), + stats: FromSet("Cobalt"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/mail/cobalt/chest.ron b/assets/common/items/armor/mail/cobalt/chest.ron index c7dd6332f9..51b4937cf2 100644 --- a/assets/common/items/armor/mail/cobalt/chest.ron +++ b/assets/common/items/armor/mail/cobalt/chest.ron @@ -3,10 +3,7 @@ ItemDef( description: "Ornamental and impenetrable, the metal will never dull.", kind: Armor(( kind: Chest, - stats: ( - protection: Some(Normal(48.0)), - poise_resilience: Some(Normal(12.0)), - ), + stats: FromSet("Cobalt"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/mail/cobalt/foot.ron b/assets/common/items/armor/mail/cobalt/foot.ron index 445b52191b..f8f6fa5030 100644 --- a/assets/common/items/armor/mail/cobalt/foot.ron +++ b/assets/common/items/armor/mail/cobalt/foot.ron @@ -3,10 +3,7 @@ ItemDef( description: "Ornamental and impenetrable, the metal will never dull.", kind: Armor(( kind: Foot, - stats: ( - protection: Some(Normal(16.0)), - poise_resilience: Some(Normal(4.0)), - ), + stats: FromSet("Cobalt"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/mail/cobalt/hand.ron b/assets/common/items/armor/mail/cobalt/hand.ron index e80a6e11cc..219f2f5765 100644 --- a/assets/common/items/armor/mail/cobalt/hand.ron +++ b/assets/common/items/armor/mail/cobalt/hand.ron @@ -3,10 +3,7 @@ ItemDef( description: "Ornamental and impenetrable, the metal will never dull.", kind: Armor(( kind: Hand, - stats: ( - protection: Some(Normal(16.0)), - poise_resilience: Some(Normal(4.0)), - ), + stats: FromSet("Cobalt"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/mail/cobalt/pants.ron b/assets/common/items/armor/mail/cobalt/pants.ron index 40e365df5b..80fbcf6aa0 100644 --- a/assets/common/items/armor/mail/cobalt/pants.ron +++ b/assets/common/items/armor/mail/cobalt/pants.ron @@ -3,10 +3,7 @@ ItemDef( description: "Ornamental and impenetrable, the metal will never dull.", kind: Armor(( kind: Pants, - stats: ( - protection: Some(Normal(32.0)), - poise_resilience: Some(Normal(8.0)), - ), + stats: FromSet("Cobalt"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/mail/cobalt/shoulder.ron b/assets/common/items/armor/mail/cobalt/shoulder.ron index 315805d9d5..67970b41fa 100644 --- a/assets/common/items/armor/mail/cobalt/shoulder.ron +++ b/assets/common/items/armor/mail/cobalt/shoulder.ron @@ -3,10 +3,7 @@ ItemDef( description: "Ornamental and impenetrable, the metal will never dull.", kind: Armor(( kind: Shoulder, - stats: ( - protection: Some(Normal(32.0)), - poise_resilience: Some(Normal(8.0)), - ), + stats: FromSet("Cobalt"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/mail/iron/back.ron b/assets/common/items/armor/mail/iron/back.ron index af45e5b12c..6e92d626c2 100644 --- a/assets/common/items/armor/mail/iron/back.ron +++ b/assets/common/items/armor/mail/iron/back.ron @@ -3,10 +3,7 @@ ItemDef( description: "Sturdy and unyielding, across ages of war.", kind: Armor(( kind: Back, - stats: ( - protection: Some(Normal(4.0)), - poise_resilience: Some(Normal(1.0)), - ), + stats: FromSet("Iron"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/mail/iron/belt.ron b/assets/common/items/armor/mail/iron/belt.ron index 7c89911a3e..017926652d 100644 --- a/assets/common/items/armor/mail/iron/belt.ron +++ b/assets/common/items/armor/mail/iron/belt.ron @@ -3,10 +3,7 @@ ItemDef( description: "Sturdy and unyielding, across ages of war.", kind: Armor(( kind: Belt, - stats: ( - protection: Some(Normal(4.0)), - poise_resilience: Some(Normal(1.0)), - ), + stats: FromSet("Iron"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/mail/iron/chest.ron b/assets/common/items/armor/mail/iron/chest.ron index 87641cb3b6..c2aba27c53 100644 --- a/assets/common/items/armor/mail/iron/chest.ron +++ b/assets/common/items/armor/mail/iron/chest.ron @@ -3,10 +3,7 @@ ItemDef( description: "Sturdy and unyielding, across ages of war.", kind: Armor(( kind: Chest, - stats: ( - protection: Some(Normal(24.0)), - poise_resilience: Some(Normal(6.0)), - ), + stats: FromSet("Iron"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/mail/iron/foot.ron b/assets/common/items/armor/mail/iron/foot.ron index a3ebcb5c63..2f74cd905c 100644 --- a/assets/common/items/armor/mail/iron/foot.ron +++ b/assets/common/items/armor/mail/iron/foot.ron @@ -3,10 +3,7 @@ ItemDef( description: "Sturdy and unyielding, across ages of war.", kind: Armor(( kind: Foot, - stats: ( - protection: Some(Normal(8.0)), - poise_resilience: Some(Normal(2.0)), - ), + stats: FromSet("Iron"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/mail/iron/hand.ron b/assets/common/items/armor/mail/iron/hand.ron index 00d8eb6a07..7519850c10 100644 --- a/assets/common/items/armor/mail/iron/hand.ron +++ b/assets/common/items/armor/mail/iron/hand.ron @@ -3,10 +3,7 @@ ItemDef( description: "Sturdy and unyielding, across ages of war.", kind: Armor(( kind: Hand, - stats: ( - protection: Some(Normal(8.0)), - poise_resilience: Some(Normal(2.0)), - ), + stats: FromSet("Iron"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/mail/iron/pants.ron b/assets/common/items/armor/mail/iron/pants.ron index 595e3b7e96..5b7f4c99b6 100644 --- a/assets/common/items/armor/mail/iron/pants.ron +++ b/assets/common/items/armor/mail/iron/pants.ron @@ -3,10 +3,7 @@ ItemDef( description: "Sturdy and unyielding, across ages of war.", kind: Armor(( kind: Pants, - stats: ( - protection: Some(Normal(16.0)), - poise_resilience: Some(Normal(4.0)), - ), + stats: FromSet("Iron"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/mail/iron/shoulder.ron b/assets/common/items/armor/mail/iron/shoulder.ron index 33c7c6de49..c4aa2effe5 100644 --- a/assets/common/items/armor/mail/iron/shoulder.ron +++ b/assets/common/items/armor/mail/iron/shoulder.ron @@ -3,10 +3,7 @@ ItemDef( description: "Sturdy and unyielding, across ages of war.", kind: Armor(( kind: Shoulder, - stats: ( - protection: Some(Normal(16.0)), - poise_resilience: Some(Normal(4.0)), - ), + stats: FromSet("Iron"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/mail/orichalcum/back.ron b/assets/common/items/armor/mail/orichalcum/back.ron index e50c57ba06..dd1aea06a1 100644 --- a/assets/common/items/armor/mail/orichalcum/back.ron +++ b/assets/common/items/armor/mail/orichalcum/back.ron @@ -3,10 +3,7 @@ ItemDef( description: "An ancient alloy. Myths remain of heroes who once wore this metal.", kind: Armor(( kind: Back, - stats: ( - protection: Some(Normal(12.0)), - poise_resilience: Some(Normal(3.0)), - ), + stats: FromSet("Orichalcum"), )), quality: Legendary, tags: [ diff --git a/assets/common/items/armor/mail/orichalcum/belt.ron b/assets/common/items/armor/mail/orichalcum/belt.ron index 8db21e0fae..f7b7254fc0 100644 --- a/assets/common/items/armor/mail/orichalcum/belt.ron +++ b/assets/common/items/armor/mail/orichalcum/belt.ron @@ -3,10 +3,7 @@ ItemDef( description: "An ancient alloy. Myths remain of heroes who once wore this metal.", kind: Armor(( kind: Belt, - stats: ( - protection: Some(Normal(12.0)), - poise_resilience: Some(Normal(3.0)), - ), + stats: FromSet("Orichalcum"), )), quality: Legendary, tags: [ diff --git a/assets/common/items/armor/mail/orichalcum/chest.ron b/assets/common/items/armor/mail/orichalcum/chest.ron index 78c687b24b..8b25f98981 100644 --- a/assets/common/items/armor/mail/orichalcum/chest.ron +++ b/assets/common/items/armor/mail/orichalcum/chest.ron @@ -3,10 +3,7 @@ ItemDef( description: "An ancient alloy. Myths remain of heroes who once wore this metal.", kind: Armor(( kind: Chest, - stats: ( - protection: Some(Normal(72.0)), - poise_resilience: Some(Normal(18.0)), - ), + stats: FromSet("Orichalcum"), )), quality: Legendary, tags: [ diff --git a/assets/common/items/armor/mail/orichalcum/foot.ron b/assets/common/items/armor/mail/orichalcum/foot.ron index e77f4ac9c2..c47272242f 100644 --- a/assets/common/items/armor/mail/orichalcum/foot.ron +++ b/assets/common/items/armor/mail/orichalcum/foot.ron @@ -3,10 +3,7 @@ ItemDef( description: "An ancient alloy. Myths remain of heroes who once wore this metal.", kind: Armor(( kind: Foot, - stats: ( - protection: Some(Normal(24.0)), - poise_resilience: Some(Normal(6.0)), - ), + stats: FromSet("Orichalcum"), )), quality: Legendary, tags: [ diff --git a/assets/common/items/armor/mail/orichalcum/hand.ron b/assets/common/items/armor/mail/orichalcum/hand.ron index 58ad679c34..89063f435b 100644 --- a/assets/common/items/armor/mail/orichalcum/hand.ron +++ b/assets/common/items/armor/mail/orichalcum/hand.ron @@ -3,10 +3,7 @@ ItemDef( description: "An ancient alloy. Myths remain of heroes who once wore this metal.", kind: Armor(( kind: Hand, - stats: ( - protection: Some(Normal(24.0)), - poise_resilience: Some(Normal(6.0)), - ), + stats: FromSet("Orichalcum"), )), quality: Legendary, tags: [ diff --git a/assets/common/items/armor/mail/orichalcum/pants.ron b/assets/common/items/armor/mail/orichalcum/pants.ron index faf4dcc4fd..13e4ee578c 100644 --- a/assets/common/items/armor/mail/orichalcum/pants.ron +++ b/assets/common/items/armor/mail/orichalcum/pants.ron @@ -3,10 +3,7 @@ ItemDef( description: "An ancient alloy. Myths remain of heroes who once wore this metal.", kind: Armor(( kind: Pants, - stats: ( - protection: Some(Normal(48.0)), - poise_resilience: Some(Normal(12.0)), - ), + stats: FromSet("Orichalcum"), )), quality: Legendary, tags: [ diff --git a/assets/common/items/armor/mail/orichalcum/shoulder.ron b/assets/common/items/armor/mail/orichalcum/shoulder.ron index 3c8bc8378a..add8ae13b4 100644 --- a/assets/common/items/armor/mail/orichalcum/shoulder.ron +++ b/assets/common/items/armor/mail/orichalcum/shoulder.ron @@ -3,10 +3,7 @@ ItemDef( description: "An ancient alloy. Myths remain of heroes who once wore this armor.", kind: Armor(( kind: Shoulder, - stats: ( - protection: Some(Normal(48.0)), - poise_resilience: Some(Normal(12.0)), - ), + stats: FromSet("Orichalcum"), )), quality: Legendary, tags: [ diff --git a/assets/common/items/armor/mail/steel/back.ron b/assets/common/items/armor/mail/steel/back.ron index 937edd98a9..8e73db7807 100644 --- a/assets/common/items/armor/mail/steel/back.ron +++ b/assets/common/items/armor/mail/steel/back.ron @@ -3,10 +3,7 @@ ItemDef( description: "Metal alloy interlocking plates to improve protection.", kind: Armor(( kind: Back, - stats: ( - protection: Some(Normal(6.0)), - poise_resilience: Some(Normal(1.5)), - ), + stats: FromSet("Steel"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/mail/steel/belt.ron b/assets/common/items/armor/mail/steel/belt.ron index 2cc06b8318..a2a54cc387 100644 --- a/assets/common/items/armor/mail/steel/belt.ron +++ b/assets/common/items/armor/mail/steel/belt.ron @@ -3,10 +3,7 @@ ItemDef( description: "Metal alloy interlocking plates to improve protection.", kind: Armor(( kind: Belt, - stats: ( - protection: Some(Normal(6.0)), - poise_resilience: Some(Normal(1.5)), - ), + stats: FromSet("Steel"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/mail/steel/chest.ron b/assets/common/items/armor/mail/steel/chest.ron index b641bd5dcf..ec5065fabd 100644 --- a/assets/common/items/armor/mail/steel/chest.ron +++ b/assets/common/items/armor/mail/steel/chest.ron @@ -3,10 +3,7 @@ ItemDef( description: "The metal alloy provides a somewhat lighter and stronger cuirass.", kind: Armor(( kind: Chest, - stats: ( - protection: Some(Normal(36.0)), - poise_resilience: Some(Normal(9.0)), - ), + stats: FromSet("Steel"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/mail/steel/foot.ron b/assets/common/items/armor/mail/steel/foot.ron index fb37a1a8ce..cbf6bbe5ea 100644 --- a/assets/common/items/armor/mail/steel/foot.ron +++ b/assets/common/items/armor/mail/steel/foot.ron @@ -3,10 +3,7 @@ ItemDef( description: "Metal alloy boots providing a more comfortable and durable protection.", kind: Armor(( kind: Foot, - stats: ( - protection: Some(Normal(12.0)), - poise_resilience: Some(Normal(3.0)), - ), + stats: FromSet("Steel"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/mail/steel/hand.ron b/assets/common/items/armor/mail/steel/hand.ron index dbc3d7cb44..f66b5bc5e6 100644 --- a/assets/common/items/armor/mail/steel/hand.ron +++ b/assets/common/items/armor/mail/steel/hand.ron @@ -3,10 +3,7 @@ ItemDef( description: "The metal alloy provides better protection and lighter weight, a quite comfortable gauntlet.", kind: Armor(( kind: Hand, - stats: ( - protection: Some(Normal(12.0)), - poise_resilience: Some(Normal(3.0)), - ), + stats: FromSet("Steel"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/mail/steel/pants.ron b/assets/common/items/armor/mail/steel/pants.ron index 67a3e6d8f6..d488930e26 100644 --- a/assets/common/items/armor/mail/steel/pants.ron +++ b/assets/common/items/armor/mail/steel/pants.ron @@ -3,10 +3,7 @@ ItemDef( description: "The metal alloy provides improvements to fit, durability, and lightness.", kind: Armor(( kind: Pants, - stats: ( - protection: Some(Normal(24.0)), - poise_resilience: Some(Normal(6.0)), - ), + stats: FromSet("Steel"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/mail/steel/shoulder.ron b/assets/common/items/armor/mail/steel/shoulder.ron index 48f1716e23..aba01a5392 100644 --- a/assets/common/items/armor/mail/steel/shoulder.ron +++ b/assets/common/items/armor/mail/steel/shoulder.ron @@ -3,10 +3,7 @@ ItemDef( description: "The metal alloy plates provide better protection and comfort.", kind: Armor(( kind: Shoulder, - stats: ( - protection: Some(Normal(24.0)), - poise_resilience: Some(Normal(6.0)), - ), + stats: FromSet("Steel"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/merchant/back.ron b/assets/common/items/armor/merchant/back.ron index 109014c231..998baf4426 100644 --- a/assets/common/items/armor/merchant/back.ron +++ b/assets/common/items/armor/merchant/back.ron @@ -3,11 +3,7 @@ ItemDef( description: "", kind: Armor(( kind: Back, - stats: ( - protection: Some(Normal(1.0)), - crit_power: Some(0.017), - stealth: Some(0.017), - ), + stats: FromSet("Merchant"), )), quality: High, slots: 18, diff --git a/assets/common/items/armor/merchant/belt.ron b/assets/common/items/armor/merchant/belt.ron index 455dbc7a8c..7013077b07 100644 --- a/assets/common/items/armor/merchant/belt.ron +++ b/assets/common/items/armor/merchant/belt.ron @@ -3,13 +3,7 @@ ItemDef( description: "", kind: Armor(( kind: Belt, - stats: ( - protection: Some(Normal(8.0)), - poise_resilience: Some(Normal(1.0)), - energy_max: Some(2.0), - energy_reward: Some(0.025), - crit_power: Some(0.02), - ), + stats: FromSet("Merchant"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/merchant/chest.ron b/assets/common/items/armor/merchant/chest.ron index cd0ef00a04..7a98f0c3b0 100644 --- a/assets/common/items/armor/merchant/chest.ron +++ b/assets/common/items/armor/merchant/chest.ron @@ -3,13 +3,7 @@ ItemDef( description: "", kind: Armor(( kind: Chest, - stats: ( - protection: Some(Normal(48.0)), - poise_resilience: Some(Normal(6.0)), - energy_max: Some(13.5), - energy_reward: Some(0.135), - crit_power: Some(0.125), - ), + stats: FromSet("Merchant"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/merchant/foot.ron b/assets/common/items/armor/merchant/foot.ron index 899238121b..ee1b648592 100644 --- a/assets/common/items/armor/merchant/foot.ron +++ b/assets/common/items/armor/merchant/foot.ron @@ -3,13 +3,7 @@ ItemDef( description: "", kind: Armor(( kind: Foot, - stats: ( - protection: Some(Normal(16.0)), - poise_resilience: Some(Normal(2.0)), - energy_max: Some(4.5), - energy_reward: Some(0.045), - crit_power: Some(0.04), - ), + stats: FromSet("Merchant"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/merchant/hand.ron b/assets/common/items/armor/merchant/hand.ron index f2c09b2230..2c653ce1f7 100644 --- a/assets/common/items/armor/merchant/hand.ron +++ b/assets/common/items/armor/merchant/hand.ron @@ -3,13 +3,7 @@ ItemDef( description: "", kind: Armor(( kind: Hand, - stats: ( - protection: Some(Normal(16.0)), - poise_resilience: Some(Normal(2.0)), - energy_max: Some(4.5), - energy_reward: Some(0.045), - crit_power: Some(0.04), - ), + stats: FromSet("Merchant"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/merchant/pants.ron b/assets/common/items/armor/merchant/pants.ron index cabc3f94a3..3100d4f01a 100644 --- a/assets/common/items/armor/merchant/pants.ron +++ b/assets/common/items/armor/merchant/pants.ron @@ -3,13 +3,7 @@ ItemDef( description: "", kind: Armor(( kind: Pants, - stats: ( - protection: Some(Normal(32.0)), - poise_resilience: Some(Normal(4.0)), - energy_max: Some(9.0), - energy_reward: Some(0.1), - crit_power: Some(0.08), - ), + stats: FromSet("Merchant"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/merchant/shoulder.ron b/assets/common/items/armor/merchant/shoulder.ron index 5c91273921..ce1dfe9989 100644 --- a/assets/common/items/armor/merchant/shoulder.ron +++ b/assets/common/items/armor/merchant/shoulder.ron @@ -3,13 +3,7 @@ ItemDef( description: "", kind: Armor(( kind: Shoulder, - stats: ( - protection: Some(Normal(32.0)), - poise_resilience: Some(Normal(5.0)), - energy_max: Some(9.0), - energy_reward: Some(0.1), - crit_power: Some(0.08), - ), + stats: FromSet("Merchant"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/merchant/turban.ron b/assets/common/items/armor/merchant/turban.ron index 2d0902812b..a926e1437e 100644 --- a/assets/common/items/armor/merchant/turban.ron +++ b/assets/common/items/armor/merchant/turban.ron @@ -3,12 +3,12 @@ ItemDef( description: "An incredibly fancy and light-weight turban, quite expensive too.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( protection: Some(Normal(5.0)), poise_resilience: Some(Normal(1.5)), energy_max: Some(12.0), energy_reward: Some(0.07), - ), + )), )), quality: Epic, tags: [], diff --git a/assets/common/items/armor/misc/back/admin.ron b/assets/common/items/armor/misc/back/admin.ron index a86bdc537f..91c74c6002 100644 --- a/assets/common/items/armor/misc/back/admin.ron +++ b/assets/common/items/armor/misc/back/admin.ron @@ -3,10 +3,10 @@ ItemDef( description: "With great power comes\ngreat responsibility.", kind: Armor(( kind: Back, - stats: ( + stats: Direct(( protection: Some(Invincible), poise_resilience: Some(Invincible), - ), + )), )), quality: Debug, tags: [], diff --git a/assets/common/items/armor/misc/back/backpack.ron b/assets/common/items/armor/misc/back/backpack.ron index a36b1e9abc..47c8e663af 100644 --- a/assets/common/items/armor/misc/back/backpack.ron +++ b/assets/common/items/armor/misc/back/backpack.ron @@ -3,8 +3,8 @@ ItemDef( description: "Comfortable and with enough capacity, its a hoarder's best friend.", kind: Armor(( kind: Back, - stats: ( - ), + stats: Direct(( + )), )), quality: High, tags: [Bag], diff --git a/assets/common/items/armor/misc/back/dungeon_purple.ron b/assets/common/items/armor/misc/back/dungeon_purple.ron index 7a151c8dc9..1682519ef6 100644 --- a/assets/common/items/armor/misc/back/dungeon_purple.ron +++ b/assets/common/items/armor/misc/back/dungeon_purple.ron @@ -3,14 +3,7 @@ ItemDef( description: "Smells like dark magic and candles.", kind: Armor(( kind: Back, - stats: ( - protection: Some(Normal(8.0)), - poise_resilience: Some(Normal(1.0)), - energy_max: Some(2.0), - energy_reward: Some(0.025), - crit_power: Some(0.02), - stealth: Some(0.02), - ), + stats: FromSet("Cultist"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/misc/back/short_0.ron b/assets/common/items/armor/misc/back/short_0.ron index cb18fefe77..0248ba9a59 100644 --- a/assets/common/items/armor/misc/back/short_0.ron +++ b/assets/common/items/armor/misc/back/short_0.ron @@ -3,9 +3,9 @@ ItemDef( description: "Probably made of the finest leather.", kind: Armor(( kind: Back, - stats: ( + stats: Direct(( protection: Some(Normal(0.3)), - ), + )), )), quality: Moderate, tags: [], diff --git a/assets/common/items/armor/misc/back/short_1.ron b/assets/common/items/armor/misc/back/short_1.ron index f44e539ee8..04a72ef4d6 100644 --- a/assets/common/items/armor/misc/back/short_1.ron +++ b/assets/common/items/armor/misc/back/short_1.ron @@ -3,9 +3,9 @@ ItemDef( description: "Keeps your shoulders warm.", kind: Armor(( kind: Back, - stats: ( + stats: Direct(( protection: Some(Normal(0.1)), - ), + )), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/misc/bag/heavy_seabag.ron b/assets/common/items/armor/misc/bag/heavy_seabag.ron index a5e7e33195..12dbcd7366 100644 --- a/assets/common/items/armor/misc/bag/heavy_seabag.ron +++ b/assets/common/items/armor/misc/bag/heavy_seabag.ron @@ -1,13 +1,10 @@ ItemDef( name: "Heavy Seabag", description: "Commonly used by sailors.", - kind: Armor( - ( - kind: Bag, - stats: ( - ), - ) - ), + kind: Armor(( + kind: Bag, + stats: Direct(()), + )), quality: Moderate, tags: [Bag], slots: 14, diff --git a/assets/common/items/armor/misc/bag/knitted_red_pouch.ron b/assets/common/items/armor/misc/bag/knitted_red_pouch.ron index 86e7360779..4efb5b14dd 100644 --- a/assets/common/items/armor/misc/bag/knitted_red_pouch.ron +++ b/assets/common/items/armor/misc/bag/knitted_red_pouch.ron @@ -1,13 +1,10 @@ ItemDef( name: "Knitted Red Pouch", description: "A sizeable red bag with two pouches, made of wool and dye.", - kind: Armor( - ( - kind: Bag, - stats: ( - ), - ) - ), + kind: Armor(( + kind: Bag, + stats: Direct(()), + )), quality: Moderate, tags: [Bag], slots: 9, diff --git a/assets/common/items/armor/misc/bag/liana_kit.ron b/assets/common/items/armor/misc/bag/liana_kit.ron index f42179cafc..b48d2891f9 100644 --- a/assets/common/items/armor/misc/bag/liana_kit.ron +++ b/assets/common/items/armor/misc/bag/liana_kit.ron @@ -1,13 +1,10 @@ ItemDef( name: "Liana Kit", description: "Woven from dried lianas.", - kind: Armor( - ( - kind: Bag, - stats: ( - ), - ) - ), + kind: Armor(( + kind: Bag, + stats: Direct(()), + )), quality: Moderate, tags: [Bag], slots: 12, diff --git a/assets/common/items/armor/misc/bag/mindflayer_spellbag.ron b/assets/common/items/armor/misc/bag/mindflayer_spellbag.ron index 9d962cd2a7..69e9165cde 100644 --- a/assets/common/items/armor/misc/bag/mindflayer_spellbag.ron +++ b/assets/common/items/armor/misc/bag/mindflayer_spellbag.ron @@ -1,13 +1,10 @@ ItemDef( name: "Mindflayer Spellbag", description: "You can almost feel the Mindflayer's\nevil presence flowing through the fabric.", - kind: Armor( - ( - kind: Bag, - stats: ( - ), - ) - ), + kind: Armor(( + kind: Bag, + stats: Direct(()), + )), quality: Epic, tags: [Bag], slots: 27, diff --git a/assets/common/items/armor/misc/bag/reliable_backpack.ron b/assets/common/items/armor/misc/bag/reliable_backpack.ron index 92908529d4..6abddec50d 100644 --- a/assets/common/items/armor/misc/bag/reliable_backpack.ron +++ b/assets/common/items/armor/misc/bag/reliable_backpack.ron @@ -1,13 +1,10 @@ ItemDef( name: "Reliable Backpack", description: "It will never give you up.", - kind: Armor( - ( - kind: Bag, - stats: ( - ), - ) - ), + kind: Armor(( + kind: Bag, + stats: Direct(()), + )), quality: High, tags: [Bag], slots: 16, diff --git a/assets/common/items/armor/misc/bag/soulkeeper_cursed.ron b/assets/common/items/armor/misc/bag/soulkeeper_cursed.ron index 1d46064448..74bc2032c2 100644 --- a/assets/common/items/armor/misc/bag/soulkeeper_cursed.ron +++ b/assets/common/items/armor/misc/bag/soulkeeper_cursed.ron @@ -1,13 +1,10 @@ ItemDef( name: "Cursed Soulkeeper", description: "WIP", - kind: Armor( - ( - kind: Bag, - stats: ( - ), - ) - ), + kind: Armor(( + kind: Bag, + stats: Direct(()), + )), quality: Legendary, tags: [Bag], slots: 36, diff --git a/assets/common/items/armor/misc/bag/soulkeeper_pure.ron b/assets/common/items/armor/misc/bag/soulkeeper_pure.ron index 4c12cd25bb..ee9abdd81f 100644 --- a/assets/common/items/armor/misc/bag/soulkeeper_pure.ron +++ b/assets/common/items/armor/misc/bag/soulkeeper_pure.ron @@ -1,13 +1,10 @@ ItemDef( name: "Purified Soulkeeper", description: "WIP", - kind: Armor( - ( - kind: Bag, - stats: ( - ), - ) - ), + kind: Armor(( + kind: Bag, + stats: Direct(()), + )), quality: Legendary, tags: [Bag], slots: 36, diff --git a/assets/common/items/armor/misc/bag/sturdy_red_backpack.ron b/assets/common/items/armor/misc/bag/sturdy_red_backpack.ron index 17f2fbfd4f..b43d4e8e58 100644 --- a/assets/common/items/armor/misc/bag/sturdy_red_backpack.ron +++ b/assets/common/items/armor/misc/bag/sturdy_red_backpack.ron @@ -1,13 +1,10 @@ ItemDef( name: "Sturdy Red Saddlebag", description: "A truly reliable and sizeable bag, embroidered with amethyst and thick leather.", - kind: Armor( - ( - kind: Bag, - stats: ( - ), - ) - ), + kind: Armor(( + kind: Bag, + stats: Direct(()), + )), quality: High, tags: [Bag], slots: 18, diff --git a/assets/common/items/armor/misc/bag/tiny_leather_pouch.ron b/assets/common/items/armor/misc/bag/tiny_leather_pouch.ron index 8e11686178..9b3fa3c644 100644 --- a/assets/common/items/armor/misc/bag/tiny_leather_pouch.ron +++ b/assets/common/items/armor/misc/bag/tiny_leather_pouch.ron @@ -1,13 +1,10 @@ ItemDef( name: "Small Leather Pouch", description: "A small reliable leather pouch.", - kind: Armor( - ( - kind: Bag, - stats: ( - ), - ) - ), + kind: Armor(( + kind: Bag, + stats: Direct(()), + )), quality: Common, tags: [Bag], slots: 6, diff --git a/assets/common/items/armor/misc/bag/tiny_red_pouch.ron b/assets/common/items/armor/misc/bag/tiny_red_pouch.ron index 1e344888d3..c867bffb76 100644 --- a/assets/common/items/armor/misc/bag/tiny_red_pouch.ron +++ b/assets/common/items/armor/misc/bag/tiny_red_pouch.ron @@ -1,13 +1,10 @@ ItemDef( name: "Tiny Red Pouch", description: "Made from multiple patches of dyed cloth.", - kind: Armor( - ( - kind: Bag, - stats: ( - ), - ) - ), + kind: Armor(( + kind: Bag, + stats: Direct(()), + )), quality: Common, tags: [Bag], slots: 3, diff --git a/assets/common/items/armor/misc/bag/troll_hide_pack.ron b/assets/common/items/armor/misc/bag/troll_hide_pack.ron index 1f09b241df..9e421561d7 100644 --- a/assets/common/items/armor/misc/bag/troll_hide_pack.ron +++ b/assets/common/items/armor/misc/bag/troll_hide_pack.ron @@ -1,13 +1,10 @@ ItemDef( name: "Trollhide Pack", description: "Trolls were definitely hurt in the making of this.", - kind: Armor( - ( - kind: Bag, - stats: ( - ), - ) - ), + kind: Armor(( + kind: Bag, + stats: Direct(()), + )), quality: High, tags: [Bag], slots: 18, diff --git a/assets/common/items/armor/misc/bag/woven_red_bag.ron b/assets/common/items/armor/misc/bag/woven_red_bag.ron index 75c2f8c80e..913aa42fd9 100644 --- a/assets/common/items/armor/misc/bag/woven_red_bag.ron +++ b/assets/common/items/armor/misc/bag/woven_red_bag.ron @@ -1,13 +1,10 @@ ItemDef( name: "Woven Red Bag", description: "A moderately sized red bag. Although it still feels pretty cramped.", - kind: Armor( - ( - kind: Bag, - stats: ( - ), - ) - ), + kind: Armor(( + kind: Bag, + stats: Direct(()), + )), quality: Moderate, tags: [Bag], slots: 15, diff --git a/assets/common/items/armor/misc/chest/worker_green_0.ron b/assets/common/items/armor/misc/chest/worker_green_0.ron index 938279980a..b11a1de443 100644 --- a/assets/common/items/armor/misc/chest/worker_green_0.ron +++ b/assets/common/items/armor/misc/chest/worker_green_0.ron @@ -3,9 +3,9 @@ ItemDef( description: "Was used by a farmer, until recently.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), - ), + )), )), quality: Low, tags: [ diff --git a/assets/common/items/armor/misc/chest/worker_green_1.ron b/assets/common/items/armor/misc/chest/worker_green_1.ron index 938279980a..b11a1de443 100644 --- a/assets/common/items/armor/misc/chest/worker_green_1.ron +++ b/assets/common/items/armor/misc/chest/worker_green_1.ron @@ -3,9 +3,9 @@ ItemDef( description: "Was used by a farmer, until recently.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), - ), + )), )), quality: Low, tags: [ diff --git a/assets/common/items/armor/misc/chest/worker_orange_0.ron b/assets/common/items/armor/misc/chest/worker_orange_0.ron index a6ac7d1e7e..f0cdedc600 100644 --- a/assets/common/items/armor/misc/chest/worker_orange_0.ron +++ b/assets/common/items/armor/misc/chest/worker_orange_0.ron @@ -3,9 +3,9 @@ ItemDef( description: "Was used by a farmer, until recently.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), - ), + )), )), quality: Low, tags: [ diff --git a/assets/common/items/armor/misc/chest/worker_orange_1.ron b/assets/common/items/armor/misc/chest/worker_orange_1.ron index a6ac7d1e7e..f0cdedc600 100644 --- a/assets/common/items/armor/misc/chest/worker_orange_1.ron +++ b/assets/common/items/armor/misc/chest/worker_orange_1.ron @@ -3,9 +3,9 @@ ItemDef( description: "Was used by a farmer, until recently.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), - ), + )), )), quality: Low, tags: [ diff --git a/assets/common/items/armor/misc/chest/worker_purple_0.ron b/assets/common/items/armor/misc/chest/worker_purple_0.ron index d2a8b95fc4..c375248ee6 100644 --- a/assets/common/items/armor/misc/chest/worker_purple_0.ron +++ b/assets/common/items/armor/misc/chest/worker_purple_0.ron @@ -3,9 +3,9 @@ ItemDef( description: "Resilient and reliable.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(0.1)), - ), + )), )), quality: Low, tags: [ diff --git a/assets/common/items/armor/misc/chest/worker_purple_1.ron b/assets/common/items/armor/misc/chest/worker_purple_1.ron index 5d2bd5e1d6..f62d4ad4a0 100644 --- a/assets/common/items/armor/misc/chest/worker_purple_1.ron +++ b/assets/common/items/armor/misc/chest/worker_purple_1.ron @@ -3,9 +3,9 @@ ItemDef( description: "Was used by a farmer, until recently.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), - ), + )), )), quality: Low, tags: [ diff --git a/assets/common/items/armor/misc/chest/worker_purple_brown.ron b/assets/common/items/armor/misc/chest/worker_purple_brown.ron index d2a8b95fc4..c375248ee6 100644 --- a/assets/common/items/armor/misc/chest/worker_purple_brown.ron +++ b/assets/common/items/armor/misc/chest/worker_purple_brown.ron @@ -3,9 +3,9 @@ ItemDef( description: "Resilient and reliable.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(0.1)), - ), + )), )), quality: Low, tags: [ diff --git a/assets/common/items/armor/misc/chest/worker_red_0.ron b/assets/common/items/armor/misc/chest/worker_red_0.ron index 095950f9ad..1ccc5de312 100644 --- a/assets/common/items/armor/misc/chest/worker_red_0.ron +++ b/assets/common/items/armor/misc/chest/worker_red_0.ron @@ -3,9 +3,9 @@ ItemDef( description: "Was used by a farmer, until recently.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), - ), + )), )), quality: Low, tags: [ diff --git a/assets/common/items/armor/misc/chest/worker_red_1.ron b/assets/common/items/armor/misc/chest/worker_red_1.ron index 095950f9ad..1ccc5de312 100644 --- a/assets/common/items/armor/misc/chest/worker_red_1.ron +++ b/assets/common/items/armor/misc/chest/worker_red_1.ron @@ -3,9 +3,9 @@ ItemDef( description: "Was used by a farmer, until recently.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), - ), + )), )), quality: Low, tags: [ diff --git a/assets/common/items/armor/misc/chest/worker_yellow_0.ron b/assets/common/items/armor/misc/chest/worker_yellow_0.ron index ac44dd94fd..17de8170cf 100644 --- a/assets/common/items/armor/misc/chest/worker_yellow_0.ron +++ b/assets/common/items/armor/misc/chest/worker_yellow_0.ron @@ -3,9 +3,9 @@ ItemDef( description: "Was used by a farmer, until recently.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), - ), + )), )), quality: Low, tags: [ diff --git a/assets/common/items/armor/misc/chest/worker_yellow_1.ron b/assets/common/items/armor/misc/chest/worker_yellow_1.ron index ac44dd94fd..17de8170cf 100644 --- a/assets/common/items/armor/misc/chest/worker_yellow_1.ron +++ b/assets/common/items/armor/misc/chest/worker_yellow_1.ron @@ -3,9 +3,9 @@ ItemDef( description: "Was used by a farmer, until recently.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), - ), + )), )), quality: Low, tags: [ diff --git a/assets/common/items/armor/misc/foot/iceskate.ron b/assets/common/items/armor/misc/foot/iceskate.ron new file mode 100644 index 0000000000..c9230139fb --- /dev/null +++ b/assets/common/items/armor/misc/foot/iceskate.ron @@ -0,0 +1,15 @@ +ItemDef( + name: "Ice Skates", + description: "Best used on a frozen lake.", + kind: Armor(( + kind: Foot, + stats: Direct(( + protection: Some(Normal(3.0)), + ground_contact: Skate, + )), + )), + quality: Moderate, + tags: [ + Material(Steel), + ], +) diff --git a/assets/common/items/armor/misc/foot/jackalope_slippers.ron b/assets/common/items/armor/misc/foot/jackalope_slippers.ron index 9af13267b0..3bfaab5a44 100644 --- a/assets/common/items/armor/misc/foot/jackalope_slippers.ron +++ b/assets/common/items/armor/misc/foot/jackalope_slippers.ron @@ -3,8 +3,8 @@ ItemDef( description: "So warm and cozy!", kind: Armor(( kind: Foot, - stats: ( - ), + stats: Direct(( + )), )), quality: High, tags: [ diff --git a/assets/common/items/armor/misc/foot/sandals.ron b/assets/common/items/armor/misc/foot/sandals.ron index 876f3f3a8e..05b3fc2fc7 100644 --- a/assets/common/items/armor/misc/foot/sandals.ron +++ b/assets/common/items/armor/misc/foot/sandals.ron @@ -3,8 +3,8 @@ ItemDef( description: "Loyal companions, though they don't look like they can go much further.", kind: Armor(( kind: Foot, - stats: ( - ), + stats: Direct(( + )), )), quality: Low, tags: [ diff --git a/assets/common/items/armor/misc/foot/ski.ron b/assets/common/items/armor/misc/foot/ski.ron new file mode 100644 index 0000000000..bc09120a5e --- /dev/null +++ b/assets/common/items/armor/misc/foot/ski.ron @@ -0,0 +1,16 @@ +ItemDef( + name: "Wooden skis", + description: "Best used downhill on snow.", + kind: Armor(( + kind: Foot, + stats: Direct(( + protection: Some(Normal(3.0)), + ground_contact: Ski, + )), + )), + quality: Moderate, + tags: [ + Material(Wood), +// SalvageInto(Twigs), + ], +) diff --git a/assets/common/items/armor/misc/head/bamboo_twig.ron b/assets/common/items/armor/misc/head/bamboo_twig.ron index e89b112c44..01bcfdfb64 100644 --- a/assets/common/items/armor/misc/head/bamboo_twig.ron +++ b/assets/common/items/armor/misc/head/bamboo_twig.ron @@ -3,9 +3,9 @@ ItemDef( description: "A tiny stray shoot from a larger bamboo shaft.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( energy_reward: Some(0.033), - ), + )), )), quality: Common, tags: [], diff --git a/assets/common/items/armor/misc/head/bandana/red.ron b/assets/common/items/armor/misc/head/bandana/red.ron index 8e21260b3e..177c83c412 100644 --- a/assets/common/items/armor/misc/head/bandana/red.ron +++ b/assets/common/items/armor/misc/head/bandana/red.ron @@ -3,10 +3,10 @@ ItemDef( description: "Very sneaky, but also, bright red.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( crit_power: Some(0.008), stealth: Some(0.14), - ), + )), )), quality: Common, tags: [], diff --git a/assets/common/items/armor/misc/head/bandana/thief.ron b/assets/common/items/armor/misc/head/bandana/thief.ron index 485b2b8e79..e44b270eb8 100644 --- a/assets/common/items/armor/misc/head/bandana/thief.ron +++ b/assets/common/items/armor/misc/head/bandana/thief.ron @@ -3,10 +3,10 @@ ItemDef( description: "Common bandit's mask.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( crit_power: Some(0.006), stealth: Some(0.18), - ), + )), )), quality: Common, tags: [], diff --git a/assets/common/items/armor/misc/head/boreal_warhelm.ron b/assets/common/items/armor/misc/head/boreal_warhelm.ron index dec4aa8b4e..1795615f98 100644 --- a/assets/common/items/armor/misc/head/boreal_warhelm.ron +++ b/assets/common/items/armor/misc/head/boreal_warhelm.ron @@ -3,12 +3,12 @@ ItemDef( description: "I wonder where it's pointing...", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( protection: Some(Normal(9.0)), poise_resilience: Some(Normal(3.0)), energy_max: Some(4.0), energy_reward: Some(0.01), - ), + )), )), quality: High, tags: [], diff --git a/assets/common/items/armor/misc/head/crown.ron b/assets/common/items/armor/misc/head/crown.ron index 6482a5602c..99ca347dbf 100644 --- a/assets/common/items/armor/misc/head/crown.ron +++ b/assets/common/items/armor/misc/head/crown.ron @@ -3,12 +3,12 @@ ItemDef( description: "A crown fit for royal stature.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( protection: Some(Normal(12.0)), poise_resilience: Some(Normal(2.0)), energy_max: Some(5.0), crit_power: Some(0.008), - ), + )), )), quality: Epic, tags: [], diff --git a/assets/common/items/armor/misc/head/exclamation.ron b/assets/common/items/armor/misc/head/exclamation.ron index a150df9f51..63b677781d 100644 --- a/assets/common/items/armor/misc/head/exclamation.ron +++ b/assets/common/items/armor/misc/head/exclamation.ron @@ -3,8 +3,8 @@ ItemDef( description: "You feel like bestowing quests.", kind: Armor(( kind: Head, - stats: ( - ), + stats: Direct(( + )), )), quality: Common, tags: [], diff --git a/assets/common/items/armor/misc/head/headband.ron b/assets/common/items/armor/misc/head/headband.ron index b086ab8bdc..9cd17a9ce7 100644 --- a/assets/common/items/armor/misc/head/headband.ron +++ b/assets/common/items/armor/misc/head/headband.ron @@ -3,8 +3,8 @@ ItemDef( description: "A simple headband, it's nothing special.", kind: Armor(( kind: Head, - stats: ( - ), + stats: Direct(( + )), )), quality: Common, tags: [], diff --git a/assets/common/items/armor/misc/head/helmet.ron b/assets/common/items/armor/misc/head/helmet.ron index fa196633fe..b11cb121f3 100644 --- a/assets/common/items/armor/misc/head/helmet.ron +++ b/assets/common/items/armor/misc/head/helmet.ron @@ -3,10 +3,10 @@ ItemDef( description: "yep.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( protection: Some(Normal(16.0)), poise_resilience: Some(Normal(3.0)), - ), + )), )), quality: Moderate, tags: [], diff --git a/assets/common/items/armor/misc/head/hog_hood.ron b/assets/common/items/armor/misc/head/hog_hood.ron index cb9ff4489b..b0f3bc19d7 100644 --- a/assets/common/items/armor/misc/head/hog_hood.ron +++ b/assets/common/items/armor/misc/head/hog_hood.ron @@ -3,11 +3,11 @@ ItemDef( description: "Wear the guise of a great swine now felled, so that you may honor its sacrifice.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( protection: Some(Normal(5.0)), crit_power: Some(0.014), stealth: Some(0.21), - ), + )), )), quality: Moderate, tags: [], diff --git a/assets/common/items/armor/misc/head/hood.ron b/assets/common/items/armor/misc/head/hood.ron index 558b800aa4..01d24047a2 100644 --- a/assets/common/items/armor/misc/head/hood.ron +++ b/assets/common/items/armor/misc/head/hood.ron @@ -3,11 +3,11 @@ ItemDef( description: "Become one with the treetops.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( protection: Some(Normal(3.0)), crit_power: Some(0.021), stealth: Some(0.22), - ), + )), )), quality: Moderate, tags: [], diff --git a/assets/common/items/armor/misc/head/hood_dark.ron b/assets/common/items/armor/misc/head/hood_dark.ron index fa1f6d6864..740f411e92 100644 --- a/assets/common/items/armor/misc/head/hood_dark.ron +++ b/assets/common/items/armor/misc/head/hood_dark.ron @@ -3,11 +3,11 @@ ItemDef( description: "Tis a bit thicker.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( protection: Some(Normal(6.0)), poise_resilience: Some(Normal(1.0)), stealth: Some(0.2), - ), + )), )), quality: Moderate, tags: [], diff --git a/assets/common/items/armor/misc/head/mitre.ron b/assets/common/items/armor/misc/head/mitre.ron index 27dd5241a1..987c92d612 100644 --- a/assets/common/items/armor/misc/head/mitre.ron +++ b/assets/common/items/armor/misc/head/mitre.ron @@ -3,12 +3,12 @@ ItemDef( description: "Calls strength down from above.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( protection: Some(Normal(2.0)), poise_resilience: Some(Normal(0.5)), energy_max: Some(7.0), energy_reward: Some(0.06), - ), + )), )), quality: High, tags: [], diff --git a/assets/common/items/armor/misc/head/spikeguard.ron b/assets/common/items/armor/misc/head/spikeguard.ron index 7e3f6de732..0904cff590 100644 --- a/assets/common/items/armor/misc/head/spikeguard.ron +++ b/assets/common/items/armor/misc/head/spikeguard.ron @@ -3,11 +3,11 @@ ItemDef( description: "Resembling some sort of thorny crown.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( protection: Some(Normal(9.0)), poise_resilience: Some(Normal(3.0)), crit_power: Some(0.036), - ), + )), )), quality: High, tags: [], diff --git a/assets/common/items/armor/misc/head/straw.ron b/assets/common/items/armor/misc/head/straw.ron index 11d9b28012..783cb24a51 100644 --- a/assets/common/items/armor/misc/head/straw.ron +++ b/assets/common/items/armor/misc/head/straw.ron @@ -3,10 +3,10 @@ ItemDef( description: "Often times worn by villagers. It's simple and stylish!", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( energy_max: Some(3.0), energy_reward: Some(0.02), - ), + )), )), quality: Common, tags: [], diff --git a/assets/common/items/armor/misc/head/wanderers_hat.ron b/assets/common/items/armor/misc/head/wanderers_hat.ron index 405d06b64b..bff7573d7d 100644 --- a/assets/common/items/armor/misc/head/wanderers_hat.ron +++ b/assets/common/items/armor/misc/head/wanderers_hat.ron @@ -3,10 +3,10 @@ ItemDef( description: "The perfect headwear for those who feel at home on the highways and byways of Veloren.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( crit_power: Some(0.021), stealth: Some(0.1), - ), + )), )), quality: Moderate, tags: [], diff --git a/assets/common/items/armor/misc/head/winged_coronet.ron b/assets/common/items/armor/misc/head/winged_coronet.ron index ec60035fb5..7dcb66cc2d 100644 --- a/assets/common/items/armor/misc/head/winged_coronet.ron +++ b/assets/common/items/armor/misc/head/winged_coronet.ron @@ -3,13 +3,13 @@ ItemDef( description: "You feel more connected with nature.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( protection: Some(Normal(2.0)), energy_max: Some(4.5), energy_reward: Some(0.04), crit_power: Some(0.009), stealth: Some(0.17), - ), + )), )), quality: High, tags: [], diff --git a/assets/common/items/armor/misc/neck/amethyst.ron b/assets/common/items/armor/misc/neck/amethyst.ron index 8bd909e749..81a3ac3a38 100644 --- a/assets/common/items/armor/misc/neck/amethyst.ron +++ b/assets/common/items/armor/misc/neck/amethyst.ron @@ -3,10 +3,10 @@ ItemDef( description: "A tin necklace lined with amethyst gems.", kind: Armor(( kind: Neck, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), energy_reward: Some(0.1), - ), + )), )), quality: Moderate, tags: [], diff --git a/assets/common/items/armor/misc/neck/ankh_of_life.ron b/assets/common/items/armor/misc/neck/ankh_of_life.ron index ef7628ceb3..4714ec38b5 100644 --- a/assets/common/items/armor/misc/neck/ankh_of_life.ron +++ b/assets/common/items/armor/misc/neck/ankh_of_life.ron @@ -3,11 +3,11 @@ ItemDef( description: "A unique necklace of unkown origin... You can feel the power flowing through it.", kind: Armor(( kind: Neck, - stats: ( + stats: Direct(( protection: Some(Normal(2.0)), energy_max: Some(20), energy_reward: Some(0.1), - ), + )), )), quality: Legendary, tags: [], diff --git a/assets/common/items/armor/misc/neck/carcanet_of_wrath.ron b/assets/common/items/armor/misc/neck/carcanet_of_wrath.ron index 18b153adf8..8b1486c01a 100644 --- a/assets/common/items/armor/misc/neck/carcanet_of_wrath.ron +++ b/assets/common/items/armor/misc/neck/carcanet_of_wrath.ron @@ -3,10 +3,10 @@ ItemDef( description: "A necklace that gives even the most feeble beings immense amounts of power.", kind: Armor(( kind: Neck, - stats: ( + stats: Direct(( protection: Some(Normal(2.0)), crit_power: Some(0.2), - ), + )), )), quality: Legendary, tags: [], diff --git a/assets/common/items/armor/misc/neck/diamond.ron b/assets/common/items/armor/misc/neck/diamond.ron index 1de4343436..c9205e0040 100644 --- a/assets/common/items/armor/misc/neck/diamond.ron +++ b/assets/common/items/armor/misc/neck/diamond.ron @@ -3,11 +3,11 @@ ItemDef( description: "An expensive gold necklace, ornate with exquisite diamonds.", kind: Armor(( kind: Neck, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), energy_reward: Some(-0.1), crit_power: Some(0.1), - ), + )), )), quality: Epic, tags: [], diff --git a/assets/common/items/armor/misc/neck/emerald.ron b/assets/common/items/armor/misc/neck/emerald.ron index f3ec3f12c4..f51c350166 100644 --- a/assets/common/items/armor/misc/neck/emerald.ron +++ b/assets/common/items/armor/misc/neck/emerald.ron @@ -3,11 +3,11 @@ ItemDef( description: "A cobalt necklace, bearing beautiful emerald gems.", kind: Armor(( kind: Neck, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), energy_max: Some(20.0), energy_reward: Some(-0.2), - ), + )), )), quality: Epic, tags: [], diff --git a/assets/common/items/armor/misc/neck/fang.ron b/assets/common/items/armor/misc/neck/fang.ron index d8e8743b82..67c0c44825 100644 --- a/assets/common/items/armor/misc/neck/fang.ron +++ b/assets/common/items/armor/misc/neck/fang.ron @@ -3,10 +3,10 @@ ItemDef( description: "Only the most savage beings can handle the power of this necklace...", kind: Armor(( kind: Neck, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), crit_power: Some(0.07), - ), + )), )), quality: High, tags: [], diff --git a/assets/common/items/armor/misc/neck/gem_of_resilience.ron b/assets/common/items/armor/misc/neck/gem_of_resilience.ron index 9dc66d6570..a69927c299 100644 --- a/assets/common/items/armor/misc/neck/gem_of_resilience.ron +++ b/assets/common/items/armor/misc/neck/gem_of_resilience.ron @@ -3,10 +3,10 @@ ItemDef( description: "Surrounded by a discrete magical glow.", kind: Armor(( kind: Neck, - stats: ( + stats: Direct(( protection: Some(Normal(2.0)), poise_resilience: Some(Normal(1.0)), - ), + )), )), quality: Moderate, tags: [], diff --git a/assets/common/items/armor/misc/neck/gold.ron b/assets/common/items/armor/misc/neck/gold.ron index 3f30fd7f9e..30a176d7a2 100644 --- a/assets/common/items/armor/misc/neck/gold.ron +++ b/assets/common/items/armor/misc/neck/gold.ron @@ -3,11 +3,11 @@ ItemDef( description: "An expensive gold necklace... looks stolen.", kind: Armor(( kind: Neck, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), energy_max: Some(10), crit_power: Some(0.02), - ), + )), )), quality: Moderate, tags: [], diff --git a/assets/common/items/armor/misc/neck/haniwa_talisman.ron b/assets/common/items/armor/misc/neck/haniwa_talisman.ron index db8c44fdb5..866cef31d2 100644 --- a/assets/common/items/armor/misc/neck/haniwa_talisman.ron +++ b/assets/common/items/armor/misc/neck/haniwa_talisman.ron @@ -3,10 +3,10 @@ ItemDef( description: "A talisman depicting a figure of unknown origin.", kind: Armor(( kind: Neck, - stats: ( + stats: Direct(( protection: Some(Normal(3.0)), poise_resilience: Some(Normal(2.0)), - ), + )), )), quality: High, tags: [], diff --git a/assets/common/items/armor/misc/neck/honeycomb_pendant.ron b/assets/common/items/armor/misc/neck/honeycomb_pendant.ron index dc02f7bda0..5e8823efaa 100644 --- a/assets/common/items/armor/misc/neck/honeycomb_pendant.ron +++ b/assets/common/items/armor/misc/neck/honeycomb_pendant.ron @@ -3,11 +3,11 @@ ItemDef( description: "This necklace is always spewing out honey...", kind: Armor(( kind: Neck, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), energy_max: Some(8.0), energy_reward: Some(0.04), - ), + )), )), quality: Moderate, tags: [], diff --git a/assets/common/items/armor/misc/neck/pendant_of_protection.ron b/assets/common/items/armor/misc/neck/pendant_of_protection.ron index 610334e967..1d9b4bfe0f 100644 --- a/assets/common/items/armor/misc/neck/pendant_of_protection.ron +++ b/assets/common/items/armor/misc/neck/pendant_of_protection.ron @@ -3,9 +3,9 @@ ItemDef( description: "You feel some sort of presence keeping you safe...", kind: Armor(( kind: Neck, - stats: ( + stats: Direct(( protection: Some(Normal(1.5)), - ), + )), )), quality: Common, tags: [], diff --git a/assets/common/items/armor/misc/neck/ruby.ron b/assets/common/items/armor/misc/neck/ruby.ron index 50edf3d2a2..29ba6d2b52 100644 --- a/assets/common/items/armor/misc/neck/ruby.ron +++ b/assets/common/items/armor/misc/neck/ruby.ron @@ -3,11 +3,11 @@ ItemDef( description: "An ornate silver necklace, embedded with beautiful rubies.", kind: Armor(( kind: Neck, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), energy_reward: Some(0.2), crit_power: Some(-0.06), - ), + )), )), quality: Epic, tags: [], diff --git a/assets/common/items/armor/misc/neck/sapphire.ron b/assets/common/items/armor/misc/neck/sapphire.ron index 7975f181e4..198bcc31f1 100644 --- a/assets/common/items/armor/misc/neck/sapphire.ron +++ b/assets/common/items/armor/misc/neck/sapphire.ron @@ -3,10 +3,10 @@ ItemDef( description: "A sturdy iron necklace, with polished sapphire gems embedded into it.", kind: Armor(( kind: Neck, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), crit_power: Some(0.05), - ), + )), )), quality: Moderate, tags: [], diff --git a/assets/common/items/armor/misc/neck/scratched.ron b/assets/common/items/armor/misc/neck/scratched.ron index f0685e7852..877d7de877 100644 --- a/assets/common/items/armor/misc/neck/scratched.ron +++ b/assets/common/items/armor/misc/neck/scratched.ron @@ -3,9 +3,9 @@ ItemDef( description: "A shoddy necklace with a string about to snap...", kind: Armor(( kind: Neck, - stats: ( + stats: Direct(( protection: Some(Normal(0.5)), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/armor/misc/neck/shell.ron b/assets/common/items/armor/misc/neck/shell.ron index b10e05ab9b..dadada9e47 100644 --- a/assets/common/items/armor/misc/neck/shell.ron +++ b/assets/common/items/armor/misc/neck/shell.ron @@ -3,10 +3,10 @@ ItemDef( description: "Contains the guardian aura of the ocean", kind: Armor(( kind: Neck, - stats: ( + stats: Direct(( protection: Some(Normal(2.0)), poise_resilience: Some(Normal(1.0)), - ), + )), )), quality: Moderate, tags: [], diff --git a/assets/common/items/armor/misc/neck/topaz.ron b/assets/common/items/armor/misc/neck/topaz.ron index b818db108a..24f0ee63f1 100644 --- a/assets/common/items/armor/misc/neck/topaz.ron +++ b/assets/common/items/armor/misc/neck/topaz.ron @@ -3,10 +3,10 @@ ItemDef( description: "A copper necklace, with topaz embedded in the center.", kind: Armor(( kind: Neck, - stats: ( + stats: Direct(( protection: Some(Normal(0.5)), energy_max: Some(6.0), - ), + )), )), quality: Common, tags: [], diff --git a/assets/common/items/armor/misc/pants/hunting.ron b/assets/common/items/armor/misc/pants/hunting.ron index e2f2423e1c..05f4279e07 100644 --- a/assets/common/items/armor/misc/pants/hunting.ron +++ b/assets/common/items/armor/misc/pants/hunting.ron @@ -3,9 +3,9 @@ ItemDef( description: "Crafted from soft, supple leather.", kind: Armor(( kind: Pants, - stats: ( + stats: Direct(( protection: Some(Normal(8.0)), - ), + )), )), quality: Moderate, tags: [], diff --git a/assets/common/items/armor/misc/pants/worker_blue.ron b/assets/common/items/armor/misc/pants/worker_blue.ron index 786d4a76b6..c9512d1ab4 100644 --- a/assets/common/items/armor/misc/pants/worker_blue.ron +++ b/assets/common/items/armor/misc/pants/worker_blue.ron @@ -3,9 +3,9 @@ ItemDef( description: "Resilient and reliable.", kind: Armor(( kind: Pants, - stats: ( + stats: Direct(( protection: Some(Normal(0.1)), - ), + )), )), quality: Low, tags: [ diff --git a/assets/common/items/armor/misc/pants/worker_brown.ron b/assets/common/items/armor/misc/pants/worker_brown.ron index bd74a3eae0..265f86e2e1 100644 --- a/assets/common/items/armor/misc/pants/worker_brown.ron +++ b/assets/common/items/armor/misc/pants/worker_brown.ron @@ -3,9 +3,9 @@ ItemDef( description: "Resilient and reliable.", kind: Armor(( kind: Pants, - stats: ( + stats: Direct(( protection: Some(Normal(0.1)), - ), + )), )), quality: Low, tags: [ diff --git a/assets/common/items/armor/misc/ring/amethyst.ron b/assets/common/items/armor/misc/ring/amethyst.ron index c3eecc612f..5bf40bdc66 100644 --- a/assets/common/items/armor/misc/ring/amethyst.ron +++ b/assets/common/items/armor/misc/ring/amethyst.ron @@ -3,10 +3,10 @@ ItemDef( description: "A tin ring with an amethyst gem.", kind: Armor(( kind: Ring, - stats: ( + stats: Direct(( protection: Some(Normal(0.5)), energy_reward: Some(0.05), - ), + )), )), quality: Moderate, tags: [], diff --git a/assets/common/items/armor/misc/ring/diamond.ron b/assets/common/items/armor/misc/ring/diamond.ron index 3f09aa5bac..039f5e8e9f 100644 --- a/assets/common/items/armor/misc/ring/diamond.ron +++ b/assets/common/items/armor/misc/ring/diamond.ron @@ -3,11 +3,11 @@ ItemDef( description: "A gold ring with an expensive diamond.", kind: Armor(( kind: Ring, - stats: ( + stats: Direct(( protection: Some(Normal(0.5)), energy_reward: Some(-0.05), crit_power: Some(0.05), - ), + )), )), quality: Epic, tags: [], diff --git a/assets/common/items/armor/misc/ring/emerald.ron b/assets/common/items/armor/misc/ring/emerald.ron index 93342fb359..270a8092e5 100644 --- a/assets/common/items/armor/misc/ring/emerald.ron +++ b/assets/common/items/armor/misc/ring/emerald.ron @@ -3,11 +3,11 @@ ItemDef( description: "A cobalt ring with an emerald gem.", kind: Armor(( kind: Ring, - stats: ( + stats: Direct(( protection: Some(Normal(0.5)), energy_max: Some(10.0), energy_reward: Some(-0.1), - ), + )), )), quality: Epic, tags: [], diff --git a/assets/common/items/armor/misc/ring/gold.ron b/assets/common/items/armor/misc/ring/gold.ron index e24093d9c2..b2fe733f37 100644 --- a/assets/common/items/armor/misc/ring/gold.ron +++ b/assets/common/items/armor/misc/ring/gold.ron @@ -3,11 +3,11 @@ ItemDef( description: "A plain gold ring... almost as if it is missing a gem.", kind: Armor(( kind: Ring, - stats: ( + stats: Direct(( protection: Some(Normal(0.5)), energy_max: Some(5), crit_power: Some(0.01), - ), + )), )), quality: Moderate, tags: [], diff --git a/assets/common/items/armor/misc/ring/ruby.ron b/assets/common/items/armor/misc/ring/ruby.ron index d34e09d4ce..5cc8c85b7c 100644 --- a/assets/common/items/armor/misc/ring/ruby.ron +++ b/assets/common/items/armor/misc/ring/ruby.ron @@ -3,11 +3,11 @@ ItemDef( description: "A silver ring with a ruby gem.", kind: Armor(( kind: Ring, - stats: ( + stats: Direct(( protection: Some(Normal(0.5)), energy_reward: Some(0.1), crit_power: Some(-0.03), - ), + )), )), quality: Epic, tags: [], diff --git a/assets/common/items/armor/misc/ring/sapphire.ron b/assets/common/items/armor/misc/ring/sapphire.ron index 58e8097309..230e991bef 100644 --- a/assets/common/items/armor/misc/ring/sapphire.ron +++ b/assets/common/items/armor/misc/ring/sapphire.ron @@ -3,10 +3,10 @@ ItemDef( description: "An iron ring with a sapphire gem.", kind: Armor(( kind: Ring, - stats: ( + stats: Direct(( protection: Some(Normal(0.5)), crit_power: Some(0.025), - ), + )), )), quality: Moderate, tags: [], diff --git a/assets/common/items/armor/misc/ring/scratched.ron b/assets/common/items/armor/misc/ring/scratched.ron index 315a0b7a3f..a2703e9dd1 100644 --- a/assets/common/items/armor/misc/ring/scratched.ron +++ b/assets/common/items/armor/misc/ring/scratched.ron @@ -3,9 +3,9 @@ ItemDef( description: "Barely fits your finger.", kind: Armor(( kind: Ring, - stats: ( + stats: Direct(( protection: Some(Normal(0.5)), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/armor/misc/ring/topaz.ron b/assets/common/items/armor/misc/ring/topaz.ron index edf33cc8cc..91e61a20c7 100644 --- a/assets/common/items/armor/misc/ring/topaz.ron +++ b/assets/common/items/armor/misc/ring/topaz.ron @@ -3,10 +3,10 @@ ItemDef( description: "A copper ring with a topaz gem.", kind: Armor(( kind: Ring, - stats: ( + stats: Direct(( protection: Some(Normal(0.5)), energy_max: Some(5.0), - ), + )), )), quality: Moderate, tags: [], diff --git a/assets/common/items/armor/misc/shoulder/iron_spikes.ron b/assets/common/items/armor/misc/shoulder/iron_spikes.ron index 64da796f5d..b0ea1545b0 100644 --- a/assets/common/items/armor/misc/shoulder/iron_spikes.ron +++ b/assets/common/items/armor/misc/shoulder/iron_spikes.ron @@ -3,9 +3,9 @@ ItemDef( description: "The heavy, rough iron plate has an interlocking spikes shoved through several slots in the center to dissuade attackers.", kind: Armor(( kind: Shoulder, - stats: ( + stats: Direct(( protection: Some(Normal(12.0)), - ), + )), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/misc/shoulder/leather_iron_0.ron b/assets/common/items/armor/misc/shoulder/leather_iron_0.ron index 31c859cbf5..d9800d1e44 100644 --- a/assets/common/items/armor/misc/shoulder/leather_iron_0.ron +++ b/assets/common/items/armor/misc/shoulder/leather_iron_0.ron @@ -3,9 +3,9 @@ ItemDef( description: "Leather shoulders decorated with heavy iron hooks provide protection to the wearer.", kind: Armor(( kind: Shoulder, - stats: ( + stats: Direct(( protection: Some(Normal(9.0)), - ), + )), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/misc/shoulder/leather_iron_1.ron b/assets/common/items/armor/misc/shoulder/leather_iron_1.ron index ef12d2191e..be0e781ed1 100644 --- a/assets/common/items/armor/misc/shoulder/leather_iron_1.ron +++ b/assets/common/items/armor/misc/shoulder/leather_iron_1.ron @@ -3,9 +3,9 @@ ItemDef( description: "Leather inset with heavy iron spikes provide solid protection to the wearer.", kind: Armor(( kind: Shoulder, - stats: ( + stats: Direct(( protection: Some(Normal(9.0)), - ), + )), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/misc/shoulder/leather_iron_2.ron b/assets/common/items/armor/misc/shoulder/leather_iron_2.ron index 5e02d5c81e..a4693d440f 100644 --- a/assets/common/items/armor/misc/shoulder/leather_iron_2.ron +++ b/assets/common/items/armor/misc/shoulder/leather_iron_2.ron @@ -3,9 +3,9 @@ ItemDef( description: "Leather inset with heavy iron bands provide protection to the wearer.", kind: Armor(( kind: Shoulder, - stats: ( + stats: Direct(( protection: Some(Normal(9.0)), - ), + )), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/misc/shoulder/leather_iron_3.ron b/assets/common/items/armor/misc/shoulder/leather_iron_3.ron index 162f1ba0ad..93c5ef2a71 100644 --- a/assets/common/items/armor/misc/shoulder/leather_iron_3.ron +++ b/assets/common/items/armor/misc/shoulder/leather_iron_3.ron @@ -3,9 +3,9 @@ ItemDef( description: "Leather inset with iron fragments provide protection to the wearer.", kind: Armor(( kind: Shoulder, - stats: ( + stats: Direct(( protection: Some(Normal(9.0)), - ), + )), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/misc/shoulder/leather_strip.ron b/assets/common/items/armor/misc/shoulder/leather_strip.ron index 35d8ba5211..30de3907a8 100644 --- a/assets/common/items/armor/misc/shoulder/leather_strip.ron +++ b/assets/common/items/armor/misc/shoulder/leather_strip.ron @@ -3,9 +3,9 @@ ItemDef( description: "Tanned animal hide strips formed into loose shoulder pads.", kind: Armor(( kind: Shoulder, - stats: ( + stats: Direct(( protection: Some(Normal(4.0)), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/armor/misc/tabard/admin.ron b/assets/common/items/armor/misc/tabard/admin.ron index c1850e712f..7db4ba5c99 100644 --- a/assets/common/items/armor/misc/tabard/admin.ron +++ b/assets/common/items/armor/misc/tabard/admin.ron @@ -3,10 +3,10 @@ ItemDef( description: "With great power comes great responsibility.", kind: Armor(( kind: Tabard, - stats: ( + stats: Direct(( protection: Some(Invincible), poise_resilience: Some(Invincible), - ), + )), )), quality: Debug, tags: [], diff --git a/assets/common/items/armor/pirate/belt.ron b/assets/common/items/armor/pirate/belt.ron index af3d57e02b..1813da86d5 100644 --- a/assets/common/items/armor/pirate/belt.ron +++ b/assets/common/items/armor/pirate/belt.ron @@ -3,13 +3,7 @@ ItemDef( description: "", kind: Armor(( kind: Belt, - stats: ( - protection: Some(Normal(8.0)), - poise_resilience: Some(Normal(1.0)), - energy_max: Some(2.0), - energy_reward: Some(0.025), - crit_power: Some(0.02), - ), + stats: FromSet("Pirate"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/pirate/chest.ron b/assets/common/items/armor/pirate/chest.ron index a1f025115e..c813bea4ec 100644 --- a/assets/common/items/armor/pirate/chest.ron +++ b/assets/common/items/armor/pirate/chest.ron @@ -3,13 +3,7 @@ ItemDef( description: "", kind: Armor(( kind: Chest, - stats: ( - protection: Some(Normal(48.0)), - poise_resilience: Some(Normal(6.0)), - energy_max: Some(13.5), - energy_reward: Some(0.135), - crit_power: Some(0.125), - ), + stats: FromSet("Pirate"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/pirate/foot.ron b/assets/common/items/armor/pirate/foot.ron index b4149b8ee8..db3783c3f9 100644 --- a/assets/common/items/armor/pirate/foot.ron +++ b/assets/common/items/armor/pirate/foot.ron @@ -3,13 +3,7 @@ ItemDef( description: "", kind: Armor(( kind: Foot, - stats: ( - protection: Some(Normal(16.0)), - poise_resilience: Some(Normal(2.0)), - energy_max: Some(4.5), - energy_reward: Some(0.045), - crit_power: Some(0.04), - ), + stats: FromSet("Pirate"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/pirate/hand.ron b/assets/common/items/armor/pirate/hand.ron index 670c7c27e0..ad02e93d27 100644 --- a/assets/common/items/armor/pirate/hand.ron +++ b/assets/common/items/armor/pirate/hand.ron @@ -3,13 +3,7 @@ ItemDef( description: "", kind: Armor(( kind: Hand, - stats: ( - protection: Some(Normal(16.0)), - poise_resilience: Some(Normal(2.0)), - energy_max: Some(4.5), - energy_reward: Some(0.045), - crit_power: Some(0.04), - ), + stats: FromSet("Pirate"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/pirate/hat.ron b/assets/common/items/armor/pirate/hat.ron index 5452eee64e..b9cd6ad67b 100644 --- a/assets/common/items/armor/pirate/hat.ron +++ b/assets/common/items/armor/pirate/hat.ron @@ -3,11 +3,11 @@ ItemDef( description: "It seems like a parrot was perched up here.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( protection: Some(Normal(3.0)), energy_reward: Some(0.025), crit_power: Some(0.1), - ), + )), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/pirate/pants.ron b/assets/common/items/armor/pirate/pants.ron index 45e73ad5c5..1b2eef620b 100644 --- a/assets/common/items/armor/pirate/pants.ron +++ b/assets/common/items/armor/pirate/pants.ron @@ -3,13 +3,7 @@ ItemDef( description: "", kind: Armor(( kind: Pants, - stats: ( - protection: Some(Normal(32.0)), - poise_resilience: Some(Normal(4.0)), - energy_max: Some(9.0), - energy_reward: Some(0.1), - crit_power: Some(0.08), - ), + stats: FromSet("Pirate"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/pirate/shoulder.ron b/assets/common/items/armor/pirate/shoulder.ron index 6e4057bbd4..331ca0791a 100644 --- a/assets/common/items/armor/pirate/shoulder.ron +++ b/assets/common/items/armor/pirate/shoulder.ron @@ -3,13 +3,7 @@ ItemDef( description: "", kind: Armor(( kind: Shoulder, - stats: ( - protection: Some(Normal(32.0)), - poise_resilience: Some(Normal(5.0)), - energy_max: Some(9.0), - energy_reward: Some(0.1), - crit_power: Some(0.08), - ), + stats: FromSet("Pirate"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/rugged/chest.ron b/assets/common/items/armor/rugged/chest.ron index 8fb5fe94e5..5b08030284 100644 --- a/assets/common/items/armor/rugged/chest.ron +++ b/assets/common/items/armor/rugged/chest.ron @@ -3,9 +3,9 @@ ItemDef( description: "Smells like Adventure.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(3.0)), - ), + )), )), quality: Low, tags: [ diff --git a/assets/common/items/armor/rugged/pants.ron b/assets/common/items/armor/rugged/pants.ron index 5db0546175..4fd361e911 100644 --- a/assets/common/items/armor/rugged/pants.ron +++ b/assets/common/items/armor/rugged/pants.ron @@ -3,9 +3,9 @@ ItemDef( description: "They remind you of the old days.", kind: Armor(( kind: Pants, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), - ), + )), )), quality: Low, tags: [ diff --git a/assets/common/items/armor/savage/back.ron b/assets/common/items/armor/savage/back.ron index 6a3cbb895a..fdf7e62cce 100644 --- a/assets/common/items/armor/savage/back.ron +++ b/assets/common/items/armor/savage/back.ron @@ -3,9 +3,7 @@ ItemDef( description: "Brings the fury of the barbarians.", kind: Armor(( kind: Back, - stats: ( - protection: Some(Normal(4.0)), - ), + stats: FromSet("Savage"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/savage/belt.ron b/assets/common/items/armor/savage/belt.ron index 22155e97e2..fb84d39aff 100644 --- a/assets/common/items/armor/savage/belt.ron +++ b/assets/common/items/armor/savage/belt.ron @@ -3,9 +3,7 @@ ItemDef( description: "Brings the fury of the barbarians.", kind: Armor(( kind: Belt, - stats: ( - protection: Some(Normal(4.0)), - ), + stats: FromSet("Savage"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/savage/chest.ron b/assets/common/items/armor/savage/chest.ron index bb89369aab..2edbe327b3 100644 --- a/assets/common/items/armor/savage/chest.ron +++ b/assets/common/items/armor/savage/chest.ron @@ -3,9 +3,7 @@ ItemDef( description: "Brings the fury of the barbarians.", kind: Armor(( kind: Chest, - stats: ( - protection: Some(Normal(25.0)), - ), + stats: FromSet("Savage"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/savage/foot.ron b/assets/common/items/armor/savage/foot.ron index c1d7da6792..6afdd53a91 100644 --- a/assets/common/items/armor/savage/foot.ron +++ b/assets/common/items/armor/savage/foot.ron @@ -3,9 +3,7 @@ ItemDef( description: "Brings the fury of the barbarians.", kind: Armor(( kind: Foot, - stats: ( - protection: Some(Normal(5.0)), - ), + stats: FromSet("Savage"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/savage/hand.ron b/assets/common/items/armor/savage/hand.ron index 0103a68c57..7cea3c5559 100644 --- a/assets/common/items/armor/savage/hand.ron +++ b/assets/common/items/armor/savage/hand.ron @@ -3,9 +3,7 @@ ItemDef( description: "Brings the fury of the barbarians.", kind: Armor(( kind: Hand, - stats: ( - protection: Some(Normal(10.0)), - ), + stats: FromSet("Savage"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/savage/pants.ron b/assets/common/items/armor/savage/pants.ron index 2285a564f3..0b4fe353e8 100644 --- a/assets/common/items/armor/savage/pants.ron +++ b/assets/common/items/armor/savage/pants.ron @@ -3,9 +3,7 @@ ItemDef( description: "Brings the fury of the barbarians.", kind: Armor(( kind: Pants, - stats: ( - protection: Some(Normal(20.0)), - ), + stats: FromSet("Savage"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/savage/shoulder.ron b/assets/common/items/armor/savage/shoulder.ron index 5664a8d3e8..b51d2e39c0 100644 --- a/assets/common/items/armor/savage/shoulder.ron +++ b/assets/common/items/armor/savage/shoulder.ron @@ -3,9 +3,7 @@ ItemDef( description: "Brings the fury of the barbarians.", kind: Armor(( kind: Shoulder, - stats: ( - protection: Some(Normal(15.0)), - ), + stats: FromSet("Savage"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/tarasque/belt.ron b/assets/common/items/armor/tarasque/belt.ron index 32dbede6bb..bca4cd3fd8 100644 --- a/assets/common/items/armor/tarasque/belt.ron +++ b/assets/common/items/armor/tarasque/belt.ron @@ -3,9 +3,7 @@ ItemDef( description: "Shattered band of a tarasque shell, making for a strong belt.", kind: Armor(( kind: Belt, - stats: ( - protection: Some(Normal(8.0)), - ), + stats: FromSet("Tarasque"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/tarasque/chest.ron b/assets/common/items/armor/tarasque/chest.ron index ba1bc4e39a..71bbddeda5 100644 --- a/assets/common/items/armor/tarasque/chest.ron +++ b/assets/common/items/armor/tarasque/chest.ron @@ -3,9 +3,7 @@ ItemDef( description: "The rough protective underbelly and back of a tarasque's shell, formed to fit humanoid proportions.", kind: Armor(( kind: Chest, - stats: ( - protection: Some(Normal(25.0)), - ), + stats: FromSet("Tarasque"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/tarasque/foot.ron b/assets/common/items/armor/tarasque/foot.ron index 0080de1253..e0d105c7d1 100644 --- a/assets/common/items/armor/tarasque/foot.ron +++ b/assets/common/items/armor/tarasque/foot.ron @@ -3,9 +3,7 @@ ItemDef( description: "Tarasque claws form the outside of these boots, protecting the wearer's feet.", kind: Armor(( kind: Foot, - stats: ( - protection: Some(Normal(8.0)), - ), + stats: FromSet("Tarasque"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/tarasque/hand.ron b/assets/common/items/armor/tarasque/hand.ron index c5bb8c2bf3..4a518bddc4 100644 --- a/assets/common/items/armor/tarasque/hand.ron +++ b/assets/common/items/armor/tarasque/hand.ron @@ -3,9 +3,7 @@ ItemDef( description: "Shattered fragments from a tarasque shell shaped into a protective gauntlets.", kind: Armor(( kind: Hand, - stats: ( - protection: Some(Normal(6.0)), - ), + stats: FromSet("Tarasque"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/tarasque/pants.ron b/assets/common/items/armor/tarasque/pants.ron index 7003613f9e..73ef1ee7a2 100644 --- a/assets/common/items/armor/tarasque/pants.ron +++ b/assets/common/items/armor/tarasque/pants.ron @@ -3,9 +3,7 @@ ItemDef( description: "Fragmented tarasque shell tied together to form protective leg armor.", kind: Armor(( kind: Pants, - stats: ( - protection: Some(Normal(20.0)), - ), + stats: FromSet("Tarasque"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/tarasque/shoulder.ron b/assets/common/items/armor/tarasque/shoulder.ron index 38dee07b82..eb1e1df6e2 100644 --- a/assets/common/items/armor/tarasque/shoulder.ron +++ b/assets/common/items/armor/tarasque/shoulder.ron @@ -3,9 +3,7 @@ ItemDef( description: "Spiky tarasque shell fragments formed to fit as shoulder guards.", kind: Armor(( kind: Shoulder, - stats: ( - protection: Some(Normal(16.0)), - ), + stats: FromSet("Tarasque"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/twigs/belt.ron b/assets/common/items/armor/twigs/belt.ron index 9420385506..96444c3432 100644 --- a/assets/common/items/armor/twigs/belt.ron +++ b/assets/common/items/armor/twigs/belt.ron @@ -3,9 +3,7 @@ ItemDef( description: "Small bits of nature magically held together into the shape of a belt.", kind: Armor(( kind: Belt, - stats: ( - protection: Some(Normal(2.0)), - ), + stats: FromSet("Twigs"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/twigs/chest.ron b/assets/common/items/armor/twigs/chest.ron index 03a50f5d7f..801662528a 100644 --- a/assets/common/items/armor/twigs/chest.ron +++ b/assets/common/items/armor/twigs/chest.ron @@ -3,9 +3,7 @@ ItemDef( description: "Small sticks magically imbued to hold together to form a shirt.", kind: Armor(( kind: Chest, - stats: ( - protection: Some(Normal(15.0)), - ), + stats: FromSet("Twigs"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/twigs/foot.ron b/assets/common/items/armor/twigs/foot.ron index 8e3b095e5a..9de6ed91e4 100644 --- a/assets/common/items/armor/twigs/foot.ron +++ b/assets/common/items/armor/twigs/foot.ron @@ -3,9 +3,7 @@ ItemDef( description: "Small twigs intertwined and imbued with magic to provide simple protection.", kind: Armor(( kind: Foot, - stats: ( - protection: Some(Normal(3.0)), - ), + stats: FromSet("Twigs"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/twigs/hand.ron b/assets/common/items/armor/twigs/hand.ron index 99b1f1a6c0..c9e965e0fa 100644 --- a/assets/common/items/armor/twigs/hand.ron +++ b/assets/common/items/armor/twigs/hand.ron @@ -3,9 +3,7 @@ ItemDef( description: "Magically imbued twigs interlocked into simple hand wraps.", kind: Armor(( kind: Hand, - stats: ( - protection: Some(Normal(6.0)), - ), + stats: FromSet("Twigs"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/twigs/pants.ron b/assets/common/items/armor/twigs/pants.ron index 41689bf033..ffca0c2529 100644 --- a/assets/common/items/armor/twigs/pants.ron +++ b/assets/common/items/armor/twigs/pants.ron @@ -3,9 +3,7 @@ ItemDef( description: "Magically imbued twigs formed into links similar to chainmail.", kind: Armor(( kind: Pants, - stats: ( - protection: Some(Normal(12.0)), - ), + stats: FromSet("Twigs"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/twigs/shoulder.ron b/assets/common/items/armor/twigs/shoulder.ron index 7c78b58cdf..98b1cfa1b3 100644 --- a/assets/common/items/armor/twigs/shoulder.ron +++ b/assets/common/items/armor/twigs/shoulder.ron @@ -3,9 +3,7 @@ ItemDef( description: "Spaulders made from tightly tied twigs.", kind: Armor(( kind: Shoulder, - stats: ( - protection: Some(Normal(9.0)), - ), + stats: FromSet("Twigs"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/twigsflowers/belt.ron b/assets/common/items/armor/twigsflowers/belt.ron index a6acdc69ad..82d0f7e677 100644 --- a/assets/common/items/armor/twigsflowers/belt.ron +++ b/assets/common/items/armor/twigsflowers/belt.ron @@ -3,9 +3,7 @@ ItemDef( description: "Magically imbued twigs, held together with a flower intertwining its stem to hold the belt together.", kind: Armor(( kind: Belt, - stats: ( - protection: Some(Normal(2.0)), - ), + stats: FromSet("Twigs Flowers"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/twigsflowers/chest.ron b/assets/common/items/armor/twigsflowers/chest.ron index 8f8dc0d02f..8bf2c6520d 100644 --- a/assets/common/items/armor/twigsflowers/chest.ron +++ b/assets/common/items/armor/twigsflowers/chest.ron @@ -3,9 +3,7 @@ ItemDef( description: "Magically imbued twigs decorated with flowers and their stems, letting others know your intentions of peace and love.", kind: Armor(( kind: Chest, - stats: ( - protection: Some(Normal(15.0)), - ), + stats: FromSet("Twigs Flowers"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/twigsflowers/foot.ron b/assets/common/items/armor/twigsflowers/foot.ron index 8ede598869..75dbc13cca 100644 --- a/assets/common/items/armor/twigsflowers/foot.ron +++ b/assets/common/items/armor/twigsflowers/foot.ron @@ -3,9 +3,7 @@ ItemDef( description: "Woven and magically imbued, these boots of twigs and flowers provide simple protection and peace to the wearer.", kind: Armor(( kind: Foot, - stats: ( - protection: Some(Normal(3.0)), - ), + stats: FromSet("Twigs Flowers"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/twigsflowers/hand.ron b/assets/common/items/armor/twigsflowers/hand.ron index 589656142b..35152eb859 100644 --- a/assets/common/items/armor/twigsflowers/hand.ron +++ b/assets/common/items/armor/twigsflowers/hand.ron @@ -3,9 +3,7 @@ ItemDef( description: "Wrapped and intertwined twigs held together with magic and flowers with their stems, providing peace and protection for the wearer.", kind: Armor(( kind: Hand, - stats: ( - protection: Some(Normal(6.0)), - ), + stats: FromSet("Twigs Flowers"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/twigsflowers/pants.ron b/assets/common/items/armor/twigsflowers/pants.ron index c01e979d34..a541f7217f 100644 --- a/assets/common/items/armor/twigsflowers/pants.ron +++ b/assets/common/items/armor/twigsflowers/pants.ron @@ -3,9 +3,7 @@ ItemDef( description: "Chainmail woven twigs enhanced with flower stems to provide protection and peace.", kind: Armor(( kind: Pants, - stats: ( - protection: Some(Normal(12.0)), - ), + stats: FromSet("Twigs Flowers"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/twigsflowers/shoulder.ron b/assets/common/items/armor/twigsflowers/shoulder.ron index 8f4e90485c..2198a2b323 100644 --- a/assets/common/items/armor/twigsflowers/shoulder.ron +++ b/assets/common/items/armor/twigsflowers/shoulder.ron @@ -3,9 +3,7 @@ ItemDef( description: "Flowers join the tied twigs to provide protection and peace to the wearer.", kind: Armor(( kind: Shoulder, - stats: ( - protection: Some(Normal(9.0)), - ), + stats: FromSet("Twigs Flowers"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/twigsleaves/belt.ron b/assets/common/items/armor/twigsleaves/belt.ron index f997759fc7..872823309d 100644 --- a/assets/common/items/armor/twigsleaves/belt.ron +++ b/assets/common/items/armor/twigsleaves/belt.ron @@ -3,9 +3,7 @@ ItemDef( description: "Dried leaves cover over the standard twig belt, providing a slightly different texture.", kind: Armor(( kind: Belt, - stats: ( - protection: Some(Normal(2.0)), - ), + stats: FromSet("Twigs Leaves"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/twigsleaves/chest.ron b/assets/common/items/armor/twigsleaves/chest.ron index ee23ca8bde..8c929caeef 100644 --- a/assets/common/items/armor/twigsleaves/chest.ron +++ b/assets/common/items/armor/twigsleaves/chest.ron @@ -3,9 +3,7 @@ ItemDef( description: "Leaves cover the magically imbued twig shirt, providing a more natural appearance.", kind: Armor(( kind: Chest, - stats: ( - protection: Some(Normal(15.0)), - ), + stats: FromSet("Twigs Leaves"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/twigsleaves/foot.ron b/assets/common/items/armor/twigsleaves/foot.ron index a88e622b94..35c85a9b5a 100644 --- a/assets/common/items/armor/twigsleaves/foot.ron +++ b/assets/common/items/armor/twigsleaves/foot.ron @@ -3,9 +3,7 @@ ItemDef( description: "Leaves cover the magically entwined twigs to provide simple protection from the elements.", kind: Armor(( kind: Foot, - stats: ( - protection: Some(Normal(3.0)), - ), + stats: FromSet("Twigs Leaves"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/twigsleaves/hand.ron b/assets/common/items/armor/twigsleaves/hand.ron index 3044838a39..4d6e0a0475 100644 --- a/assets/common/items/armor/twigsleaves/hand.ron +++ b/assets/common/items/armor/twigsleaves/hand.ron @@ -3,9 +3,7 @@ ItemDef( description: "Leaves help hide the magic-interlocking twigs, and provide mild protection from the elements.", kind: Armor(( kind: Hand, - stats: ( - protection: Some(Normal(6.0)), - ), + stats: FromSet("Twigs Leaves"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/twigsleaves/pants.ron b/assets/common/items/armor/twigsleaves/pants.ron index d7ae46010e..9206e21f18 100644 --- a/assets/common/items/armor/twigsleaves/pants.ron +++ b/assets/common/items/armor/twigsleaves/pants.ron @@ -3,9 +3,7 @@ ItemDef( description: "Leaves cover the magically imbued chainmail twigs, providing protection from the elements.", kind: Armor(( kind: Pants, - stats: ( - protection: Some(Normal(12.0)), - ), + stats: FromSet("Twigs Leaves"), )), quality: Moderate, tags: [ diff --git a/assets/common/items/armor/twigsleaves/shoulder.ron b/assets/common/items/armor/twigsleaves/shoulder.ron index 74fc1240a6..16a8ccc847 100644 --- a/assets/common/items/armor/twigsleaves/shoulder.ron +++ b/assets/common/items/armor/twigsleaves/shoulder.ron @@ -3,9 +3,7 @@ ItemDef( description: "Leaves cover over the twigs to provide better protection from the elements.", kind: Armor(( kind: Shoulder, - stats: ( - protection: Some(Normal(9.0)), - ), + stats: FromSet("Twigs Leaves"), )), quality: Common, tags: [ diff --git a/assets/common/items/armor/velorite_mage/back.ron b/assets/common/items/armor/velorite_mage/back.ron index 8dbaff339b..aeee09559b 100644 --- a/assets/common/items/armor/velorite_mage/back.ron +++ b/assets/common/items/armor/velorite_mage/back.ron @@ -3,9 +3,7 @@ ItemDef( description: "Keeps your shoulders warm.", kind: Armor(( kind: Back, - stats: ( - protection: Some(Normal(2.8)), - ), + stats: FromSet("Velorite Battlemage"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/velorite_mage/belt.ron b/assets/common/items/armor/velorite_mage/belt.ron index e442408075..dfbda16bc5 100644 --- a/assets/common/items/armor/velorite_mage/belt.ron +++ b/assets/common/items/armor/velorite_mage/belt.ron @@ -3,9 +3,7 @@ ItemDef( description: "", kind: Armor(( kind: Belt, - stats: ( - protection: Some(Normal(5.8)), - ), + stats: FromSet("Velorite Battlemage"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/velorite_mage/chest.ron b/assets/common/items/armor/velorite_mage/chest.ron index e2a8a7d3f2..f6ea823f9e 100644 --- a/assets/common/items/armor/velorite_mage/chest.ron +++ b/assets/common/items/armor/velorite_mage/chest.ron @@ -3,9 +3,7 @@ ItemDef( description: "", kind: Armor(( kind: Chest, - stats: ( - protection: Some(Normal(28.0)), - ), + stats: FromSet("Velorite Battlemage"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/velorite_mage/foot.ron b/assets/common/items/armor/velorite_mage/foot.ron index 5e297f763e..b06b641da3 100644 --- a/assets/common/items/armor/velorite_mage/foot.ron +++ b/assets/common/items/armor/velorite_mage/foot.ron @@ -3,9 +3,7 @@ ItemDef( description: "", kind: Armor(( kind: Foot, - stats: ( - protection: Some(Normal(5.9)), - ), + stats: FromSet("Velorite Battlemage"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/velorite_mage/hand.ron b/assets/common/items/armor/velorite_mage/hand.ron index 9fb091069f..bbe0c857ba 100644 --- a/assets/common/items/armor/velorite_mage/hand.ron +++ b/assets/common/items/armor/velorite_mage/hand.ron @@ -3,9 +3,7 @@ ItemDef( description: "", kind: Armor(( kind: Hand, - stats: ( - protection: Some(Normal(11.5)), - ), + stats: FromSet("Velorite Battlemage"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/velorite_mage/pants.ron b/assets/common/items/armor/velorite_mage/pants.ron index 3cc05ec91d..9958223802 100644 --- a/assets/common/items/armor/velorite_mage/pants.ron +++ b/assets/common/items/armor/velorite_mage/pants.ron @@ -3,9 +3,7 @@ ItemDef( description: "", kind: Armor(( kind: Pants, - stats: ( - protection: Some(Normal(23.0)), - ), + stats: FromSet("Velorite Battlemage"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/velorite_mage/shoulder.ron b/assets/common/items/armor/velorite_mage/shoulder.ron index df74499612..adc44751a6 100644 --- a/assets/common/items/armor/velorite_mage/shoulder.ron +++ b/assets/common/items/armor/velorite_mage/shoulder.ron @@ -3,9 +3,7 @@ ItemDef( description: "", kind: Armor(( kind: Shoulder, - stats: ( - protection: Some(Normal(17.0)), - ), + stats: FromSet("Velorite Battlemage"), )), quality: High, tags: [ diff --git a/assets/common/items/armor/witch/back.ron b/assets/common/items/armor/witch/back.ron index ac7056b722..9f7a2a8604 100644 --- a/assets/common/items/armor/witch/back.ron +++ b/assets/common/items/armor/witch/back.ron @@ -3,13 +3,7 @@ ItemDef( description: "", kind: Armor(( kind: Back, - stats: ( - protection: Some(Normal(32.0)), - poise_resilience: Some(Normal(5.0)), - energy_max: Some(9.0), - energy_reward: Some(0.1), - crit_power: Some(0.08), - ), + stats: FromSet("Witch"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/witch/belt.ron b/assets/common/items/armor/witch/belt.ron index 0b8528f6fb..7124305281 100644 --- a/assets/common/items/armor/witch/belt.ron +++ b/assets/common/items/armor/witch/belt.ron @@ -3,13 +3,7 @@ ItemDef( description: "", kind: Armor(( kind: Belt, - stats: ( - protection: Some(Normal(8.0)), - poise_resilience: Some(Normal(1.0)), - energy_max: Some(2.0), - energy_reward: Some(0.025), - crit_power: Some(0.02), - ), + stats: FromSet("Witch"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/witch/chest.ron b/assets/common/items/armor/witch/chest.ron index 5d64b12537..8cd0842b27 100644 --- a/assets/common/items/armor/witch/chest.ron +++ b/assets/common/items/armor/witch/chest.ron @@ -3,13 +3,7 @@ ItemDef( description: "", kind: Armor(( kind: Chest, - stats: ( - protection: Some(Normal(48.0)), - poise_resilience: Some(Normal(6.0)), - energy_max: Some(13.5), - energy_reward: Some(0.135), - crit_power: Some(0.125), - ), + stats: FromSet("Witch"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/witch/foot.ron b/assets/common/items/armor/witch/foot.ron index f94a5224ac..8a437d2382 100644 --- a/assets/common/items/armor/witch/foot.ron +++ b/assets/common/items/armor/witch/foot.ron @@ -3,13 +3,7 @@ ItemDef( description: "", kind: Armor(( kind: Foot, - stats: ( - protection: Some(Normal(16.0)), - poise_resilience: Some(Normal(2.0)), - energy_max: Some(4.5), - energy_reward: Some(0.045), - crit_power: Some(0.04), - ), + stats: FromSet("Witch"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/witch/hand.ron b/assets/common/items/armor/witch/hand.ron index ec9b468538..a9dc9a3ffd 100644 --- a/assets/common/items/armor/witch/hand.ron +++ b/assets/common/items/armor/witch/hand.ron @@ -3,13 +3,7 @@ ItemDef( description: "", kind: Armor(( kind: Hand, - stats: ( - protection: Some(Normal(16.0)), - poise_resilience: Some(Normal(2.0)), - energy_max: Some(4.5), - energy_reward: Some(0.045), - crit_power: Some(0.04), - ), + stats: FromSet("Witch"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/witch/hat.ron b/assets/common/items/armor/witch/hat.ron index 8b05a818d0..1e64b5dffa 100644 --- a/assets/common/items/armor/witch/hat.ron +++ b/assets/common/items/armor/witch/hat.ron @@ -3,12 +3,12 @@ ItemDef( description: "Draws strength from dark arts.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( protection: Some(Normal(2.0)), poise_resilience: Some(Normal(1.5)), energy_max: Some(8.0), energy_reward: Some(0.084), - ), + )), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/witch/pants.ron b/assets/common/items/armor/witch/pants.ron index f3c640cf36..7b3087bf30 100644 --- a/assets/common/items/armor/witch/pants.ron +++ b/assets/common/items/armor/witch/pants.ron @@ -3,13 +3,7 @@ ItemDef( description: "", kind: Armor(( kind: Pants, - stats: ( - protection: Some(Normal(32.0)), - poise_resilience: Some(Normal(4.0)), - energy_max: Some(9.0), - energy_reward: Some(0.1), - crit_power: Some(0.08), - ), + stats: FromSet("Witch"), )), quality: Epic, tags: [ diff --git a/assets/common/items/armor/witch/shoulder.ron b/assets/common/items/armor/witch/shoulder.ron index 56e2946c2f..f3bca853dd 100644 --- a/assets/common/items/armor/witch/shoulder.ron +++ b/assets/common/items/armor/witch/shoulder.ron @@ -3,13 +3,7 @@ ItemDef( description: "", kind: Armor(( kind: Shoulder, - stats: ( - protection: Some(Normal(32.0)), - poise_resilience: Some(Normal(5.0)), - energy_max: Some(9.0), - energy_reward: Some(0.1), - crit_power: Some(0.08), - ), + stats: FromSet("Witch"), )), quality: Epic, tags: [ diff --git a/assets/common/items/calendar/christmas/armor/misc/head/woolly_wintercap.ron b/assets/common/items/calendar/christmas/armor/misc/head/woolly_wintercap.ron index efe5ad85ff..a3a7a40414 100644 --- a/assets/common/items/calendar/christmas/armor/misc/head/woolly_wintercap.ron +++ b/assets/common/items/calendar/christmas/armor/misc/head/woolly_wintercap.ron @@ -3,12 +3,12 @@ ItemDef( description: "Simple, stylish, and festive.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( protection: Some(Normal(0.0)), poise_resilience: Some(Normal(0.0)), energy_max: Some(4.0), energy_reward: Some(0.04), - ), + )), )), quality: Common, tags: [], diff --git a/assets/common/items/debug/admin.ron b/assets/common/items/debug/admin.ron index fd8be70261..047bbbfeae 100644 --- a/assets/common/items/debug/admin.ron +++ b/assets/common/items/debug/admin.ron @@ -1,19 +1,17 @@ ItemDef( name: "Admin's Tabard", description: "With great power comes\ngreat responsibility.", - kind: Armor( - ( - kind: Tabard, - stats: ( - protection: Some(Invincible), - poise_resilience: Some(Invincible), - energy_max: Some(900.0), - energy_reward: Some(9.0), - crit_power: Some(1.0), - stealth: Some(1000.0), - ), - ) - ), + kind: Armor(( + kind: Tabard, + stats: Direct(( + protection: Some(Invincible), + poise_resilience: Some(Invincible), + energy_max: Some(900.0), + energy_reward: Some(9.0), + crit_power: Some(1.0), + stealth: Some(1000.0), + )), + )), quality: Debug, tags: [], ) diff --git a/assets/common/items/debug/admin_back.ron b/assets/common/items/debug/admin_back.ron index 2cc17d2a3f..507a1674b7 100644 --- a/assets/common/items/debug/admin_back.ron +++ b/assets/common/items/debug/admin_back.ron @@ -1,13 +1,10 @@ ItemDef( name: "Admin's Cape", description: "With great power comes\ngreat responsibility.", - kind: Armor( - ( - kind: Back, - stats: ( - ), - ) - ), + kind: Armor(( + kind: Back, + stats: Direct(()), + )), quality: Debug, tags: [], ) diff --git a/assets/common/items/debug/admin_black_hole.ron b/assets/common/items/debug/admin_black_hole.ron index 61a4fb8f21..4faf6b2289 100644 --- a/assets/common/items/debug/admin_black_hole.ron +++ b/assets/common/items/debug/admin_black_hole.ron @@ -4,8 +4,7 @@ ItemDef( kind: Armor( ( kind: Bag, - stats: ( - ), + stats: Direct(()), ) ), quality: Debug, diff --git a/assets/common/items/debug/cultist_belt.ron b/assets/common/items/debug/cultist_belt.ron index 0b839e15b9..261416219d 100644 --- a/assets/common/items/debug/cultist_belt.ron +++ b/assets/common/items/debug/cultist_belt.ron @@ -1,13 +1,10 @@ ItemDef( name: "Velorite Belt", description: "", - kind: Armor( - ( - kind: Belt, - stats: ( - ), - ) - ), + kind: Armor(( + kind: Belt, + stats: Direct(()), + )), quality: Debug, tags: [], ) diff --git a/assets/common/items/debug/cultist_boots.ron b/assets/common/items/debug/cultist_boots.ron index c8aeac9f82..4084c2853e 100644 --- a/assets/common/items/debug/cultist_boots.ron +++ b/assets/common/items/debug/cultist_boots.ron @@ -1,13 +1,10 @@ ItemDef( name: "Velorite Boots", description: "", - kind: Armor( - ( - kind: Foot, - stats: ( - ), - ) - ), + kind: Armor(( + kind: Foot, + stats: Direct(()), + )), quality: Debug, tags: [], ) diff --git a/assets/common/items/debug/cultist_chest_blue.ron b/assets/common/items/debug/cultist_chest_blue.ron index 65a2aace85..9d59562aca 100644 --- a/assets/common/items/debug/cultist_chest_blue.ron +++ b/assets/common/items/debug/cultist_chest_blue.ron @@ -1,13 +1,10 @@ ItemDef( name: "Velorite Chest", description: "", - kind: Armor( - ( - kind: Chest, - stats: ( - ), - ) - ), + kind: Armor(( + kind: Chest, + stats: Direct(()), + )), quality: Debug, tags: [], ) diff --git a/assets/common/items/debug/cultist_hands_blue.ron b/assets/common/items/debug/cultist_hands_blue.ron index efa6a5d811..a2870e7776 100644 --- a/assets/common/items/debug/cultist_hands_blue.ron +++ b/assets/common/items/debug/cultist_hands_blue.ron @@ -1,13 +1,10 @@ ItemDef( name: "Velorite Gloves", description: "", - kind: Armor( - ( - kind: Hand, - stats: ( - ), - ) - ), + kind: Armor(( + kind: Hand, + stats: Direct(()), + )), quality: Debug, tags: [], ) diff --git a/assets/common/items/debug/cultist_legs_blue.ron b/assets/common/items/debug/cultist_legs_blue.ron index c3ad7986d8..fba70b07a2 100644 --- a/assets/common/items/debug/cultist_legs_blue.ron +++ b/assets/common/items/debug/cultist_legs_blue.ron @@ -1,13 +1,10 @@ ItemDef( name: "Velorite Skirt", description: "", - kind: Armor( - ( - kind: Pants, - stats: ( - ), - ) - ), + kind: Armor(( + kind: Pants, + stats: Direct(()), + )), quality: Debug, tags: [], ) diff --git a/assets/common/items/debug/cultist_shoulder_blue.ron b/assets/common/items/debug/cultist_shoulder_blue.ron index 32b80bef80..d7d74312a1 100644 --- a/assets/common/items/debug/cultist_shoulder_blue.ron +++ b/assets/common/items/debug/cultist_shoulder_blue.ron @@ -1,13 +1,10 @@ ItemDef( name: "Velorite Mantle", description: "", - kind: Armor( - ( - kind: Shoulder, - stats: ( - ), - ) - ), + kind: Armor(( + kind: Shoulder, + stats: Direct(()), + )), quality: Debug, tags: [], ) diff --git a/assets/common/items/debug/dungeon_purple.ron b/assets/common/items/debug/dungeon_purple.ron index 6fe0f1b327..5991093294 100644 --- a/assets/common/items/debug/dungeon_purple.ron +++ b/assets/common/items/debug/dungeon_purple.ron @@ -1,13 +1,10 @@ ItemDef( name: "Velorite Admin Cape", description: "Where did I put my banhammer again?", - kind: Armor( - ( - kind: Back, - stats: ( - ), - ) - ), + kind: Armor(( + kind: Back, + stats: Direct(()), + )), quality: Debug, tags: [], ) diff --git a/assets/common/items/mineral/ingot/copper.ron b/assets/common/items/mineral/ingot/copper.ron index 4446b33d37..2217a9a6ea 100644 --- a/assets/common/items/mineral/ingot/copper.ron +++ b/assets/common/items/mineral/ingot/copper.ron @@ -5,5 +5,5 @@ ItemDef( descriptor: "Copper", ), quality: Low, - tags: [], + tags: [MaterialKind(Metal)], ) diff --git a/assets/common/items/mineral/ingot/gold.ron b/assets/common/items/mineral/ingot/gold.ron index bdbaa29df5..e8f4be1470 100644 --- a/assets/common/items/mineral/ingot/gold.ron +++ b/assets/common/items/mineral/ingot/gold.ron @@ -5,5 +5,5 @@ ItemDef( descriptor: "Golden", ), quality: Epic, - tags: [], + tags: [MaterialKind(Metal)], ) \ No newline at end of file diff --git a/assets/common/items/mineral/ingot/silver.ron b/assets/common/items/mineral/ingot/silver.ron index a65b4739da..0fc2b14c30 100644 --- a/assets/common/items/mineral/ingot/silver.ron +++ b/assets/common/items/mineral/ingot/silver.ron @@ -5,5 +5,5 @@ ItemDef( descriptor: "Silver", ), quality: Epic, - tags: [], + tags: [MaterialKind(Metal)], ) \ No newline at end of file diff --git a/assets/common/items/mineral/ingot/tin.ron b/assets/common/items/mineral/ingot/tin.ron index 93ecf2c25e..69c5117144 100644 --- a/assets/common/items/mineral/ingot/tin.ron +++ b/assets/common/items/mineral/ingot/tin.ron @@ -5,5 +5,5 @@ ItemDef( descriptor: "Tin", ), quality: Common, - tags: [], + tags: [MaterialKind(Metal)], ) diff --git a/assets/common/items/modular/weapon/primary/staff/longpole.ron b/assets/common/items/modular/weapon/primary/staff/longpole.ron index 23c4a470bc..6cc9c8fc42 100644 --- a/assets/common/items/modular/weapon/primary/staff/longpole.ron +++ b/assets/common/items/modular/weapon/primary/staff/longpole.ron @@ -15,7 +15,7 @@ ItemDef( buff_strength: 0.8, ), hand_restriction: Some(Two), - weapon_name: Universal("Long Pole"), + weapon_name: Universal("Longpole"), ) ), quality: Low, diff --git a/assets/common/items/modular/weapon/secondary/axe/long.ron b/assets/common/items/modular/weapon/secondary/axe/long.ron index a64625488a..8740cd8711 100644 --- a/assets/common/items/modular/weapon/secondary/axe/long.ron +++ b/assets/common/items/modular/weapon/secondary/axe/long.ron @@ -6,11 +6,11 @@ ItemDef( toolkind: Axe, stats: ( equip_time_secs: 1.0, - power: 1.1, + power: 1.25, effect_power: 1.1, - speed: 0.9, + speed: 0.8, crit_chance: 0.9, - range: 1.0, + range: 1.2, energy_efficiency: 0.9, buff_strength: 1.1, ), diff --git a/assets/common/items/modular/weapon/secondary/axe/short.ron b/assets/common/items/modular/weapon/secondary/axe/short.ron index b67d9ac192..a94a9bb9eb 100644 --- a/assets/common/items/modular/weapon/secondary/axe/short.ron +++ b/assets/common/items/modular/weapon/secondary/axe/short.ron @@ -6,12 +6,12 @@ ItemDef( toolkind: Axe, stats: ( equip_time_secs: 1.0, - power: 0.9, + power: 0.8, effect_power: 0.9, - speed: 1.0, - crit_chance: 1.0, - range: 1.0, - energy_efficiency: 1.0, + speed: 1.5, + crit_chance: 1.1, + range: 0.85, + energy_efficiency: 1.1, buff_strength: 0.9, ), hand_restriction: Some(One), diff --git a/assets/common/items/modular/weapon/secondary/bow/long.ron b/assets/common/items/modular/weapon/secondary/bow/long.ron index d4df5ef79a..d93ba75bc9 100644 --- a/assets/common/items/modular/weapon/secondary/bow/long.ron +++ b/assets/common/items/modular/weapon/secondary/bow/long.ron @@ -6,11 +6,11 @@ ItemDef( toolkind: Bow, stats: ( equip_time_secs: 1.0, - power: 1.1, + power: 1.25, effect_power: 1.1, - speed: 0.9, + speed: 0.8, crit_chance: 0.9, - range: 1.0, + range: 1.2, energy_efficiency: 0.9, buff_strength: 1.1, ), diff --git a/assets/common/items/modular/weapon/secondary/bow/short.ron b/assets/common/items/modular/weapon/secondary/bow/short.ron index 721093da15..7e70f6d675 100644 --- a/assets/common/items/modular/weapon/secondary/bow/short.ron +++ b/assets/common/items/modular/weapon/secondary/bow/short.ron @@ -6,11 +6,11 @@ ItemDef( toolkind: Bow, stats: ( equip_time_secs: 1.0, - power: 0.9, + power: 0.8, effect_power: 0.9, - speed: 1.1, + speed: 1.5, crit_chance: 1.1, - range: 1.0, + range: 0.85, energy_efficiency: 1.1, buff_strength: 0.9, ), diff --git a/assets/common/items/modular/weapon/secondary/hammer/long.ron b/assets/common/items/modular/weapon/secondary/hammer/long.ron index 069b53ca07..0a8d192f4b 100644 --- a/assets/common/items/modular/weapon/secondary/hammer/long.ron +++ b/assets/common/items/modular/weapon/secondary/hammer/long.ron @@ -6,11 +6,11 @@ ItemDef( toolkind: Hammer, stats: ( equip_time_secs: 1.0, - power: 1.1, + power: 1.25, effect_power: 1.1, - speed: 0.9, + speed: 0.8, crit_chance: 0.9, - range: 1.0, + range: 1.2, energy_efficiency: 0.9, buff_strength: 1.1, ), diff --git a/assets/common/items/modular/weapon/secondary/hammer/short.ron b/assets/common/items/modular/weapon/secondary/hammer/short.ron index cfef83cea2..18a1a322ca 100644 --- a/assets/common/items/modular/weapon/secondary/hammer/short.ron +++ b/assets/common/items/modular/weapon/secondary/hammer/short.ron @@ -6,12 +6,12 @@ ItemDef( toolkind: Hammer, stats: ( equip_time_secs: 1.0, - power: 0.9, + power: 0.8, effect_power: 0.9, - speed: 1.0, - crit_chance: 1.0, - range: 1.0, - energy_efficiency: 1.0, + speed: 1.5, + crit_chance: 1.1, + range: 0.85, + energy_efficiency: 1.1, buff_strength: 0.9, ), hand_restriction: Some(One), diff --git a/assets/common/items/modular/weapon/secondary/sceptre/heavy.ron b/assets/common/items/modular/weapon/secondary/sceptre/heavy.ron index 9eda02e004..d299f5ec22 100644 --- a/assets/common/items/modular/weapon/secondary/sceptre/heavy.ron +++ b/assets/common/items/modular/weapon/secondary/sceptre/heavy.ron @@ -6,11 +6,11 @@ ItemDef( toolkind: Sceptre, stats: ( equip_time_secs: 1.0, - power: 1.1, + power: 1.25, effect_power: 1.1, - speed: 0.9, + speed: 0.8, crit_chance: 0.9, - range: 1.0, + range: 1.2, energy_efficiency: 0.9, buff_strength: 1.1, ), diff --git a/assets/common/items/modular/weapon/secondary/sceptre/light.ron b/assets/common/items/modular/weapon/secondary/sceptre/light.ron index d81de5ad1e..b61579a394 100644 --- a/assets/common/items/modular/weapon/secondary/sceptre/light.ron +++ b/assets/common/items/modular/weapon/secondary/sceptre/light.ron @@ -6,11 +6,11 @@ ItemDef( toolkind: Sceptre, stats: ( equip_time_secs: 1.0, - power: 0.9, + power: 0.8, effect_power: 0.9, - speed: 1.1, + speed: 1.5, crit_chance: 1.1, - range: 1.0, + range: 0.85, energy_efficiency: 1.1, buff_strength: 0.9, ), diff --git a/assets/common/items/modular/weapon/secondary/staff/heavy.ron b/assets/common/items/modular/weapon/secondary/staff/heavy.ron index da21220bc5..30bba2a38d 100644 --- a/assets/common/items/modular/weapon/secondary/staff/heavy.ron +++ b/assets/common/items/modular/weapon/secondary/staff/heavy.ron @@ -6,11 +6,11 @@ ItemDef( toolkind: Staff, stats: ( equip_time_secs: 1.0, - power: 1.1, + power: 1.25, effect_power: 1.1, - speed: 0.9, + speed: 0.8, crit_chance: 0.9, - range: 1.0, + range: 1.2, energy_efficiency: 0.9, buff_strength: 1.1, ), diff --git a/assets/common/items/modular/weapon/secondary/staff/light.ron b/assets/common/items/modular/weapon/secondary/staff/light.ron index af046cab7c..ccf416d08c 100644 --- a/assets/common/items/modular/weapon/secondary/staff/light.ron +++ b/assets/common/items/modular/weapon/secondary/staff/light.ron @@ -6,11 +6,11 @@ ItemDef( toolkind: Staff, stats: ( equip_time_secs: 1.0, - power: 0.9, + power: 0.8, effect_power: 0.9, - speed: 1.1, + speed: 1.5, crit_chance: 1.1, - range: 1.0, + range: 0.85, energy_efficiency: 1.1, buff_strength: 0.9, ), diff --git a/assets/common/items/modular/weapon/secondary/sword/long.ron b/assets/common/items/modular/weapon/secondary/sword/long.ron index 1a2d93094b..17e2598332 100644 --- a/assets/common/items/modular/weapon/secondary/sword/long.ron +++ b/assets/common/items/modular/weapon/secondary/sword/long.ron @@ -6,11 +6,11 @@ ItemDef( toolkind: Sword, stats: ( equip_time_secs: 1.0, - power: 1.1, + power: 1.25, effect_power: 1.1, - speed: 0.9, + speed: 0.8, crit_chance: 0.9, - range: 1.0, + range: 1.2, energy_efficiency: 0.9, buff_strength: 1.1, ), diff --git a/assets/common/items/modular/weapon/secondary/sword/short.ron b/assets/common/items/modular/weapon/secondary/sword/short.ron index fed62845e6..68e06d22c0 100644 --- a/assets/common/items/modular/weapon/secondary/sword/short.ron +++ b/assets/common/items/modular/weapon/secondary/sword/short.ron @@ -6,12 +6,12 @@ ItemDef( toolkind: Sword, stats: ( equip_time_secs: 1.0, - power: 0.9, + power: 0.8, effect_power: 0.9, - speed: 1.0, - crit_chance: 1.0, - range: 1.0, - energy_efficiency: 1.0, + speed: 1.5, + crit_chance: 1.1, + range: 0.85, + energy_efficiency: 1.1, buff_strength: 0.9, ), hand_restriction: Some(One), diff --git a/assets/common/items/npc_armor/arthropod/generic.ron b/assets/common/items/npc_armor/arthropod/generic.ron index 36d89c759d..17a19b66a5 100644 --- a/assets/common/items/npc_armor/arthropod/generic.ron +++ b/assets/common/items/npc_armor/arthropod/generic.ron @@ -3,10 +3,10 @@ ItemDef( description: "Worn by arthropods.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(60.0)), poise_resilience: Some(Normal(1.0)), - ), + )), )), quality: Legendary, tags: [], diff --git a/assets/common/items/npc_armor/back/backpack_blue.ron b/assets/common/items/npc_armor/back/backpack_blue.ron index 961415aecc..3ea2bd65bc 100644 --- a/assets/common/items/npc_armor/back/backpack_blue.ron +++ b/assets/common/items/npc_armor/back/backpack_blue.ron @@ -1,15 +1,13 @@ ItemDef( name: "Rugged Backpack", description: "Keeps all your stuff together.", - kind: Armor( - ( - kind: Back, - stats: ( - protection: Some(Normal(0.0)), - poise_resilience: Some(Normal(0.0)), - ), - ) - ), + kind: Armor(( + kind: Back, + stats: Direct(( + protection: Some(Normal(0.0)), + poise_resilience: Some(Normal(0.0)), + )), + )), quality: Moderate, tags: [], ) diff --git a/assets/common/items/npc_armor/back/leather_blue.ron b/assets/common/items/npc_armor/back/leather_blue.ron index eb1e248716..0ac4e302f9 100644 --- a/assets/common/items/npc_armor/back/leather_blue.ron +++ b/assets/common/items/npc_armor/back/leather_blue.ron @@ -1,15 +1,13 @@ ItemDef( name: "Blue Traveler Coat", description: "", - kind: Armor( - ( - kind: Back, - stats: ( - protection: Some(Normal(1.0)), - poise_resilience: Some(Normal(0.0)), - ), - ) - ), + kind: Armor(( + kind: Back, + stats: Direct(( + protection: Some(Normal(1.0)), + poise_resilience: Some(Normal(0.0)), + )), + )), quality: Moderate, tags: [], ) diff --git a/assets/common/items/npc_armor/biped_large/generic.ron b/assets/common/items/npc_armor/biped_large/generic.ron index 70656fa808..285fb8d4c2 100644 --- a/assets/common/items/npc_armor/biped_large/generic.ron +++ b/assets/common/items/npc_armor/biped_large/generic.ron @@ -3,10 +3,10 @@ ItemDef( description: "Worn by bipeds.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(45.0)), poise_resilience: Some(Normal(1.0)), - ), + )), )), quality: Moderate, tags: [], diff --git a/assets/common/items/npc_armor/biped_large/harvester.ron b/assets/common/items/npc_armor/biped_large/harvester.ron index dce7f19bdd..b397cc7bea 100644 --- a/assets/common/items/npc_armor/biped_large/harvester.ron +++ b/assets/common/items/npc_armor/biped_large/harvester.ron @@ -3,10 +3,10 @@ ItemDef( description: "Made of sunflowers.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(0.0)), poise_resilience: Some(Normal(0.0)), - ), + )), )), quality: Legendary, tags: [], diff --git a/assets/common/items/npc_armor/biped_large/mindflayer.ron b/assets/common/items/npc_armor/biped_large/mindflayer.ron index 64ab3c4ab0..83e5b67099 100644 --- a/assets/common/items/npc_armor/biped_large/mindflayer.ron +++ b/assets/common/items/npc_armor/biped_large/mindflayer.ron @@ -3,10 +3,10 @@ ItemDef( description: "Worn by mindflayer.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(110.0)), poise_resilience: Some(Normal(1.0)), - ), + )), )), quality: Legendary, tags: [], diff --git a/assets/common/items/npc_armor/biped_large/minotaur.ron b/assets/common/items/npc_armor/biped_large/minotaur.ron index 78d6b923f8..83dfbbff5e 100644 --- a/assets/common/items/npc_armor/biped_large/minotaur.ron +++ b/assets/common/items/npc_armor/biped_large/minotaur.ron @@ -3,10 +3,10 @@ ItemDef( description: "The best defense is a good offense.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(0.0)), poise_resilience: Some(Normal(0.0)), - ), + )), )), quality: Legendary, tags: [], diff --git a/assets/common/items/npc_armor/biped_large/tidal_warrior.ron b/assets/common/items/npc_armor/biped_large/tidal_warrior.ron index b431f21e16..01997b85da 100644 --- a/assets/common/items/npc_armor/biped_large/tidal_warrior.ron +++ b/assets/common/items/npc_armor/biped_large/tidal_warrior.ron @@ -3,10 +3,10 @@ ItemDef( description: "Made of fish scales.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(20.0)), poise_resilience: Some(Normal(0.0)), - ), + )), )), quality: Legendary, tags: [], diff --git a/assets/common/items/npc_armor/biped_large/warlock.ron b/assets/common/items/npc_armor/biped_large/warlock.ron index bb5e21eea3..eeb39ba4ce 100644 --- a/assets/common/items/npc_armor/biped_large/warlock.ron +++ b/assets/common/items/npc_armor/biped_large/warlock.ron @@ -3,12 +3,12 @@ ItemDef( description: "Made of darkest silk.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(250.0)), poise_resilience: Some(Normal(1.0)), energy_max: Some(100.0), energy_reward: Some(1.0), - ), + )), )), quality: Moderate, tags: [], diff --git a/assets/common/items/npc_armor/biped_large/warlord.ron b/assets/common/items/npc_armor/biped_large/warlord.ron index 082c8153de..0b14907d0d 100644 --- a/assets/common/items/npc_armor/biped_large/warlord.ron +++ b/assets/common/items/npc_armor/biped_large/warlord.ron @@ -3,10 +3,10 @@ ItemDef( description: "Made of darkest steel.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(300.0)), poise_resilience: Some(Normal(1.0)), - ), + )), )), quality: Moderate, tags: [], diff --git a/assets/common/items/npc_armor/biped_large/yeti.ron b/assets/common/items/npc_armor/biped_large/yeti.ron index b8747d1d45..12e262a993 100644 --- a/assets/common/items/npc_armor/biped_large/yeti.ron +++ b/assets/common/items/npc_armor/biped_large/yeti.ron @@ -3,10 +3,10 @@ ItemDef( description: "Strong as Yeti itself.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(0.0)), poise_resilience: Some(Normal(0.0)), - ), + )), )), quality: Legendary, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/adlet/chest/hunter.ron b/assets/common/items/npc_armor/biped_small/adlet/chest/hunter.ron index 0ac97b340e..d576702d01 100644 --- a/assets/common/items/npc_armor/biped_small/adlet/chest/hunter.ron +++ b/assets/common/items/npc_armor/biped_small/adlet/chest/hunter.ron @@ -3,11 +3,11 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(16.0)), poise_resilience: Some(Normal(3.0)), crit_power: Some(0.06), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/adlet/chest/icepicker.ron b/assets/common/items/npc_armor/biped_small/adlet/chest/icepicker.ron index e90b181cfc..eeb832d21c 100644 --- a/assets/common/items/npc_armor/biped_small/adlet/chest/icepicker.ron +++ b/assets/common/items/npc_armor/biped_small/adlet/chest/icepicker.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(14.0)), poise_resilience: Some(Normal(2.0)), energy_max: Some(4.4), energy_reward: Some(0.054), crit_power: Some(0.05), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/adlet/chest/tracker.ron b/assets/common/items/npc_armor/biped_small/adlet/chest/tracker.ron index 1fa8d16d10..e4075bf2a9 100644 --- a/assets/common/items/npc_armor/biped_small/adlet/chest/tracker.ron +++ b/assets/common/items/npc_armor/biped_small/adlet/chest/tracker.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(14.0)), poise_resilience: Some(Normal(2.0)), energy_max: Some(4.4), energy_reward: Some(0.054), crit_power: Some(0.05), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/adlet/foot/hunter.ron b/assets/common/items/npc_armor/biped_small/adlet/foot/hunter.ron index 65b4fa1098..ce03f4e99c 100644 --- a/assets/common/items/npc_armor/biped_small/adlet/foot/hunter.ron +++ b/assets/common/items/npc_armor/biped_small/adlet/foot/hunter.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Foot, - stats: ( + stats: Direct(( protection: Some(Normal(4.0)), poise_resilience: Some(Normal(2.0)), energy_max: Some(1.8), energy_reward: Some(0.018), crit_power: Some(0.016), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/adlet/foot/icepicker.ron b/assets/common/items/npc_armor/biped_small/adlet/foot/icepicker.ron index 4f356da837..a8e6b528cb 100644 --- a/assets/common/items/npc_armor/biped_small/adlet/foot/icepicker.ron +++ b/assets/common/items/npc_armor/biped_small/adlet/foot/icepicker.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Foot, - stats: ( + stats: Direct(( protection: Some(Normal(4.0)), poise_resilience: Some(Normal(2.0)), energy_max: Some(1.8), energy_reward: Some(0.018), crit_power: Some(0.016), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/adlet/foot/tracker.ron b/assets/common/items/npc_armor/biped_small/adlet/foot/tracker.ron index 97669252d3..a228dd8f11 100644 --- a/assets/common/items/npc_armor/biped_small/adlet/foot/tracker.ron +++ b/assets/common/items/npc_armor/biped_small/adlet/foot/tracker.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Foot, - stats: ( + stats: Direct(( protection: Some(Normal(4.0)), poise_resilience: Some(Normal(2.0)), energy_max: Some(1.8), energy_reward: Some(0.018), crit_power: Some(0.016), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/adlet/hand/hunter.ron b/assets/common/items/npc_armor/biped_small/adlet/hand/hunter.ron index b2ca5da52b..e5a9d98608 100644 --- a/assets/common/items/npc_armor/biped_small/adlet/hand/hunter.ron +++ b/assets/common/items/npc_armor/biped_small/adlet/hand/hunter.ron @@ -3,11 +3,11 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Hand, - stats: ( + stats: Direct(( protection: Some(Normal(6.0)), poise_resilience: Some(Normal(3.0)), crit_power: Some(0.016), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/adlet/hand/icepicker.ron b/assets/common/items/npc_armor/biped_small/adlet/hand/icepicker.ron index 93df5ddefc..d425a19731 100644 --- a/assets/common/items/npc_armor/biped_small/adlet/hand/icepicker.ron +++ b/assets/common/items/npc_armor/biped_small/adlet/hand/icepicker.ron @@ -3,11 +3,11 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Hand, - stats: ( + stats: Direct(( protection: Some(Normal(6.0)), poise_resilience: Some(Normal(3.0)), crit_power: Some(0.016), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/adlet/hand/tracker.ron b/assets/common/items/npc_armor/biped_small/adlet/hand/tracker.ron index 0f97b5875c..348d27fc02 100644 --- a/assets/common/items/npc_armor/biped_small/adlet/hand/tracker.ron +++ b/assets/common/items/npc_armor/biped_small/adlet/hand/tracker.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Hand, - stats: ( + stats: Direct(( protection: Some(Normal(4.0)), poise_resilience: Some(Normal(2.0)), energy_max: Some(1.8), energy_reward: Some(0.018), crit_power: Some(0.016), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/adlet/head/hunter.ron b/assets/common/items/npc_armor/biped_small/adlet/head/hunter.ron index 8410595650..dc950f32fb 100644 --- a/assets/common/items/npc_armor/biped_small/adlet/head/hunter.ron +++ b/assets/common/items/npc_armor/biped_small/adlet/head/hunter.ron @@ -3,11 +3,11 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( protection: Some(Normal(9.0)), poise_resilience: Some(Normal(3.0)), crit_power: Some(0.032), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/adlet/head/icepicker.ron b/assets/common/items/npc_armor/biped_small/adlet/head/icepicker.ron index 8afbde00cb..3532accdd5 100644 --- a/assets/common/items/npc_armor/biped_small/adlet/head/icepicker.ron +++ b/assets/common/items/npc_armor/biped_small/adlet/head/icepicker.ron @@ -3,11 +3,11 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( protection: Some(Normal(9.0)), poise_resilience: Some(Normal(3.0)), crit_power: Some(0.032), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/adlet/head/tracker.ron b/assets/common/items/npc_armor/biped_small/adlet/head/tracker.ron index 194ab58c4f..3c2fb6e019 100644 --- a/assets/common/items/npc_armor/biped_small/adlet/head/tracker.ron +++ b/assets/common/items/npc_armor/biped_small/adlet/head/tracker.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( protection: Some(Normal(7.0)), poise_resilience: Some(Normal(2.0)), energy_max: Some(3.6), energy_reward: Some(0.04), crit_power: Some(0.32), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/adlet/pants/hunter.ron b/assets/common/items/npc_armor/biped_small/adlet/pants/hunter.ron index d02fdd386c..4dc8320066 100644 --- a/assets/common/items/npc_armor/biped_small/adlet/pants/hunter.ron +++ b/assets/common/items/npc_armor/biped_small/adlet/pants/hunter.ron @@ -3,11 +3,11 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Pants, - stats: ( + stats: Direct(( protection: Some(Normal(9.0)), poise_resilience: Some(Normal(3.0)), crit_power: Some(0.032), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/adlet/pants/icepicker.ron b/assets/common/items/npc_armor/biped_small/adlet/pants/icepicker.ron index 416e50a734..6611f5d7c3 100644 --- a/assets/common/items/npc_armor/biped_small/adlet/pants/icepicker.ron +++ b/assets/common/items/npc_armor/biped_small/adlet/pants/icepicker.ron @@ -3,11 +3,11 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Pants, - stats: ( + stats: Direct(( protection: Some(Normal(9.0)), poise_resilience: Some(Normal(3.0)), crit_power: Some(0.032), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/adlet/pants/tracker.ron b/assets/common/items/npc_armor/biped_small/adlet/pants/tracker.ron index f1050c1258..df0da945de 100644 --- a/assets/common/items/npc_armor/biped_small/adlet/pants/tracker.ron +++ b/assets/common/items/npc_armor/biped_small/adlet/pants/tracker.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Pants, - stats: ( + stats: Direct(( protection: Some(Normal(7.0)), poise_resilience: Some(Normal(2.0)), energy_max: Some(3.6), energy_reward: Some(0.04), crit_power: Some(0.32), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/adlet/tail/hunter.ron b/assets/common/items/npc_armor/biped_small/adlet/tail/hunter.ron index e1abaab103..f727a345ce 100644 --- a/assets/common/items/npc_armor/biped_small/adlet/tail/hunter.ron +++ b/assets/common/items/npc_armor/biped_small/adlet/tail/hunter.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Belt, - stats: ( + stats: Direct(( protection: Some(Normal(3.0)), poise_resilience: Some(Normal(3.0)), energy_max: Some(0.8), energy_reward: Some(0.01), crit_power: Some(0.008), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/adlet/tail/icepicker.ron b/assets/common/items/npc_armor/biped_small/adlet/tail/icepicker.ron index c80a2deb27..c0c833b16e 100644 --- a/assets/common/items/npc_armor/biped_small/adlet/tail/icepicker.ron +++ b/assets/common/items/npc_armor/biped_small/adlet/tail/icepicker.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Belt, - stats: ( + stats: Direct(( protection: Some(Normal(3.0)), poise_resilience: Some(Normal(3.0)), energy_max: Some(0.8), energy_reward: Some(0.01), crit_power: Some(0.008), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/adlet/tail/tracker.ron b/assets/common/items/npc_armor/biped_small/adlet/tail/tracker.ron index d574106b66..3d3f794217 100644 --- a/assets/common/items/npc_armor/biped_small/adlet/tail/tracker.ron +++ b/assets/common/items/npc_armor/biped_small/adlet/tail/tracker.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Belt, - stats: ( + stats: Direct(( protection: Some(Normal(3.0)), poise_resilience: Some(Normal(3.0)), energy_max: Some(0.8), energy_reward: Some(0.01), crit_power: Some(0.008), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnarling/chest/chieftain.ron b/assets/common/items/npc_armor/biped_small/gnarling/chest/chieftain.ron index b257f8e899..45fe570fd8 100644 --- a/assets/common/items/npc_armor/biped_small/gnarling/chest/chieftain.ron +++ b/assets/common/items/npc_armor/biped_small/gnarling/chest/chieftain.ron @@ -3,13 +3,13 @@ ItemDef( description: "Only worn by the most spiritual of Gnarlings.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(80.0)), poise_resilience: Some(Normal(60.0)), energy_max: Some(120.0), energy_reward: Some(0.027), crit_power: Some(0.025), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnarling/chest/logger.ron b/assets/common/items/npc_armor/biped_small/gnarling/chest/logger.ron index 67641f8c56..eda093fbcc 100644 --- a/assets/common/items/npc_armor/biped_small/gnarling/chest/logger.ron +++ b/assets/common/items/npc_armor/biped_small/gnarling/chest/logger.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(2.0)), poise_resilience: Some(Normal(1.0)), energy_max: Some(2.7), energy_reward: Some(0.027), crit_power: Some(0.025), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnarling/chest/mugger.ron b/assets/common/items/npc_armor/biped_small/gnarling/chest/mugger.ron index 67641f8c56..eda093fbcc 100644 --- a/assets/common/items/npc_armor/biped_small/gnarling/chest/mugger.ron +++ b/assets/common/items/npc_armor/biped_small/gnarling/chest/mugger.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(2.0)), poise_resilience: Some(Normal(1.0)), energy_max: Some(2.7), energy_reward: Some(0.027), crit_power: Some(0.025), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnarling/chest/stalker.ron b/assets/common/items/npc_armor/biped_small/gnarling/chest/stalker.ron index 67641f8c56..eda093fbcc 100644 --- a/assets/common/items/npc_armor/biped_small/gnarling/chest/stalker.ron +++ b/assets/common/items/npc_armor/biped_small/gnarling/chest/stalker.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(2.0)), poise_resilience: Some(Normal(1.0)), energy_max: Some(2.7), energy_reward: Some(0.027), crit_power: Some(0.025), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnarling/foot/chieftain.ron b/assets/common/items/npc_armor/biped_small/gnarling/foot/chieftain.ron index fbc7ae85cc..4d25804d7e 100644 --- a/assets/common/items/npc_armor/biped_small/gnarling/foot/chieftain.ron +++ b/assets/common/items/npc_armor/biped_small/gnarling/foot/chieftain.ron @@ -3,13 +3,13 @@ ItemDef( description: "Only worn by the most spiritual of Gnarlings.", kind: Armor(( kind: Foot, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), poise_resilience: Some(Normal(1.0)), energy_max: Some(0.9), energy_reward: Some(0.009), crit_power: Some(0.008), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnarling/foot/logger.ron b/assets/common/items/npc_armor/biped_small/gnarling/foot/logger.ron index 11ee37c806..a269b39abb 100644 --- a/assets/common/items/npc_armor/biped_small/gnarling/foot/logger.ron +++ b/assets/common/items/npc_armor/biped_small/gnarling/foot/logger.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Foot, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), poise_resilience: Some(Normal(1.0)), energy_max: Some(0.9), energy_reward: Some(0.009), crit_power: Some(0.008), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnarling/foot/mugger.ron b/assets/common/items/npc_armor/biped_small/gnarling/foot/mugger.ron index 11ee37c806..a269b39abb 100644 --- a/assets/common/items/npc_armor/biped_small/gnarling/foot/mugger.ron +++ b/assets/common/items/npc_armor/biped_small/gnarling/foot/mugger.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Foot, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), poise_resilience: Some(Normal(1.0)), energy_max: Some(0.9), energy_reward: Some(0.009), crit_power: Some(0.008), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnarling/foot/stalker.ron b/assets/common/items/npc_armor/biped_small/gnarling/foot/stalker.ron index 11ee37c806..a269b39abb 100644 --- a/assets/common/items/npc_armor/biped_small/gnarling/foot/stalker.ron +++ b/assets/common/items/npc_armor/biped_small/gnarling/foot/stalker.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Foot, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), poise_resilience: Some(Normal(1.0)), energy_max: Some(0.9), energy_reward: Some(0.009), crit_power: Some(0.008), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnarling/hand/chieftain.ron b/assets/common/items/npc_armor/biped_small/gnarling/hand/chieftain.ron index 7a4e114a4e..af495d1079 100644 --- a/assets/common/items/npc_armor/biped_small/gnarling/hand/chieftain.ron +++ b/assets/common/items/npc_armor/biped_small/gnarling/hand/chieftain.ron @@ -3,13 +3,13 @@ ItemDef( description: "Only worn by the most spiritual of Gnarlings.", kind: Armor(( kind: Hand, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), poise_resilience: Some(Normal(1.0)), energy_max: Some(0.9), energy_reward: Some(0.009), crit_power: Some(0.008), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnarling/hand/logger.ron b/assets/common/items/npc_armor/biped_small/gnarling/hand/logger.ron index 722403412c..a9c7109826 100644 --- a/assets/common/items/npc_armor/biped_small/gnarling/hand/logger.ron +++ b/assets/common/items/npc_armor/biped_small/gnarling/hand/logger.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Hand, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), poise_resilience: Some(Normal(1.0)), energy_max: Some(0.9), energy_reward: Some(0.009), crit_power: Some(0.008), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnarling/hand/mugger.ron b/assets/common/items/npc_armor/biped_small/gnarling/hand/mugger.ron index 722403412c..a9c7109826 100644 --- a/assets/common/items/npc_armor/biped_small/gnarling/hand/mugger.ron +++ b/assets/common/items/npc_armor/biped_small/gnarling/hand/mugger.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Hand, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), poise_resilience: Some(Normal(1.0)), energy_max: Some(0.9), energy_reward: Some(0.009), crit_power: Some(0.008), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnarling/hand/stalker.ron b/assets/common/items/npc_armor/biped_small/gnarling/hand/stalker.ron index 722403412c..a9c7109826 100644 --- a/assets/common/items/npc_armor/biped_small/gnarling/hand/stalker.ron +++ b/assets/common/items/npc_armor/biped_small/gnarling/hand/stalker.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Hand, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), poise_resilience: Some(Normal(1.0)), energy_max: Some(0.9), energy_reward: Some(0.009), crit_power: Some(0.008), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnarling/head/chieftain.ron b/assets/common/items/npc_armor/biped_small/gnarling/head/chieftain.ron index d4ef9e74de..e59c0ffa73 100644 --- a/assets/common/items/npc_armor/biped_small/gnarling/head/chieftain.ron +++ b/assets/common/items/npc_armor/biped_small/gnarling/head/chieftain.ron @@ -3,13 +3,13 @@ ItemDef( description: "Only worn by the most spiritual of Gnarlings.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), poise_resilience: Some(Normal(1.0)), energy_max: Some(1.8), energy_reward: Some(0.02), crit_power: Some(0.016), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnarling/head/logger.ron b/assets/common/items/npc_armor/biped_small/gnarling/head/logger.ron index 65924ac48a..5a8faecd95 100644 --- a/assets/common/items/npc_armor/biped_small/gnarling/head/logger.ron +++ b/assets/common/items/npc_armor/biped_small/gnarling/head/logger.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), poise_resilience: Some(Normal(1.0)), energy_max: Some(1.8), energy_reward: Some(0.02), crit_power: Some(0.016), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnarling/head/mugger.ron b/assets/common/items/npc_armor/biped_small/gnarling/head/mugger.ron index 65924ac48a..5a8faecd95 100644 --- a/assets/common/items/npc_armor/biped_small/gnarling/head/mugger.ron +++ b/assets/common/items/npc_armor/biped_small/gnarling/head/mugger.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), poise_resilience: Some(Normal(1.0)), energy_max: Some(1.8), energy_reward: Some(0.02), crit_power: Some(0.016), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnarling/head/stalker.ron b/assets/common/items/npc_armor/biped_small/gnarling/head/stalker.ron index 65924ac48a..5a8faecd95 100644 --- a/assets/common/items/npc_armor/biped_small/gnarling/head/stalker.ron +++ b/assets/common/items/npc_armor/biped_small/gnarling/head/stalker.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), poise_resilience: Some(Normal(1.0)), energy_max: Some(1.8), energy_reward: Some(0.02), crit_power: Some(0.016), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnarling/pants/chieftain.ron b/assets/common/items/npc_armor/biped_small/gnarling/pants/chieftain.ron index 0f7941c9c5..ee65b8c32f 100644 --- a/assets/common/items/npc_armor/biped_small/gnarling/pants/chieftain.ron +++ b/assets/common/items/npc_armor/biped_small/gnarling/pants/chieftain.ron @@ -3,13 +3,13 @@ ItemDef( description: "Only worn by the most spiritual of Gnarlings.", kind: Armor(( kind: Pants, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), poise_resilience: Some(Normal(1.0)), energy_max: Some(1.8), energy_reward: Some(0.02), crit_power: Some(0.016), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnarling/pants/logger.ron b/assets/common/items/npc_armor/biped_small/gnarling/pants/logger.ron index 05f1a06528..24b63ee9f0 100644 --- a/assets/common/items/npc_armor/biped_small/gnarling/pants/logger.ron +++ b/assets/common/items/npc_armor/biped_small/gnarling/pants/logger.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Pants, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), poise_resilience: Some(Normal(1.0)), energy_max: Some(1.8), energy_reward: Some(0.02), crit_power: Some(0.016), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnarling/pants/mugger.ron b/assets/common/items/npc_armor/biped_small/gnarling/pants/mugger.ron index 05f1a06528..24b63ee9f0 100644 --- a/assets/common/items/npc_armor/biped_small/gnarling/pants/mugger.ron +++ b/assets/common/items/npc_armor/biped_small/gnarling/pants/mugger.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Pants, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), poise_resilience: Some(Normal(1.0)), energy_max: Some(1.8), energy_reward: Some(0.02), crit_power: Some(0.016), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnarling/pants/stalker.ron b/assets/common/items/npc_armor/biped_small/gnarling/pants/stalker.ron index 05f1a06528..24b63ee9f0 100644 --- a/assets/common/items/npc_armor/biped_small/gnarling/pants/stalker.ron +++ b/assets/common/items/npc_armor/biped_small/gnarling/pants/stalker.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Pants, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), poise_resilience: Some(Normal(1.0)), energy_max: Some(1.8), energy_reward: Some(0.02), crit_power: Some(0.016), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnarling/tail/chieftain.ron b/assets/common/items/npc_armor/biped_small/gnarling/tail/chieftain.ron index 4e5816cc17..a9521226f1 100644 --- a/assets/common/items/npc_armor/biped_small/gnarling/tail/chieftain.ron +++ b/assets/common/items/npc_armor/biped_small/gnarling/tail/chieftain.ron @@ -3,13 +3,13 @@ ItemDef( description: "Only worn by the most spiritual of Gnarlings.", kind: Armor(( kind: Belt, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), poise_resilience: Some(Normal(1.0)), energy_max: Some(0.4), energy_reward: Some(0.005), crit_power: Some(0.004), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnarling/tail/logger.ron b/assets/common/items/npc_armor/biped_small/gnarling/tail/logger.ron index 5e3a77e0db..576f9528a6 100644 --- a/assets/common/items/npc_armor/biped_small/gnarling/tail/logger.ron +++ b/assets/common/items/npc_armor/biped_small/gnarling/tail/logger.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Belt, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), poise_resilience: Some(Normal(1.0)), energy_max: Some(0.4), energy_reward: Some(0.005), crit_power: Some(0.004), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnarling/tail/mugger.ron b/assets/common/items/npc_armor/biped_small/gnarling/tail/mugger.ron index 5e3a77e0db..576f9528a6 100644 --- a/assets/common/items/npc_armor/biped_small/gnarling/tail/mugger.ron +++ b/assets/common/items/npc_armor/biped_small/gnarling/tail/mugger.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Belt, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), poise_resilience: Some(Normal(1.0)), energy_max: Some(0.4), energy_reward: Some(0.005), crit_power: Some(0.004), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnarling/tail/stalker.ron b/assets/common/items/npc_armor/biped_small/gnarling/tail/stalker.ron index 5e3a77e0db..576f9528a6 100644 --- a/assets/common/items/npc_armor/biped_small/gnarling/tail/stalker.ron +++ b/assets/common/items/npc_armor/biped_small/gnarling/tail/stalker.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Belt, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), poise_resilience: Some(Normal(1.0)), energy_max: Some(0.4), energy_reward: Some(0.005), crit_power: Some(0.004), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnoll/chest/rogue.ron b/assets/common/items/npc_armor/biped_small/gnoll/chest/rogue.ron index 091d0b677f..217a06c39e 100644 --- a/assets/common/items/npc_armor/biped_small/gnoll/chest/rogue.ron +++ b/assets/common/items/npc_armor/biped_small/gnoll/chest/rogue.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(38.0)), poise_resilience: Some(Normal(5.0)), energy_max: Some(5.0), energy_reward: Some(0.108), crit_power: Some(0.1), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnoll/chest/shaman.ron b/assets/common/items/npc_armor/biped_small/gnoll/chest/shaman.ron index ecb8caf124..123b447118 100644 --- a/assets/common/items/npc_armor/biped_small/gnoll/chest/shaman.ron +++ b/assets/common/items/npc_armor/biped_small/gnoll/chest/shaman.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(38.0)), poise_resilience: Some(Normal(5.0)), energy_max: Some(5.0), energy_reward: Some(0.108), crit_power: Some(0.1), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnoll/chest/trapper.ron b/assets/common/items/npc_armor/biped_small/gnoll/chest/trapper.ron index 656f037145..7ba9928f7f 100644 --- a/assets/common/items/npc_armor/biped_small/gnoll/chest/trapper.ron +++ b/assets/common/items/npc_armor/biped_small/gnoll/chest/trapper.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(38.0)), poise_resilience: Some(Normal(5.0)), energy_max: Some(5.0), energy_reward: Some(0.108), crit_power: Some(0.1), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnoll/foot/rogue.ron b/assets/common/items/npc_armor/biped_small/gnoll/foot/rogue.ron index 4b8c121d5c..51bd8f98b3 100644 --- a/assets/common/items/npc_armor/biped_small/gnoll/foot/rogue.ron +++ b/assets/common/items/npc_armor/biped_small/gnoll/foot/rogue.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Foot, - stats: ( + stats: Direct(( protection: Some(Normal(10.0)), poise_resilience: Some(Normal(5.0)), energy_max: Some(5.0), energy_reward: Some(0.036), crit_power: Some(0.032), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnoll/foot/shaman.ron b/assets/common/items/npc_armor/biped_small/gnoll/foot/shaman.ron index 3c0c777663..c4c8ee3b56 100644 --- a/assets/common/items/npc_armor/biped_small/gnoll/foot/shaman.ron +++ b/assets/common/items/npc_armor/biped_small/gnoll/foot/shaman.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Foot, - stats: ( + stats: Direct(( protection: Some(Normal(10.0)), poise_resilience: Some(Normal(5.0)), energy_max: Some(5.0), energy_reward: Some(0.036), crit_power: Some(0.032), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnoll/foot/trapper.ron b/assets/common/items/npc_armor/biped_small/gnoll/foot/trapper.ron index 6f5d8da6ce..978fa44f39 100644 --- a/assets/common/items/npc_armor/biped_small/gnoll/foot/trapper.ron +++ b/assets/common/items/npc_armor/biped_small/gnoll/foot/trapper.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Foot, - stats: ( + stats: Direct(( protection: Some(Normal(10.0)), poise_resilience: Some(Normal(5.0)), energy_max: Some(5.0), energy_reward: Some(0.036), crit_power: Some(0.032), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnoll/hand/rogue.ron b/assets/common/items/npc_armor/biped_small/gnoll/hand/rogue.ron index 8400d5e26e..1c85eaf9a4 100644 --- a/assets/common/items/npc_armor/biped_small/gnoll/hand/rogue.ron +++ b/assets/common/items/npc_armor/biped_small/gnoll/hand/rogue.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Hand, - stats: ( + stats: Direct(( protection: Some(Normal(10.0)), poise_resilience: Some(Normal(5.0)), energy_max: Some(5.0), energy_reward: Some(0.036), crit_power: Some(0.032), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnoll/hand/shaman.ron b/assets/common/items/npc_armor/biped_small/gnoll/hand/shaman.ron index 075bab1412..88cd01c453 100644 --- a/assets/common/items/npc_armor/biped_small/gnoll/hand/shaman.ron +++ b/assets/common/items/npc_armor/biped_small/gnoll/hand/shaman.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Hand, - stats: ( + stats: Direct(( protection: Some(Normal(10.0)), poise_resilience: Some(Normal(5.0)), energy_max: Some(5.0), energy_reward: Some(0.036), crit_power: Some(0.032), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnoll/hand/trapper.ron b/assets/common/items/npc_armor/biped_small/gnoll/hand/trapper.ron index c04c3715ef..8727f705ed 100644 --- a/assets/common/items/npc_armor/biped_small/gnoll/hand/trapper.ron +++ b/assets/common/items/npc_armor/biped_small/gnoll/hand/trapper.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Hand, - stats: ( + stats: Direct(( protection: Some(Normal(10.0)), poise_resilience: Some(Normal(5.0)), energy_max: Some(5.0), energy_reward: Some(0.036), crit_power: Some(0.032), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnoll/head/rogue.ron b/assets/common/items/npc_armor/biped_small/gnoll/head/rogue.ron index d1a830aa38..f0cdaba85c 100644 --- a/assets/common/items/npc_armor/biped_small/gnoll/head/rogue.ron +++ b/assets/common/items/npc_armor/biped_small/gnoll/head/rogue.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( protection: Some(Normal(19.0)), poise_resilience: Some(Normal(5.0)), energy_max: Some(5.0), energy_reward: Some(0.08), crit_power: Some(0.064), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnoll/head/shaman.ron b/assets/common/items/npc_armor/biped_small/gnoll/head/shaman.ron index 4de39e0d20..9ea0787f97 100644 --- a/assets/common/items/npc_armor/biped_small/gnoll/head/shaman.ron +++ b/assets/common/items/npc_armor/biped_small/gnoll/head/shaman.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( protection: Some(Normal(19.0)), poise_resilience: Some(Normal(5.0)), energy_max: Some(5.0), energy_reward: Some(0.08), crit_power: Some(0.064), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnoll/head/trapper.ron b/assets/common/items/npc_armor/biped_small/gnoll/head/trapper.ron index 9acc85ceba..40cc3ae2fb 100644 --- a/assets/common/items/npc_armor/biped_small/gnoll/head/trapper.ron +++ b/assets/common/items/npc_armor/biped_small/gnoll/head/trapper.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( protection: Some(Normal(19.0)), poise_resilience: Some(Normal(5.0)), energy_max: Some(5.0), energy_reward: Some(0.08), crit_power: Some(0.064), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnoll/pants/rogue.ron b/assets/common/items/npc_armor/biped_small/gnoll/pants/rogue.ron index 231dcf35a8..290649bf08 100644 --- a/assets/common/items/npc_armor/biped_small/gnoll/pants/rogue.ron +++ b/assets/common/items/npc_armor/biped_small/gnoll/pants/rogue.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Pants, - stats: ( + stats: Direct(( protection: Some(Normal(19.0)), poise_resilience: Some(Normal(5.0)), energy_max: Some(5.0), energy_reward: Some(0.08), crit_power: Some(0.064), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnoll/pants/shaman.ron b/assets/common/items/npc_armor/biped_small/gnoll/pants/shaman.ron index 8e14b9b686..c883fac499 100644 --- a/assets/common/items/npc_armor/biped_small/gnoll/pants/shaman.ron +++ b/assets/common/items/npc_armor/biped_small/gnoll/pants/shaman.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Pants, - stats: ( + stats: Direct(( protection: Some(Normal(19.0)), poise_resilience: Some(Normal(5.0)), energy_max: Some(5.0), energy_reward: Some(0.08), crit_power: Some(0.064), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnoll/pants/trapper.ron b/assets/common/items/npc_armor/biped_small/gnoll/pants/trapper.ron index a8b90f974b..3bb69ce534 100644 --- a/assets/common/items/npc_armor/biped_small/gnoll/pants/trapper.ron +++ b/assets/common/items/npc_armor/biped_small/gnoll/pants/trapper.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Pants, - stats: ( + stats: Direct(( protection: Some(Normal(19.0)), poise_resilience: Some(Normal(5.0)), energy_max: Some(5.0), energy_reward: Some(0.08), crit_power: Some(0.064), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnoll/tail/rogue.ron b/assets/common/items/npc_armor/biped_small/gnoll/tail/rogue.ron index 7c4e7b447d..d81a2d5169 100644 --- a/assets/common/items/npc_armor/biped_small/gnoll/tail/rogue.ron +++ b/assets/common/items/npc_armor/biped_small/gnoll/tail/rogue.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Belt, - stats: ( + stats: Direct(( protection: Some(Normal(19.0)), poise_resilience: Some(Normal(5.0)), energy_max: Some(5.0), energy_reward: Some(0.08), crit_power: Some(0.064), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnoll/tail/shaman.ron b/assets/common/items/npc_armor/biped_small/gnoll/tail/shaman.ron index 03de5106f8..dad80533bd 100644 --- a/assets/common/items/npc_armor/biped_small/gnoll/tail/shaman.ron +++ b/assets/common/items/npc_armor/biped_small/gnoll/tail/shaman.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Belt, - stats: ( + stats: Direct(( protection: Some(Normal(19.0)), poise_resilience: Some(Normal(5.0)), energy_max: Some(5.0), energy_reward: Some(0.08), crit_power: Some(0.064), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnoll/tail/trapper.ron b/assets/common/items/npc_armor/biped_small/gnoll/tail/trapper.ron index a3c3af43f3..c26a5eb0e5 100644 --- a/assets/common/items/npc_armor/biped_small/gnoll/tail/trapper.ron +++ b/assets/common/items/npc_armor/biped_small/gnoll/tail/trapper.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Belt, - stats: ( + stats: Direct(( protection: Some(Normal(19.0)), poise_resilience: Some(Normal(5.0)), energy_max: Some(5.0), energy_reward: Some(0.08), crit_power: Some(0.064), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnome/chest/gnome.ron b/assets/common/items/npc_armor/biped_small/gnome/chest/gnome.ron index 460442d22e..86e2c65357 100644 --- a/assets/common/items/npc_armor/biped_small/gnome/chest/gnome.ron +++ b/assets/common/items/npc_armor/biped_small/gnome/chest/gnome.ron @@ -3,10 +3,10 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(36.0)), poise_resilience: Some(Normal(1.0)), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnome/foot/gnome.ron b/assets/common/items/npc_armor/biped_small/gnome/foot/gnome.ron index 5bad9544c1..4d81ebe48e 100644 --- a/assets/common/items/npc_armor/biped_small/gnome/foot/gnome.ron +++ b/assets/common/items/npc_armor/biped_small/gnome/foot/gnome.ron @@ -3,10 +3,10 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Foot, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), poise_resilience: Some(Normal(1.0)), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnome/hand/gnome.ron b/assets/common/items/npc_armor/biped_small/gnome/hand/gnome.ron index f716e77820..3f5f8c901c 100644 --- a/assets/common/items/npc_armor/biped_small/gnome/hand/gnome.ron +++ b/assets/common/items/npc_armor/biped_small/gnome/hand/gnome.ron @@ -3,10 +3,10 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Hand, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), poise_resilience: Some(Normal(1.0)), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnome/head/gnome.ron b/assets/common/items/npc_armor/biped_small/gnome/head/gnome.ron index 07a648f0fa..b5c5235af8 100644 --- a/assets/common/items/npc_armor/biped_small/gnome/head/gnome.ron +++ b/assets/common/items/npc_armor/biped_small/gnome/head/gnome.ron @@ -3,10 +3,10 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), poise_resilience: Some(Normal(1.0)), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/gnome/pants/gnome.ron b/assets/common/items/npc_armor/biped_small/gnome/pants/gnome.ron index 40ff7b84e7..ee779dace3 100644 --- a/assets/common/items/npc_armor/biped_small/gnome/pants/gnome.ron +++ b/assets/common/items/npc_armor/biped_small/gnome/pants/gnome.ron @@ -3,10 +3,10 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Pants, - stats: ( + stats: Direct(( protection: Some(Normal(1.0)), poise_resilience: Some(Normal(1.0)), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/haniwa/chest/archer.ron b/assets/common/items/npc_armor/biped_small/haniwa/chest/archer.ron index a1bcdd504d..d56ef51a68 100644 --- a/assets/common/items/npc_armor/biped_small/haniwa/chest/archer.ron +++ b/assets/common/items/npc_armor/biped_small/haniwa/chest/archer.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(38.0)), poise_resilience: Some(Normal(5.0)), energy_max: Some(5.0), energy_reward: Some(0.108), crit_power: Some(0.1), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/haniwa/chest/guard.ron b/assets/common/items/npc_armor/biped_small/haniwa/chest/guard.ron index 267d0a1764..4e1085387f 100644 --- a/assets/common/items/npc_armor/biped_small/haniwa/chest/guard.ron +++ b/assets/common/items/npc_armor/biped_small/haniwa/chest/guard.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(38.0)), poise_resilience: Some(Normal(5.0)), energy_max: Some(5.0), energy_reward: Some(0.108), crit_power: Some(0.1), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/haniwa/chest/soldier.ron b/assets/common/items/npc_armor/biped_small/haniwa/chest/soldier.ron index 2faefb85b5..375fa228f6 100644 --- a/assets/common/items/npc_armor/biped_small/haniwa/chest/soldier.ron +++ b/assets/common/items/npc_armor/biped_small/haniwa/chest/soldier.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(38.0)), poise_resilience: Some(Normal(5.0)), energy_max: Some(5.0), energy_reward: Some(0.108), crit_power: Some(0.1), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/haniwa/foot/archer.ron b/assets/common/items/npc_armor/biped_small/haniwa/foot/archer.ron index b76247b1c0..05d7360aa6 100644 --- a/assets/common/items/npc_armor/biped_small/haniwa/foot/archer.ron +++ b/assets/common/items/npc_armor/biped_small/haniwa/foot/archer.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Foot, - stats: ( + stats: Direct(( protection: Some(Normal(10.0)), poise_resilience: Some(Normal(5.0)), energy_max: Some(5.0), energy_reward: Some(0.036), crit_power: Some(0.032), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/haniwa/foot/guard.ron b/assets/common/items/npc_armor/biped_small/haniwa/foot/guard.ron index f0a0fbd587..f2e8641137 100644 --- a/assets/common/items/npc_armor/biped_small/haniwa/foot/guard.ron +++ b/assets/common/items/npc_armor/biped_small/haniwa/foot/guard.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Foot, - stats: ( + stats: Direct(( protection: Some(Normal(10.0)), poise_resilience: Some(Normal(5.0)), energy_max: Some(5.0), energy_reward: Some(0.036), crit_power: Some(0.032), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/haniwa/foot/soldier.ron b/assets/common/items/npc_armor/biped_small/haniwa/foot/soldier.ron index 2282404d90..1621f6bec6 100644 --- a/assets/common/items/npc_armor/biped_small/haniwa/foot/soldier.ron +++ b/assets/common/items/npc_armor/biped_small/haniwa/foot/soldier.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Foot, - stats: ( + stats: Direct(( protection: Some(Normal(10.0)), poise_resilience: Some(Normal(5.0)), energy_max: Some(5.0), energy_reward: Some(0.036), crit_power: Some(0.032), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/haniwa/hand/archer.ron b/assets/common/items/npc_armor/biped_small/haniwa/hand/archer.ron index d23d708fec..c09a2b6974 100644 --- a/assets/common/items/npc_armor/biped_small/haniwa/hand/archer.ron +++ b/assets/common/items/npc_armor/biped_small/haniwa/hand/archer.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Hand, - stats: ( + stats: Direct(( protection: Some(Normal(10.0)), poise_resilience: Some(Normal(5.0)), energy_max: Some(5.0), energy_reward: Some(0.036), crit_power: Some(0.032), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/haniwa/hand/guard.ron b/assets/common/items/npc_armor/biped_small/haniwa/hand/guard.ron index b49d7a3958..53998466e9 100644 --- a/assets/common/items/npc_armor/biped_small/haniwa/hand/guard.ron +++ b/assets/common/items/npc_armor/biped_small/haniwa/hand/guard.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Hand, - stats: ( + stats: Direct(( protection: Some(Normal(10.0)), poise_resilience: Some(Normal(5.0)), energy_max: Some(5.0), energy_reward: Some(0.036), crit_power: Some(0.032), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/haniwa/hand/soldier.ron b/assets/common/items/npc_armor/biped_small/haniwa/hand/soldier.ron index 0f6884bd87..0d4cb5c964 100644 --- a/assets/common/items/npc_armor/biped_small/haniwa/hand/soldier.ron +++ b/assets/common/items/npc_armor/biped_small/haniwa/hand/soldier.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Hand, - stats: ( + stats: Direct(( protection: Some(Normal(10.0)), poise_resilience: Some(Normal(5.0)), energy_max: Some(5.0), energy_reward: Some(0.036), crit_power: Some(0.032), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/haniwa/head/archer.ron b/assets/common/items/npc_armor/biped_small/haniwa/head/archer.ron index 0aec9a9fb6..9e7bdb1d0d 100644 --- a/assets/common/items/npc_armor/biped_small/haniwa/head/archer.ron +++ b/assets/common/items/npc_armor/biped_small/haniwa/head/archer.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( protection: Some(Normal(19.0)), poise_resilience: Some(Normal(5.0)), energy_max: Some(5.0), energy_reward: Some(0.08), crit_power: Some(0.064), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/haniwa/head/guard.ron b/assets/common/items/npc_armor/biped_small/haniwa/head/guard.ron index 8f91dfec86..a8fb8c3f55 100644 --- a/assets/common/items/npc_armor/biped_small/haniwa/head/guard.ron +++ b/assets/common/items/npc_armor/biped_small/haniwa/head/guard.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( protection: Some(Normal(19.0)), poise_resilience: Some(Normal(5.0)), energy_max: Some(5.0), energy_reward: Some(0.08), crit_power: Some(0.064), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/haniwa/head/soldier.ron b/assets/common/items/npc_armor/biped_small/haniwa/head/soldier.ron index 38357a1390..34baf7f422 100644 --- a/assets/common/items/npc_armor/biped_small/haniwa/head/soldier.ron +++ b/assets/common/items/npc_armor/biped_small/haniwa/head/soldier.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( protection: Some(Normal(19.0)), poise_resilience: Some(Normal(5.0)), energy_max: Some(5.0), energy_reward: Some(0.08), crit_power: Some(0.064), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/haniwa/pants/archer.ron b/assets/common/items/npc_armor/biped_small/haniwa/pants/archer.ron index 8adba3a93f..bc3a378e93 100644 --- a/assets/common/items/npc_armor/biped_small/haniwa/pants/archer.ron +++ b/assets/common/items/npc_armor/biped_small/haniwa/pants/archer.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Pants, - stats: ( + stats: Direct(( protection: Some(Normal(19.0)), poise_resilience: Some(Normal(5.0)), energy_max: Some(5.0), energy_reward: Some(0.08), crit_power: Some(0.064), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/haniwa/pants/guard.ron b/assets/common/items/npc_armor/biped_small/haniwa/pants/guard.ron index 9bd3c310f2..14ce6cd2fb 100644 --- a/assets/common/items/npc_armor/biped_small/haniwa/pants/guard.ron +++ b/assets/common/items/npc_armor/biped_small/haniwa/pants/guard.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Pants, - stats: ( + stats: Direct(( protection: Some(Normal(19.0)), poise_resilience: Some(Normal(5.0)), energy_max: Some(5.0), energy_reward: Some(0.08), crit_power: Some(0.064), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/haniwa/pants/soldier.ron b/assets/common/items/npc_armor/biped_small/haniwa/pants/soldier.ron index e58aa11316..d95b0ed2af 100644 --- a/assets/common/items/npc_armor/biped_small/haniwa/pants/soldier.ron +++ b/assets/common/items/npc_armor/biped_small/haniwa/pants/soldier.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Pants, - stats: ( + stats: Direct(( protection: Some(Normal(19.0)), poise_resilience: Some(Normal(5.0)), energy_max: Some(5.0), energy_reward: Some(0.08), crit_power: Some(0.064), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/husk/chest/husk.ron b/assets/common/items/npc_armor/biped_small/husk/chest/husk.ron index 857b638354..f52914bfaf 100644 --- a/assets/common/items/npc_armor/biped_small/husk/chest/husk.ron +++ b/assets/common/items/npc_armor/biped_small/husk/chest/husk.ron @@ -3,10 +3,10 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(18.0)), poise_resilience: Some(Normal(1.0)), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/husk/foot/husk.ron b/assets/common/items/npc_armor/biped_small/husk/foot/husk.ron index ee146fffec..de0fe5934f 100644 --- a/assets/common/items/npc_armor/biped_small/husk/foot/husk.ron +++ b/assets/common/items/npc_armor/biped_small/husk/foot/husk.ron @@ -3,10 +3,10 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Foot, - stats: ( + stats: Direct(( protection: Some(Normal(14.0)), poise_resilience: Some(Normal(1.0)), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/husk/hand/husk.ron b/assets/common/items/npc_armor/biped_small/husk/hand/husk.ron index c57bf790b9..abb1b27dab 100644 --- a/assets/common/items/npc_armor/biped_small/husk/hand/husk.ron +++ b/assets/common/items/npc_armor/biped_small/husk/hand/husk.ron @@ -3,10 +3,10 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Hand, - stats: ( + stats: Direct(( protection: Some(Normal(14.0)), poise_resilience: Some(Normal(1.0)), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/husk/head/husk.ron b/assets/common/items/npc_armor/biped_small/husk/head/husk.ron index 11eee82cde..ea8ee37073 100644 --- a/assets/common/items/npc_armor/biped_small/husk/head/husk.ron +++ b/assets/common/items/npc_armor/biped_small/husk/head/husk.ron @@ -3,10 +3,10 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( protection: Some(Normal(14.0)), poise_resilience: Some(Normal(1.0)), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/husk/pants/husk.ron b/assets/common/items/npc_armor/biped_small/husk/pants/husk.ron index 588a3efcde..e03fcb09e3 100644 --- a/assets/common/items/npc_armor/biped_small/husk/pants/husk.ron +++ b/assets/common/items/npc_armor/biped_small/husk/pants/husk.ron @@ -3,10 +3,10 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Pants, - stats: ( + stats: Direct(( protection: Some(Normal(14.0)), poise_resilience: Some(Normal(1.0)), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/husk/tail/husk.ron b/assets/common/items/npc_armor/biped_small/husk/tail/husk.ron index 4a923bbcea..ce032c59f7 100644 --- a/assets/common/items/npc_armor/biped_small/husk/tail/husk.ron +++ b/assets/common/items/npc_armor/biped_small/husk/tail/husk.ron @@ -3,10 +3,10 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Belt, - stats: ( + stats: Direct(( protection: Some(Normal(14.0)), poise_resilience: Some(Normal(1.0)), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/kappa/chest/kappa.ron b/assets/common/items/npc_armor/biped_small/kappa/chest/kappa.ron index d7d5a14715..0b0227e5a4 100644 --- a/assets/common/items/npc_armor/biped_small/kappa/chest/kappa.ron +++ b/assets/common/items/npc_armor/biped_small/kappa/chest/kappa.ron @@ -3,10 +3,10 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(2.0)), poise_resilience: Some(Normal(1.0)), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/kappa/foot/kappa.ron b/assets/common/items/npc_armor/biped_small/kappa/foot/kappa.ron index ef2da0f6ab..90e6f0e337 100644 --- a/assets/common/items/npc_armor/biped_small/kappa/foot/kappa.ron +++ b/assets/common/items/npc_armor/biped_small/kappa/foot/kappa.ron @@ -3,10 +3,10 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Foot, - stats: ( + stats: Direct(( protection: Some(Normal(2.0)), poise_resilience: Some(Normal(1.0)), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/kappa/hand/kappa.ron b/assets/common/items/npc_armor/biped_small/kappa/hand/kappa.ron index 4634f0b064..072a9c96a7 100644 --- a/assets/common/items/npc_armor/biped_small/kappa/hand/kappa.ron +++ b/assets/common/items/npc_armor/biped_small/kappa/hand/kappa.ron @@ -3,10 +3,10 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Hand, - stats: ( + stats: Direct(( protection: Some(Normal(2.0)), poise_resilience: Some(Normal(1.0)), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/kappa/head/kappa.ron b/assets/common/items/npc_armor/biped_small/kappa/head/kappa.ron index 2c6092c11f..e0f7904e8a 100644 --- a/assets/common/items/npc_armor/biped_small/kappa/head/kappa.ron +++ b/assets/common/items/npc_armor/biped_small/kappa/head/kappa.ron @@ -3,10 +3,10 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( protection: Some(Normal(2.0)), poise_resilience: Some(Normal(1.0)), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/kappa/pants/kappa.ron b/assets/common/items/npc_armor/biped_small/kappa/pants/kappa.ron index 083569e070..ac44b9a334 100644 --- a/assets/common/items/npc_armor/biped_small/kappa/pants/kappa.ron +++ b/assets/common/items/npc_armor/biped_small/kappa/pants/kappa.ron @@ -3,10 +3,10 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Pants, - stats: ( + stats: Direct(( protection: Some(Normal(2.0)), poise_resilience: Some(Normal(1.0)), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/kappa/tail/kappa.ron b/assets/common/items/npc_armor/biped_small/kappa/tail/kappa.ron index 3b4058ccf9..92f60447f1 100644 --- a/assets/common/items/npc_armor/biped_small/kappa/tail/kappa.ron +++ b/assets/common/items/npc_armor/biped_small/kappa/tail/kappa.ron @@ -3,10 +3,10 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Belt, - stats: ( + stats: Direct(( protection: Some(Normal(2.0)), poise_resilience: Some(Normal(1.0)), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/mandragora/chest/mandragora.ron b/assets/common/items/npc_armor/biped_small/mandragora/chest/mandragora.ron index 4b03356c25..662063c797 100644 --- a/assets/common/items/npc_armor/biped_small/mandragora/chest/mandragora.ron +++ b/assets/common/items/npc_armor/biped_small/mandragora/chest/mandragora.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(26.0)), poise_resilience: Some(Normal(4.0)), energy_max: Some(3.4), energy_reward: Some(0.81), crit_power: Some(0.075), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/mandragora/foot/mandragora.ron b/assets/common/items/npc_armor/biped_small/mandragora/foot/mandragora.ron index 4161e5ab31..79417e0a72 100644 --- a/assets/common/items/npc_armor/biped_small/mandragora/foot/mandragora.ron +++ b/assets/common/items/npc_armor/biped_small/mandragora/foot/mandragora.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Foot, - stats: ( + stats: Direct(( protection: Some(Normal(26.0)), poise_resilience: Some(Normal(4.0)), energy_max: Some(3.4), energy_reward: Some(0.81), crit_power: Some(0.075), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/mandragora/hand/mandragora.ron b/assets/common/items/npc_armor/biped_small/mandragora/hand/mandragora.ron index 97c66acc0b..6730632147 100644 --- a/assets/common/items/npc_armor/biped_small/mandragora/hand/mandragora.ron +++ b/assets/common/items/npc_armor/biped_small/mandragora/hand/mandragora.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Hand, - stats: ( + stats: Direct(( protection: Some(Normal(26.0)), poise_resilience: Some(Normal(4.0)), energy_max: Some(3.4), energy_reward: Some(0.81), crit_power: Some(0.075), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/mandragora/pants/mandragora.ron b/assets/common/items/npc_armor/biped_small/mandragora/pants/mandragora.ron index 46e7c724a0..5b29a825ca 100644 --- a/assets/common/items/npc_armor/biped_small/mandragora/pants/mandragora.ron +++ b/assets/common/items/npc_armor/biped_small/mandragora/pants/mandragora.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Pants, - stats: ( + stats: Direct(( protection: Some(Normal(26.0)), poise_resilience: Some(Normal(4.0)), energy_max: Some(3.4), energy_reward: Some(0.81), crit_power: Some(0.075), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/mandragora/tail/mandragora.ron b/assets/common/items/npc_armor/biped_small/mandragora/tail/mandragora.ron index e47f9136b4..c6606c3da2 100644 --- a/assets/common/items/npc_armor/biped_small/mandragora/tail/mandragora.ron +++ b/assets/common/items/npc_armor/biped_small/mandragora/tail/mandragora.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Belt, - stats: ( + stats: Direct(( protection: Some(Normal(26.0)), poise_resilience: Some(Normal(4.0)), energy_max: Some(3.4), energy_reward: Some(0.81), crit_power: Some(0.075), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/myrmidon/chest/hoplite.ron b/assets/common/items/npc_armor/biped_small/myrmidon/chest/hoplite.ron index a9a9c11888..631d285212 100644 --- a/assets/common/items/npc_armor/biped_small/myrmidon/chest/hoplite.ron +++ b/assets/common/items/npc_armor/biped_small/myrmidon/chest/hoplite.ron @@ -3,14 +3,14 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(48.0)), poise_resilience: Some(Normal(6.0)), energy_max: Some(13.5), energy_reward: Some(0.135), crit_power: Some(0.125), stealth: Some(0.125), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/myrmidon/chest/marksman.ron b/assets/common/items/npc_armor/biped_small/myrmidon/chest/marksman.ron index 86f9ea24e3..a90f29a61b 100644 --- a/assets/common/items/npc_armor/biped_small/myrmidon/chest/marksman.ron +++ b/assets/common/items/npc_armor/biped_small/myrmidon/chest/marksman.ron @@ -3,14 +3,14 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(48.0)), poise_resilience: Some(Normal(6.0)), energy_max: Some(13.5), energy_reward: Some(0.135), crit_power: Some(0.125), stealth: Some(0.125), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/myrmidon/chest/strategian.ron b/assets/common/items/npc_armor/biped_small/myrmidon/chest/strategian.ron index 733067d963..28402b5450 100644 --- a/assets/common/items/npc_armor/biped_small/myrmidon/chest/strategian.ron +++ b/assets/common/items/npc_armor/biped_small/myrmidon/chest/strategian.ron @@ -3,14 +3,14 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(48.0)), poise_resilience: Some(Normal(6.0)), energy_max: Some(13.5), energy_reward: Some(0.135), crit_power: Some(0.125), stealth: Some(0.125), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/myrmidon/foot/hoplite.ron b/assets/common/items/npc_armor/biped_small/myrmidon/foot/hoplite.ron index 66b634772b..c66f4ab5fa 100644 --- a/assets/common/items/npc_armor/biped_small/myrmidon/foot/hoplite.ron +++ b/assets/common/items/npc_armor/biped_small/myrmidon/foot/hoplite.ron @@ -3,14 +3,14 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Foot, - stats: ( + stats: Direct(( protection: Some(Normal(16.0)), poise_resilience: Some(Normal(2.0)), energy_max: Some(4.5), energy_reward: Some(0.045), crit_power: Some(0.04), stealth: Some(0.04), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/myrmidon/foot/marksman.ron b/assets/common/items/npc_armor/biped_small/myrmidon/foot/marksman.ron index 3b44625119..07f63c7b24 100644 --- a/assets/common/items/npc_armor/biped_small/myrmidon/foot/marksman.ron +++ b/assets/common/items/npc_armor/biped_small/myrmidon/foot/marksman.ron @@ -3,14 +3,14 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Foot, - stats: ( + stats: Direct(( protection: Some(Normal(16.0)), poise_resilience: Some(Normal(2.0)), energy_max: Some(4.5), energy_reward: Some(0.045), crit_power: Some(0.04), stealth: Some(0.04), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/myrmidon/foot/strategian.ron b/assets/common/items/npc_armor/biped_small/myrmidon/foot/strategian.ron index 6d5ed97d32..e1cb61b248 100644 --- a/assets/common/items/npc_armor/biped_small/myrmidon/foot/strategian.ron +++ b/assets/common/items/npc_armor/biped_small/myrmidon/foot/strategian.ron @@ -3,14 +3,14 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Foot, - stats: ( + stats: Direct(( protection: Some(Normal(16.0)), poise_resilience: Some(Normal(2.0)), energy_max: Some(4.5), energy_reward: Some(0.045), crit_power: Some(0.04), stealth: Some(0.04), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/myrmidon/hand/hoplite.ron b/assets/common/items/npc_armor/biped_small/myrmidon/hand/hoplite.ron index 1f70bcd483..40df2ff49a 100644 --- a/assets/common/items/npc_armor/biped_small/myrmidon/hand/hoplite.ron +++ b/assets/common/items/npc_armor/biped_small/myrmidon/hand/hoplite.ron @@ -3,14 +3,14 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Hand, - stats: ( + stats: Direct(( protection: Some(Normal(16.0)), poise_resilience: Some(Normal(2.0)), energy_max: Some(4.5), energy_reward: Some(0.045), crit_power: Some(0.04), stealth: Some(0.04), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/myrmidon/hand/marksman.ron b/assets/common/items/npc_armor/biped_small/myrmidon/hand/marksman.ron index 8c26b14ef8..1057050974 100644 --- a/assets/common/items/npc_armor/biped_small/myrmidon/hand/marksman.ron +++ b/assets/common/items/npc_armor/biped_small/myrmidon/hand/marksman.ron @@ -3,14 +3,14 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Hand, - stats: ( + stats: Direct(( protection: Some(Normal(16.0)), poise_resilience: Some(Normal(2.0)), energy_max: Some(4.5), energy_reward: Some(0.045), crit_power: Some(0.04), stealth: Some(0.04), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/myrmidon/hand/strategian.ron b/assets/common/items/npc_armor/biped_small/myrmidon/hand/strategian.ron index ed867cfbd9..5d56f70849 100644 --- a/assets/common/items/npc_armor/biped_small/myrmidon/hand/strategian.ron +++ b/assets/common/items/npc_armor/biped_small/myrmidon/hand/strategian.ron @@ -3,14 +3,14 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Hand, - stats: ( + stats: Direct(( protection: Some(Normal(16.0)), poise_resilience: Some(Normal(2.0)), energy_max: Some(4.5), energy_reward: Some(0.045), crit_power: Some(0.04), stealth: Some(0.04), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/myrmidon/head/hoplite.ron b/assets/common/items/npc_armor/biped_small/myrmidon/head/hoplite.ron index b9fcc60529..cc44ee46e3 100644 --- a/assets/common/items/npc_armor/biped_small/myrmidon/head/hoplite.ron +++ b/assets/common/items/npc_armor/biped_small/myrmidon/head/hoplite.ron @@ -3,14 +3,14 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( protection: Some(Normal(32.0)), poise_resilience: Some(Normal(5.0)), energy_max: Some(9.0), energy_reward: Some(0.1), crit_power: Some(0.08), stealth: Some(0.08), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/myrmidon/head/marksman.ron b/assets/common/items/npc_armor/biped_small/myrmidon/head/marksman.ron index afcdab96d8..e42b0239e4 100644 --- a/assets/common/items/npc_armor/biped_small/myrmidon/head/marksman.ron +++ b/assets/common/items/npc_armor/biped_small/myrmidon/head/marksman.ron @@ -3,14 +3,14 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( protection: Some(Normal(32.0)), poise_resilience: Some(Normal(5.0)), energy_max: Some(9.0), energy_reward: Some(0.1), crit_power: Some(0.08), stealth: Some(0.08), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/myrmidon/head/strategian.ron b/assets/common/items/npc_armor/biped_small/myrmidon/head/strategian.ron index 925d54eaff..143673057a 100644 --- a/assets/common/items/npc_armor/biped_small/myrmidon/head/strategian.ron +++ b/assets/common/items/npc_armor/biped_small/myrmidon/head/strategian.ron @@ -3,14 +3,14 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( protection: Some(Normal(32.0)), poise_resilience: Some(Normal(5.0)), energy_max: Some(9.0), energy_reward: Some(0.1), crit_power: Some(0.08), stealth: Some(0.08), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/myrmidon/pants/hoplite.ron b/assets/common/items/npc_armor/biped_small/myrmidon/pants/hoplite.ron index 1f5277ce4a..3207ad2e07 100644 --- a/assets/common/items/npc_armor/biped_small/myrmidon/pants/hoplite.ron +++ b/assets/common/items/npc_armor/biped_small/myrmidon/pants/hoplite.ron @@ -3,14 +3,14 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Pants, - stats: ( + stats: Direct(( protection: Some(Normal(32.0)), poise_resilience: Some(Normal(4.0)), energy_max: Some(9.0), energy_reward: Some(0.1), crit_power: Some(0.08), stealth: Some(0.08), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/myrmidon/pants/marksman.ron b/assets/common/items/npc_armor/biped_small/myrmidon/pants/marksman.ron index 0a95b15743..a0db6a8773 100644 --- a/assets/common/items/npc_armor/biped_small/myrmidon/pants/marksman.ron +++ b/assets/common/items/npc_armor/biped_small/myrmidon/pants/marksman.ron @@ -3,14 +3,14 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Pants, - stats: ( + stats: Direct(( protection: Some(Normal(32.0)), poise_resilience: Some(Normal(4.0)), energy_max: Some(9.0), energy_reward: Some(0.1), crit_power: Some(0.08), stealth: Some(0.08), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/myrmidon/pants/strategian.ron b/assets/common/items/npc_armor/biped_small/myrmidon/pants/strategian.ron index bb4c5f945d..cccb97e075 100644 --- a/assets/common/items/npc_armor/biped_small/myrmidon/pants/strategian.ron +++ b/assets/common/items/npc_armor/biped_small/myrmidon/pants/strategian.ron @@ -3,14 +3,14 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Pants, - stats: ( + stats: Direct(( protection: Some(Normal(32.0)), poise_resilience: Some(Normal(4.0)), energy_max: Some(9.0), energy_reward: Some(0.1), crit_power: Some(0.08), stealth: Some(0.08), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/myrmidon/tail/hoplite.ron b/assets/common/items/npc_armor/biped_small/myrmidon/tail/hoplite.ron index 3c9eed2b67..09c58a3b39 100644 --- a/assets/common/items/npc_armor/biped_small/myrmidon/tail/hoplite.ron +++ b/assets/common/items/npc_armor/biped_small/myrmidon/tail/hoplite.ron @@ -3,14 +3,14 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Belt, - stats: ( + stats: Direct(( protection: Some(Normal(8.0)), poise_resilience: Some(Normal(1.0)), energy_max: Some(2.0), energy_reward: Some(0.025), crit_power: Some(0.02), stealth: Some(0.02), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/myrmidon/tail/marksman.ron b/assets/common/items/npc_armor/biped_small/myrmidon/tail/marksman.ron index d3c14e1c5a..abc3030796 100644 --- a/assets/common/items/npc_armor/biped_small/myrmidon/tail/marksman.ron +++ b/assets/common/items/npc_armor/biped_small/myrmidon/tail/marksman.ron @@ -3,14 +3,14 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Belt, - stats: ( + stats: Direct(( protection: Some(Normal(8.0)), poise_resilience: Some(Normal(1.0)), energy_max: Some(2.0), energy_reward: Some(0.025), crit_power: Some(0.02), stealth: Some(0.02), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/myrmidon/tail/strategian.ron b/assets/common/items/npc_armor/biped_small/myrmidon/tail/strategian.ron index 8db6e2d945..e0c84d7f43 100644 --- a/assets/common/items/npc_armor/biped_small/myrmidon/tail/strategian.ron +++ b/assets/common/items/npc_armor/biped_small/myrmidon/tail/strategian.ron @@ -3,14 +3,14 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Belt, - stats: ( + stats: Direct(( protection: Some(Normal(8.0)), poise_resilience: Some(Normal(1.0)), energy_max: Some(2.0), energy_reward: Some(0.025), crit_power: Some(0.02), stealth: Some(0.02), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/sahagin/chest/sniper.ron b/assets/common/items/npc_armor/biped_small/sahagin/chest/sniper.ron index cb30f63650..5f71527177 100644 --- a/assets/common/items/npc_armor/biped_small/sahagin/chest/sniper.ron +++ b/assets/common/items/npc_armor/biped_small/sahagin/chest/sniper.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(26.0)), poise_resilience: Some(Normal(4.0)), energy_max: Some(3.4), energy_reward: Some(0.81), crit_power: Some(0.075), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/sahagin/chest/sorcerer.ron b/assets/common/items/npc_armor/biped_small/sahagin/chest/sorcerer.ron index d4190998cc..606f594554 100644 --- a/assets/common/items/npc_armor/biped_small/sahagin/chest/sorcerer.ron +++ b/assets/common/items/npc_armor/biped_small/sahagin/chest/sorcerer.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(26.0)), poise_resilience: Some(Normal(4.0)), energy_max: Some(3.4), energy_reward: Some(0.81), crit_power: Some(0.075), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/sahagin/chest/spearman.ron b/assets/common/items/npc_armor/biped_small/sahagin/chest/spearman.ron index e6c635286c..3ecac67833 100644 --- a/assets/common/items/npc_armor/biped_small/sahagin/chest/spearman.ron +++ b/assets/common/items/npc_armor/biped_small/sahagin/chest/spearman.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(26.0)), poise_resilience: Some(Normal(4.0)), energy_max: Some(3.4), energy_reward: Some(0.81), crit_power: Some(0.075), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/sahagin/foot/sniper.ron b/assets/common/items/npc_armor/biped_small/sahagin/foot/sniper.ron index b37a1646fb..95d8e45769 100644 --- a/assets/common/items/npc_armor/biped_small/sahagin/foot/sniper.ron +++ b/assets/common/items/npc_armor/biped_small/sahagin/foot/sniper.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Foot, - stats: ( + stats: Direct(( protection: Some(Normal(7.0)), poise_resilience: Some(Normal(4.0)), energy_max: Some(3.4), energy_reward: Some(0.027), crit_power: Some(0.024), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/sahagin/foot/sorcerer.ron b/assets/common/items/npc_armor/biped_small/sahagin/foot/sorcerer.ron index 96b81707d4..6e11c11e79 100644 --- a/assets/common/items/npc_armor/biped_small/sahagin/foot/sorcerer.ron +++ b/assets/common/items/npc_armor/biped_small/sahagin/foot/sorcerer.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Foot, - stats: ( + stats: Direct(( protection: Some(Normal(7.0)), poise_resilience: Some(Normal(4.0)), energy_max: Some(3.4), energy_reward: Some(0.027), crit_power: Some(0.024), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/sahagin/foot/spearman.ron b/assets/common/items/npc_armor/biped_small/sahagin/foot/spearman.ron index dcb0f2e397..7dfb8cf19c 100644 --- a/assets/common/items/npc_armor/biped_small/sahagin/foot/spearman.ron +++ b/assets/common/items/npc_armor/biped_small/sahagin/foot/spearman.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Foot, - stats: ( + stats: Direct(( protection: Some(Normal(7.0)), poise_resilience: Some(Normal(4.0)), energy_max: Some(3.4), energy_reward: Some(0.027), crit_power: Some(0.024), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/sahagin/hand/sniper.ron b/assets/common/items/npc_armor/biped_small/sahagin/hand/sniper.ron index 59b7545126..0f10620d19 100644 --- a/assets/common/items/npc_armor/biped_small/sahagin/hand/sniper.ron +++ b/assets/common/items/npc_armor/biped_small/sahagin/hand/sniper.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Hand, - stats: ( + stats: Direct(( protection: Some(Normal(7.0)), poise_resilience: Some(Normal(4.0)), energy_max: Some(3.4), energy_reward: Some(0.027), crit_power: Some(0.024), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/sahagin/hand/sorcerer.ron b/assets/common/items/npc_armor/biped_small/sahagin/hand/sorcerer.ron index 16b803e23f..d58d2ffb00 100644 --- a/assets/common/items/npc_armor/biped_small/sahagin/hand/sorcerer.ron +++ b/assets/common/items/npc_armor/biped_small/sahagin/hand/sorcerer.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Hand, - stats: ( + stats: Direct(( protection: Some(Normal(7.0)), poise_resilience: Some(Normal(4.0)), energy_max: Some(3.4), energy_reward: Some(0.027), crit_power: Some(0.024), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/sahagin/hand/spearman.ron b/assets/common/items/npc_armor/biped_small/sahagin/hand/spearman.ron index 192a7573d2..967a90dc44 100644 --- a/assets/common/items/npc_armor/biped_small/sahagin/hand/spearman.ron +++ b/assets/common/items/npc_armor/biped_small/sahagin/hand/spearman.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Hand, - stats: ( + stats: Direct(( protection: Some(Normal(7.0)), poise_resilience: Some(Normal(4.0)), energy_max: Some(3.4), energy_reward: Some(0.027), crit_power: Some(0.024), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/sahagin/head/sniper.ron b/assets/common/items/npc_armor/biped_small/sahagin/head/sniper.ron index 38fff5003f..6d4121b5d0 100644 --- a/assets/common/items/npc_armor/biped_small/sahagin/head/sniper.ron +++ b/assets/common/items/npc_armor/biped_small/sahagin/head/sniper.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( protection: Some(Normal(13.0)), poise_resilience: Some(Normal(4.0)), energy_max: Some(3.4), energy_reward: Some(0.06), crit_power: Some(0.048), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/sahagin/head/sorcerer.ron b/assets/common/items/npc_armor/biped_small/sahagin/head/sorcerer.ron index ee79058fcb..f85f227dab 100644 --- a/assets/common/items/npc_armor/biped_small/sahagin/head/sorcerer.ron +++ b/assets/common/items/npc_armor/biped_small/sahagin/head/sorcerer.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( protection: Some(Normal(13.0)), poise_resilience: Some(Normal(4.0)), energy_max: Some(3.4), energy_reward: Some(0.06), crit_power: Some(0.048), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/sahagin/head/spearman.ron b/assets/common/items/npc_armor/biped_small/sahagin/head/spearman.ron index 06dca8623d..354b4719ff 100644 --- a/assets/common/items/npc_armor/biped_small/sahagin/head/spearman.ron +++ b/assets/common/items/npc_armor/biped_small/sahagin/head/spearman.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members.", kind: Armor(( kind: Head, - stats: ( + stats: Direct(( protection: Some(Normal(13.0)), poise_resilience: Some(Normal(4.0)), energy_max: Some(3.4), energy_reward: Some(0.06), crit_power: Some(0.048), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/sahagin/pants/sniper.ron b/assets/common/items/npc_armor/biped_small/sahagin/pants/sniper.ron index 366610bfc5..1a97b659b9 100644 --- a/assets/common/items/npc_armor/biped_small/sahagin/pants/sniper.ron +++ b/assets/common/items/npc_armor/biped_small/sahagin/pants/sniper.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Pants, - stats: ( + stats: Direct(( protection: Some(Normal(13.0)), poise_resilience: Some(Normal(4.0)), energy_max: Some(3.4), energy_reward: Some(0.06), crit_power: Some(0.048), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/sahagin/pants/sorcerer.ron b/assets/common/items/npc_armor/biped_small/sahagin/pants/sorcerer.ron index c58754c1d2..83e9e9a7fc 100644 --- a/assets/common/items/npc_armor/biped_small/sahagin/pants/sorcerer.ron +++ b/assets/common/items/npc_armor/biped_small/sahagin/pants/sorcerer.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Pants, - stats: ( + stats: Direct(( protection: Some(Normal(13.0)), poise_resilience: Some(Normal(4.0)), energy_max: Some(3.4), energy_reward: Some(0.06), crit_power: Some(0.048), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/sahagin/pants/spearman.ron b/assets/common/items/npc_armor/biped_small/sahagin/pants/spearman.ron index 51a71ce5fb..173be2d3d5 100644 --- a/assets/common/items/npc_armor/biped_small/sahagin/pants/spearman.ron +++ b/assets/common/items/npc_armor/biped_small/sahagin/pants/spearman.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Pants, - stats: ( + stats: Direct(( protection: Some(Normal(13.0)), poise_resilience: Some(Normal(4.0)), energy_max: Some(3.4), energy_reward: Some(0.06), crit_power: Some(0.048), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/sahagin/tail/sniper.ron b/assets/common/items/npc_armor/biped_small/sahagin/tail/sniper.ron index e6c79bf4b5..999f283b95 100644 --- a/assets/common/items/npc_armor/biped_small/sahagin/tail/sniper.ron +++ b/assets/common/items/npc_armor/biped_small/sahagin/tail/sniper.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Belt, - stats: ( + stats: Direct(( protection: Some(Normal(5.0)), poise_resilience: Some(Normal(4.0)), energy_max: Some(3.4), energy_reward: Some(0.015), crit_power: Some(0.012), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/sahagin/tail/sorcerer.ron b/assets/common/items/npc_armor/biped_small/sahagin/tail/sorcerer.ron index 3e7e3237d3..4f5ff7c4b2 100644 --- a/assets/common/items/npc_armor/biped_small/sahagin/tail/sorcerer.ron +++ b/assets/common/items/npc_armor/biped_small/sahagin/tail/sorcerer.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Belt, - stats: ( + stats: Direct(( protection: Some(Normal(5.0)), poise_resilience: Some(Normal(4.0)), energy_max: Some(3.4), energy_reward: Some(0.015), crit_power: Some(0.012), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/biped_small/sahagin/tail/spearman.ron b/assets/common/items/npc_armor/biped_small/sahagin/tail/spearman.ron index 30fecdfc50..69669f50c0 100644 --- a/assets/common/items/npc_armor/biped_small/sahagin/tail/spearman.ron +++ b/assets/common/items/npc_armor/biped_small/sahagin/tail/spearman.ron @@ -3,13 +3,13 @@ ItemDef( description: "Ceremonial attire used by members..", kind: Armor(( kind: Belt, - stats: ( + stats: Direct(( protection: Some(Normal(5.0)), poise_resilience: Some(Normal(4.0)), energy_max: Some(3.4), energy_reward: Some(0.015), crit_power: Some(0.012), - ), + )), )), quality: Low, tags: [], diff --git a/assets/common/items/npc_armor/chest/leather_blue.ron b/assets/common/items/npc_armor/chest/leather_blue.ron index fb67f07482..bd0db587b2 100644 --- a/assets/common/items/npc_armor/chest/leather_blue.ron +++ b/assets/common/items/npc_armor/chest/leather_blue.ron @@ -1,15 +1,13 @@ ItemDef( name: "Blue Leather Cuirass", description: "", - kind: Armor( - ( - kind: Chest, - stats: ( - protection: Some(Normal(40.0)), - poise_resilience: Some(Normal(10.0)), - ), - ) - ), + kind: Armor(( + kind: Chest, + stats: Direct(( + protection: Some(Normal(40.0)), + poise_resilience: Some(Normal(10.0)), + )), + )), quality: Moderate, tags: [], ) diff --git a/assets/common/items/npc_armor/chest/plate_red.ron b/assets/common/items/npc_armor/chest/plate_red.ron index 68ef1c6b9c..b7fcd733c3 100644 --- a/assets/common/items/npc_armor/chest/plate_red.ron +++ b/assets/common/items/npc_armor/chest/plate_red.ron @@ -1,15 +1,13 @@ ItemDef( name: "Iron Chestplate", description: "A chestplate forged from iron.", - kind: Armor( - ( - kind: Chest, - stats: ( - protection: Some(Normal(5.0)), - poise_resilience: Some(Normal(5.0)), - ), - ) - ), + kind: Armor(( + kind: Chest, + stats: Direct(( + protection: Some(Normal(5.0)), + poise_resilience: Some(Normal(5.0)), + )), + )), quality: Low, tags: [], ) diff --git a/assets/common/items/npc_armor/golem/claygolem.ron b/assets/common/items/npc_armor/golem/claygolem.ron index d08b389a6b..a51924d924 100644 --- a/assets/common/items/npc_armor/golem/claygolem.ron +++ b/assets/common/items/npc_armor/golem/claygolem.ron @@ -3,10 +3,10 @@ ItemDef( description: "Worn by clay golem.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(180.0)), poise_resilience: Some(Normal(1.0)), - ), + )), )), quality: Legendary, tags: [], diff --git a/assets/common/items/npc_armor/golem/woodgolem.ron b/assets/common/items/npc_armor/golem/woodgolem.ron index ea53c39a6c..8d0651a47c 100644 --- a/assets/common/items/npc_armor/golem/woodgolem.ron +++ b/assets/common/items/npc_armor/golem/woodgolem.ron @@ -3,10 +3,10 @@ ItemDef( description: "Yeet", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(60.0)), poise_resilience: Some(Normal(60.0)), - ), + )), )), quality: Common, tags: [], diff --git a/assets/common/items/npc_armor/pants/leather_blue.ron b/assets/common/items/npc_armor/pants/leather_blue.ron index 3096866336..ada5546ab4 100644 --- a/assets/common/items/npc_armor/pants/leather_blue.ron +++ b/assets/common/items/npc_armor/pants/leather_blue.ron @@ -1,15 +1,13 @@ ItemDef( name: "Blue Leather Guards", description: "", - kind: Armor( - ( - kind: Pants, - stats: ( - protection: Some(Normal(20.0)), - poise_resilience: Some(Normal(10.0)), - ), - ) - ), + kind: Armor(( + kind: Pants, + stats: Direct(( + protection: Some(Normal(20.0)), + poise_resilience: Some(Normal(10.0)), + )), + )), quality: Low, tags: [], ) diff --git a/assets/common/items/npc_armor/pants/plate_red.ron b/assets/common/items/npc_armor/pants/plate_red.ron index f9e47e00c7..3dc374ada8 100644 --- a/assets/common/items/npc_armor/pants/plate_red.ron +++ b/assets/common/items/npc_armor/pants/plate_red.ron @@ -1,15 +1,13 @@ ItemDef( name: "Iron Legguards", description: "Greaves forged from iron.", - kind: Armor( - ( - kind: Pants, - stats: ( - protection: Some(Normal(10.0)), - poise_resilience: Some(Normal(10.0)), - ), - ) - ), + kind: Armor(( + kind: Pants, + stats: Direct(( + protection: Some(Normal(10.0)), + poise_resilience: Some(Normal(10.0)), + )), + )), quality: Low, tags: [], ) diff --git a/assets/common/items/npc_armor/quadruped_low/generic.ron b/assets/common/items/npc_armor/quadruped_low/generic.ron index 4286b7a772..ffa37c43cc 100644 --- a/assets/common/items/npc_armor/quadruped_low/generic.ron +++ b/assets/common/items/npc_armor/quadruped_low/generic.ron @@ -3,10 +3,10 @@ ItemDef( description: "Scaly.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(40.0)), poise_resilience: Some(Normal(0.0)), - ), + )), )), quality: Moderate, tags: [], diff --git a/assets/common/items/npc_armor/quadruped_low/shell.ron b/assets/common/items/npc_armor/quadruped_low/shell.ron index bb5cbf8dfe..cdc0b39756 100644 --- a/assets/common/items/npc_armor/quadruped_low/shell.ron +++ b/assets/common/items/npc_armor/quadruped_low/shell.ron @@ -3,10 +3,10 @@ ItemDef( description: "Shell.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(320.0)), poise_resilience: Some(Normal(0.0)), - ), + )), )), quality: Moderate, tags: [], diff --git a/assets/common/items/npc_armor/theropod/rugged.ron b/assets/common/items/npc_armor/theropod/rugged.ron index 7a6c2837ac..b6b850b182 100644 --- a/assets/common/items/npc_armor/theropod/rugged.ron +++ b/assets/common/items/npc_armor/theropod/rugged.ron @@ -3,10 +3,10 @@ ItemDef( description: "stronk.", kind: Armor(( kind: Chest, - stats: ( + stats: Direct(( protection: Some(Normal(80.0)), poise_resilience: Some(Normal(0.0)), - ), + )), )), quality: Moderate, tags: [], diff --git a/assets/common/items/npc_weapons/biped_small/adlet/hunter.ron b/assets/common/items/npc_weapons/biped_small/adlet/hunter.ron index 0d0dce3c3e..b44ff0ba1e 100644 --- a/assets/common/items/npc_weapons/biped_small/adlet/hunter.ron +++ b/assets/common/items/npc_weapons/biped_small/adlet/hunter.ron @@ -6,9 +6,9 @@ ItemDef( hands: Two, stats: ( equip_time_secs: 0.0, - power: 0.7, + power: 1.05, effect_power: 1.0, - speed: 1.0, + speed: 0.75, crit_chance: 0.07589286, range: 1.0, energy_efficiency: 1.0, diff --git a/assets/common/items/npc_weapons/biped_small/adlet/tracker.ron b/assets/common/items/npc_weapons/biped_small/adlet/tracker.ron index 49a079df91..6bce3d66e8 100644 --- a/assets/common/items/npc_weapons/biped_small/adlet/tracker.ron +++ b/assets/common/items/npc_weapons/biped_small/adlet/tracker.ron @@ -6,9 +6,9 @@ ItemDef( hands: Two, stats: ( equip_time_secs: 0.0, - power: 0.7, + power: 1.05, effect_power: 0.8, - speed: 0.6, + speed: 0.4, crit_chance: 0.08406594, range: 1.0, energy_efficiency: 1.0, diff --git a/assets/common/items/npc_weapons/biped_small/mandragora.ron b/assets/common/items/npc_weapons/biped_small/mandragora.ron index 085daf3c2f..67946c9772 100644 --- a/assets/common/items/npc_weapons/biped_small/mandragora.ron +++ b/assets/common/items/npc_weapons/biped_small/mandragora.ron @@ -6,9 +6,9 @@ ItemDef( hands: Two, stats: ( equip_time_secs: 0.0, - power: 1.0, + power: 1.5, effect_power: 1.0, - speed: 1.0, + speed: 0.75, crit_chance: 0.1, range: 1.0, energy_efficiency: 1.0, diff --git a/assets/common/items/npc_weapons/biped_small/myrmidon/hoplite.ron b/assets/common/items/npc_weapons/biped_small/myrmidon/hoplite.ron index 4da27f28a8..33d940b0b3 100644 --- a/assets/common/items/npc_weapons/biped_small/myrmidon/hoplite.ron +++ b/assets/common/items/npc_weapons/biped_small/myrmidon/hoplite.ron @@ -6,9 +6,9 @@ ItemDef( hands: Two, stats: ( equip_time_secs: 0.0, - power: 2.0, + power: 3.0, effect_power: 1.0, - speed: 1.0, + speed: 0.75, crit_chance: 0.04963235, range: 1.0, energy_efficiency: 1.0, diff --git a/assets/common/items/npc_weapons/biped_small/myrmidon/marksman.ron b/assets/common/items/npc_weapons/biped_small/myrmidon/marksman.ron index 40df4de085..c8ef00a0b3 100644 --- a/assets/common/items/npc_weapons/biped_small/myrmidon/marksman.ron +++ b/assets/common/items/npc_weapons/biped_small/myrmidon/marksman.ron @@ -6,9 +6,9 @@ ItemDef( hands: Two, stats: ( equip_time_secs: 0.0, - power: 2.0, + power: 3.0, effect_power: 0.8, - speed: 0.8, + speed: 0.6, crit_chance: 0.095454544, range: 1.0, energy_efficiency: 1.0, diff --git a/assets/common/items/npc_weapons/biped_small/myrmidon/strategian.ron b/assets/common/items/npc_weapons/biped_small/myrmidon/strategian.ron index 36319d30eb..d23b085ac4 100644 --- a/assets/common/items/npc_weapons/biped_small/myrmidon/strategian.ron +++ b/assets/common/items/npc_weapons/biped_small/myrmidon/strategian.ron @@ -6,9 +6,9 @@ ItemDef( hands: Two, stats: ( equip_time_secs: 0.0, - power: 2.0, + power: 3.0, effect_power: 0.8, - speed: 0.9, + speed: 0.6, crit_chance: 0.040873703, range: 1.0, energy_efficiency: 1.0, diff --git a/assets/common/items/npc_weapons/biped_small/sahagin/sniper.ron b/assets/common/items/npc_weapons/biped_small/sahagin/sniper.ron index a9e2bb3490..9654a74a12 100644 --- a/assets/common/items/npc_weapons/biped_small/sahagin/sniper.ron +++ b/assets/common/items/npc_weapons/biped_small/sahagin/sniper.ron @@ -6,9 +6,9 @@ ItemDef( hands: Two, stats: ( equip_time_secs: 0.0, - power: 1.2, + power: 1.8, effect_power: 0.8, - speed: 0.7, + speed: 1.05, crit_chance: 0.05965909, range: 1.0, energy_efficiency: 1.0, diff --git a/assets/common/items/npc_weapons/biped_small/sahagin/sorcerer.ron b/assets/common/items/npc_weapons/biped_small/sahagin/sorcerer.ron index 2cde364d74..92e3a8bd38 100644 --- a/assets/common/items/npc_weapons/biped_small/sahagin/sorcerer.ron +++ b/assets/common/items/npc_weapons/biped_small/sahagin/sorcerer.ron @@ -6,9 +6,9 @@ ItemDef( hands: Two, stats: ( equip_time_secs: 0.0, - power: 1.2, + power: 1.8, effect_power: 0.8, - speed: 0.8, + speed: 0.6, crit_chance: 0.066083916, range: 1.0, energy_efficiency: 1.0, diff --git a/assets/common/items/npc_weapons/biped_small/sahagin/spearman.ron b/assets/common/items/npc_weapons/biped_small/sahagin/spearman.ron index bf8313fd89..a8ac1478d0 100644 --- a/assets/common/items/npc_weapons/biped_small/sahagin/spearman.ron +++ b/assets/common/items/npc_weapons/biped_small/sahagin/spearman.ron @@ -6,9 +6,9 @@ ItemDef( hands: Two, stats: ( equip_time_secs: 0.0, - power: 1.2, + power: 1.8, effect_power: 1.0, - speed: 1.0, + speed: 0.75, crit_chance: 0.053030305, range: 1.0, energy_efficiency: 1.0, diff --git a/assets/common/items/npc_weapons/bow/saurok_bow.ron b/assets/common/items/npc_weapons/bow/saurok_bow.ron index 4dd9da164c..fb2181fe46 100644 --- a/assets/common/items/npc_weapons/bow/saurok_bow.ron +++ b/assets/common/items/npc_weapons/bow/saurok_bow.ron @@ -6,9 +6,9 @@ ItemDef( hands: Two, stats: ( equip_time_secs: 0.5, - power: 1.0, + power: 1.5, effect_power: 1.0, - speed: 1.0, + speed: 0.75, crit_chance: 0.0625, range: 1.0, energy_efficiency: 1.0, diff --git a/assets/common/items/npc_weapons/hammer/bipedlarge-cultist.ron b/assets/common/items/npc_weapons/hammer/bipedlarge-cultist.ron index 87fd13b7d9..87f26c4200 100644 --- a/assets/common/items/npc_weapons/hammer/bipedlarge-cultist.ron +++ b/assets/common/items/npc_weapons/hammer/bipedlarge-cultist.ron @@ -6,9 +6,9 @@ ItemDef( hands: Two, stats: ( equip_time_secs: 0.5, - power: 1.6, + power: 2.4, effect_power: 1.0, - speed: 0.8, + speed: 0.6, crit_chance: 0.140625, range: 1.0, energy_efficiency: 1.0, diff --git a/assets/common/items/npc_weapons/staff/bipedlarge-cultist.ron b/assets/common/items/npc_weapons/staff/bipedlarge-cultist.ron index 91fc080f7e..0b33c49418 100644 --- a/assets/common/items/npc_weapons/staff/bipedlarge-cultist.ron +++ b/assets/common/items/npc_weapons/staff/bipedlarge-cultist.ron @@ -6,9 +6,9 @@ ItemDef( hands: Two, stats: ( equip_time_secs: 0.3, - power: 1.6, + power: 2.4, effect_power: 1.0, - speed: 0.8, + speed: 0.6, crit_chance: 0.140625, range: 1.0, energy_efficiency: 1.0, diff --git a/assets/common/items/npc_weapons/staff/saurok_staff.ron b/assets/common/items/npc_weapons/staff/saurok_staff.ron index a3f5000a0b..98406a251a 100644 --- a/assets/common/items/npc_weapons/staff/saurok_staff.ron +++ b/assets/common/items/npc_weapons/staff/saurok_staff.ron @@ -6,9 +6,9 @@ ItemDef( hands: Two, stats: ( equip_time_secs: 0.5, - power: 1.0, + power: 1.5, effect_power: 1.0, - speed: 1.0, + speed: 0.75, crit_chance: 0.0625, range: 1.0, energy_efficiency: 1.0, diff --git a/assets/common/items/npc_weapons/sword/bipedlarge-cultist.ron b/assets/common/items/npc_weapons/sword/bipedlarge-cultist.ron index 2dee1ab04e..76d5147127 100644 --- a/assets/common/items/npc_weapons/sword/bipedlarge-cultist.ron +++ b/assets/common/items/npc_weapons/sword/bipedlarge-cultist.ron @@ -6,9 +6,9 @@ ItemDef( hands: Two, stats: ( equip_time_secs: 0.5, - power: 1.6, + power: 3.6, effect_power: 1.0, - speed: 0.8, + speed: 0.6, crit_chance: 0.140625, range: 1.0, energy_efficiency: 1.0, diff --git a/assets/common/items/npc_weapons/sword/dullahan_sword.ron b/assets/common/items/npc_weapons/sword/dullahan_sword.ron index 26cc124abb..ccf989ca91 100644 --- a/assets/common/items/npc_weapons/sword/dullahan_sword.ron +++ b/assets/common/items/npc_weapons/sword/dullahan_sword.ron @@ -6,9 +6,9 @@ ItemDef( hands: Two, stats: ( equip_time_secs: 0.5, - power: 1.0, + power: 1.5, effect_power: 1.0, - speed: 1.0, + speed: 0.75, crit_chance: 0.0625, range: 1.0, energy_efficiency: 1.0, diff --git a/assets/common/items/npc_weapons/sword/saurok_sword.ron b/assets/common/items/npc_weapons/sword/saurok_sword.ron index 8f1f74dd85..d80de6a38e 100644 --- a/assets/common/items/npc_weapons/sword/saurok_sword.ron +++ b/assets/common/items/npc_weapons/sword/saurok_sword.ron @@ -6,9 +6,9 @@ ItemDef( hands: Two, stats: ( equip_time_secs: 0.5, - power: 1.0, + power: 1.5, effect_power: 1.0, - speed: 1.0, + speed: 0.75, crit_chance: 0.0625, range: 1.0, energy_efficiency: 1.0, diff --git a/assets/common/items/testing/test_bag_18_slot.ron b/assets/common/items/testing/test_bag_18_slot.ron index f7fb152e5e..3bf0e174cd 100644 --- a/assets/common/items/testing/test_bag_18_slot.ron +++ b/assets/common/items/testing/test_bag_18_slot.ron @@ -1,13 +1,10 @@ ItemDef( name: "Test 18 slot bag", description: "Used for unit tests do not delete", - kind: Armor( - ( - kind: Bag, - stats: ( - ), - ) - ), + kind: Armor(( + kind: Bag, + stats: Direct(()), + )), quality: High, tags: [], slots: 18, diff --git a/assets/common/items/testing/test_bag_9_slot.ron b/assets/common/items/testing/test_bag_9_slot.ron index d945eb49f5..de1a6f9e66 100644 --- a/assets/common/items/testing/test_bag_9_slot.ron +++ b/assets/common/items/testing/test_bag_9_slot.ron @@ -1,13 +1,10 @@ ItemDef( name: "Test 9 slot bag", description: "Used for unit tests do not delete", - kind: Armor( - ( - kind: Bag, - stats: ( - ), - ) - ), + kind: Armor(( + kind: Bag, + stats: Direct(()), + )), quality: High, tags: [], slots: 9, diff --git a/assets/common/items/testing/test_boots.ron b/assets/common/items/testing/test_boots.ron index 69fc368493..04d67fa4b9 100644 --- a/assets/common/items/testing/test_boots.ron +++ b/assets/common/items/testing/test_boots.ron @@ -1,13 +1,10 @@ ItemDef( name: "Testing Boots", description: "Hopefully this test doesn't break!", - kind: Armor( - ( - kind: Foot, - stats: ( - ), - ) - ), + kind: Armor(( + kind: Foot, + stats: Direct(()), + )), quality: Low, tags: [], ) diff --git a/assets/common/items/weapons/axe/starter_axe.ron b/assets/common/items/weapons/axe/starter_axe.ron index c3475fc8c1..7d26a4d733 100644 --- a/assets/common/items/weapons/axe/starter_axe.ron +++ b/assets/common/items/weapons/axe/starter_axe.ron @@ -6,13 +6,13 @@ ItemDef( hands: Two, stats: ( equip_time_secs: 0.4, - power: 0.5, + power: 0.45, effect_power: 1.0, - speed: 1.0, + speed: 0.95, crit_chance: 0.09375, - range: 1.0, + range: 0.95, energy_efficiency: 1.0, - buff_strength: 1.0, + buff_strength: 0.9, ), )), quality: Low, diff --git a/assets/common/items/weapons/bow/starter.ron b/assets/common/items/weapons/bow/starter.ron index b3945f744e..dbb1d71a2c 100644 --- a/assets/common/items/weapons/bow/starter.ron +++ b/assets/common/items/weapons/bow/starter.ron @@ -6,13 +6,13 @@ ItemDef( hands: Two, stats: ( equip_time_secs: 0.4, - power: 0.5, + power: 0.45, effect_power: 0.3, - speed: 1.0, + speed: 0.95, crit_chance: 0.09375, range: 1.0, energy_efficiency: 1.0, - buff_strength: 1.0, + buff_strength: 0.9, ), )), quality: Low, diff --git a/assets/common/items/weapons/hammer/starter_hammer.ron b/assets/common/items/weapons/hammer/starter_hammer.ron index eaa782393c..0c6b34643c 100644 --- a/assets/common/items/weapons/hammer/starter_hammer.ron +++ b/assets/common/items/weapons/hammer/starter_hammer.ron @@ -6,13 +6,13 @@ ItemDef( hands: Two, stats: ( equip_time_secs: 0.5, - power: 0.5, + power: 0.45, effect_power: 1.0, - speed: 1.0, + speed: 0.95, crit_chance: 0.09375, - range: 1.0, + range: 0.95, energy_efficiency: 1.0, - buff_strength: 1.0, + buff_strength: 0.9, ), )), quality: Low, diff --git a/assets/common/items/weapons/sceptre/starter_sceptre.ron b/assets/common/items/weapons/sceptre/starter_sceptre.ron index 11099c0297..5db32fd4e9 100644 --- a/assets/common/items/weapons/sceptre/starter_sceptre.ron +++ b/assets/common/items/weapons/sceptre/starter_sceptre.ron @@ -6,13 +6,13 @@ ItemDef( hands: Two, stats: ( equip_time_secs: 0.4, - power: 0.5, + power: 0.45, effect_power: 0.1, - speed: 1.0, + speed: 0.95, crit_chance: 0.09375, - range: 1.0, + range: 0.95, energy_efficiency: 1.0, - buff_strength: 1.0, + buff_strength: 0.9, ), )), quality: Low, diff --git a/assets/common/items/weapons/staff/starter_staff.ron b/assets/common/items/weapons/staff/starter_staff.ron index 51840b564f..690a516ba5 100644 --- a/assets/common/items/weapons/staff/starter_staff.ron +++ b/assets/common/items/weapons/staff/starter_staff.ron @@ -6,13 +6,13 @@ ItemDef( hands: Two, stats: ( equip_time_secs: 0.3, - power: 0.5, + power: 0.45, effect_power: 1.0, - speed: 1.0, + speed: 0.95, crit_chance: 0.09375, - range: 1.0, + range: 0.95, energy_efficiency: 1.0, - buff_strength: 1.0, + buff_strength: 0.95, ), )), quality: Low, diff --git a/assets/common/items/weapons/sword/starter.ron b/assets/common/items/weapons/sword/starter.ron index 0cf9ff040c..8e4d4a2171 100644 --- a/assets/common/items/weapons/sword/starter.ron +++ b/assets/common/items/weapons/sword/starter.ron @@ -6,13 +6,13 @@ ItemDef( hands: Two, stats: ( equip_time_secs: 0.3, - power: 0.5, + power: 0.45, effect_power: 1.0, - speed: 1.0, + speed: 0.90, crit_chance: 0.09375, - range: 1.0, + range: 1.00, energy_efficiency: 1.0, - buff_strength: 1.0, + buff_strength: 0.9, ), )), quality: Low, diff --git a/assets/common/items/weapons/sword_1h/starter.ron b/assets/common/items/weapons/sword_1h/starter.ron index e4764c2c37..04518c8477 100644 --- a/assets/common/items/weapons/sword_1h/starter.ron +++ b/assets/common/items/weapons/sword_1h/starter.ron @@ -6,13 +6,13 @@ ItemDef( hands: One, stats: ( equip_time_secs: 0.3, - power: 0.5, + power: 0.45, effect_power: 1.0, - speed: 1.0, + speed: 0.9, crit_chance: 0.16, - range: 1.0, + range: 0.95, energy_efficiency: 1.0, - buff_strength: 1.0, + buff_strength: 0.9, ), )), quality: Low, diff --git a/assets/common/material_stats_manifest.ron b/assets/common/material_stats_manifest.ron index 92b2c7b0d3..652a117b4a 100644 --- a/assets/common/material_stats_manifest.ron +++ b/assets/common/material_stats_manifest.ron @@ -1,125 +1,314 @@ // Keep in mind that material stats are multiplied by the form stats, not added (e.g. equip_time_secs is most sensitive to this) -({ - // Metals - "common.items.mineral.ingot.bronze": ( - equip_time_secs: 1.0, - power: 0.75, - effect_power: 1.0, - speed: 1.0, - crit_chance: 1.0, - range: 1.0, - energy_efficiency: 1.0, - buff_strength: 1.0, - ), - "common.items.mineral.ingot.iron": ( - equip_time_secs: 1.0, - power: 1.0, - effect_power: 1.0, - speed: 1.0, - crit_chance: 1.0, - range: 1.0, - energy_efficiency: 1.0, - buff_strength: 1.0, - ), - "common.items.mineral.ingot.steel": ( - equip_time_secs: 1.0, - power: 1.25, - effect_power: 1.0, - speed: 1.0, - crit_chance: 1.0, - range: 1.0, - energy_efficiency: 1.0, - buff_strength: 1.0, - ), - "common.items.mineral.ingot.cobalt": ( - equip_time_secs: 1.0, - power: 1.5, - effect_power: 1.0, - speed: 1.0, - crit_chance: 1.0, - range: 1.0, - energy_efficiency: 1.0, - buff_strength: 1.0, - ), - "common.items.mineral.ingot.bloodsteel": ( - equip_time_secs: 1.0, - power: 1.75, - effect_power: 1.0, - speed: 1.0, - crit_chance: 1.0, - range: 1.0, - energy_efficiency: 1.0, - buff_strength: 1.0, - ), - "common.items.mineral.ingot.orichalcum": ( - equip_time_secs: 1.0, - power: 2.0, - effect_power: 1.0, - speed: 1.0, - crit_chance: 1.0, - range: 1.0, - energy_efficiency: 1.0, - buff_strength: 1.0, - ), - // Woods - "common.items.log.wood": ( - equip_time_secs: 1.0, - power: 0.75, - effect_power: 1.0, - speed: 1.0, - crit_chance: 1.0, - range: 1.0, - energy_efficiency: 1.0, - buff_strength: 1.0, - ), - "common.items.log.bamboo": ( - equip_time_secs: 1.0, - power: 1.0, - effect_power: 1.0, - speed: 1.0, - crit_chance: 1.0, - range: 1.0, - energy_efficiency: 1.0, - buff_strength: 1.0, - ), - "common.items.log.hardwood": ( - equip_time_secs: 1.0, - power: 1.25, - effect_power: 1.0, - speed: 1.0, - crit_chance: 1.0, - range: 1.0, - energy_efficiency: 1.0, - buff_strength: 1.0, - ), - "common.items.log.ironwood": ( - equip_time_secs: 1.0, - power: 1.5, - effect_power: 1.0, - speed: 1.0, - crit_chance: 1.0, - range: 1.0, - energy_efficiency: 1.0, - buff_strength: 1.0, - ), - "common.items.log.frostwood": ( - equip_time_secs: 1.0, - power: 1.75, - effect_power: 1.0, - speed: 1.0, - crit_chance: 1.0, - range: 1.0, - energy_efficiency: 1.0, - buff_strength: 1.0, - ), - "common.items.log.eldwood": ( - equip_time_secs: 1.0, - power: 2.0, - effect_power: 1.0, - speed: 1.0, - crit_chance: 1.0, - range: 1.0, - energy_efficiency: 1.0, - buff_strength: 1.0, - ), -}) +( + tool_stats: { + // Metals + "common.items.mineral.ingot.bronze": ( + equip_time_secs: 1.0, + power: 0.75, + effect_power: 1.0, + speed: 1.0, + crit_chance: 1.0, + range: 1.0, + energy_efficiency: 1.0, + buff_strength: 1.0, + ), + "common.items.mineral.ingot.iron": ( + equip_time_secs: 1.0, + power: 1.0, + effect_power: 1.0, + speed: 1.0, + crit_chance: 1.0, + range: 1.0, + energy_efficiency: 1.0, + buff_strength: 1.0, + ), + "common.items.mineral.ingot.steel": ( + equip_time_secs: 1.0, + power: 1.25, + effect_power: 1.0, + speed: 1.0, + crit_chance: 1.0, + range: 1.0, + energy_efficiency: 1.0, + buff_strength: 1.0, + ), + "common.items.mineral.ingot.cobalt": ( + equip_time_secs: 1.0, + power: 1.5, + effect_power: 1.0, + speed: 1.0, + crit_chance: 1.0, + range: 1.0, + energy_efficiency: 1.0, + buff_strength: 1.0, + ), + "common.items.mineral.ingot.bloodsteel": ( + equip_time_secs: 1.0, + power: 1.75, + effect_power: 1.0, + speed: 1.0, + crit_chance: 1.0, + range: 1.0, + energy_efficiency: 1.0, + buff_strength: 1.0, + ), + "common.items.mineral.ingot.orichalcum": ( + equip_time_secs: 1.0, + power: 2.0, + effect_power: 1.0, + speed: 1.0, + crit_chance: 1.0, + range: 1.0, + energy_efficiency: 1.0, + buff_strength: 1.0, + ), + // Woods + "common.items.log.wood": ( + equip_time_secs: 1.0, + power: 0.75, + effect_power: 1.0, + speed: 1.0, + crit_chance: 1.0, + range: 1.0, + energy_efficiency: 1.0, + buff_strength: 1.0, + ), + "common.items.log.bamboo": ( + equip_time_secs: 1.0, + power: 1.0, + effect_power: 1.0, + speed: 1.0, + crit_chance: 1.0, + range: 1.0, + energy_efficiency: 1.0, + buff_strength: 1.0, + ), + "common.items.log.hardwood": ( + equip_time_secs: 1.0, + power: 1.25, + effect_power: 1.0, + speed: 1.0, + crit_chance: 1.0, + range: 1.0, + energy_efficiency: 1.0, + buff_strength: 1.0, + ), + "common.items.log.ironwood": ( + equip_time_secs: 1.0, + power: 1.5, + effect_power: 1.0, + speed: 1.0, + crit_chance: 1.0, + range: 1.0, + energy_efficiency: 1.0, + buff_strength: 1.0, + ), + "common.items.log.frostwood": ( + equip_time_secs: 1.0, + power: 1.75, + effect_power: 1.0, + speed: 1.0, + crit_chance: 1.0, + range: 1.0, + energy_efficiency: 1.0, + buff_strength: 1.0, + ), + "common.items.log.eldwood": ( + equip_time_secs: 1.0, + power: 2.0, + effect_power: 1.0, + speed: 1.0, + crit_chance: 1.0, + range: 1.0, + energy_efficiency: 1.0, + buff_strength: 1.0, + ), + }, + armor_stats: { + // Metals + "Bronze": ( + protection: Some(Normal(40.0)), + poise_resilience: Some(Normal(10.0)), + ), + "Iron": ( + protection: Some(Normal(80.0)), + poise_resilience: Some(Normal(20.0)), + ), + "Steel": ( + protection: Some(Normal(120.0)), + poise_resilience: Some(Normal(30.0)), + ), + "Cobalt": ( + protection: Some(Normal(160.0)), + poise_resilience: Some(Normal(40.0)), + ), + "Bloodsteel": ( + protection: Some(Normal(200.0)), + poise_resilience: Some(Normal(50.0)), + ), + "Orichalcum": ( + protection: Some(Normal(240.0)), + poise_resilience: Some(Normal(60.0)), + ), + // Hides + "Rawhide": ( + protection: Some(Normal(20.0)), + crit_power: Some(0.333), + stealth: Some(0.333), + ), + "Leather": ( + protection: Some(Normal(40.0)), + crit_power: Some(0.667), + stealth: Some(0.667), + ), + "Scale": ( + protection: Some(Normal(60.0)), + crit_power: Some(1.0), + stealth: Some(1.0), + ), + "Carapace": ( + protection: Some(Normal(80.0)), + crit_power: Some(1.33), + stealth: Some(1.33), + ), + "Plate": ( + protection: Some(Normal(100.0)), + crit_power: Some(1.67), + stealth: Some(1.67), + ), + "Dragonscale": ( + protection: Some(Normal(120.0)), + crit_power: Some(2.0), + stealth: Some(2.0), + ), + // Cloths + "Linen": ( + protection: Some(Normal(15.0)), + energy_max: Some(16.7), + energy_reward: Some(0.167), + stealth: Some(0.167), + ), + "Wool": ( + protection: Some(Normal(30.0)), + energy_max: Some(33.3), + energy_reward: Some(0.333), + stealth: Some(0.333), + ), + "Silk": ( + protection: Some(Normal(45.0)), + energy_max: Some(50.0), + energy_reward: Some(0.5), + stealth: Some(0.5), + ), + "Lifecloth": ( + protection: Some(Normal(60.0)), + energy_max: Some(66.7), + energy_reward: Some(0.667), + stealth: Some(0.667), + ), + "Moonweave": ( + protection: Some(Normal(75.0)), + energy_max: Some(83.3), + energy_reward: Some(0.833), + stealth: Some(0.833), + ), + "Sunsilk": ( + protection: Some(Normal(90.0)), + energy_max: Some(100.0), + energy_reward: Some(1.0), + stealth: Some(1.0), + ), + // Misc Sets + "Alchemist": ( + protection: Some(Normal(160.0)), + poise_resilience: Some(Normal(20.0)), + energy_max: Some(45.0), + energy_reward: Some(0.5), + crit_power: Some(0.4), + ), + "Assassin": ( + protection: Some(Normal(50.0)), + poise_resilience: Some(Normal(5.0)), + ), + "Blacksmith": ( + protection: Some(Normal(160.0)), + poise_resilience: Some(Normal(20.0)), + energy_max: Some(45.0), + energy_reward: Some(0.5), + crit_power: Some(0.4), + ), + "Bonerattler": ( + protection: Some(Normal(100.0)), + ), + "Chef": ( + protection: Some(Normal(160.0)), + poise_resilience: Some(Normal(20.0)), + energy_max: Some(45.0), + energy_reward: Some(0.5), + crit_power: Some(0.4), + ), + "Cloth Blue": ( + protection: Some(Normal(5.0)), + ), + "Cloth Green": ( + protection: Some(Normal(5.0)), + ), + "Cloth Purple": ( + protection: Some(Normal(5.0)), + ), + "Cultist": ( + protection: Some(Normal(150.0)), + poise_resilience: Some(Normal(20.0)), + energy_max: Some(45.0), + energy_reward: Some(0.5), + crit_power: Some(0.4), + stealth: Some(0.4), + ), + "Ferocious": ( + protection: Some(Normal(240.0)), + ), + "Leather Plate": ( + protection: Some(Normal(160.0)), + poise_resilience: Some(Normal(40.0)), + ), + "Merchant": ( + protection: Some(Normal(160.0)), + poise_resilience: Some(Normal(20.0)), + energy_max: Some(45.0), + energy_reward: Some(0.5), + crit_power: Some(0.4), + ), + "Pirate": ( + protection: Some(Normal(160.0)), + poise_resilience: Some(Normal(20.0)), + energy_max: Some(45.0), + energy_reward: Some(0.5), + crit_power: Some(0.4), + ), + "Savage": ( + protection: Some(Normal(100.0)), + ), + "Tarasque": ( + protection: Some(Normal(100.0)), + ), + "Twigs": ( + protection: Some(Normal(60.0)), + ), + "Twigs Flowers": ( + protection: Some(Normal(60.0)), + ), + "Twigs Leaves": ( + protection: Some(Normal(60.0)), + ), + "Velorite Battlemage": ( + protection: Some(Normal(115.0)), + ), + "Witch": ( + protection: Some(Normal(160.0)), + poise_resilience: Some(Normal(20.0)), + energy_max: Some(45.0), + energy_reward: Some(0.5), + crit_power: Some(0.4), + ), + }, +) diff --git a/assets/voxygen/audio/ambience/leaves.ogg b/assets/voxygen/audio/ambience/leaves.ogg new file mode 100644 index 0000000000..22276e12f7 --- /dev/null +++ b/assets/voxygen/audio/ambience/leaves.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:30a6d9bc0e63f7216eaaddef5d9ada465f241b2f1206b522dd388a552dba5708 +size 461250 diff --git a/assets/voxygen/audio/ambience/rain.ogg b/assets/voxygen/audio/ambience/rain.ogg new file mode 100644 index 0000000000..f8d3570d79 --- /dev/null +++ b/assets/voxygen/audio/ambience/rain.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b8a6062ad150d11cd40439f3e87881448069092b9f26a1ef3a60cb710a5b5320 +size 328599 diff --git a/assets/voxygen/audio/ambience/thunder.ogg b/assets/voxygen/audio/ambience/thunder.ogg new file mode 100644 index 0000000000..3a214838cb --- /dev/null +++ b/assets/voxygen/audio/ambience/thunder.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c1d9844b1eefb7ae0d3fdeea6407ed1c2da54fc7e4b89f2d57db38e16f17d3d +size 269156 diff --git a/assets/voxygen/audio/ambient/wind.ogg b/assets/voxygen/audio/ambience/wind.ogg similarity index 100% rename from assets/voxygen/audio/ambient/wind.ogg rename to assets/voxygen/audio/ambience/wind.ogg diff --git a/assets/voxygen/audio/ambient.ron b/assets/voxygen/audio/ambient.ron index ddc2af2fbb..a1fb6a9d48 100644 --- a/assets/voxygen/audio/ambient.ron +++ b/assets/voxygen/audio/ambient.ron @@ -1,9 +1,24 @@ ( tracks: [ ( - path: "voxygen.audio.ambient.wind", - length: 14.2, + path: "voxygen.audio.ambience.wind", + length: 14.203, tag: Wind, - ), + ), + ( + path: "voxygen.audio.ambience.rain", + length: 17.0, + tag: Rain, + ), + ( + path:"voxygen.audio.ambience.thunder", + length: 32.0, + tag: Thunder, + ), + ( + path:"voxygen.audio.ambience.leaves", + length: 26.0, + tag: Leaves, + ), ] ) diff --git a/assets/voxygen/audio/music_transition_manifest.ron b/assets/voxygen/audio/music_transition_manifest.ron index e6fa183f1a..c205d8d667 100644 --- a/assets/voxygen/audio/music_transition_manifest.ron +++ b/assets/voxygen/audio/music_transition_manifest.ron @@ -9,7 +9,7 @@ (TitleMusic, Combat): (4.0, 4.0), (Exploration, TitleMusic): (2.0, 2.0), (Exploration, Combat): (0.5, 0.5), - (Combat, Exploration): (2.0, 6.0), + (Combat, Exploration): (2.0, 5.0), (Combat, TitleMusic): (2.0, 2.0), }, interrupt_delay: 5.0, diff --git a/assets/voxygen/audio/sfx.ron b/assets/voxygen/audio/sfx.ron index 4e89f79b85..d527537436 100644 --- a/assets/voxygen/audio/sfx.ron +++ b/assets/voxygen/audio/sfx.ron @@ -155,7 +155,7 @@ "voxygen.audio.sfx.footsteps.stepgrass_5", "voxygen.audio.sfx.footsteps.stepgrass_6", ], - threshold: 1.6, + threshold: 1.8, ), QuadRun(Grass): ( files: [ @@ -166,7 +166,7 @@ "voxygen.audio.sfx.footsteps.stepgrass_5", "voxygen.audio.sfx.footsteps.stepgrass_6", ], - threshold: 0.8, + threshold: 0.9, ), // For when sand 1) exists and 2) has unique sounds // Run(Sand): ( @@ -195,7 +195,7 @@ "voxygen.audio.sfx.footsteps.snow_step_2", "voxygen.audio.sfx.footsteps.snow_step_3", ], - threshold: 1.6, + threshold: 1.8, ), QuadRun(Snow): ( files: [ @@ -203,7 +203,7 @@ "voxygen.audio.sfx.footsteps.snow_step_2", "voxygen.audio.sfx.footsteps.snow_step_3", ], - threshold: 0.8, + threshold: 0.9, ), Run(Rock): ( files: [ @@ -220,7 +220,7 @@ "voxygen.audio.sfx.footsteps.stone_step_11", "voxygen.audio.sfx.footsteps.stone_step_12", ], - threshold: 1.6, + threshold: 1.8, ), QuadRun(Rock): ( files: [ @@ -237,39 +237,18 @@ "voxygen.audio.sfx.footsteps.stone_step_11", "voxygen.audio.sfx.footsteps.stone_step_12", ], - threshold: 0.8, + threshold: 0.9, ), - //ExperienceGained: ( - // files: [ - // "voxygen.audio.sfx.character.experience_gained_1", - // "voxygen.audio.sfx.character.experience_gained_2", - // "voxygen.audio.sfx.character.experience_gained_3", - // ], - // threshold: 0.5, - //), - // unused for now - // Jump: ( - // files: [ - // "voxygen.audio.sfx.utterance.humanmale_hurt1" - // ], - // threshold: 0.25, - // ), - //Fall: ( - // files: [ - // // Event not implemented? - // ], - // threshold: 0.25, - //), Roll: ( files: [ "voxygen.audio.sfx.character.dive_roll_1", "voxygen.audio.sfx.character.dive_roll_2", ], - threshold: 0.25, + threshold: 0.3, ), Climb: ( files: [ - // TODO: sync with animation + // TODO: sync with animation, make actual sfx "voxygen.audio.sfx.footsteps.stepdirt_1", "voxygen.audio.sfx.footsteps.stepdirt_2", "voxygen.audio.sfx.footsteps.stepdirt_3", @@ -641,6 +620,12 @@ ], threshold: 0.3, ), + Inventory(Craft): ( + files: [ + "voxygen.audio.sfx.crafting.hammer", + ], + threshold: 0.05, + ), // // Consumables @@ -965,6 +950,9 @@ ], threshold: 1.0, ), + + // Utterances (NPCs) + Utterance(Angry, BipedLarge): ( files: [ "voxygen.audio.sfx.utterance.ogre_angry1", @@ -1012,12 +1000,6 @@ ], threshold: 1.0, ), - Utterance(Angry, Wendigo): ( - files: [ - "voxygen.audio.sfx.utterance.wendigo_angry1", - ], - threshold: 1.0, - ), Utterance(Calm, Cat): ( files: [ "voxygen.audio.sfx.utterance.cat_calm1", @@ -1145,5 +1127,47 @@ ], threshold: 1.0, ), + Utterance(Angry, Wendigo): ( + files: [ + "voxygen.audio.sfx.utterance.wendigo_angry1", + "voxygen.audio.sfx.utterance.wendigo_angry2", + "voxygen.audio.sfx.utterance.wendigo_angry3", + "voxygen.audio.sfx.utterance.wendigo_angry4", + "voxygen.audio.sfx.utterance.wendigo_angry5", + "voxygen.audio.sfx.utterance.wendigo_angry6", + ], + threshold: 1.0, + ), + Utterance(Calm, Wendigo): ( + files: [ + "voxygen.audio.sfx.utterance.wendigo_calm1", + "voxygen.audio.sfx.utterance.wendigo_calm2", + "voxygen.audio.sfx.utterance.wendigo_calm3", + "voxygen.audio.sfx.utterance.wendigo_calm4", + "voxygen.audio.sfx.utterance.wendigo_calm5", + ], + threshold: 1.0, + ), + Utterance(Angry, Wolf): ( + files: [ + "voxygen.audio.sfx.utterance.wolf_angry1", + "voxygen.audio.sfx.utterance.wolf_angry2", + "voxygen.audio.sfx.utterance.wolf_angry3", + "voxygen.audio.sfx.utterance.wolf_angry4", + "voxygen.audio.sfx.utterance.wolf_angry5", + "voxygen.audio.sfx.utterance.wolf_angry6", + ], + threshold: 1.0, + ), + Utterance(Hurt, Wolf): ( + files: [ + "voxygen.audio.sfx.utterance.wolf_hurt1", + "voxygen.audio.sfx.utterance.wolf_hurt2", + "voxygen.audio.sfx.utterance.wolf_hurt3", + "voxygen.audio.sfx.utterance.wolf_hurt4", + "voxygen.audio.sfx.utterance.wolf_hurt5", + ], + threshold: 1.0, + ), } ) diff --git a/assets/voxygen/audio/sfx/ambient/bees_1.ogg b/assets/voxygen/audio/sfx/ambient/bees_1.ogg index 57738d6ca8..00511a8725 100644 --- a/assets/voxygen/audio/sfx/ambient/bees_1.ogg +++ b/assets/voxygen/audio/sfx/ambient/bees_1.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1eee9c850c3fba96e607284abac60c52ec7703a31fc42e0f97c367df1a12d168 -size 174456 +oid sha256:51e3b36a0ddded060a009ae2c0e0f282d1bcc3826019573de5d68a10847f2335 +size 137186 diff --git a/assets/voxygen/audio/sfx/ambient/birdcall_1.ogg b/assets/voxygen/audio/sfx/ambient/birdcall_1.ogg index 2d8abedaf2..06ceea2840 100644 --- a/assets/voxygen/audio/sfx/ambient/birdcall_1.ogg +++ b/assets/voxygen/audio/sfx/ambient/birdcall_1.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:673504d4e6e1ccf272782b8159baedabf7fde73d7c006cccaf0beaedc5d314fa -size 84946 +oid sha256:b8e7061dca633f53c30cc91d18b266d46c53504926ad3168ace1c673de444cef +size 66488 diff --git a/assets/voxygen/audio/sfx/ambient/birdcall_2.ogg b/assets/voxygen/audio/sfx/ambient/birdcall_2.ogg index a9a5a7f47b..e1e6cbfb50 100644 --- a/assets/voxygen/audio/sfx/ambient/birdcall_2.ogg +++ b/assets/voxygen/audio/sfx/ambient/birdcall_2.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cedcdff91a632c439467420293b2f22f18399268f7ec08b76f81c34fdddaab29 -size 137561 +oid sha256:9a305641f3eaa45b8fadd4160e6a677bfd9bf0a5950c79e62bbc0d4bb72b4fa6 +size 107298 diff --git a/assets/voxygen/audio/sfx/ambient/frog_croak_1.ogg b/assets/voxygen/audio/sfx/ambient/frog_croak_1.ogg index e6fb9f3650..cdb7fee5d8 100644 --- a/assets/voxygen/audio/sfx/ambient/frog_croak_1.ogg +++ b/assets/voxygen/audio/sfx/ambient/frog_croak_1.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cfc457273f6a969f064ee8a149ea2b1ca5f2cd80c4747bb4a65a2b1b6cb7c439 -size 9212 +oid sha256:1f77f03cfdde09602f6cfe676c7e9a12ae42feff41fc548d4ac7ac880312ca75 +size 7409 diff --git a/assets/voxygen/audio/sfx/character/dive_roll_1.ogg b/assets/voxygen/audio/sfx/character/dive_roll_1.ogg index ccf1cec114..6295dcdb16 100644 --- a/assets/voxygen/audio/sfx/character/dive_roll_1.ogg +++ b/assets/voxygen/audio/sfx/character/dive_roll_1.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3a3f7f26a385ede32dc79744078967caf3449b8623785729c1f186f78d9399d3 -size 16489 +oid sha256:3b0a80cfe9688a00b5690ffc79746fe6b47de1cadf053b8af509ed6e28ba82ee +size 8989 diff --git a/assets/voxygen/audio/sfx/character/dive_roll_2.ogg b/assets/voxygen/audio/sfx/character/dive_roll_2.ogg index 3b05cabb0e..356487fb28 100644 --- a/assets/voxygen/audio/sfx/character/dive_roll_2.ogg +++ b/assets/voxygen/audio/sfx/character/dive_roll_2.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7638f3a2053e3cadc7551bbe105eb1fb9afb934e4d71d551064e5d740c411df2 -size 20611 +oid sha256:b3107b18d513c69bb794bad320b36e02f8dcf80b2f4eec1704de553861a38cce +size 9105 diff --git a/assets/voxygen/audio/sfx/crafting/hammer.ogg b/assets/voxygen/audio/sfx/crafting/hammer.ogg index 231793d411..0000a6454b 100644 --- a/assets/voxygen/audio/sfx/crafting/hammer.ogg +++ b/assets/voxygen/audio/sfx/crafting/hammer.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ad18acbbf98dcb1f6b0dcbb37c5bb97331d1eec6f0ea3e1b68c6aacf3a629afb -size 11280 +oid sha256:4f3936067b4e070911420ff038f6784177c1682c0f0d4da29ddf6b734a3b7a14 +size 8707 diff --git a/assets/voxygen/audio/sfx/footsteps/snow_step_1.ogg b/assets/voxygen/audio/sfx/footsteps/snow_step_1.ogg index 3eb0d491ac..625097be82 100644 --- a/assets/voxygen/audio/sfx/footsteps/snow_step_1.ogg +++ b/assets/voxygen/audio/sfx/footsteps/snow_step_1.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c6aeabd16949b87a43d194d08f6aedd173103ce8535cd930029f280d6b00c841 -size 12849 +oid sha256:7586e83188dbb014be78922eec4c3418d59924516bde0c67a8b3031a6740b320 +size 13332 diff --git a/assets/voxygen/audio/sfx/footsteps/snow_step_2.ogg b/assets/voxygen/audio/sfx/footsteps/snow_step_2.ogg index ab72e4cb88..85474aaaf6 100644 --- a/assets/voxygen/audio/sfx/footsteps/snow_step_2.ogg +++ b/assets/voxygen/audio/sfx/footsteps/snow_step_2.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9810dca5425173b196a794f46ed2f8a0e707c636290ef6cc84ca7686761cd924 -size 12297 +oid sha256:33ef3179c67c9c2f27f9b509fcfe21ad8586d9f0eb4b9a29e3046daf0940448c +size 12950 diff --git a/assets/voxygen/audio/sfx/footsteps/snow_step_3.ogg b/assets/voxygen/audio/sfx/footsteps/snow_step_3.ogg index 9e63e16562..cd7182040e 100644 --- a/assets/voxygen/audio/sfx/footsteps/snow_step_3.ogg +++ b/assets/voxygen/audio/sfx/footsteps/snow_step_3.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:07d11684646b9942e6fceb342a6b26e66b704a9072c2ca127dd2f896ff196fd3 -size 10593 +oid sha256:26e6212bb82f1a7f5795944a55ba71e317c8bd0124bdec99ed11d466612b4da4 +size 11012 diff --git a/assets/voxygen/audio/sfx/utterance/wendigo_angry1.ogg b/assets/voxygen/audio/sfx/utterance/wendigo_angry1.ogg index 4c02e0bd36..117a4c36ff 100644 --- a/assets/voxygen/audio/sfx/utterance/wendigo_angry1.ogg +++ b/assets/voxygen/audio/sfx/utterance/wendigo_angry1.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cfbac68b83de452e7be824075ee9104559ca96a9a710be303c89ede0ab4a6a03 -size 42373 +oid sha256:8046769a69f93124617b21cb14d9ea68902a182a171ef9343989656138211f98 +size 39531 diff --git a/assets/voxygen/audio/sfx/utterance/wendigo_angry2.ogg b/assets/voxygen/audio/sfx/utterance/wendigo_angry2.ogg new file mode 100644 index 0000000000..36aa18c4d5 --- /dev/null +++ b/assets/voxygen/audio/sfx/utterance/wendigo_angry2.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5968ee24b92fa0cf8b000a60091a1de0bea14259f71dd935e4188ab5d96f04d0 +size 42355 diff --git a/assets/voxygen/audio/sfx/utterance/wendigo_angry3.ogg b/assets/voxygen/audio/sfx/utterance/wendigo_angry3.ogg new file mode 100644 index 0000000000..8ebfcefa23 --- /dev/null +++ b/assets/voxygen/audio/sfx/utterance/wendigo_angry3.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b517f8f8ec8cee735cfacd67997dad710ce43d4bd9089ada1ef713b23d11ee8 +size 41225 diff --git a/assets/voxygen/audio/sfx/utterance/wendigo_angry4.ogg b/assets/voxygen/audio/sfx/utterance/wendigo_angry4.ogg new file mode 100644 index 0000000000..a6d01b38ed --- /dev/null +++ b/assets/voxygen/audio/sfx/utterance/wendigo_angry4.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df44f71eb87a4934122a0493c7e16ee56660c8eb5971824f4b4798abb9176229 +size 43553 diff --git a/assets/voxygen/audio/sfx/utterance/wendigo_angry5.ogg b/assets/voxygen/audio/sfx/utterance/wendigo_angry5.ogg new file mode 100644 index 0000000000..0c16aa2e0c --- /dev/null +++ b/assets/voxygen/audio/sfx/utterance/wendigo_angry5.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b707cc884836e7d7d94e88e9976bf7ca6d370ca618d2bab1712cba8f24a00dc2 +size 41707 diff --git a/assets/voxygen/audio/sfx/utterance/wendigo_angry6.ogg b/assets/voxygen/audio/sfx/utterance/wendigo_angry6.ogg new file mode 100644 index 0000000000..be31751a0b --- /dev/null +++ b/assets/voxygen/audio/sfx/utterance/wendigo_angry6.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf09a57e31617ee9a423639ee4ecba28dfffdea3e99bcc0a0b658db68c2ffac0 +size 41834 diff --git a/assets/voxygen/audio/sfx/utterance/wendigo_calm1.ogg b/assets/voxygen/audio/sfx/utterance/wendigo_calm1.ogg new file mode 100644 index 0000000000..2260c00cd1 --- /dev/null +++ b/assets/voxygen/audio/sfx/utterance/wendigo_calm1.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb95070620a51a3ff6bf6f4d2ac5575609f02c085dbaa783e8567bfff674a25b +size 26741 diff --git a/assets/voxygen/audio/sfx/utterance/wendigo_calm2.ogg b/assets/voxygen/audio/sfx/utterance/wendigo_calm2.ogg new file mode 100644 index 0000000000..091f276328 --- /dev/null +++ b/assets/voxygen/audio/sfx/utterance/wendigo_calm2.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:230d49b7e2cdce332f6116c8417285e030dbad2a1098346823a47abd968371df +size 29922 diff --git a/assets/voxygen/audio/sfx/utterance/wendigo_calm3.ogg b/assets/voxygen/audio/sfx/utterance/wendigo_calm3.ogg new file mode 100644 index 0000000000..ce4f78080f --- /dev/null +++ b/assets/voxygen/audio/sfx/utterance/wendigo_calm3.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5aa99a39e4430bbce0574cdb398b6b6452a06479208631594fafd5235f31fba5 +size 32981 diff --git a/assets/voxygen/audio/sfx/utterance/wendigo_calm4.ogg b/assets/voxygen/audio/sfx/utterance/wendigo_calm4.ogg new file mode 100644 index 0000000000..f5c6d0d0e3 --- /dev/null +++ b/assets/voxygen/audio/sfx/utterance/wendigo_calm4.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3766df302fbb5b42fd1160869c798f8af96358014b1470e8f10fc5ce84dd6d02 +size 34463 diff --git a/assets/voxygen/audio/sfx/utterance/wendigo_calm5.ogg b/assets/voxygen/audio/sfx/utterance/wendigo_calm5.ogg new file mode 100644 index 0000000000..e1fa31f96b --- /dev/null +++ b/assets/voxygen/audio/sfx/utterance/wendigo_calm5.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:34d7ad71c6e963c3376abca74780b9bb4c1cdffa72252b2d0b07e8c3815c5624 +size 36924 diff --git a/assets/voxygen/audio/sfx/utterance/wolf_angry1.ogg b/assets/voxygen/audio/sfx/utterance/wolf_angry1.ogg new file mode 100644 index 0000000000..b6ea550ebd --- /dev/null +++ b/assets/voxygen/audio/sfx/utterance/wolf_angry1.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:58dbf620cb8cd7bcbf977a946a669757adea97bdee7304ca2723eee3b9a6c47f +size 24853 diff --git a/assets/voxygen/audio/sfx/utterance/wolf_angry2.ogg b/assets/voxygen/audio/sfx/utterance/wolf_angry2.ogg new file mode 100644 index 0000000000..69f4507773 --- /dev/null +++ b/assets/voxygen/audio/sfx/utterance/wolf_angry2.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b584f2e6c29df3e7c646d1949b6cf00d01de2769a59f29e03bd74a93a5c41724 +size 24429 diff --git a/assets/voxygen/audio/sfx/utterance/wolf_angry3.ogg b/assets/voxygen/audio/sfx/utterance/wolf_angry3.ogg new file mode 100644 index 0000000000..9b3ac5c0a6 --- /dev/null +++ b/assets/voxygen/audio/sfx/utterance/wolf_angry3.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:08b8a769a59e6be7cf541e4fe681252d0d69a5c28690b78e3aa5e434ca809d29 +size 24199 diff --git a/assets/voxygen/audio/sfx/utterance/wolf_angry4.ogg b/assets/voxygen/audio/sfx/utterance/wolf_angry4.ogg new file mode 100644 index 0000000000..6e014b4c83 --- /dev/null +++ b/assets/voxygen/audio/sfx/utterance/wolf_angry4.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e491ec8b30eaa8fb75d3798997542c186617282381a9909110c10ea5563b4a10 +size 24130 diff --git a/assets/voxygen/audio/sfx/utterance/wolf_angry5.ogg b/assets/voxygen/audio/sfx/utterance/wolf_angry5.ogg new file mode 100644 index 0000000000..7b58cc12e0 --- /dev/null +++ b/assets/voxygen/audio/sfx/utterance/wolf_angry5.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:50bc38bb284a7ade255ad5b0f5abc6378ef05b6cdb1b28ca0dfca08e443a96d9 +size 24613 diff --git a/assets/voxygen/audio/sfx/utterance/wolf_angry6.ogg b/assets/voxygen/audio/sfx/utterance/wolf_angry6.ogg new file mode 100644 index 0000000000..724c000ec1 --- /dev/null +++ b/assets/voxygen/audio/sfx/utterance/wolf_angry6.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a30f7817a375026cc8e33b2b5aedd41bedfa10948f204afcdcf98b3abaec0c73 +size 23086 diff --git a/assets/voxygen/audio/sfx/utterance/wolf_hurt1.ogg b/assets/voxygen/audio/sfx/utterance/wolf_hurt1.ogg new file mode 100644 index 0000000000..4363eceada --- /dev/null +++ b/assets/voxygen/audio/sfx/utterance/wolf_hurt1.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b17ecc681485e2ad70e64c37ba9c493398b3d6f92f348e9067199c8629059d07 +size 7293 diff --git a/assets/voxygen/audio/sfx/utterance/wolf_hurt2.ogg b/assets/voxygen/audio/sfx/utterance/wolf_hurt2.ogg new file mode 100644 index 0000000000..3d7afa70a3 --- /dev/null +++ b/assets/voxygen/audio/sfx/utterance/wolf_hurt2.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:13f3309a1acc4a64e18084a4438d9e2f45680bb578dbb566ba3f26171a66c8da +size 7198 diff --git a/assets/voxygen/audio/sfx/utterance/wolf_hurt3.ogg b/assets/voxygen/audio/sfx/utterance/wolf_hurt3.ogg new file mode 100644 index 0000000000..78fb1013aa --- /dev/null +++ b/assets/voxygen/audio/sfx/utterance/wolf_hurt3.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f630af600d1196cb53eedbc306bcf4012f5d2485be4c7340c8cf5d29920710a4 +size 7230 diff --git a/assets/voxygen/audio/sfx/utterance/wolf_hurt4.ogg b/assets/voxygen/audio/sfx/utterance/wolf_hurt4.ogg new file mode 100644 index 0000000000..7446be0ba7 --- /dev/null +++ b/assets/voxygen/audio/sfx/utterance/wolf_hurt4.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:45660e572e6da61f4f5d759237d38b897dab4cb9239cd7974a2290828552d3b2 +size 7436 diff --git a/assets/voxygen/audio/sfx/utterance/wolf_hurt5.ogg b/assets/voxygen/audio/sfx/utterance/wolf_hurt5.ogg new file mode 100644 index 0000000000..295846fb9c --- /dev/null +++ b/assets/voxygen/audio/sfx/utterance/wolf_hurt5.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6e078e0c5e558998508082b4f4f72910c6d78ff8630eba817d106586298945c +size 7144 diff --git a/assets/voxygen/audio/soundtrack.ron b/assets/voxygen/audio/soundtrack.ron index 7e81ee0614..6a0958c4af 100644 --- a/assets/voxygen/audio/soundtrack.ron +++ b/assets/voxygen/audio/soundtrack.ron @@ -1,4 +1,3 @@ -// TODO: Add an ambient-soundtrack that runs independently from the musical soundtrack // Times: Some(Day), Some(Night), None [both] // Biomes: Grassland, Forest, Desert, Snowland, Lake, Mountain, Ocean, Jungle, Savannah, Taiga // planned biomes: Swamp @@ -6,10 +5,61 @@ // Sites: Some(Settlement), Some(Cave), Some(Dungeon), Some(Void) [none] // Music states: Activity(Explore), Activity(Combat) // Combat music is looped. Needs three files: start, loop, and end. Start contains leadup to the loop. +// It's recommended to also have appropriate metadata for those who listen via the game files :) ( tracks: [ + // Overworld exploration tracks + + Individual(( + title: "Adventurous Soul", + path: "voxygen.audio.soundtrack.overworld.adventurous_soul", + length: 184.0, + timing: Some(Night), + biomes: [ + (Mountain, 1), + (Snowland, 1), + ], + site: Some(Void), + music_state: Activity(Explore), + artist: "Crow", + )), + Individual(( + title: "Stargazing", + path: "voxygen.audio.soundtrack.overworld.stargazing", + length: 216.0, + timing: Some(Night), + biomes: [ + (Taiga, 1), + (Grassland, 1), + ], + site: Some(Void), + music_state: Activity(Explore), + artist: "GeekyGami", + )), + Individual(( + title: "The Heavens Weep", + path: "voxygen.audio.soundtrack.overworld.the_heavens_weep", + length: 209.0, + timing: None, + weather: Some(Rain), + biomes: [], + site: None, + music_state: Activity(Explore), + artist: "Oolnokk", + )), + Individual(( + title: "A Hero's Sorrow", + path: "voxygen.audio.soundtrack.overworld.a_heroes_sorrow", + length: 251.0, + timing: None, + weather: Some(Rain), + biomes: [], + site: None, + music_state: Activity(Explore), + artist: "Oolnokk", + )), Individual(( title: "Follow the Signs", path: "voxygen.audio.soundtrack.town.follow_the_signs", @@ -35,14 +85,343 @@ artist: "Oolnokk", )), Individual(( - title: "Cobbled Halls", - path: "voxygen.audio.soundtrack.dungeon.cobbled_halls", - length: 240.0, - timing: None, - biomes:[], - site: Some(Dungeon), + title: "Raising Below Like Thunder", + path: "voxygen.audio.soundtrack.overworld.raising_below_like_thunder", + length: 120.0, + timing: Some(Night), + biomes: [ + (Desert, 1), + (Savannah, 1), + ], + site: Some(Void), music_state: Activity(Explore), - artist: "Crow", + artist: "Rarnage", + )), + Individual(( + title: "Calming Hills", + path: "voxygen.audio.soundtrack.overworld.calming_hills", + length: 101.0, + timing: Some(Day), + weather: None, + biomes: [ + (Mountain, 1), + ], + site: Some(Void), + music_state: Activity(Explore), + artist: "Ultimafounding; mixed by Robotnik", + )), + Individual(( + title: "True Nature", + path: "voxygen.audio.soundtrack.overworld.true_nature", + length: 169.0, + timing: Some(Day), + weather: None, + biomes: [ + (Forest, 2), + ], + site: Some(Void), + music_state: Activity(Explore), + artist: "DaforLynx", + )), + Individual(( + title: "Jungle Ambient", + path: "voxygen.audio.soundtrack.overworld.jungle_ambient", + length: 218.0, + timing: Some(Day), + weather: None, + biomes: [ + (Jungle, 1), + ], + site: Some(Void), + music_state: Activity(Explore), + artist: "badbbad", + )), + Individual(( + title: "Ethereal Bonds", + path: "voxygen.audio.soundtrack.overworld.ethereal_bonds", + length: 59.0, + timing: Some(Night), + weather: None, + biomes: [ + (Mountain, 1), + ], + site: Some(Void), + music_state: Activity(Explore), + artist: "Aeronic", + )), + Individual(( + title: "Leap of Faith", + path: "voxygen.audio.soundtrack.overworld.leap_of_faith", + length: 269.0, + timing: Some(Night), + weather: None, + biomes: [ + (Ocean, 1), + (Lake, 1), + ], + site: Some(Void), + music_state: Activity(Explore), + artist: "Aeronic", + )), + Individual(( + title: "Highland of the Hawk", + path: "voxygen.audio.soundtrack.overworld.highland_of_the_hawk", + length: 283.0, + timing: Some(Day), + weather: None, + biomes: [ + (Desert, 1), + (Savannah, 1), + ], + site: Some(Void), + music_state: Activity(Explore), + artist: "badbbad", + )), + Individual(( + title: "Verdant Glades", + path: "voxygen.audio.soundtrack.overworld.verdant_glades", + length: 97.0, + timing: Some(Day), + weather: None, + biomes: [ + (Grassland, 1), + ], + site: Some(Void), + music_state: Activity(Explore), + artist: "Aeronic", + )), + Individual(( + title: "Calling Wild", + path: "voxygen.audio.soundtrack.overworld.calling_wild", + length: 160.0, + timing: Some(Night), + weather: None, + biomes: [ + (Grassland, 1), + (Savannah, 1), + ], + site: Some(Void), + music_state: Activity(Explore), + artist: "Ultimafounding", + )), + Individual(( + title: "Drifting Along", + path: "voxygen.audio.soundtrack.overworld.drifting_along", + length: 164.0, + timing: None, + weather: None, + biomes: [ + (Lake, 1), + (Ocean, 1), + ], + site: Some(Void), + music_state: Activity(Explore), + artist: "DaforLynx", + )), + Individual(( + title: "Winter Falls", + path: "voxygen.audio.soundtrack.overworld.winter_falls", + length: 215.0, + timing: Some(Day), + weather: None, + biomes: [ + (Snowland, 1), + (Taiga, 1), + ], + site: Some(Void), + music_state: Activity(Explore), + artist: "DaforLynx", + )), + Individual(( + title: "Short Meandering", + path: "voxygen.audio.soundtrack.overworld.short_meandering", + length: 147.0, + timing: Some(Night), + weather: None, + biomes: [ + (Desert, 1), + (Mountain, 1), + ], + site: Some(Void), + music_state: Activity(Explore), + artist: "Ap1evideogame", + )), + Individual(( + title: "Oceania", + path: "voxygen.audio.soundtrack.overworld.oceania", + length: 135.0, + timing: None, + weather: None, + biomes: [ + (Lake, 1), + (Ocean, 1), + ], + site: Some(Void), + music_state: Activity(Explore), + artist: "Eden", + )), + Individual(( + title: "A Solemn Quest", + path: "voxygen.audio.soundtrack.overworld.a_solemn_quest", + length: 206.0, + timing: Some(Night), + weather: None, + biomes: [ + (Forest, 2), + ], + site: Some(Void), + music_state: Activity(Explore), + artist: "Eden", + )), + Individual(( + title: "Into The Dark Forest", + path: "voxygen.audio.soundtrack.overworld.into_the_dark_forest", + length: 184.0, + timing: Some(Night), + weather: None, + biomes: [ + (Forest, 2), + (Jungle, 1), + ], + site: Some(Void), + music_state: Activity(Explore), + artist: "Aeronic", + )), + Individual(( + title: "Field Grazing", + path: "voxygen.audio.soundtrack.overworld.field_grazing", + length: 154.0, + timing: Some(Day), + weather: None, + biomes: [ + (Grassland, 1), + (Forest, 2), + ], + site: Some(Void), + music_state: Activity(Explore), + artist: "Aeronic", + )), + Individual(( + title: "Wandering Voices", + path: "voxygen.audio.soundtrack.overworld.wandering_voices", + length: 137.0, + timing: Some(Night), + weather: None, + biomes: [ + (Grassland, 1), + ], + site: Some(Void), + music_state: Activity(Explore), + artist: "Aeronic", + )), + Individual(( + title: "Snowtop Volume", + path: "voxygen.audio.soundtrack.overworld.snowtop_volume", + length: 89.0, + timing: Some(Day), + weather: None, + biomes: [ + (Snowland, 1), + (Taiga, 1), + ], + site: Some(Void), + music_state: Activity(Explore), + artist: "Aeronic", + )), + Individual(( + title: "Moonbeams", + path: "voxygen.audio.soundtrack.overworld.moonbeams", + length: 158.0, + timing: Some(Night), + weather: None, + biomes: [ + (Snowland, 1), + (Taiga, 1), + ], + site: Some(Void), + music_state: Activity(Explore), + artist: "Aeronic", + )), + Individual(( + title: "Serene Meadows", + path: "voxygen.audio.soundtrack.overworld.serene_meadows", + length: 173.0, + timing: Some(Night), + weather: None, + biomes: [ + (Grassland, 1), + ], + site: Some(Void), + music_state: Activity(Explore), + artist: "Aeronic", + )), + Individual(( + title: "Just The Beginning", + path: "voxygen.audio.soundtrack.overworld.just_the_beginning", + length: 188.0, + timing: Some(Day), + weather: None, + biomes: [ + (Grassland, 1), + ], + site: Some(Void), + music_state: Activity(Explore), + artist: "badbbad", + )), + Individual(( + title: "Campfire Stories", + path: "voxygen.audio.soundtrack.overworld.campfire_stories", + length: 100.0, + timing: Some(Night), + weather: None, + biomes: [ + (Forest, 2), + ], + site: Some(Void), + music_state: Activity(Explore), + artist: "badbbad", + )), + Individual(( + title: "Limits", + path: "voxygen.audio.soundtrack.overworld.limits", + length: 203.0, + timing: Some(Day), + weather: None, + biomes: [ + (Mountain, 1), + ], + site: Some(Void), + music_state: Activity(Explore), + artist: "badbbad", + )), + Individual(( + title: "Between The Fairies", + path: "voxygen.audio.soundtrack.overworld.between_the_fairies", + length: 175.0, + timing: Some(Day), + weather: None, + biomes: [ + (Forest, 2), + ], + site: Some(Void), + music_state: Activity(Explore), + artist: "badbbad", + )), + + // Town music + + Individual(( + title: "Life of a Background Mob", + path: "voxygen.audio.soundtrack.town.life_of_a_background_mob", + length: 234.0, + timing: Some(Day), + biomes: [ + (Forest, 2), + (Grassland, 1), + ], + site: Some(Settlement), + music_state: Activity(Explore), + artist: "GeekyGami", )), Individual(( title: "Warmth of the Hearth", @@ -74,19 +453,6 @@ music_state: Activity(Explore), artist: "phoenix13032005", )), - Individual(( - title: "Raising Below Like Thunder", - path: "voxygen.audio.soundtrack.overworld.raising_below_like_thunder", - length: 120.0, - timing: Some(Night), - biomes: [ - (Desert, 1), - (Savannah, 1), - ], - site: Some(Void), - music_state: Activity(Explore), - artist: "Rarnage", - )), Individual(( title: "A Tale Worth Telling", path: "voxygen.audio.soundtrack.town.a_tale_worth_telling", @@ -117,11 +483,25 @@ music_state: Activity(Explore), artist: "DaforLynx", )), + Individual(( + title: "Fiesta Del Pueblo", + path: "voxygen.audio.soundtrack.town.fiesta_del_pueblo", + length: 183.0, + timing: Some(Day), + weather: None, + biomes: [ + (Desert, 1) + ], + site: Some(Settlement), + music_state: Activity(Explore), + artist: "Aeronic; mixed by Robotnik", + )), Individual(( title: "Rest Assured", path: "voxygen.audio.soundtrack.town.rest_assured", length: 189.0, timing: Some(Day), + weather: None, biomes: [], site: Some(Settlement), music_state: Activity(Explore), @@ -132,70 +512,108 @@ path: "voxygen.audio.soundtrack.town.im_home", length: 125.0, timing: Some(Night), + weather: None, biomes: [], site: Some(Settlement), music_state: Activity(Explore), artist: "badbbad", )), + + // Cave music + Individual(( - title: "Dank Dungeon", - path: "voxygen.audio.soundtrack.dungeon.dank_dungeon", - length: 130.0, + title: "Cavernous Hollow", + path: "voxygen.audio.soundtrack.cave.cavernous_hollow", + length: 256.0, timing: None, biomes: [], - site: Some(Dungeon), + site: Some(Cave), music_state: Activity(Explore), - artist: "Aeronic", - )), - Individual(( - title: "Calming Hills", - path: "voxygen.audio.soundtrack.overworld.calming_hills", - length: 101.0, - timing: Some(Day), - biomes: [ - (Mountain, 1), - ], - site: Some(Void), - music_state: Activity(Explore), - artist: "Ultimafounding; mixed by Robotnik", - )), - Individual(( - title: "Fiesta Del Pueblo", - path: "voxygen.audio.soundtrack.town.fiesta_del_pueblo", - length: 183.0, - timing: Some(Day), - biomes: [ - (Desert, 1) - ], - site: Some(Settlement), - music_state: Activity(Explore), - artist: "Aeronic; mixed by Robotnik", - )), - Individual(( - title: "Ruination", - path: "voxygen.audio.soundtrack.dungeon.ruination", - length: 135.0, - timing: None, - biomes: [], - site: Some(Dungeon), - music_state: Activity(Explore), - artist: "Aeronic", + artist: "GeekyGami", )), Individual(( title: "Saturated Hallows", path: "voxygen.audio.soundtrack.cave.saturated_hallows", length: 227.0, timing: None, + weather: None, biomes: [], site: Some(Cave), music_state: Activity(Explore), artist: "Flashbang", )), + Individual(( + title: "Mineral Deposits", + path: "voxygen.audio.soundtrack.cave.mineral_deposits", + length: 148.0, + timing: None, + weather: None, + biomes: [], + site: Some(Cave), + music_state: Activity(Explore), + artist: "Aeronic", + )), + Individual(( + title: "Down The Rabbit Hole", + path: "voxygen.audio.soundtrack.cave.down_the_rabbit_hole", + length: 244.0, + timing: None, + weather: None, + biomes: [], + site: Some(Cave), + music_state: Activity(Explore), + artist: "badbbad", + )), + + // Dungeon music + Individual(( + title: "Mysty Temple", + path: "voxygen.audio.soundtrack.dungeon.mysty_temple", + length: 183.0, + timing: None, + biomes:[], + site: Some(Dungeon), + music_state: Activity(Explore), + artist: "Tiny", + )), + Individual(( + title: "Cobbled Halls", + path: "voxygen.audio.soundtrack.dungeon.cobbled_halls", + length: 240.0, + timing: None, + biomes:[], + site: Some(Dungeon), + music_state: Activity(Explore), + artist: "Crow", + )), + Individual(( + title: "Dank Dungeon", + path: "voxygen.audio.soundtrack.dungeon.dank_dungeon", + length: 130.0, + timing: None, + weather: None, + biomes: [], + site: Some(Dungeon), + music_state: Activity(Explore), + artist: "Aeronic", + )), + Individual(( + title: "Ruination", + path: "voxygen.audio.soundtrack.dungeon.ruination", + length: 135.0, + timing: None, + weather: None, + biomes: [], + site: Some(Dungeon), + music_state: Activity(Explore), + artist: "Aeronic", + )), Individual(( title: "Vast Onslaught", path: "voxygen.audio.soundtrack.dungeon.vast_onslaught", length: 237.0, timing: None, + weather: None, biomes: [], site: Some(Dungeon), music_state: Activity(Explore), @@ -206,306 +624,12 @@ path: "voxygen.audio.soundtrack.dungeon.sacred_temple", length: 75.0, timing: None, + weather: None, biomes: [], site: Some(Dungeon), music_state: Activity(Explore), artist: "Aeronic", )), - Individual(( - title: "True Nature", - path: "voxygen.audio.soundtrack.overworld.true_nature", - length: 169.0, - timing: Some(Day), - biomes: [ - (Forest, 2), - ], - site: Some(Void), - music_state: Activity(Explore), - artist: "DaforLynx", - )), - Individual(( - title: "Jungle Ambient", - path: "voxygen.audio.soundtrack.overworld.jungle_ambient", - length: 218.0, - timing: Some(Day), - biomes: [ - (Jungle, 1), - ], - site: Some(Void), - music_state: Activity(Explore), - artist: "badbbad", - )), - Individual(( - title: "Ethereal Bonds", - path: "voxygen.audio.soundtrack.overworld.ethereal_bonds", - length: 59.0, - timing: Some(Night), - biomes: [ - (Mountain, 1), - ], - site: Some(Void), - music_state: Activity(Explore), - artist: "Aeronic", - )), - Individual(( - title: "Leap of Faith", - path: "voxygen.audio.soundtrack.overworld.leap_of_faith", - length: 269.0, - timing: Some(Night), - biomes: [ - (Ocean, 1), - (Lake, 1), - ], - site: Some(Void), - music_state: Activity(Explore), - artist: "Aeronic", - )), - Individual(( - title: "Highland of the Hawk", - path: "voxygen.audio.soundtrack.overworld.highland_of_the_hawk", - length: 283.0, - timing: Some(Day), - biomes: [ - (Desert, 1), - (Savannah, 1), - ], - site: Some(Void), - music_state: Activity(Explore), - artist: "badbbad", - )), - Individual(( - title: "Verdant Glades", - path: "voxygen.audio.soundtrack.overworld.verdant_glades", - length: 97.0, - timing: Some(Day), - biomes: [ - (Grassland, 1), - ], - site: Some(Void), - music_state: Activity(Explore), - artist: "Aeronic", - )), - Individual(( - title: "Calling Wild", - path: "voxygen.audio.soundtrack.overworld.calling_wild", - length: 160.0, - timing: Some(Night), - biomes: [ - (Grassland, 1), - (Savannah, 1), - ], - site: Some(Void), - music_state: Activity(Explore), - artist: "Ultimafounding", - )), - Individual(( - title: "Drifting Along", - path: "voxygen.audio.soundtrack.overworld.drifting_along", - length: 164.0, - timing: None, - biomes: [ - (Lake, 1), - (Ocean, 1), - ], - site: Some(Void), - music_state: Activity(Explore), - artist: "DaforLynx", - )), - Individual(( - title: "Winter Falls", - path: "voxygen.audio.soundtrack.overworld.winter_falls", - length: 215.0, - timing: Some(Day), - biomes: [ - (Snowland, 1), - (Taiga, 1), - ], - site: Some(Void), - music_state: Activity(Explore), - artist: "DaforLynx", - )), - Individual(( - title: "Short Meandering", - path: "voxygen.audio.soundtrack.overworld.short_meandering", - length: 147.0, - timing: Some(Night), - biomes: [ - (Desert, 1), - (Mountain, 1), - ], - site: Some(Void), - music_state: Activity(Explore), - artist: "Ap1evideogame", - )), - Individual(( - title: "Oceania", - path: "voxygen.audio.soundtrack.overworld.oceania", - length: 135.0, - timing: None, - biomes: [ - (Lake, 1), - (Ocean, 1), - ], - site: Some(Void), - music_state: Activity(Explore), - artist: "Eden", - )), - Individual(( - title: "A Solemn Quest", - path: "voxygen.audio.soundtrack.overworld.a_solemn_quest", - length: 206.0, - timing: Some(Night), - biomes: [ - (Forest, 2), - ], - site: Some(Void), - music_state: Activity(Explore), - artist: "Eden", - )), - Individual(( - title: "Into The Dark Forest", - path: "voxygen.audio.soundtrack.overworld.into_the_dark_forest", - length: 184.0, - timing: Some(Night), - biomes: [ - (Forest, 2), - (Jungle, 1), - ], - site: Some(Void), - music_state: Activity(Explore), - artist: "Aeronic", - )), - Individual(( - title: "Field Grazing", - path: "voxygen.audio.soundtrack.overworld.field_grazing", - length: 154.0, - timing: Some(Day), - biomes: [ - (Grassland, 1), - (Forest, 2), - ], - site: Some(Void), - music_state: Activity(Explore), - artist: "Aeronic", - )), - Individual(( - title: "Wandering Voices", - path: "voxygen.audio.soundtrack.overworld.wandering_voices", - length: 137.0, - timing: Some(Night), - biomes: [ - (Grassland, 1), - ], - site: Some(Void), - music_state: Activity(Explore), - artist: "Aeronic", - )), - Individual(( - title: "Snowtop Volume", - path: "voxygen.audio.soundtrack.overworld.snowtop_volume", - length: 89.0, - timing: Some(Day), - biomes: [ - (Snowland, 1), - (Taiga, 1), - ], - site: Some(Void), - music_state: Activity(Explore), - artist: "Aeronic", - )), - Individual(( - title: "Mineral Deposits", - path: "voxygen.audio.soundtrack.cave.mineral_deposits", - length: 148.0, - timing: None, - biomes: [], - site: Some(Cave), - music_state: Activity(Explore), - artist: "Aeronic", - )), - Individual(( - title: "Moonbeams", - path: "voxygen.audio.soundtrack.overworld.moonbeams", - length: 158.0, - timing: Some(Night), - biomes: [ - (Snowland, 1), - (Taiga, 1), - ], - site: Some(Void), - music_state: Activity(Explore), - artist: "Aeronic", - )), - Individual(( - title: "Serene Meadows", - path: "voxygen.audio.soundtrack.overworld.serene_meadows", - length: 173.0, - timing: Some(Night), - biomes: [ - (Grassland, 1), - ], - site: Some(Void), - music_state: Activity(Explore), - artist: "Aeronic", - )), - Individual(( - title: "Just The Beginning", - path: "voxygen.audio.soundtrack.overworld.just_the_beginning", - length: 188.0, - timing: Some(Day), - biomes: [ - (Grassland, 1), - ], - site: Some(Void), - music_state: Activity(Explore), - artist: "badbbad", - )), - Individual(( - title: "Campfire Stories", - path: "voxygen.audio.soundtrack.overworld.campfire_stories", - length: 100.0, - timing: Some(Night), - biomes: [ - (Forest, 2), - ], - site: Some(Void), - music_state: Activity(Explore), - artist: "badbbad", - )), - Individual(( - title: "Limits", - path: "voxygen.audio.soundtrack.overworld.limits", - length: 203.0, - timing: Some(Day), - biomes: [ - (Mountain, 1), - ], - site: Some(Void), - music_state: Activity(Explore), - artist: "badbbad", - )), - Individual(( - title: "Down The Rabbit Hole", - path: "voxygen.audio.soundtrack.dungeon.down_the_rabbit_hole", - length: 244.0, - timing: None, - biomes: [], - site: Some(Cave), - music_state: Activity(Explore), - artist: "badbbad", - )), - Individual(( - title: "Between The Fairies", - path: "voxygen.audio.soundtrack.overworld.between_the_fairies", - length: 175.0, - timing: Some(Day), - biomes: [ - (Forest, 2), - ], - site: Some(Void), - music_state: Activity(Explore), - artist: "badbbad", - )), // Combat Music @@ -513,6 +637,7 @@ title: "Barred Paths", author: "DaforLynx", timing: None, + weather: None, biomes: [], site: Some(Dungeon), segments: [ diff --git a/assets/voxygen/audio/soundtrack/cave/cavernous_hollow.ogg b/assets/voxygen/audio/soundtrack/cave/cavernous_hollow.ogg new file mode 100644 index 0000000000..4a7856a18d --- /dev/null +++ b/assets/voxygen/audio/soundtrack/cave/cavernous_hollow.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e408194685e6f67cecdc3f6c0b175613f804773e1e5454b47f75e28e00e823a +size 12159104 diff --git a/assets/voxygen/audio/soundtrack/cave/down_the_rabbit_hole.ogg b/assets/voxygen/audio/soundtrack/cave/down_the_rabbit_hole.ogg new file mode 100644 index 0000000000..370f3fd06f --- /dev/null +++ b/assets/voxygen/audio/soundtrack/cave/down_the_rabbit_hole.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e17ea379271853b4a69b47c990af738d9fb5dab6114a90a1f3eaef2397b940c +size 3828901 diff --git a/assets/voxygen/audio/soundtrack/cave/mineral_deposits.ogg b/assets/voxygen/audio/soundtrack/cave/mineral_deposits.ogg index 2b1c73318a..065c31cb9e 100644 --- a/assets/voxygen/audio/soundtrack/cave/mineral_deposits.ogg +++ b/assets/voxygen/audio/soundtrack/cave/mineral_deposits.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1805983ca8bf75cd3179228025fc79b66b142b02852dbc53fbe174aa1b0f39e1 -size 2326507 +oid sha256:8596d8d054bbdbdc553e68ba5e0d5b14d30a7d7258dbc0e4ee05f4d2d321c2e2 +size 2328607 diff --git a/assets/voxygen/audio/soundtrack/cave/saturated_hallows.ogg b/assets/voxygen/audio/soundtrack/cave/saturated_hallows.ogg index 492f8741cb..2a39fd5cbb 100644 --- a/assets/voxygen/audio/soundtrack/cave/saturated_hallows.ogg +++ b/assets/voxygen/audio/soundtrack/cave/saturated_hallows.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9dcbe130abd5fda65803bc93964abe41550a5138d80cc19d207c4408aab24bd3 -size 4537116 +oid sha256:286db0b9c41193289e1695f3a88fc4eafa242ece90eee31abcf75fae428dd19f +size 4539199 diff --git a/assets/voxygen/audio/soundtrack/combat/barred_paths/barred_paths-end.ogg b/assets/voxygen/audio/soundtrack/combat/barred_paths/barred_paths-end.ogg index c0029e10e9..e37ec3d725 100644 --- a/assets/voxygen/audio/soundtrack/combat/barred_paths/barred_paths-end.ogg +++ b/assets/voxygen/audio/soundtrack/combat/barred_paths/barred_paths-end.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e55cf8cd3299d9087379c339b461dd79f390fd41be474f59f713e4ceb480a3c9 -size 118609 +oid sha256:f5c8599fc233c297c38007171b7dd6f69aca672fa35e4b19b5302321f2322589 +size 120714 diff --git a/assets/voxygen/audio/soundtrack/combat/barred_paths/barred_paths-loop.ogg b/assets/voxygen/audio/soundtrack/combat/barred_paths/barred_paths-loop.ogg index 579e6589e9..9633b51d0d 100644 --- a/assets/voxygen/audio/soundtrack/combat/barred_paths/barred_paths-loop.ogg +++ b/assets/voxygen/audio/soundtrack/combat/barred_paths/barred_paths-loop.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d2aaf2cf3c9c23e1584197fe7e0ccb9b21cdf901ee1b1ae6198f998144558237 -size 941522 +oid sha256:1cce1fa94fa5c0ccb00e5395ece57efd4a790e5ae9fe62e5bbfca83ab50a19bf +size 943627 diff --git a/assets/voxygen/audio/soundtrack/combat/barred_paths/barred_paths-start.ogg b/assets/voxygen/audio/soundtrack/combat/barred_paths/barred_paths-start.ogg index b8bfee9bab..0660e81960 100644 --- a/assets/voxygen/audio/soundtrack/combat/barred_paths/barred_paths-start.ogg +++ b/assets/voxygen/audio/soundtrack/combat/barred_paths/barred_paths-start.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8936db6a70ba0f6732acd9a15f769d764a90a84e75b342d9bcd70109cc02f57b -size 962322 +oid sha256:fbc1d7abca1f39d8bdf5357c3b200ab690707dab922ee1cfd664e516ba26a420 +size 964398 diff --git a/assets/voxygen/audio/soundtrack/combat/reversal/reversal-end.ogg b/assets/voxygen/audio/soundtrack/combat/reversal/reversal-end.ogg index 252f3f8eaa..24d16db2da 100644 --- a/assets/voxygen/audio/soundtrack/combat/reversal/reversal-end.ogg +++ b/assets/voxygen/audio/soundtrack/combat/reversal/reversal-end.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:46b7bf8f6242ef02b459f4971368f8dbf0427ca7248b432d87c3eff1c43bf558 -size 71927 +oid sha256:87e520774165f100cdb518d02d30813d32cb0972ffdc64721864527dfbf8cf8f +size 74003 diff --git a/assets/voxygen/audio/soundtrack/combat/reversal/reversal-loop.ogg b/assets/voxygen/audio/soundtrack/combat/reversal/reversal-loop.ogg index 7f5852b5b8..cc21c059bc 100644 --- a/assets/voxygen/audio/soundtrack/combat/reversal/reversal-loop.ogg +++ b/assets/voxygen/audio/soundtrack/combat/reversal/reversal-loop.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a39dd725171f8858f701da211e6111c4da2984b0b79b34dc0fa883b707c8043c -size 1205192 +oid sha256:7c3d57aef0e7d2d3d09cad432d2842a31b50ebe4c66a6bc00cb851463f240029 +size 1207268 diff --git a/assets/voxygen/audio/soundtrack/combat/reversal/reversal-start.ogg b/assets/voxygen/audio/soundtrack/combat/reversal/reversal-start.ogg index d14ef4fb41..c29dcb2a01 100644 --- a/assets/voxygen/audio/soundtrack/combat/reversal/reversal-start.ogg +++ b/assets/voxygen/audio/soundtrack/combat/reversal/reversal-start.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4709790fc29358f5fdd77ccf4ce5d7dace58e938a4b2d182b1e1118a75fffe6b -size 1194837 +oid sha256:8895e472f2d1f6379afef7e2a220278b31c06beacdcd3d8c7bba588c4b6a6ff6 +size 1196913 diff --git a/assets/voxygen/audio/soundtrack/dungeon/cobbled_halls.ogg b/assets/voxygen/audio/soundtrack/dungeon/cobbled_halls.ogg index b0e5aeadbc..cb8ac1cda8 100644 --- a/assets/voxygen/audio/soundtrack/dungeon/cobbled_halls.ogg +++ b/assets/voxygen/audio/soundtrack/dungeon/cobbled_halls.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f1e360a461942a9c086f42e9467ca312e4a343360a17c103c7fe675f4dadc060 -size 4793659 +oid sha256:b786016225dc011e60c08e4d8b644a02440b995715e07aecaa767714c7a36fd7 +size 4795736 diff --git a/assets/voxygen/audio/soundtrack/dungeon/dank_dungeon.ogg b/assets/voxygen/audio/soundtrack/dungeon/dank_dungeon.ogg index 547117e1f1..5f9585dc8a 100644 --- a/assets/voxygen/audio/soundtrack/dungeon/dank_dungeon.ogg +++ b/assets/voxygen/audio/soundtrack/dungeon/dank_dungeon.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fe25d37fc08f7b81a1e4f10467a3e51481b331656fa6509d7755e6debe1bc4f6 -size 2262047 +oid sha256:c5c1accb53bc0c833187fc5225701787d6f63eba6530c2400bf3afb422e746e2 +size 2264137 diff --git a/assets/voxygen/audio/soundtrack/dungeon/down_the_rabbit_hole.ogg b/assets/voxygen/audio/soundtrack/dungeon/down_the_rabbit_hole.ogg deleted file mode 100644 index 1ddbd13aa0..0000000000 --- a/assets/voxygen/audio/soundtrack/dungeon/down_the_rabbit_hole.ogg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9619bcd7a26e50d4c41c47bab057048f0aa2856f953f84a1f4c0d6a95622d0d8 -size 3826799 diff --git a/assets/voxygen/audio/soundtrack/dungeon/mysty_temple.ogg b/assets/voxygen/audio/soundtrack/dungeon/mysty_temple.ogg new file mode 100644 index 0000000000..fbb3d26223 --- /dev/null +++ b/assets/voxygen/audio/soundtrack/dungeon/mysty_temple.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3c959fa2f282682360d6680a8d9d642d06747e99c3a27e42bcf8a935613c5530 +size 2242366 diff --git a/assets/voxygen/audio/soundtrack/dungeon/ruination.ogg b/assets/voxygen/audio/soundtrack/dungeon/ruination.ogg index 1aa793d36c..161d22b8a6 100644 --- a/assets/voxygen/audio/soundtrack/dungeon/ruination.ogg +++ b/assets/voxygen/audio/soundtrack/dungeon/ruination.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e4f56eab9b925f62aaf3e90bb82ba3abef4a91c5b75aa5f7a63476d4dbad1c9e -size 5314599 +oid sha256:38f9a1e55ee0d57d1f5616adaaa30b72449da757e4f9e940004a6efc6d202a1d +size 5316668 diff --git a/assets/voxygen/audio/soundtrack/dungeon/sacred_temple.ogg b/assets/voxygen/audio/soundtrack/dungeon/sacred_temple.ogg index 498aec51a8..4303b477ab 100644 --- a/assets/voxygen/audio/soundtrack/dungeon/sacred_temple.ogg +++ b/assets/voxygen/audio/soundtrack/dungeon/sacred_temple.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9c3766184b926618f38856122006fc6bbc6d9c5fa83671fb21608d56a6ee4128 -size 2454752 +oid sha256:2bf7e044fcb1fd4b5652688e942eca9d1eb50d42f95f6b4ee0af7155efe8e786 +size 2456825 diff --git a/assets/voxygen/audio/soundtrack/dungeon/vast_onslaught.ogg b/assets/voxygen/audio/soundtrack/dungeon/vast_onslaught.ogg index dfdce4b9f7..d89a608c65 100644 --- a/assets/voxygen/audio/soundtrack/dungeon/vast_onslaught.ogg +++ b/assets/voxygen/audio/soundtrack/dungeon/vast_onslaught.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:67c416fd0c35ea520e4144b490c4ff4d11108e3720f751718b83707e4278f573 -size 4116068 +oid sha256:62786604de51f415a84ccbaf465c67ae3d2b88eef82b82d18caf787cb5364caa +size 4118160 diff --git a/assets/voxygen/audio/soundtrack/overworld/a_heros_sorrow.ogg b/assets/voxygen/audio/soundtrack/overworld/a_heros_sorrow.ogg new file mode 100644 index 0000000000..ed6b10689f --- /dev/null +++ b/assets/voxygen/audio/soundtrack/overworld/a_heros_sorrow.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4f8d8664a534b8d35f205b89dc6e58f7196ecd2f0c12563de9e5ba6b28c36cc7 +size 6736145 diff --git a/assets/voxygen/audio/soundtrack/overworld/a_solemn_quest.ogg b/assets/voxygen/audio/soundtrack/overworld/a_solemn_quest.ogg index ffd8c018df..9aaa4f2dce 100644 --- a/assets/voxygen/audio/soundtrack/overworld/a_solemn_quest.ogg +++ b/assets/voxygen/audio/soundtrack/overworld/a_solemn_quest.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:41beda4f124a3837a97d21d7066f00536a37ba434761a740e161eacb70263ccc -size 3352297 +oid sha256:2a38c326e77284e3a2ecef3ecb8858b60aa57a3931d721531ac21bec3cff1dd9 +size 3354368 diff --git a/assets/voxygen/audio/soundtrack/overworld/adventurous_soul.ogg b/assets/voxygen/audio/soundtrack/overworld/adventurous_soul.ogg new file mode 100644 index 0000000000..fecae6dcd7 --- /dev/null +++ b/assets/voxygen/audio/soundtrack/overworld/adventurous_soul.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:24712d917b6f5372decec4f3384b1beb0547cedc76f66a6d9e75b9a05dce450f +size 3830475 diff --git a/assets/voxygen/audio/soundtrack/overworld/between_the_fairies.ogg b/assets/voxygen/audio/soundtrack/overworld/between_the_fairies.ogg index 55c92399f1..cdee59f84b 100644 --- a/assets/voxygen/audio/soundtrack/overworld/between_the_fairies.ogg +++ b/assets/voxygen/audio/soundtrack/overworld/between_the_fairies.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:04feda1b5aeb4d1055dfe8da6adb4f08b725bc4a0bf8d52a40c92a305b95115e -size 2786058 +oid sha256:8ce1161a48c816af1aa26fa0a8093b49f7388a96744d0f59bd9c8e9c54e1be24 +size 2788159 diff --git a/assets/voxygen/audio/soundtrack/overworld/calling_wild.ogg b/assets/voxygen/audio/soundtrack/overworld/calling_wild.ogg index ba97a10506..e54dc27fbf 100644 --- a/assets/voxygen/audio/soundtrack/overworld/calling_wild.ogg +++ b/assets/voxygen/audio/soundtrack/overworld/calling_wild.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2ca914b2feda79a80dbb3b6cbe3d7205718a3e88196cfeb2bf0519722015f851 -size 1784635 +oid sha256:bfa1bf6c87f5a9e907a2e1ecd25679dbb7032c7a8fb7a5e2b8e5a8a4bea5cb97 +size 1786732 diff --git a/assets/voxygen/audio/soundtrack/overworld/calming_hills.ogg b/assets/voxygen/audio/soundtrack/overworld/calming_hills.ogg index 5059b33175..515431b8fd 100644 --- a/assets/voxygen/audio/soundtrack/overworld/calming_hills.ogg +++ b/assets/voxygen/audio/soundtrack/overworld/calming_hills.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:326df0fbeb246ff86c3b729a6f45053ce5d6bffa0a813eacb6cc7a6714d2f2b9 -size 1518038 +oid sha256:1a485d94599f39710d0e22a64b55d2f8543a46c58be3d339579ce5964419a9c1 +size 1520136 diff --git a/assets/voxygen/audio/soundtrack/overworld/campfire_stories.ogg b/assets/voxygen/audio/soundtrack/overworld/campfire_stories.ogg index 1582c849f6..c2b1811936 100644 --- a/assets/voxygen/audio/soundtrack/overworld/campfire_stories.ogg +++ b/assets/voxygen/audio/soundtrack/overworld/campfire_stories.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:56ed12e0b86509be7a96756e514caf64d3d3f490159d58a8a34473e9e5501187 -size 1658237 +oid sha256:3651a4430f9d0e2d8e37470feab5e8f3b83a4e1d243c1bdf91128f95b2a15a94 +size 1660335 diff --git a/assets/voxygen/audio/soundtrack/overworld/drifting_along.ogg b/assets/voxygen/audio/soundtrack/overworld/drifting_along.ogg index 98dd1e451f..03cb65d916 100644 --- a/assets/voxygen/audio/soundtrack/overworld/drifting_along.ogg +++ b/assets/voxygen/audio/soundtrack/overworld/drifting_along.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:658193400b2f3527c52222f35d226ffee6b77cfbdd20e303c62be147bcfc1258 -size 2620059 +oid sha256:bd7c938712bfccc6d8a584814744f6e01434d4840de556e8eb339da2c23bcd7d +size 2622159 diff --git a/assets/voxygen/audio/soundtrack/overworld/ethereal_bonds.ogg b/assets/voxygen/audio/soundtrack/overworld/ethereal_bonds.ogg index f48c5b921c..1796d3e3cf 100644 --- a/assets/voxygen/audio/soundtrack/overworld/ethereal_bonds.ogg +++ b/assets/voxygen/audio/soundtrack/overworld/ethereal_bonds.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2622770b11dfe3e4509faa9aac6aef64079d1233937416a091c16bff2d217faa -size 962247 +oid sha256:d2e4c50dfe7bef8a7fbfc1cf8d7967cda727a747e08f3ebdae867be08f01e318 +size 964321 diff --git a/assets/voxygen/audio/soundtrack/overworld/field_grazing.ogg b/assets/voxygen/audio/soundtrack/overworld/field_grazing.ogg index 816dfb0daa..d08b8965da 100644 --- a/assets/voxygen/audio/soundtrack/overworld/field_grazing.ogg +++ b/assets/voxygen/audio/soundtrack/overworld/field_grazing.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c2cee6b2de99e8dee744869dd04b7c6542862498e2a077d1966c20feaf6e911e -size 2527869 +oid sha256:8647320fe1bbb5c8226e935e1688b310f7e743288d6a32415f11855c71228d44 +size 2529966 diff --git a/assets/voxygen/audio/soundtrack/overworld/follow_the_signs.ogg b/assets/voxygen/audio/soundtrack/overworld/follow_the_signs.ogg index edcf797331..f866c95a02 100644 --- a/assets/voxygen/audio/soundtrack/overworld/follow_the_signs.ogg +++ b/assets/voxygen/audio/soundtrack/overworld/follow_the_signs.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ee8e37d1a76e61112dede163bf7f4873fe6650b5eeb71888d8526255eb5c2036 -size 6509681 +oid sha256:e6cc1bb918323a296cdb2d754bb132b7e9a4c33efd0baaff3d317a86443642f4 +size 6511769 diff --git a/assets/voxygen/audio/soundtrack/overworld/highland_of_the_hawk.ogg b/assets/voxygen/audio/soundtrack/overworld/highland_of_the_hawk.ogg index d7ec3aeac1..30ab8c6d5d 100644 --- a/assets/voxygen/audio/soundtrack/overworld/highland_of_the_hawk.ogg +++ b/assets/voxygen/audio/soundtrack/overworld/highland_of_the_hawk.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6406c7397ce45dd6aab55d71e23a0e1295b3c60a3271d0eb60f8706743bef723 -size 4701998 +oid sha256:ba0e6566f093a05fed4a6db8cc77978aa947f0014c835a29c67308171735e7a1 +size 4704094 diff --git a/assets/voxygen/audio/soundtrack/overworld/into_the_dark_forest.ogg b/assets/voxygen/audio/soundtrack/overworld/into_the_dark_forest.ogg index a539cb08f1..f1b091bb63 100644 --- a/assets/voxygen/audio/soundtrack/overworld/into_the_dark_forest.ogg +++ b/assets/voxygen/audio/soundtrack/overworld/into_the_dark_forest.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9272d2933c2d717be44c29b7a84bc22235935878a7d186b4e146886128d1ba45 -size 2920247 +oid sha256:76a13b4adefd15d4a0ec92b4ccfea7497f71d57fb7e3d16472e15df68484c71d +size 2922327 diff --git a/assets/voxygen/audio/soundtrack/overworld/jungle_ambient.ogg b/assets/voxygen/audio/soundtrack/overworld/jungle_ambient.ogg index f9ca239eda..6cae7ffb49 100644 --- a/assets/voxygen/audio/soundtrack/overworld/jungle_ambient.ogg +++ b/assets/voxygen/audio/soundtrack/overworld/jungle_ambient.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:337d4a9bd532f44b4eaef79de3d637b900bc1eb49be6f89c1148a1f4cad322d0 -size 3564917 +oid sha256:88dadab5e5d21ba202fd7998a2564d42c163ee392cba255bd9283e075ee9de4a +size 3566997 diff --git a/assets/voxygen/audio/soundtrack/overworld/just_the_beginning.ogg b/assets/voxygen/audio/soundtrack/overworld/just_the_beginning.ogg index 1b57c4bbbd..72e6a85649 100644 --- a/assets/voxygen/audio/soundtrack/overworld/just_the_beginning.ogg +++ b/assets/voxygen/audio/soundtrack/overworld/just_the_beginning.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7e6b2637f8e0f1b5072a229cbc10d70c4cab9652831ec6dbab2a7475e610f963 -size 3046004 +oid sha256:ec0e97e0a79429c1748957719e734fdefc8c166e4c13ba2f3c0929b9295fe8f2 +size 3048104 diff --git a/assets/voxygen/audio/soundtrack/overworld/leap_of_faith.ogg b/assets/voxygen/audio/soundtrack/overworld/leap_of_faith.ogg index 386787b89d..84cb975b4d 100644 --- a/assets/voxygen/audio/soundtrack/overworld/leap_of_faith.ogg +++ b/assets/voxygen/audio/soundtrack/overworld/leap_of_faith.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a97eec76572a140f368a3a277934d8df3edbe56646fc7c684b15194291cd838f -size 4223824 +oid sha256:573861db146cf6f27c18bb795ed2c1009d511047595d9394ec739dd66d433a6b +size 4225921 diff --git a/assets/voxygen/audio/soundtrack/overworld/limits.ogg b/assets/voxygen/audio/soundtrack/overworld/limits.ogg index fe960ec3de..8a334dd89a 100644 --- a/assets/voxygen/audio/soundtrack/overworld/limits.ogg +++ b/assets/voxygen/audio/soundtrack/overworld/limits.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2e88e345affff151fd24373eaa778659506130ea1d1459448fe1f1bf94bcde3c -size 3090960 +oid sha256:c258be13e366d88c00860c2897246d939f3fa2e00c208e330e98084edbed7cbb +size 3093048 diff --git a/assets/voxygen/audio/soundtrack/overworld/moonbeams.ogg b/assets/voxygen/audio/soundtrack/overworld/moonbeams.ogg index 30b1abf6ef..24a7586542 100644 --- a/assets/voxygen/audio/soundtrack/overworld/moonbeams.ogg +++ b/assets/voxygen/audio/soundtrack/overworld/moonbeams.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f2f08cb4e86be5421080361a1003a41b6da30cac7ace665629a250f7f7281b7f -size 2535490 +oid sha256:fc793b9ac5b41616de8943cfcb670553d2e773a702b4623353c4ba192681967c +size 2537583 diff --git a/assets/voxygen/audio/soundtrack/overworld/oceania.ogg b/assets/voxygen/audio/soundtrack/overworld/oceania.ogg index 97e35db2c1..08b47c80a3 100644 --- a/assets/voxygen/audio/soundtrack/overworld/oceania.ogg +++ b/assets/voxygen/audio/soundtrack/overworld/oceania.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9893710bd1cf021b41458c85191f88d2234c182286a267c50d8a8595f479a118 -size 1991689 +oid sha256:366a8470ead351bf1fdc031fb0119bb66787993899445da083180da5eaa43792 +size 1993777 diff --git a/assets/voxygen/audio/soundtrack/overworld/raising_below_like_thunder.ogg b/assets/voxygen/audio/soundtrack/overworld/raising_below_like_thunder.ogg index 222906bdae..0861f228f8 100644 --- a/assets/voxygen/audio/soundtrack/overworld/raising_below_like_thunder.ogg +++ b/assets/voxygen/audio/soundtrack/overworld/raising_below_like_thunder.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:90b75bf1be8f0aa1d471906befb01ee891a392e1657053068dfc951472022b53 -size 1674525 +oid sha256:aa5e6c61599e09bce3957900c01a57b9132d8ebd2ecfebf9caf093102fe6979a +size 1676635 diff --git a/assets/voxygen/audio/soundtrack/overworld/serene_meadows.ogg b/assets/voxygen/audio/soundtrack/overworld/serene_meadows.ogg index 76f8ced7cb..c133edbdac 100644 --- a/assets/voxygen/audio/soundtrack/overworld/serene_meadows.ogg +++ b/assets/voxygen/audio/soundtrack/overworld/serene_meadows.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6ddf8b6eef30f7dc942f3d95057c280ea35106c738a0bcb68e3924980964f8b4 -size 2802295 +oid sha256:f63df3a7e2072dcabfaa6f6447139282ae320a19ae33c682722ad4daadbca6dc +size 2804393 diff --git a/assets/voxygen/audio/soundtrack/overworld/short_meandering.ogg b/assets/voxygen/audio/soundtrack/overworld/short_meandering.ogg index ae747c4b19..c7bf248b1f 100644 --- a/assets/voxygen/audio/soundtrack/overworld/short_meandering.ogg +++ b/assets/voxygen/audio/soundtrack/overworld/short_meandering.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3d12442ebd47391f32be9801b0f3ea1d8642eed4d29206e0a5d98e4ef6bc35ca -size 2439260 +oid sha256:82a3c4ce9efb206ebbda7beb4518e3039749e7af35aad3281f10cef3eefb0473 +size 2441366 diff --git a/assets/voxygen/audio/soundtrack/overworld/snowtop_volume.ogg b/assets/voxygen/audio/soundtrack/overworld/snowtop_volume.ogg index 64954887f1..ce698d5c18 100644 --- a/assets/voxygen/audio/soundtrack/overworld/snowtop_volume.ogg +++ b/assets/voxygen/audio/soundtrack/overworld/snowtop_volume.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e9b216f52d8b347fcb92c4b087851488a700b37a035c125026ff093e6fcb348f -size 1596249 +oid sha256:ce409b42fea0a8499b1c7ff9e94f58955e7feca24ee27fb9ef3eea36c525a2d6 +size 1598347 diff --git a/assets/voxygen/audio/soundtrack/overworld/stargazing.ogg b/assets/voxygen/audio/soundtrack/overworld/stargazing.ogg new file mode 100644 index 0000000000..86b10ee686 --- /dev/null +++ b/assets/voxygen/audio/soundtrack/overworld/stargazing.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f52a0a44107a942aac45ccbe1c0fb0cd77bba2ac558f92490da1fcf603c2d8ce +size 8893393 diff --git a/assets/voxygen/audio/soundtrack/overworld/the_heavens_weep.ogg b/assets/voxygen/audio/soundtrack/overworld/the_heavens_weep.ogg new file mode 100644 index 0000000000..ca63886244 --- /dev/null +++ b/assets/voxygen/audio/soundtrack/overworld/the_heavens_weep.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1ff80e2467f9c2ee29fca2cdc4a4c22bd5bc10e4b1914177072c5e223fc1fc8e +size 3008365 diff --git a/assets/voxygen/audio/soundtrack/overworld/travel_by_night.ogg b/assets/voxygen/audio/soundtrack/overworld/travel_by_night.ogg index d742f7aa72..c099c4bcd0 100644 --- a/assets/voxygen/audio/soundtrack/overworld/travel_by_night.ogg +++ b/assets/voxygen/audio/soundtrack/overworld/travel_by_night.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:83f7f0f0ca322eba5f36458df0096f0e30ab4b6880d69cdf48e74aec82e92a12 -size 2404292 +oid sha256:4a37540c1677de194cbce8d588b4a2a834bc9533746a69817adebe7663230c8f +size 2406380 diff --git a/assets/voxygen/audio/soundtrack/overworld/true_nature.ogg b/assets/voxygen/audio/soundtrack/overworld/true_nature.ogg index 5cf75108b1..13661c1329 100644 --- a/assets/voxygen/audio/soundtrack/overworld/true_nature.ogg +++ b/assets/voxygen/audio/soundtrack/overworld/true_nature.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8e3b87825049b0c1c4b73f4314d4a9fad6dd9a7579443bd9f2dd4faddf109e6e -size 2705044 +oid sha256:e93ad77821f978aa7dd6ea8fddf710db291f36899cd66324855c1a13124c1a10 +size 2707141 diff --git a/assets/voxygen/audio/soundtrack/overworld/verdant_glades.ogg b/assets/voxygen/audio/soundtrack/overworld/verdant_glades.ogg index 760206c256..2e5a1c13bb 100644 --- a/assets/voxygen/audio/soundtrack/overworld/verdant_glades.ogg +++ b/assets/voxygen/audio/soundtrack/overworld/verdant_glades.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:87f927e81d5ef06df173ad61df8aaa0ad230330841880d739597fc874d8e010d -size 1630292 +oid sha256:a6a284301eb2e7984a8000f34a312c4fd235b86c4ce9c8b6938caff6b003ae88 +size 1632366 diff --git a/assets/voxygen/audio/soundtrack/overworld/wandering_voices.ogg b/assets/voxygen/audio/soundtrack/overworld/wandering_voices.ogg index 77bac68c68..0f26adb127 100644 --- a/assets/voxygen/audio/soundtrack/overworld/wandering_voices.ogg +++ b/assets/voxygen/audio/soundtrack/overworld/wandering_voices.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:484ffdb477f2f6e54f7567af74c661f4902649834c1d71d37eacc32def44ea90 -size 2370278 +oid sha256:4807c6bab7f97e13e50c57c1d802f9981df8bc92354090821929dfbaadea6708 +size 2372378 diff --git a/assets/voxygen/audio/soundtrack/overworld/winter_falls.ogg b/assets/voxygen/audio/soundtrack/overworld/winter_falls.ogg index 556eff42e1..6ca09aebaa 100644 --- a/assets/voxygen/audio/soundtrack/overworld/winter_falls.ogg +++ b/assets/voxygen/audio/soundtrack/overworld/winter_falls.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:97d7796f7a1ecb2a12b54b16299064b93d6444b70aba9c6865662632f23015c8 -size 3302865 +oid sha256:5c9fd40c192d2e815d1f043f6d6315c842263e3d95da13b09b827b1b311a88c5 +size 3304962 diff --git a/assets/voxygen/audio/soundtrack/town/a_rest_under_the_sunset.ogg b/assets/voxygen/audio/soundtrack/town/a_rest_under_the_sunset.ogg index 382a317f0d..9f38d6a36c 100644 --- a/assets/voxygen/audio/soundtrack/town/a_rest_under_the_sunset.ogg +++ b/assets/voxygen/audio/soundtrack/town/a_rest_under_the_sunset.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:16636a3eab500291da2665b64cba7e319b099e8bdc892aec6aa74ecd2afd7ffd -size 1227608 +oid sha256:3fdb57b0ce28260796343a66b5b4bb66fd848dbfafec9749ae77a42515b5d05f +size 1229723 diff --git a/assets/voxygen/audio/soundtrack/town/a_tale_worth_telling.ogg b/assets/voxygen/audio/soundtrack/town/a_tale_worth_telling.ogg index ec949e569f..0ad8101476 100644 --- a/assets/voxygen/audio/soundtrack/town/a_tale_worth_telling.ogg +++ b/assets/voxygen/audio/soundtrack/town/a_tale_worth_telling.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a8edc1dcffb54ad2547482c4c923f1a31a83099a852cae61df38354fa6a7e9c3 -size 4534767 +oid sha256:db87be7a571e0d2056e26418d978bcd72482a76803a2d0c57f5cbcde67c48a43 +size 4536853 diff --git a/assets/voxygen/audio/soundtrack/town/bustle_and_bloom.ogg b/assets/voxygen/audio/soundtrack/town/bustle_and_bloom.ogg index 7fdc1db195..5f34c5dc6e 100644 --- a/assets/voxygen/audio/soundtrack/town/bustle_and_bloom.ogg +++ b/assets/voxygen/audio/soundtrack/town/bustle_and_bloom.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:67fbdaa7f4494c0c350d03cdbf25edbfaf232730d8820d77446b31f22c4ed9a1 -size 3320383 +oid sha256:eb1fb21e2e8f0b3e9c974e09a2f6b289c092c6c545985ca61c1601aae939cbdc +size 3322465 diff --git a/assets/voxygen/audio/soundtrack/town/fiesta_del_pueblo.ogg b/assets/voxygen/audio/soundtrack/town/fiesta_del_pueblo.ogg index c0fc068415..b57f961d37 100644 --- a/assets/voxygen/audio/soundtrack/town/fiesta_del_pueblo.ogg +++ b/assets/voxygen/audio/soundtrack/town/fiesta_del_pueblo.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:39fb379d9d669ad319700809c5e9e6ba465542230c0f1e119e5d4d8c7d5ce054 -size 1964550 +oid sha256:7869931bfb6c1fc657a4f1ee4476d4c365a1983e655bd96ad8d3fc785b9598bc +size 1966645 diff --git a/assets/voxygen/audio/soundtrack/town/im_home.ogg b/assets/voxygen/audio/soundtrack/town/im_home.ogg index 48530de440..f7a3836e21 100644 --- a/assets/voxygen/audio/soundtrack/town/im_home.ogg +++ b/assets/voxygen/audio/soundtrack/town/im_home.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:65f085c52ca397b6f56a8768ae9bd5a0821b6ea73d9ec20be8da2de79456bb9c -size 2028376 +oid sha256:9b31d4dca4fb1237a599852473d7c6fafd7be56e2efd55d375b818a694a8c91b +size 2030440 diff --git a/assets/voxygen/audio/soundtrack/town/life_of_a_background_mob.ogg b/assets/voxygen/audio/soundtrack/town/life_of_a_background_mob.ogg new file mode 100644 index 0000000000..d3bc8a8d80 --- /dev/null +++ b/assets/voxygen/audio/soundtrack/town/life_of_a_background_mob.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8f31a2412de4cf85f253bd8b2229fd1633ce402835a850dd16a82143153f5c5e +size 11907329 diff --git a/assets/voxygen/audio/soundtrack/town/rest_assured.ogg b/assets/voxygen/audio/soundtrack/town/rest_assured.ogg index b088fa2e75..b304ac80a8 100644 --- a/assets/voxygen/audio/soundtrack/town/rest_assured.ogg +++ b/assets/voxygen/audio/soundtrack/town/rest_assured.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3fd0917407e2d164d47fa85851db96d2ea8a5d3be8615f0fb28696a5e0ba7577 -size 3102410 +oid sha256:2df36e9d7dd2b1031650e126bbf840923c4be9393f9968d5b17fb518798daf28 +size 3104478 diff --git a/assets/voxygen/audio/soundtrack/town/starlit_pathways.ogg b/assets/voxygen/audio/soundtrack/town/starlit_pathways.ogg index 2fd6cd017e..0411697db1 100644 --- a/assets/voxygen/audio/soundtrack/town/starlit_pathways.ogg +++ b/assets/voxygen/audio/soundtrack/town/starlit_pathways.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4d41aebec414157ac0714b37dfd5f9ef9a4fd15af9d73a1d32854cd2142684e8 -size 2134594 +oid sha256:ae09ea2bb426c211d4f1986d5612799ac417970ad5bdedbacbebc45350002b4b +size 2136676 diff --git a/assets/voxygen/audio/soundtrack/town/the_quiet_after_the_battle.ogg b/assets/voxygen/audio/soundtrack/town/the_quiet_after_the_battle.ogg index f295e725dd..5440f5002d 100644 --- a/assets/voxygen/audio/soundtrack/town/the_quiet_after_the_battle.ogg +++ b/assets/voxygen/audio/soundtrack/town/the_quiet_after_the_battle.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6efa09ee27c90ebe26963b6109a7ec9bf95a313d38cfa9d7adc3fe4312489c93 -size 4169213 +oid sha256:03c3ed0057793207308a35b6de9b0be5be493c41c0b0136508e97fcef6a4213f +size 4171336 diff --git a/assets/voxygen/audio/soundtrack/town/warmth_of_the_hearth.ogg b/assets/voxygen/audio/soundtrack/town/warmth_of_the_hearth.ogg index 598a0acc61..e7f827e3c0 100644 --- a/assets/voxygen/audio/soundtrack/town/warmth_of_the_hearth.ogg +++ b/assets/voxygen/audio/soundtrack/town/warmth_of_the_hearth.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5e255133e6a6ed4fe4600840c1468e91f542bf4ae709b684ba9a8946c91865b8 -size 3071776 +oid sha256:5a92d1b6964c0f7d516dbe7cd9a287ec10277e298920f13e58754e05d080511f +size 3073853 diff --git a/assets/voxygen/audio/soundtrack/veloren_title_tune.ogg b/assets/voxygen/audio/soundtrack/veloren_title_tune.ogg index 40c449411c..ef2d456e27 100644 --- a/assets/voxygen/audio/soundtrack/veloren_title_tune.ogg +++ b/assets/voxygen/audio/soundtrack/veloren_title_tune.ogg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1b8c99a9e1079616aa764fa4ab34995e2fb7597b9bf95e25cde59fcd9f6fefb8 -size 741113 +oid sha256:64dc8c1a7625852673d9feb57c3b30fe6e8a0da93d5da9014f530111b27eba89 +size 743215 diff --git a/assets/voxygen/font/Sarabun-Regular.ttf b/assets/voxygen/font/Sarabun-Regular.ttf new file mode 100644 index 0000000000..b4d51dc427 --- /dev/null +++ b/assets/voxygen/font/Sarabun-Regular.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b8150084e25734e6f31696c57ff009f5564efa09d295848b717d9e2328c0311d +size 83080 diff --git a/assets/voxygen/font/Sarabun-license.txt b/assets/voxygen/font/Sarabun-license.txt new file mode 100644 index 0000000000..a7d3a12618 --- /dev/null +++ b/assets/voxygen/font/Sarabun-license.txt @@ -0,0 +1,93 @@ +Copyright 2018 The Sarabun Project Authors (https://github.com/cadsondemak/Sarabun) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/assets/voxygen/i18n/be_BY/hud/settings.ron b/assets/voxygen/i18n/be_BY/hud/settings.ron index d90475bfe4..857131b930 100644 --- a/assets/voxygen/i18n/be_BY/hud/settings.ron +++ b/assets/voxygen/i18n/be_BY/hud/settings.ron @@ -25,10 +25,7 @@ "hud.settings.buffs_mmap": "Статусныя эфекты каля мінімапы", "hud.settings.toggle_bar_experience": "Адлюстроўваць панэль досведу", "hud.settings.scrolling_combat_text": "Адлюстроўваць шкоду/злечванне", - "hud.settings.single_damage_number": "Шкода ад кожнага ўдару", - "hud.settings.cumulated_damage": "Сумарная шкода", "hud.settings.incoming_damage": "Шкода ад кожнага ўдара па гульцу", - "hud.settings.cumulated_incoming_damage": "Сумарная шкода па гульцу", "hud.settings.speech_bubble": "Індыкатар гаворкі", "hud.settings.speech_bubble_self": "Паказваць свае індыкатары гаворкі", "hud.settings.speech_bubble_dark_mode": "Цёмны рэжым індыкатара гаворкі", diff --git a/assets/voxygen/i18n/ca_CA/hud/settings.ron b/assets/voxygen/i18n/ca_CA/hud/settings.ron index 13411d766b..ceb0cb20c4 100644 --- a/assets/voxygen/i18n/ca_CA/hud/settings.ron +++ b/assets/voxygen/i18n/ca_CA/hud/settings.ron @@ -25,10 +25,7 @@ "hud.settings.buffs_mmap": "Buffs al Minimapa", "hud.settings.toggle_bar_experience": "Mostra Barra d'Experiència", "hud.settings.scrolling_combat_text": "Text de Combat Desplaçat", - "hud.settings.single_damage_number": "Danys en Nombres Rodons", - "hud.settings.cumulated_damage": "Dany Acumulat", "hud.settings.incoming_damage": "Dany Imminent", - "hud.settings.cumulated_incoming_damage": "Dany Imminent Acumulat", "hud.settings.speech_bubble": "Bafarades", "hud.settings.speech_bubble_self": "Mostrar les Bafarades pròpies", "hud.settings.speech_bubble_dark_mode": "Bafarades Mode Fosc", diff --git a/assets/voxygen/i18n/cz_CZ/hud/settings.ron b/assets/voxygen/i18n/cz_CZ/hud/settings.ron index b0eac8f6f7..a76646c6ae 100644 --- a/assets/voxygen/i18n/cz_CZ/hud/settings.ron +++ b/assets/voxygen/i18n/cz_CZ/hud/settings.ron @@ -25,10 +25,7 @@ "hud.settings.buffs_mmap": "Buffy u Minimapy", "hud.settings.toggle_bar_experience": "Povolit Zkušenostní Bar", "hud.settings.scrolling_combat_text": "Létajíci Text v boji", - "hud.settings.single_damage_number": "Jednotná čísla Poškození", - "hud.settings.cumulated_damage": "Seskupené Poškození", "hud.settings.incoming_damage": "Příchozí Poškození", - "hud.settings.cumulated_incoming_damage": "Seskupené Příchozí Poškození", "hud.settings.speech_bubble": "Povídací Bublina", "hud.settings.speech_bubble_dark_mode": "Tmavá Povídací Bublina", "hud.settings.speech_bubble_icon": "Ikona Povídací Bubliny", diff --git a/assets/voxygen/i18n/de_DE/hud/misc.ron b/assets/voxygen/i18n/de_DE/hud/misc.ron index 44edc465d8..0004ed31b5 100644 --- a/assets/voxygen/i18n/de_DE/hud/misc.ron +++ b/assets/voxygen/i18n/de_DE/hud/misc.ron @@ -9,7 +9,9 @@ "hud.you_died": "Du bist gestorben", "hud.waypoint_saved": "Wegpunkt gespeichert", "hud.sp_arrow_txt": "SP", - "hud.inventory_full": "Inventar voll", + "hud.inventory_full": "Inventar voll", + "hud.someone_else": "jemand anderem", + "hud.another_group": "einer anderen Gruppe", "hud.press_key_to_show_keybindings_fmt": "[{key}] Kurzwahltasten", "hud.press_key_to_toggle_lantern_fmt": "[{key}] Laterne", diff --git a/assets/voxygen/i18n/de_DE/hud/settings.ron b/assets/voxygen/i18n/de_DE/hud/settings.ron index dfc7a1af14..f1e6103f48 100644 --- a/assets/voxygen/i18n/de_DE/hud/settings.ron +++ b/assets/voxygen/i18n/de_DE/hud/settings.ron @@ -25,10 +25,7 @@ "hud.settings.buffs_mmap": "Effekte an der Minimap", "hud.settings.toggle_bar_experience": "Erfahrungsleiste umschalten", "hud.settings.scrolling_combat_text": "Fließtext für Kampfhandlungen", - "hud.settings.single_damage_number": "Schaden einzeln anzeigen", - "hud.settings.cumulated_damage": "Gesamtschaden anzeigen", "hud.settings.incoming_damage": "Erlittener Schaden", - "hud.settings.cumulated_incoming_damage": "Gesamter erlittener Schaden", "hud.settings.speech_bubble": "Sprechblase", "hud.settings.speech_bubble_dark_mode": "Sprechblase: Nachtmodus", "hud.settings.speech_bubble_icon": "Sprechblasen-Icon", diff --git a/assets/voxygen/i18n/en/common.ron b/assets/voxygen/i18n/en/common.ron index 2d001e0875..7ebd14770e 100644 --- a/assets/voxygen/i18n/en/common.ron +++ b/assets/voxygen/i18n/en/common.ron @@ -104,7 +104,7 @@ Is the client up to date?"#, "common.stats.poise": "Poise", "common.stats.range": "Range", "common.stats.energy_efficiency": "Energy Efficiency", - "common.stats.buff_strength": "Buff Strength", + "common.stats.buff_strength": "Buff/Debuff Strength", "common.stats.crit_chance": "Crit Chance", "common.stats.crit_mult": "Crit Mult", "common.stats.armor": "Armor", diff --git a/assets/voxygen/i18n/en/hud/ability.ron b/assets/voxygen/i18n/en/hud/ability.ron new file mode 100644 index 0000000000..e9c64c1039 --- /dev/null +++ b/assets/voxygen/i18n/en/hud/ability.ron @@ -0,0 +1,35 @@ +/// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Localization for "global" English +( + string_map: { + // Debug stick + "common.abilities.debug.possess.name": "Possessing Arrow", + "common.abilities.debug.possess.desc": "Shoots a poisonous arrow. Lets you control your target.", + // Sword + "common.abilities.sword.spin.name": "Whirlwind", + "common.abilities.sword.spin.desc": "Move forward while spinning with your sword.", + // Axe + "common.abilities.axe.leap.name": "Axe Jump", + "common.abilities.axe.leap.desc": "A jump with the slashing leap to position of cursor.", + // Hammer + "common.abilities.hammer.leap.name": "Smash of Doom", + "common.abilities.hammer.leap.desc": "An AOE attack with knockback. Leaps to position of cursor.", + // Bow + "common.abilities.bow.shotgun.name": "Burst", + "common.abilities.bow.shotgun.desc": "Launches a burst of arrows", + // Staff + "common.abilities.staff.fireshockwave.name": "Ring of Fire", + "common.abilities.staff.fireshockwave.desc": "Ignites the ground with fiery shockwave.", + // Sceptre + "common.abilities.sceptre.wardingaura.name": "Warding Aura", + "common.abilities.sceptre.wardingaura.desc": "Wards your allies against enemy attacks.", + // Unknown + "common.abilities.unknown.name": "Ability has no title", + "common.abilities.unknown.desc": "Ability has no description", + }, + + + vector_map: { + } +) diff --git a/assets/voxygen/i18n/en/hud/misc.ron b/assets/voxygen/i18n/en/hud/misc.ron index 1d54252a6a..96db110eb4 100644 --- a/assets/voxygen/i18n/en/hud/misc.ron +++ b/assets/voxygen/i18n/en/hud/misc.ron @@ -10,6 +10,9 @@ "hud.waypoint_saved": "Waypoint Saved", "hud.sp_arrow_txt": "SP", "hud.inventory_full": "Inventory Full", + "hud.someone_else": "someone else", + "hud.another_group": "another group", + "hud.owned_by_for_secs": "Owned by {name} for {secs} secs", "hud.press_key_to_show_keybindings_fmt": "[{key}] Keybindings", "hud.press_key_to_toggle_lantern_fmt": "[{key}] Lantern", diff --git a/assets/voxygen/i18n/en/hud/settings.ron b/assets/voxygen/i18n/en/hud/settings.ron index fc1369da8f..93d1656faa 100644 --- a/assets/voxygen/i18n/en/hud/settings.ron +++ b/assets/voxygen/i18n/en/hud/settings.ron @@ -25,16 +25,18 @@ "hud.settings.buffs_mmap": "Buffs at Minimap", "hud.settings.toggle_bar_experience": "Toggle Experience Bar", "hud.settings.scrolling_combat_text": "Scrolling Combat Text", - "hud.settings.single_damage_number": "Single Damage Numbers", - "hud.settings.cumulated_damage": "Cumulated Damage", + "hud.settings.damage_accumulation_duration": "Damage Accumulation Duration", "hud.settings.incoming_damage": "Incoming Damage", - "hud.settings.cumulated_incoming_damage": "Cumulated Incoming Damage", + "hud.settings.incoming_damage_accumulation_duration": "Incoming Damage Accumulation Duration", + "hud.settings.round_damage": "Round Damage", "hud.settings.speech_bubble": "Speech Bubble", "hud.settings.speech_bubble_self": "Show Own Speech Bubbles", "hud.settings.speech_bubble_dark_mode": "Speech Bubble Dark Mode", "hud.settings.speech_bubble_icon": "Speech Bubble Icon", "hud.settings.energybar_numbers": "Energybar Numbers", "hud.settings.always_show_bars": "Always show Energybars", + "hud.settings.experience_numbers": "Experience Numbers", + "hud.settings.accumulate_experience": "Accumulate Experience Numbers", "hud.settings.values": "Values", "hud.settings.percentages": "Percentages", "hud.settings.chat": "Chat", @@ -56,6 +58,7 @@ "hud.settings.player_physics_behavior": "Player physics (experimental)", "hud.settings.stop_auto_walk_on_input": "Stop auto walk on movement", "hud.settings.auto_camera": "Auto camera", + "hud.settings.bow_zoom": "Zoom in when charging bow", "hud.settings.reset_gameplay": "Reset to Defaults", "hud.settings.view_distance": "View Distance", @@ -103,6 +106,7 @@ "hud.settings.shadow_rendering_mode.cheap": "Cheap", "hud.settings.shadow_rendering_mode.map": "Map", "hud.settings.shadow_rendering_mode.map.resolution": "Resolution", + "hud.settings.rain_occlusion.resolution": "Rain Occlusion Resolution", "hud.settings.lod_detail": "LoD Detail", "hud.settings.save_window_size": "Save window size", "hud.settings.reset_graphics": "Reset to Defaults", @@ -113,6 +117,7 @@ "hud.settings.inactive_master_volume_perc": "Inactive Window Volume", "hud.settings.music_volume": "Music Volume", "hud.settings.sound_effect_volume": "Sound Effects Volume", + "hud.settings.ambience_volume": "Ambience Volume", "hud.settings.audio_device": "Audio Device", "hud.settings.reset_sound": "Reset to Defaults", diff --git a/assets/voxygen/i18n/es_ES/hud/settings.ron b/assets/voxygen/i18n/es_ES/hud/settings.ron index d238825ac8..b765788888 100644 --- a/assets/voxygen/i18n/es_ES/hud/settings.ron +++ b/assets/voxygen/i18n/es_ES/hud/settings.ron @@ -25,10 +25,7 @@ "hud.settings.buffs_mmap": "Estados en el Minimapa", "hud.settings.toggle_bar_experience": "Alternar Barra de Experiencia", "hud.settings.scrolling_combat_text": "Texto de Combate Deslizante", - "hud.settings.single_damage_number": "Números de Daño Único", - "hud.settings.cumulated_damage": "Daño Acumulado", "hud.settings.incoming_damage": "Daño Entrante", - "hud.settings.cumulated_incoming_damage": "Daño Entrante Acumulado", "hud.settings.speech_bubble": "Burbuja de Diálogo", "hud.settings.speech_bubble_self": "Mostrar Diálogos propios en Burbuja", "hud.settings.speech_bubble_dark_mode": "Modo Oscuro de Burbuja de Diálogo", diff --git a/assets/voxygen/i18n/es_LA/hud/settings.ron b/assets/voxygen/i18n/es_LA/hud/settings.ron index 1d75526b0d..53d59ee9cc 100644 --- a/assets/voxygen/i18n/es_LA/hud/settings.ron +++ b/assets/voxygen/i18n/es_LA/hud/settings.ron @@ -25,10 +25,7 @@ "hud.settings.buffs_mmap": "Buffs en el Minimapa", "hud.settings.toggle_bar_experience": "Alternar Barra de Experiencia", "hud.settings.scrolling_combat_text": "Texto de Combate con Desplazamiento", - "hud.settings.single_damage_number": "Números de Daño Singular", - "hud.settings.cumulated_damage": "Daño Acumulado", "hud.settings.incoming_damage": "Daño Recibido", - "hud.settings.cumulated_incoming_damage": "Daño Recibido Acumulado", "hud.settings.speech_bubble": "Burbuja de Diálogo", "hud.settings.speech_bubble_self": "Mostrar Diálogos propios en Burbuja", "hud.settings.speech_bubble_dark_mode": "Burbuja de Diálogo en Modo Oscuro", diff --git a/assets/voxygen/i18n/eu/hud/settings.ron b/assets/voxygen/i18n/eu/hud/settings.ron index f027ec89ef..f879930a3c 100644 --- a/assets/voxygen/i18n/eu/hud/settings.ron +++ b/assets/voxygen/i18n/eu/hud/settings.ron @@ -18,10 +18,7 @@ "hud.settings.opacity": "Opakotasuna", "hud.settings.toggle_shortcuts": "Aldatu laster teklak", "hud.settings.toggle_bar_experience": "Erakutsi/ezkutatu esperientzia barra", - "hud.settings.single_damage_number": "Egindako kaltea banaka erakutsi", - "hud.settings.cumulated_damage": "Egindako kaltea metatuta erakutsi", "hud.settings.incoming_damage": "Jasotako kaltea banaka erakutsi", - "hud.settings.cumulated_incoming_damage": "Jasotako kalte metatua erakutsi", "hud.settings.energybar_numbers": "Zenbakiak energia barran", "hud.settings.always_show_bars": "Erakutsi beti energia barra", "hud.settings.values": "Balioak", diff --git a/assets/voxygen/i18n/fr_FR/hud/settings.ron b/assets/voxygen/i18n/fr_FR/hud/settings.ron index 4e9b4da8ca..7e5088dc0d 100644 --- a/assets/voxygen/i18n/fr_FR/hud/settings.ron +++ b/assets/voxygen/i18n/fr_FR/hud/settings.ron @@ -25,10 +25,7 @@ "hud.settings.buffs_mmap": "Effets sur la minimap", "hud.settings.toggle_bar_experience": "Activer la barre d'expérience", "hud.settings.scrolling_combat_text": "Dégats de combat", - "hud.settings.single_damage_number": "Dégats infligés", - "hud.settings.cumulated_damage": "Dégat infligés cumulés", "hud.settings.incoming_damage": "Dégats reçus", - "hud.settings.cumulated_incoming_damage": "Dégats reçus cumulés", "hud.settings.speech_bubble": "Bulle de dialogue", "hud.settings.speech_bubble_self": "Montrer ses propres bulles de dialogue", "hud.settings.speech_bubble_dark_mode": "Bulle de dialogue Mode Sombre", diff --git a/assets/voxygen/i18n/hu_HU/hud/settings.ron b/assets/voxygen/i18n/hu_HU/hud/settings.ron index bde7bc0ecc..493ec718fa 100644 --- a/assets/voxygen/i18n/hu_HU/hud/settings.ron +++ b/assets/voxygen/i18n/hu_HU/hud/settings.ron @@ -24,10 +24,7 @@ "hud.settings.buffs_mmap": "Hatások a minitérképnél", "hud.settings.toggle_bar_experience": "Tapasztalatsáv megjelenítése/elrejtése", "hud.settings.scrolling_combat_text": "Harci szöveg görgetése", - "hud.settings.single_damage_number": "Minden egyes sebzés", - "hud.settings.cumulated_damage": "Összes sebzés", "hud.settings.incoming_damage": "Bejövő sebzés", - "hud.settings.cumulated_incoming_damage": "Összes bejövő sebzés", "hud.settings.speech_bubble": "Szövegbuborék", "hud.settings.speech_bubble_dark_mode": "Szövegbuborék sötét mód", "hud.settings.speech_bubble_icon": "Szövegbuborék ikon", diff --git a/assets/voxygen/i18n/it_IT/hud/settings.ron b/assets/voxygen/i18n/it_IT/hud/settings.ron index b5373f396f..5df8c96a78 100644 --- a/assets/voxygen/i18n/it_IT/hud/settings.ron +++ b/assets/voxygen/i18n/it_IT/hud/settings.ron @@ -25,10 +25,7 @@ "hud.settings.buffs_mmap": "Buff alla Minimappa", "hud.settings.toggle_bar_experience": "Attiva/Disattiva Barra dell'Esperienza", "hud.settings.scrolling_combat_text": "Testo del Combattimento a Scorrimento", - "hud.settings.single_damage_number": "Numero Danni Singoli", - "hud.settings.cumulated_damage": "Danno Accumulato", "hud.settings.incoming_damage": "Danno in Entrata", - "hud.settings.cumulated_incoming_damage": "Danno in Entrata Accumulato", "hud.settings.speech_bubble": "Fumetto", "hud.settings.speech_bubble_self": "Mostra i Propri Fumetti", "hud.settings.speech_bubble_dark_mode": "Fumetto Modalità Scura", diff --git a/assets/voxygen/i18n/ja_JP/hud/settings.ron b/assets/voxygen/i18n/ja_JP/hud/settings.ron index 10d7ee3d21..fbd36a695f 100644 --- a/assets/voxygen/i18n/ja_JP/hud/settings.ron +++ b/assets/voxygen/i18n/ja_JP/hud/settings.ron @@ -22,10 +22,7 @@ "hud.settings.buffs_mmap": "Buffs at Minimap", "hud.settings.toggle_bar_experience": "経験値バーの切り替え", "hud.settings.scrolling_combat_text": "戦闘メッセージのスクロール", - "hud.settings.single_damage_number": "Single Damage Numbers", - "hud.settings.cumulated_damage": "Cumulated Damage", "hud.settings.incoming_damage": "Incoming Damage", - "hud.settings.cumulated_incoming_damage": "Cumulated Incoming Damage", "hud.settings.speech_bubble": "吹き出し", "hud.settings.speech_bubble_dark_mode": "ダークモード吹き出し", "hud.settings.speech_bubble_icon": "アイコン吹き出し", diff --git a/assets/voxygen/i18n/nl_NL/hud/settings.ron b/assets/voxygen/i18n/nl_NL/hud/settings.ron index 41aba2277e..52c6e16761 100644 --- a/assets/voxygen/i18n/nl_NL/hud/settings.ron +++ b/assets/voxygen/i18n/nl_NL/hud/settings.ron @@ -20,10 +20,7 @@ "hud.settings.toggle_shortcuts": "Toon Sneltoetsen", "hud.settings.toggle_bar_experience": "Toon Experience Balk", "hud.settings.scrolling_combat_text": "Pop-up Gevechtstext", - "hud.settings.single_damage_number": "Aparte Schade Getallen", - "hud.settings.cumulated_damage": "Cumulatieve Schade Getallen", "hud.settings.incoming_damage": "Inkomende Schade Getallen", - "hud.settings.cumulated_incoming_damage": "Cumulatieve Inkomende Schade Getallen", "hud.settings.speech_bubble": "Spraakbubbel", "hud.settings.speech_bubble_dark_mode": "Donkere Modus", "hud.settings.speech_bubble_icon": "Spraakbubbel Icoon", diff --git a/assets/voxygen/i18n/no_NB/hud/settings.ron b/assets/voxygen/i18n/no_NB/hud/settings.ron index b57975190c..3de4642315 100644 --- a/assets/voxygen/i18n/no_NB/hud/settings.ron +++ b/assets/voxygen/i18n/no_NB/hud/settings.ron @@ -21,10 +21,7 @@ "hud.settings.buffs_mmap": "Ikoner på Minimap", "hud.settings.toggle_bar_experience": "Veksle erfaringsbar", "hud.settings.scrolling_combat_text": "Rullende kamptekst", - "hud.settings.single_damage_number": "Enkelt skadetall", - "hud.settings.cumulated_damage": "Kumulert skade", "hud.settings.incoming_damage": "Innkommende skade", - "hud.settings.cumulated_incoming_damage": "Kumulert innkommende skade", "hud.settings.speech_bubble": "Snakkeboble", "hud.settings.speech_bubble_dark_mode": "Mørk modus for snakkeboble", "hud.settings.speech_bubble_icon": "Snakkeboble ikon", diff --git a/assets/voxygen/i18n/pl_PL/_manifest.ron b/assets/voxygen/i18n/pl_PL/_manifest.ron index 01c06b652f..c45b621503 100644 --- a/assets/voxygen/i18n/pl_PL/_manifest.ron +++ b/assets/voxygen/i18n/pl_PL/_manifest.ron @@ -1,4 +1,6 @@ -/// Localization for Polish / Tłumaczenia dla języka polskiego +/// Localization for Polish + +/// Tłumaczenia dla języka polskiego ( metadata: ( language_name: "Polish", diff --git a/assets/voxygen/i18n/pl_PL/buff.ron b/assets/voxygen/i18n/pl_PL/buff.ron index 283575691e..7aa52b2bf2 100644 --- a/assets/voxygen/i18n/pl_PL/buff.ron +++ b/assets/voxygen/i18n/pl_PL/buff.ron @@ -1,4 +1,6 @@ /// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Lokalizacja na Polskie tłumaczenie ( string_map: { // Buffs @@ -12,11 +14,15 @@ "buff.title.saturation": "Najedzenie", "buff.desc.saturation": "Odzyskaj zdrowie jedząc żywność.", "buff.title.campfire_heal": "Odpoczynek przy ognisku", - "buff.desc.campfire_heal": "Odpoczywanie przy ognisku odzyskuje {rate}% zdrowia na sekundę.", + "buff.desc.campfire_heal": "Odpoczywanie przy ognisku odnawia {rate}% zdrowia na sekundę.", "buff.title.invulnerability": "Nietykalność", "buff.desc.invulnerability": "Nie można Cię zranić.", "buff.title.protectingward": "Totem ochronny", "buff.desc.protectingward": "Ochrona, poniekąd, przed atakami.", + "buff.title.frenzied": "Oszalały", + "buff.desc.frenzied": "Jesteś wypełniony nienaturalną prędkością i ignorujesz pomniejsze obrażenia.", + "buff.title.hastened": "Szybkość", + "buff.desc.hastened": "Twoje ruchy i ataki są szybsze.", // Debuffs "buff.title.bleed": "Krwawienie", "buff.desc.bleed": "Zadaje regularne obrażenia.", @@ -24,6 +30,14 @@ "buff.desc.cursed": "Jesteś przeklęty.", "buff.title.burn": "Płoniesz", "buff.desc.burn": "Palisz się żywcem", + "buff.title.crippled": "Okaleczony", + "buff.desc.crippled": "Ruszasz się jak kaleka, gdyż twoje nogi są bardzo poranione.", + "buff.title.frozen": "Zmrożony", + "buff.desc.frozen": "Twoje ruchy i ataki są spowolnione.", + "buff.title.wet": "Mokry", + "buff.desc.wet": "Ciężko Ci się zatrzymać? W końcu się ślizgasz!", + "buff.title.ensnared": "Spętany", + "buff.desc.ensnared": "Pnącza oplotły twoje nogi, utrudniając Ci ruch.", // Buffs stats "buff.stat.health": "Odnawia {str_total} Zdrowia", "buff.stat.increase_max_energy": "Podnosi Maksymalną Wytrzymałość o {strength}", @@ -34,6 +48,7 @@ "buff.text.for_seconds": "na {dur_secs} sekund", }, + vector_map: { } ) diff --git a/assets/voxygen/i18n/pl_PL/char_selection.ron b/assets/voxygen/i18n/pl_PL/char_selection.ron index 3950c77217..4b7b51c6bf 100644 --- a/assets/voxygen/i18n/pl_PL/char_selection.ron +++ b/assets/voxygen/i18n/pl_PL/char_selection.ron @@ -1,4 +1,6 @@ /// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Lokalizacja na Polskie tłumaczenie ( string_map: { "char_selection.loading_characters": "Ładowanie postaci...", diff --git a/assets/voxygen/i18n/pl_PL/common.ron b/assets/voxygen/i18n/pl_PL/common.ron index 08a30d983a..d5a10d4c41 100644 --- a/assets/voxygen/i18n/pl_PL/common.ron +++ b/assets/voxygen/i18n/pl_PL/common.ron @@ -1,8 +1,10 @@ /// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Lokalizacja na Polskie tłumaczenie ( string_map: { // Texts used in multiple locations with the same formatting - "common.username": "nazwa konta", + "common.username": "Nazwa konta", "common.singleplayer": "Tryb jednoosobowy", "common.multiplayer": "Tryb wieloosobowy", "common.servers": "Serwery", @@ -14,6 +16,7 @@ "common.controls": "Sterowanie", "common.video": "Grafika", "common.sound": "Dźwięk", + "common.chat": "Czat", "common.resume": "Kontynuuj", "common.characters": "Postacie", "common.close": "Zamknij", @@ -34,6 +37,8 @@ "common.automatic": "Automatyczne", "common.random": "Losowo", "common.empty": "Pusty", + "common.confirm": "Potwierdź", + "common.delete_server": "Usuń serwer", // Settings Window title "common.interface_settings": "Ustawienia interfejsu", @@ -42,12 +47,14 @@ "common.video_settings": "Ustawienia grafiki", "common.sound_settings": "Ustawienia dźwięku", "common.language_settings": "Ustawienia języka", + "common.chat_settings": "Ustawienia czatu", // Message when connection to the server is lost - "common.connection_lost": r#"Stracono połączenia! + "common.connection_lost": r#"Stracono połączenie! Serwer jest restartowany? Czy masz aktualną wersję gry?"#, + "common.species.orc": "Ork", "common.species.human": "Człowiek", "common.species.dwarf": "Krasnolud", @@ -56,6 +63,9 @@ Czy masz aktualną wersję gry?"#, "common.species.danari": "Danari", "common.weapons.axe": "Siekiera", + "common.weapons.dagger": "Sztylet", + "common.weapons.greatsword": "Wielki miecz", + "common.weapons.shortswords": "Krótki miecz", "common.weapons.sword": "Miecz", "common.weapons.staff": "Kostur maga", "common.weapons.bow": "Łuk", @@ -73,6 +83,7 @@ Czy masz aktualną wersję gry?"#, "common.tool.debug": "Debug", "common.tool.farming": "Narzędzie do uprawy", "common.tool.pick": "Kilof", + "common.tool.mining": "Wykopywanie", "common.kind.modular_component": "Modularny komponent", "common.kind.glider": "Lotnia", "common.kind.consumable": "Jadalne", @@ -89,12 +100,24 @@ Czy masz aktualną wersję gry?"#, "common.stats.combat_rating": "CR", "common.stats.power": "Moc", "common.stats.speed": "Prędkość", - "common.stats.poise": "Odp. na ogłu.", - "common.stats.crit_chance": "Krytyczne%", - "common.stats.crit_mult": "Krytytyczne*", + "common.stats.poise": "Odporność", + "common.stats.crit_chance": "% na cios kryt.", + "common.stats.crit_mult": "Mnożnik ciosu kryt.", "common.stats.armor": "Obrona", - "common.stats.poise_res": "Odp. na ogłu.", + "common.stats.poise_res": "Odp. na ogłuszenie", + "common.stats.energy_max": "Maksymalna energia", + "common.stats.energy_reward": "Bonus energii", + "common.stats.crit_power": "Moc ciosu kryt.", + "common.stats.stealth": "Skradanie", "common.stats.slots": "Sloty", + + "common.material.metal": "Metal", + "common.material.wood": "Drewno", + "common.material.stone": "Kamień", + "common.material.cloth": "Płótno", + "common.material.hide": "Skóra", + + "common.sprite.chest": "Skrzynia", }, diff --git a/assets/voxygen/i18n/pl_PL/esc_menu.ron b/assets/voxygen/i18n/pl_PL/esc_menu.ron index 524ac23292..ce8ee707e0 100644 --- a/assets/voxygen/i18n/pl_PL/esc_menu.ron +++ b/assets/voxygen/i18n/pl_PL/esc_menu.ron @@ -1,4 +1,6 @@ /// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Lokalizacja na Polskie tłumaczenie ( string_map: { "esc_menu.logout": "Wyloguj", diff --git a/assets/voxygen/i18n/pl_PL/gameinput.ron b/assets/voxygen/i18n/pl_PL/gameinput.ron index a492049fb1..7f2ad228f5 100644 --- a/assets/voxygen/i18n/pl_PL/gameinput.ron +++ b/assets/voxygen/i18n/pl_PL/gameinput.ron @@ -1,4 +1,6 @@ /// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Lokalizacja na Polskie tłumaczenie ( string_map: { "gameinput.primary": "Prosty atak", @@ -19,6 +21,8 @@ "gameinput.help": "Pokaż/schowaj okno pomocy", "gameinput.toggleinterface": "Pokaż/schowaj interfejs", "gameinput.toggledebug": "Pokaż/schowaj FPS i debugowanie", + "gameinput.toggle_egui_debug": "Włącz debugowanie EGUI", + "gameinput.togglechat": "Włącz czat", "gameinput.screenshot": "Zrób zrzut ekranu", "gameinput.toggleingameui": "Pokaż/schowaj imiona i nazwy", "gameinput.fullscreen": "Przełącz pełny ekran", @@ -63,8 +67,11 @@ "gameinput.swimup": "Wynurz", "gameinput.mapzoomin": "Przybliż mapę", "gameinput.mapzoomout": "Oddal mapę", + "gameinput.greet": "Pozdrów", + "gameinput.map.locationmarkerbutton": "Ustaw punkt orientacyjny na mapie" }, + vector_map: { } ) diff --git a/assets/voxygen/i18n/pl_PL/hud/bag.ron b/assets/voxygen/i18n/pl_PL/hud/bag.ron index 1ef6272b84..f822cdeaac 100644 --- a/assets/voxygen/i18n/pl_PL/hud/bag.ron +++ b/assets/voxygen/i18n/pl_PL/hud/bag.ron @@ -1,4 +1,6 @@ /// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Lokalizacja na Polskie tłumaczenie ( string_map: { // Inventory @@ -22,15 +24,18 @@ "hud.bag.feet": "Stopy", "hud.bag.mainhand": "Ręka główna", "hud.bag.offhand": "Ręka poboczna", + "hud.bag.inactive_mainhand": "Nieaktywna ręka główna", + "hud.bag.inactive_offhand": "Nieaktywna ręka poboczna", + "hud.bag.swap_equipped_weapons_title": "Zamień założone bronie", + "hud.bag.swap_equipped_weapons_desc": "Wciśnij {key}", "hud.bag.bag": "Torba", "hud.bag.health": "Zdrowie", "hud.bag.energy": "Energia", - "hud.bag.combat_rating": "Combat Rating", + "hud.bag.combat_rating": "Combat Rating (CR)", "hud.bag.protection": "Ochrona", + "hud.bag.stun_res": "Odporność na ogłuszenie", "hud.bag.combat_rating_desc": "Liczone na postawie Twojego\nekwipunku i zdrowia.", "hud.bag.protection_desc": "Redukcja obrażeń dzięki pancerzowi", - - "hud.bag.stun_res": "Odporność na ogłuszenie", "hud.bag.stun_res_desc": "Odporność na ogłuszenie spowodowane przyjmowaniem wielu ciosów.\nRegeneruje się jak energia.", "hud.bag.sort_by_name": "Sortuj nazwami", "hud.bag.sort_by_quality": "Sortuj jakościami", diff --git a/assets/voxygen/i18n/pl_PL/hud/char_window.ron b/assets/voxygen/i18n/pl_PL/hud/char_window.ron index a5e2b44dd5..068e74811b 100644 --- a/assets/voxygen/i18n/pl_PL/hud/char_window.ron +++ b/assets/voxygen/i18n/pl_PL/hud/char_window.ron @@ -1,4 +1,6 @@ /// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Lokalizacja na Polskie tłumaczenie ( string_map: { "character_window.character_name": "Imię postaci", diff --git a/assets/voxygen/i18n/pl_PL/hud/chat.ron b/assets/voxygen/i18n/pl_PL/hud/chat.ron index 066933145d..228a61359a 100644 --- a/assets/voxygen/i18n/pl_PL/hud/chat.ron +++ b/assets/voxygen/i18n/pl_PL/hud/chat.ron @@ -1,6 +1,18 @@ /// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Lokalizacja na Polskie tłumaczenie ( string_map: { + "hud.chat.all": "Wszystko", + "hud.chat.chat_tab_hover_tooltip": "Kliknij prawym aby otworzyć ustawienia", + + // Debuff outcomes + "hud.outcome.burning": "zmarł od podpalenia", + "hud.outcome.curse": "zmarł od klątwy", + "hud.outcome.bleeding": "zmarł przez wykrwawienie", + "hud.outcome.crippled": "zmarł od złamań", + "hud.outcome.frozen": "zmarł z zimna", + // Chat outputs "hud.chat.online_msg": "[{name}] jest online", "hud.chat.offline_msg": "[{name}] jest offline", @@ -10,15 +22,15 @@ "hud.chat.fall_kill_msg": "[{name}] spada z wysokości", "hud.chat.suicide_msg": "[{name}] umiera od własnych ran", - "hud.chat.pvp_buff_kill_msg": "[{victim}] umiera od {buff} - nałożone przez [{attacker}]", + "hud.chat.died_of_pvp_buff_msg": "[{victim}] {died_of_buff} nałożene przez [{attacker}]", "hud.chat.pvp_melee_kill_msg": "[{attacker}] zwycięża nad [{victim}]", "hud.chat.pvp_ranged_kill_msg": "[{attacker}] ustrzela [{victim}]", "hud.chat.pvp_explosion_kill_msg": "[{attacker}] wysadza [{victim}]", "hud.chat.pvp_energy_kill_msg": "[{attacker}] ubija [{victim}] magią", - "hud.chat.nonexistent_buff_kill_msg": "[{victim}] umiera od {buff}", + "hud.chat.died_of_buff_nonexistent_msg": "[{victim}] {died_of_buff}", - "hud.chat.npc_buff_kill_msg": "[{victim}] umiera od {buff} - nałożone przez {attacker}", + "hud.chat.died_of_npc_buff_msg": "[{victim}] {died_of_buff} nałożone przez {attacker}", "hud.chat.npc_melee_kill_msg": "{attacker} ubija [{victim}]", "hud.chat.npc_ranged_kill_msg": "{attacker} ustrzela [{victim}]", "hud.chat.npc_explosion_kill_msg": "{attacker} wysadza [{victim}]", diff --git a/assets/voxygen/i18n/pl_PL/hud/crafting.ron b/assets/voxygen/i18n/pl_PL/hud/crafting.ron index dc588ea204..2aa350d614 100644 --- a/assets/voxygen/i18n/pl_PL/hud/crafting.ron +++ b/assets/voxygen/i18n/pl_PL/hud/crafting.ron @@ -1,4 +1,6 @@ /// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Lokalizacja na Polskie tłumaczenie ( string_map: { "hud.crafting": "Tworzenie", @@ -7,22 +9,31 @@ "hud.crafting.craft": "Stwórz", "hud.crafting.tool_cata": "Wymaga:", // Crafting Stations - "hud.crafting.req_crafting_station": "Wymaga użycia:", + "hud.crafting.req_crafting_station": "Wymaga:", "hud.crafting.anvil": "Kowadło", "hud.crafting.cauldron": "Kocioł", - "hud.crafting.cooking_pot": "Garnek", - "hud.crafting.crafting_bench": "Warsztat", + "hud.crafting.cooking_pot": "Gar", + "hud.crafting.crafting_bench": "Stół rzemieślniczy", + "hud.crafting.forge": "Piec", + "hud.crafting.loom": "Krosno", + "hud.crafting.spinning_wheel": "Kołowrotek", + "hud.crafting.tanning_rack": "Stojak do garbowania", + "hud.crafting.salvaging_station": "Stoisko odzyskiwania", + "hud.crafting.campfire": "Ognisko", // Tabs "hud.crafting.tabs.all": "Wszystko", "hud.crafting.tabs.armor": "Pancerz", - "hud.crafting.tabs.dismantle": "Recykling", + "hud.crafting.tabs.dismantle": "Zdemontuj", "hud.crafting.tabs.food": "Żywność", "hud.crafting.tabs.glider": "Lotnie", "hud.crafting.tabs.potion": "Mikstury", "hud.crafting.tabs.tool": "Narzędzia", "hud.crafting.tabs.utility": "Użytkowe", - "hud.crafting.tabs.weapon": "Broń", + "hud.crafting.tabs.weapon": "Bronie", "hud.crafting.tabs.bag": "Torby", + "hud.crafting.tabs.processed_material": "Materiały", + "hud.crafting.dismantle_title": "Demontowanie", + "hud.crafting.dismantle_explanation" : "Najedź na przedmioty w pleacaku aby\nzobaczyć co możesz odzyskać.\n\nKliknij podwójnie aby rozmontować.", }, diff --git a/assets/voxygen/i18n/pl_PL/hud/group.ron b/assets/voxygen/i18n/pl_PL/hud/group.ron index 653dfe2e3e..2899db7050 100644 --- a/assets/voxygen/i18n/pl_PL/hud/group.ron +++ b/assets/voxygen/i18n/pl_PL/hud/group.ron @@ -1,4 +1,6 @@ /// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Lokalizacja na Polskie tłumaczenie ( string_map: { "hud.group": "Drużyna", diff --git a/assets/voxygen/i18n/pl_PL/hud/map.ron b/assets/voxygen/i18n/pl_PL/hud/map.ron index 85bdb6bbd4..644264a0e6 100644 --- a/assets/voxygen/i18n/pl_PL/hud/map.ron +++ b/assets/voxygen/i18n/pl_PL/hud/map.ron @@ -1,28 +1,41 @@ /// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Lokalizacja na Polskie tłumaczenie ( string_map: { // Map and Questlog "hud.map.map_title": "Mapa", "hud.map.qlog_title": "Zadania", + "hud.map.topo_map": "Widok topograficzny", "hud.map.difficulty": "Trudność", "hud.map.towns": "Miasta", "hud.map.castles": "Zamki", "hud.map.dungeons": "Lochy", "hud.map.caves": "Jaskinie", "hud.map.cave": "Jaskinia", - "hud.map.trees": "Gigan. drzewa", - "hud.map.tree": "Gigantyczne drzewo", + "hud.map.peaks": "Góry", + "hud.map.biomes": "Biomy", + "hud.map.voxel_map": "Mapa wokselowa", + "hud.map.trees": "Wielkie drzewa", + "hud.map.tree": "Wielkie drzewo", "hud.map.town": "Miasto", "hud.map.castle": "Zamek", "hud.map.dungeon": "Loch", "hud.map.difficulty_dungeon": "Loch\n\nTrudność: {difficulty}", "hud.map.drag": "Przewiń", "hud.map.zoom": "Przybliż", + "hud.map.mid_click": "Ustaw punkt orientacyjny", "hud.map.recenter": "Wycentruj", - "hud.map.topo_map": "Widok topograficzny" + "hud.map.marked_location": "Oznaczona lokacja", + "hud.map.marked_location_remove": "Kliknij aby usunąć", + "hud.map.change_map_mode": "Zmień typ mapy", + "hud.map.toggle_minimap_voxel": "Przełącz widok wokseli na minimapie", + "hud.map.zoom_minimap_explanation": "Przybliż minimapę aby zobaczyć\nteren dookoła ciebie z większą dokładnością", + "hud.map.gnarling": "Fortyfikacje Gnarlingów", + "hud.map.placed_by": "Umiejscowione poprzez {name}", }, vector_map: { } -) +) \ No newline at end of file diff --git a/assets/voxygen/i18n/pl_PL/hud/misc.ron b/assets/voxygen/i18n/pl_PL/hud/misc.ron index 9e8976ec63..5b7523a012 100644 --- a/assets/voxygen/i18n/pl_PL/hud/misc.ron +++ b/assets/voxygen/i18n/pl_PL/hud/misc.ron @@ -1,4 +1,6 @@ /// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Lokalizacja na Polskie tłumaczenie ( string_map: { "hud.do_not_show_on_startup": "Nie pokazuj tego podczas startu", @@ -7,23 +9,24 @@ "hud.you_died": "Zginąłeś", "hud.waypoint_saved": "Punkt orientacyjny zachowany", "hud.sp_arrow_txt": "PR", /// punkty rozwoju + "hud.inventory_full": "Ekwipunek pełen", "hud.press_key_to_show_keybindings_fmt": "[{key}] przypisania klawiszy", "hud.press_key_to_toggle_lantern_fmt": "[{key}] latarnia", "hud.press_key_to_show_debug_info_fmt": "Naciśnij {key} by zobaczyć debug", "hud.press_key_to_toggle_keybindings_fmt": "Naciśnij {key} by przełączyć przypisania klawiszy", "hud.press_key_to_toggle_debug_info_fmt": "Naciśnij {key} by przełączyć debugowanie", - - // Respawn message + + // Respawn message "hud.press_key_to_respawn": r#"Naciśnij {key} by odrodzić się przy ostatnio odwiedzonym ognisku."#, - - // Tutorial Button + + // Tutorial Button "hud.tutorial_btn": r#"Samouczek"#, "hud.tutorial_click_here": r#"Naciśnij [ {key} ] by przełączyć tryb przechwytywania myszy i naciśnij ten przycisk!"#, "hud.tutorial_elements": r#"Tworzenie"#, -"hud.temp_quest_headline": r#"Witaj Przybyszu!"#, -"hud.temp_quest_text": r#"By zacząć swoją podróż zacznij od rozglądnięcia się i zebrania zapasów. + "hud.temp_quest_headline": r#"Witaj Przybyszu!"#, + "hud.temp_quest_text": r#"By zacząć swoją podróż zacznij od rozglądnięcia się i zebrania zapasów. Śmiało bierz cokolwiek będzie Ci potrzebne podczas Twojej wyprawy! @@ -31,7 +34,7 @@ Spójrz w prawy dolny róg ekranu by znaleźć różne rzeczy, takie jak Twoja t Menu tworzenia pozwala stworzyć pancerze, broń, żywność i wiele innych! -Dzikie zwierzęta dookoła miast są świetnym źródłem Skrawków Skóry (Leather Scraps) które możesz przetworzyć na ubrania zapewniające dobrą ochronę podczas podróżowania. +Dzikie zwierzęta dookoła miast są świetnym źródłem Skrawków Skóry które możesz przetworzyć na ubrania zapewniające dobrą ochronę podczas podróżowania. Kiedy poczujesz się gotów, spróbuj zdobyć lepszy ekwipunek z wielu wyzwań rozrzuconych po całej mapie! "#, @@ -42,7 +45,16 @@ Kiedy poczujesz się gotów, spróbuj zdobyć lepszy ekwipunek z wielu wyzwań r "hud.free_look_indicator": "Tryb rozglądania aktywny. Naciśnij {key} by wyłączyć.", "hud.camera_clamp_indicator": "Pionowa blokada kamery aktywna. Naciśnij {key} by wyłączyć.", - "hud.auto_walk_indicator": "Automatyczny lot/chód aktywny", + "hud.auto_walk_indicator": "Automatyczne chodzenie/pływanie aktywne", + "hud.collect": "Zbierz", + "hud.pick_up": "Podnieś", + "hud.open": "Otwórz", + "hud.use": "Użyj", + "hud.mine": "Wykop", + "hud.talk": "Rozmawiaj", + "hud.trade": "Handluj", + "hud.mount": "Dosiądź", + "hud.sit": "Usiądź", }, diff --git a/assets/voxygen/i18n/pl_PL/hud/sct.ron b/assets/voxygen/i18n/pl_PL/hud/sct.ron index 58d766e616..8837fc2069 100644 --- a/assets/voxygen/i18n/pl_PL/hud/sct.ron +++ b/assets/voxygen/i18n/pl_PL/hud/sct.ron @@ -1,4 +1,6 @@ /// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Lokalizacja na Polskie tłumaczenie ( string_map: { // SCT outputs diff --git a/assets/voxygen/i18n/pl_PL/hud/settings.ron b/assets/voxygen/i18n/pl_PL/hud/settings.ron index 916aeba80c..41f219b3e5 100644 --- a/assets/voxygen/i18n/pl_PL/hud/settings.ron +++ b/assets/voxygen/i18n/pl_PL/hud/settings.ron @@ -1,4 +1,6 @@ /// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Lokalizacja na Polskie tłumaczenie ( string_map: { // Settings @@ -7,7 +9,10 @@ "hud.settings.press_behavior.toggle": "Przełącz", "hud.settings.press_behavior.hold": "Przytrzymaj", "hud.settings.help_window": "Okno pomocy", - "hud.settings.debug_info": "Debug Info", + "hud.settings.debug_info": "Informacje debugowania", + "hud.settings.show_hitboxes": "Pokaż hitboxy", + "hud.settings.show_chat": "Pokaż czat", + "hud.settings.show_hotkey_hints": "Pokaż klawisze skrótu", "hud.settings.tips_on_startup": "Porady startowe", "hud.settings.ui_scale": "Skala interfejsu", "hud.settings.relative_scaling": "Relatywne skalowanie", @@ -20,14 +25,13 @@ "hud.settings.buffs_mmap": "Wzmocnienia na minimapie", "hud.settings.toggle_bar_experience": "Przełącz pasek doświadczenia", "hud.settings.scrolling_combat_text": "Przewijanie tekstu podczas walki", - "hud.settings.single_damage_number": "Ujednolicone numery obrażeń", - "hud.settings.cumulated_damage": "Skumulowane obrażenia", "hud.settings.incoming_damage": "Otrzymywane obrażenia", - "hud.settings.cumulated_incoming_damage": "Kalkulowane otrzymywane obrażenia", "hud.settings.speech_bubble": "Dymek rozmowy", + "hud.settings.speech_bubble_self": "Pokazuj swój dymek rozmowy", "hud.settings.speech_bubble_dark_mode": "Dymek rozmowy w trybie ciemnym", "hud.settings.speech_bubble_icon": "Ikona dymka rozmowy", "hud.settings.energybar_numbers": "Numery na pasku energii", + "hud.settings.always_show_bars": "Zawsze pokazuj paski zdrowia i energii", "hud.settings.values": "Wartości", "hud.settings.percentages": "Procenty", "hud.settings.chat": "Czat", @@ -46,6 +50,7 @@ "hud.settings.free_look_behavior": "Zachowanie trybu rozglądania", "hud.settings.auto_walk_behavior": "Zachowanie trybu automatycznego chodu", "hud.settings.camera_clamp_behavior": "Zachowanie kamery w zablokowanym trybie", + "hud.settings.player_physics_behavior": "Fizyka gracza (eksperymentalne)", "hud.settings.stop_auto_walk_on_input": "Przełącz automatyczny chód poruszaniem", "hud.settings.auto_camera": "Automatyczna kamera", "hud.settings.reset_gameplay": "Zresetuj ustawienia", @@ -54,7 +59,12 @@ "hud.settings.sprites_view_distance": "Odległość renderowania 2d", "hud.settings.figures_view_distance": "Odległość renderowania obiektów", "hud.settings.maximum_fps": "Ogranicz maksymalne klatki", - "hud.settings.fov": "Field of View (stopnie)", + "hud.settings.background_fps": "Ilość klatek w tle", + "hud.settings.present_mode": "Obecny tryb", + "hud.settings.present_mode.fifo": "FIFO", + "hud.settings.present_mode.mailbox": "MAILBOX", + "hud.settings.present_mode.immediate": "Natychmiastowy", + "hud.settings.fov": "Pole widzenia (stopnie)", "hud.settings.gamma": "Gamma", "hud.settings.exposure": "Ekspozycja", "hud.settings.ambiance": "Jasność atmosferyczna", @@ -73,6 +83,9 @@ "hud.settings.fullscreen_mode": "Tryb pełnego ekranu", "hud.settings.fullscreen_mode.exclusive": "Ekskluzywny (przejęcie)", "hud.settings.fullscreen_mode.borderless": "Okno bez ramek (łatwiejsze alt-tab'owanie)", + "hud.settings.gpu_profiler": "Włącz taktowanie GPU (Nie zawsze wspierane)", + "hud.settings.lossy_terrain_compression": "Słabsza kompresja terenu", + "hud.settings.weapon_trails": "Ścieżki broni (efekt ataku)", "hud.settings.particles": "Cząsteczki", "hud.settings.resolution": "Rozdzielczość", "hud.settings.bit_depth": "Głębia bitowa", @@ -86,9 +99,11 @@ "hud.settings.shadow_rendering_mode.cheap": "Lekki", "hud.settings.shadow_rendering_mode.map": "Mapa", "hud.settings.shadow_rendering_mode.map.resolution": "Rozdzielczość", - "hud.settings.lod_detail": "LoD Dystans", + "hud.settings.lod_detail": "Ilość szczegółów", "hud.settings.save_window_size": "Zapisz wymiary okna", "hud.settings.reset_graphics": "Zresetuj ustawienia", + "hud.settings.bloom": "Rozmycie", + "hud.settings.point_glow": "Poświata punktowa", "hud.settings.master_volume": "Głośność ogólna", "hud.settings.inactive_master_volume_perc": "Głośność ogólna (nieaktywne okno)", @@ -97,15 +112,31 @@ "hud.settings.audio_device": "Urządzenie dźwiękowe", "hud.settings.reset_sound": "Zresetuj ustawienia", + "hud.settings.english_fallback": "Wyświetl angielskie napisy dla brakujących tłumaczeń", + "hud.settings.awaitingkey": "Naciśnij klawisz...", "hud.settings.unbound": "Brak", "hud.settings.reset_keybinds": "Zresetuj ustawienia", - "hud.settings.player_physics_behavior": "Fizyka gracza (eksperymentalne)", - "hud.settings.english_fallback": "Wyświetl angielskie napisy dla brakujących tłumaczeń" + "hud.settings.chat_tabs": "Chat Tabs", + "hud.settings.label": "Etykieta:", + "hud.settings.delete": "Usuń", + "hud.settings.show_all": "Pokaż wszystko", + "hud.settings.messages": "Wiadomości", + "hud.settings.activity": "Aktywność", + "hud.settings.death": "Śmierć", + "hud.settings.group": "Grupa", + "hud.settings.faction": "Segment", + "hud.settings.world": "Świat", + "hud.settings.region": "Region", + "hud.settings.say": "Powiedz", + "hud.settings.all": "Wszyscy", + "hud.settings.group_only": "Tylko dla grupy", + "hud.settings.reset_chat" : "Przywróć ustawienia podstawowe", }, vector_map: { } ) + diff --git a/assets/voxygen/i18n/pl_PL/hud/skills.ron b/assets/voxygen/i18n/pl_PL/hud/skills.ron index 0186674aab..dd60b65cf8 100644 --- a/assets/voxygen/i18n/pl_PL/hud/skills.ron +++ b/assets/voxygen/i18n/pl_PL/hud/skills.ron @@ -1,4 +1,6 @@ /// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Lokalizacja na Polskie tłumaczenie ( string_map: { "hud.rank_up": "Nowy punkt rozwoju", @@ -58,6 +60,8 @@ "hud.skill.sc_heal_heal": "Zwiększa leczenie innych o {boost}%{SP}", "hud.skill.sc_heal_cost_title": "Koszt Wytrzymałości", "hud.skill.sc_heal_cost": "Leczenie innych kosztuje {boost}% mniej Wytrzymałości{SP}", + "hud.skill.sc_heal_duration_title": "Długość", + "hud.skill.sc_heal_duration": "Efekt aury leczącej trwa {boost}% dłużej{SP}", "hud.skill.sc_heal_range_title": "Zasięg", "hud.skill.sc_heal_range": "Promień dociera {boost}% dalej{SP}", "hud.skill.sc_wardaura_unlock_title": "Sfera obronna", @@ -165,7 +169,6 @@ "hud.skill.hmr_single_strike_damage" : "Zwiększa obrażenia za każde trafienie{SP}", "hud.skill.hmr_single_strike_knockback_title" : "Trafienie - odrzut", "hud.skill.hmr_single_strike_knockback" : "Zwiększa odrzut o {boost}%{SP}", - "hud.skill." : "", // Sword "hud.skill.sw_trip_str_title": "Potrójne cięcie", "hud.skill.sw_trip_str": "Trzy szybkie cięcia", @@ -236,9 +239,19 @@ "hud.skill.axe_leap_cost": "Zmniejsza koszt doskoku o {boost}%{SP}", "hud.skill.axe_leap_distance_title": "Doskok - dystans", "hud.skill.axe_leap_distance": "Zwiększa dystans doskoku o {boost}%{SP}", + // Mining + "hud.skill.mining_title": "Górnictwo", + "hud.skill.pick_strike_title": "Wykorzystanie kilofa", + "hud.skill.pick_strike": "Niszcz skały kilofem zby zdobywać rudy, kryształy i doświadczenie", + "hud.skill.pick_strike_speed_title": "Szybkość uderzania kilofem", + "hud.skill.pick_strike_speed": "Kop szybciej{SP}", + "hud.skill.pick_strike_oregain_title": "Wydajność kopania rud", + "hud.skill.pick_strike_oregain": "Szansa na zdobycie dodatkowej rudy ({boost}% per level){SP}", + "hud.skill.pick_strike_gemgain_title": "Wydajność kopania kryształów", + "hud.skill.pick_strike_gemgain": "Szansa na zdobycie dodadkowego kryształu ({boost}% per level){SP}", }, vector_map: { } -) +) \ No newline at end of file diff --git a/assets/voxygen/i18n/pl_PL/hud/social.ron b/assets/voxygen/i18n/pl_PL/hud/social.ron index 5e5330ca8f..cc3f362c0b 100644 --- a/assets/voxygen/i18n/pl_PL/hud/social.ron +++ b/assets/voxygen/i18n/pl_PL/hud/social.ron @@ -1,6 +1,6 @@ /// WARNING: Localization files shall be saved in UTF-8 format without BOM -/// Localization for "global" English +/// Lokalizacja na Polskie tłumaczenie ( string_map: { "hud.social": "Inni gracze", diff --git a/assets/voxygen/i18n/pl_PL/hud/trade.ron b/assets/voxygen/i18n/pl_PL/hud/trade.ron index caf4201730..97beddb038 100644 --- a/assets/voxygen/i18n/pl_PL/hud/trade.ron +++ b/assets/voxygen/i18n/pl_PL/hud/trade.ron @@ -1,4 +1,6 @@ /// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Lokalizacja na Polskie tłumaczenie ( string_map: { "hud.trade.trade_window": "Okno handlu", @@ -18,10 +20,13 @@ "hud.trade.sell_price": "Cena sprzedaży", "hud.trade.coin": "monet(y)", "hud.trade.tooltip_hint_1": "", - "hud.trade.tooltip_hint_2": "" + "hud.trade.tooltip_hint_2": "", + "hud.trade.your_offer": "Twoja oferta", + "hud.trade.their_offer": "Jego oferta", + "hud.trade.amount_input": "Wybierz przedmiot", }, + vector_map: { } -) - +) \ No newline at end of file diff --git a/assets/voxygen/i18n/pl_PL/main.ron b/assets/voxygen/i18n/pl_PL/main.ron index 4236e47f30..5623438ed5 100644 --- a/assets/voxygen/i18n/pl_PL/main.ron +++ b/assets/voxygen/i18n/pl_PL/main.ron @@ -1,4 +1,6 @@ /// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Lokalizacja na Polskie tłumaczenie ( string_map: { /// Start Main screen section @@ -8,6 +10,7 @@ "main.connecting": "Łączenie", "main.creating_world": "Tworzenie świata", "main.tip": "Porada:", + "main.unbound_key_tip": "Rozwiąż", // Welcome notice that appears the first time Veloren is started "main.notice": r#"Witaj w alfie Veloren! @@ -56,16 +59,34 @@ https://veloren.net/account/."#, "main.login.banned": "Konto zostało zbanowane z powodu:", "main.login.kicked": "Sesja została wyrzucona z powodu:", "main.login.select_language": "Wybierz język", - - "main.servers.select_server": "Wybierz serwer", + "main.login.client_version": "Wersja klienta", "main.login.server_version": "Wersja serwera", - "main.login.internal_error": "Błąd wewnętrzny klienta (najprawdopodobniej postać została usunięta)", - "main.login.client_version": "Wersja klienta" + "main.login.client_init_failed": "Błąd inicjalizacji klienta: {init_fail_reason}", + "main.login.username_bad_characters": "Nazwa posiada niedozwolone znaki! (Tylko znaki alfanumeryczne, '_' i '-' są dozwolone)", + "main.login.username_too_long": "Nazwa zbyt długa! Maksymalna długość wynosi: {max_len}", + "main.servers.select_server": "Wybierz serwer", + "main.servers.singleplayer_error": "Nie udało się połączyć z serwerem: {sp_error}", + "main.servers.network_error": "Błąd gniazda/połączenia z serwerem: {raw_error}", + "main.servers.participant_error": "Rozłączono klienta/błąd protokołu: {raw_error}", + "main.servers.stream_error": "Błąd (de)serializacji/połączenia z klientem: {raw_error}", + "main.servers.database_error": "Błąd bazy danych serwera: {raw_error}", + "main.servers.persistence_error": "Błąd wytrzymałości serwera (Prawdopodobnie powiązane z zasobami/danymi postaci): {raw_error}", + "main.servers.other_error": "Ogólny błąd serwera: {raw_error}", + + // Credits screen + "main.credits": "Twórcy", + "main.credits.created_by": "stworzone przez", + "main.credits.music": "Muzyka", + "main.credits.fonts": "Czcionki", + "main.credits.other_art": "Inne dzieła", + "main.credits.contributors": "Współtwórcy", + /// End Main screen section }, vector_map: { + /// The keybinding names can be found in voxygen/src/game_input.rs in the GameInput enum "loading.tips": [ "Naciśnij '{gameinput.togglelantern}' by zapalić latarnię.", "Naciśnij '{gameinput.help}' by zobaczyć podstawową klawiszologię.", @@ -86,6 +107,9 @@ https://veloren.net/account/."#, "Możesz przełączać typ paska zdrowia w opcjach.", "Usiądź obok ogniska (używając '{gameinput.sit}') by powoli wyleczyć się z obrażeń.", "Potrzebujesz więcej slotów w ekwipunku, albo nowego uzbrojenia? Wciśnij '{gameinput.crafting}' aby otworzyć menu tworzenia!", + "Wciśnij '{gameinput.roll}' aby się przeturlać. Turlanie może zostać użyte do szybszego poruszania się lub unikania wrogich ataków.", + "Zastanawiasz się do czego służy dany przedmiot? Wyszukaj 'input:' w polu wytwarzania aby zobaczyć w jakich recepturach jest on wykorzystywany.", + "Znalazłeś coś fajnego? Zrób temu zdjęcie wciskając '{gameinput.screenshot}'." ], } ) diff --git a/assets/voxygen/i18n/pl_PL/npc.ron b/assets/voxygen/i18n/pl_PL/npc.ron index d2213536c3..c19ed6ed04 100644 --- a/assets/voxygen/i18n/pl_PL/npc.ron +++ b/assets/voxygen/i18n/pl_PL/npc.ron @@ -1,4 +1,6 @@ -/// Localization for Polish / Tłumaczenia dla języka polskiego +/// Localization for Polish + +/// Tłumaczenia dla języka polskiego ( string_map: { }, @@ -171,5 +173,26 @@ "Poszczuję tarasqa (tarasque) na ciebie!", "Dlaczego ja?", ], + "npc.speech.villager_enemy_killed": [ + "Zniszczyłem swojego przeciwnika!", + "Nareszcie spokój!", + "... więc, co robiłem?", + ], + "npc.speech.menacing": [ + "Ostrzegam Cię!", + "Podejdź bliżej a zaatakuję!", + "Nie boję się Ciebie!", + "Lepiej szybko stąd uciekaj!", + "Krok w tył, jeśli Ci życie miłe!", + "Nie jesteś tu mile widziany!", + ], + "npc.speech.cultist_low_health_fleeing": [ + "Taktyczny odwrót!", + "Odwrót!", + "Przeklinam Cię!", + ///"I will curse you in the afterlife!", + "Muszę odpocząć!", + "Są zbyt potężni!", + ] }, ) diff --git a/assets/voxygen/i18n/pt_BR/buff.ron b/assets/voxygen/i18n/pt_BR/buff.ron index 19ae344942..8822fa0095 100644 --- a/assets/voxygen/i18n/pt_BR/buff.ron +++ b/assets/voxygen/i18n/pt_BR/buff.ron @@ -21,6 +21,8 @@ "buff.desc.protectingward": "Você está protegido, de alguma forma, de ataques.", "buff.title.frenzied": "Frenético", "buff.desc.frenzied": "Você é imbuído de um deslocamento descomunal e ignora pequenas lesões.", + "buff.title.hastened": "Aceleração", + "buff.desc.hastened": "Seus movimentos e ataques são mais rápidos.", // Debuffs "buff.title.bleed": "Sangramento", "buff.desc.bleed": "Inflige Dano contínuo.", diff --git a/assets/voxygen/i18n/pt_BR/common.ron b/assets/voxygen/i18n/pt_BR/common.ron index 5513b5aa31..2c3ae76ce4 100644 --- a/assets/voxygen/i18n/pt_BR/common.ron +++ b/assets/voxygen/i18n/pt_BR/common.ron @@ -37,6 +37,8 @@ "common.automatic": "Auto", "common.random": "Aleatório", "common.empty": "Vazio", + "common.confirm": "Confirmar", + "common.delete_server": "Deletar Servidor", // Títulos da Janela de Configurações "common.interface_settings": "Configurações de Interface", @@ -61,10 +63,11 @@ O cliente está atualizado?"#, "common.species.danari": "Danari", "common.weapons.axe": "Machado", - "common.weapons.sword": "Espada", + "common.weapons.dagger": "Adaga", "common.weapons.greatsword": "Espada Larga", "common.weapons.shortswords": "Espada Curta", - "common.weapons.staff": "Cajado", + "common.weapons.sword": "Espada", + "common.weapons.staff": "Cajado de Fogo", "common.weapons.bow": "Arco", "common.weapons.hammer": "Martelo", "common.weapons.general": "Combate Geral", @@ -77,11 +80,12 @@ O cliente está atualizado?"#, "common.weapons.axe_simple": "Machado Simples", "common.weapons.bow_simple": "Arco Simples", "common.weapons.unique": "Único", - "common.tool.debug": "Debug", + "common.tool.debug": "Depuração", "common.tool.farming": "Ferramenta Agrícola", "common.tool.pick": "Picareta", "common.tool.mining": "Mineração", "common.kind.modular_component": "Componente Modular", + "common.kind.modular_component_partial": "Componente", "common.kind.glider": "Planador", "common.kind.consumable": "Consumível", "common.kind.throwable": "Arremessável", @@ -91,21 +95,24 @@ O cliente está atualizado?"#, "common.hands.one": "Uma mão", "common.hands.two": "Duas mãos", - "common.rand_appearance": "Aparência e nome aleatórios", + "common.rand_appearance": "Aparência aleatória", "common.rand_name": "Nome Aleatório", - "common.stats.combat_rating": "CR", + "common.stats.combat_rating": "Nivel de Combate", "common.stats.power": "Poder", "common.stats.speed": "Velocidade", "common.stats.poise": "Veneno", - "common.stats.crit_chance": "Chance de Crit", - "common.stats.crit_mult": "Multiplicador de Crit", + "common.stats.range": "Alcance", + "common.stats.energy_efficiency": "Eficiência Energética", + "common.stats.buff_strength": "Buff/Debuff de força", + "common.stats.crit_chance": "Chance de Crítico", + "common.stats.crit_mult": "Multiplicador de Crítico", "common.stats.armor": "Armadura", - "common.stats.poise_res":"Resist Paralisia", - "common.stats.energy_max": "Energia Max", - "common.stats.energy_reward": "Captura de energia", - "common.stats.crit_power": "Crit Power", - "common.stats.stealth": "Stealth", + "common.stats.poise_res":"Resistência a Atordoamento", + "common.stats.energy_max": "Energia Máxima", + "common.stats.energy_reward": "Recompensa de Energia", + "common.stats.crit_power": "Poder Crítico", + "common.stats.stealth": "Furtividade", "common.stats.slots": "Espaços", "common.material.metal": "Metal", @@ -113,6 +120,8 @@ O cliente está atualizado?"#, "common.material.stone": "Pedra", "common.material.cloth": "Tecido", "common.material.hide": "Couro", + + "common.sprite.chest": "Baú", }, diff --git a/assets/voxygen/i18n/pt_BR/gameinput.ron b/assets/voxygen/i18n/pt_BR/gameinput.ron index 527cad5f42..c604ead70e 100644 --- a/assets/voxygen/i18n/pt_BR/gameinput.ron +++ b/assets/voxygen/i18n/pt_BR/gameinput.ron @@ -4,7 +4,7 @@ ( string_map: { "gameinput.primary": "Ataque Básico", - "gameinput.secondary": "Ataque Secundário/Bloqueio/Mira", + "gameinput.secondary": "Ataque Secundário", "gameinput.block": "Bloquear", "gameinput.slot1": "Hotbar Slot 1", "gameinput.slot2": "Hotbar Slot 2", @@ -53,7 +53,7 @@ "gameinput.togglewield": "Alternar Empunhadura", "gameinput.interact": "Interagir", "gameinput.freelook": "Câmera Livre", - "gameinput.autowalk": "Caminhar Automático", + "gameinput.autowalk": "Caminhar/Nadar Automáticamente", "gameinput.cameraclamp": "Trava de câmera vertical", "gameinput.dance": "Dançar", "gameinput.select": "Escolher", @@ -68,6 +68,7 @@ "gameinput.mapzoomin": "Aumentar zoom do mapa", "gameinput.mapzoomout": "Reduzir zoom do mapa", "gameinput.greet": "Saudação", + "gameinput.map.locationmarkerbutton": "Insere um marcador no Mapa" }, diff --git a/assets/voxygen/i18n/pt_BR/hud/ability.ron b/assets/voxygen/i18n/pt_BR/hud/ability.ron new file mode 100644 index 0000000000..ea5bc4b199 --- /dev/null +++ b/assets/voxygen/i18n/pt_BR/hud/ability.ron @@ -0,0 +1,35 @@ +/// CUIDADO: Arquivos de tradução devem ser criados no formato UTF-8 sem Marca de Ordem de byte - BOM(https://pt.wikipedia.org/wiki/Marca_de_ordem_de_byte) + +/// Localization for Portuguese +( + string_map: { + // Bastão de debug + "common.abilities.debug.possess.name": "Flecha Marionete", + "common.abilities.debug.possess.desc": "Atira uma flecha venenosa que deixa você controlar seu alvo.", + // Sword + "common.abilities.sword.spin.name": "Redemoinho", + "common.abilities.sword.spin.desc": "Movimento frontal girando com sua espada.", + // Machado + "common.abilities.axe.leap.name": "Machadada Pulante", + "common.abilities.axe.leap.desc": "Um pulo cortante na direção do cursor do mouse.", + // Martelo + "common.abilities.hammer.leap.name": "Golpe da Ruína", + "common.abilities.hammer.leap.desc": "Um Ataque em Área que inflige Empurrão. Salta na direção do cursor do mouse.", + // Arco + "common.abilities.bow.shotgun.name": "Estrondo", + "common.abilities.bow.shotgun.desc": "Atira uma sequência de flechas", + // Cajado + "common.abilities.staff.fireshockwave.name": "Anel de Fogo", + "common.abilities.staff.fireshockwave.desc": "Incendeia o chão com uma onda de chamas.", + // Cetro + "common.abilities.sceptre.wardingaura.name": "Aura Protetora", + "common.abilities.sceptre.wardingaura.desc": "Protege seus aliados contra ataques inimigos.", + // Desconhecido + "common.abilities.unknown.name": "Habilidade sem título", + "common.abilities.unknown.desc": "Habilidade sem descrição", + }, + + + vector_map: { + } +) diff --git a/assets/voxygen/i18n/pt_BR/hud/bag.ron b/assets/voxygen/i18n/pt_BR/hud/bag.ron index 47285c2028..1acf77ee9e 100644 --- a/assets/voxygen/i18n/pt_BR/hud/bag.ron +++ b/assets/voxygen/i18n/pt_BR/hud/bag.ron @@ -34,6 +34,7 @@ "hud.bag.combat_rating": "Pontuação de Combate", "hud.bag.protection": "Proteção", "hud.bag.stun_res": "Resistência à paralisia", + "hud.bag.stealth": "Furtividade", "hud.bag.combat_rating_desc": "Calculado por seu\nequipamento e vida.", "hud.bag.protection_desc": "Redução de dano por armadura", "hud.bag.stun_res_desc": "Resistência à paralisia provocada por golpes consecutivos.\nRegenera como Stamina.", diff --git a/assets/voxygen/i18n/pt_BR/hud/chat.ron b/assets/voxygen/i18n/pt_BR/hud/chat.ron index 122a312578..6ac5af2e3a 100644 --- a/assets/voxygen/i18n/pt_BR/hud/chat.ron +++ b/assets/voxygen/i18n/pt_BR/hud/chat.ron @@ -22,15 +22,15 @@ "hud.chat.fall_kill_msg": "[{name}] morreu de dano de queda", "hud.chat.suicide_msg": "[{name}] morreu de dano autoinflingido", - "hud.chat.pvp_buff_kill_msg": "[{victim}] morreu de {buff} causado por [{attacker}]", + "hud.chat.died_of_pvp_buff_msg": "[{victim}] {died_of_buff} causado por [{attacker}]", "hud.chat.pvp_melee_kill_msg": "[{attacker}] derrotou [{victim}]", "hud.chat.pvp_ranged_kill_msg": "[{attacker}] atirou em [{victim}]", "hud.chat.pvp_explosion_kill_msg": "[{attacker}] explodiu [{victim}]", "hud.chat.pvp_energy_kill_msg": "[{attacker}] matou [{victim}] com magia", - "hud.chat.nonexistent_buff_kill_msg": "[{victim}] morreu de {buff}", + "hud.chat.died_of_buff_nonexistent_msg": "[{victim}] {died_of_buff}", - "hud.chat.npc_buff_kill_msg": "[{victim}] morreu de {buff} causado por [{attacker}]", + "hud.chat.died_of_npc_buff_msg": "[{victim}] {died_of_buff} causado por {attacker}", "hud.chat.npc_melee_kill_msg": "{attacker} matou [{victim}]", "hud.chat.npc_ranged_kill_msg": "{attacker} atirou em [{victim}]", "hud.chat.npc_explosion_kill_msg": "{attacker} explodiu [{victim}]", diff --git a/assets/voxygen/i18n/pt_BR/hud/crafting.ron b/assets/voxygen/i18n/pt_BR/hud/crafting.ron index 8d64d61248..9c0b573d03 100644 --- a/assets/voxygen/i18n/pt_BR/hud/crafting.ron +++ b/assets/voxygen/i18n/pt_BR/hud/crafting.ron @@ -18,6 +18,8 @@ "hud.crafting.loom": "Tear", "hud.crafting.spinning_wheel": "Roca", "hud.crafting.tanning_rack": "Curtidor de couro", + "hud.crafting.salvaging_station": "Mesa de Restituição", + "hud.crafting.campfire": "Fogueira", // Tabs (Abas) "hud.crafting.tabs.all": "Tudo", "hud.crafting.tabs.armor": "Armadura", @@ -30,6 +32,19 @@ "hud.crafting.tabs.weapon": "Armas", "hud.crafting.tabs.bag": "Mochilas", "hud.crafting.tabs.processed_material": "Materiais", + "hud.crafting.dismantle_title": "Desmontagem", + "hud.crafting.dismantle_explanation" : "Passe o cursor nos itens da sua mochila para ver o que\nvocê pode desmantelar.\n\nDê clique duplo neles para iniciar a desmontagem.", + "hud.crafting.modular_desc": "Arraste partes de arma aqui para criar uma arma", + "hud.crafting.mod_weap_prim_slot_title": "Componente Primário de Arma", + "hud.crafting.mod_weap_prim_slot_desc": "Arraste um componente primário de arma aqui (e.g. uma lâmina de espada, cabeça de machado, ou armação de arco).", + "hud.crafting.mod_weap_sec_slot_title": "Componente Secundário de Arma", + "hud.crafting.mod_weap_sec_slot_desc": "Arraste um componente secundário de arma aqui (e.g. um punho de espada, uma empunhadura de arco, ou núcleo de cajado).", + "hud.crafting.mod_comp_metal_prim_slot_title": "Lingote de Metal", + "hud.crafting.mod_comp_metal_prim_slot_desc": "Arraste um lingote de metal aqui, apenas certos metais podem ser usados para criar armas.", + "hud.crafting.mod_comp_wood_prim_slot_title": "Madeira", + "hud.crafting.mod_comp_wood_prim_slot_desc": "Arraste um tipo de madeira aqui, apenas certas madeiras podem ser usadas para criar armas.", + "hud.crafting.mod_comp_sec_slot_title": "Material Animal", + "hud.crafting.mod_comp_sec_slot_desc": "Opcionalmente coloque um ingrediente de origem animal, apenas certos ingredientes podem ser usados para criar armas.", }, diff --git a/assets/voxygen/i18n/pt_BR/hud/map.ron b/assets/voxygen/i18n/pt_BR/hud/map.ron index 3625d07f8a..ee7ef84dda 100644 --- a/assets/voxygen/i18n/pt_BR/hud/map.ron +++ b/assets/voxygen/i18n/pt_BR/hud/map.ron @@ -13,7 +13,8 @@ "hud.map.dungeons": "Masmorras", "hud.map.caves": "Cavernas", "hud.map.cave": "Caverna", - "hud.map.peaks": "Mountains", + "hud.map.peaks": "Montanhas", + "hud.map.biomes": "Biomas", "hud.map.voxel_map": "Mapa Voxel", "hud.map.trees": "Árvores Gigantes", "hud.map.tree": "Árvore Gigante", @@ -23,13 +24,15 @@ "hud.map.difficulty_dungeon": "Dificuldade da\n\nMasmorra: {difficulty}", "hud.map.drag": "Arrastar", "hud.map.zoom": "Zoom", - "hud.map.mid_click": "Marcar waypoint", + "hud.map.mid_click": "Adicionar marcador", "hud.map.recenter": "Recentralizar", "hud.map.marked_location": "Localização Marcada", "hud.map.marked_location_remove": "Clique para remover", "hud.map.change_map_mode": "Alterar modo do mapa", "hud.map.toggle_minimap_voxel": "Alternar Modo Voxel no Minimapa", "hud.map.zoom_minimap_explanation": "Dê zoom no minimapa para ver\nsua área em maior detalhes", + "hud.map.gnarling": "Fortificação Retorcida", + "hud.map.placed_by": "Marcado por {name}", }, diff --git a/assets/voxygen/i18n/pt_BR/hud/misc.ron b/assets/voxygen/i18n/pt_BR/hud/misc.ron index 25043bc61b..955ace09ae 100644 --- a/assets/voxygen/i18n/pt_BR/hud/misc.ron +++ b/assets/voxygen/i18n/pt_BR/hud/misc.ron @@ -7,9 +7,12 @@ "hud.show_tips": "Mostrar Dicas", "hud.quests": "Missões", "hud.you_died": "Você Morreu", - "hud.waypoint_saved": "Waypoint Salvo", + "hud.waypoint_saved": "Marcador Salvo", "hud.sp_arrow_txt": "PHs", "hud.inventory_full": "Inventário Cheio", + "hud.someone_else": "outro alguém", + "hud.another_group": "outro grupo", + "hud.owned_by_for_secs": "Pertence a {name} por {secs} segundos", "hud.press_key_to_show_keybindings_fmt": "[{key}] mapeamento de teclas", "hud.press_key_to_toggle_lantern_fmt": "[{key}] lamparina", @@ -46,6 +49,15 @@ Assim que você se sentir pronto, tente adquirir equipamentos melhores dos desaf "hud.free_look_indicator": "Câmera livre ativada. Pressione {key} para desabilitar.", "hud.camera_clamp_indicator": "Trava vertical de câmera ativada. Pressione {key} para desabilitar.", "hud.auto_walk_indicator": "Caminhar/Nadar automático ativado", + "hud.collect": "Coletar", + "hud.pick_up": "Pegar", + "hud.open": "Abrir", + "hud.use": "Usar", + "hud.mine": "Minerar", + "hud.talk": "Falar", + "hud.trade": "Negociar", + "hud.mount": "Montar", + "hud.sit": "Sentar", }, diff --git a/assets/voxygen/i18n/pt_BR/hud/settings.ron b/assets/voxygen/i18n/pt_BR/hud/settings.ron index d4fba091b1..bf53542751 100644 --- a/assets/voxygen/i18n/pt_BR/hud/settings.ron +++ b/assets/voxygen/i18n/pt_BR/hud/settings.ron @@ -25,15 +25,18 @@ "hud.settings.buffs_mmap": "Buffs no Minimapa", "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 Únicos de Dano", - "hud.settings.cumulated_damage": "Dano Acumulado", + "hud.settings.damage_accumulation_duration": "Duração da Acumulação de Dano", "hud.settings.incoming_damage": "Dano Recebido", - "hud.settings.cumulated_incoming_damage": "Dano Recebido Acumulado", + "hud.settings.incoming_damage_accumulation_duration": "Duração da Acumulação de Dano Recebido", + "hud.settings.round_damage": "Arredondar Dano", "hud.settings.speech_bubble": "Balão de Fala", + "hud.settings.speech_bubble_self": "Mostrar Próprios Balões de Fala", "hud.settings.speech_bubble_dark_mode": "Balão de Fala Modo Escuro", "hud.settings.speech_bubble_icon": "Ícone do Balão de Fala", "hud.settings.energybar_numbers": "Números da Barra de Energia", "hud.settings.always_show_bars": "Sempre exibir Barra de Energia", + "hud.settings.experience_numbers": "Números de Experiência", + "hud.settings.accumulate_experience": "Acumular Números de Experiência", "hud.settings.values": "Valores", "hud.settings.percentages": "Porcentagens", "hud.settings.chat": "Chat", @@ -55,9 +58,11 @@ "hud.settings.player_physics_behavior": "Física do Jogador (experimental)", "hud.settings.stop_auto_walk_on_input": "Parar caminhar automático em caso de movimento", "hud.settings.auto_camera": "Câmera automática", + "hud.settings.bow_zoom": "Dar zoom durante o carregamento do arco", "hud.settings.reset_gameplay": "Restaurar Padrões", "hud.settings.view_distance": "Alcance de Visão", + "hud.settings.lod_distance": "Distância do Nível de Detalhe (LoD)", "hud.settings.sprites_view_distance": "Distância de visão dos Sprites", "hud.settings.figures_view_distance": "Distância de visão das Entidades", "hud.settings.maximum_fps": "FPS máximo", @@ -66,7 +71,7 @@ "hud.settings.present_mode.fifo": "Fifo", "hud.settings.present_mode.mailbox": "Correio", "hud.settings.present_mode.immediate": "Imediato", - "hud.settings.fov": "Campo de visão(graus)", + "hud.settings.fov": "Campo de visão (graus)", "hud.settings.gamma": "Gama", "hud.settings.exposure": "Exposição", "hud.settings.ambiance": "Brilho do Ambiente", @@ -85,9 +90,10 @@ "hud.settings.fullscreen_mode": "Modos de tela cheia", "hud.settings.fullscreen_mode.exclusive": "Dedicado", "hud.settings.fullscreen_mode.borderless": "Sem bordas", - "hud.settings.gpu_profiler": "Habilitar temporização de GPU timing (não suportado ainda)", + "hud.settings.gpu_profiler": "Habilitar temporização de GPU (não suportado globalmente)", "hud.settings.particles": "Partículas", "hud.settings.lossy_terrain_compression": "Compressão de terreno com perdas", + "hud.settings.weapon_trails": "Trilhas de Armas", "hud.settings.resolution": "Resolução", "hud.settings.bit_depth": "Profundidade de bit", "hud.settings.refresh_rate": "Taxa de Atualização", @@ -100,15 +106,18 @@ "hud.settings.shadow_rendering_mode.cheap": "Simples", "hud.settings.shadow_rendering_mode.map": "Mapa", "hud.settings.shadow_rendering_mode.map.resolution": "Resolução", + "hud.settings.rain_occlusion.resolution": "Resolução da Obstrução da Chuva", "hud.settings.lod_detail": "Detalhes", "hud.settings.save_window_size": "Salvar Dim. da Janela", "hud.settings.reset_graphics": "Restaurar Padrões", "hud.settings.bloom": "Bloom", + "hud.settings.point_glow": "Brilho de Ponto", "hud.settings.master_volume": "Volume Principal", "hud.settings.inactive_master_volume_perc": "Volume Principal (janela inativa)", "hud.settings.music_volume": "Volume da Música", "hud.settings.sound_effect_volume": "Volume dos Efeitos", + "hud.settings.ambience_volume": "Volume Ambiente", "hud.settings.audio_device": "Dispositivo de Áudio", "hud.settings.reset_sound": "Restaurar Padrões", diff --git a/assets/voxygen/i18n/pt_BR/hud/skills.ron b/assets/voxygen/i18n/pt_BR/hud/skills.ron index 3ca93a2f55..a2fca13367 100644 --- a/assets/voxygen/i18n/pt_BR/hud/skills.ron +++ b/assets/voxygen/i18n/pt_BR/hud/skills.ron @@ -106,36 +106,36 @@ // Arco "hud.skill.bow_projectile_speed_title" : "Velocidade do Projétil", "hud.skill.bow_projectile_speed" : "Permite atirar mais flechas, com velocidade aumentada em {boost}%{SP}", - "hud.skill.bow_arrow_count_title" : "Quantidade de Flechas", - "hud.skill.bow_arrow_count" : "Atira flecha adicional ao pular{SP}", - "hud.skill.bow_repeater_cost_title" : "Custo do Repetidor", - "hud.skill.bow_repeater_cost" : "Reduz o custo de energia da repetição em {boost}%{SP}", - "hud.skill.bow_repeater_glide_title" : "Repetidor Planador", - "hud.skill.bow_repeater_glide" : "Plana mais durante uma repetição{SP}", - "hud.skill.bow_repeater_damage_title" : "Dano do Repetidor", - "hud.skill.bow_repeater_damage" : "Aumenta o dano em {boost}%{SP}", - "hud.skill.bow_repeater_unlock_title" : "Desbloquear Repetidor", - "hud.skill.bow_repeater_unlock" : "Desbloqueia a habilidade de pular no ar e atirar uma chuva de flechas{SP}", "hud.skill.bow_charged_title" : "Disparo carregado", "hud.skill.bow_charged" : "Porque você esperou mais", - "hud.skill.bow_charged_knockback_title" : "Empurrão Aprimorado", - "hud.skill.bow_charged_knockback" : "Empurra inimigos {boost}% mais longe{SP}", - "hud.skill.bow_charged_move_speed_title" : "Velocidade de Movimentação em Carga", - "hud.skill.bow_charged_move_speed" : "Aumenta a velocidade de movimentação ao carregar um ataque em {boost}%{SP}", - "hud.skill.bow_charged_speed_title" : "Velocidade da Carga", - "hud.skill.bow_charged_speed" : "Aumenta a velocidade de carga dos ataques em {boost}%{SP}", - "hud.skill.bow_charged_projectile_speed_title" : "Velocidade de Projétil Carregado", - "hud.skill.bow_charged_projectile_speed" : "Aumenta a velocidade de projétil carregado em {boost}%{SP}", - "hud.skill.bow_charged_drain_title" : "Dreno da Carga", - "hud.skill.bow_charged_drain" : "Reduz dreno de stamina em {boost}%{SP}", "hud.skill.bow_charged_damage_title" : "Dano da Carga", "hud.skill.bow_charged_damage" : "Aumenta o Dano em {boost}%{SP}", - "hud.skill.bow_energy_regen_title" : "Regeneração de Energia", - "hud.skill.bow_energy_regen" : "Aumenta o ganho de stamina em {boost}%{SP}", - "hud.skill.bow_title" : "Disparo de Flecha", - "hud.skill.bow" : "Aljava infinita incluída, não adequada para crianças", - "hud.skill.bow_damage_title" : "Dano", - "hud.skill.bow_damage" : "Aumenta o dano em {boost}%{SP}", + "hud.skill.bow_charged_energy_regen_title" : "Regeneração Carregada", + "hud.skill.bow_charged_energy_regen" : "Aumenta recuperação de energia em {boost}%{SP}", + "hud.skill.bow_charged_knockback_title" : "Empurrão Aprimorado", + "hud.skill.bow_charged_knockback" : "Empurra inimigos {boost}% mais longe{SP}", + "hud.skill.bow_charged_speed_title" : "Velocidade da Carga", + "hud.skill.bow_charged_speed" : "Aumenta a velocidade de carga dos ataques em {boost}%{SP}", + "hud.skill.bow_charged_move_title" : "Velocidade de Movimentação em Carga", + "hud.skill.bow_charged_move" : "Aumenta a velocidade de movimentação durante o carregamento do ataque em {boost}%{SP}", + "hud.skill.bow_repeater_title" : "Repetidor", + "hud.skill.bow_repeater" : "Atira mais rápido quanto mais você continuar atirando", + "hud.skill.bow_repeater_damage_title" : "Dano do Repetidor", + "hud.skill.bow_repeater_damage" : "Aumenta o dano em {boost}%{SP}", + "hud.skill.bow_repeater_cost_title" : "Custo do Repetidor", + "hud.skill.bow_repeater_cost" : "Reduz o custo de energia da repetição em {boost}%{SP}", + "hud.skill.bow_repeater_speed_title" : "Velocidade do Repetidor", + "hud.skill.bow_repeater_speed" : "Aumenta a taxa na qual você atira flechas em {boost}%{SP}", + "hud.skill.bow_shotgun_unlock_title" : "Desbloquear Shotgun", + "hud.skill.bow_shotgun_unlock" : "Desbloqueia a habilidade de atirar múltiplas flechas ve uma vez{SP}", + "hud.skill.bow_shotgun_damage_title" : "Dano da Shotgun", + "hud.skill.bow_shotgun_damage" : "Aumenta o dano infligido em {boost}%{SP}", + "hud.skill.bow_shotgun_cost_title" : "Custo da Shotgun", + "hud.skill.bow_shotgun_cost" : "Diminui o custo da shotgun em {boost}%{SP}", + "hud.skill.bow_shotgun_arrow_count_title" : "Flechas da Shotgun", + "hud.skill.bow_shotgun_arrow_count" : "Aumenta o número de flechas na sequência em {boost}{SP}", + "hud.skill.bow_shotgun_spread_title" : "Espalhamento da Shotgun", + "hud.skill.bow_shotgun_spread" : "Diminui quanto as flechas se espalham em {boost}%{SP}", // Martelo "hud.skill.hmr_leap_radius_title" : "Raio do Salto", "hud.skill.hmr_leap_radius" : "Aumenta o raio da pancada no chão em {boost} metro{SP}", diff --git a/assets/voxygen/i18n/pt_BR/hud/trade.ron b/assets/voxygen/i18n/pt_BR/hud/trade.ron index 0fe22e0d8c..aeba6ce421 100644 --- a/assets/voxygen/i18n/pt_BR/hud/trade.ron +++ b/assets/voxygen/i18n/pt_BR/hud/trade.ron @@ -23,6 +23,7 @@ "hud.trade.tooltip_hint_2": "", "hud.trade.your_offer": "Sua oferta", "hud.trade.their_offer": "Oferta do outro", + "hud.trade.amount_input": "Selecione um item" }, diff --git a/assets/voxygen/i18n/pt_BR/main.ron b/assets/voxygen/i18n/pt_BR/main.ron index 488150abea..0d4dffff93 100644 --- a/assets/voxygen/i18n/pt_BR/main.ron +++ b/assets/voxygen/i18n/pt_BR/main.ron @@ -10,6 +10,7 @@ "main.connecting": "Conectando", "main.creating_world": "Criando Mundo", "main.tip": "Dica:", + "main.unbound_key_tip": "não vinculado", // Mensagem de boas vindas que é exibida assim que o Veloren é iniciado "main.notice": r#"Bem-vindo a versão alfa de Veloren! diff --git a/assets/voxygen/i18n/pt_PT/hud/settings.ron b/assets/voxygen/i18n/pt_PT/hud/settings.ron index b99666d496..cffb2f665d 100644 --- a/assets/voxygen/i18n/pt_PT/hud/settings.ron +++ b/assets/voxygen/i18n/pt_PT/hud/settings.ron @@ -19,10 +19,7 @@ "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", diff --git a/assets/voxygen/i18n/ru_RU/common.ron b/assets/voxygen/i18n/ru_RU/common.ron index 2fd023952e..ad308f0957 100644 --- a/assets/voxygen/i18n/ru_RU/common.ron +++ b/assets/voxygen/i18n/ru_RU/common.ron @@ -84,7 +84,8 @@ "common.tool.farming": "Инструмент", "common.tool.pick": "Кирка", "common.tool.mining": "Инструмент добычи", - "common.kind.modular_component": "Компонент", + "common.kind.modular_component": "Модульный компонент", + "common.kind.modular_component_partial": "Компонент", "common.kind.glider": "Дельтаплан", "common.kind.consumable": "Расходуемый", "common.kind.throwable": "Можно бросить", @@ -101,6 +102,9 @@ "common.stats.power": "Сила", "common.stats.speed": "Скорость", "common.stats.poise": "Равновесие", + "common.stats.range": "Дистанция", + "common.stats.energy_efficiency": "Энергоэффективность", + "common.stats.buff_strength": "Увеличение силы", "common.stats.crit_chance": "Крит шанс", "common.stats.crit_mult": "Множитель крита", "common.stats.armor": "Броня", diff --git a/assets/voxygen/i18n/ru_RU/hud/bag.ron b/assets/voxygen/i18n/ru_RU/hud/bag.ron index 0155eb0701..d1251d25ec 100644 --- a/assets/voxygen/i18n/ru_RU/hud/bag.ron +++ b/assets/voxygen/i18n/ru_RU/hud/bag.ron @@ -34,16 +34,16 @@ "hud.bag.combat_rating": "Боевой рейтинг", "hud.bag.protection": "Защита", "hud.bag.stun_res": "Устойчивость к оглушению", + "hud.bag.stealth": "Стелс", "hud.bag.combat_rating_desc": "Рассчитано с учетом вашего\nоборудования и здоровья.", "hud.bag.protection_desc": "Снижение урона за счет брони", "hud.bag.stun_res_desc": "Устойчивость к оглушению от последовательных ударов.\nВосстанавливается как энергия.", - "hud.bag.sort_by_name": "Сортировать по имени", + "hud.bag.sort_by_name": "Сортировать по имени", // force update "hud.bag.sort_by_quality": "Сортировать по качеству", - "hud.bag.sort_by_category": "Сортировать по категории", + "hud.bag.sort_by_category": "Сортировать по категории", // force update }, vector_map: { } ) - diff --git a/assets/voxygen/i18n/ru_RU/hud/crafting.ron b/assets/voxygen/i18n/ru_RU/hud/crafting.ron index 2ef24d2fa3..ac1d8a6528 100644 --- a/assets/voxygen/i18n/ru_RU/hud/crafting.ron +++ b/assets/voxygen/i18n/ru_RU/hud/crafting.ron @@ -34,6 +34,17 @@ "hud.crafting.tabs.processed_material": "Материалы", "hud.crafting.dismantle_title": "Разборка", "hud.crafting.dismantle_explanation" : "Наведите курсор на предмет что бы увидеть\nчто вы можете получить.\n\nДвойное нажатие для начала разборки.", + "hud.crafting.modular_desc": "Перетащите сюда часть предметов, чтобы создать оружие.", + "hud.crafting.mod_weap_prim_slot_title": "Основной компонент оружия", + "hud.crafting.mod_weap_prim_slot_desc": "Поместите сюда основной компонент оружия (например клинок меча, топорище, или плечо лука).", + "hud.crafting.mod_weap_sec_slot_title": "Вторичный компонент оружия", + "hud.crafting.mod_weap_sec_slot_desc": "Поместите сюда вторичный компонент оружи (например рукоять меча, рукоять лука или сердцевину посоха).", + "hud.crafting.mod_comp_metal_prim_slot_title": "Металлический слиток", + "hud.crafting.mod_comp_metal_prim_slot_desc": "Положите сюда металлический слиток, только определенные металлы можно использовать для изготовления оружия.", + "hud.crafting.mod_comp_wood_prim_slot_title": "Дерево", + "hud.crafting.mod_comp_wood_prim_slot_desc": "Положите сюда дерево, только определенное дерево можно использовать для изготовления оружия.", + "hud.crafting.mod_comp_sec_slot_title": "Животный материал", + "hud.crafting.mod_comp_sec_slot_desc": "При желании поместите сюда животный материал, только определенные ингредиенты можно использовать для улучшения оружия.", }, diff --git a/assets/voxygen/i18n/ru_RU/hud/misc.ron b/assets/voxygen/i18n/ru_RU/hud/misc.ron index 498c60a7a0..a62de56bdd 100644 --- a/assets/voxygen/i18n/ru_RU/hud/misc.ron +++ b/assets/voxygen/i18n/ru_RU/hud/misc.ron @@ -10,6 +10,8 @@ "hud.waypoint_saved": "Путевая точка сохранена", "hud.sp_arrow_txt": "SP", "hud.inventory_full": "Инвентарь полон", + "hud.someone_else": "Кто-нибудь другой", + "hud.owned_by_for_secs": "Принадлежит {name} в течение {secs} сек.", "hud.press_key_to_show_keybindings_fmt": "[{key}] Сочетания клавиш", "hud.press_key_to_toggle_lantern_fmt": "[{key}] Фонарь", @@ -26,7 +28,7 @@ "hud.tutorial_elements": r#"Крафт"#, "hud.temp_quest_headline": r#"Привет путешественник!"#, -"hud.temp_quest_text": r#"Для начала, вы можете осматреть эту деревню и собрать немного припасов. +"hud.temp_quest_text": r#"Для начала, вы можете осматреть эту деревню и собрать немного припасов. // force update Вы можете взять с собой в путешествие все, что вам нужно! diff --git a/assets/voxygen/i18n/ru_RU/hud/settings.ron b/assets/voxygen/i18n/ru_RU/hud/settings.ron index d2c0272f79..64c6ffc193 100644 --- a/assets/voxygen/i18n/ru_RU/hud/settings.ron +++ b/assets/voxygen/i18n/ru_RU/hud/settings.ron @@ -25,10 +25,7 @@ "hud.settings.buffs_mmap": "Баффы возле миникарте", "hud.settings.toggle_bar_experience": "Переключить панель опыта", "hud.settings.scrolling_combat_text": "Отображение урона/исцеления", - "hud.settings.single_damage_number": "Отдельно нанесённый", - "hud.settings.cumulated_damage": "Суммарно нанесённый", "hud.settings.incoming_damage": "Отдельно полученный", - "hud.settings.cumulated_incoming_damage": "Суммарно полученный", "hud.settings.speech_bubble": "Диалоговое окно", "hud.settings.speech_bubble_self": "Показывать каждое отдельное окно", "hud.settings.speech_bubble_dark_mode": "Диалоговое окно (тёмная тема)", @@ -39,7 +36,7 @@ "hud.settings.percentages": "Проценты", "hud.settings.chat": "Чат", "hud.settings.background_opacity": "Прозрачность фона", - "hud.settings.chat_character_name": "Имена персонажей в чате", + "hud.settings.chat_character_name": "Имена персонажей в чате", // force update "hud.settings.loading_tips": "Советы при загрузке", "hud.settings.reset_interface": "По умолчанию", @@ -56,9 +53,11 @@ "hud.settings.player_physics_behavior": "Физика игрока (экспериментальная)", "hud.settings.stop_auto_walk_on_input": "Остановить автоходьбу при движении", "hud.settings.auto_camera": "Авто-камера", + "hud.settings.bow_zoom": "Приближение при натягивании тетивы", "hud.settings.reset_gameplay": "По умолчанию", "hud.settings.view_distance": "Дальность\nвидимости", + "hud.settings.lod_distance": "Дистанция LoD", "hud.settings.sprites_view_distance": "Дальность\nвидимости спрайтов", "hud.settings.figures_view_distance": "Дальность\nвидимости объектов", "hud.settings.maximum_fps": "Максимальный FPS", diff --git a/assets/voxygen/i18n/ru_RU/hud/skills.ron b/assets/voxygen/i18n/ru_RU/hud/skills.ron index 6d1f8ff6de..47b38b4a88 100644 --- a/assets/voxygen/i18n/ru_RU/hud/skills.ron +++ b/assets/voxygen/i18n/ru_RU/hud/skills.ron @@ -57,13 +57,13 @@ "hud.skill.sc_heal_title": "Луч жизни", "hud.skill.sc_heal": "Исцелите союзников, используя кровь своих врагов. Требует комбо для активации", "hud.skill.sc_heal_heal_title": "Лечение", - "hud.skill.sc_heal_heal": "Увеличивает эффективность исцеления союзников на {boost}%{SP}", + "hud.skill.sc_heal_heal": "Увеличивает эффективность исцеления союзников на {boost}%{SP}", // force update "hud.skill.sc_heal_cost_title": "Расход энергии", "hud.skill.sc_heal_cost": "Исцеление требует на {boost}% меньше энергии{SP}", "hud.skill.sc_heal_duration_title": "Длительность эффекта", "hud.skill.sc_heal_duration": "Эффекты ауры исцеления длятся на {boost}% дольше longer{SP}", "hud.skill.sc_heal_range_title": "Дальность", - "hud.skill.sc_heal_range": "Ваш луч на {boost}% дальше{SP}", + "hud.skill.sc_heal_range": "Ваш луч на {boost}% дальше{SP}", // force update "hud.skill.sc_wardaura_unlock_title": "Аура защиты", "hud.skill.sc_wardaura_unlock": "Позволяет вам повысить защиту своих союзников (и себя){SP}", "hud.skill.sc_wardaura_strength_title": "Сила", diff --git a/assets/voxygen/i18n/ru_RU/hud/trade.ron b/assets/voxygen/i18n/ru_RU/hud/trade.ron index 7913effbee..74b519bf2a 100644 --- a/assets/voxygen/i18n/ru_RU/hud/trade.ron +++ b/assets/voxygen/i18n/ru_RU/hud/trade.ron @@ -16,7 +16,7 @@ "hud.trade.result.completed": "Сделка успешно завершена.", "hud.trade.result.declined": "Сделка отклонена.", "hud.trade.result.nospace": "Недостаточно места для завершения сделки.", - "hud.trade.buy_price": "Цена покупки", + "hud.trade.buy_price": "Цена покупки", // force update "hud.trade.sell_price": "Цена продажи", "hud.trade.coin": "Монеты", "hud.trade.tooltip_hint_1": "", diff --git a/assets/voxygen/i18n/sr_SR/hud/settings.ron b/assets/voxygen/i18n/sr_SR/hud/settings.ron index a8d227720d..5ecf1da4dd 100644 --- a/assets/voxygen/i18n/sr_SR/hud/settings.ron +++ b/assets/voxygen/i18n/sr_SR/hud/settings.ron @@ -24,10 +24,7 @@ "hud.settings.buffs_mmap": "Бафови на Мапици", "hud.settings.toggle_bar_experience": "Ис/Укључи Траку са Искуством", "hud.settings.scrolling_combat_text": "Померајући Борбени Текст ", - "hud.settings.single_damage_number": "Појединачне Ране", - "hud.settings.cumulated_damage": "Акумулиране Ране", "hud.settings.incoming_damage": "Долазне Ране", - "hud.settings.cumulated_incoming_damage": "Акумулирана Долазна Ране", "hud.settings.speech_bubble": "Говорни Облачић", "hud.settings.speech_bubble_dark_mode": "Тамни Говорни Облачић", "hud.settings.speech_bubble_icon": "Иконица Говорног Облачића", diff --git a/assets/voxygen/i18n/sv_SE/hud/settings.ron b/assets/voxygen/i18n/sv_SE/hud/settings.ron index 1c613f8315..b81dcfa598 100644 --- a/assets/voxygen/i18n/sv_SE/hud/settings.ron +++ b/assets/voxygen/i18n/sv_SE/hud/settings.ron @@ -25,10 +25,7 @@ "hud.settings.buffs_mmap": "Effekter vid Minikartan", "hud.settings.toggle_bar_experience": "Visa/dölj erfarenhetsmätare", "hud.settings.scrolling_combat_text": "Rullande stridstext", - "hud.settings.single_damage_number": "Ett enda skadenummer", - "hud.settings.cumulated_damage": "Sammanlagd skada", "hud.settings.incoming_damage": "Inkommande skada", - "hud.settings.cumulated_incoming_damage": "Sammanlagd inkommande skada", "hud.settings.speech_bubble": "Pratbubbla", "hud.settings.speech_bubble_self": "Visa egna pratbubblor", "hud.settings.speech_bubble_dark_mode": "Pratbubbla mörkt läge", diff --git a/assets/voxygen/i18n/th_TH/_manifest.ron b/assets/voxygen/i18n/th_TH/_manifest.ron new file mode 100644 index 0000000000..f6509a4c62 --- /dev/null +++ b/assets/voxygen/i18n/th_TH/_manifest.ron @@ -0,0 +1,32 @@ +/// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Localization for ไทย (Thai) +( + metadata: ( + language_name: "Thai", + language_identifier: "th_TH", + ), + convert_utf8_to_ascii: false, + fonts: { + "opensans": Font ( + asset_key: "voxygen.font.Sarabun-Regular", + scale_ratio: 1.0, + ), + "metamorph": Font ( + asset_key: "voxygen.font.Sarabun-Regular", + scale_ratio: 1.0, + ), + "alkhemi": Font ( + asset_key: "voxygen.font.Sarabun-Regular", + scale_ratio: 1.0, + ), + "wizard": Font ( + asset_key: "voxygen.font.Sarabun-Regular", + scale_ratio: 1.0, + ), + "cyri": Font ( + asset_key: "voxygen.font.Sarabun-Regular", + scale_ratio: 1.0, + ), + } +) diff --git a/assets/voxygen/i18n/th_TH/buff.ron b/assets/voxygen/i18n/th_TH/buff.ron new file mode 100644 index 0000000000..8e4d85b9fa --- /dev/null +++ b/assets/voxygen/i18n/th_TH/buff.ron @@ -0,0 +1,54 @@ +/// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Localization for ไทย (Thai) +( + string_map: { + // Buffs + "buff.remove": "กดเพื่อปิด", + "buff.title.missing": "ไม่มีชื่อ", + "buff.desc.missing": "ไม่มีคำบรรยาย", + "buff.title.heal": "สถานะฟื้นฟู", + "buff.desc.heal": "ฟื้นฟูพลังชีวิตเป็นช่วง ๆ", + "buff.title.potion": "ยา", + "buff.desc.potion": "กำลังดื่มด่ำกับยา...", + "buff.title.saturation": "สถานะท้องอิ่ม", + "buff.desc.saturation": "พื้นฟูพลังชีวิตเป็นช่วง ๆ เมื่อทานอาหาร", + "buff.title.campfire_heal": "พักผ่อน ณ แคมป์ไฟ", + "buff.desc.campfire_heal": "เมื่อนั่งพักที่แคมป์ไฟจะช่วยพื้นฟูพลังชีวิต {rate}% ต่อวินาที", + "buff.title.invulnerability": "สถานะอมตะ", + "buff.desc.invulnerability": "ไม่เสียพลังชีวิตเมื่อถูกโจมตี", + "buff.title.protectingward": "สถานะพรคุ้มครอง", + "buff.desc.protectingward": "พระกำลังคุ้มครอง เสียพลังชีวิตเล็กน้อยเมื่อถูกโจมตี", + "buff.title.frenzied": "สถานะบ้าคลั่ง", + "buff.desc.frenzied": "วิ่งเร็วขึ้นอย่างมาก ความเสียหลายเล้กน้อยไม่สามารถหยุดคุณได้", + "buff.title.hastened": "สถานะเครื่องติด", + "buff.desc.hastened": "ความเร็วในการโจมตีและเคลื่อนที่เพิ่มขึ้น", + // Debuffs + "buff.title.bleed": "สถานะเลือดไหล", + "buff.desc.bleed": "ได้รับความเสียหายแบบธรรมดา ๆ", + "buff.title.cursed": "สถานะต้องสาป", + "buff.desc.cursed": "ฉันขอฉาบแก!", + "buff.title.burn": "สถานะไฟลุก", + "buff.desc.burn": "ก้าวแรกไม่เป็นไร ก้าวต่อไป...", + "buff.title.crippled": "สถานะขาหัก", + "buff.desc.crippled": "ขาได้รับบาดเจ็บ เคลื่อนไหวได้ช้าลง", + "buff.title.frozen": "สถานะแช่แข็ง", + "buff.desc.frozen": "ความเร็วในการโจมตีและเคลื่อนที่ลดลง", + "buff.title.wet": "สถานะเปียก", + "buff.desc.wet": "พื้นลื่นมาก ๆ ระวังหกล้ม", + "buff.title.ensnared": "สถานะพฤกษาบ่วงรัด", + "buff.desc.ensnared": "เถาวัลย์กำลังรัดขา ขยับไปไหนไม่ได้เลย", + // Buffs stats + "buff.stat.health": "ฟื้นฟูพลังชีวิต {str_total} หน่วย", + "buff.stat.increase_max_energy": "เพิ่มพลังงานสูงสุด {strength} หน่วย", + "buff.stat.increase_max_health": "เพิ่มพลังชีวิตสูงสุด {strength} หน่วย", + "buff.stat.invulnerability": "มอบ สถานะอมตา", + // Text + "buff.text.over_seconds": "ในช่วงเวลา {dur_secs} วินาที", + "buff.text.for_seconds": "เป็นเวลา {dur_secs} วินาที", + }, + + + vector_map: { + } +) diff --git a/assets/voxygen/i18n/th_TH/char_selection.ron b/assets/voxygen/i18n/th_TH/char_selection.ron new file mode 100644 index 0000000000..5dc52f5f5c --- /dev/null +++ b/assets/voxygen/i18n/th_TH/char_selection.ron @@ -0,0 +1,32 @@ +/// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Localization for ไทย (Thai) +( + string_map: { + "char_selection.loading_characters": "อยู่ระหว่างการโหลดตัวละคร ...", + "char_selection.delete_permanently": "ลบตัวละครทิ้งหรือไม่?", + "char_selection.deleting_character": "อยู่ระหว่างการลบตัวละคร ...", + "char_selection.change_server": "เปลี่ยนเซิร์ฟเวอร์", + "char_selection.enter_world": "เข้าสู่โลก", + "char_selection.logout": "ออกจากเกม", + "char_selection.create_new_character": "สร้างตัวละครใหม่", + "char_selection.creating_character": "อยู่ระหว่างการสร้างตัวละคร...", + "char_selection.character_creation": "ปรับแต่งตัวละคร", + "char_selection.human_default": "มนุษย์ธรรมดา", + "char_selection.level_fmt": "เลเวล {level_nb}", + "char_selection.uncanny_valley": "ป่าดงพงไพร", + "char_selection.plains_of_uncertainty": "ที่ราบที่ไม่น่าไว้วางใจ", + "char_selection.beard": "หนวด", + "char_selection.hair_style": "ทรงผม", + "char_selection.hair_color": "สีผม", + "char_selection.eye_color": "สีตา", + "char_selection.skin": "ผิว", + "char_selection.eyeshape": "รายละเอียดดวงตา", + "char_selection.accessories": "เครื่องประดับ", + "char_selection.create_info_name": "ตัวละครต้องมีชื่อนะ!", + "char_selection.version_mismatch": "คำเตือน! เวอร์ชั่นเกมของคุณกับของเซิร์ฟเวอร์ไม่ตรงกัน กรุณาอัปเดทเกม", + }, + + vector_map: { + } +) diff --git a/assets/voxygen/i18n/th_TH/common.ron b/assets/voxygen/i18n/th_TH/common.ron new file mode 100644 index 0000000000..913fb126e4 --- /dev/null +++ b/assets/voxygen/i18n/th_TH/common.ron @@ -0,0 +1,130 @@ +/// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Localization for ไทย (Thai) +( + string_map: { + // Texts used in multiple locations with the same formatting + "common.username": "ชื่อผู้ใช้", + "common.singleplayer": "โหมดเล่นคนเดียว", + "common.multiplayer": "โหมดเล่นหลายคน", + "common.servers": "รายชื่อเซิร์ฟเวอร์", + "common.quit": "ปิดเกม", + "common.settings": "ตั้งค่า", + "common.languages": "ภาษา", + "common.interface": "หน้าจอ", + "common.gameplay": "เกมเพลย์", + "common.controls": "ปุ่มควบคุม", + "common.video": "จอภาพ", + "common.sound": "เสียง", + "common.chat": "พูดคุย", + "common.resume": "เริ่มเกมต่อ", + "common.characters": "ตัวละคร", + "common.close": "ปิด", + "common.yes": "ตกลก", + "common.no": "ปฏิเสธ", + "common.back": "กลับ", + "common.create": "สร้าง", + "common.okay": "โอเค", + "common.add": "เพิ่ม", + "common.accept": "ยอมรับ", + "common.decline": "ปฏิเสธ", + "common.disclaimer": "ระวัง", + "common.cancel": "ยกเลิก", + "common.none": "ไม่มี", + "common.error": "ผิดพลาด", + "common.fatal_error": "ผิดพลาดรุนแรง", + "common.you": "คุณ", + "common.automatic": "ออโต้", + "common.random": "สุ่ม", + "common.empty": "ว่าง", + "common.confirm": "ตกลง", + "common.delete_server": "ลบเซิร์ฟเวอร์", + + // Settings Window title + "common.interface_settings": "ตั้งค่าหน้าจอ", + "common.gameplay_settings": "ตั้งค่าเกมเพลย์", + "common.controls_settings": "ตั้งค่าปุ่มควบคุม", + "common.video_settings": "ตั้งค่ากราฟฟิก", + "common.sound_settings": "ตั้งค่าเสียง", + "common.language_settings": "ตั้งค่าภาษา", + "common.chat_settings": "ตั้งค่าการสนทนา", + + // Message when connection to the server is lost + "common.connection_lost": r#"โอ๊ะโอ้ว การเชื่อมต่อจะถูกจากเซิร์ฟเวอร์ +อาจะเป็นเพราะเซิร์ฟเวอร์ถูกปิด +หรือเพราะตัวเกมไม่ใช่เวอร์ชั่นล่าสุด"#, + + + "common.species.orc": "ออร์ค", + "common.species.human": "มนุษย์", + "common.species.dwarf": "คนแคระ", + "common.species.elf": "เอลฟ์", + "common.species.undead": "ภูตผี", + "common.species.danari": "ดานาริ", + + "common.weapons.axe": "ขวาน", + "common.weapons.dagger": "มีดสั้น", + "common.weapons.greatsword": "ดาบใหญ่", + "common.weapons.shortswords": "ดาบสั้น", + "common.weapons.sword": "ดาบ", + "common.weapons.staff": "คถาอัคนี", + "common.weapons.bow": "ธนู", + "common.weapons.hammer": "ค้อน", + "common.weapons.general": "ทั่วไป", + "common.weapons.sceptre": "คถาอภิรักษ์", + "common.weapons.shield": "โล่", + "common.weapons.spear": "หอก", + "common.weapons.hammer_simple": "ค้อนอย่างง่าย", + "common.weapons.sword_simple": "ดาบอย่างง่าย", + "common.weapons.staff_simple": "คถาอัคนีอย่างง่าย", + "common.weapons.axe_simple": "ขวานอย่างง่าย", + "common.weapons.bow_simple": "ธนูอย่างง่าย", + "common.weapons.unique": "แปลกไม่เหมือนใคร", + "common.tool.debug": "ดีบัค", + "common.tool.farming": "เครื่องมือการเกษตร", + "common.tool.pick": "พลั่ว", + "common.tool.mining": "การขุดหิน", + "common.kind.modular_component": "ส่วนประกอบ", + "common.kind.modular_component_partial": "วัสดุ", + "common.kind.glider": "เครื่องร่อน", + "common.kind.consumable": "ของใช้", + "common.kind.throwable": "ของใช้ชนิดปา", + "common.kind.utility": "อุปกรณ์ของใช้", + "common.kind.ingredient": "วัตถุดิบ", + "common.kind.lantern": "ตะเกียง", + "common.hands.one": "จับมือเดียว", + "common.hands.two": "จับสองมือ", + + "common.rand_appearance": "สุ่มภาพลักษณ์", + "common.rand_name": "สุ่มชื่อ", + + "common.stats.combat_rating": "ค่าอุปกรณ์", + "common.stats.power": "พลังโจมตี", + "common.stats.speed": "ความเร็ว", + "common.stats.poise": "ค่าทรงตัว", + "common.stats.range": "ระยะโจมตี", + "common.stats.energy_efficiency": "ประสิทธิภาพพลังงาน", + "common.stats.buff_strength": "เสริมพลังความแข็งแกร่ง", + "common.stats.crit_chance": "โอกาสคริติคอล", + "common.stats.crit_mult": "ความรุนแรงคริติคอล", + "common.stats.armor": "เกราะ", + "common.stats.poise_res":"ความคงทน", + "common.stats.energy_max": "พลังงานสูงสุด", + "common.stats.energy_reward": "อัตราฟื้นฟูพลังงาน", + "common.stats.crit_power": "ความรุนแรงของคริติคอล", + "common.stats.stealth": "ลดการถูกตรวจจับ", + "common.stats.slots": "จำนวนช่อง", + + "common.material.metal": "โลหะ", + "common.material.wood": "ไม้", + "common.material.stone": "หิน", + "common.material.cloth": "ผ้า", + "common.material.hide": "หนังสัตว์", + + "common.sprite.chest": "กล่องสมบัติ", + }, + + + vector_map: { + } +) diff --git a/assets/voxygen/i18n/th_TH/esc_menu.ron b/assets/voxygen/i18n/th_TH/esc_menu.ron new file mode 100644 index 0000000000..70527325ba --- /dev/null +++ b/assets/voxygen/i18n/th_TH/esc_menu.ron @@ -0,0 +1,13 @@ +/// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Localization for ไทย (Thai) +( + string_map: { + "esc_menu.logout": "ออกจากระบบ", + "esc_menu.quit_game": "ออกจากเกม", + }, + + + vector_map: { + } +) diff --git a/assets/voxygen/i18n/th_TH/gameinput.ron b/assets/voxygen/i18n/th_TH/gameinput.ron new file mode 100644 index 0000000000..56fef5e92c --- /dev/null +++ b/assets/voxygen/i18n/th_TH/gameinput.ron @@ -0,0 +1,77 @@ +/// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Localization for ไทย (Thai) +( + string_map: { + "gameinput.primary": "โจมตีปกติ", + "gameinput.secondary": "โจมตีพิเศษ", + "gameinput.block": "บล็อค", + "gameinput.slot1": "แถบของใช้ช่องที่ 1", + "gameinput.slot2": "แถบของใช้ช่องที่ 2", + "gameinput.slot3": "แถบของใช้ช่องที่ 3", + "gameinput.slot4": "แถบของใช้ช่องที่ 4", + "gameinput.slot5": "แถบของใช้ช่องที่ 5", + "gameinput.slot6": "แถบของใช้ช่องที่ 6", + "gameinput.slot7": "แถบของใช้ช่องที่ 7", + "gameinput.slot8": "แถบของใช้ช่องที่ 8", + "gameinput.slot9": "แถบของใช้ช่องที่ 9", + "gameinput.slot10": "แถบของใช้ช่องที่ 10", + "gameinput.swaploadout": "สลับอุปกรณ์สวมใส่", + "gameinput.togglecursor": "เปิด/ปิดเมาส์", + "gameinput.help": "เปิด/ปิดข้อความช่วยเหลือ", + "gameinput.toggleinterface": "เปิด/ปิดหน้าต่างข้อมูล", + "gameinput.toggledebug": "เปิด/ปิดข้อมูลดีบัค", + "gameinput.toggle_egui_debug": "เปิด/ปิดข้อมูลดีบัคของ GUI", + "gameinput.togglechat": "เปิด/ปิดช่องสนทนา", + "gameinput.screenshot": "ถ่ายภาพหน้าจอ", + "gameinput.toggleingameui": "เปิด/ปิดชื่อผู้เล่น", + "gameinput.fullscreen": "ใช้โหมด Fullscreen", + "gameinput.moveforward": "เดินหน้า", + "gameinput.moveleft": "เดินทางซ้าย", + "gameinput.moveright": "เดินทางขวา", + "gameinput.moveback": "ถอยหลัง", + "gameinput.jump": "กระโดด", + "gameinput.glide": "ใช้เครื่องร่อน", + "gameinput.roll": "กลิ้ง", + "gameinput.climb": "ปีน", + "gameinput.climbdown": "ปีนลง", + "gameinput.wallleap": "กระโดดข้ามกำแพง", + "gameinput.togglelantern": "จุด/ดับตะเกียง", + "gameinput.mount": "ขี่สัตว์เลี้ยง", + "gameinput.chat": "สนทนากับผู้เล่น", + "gameinput.command": "คำสั่ง", + "gameinput.escape": "หนีจากพื้นที่", + "gameinput.map": "แผนที่", + "gameinput.bag": "กระเป๋า", + "gameinput.trade": "แลกของ", + "gameinput.social": "สังคม", + "gameinput.sit": "นั่ง", + "gameinput.spellbook": "หนังสือเวทย์มนต์", + "gameinput.settings": "การตั้งค่า", + "gameinput.respawn": "เกิดใหม่", + "gameinput.charge": "ชสร์ต", + "gameinput.togglewield": "สลับมือ", + "gameinput.interact": "สัมผัสสิ่งของ", + "gameinput.freelook": "ปลดล็อคกล้อง", + "gameinput.autowalk": "เดินหน้าอัตโนมัต", + "gameinput.cameraclamp": "ล็อคหน้าจอ", + "gameinput.dance": "เต้น", + "gameinput.select": "เลือกสิ่งต่าง ๆ", + "gameinput.acceptgroupinvite": "ยอมรับคำเชิญเข้าปาร์ตี้", + "gameinput.declinegroupinvite": "ปฏิเสธคำเชิญเข้าปาร์ตี้", + "gameinput.cyclecamera": "หมุนมุมกล้อง", + "gameinput.crafting": "สร้างสิ่งของ", + "gameinput.fly": "บิน", + "gameinput.sneak": "ย่อง", + "gameinput.swimdown": "ดำน้ำ", + "gameinput.swimup": "ขึ้นสู่ผิวน้ำ", + "gameinput.mapzoomin": "ซูมเข้าแผนที่", + "gameinput.mapzoomout": "ซูมออกแผนที่", + "gameinput.greet": "ทักทาย", + "gameinput.map.locationmarkerbutton": "ปักหมุดในแผนที่" + }, + + + vector_map: { + } +) diff --git a/assets/voxygen/i18n/th_TH/hud/bag.ron b/assets/voxygen/i18n/th_TH/hud/bag.ron new file mode 100644 index 0000000000..86467a01ee --- /dev/null +++ b/assets/voxygen/i18n/th_TH/hud/bag.ron @@ -0,0 +1,49 @@ +/// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Localization for ไทย (Thai) +( + string_map: { + // Inventory + "hud.bag.inventory": "สัมภาระของ {playername}", + "hud.bag.stats_title": "ข้อมูลสถานะของ {playername}", + "hud.bag.exp": "ค่าประสบการณ์", + "hud.bag.armor": "เกราะ", + "hud.bag.stats": "สถานะ", + "hud.bag.head": "ศรีษะ", + "hud.bag.neck": "คอ", + "hud.bag.tabard": "ชุดทับเกราะ", + "hud.bag.shoulders": "ไหล่", + "hud.bag.chest": "ลำตัว", + "hud.bag.hands": "มือ", + "hud.bag.lantern": "ตะเกียง", + "hud.bag.glider": "เครื่องร่อน", + "hud.bag.belt": "เข็มขัด", + "hud.bag.ring": "แหวน", + "hud.bag.back": "หลัง", + "hud.bag.legs": "ขา", + "hud.bag.feet": "เท่า", + "hud.bag.mainhand": "มือข้างถนัด", + "hud.bag.offhand": "มืออีกข้าง", + "hud.bag.inactive_mainhand": "มือข้างถนัด (ไม่ได้ใช้งาน)", + "hud.bag.inactive_offhand": "มืออีกข้าง (ไม่ได้ใช้งาน)", + "hud.bag.swap_equipped_weapons_title": "สลับอาวุธที่ส่วมอยู่", + "hud.bag.swap_equipped_weapons_desc": "กด {key}", + "hud.bag.bag": "กระเป๋า", + "hud.bag.health": "พลังชีวิต", + "hud.bag.energy": "พลังงาน", + "hud.bag.combat_rating": "ค่าอุปกรณ์", + "hud.bag.protection": "ค่าการป้องกัน", + "hud.bag.stun_res": "ความต้านทานต่อการถูกสตัน", + "hud.bag.stealth": "อัตราการตรวจับ", + "hud.bag.combat_rating_desc": "นับจากอุปกรณ์ที่คุณกำลังสวมใส่และพลังชีวิต", + "hud.bag.protection_desc": "ลดความเสียหายที่ได้รับ", + "hud.bag.stun_res_desc": "ความทนทานต่อการถูกสตันเมื่อถูกโจมตี พื้นฟูเหมือนพลังชีวิตและพลังงาน", + "hud.bag.sort_by_name": "จัดเรียงตามชื่อ", + "hud.bag.sort_by_quality": "จัดเรียงตามคุณภาพ", + "hud.bag.sort_by_category": "จัดเรียงตามประเภท", + }, + + + vector_map: { + } +) diff --git a/assets/voxygen/i18n/th_TH/hud/char_window.ron b/assets/voxygen/i18n/th_TH/hud/char_window.ron new file mode 100644 index 0000000000..110cb95581 --- /dev/null +++ b/assets/voxygen/i18n/th_TH/hud/char_window.ron @@ -0,0 +1,21 @@ +/// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Localization for ไทย (Thai) +( + string_map: { + "character_window.character_name": "ชื่อตัวละคร", + // Character stats + "character_window.character_stats": r#"ความอึด + +ความฟิต + +ความมุ่งมั่น + +พลังป้องกัน +"#, + }, + + + vector_map: { + } +) diff --git a/assets/voxygen/i18n/th_TH/hud/chat.ron b/assets/voxygen/i18n/th_TH/hud/chat.ron new file mode 100644 index 0000000000..10fce985c0 --- /dev/null +++ b/assets/voxygen/i18n/th_TH/hud/chat.ron @@ -0,0 +1,49 @@ +/// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Localization for ไทย (Thai) +( + string_map: { + "hud.chat.all": "ทั้งหมด", + "hud.chat.chat_tab_hover_tooltip": "คลิกขวาเพื่อตั้งค่า", + + // Debuff outcomes + "hud.outcome.burning": "เสียชีวิต เพราะถูกไฟคลอก", + "hud.outcome.curse": "เสียชีวิต เพราะถูกคำสาป", + "hud.outcome.bleeding": "เสียชีวิต เพราะเลือดไหล", + "hud.outcome.crippled": "เสียชีวิต เพราะขาหัก", + "hud.outcome.frozen": "เสียชีวิต เพราะกลายเป็นไอศกรีมแช่แข็ง", + + // Chat outputs + "hud.chat.online_msg": "[{name}] กำลังออนไลน์", + "hud.chat.offline_msg": "[{name}] ออกจากเกม", + + "hud.chat.default_death_msg": "[{name}] เสียชีวิต", + "hud.chat.environmental_kill_msg": "name}] เสียชีวิตในสภาพแวดล้อม {environment}", + "hud.chat.fall_kill_msg": "[{name}] เสียชีวิต เพราะตกพื้นแรงไปหน่อย", + "hud.chat.suicide_msg": "[{name}] เสียชีวิต เพราะทำร้ายตัวเอง (???)", + + "hud.chat.died_of_pvp_buff_msg": "[{victim}] ถูกสังหารโดย [{attacker}] จากการใช้ {died_of_buff}", + "hud.chat.pvp_melee_kill_msg": "[{attacker}] สังหาร [{victim}]", + "hud.chat.pvp_ranged_kill_msg": "[{victim}] โดนลั่นหัวคม ๆ โดย [{attacker}]", + "hud.chat.pvp_explosion_kill_msg": "[{victim}] โดนระเบิดเป็นชิ้น ๆ โดย [{attacker}]", + "hud.chat.pvp_energy_kill_msg": "[{attacker}] สังหาร [{victim}] ด้วยไสยเวทย์", + + "hud.chat.died_of_buff_nonexistent_msg": "[{victim}] เสียชีวิต เพราะ {died_of_buff}", + + "hud.chat.died_of_npc_buff_msg": "[{victim}] ถูกสังหารโดย {attacker} จากการใช้ {died_of_buff} น่าเเห็นใจ", + "hud.chat.npc_melee_kill_msg": "{attacker} สังหาร [{victim}] น่าเเห็นใจ", + "hud.chat.npc_ranged_kill_msg": "[{victim}] โดนลั่นหัวคม ๆ โดย {attacker} น่าเห็นใจ", + "hud.chat.npc_explosion_kill_msg": "[{victim}] โดนระเบิดเป็นชิ้น ๆ โดย {attacker} น่าเเห็นใจ", + "hud.chat.npc_energy_kill_msg": "{attacker} สังหาร [{victim}] ด้วยไสยเวทย์ น่าเเห็นใจ", + "hud.chat.npc_other_kill_msg": "[{victim}] ถูกสังหารโดย {attacker} น่าเเห็นใจ", + + "hud.chat.loot_msg": "ได้รับ [{item}]", + "hud.chat.loot_fail": "กระเป๋าเต็มแล้ว", + "hud.chat.goodbye": "ลาก่อน", + "hud.chat.connection_lost": "ถูกตัดการเชื่อมต่อ เชื่อมต่อใหม่ในอีก {time} วินาที", + }, + + + vector_map: { + } +) diff --git a/assets/voxygen/i18n/th_TH/hud/crafting.ron b/assets/voxygen/i18n/th_TH/hud/crafting.ron new file mode 100644 index 0000000000..8f2d6f00d2 --- /dev/null +++ b/assets/voxygen/i18n/th_TH/hud/crafting.ron @@ -0,0 +1,53 @@ +/// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Localization for ไทย (Thai) +( + string_map: { + "hud.crafting": "สร้างสิ่งของ", + "hud.crafting.recipes": "สูตรการสร้าง", + "hud.crafting.ingredients": "วัตถุดิบ:", + "hud.crafting.craft": "สร้าง", + "hud.crafting.tool_cata": "สิ่งที่ต้องใช้:", + // Crafting Stations + "hud.crafting.req_crafting_station": "สิ่งที่ต้องใช้:", + "hud.crafting.anvil": "ทั่ง", + "hud.crafting.cauldron": "หม้อต้มยา", + "hud.crafting.cooking_pot": "หม้อธรรมดา", + "hud.crafting.crafting_bench": "โต๊ะของช่าง", + "hud.crafting.forge": "เตาหลอม", + "hud.crafting.loom": "กี่ทอผ้า", + "hud.crafting.spinning_wheel": "เครื่องกรอไหม", + "hud.crafting.tanning_rack": "ราวตากหนังสัตว์", + "hud.crafting.salvaging_station": "โต๊ะย่อย", + "hud.crafting.campfire": "แคมป์ไฟ", + // Tabs + "hud.crafting.tabs.all": "ทุกอย่าง", + "hud.crafting.tabs.armor": "เกราะ", + "hud.crafting.tabs.dismantle": "ย่อย", + "hud.crafting.tabs.food": "อาหาร", + "hud.crafting.tabs.glider": "เครื่องร่อย", + "hud.crafting.tabs.potion": "ยา", + "hud.crafting.tabs.tool": "เครื่องมือ", + "hud.crafting.tabs.utility": "อื่น ๆ", + "hud.crafting.tabs.weapon": "อาวุธ", + "hud.crafting.tabs.bag": "กระเป๋า", + "hud.crafting.tabs.processed_material": "แร่หลอมแล้วและอัญมนี", + "hud.crafting.dismantle_title": "การย่อย", + "hud.crafting.dismantle_explanation" : "เอาไปในชี้ที่กระเป๋าเพื่อดูไอเทมที่สามารถย่อยได้\nคลิกสองครั้งเพื่อย่อยไอเทม", + "hud.crafting.modular_desc": "หยิบส่วนประกอบมาวางเพื่อสร้างอาวุธ", + "hud.crafting.mod_weap_prim_slot_title": "ส่วนประกอบหลักของอาวุธ", + "hud.crafting.mod_weap_prim_slot_desc": "นำส่วนประกอบหลักของอาวุธมาวางที่นี้ (เช่น ตัวดาบ, หัวขวาน หรือคันธนู)", + "hud.crafting.mod_weap_sec_slot_title": "ส่วนประกอบรองของอาวุธ", + "hud.crafting.mod_weap_sec_slot_desc": "นำส่วนประกอบรองของอาวุธมาวางที่นี้ (เช่น ด้ามดาบ, ที่จับคันธนู, หรือแกนคถา).", + "hud.crafting.mod_comp_metal_prim_slot_title": "แท่งโลหะ", + "hud.crafting.mod_comp_metal_prim_slot_desc": "นำแท่งโลหะมาวางที่นี้ โลหะบางชนิดไม่สามารถนำมาประกอบเป็นอาวุธได้", + "hud.crafting.mod_comp_wood_prim_slot_title": "ไม้", + "hud.crafting.mod_comp_wood_prim_slot_desc": "นำไม้มาวางที่นี้ ไม้บางชนิดไม่สามารถนำมาประกอบอาวุธได้", + "hud.crafting.mod_comp_sec_slot_title": "สัตว์วัตถุ", + "hud.crafting.mod_comp_sec_slot_desc": "สามารถใช้ชิ้นส่วนสัตว์เพื่อเพิ่มประสิทธิภาพของอาวุธ ชิ้นส่วนจากสัตว์บางชนิดไม่สามารถนำมาใช้เพิ่มประสิทธิภาพได้", + }, + + + vector_map: { + } +) diff --git a/assets/voxygen/i18n/th_TH/hud/group.ron b/assets/voxygen/i18n/th_TH/hud/group.ron new file mode 100644 index 0000000000..8412fc6be6 --- /dev/null +++ b/assets/voxygen/i18n/th_TH/hud/group.ron @@ -0,0 +1,24 @@ +/// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Localization for ไทย (Thai) +( + string_map: { + "hud.group": "ปาร์ตี้", + "hud.group.invite_to_join": "ผู้เล่น [{name}] ต้องการชวนคุณเข้าปาร์ตี้!", + "hud.group.invite_to_trade": "ผู้เล่น [{name}] ต้องการแลกของกับคุณ", + "hud.group.invite": "เชิญชวน", + "hud.group.kick": "เตะออก", + "hud.group.assign_leader": "มอบตำแหน่งหัวหน้า", + "hud.group.leave": "ออกจากปาร์ตี้", + "hud.group.dead" : "เสียชีวิต", + "hud.group.out_of_range": "อยู่นอกระยะ", + "hud.group.add_friend": "เพิ่มในรานชื่อเพื่อน", + "hud.group.link_group": "เชื่อมปาร์ตี้", + "hud.group.in_menu": "อยู่ในหน้าต่างเมนู", + "hud.group.members": "รายชื่อสมาชิก", + }, + + + vector_map: { + } +) diff --git a/assets/voxygen/i18n/th_TH/hud/map.ron b/assets/voxygen/i18n/th_TH/hud/map.ron new file mode 100644 index 0000000000..9b5863367f --- /dev/null +++ b/assets/voxygen/i18n/th_TH/hud/map.ron @@ -0,0 +1,41 @@ +/// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Localization for ไทย (Thai) +( + string_map: { + // Map and Questlog + "hud.map.map_title": "แผนที่", + "hud.map.qlog_title": "ภารกิจ", + "hud.map.topo_map": "แผ่นที่ความสูง", + "hud.map.difficulty": "ระดับความยาก", + "hud.map.towns": "หมู่บ้านแขนง", + "hud.map.castles": "ปราสาทแขนง", + "hud.map.dungeons": "ดันเจียนแขนง", + "hud.map.caves": "ถ้ำแขนง", + "hud.map.cave": "ถ้ำเดี่ยว", + "hud.map.peaks": "ภูเขา", + "hud.map.biomes": "เขตภูมิภาค", + "hud.map.voxel_map": "แผนที่ Voxel ", + "hud.map.trees": "ต้นไม้ยักษ์แขนง", + "hud.map.tree": "ต้นไม้ยักษ์เดี่ยว", + "hud.map.town": "หมู่บ้านเดี่ยว", + "hud.map.castle": "ปารสาทเดี่ยว", + "hud.map.dungeon": "ปราสาทเดี่ยว", + "hud.map.difficulty_dungeon": "ดันเจี่ยน\n\nความยาก: {difficulty} ดาว", + "hud.map.drag": "ลาก", + "hud.map.zoom": "ซูม", + "hud.map.mid_click": "ปักหมุด", + "hud.map.recenter": "กลับมาที่ผู้เล่น", + "hud.map.marked_location": "สถานที่ที่ปักหมุด", + "hud.map.marked_location_remove": "กดเพื่อนำออก", + "hud.map.change_map_mode": "เปลี่ยนโหมดแผนที่", + "hud.map.toggle_minimap_voxel": "เปลี่ยนโหมดมินิแมพ", + "hud.map.zoom_minimap_explanation": "ซูมเข้าในมินิแมพเพื่อเพิ่มความคมชัด", + "hud.map.gnarling": "ฐานทัพของเหล่า Gnarling", + "hud.map.placed_by": "ปักโดย {name}", + }, + + + vector_map: { + } +) diff --git a/assets/voxygen/i18n/th_TH/hud/misc.ron b/assets/voxygen/i18n/th_TH/hud/misc.ron new file mode 100644 index 0000000000..22243a96b4 --- /dev/null +++ b/assets/voxygen/i18n/th_TH/hud/misc.ron @@ -0,0 +1,63 @@ +/// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Localization for ไทย (Thai) +( + string_map: { + "hud.do_not_show_on_startup": "ไมม่ต้องแสดงเมื่อเปิดเกม", + "hud.show_tips": "แสดงคำแนะนำ", + "hud.quests": "ภารกิจ", + "hud.you_died": "สิ้นชีพ", + "hud.waypoint_saved": "จดจำจุดเกิด", + "hud.sp_arrow_txt": "แต้มทักษะ", + "hud.inventory_full": "กระเป๋าเต็ม", + + "hud.press_key_to_show_keybindings_fmt": "[{key}] ปุ่มควบคุม", + "hud.press_key_to_toggle_lantern_fmt": "[{key}] จุดตะเกียง", + "hud.press_key_to_show_debug_info_fmt": "กด {key} เพื่อแสดงข้อมูลเชิงลึก", + "hud.press_key_to_toggle_keybindings_fmt": "กด {key} เพื่อสลับปุ่มลัด", + "hud.press_key_to_toggle_debug_info_fmt": "กด {key} เพื่อสลับข้อมูลเชิงลึก", + + // Respawn message + "hud.press_key_to_respawn": r#"กด {key} เพื่อเกิดใหม่ที่จุดเกิด"#, + + // Tutorial Button + "hud.tutorial_btn": r#"วิธีเล่น"#, + "hud.tutorial_click_here": r#"กด [ {key} ] เพื่อปล่อยเมาส์และกดที่ปุ่นนี้สิ!"#, + "hud.tutorial_elements": r#"การสร้างสิ่งของ"#, + +"hud.temp_quest_headline": r#"สวัสดี คุณนักเดินทาง!"#, +"hud.temp_quest_text": r#"ถ้าไม่รู้จะเริ่มยังไง ลองเดินดูรอบหมู่บ้านดูก่อนก็ได้ ถ้ามีของอะไรที่ถูกใจก็หยิบเอาได้เลย ไม่ต้องเกรงใจนะ + +ถือว่าเราช่วย ๆ กันก็แล้วกัน ฮ่าฮ่าฮ่าฮ่าฮ่า + +มุมขวาล่างของจอจะเป็นของสำคัญอย่างสัมภาระ, เมนูสร้างสิ่งของ และที่ขาดไม่ได้แผนที่ + +สามารถสร้างสิ่งของจำเป็นอย่างเช่น อาวุธ, เกราะ, อาหาร แล้วก็อื่น ๆ อีกเต็มเลย ที่โต๊ะของช่าง + +สัตว์ที่อยู่รอบ ๆ นี้ก็เป็นแหล่ง Animal Hide ชั้นดีเลยทีเดียว ติดกระเป๋าไว้บางก็ไม่เสียหายนะ + +ถ้าของพร้อม คนพร้อมก็เริ่มออกเดินทางได้เลย! +"#, + + "hud.spell": "เวทย์มนต์คาถา", + // Diary + "hud.diary": "ไดอาร่", + + "hud.free_look_indicator": "กำลังปลดล็อคกล้อง กด {key} เพื่อปิด", + "hud.camera_clamp_indicator": "กำลังล็อคหน้าจอในแนวตั้ง กด {key} เพื่อปิด", + "hud.auto_walk_indicator": "กำลังเดินแบบอัตโนมัต", + "hud.collect": "เก็บ", + "hud.pick_up": "หยิบ", + "hud.open": "เปิด", + "hud.use": "ใช้", + "hud.mine": "ขุด", + "hud.talk": "คุย", + "hud.trade": "แลกเปลี่ยน", + "hud.mount": "ขี่", + "hud.sit": "นั่ง", + }, + + + vector_map: { + } +) diff --git a/assets/voxygen/i18n/th_TH/hud/sct.ron b/assets/voxygen/i18n/th_TH/hud/sct.ron new file mode 100644 index 0000000000..5351e76011 --- /dev/null +++ b/assets/voxygen/i18n/th_TH/hud/sct.ron @@ -0,0 +1,14 @@ +/// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Localization for ไทย (Thai) +( + string_map: { + // SCT outputs + "hud.sct.experience": "{amount} Exp", + "hud.sct.block": "ป้องกันสำเร็จ", + }, + + + vector_map: { + } +) diff --git a/assets/voxygen/i18n/th_TH/hud/settings.ron b/assets/voxygen/i18n/th_TH/hud/settings.ron new file mode 100644 index 0000000000..97559f562d --- /dev/null +++ b/assets/voxygen/i18n/th_TH/hud/settings.ron @@ -0,0 +1,142 @@ +/// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Localization for ไทย (Thai) +( + string_map: { + // Settings + "hud.settings.general": "ทั่วไป", + "hud.settings.none": "ไม่มี", + "hud.settings.press_behavior.toggle": "เปิด/ปิด", + "hud.settings.press_behavior.hold": "กดค้าง", + "hud.settings.help_window": "หน้าต่างช่วยเหลือ", + "hud.settings.debug_info": "ข้อมูลเชิงลึก", + "hud.settings.show_hitboxes": "แสดง Hitbox", + "hud.settings.show_chat": "แสดงช่องสนทนา", + "hud.settings.show_hotkey_hints": "แสดงตัวช่วยแถบของใช้", + "hud.settings.tips_on_startup": "แสดงคำแนะนำตอนเปิดเกม", + "hud.settings.ui_scale": "ขนาดเมนู", + "hud.settings.relative_scaling": "กำหนดให้", + "hud.settings.custom_scaling": "กำหนดเอง", + "hud.settings.crosshair": "เป้า", + "hud.settings.opacity": "ความเข้มของเป้า", + "hud.settings.hotbar": "แถบของใช้", + "hud.settings.toggle_shortcuts": "เปิด/ปิดปุ่มลัด", + "hud.settings.buffs_skillbar": "แสดงสถานะที่แถบสกิล", + "hud.settings.buffs_mmap": "แสดงสถานะที่แผนที่", + "hud.settings.toggle_bar_experience": "เปิด/ปิดแถบค่าประสบการณ์", + "hud.settings.scrolling_combat_text": "ความเสียหายที่ทำได้", + "hud.settings.incoming_damage": "ความเสียหายที่ได้รับ", + "hud.settings.speech_bubble": "ลูกโป่งคำพูด", + "hud.settings.speech_bubble_self": "แสดงลูกโป่งคำพูด", + "hud.settings.speech_bubble_dark_mode": "แสดงลูกดป่งคำพูดแบบมืด", + "hud.settings.speech_bubble_icon": "ไอคอนของลูกโป่งคำพูด", + "hud.settings.energybar_numbers": "แสดงตัวเลขที่แถบพลังงาน", + "hud.settings.always_show_bars": "แสดงแถบพลังงานตลอดเวลา", + "hud.settings.values": "ค่า", + "hud.settings.percentages": "ร้อยละ", + "hud.settings.chat": "สนทนา", + "hud.settings.background_opacity": "ความเข้มจางของพื้นหลัง", + "hud.settings.chat_character_name": "ชื่อผู้เล่นในช่องสนทนา", + "hud.settings.loading_tips": "คำแนะนำตอนโหลดเกม", + "hud.settings.reset_interface": "ใช้ค่าเริ่มต้น", + + "hud.settings.pan_sensitivity": "ความเร็วเมาส์แนวนอน", + "hud.settings.zoom_sensitivity": "ความเร็วในการซูมเข้า/ออก", + "hud.settings.camera_clamp_angle": "องศามุมเงยเมื่อล็อคมุมกล้องในแนวตั้ง", + "hud.settings.invert_scroll_zoom": "สลับการซูมเข้า/ออก", + "hud.settings.invert_mouse_y_axis": "สลับทิศทางเมาส์ในแนวตั้ง", + "hud.settings.invert_controller_y_axis": "สลับทิศทางจอยในแนวตั้ง", + "hud.settings.enable_mouse_smoothing": "ขยับเมาส์แบบนุ่มนวล", + "hud.settings.free_look_behavior": "พฤติกรรมเมื่อปลดล็อคกล้อง", + "hud.settings.auto_walk_behavior": "พฤติกรรมเมื่อเดินอัตโนมัต", + "hud.settings.camera_clamp_behavior": "พฤติกรรมเมื่อล็อคมุมกล้อง", + "hud.settings.player_physics_behavior": "ใช้ฟิสิกส์กับตัวละคร (ระหว่างการทดลอง)", + "hud.settings.stop_auto_walk_on_input": "หยุดการเดินอัตโนมัตเมื่อขยับเอง", + "hud.settings.auto_camera": "มุมกล้องอัตโนมัต", + "hud.settings.reset_gameplay": "ใช้ค่าเริ่มต้น", + + "hud.settings.view_distance": "ระยะการมองเห็น", + "hud.settings.lod_distance": "ระยะ LoD", + "hud.settings.sprites_view_distance": "ระยะการมองเห็นพื้นหลัง", + "hud.settings.figures_view_distance": "ระยะการมองเห็นตัวละคร", + "hud.settings.maximum_fps": "เฟรมเรทสูงสุด", + "hud.settings.background_fps": "เฟรมเรทเมื่อพับจอ", + "hud.settings.present_mode": "โหมด Present", + "hud.settings.present_mode.fifo": "Fifo", + "hud.settings.present_mode.mailbox": "Mailbox", + "hud.settings.present_mode.immediate": "Immediate", + "hud.settings.fov": "องศาการมองเห็น", + "hud.settings.gamma": "ความสว่าง", + "hud.settings.exposure": "ปริมาณแสงที่ตกที่กล้อง", + "hud.settings.ambiance": "ความสว่างของพื้นที่", + "hud.settings.antialiasing_mode": "โหมดการลบรอยหยัก (Anti Aliasing)", + "hud.settings.upscale_factor": "ความคมชัดภายใน", + "hud.settings.cloud_rendering_mode": "คุณภาพของเมฆ", + "hud.settings.fluid_rendering_mode": "คุณภาพของเหลว", + "hud.settings.fluid_rendering_mode.cheap": "ต่ำ", + "hud.settings.fluid_rendering_mode.shiny": "เงางาม", + "hud.settings.cloud_rendering_mode.minimal": "น้อย", + "hud.settings.cloud_rendering_mode.low": "ต้ำ", + "hud.settings.cloud_rendering_mode.medium": "กลาง", + "hud.settings.cloud_rendering_mode.high": "สูง", + "hud.settings.cloud_rendering_mode.ultra": "สูงที่สุด", + "hud.settings.fullscreen": "เต็มหน้าจอ", + "hud.settings.fullscreen_mode": "โหมดเต็มหน้าจอ", + "hud.settings.fullscreen_mode.exclusive": "Exclusive", + "hud.settings.fullscreen_mode.borderless": "เต็มจอแบบไร้ขอบ (Borderless)", + "hud.settings.gpu_profiler": "เปิดการเร่งด้วย GPU (อาจไม่รองรับ)", + "hud.settings.particles": "อนุภาค", + "hud.settings.lossy_terrain_compression": "บีบอัดการโหลดพื้น", + "hud.settings.weapon_trails": "เส้นอาวุธเมื่อโจมตี", + "hud.settings.resolution": "ความคมชัด", + "hud.settings.bit_depth": "ความคมชัดสี", + "hud.settings.refresh_rate": "เฟรมเรท", + "hud.settings.lighting_rendering_mode": "คุณภาพแสง", + "hud.settings.lighting_rendering_mode.ashikhmin": "Type A - สูง", + "hud.settings.lighting_rendering_mode.blinnphong": "Type B - กลาง", + "hud.settings.lighting_rendering_mode.lambertian": "Type L - ต่ำ", + "hud.settings.shadow_rendering_mode": "คุณภาพเงา", + "hud.settings.shadow_rendering_mode.none": "ปิดเงา", + "hud.settings.shadow_rendering_mode.cheap": "ต่ำ", + "hud.settings.shadow_rendering_mode.map": "แมพ", + "hud.settings.shadow_rendering_mode.map.resolution": "Resolution", + "hud.settings.lod_detail": "รายละเอียด LoD", + "hud.settings.save_window_size": "บันทึกขนาดหน้าจอ", + "hud.settings.reset_graphics": "ใช้ค่าเริ่มต้น", + "hud.settings.bloom": "แสงฟุ้ง (Bloom)", + "hud.settings.point_glow": "จุดเรืองแสง", + + "hud.settings.master_volume": "ระดับเสียงทั้งหมด", + "hud.settings.inactive_master_volume_perc": "ระดับเสียเมื่อพับจอ", + "hud.settings.music_volume": "ระดับเสียงเพลง", + "hud.settings.sound_effect_volume": "ระดับเสียงเอฟเฟค", + "hud.settings.audio_device": "อุปกรร์กระจายเสียง", + "hud.settings.reset_sound": "ใช้ค่าเริ่มต้น", + + "hud.settings.english_fallback": "แสดงภาษาอังกฤษในกรณีที่ไม่มีคำแปล", + + "hud.settings.awaitingkey": "กดปุ่มเพื่อตั้ง...", + "hud.settings.unbound": "ไม่มี", + "hud.settings.reset_keybinds": "ใช้ค่าเริ่มต้น", + + "hud.settings.chat_tabs": "แถบการสนทนา", + "hud.settings.label": "คำอธิบาย:", + "hud.settings.delete": "ลบ", + "hud.settings.show_all": "แสดงทั้งหมด", + "hud.settings.messages": "ข้อความ", + "hud.settings.activity": "ความเคลื่อนไหว", + "hud.settings.death": "เสียชีวิต", + "hud.settings.group": "ปาร์ตี้", + "hud.settings.faction": "ฝ่าย", + "hud.settings.world": "โลก", + "hud.settings.region": "ภูมิภาค", + "hud.settings.say": "พูด", + "hud.settings.all": "ทั้งหมด", + "hud.settings.group_only": "ปาร์ตี้เท่านั้น", + "hud.settings.reset_chat" : "ใช้ค่าเริ่มต้น", + }, + + + vector_map: { + } +) diff --git a/assets/voxygen/i18n/th_TH/hud/skills.ron b/assets/voxygen/i18n/th_TH/hud/skills.ron new file mode 100644 index 0000000000..c19833e671 --- /dev/null +++ b/assets/voxygen/i18n/th_TH/hud/skills.ron @@ -0,0 +1,258 @@ +/// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Localization for ไทย (Thai) +( + string_map: { + "hud.rank_up": "ได้รับแต้มทักษะ", + "hud.skill.sp_available": "แต้มทักษะที่ใช้ได้ {number} แต้ม", + "hud.skill.not_unlocked": "ยังไม่ปลดล็อค", + "hud.skill.req_sp": "\n\nใช้แต้มทักษะ {number} แต้ม", + // Skills + // General + "hud.skill.inc_health_title": "พลังชีวิต", + "hud.skill.inc_health": "เพิ่มพลังชีวิตสูงสุด {boost}{SP} หน่วย", + "hud.skill.inc_energy_title": "พลังงาน", + "hud.skill.inc_energy": "เพิ่มพลังงานสูงสุด {boost}{SP} หน่วย", + "hud.skill.unlck_sword_title": "ปลดล็อคอาวุธ ดาบ", + "hud.skill.unlck_sword": "ปลดล็อคทักษะพิเศษของดาบ{SP}", + "hud.skill.unlck_axe_title": "ปลดล็อคอาวุธ ขวาน", + "hud.skill.unlck_axe": "ปลดล็อคทักษะพิเศษของขวาน{SP}", + "hud.skill.unlck_hammer_title": "ปลดล็อคอาวุธ ค้อน", + "hud.skill.unlck_hammer": "ปลดล็อคทักษะพิเศษของค้อน{SP}", + "hud.skill.unlck_bow_title": "ปลดล็อคอาวุธ ธนู", + "hud.skill.unlck_bow": "ปลดล็อคทักษะพิเศษของธนู{SP}", + "hud.skill.unlck_staff_title": "ปลดล็อคอาวุธ คถาอัคนี", + "hud.skill.unlck_staff": "ปลดล็อคทักษะพิเศษของคถาอัคนี{SP}", + "hud.skill.unlck_sceptre_title": "ปลดล็อคอาวุธ คถาอภิรักษ์", + "hud.skill.unlck_sceptre": "ปลดล็อคทักษะพิเศษของคถาอภิรักษ์{SP}", + "hud.skill.dodge_title": "กลิ้งหลบ", + "hud.skill.dodge": "กลิ้งหลบด้วยการกดเมาส์กลาง และไม่ได้รับความเสียหาย (iframe) จากการโจมตีระยะใกล้ในขณะที่กำลังกลิ้ง", + "hud.skill.roll_energy_title": "พลังงานการกลิ้งหลบ", + "hud.skill.roll_energy": "การกลิ้งหลบจะใช้พลังงานน้อยลง {boost}% {SP}", + "hud.skill.roll_speed_title": "ความเร็วการกลิ้งหลบ", + "hud.skill.roll_speed": "การกลิ้งจะมีความเร็วเพิ่มขึ้น {boost}% {SP}", + "hud.skill.roll_dur_title": "ระยะเวลาการกลิ้งหลบ", + "hud.skill.roll_dur": "ระยะเวลาในการกลิ้งจะเพิ่มขึ้น {boost}% {SP}", + "hud.skill.climbing_title": "ปีน", + "hud.skill.climbing": "กระโดดสูงขึ้น", + "hud.skill.climbing_cost_title": "พลังงานการปีน", + "hud.skill.climbing_cost": "การปีนจะใช้พลังงานน้อยลง {boost}% {SP}", + "hud.skill.climbing_speed_title": "ความเร็วการปีน", + "hud.skill.climbing_speed": "ปีนเร็วขึ้น {boost}% {SP}", + "hud.skill.swim_title": "ว่ายน้ำ", + "hud.skill.swim": "การเคลื่อนในของเหลว", + "hud.skill.swim_speed_title": "ความเร็วในการว่าย", + "hud.skill.swim_speed": "ว่ายน้ำเร็วขึ้น {boost}% {SP}", + // Sceptre + "hud.skill.sc_lifesteal_title": "ลำแสงดูดเลือด", + "hud.skill.sc_lifesteal": "ดูดพลังชีวิตจากผู้โชคร้ายมาเป็นของตัวเอง", + "hud.skill.sc_lifesteal_damage_title": "เพิ่มความเสียหาย", + "hud.skill.sc_lifesteal_damage": "ลำแสงดูดเลือดสร้างความเสียหายมากขึ้น {boost}% {SP}", + "hud.skill.sc_lifesteal_range_title": "เพิ่มระยะ", + "hud.skill.sc_lifesteal_range": "ความยาวของลำแสงดูดเลือดเพิ่มขึ้น {boost}% {SP}", + "hud.skill.sc_lifesteal_lifesteal_title": "อำนาจการดูด", + "hud.skill.sc_lifesteal_lifesteal": "เปลี่ยนความเสียหาย {boost}% ที่ทำได้เป็นพลังชีวิต {SP}", + "hud.skill.sc_lifesteal_regen_title": "พื้นพลังงาน", + "hud.skill.sc_lifesteal_regen": "ฟื้นฟูพลังงาน {boost}% {SP}", + "hud.skill.sc_heal_title": "อาณาอภิรักษ์", + "hud.skill.sc_heal": "ฟื้นฟูพลังชีวิตของคุณและเพื่อนร่วมปาร์ตี้ ต้องมี Combo ถึงจะใช้ได้", + "hud.skill.sc_heal_heal_title": "ทรงพลัง", + "hud.skill.sc_heal_heal": "ฟื้นฟูพลังชีวิตของคุณและเพื่อนร่วมปาร์ตี้อีก {boost}% {SP}", + "hud.skill.sc_heal_cost_title": "ลดพลังงาน", + "hud.skill.sc_heal_cost": "อาณาอภิรักษ์จะใช้พลังงานน้อย {boost}% ในการร่าย {SP}", + "hud.skill.sc_heal_duration_title": "ยื้อเวลา", + "hud.skill.sc_heal_duration": "อาณาอภิรักษ์จะมีระยะเวลานานขึ้น {boost}% {SP}", + "hud.skill.sc_heal_range_title": "รัศมี", + "hud.skill.sc_heal_range": "อาณาอภิรักษ์จะมีขนาดกว้างขึ้น {boost}% {SP}", + "hud.skill.sc_wardaura_unlock_title": "อาณาปกปัก", + "hud.skill.sc_wardaura_unlock": "ป้องกันคุณและเพื่อนร่วมปาร์ตี้ ไม่ได้รับความเสียหาย{SP}", + "hud.skill.sc_wardaura_strength_title": "ทรงพลัง", + "hud.skill.sc_wardaura_strength": "อาณาปกปักป้องกันความเสียหายได้มากขึ้น {boost}% {SP}", + "hud.skill.sc_wardaura_duration_title": "ยื้อเวลา", + "hud.skill.sc_wardaura_duration": "อาณาปกปักมีระยะเวลานานขึ้น {boost}% {SP}", + "hud.skill.sc_wardaura_range_title": "รัศมี", + "hud.skill.sc_wardaura_range": "อาณาปกปักมีขอบเขตกว้าขึ้น {boost}% {SP}", + "hud.skill.sc_wardaura_cost_title": "ลดพลังงาน", + "hud.skill.sc_wardaura_cost": "อาณาปกปักใช้พลังงานน้อย {boost}% ในการร่าย {SP}", + // Staff + "hud.skill.st_shockwave_range_title" : "รัศมี", + "hud.skill.st_shockwave_range" : "คลื่นกระแทกมีรัศมีเพิ่มขึ้น {boost}% {SP}", + "hud.skill.st_shockwave_cost_title" : "ลดพลังงาน", + "hud.skill.st_shockwave_cost" : "คลื่นกระแทกใช้พลังงานน้อยลง {boost}% ในการร่าย {SP}", + "hud.skill.st_shockwave_knockback_title" : "กระเด็น", + "hud.skill.st_shockwave_knockback" : "คลื่นกระแทกผลักศัตรูออกไปไกลขึ้น {boost}% {SP}", + "hud.skill.st_shockwave_damage_title" : "ทรงพลัง", + "hud.skill.st_shockwave_damage" : "คลื่นกระแทกสร้างความเสียหายมากขึ้น {boost}% {SP}", + "hud.skill.st_shockwave_unlock_title" : "คลื่นกระแทก", + "hud.skill.st_shockwave_unlock" : "ผลักศัตรู้ที่อยู่ใกล้ ๆ ออกและสร้างความเสียหาย {SP}", + "hud.skill.st_flamethrower_title" : "เพลิงกิเลน", + "hud.skill.st_flamethrower" : "เผาให้หมด เผาให้ราบ", + "hud.skill.st_flame_velocity_title" : "เร่งความเร็ว", + "hud.skill.st_flame_velocity" : "เพลิงกิเลนเคลื่อนที่เร็วขึ้น {boost}% {SP}", + "hud.skill.st_flamethrower_range_title" : "เพิ่มระยะ", + "hud.skill.st_flamethrower_range" : "เพลิงกิเลนเดินทางได้ไกลขึ้น {boost}% {SP}", + "hud.skill.st_energy_drain_title" : "ลดพลังงาน", + "hud.skill.st_energy_drain" : "เพลิงกิเลนใช้พลังงานลดลง {boost}% {SP}", + "hud.skill.st_flamethrower_damage_title" : "ทรงพลัง", + "hud.skill.st_flamethrower_damage" : "เพลิงกิเลนสร้างความเสียหายมากขึ้น {boost}% {SP}", + "hud.skill.st_explosion_radius_title" : "รัศมี", + "hud.skill.st_explosion_radius" : "ลูกไฟกัมปนาทมีระยะกว้างขึ้น {boost}% {SP}", + "hud.skill.st_energy_regen_title" : "พื้นพลังงาน", + "hud.skill.st_energy_regen" : "ลูกไฟกัมปนาทพื้นฟูนพลังงานมากขึ้น {boost}% {SP}", + "hud.skill.st_fireball_title" : "ลูกไฟกัมปนาท", + "hud.skill.st_fireball" : "ยิงลูกไฟที่สร้างความเสียหายเป็นวงรอบเมื่อตกพื้น", + "hud.skill.st_damage_title" : "ทรงพลัง", + "hud.skill.st_damage" : "ลูกไฟกัมปนาทสร้างความเสียหายมากขึ้น {boost}% {SP}", + // Bow + "hud.skill.bow_projectile_speed_title" : "เร่งความเร็ว", + "hud.skill.bow_projectile_speed" : "ลูกธนูเดินทางเร็วขึ้นและระยะทางเพิ่มขึ้น {boost}% {SP}", + "hud.skill.bow_charged_title" : "ขอเล็งก่อน", + "hud.skill.bow_charged" : "ขอบคุณที่รอกัน", + "hud.skill.bow_charged_damage_title" : "ทรงพลัง", + "hud.skill.bow_charged_damage" : "เมื่อชักคันธนูค้างไว้ ลูกธนูจะสร้างความเสียหายมากขึ้น {boost}% {SP}", + "hud.skill.bow_charged_energy_regen_title" : "พื้นฟูพลังงาน", + "hud.skill.bow_charged_energy_regen" : "เมื่อชักคันธนูค้างไว้ พื้นฟูพลังงานมากขึ้น {boost}%{SP}", + "hud.skill.bow_charged_knockback_title" : "อันกระเด็น", + "hud.skill.bow_charged_knockback" : "เมื่อชักคันธนูค้างไว้ ศัตรูจะถูกผลักให้กระเด็ดออกไกลขึ้น {boost}%{SP}", + "hud.skill.bow_charged_speed_title" : "มือไว", + "hud.skill.bow_charged_speed" : "ยิงธนูได้เร็วขึ้น {boost}% {SP}", + "hud.skill.bow_charged_move_title" : "คล่องตัว", + "hud.skill.bow_charged_move" : "ขณะชักคันธนู เคลื่อนที่ได้เร็วขึ้น {boost}% {SP}", + "hud.skill.bow_repeater_title" : "กระหน่ำยิง", + "hud.skill.bow_repeater" : "เพิ่มความเร็วในการยิงธนูเมื่อยิงต่อเนื่อง", + "hud.skill.bow_repeater_damage_title" : "ทรงพลัง", + "hud.skill.bow_repeater_damage" : "สร้างความเสียหายเพิ่มขึ้น {boost}% {SP}", + "hud.skill.bow_repeater_cost_title" : "ลดพลังงาน", + "hud.skill.bow_repeater_cost" : "กระหน่ำใช้พลังงานน้อยลง {boost}% {SP}", + "hud.skill.bow_repeater_speed_title" : "เร่งความเร็ว", + "hud.skill.bow_repeater_speed" : "กระหน่ำยิง เพิ่มความเร็วโจมตีอีก {boost}% {SP}", + "hud.skill.bow_shotgun_unlock_title" : "ยิงกระจาย", + "hud.skill.bow_shotgun_unlock" : "ยิงธนูได้หลายดอกพร้อมกัน {SP}", + "hud.skill.bow_shotgun_damage_title" : "ทรงพลัง", + "hud.skill.bow_shotgun_damage" : "ยิงกระจายสร้างความเสียหายเพิ่มขึ้น {boost}% {SP}", + "hud.skill.bow_shotgun_cost_title" : "ลดพลังงาน", + "hud.skill.bow_shotgun_cost" : "ยิงกระจายใช้พลังงานน้อยลง {boost}% {SP}", + "hud.skill.bow_shotgun_arrow_count_title" : "จำนวนลูกธนู", + "hud.skill.bow_shotgun_arrow_count" : "เพิ่มจำนวนลูกธนูที่ยิงกระจายใช้ {boost} {SP}", + "hud.skill.bow_shotgun_spread_title" : "จุดตาย", + "hud.skill.bow_shotgun_spread" : "ลดความกระจายของลูกธนูลง {boost}% {SP}", + // Hammer + "hud.skill.hmr_leap_radius_title" : "รัศมี", + "hud.skill.hmr_leap_radius" : "กระโดดทุมมีขอบเขตเพิ่มขึ้นเป็น {boost} เมตร {SP}", + "hud.skill.hmr_leap_distance_title" : "แชมป์กระโดดไกล", + "hud.skill.hmr_leap_distance" : "กระโดนทุบมีระยะทางเพิ่มขึ้น {boost}% {SP}", + "hud.skill.hmr_leap_cost_title" : "ลดพลังงาน", + "hud.skill.hmr_leap_cost" : "กระโดดทุบใช้พลังงานน้อยลง {boost}% {SP}", + "hud.skill.hmr_leap_knockback_title" : "กระเด็ดออก", + "hud.skill.hmr_leap_knockback" : "ศัตรูที่ถูกกระโดดทุบจะกระเด็นออกไกลขึ้น {boost}% {SP}", + "hud.skill.hmr_leap_damage_title" : "ทรงพลัง", + "hud.skill.hmr_leap_damage" : "กระโดดทุบสร้างความเสียหายมากขึ้น {boost}% {SP}", + "hud.skill.hmr_unlock_leap_title" : "กระโดดทุบ", + "hud.skill.hmr_unlock_leap" : "กระโดดขึ้นไปในอากาศแล้วฟาดค้อนใส่ศัตรู{SP}", + "hud.skill.hmr_charged_melee_title" : "หน้าสะบัด", + "hud.skill.hmr_charged_melee" : "ง้างค้อนแล้วฟาดใส่ศัตรูอย่างรุนแรง", + "hud.skill.hmr_charged_rate_title" : "ง้างเร็ว", + "hud.skill.hmr_charged_rate" : "ง้างค้อนได้เร็วขึ้น {boost}% {SP}", + "hud.skill.hmr_charged_melee_nrg_drain_title" : "ลดพลังงาน", + "hud.skill.hmr_charged_melee_nrg_drain" : "ลดพลังงานทมี่ใช้ในการง้างค้อนลง {boost}% {SP}", + "hud.skill.hmr_charged_melee_damage_title" : "ทรงพลัง", + "hud.skill.hmr_charged_melee_damage" : "เมื่อง้างค้อน สร้างเสียหายกับศัตรูเพิ่มขึ้น {boost}% {SP}", + "hud.skill.hmr_charged_melee_knockback_title" : "กระเด็ดออก", + "hud.skill.hmr_charged_melee_knockback" : "เมื่อง้างค้อน ศัตรูจะกระเด็ดออกไปไกลขึ้น {boost}% {SP}", + "hud.skill.hmr_single_strike_title" : "ฟาดค้อน", + "hud.skill.hmr_single_strike" : "ฟาดค้อนใส่ศัตรู", + "hud.skill.hmr_single_strike_regen_title" : "ฟื้นฟูพลังงาน", + "hud.skill.hmr_single_strike_regen" : "พื้นฟูพลังงาน เมื่อฟาดค้อนใส่ศัตรูสำเร็จ {SP}", + "hud.skill.hmr_single_strike_speed_title" : "กล้ามแขนเป็นมัด ๆ", + "hud.skill.hmr_single_strike_speed" : "ความเร็วโจมตีเพิ่มขึ้น เมื่อฟาดค้อนใส่ศัตรูสำเร็จต่อเนื่องกัน{SP}", + "hud.skill.hmr_single_strike_damage_title" : "ทรงพลัง", + "hud.skill.hmr_single_strike_damage" : "ฟาดค้อนสร้างความเสียหายมากขึ้น {SP}", + "hud.skill.hmr_single_strike_knockback_title" : "กระเด็ดออก", + "hud.skill.hmr_single_strike_knockback" : "เมื่อถูกฟาด ศัตรูจะกระเด็ดออกไปไกลขึ้น {boost}% {SP}", + // Sword + "hud.skill.sw_trip_str_title": "ระบำดาบ", + "hud.skill.sw_trip_str": "ฟาดฟันศัตรูด้วยดาบ ต่อเนื่องสูงสุด 3 ครั้ง", + "hud.skill.sw_trip_str_combo_title": "ระบำดาบทรงพลัง", + "hud.skill.sw_trip_str_combo": "สร้างความเสียหายมากขึ้นตามจำนวนคอมโบ {SP}", + "hud.skill.sw_trip_str_dmg_title": "ระบำดาบทรงพลัง", + "hud.skill.sw_trip_str_dmg": "การฟาดฟันแต่ละครั้งจะสร้างความเสียหายมากขึ้น {SP}", + "hud.skill.sw_trip_str_sp_title": "ระบำดาบร่ายรำ", + "hud.skill.sw_trip_str_sp": "การฟาดฟันแต่ละครั้งจะเพิ่มความเร็วโจมตี {SP}", + "hud.skill.sw_trip_str_reg_title": "ระบำดาบนิรันตร", + "hud.skill.sw_trip_str_reg": "การฟาดฟันแต่ละครั้งจะช่วยฟื้นฟูพลังงาน {SP}", + "hud.skill.sw_dash_title": "พุ่งใส่", + "hud.skill.sw_dash": "พุ่งใส่ศัตรูที่โชคไม่ดี", + "hud.skill.sw_dash_dmg_title": "ทรงพลัง", + "hud.skill.sw_dash_dmg": "พุ่งใส่สร้างความเสรหายเพิ่มขึ้น {boost}% {SP}", + "hud.skill.sw_dash_drain_title": "เหนื่อยยาก", + "hud.skill.sw_dash_drain": "ลดพลังงานที่ใช้ขณะพุ่งลง {boost}% {SP}", + "hud.skill.sw_dash_cost_title": "ลดพลังงาน", + "hud.skill.sw_dash_cost": "พุ่งใส่ใช้พลังงานลดลง {boost}% ในช่วงแรก {SP}", + "hud.skill.sw_dash_speed_title": "ว่องไว", + "hud.skill.sw_dash_speed": "ขณะพุ่ง ความเร็วเคลื่อนที่เพิ่มขึ้น {boost}% {SP}", + "hud.skill.sw_dash_charge_through_title": "พุ่งทะลุ", + "hud.skill.sw_dash_charge_through": "สามมารถพุ่งทะลุศัตรูตัวแรก {SP}", + "hud.skill.sw_dash_scale_title": "โมเมนตัม", + "hud.skill.sw_dash_scale": "สร้างความเสียหายเพิ่มขึ้นตามระยะที่ทำได้ {boost}% {SP}", + "hud.skill.sw_spin_title": "หมุน", + "hud.skill.sw_spin": "เหวี่ยงดาบไปรอบตัว {SP}", + "hud.skill.sw_spin_dmg_title": "ทรงพลัง", + "hud.skill.sw_spin_dmg": "หมุนสร้างความเสียหายเพิ่มขึ้น {boost}% {SP}", + "hud.skill.sw_spin_spd_title": "รวดเร็ว", + "hud.skill.sw_spin_spd": "ความเร็วในการหมุนเพิ่มขึ้น {boost}% {SP}", + "hud.skill.sw_spin_cost_title": "ลดพลังงาน", + "hud.skill.sw_spin_cost": "ลดพลังงานที่ใช้ในการหมุนลง {boost}% {SP}", + "hud.skill.sw_spin_spins_title": "จำนวน", + "hud.skill.sw_spin_spins": "เพิ่มจำนวนรอบที่หมุน {SP}", + "hud.skill.sw_interrupt_title": "รำบำดาบขั้นสูง", + "hud.skill.sw_interrupt": "สามมารถฟันดาบต่อเนื่องติดต่อกันได้ {SP}", + // Axe + "hud.skill.axe_double_strike_title": "ฟันคู่", + "hud.skill.axe_double_strike": "ฟันให้ราบ", + "hud.skill.axe_double_strike_combo_title": "ฟันคู่ต่อเนื่อง", + "hud.skill.axe_double_strike_combo": "สามารถฟันติดต่อกันได้ {SP}", + "hud.skill.axe_double_strike_damage_title": "ทรงพลัง", + "hud.skill.axe_double_strike_damage": "การฟันแต่ละครั้งสร้างความเสียหายเพิ่มขึ้น {SP}", + "hud.skill.axe_double_strike_speed_title": "รวดเร็ว", + "hud.skill.axe_double_strike_speed": "การฟันแต่ละครั้งเพิ่มความเร็วโจมตี {SP}", + "hud.skill.axe_double_strike_regen_title": "ฟื้นฟูพลังงาน", + "hud.skill.axe_double_strike_regen": "การฟันแต่ละครั้งจะช่วยฟื้นฟูพลังงาน {SP}", + "hud.skill.axe_spin_title": "เอามือขึ้นแล้ว หมุน หมุน", + "hud.skill.axe_spin": "ชูมือขึ้นโบกไปมา", + "hud.skill.axe_infinite_axe_spin_title": "ไม่เวียนอีก", + "hud.skill.axe_infinite_axe_spin": "เหวียงขวานได้เรื่อย ๆ จนกว่าพลังงานจะหมด {SP}", + "hud.skill.axe_spin_damage_title": "ทรงพลัง", + "hud.skill.axe_spin_damage": "เหวียงขวานสร้างความเสียหมายเพิ่มขึ้น {boost}% {SP}", + "hud.skill.axe_spin_helicopter_title": "พลศาสตร์แรงยก", + "hud.skill.axe_spin_helicopter": "ตกถึงพื้นช้าลงในขณะที่เหวี่ยงขวาน {SP}", + "hud.skill.axe_spin_speed_title": "ความมเร็ว", + "hud.skill.axe_spin_speed": "เหวี่ยงขวานเร็วขึ้น {boost}% {SP}", + "hud.skill.axe_spin_cost_title": "ลดพลังงาน", + "hud.skill.axe_spin_cost": "เหวี่ยงขวานใช้พลังงานน้อยลง {boost}% {SP}", + "hud.skill.axe_unlock_leap_title": "กระโดดฟัน", + "hud.skill.axe_unlock_leap": "กระโดดขึ้นไปในอากาศ และฟันศัตรู{SP}", + "hud.skill.axe_leap_damage_title": "ทรงพลัง", + "hud.skill.axe_leap_damage": "กระโดดฟันสร้างความเสียหายเพิ่มขึ้น {boost}% {SP}", + "hud.skill.axe_leap_knockback_title": "กระเด็นออก", + "hud.skill.axe_leap_knockback": "กระโดดฟันจะผลักศัตรูออกไปไกลขึ้น {boost}%{SP}", + "hud.skill.axe_leap_cost_title": "ลดพลังงาน", + "hud.skill.axe_leap_cost": "กระโดดฟันใช้พลังงานน้อยลง {boost}% {SP}", + "hud.skill.axe_leap_distance_title": "กระโดดไกล", + "hud.skill.axe_leap_distance": "ระยะในการกระโดดเพิ่มขึ้น{boost}% {SP}", + // Mining + "hud.skill.mining_title": "ขุดหิน", + "hud.skill.pick_strike_title": "ขุด ขุด ขุด", + "hud.skill.pick_strike": "Hit rocks with the pickaxe to gain ore, gems and experience", + "hud.skill.pick_strike": "เมื่อขุดหินจะได้รับแร่หรืออัญมนีตามชินของหินที่ขุด", + "hud.skill.pick_strike_speed_title": "แข็งแรง", + "hud.skill.pick_strike_speed": "ขุดหินได้เร็วขึ้น {SP}", + "hud.skill.pick_strike_oregain_title": "โชคลาภ แร่", + "hud.skill.pick_strike_oregain": "มีโอกาสได้รับแร่มากขึ้น ({boost}% ต่อเลเเวล) {SP}", + "hud.skill.pick_strike_gemgain_title": "โชคลาภ อัญมนี", + "hud.skill.pick_strike_gemgain": "มีโอกาสได้รับอัญมนีมากขึ้น ({boost}% ต่อเลเวล){SP}", + }, + + + vector_map: { + } +) diff --git a/assets/voxygen/i18n/th_TH/hud/social.ron b/assets/voxygen/i18n/th_TH/hud/social.ron new file mode 100644 index 0000000000..4599cc2452 --- /dev/null +++ b/assets/voxygen/i18n/th_TH/hud/social.ron @@ -0,0 +1,22 @@ +/// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Localization for ไทย (Thai) +( + string_map: { + "hud.social": "ผู้เล่นอื่น", + "hud.social.online": "กำลังออนไลน์:", + "hud.social.friends": "เพื่อน", + "hud.social.not_yet_available": "ยังไม่สามารถใช้การได้", + "hud.social.faction": "ฝ่าย", + "hud.social.play_online_fmt": "ผู้เล่น {nb_player} คน กำลังออนไลน์", + "hud.social.name": "ชื่อ", + "hud.social.level": "เลเวล", + "hud.social.zone": "เขตพื้นที่", + "hud.social.account": "บัญชี", + }, + + + vector_map: { + } +) + diff --git a/assets/voxygen/i18n/th_TH/hud/trade.ron b/assets/voxygen/i18n/th_TH/hud/trade.ron new file mode 100644 index 0000000000..cf8c906881 --- /dev/null +++ b/assets/voxygen/i18n/th_TH/hud/trade.ron @@ -0,0 +1,32 @@ +/// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Localization for ไทย (Thai) +( + string_map: { + "hud.trade.trade_window": "แลกสิ่งของ", + "hud.trade.phase1_description": "หยิบสิ่งของที่ต้องการแลกไปไว้ในพื้นที่ที่กำหนด", + "hud.trade.phase2_description": "กรุณาตรวจสิ่งของที่ต้องการแลกเปลี่ยน", + /// Phase3 should only be visible for a few milliseconds if everything is working properly, but is included for completeness + "hud.trade.phase3_description": "อยู่ระหว่างการแลกเปลี่ยนสิ่งของ", + "hud.trade.persons_offer": "ผู้เล่น {playername} ต้องการแลกเปลี่ยนสิ่งของ", + "hud.trade.has_accepted": "ผู้เล่น {playername} ยอมรับการแลกเปลี่ยน", + "hud.trade.accept": "ยอมรับ", + "hud.trade.decline": "ปฏิเสธ", + "hud.trade.invite_sent": "คำขอเพื่อแลฃกเปลี่ยนสิ่งของถูกส่งไปให้ผู้เล่น {playername}.", + "hud.trade.result.completed": "การแลกเปลี่ยนเสร็จสมบูรณ์", + "hud.trade.result.declined": "ปฏิเสธการแลกเปลี่ยน", + "hud.trade.result.nospace": "ช่องสัมภาระไม่พอ การแลกเปลี่ยนถูกยกเลิก", + "hud.trade.buy_price": "ราคาซื้อ", + "hud.trade.sell_price": "ราคาขาย", + "hud.trade.coin": "เหรียญ", + "hud.trade.tooltip_hint_1": "", + "hud.trade.tooltip_hint_2": "", + "hud.trade.your_offer": "สิ่งของที่คุณต้องการแลก", + "hud.trade.their_offer": "สิ่งของที่เขาต้องการแลก", + "hud.trade.amount_input": "เลือกสิ่งของ" + }, + + + vector_map: { + } +) diff --git a/assets/voxygen/i18n/th_TH/main.ron b/assets/voxygen/i18n/th_TH/main.ron new file mode 100644 index 0000000000..73ca7f4d4b --- /dev/null +++ b/assets/voxygen/i18n/th_TH/main.ron @@ -0,0 +1,154 @@ +/// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Localization for ไทย (Thai) +( + string_map: { + /// Start Main screen section + "main.username": "ชื่อผู้ใช้", + "main.server": "เซิร์ฟเวอร์", + "main.password": "รหัสผ่าน", + "main.connecting": "อยู่ระหว่างการเชื่อมต่อ", + "main.creating_world": "อยู่ระหว่างการสร้างโลก", + "main.tip": "คำแนะนำ:", + "main.unbound_key_tip": "ยกเลิกปุ่ม", + + // Welcome notice that appears the first time Veloren is started + "main.notice": r#"ยินดีต้อนรับเข้าสู่โลกเวโลเรน (ในเวอร์ชั่นอัลฟา)! + +แต่ก่อนที่ความสนุกจะเริ่ม สิ่งที่คุณควรรู้คือ + +- ตัวเกมอยู่ในช่วงแรกของการพัฒนา ดังนั้น ตัวเกมจึงยังไม่สมบูรณ์ บางองค์ประกอบอาจขาดหายหรือทำงานผิดพลาด + +- หากคุณต้องการให้คำแนะนำเกี่ยวกับเกมหรือแจ้งบัค คุณสามารถติดต่อเราได้ที่ Reddit, GitLab หรือผ่านทาง Discord ของเรา + +- เวโลเรนจัดอยู่ในหมวดหมู่ลิขสิทธิ์ของ GPL-3 คือ อนุญาตให้ใช้งาน, ดัดแปลง และแจกจ่ายได้โดยไม่คิดค่าใช้จ่าย (แต่ต้องอยู่ภายลิขสิทธิ์เดียวกัน) + +- เวโลเรนเป็นเกมที่สร้างขึ้นโดยไม่หวังผลกำไร ผู้ที่มีส่วนร่วมทุกคนเป็นอาสาสมัคร +ดังนั้นถ้าคุณสนใจอยากเข้าร่วม ทางทีมพัฒนายินดีต้อนรับเสมอ + +ท้ายที่สุดเราขอขอบคุณที่สละเวลาอ่านสาส์นน้อย ๆ เล่มนี้ เราหวังว่าคุณจะได้รับสนุกจากเกมของเรา + +~ ด้วยความเคารพ ทีมผู้พัฒนา + +Welcome to the alpha version of Veloren! + +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. + +- 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). + +- Veloren is a non-profit community project, and everybody working on it is a volunteer. +If you like what you see, you're welcome to join the development or art teams! + +Thanks for taking the time to read this notice, we hope you enjoy the game! + +~ The Veloren Devs"#, + + // Login process description + "main.login_process": r#"ขั้นตอนการเข้าเกม: + +คุณอาจจำเป็นจะต้องสมัครรหัสเพื่อเข้าเล่นบางเซิร์ฟเวอร์ + +สร้างรหัสได้ที่ + +https://veloren.net/account/."#, + "main.login.server_not_found": r#"ไม่พบเซิร์ฟเวอร์ +Server not found"#, + "main.login.authentication_error": r#"ยินยันรหัสผิดพลาด +Auth error on server"#, + "main.login.internal_error": r#"เกิดข้อผิดพลาดขึ้นกับตัวเกม (ตัวละครอาจถูกลบไปแล้ว) +Internal error on client (most likely, player character was deleted)"#, + "main.login.failed_auth_server_url_invalid": r#"ไม่สามารถยืนยันรหัสได้ +Failed to connect to auth server"#, + "main.login.insecure_auth_scheme": r#"ไม่อนุญาตให้ยืนยันตัวตนผ่านรูปแบบ HTTP เนื่องจากความปลอดภัย อนุญาตให้ใช้ HTTP ก็ต่อเมื่อทำการดีบัคหรือเมื่อรันบน localhost เท่านั้น +The auth Scheme HTTP is NOT supported. It's insecure! For development purposes, HTTP is allowed for 'localhost' or debug builds"#, + "main.login.server_full": r#"เซิร์ฟเวอร์เต็ม +Server is full"#, + "main.login.untrusted_auth_server": r#"เซิร์ฟเวอร์ที่ใช้ในการยืนยันรหัสไม่น่าไว้วางใจ +Auth server not trusted"#, + "main.login.outdated_client_or_server": r#"เซิร์ฟเวอร์ล้มเหลว: อาจเกิดจากตัวเกมไม่ได้รับการอัพเดท โปรดอัพเดทตัวเกม +ServerWentMad: Probably versions are incompatible, check for updates."#, + "main.login.timeout": r#"หมดเวลา: เซิร์ฟเวอร์ไม่ตอบกลับในเวลาที่กำหนด (เซิร์ฟเวอร์อาจเต็มหรือเกิดปัญหากับเคลือข่าย) +Timeout: Server did not respond in time. (Overloaded or network issues)."#, + "main.login.server_shut_down": r#"เซิร์ฟเวอร์ปิดอยู่ +Server shut down"#, + "main.login.network_error": r#"เคลือข่ายขัดข้อง +Network error"#, + "main.login.network_wrong_version": r#"เวอร์ชั่นของตัวเกมและเซิร์ฟเวอร์ไม่ตรงกัน โปรดอัพเดทตัวเกม +Mismatched server and client version, please update your game client."#, + "main.login.failed_sending_request": r#"ยืนยันรหัสล้มเหลว +Request to Auth server failed"#, + "main.login.invalid_character": r#"ไม่สามารถเลือกตัวละครได้ +The selected character is invalid"#, + "main.login.client_crashed": r#"ตัวเกมปิดตัวลงกระทันหัน +Client crashed"#, + "main.login.not_on_whitelist": r#"ต้องได้รับคำอนุญาตในการเชื่อมต่อเข้าเซิร์ฟเวอร์ +You need a Whitelist entry by an Admin to join"#, + "main.login.banned": "ถูกแบนจากเซิร์ฟเวอร์ เนื่องจากเหตุผลต่อไปนี้", + "main.login.kicked": "ถูกเตะจากเซิร์ฟเวอร์ เนื่องจากเหตุผลต่อไปนี้", + "main.login.select_language": "เลือกภาษา", + "main.login.client_version": "เวอร์ชั่นของตัวเกม", + "main.login.server_version": "เวอร์ชั่นของเซิร์ฟเวอร์", + "main.login.client_init_failed": r#"ไม่สามารถเริ่มตัวเกมได้ เนื่องจาก {init_fail_reason} +Client failed to initialize: {init_fail_reason}"#, + "main.login.username_bad_characters": "ชื่อประกอบตัวตัวอักษรต้องห้าม (อนุญาตให้ใช้ตัวอักษร a-z, 0-9, '_' และ '-' เท่านั้น)", + "main.login.username_too_long": "ชื่อยาวเกินไป เต็มที่ {max_len} ตัวอักษร", + "main.servers.select_server": "เลือกเซิร์ฟเวอร์", + "main.servers.singleplayer_error": r#"ไม่สามารถเข้าเล่มโหมดผู้เล่นคนเดียวได้ ข้อผิดพลาด:{sp_error} +Failed to connect to internal server: {sp_error}"#, + "main.servers.network_error": r#"เกิดความผิดพลาดขึ้นกับเคลือข่าย ข้อผิดพลาด: {raw_error} +Server network/socket error: {raw_error}"#, + "main.servers.participant_error": r#"โปรโตคอลผิดพลาด ข้อผิดพลาด: {raw_error} +Participant disconnect/protocol error: {raw_error}"#, + "main.servers.stream_error": r#"เกิดข้อผิดพลาดกับการเชื่อมต่อ, การบีบอัดข้อมูล หรือการอ่านข้อมูล: {raw_error} +Client connection/compression/(de)serialization error: {raw_error}"#, + "main.servers.database_error": r#"ฐานข้อมูลของเซิร์ฟเวอร์ล้มเหลว ข้อผิดพลาด: {raw_error} +Server database error: {raw_error}"#, + "main.servers.persistence_error": r#"เซิร์ฟเวอร์ไม่สามารถรักษาข้อมูลได้ ข้อผิดพลาด: {raw_error} +Server persistence error (Probably Asset/Character Data related): {raw_error}"#, + "main.servers.other_error": "Server general error: {raw_error}", + + // Credits screen + "main.credits": "เครดิต", + "main.credits.created_by": "โดย", + "main.credits.music": "เพลง", + "main.credits.fonts": "ตัวหนังสือ", + "main.credits.other_art": "การออกแบบอื่น ๆ", + "main.credits.contributors": "ผู้สนับสนุน", + + /// End Main screen section + }, + + + vector_map: { + // The keybinding names can be found in voxygen/src/game_input.rs in the GameInput enum + "loading.tips": [ + "ในโลกที่มืดมิดกด '{gameinput.togglelantern}' เพื่อจุดตะเกียงได้นะ", + "กด '{gameinput.help}' เพื่อดูปุ่มควมคุมต่าง ๆ ได้", + "ใช้คำสั่ง /say หรือ /s ในช่องสนทนาเพื่อพูดคุยกับผู้เล่นที่อยู่ใกล้ ๆ", + "ใช้คำสั่ง /region หรือ /r ในช่องสนทนาเพื่อพูดคุยกับผู้เล่นที่ในระยะหนึ่งบล็อค", + "ผู้ที่เป็นแอดมินสามารถใช้คำสั่ง /build เพื่อเข้าสู่โหมดสร้างได้", + "ใช้คำสั่ง /group หรือ /g ในช่องสนทนาเพื่อพูดคุยกับผู้เล่นที่อยู่ในปาร์ตี้", + "อยากคุยกับใครเป็นการส่วนตัว ใช้คำสั่ง /tell ตามด้วยชื่อผู้เล่นและข้อความ เพื่อกระซิบ", + "อาหาร, ไห และกล่องสมบัติสามารถพบได้ทั่วไป ลองหาดูดี ๆ นะ", + "กระเป๋าเต็มเพราะอาหารเยอะใช่ไหม? ลองทำอาหารที่ดีกว่าจากอาหารที่มีอยู่สิ", + "นั่งว่าง ๆ ไม่มีอะไรทำหรอ? ลองไปตะลุยดันเจียนสักหน่อยไหมหล่ะ?", + "อย่าลืมตั้งค่ากราฟฟิกให้เหมาะสมกับหน้าจอของตัวเองนะ กด '{gameinput.settings}' เพื่อเปิดเมนูตั้งค่า", + "เล่นกับเพื่อนจะยิ่งสนุกกว่า กด '{gameinput.social}' เพื่อดูว่าเพื่อนคนไหนกำลังออนไลน์", + "กด '{gameinput.dance}' เพื่อเต้น ไหนเอาท่าเต้นมาดูหน่อยสิ!", + "กด '{gameinput.glide}' เพื่อใช้เครื่องร่อน วันนี้เราจะไปแตะขอบฟ้ากัน!", + "ถึงแม้ว่าเวโลเรนจะยังอยู่ในช่วง Pre-Aplha แต่พวกเราก็ตั้งใจพัฒนาเกมทุกวันนะ!", + "อยากมีส่วนร่วมในการพัฒนาเวโลเรนหรืออยากคุยกับทีมพัฒนาใช่ไหม มาเจอเราใน Discord สิ!", + "คุณสามารถปิดตัวเลขที่แสดงพลังชีวิตได้ด้วยการตั้งค่า", + "นั่งพักใกล้ ๆ แคมป์ไฟ (กด '{gameinput.sit}') เพื่อฟื้นฟูพลังชีวิตและความเหนื่อยล้า", + "ประสบปัญหากระเป๋าเต็มหรือเกราะไม่โหดพอใช่ไหม สร้างกระเป๋าและเกราะที่โหดขึ้นกว่าเดิมได้โดยการเปิดเมนูสร้างของ กด '{gameinput.crafting}'", + "กด '{gameinput.roll}' เพื่อหลบการโจมตีแบบดิจิทัล", + "ไม่แน่ใจว่าวัตถุในการสร้างของหาจากไหนหรอ? พิม 'input:' ในแถบด้านบนเพื่อดูวัตถุที่ต้องใช้", + "ถ่ายรูปเท่ห์ ๆ ไปอวดเพื่อนด้วย '{gameinput.screenshot}'", + ], + } +) diff --git a/assets/voxygen/i18n/th_TH/npc.ron b/assets/voxygen/i18n/th_TH/npc.ron new file mode 100644 index 0000000000..9c9006eb69 --- /dev/null +++ b/assets/voxygen/i18n/th_TH/npc.ron @@ -0,0 +1,250 @@ +/// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Localization for ไทย (Thai) +( + string_map: { + }, + + vector_map: { + "npc.speech.villager": [ + "ฮืมมมม ชีส", + ], + "npc.speech.villager_open": [ + "วัวคิดอะไรตอนกินหญ้านะ คิดเหมือนตอนเรากินข้าวหรือเปล่า?", + "สงสัยไหมว่าทำไม Glowing Remains ถึงเรืองแสงได้", + "เคยเห็น Land Shark ไหม ฉันได้ข่าวว่ามีคนเจอแถบทะเลทราย", + "อีกฝากของภูเขามีศัตรูอยู่ใช่ไหม?", + "เคยฝากขนมไว้ให้กับน้อง แล้วพอกลับมาเอาคืนขนมหายไปไหม? น่าแปลกใจจริง ๆ", + "เคยจับหิ้งห้อยไหม? เคยหรอ?", + "เขาลือกันว่าในถ้ำมีอัญมนีเต็มไปหมดเลยนะ เชื่อไหม", + "Sauroks พวกนี้มากจากไหนกันนะเต็มไปหมดเลย", + ], + "npc.speech.villager_adventurous": [ + "สักวันฉันจะสร้างเครื่องร่อนแล้วบินไปแตะขอบฟ้าให้ได้เลย", + "ไวฉันโตกว่านี้อีกนิดหนึ่งชั้นจะเข้าไปตะลุยถ้ำนั้นให้รู้แล้วรู้รอด", + ], + "npc.speech.villager_closed": [ + "หน้าตาไม่คุ้นเลย ทำตัวตามสบายนะคนแปลกหน้า", + "หมู่บ้านเราสุดยอดที่สุดแล้วในระแวงนี้หน่ะนะ", + "มีคนเคยผ่านมาแล้วเล่าให้ฟังว่า Mushroom เนี่ยดีต่อสุขภาพสุด ๆ ฉันก็ไม่รู้หรอกนะว่าจริงแท้ขนาดไหน", + "จะทำดี หรือจะไม่ทำดี กลับบ้านไปเลี้ยงวัวดีกว่า", + ], + "npc.speech.villager_conscientious": [ + "ฉันไม่ใช่นักเดินทางหรอก แต่ก็มีอะไรให้ทำตลอดนั่นแหละ", + "เชื่อไหมว่ามีคนคนหนึ่งสั่งฝนให้ตกได้ด้วยนะ", + ], + "npc.speech.villager_busybody": [ + "ฉันกำลังยุ่งมาก ๆ ขอโทษทีนะ", + ], + "npc.speech.villager_unconscientious": [ + "อาหารเช้าเป็นสิ่งสำคัญนะ มากินข้าว(รอบที่สอง)กันดีกว่า", + "บ้านฉันไม่เรียบร้อยเท่าไหร่ แต่ถ้าฉันคิดแบบนั้นฉันก็ต้องเก็บกวาดอยู่ ไม่เอาดีกว่า ฮ่าฮ่าฮ่า", + "เป็นเรื่องแล้วไง... แว่นตาหาย", + ], + "npc.speech.villager_extroverted": [ + "เมื่อวันก่อนนะพี่ แหม่ไม่อยากจะเล่า", + "อรุณเบิกฟ้า นกกาโบยบิน", + "ว่าไงคุณนักเดินทาง อากาศแจ๋มเลยใช่ไหมหล่ะ", + "ฉันได้บอกคุณหรือยังว่าฉันชอบชีสมาก ๆ เลย", + "วันนี้เป็นอย่างไรบ้างคุณนักเดินทาง!", + "ชีสคนแคระนี้ช่างอร่อยเกินบรรยายจริง ๆ ถ้าทำกินเองได้คงจะดีน่าดู", + "คุณทำนายฝันเป็นไหม? เมื่อคืนฉันฝันว่ามีชีสก้อนเบ้อเร่อมารัดด้วยแหละ", + "ฉันชอบน้ำผึ้งนะ แต่ไม่ถูกใจผึ้งเท่าไหร่ มีที่ไหนต่อยเขาแล้วตายเอง???", + ], + "npc.speech.villager_sociable": [ + "นั่งพักกินชีสกับเราก่อนไหมคุณนักเดินทาง? ฉันรับประกันว่าอร่อย", + "อยากเห็นสวนสุดรักของพวกเรารึเปล่า ! ไม่หรอ?, โอเค..งั้ไว้ครั้งหน้าก็ได้.", + "ฉันปลูกดอกไม้ไว้เต็มเลย อยากดูไหมคุณนักเดินทาง? ไม่อยากหรอ? แย่จัง", + ], + "npc.speech.villager_introverted": [ + "มิงกาลาบา", + "ฉันก็แค่ชาวบ้านธรรมดา ๆ ที่ผ่านทางมาก็เท่านั้นแหละ", + ], + "npc.speech.villager_agreeable": [ + "วันนี้อากาศเย็นสบาย ใช่ไหมคุณนักเดินทาง", + "ถ้ามีอะไรให้ช่วยบอกฉันได้เลยนะ", + "แมวฉัน แมวฉันหาย มีใครเห็นแมวฉันไหม!?", + ], + "npc.speech.villager_worried": [ + "ฉันมีลางสังหรณ์ไม่ดีเลย ระวังตัวด้วยนะคุณนักเดินทาง ฉันเป็นห่วงคุณเหลือเกิน", + ], + "npc.speech.villager_disagreeable": [ + "คนสมัยนี้พูดตรงไปก็ไม่ชอบ พูดอ้อมไปก็ไม่ชอบ เอาแต่ใจจริง ๆ", + "เดี๋ยวนี้คนเป็นอะไรไปหมดเปราะบางกันเหลือเกิน", + ], + "npc.speech.villager_neurotic": [ + "มีดันเจียนอยู่ใกล้ ๆ แบบนี้ฉันรู้สึกไม่สบายใจเลย เมื่อไหร่จะมีคนไปกำจัดมอสเตอร์พวกนั้นนะ", + "ต้องมีคนไปจัดพวก Cultist ให้ราบคาบไปสักที แค่ออกความเห็นนะ ไม่ได้จะอาสา", + "ท้องไส้ไม่ดีเลย รู้สึกเหมือนเรื่องร้าย ๆ จะเกิดขึ้น", + "พวก Wolf ชักจะเข้ามาใกล้หมู่บ้านเกินไปแล้ว ต้องหาคนฝีมือดีไปไล่", + ], + "npc.speech.villager_sad_loner": [ + "เหงาจัง", + "... ขอโทษที พอดีว่าฉันน่ะคุยไม่ค่อยเก่งเท่าไหร่", + ], + "npc.speech.villager_seeker": [ + "ฉันอยากไปเห็นโลกภายนอก นอกกำแพงนี้ นั่นแหละความฝันของฉันเอเรน เย...", + ], + "npc.speech.villager_stable": [ + "วันนี้เป็นวันที่สงบดีจริง ๆ", + "ชีวิตมันก็... ไม่ได้แย่ขนานนั้นนะ", + "ช่างเป็นวันที่สดใส นกร้องขับขาน ดอกไม้เบ่งบาน ในวันแบบนี้คนแบบคุณควรไปเดินเล่นในป่า!", + ], + "npc.speech.villager_decline_trade": [ + "ขอโทษที ฉันไม่ของอะไรจะแลกหรอก", + "ชาวบ้านอย่างฉันจะมีของอะไรไปแลกกับคุณ", + "บ้านหลังนี้ฉันยังโปะไม่หมดน่ะ คงจะแลกไม่ได้หรอกนะ!", + ], + "npc.speech.merchant_advertisement": [ + "แวะดูสักนิด แวะพักสักหน่อย อาจจะเจอของที่ถูกใจนะคุณนักเดินทาง", + "อยากซื้อขายรึเปล่าเอ่ย?", + "ฉันมีของเด็ด เด็ดเยอะแยะเลยนะ อยากจะดูไหมหล่ะ?" + ], + "npc.speech.merchant_busy": [ + "ช้าก่อนสหาย ฉันมีแค่สองมือ", + "สักครู่นะ ใกล้จะเสร็จแล้ว", + "ฉันยุ่งมากเลย ขอเวลาอีกสักพักรพ", + ], + "npc.speech.merchant_busy_rude": [ + "เด็กสมัยนี้รอไม่เป็นเลยรึ", + "กลับไปต่อแถวซะ เจ้าคนไร้สามัญสำนึก", + "แซงคิวแบบนี้ นิสัยไม่ดีเลยนะ", + ], + "npc.speech.merchant_trade_successful": [ + "ยินดีที่ได้ทำธุริกจร่วมกัน สหาย", + "ขอบคุณนะ", + ], + "npc.speech.merchant_trade_declined": [ + "แหม่ น่าเสียดายจริง ๆ ไว้คราวหน้าก็แล้วก็", + "อินิดูก่อนแล้วกลับมาซื้อทีหลังได้นะจ๊ะนายจ๋า" + ], + "npc.speech.villager_cultist_alarm": [ + "ทุกคนระวัง! พวก Cultist กำลังมา!", + "ผู้ชายมาทางนี้! พวก Cultist บุกแล้ว!", + "ใจกล้ามากที่จะตีหมู่บ้านของเรา เจ้าพวก Cultist!", + "ทำให้มันเสียใจที่มาบุกหมู่บ้านเรา!", + "อย่าให้พวกมันคิดว่าเราอ่อนแอ แสดงให้มันเห็นว่าไม่กลัวมัน", + "เจ้าพวก Cultist สารเลว", + "เป็นไงรสชาติคมดาบฉันถูกปากไหม เจ้าพวก Cultist โสมม", + "ชีวิตของคนบริสุทธิ์ที่ไร้ทางสู้ พวกแกจะต้องชดใช้", + "พระเจ้าช่วยกล้วยทอด มีพวก Cultist ปลอมตัวมาในหมู่พวกเรา", + "ความชั่วร้ายของพวกแก จะจบอยู่ที่นี้!", + "อย่างแกเนี่ยต้องเจอคนอย่างฉัน!", + "สวดมนต์อ้อนวอนไปก็เท่านั้นแหละ เจ้าพวก Cultist", + "มันอยู่ตรงนั้น พวกลุย", + "ตรงหน้าสิบสองนาฬิกา พวกเราจัดให้มันสักดอก", + "ตรงนั้น อย่ามันรอดไปได้", + "สนใจรับความตายร้อน ๆ สักจอกไหมหล่ะ เดี๋ยวฉันเลี้ยงเอง", + "ฉันจะไม่วันลืมสิ่งที่แกทำกับฉัน ไม่มีวัน!", + "ชีวิตที่น่าสังเวช จบสิ้นเพียงเท่านี้", + "ลัทธิอันโสโครก สิ้นสุดแล้ว", + "กรรมติดคมดาบ", + "ขอโทษที แต่พวกเราไม่ต้อนรับ", + "อยู่แบบหลบ ๆ ซ่อน ๆ ก็ดีอยู่แล้ว", + ], + "npc.speech.villager_under_attack": [ + "ทางนี้! ช่วยด้วย!", + "ทางนี้! ช่วยด้วย!", + "โอ้ย! เล่นแรงจัง โป้ง! ไม่เล่นด้วยแล้ว", + "โอ้ย! เล่นแรงจัง โป้ง! ไม่เล่นด้วยแล้ว", + "ฉันพลาดท่าแล้ว ช่วยด้วย! ทางนี้!", + "ได้ทีขี่ม้าไล่เลยนะ ใครก็ได้ช่วยmu!", + "ช่วยด้วย!", + "เจ็บเหลือเกิน ใครก็ได้ช่วยฉันmy!", + "อั๊ก ช่วย...ด้วย ได้โปรด", + "ทางนี้! ทางนี้!", + "ทางนี้! ทางนี้! เร็วเข้า!", + "ฉันต้านไว้ได้อีกไม่นาน", + "บ้าที่สุด! ขอกำลังเสริมด่วน!", + "บัดสบเอ๊ย! ขอกำลังเสริมด่วน!", + "ใครก็ได้ช่วยพวกเราด้วย!", + "ฆาตกรเต็มไปหมด ช่วยฉันที!", + "ฆาตกรเต็มไปหมด ทุกคนต้านไว้!", + "ช่วยด้วย! พวกมันจะฆ่าฉัน", + "ทหาร ทางนี้เร็วเข้า!", + "ทหาร ทางนี้!", + "ทหาร! ได้โปรดปกป้องฉันด้วย", + "ทหาร! ใครก็ได้! ฉันกลัวเหลือเกิน", + "ทหาร! มีเรื่องแล้ว!", + "ทหาร! ทหาร!", + "ทหาร! มีผู้ร้ายอยู่ตรงนี้!", + "ใครก็ได้ จัดการคนพวกนี้ที!", + "ทหาร! มีคนจะทำร้ายฉัน", + "พระเจ้าคุ้มครอง", + "ทหารหายไปไหนกันหมด ฉันอยู่ตรงนี้! ช่วยด้วย!", + "สารเลว!", + "ได้โปรด ฉันยังไม่อยากตาย", + "ได้โปรด พระเจ้าช่วยคุ้มครองลูกด้วย", + "โอ้ย! เจ็บนะ!", + "พวกมันกำลังจะมาฆ่าฉัน", + "พวกมันจะบูชาฉัน ช่วยด้วย!", + "ความรุนแรง ช่างเป็นวงจรที่อุบาวท์เสียจริง", + "แค่นี้ ไกลหัวใจ (ปอด)", + "พอใจหรือยัง", + "ฉันไปทำอะให้แค้นเคืองกันหรือยังไง", + "อย่าทำอะไรฉันอีกเลย ฉันกลัวแล้ว", + "ถือมีดระวังหน่อยสิ เกิดผีผลักขึ้นมาจะทำยังไง!", + "ฉันขอสาปแช่งพวกแกทุกตน", + "ได้โปรด ได้โปรด", + "ชักจะมีน้ำโหขึ้นมาแล้วนะ!", + "อาการมันเป็นยังไงหนิ พี่บ่าว", + "ฉันเอาคืนให้สาสมเลยคอยดู", + "ฉันไม่ของมีค่าอะไรหรอก อย่าทำอะไรฉันเลย", + "หยุดนะ ไม่งั้นฉันจะไปฟ้องพ่อ ให้มาจัดการคุณ", + "แงงงงง แม่จ้าช่วยหนูด้วยยยย", + "เทวดาฟ้าดินเป็นพยาน", + "สหาย อย่าทำแบบนี้เลย มันบาปนะ", + "นี้! นิสัยไม่ดีเลยนะ", + "พอได้หรือยังพ่อคุณ รู้แล้วว่าเก่ง", + "ไว้ชีวิตข้าน้อยด้วย", + "ฉันมีครอบครัวที่ต้องเลี้ยง ถ้าฉันตายพวกเขาจะอยู่ยังไง", + "ฉันยังเด็กอย่าทำอะไรฉันเลย", + "ค่อย ๆ พูด ค่อย ๆ จากันก่อนสหาย", + "ใช้ความรุนแรงแก้ปัญหาไม่ได้นะ มันไม่ถูกต้อง!", + "ถึงว่าหล่ะ เมื่อเช้าจิ้งจกทัก...", + "อุ๊ย เจ็บนะ ระวังหน่อยสิ!", + "ว๊ายยยยยยยยยย", + "ไร้มารยาทสิ้นดี", + "พอเถอะก่อนจะบานปลาย", + "สาธุ ของให้หน้าเป็นสิว", + "สนุกอยู่คนเดียวแบบนี้ ใช้่ไม่ได้", + "รู้ไหมว่าฉันเป็นลูกใคร!?", + "ระวังเถอะ เวรกรรมจะตามทัน", + "หยุดเถอะ ก่อนจะเจ็บตัว", + "ช้าก่อน ฉันไม่อยากมีเรื่อง", + "ต้องมีเรื่องอะไรเข้าใจผิดกันแน่ ๆ", + "เราอย่าใช้กำลังคุยกันเลยนะ", + "ไส่หัวไป เจ้าคนสถุน", + "เจ็บไปหมดแล้ว", + "มาอารมณ์ไหนอีกละเนี่ย", + "ฉันชักจะรำคาญแล้วสิ ", + "จ จำคนผิดแล้ววววว", + "เสี่ยส่งคนมาจริง ๆ หรอเนี่ย?", + "พอเถอะนะ เอาจริง ๆ จากใจเลย", + "ทหาร! เอามันไปขัง", + "ส่งหมาไปกัดซะดีไหม", + "ฉันผิดอารายยยยย", + ], + "npc.speech.villager_enemy_killed": [ + "ต่อหน้าข้า ศัตรูพ่ายแพ้เช่นเคย", + "ความสงบสุขกลับมาอีกครั้ง", + "... เรา มาทำอะไรอยู่ตรงนี้กันนะ", + ], + "npc.speech.menacing": [ + "อย่าบอกว่าไม่เตือนนะ", + "ห่าง ๆ หน่อยสหาย", + "น่ากลัวตายหล่ะ", + "ไปไหนก็ไป", + "อยากหลับแบบไม่ง่วงสิท่า", + "ไม่ชอบขี้หน้าเลยแหะ", + ], + "npc.speech.cultist_low_health_fleeing": [ + "พี่น้องข้า กลับไปตั้งหลัก!", + "พี่น้องข้า ถอย!", + "ฝากไว้ก่อนเถอะ", + "ความอัปยศนี้ ข้าจะตามล้างแค้นทุกชาติไป", + "เหนื่อยเหลือเกิน ต้อง... หนี", + "ทุกอย่าง ดู... มืดไปหมด", + ] + } +) diff --git a/assets/voxygen/i18n/th_TH/template.ron b/assets/voxygen/i18n/th_TH/template.ron new file mode 100644 index 0000000000..f0d8b704da --- /dev/null +++ b/assets/voxygen/i18n/th_TH/template.ron @@ -0,0 +1,12 @@ +/// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Localization for "global" English +( + string_map: { + + }, + + + vector_map: { + } +) diff --git a/assets/voxygen/i18n/tr_TR/hud/settings.ron b/assets/voxygen/i18n/tr_TR/hud/settings.ron index db24682753..e2a5038977 100644 --- a/assets/voxygen/i18n/tr_TR/hud/settings.ron +++ b/assets/voxygen/i18n/tr_TR/hud/settings.ron @@ -22,10 +22,7 @@ "hud.settings.buffs_mmap": "Etkiler haritanın yanında", "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.speech_bubble": "Konuşma balonu", "hud.settings.speech_bubble_dark_mode": "Konuşma balonunda karanlık tema kullan", "hud.settings.speech_bubble_icon": "Konuşma balonunda ikon göster", diff --git a/assets/voxygen/i18n/uk_UA/hud/ability.ron b/assets/voxygen/i18n/uk_UA/hud/ability.ron new file mode 100644 index 0000000000..b0c79bea5e --- /dev/null +++ b/assets/voxygen/i18n/uk_UA/hud/ability.ron @@ -0,0 +1,35 @@ +/// WARNING: Localization files shall be saved in UTF-8 format without BOM + +/// Localization for Ukrainian language +( + string_map: { + // Debug stick + "common.abilities.debug.possess.name": "Заклинаюча Стріла", + "common.abilities.debug.possess.desc": "Стріляє отруйною стрілою. Дає тобі контроль над ціллю.", + // Sword + "common.abilities.sword.spin.name": "Буревій", + "common.abilities.sword.spin.desc": "Рушай вперед кружляючи з мечем.", + // Axe + "common.abilities.axe.leap.name": "Стрибок Сокири", + "common.abilities.axe.leap.desc": "Стрибок з рубаним ударом, слідує за курсором.", + // Hammer + "common.abilities.hammer.leap.name": "Погром", + "common.abilities.hammer.leap.desc": "Атака по області. Стрибок спрямований за курсором.", + // Bow + "common.abilities.bow.shotgun.name": "Стріловик", + "common.abilities.bow.shotgun.desc": "Постріл купою стріл за раз.", + // Staff + "common.abilities.staff.fireshockwave.name": "Кільце Вогню", + "common.abilities.staff.fireshockwave.desc": "Підпалює землю вогненною ударною хвилєю.", + // Sceptre + "common.abilities.sceptre.wardingaura.name": "Захисна Аура", + "common.abilities.sceptre.wardingaura.desc": "Укріплює тебе і твоїх спільників силами природи на деякий час.", + // Unknown + "common.abilities.unknown.name": "Неназвана Здатність", + "common.abilities.unknown.desc": "Здатність без опису", + }, + + + vector_map: { + } +) diff --git a/assets/voxygen/i18n/uk_UA/hud/settings.ron b/assets/voxygen/i18n/uk_UA/hud/settings.ron index ce0e78db63..7eba6b69fe 100644 --- a/assets/voxygen/i18n/uk_UA/hud/settings.ron +++ b/assets/voxygen/i18n/uk_UA/hud/settings.ron @@ -24,10 +24,7 @@ "hud.settings.buffs_mmap": "Бафи біля Мінімапи", "hud.settings.toggle_bar_experience": "Панель досвіду", "hud.settings.scrolling_combat_text": "Відображення Пошкоджень/Зцілень", - "hud.settings.single_damage_number": "Роздільно нанесені Гравцем", - "hud.settings.cumulated_damage": "Сумарно нанесені Гравцем", "hud.settings.incoming_damage": "Роздільно отримані Гравцем", - "hud.settings.cumulated_incoming_damage": "Сумарно отримані Гравцем", "hud.settings.speech_bubble": "Діалоги", "hud.settings.speech_bubble_dark_mode": "Темний режим", "hud.settings.speech_bubble_icon": "Піктограма", diff --git a/assets/voxygen/i18n/vi_VI/hud/settings.ron b/assets/voxygen/i18n/vi_VI/hud/settings.ron index c19dc887a7..db00a4317d 100644 --- a/assets/voxygen/i18n/vi_VI/hud/settings.ron +++ b/assets/voxygen/i18n/vi_VI/hud/settings.ron @@ -24,10 +24,7 @@ "hud.settings.buffs_mmap": "Buffs tại Minimap", "hud.settings.toggle_bar_experience": "Bật tắt thanh kinh nghiệm", "hud.settings.scrolling_combat_text": "Thông Tin Chiến Đấu", - "hud.settings.single_damage_number": "Sát thương từng đòn đánh", - "hud.settings.cumulated_damage": "Sát thương tích lũy", "hud.settings.incoming_damage": "Sát thương nhận phải", - "hud.settings.cumulated_incoming_damage": "Sát thương tích lũy nhận phải", "hud.settings.speech_bubble": "Bong Bóng Thoại", "hud.settings.speech_bubble_dark_mode": "Chế độ tối màu", "hud.settings.speech_bubble_icon": "Biểu tượng bong bóng thoại", diff --git a/assets/voxygen/i18n/zh_CN/hud/settings.ron b/assets/voxygen/i18n/zh_CN/hud/settings.ron index 64683542a4..4ff00b42e4 100644 --- a/assets/voxygen/i18n/zh_CN/hud/settings.ron +++ b/assets/voxygen/i18n/zh_CN/hud/settings.ron @@ -22,10 +22,7 @@ "hud.settings.buffs_mmap": "增益效果显示在小地图旁", "hud.settings.toggle_bar_experience": "显示经验条", "hud.settings.scrolling_combat_text": "战斗信息", - "hud.settings.single_damage_number": "单次伤害", - "hud.settings.cumulated_damage": "累计伤害", "hud.settings.incoming_damage": "所受伤害", - "hud.settings.cumulated_incoming_damage": "累计所受伤害", "hud.settings.speech_bubble": "对话框", "hud.settings.speech_bubble_dark_mode": "对话框启用暗色模式", "hud.settings.speech_bubble_icon": "对话框显示图标", diff --git a/assets/voxygen/i18n/zh_TW/hud/settings.ron b/assets/voxygen/i18n/zh_TW/hud/settings.ron index c1fe7bd594..c0f1d39a3c 100644 --- a/assets/voxygen/i18n/zh_TW/hud/settings.ron +++ b/assets/voxygen/i18n/zh_TW/hud/settings.ron @@ -20,10 +20,7 @@ "hud.settings.toggle_shortcuts": "顯示快捷鍵", "hud.settings.toggle_bar_experience": "顯示經驗條", "hud.settings.scrolling_combat_text": "戰鬥訊息", - "hud.settings.single_damage_number": "單一傷害", - "hud.settings.cumulated_damage": "累積傷害", "hud.settings.incoming_damage": "所受傷害", - "hud.settings.cumulated_incoming_damage": "累積所受傷害", "hud.settings.energybar_numbers": "能量條", "hud.settings.values": "數字", "hud.settings.percentages": "百分比", diff --git a/assets/voxygen/item_image_manifest.ron b/assets/voxygen/item_image_manifest.ron index 1c7db9d146..d28341f06b 100644 --- a/assets/voxygen/item_image_manifest.ron +++ b/assets/voxygen/item_image_manifest.ron @@ -2699,6 +2699,14 @@ "voxel.armor.misc.pants.grayscale", (0.0, 1.0, 0.0), (-120.0, 210.0,15.0), 0.9, ), + Simple("common.items.armor.misc.foot.ski"): VoxTrans( + "voxel.armor.misc.foot.ski", + (0.0, 0.0, 0.0), (-120.0, 210.0,15.0), 0.9, + ), + Simple("common.items.armor.misc.foot.iceskate"): VoxTrans( + "voxel.armor.misc.foot.iceskate", + (0.0, 0.0, 0.0), (-120.0, 210.0,15.0), 0.9, + ), // Backs Simple("common.items.armor.misc.back.short_0"): VoxTrans( "voxel.armor.misc.back.short-0", diff --git a/assets/voxygen/shaders/clouds-frag.glsl b/assets/voxygen/shaders/clouds-frag.glsl index 057dabe157..01faedb424 100644 --- a/assets/voxygen/shaders/clouds-frag.glsl +++ b/assets/voxygen/shaders/clouds-frag.glsl @@ -28,31 +28,29 @@ // This *MUST* come after `cloud.glsl`: it contains a function that depends on `cloud.glsl` when clouds are enabled #include -layout(set = 1, binding = 0) +layout(set = 2, binding = 0) uniform texture2D t_src_color; -layout(set = 1, binding = 1) +layout(set = 2, binding = 1) uniform sampler s_src_color; -layout(set = 1, binding = 2) +layout(set = 2, binding = 2) uniform texture2D t_src_depth; -layout(set = 1, binding = 3) +layout(set = 2, binding = 3) uniform sampler s_src_depth; layout(location = 0) in vec2 uv; -layout (std140, set = 1, binding = 4) +layout (std140, set = 2, binding = 4) uniform u_locals { - mat4 proj_mat_inv; - mat4 view_mat_inv; + mat4 all_mat_inv; }; layout(location = 0) out vec4 tgt_color; vec3 wpos_at(vec2 uv) { float buf_depth = texture(sampler2D(t_src_depth, s_src_depth), uv).x; - mat4 inv = view_mat_inv * proj_mat_inv;//inverse(all_mat); vec4 clip_space = vec4((uv * 2.0 - 1.0) * vec2(1, -1), buf_depth, 1.0); - vec4 view_space = inv * clip_space; + vec4 view_space = all_mat_inv * clip_space; view_space /= view_space.w; if (buf_depth == 0.0) { vec3 direction = normalize(view_space.xyz); @@ -84,6 +82,76 @@ void main() { #if (CLOUD_MODE == CLOUD_MODE_NONE) color.rgb = apply_point_glow(cam_pos.xyz + focus_off.xyz, dir, dist, color.rgb); + #else + vec3 old_color = color.rgb; + + // normalized direction from the camera position to the fragment in world, transformed by the relative rain direction + vec3 adjusted_dir = (vec4(dir, 0) * rain_dir_mat).xyz; + + // stretch z values as they move away from 0 + float z = (-1 / (abs(adjusted_dir.z) - 1) - 1) * sign(adjusted_dir.z); + // normalize xy to get a 2d direction + vec2 dir_2d = normalize(adjusted_dir.xy); + // sort of map cylinder around the camera to 2d grid + vec2 view_pos = vec2(atan2(dir_2d.x, dir_2d.y), z); + + // compute camera position in the world + vec3 cam_wpos = cam_pos.xyz + focus_off.xyz; + + // Rain density is now only based on the cameras current position. + // This could be affected by a setting where rain_density_at is instead + // called each iteration of the loop. With the current implementation + // of rain_dir this has issues with being in a place where it doesn't rain + // and seeing rain. + float rain_density = rain_density * 1.0; + if (medium.x == MEDIUM_AIR && rain_density > 0.0) { + float rain_dist = 50.0; + #if (CLOUD_MODE <= CLOUD_MODE_LOW) + const int iterations = 2; + #else + const int iterations = 4; + #endif + + for (int i = 0; i < iterations; i ++) { + float old_rain_dist = rain_dist; + rain_dist *= 0.3 / 4.0 * iterations; + + vec2 drop_density = vec2(30, 1); + + vec2 rain_pos = (view_pos * rain_dist); + rain_pos.y += integrated_rain_vel; + + vec2 cell = floor(rain_pos * drop_density) / drop_density; + + float drop_depth = mix( + old_rain_dist, + rain_dist, + fract(hash(fract(vec4(cell, rain_dist, 0) * 0.1))) + ); + + float dist_to_rain = drop_depth / length(dir.xy); + vec3 rpos = dir * dist_to_rain; + if (dist < dist_to_rain || cam_wpos.z + rpos.z > CLOUD_AVG_ALT) { + continue; + } + + if (dot(rpos * vec3(1, 1, 0.5), rpos) < 1.0) { + break; + } + float rain_density = 10.0 * rain_density * floor(rain_occlusion_at(cam_pos.xyz + rpos.xyz)); + + if (rain_density < 0.001 || fract(hash(fract(vec4(cell, rain_dist, 0) * 0.01))) > rain_density) { + continue; + } + vec2 near_drop = cell + (vec2(0.5) + (vec2(hash(vec4(cell, 0, 0)), 0.5) - 0.5) * vec2(2, 0)) / drop_density; + + vec2 drop_size = vec2(0.0008, 0.03); + float avg_alpha = (drop_size.x * drop_size.y) * 10 / 1; + float alpha = sign(max(1 - length((rain_pos - near_drop) / drop_size * 0.1), 0)); + float light = sqrt(dot(old_color, vec3(1))) + (get_sun_brightness() + get_moon_brightness()) * 0.01; + color.rgb = mix(color.rgb, vec3(0.3, 0.4, 0.5) * light, mix(avg_alpha, alpha, min(1000 / dist_to_rain, 1)) * 0.25); + } + } #endif tgt_color = vec4(color.rgb, 1); diff --git a/assets/voxygen/shaders/fluid-frag/shiny.glsl b/assets/voxygen/shaders/fluid-frag/shiny.glsl index e07f8cc92d..413e9809ea 100644 --- a/assets/voxygen/shaders/fluid-frag/shiny.glsl +++ b/assets/voxygen/shaders/fluid-frag/shiny.glsl @@ -103,7 +103,8 @@ void main() { uint norm_dir = ((f_pos_norm >> 29) & 0x1u) * 3u; // Use an array to avoid conditional branching // Temporarily assume all water faces up (this is incorrect but looks better) - vec3 f_norm = vec3(0, 0, 1);//normals[norm_axis + norm_dir]; + vec3 surf_norm = normals[norm_axis + norm_dir]; + vec3 f_norm = vec3(0, 0, 1);//surf_norm; vec3 cam_to_frag = normalize(f_pos - cam_pos.xyz); // vec4 light_pos[2]; @@ -131,10 +132,11 @@ void main() { } vec3 c_norm = cross(f_norm, b_norm); - vec3 wave_pos = f_pos + focus_off.xyz; + vec3 wave_pos = mod(f_pos + focus_off.xyz, vec3(100.0)); + float wave_sample_dist = 0.025; float wave00 = wave_height(wave_pos); - float wave10 = wave_height(wave_pos + vec3(0.1, 0, 0)); - float wave01 = wave_height(wave_pos + vec3(0, 0.1, 0)); + float wave10 = wave_height(wave_pos + vec3(wave_sample_dist, 0, 0)); + float wave01 = wave_height(wave_pos + vec3(0, wave_sample_dist, 0)); // Possibility of div by zero when slope = 0, // however this only results in no water surface appearing @@ -142,11 +144,35 @@ void main() { float slope = abs((wave00 - wave10) * (wave00 - wave01)) + 0.001; vec3 nmap = vec3( - -(wave10 - wave00) / 0.1, - -(wave01 - wave00) / 0.1, - 0.1 / slope + -(wave10 - wave00) / wave_sample_dist, + -(wave01 - wave00) / wave_sample_dist, + wave_sample_dist / slope ); + #if (CLOUD_MODE != CLOUD_MODE_NONE) + if (rain_density > 0 && surf_norm.z > 0.5) { + vec3 drop_density = vec3(2, 2, 2); + vec3 drop_pos = wave_pos + vec3(0, 0, -time_of_day.x * 0.025); + vec2 cell2d = floor(drop_pos.xy * drop_density.xy); + drop_pos.z += noise_2d(cell2d * 13.1) * 10; + drop_pos.z *= 0.5 + hash_fast(uvec3(cell2d, 0)); + vec3 cell = vec3(cell2d, floor(drop_pos.z * drop_density.z)); + + if (fract(hash(fract(vec4(cell, 0) * 0.01))) < rain_density * rain_occlusion_at(f_pos.xyz) * 50.0) { + vec3 off = vec3(hash_fast(uvec3(cell * 13)), hash_fast(uvec3(cell * 5)), 0); + vec3 near_cell = (cell + 0.5 + (off - 0.5) * 0.5) / drop_density; + + float dist = length((drop_pos - near_cell) / vec3(1, 1, 2)); + float drop_rad = 0.125; + nmap.xy += (drop_pos - near_cell).xy + * max(1.0 - abs(dist - drop_rad) * 50, 0) + * 2500 + * sign(dist - drop_rad) + * max(drop_pos.z - near_cell.z, 0); + } + } + #endif + nmap = mix(f_norm, normalize(nmap), min(1.0 / pow(frag_dist, 0.75), 1)); //float suppress_waves = max(dot(), 0); diff --git a/assets/voxygen/shaders/include/cloud/regular.glsl b/assets/voxygen/shaders/include/cloud/regular.glsl index cddf83003e..ddb4a2f552 100644 --- a/assets/voxygen/shaders/include/cloud/regular.glsl +++ b/assets/voxygen/shaders/include/cloud/regular.glsl @@ -61,13 +61,16 @@ vec4 cloud_at(vec3 pos, float dist, out vec3 emission, out float not_underground ; } + float cloud_alt = alt + 1800; + //vec2 cloud_attr = get_cloud_heights(wind_pos.xy); float sun_access = 0.0; float moon_access = 0.0; - float cloud_sun_access = 0.0; + float cloud_sun_access = clamp((pos.z - cloud_alt) / 1500 + 0.5, 0, 1); float cloud_moon_access = 0.0; float cloud_broad_a = 0.0; float cloud_broad_b = 0.0; + // This is a silly optimisation but it actually nets us a fair few fps by skipping quite a few expensive calcs if ((pos.z < CLOUD_AVG_ALT + 15000.0 && cloud_tendency > 0.0)) { // Turbulence (small variations in clouds/mist) @@ -78,11 +81,10 @@ vec4 cloud_at(vec3 pos, float dist, out vec3 emission, out float not_underground const float CLOUD_DENSITY = 10000.0; const float CLOUD_ALT_VARI_WIDTH = 100000.0; const float CLOUD_ALT_VARI_SCALE = 5000.0; - float cloud_alt = CLOUD_AVG_ALT + alt * 0.5; cloud_broad_a = cloud_broad(wind_pos + sun_dir.xyz * 250); cloud_broad_b = cloud_broad(wind_pos - sun_dir.xyz * 250); - cloud = cloud_tendency + (0.0 + cloud = cloud_tendency + cloud_tendency * (0.0 + 24 * (cloud_broad_a + cloud_broad_b) * 0.5 #if (CLOUD_MODE >= CLOUD_MODE_MINIMAL) + 4 * (noise_3d((wind_pos + turb_offset) / 2000.0 / cloud_scale) - 0.5) @@ -93,24 +95,30 @@ vec4 cloud_at(vec3 pos, float dist, out vec3 emission, out float not_underground #if (CLOUD_MODE >= CLOUD_MODE_HIGH) + 0.75 * (noise_3d(wind_pos / 500.0 / cloud_scale) - 0.5) #endif - ) * 0.01; + ) * 0.1; cloud = pow(max(cloud, 0), 3) * sign(cloud); - cloud *= CLOUD_DENSITY * sqrt(cloud_tendency) * falloff(abs(pos.z - cloud_alt) / CLOUD_DEPTH); + cloud *= CLOUD_DENSITY * sqrt(cloud_tendency + 0.001) * falloff(abs(pos.z - cloud_alt) / CLOUD_DEPTH); // What proportion of sunlight is *not* being blocked by nearby cloud? (approximation) // Basically, just throw together a few values that roughly approximate this term and come up with an average - cloud_sun_access = exp(( + cloud_sun_access = mix(cloud_sun_access, exp(( // Cloud density gradient 0.25 * (cloud_broad_a - cloud_broad_b + (0.25 * (noise_3d(wind_pos / 4000 / cloud_scale) - 0.5) + 0.1 * (noise_3d(wind_pos / 1000 / cloud_scale) - 0.5))) #if (CLOUD_MODE >= CLOUD_MODE_HIGH) // More noise + 0.01 * (noise_3d(wind_pos / 500) / cloud_scale - 0.5) #endif - ) * 15.0 - 1.5) * 1.5; + ) * 15.0 - 1.5) * 1.5, min(cloud_tendency * 10, 1)); // Since we're assuming the sun/moon is always above (not always correct) it's the same for the moon cloud_moon_access = 1.0 - cloud_sun_access; } + #if (CLOUD_MODE >= CLOUD_MODE_LOW) + cloud += max(noise_3d((wind_pos) / 25000.0 / cloud_scale) - 0.75 + noise_3d((wind_pos) / 2500.0 / cloud_scale) * 0.1, 0) + * 0.1 + / (abs(pos.z - cloud_alt) / 500.0 + 0.2); + #endif + // Keeping this because it's something I'm likely to reenable later /* #if (CLOUD_MODE >= CLOUD_MODE_HIGH) @@ -173,11 +181,6 @@ vec4 cloud_at(vec3 pos, float dist, out vec3 emission, out float not_underground return vec4(sun_access, moon_access, vapor_density, air); } -float atan2(in float y, in float x) { - bool s = (abs(x) > abs(y)); - return mix(PI/2.0 - atan(x,y), atan(y,x), s); -} - #if (CLOUD_MODE == CLOUD_MODE_ULTRA) const uint QUALITY = 200u; #elif (CLOUD_MODE == CLOUD_MODE_HIGH) @@ -237,12 +240,24 @@ vec3 get_cloud_color(vec3 surf_color, vec3 dir, vec3 origin, const float time_of // i is an emergency brake float min_dist = clamp(max_dist / 4, 0.25, 24); int i; + + #if (CLOUD_MODE >= CLOUD_MODE_MEDIUM) + #ifdef EXPERIMENTAL_RAINBOWS + // TODO: Make it a double rainbow + float rainbow_t = (0.7 - dot(sun_dir.xyz, dir)) * 8 / 0.05; + int rainbow_c = int(floor(rainbow_t)); + rainbow_t = fract(rainbow_t); + rainbow_t = rainbow_t * rainbow_t; + #endif + #endif + for (i = 0; cdist > min_dist && i < 250; i ++) { ldist = cdist; cdist = step_to_dist(trunc(dist_to_step(cdist - 0.25, quality)), quality); vec3 emission; float not_underground; // Used to prevent sunlight leaking underground + vec3 pos = origin + dir * ldist * splay; // `sample` is a reserved keyword vec4 sample_ = cloud_at(origin + dir * ldist * splay, ldist, emission, not_underground); @@ -256,15 +271,47 @@ vec3 get_cloud_color(vec3 surf_color, vec3 dir, vec3 origin, const float time_of float step = (ldist - cdist) * 0.01; float cloud_darken = pow(1.0 / (1.0 + cloud_scatter_factor), step); float global_darken = pow(1.0 / (1.0 + global_scatter_factor), step); + // Proportion of light diffusely scattered instead of absorbed + float cloud_diffuse = 0.25; surf_color = // Attenuate light passing through the clouds surf_color * cloud_darken * global_darken + // Add the directed light light scattered into the camera by the clouds and the atmosphere (global illumination) - sun_color * sun_scatter * get_sun_brightness() * (sun_access * (1.0 - cloud_darken) /*+ sky_color * global_scatter_factor*/) + - moon_color * moon_scatter * get_moon_brightness() * (moon_access * (1.0 - cloud_darken) /*+ sky_color * global_scatter_factor*/) + + sun_color * sun_scatter * get_sun_brightness() * (sun_access * (1.0 - cloud_darken) * cloud_diffuse /*+ sky_color * global_scatter_factor*/) + + moon_color * moon_scatter * get_moon_brightness() * (moon_access * (1.0 - cloud_darken) * cloud_diffuse /*+ sky_color * global_scatter_factor*/) + sky_light * (1.0 - global_darken) * not_underground + emission * density_integrals.y * step; + + // Rainbow + #if (CLOUD_MODE >= CLOUD_MODE_MEDIUM) + #ifdef EXPERIMENTAL_RAINBOWS + if (rainbow_c >= 0 && rainbow_c < 8) { + vec3 colors[9] = { + surf_color, + vec3(0.9, 0.5, 0.9), + vec3(0.25, 0.0, 0.5), + vec3(0.0, 0.0, 1.0), + vec3(0.0, 0.5, 0.0), + vec3(1.0, 1.0, 0.0), + vec3(1.0, 0.6, 0.0), + vec3(1.0, 0.0, 0.0), + surf_color, + }; + float h = max(0.0, min(pos.z, 900.0 - pos.z) / 450.0); + float rain = rain_density_at(pos.xy) * pow(h, 0.1); + + float sun = sun_access * get_sun_brightness(); + float energy = pow(rain * sun * min(cdist / 500.0, 1.0), 2.0) * 0.4; + + surf_color = mix( + surf_color, + mix(colors[rainbow_c], colors[rainbow_c + 1], rainbow_t), + energy + ); + } + #endif + #endif } #ifdef IS_POSTPROCESS } diff --git a/assets/voxygen/shaders/include/lod.glsl b/assets/voxygen/shaders/include/lod.glsl index fa417dd021..d2efde0737 100644 --- a/assets/voxygen/shaders/include/lod.glsl +++ b/assets/voxygen/shaders/include/lod.glsl @@ -5,19 +5,11 @@ #include #include -layout(set = 0, binding = 5) uniform texture2D t_alt; -layout(set = 0, binding = 6) uniform sampler s_alt; layout(set = 0, binding = 7) uniform texture2D t_horizon; layout(set = 0, binding = 8) uniform sampler s_horizon; -const float MIN_SHADOW = 0.33; -vec2 pos_to_uv(texture2D tex, sampler s, vec2 pos) { - // Want: (pixel + 0.5) / W - vec2 texSize = textureSize(sampler2D(tex, s), 0); - vec2 uv_pos = (focus_off.xy + pos + 16) / (32.0 * texSize); - return vec2(uv_pos.x, /*1.0 - */uv_pos.y); -} +const float MIN_SHADOW = 0.33; vec2 pos_to_tex(vec2 pos) { // Want: (pixel + 0.5) @@ -36,6 +28,12 @@ vec4 cubic(float v) { return vec4(x, y, z, w) * (1.0/6.0); } +// Computes atan(y, x), except with more stability when x is near 0. +float atan2(in float y, in float x) { + bool s = (abs(x) > abs(y)); + return mix(PI/2.0 - atan(x,y), atan(y,x), s); +} + // NOTE: We assume the sampled coordinates are already in "texture pixels". vec4 textureBicubic(texture2D tex, sampler sampl, vec2 texCoords) { // TODO: remove all textureSize calls and replace with constants @@ -126,8 +124,9 @@ vec2 textureBicubic16(texture2D tex, sampler sampl, vec2 texCoords) { , sy); } +// Gets the altitude at a position relative to focus_off. float alt_at(vec2 pos) { - vec4 alt_sample = textureLod/*textureBicubic16*/(sampler2D(t_alt, s_alt), pos_to_uv(t_alt, s_alt, pos), 0); + vec4 alt_sample = textureLod/*textureBicubic16*/(sampler2D(t_alt, s_alt), wpos_to_uv(focus_off.xy + pos), 0); return (/*round*/((alt_sample.r / 256.0 + alt_sample.g) * (/*1300.0*//*1278.7266845703125*/view_distance.w)) + /*140.0*/view_distance.z - focus_off.z); //+ (texture(t_noise, pos * 0.002).x - 0.5) * 64.0; diff --git a/assets/voxygen/shaders/include/rain_occlusion.glsl b/assets/voxygen/shaders/include/rain_occlusion.glsl new file mode 100644 index 0000000000..5f525c282f --- /dev/null +++ b/assets/voxygen/shaders/include/rain_occlusion.glsl @@ -0,0 +1,31 @@ + +#ifndef RAIN_OCCLUSION_GLSL +#define RAIN_OCCLUSION_GLSL + +// Use with sampler2DShadow +layout(set = 1, binding = 4) +uniform texture2D t_directed_occlusion_maps; +layout(set = 1, binding = 5) +uniform samplerShadow s_directed_occlusion_maps; + +layout (std140, set = 0, binding = 14) +uniform u_rain_occlusion { + mat4 rain_occlusion_matrices; + mat4 rain_occlusion_texture_mat; + mat4 rain_dir_mat; + float integrated_rain_vel; + float rain_density; + vec2 occlusion_dummy; // Fix alignment. +}; + +float rain_occlusion_at(in vec3 fragPos) +{ + float bias = -0.2; + + vec4 rain_pos = rain_occlusion_texture_mat * vec4(fragPos, 1.0) - vec4(0, 0, bias, 0); + + float visibility = textureProj(sampler2DShadow(t_directed_occlusion_maps, s_directed_occlusion_maps), rain_pos); + + return visibility; +} +#endif diff --git a/assets/voxygen/shaders/include/sky.glsl b/assets/voxygen/shaders/include/sky.glsl index 585a5ef5f4..167ae6b407 100644 --- a/assets/voxygen/shaders/include/sky.glsl +++ b/assets/voxygen/shaders/include/sky.glsl @@ -5,6 +5,7 @@ #include #include #include +#include // Information about an approximately directional light, like the sun or moon. struct DirectionalLight { @@ -18,6 +19,12 @@ struct DirectionalLight { const float PI = 3.141592; +const vec3 SKY_DAWN_TOP = vec3(0.10, 0.1, 0.10); +const vec3 SKY_DAWN_MID = vec3(1.2, 0.3, 0.2); +const vec3 SKY_DAWN_BOT = vec3(0.0, 0.1, 0.23); +const vec3 DAWN_LIGHT = vec3(5.0, 2.0, 1.15); +const vec3 SUN_HALO_DAWN = vec3(8.2, 3.0, 2.1); + const vec3 SKY_DAY_TOP = vec3(0.1, 0.5, 0.9); const vec3 SKY_DAY_MID = vec3(0.02, 0.28, 0.8); const vec3 SKY_DAY_BOT = vec3(0.1, 0.2, 0.3); @@ -91,10 +98,31 @@ vec2 wind_offset = vec2(time_of_day.x * wind_speed); float cloud_scale = view_distance.z / 150.0; -float cloud_tendency_at(vec2 pos) { - float nz = textureLod(sampler2D(t_noise, s_noise), (pos + wind_offset) / 60000.0 / cloud_scale, 0).x - 0.3; - nz = pow(clamp(nz, 0, 1), 3); - return nz; +layout(set = 0, binding = 5) uniform texture2D t_alt; +layout(set = 0, binding = 6) uniform sampler s_alt; + +// Transforms coordinate in the range 0..WORLD_SIZE to 0..1 +vec2 wpos_to_uv(vec2 wpos) { + // Want: (pixel + 0.5) / W + vec2 texSize = textureSize(sampler2D(t_alt, s_alt), 0); + vec2 uv_pos = (wpos + 16) / (32.0 * texSize); + return vec2(uv_pos.x, /*1.0 - */uv_pos.y); +} + +// Weather texture +layout(set = 0, binding = 12) uniform texture2D t_weather; +layout(set = 0, binding = 13) uniform sampler s_weather; + +vec4 sample_weather(vec2 wpos) { + return textureLod(sampler2D(t_weather, s_weather), wpos_to_uv(wpos), 0); +} + +float cloud_tendency_at(vec2 wpos) { + return sample_weather(wpos).r; +} + +float rain_density_at(vec2 wpos) { + return sample_weather(wpos).g; } float cloud_shadow(vec3 pos, vec3 light_dir) { @@ -143,9 +171,11 @@ float get_moon_brightness(/*vec3 moon_dir*/) { } vec3 get_sun_color(/*vec3 sun_dir*/) { + vec3 light = (sun_dir.x > 0) ? DUSK_LIGHT : DAWN_LIGHT; + return mix( mix( - DUSK_LIGHT * magnetosphere_tint, + light * magnetosphere_tint, NIGHT_LIGHT, max(sun_dir.z, 0) ), @@ -450,9 +480,22 @@ vec3 get_sky_light(vec3 dir, float time_of_day, bool with_stars) { star = is_star_at(star_dir); } + vec3 sky_twilight_top = vec3(0.0, 0.0, 0.0); + vec3 sky_twilight_mid = vec3(0.0, 0.0, 0.0); + vec3 sky_twilight_bot = vec3(0.0, 0.0, 0.0); + if (sun_dir.x > 0) { + sky_twilight_top = SKY_DUSK_TOP; + sky_twilight_mid = SKY_DUSK_MID; + sky_twilight_bot = SKY_DUSK_BOT; + } else { + sky_twilight_top = SKY_DAWN_TOP; + sky_twilight_mid = SKY_DAWN_MID; + sky_twilight_bot = SKY_DAWN_BOT; + } + vec3 sky_top = mix( mix( - SKY_DUSK_TOP * magnetosphere_tint, + sky_twilight_top * magnetosphere_tint, SKY_NIGHT_TOP, pow(max(sun_dir.z, 0.0), 0.2) ) + star, @@ -462,7 +505,7 @@ vec3 get_sky_light(vec3 dir, float time_of_day, bool with_stars) { vec3 sky_mid = mix( mix( - SKY_DUSK_MID * magnetosphere_tint, + sky_twilight_mid * magnetosphere_tint, SKY_NIGHT_MID, pow(max(sun_dir.z, 0.0), 0.1) ), @@ -472,7 +515,7 @@ vec3 get_sky_light(vec3 dir, float time_of_day, bool with_stars) { vec3 sky_bot = mix( mix( - SKY_DUSK_BOT * magnetosphere_tint, + sky_twilight_bot * magnetosphere_tint, SKY_NIGHT_BOT, pow(max(sun_dir.z, 0.0), 0.2) ), @@ -507,7 +550,7 @@ vec3 get_sky_color(vec3 dir, float time_of_day, vec3 origin, vec3 f_pos, float q const vec3 SUN_SURF_COLOR = vec3(1.5, 0.9, 0.35) * 50.0; vec3 sun_halo_color = mix( - SUN_HALO_DUSK * magnetosphere_tint, + (sun_dir.x > 0 ? SUN_HALO_DUSK : SUN_HALO_DAWN)* magnetosphere_tint, SUN_HALO_DAY, pow(max(-sun_dir.z, 0.0), 0.5) ); diff --git a/assets/voxygen/shaders/particle-vert.glsl b/assets/voxygen/shaders/particle-vert.glsl index a850ca4294..b230abb7d7 100644 --- a/assets/voxygen/shaders/particle-vert.glsl +++ b/assets/voxygen/shaders/particle-vert.glsl @@ -75,6 +75,7 @@ const int TORNADO = 33; const int DEATH = 34; const int ENERGY_BUFFING = 35; const int WEB_STRAND = 36; +const int BLACK_SMOKE = 37; // meters per second squared (acceleration) const float earth_gravity = 9.807; @@ -191,7 +192,18 @@ void main() { vec3(rand2 * 0.02, rand3 * 0.02, 1.0 + rand4 * 0.1) ), vec3(linear_scale(0.5)), - vec4(vec3(0.8, 0.8, 1) * 0.5, start_end(1.0, 0.0)), + vec4(vec3(0.8, 0.8, 1) * 0.125 * (3.8 + rand0), start_end(1.0, 0.0)), + spin_in_axis(vec3(rand6, rand7, rand8), rand9 * 3 + lifetime * 0.5) + ); + break; + case BLACK_SMOKE: + attr = Attr( + linear_motion( + vec3(0), + vec3(rand2 * 0.02, rand3 * 0.02, 1.0 + rand4 * 0.1) + ), + vec3(linear_scale(0.5)), + vec4(vec3(0.8, 0.8, 1) * 0.125 * (1.8 + rand0), start_end(1.0, 0.0)), spin_in_axis(vec3(rand6, rand7, rand8), rand9 * 3 + lifetime * 0.5) ); break; @@ -203,7 +215,7 @@ void main() { vec3(rand2 * 0.1, rand3 * 0.1, 2.0 + rand4 * 1.0) ), vec3(1.0), - vec4(2, 1.5 + rand5 * 0.5, 0, start_end(1.0, 0.0)), + vec4(6, 3 + rand5 * 0.3 - 0.8 * percent(), 0.4, 1), spin_in_axis(vec3(rand6, rand7, rand8), rand9 * 3) ); break; @@ -419,16 +431,16 @@ void main() { attr = Attr( (inst_dir * slow_end(1.5)) + vec3(rand0, rand1, rand2) * (percent() + 2) * 0.1, vec3((2.5 * (1 - slow_start(0.2)))), - vec4(3, 1.6 + rand5 * 0.3 - 0.4 * percent(), 0.2, 1), + vec4(6, 3 + rand5 * 0.6 - 0.8 * percent(), 0.4, 1), spin_in_axis(vec3(rand6, rand7, rand8), percent() * 10 + 3 * rand9) ); break; case EXPLOSION: f_reflect = 0.0; // Fire doesn't reflect light, it emits it attr = Attr( - inst_dir * ((rand0+1.0)/2 + 0.4) * slow_end(2.0) + 0.3 * grav_vel(earth_gravity), + inst_dir * ((rand0+1.0)/2 + 0.4) * slow_end(0.25) + 0.3 * grav_vel(earth_gravity), vec3((3 * (1 - slow_start(0.1)))), - vec4(3, 1.6 + rand5 * 0.3 - 0.4 * percent(), 0.2, 1), + vec4(6, 3 + rand5 * 0.3 - 0.8 * percent(), 0.4, 1), spin_in_axis(vec3(rand6, rand7, rand8), percent() * 10 + 3 * rand9) ); break; @@ -447,7 +459,7 @@ void main() { attr = Attr( vec3(rand0, rand1, lifetime * 10 + rand2), vec3((5 * (1 - slow_start(0.5)))), - vec4(3, 1.6 + rand5 * 0.3 - 0.4 * percent(), 0.2, 1), + vec4(6, 3 + rand5 * 0.6 - 0.8 * percent(), 0.4, 1), spin_in_axis(vec3(rand3, rand4, rand5), rand6) ); break; diff --git a/assets/voxygen/shaders/rain-occlusion-directed-vert.glsl b/assets/voxygen/shaders/rain-occlusion-directed-vert.glsl new file mode 100644 index 0000000000..c8bfd187e4 --- /dev/null +++ b/assets/voxygen/shaders/rain-occlusion-directed-vert.glsl @@ -0,0 +1,65 @@ +#version 420 core +// #extension ARB_texture_storage : enable + +#include + +#define LIGHTING_TYPE LIGHTING_TYPE_REFLECTION + +#define LIGHTING_REFLECTION_KIND LIGHTING_REFLECTION_KIND_GLOSSY + +#if (FLUID_MODE == FLUID_MODE_CHEAP) +#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE +#elif (FLUID_MODE == FLUID_MODE_SHINY) +#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE +#endif + +#define LIGHTING_DISTRIBUTION_SCHEME LIGHTING_DISTRIBUTION_SCHEME_MICROFACET + +#define LIGHTING_DISTRIBUTION LIGHTING_DISTRIBUTION_BECKMANN + +#define HAS_SHADOW_MAPS + +// Currently, we only need globals for focus_off. +#include +// For shadow locals. +// #include + +layout (std140, set = 0, binding = 14) +uniform u_rain_occlusion { + mat4 rain_occlusion_matrices; + mat4 rain_occlusion_texture_mat; + mat4 rain_dir_mat; + float integrated_rain_vel; + float rain_density; + vec2 occlusion_dummy; // Fix alignment. +}; + +/* Accurate packed shadow maps for many lights at once! + * + * Ideally, we would just write to a bitmask... + * + * */ + +layout(location = 0) in uint v_pos_norm; +// in uint v_col_light; +// in vec4 v_pos; +// layout(location = 1) in uint v_atlas_pos; + +// Light projection matrices. +layout (std140, set = 1, binding = 0) +uniform u_locals { + vec3 model_offs; + float load_time; + ivec4 atlas_offs; +}; + +// out vec4 shadowMapCoord; + +const float EXTRA_NEG_Z = 32768.0; + +void main() { + vec3 f_chunk_pos = vec3(v_pos_norm & 0x3Fu, (v_pos_norm >> 6) & 0x3Fu, float((v_pos_norm >> 12) & 0xFFFFu) - EXTRA_NEG_Z); + vec3 f_pos = f_chunk_pos + (model_offs - focus_off.xyz); + + gl_Position = rain_occlusion_matrices * vec4(f_pos, 1.0); +} diff --git a/assets/voxygen/shaders/rain-occlusion-figure-vert.glsl b/assets/voxygen/shaders/rain-occlusion-figure-vert.glsl new file mode 100644 index 0000000000..b7f940ea2b --- /dev/null +++ b/assets/voxygen/shaders/rain-occlusion-figure-vert.glsl @@ -0,0 +1,86 @@ +#version 420 core +// #extension ARB_texture_storage : enable + +#define FIGURE_SHADER + +#include + +#define LIGHTING_TYPE LIGHTING_TYPE_REFLECTION + +#define LIGHTING_REFLECTION_KIND LIGHTING_REFLECTION_KIND_GLOSSY + +#if (FLUID_MODE == FLUID_MODE_CHEAP) +#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE +#elif (FLUID_MODE == FLUID_MODE_SHINY) +#define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE +#endif + +#define LIGHTING_DISTRIBUTION_SCHEME LIGHTING_DISTRIBUTION_SCHEME_MICROFACET + +#define LIGHTING_DISTRIBUTION LIGHTING_DISTRIBUTION_BECKMANN + +#define HAS_SHADOW_MAPS + +// Currently, we only need globals for focus_off. +#include +// For shadow locals. +// #include + +layout (std140, set = 0, binding = 14) +uniform u_rain_occlusion { + mat4 rainOcclusionMatrices; + mat4 texture_mat; + mat4 rain_dir_mat; + float integrated_rain_vel; + float rain_density; + vec2 occlusion_dummy; // Fix alignment. +}; + +/* Accurate packed shadow maps for many lights at once! + * + * Ideally, we would just write to a bitmask... + * + * */ + +layout(location = 0) in uint v_pos_norm; +layout(location = 1) in uint v_atlas_pos; +// in uint v_col_light; +// in vec4 v_pos; + +layout (std140, set = 1, binding = 0) +uniform u_locals { + mat4 model_mat; + vec4 highlight_col; + vec4 model_light; + vec4 model_glow; + ivec4 atlas_offs; + vec3 model_pos; + // bit 0 - is player + // bit 1-31 - unused + int flags; +}; + +struct BoneData { + mat4 bone_mat; + mat4 normals_mat; +}; + +layout (std140, set = 1, binding = 1) +uniform u_bones { + // Warning: might not actually be 16 elements long. Don't index out of bounds! + BoneData bones[16]; +}; + +// out vec4 shadowMapCoord; + +void main() { + uint bone_idx = (v_pos_norm >> 27) & 0xFu; + vec3 pos = (vec3((uvec3(v_pos_norm) >> uvec3(0, 9, 18)) & uvec3(0x1FFu)) - 256.0) / 2.0; + + vec3 f_pos = ( + bones[bone_idx].bone_mat * + vec4(pos, 1.0) + ).xyz + (model_pos - focus_off.xyz/* + vec3(0.0, 0.0, 0.0001)*/); + + gl_Position = rainOcclusionMatrices * vec4(f_pos, 1.0); +} diff --git a/assets/voxygen/shaders/sprite-vert.glsl b/assets/voxygen/shaders/sprite-vert.glsl index 44ee20bfe8..f5d25606f2 100644 --- a/assets/voxygen/shaders/sprite-vert.glsl +++ b/assets/voxygen/shaders/sprite-vert.glsl @@ -30,7 +30,7 @@ layout(location = 7) in float inst_glow; layout(location = 8) in float model_wind_sway; // NOTE: this only varies per model layout(location = 9) in float model_z_scale; // NOTE: this only varies per model -layout(set = 0, binding = 12) restrict readonly buffer sprite_verts { +layout(set = 0, binding = 15) restrict readonly buffer sprite_verts { uvec2 verts[]; }; @@ -92,6 +92,7 @@ void main() { #endif #ifndef EXPERIMENTAL_BAREMINIMUM + // TODO: take wind_vel into account // Wind sway effect f_pos += model_wind_sway * vec3( sin(tick.x * 1.5 + f_pos.y * 0.1) * sin(tick.x * 0.35), diff --git a/assets/voxygen/shaders/terrain-frag.glsl b/assets/voxygen/shaders/terrain-frag.glsl index 95a5de0b05..2c821f9cf4 100644 --- a/assets/voxygen/shaders/terrain-frag.glsl +++ b/assets/voxygen/shaders/terrain-frag.glsl @@ -231,6 +231,39 @@ void main() { vec3 k_d = vec3(1.0); vec3 k_s = vec3(R_s); + // Toggle to see rain_occlusion + // tgt_color = vec4(rain_occlusion_at(f_pos.xyz), 0.0, 0.0, 1.0); + // return; + #if (CLOUD_MODE != CLOUD_MODE_NONE) + if (rain_density > 0 && !faces_fluid && f_norm.z > 0.5) { + vec3 pos = f_pos + focus_off.xyz; + vec3 drop_density = vec3(2, 2, 2); + vec3 drop_pos = pos + vec3(pos.zz, 0) + vec3(0, 0, -tick.x * 1.0); + drop_pos.z += noise_2d(floor(drop_pos.xy * drop_density.xy) * 13.1) * 10; + vec2 cell2d = floor(drop_pos.xy * drop_density.xy); + drop_pos.z *= 0.5 + hash_fast(uvec3(cell2d, 0)); + vec3 cell = vec3(cell2d, floor(drop_pos.z * drop_density.z)); + + if (fract(hash(fract(vec4(cell, 0) * 0.01))) < rain_density * rain_occlusion_at(f_pos.xyz) * 50.0) { + vec3 off = vec3(hash_fast(uvec3(cell * 13)), hash_fast(uvec3(cell * 5)), 0); + vec3 near_cell = (cell + 0.5 + (off - 0.5) * 0.5) / drop_density; + + float dist = length((drop_pos - near_cell) / vec3(1, 1, 2)); + float drop_rad = 0.1; + float distort = max(1.0 - abs(dist - drop_rad) * 100, 0) * 1.5 * max(drop_pos.z - near_cell.z, 0); + k_a += distort; + k_d += distort; + k_s += distort; + f_norm.xy += (drop_pos - near_cell).xy + * max(1.0 - abs(dist - drop_rad) * 30, 0) + * 500.0 + * max(drop_pos.z - near_cell.z, 0) + * sign(dist - drop_rad) + * max(drop_pos.z - near_cell.z, 0); + } + } + #endif + // float sun_light = get_sun_brightness(sun_dir); // float moon_light = get_moon_brightness(moon_dir); /* float sun_shade_frac = horizon_at(f_pos, sun_dir); @@ -257,6 +290,37 @@ void main() { DirectionalLight sun_info = get_sun_info(sun_dir, point_shadow * sun_shade_frac, /*sun_pos*/f_pos); DirectionalLight moon_info = get_moon_info(moon_dir, point_shadow * moon_shade_frac/*, light_pos*/); + #ifdef EXPERIMENTAL_DIRECTIONALSHADOWMAPTEXELGRID + float offset_scale = 0.5; + vec3 offset_one = dFdx(f_pos) * offset_scale; + vec3 offset_two = dFdy(f_pos) * offset_scale; + vec3 one_up = f_pos + offset_one; + vec3 one_down = f_pos - offset_one; + vec3 two_up = f_pos + offset_two; + vec3 two_down = f_pos - offset_two; + + // Adjust this to change the size of the grid cells relative to the + // number of shadow texels + float grid_cell_to_texel_ratio = 32.0; + + vec2 shadowTexSize = textureSize(sampler2D(t_directed_shadow_maps, s_directed_shadow_maps), 0) / grid_cell_to_texel_ratio; + + vec4 one_up_shadow_tex = texture_mat * vec4(one_up, 1.0); + vec2 oust_snap = floor(one_up_shadow_tex.xy * shadowTexSize / one_up_shadow_tex.w); + vec4 one_down_shadow_tex = texture_mat * vec4(one_down, 1.0); + vec2 odst_snap = floor(one_down_shadow_tex.xy * shadowTexSize / one_down_shadow_tex.w); + vec4 two_up_shadow_tex = texture_mat * vec4(two_up, 1.0); + vec2 tust_snap = floor(two_up_shadow_tex.xy * shadowTexSize / two_up_shadow_tex.w); + vec4 two_down_shadow_tex = texture_mat * vec4(two_down, 1.0); + vec2 tdst_snap = floor(two_down_shadow_tex.xy * shadowTexSize / two_down_shadow_tex.w); + float border = length(max(abs(oust_snap - odst_snap), abs(tust_snap - tdst_snap))); + + if (border != 0.0) { + tgt_color = vec4(vec3(0.0, 0.7, 0.2), 1.0); + return; + } + #endif + float max_light = 0.0; // After shadows are computed, we use a refracted sun and moon direction. diff --git a/assets/voxygen/voxel/armor/misc/foot/iceskate.vox b/assets/voxygen/voxel/armor/misc/foot/iceskate.vox new file mode 100644 index 0000000000..c7cdeaec4c --- /dev/null +++ b/assets/voxygen/voxel/armor/misc/foot/iceskate.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c09d41a50285049e51249219d3ecfb5a034913491d35d67948705c957d42c8f +size 1596 diff --git a/assets/voxygen/voxel/armor/misc/foot/ski.vox b/assets/voxygen/voxel/armor/misc/foot/ski.vox new file mode 100644 index 0000000000..cdbb40415c --- /dev/null +++ b/assets/voxygen/voxel/armor/misc/foot/ski.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:16768cda33af1d245e2aee7aa92eea497f604227517b276a9b164cd6ab850320 +size 23322 diff --git a/assets/voxygen/voxel/humanoid_armor_foot_manifest.ron b/assets/voxygen/voxel/humanoid_armor_foot_manifest.ron index 5f42c91d7c..d4b95c17d3 100644 --- a/assets/voxygen/voxel/humanoid_armor_foot_manifest.ron +++ b/assets/voxygen/voxel/humanoid_armor_foot_manifest.ron @@ -164,5 +164,13 @@ vox_spec: ("armor.merchant.foot", (-2.5, -3.5, -2.0)), color: None ), + "common.items.armor.misc.foot.ski": ( + vox_spec: ("armor.misc.foot.ski", (-2.5, -15.5, -2.0)), + color: None + ), + "common.items.armor.misc.foot.iceskate": ( + vox_spec: ("armor.misc.foot.iceskate", (-2.5, -3.5, -2.0)), + color: None + ), }, )) diff --git a/assets/voxygen/voxel/item_drop_manifest.ron b/assets/voxygen/voxel/item_drop_manifest.ron index e527866de7..87947b2ed9 100644 --- a/assets/voxygen/voxel/item_drop_manifest.ron +++ b/assets/voxygen/voxel/item_drop_manifest.ron @@ -174,7 +174,7 @@ ModularWeapon(("common.items.modular.weapon.primary.sword.ornate", "common.items.mineral.ingot.orichalcum", One)): "voxel.weapon.sword.ornate.orichalcum-1h", ModularWeapon(("common.items.modular.weapon.primary.sword.sabre", "common.items.mineral.ingot.orichalcum", One)): "voxel.weapon.sword.sabre.orichalcum-1h", ModularWeapon(("common.items.modular.weapon.primary.sword.sawblade", "common.items.mineral.ingot.orichalcum", One)): "voxel.weapon.sword.sawblade.orichalcum-1h", - Simple("common.items.weapons.sword_1h.starter"): "voxel.weapon.sword_1h.starter", + Simple("common.items.weapons.sword_1h.starter"): "voxel.weapon.sword.starter_1h", // Axes ModularWeapon(("common.items.modular.weapon.primary.axe.axe", "common.items.mineral.ingot.bronze", Two)): "voxel.weapon.axe.axe.bronze-2h", ModularWeapon(("common.items.modular.weapon.primary.axe.battleaxe", "common.items.mineral.ingot.bronze", Two)): "voxel.weapon.axe.battleaxe.bronze-2h", diff --git a/assets/voxygen/voxel/sprite_manifest.ron b/assets/voxygen/voxel/sprite_manifest.ron index 32a0688b2b..ea021ba90c 100644 --- a/assets/voxygen/voxel/sprite_manifest.ron +++ b/assets/voxygen/voxel/sprite_manifest.ron @@ -1,5 +1,7 @@ #![enable(unwrap_newtypes)] -( +{ +// Represents the lack of a sprite. +Empty: None, // Windows Window1: Some(( variations: [ @@ -1348,7 +1350,7 @@ Ember: Some(( wind_sway: 0.0, )), // Smoke dummy -Smoke: Some(( +SmokeDummy: Some(( variations: [ ( model: "voxygen.voxel.sprite.ember.dummy", @@ -2902,7 +2904,11 @@ GiantKelp: Some(( ], wind_sway: 0.2, )), -//Seagrass +// Red Algae +RedAlgae: None, +// Underwater Vent +UnderwaterVent: None, +// Seagrass Seagrass: Some(( variations: [ ( @@ -3945,4 +3951,4 @@ Eldwood: Some(( ], wind_sway: 0.0, )), -) +} diff --git a/assets/world/wildlife/spawn/calendar/christmas/tundra/core.ron b/assets/world/wildlife/spawn/calendar/christmas/tundra/core.ron index 9706ece4c2..7e9ae3aca8 100644 --- a/assets/world/wildlife/spawn/calendar/christmas/tundra/core.ron +++ b/assets/world/wildlife/spawn/calendar/christmas/tundra/core.ron @@ -6,7 +6,7 @@ SpawnEntry ( groups: [ (15, (1, 1, "common.entity.wild.aggressive.snow_raptor")), (1, (1, 1, "common.entity.wild.aggressive.wendigo")), - (1, (1, 1, "common.entity.wild.aggressive.mammoth")), + (1, (2, 6, "common.entity.wild.peaceful.mammoth")), (1, (1, 1, "common.entity.wild.aggressive.mountain_troll")), (1, (1, 1, "common.entity.calendar.christmas.aggressive.yeti")), ], diff --git a/assets/world/wildlife/spawn/tundra/core.ron b/assets/world/wildlife/spawn/tundra/core.ron index 5c7cebec47..8369474b6c 100644 --- a/assets/world/wildlife/spawn/tundra/core.ron +++ b/assets/world/wildlife/spawn/tundra/core.ron @@ -6,7 +6,7 @@ SpawnEntry ( groups: [ (15, (1, 1, "common.entity.wild.aggressive.snow_raptor")), (1, (1, 1, "common.entity.wild.aggressive.wendigo")), - (1, (1, 1, "common.entity.wild.aggressive.mammoth")), + (1, (2, 6, "common.entity.wild.peaceful.mammoth")), (1, (1, 1, "common.entity.wild.aggressive.mountain_troll")), ], spawn_mode: Land, diff --git a/client/Cargo.toml b/client/Cargo.toml index ae8a90d881..e824e0ecca 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -25,13 +25,13 @@ bincode = "1.3.2" byteorder = "1.3.2" tokio = { version = "1.14", default-features = false, features = ["rt-multi-thread"] } quinn = "0.8" -image = { version = "0.23.12", default-features = false, features = ["png"] } +image = { version = "0.24", default-features = false, features = ["png"] } num = "0.4" tracing = { version = "0.1", default-features = false } rayon = "1.5" -specs = { git = "https://github.com/amethyst/specs.git", rev = "f985bec5d456f7b0dd8aae99848f9473c2cd9d46" } +specs = { version = "0.18", features = ["serde", "storage-event-control", "derive"] } vek = { version = "0.15.8", features = ["serde"] } -hashbrown = { version = "0.11", features = ["rayon", "serde", "nightly"] } +hashbrown = { version = "0.12", features = ["rayon", "serde", "nightly"] } authc = { git = "https://gitlab.com/veloren/auth.git", rev = "fb3dcbc4962b367253f8f2f92760ef44d2679c9a" } #TODO: put bot in a different crate diff --git a/client/src/cmd.rs b/client/src/cmd.rs deleted file mode 100644 index dd5dd8ba06..0000000000 --- a/client/src/cmd.rs +++ /dev/null @@ -1,149 +0,0 @@ -use crate::Client; -use common::cmd::*; - -trait TabComplete { - fn complete(&self, part: &str, client: &Client) -> Vec; -} - -impl TabComplete for ArgumentSpec { - fn complete(&self, part: &str, client: &Client) -> Vec { - match self { - ArgumentSpec::PlayerName(_) => complete_player(part, client), - ArgumentSpec::SiteName(_) => complete_site(part, client), - ArgumentSpec::Float(_, x, _) => { - if part.is_empty() { - vec![format!("{:.1}", x)] - } else { - vec![] - } - }, - ArgumentSpec::Integer(_, x, _) => { - if part.is_empty() { - vec![format!("{}", x)] - } else { - vec![] - } - }, - ArgumentSpec::Any(_, _) => vec![], - ArgumentSpec::Command(_) => complete_command(part), - ArgumentSpec::Message(_) => complete_player(part, client), - ArgumentSpec::SubCommand => complete_command(part), - ArgumentSpec::Enum(_, strings, _) => strings - .iter() - .filter(|string| string.starts_with(part)) - .map(|c| c.to_string()) - .collect(), - ArgumentSpec::Boolean(_, part, _) => vec!["true", "false"] - .iter() - .filter(|string| string.starts_with(part)) - .map(|c| c.to_string()) - .collect(), - } - } -} - -fn complete_player(part: &str, client: &Client) -> Vec { - client - .player_list - .values() - .map(|player_info| &player_info.player_alias) - .filter(|alias| alias.starts_with(part)) - .cloned() - .collect() -} - -fn complete_site(mut part: &str, client: &Client) -> Vec { - if let Some(p) = part.strip_prefix('"') { - part = p; - } - client - .sites - .values() - .filter_map(|site| match site.site.kind { - common_net::msg::world_msg::SiteKind::Cave => None, - _ => site.site.name.as_ref(), - }) - .filter(|name| name.starts_with(part)) - .map(|name| { - if name.contains(' ') { - format!("\"{}\"", name) - } else { - name.clone() - } - }) - .collect() -} - -fn complete_command(part: &str) -> Vec { - let part = part.strip_prefix('/').unwrap_or(part); - - ChatCommand::iter_with_keywords() - .map(|(kwd, _)| kwd) - .filter(|kwd| kwd.starts_with(part)) - .map(|kwd| format!("/{}", kwd)) - .collect() -} - -// Get the byte index of the nth word. Used in completing "/sudo p /subcmd" -fn nth_word(line: &str, n: usize) -> Option { - let mut is_space = false; - let mut j = 0; - for (i, c) in line.char_indices() { - match (is_space, c.is_whitespace()) { - (true, true) => {}, - (true, false) => { - is_space = false; - j += 1; - }, - (false, true) => { - is_space = true; - }, - (false, false) => {}, - } - if j == n { - return Some(i); - } - } - None -} - -pub fn complete(line: &str, client: &Client) -> Vec { - let word = if line.chars().last().map_or(true, char::is_whitespace) { - "" - } else { - line.split_whitespace().last().unwrap_or("") - }; - if line.starts_with('/') { - let mut iter = line.split_whitespace(); - let cmd = iter.next().unwrap(); - let i = iter.count() + if word.is_empty() { 1 } else { 0 }; - if i == 0 { - // Completing chat command name - complete_command(word) - } else if let Ok(cmd) = cmd.parse::() { - if let Some(arg) = cmd.data().args.get(i - 1) { - // Complete ith argument - arg.complete(word, client) - } else { - // Complete past the last argument - match cmd.data().args.last() { - Some(ArgumentSpec::SubCommand) => { - if let Some(index) = nth_word(line, cmd.data().args.len()) { - complete(&line[index..], client) - } else { - vec![] - } - }, - Some(ArgumentSpec::Message(_)) => complete_player(word, client), - _ => vec![], // End of command. Nothing to complete - } - } - } else { - // Completing for unknown chat command - complete_player(word, client) - } - } else { - // Not completing a command - complete_player(word, client) - } -} diff --git a/client/src/lib.rs b/client/src/lib.rs index b0490018d9..9d1f1ff8be 100644 --- a/client/src/lib.rs +++ b/client/src/lib.rs @@ -3,7 +3,6 @@ #![feature(label_break_value, option_zip)] pub mod addr; -pub mod cmd; pub mod error; // Reexports @@ -49,7 +48,9 @@ use common::{ trade::{PendingTrade, SitePrices, TradeAction, TradeId, TradeResult}, uid::{Uid, UidAllocator}, vol::RectVolSize, + weather::{Weather, WeatherGrid}, }; +#[cfg(feature = "tracy")] use common_base::plot; use common_base::{prof_span, span}; use common_net::{ msg::{ @@ -81,16 +82,6 @@ use tokio::runtime::Runtime; use tracing::{debug, error, trace, warn}; use vek::*; -#[cfg(feature = "tracy")] -mod tracy_plots { - use common_base::tracy_client::{create_plot, Plot}; - pub static TERRAIN_SENDS: Plot = create_plot!("terrain_sends"); - pub static TERRAIN_RECVS: Plot = create_plot!("terrain_recvs"); - pub static INGAME_SENDS: Plot = create_plot!("ingame_sends"); - pub static INGAME_RECVS: Plot = create_plot!("ingame_recvs"); -} -#[cfg(feature = "tracy")] use tracy_plots::*; - const PING_ROLLING_AVERAGE_SECS: usize = 10; #[derive(Debug)] @@ -161,12 +152,60 @@ pub struct SiteInfoRich { pub economy: Option, } +struct WeatherLerp { + old: (WeatherGrid, Instant), + new: (WeatherGrid, Instant), +} + +impl WeatherLerp { + fn weather_update(&mut self, weather: WeatherGrid) { + self.old = mem::replace(&mut self.new, (weather, Instant::now())); + } + + // TODO: Make impprovements to this interpolation, it's main issue is assuming + // that updates come at regular intervals. + fn update(&mut self, to_update: &mut WeatherGrid) { + prof_span!("WeatherLerp::update"); + let old = &self.old.0; + let new = &self.new.0; + if new.size() == Vec2::zero() { + return; + } + if to_update.size() != new.size() { + *to_update = new.clone(); + } + if old.size() == new.size() { + // Assumes updates are regular + let t = (self.new.1.elapsed().as_secs_f32() + / self.new.1.duration_since(self.old.1).as_secs_f32()) + .clamp(0.0, 1.0); + + to_update + .iter_mut() + .zip(old.iter().zip(new.iter())) + .for_each(|((_, current), ((_, old), (_, new)))| { + *current = Weather::lerp_unclamped(old, new, t); + }); + } + } +} + +impl Default for WeatherLerp { + fn default() -> Self { + Self { + old: (WeatherGrid::new(Vec2::zero()), Instant::now()), + new: (WeatherGrid::new(Vec2::zero()), Instant::now()), + } + } +} + pub struct Client { registered: bool, presence: Option, runtime: Arc, server_info: ServerInfo, world_data: WorldData, + weather: WeatherLerp, player_list: HashMap, character_list: CharacterList, sites: HashMap, @@ -618,6 +657,7 @@ impl Client { lod_horizon, map: world_map, }, + weather: WeatherLerp::default(), player_list: HashMap::new(), character_list: CharacterList::default(), sites: sites @@ -799,8 +839,8 @@ impl Client { }; #[cfg(feature = "tracy")] { - INGAME_SENDS.point(ingame); - TERRAIN_SENDS.point(terrain); + plot!("ingame_sends", ingame); + plot!("terrain_sends", terrain); } stream.send(msg) }, @@ -1423,6 +1463,13 @@ impl Client { .map(|v| v.0) } + /// Returns Weather::default if no player position exists. + pub fn weather_at_player(&self) -> Weather { + self.position() + .map(|wpos| self.state.weather_at(wpos.xy())) + .unwrap_or_default() + } + pub fn current_chunk(&self) -> Option> { let chunk_pos = Vec2::from(self.position()?) .map2(TerrainChunkSize::RECT_SIZE, |e: f32, sz| { @@ -1641,6 +1688,9 @@ impl Client { self.invite = None; } + // Lerp the clientside weather. + self.weather.update(&mut self.state.weather_grid_mut()); + // Lerp towards the target time of day - this ensures a smooth transition for // large jumps in TimeOfDay such as when using /time if let Some(target_tod) = self.target_time_of_day { @@ -2142,8 +2192,8 @@ impl Client { }, ServerGeneral::InventoryUpdate(inventory, event) => { match event { - InventoryUpdateEvent::BlockCollectFailed(_) => {}, - InventoryUpdateEvent::EntityCollectFailed(_) => {}, + InventoryUpdateEvent::BlockCollectFailed { .. } => {}, + InventoryUpdateEvent::EntityCollectFailed { .. } => {}, _ => { // Push the updated inventory component to the client // FIXME: Figure out whether this error can happen under normal gameplay, @@ -2203,6 +2253,9 @@ impl Client { ServerGeneral::MapMarker(event) => { frontend_events.push(Event::MapMarker(event)); }, + ServerGeneral::WeatherUpdate(weather) => { + self.weather.weather_update(weather); + }, _ => unreachable!("Not a in_game message"), } Ok(()) @@ -2336,8 +2389,8 @@ impl Client { if cnt_start == cnt { #[cfg(feature = "tracy")] { - TERRAIN_RECVS.point(terrain_cnt as f64); - INGAME_RECVS.point(ingame_cnt as f64); + plot!("terrain_recvs", terrain_cnt as f64); + plot!("ingame_recvs", ingame_cnt as f64); } return Ok(cnt); } @@ -2376,6 +2429,11 @@ impl Client { return Err(Error::ServerTimeout); } + // ignore network events + while let Some(Ok(Some(event))) = self.participant.as_ref().map(|p| p.try_fetch_event()) { + trace!(?event, "received network event"); + } + Ok(frontend_events) } diff --git a/common/Cargo.toml b/common/Cargo.toml index 6ac576322f..115ab0881e 100644 --- a/common/Cargo.toml +++ b/common/Cargo.toml @@ -77,14 +77,14 @@ petgraph = { version = "0.6", optional = true } kiddo = { version = "0.1", optional = true } # Data structures -hashbrown = { version = "0.11", features = ["rayon", "serde", "nightly"] } +hashbrown = { version = "0.12", features = ["rayon", "serde", "nightly"] } slotmap = { version = "1.0", features = ["serde"] } indexmap = { version = "1.3.0", features = ["rayon"] } slab = "0.4.2" # ECS -specs = { git = "https://github.com/amethyst/specs.git", features = ["serde", "storage-event-control", "nightly"], rev = "f985bec5d456f7b0dd8aae99848f9473c2cd9d46" } -specs-idvs = { git = "https://gitlab.com/veloren/specs-idvs.git", rev = "8be2abcddf8f524cb5876e8dd20a7e47cfaf7573" } +specs = { version = "0.18", features = ["serde", "storage-event-control", "nightly"] } +specs-idvs = { git = "https://gitlab.com/veloren/specs-idvs.git", rev = "c17abc638f23ef221ce7384c7dd77eef757b82f4" } [dev-dependencies] #bench diff --git a/common/assets/Cargo.toml b/common/assets/Cargo.toml index dea2906e65..f27cc9b57f 100644 --- a/common/assets/Cargo.toml +++ b/common/assets/Cargo.toml @@ -7,11 +7,11 @@ version = "0.10.0" [dependencies] lazy_static = "1.4.0" -assets_manager = {version = "0.7", features = ["bincode", "ron", "json"]} +assets_manager = {version = "0.8.1", features = ["bincode", "ron", "json"]} ron = { version = "0.7", default-features = false } dot_vox = "4.0" wavefront = "0.2" # TODO: Use vertex-colors branch when we have models that have them -image = { version = "0.23.12", default-features = false, features = ["png"] } +image = { version = "0.24", default-features = false, features = ["png"] } tracing = "0.1" # asset tweak diff --git a/common/assets/src/lib.rs b/common/assets/src/lib.rs index fc2825a3c4..6da0404fd9 100644 --- a/common/assets/src/lib.rs +++ b/common/assets/src/lib.rs @@ -12,7 +12,7 @@ pub use assets_manager::{ self, BincodeLoader, BytesLoader, JsonLoader, LoadFrom, Loader, RonLoader, StringLoader, }, source::{self, Source}, - Asset, AssetCache, BoxedError, Compound, Error, SharedString, + AnyCache, Asset, AssetCache, BoxedError, Compound, Error, SharedString, }; mod fs; @@ -28,7 +28,7 @@ pub fn start_hot_reloading() { ASSETS.enhance_hot_reloading(); } pub type AssetHandle = assets_manager::Handle<'static, T>; pub type AssetGuard = assets_manager::AssetGuard<'static, T>; -pub type AssetDirHandle = assets_manager::DirHandle<'static, T, fs::FileSystem>; +pub type AssetDirHandle = assets_manager::DirHandle<'static, T>; pub type ReloadWatcher = assets_manager::ReloadWatcher<'static>; /// The Asset trait, which is implemented by all structures that have their data @@ -122,7 +122,7 @@ pub fn load_dir( /// 1) If can't load directory (filesystem errors) /// 2) If file can't be loaded (parsing problem) #[track_caller] -pub fn read_expect_dir( +pub fn read_expect_dir( specifier: &str, recursive: bool, ) -> impl Iterator> { diff --git a/common/base/Cargo.toml b/common/base/Cargo.toml index 96b3aa3ae8..fc79ae9d20 100644 --- a/common/base/Cargo.toml +++ b/common/base/Cargo.toml @@ -13,4 +13,4 @@ tracing = { version = "0.1", default-features = false } directories-next = "2.0" # Tracy -tracy-client = { version = "0.12.0", optional = true } +tracy-client = { version = "0.13.1", optional = true } diff --git a/common/base/src/lib.rs b/common/base/src/lib.rs index 5c78484061..098d881849 100644 --- a/common/base/src/lib.rs +++ b/common/base/src/lib.rs @@ -4,30 +4,6 @@ pub mod userdata_dir; pub use userdata_dir::userdata_dir; -#[cfg(feature = "tracy")] pub use tracy_client; - -/// Allows downstream crates to conditionally do things based on whether tracy -/// is enabled without having to expose a cargo feature themselves. -pub const TRACY_ENABLED: bool = cfg!(feature = "tracy"); - -#[cfg(not(feature = "tracy"))] -#[macro_export] -macro_rules! plot { - ($name:expr, $value:expr) => { - // type check - let _: f64 = $value; - }; -} -#[cfg(feature = "tracy")] -#[macro_export] -macro_rules! plot { - ($name:expr, $value:expr) => {{ - use $crate::tracy_client::{create_plot, Plot}; - static PLOT: Plot = create_plot!($name); - PLOT.point($value); - }}; -} - // Panic in debug or tests, warn in release #[macro_export] macro_rules! dev_panic { @@ -49,6 +25,24 @@ macro_rules! dev_panic { }; } +#[cfg(feature = "tracy")] pub use tracy_client; + +/// Allows downstream crates to conditionally do things based on whether tracy +/// is enabled without having to expose a cargo feature themselves. +pub const TRACY_ENABLED: bool = cfg!(feature = "tracy"); + +#[cfg(not(feature = "tracy"))] +#[macro_export] +macro_rules! plot { + ($name:expr, $value:expr) => { + // type check + let _: f64 = $value; + }; +} + +#[cfg(feature = "tracy")] +pub use tracy_client::plot; + // https://discordapp.com/channels/676678179678715904/676685797524766720/723358438943621151 #[cfg(not(feature = "tracy"))] #[macro_export] @@ -83,52 +77,33 @@ macro_rules! span { }; ($guard_name:tt, $name:expr) => { // Directly use `tracy_client` to decrease overhead for better timing - let $guard_name = $crate::tracy_client::Span::new( - $name, - "", - module_path!(), - line!(), - // No callstack since this has significant overhead - 0, - ); + $crate::prof_span_alloc!($guard_name, $name); }; ($guard_name:tt, $no_tracy_name:expr, $tracy_name:expr) => { $crate::span!($guard_name, $tracy_name); }; } -#[cfg(feature = "tracy")] -pub struct ProfSpan(pub tracy_client::Span); #[cfg(not(feature = "tracy"))] pub struct ProfSpan; -/// Like the span macro but only used when profiling and not in regular tracing -/// operations -#[macro_export] +/// Just implemented so that we dont need to have +/// #[allow(clippy::drop_non_drop)] everywhere #[cfg(not(feature = "tracy"))] -macro_rules! prof_span { - ($guard_name:tt, $name:expr) => { - let $guard_name = $crate::ProfSpan; - }; - // Shorthand for when you want the guard to just be dropped at the end of the scope instead - // of controlling it manually - ($name:expr) => {}; +impl Drop for ProfSpan { + fn drop(&mut self) {} } +#[cfg(feature = "tracy")] +pub struct ProfSpan(pub tracy_client::Span); + /// Like the span macro but only used when profiling and not in regular tracing /// operations +#[cfg(not(feature = "tracy"))] #[macro_export] -#[cfg(feature = "tracy")] macro_rules! prof_span { ($guard_name:tt, $name:expr) => { - let $guard_name = $crate::ProfSpan($crate::tracy_client::Span::new( - $name, - "", - module_path!(), - line!(), - // No callstack since this has significant overhead - 0, - )); + let $guard_name = $crate::ProfSpan; }; // Shorthand for when you want the guard to just be dropped at the end of the scope instead // of controlling it manually @@ -137,51 +112,58 @@ macro_rules! prof_span { }; } -/// There's no guard, but really this is actually the guard -pub struct GuardlessSpan { - span: tracing::Span, - subscriber: tracing::Dispatch, -} - -impl GuardlessSpan { - pub fn new(span: tracing::Span) -> Self { - let subscriber = tracing::dispatcher::get_default(|d| d.clone()); - if let Some(id) = span.id() { - subscriber.enter(&id) - } - Self { span, subscriber } - } -} - -impl Drop for GuardlessSpan { - fn drop(&mut self) { - if let Some(id) = self.span.id() { - self.subscriber.exit(&id) - } - } -} - -/// Just implemented so that we dont need to have -/// #[allow(clippy::drop_non_drop)] everywhere -impl Drop for ProfSpan { - fn drop(&mut self) {} -} - +/// Like the span macro but only used when profiling and not in regular tracing +/// operations +#[cfg(feature = "tracy")] #[macro_export] -macro_rules! no_guard_span { - ($level:ident, $name:expr, $($fields:tt)*) => { - GuardlessSpan::new( - tracing::span!(tracing::Level::$level, $name, $($fields)*) - ) - }; - ($level:ident, $name:expr) => { - GuardlessSpan::new( - tracing::span!(tracing::Level::$level, $name) - ) +macro_rules! prof_span { + ($guard_name:tt, $name:expr) => { + let $guard_name = $crate::ProfSpan( + // No callstack since this has significant overhead + $crate::tracy_client::span!($name, 0), + ); }; + // Shorthand for when you want the guard to just be dropped at the end of the scope instead + // of controlling it manually ($name:expr) => { - GuardlessSpan::new( - tracing::span!(tracing::Level::TRACE, $name) - ) + $crate::prof_span!(_guard, $name); + }; +} + +/// Like the prof_span macro but this one allocates so it can use strings only +/// known at runtime. +#[cfg(not(feature = "tracy"))] +#[macro_export] +macro_rules! prof_span_alloc { + ($guard_name:tt, $name:expr) => { + let $guard_name = $crate::ProfSpan; + }; + // Shorthand for when you want the guard to just be dropped at the end of the scope instead + // of controlling it manually + ($name:expr) => { + $crate::prof_span!(_guard, $name); + }; +} + +/// Like the prof_span macro but this one allocates so it can use strings only +/// known at runtime. +#[cfg(feature = "tracy")] +#[macro_export] +macro_rules! prof_span_alloc { + ($guard_name:tt, $name:expr) => { + let $guard_name = $crate::ProfSpan({ + struct S; + let type_name = core::any::type_name::(); + let function_name = &type_name[..type_name.len() - 3]; + $crate::tracy_client::Client::running() + .expect("prof_span_alloc! without a running tracy_client::Client") + // No callstack since this has significant overhead + .span_alloc($name, function_name, file!(), line!(), 0) + }); + }; + // Shorthand for when you want the guard to just be dropped at the end of the scope instead + // of controlling it manually + ($name:expr) => { + $crate::prof_span!(_guard, $name); }; } diff --git a/common/ecs/Cargo.toml b/common/ecs/Cargo.toml index 4cc809e63c..9df4729979 100644 --- a/common/ecs/Cargo.toml +++ b/common/ecs/Cargo.toml @@ -12,7 +12,7 @@ tracing = { version = "0.1", default-features = false } common-base = { package = "veloren-common-base", path = "../base" } # ECS -specs = { git = "https://github.com/amethyst/specs.git", features = ["serde", "storage-event-control"], rev = "f985bec5d456f7b0dd8aae99848f9473c2cd9d46" } +specs = { version = "0.18", features = ["serde", "storage-event-control"] } [dev-dependencies] #bench diff --git a/common/frontend/Cargo.toml b/common/frontend/Cargo.toml index 32e5690f4a..e123a8ca7a 100644 --- a/common/frontend/Cargo.toml +++ b/common/frontend/Cargo.toml @@ -19,4 +19,4 @@ tracing-log = "0.1.1" tracing-subscriber = { version = "0.3.7", default-features = false, features = ["env-filter", "fmt", "time", "ansi", "smallvec", "tracing-log"]} # Tracy -tracing-tracy = { version = "0.8.0", optional = true } +tracing-tracy = { version = "0.9.0", optional = true } diff --git a/common/frontend/src/lib.rs b/common/frontend/src/lib.rs index 0a08e75731..247e3b86e2 100644 --- a/common/frontend/src/lib.rs +++ b/common/frontend/src/lib.rs @@ -56,6 +56,7 @@ where "veloren_common::trade=info", "veloren_world::sim=info", "veloren_world::civ=info", + "veloren_world::site::economy=info", "veloren_server::events::entity_manipulation=info", "hyper=info", "prometheus_hyper=info", diff --git a/common/net/Cargo.toml b/common/net/Cargo.toml index e4af6a84e1..92c68a2347 100644 --- a/common/net/Cargo.toml +++ b/common/net/Cargo.toml @@ -15,18 +15,18 @@ common = {package = "veloren-common", path = "../../common"} bincode = "1.3.3" flate2 = "1.0.20" -image = { version = "0.23.12", default-features = false, features = ["png", "jpeg"] } +image = { version = "0.24", default-features = false, features = ["png", "jpeg"] } num-traits = "0.2" sum_type = "0.2.0" vek = { version = "0.15.8", features = ["serde"] } tracing = { version = "0.1", default-features = false } # Data structures -hashbrown = { version = "0.11", features = ["rayon", "serde", "nightly"] } +hashbrown = { version = "0.12", features = ["rayon", "serde", "nightly"] } # ECS -specs = { git = "https://github.com/amethyst/specs.git", features = ["serde", "storage-event-control"], rev = "f985bec5d456f7b0dd8aae99848f9473c2cd9d46" } -specs-idvs = { git = "https://gitlab.com/veloren/specs-idvs.git", rev = "8be2abcddf8f524cb5876e8dd20a7e47cfaf7573" } +specs = { version = "0.18", features = ["serde", "storage-event-control"] } +specs-idvs = { git = "https://gitlab.com/veloren/specs-idvs.git", rev = "c17abc638f23ef221ce7384c7dd77eef757b82f4" } # Serde serde = { version = "1.0.110", features = ["derive"] } diff --git a/common/net/src/msg/compression.rs b/common/net/src/msg/compression.rs index 24e3977b49..214750a609 100644 --- a/common/net/src/msg/compression.rs +++ b/common/net/src/msg/compression.rs @@ -4,7 +4,7 @@ use common::{ volumes::vol_grid_2d::VolGrid2d, }; use hashbrown::HashMap; -use image::{ImageBuffer, ImageDecoder, Pixel}; +use image::{ImageBuffer, ImageDecoder, ImageEncoder, Pixel}; use num_traits::cast::FromPrimitive; use serde::{Deserialize, Serialize}; use std::{ @@ -242,7 +242,7 @@ impl<'a, const N: u32> VoxelImageEncoding for QuadPngEncoding<'a, N> { CompressionType::Rle, FilterType::Up, ); - png.encode(&*x.as_raw(), x.width(), x.height(), image::ColorType::L8) + png.write_image(&*x.as_raw(), x.width(), x.height(), image::ColorType::L8) .ok()?; indices[i] = buf.len(); Some(()) @@ -257,7 +257,7 @@ impl<'a, const N: u32> VoxelImageEncoding for QuadPngEncoding<'a, N> { CompressionType::Rle, FilterType::Sub, ); - png.encode( + png.write_image( &*ws.3.as_raw(), ws.3.width(), ws.3.height(), @@ -518,7 +518,7 @@ impl<'a, const AVERAGE_PALETTE: bool> VoxelImageEncoding for TriPngEncoding<'a, CompressionType::Rle, FilterType::Up, ); - png.encode(&*x.as_raw(), x.width(), x.height(), image::ColorType::L8) + png.write_image(&*x.as_raw(), x.width(), x.height(), image::ColorType::L8) .ok()?; indices[i] = buf.len(); Some(()) diff --git a/common/net/src/msg/server.rs b/common/net/src/msg/server.rs index 689b4b93b7..9f472edf9a 100644 --- a/common/net/src/msg/server.rs +++ b/common/net/src/msg/server.rs @@ -14,6 +14,8 @@ use common::{ terrain::{Block, TerrainChunk, TerrainChunkMeta, TerrainChunkSize}, trade::{PendingTrade, SitePrices, TradeId, TradeResult}, uid::Uid, + uuid::Uuid, + weather::WeatherGrid, }; use core::marker::PhantomData; use hashbrown::HashMap; @@ -201,6 +203,7 @@ pub enum ServerGeneral<'a> { /// Economic information about sites SiteEconomy(EconomyInfo), MapMarker(comp::MapMarkerUpdate), + WeatherUpdate(WeatherGrid), } impl ServerGeneral<'_> { @@ -234,6 +237,7 @@ pub struct PlayerInfo { pub is_online: bool, pub player_alias: String, pub character: Option, + pub uuid: Uuid, } #[derive(Debug, Clone, Serialize, Deserialize)] @@ -312,7 +316,8 @@ impl ServerMsg<'_> { | ServerGeneral::UpdatePendingTrade(_, _, _) | ServerGeneral::FinishedTrade(_) | ServerGeneral::SiteEconomy(_) - | ServerGeneral::MapMarker(_) => { + | ServerGeneral::MapMarker(_) + | ServerGeneral::WeatherUpdate(_) => { c_type == ClientType::Game && presence.is_some() }, // Always possible diff --git a/common/net/src/sync/sync_ext.rs b/common/net/src/sync/sync_ext.rs index a84ea0bdd3..e6ba3dcd79 100644 --- a/common/net/src/sync/sync_ext.rs +++ b/common/net/src/sync/sync_ext.rs @@ -74,7 +74,7 @@ impl WorldSyncExt for specs::World { self.read_storage::().get(entity).copied() } - /// Get the UID of an entity + /// Get an entity from a UID fn entity_from_uid(&self, uid: u64) -> Option { self.read_resource::() .retrieve_entity_internal(uid) diff --git a/common/net/src/synced_components.rs b/common/net/src/synced_components.rs index 374931560c..2675eec32b 100644 --- a/common/net/src/synced_components.rs +++ b/common/net/src/synced_components.rs @@ -62,6 +62,7 @@ macro_rules! synced_components { combo: Combo, active_abilities: ActiveAbilities, can_build: CanBuild, + loot_owner: LootOwner, } }; } @@ -234,3 +235,7 @@ impl NetSync for ActiveAbilities { impl NetSync for CanBuild { const SYNC_FROM: SyncFrom = SyncFrom::ClientEntity; } + +impl NetSync for LootOwner { + const SYNC_FROM: SyncFrom = SyncFrom::AnyEntity; +} diff --git a/common/src/bin/cmd_doc_gen.rs b/common/src/bin/cmd_doc_gen.rs index 24ecb39fc5..d85c43a875 100644 --- a/common/src/bin/cmd_doc_gen.rs +++ b/common/src/bin/cmd_doc_gen.rs @@ -1,11 +1,11 @@ -use veloren_common::cmd::ChatCommand; +use veloren_common::cmd::ServerChatCommand; /// This binary generates the markdown table used for the `players/commands.md` /// page in the Veloren Book. It can be run with `cargo cmd-doc-gen`. fn main() { println!("|Command|Description|Requires|Arguments|"); println!("|-|-|-|-|"); - for cmd in ChatCommand::iter() { + for cmd in ServerChatCommand::iter() { let args = cmd .data() .args diff --git a/common/src/bin/csv_export/main.rs b/common/src/bin/csv_export/main.rs index edd19ad409..ab90b814b3 100644 --- a/common/src/bin/csv_export/main.rs +++ b/common/src/bin/csv_export/main.rs @@ -14,7 +14,7 @@ use veloren_common::{ item::{ armor::{ArmorKind, Protection}, tool::{Hands, Tool, ToolKind}, - Item, + Item, MaterialStatManifest, }, }, generation::{EntityConfig, EntityInfo}, @@ -56,20 +56,22 @@ fn armor_stats() -> Result<(), Box> { continue; } - let protection = match armor.protection() { + let msm = &MaterialStatManifest::load().read(); + + let protection = match armor.stats(msm).protection { Some(Protection::Invincible) => "Invincible".to_string(), Some(Protection::Normal(value)) => value.to_string(), None => "0.0".to_string(), }; - let poise_resilience = match armor.poise_resilience() { + let poise_resilience = match armor.stats(msm).poise_resilience { Some(Protection::Invincible) => "Invincible".to_string(), Some(Protection::Normal(value)) => value.to_string(), None => "0.0".to_string(), }; - let max_energy = armor.energy_max().unwrap_or(0.0).to_string(); - let energy_reward = armor.energy_reward().unwrap_or(0.0).to_string(); - let crit_power = armor.crit_power().unwrap_or(0.0).to_string(); - let stealth = armor.stealth().unwrap_or(0.0).to_string(); + let max_energy = armor.stats(msm).energy_max.unwrap_or(0.0).to_string(); + let energy_reward = armor.stats(msm).energy_reward.unwrap_or(0.0).to_string(); + let crit_power = armor.stats(msm).crit_power.unwrap_or(0.0).to_string(); + let stealth = armor.stats(msm).stealth.unwrap_or(0.0).to_string(); wtr.write_record(&[ item.item_definition_id() diff --git a/common/src/bin/csv_import/main.rs b/common/src/bin/csv_import/main.rs index 65f80d986c..f19ae44b37 100644 --- a/common/src/bin/csv_import/main.rs +++ b/common/src/bin/csv_import/main.rs @@ -12,7 +12,7 @@ use veloren_common::{ comp::{ self, item::{ - armor::{ArmorKind, Protection}, + armor::{ArmorKind, Protection, StatsSource}, tool::{AbilitySpec, Hands, Stats, ToolKind}, ItemDefinitionId, ItemKind, ItemTag, Material, Quality, }, @@ -124,7 +124,7 @@ fn armor_stats() -> Result<(), Box> { None }; - let max_energy = + let energy_max = if let Some(max_energy_raw) = record.get(headers["Max Energy"]) { let value = max_energy_raw.parse().unwrap(); if value == 0.0 { None } else { Some(value) } @@ -174,15 +174,19 @@ fn armor_stats() -> Result<(), Box> { }; let kind = armor.kind; - let armor_stats = comp::item::armor::Stats::new( + let armor_stats = comp::item::armor::Stats { protection, poise_resilience, - max_energy, + energy_max, energy_reward, crit_power, stealth, + ground_contact: Default::default(), + }; + let armor = comp::item::armor::Armor::new( + kind, + StatsSource::Direct(armor_stats), ); - let armor = comp::item::armor::Armor::new(kind, armor_stats); let quality = if let Some(quality_raw) = record.get(headers["Quality"]) { match quality_raw { diff --git a/common/src/cmd.rs b/common/src/cmd.rs index 4726980e78..3d13aad316 100644 --- a/common/src/cmd.rs +++ b/common/src/cmd.rs @@ -39,82 +39,6 @@ impl ChatCommandData { } } -// Please keep this sorted alphabetically :-) -#[derive(Copy, Clone, strum::EnumIter)] -pub enum ChatCommand { - Adminify, - Airship, - Alias, - ApplyBuff, - Ban, - BattleMode, - BattleModeForce, - Build, - BuildAreaAdd, - BuildAreaList, - BuildAreaRemove, - Campfire, - DebugColumn, - DisconnectAllPlayers, - DropAll, - Dummy, - Explosion, - Faction, - GiveItem, - Goto, - Group, - GroupInvite, - GroupKick, - GroupLeave, - GroupPromote, - Health, - Help, - Home, - JoinFaction, - Jump, - Kick, - Kill, - KillNpcs, - Kit, - Lantern, - Light, - MakeBlock, - MakeNpc, - MakeSprite, - Motd, - Object, - PermitBuild, - Players, - Region, - ReloadChunks, - RemoveLights, - RevokeBuild, - RevokeBuildAll, - Safezone, - Say, - ServerPhysics, - SetMotd, - Ship, - Site, - SkillPoint, - SkillPreset, - Spawn, - Sudo, - Tell, - Time, - Tp, - Unban, - Version, - Waypoint, - Whitelist, - Wiring, - World, - MakeVolume, - Location, - CreateLocation, - DeleteLocation, -} - #[derive(Debug, PartialEq, Serialize, Deserialize, Clone)] pub enum KitSpec { Item(String), @@ -201,6 +125,13 @@ lazy_static! { .map(|s| s.to_string()) .collect(); + static ref WEATHERS: Vec = vec![ + "clear", "cloudy", "rain", "wind", "storm" + ] + .iter() + .map(|s| s.to_string()) + .collect(); + pub static ref BUFF_PARSER: HashMap = { let string_from_buff = |kind| match kind { BuffKind::Burning => "burning", @@ -299,30 +230,107 @@ lazy_static! { }; } -impl ChatCommand { +// Please keep this sorted alphabetically :-) +#[derive(Copy, Clone, strum::EnumIter)] +pub enum ServerChatCommand { + Adminify, + Airship, + Alias, + ApplyBuff, + Ban, + BattleMode, + BattleModeForce, + Build, + BuildAreaAdd, + BuildAreaList, + BuildAreaRemove, + Campfire, + DebugColumn, + DisconnectAllPlayers, + DropAll, + Dummy, + Explosion, + Faction, + GiveItem, + Goto, + Group, + GroupInvite, + GroupKick, + GroupLeave, + GroupPromote, + Health, + Help, + Home, + JoinFaction, + Jump, + Kick, + Kill, + KillNpcs, + Kit, + Lantern, + Light, + MakeBlock, + MakeNpc, + MakeSprite, + Motd, + Object, + PermitBuild, + Players, + Region, + ReloadChunks, + RemoveLights, + RevokeBuild, + RevokeBuildAll, + Safezone, + Say, + ServerPhysics, + SetMotd, + Ship, + Site, + SkillPoint, + SkillPreset, + Spawn, + Sudo, + Tell, + Time, + Tp, + Unban, + Version, + Waypoint, + Whitelist, + Wiring, + World, + MakeVolume, + Location, + CreateLocation, + DeleteLocation, + WeatherZone, +} + +impl ServerChatCommand { pub fn data(&self) -> ChatCommandData { use ArgumentSpec::*; use Requirement::*; use Role::*; let cmd = ChatCommandData::new; match self { - ChatCommand::Adminify => cmd( + ServerChatCommand::Adminify => cmd( vec![PlayerName(Required), Enum("role", ROLES.clone(), Optional)], "Temporarily gives a player a restricted admin role or removes the current one \ (if not given)", Some(Admin), ), - ChatCommand::Airship => cmd( + ServerChatCommand::Airship => cmd( vec![Float("destination_degrees_ccw_of_east", 90.0, Optional)], "Spawns an airship", Some(Admin), ), - ChatCommand::Alias => cmd( + ServerChatCommand::Alias => cmd( vec![Any("name", Required)], "Change your alias", Some(Moderator), ), - ChatCommand::ApplyBuff => cmd( + ServerChatCommand::ApplyBuff => cmd( vec![ Enum("buff", BUFFS.clone(), Required), Float("strength", 0.01, Optional), @@ -331,7 +339,7 @@ impl ChatCommand { "Cast a buff on player", Some(Admin), ), - ChatCommand::Ban => cmd( + ServerChatCommand::Ban => cmd( vec![ PlayerName(Required), Boolean("overwrite", "true".to_string(), Optional), @@ -343,7 +351,7 @@ impl ChatCommand { Some(Moderator), ), #[rustfmt::skip] - ChatCommand::BattleMode => cmd( + ServerChatCommand::BattleMode => cmd( vec![Enum( "battle mode", vec!["pvp".to_owned(), "pve".to_owned()], @@ -354,8 +362,9 @@ impl ChatCommand { * pve (player vs environment).\n\ If called without arguments will show current battle mode.", None, + ), - ChatCommand::BattleModeForce => cmd( + ServerChatCommand::BattleModeForce => cmd( vec![Enum( "battle mode", vec!["pvp".to_owned(), "pve".to_owned()], @@ -364,8 +373,8 @@ impl ChatCommand { "Change your battle mode flag without any checks", Some(Admin), ), - ChatCommand::Build => cmd(vec![], "Toggles build mode on and off", None), - ChatCommand::BuildAreaAdd => cmd( + ServerChatCommand::Build => cmd(vec![], "Toggles build mode on and off", None), + ServerChatCommand::BuildAreaAdd => cmd( vec![ Any("name", Required), Integer("xlo", 0, Required), @@ -378,40 +387,40 @@ impl ChatCommand { "Adds a new build area", Some(Admin), ), - ChatCommand::BuildAreaList => cmd(vec![], "List all build areas", Some(Admin)), - ChatCommand::BuildAreaRemove => cmd( + ServerChatCommand::BuildAreaList => cmd(vec![], "List all build areas", Some(Admin)), + ServerChatCommand::BuildAreaRemove => cmd( vec![Any("name", Required)], "Removes specified build area", Some(Admin), ), - ChatCommand::Campfire => cmd(vec![], "Spawns a campfire", Some(Admin)), - ChatCommand::DebugColumn => cmd( + ServerChatCommand::Campfire => cmd(vec![], "Spawns a campfire", Some(Admin)), + ServerChatCommand::DebugColumn => cmd( vec![Integer("x", 15000, Required), Integer("y", 15000, Required)], "Prints some debug information about a column", Some(Moderator), ), - ChatCommand::DisconnectAllPlayers => cmd( + ServerChatCommand::DisconnectAllPlayers => cmd( vec![Any("confirm", Required)], "Disconnects all players from the server", Some(Admin), ), - ChatCommand::DropAll => cmd( + ServerChatCommand::DropAll => cmd( vec![], "Drops all your items on the ground", Some(Moderator), ), - ChatCommand::Dummy => cmd(vec![], "Spawns a training dummy", Some(Admin)), - ChatCommand::Explosion => cmd( + ServerChatCommand::Dummy => cmd(vec![], "Spawns a training dummy", Some(Admin)), + ServerChatCommand::Explosion => cmd( vec![Float("radius", 5.0, Required)], "Explodes the ground around you", Some(Admin), ), - ChatCommand::Faction => cmd( + ServerChatCommand::Faction => cmd( vec![Message(Optional)], "Send messages to your faction", None, ), - ChatCommand::GiveItem => cmd( + ServerChatCommand::GiveItem => cmd( vec![ Enum("item", ITEM_SPECS.clone(), Required), Integer("num", 1, Optional), @@ -419,7 +428,7 @@ impl ChatCommand { "Give yourself some items.\nFor an example or to auto complete use Tab.", Some(Admin), ), - ChatCommand::Goto => cmd( + ServerChatCommand::Goto => cmd( vec![ Float("x", 0.0, Required), Float("y", 0.0, Required), @@ -428,40 +437,42 @@ impl ChatCommand { "Teleport to a position", Some(Admin), ), - ChatCommand::Group => cmd(vec![Message(Optional)], "Send messages to your group", None), - ChatCommand::GroupInvite => cmd( + ServerChatCommand::Group => { + cmd(vec![Message(Optional)], "Send messages to your group", None) + }, + ServerChatCommand::GroupInvite => cmd( vec![PlayerName(Required)], "Invite a player to join a group", None, ), - ChatCommand::GroupKick => cmd( + ServerChatCommand::GroupKick => cmd( vec![PlayerName(Required)], "Remove a player from a group", None, ), - ChatCommand::GroupLeave => cmd(vec![], "Leave the current group", None), - ChatCommand::GroupPromote => cmd( + ServerChatCommand::GroupLeave => cmd(vec![], "Leave the current group", None), + ServerChatCommand::GroupPromote => cmd( vec![PlayerName(Required)], "Promote a player to group leader", None, ), - ChatCommand::Health => cmd( + ServerChatCommand::Health => cmd( vec![Integer("hp", 100, Required)], "Set your current health", Some(Admin), ), - ChatCommand::Help => ChatCommandData::new( + ServerChatCommand::Help => ChatCommandData::new( vec![Command(Optional)], "Display information about commands", None, ), - ChatCommand::Home => cmd(vec![], "Return to the home town", Some(Moderator)), - ChatCommand::JoinFaction => ChatCommandData::new( + ServerChatCommand::Home => cmd(vec![], "Return to the home town", Some(Moderator)), + ServerChatCommand::JoinFaction => ChatCommandData::new( vec![Any("faction", Optional)], "Join/leave the specified faction", None, ), - ChatCommand::Jump => cmd( + ServerChatCommand::Jump => cmd( vec![ Float("x", 0.0, Required), Float("y", 0.0, Required), @@ -470,19 +481,19 @@ impl ChatCommand { "Offset your current position", Some(Admin), ), - ChatCommand::Kick => cmd( + ServerChatCommand::Kick => cmd( vec![PlayerName(Required), Message(Optional)], "Kick a player with a given username", Some(Moderator), ), - ChatCommand::Kill => cmd(vec![], "Kill yourself", None), - ChatCommand::KillNpcs => cmd(vec![], "Kill the NPCs", Some(Admin)), - ChatCommand::Kit => cmd( + ServerChatCommand::Kill => cmd(vec![], "Kill yourself", None), + ServerChatCommand::KillNpcs => cmd(vec![], "Kill the NPCs", Some(Admin)), + ServerChatCommand::Kit => cmd( vec![Enum("kit_name", KITS.to_vec(), Required)], "Place a set of items into your inventory.", Some(Admin), ), - ChatCommand::Lantern => cmd( + ServerChatCommand::Lantern => cmd( vec![ Float("strength", 5.0, Required), Float("r", 1.0, Optional), @@ -492,7 +503,7 @@ impl ChatCommand { "Change your lantern's strength and color", Some(Admin), ), - ChatCommand::Light => cmd( + ServerChatCommand::Light => cmd( vec![ Float("r", 1.0, Optional), Float("g", 1.0, Optional), @@ -505,7 +516,7 @@ impl ChatCommand { "Spawn entity with light", Some(Admin), ), - ChatCommand::MakeBlock => cmd( + ServerChatCommand::MakeBlock => cmd( vec![ Enum("block", BLOCK_KINDS.clone(), Required), Integer("r", 255, Optional), @@ -515,7 +526,7 @@ impl ChatCommand { "Make a block at your location with a color", Some(Admin), ), - ChatCommand::MakeNpc => cmd( + ServerChatCommand::MakeNpc => cmd( vec![ Enum("entity_config", ENTITY_CONFIGS.clone(), Required), Integer("num", 1, Optional), @@ -523,59 +534,61 @@ impl ChatCommand { "Spawn entity from config near you.\nFor an example or to auto complete use Tab.", Some(Admin), ), - ChatCommand::MakeSprite => cmd( + ServerChatCommand::MakeSprite => cmd( vec![Enum("sprite", SPRITE_KINDS.clone(), Required)], "Make a sprite at your location", Some(Admin), ), - ChatCommand::Motd => cmd(vec![Message(Optional)], "View the server description", None), - ChatCommand::Object => cmd( + ServerChatCommand::Motd => { + cmd(vec![Message(Optional)], "View the server description", None) + }, + ServerChatCommand::Object => cmd( vec![Enum("object", OBJECTS.clone(), Required)], "Spawn an object", Some(Admin), ), - ChatCommand::PermitBuild => cmd( + ServerChatCommand::PermitBuild => cmd( vec![Any("area_name", Required)], "Grants player a bounded box they can build in", Some(Admin), ), - ChatCommand::Players => cmd(vec![], "Lists players currently online", None), - ChatCommand::ReloadChunks => cmd( + ServerChatCommand::Players => cmd(vec![], "Lists players currently online", None), + ServerChatCommand::ReloadChunks => cmd( vec![], "Reloads all chunks loaded on the server", Some(Admin), ), - ChatCommand::RemoveLights => cmd( + ServerChatCommand::RemoveLights => cmd( vec![Float("radius", 20.0, Optional)], "Removes all lights spawned by players", Some(Admin), ), - ChatCommand::RevokeBuild => cmd( + ServerChatCommand::RevokeBuild => cmd( vec![Any("area_name", Required)], "Revokes build area permission for player", Some(Admin), ), - ChatCommand::RevokeBuildAll => cmd( + ServerChatCommand::RevokeBuildAll => cmd( vec![], "Revokes all build area permissions for player", Some(Admin), ), - ChatCommand::Region => cmd( + ServerChatCommand::Region => cmd( vec![Message(Optional)], "Send messages to everyone in your region of the world", None, ), - ChatCommand::Safezone => cmd( + ServerChatCommand::Safezone => cmd( vec![Float("range", 100.0, Optional)], "Creates a safezone", Some(Moderator), ), - ChatCommand::Say => cmd( + ServerChatCommand::Say => cmd( vec![Message(Optional)], "Send messages to everyone within shouting distance", None, ), - ChatCommand::ServerPhysics => cmd( + ServerChatCommand::ServerPhysics => cmd( vec![ PlayerName(Required), Boolean("enabled", "true".to_string(), Optional), @@ -583,24 +596,24 @@ impl ChatCommand { "Set/unset server-authoritative physics for an account", Some(Moderator), ), - ChatCommand::SetMotd => cmd( + ServerChatCommand::SetMotd => cmd( vec![Message(Optional)], "Set the server description", Some(Admin), ), - ChatCommand::Ship => cmd( + ServerChatCommand::Ship => cmd( vec![Float("destination_degrees_ccw_of_east", 90.0, Optional)], "Spawns a ship", Some(Admin), ), // Uses Message because site names can contain spaces, // which would be assumed to be separators otherwise - ChatCommand::Site => cmd( + ServerChatCommand::Site => cmd( vec![SiteName(Required)], "Teleport to a site", Some(Moderator), ), - ChatCommand::SkillPoint => cmd( + ServerChatCommand::SkillPoint => cmd( vec![ Enum("skill tree", SKILL_TREES.clone(), Required), Integer("amount", 1, Optional), @@ -608,12 +621,12 @@ impl ChatCommand { "Give yourself skill points for a particular skill tree", Some(Admin), ), - ChatCommand::SkillPreset => cmd( + ServerChatCommand::SkillPreset => cmd( vec![Enum("preset_name", PRESET_LIST.to_vec(), Required)], "Gives your character desired skills.", Some(Admin), ), - ChatCommand::Spawn => cmd( + ServerChatCommand::Spawn => cmd( vec![ Enum("alignment", ALIGNMENTS.clone(), Required), Enum("entity", ENTITIES.clone(), Required), @@ -623,139 +636,151 @@ impl ChatCommand { "Spawn a test entity", Some(Admin), ), - ChatCommand::Sudo => cmd( + ServerChatCommand::Sudo => cmd( vec![PlayerName(Required), SubCommand], "Run command as if you were another player", Some(Moderator), ), - ChatCommand::Tell => cmd( + ServerChatCommand::Tell => cmd( vec![PlayerName(Required), Message(Optional)], "Send a message to another player", None, ), - ChatCommand::Time => cmd( + ServerChatCommand::Time => cmd( vec![Enum("time", TIMES.clone(), Optional)], "Set the time of day", Some(Admin), ), - ChatCommand::Tp => cmd( + ServerChatCommand::Tp => cmd( vec![PlayerName(Optional)], "Teleport to another player", Some(Moderator), ), - ChatCommand::Unban => cmd( + ServerChatCommand::Unban => cmd( vec![PlayerName(Required)], "Remove the ban for the given username", Some(Moderator), ), - ChatCommand::Version => cmd(vec![], "Prints server version", None), - ChatCommand::Waypoint => cmd( + ServerChatCommand::Version => cmd(vec![], "Prints server version", None), + ServerChatCommand::Waypoint => cmd( vec![], "Set your waypoint to your current position", Some(Admin), ), - ChatCommand::Wiring => cmd(vec![], "Create wiring element", Some(Admin)), - ChatCommand::Whitelist => cmd( + ServerChatCommand::Wiring => cmd(vec![], "Create wiring element", Some(Admin)), + ServerChatCommand::Whitelist => cmd( vec![Any("add/remove", Required), PlayerName(Required)], "Adds/removes username to whitelist", Some(Moderator), ), - ChatCommand::World => cmd( + ServerChatCommand::World => cmd( vec![Message(Optional)], "Send messages to everyone on the server", None, ), - ChatCommand::MakeVolume => cmd(vec![], "Create a volume (experimental)", Some(Admin)), - ChatCommand::Location => { + ServerChatCommand::MakeVolume => { + cmd(vec![], "Create a volume (experimental)", Some(Admin)) + }, + ServerChatCommand::Location => { cmd(vec![Any("name", Required)], "Teleport to a location", None) }, - ChatCommand::CreateLocation => cmd( + ServerChatCommand::CreateLocation => cmd( vec![Any("name", Required)], "Create a location at the current position", Some(Moderator), ), - ChatCommand::DeleteLocation => cmd( + ServerChatCommand::DeleteLocation => cmd( vec![Any("name", Required)], "Delete a location", Some(Moderator), ), + ServerChatCommand::WeatherZone => cmd( + vec![ + Enum("weather kind", WEATHERS.clone(), Required), + Float("radius", 500.0, Optional), + Float("time", 300.0, Optional), + ], + "Create a weather zone", + Some(Admin), + ), } } - /// The keyword used to invoke the command, omitting the leading '/'. + /// The keyword used to invoke the command, omitting the prefix. pub fn keyword(&self) -> &'static str { match self { - ChatCommand::Adminify => "adminify", - ChatCommand::Airship => "airship", - ChatCommand::Alias => "alias", - ChatCommand::ApplyBuff => "buff", - ChatCommand::Ban => "ban", - ChatCommand::BattleMode => "battlemode", - ChatCommand::BattleModeForce => "battlemode_force", - ChatCommand::Build => "build", - ChatCommand::BuildAreaAdd => "build_area_add", - ChatCommand::BuildAreaList => "build_area_list", - ChatCommand::BuildAreaRemove => "build_area_remove", - ChatCommand::Campfire => "campfire", - ChatCommand::DebugColumn => "debug_column", - ChatCommand::DisconnectAllPlayers => "disconnect_all_players", - ChatCommand::DropAll => "dropall", - ChatCommand::Dummy => "dummy", - ChatCommand::Explosion => "explosion", - ChatCommand::Faction => "faction", - ChatCommand::GiveItem => "give_item", - ChatCommand::Goto => "goto", - ChatCommand::Group => "group", - ChatCommand::GroupInvite => "group_invite", - ChatCommand::GroupKick => "group_kick", - ChatCommand::GroupPromote => "group_promote", - ChatCommand::GroupLeave => "group_leave", - ChatCommand::Health => "health", - ChatCommand::JoinFaction => "join_faction", - ChatCommand::Help => "help", - ChatCommand::Home => "home", - ChatCommand::Jump => "jump", - ChatCommand::Kick => "kick", - ChatCommand::Kill => "kill", - ChatCommand::Kit => "kit", - ChatCommand::KillNpcs => "kill_npcs", - ChatCommand::Lantern => "lantern", - ChatCommand::Light => "light", - ChatCommand::MakeBlock => "make_block", - ChatCommand::MakeNpc => "make_npc", - ChatCommand::MakeSprite => "make_sprite", - ChatCommand::Motd => "motd", - ChatCommand::Object => "object", - ChatCommand::PermitBuild => "permit_build", - ChatCommand::Players => "players", - ChatCommand::Region => "region", - ChatCommand::ReloadChunks => "reload_chunks", - ChatCommand::RemoveLights => "remove_lights", - ChatCommand::RevokeBuild => "revoke_build", - ChatCommand::RevokeBuildAll => "revoke_build_all", - ChatCommand::Safezone => "safezone", - ChatCommand::Say => "say", - ChatCommand::ServerPhysics => "server_physics", - ChatCommand::SetMotd => "set_motd", - ChatCommand::Ship => "ship", - ChatCommand::Site => "site", - ChatCommand::SkillPoint => "skill_point", - ChatCommand::SkillPreset => "skill_preset", - ChatCommand::Spawn => "spawn", - ChatCommand::Sudo => "sudo", - ChatCommand::Tell => "tell", - ChatCommand::Time => "time", - ChatCommand::Tp => "tp", - ChatCommand::Unban => "unban", - ChatCommand::Version => "version", - ChatCommand::Waypoint => "waypoint", - ChatCommand::Wiring => "wiring", - ChatCommand::Whitelist => "whitelist", - ChatCommand::World => "world", - ChatCommand::MakeVolume => "make_volume", - ChatCommand::Location => "location", - ChatCommand::CreateLocation => "create_location", - ChatCommand::DeleteLocation => "delete_location", + ServerChatCommand::Adminify => "adminify", + ServerChatCommand::Airship => "airship", + ServerChatCommand::Alias => "alias", + ServerChatCommand::ApplyBuff => "buff", + ServerChatCommand::Ban => "ban", + ServerChatCommand::BattleMode => "battlemode", + ServerChatCommand::BattleModeForce => "battlemode_force", + ServerChatCommand::Build => "build", + ServerChatCommand::BuildAreaAdd => "build_area_add", + ServerChatCommand::BuildAreaList => "build_area_list", + ServerChatCommand::BuildAreaRemove => "build_area_remove", + ServerChatCommand::Campfire => "campfire", + ServerChatCommand::DebugColumn => "debug_column", + ServerChatCommand::DisconnectAllPlayers => "disconnect_all_players", + ServerChatCommand::DropAll => "dropall", + ServerChatCommand::Dummy => "dummy", + ServerChatCommand::Explosion => "explosion", + ServerChatCommand::Faction => "faction", + ServerChatCommand::GiveItem => "give_item", + ServerChatCommand::Goto => "goto", + ServerChatCommand::Group => "group", + ServerChatCommand::GroupInvite => "group_invite", + ServerChatCommand::GroupKick => "group_kick", + ServerChatCommand::GroupPromote => "group_promote", + ServerChatCommand::GroupLeave => "group_leave", + ServerChatCommand::Health => "health", + ServerChatCommand::JoinFaction => "join_faction", + ServerChatCommand::Help => "help", + ServerChatCommand::Home => "home", + ServerChatCommand::Jump => "jump", + ServerChatCommand::Kick => "kick", + ServerChatCommand::Kill => "kill", + ServerChatCommand::Kit => "kit", + ServerChatCommand::KillNpcs => "kill_npcs", + ServerChatCommand::Lantern => "lantern", + ServerChatCommand::Light => "light", + ServerChatCommand::MakeBlock => "make_block", + ServerChatCommand::MakeNpc => "make_npc", + ServerChatCommand::MakeSprite => "make_sprite", + ServerChatCommand::Motd => "motd", + ServerChatCommand::Object => "object", + ServerChatCommand::PermitBuild => "permit_build", + ServerChatCommand::Players => "players", + ServerChatCommand::Region => "region", + ServerChatCommand::ReloadChunks => "reload_chunks", + ServerChatCommand::RemoveLights => "remove_lights", + ServerChatCommand::RevokeBuild => "revoke_build", + ServerChatCommand::RevokeBuildAll => "revoke_build_all", + ServerChatCommand::Safezone => "safezone", + ServerChatCommand::Say => "say", + ServerChatCommand::ServerPhysics => "server_physics", + ServerChatCommand::SetMotd => "set_motd", + ServerChatCommand::Ship => "ship", + ServerChatCommand::Site => "site", + ServerChatCommand::SkillPoint => "skill_point", + ServerChatCommand::SkillPreset => "skill_preset", + ServerChatCommand::Spawn => "spawn", + ServerChatCommand::Sudo => "sudo", + ServerChatCommand::Tell => "tell", + ServerChatCommand::Time => "time", + ServerChatCommand::Tp => "tp", + ServerChatCommand::Unban => "unban", + ServerChatCommand::Version => "version", + ServerChatCommand::Waypoint => "waypoint", + ServerChatCommand::Wiring => "wiring", + ServerChatCommand::Whitelist => "whitelist", + ServerChatCommand::World => "world", + ServerChatCommand::MakeVolume => "make_volume", + ServerChatCommand::Location => "location", + ServerChatCommand::CreateLocation => "create_location", + ServerChatCommand::DeleteLocation => "delete_location", + ServerChatCommand::WeatherZone => "weather_zone", } } @@ -763,16 +788,19 @@ impl ChatCommand { /// Returns None if the command doesn't have a short keyword pub fn short_keyword(&self) -> Option<&'static str> { Some(match self { - ChatCommand::Faction => "f", - ChatCommand::Group => "g", - ChatCommand::Region => "r", - ChatCommand::Say => "s", - ChatCommand::Tell => "t", - ChatCommand::World => "w", + ServerChatCommand::Faction => "f", + ServerChatCommand::Group => "g", + ServerChatCommand::Region => "r", + ServerChatCommand::Say => "s", + ServerChatCommand::Tell => "t", + ServerChatCommand::World => "w", _ => return None, }) } + /// Produce an iterator over all the available commands + pub fn iter() -> impl Iterator { ::iter() } + /// A message that explains what the command does pub fn help_string(&self) -> String { let data = self.data(); @@ -783,9 +811,17 @@ impl ChatCommand { format!("{}: {}", usage, data.description) } - /// A boolean that is used to check whether the command requires - /// administrator permissions or not. - pub fn needs_role(&self) -> Option { self.data().needs_role } + /// Produce an iterator that first goes over all the short keywords + /// and their associated commands and then iterates over all the normal + /// keywords with their associated commands + pub fn iter_with_keywords() -> impl Iterator { + Self::iter() + // Go through all the shortcuts first + .filter_map(|c| c.short_keyword().map(|s| (s, c))) + .chain(Self::iter().map(|c| (c.keyword(), c))) + } + + pub fn needs_role(&self) -> Option { self.data().needs_role } /// Returns a format string for parsing arguments with scan_fmt pub fn arg_fmt(&self) -> String { @@ -807,34 +843,22 @@ impl ChatCommand { .collect::>() .join(" ") } - - /// Produce an iterator over all the available commands - pub fn iter() -> impl Iterator { ::iter() } - - /// Produce an iterator that first goes over all the short keywords - /// and their associated commands and then iterates over all the normal - /// keywords with their associated commands - pub fn iter_with_keywords() -> impl Iterator { - Self::iter() - // Go through all the shortcuts first - .filter_map(|c| c.short_keyword().map(|s| (s, c))) - .chain(Self::iter().map(|c| (c.keyword(), c))) - } } -impl Display for ChatCommand { +impl Display for ServerChatCommand { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> Result<(), fmt::Error> { write!(f, "{}", self.keyword()) } } -impl FromStr for ChatCommand { +impl FromStr for ServerChatCommand { type Err = (); - fn from_str(keyword: &str) -> Result { - let keyword = keyword.strip_prefix('/').unwrap_or(keyword); - - Self::iter_with_keywords() + fn from_str(keyword: &str) -> Result { + Self::iter() + // Go through all the shortcuts first + .filter_map(|c| c.short_keyword().map(|s| (s, c))) + .chain(Self::iter().map(|c| (c.keyword(), c))) // Find command with matching string as keyword .find_map(|(kwd, command)| (kwd == keyword).then(|| command)) // Return error if not found @@ -956,6 +980,38 @@ impl ArgumentSpec { } } +/// Parse a series of command arguments into values, including collecting all +/// trailing arguments. +#[macro_export] +macro_rules! parse_cmd_args { + ($args:expr, $($t:ty),* $(, ..$tail:ty)? $(,)?) => { + { + let mut args = $args.into_iter().peekable(); + ( + // We only consume the input argument when parsing is successful. If this fails, we + // will then attempt to parse it as the next argument type. This is done regardless + // of whether the argument is optional because that information is not available + // here. Nevertheless, if the caller only precedes to use the parsed arguments when + // all required arguments parse successfully to `Some(val)` this should not create + // any unexpected behavior. + // + // This does mean that optional arguments will be included in the trailing args or + // that one optional arg could be interpreted as another, if the user makes a + // mistake that causes an optional arg to fail to parse. But there is no way to + // discern this in the current model with the optional args and trailing arg being + // solely position based. + $({ + let parsed = args.peek().and_then(|s| s.parse::<$t>().ok()); + // Consume successfully parsed arg. + if parsed.is_some() { args.next(); } + parsed + }),* + $(, args.map(|s| s.to_string()).collect::<$tail>())? + ) + } + }; +} + #[cfg(test)] mod tests { use super::*; diff --git a/common/src/combat.rs b/common/src/combat.rs index dfeae2e5cb..a3df0817cb 100644 --- a/common/src/combat.rs +++ b/common/src/combat.rs @@ -133,11 +133,12 @@ impl Attack { source: AttackSource, dir: Dir, damage: Damage, + msm: &MaterialStatManifest, mut emit: impl FnMut(ServerEvent), mut emit_outcome: impl FnMut(Outcome), ) -> f32 { let damage_reduction = - Damage::compute_damage_reduction(Some(damage), target.inventory, target.stats); + Damage::compute_damage_reduction(Some(damage), target.inventory, target.stats, msm); let block_reduction = match source { AttackSource::Melee => { if let (Some(CharacterState::BasicBlock(data)), Some(ori)) = @@ -186,6 +187,9 @@ impl Attack { mut emit: impl FnMut(ServerEvent), mut emit_outcome: impl FnMut(Outcome), ) -> bool { + // TODO: Maybe move this higher and pass it as argument into this function? + let msm = &MaterialStatManifest::load().read(); + let AttackOptions { target_dodging, may_harm, @@ -220,6 +224,7 @@ impl Attack { attack_source, dir, damage.damage, + msm, &mut emit, &mut emit_outcome, ); @@ -230,10 +235,11 @@ impl Attack { self.crit_multiplier, strength_modifier, time, + damage.instance, ); let applied_damage = -change.amount; accumulated_damage += applied_damage; - emit_outcome(Outcome::Damage { pos: target.pos }); + if change.amount.abs() > Health::HEALTH_EPSILON { emit(ServerEvent::HealthChange { entity: target.entity, @@ -252,6 +258,8 @@ impl Attack { by: attacker.map(|x| x.into()), cause: Some(damage.damage.source), time, + crit: is_crit, + instance: damage.instance, }; emit(ServerEvent::HealthChange { entity: target.entity, @@ -272,7 +280,7 @@ impl Attack { let reduced_damage = applied_damage * damage_reduction / (1.0 - damage_reduction); let poise = reduced_damage * CRUSHING_POISE_FRACTION; - let change = -Poise::apply_poise_reduction(poise, target.inventory); + let change = -Poise::apply_poise_reduction(poise, target.inventory, msm); let poise_change = PoiseChange { amount: change, impulse: *dir, @@ -281,10 +289,29 @@ impl Attack { time, }; if change.abs() > Poise::POISE_EPSILON { - emit(ServerEvent::PoiseChange { - entity: target.entity, - change: poise_change, - }); + // If target is in a stunned state, apply extra poise damage as health + // damage instead + if let Some(CharacterState::Stunned(data)) = target.char_state { + let health_change = + change * data.static_data.poise_state.damage_multiplier(); + let health_change = HealthChange { + amount: health_change, + by: attacker.map(|x| x.into()), + cause: Some(damage.damage.source), + instance: damage.instance, + crit: is_crit, + time, + }; + emit(ServerEvent::HealthChange { + entity: target.entity, + change: health_change, + }); + } else { + emit(ServerEvent::PoiseChange { + entity: target.entity, + change: poise_change, + }); + } } }, // Piercing damage ignores some penetration, and is handled when damage @@ -307,7 +334,7 @@ impl Attack { emit(ServerEvent::EnergyChange { entity: attacker.entity, change: *ec - * compute_energy_reward_mod(attacker.inventory) + * compute_energy_reward_mod(attacker.inventory, msm) * strength_modifier, }); } @@ -332,6 +359,8 @@ impl Attack { by: attacker.map(|a| a.into()), cause: None, time, + crit: false, + instance: rand::random(), }; if change.amount.abs() > Health::HEALTH_EPSILON { emit(ServerEvent::HealthChange { @@ -342,7 +371,7 @@ impl Attack { } }, CombatEffect::Poise(p) => { - let change = -Poise::apply_poise_reduction(*p, target.inventory) + let change = -Poise::apply_poise_reduction(*p, target.inventory, msm) * strength_modifier; if change.abs() > Poise::POISE_EPSILON { let poise_change = PoiseChange { @@ -364,6 +393,8 @@ impl Attack { by: attacker.map(|a| a.into()), cause: None, time, + crit: false, + instance: rand::random(), }; if change.amount.abs() > Health::HEALTH_EPSILON { emit(ServerEvent::HealthChange { @@ -450,7 +481,7 @@ impl Attack { emit(ServerEvent::EnergyChange { entity: attacker.entity, change: ec - * compute_energy_reward_mod(attacker.inventory) + * compute_energy_reward_mod(attacker.inventory, msm) * strength_modifier, }); } @@ -475,6 +506,8 @@ impl Attack { by: attacker.map(|a| a.into()), cause: None, time, + crit: false, + instance: rand::random(), }; if change.amount.abs() > Health::HEALTH_EPSILON { emit(ServerEvent::HealthChange { @@ -485,8 +518,8 @@ impl Attack { } }, CombatEffect::Poise(p) => { - let change = - -Poise::apply_poise_reduction(p, target.inventory) * strength_modifier; + let change = -Poise::apply_poise_reduction(p, target.inventory, msm) + * strength_modifier; if change.abs() > Poise::POISE_EPSILON { let poise_change = PoiseChange { amount: change, @@ -507,6 +540,8 @@ impl Attack { by: attacker.map(|a| a.into()), cause: None, time, + crit: false, + instance: rand::random(), }; if change.amount.abs() > Health::HEALTH_EPSILON { emit(ServerEvent::HealthChange { @@ -596,15 +631,18 @@ pub struct AttackDamage { damage: Damage, target: Option, effects: Vec, + /// A random ID, used to group up attacks + instance: u64, } #[cfg(not(target_arch = "wasm32"))] impl AttackDamage { - pub fn new(damage: Damage, target: Option) -> Self { + pub fn new(damage: Damage, target: Option, instance: u64) -> Self { Self { damage, target, effects: Vec::new(), + instance, } } @@ -755,8 +793,9 @@ impl Damage { damage: Option, inventory: Option<&Inventory>, stats: Option<&Stats>, + msm: &MaterialStatManifest, ) -> f32 { - let protection = compute_protection(inventory); + let protection = compute_protection(inventory, msm); let penetration = if let Some(damage) = damage { if let DamageKind::Piercing = damage.kind { @@ -795,6 +834,7 @@ impl Damage { crit_mult: f32, damage_modifier: f32, time: Time, + instance: u64, ) -> HealthChange { let mut damage = self.value * damage_modifier; let critdamage = if is_crit { @@ -818,6 +858,8 @@ impl Damage { by: damage_contributor, cause: Some(self.source), time, + crit: is_crit, + instance, } }, DamageSource::Falling => { @@ -830,6 +872,8 @@ impl Damage { by: None, cause: Some(self.source), time, + crit: false, + instance, } }, DamageSource::Buff(_) | DamageSource::Other => HealthChange { @@ -837,6 +881,8 @@ impl Damage { by: None, cause: Some(self.source), time, + crit: false, + instance, }, } } @@ -1058,20 +1104,20 @@ pub fn combat_rating( // Normalized with a standard max health of 100 let health_rating = health.base_max() / 100.0 - / (1.0 - Damage::compute_damage_reduction(None, Some(inventory), None)).max(0.00001); + / (1.0 - Damage::compute_damage_reduction(None, Some(inventory), None, msm)).max(0.00001); // Normalized with a standard max energy of 100 and energy reward multiplier of // x1 - let energy_rating = (energy.base_max() + compute_max_energy_mod(Some(inventory))) / 100.0 - * compute_energy_reward_mod(Some(inventory)); + let energy_rating = (energy.base_max() + compute_max_energy_mod(Some(inventory), msm)) / 100.0 + * compute_energy_reward_mod(Some(inventory), msm); // Normalized with a standard max poise of 100 let poise_rating = poise.base_max() as f32 / 100.0 - / (1.0 - Poise::compute_poise_damage_reduction(inventory)).max(0.00001); + / (1.0 - Poise::compute_poise_damage_reduction(inventory, msm)).max(0.00001); // Normalized with a standard crit multiplier of 1.2 - let crit_rating = compute_crit_mult(Some(inventory)) / 1.2; + let crit_rating = compute_crit_mult(Some(inventory), msm) / 1.2; // Assumes a standard person has earned 20 skill points in the general skill // tree and 10 skill points for the weapon skill tree @@ -1100,14 +1146,14 @@ pub fn combat_rating( } #[cfg(not(target_arch = "wasm32"))] -pub fn compute_crit_mult(inventory: Option<&Inventory>) -> f32 { +pub fn compute_crit_mult(inventory: Option<&Inventory>, msm: &MaterialStatManifest) -> f32 { // Starts with a value of 1.25 when summing the stats from each armor piece, and // defaults to a value of 1.25 if no inventory is equipped inventory.map_or(1.25, |inv| { inv.equipped_items() .filter_map(|item| { if let ItemKind::Armor(armor) = &*item.kind() { - armor.crit_power() + armor.stats(msm).crit_power } else { None } @@ -1118,14 +1164,14 @@ pub fn compute_crit_mult(inventory: Option<&Inventory>) -> f32 { /// Computes the energy reward modifer from worn armor #[cfg(not(target_arch = "wasm32"))] -pub fn compute_energy_reward_mod(inventory: Option<&Inventory>) -> f32 { +pub fn compute_energy_reward_mod(inventory: Option<&Inventory>, msm: &MaterialStatManifest) -> f32 { // Starts with a value of 1.0 when summing the stats from each armor piece, and // defaults to a value of 1.0 if no inventory is present inventory.map_or(1.0, |inv| { inv.equipped_items() .filter_map(|item| { if let ItemKind::Armor(armor) = &*item.kind() { - armor.energy_reward() + armor.stats(msm).energy_reward } else { None } @@ -1137,13 +1183,13 @@ pub fn compute_energy_reward_mod(inventory: Option<&Inventory>) -> f32 { /// Computes the additive modifier that should be applied to max energy from the /// currently equipped items #[cfg(not(target_arch = "wasm32"))] -pub fn compute_max_energy_mod(inventory: Option<&Inventory>) -> f32 { +pub fn compute_max_energy_mod(inventory: Option<&Inventory>, msm: &MaterialStatManifest) -> f32 { // Defaults to a value of 0 if no inventory is present inventory.map_or(0.0, |inv| { inv.equipped_items() .filter_map(|item| { if let ItemKind::Armor(armor) = &*item.kind() { - armor.energy_max() + armor.stats(msm).energy_max } else { None } @@ -1158,10 +1204,11 @@ pub fn compute_max_energy_mod(inventory: Option<&Inventory>) -> f32 { pub fn perception_dist_multiplier_from_stealth( inventory: Option<&Inventory>, character_state: Option<&CharacterState>, + msm: &MaterialStatManifest, ) -> f32 { const SNEAK_MULTIPLIER: f32 = 0.7; - let item_stealth_multiplier = stealth_multiplier_from_items(inventory); + let item_stealth_multiplier = stealth_multiplier_from_items(inventory, msm); let is_sneaking = character_state.map_or(false, |state| state.is_stealthy()); let multiplier = item_stealth_multiplier * if is_sneaking { SNEAK_MULTIPLIER } else { 1.0 }; @@ -1170,12 +1217,15 @@ pub fn perception_dist_multiplier_from_stealth( } #[cfg(not(target_arch = "wasm32"))] -pub fn stealth_multiplier_from_items(inventory: Option<&Inventory>) -> f32 { +pub fn stealth_multiplier_from_items( + inventory: Option<&Inventory>, + msm: &MaterialStatManifest, +) -> f32 { let stealth_sum = inventory.map_or(0.0, |inv| { inv.equipped_items() .filter_map(|item| { if let ItemKind::Armor(armor) = &*item.kind() { - armor.stealth() + armor.stats(msm).stealth } else { None } @@ -1190,12 +1240,15 @@ pub fn stealth_multiplier_from_items(inventory: Option<&Inventory>) -> f32 { /// damage reduction applied to damage received by an entity None indicates that /// the armor equipped makes the entity invulnerable #[cfg(not(target_arch = "wasm32"))] -pub fn compute_protection(inventory: Option<&Inventory>) -> Option { +pub fn compute_protection( + inventory: Option<&Inventory>, + msm: &MaterialStatManifest, +) -> Option { inventory.map_or(Some(0.0), |inv| { inv.equipped_items() .filter_map(|item| { if let ItemKind::Armor(armor) = &*item.kind() { - armor.protection() + armor.stats(msm).protection } else { None } diff --git a/common/src/comp/ability.rs b/common/src/comp/ability.rs index 1c1daacf9b..95be90faeb 100644 --- a/common/src/comp/ability.rs +++ b/common/src/comp/ability.rs @@ -402,6 +402,7 @@ impl From<&CharacterState> for CharacterAbilityType { | CharacterState::SpriteSummon(_) | CharacterState::UseItem(_) | CharacterState::SpriteInteract(_) + | CharacterState::Skate(_) | CharacterState::Wallrun(_) => Self::Other, } } diff --git a/common/src/comp/body.rs b/common/src/comp/body.rs index 184652993a..b245699f07 100644 --- a/common/src/comp/body.rs +++ b/common/src/comp/body.rs @@ -400,10 +400,10 @@ impl Body { }, Body::BipedSmall(body) => match body.species { biped_small::Species::Gnarling => Vec3::new(1.0, 0.75, 1.4), - biped_small::Species::Haniwa => Vec3::new(1.0, 0.75, 2.2), - biped_small::Species::Adlet => Vec3::new(1.0, 0.75, 2.0), - biped_small::Species::Sahagin => Vec3::new(1.0, 1.2, 1.7), - biped_small::Species::Myrmidon => Vec3::new(1.0, 0.75, 2.2), + biped_small::Species::Haniwa => Vec3::new(1.3, 1.0, 2.2), + biped_small::Species::Adlet => Vec3::new(1.3, 1.0, 2.0), + biped_small::Species::Sahagin => Vec3::new(1.3, 2.0, 1.7), + biped_small::Species::Myrmidon => Vec3::new(1.3, 1.0, 2.2), biped_small::Species::Husk => Vec3::new(1.7, 0.7, 2.7), _ => Vec3::new(1.0, 0.75, 1.4), @@ -415,7 +415,11 @@ impl Body { bird_medium::Species::Peacock => Vec3::new(1.3, 1.1, 1.4), _ => Vec3::new(2.0, 1.0, 1.5), }, - Body::BirdLarge(_) => Vec3::new(2.0, 6.0, 3.5), + Body::BirdLarge(body) => match body.species { + bird_large::Species::Cockatrice => Vec3::new(2.5, 5.5, 3.5), + bird_large::Species::Roc => Vec3::new(2.2, 7.5, 4.0), + _ => Vec3::new(2.0, 6.0, 3.5), + }, Body::Dragon(_) => Vec3::new(16.0, 10.0, 16.0), Body::FishMedium(_) => Vec3::new(0.5, 2.0, 0.8), Body::FishSmall(_) => Vec3::new(0.3, 1.2, 0.6), @@ -427,59 +431,67 @@ impl Body { Body::Object(object) => object.dimensions(), Body::ItemDrop(item_drop) => item_drop.dimensions(), Body::QuadrupedMedium(body) => match body.species { + quadruped_medium::Species::Akhlut => Vec3::new(2.5, 7.0, 3.0), quadruped_medium::Species::Barghest => Vec3::new(2.0, 4.4, 2.7), quadruped_medium::Species::Bear => Vec3::new(2.0, 3.8, 3.0), quadruped_medium::Species::Catoblepas => Vec3::new(2.0, 4.0, 2.9), quadruped_medium::Species::Cattle => Vec3::new(2.0, 3.6, 2.4), quadruped_medium::Species::Deer => Vec3::new(2.0, 3.0, 2.2), - quadruped_medium::Species::Dreadhorn => Vec3::new(2.0, 5.0, 4.0), + quadruped_medium::Species::Dreadhorn => Vec3::new(3.5, 6.0, 4.0), + quadruped_medium::Species::Frostfang => Vec3::new(1.5, 3.0, 1.5), quadruped_medium::Species::Grolgar => Vec3::new(2.0, 4.0, 2.0), quadruped_medium::Species::Highland => Vec3::new(2.0, 3.6, 2.4), quadruped_medium::Species::Horse => Vec3::new(2.0, 3.0, 2.4), quadruped_medium::Species::Lion => Vec3::new(2.0, 3.3, 2.0), quadruped_medium::Species::Moose => Vec3::new(2.0, 4.0, 2.5), + quadruped_medium::Species::Roshwalr => Vec3::new(2.0, 3.5, 2.2), quadruped_medium::Species::Saber => Vec3::new(2.0, 3.0, 2.0), quadruped_medium::Species::Tarasque => Vec3::new(2.0, 4.0, 2.6), quadruped_medium::Species::Yak => Vec3::new(2.0, 3.6, 3.0), - quadruped_medium::Species::Mammoth => Vec3::new(2.0, 7.0, 8.0), + quadruped_medium::Species::Mammoth => Vec3::new(7.5, 11.5, 8.0), quadruped_medium::Species::Ngoubou => Vec3::new(2.0, 3.2, 2.4), quadruped_medium::Species::Llama => Vec3::new(2.0, 2.5, 2.6), quadruped_medium::Species::Alpaca => Vec3::new(2.0, 2.0, 2.0), quadruped_medium::Species::Camel => Vec3::new(2.0, 4.0, 3.5), + quadruped_medium::Species::Wolf => Vec3::new(1.7, 3.0, 1.8), // FIXME: We really shouldn't be doing wildcards here _ => Vec3::new(2.0, 3.0, 2.0), }, Body::QuadrupedSmall(body) => match body.species { - quadruped_small::Species::Dodarock => Vec3::new(1.2, 1.8, 1.5), - quadruped_small::Species::Holladon => Vec3::new(1.2, 1.6, 1.5), + quadruped_small::Species::Batfox => Vec3::new(1.4, 1.7, 1.3), + quadruped_small::Species::Dodarock => Vec3::new(1.2, 1.9, 1.5), + quadruped_small::Species::Holladon => Vec3::new(1.3, 1.9, 1.5), + quadruped_small::Species::Hyena => Vec3::new(1.2, 1.4, 1.3), quadruped_small::Species::Truffler => Vec3::new(1.2, 1.8, 2.2), _ => Vec3::new(1.2, 1.2, 1.0), }, Body::QuadrupedLow(body) => match body.species { - quadruped_low::Species::Asp => Vec3::new(1.0, 3.0, 1.8), + quadruped_low::Species::Asp => Vec3::new(2.0, 3.0, 1.7), quadruped_low::Species::Crocodile => Vec3::new(1.0, 2.8, 1.3), - quadruped_low::Species::Deadwood => Vec3::new(1.0, 1.4, 1.3), - quadruped_low::Species::Lavadrake => Vec3::new(1.0, 3.0, 2.5), - quadruped_low::Species::Maneater => Vec3::new(1.0, 2.2, 4.0), - quadruped_low::Species::Monitor => Vec3::new(1.0, 2.3, 1.5), + quadruped_low::Species::Deadwood => Vec3::new(1.3, 1.3, 1.4), + quadruped_low::Species::Hakulaq => Vec3::new(1.8, 3.0, 2.0), + quadruped_low::Species::Icedrake => Vec3::new(2.0, 5.5, 2.5), + quadruped_low::Species::Lavadrake => Vec3::new(2.0, 4.7, 2.5), + quadruped_low::Species::Maneater => Vec3::new(2.5, 3.7, 4.0), + quadruped_low::Species::Monitor => Vec3::new(1.4, 3.2, 1.3), quadruped_low::Species::Pangolin => Vec3::new(1.0, 2.6, 1.1), - quadruped_low::Species::Rocksnapper => Vec3::new(1.0, 3.0, 2.9), - quadruped_low::Species::Sandshark => Vec3::new(1.1, 4.3, 1.7), - quadruped_low::Species::Basilisk => Vec3::new(1.8, 3.4, 2.9), - quadruped_low::Species::Salamander => Vec3::new(1.0, 2.4, 1.3), - quadruped_low::Species::Tortoise => Vec3::new(1.0, 1.8, 1.6), + quadruped_low::Species::Rocksnapper => Vec3::new(2.5, 3.5, 2.9), + quadruped_low::Species::Sandshark => Vec3::new(2.1, 4.3, 1.7), + quadruped_low::Species::Basilisk => Vec3::new(2.7, 6.0, 2.9), + quadruped_low::Species::Salamander => Vec3::new(1.7, 4.0, 1.3), + quadruped_low::Species::Tortoise => Vec3::new(1.7, 2.7, 1.5), _ => Vec3::new(1.0, 1.6, 1.3), }, Body::Ship(ship) => ship.dimensions(), Body::Theropod(body) => match body.species { theropod::Species::Archaeos => Vec3::new(4.0, 8.5, 8.0), - theropod::Species::Ntouka => Vec3::new(4.0, 7.0, 8.0), - theropod::Species::Odonto => Vec3::new(4.0, 7.0, 8.0), + theropod::Species::Ntouka => Vec3::new(4.0, 9.0, 6.6), + theropod::Species::Odonto => Vec3::new(4.0, 8.0, 6.6), theropod::Species::Sandraptor => Vec3::new(2.0, 3.0, 2.6), theropod::Species::Snowraptor => Vec3::new(2.0, 3.0, 2.6), theropod::Species::Sunlizard => Vec3::new(2.0, 3.6, 2.5), theropod::Species::Woodraptor => Vec3::new(2.0, 3.0, 2.6), - theropod::Species::Yale => Vec3::new(1.5, 3.2, 4.0), + theropod::Species::Yale => Vec3::new(2.0, 3.2, 4.0), }, Body::Arthropod(body) => match body.species { arthropod::Species::Tarantula => Vec3::new(4.0, 4.0, 1.8), diff --git a/common/src/comp/body/bird_medium.rs b/common/src/comp/body/bird_medium.rs index 7754c4cce3..6b279cf536 100644 --- a/common/src/comp/body/bird_medium.rs +++ b/common/src/comp/body/bird_medium.rs @@ -1,6 +1,7 @@ use crate::{make_case_elim, make_proj_elim}; use rand::{seq::SliceRandom, thread_rng}; use serde::{Deserialize, Serialize}; +use strum::{Display, EnumString}; make_proj_elim!( body, @@ -31,7 +32,9 @@ impl From for super::Body { make_case_elim!( species, - #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] + #[derive( + Copy, Clone, Debug, Display, EnumString, PartialEq, Eq, Hash, Serialize, Deserialize, + )] #[repr(u32)] pub enum Species { Duck = 0, @@ -98,7 +101,9 @@ impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies { make_case_elim!( body_type, - #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] + #[derive( + Copy, Clone, Debug, Display, EnumString, PartialEq, Eq, Hash, Serialize, Deserialize, + )] #[repr(u32)] pub enum BodyType { Female = 0, diff --git a/common/src/comp/body/object.rs b/common/src/comp/body/object.rs index 638c12b6d4..a351c345e5 100644 --- a/common/src/comp/body/object.rs +++ b/common/src/comp/body/object.rs @@ -413,7 +413,7 @@ impl Body { Body::BoltFire => Vec3::new(0.1, 0.1, 0.1), Body::Crossbow => Vec3::new(3.0, 3.0, 1.5), Body::HaniwaSentry => Vec3::new(0.8, 0.8, 1.4), - Body::SeaLantern => Vec3::new(0.5, 0.5, 1.0), + Body::SeaLantern => Vec3::new(0.8, 0.8, 1.4), Body::Snowball => Vec3::broadcast(2.5), Body::Tornado => Vec3::new(2.0, 2.0, 3.4), Body::TrainingDummy => Vec3::new(1.5, 1.5, 3.0), diff --git a/common/src/comp/body/ship.rs b/common/src/comp/body/ship.rs index bc4d56a28b..113138df9f 100644 --- a/common/src/comp/body/ship.rs +++ b/common/src/comp/body/ship.rs @@ -206,10 +206,7 @@ pub mod figuredata { } impl assets::Compound for ShipSpec { - fn load( - cache: &assets::AssetCache, - _: &str, - ) -> Result { + fn load(cache: assets::AnyCache, _: &str) -> Result { let manifest: AssetHandle> = AssetExt::load("common.manifests.ship_manifest")?; let mut colliders = HashMap::new(); diff --git a/common/src/comp/buff.rs b/common/src/comp/buff.rs index 3d7cf2afaa..30ad7cc247 100644 --- a/common/src/comp/buff.rs +++ b/common/src/comp/buff.rs @@ -152,6 +152,7 @@ pub enum BuffEffect { rate: f32, accumulated: f32, kind: ModifierKind, + instance: u64, }, /// Periodically consume entity energy EnergyChangeOverTime { @@ -234,12 +235,14 @@ impl Buff { ) -> Self { // Normalized nonlinear scaling let nn_scaling = |a| a / (a + 0.5); + let instance = rand::random(); let (effects, time) = match kind { BuffKind::Bleeding => ( vec![BuffEffect::HealthChangeOverTime { rate: -data.strength, accumulated: 0.0, kind: ModifierKind::Additive, + instance, }], data.duration, ), @@ -248,6 +251,7 @@ impl Buff { rate: data.strength, accumulated: 0.0, kind: ModifierKind::Additive, + instance, }], data.duration, ), @@ -256,6 +260,7 @@ impl Buff { rate: data.strength, accumulated: 0.0, kind: ModifierKind::Fractional, + instance, }], data.duration, ), @@ -271,6 +276,7 @@ impl Buff { rate: -1.0, accumulated: 0.0, kind: ModifierKind::Additive, + instance, }, ], data.duration, @@ -304,6 +310,7 @@ impl Buff { rate: -data.strength, accumulated: 0.0, kind: ModifierKind::Additive, + instance, }], data.duration, ), @@ -322,6 +329,7 @@ impl Buff { rate: -data.strength * 4.0, accumulated: 0.0, kind: ModifierKind::Additive, + instance, }, ], data.duration, @@ -333,6 +341,7 @@ impl Buff { rate: data.strength * 10.0, accumulated: 0.0, kind: ModifierKind::Additive, + instance, }, ], data.duration, diff --git a/common/src/comp/character_state.rs b/common/src/comp/character_state.rs index 24acfec446..115fea7714 100644 --- a/common/src/comp/character_state.rs +++ b/common/src/comp/character_state.rs @@ -1,6 +1,7 @@ use crate::{ comp::{ - item::ConsumableKind, ControlAction, Density, Energy, InputAttr, InputKind, Ori, Pos, Vel, + inventory::item::armor::Friction, item::ConsumableKind, ControlAction, Density, Energy, + InputAttr, InputKind, Ori, Pos, Vel, }, event::{LocalEvent, ServerEvent}, states::{ @@ -123,6 +124,8 @@ pub enum CharacterState { SpriteInteract(sprite_interact::Data), /// Runs on the wall Wallrun(wallrun::Data), + /// Ice skating or skiing + Skate(skate::Data), } impl CharacterState { @@ -153,15 +156,16 @@ impl CharacterState { pub fn is_stealthy(&self) -> bool { matches!( self, - CharacterState::Idle(idle::Data { is_sneaking: true }) - | CharacterState::Wielding(wielding::Data { - is_sneaking: true, - .. - }) - | CharacterState::Roll(roll::Data { - is_sneaking: true, - .. - }) + CharacterState::Idle(idle::Data { + is_sneaking: true, + footwear: _ + }) | CharacterState::Wielding(wielding::Data { + is_sneaking: true, + .. + }) | CharacterState::Roll(roll::Data { + is_sneaking: true, + .. + }) ) } @@ -227,6 +231,8 @@ impl CharacterState { pub fn is_glide(&self) -> bool { matches!(self, CharacterState::Glide(_)) } + pub fn is_skate(&self) -> bool { matches!(self, CharacterState::Skate(_)) } + pub fn is_melee_dodge(&self) -> bool { matches!(self, CharacterState::Roll(d) if d.static_data.immune_melee) } @@ -329,6 +335,7 @@ impl CharacterState { CharacterState::SpriteSummon(data) => data.behavior(j, output_events), CharacterState::UseItem(data) => data.behavior(j, output_events), CharacterState::SpriteInteract(data) => data.behavior(j, output_events), + CharacterState::Skate(data) => data.behavior(j, output_events), } } @@ -375,12 +382,26 @@ impl CharacterState { CharacterState::SpriteSummon(data) => data.handle_event(j, output_events, action), CharacterState::UseItem(data) => data.handle_event(j, output_events, action), CharacterState::SpriteInteract(data) => data.handle_event(j, output_events, action), + CharacterState::Skate(data) => data.handle_event(j, output_events, action), + } + } + + pub fn footwear(&self) -> Option { + match &self { + CharacterState::Idle(data) => data.footwear, + CharacterState::Skate(data) => Some(data.footwear), + _ => None, } } } impl Default for CharacterState { - fn default() -> Self { Self::Idle(idle::Data { is_sneaking: false }) } + fn default() -> Self { + Self::Idle(idle::Data { + is_sneaking: false, + footwear: None, + }) + } } impl Component for CharacterState { diff --git a/common/src/comp/health.rs b/common/src/comp/health.rs index ac771637e0..329b66f92f 100644 --- a/common/src/comp/health.rs +++ b/common/src/comp/health.rs @@ -24,6 +24,10 @@ pub struct HealthChange { pub cause: Option, /// The time that the health change occurred at pub time: Time, + /// A boolean that tells you if the change was a crit + pub crit: bool, + /// A random ID, used to group up health changes from the same attack + pub instance: u64, } impl HealthChange { @@ -132,7 +136,9 @@ impl Health { amount: 0.0, by: None, cause: None, + crit: false, time: Time(0.0), + instance: rand::random(), }, is_dead: false, damage_contributors: HashMap::new(), @@ -151,7 +157,8 @@ impl Health { } #[cfg(not(target_arch = "wasm32"))] - pub fn change_by(&mut self, change: HealthChange) { + /// Returns a boolean if the delta was not zero. + pub fn change_by(&mut self, change: HealthChange) -> bool { let prev_health = i64::from(self.current); self.current = (((self.current() + change.amount).clamp(0.0, f32::from(Self::MAX_HEALTH)) * Self::SCALING_FACTOR_FLOAT) as u32) @@ -179,6 +186,7 @@ impl Health { (change.time.0 - last_damage_time.0) < DAMAGE_CONTRIB_PRUNE_SECS }); } + delta != 0 } pub fn damage_contributions(&self) -> impl Iterator { @@ -210,7 +218,9 @@ impl Health { amount: 0.0, by: None, cause: None, + crit: false, time: Time(0.0), + instance: rand::random(), }, is_dead: false, damage_contributors: HashMap::new(), @@ -244,6 +254,8 @@ mod tests { time: Time(123.0), by: Some(damage_contrib), cause: None, + crit: false, + instance: rand::random(), }; health.change_by(health_change); @@ -269,6 +281,8 @@ mod tests { time: Time(123.0), by: Some(damage_contrib), cause: None, + crit: false, + instance: rand::random(), }; health.change_by(health_change); @@ -288,6 +302,8 @@ mod tests { time: Time(123.0), by: Some(damage_contrib), cause: None, + crit: false, + instance: rand::random(), }; health.change_by(health_change); health.change_by(health_change); @@ -313,6 +329,8 @@ mod tests { time: Time(10.0), by: Some(damage_contrib1), cause: None, + crit: false, + instance: rand::random(), }; health.change_by(health_change); @@ -322,6 +340,8 @@ mod tests { time: Time(100.0), by: Some(damage_contrib2), cause: None, + crit: false, + instance: rand::random(), }; health.change_by(health_change); @@ -335,6 +355,8 @@ mod tests { time: Time(620.0), by: Some(damage_contrib2), cause: None, + crit: false, + instance: rand::random(), }; health.change_by(health_change); diff --git a/common/src/comp/inventory/item/armor.rs b/common/src/comp/inventory/item/armor.rs index 4ae071fb94..26baf0152e 100644 --- a/common/src/comp/inventory/item/armor.rs +++ b/common/src/comp/inventory/item/armor.rs @@ -1,7 +1,15 @@ +use crate::{ + comp::item::{MaterialStatManifest, Rgb}, + terrain::{Block, BlockKind}, +}; use serde::{Deserialize, Serialize}; -use std::{cmp::Ordering, ops::Sub}; +use std::{ + cmp::Ordering, + ops::{Mul, Sub}, +}; +use strum::{EnumIter, IntoEnumIterator}; -#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize, EnumIter)] pub enum ArmorKind { Shoulder, Chest, @@ -26,60 +34,105 @@ impl Armor { } } +/// longitudinal and lateral friction, only meaningful for footwear #[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize)] -pub struct Stats { - /// Protection is non-linearly transformed (following summation) to a damage - /// reduction using (prot / (60 + prot)) - protection: Option, - /// Poise protection is non-linearly transformed (following summation) to a - /// poise damage reduction using (prot / (60 + prot)) - poise_resilience: Option, - /// Energy max is summed, and then applied directly to the max energy stat - energy_max: Option, - /// Energy recovery is summed, and then added to 1.0. When attacks reward - /// energy, it is then multiplied by this value before the energy is - /// rewarded. - energy_reward: Option, - /// Crit power is summed, and then added to the default crit multiplier of - /// 1.25. Damage is multiplied by this value when an attack crits. - crit_power: Option, - /// Stealth is summed along with the base stealth bonus (2.0), and then - /// the agent's perception distance is divided by this value - stealth: Option, +pub enum Friction { + Normal, + Ski, + Skate, + // Snowshoe, + // Spikes, } -impl Stats { - // DO NOT USE UNLESS YOU KNOW WHAT YOU ARE DOING - // Added for csv import of stats - pub fn new( - protection: Option, - poise_resilience: Option, - energy_max: Option, - energy_reward: Option, - crit_power: Option, - stealth: Option, - ) -> Self { - Self { - protection, - poise_resilience, - energy_max, - energy_reward, - crit_power, - stealth, +impl Default for Friction { + fn default() -> Self { Self::Normal } +} + +impl Friction { + pub fn can_skate_on(&self, b: BlockKind) -> bool { + match self { + Friction::Ski => matches!(b, BlockKind::Snow | BlockKind::Ice | BlockKind::Air), + Friction::Skate => b == BlockKind::Ice, + _ => false, } } - pub fn protection(&self) -> Option { self.protection } + /// longitudinal (forward) and lateral (side) friction + pub fn get_friction(&self, b: BlockKind) -> (f32, f32) { + match (self, b) { + (Friction::Ski, BlockKind::Snow) => (0.01, 0.95), + (Friction::Ski, BlockKind::Ice) => (0.001, 0.5), + (Friction::Ski, BlockKind::Water) => (0.1, 0.7), + (Friction::Ski, BlockKind::Air) => (0.0, 0.0), + (Friction::Skate, BlockKind::Ice) => (0.001, 0.99), + _ => { + let non_directional_friction = Block::new(b, Rgb::new(0, 0, 0)).get_friction(); + (non_directional_friction, non_directional_friction) + }, + } + } +} - pub fn poise_resilience(&self) -> Option { self.poise_resilience } +#[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize, Default)] +pub struct Stats { + /// Protection is non-linearly transformed (following summation) to a damage + /// reduction using (prot / (60 + prot)) + pub protection: Option, + /// Poise protection is non-linearly transformed (following summation) to a + /// poise damage reduction using (prot / (60 + prot)) + pub poise_resilience: Option, + /// Energy max is summed, and then applied directly to the max energy stat + pub energy_max: Option, + /// Energy recovery is summed, and then added to 1.0. When attacks reward + /// energy, it is then multiplied by this value before the energy is + /// rewarded. + pub energy_reward: Option, + /// Crit power is summed, and then added to the default crit multiplier of + /// 1.25. Damage is multiplied by this value when an attack crits. + pub crit_power: Option, + /// Stealth is summed along with the base stealth bonus (2.0), and then + /// the agent's perception distance is divided by this value + pub stealth: Option, + /// Ground contact type, mostly for shoes + #[serde(default)] + pub ground_contact: Friction, +} - pub fn energy_max(&self) -> Option { self.energy_max } +impl Stats { + fn none() -> Self { + Stats { + protection: None, + poise_resilience: None, + energy_max: None, + energy_reward: None, + crit_power: None, + stealth: None, + ground_contact: Friction::Normal, + } + } +} - pub fn energy_reward(&self) -> Option { self.energy_reward } +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] +pub enum StatsSource { + Direct(Stats), + FromSet(String), +} - pub fn crit_power(&self) -> Option { self.crit_power } +impl Mul for Stats { + type Output = Self; - pub fn stealth(&self) -> Option { self.stealth } + fn mul(self, val: f32) -> Self::Output { + Stats { + protection: self.protection.map(|a| a * val), + poise_resilience: self.poise_resilience.map(|a| a * val), + energy_max: self.energy_max.map(|a| a * val), + energy_reward: self.energy_reward.map(|a| a * val), + crit_power: self.crit_power.map(|a| a * val), + stealth: self.stealth.map(|a| a * val), + // There is nothing to multiply, it is just an enum + ground_contact: self.ground_contact, + } + } } impl Sub for Stats { @@ -99,6 +152,7 @@ impl Sub for Stats { .map(|(a, b)| a - b), crit_power: self.crit_power.zip(other.crit_power).map(|(a, b)| a - b), stealth: self.stealth.zip(other.stealth).map(|(a, b)| a - b), + ground_contact: Friction::Normal, } } } @@ -127,6 +181,17 @@ impl Sub for Protection { } } +impl Mul for Protection { + type Output = Self; + + fn mul(self, val: f32) -> Self::Output { + match self { + Protection::Invincible => Protection::Invincible, + Protection::Normal(a) => Protection::Normal(a * val), + } + } +} + impl PartialOrd for Protection { fn partial_cmp(&self, other: &Self) -> Option { match (*self, *other) { @@ -141,23 +206,39 @@ impl PartialOrd for Protection { #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] pub struct Armor { pub kind: ArmorKind, - pub stats: Stats, + stats: StatsSource, } impl Armor { - pub fn new(kind: ArmorKind, stats: Stats) -> Self { Self { kind, stats } } + pub fn new(kind: ArmorKind, stats: StatsSource) -> Self { Self { kind, stats } } - pub fn protection(&self) -> Option { self.stats.protection } + pub fn stats(&self, msm: &MaterialStatManifest) -> Stats { + match &self.stats { + StatsSource::Direct(stats) => *stats, + StatsSource::FromSet(set) => { + let set_stats = msm.armor_stats(set).unwrap_or_else(Stats::none); + let armor_kind_weight = |kind| match kind { + ArmorKind::Shoulder => 2.0, + ArmorKind::Chest => 3.0, + ArmorKind::Belt => 0.5, + ArmorKind::Hand => 1.0, + ArmorKind::Pants => 2.0, + ArmorKind::Foot => 1.0, + ArmorKind::Back => 0.5, + ArmorKind::Ring => 0.0, + ArmorKind::Neck => 0.0, + ArmorKind::Head => 0.0, + ArmorKind::Tabard => 0.0, + ArmorKind::Bag => 0.0, + }; - pub fn poise_resilience(&self) -> Option { self.stats.poise_resilience } + let armor_weights_sum: f32 = ArmorKind::iter().map(armor_kind_weight).sum(); + let multiplier = armor_kind_weight(self.kind) / armor_weights_sum; - pub fn energy_max(&self) -> Option { self.stats.energy_max } - - pub fn energy_reward(&self) -> Option { self.stats.energy_reward } - - pub fn crit_power(&self) -> Option { self.stats.crit_power } - - pub fn stealth(&self) -> Option { self.stats.stealth } + set_stats * multiplier + }, + } + } #[cfg(test)] pub fn test_armor( @@ -167,14 +248,15 @@ impl Armor { ) -> Armor { Armor { kind, - stats: Stats { + stats: StatsSource::Direct(Stats { protection: Some(protection), poise_resilience: Some(poise_resilience), energy_max: None, energy_reward: None, crit_power: None, stealth: None, - }, + ground_contact: Friction::Normal, + }), } } } diff --git a/common/src/comp/inventory/item/mod.rs b/common/src/comp/inventory/item/mod.rs index a487c153c8..450d556ea9 100644 --- a/common/src/comp/inventory/item/mod.rs +++ b/common/src/comp/inventory/item/mod.rs @@ -4,8 +4,8 @@ pub mod modular; pub mod tool; // Reexports -pub use modular::{ModularBase, ModularComponent}; -pub use tool::{AbilitySet, AbilitySpec, Hands, MaterialStatManifest, Tool, ToolKind}; +pub use modular::{MaterialStatManifest, ModularBase, ModularComponent}; +pub use tool::{AbilitySet, AbilitySpec, Hands, Tool, ToolKind}; use crate::{ assets::{self, AssetExt, BoxedError, Error}, @@ -656,10 +656,7 @@ impl PartialEq for Item { } impl assets::Compound for ItemDef { - fn load( - cache: &assets::AssetCache, - specifier: &str, - ) -> Result { + fn load(cache: assets::AnyCache, specifier: &str) -> Result { if specifier.starts_with("veloren.core.") { return Err(format!( "Attempted to load an asset from a specifier reserved for core veloren functions. \ diff --git a/common/src/comp/inventory/item/modular.rs b/common/src/comp/inventory/item/modular.rs index 84be27f07b..ea4d364cd0 100644 --- a/common/src/comp/inventory/item/modular.rs +++ b/common/src/comp/inventory/item/modular.rs @@ -1,8 +1,12 @@ use super::{ - tool::{self, AbilityMap, AbilitySpec, Hands, MaterialStatManifest}, + armor, + tool::{self, AbilityMap, AbilitySpec, Hands}, Item, ItemBase, ItemDef, ItemDesc, ItemKind, ItemTag, Material, Quality, ToolKind, }; -use crate::{assets::AssetExt, recipe}; +use crate::{ + assets::{self, Asset, AssetExt, AssetHandle}, + recipe, +}; use common_base::dev_panic; use hashbrown::HashMap; use lazy_static::lazy_static; @@ -20,6 +24,37 @@ macro_rules! modular_item_id_prefix { }; } +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct MaterialStatManifest { + tool_stats: HashMap, + armor_stats: HashMap, +} + +impl MaterialStatManifest { + pub fn load() -> AssetHandle { Self::load_expect("common.material_stats_manifest") } + + pub fn armor_stats(&self, key: &str) -> Option { + self.armor_stats.get(key).copied() + } + + #[doc(hidden)] + /// needed for tests to load it without actual assets + pub fn with_empty() -> Self { + Self { + tool_stats: hashbrown::HashMap::default(), + armor_stats: hashbrown::HashMap::default(), + } + } +} + +// This could be a Compound that also loads the keys, but the RecipeBook +// Compound impl already does that, so checking for existence here is redundant. +impl Asset for MaterialStatManifest { + type Loader = assets::RonLoader; + + const EXTENSION: &'static str = "ron"; +} + #[derive(Clone, Debug, Serialize, Deserialize)] pub enum ModularBase { Tool, @@ -241,7 +276,7 @@ impl ModularComponent { .filter_map(|comp| { comp.item_definition_id() .itemdef_id() - .and_then(|id| msm.0.get(id)) + .and_then(|id| msm.tool_stats.get(id)) .copied() .zip(Some(1)) }) diff --git a/common/src/comp/inventory/item/tool.rs b/common/src/comp/inventory/item/tool.rs index 663b74aa01..ed61131771 100644 --- a/common/src/comp/inventory/item/tool.rs +++ b/common/src/comp/inventory/item/tool.rs @@ -225,21 +225,6 @@ impl DivAssign for Stats { fn div_assign(&mut self, scalar: usize) { *self = *self / (scalar as f32); } } -#[derive(Clone, Debug, Serialize, Deserialize)] -pub struct MaterialStatManifest(pub HashMap); - -impl MaterialStatManifest { - pub fn load() -> AssetHandle { Self::load_expect("common.material_stats_manifest") } -} - -// This could be a Compound that also loads the keys, but the RecipeBook -// Compound impl already does that, so checking for existence here is redundant. -impl Asset for MaterialStatManifest { - type Loader = assets::RonLoader; - - const EXTENSION: &'static str = "ron"; -} - #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Tool { pub kind: ToolKind, @@ -373,10 +358,7 @@ impl Asset for AbilityMap { } impl assets::Compound for AbilityMap { - fn load( - cache: &assets::AssetCache, - specifier: &str, - ) -> Result { + fn load(cache: assets::AnyCache, specifier: &str) -> Result { let manifest = cache.load::>(specifier)?.read(); Ok(AbilityMap( diff --git a/common/src/comp/inventory/loadout.rs b/common/src/comp/inventory/loadout.rs index 7b3dfb1aab..dd2eee1bc8 100644 --- a/common/src/comp/inventory/loadout.rs +++ b/common/src/comp/inventory/loadout.rs @@ -408,7 +408,7 @@ impl Loadout { pub fn persistence_update_all_item_states( &mut self, ability_map: &item::tool::AbilityMap, - msm: &item::tool::MaterialStatManifest, + msm: &item::MaterialStatManifest, ) { self.slots.iter_mut().for_each(|slot| { if let Some(item) = &mut slot.slot { diff --git a/common/src/comp/inventory/mod.rs b/common/src/comp/inventory/mod.rs index 616f25e5c9..3dd3177521 100644 --- a/common/src/comp/inventory/mod.rs +++ b/common/src/comp/inventory/mod.rs @@ -8,11 +8,13 @@ use vek::Vec3; use crate::{ comp::{ + body::Body, inventory::{ item::{tool::AbilityMap, ItemDef, ItemKind, MaterialStatManifest, TagExampleInfo}, loadout::Loadout, slot::{EquipSlot, Slot, SlotError}, }, + loot_owner::LootOwnerKind, slot::{InvSlotId, SlotId}, Item, }, @@ -80,9 +82,19 @@ impl InventorySortOrder { /// that contains items etc) must first ensure items are unloaded from the item. /// This is handled in `inventory\slot.rs` impl Inventory { - pub fn new_empty() -> Inventory { Self::new_with_loadout(LoadoutBuilder::empty().build()) } + pub fn with_empty() -> Inventory { + Self::with_loadout_humanoid(LoadoutBuilder::empty().build()) + } - pub fn new_with_loadout(loadout: Loadout) -> Inventory { + pub fn with_loadout(loadout: Loadout, body: Body) -> Inventory { + if let Body::Humanoid(_) = body { + Self::with_loadout_humanoid(loadout) + } else { + Self::with_loadout_animal(loadout) + } + } + + pub fn with_loadout_humanoid(loadout: Loadout) -> Inventory { Inventory { next_sort_order: InventorySortOrder::Name, loadout, @@ -90,6 +102,14 @@ impl Inventory { } } + pub fn with_loadout_animal(loadout: Loadout) -> Inventory { + Inventory { + next_sort_order: InventorySortOrder::Name, + loadout, + slots: vec![None; 1], + } + } + /// Total number of slots in in the inventory. pub fn capacity(&self) -> usize { self.slots().count() } @@ -789,7 +809,7 @@ impl Inventory { pub fn persistence_update_all_item_states( &mut self, ability_map: &item::tool::AbilityMap, - msm: &item::tool::MaterialStatManifest, + msm: &item::MaterialStatManifest, ) { self.slots_mut().for_each(|slot| { if let Some(item) = slot { @@ -803,6 +823,15 @@ impl Component for Inventory { type Storage = DerefFlaggedStorage>; } +#[derive(Copy, Clone, Debug, Serialize, Deserialize)] +pub enum CollectFailedReason { + InventoryFull, + LootOwned { + owner: LootOwnerKind, + expiry_secs: u64, + }, +} + #[derive(Clone, Debug, Serialize, Deserialize)] pub enum InventoryUpdateEvent { Init, @@ -813,8 +842,14 @@ pub enum InventoryUpdateEvent { Swapped, Dropped, Collected(Item), - BlockCollectFailed(Vec3), - EntityCollectFailed(Uid), + BlockCollectFailed { + pos: Vec3, + reason: CollectFailedReason, + }, + EntityCollectFailed { + entity: Uid, + reason: CollectFailedReason, + }, Possession, Debug, Craft, diff --git a/common/src/comp/inventory/test.rs b/common/src/comp/inventory/test.rs index e65d9748ec..c7d7e65b1e 100644 --- a/common/src/comp/inventory/test.rs +++ b/common/src/comp/inventory/test.rs @@ -124,7 +124,7 @@ fn push_all_unique_empty() { fn free_slots_minus_equipped_item_items_only_present_in_equipped_bag_slots() { let msm = &MaterialStatManifest::load().read(); let ability_map = &AbilityMap::load().read(); - let mut inv = Inventory::new_empty(); + let mut inv = Inventory::with_empty(); let bag = get_test_bag(18); let bag1_slot = EquipSlot::Armor(ArmorSlot::Bag1); @@ -144,7 +144,7 @@ fn free_slots_minus_equipped_item_items_only_present_in_equipped_bag_slots() { fn free_slots_minus_equipped_item() { let msm = &MaterialStatManifest::load().read(); let ability_map = &AbilityMap::load().read(); - let mut inv = Inventory::new_empty(); + let mut inv = Inventory::with_empty(); let bag = get_test_bag(18); let bag1_slot = EquipSlot::Armor(ArmorSlot::Bag1); @@ -166,7 +166,7 @@ fn free_slots_minus_equipped_item() { #[test] fn get_slot_range_for_equip_slot() { - let mut inv = Inventory::new_empty(); + let mut inv = Inventory::with_empty(); let bag = get_test_bag(18); let bag1_slot = EquipSlot::Armor(ArmorSlot::Bag1); inv.loadout.swap(bag1_slot, Some(bag)); @@ -196,7 +196,7 @@ fn can_swap_equipped_bag_into_empty_inv_slot( inv_slot_id: InvSlotId, expected_result: bool, ) { - let mut inv = Inventory::new_empty(); + let mut inv = Inventory::with_empty(); inv.replace_loadout_item(EquipSlot::Armor(ArmorSlot::Bag1), Some(get_test_bag(18))); @@ -209,7 +209,7 @@ fn can_swap_equipped_bag_into_empty_inv_slot( #[test] fn can_swap_equipped_bag_into_only_empty_slot_provided_by_itself_should_return_true() { - let mut inv = Inventory::new_empty(); + let mut inv = Inventory::with_empty(); inv.replace_loadout_item(EquipSlot::Armor(ArmorSlot::Bag1), Some(get_test_bag(18))); @@ -224,7 +224,7 @@ fn can_swap_equipped_bag_into_only_empty_slot_provided_by_itself_should_return_t fn unequip_items_both_hands() { let msm = &MaterialStatManifest::load().read(); let ability_map = &AbilityMap::load().read(); - let mut inv = Inventory::new_empty(); + let mut inv = Inventory::with_empty(); let sword = Item::new_from_asset_expect("common.items.weapons.sword.starter"); @@ -267,7 +267,7 @@ fn equip_replace_already_equipped_item() { "common.items.armor.misc.foot.sandals", )); - let mut inv = Inventory::new_empty(); + let mut inv = Inventory::with_empty(); inv.push(boots.duplicate(ability_map, msm)).unwrap(); inv.replace_loadout_item( EquipSlot::Armor(ArmorSlot::Feet), @@ -294,7 +294,7 @@ fn equip_replace_already_equipped_item() { /// after equipping it (because the equipped bag is larger) #[test] fn equip_equipping_smaller_bag_from_last_slot_of_big_bag() { - let mut inv = Inventory::new_empty(); + let mut inv = Inventory::with_empty(); const LARGE_BAG_ID: &str = "common.items.testing.test_bag_18_slot"; let small_bag = get_test_bag(9); @@ -322,7 +322,7 @@ fn equip_equipping_smaller_bag_from_last_slot_of_big_bag() { #[test] fn unequip_unequipping_bag_into_its_own_slot_with_no_other_free_slots_returns_one_item() { - let mut inv = Inventory::new_empty(); + let mut inv = Inventory::with_empty(); let bag = get_test_bag(9); assert!( @@ -350,7 +350,7 @@ fn unequip_unequipping_bag_into_its_own_slot_with_no_other_free_slots_returns_on fn equip_one_bag_equipped_equip_second_bag() { let msm = &MaterialStatManifest::load().read(); let ability_map = &AbilityMap::load().read(); - let mut inv = Inventory::new_empty(); + let mut inv = Inventory::with_empty(); let bag = get_test_bag(9); assert!( @@ -371,7 +371,7 @@ fn equip_one_bag_equipped_equip_second_bag() { #[test] fn free_after_swap_equipped_item_has_more_slots() { - let mut inv = Inventory::new_empty(); + let mut inv = Inventory::with_empty(); let bag = get_test_bag(18); assert!( @@ -394,7 +394,7 @@ fn free_after_swap_equipped_item_has_more_slots() { #[test] fn free_after_swap_equipped_item_has_less_slots() { - let mut inv = Inventory::new_empty(); + let mut inv = Inventory::with_empty(); let bag = get_test_bag(9); assert!( @@ -417,7 +417,7 @@ fn free_after_swap_equipped_item_has_less_slots() { #[test] fn free_after_swap_equipped_item_with_slots_swapped_with_empty_inv_slot() { - let mut inv = Inventory::new_empty(); + let mut inv = Inventory::with_empty(); let bag = get_test_bag(9); assert!( @@ -437,7 +437,7 @@ fn free_after_swap_equipped_item_with_slots_swapped_with_empty_inv_slot() { #[test] fn free_after_swap_inv_item_with_slots_swapped_with_empty_equip_slot() { - let mut inv = Inventory::new_empty(); + let mut inv = Inventory::with_empty(); inv.push(get_test_bag(9)).unwrap(); @@ -452,7 +452,7 @@ fn free_after_swap_inv_item_with_slots_swapped_with_empty_equip_slot() { #[test] fn free_after_swap_inv_item_without_slots_swapped_with_empty_equip_slot() { - let mut inv = Inventory::new_empty(); + let mut inv = Inventory::with_empty(); let boots = Item::new_from_asset_expect("common.items.testing.test_boots"); inv.push(boots).unwrap(); @@ -471,7 +471,7 @@ fn free_after_swap_inv_item_without_slots_swapped_with_empty_equip_slot() { // provide slots. #[test] fn backpack_crash() { - let mut inv = Inventory::new_empty(); + let mut inv = Inventory::with_empty(); let backpack = Item::new_from_asset_expect("common.items.armor.misc.back.backpack"); inv.loadout diff --git a/common/src/comp/inventory/trade_pricing.rs b/common/src/comp/inventory/trade_pricing.rs index 8ed04bf9f3..e1f73c0ce6 100644 --- a/common/src/comp/inventory/trade_pricing.rs +++ b/common/src/comp/inventory/trade_pricing.rs @@ -299,10 +299,7 @@ impl EqualitySet { } impl assets::Compound for EqualitySet { - fn load( - cache: &assets::AssetCache, - id: &str, - ) -> Result { + fn load(cache: assets::AnyCache, id: &str) -> Result { #[derive(Debug, Deserialize)] enum EqualitySpec { LootTable(String), @@ -689,14 +686,16 @@ impl TradePricing { #[cfg(test)] fn print_sorted(&self) { - use crate::comp::item::{armor, ItemKind}; + use crate::comp::item::{armor, ItemKind, MaterialStatManifest}; println!("Item, ForSale, Amount, Good, Quality, Deal, Unit,"); fn more_information(i: &Item, p: f32) -> (String, &'static str) { + let msm = &MaterialStatManifest::load().read(); + if let ItemKind::Armor(a) = &*i.kind() { ( - match a.protection() { + match a.stats(msm).protection { Some(armor::Protection::Invincible) => "Invincible".into(), Some(armor::Protection::Normal(x)) => format!("{:.4}", x * p), None => "0.0".into(), diff --git a/common/src/comp/loot_owner.rs b/common/src/comp/loot_owner.rs new file mode 100644 index 0000000000..7240b5e5f8 --- /dev/null +++ b/common/src/comp/loot_owner.rs @@ -0,0 +1,82 @@ +use crate::{ + comp::{Alignment, Body, Group, Player}, + uid::Uid, +}; +use serde::{Deserialize, Serialize}; +use specs::{Component, DerefFlaggedStorage}; +use specs_idvs::IdvStorage; +use std::{ + ops::Add, + time::{Duration, Instant}, +}; + +#[derive(Copy, Clone, Debug, Serialize, Deserialize)] +pub struct LootOwner { + // TODO: Fix this if expiry is needed client-side, Instant is not serializable + #[serde(skip, default = "Instant::now")] + expiry: Instant, + owner: LootOwnerKind, +} + +// Loot becomes free-for-all after the initial ownership period +const OWNERSHIP_SECS: u64 = 45; + +impl LootOwner { + pub fn new(kind: LootOwnerKind) -> Self { + Self { + expiry: Instant::now().add(Duration::from_secs(OWNERSHIP_SECS)), + owner: kind, + } + } + + pub fn uid(&self) -> Option { + match &self.owner { + LootOwnerKind::Player(uid) => Some(*uid), + LootOwnerKind::Group(_) => None, + } + } + + pub fn owner(&self) -> LootOwnerKind { self.owner } + + pub fn time_until_expiration(&self) -> Duration { self.expiry - Instant::now() } + + pub fn expired(&self) -> bool { self.expiry <= Instant::now() } + + pub fn default_instant() -> Instant { Instant::now() } + + pub fn can_pickup( + &self, + uid: Uid, + group: Option<&Group>, + alignment: Option<&Alignment>, + body: Option<&Body>, + player: Option<&Player>, + ) -> bool { + let is_owned = matches!(alignment, Some(Alignment::Owned(_))); + let is_player = player.is_some(); + let is_pet = is_owned && !is_player; + + let owns_loot = match self.owner { + LootOwnerKind::Player(loot_uid) => loot_uid.0 == uid.0, + LootOwnerKind::Group(loot_group) => { + matches!(group, Some(group) if loot_group == *group) + }, + }; + let is_humanoid = matches!(body, Some(Body::Humanoid(_))); + + // Pet's can't pick up owned loot + // Humanoids must own the loot + // Non-humanoids ignore loot ownership + !is_pet && (owns_loot || !is_humanoid) + } +} + +impl Component for LootOwner { + type Storage = DerefFlaggedStorage>; +} + +#[derive(Debug, Copy, Clone, Serialize, Deserialize)] +pub enum LootOwnerKind { + Player(Uid), + Group(Group), +} diff --git a/common/src/comp/melee.rs b/common/src/comp/melee.rs index d59cb0e713..6fd5acdb01 100644 --- a/common/src/comp/melee.rs +++ b/common/src/comp/melee.rs @@ -57,7 +57,7 @@ impl MeleeConstructor { scaling the melee attack." ) } - + let instance = rand::random(); let attack = match self.kind { Slash { damage, @@ -80,6 +80,7 @@ impl MeleeConstructor { value: damage, }, Some(GroupTarget::OutOfGroup), + instance, ) .with_effect(buff); @@ -128,6 +129,7 @@ impl MeleeConstructor { value: damage, }, Some(GroupTarget::OutOfGroup), + instance, ) .with_effect(buff); @@ -170,6 +172,7 @@ impl MeleeConstructor { value: damage, }, Some(GroupTarget::OutOfGroup), + instance, ); if let Some(damage_effect) = self.damage_effect { @@ -210,6 +213,7 @@ impl MeleeConstructor { value: damage, }, None, + instance, ) .with_effect(lifesteal); @@ -244,6 +248,7 @@ impl MeleeConstructor { value: damage, }, Some(GroupTarget::OutOfGroup), + instance, ); if let Some(damage_effect) = self.damage_effect { diff --git a/common/src/comp/mod.rs b/common/src/comp/mod.rs index ba7d19c833..4da189e746 100644 --- a/common/src/comp/mod.rs +++ b/common/src/comp/mod.rs @@ -29,6 +29,7 @@ pub mod inventory; pub mod invite; #[cfg(not(target_arch = "wasm32"))] mod last; #[cfg(not(target_arch = "wasm32"))] mod location; +pub mod loot_owner; #[cfg(not(target_arch = "wasm32"))] pub mod melee; #[cfg(not(target_arch = "wasm32"))] mod misc; #[cfg(not(target_arch = "wasm32"))] pub mod ori; @@ -87,10 +88,11 @@ pub use self::{ tool::{self, AbilityItem}, Item, ItemConfig, ItemDrop, }, - slot, Inventory, InventoryUpdate, InventoryUpdateEvent, + slot, CollectFailedReason, Inventory, InventoryUpdate, InventoryUpdateEvent, }, last::Last, location::{MapMarker, MapMarkerChange, MapMarkerUpdate, Waypoint, WaypointArea}, + loot_owner::LootOwner, melee::{Melee, MeleeConstructor}, misc::Object, ori::Ori, diff --git a/common/src/comp/pet.rs b/common/src/comp/pet.rs index 78187c59cb..8f56628911 100644 --- a/common/src/comp/pet.rs +++ b/common/src/comp/pet.rs @@ -1,4 +1,4 @@ -use crate::comp::body::Body; +use crate::comp::{body::Body, phys::Mass, quadruped_low, quadruped_medium, quadruped_small}; use crossbeam_utils::atomic::AtomicCell; use serde::{Deserialize, Serialize}; use specs::Component; @@ -40,10 +40,62 @@ pub fn is_tameable(body: &Body) -> bool { // Currently only Quadruped animals can be tamed pending further work // on the pets feature (allowing larger animals to be tamed will // require balance issues to be addressed). - matches!( - body, - Body::QuadrupedLow(_) | Body::QuadrupedMedium(_) | Body::QuadrupedSmall(_) - ) + match body { + Body::QuadrupedMedium(quad_med) => + // NOTE: the reason we ban mammoth from being tameable even though they're + // agressive anyway, is that UncomfySilence is going to make them + // peaceful after this MR gets merged. Please, remove this note in your MR, + // UncomfySilence! + { + !matches!( + quad_med.species, + quadruped_medium::Species::Catoblepas + | quadruped_medium::Species::Mammoth + | quadruped_medium::Species::Hirdrasil + ) + }, + Body::QuadrupedLow(_) | Body::QuadrupedSmall(_) | Body::BirdMedium(_) => true, + _ => false, + } +} + +pub fn is_mountable(mount: &Body, rider: Option<&Body>) -> bool { + let is_light_enough = + |rider: Option<&Body>| -> bool { rider.map_or(false, |b| b.mass() <= Mass(500.0)) }; + + match mount { + Body::QuadrupedMedium(body) => match body.species { + quadruped_medium::Species::Alpaca + | quadruped_medium::Species::Antelope + | quadruped_medium::Species::Bear + | quadruped_medium::Species::Camel + | quadruped_medium::Species::Cattle + | quadruped_medium::Species::Deer + | quadruped_medium::Species::Donkey + | quadruped_medium::Species::Highland + | quadruped_medium::Species::Horse + | quadruped_medium::Species::Kelpie + | quadruped_medium::Species::Llama + | quadruped_medium::Species::Moose + | quadruped_medium::Species::Tuskram + | quadruped_medium::Species::Yak + | quadruped_medium::Species::Zebra => true, + quadruped_medium::Species::Mouflon => is_light_enough(rider), + _ => false, + }, + Body::QuadrupedSmall(body) => match body.species { + quadruped_small::Species::Truffler => true, + quadruped_small::Species::Boar | quadruped_small::Species::Holladon => { + is_light_enough(rider) + }, + _ => false, + }, + Body::QuadrupedLow(body) => matches!( + body.species, + quadruped_low::Species::Salamander | quadruped_low::Species::Tortoise + ), + _ => false, + } } impl Component for Pet { diff --git a/common/src/comp/phys.rs b/common/src/comp/phys.rs index e352326a76..d020d8e089 100644 --- a/common/src/comp/phys.rs +++ b/common/src/comp/phys.rs @@ -1,6 +1,9 @@ use super::{Fluid, Ori}; use crate::{ - comp::body::ship::figuredata::VoxelCollider, consts::WATER_DENSITY, terrain::Block, uid::Uid, + comp::{body::ship::figuredata::VoxelCollider, inventory::item::armor::Friction}, + consts::WATER_DENSITY, + terrain::Block, + uid::Uid, }; use hashbrown::HashSet; use serde::{Deserialize, Serialize}; @@ -81,7 +84,7 @@ impl Component for Scale { } // Mass -#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize)] +#[derive(Copy, Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] pub struct Mass(pub f32); impl Default for Mass { @@ -182,6 +185,9 @@ pub struct PhysicsState { pub touch_entities: HashSet, pub in_fluid: Option, pub ground_vel: Vec3, + pub footwear: Friction, + pub skating_last_height: f32, + pub skating_active: bool, } impl PhysicsState { diff --git a/common/src/comp/poise.rs b/common/src/comp/poise.rs index dcc20e7416..fa36a0e452 100644 --- a/common/src/comp/poise.rs +++ b/common/src/comp/poise.rs @@ -2,7 +2,7 @@ use crate::{ combat::{DamageContributor, DamageSource}, comp::{ self, - inventory::item::{armor::Protection, ItemKind}, + inventory::item::{armor::Protection, ItemKind, MaterialStatManifest}, CharacterState, Inventory, }, resources::Time, @@ -226,12 +226,15 @@ impl Poise { } /// Returns the total poise damage reduction provided by all equipped items - pub fn compute_poise_damage_reduction(inventory: &Inventory) -> f32 { + pub fn compute_poise_damage_reduction( + inventory: &Inventory, + msm: &MaterialStatManifest, + ) -> f32 { let protection = inventory .equipped_items() .filter_map(|item| { if let ItemKind::Armor(armor) = &*item.kind() { - armor.poise_resilience() + armor.stats(msm).poise_resilience } else { None } @@ -249,9 +252,13 @@ impl Poise { /// Modifies a poise change when optionally given an inventory to aid in /// calculation of poise damage reduction - pub fn apply_poise_reduction(value: f32, inventory: Option<&Inventory>) -> f32 { + pub fn apply_poise_reduction( + value: f32, + inventory: Option<&Inventory>, + msm: &MaterialStatManifest, + ) -> f32 { inventory.map_or(value, |inv| { - value * (1.0 - Poise::compute_poise_damage_reduction(inv)) + value * (1.0 - Poise::compute_poise_damage_reduction(inv, msm)) }) } } diff --git a/common/src/comp/projectile.rs b/common/src/comp/projectile.rs index 1d8354e18c..b424415841 100644 --- a/common/src/comp/projectile.rs +++ b/common/src/comp/projectile.rs @@ -99,6 +99,7 @@ impl ProjectileConstructor { crit_mult: f32, buff_strength: f32, ) -> Projectile { + let instance = rand::random(); use ProjectileConstructor::*; match self { Arrow { @@ -129,6 +130,7 @@ impl ProjectileConstructor { value: damage, }, Some(GroupTarget::OutOfGroup), + instance, ) .with_effect(buff); let attack = Attack::default() @@ -169,6 +171,7 @@ impl ProjectileConstructor { value: damage, }, Some(GroupTarget::OutOfGroup), + instance, ) .with_effect(buff); let attack = Attack::default() @@ -207,6 +210,7 @@ impl ProjectileConstructor { value: damage, }, Some(GroupTarget::OutOfGroup), + instance, ); let attack = Attack::default() .with_damage(damage) @@ -250,6 +254,7 @@ impl ProjectileConstructor { value: damage, }, Some(GroupTarget::OutOfGroup), + instance, ); let attack = Attack::default() .with_damage(damage) @@ -286,6 +291,7 @@ impl ProjectileConstructor { value: damage, }, Some(GroupTarget::OutOfGroup), + instance, ); let attack = Attack::default() .with_damage(damage) @@ -337,6 +343,7 @@ impl ProjectileConstructor { value: damage, }, Some(GroupTarget::OutOfGroup), + instance, ); let attack = Attack::default() .with_damage(damage) @@ -373,6 +380,7 @@ impl ProjectileConstructor { value: damage, }, Some(GroupTarget::OutOfGroup), + instance, ); let attack = Attack::default() .with_damage(damage) @@ -424,6 +432,7 @@ impl ProjectileConstructor { value: damage, }, Some(GroupTarget::OutOfGroup), + instance, ); let attack = Attack::default() .with_damage(damage) diff --git a/common/src/depot.rs b/common/src/depot.rs index eed8bcf61c..c28f2d2254 100644 --- a/common/src/depot.rs +++ b/common/src/depot.rs @@ -160,6 +160,7 @@ impl Depot { entry.item = Some(item); assert!(entry.gen < u32::MAX); entry.gen += 1; + self.len += 1; Id { idx: idx as u32, gen: entry.gen, diff --git a/common/src/event.rs b/common/src/event.rs index ee2ed4adbc..274a5f8853 100644 --- a/common/src/event.rs +++ b/common/src/event.rs @@ -36,6 +36,9 @@ pub enum LocalEvent { } #[allow(clippy::large_enum_variant)] // TODO: Pending review in #587 +#[derive(strum::EnumDiscriminants)] +#[strum_discriminants(repr(usize))] +#[strum_discriminants(derive(strum::EnumVariantNames))] pub enum ServerEvent { Explosion { pos: Vec3, diff --git a/common/src/lib.rs b/common/src/lib.rs index c022a4bb7e..857fa2a1ce 100644 --- a/common/src/lib.rs +++ b/common/src/lib.rs @@ -90,6 +90,8 @@ pub mod uid; #[cfg(not(target_arch = "wasm32"))] pub mod vol; #[cfg(not(target_arch = "wasm32"))] pub mod volumes; +#[cfg(not(target_arch = "wasm32"))] +pub mod weather; #[cfg(not(target_arch = "wasm32"))] pub use cached_spatial_grid::CachedSpatialGrid; diff --git a/common/src/mounting.rs b/common/src/mounting.rs index bfc0c6b185..96b586cf69 100644 --- a/common/src/mounting.rs +++ b/common/src/mounting.rs @@ -1,5 +1,6 @@ use crate::{ comp, + comp::{pet::is_mountable, Body}, link::{Is, Link, LinkHandle, Role}, terrain::TerrainGrid, uid::{Uid, UidAllocator}, @@ -38,6 +39,7 @@ impl Link for Mounting { Read<'a, UidAllocator>, WriteStorage<'a, Is>, WriteStorage<'a, Is>, + WriteStorage<'a, Body>, ); type DeleteData<'a> = ( Read<'a, UidAllocator>, @@ -58,7 +60,7 @@ impl Link for Mounting { fn create( this: &LinkHandle, - (uid_allocator, mut is_mounts, mut is_riders): Self::CreateData<'_>, + (uid_allocator, mut is_mounts, mut is_riders, body): Self::CreateData<'_>, ) -> Result<(), Self::Error> { let entity = |uid: Uid| uid_allocator.retrieve_entity_internal(uid.into()); @@ -66,15 +68,23 @@ impl Link for Mounting { // Forbid self-mounting Err(MountingError::NotMountable) } else if let Some((mount, rider)) = entity(this.mount).zip(entity(this.rider)) { - let can_mount_with = - |entity| is_mounts.get(entity).is_none() && is_riders.get(entity).is_none(); + if let Some(mount_body) = body.get(mount) { + if is_mountable(mount_body, body.get(rider)) { + let can_mount_with = + |entity| is_mounts.get(entity).is_none() && is_riders.get(entity).is_none(); - // Ensure that neither mount or rider are already part of a mounting - // relationship - if can_mount_with(mount) && can_mount_with(rider) { - let _ = is_mounts.insert(mount, this.make_role()); - let _ = is_riders.insert(rider, this.make_role()); - Ok(()) + // Ensure that neither mount or rider are already part of a mounting + // relationship + if can_mount_with(mount) && can_mount_with(rider) { + let _ = is_mounts.insert(mount, this.make_role()); + let _ = is_riders.insert(rider, this.make_role()); + Ok(()) + } else { + Err(MountingError::NotMountable) + } + } else { + Err(MountingError::NotMountable) + } } else { Err(MountingError::NotMountable) } diff --git a/common/src/outcome.rs b/common/src/outcome.rs index f702c80905..69ef8fb3da 100644 --- a/common/src/outcome.rs +++ b/common/src/outcome.rs @@ -1,9 +1,18 @@ -use crate::{comp, uid::Uid}; +use crate::{combat::DamageContributor, comp, uid::Uid}; use comp::{beam, item::Reagent, poise::PoiseState, skillset::SkillGroupKind, UtteranceKind}; use hashbrown::HashSet; use serde::{Deserialize, Serialize}; use vek::*; +#[derive(Debug, Clone, Copy, Serialize, Deserialize)] +pub struct HealthChangeInfo { + pub amount: f32, + pub crit: bool, + pub target: Uid, + pub by: Option, + pub instance: u64, +} + /// An outcome represents the final result of an instantaneous event. It implies /// that said event has already occurred. It is not a request for that event to /// occur, nor is it something that may be cancelled or otherwise altered. Its @@ -43,8 +52,6 @@ pub enum Outcome { uid: Uid, skill_tree: comp::skillset::SkillGroupKind, total_points: u16, - // TODO: Access ECS to get position from Uid to conserve bandwidth - pos: Vec3, }, ComboChange { uid: Uid, @@ -58,8 +65,9 @@ pub enum Outcome { pos: Vec3, body: comp::Body, }, - Damage { + HealthChange { pos: Vec3, + info: HealthChangeInfo, }, Death { pos: Vec3, @@ -94,9 +102,8 @@ impl Outcome { | Outcome::ProjectileShot { pos, .. } | Outcome::ProjectileHit { pos, .. } | Outcome::Beam { pos, .. } - | Outcome::SkillPointGain { pos, .. } | Outcome::SummonedCreature { pos, .. } - | Outcome::Damage { pos, .. } + | Outcome::HealthChange { pos, .. } | Outcome::Death { pos, .. } | Outcome::Block { pos, .. } | Outcome::PoiseChange { pos, .. } @@ -104,7 +111,9 @@ impl Outcome { | Outcome::Utterance { pos, .. } | Outcome::Glider { pos, .. } => Some(*pos), Outcome::BreakBlock { pos, .. } => Some(pos.map(|e| e as f32 + 0.5)), - Outcome::ExpChange { .. } | Outcome::ComboChange { .. } => None, + Outcome::ExpChange { .. } + | Outcome::ComboChange { .. } + | Outcome::SkillPointGain { .. } => None, } } } diff --git a/common/src/recipe.rs b/common/src/recipe.rs index f2feffa84e..6f2da5a81d 100644 --- a/common/src/recipe.rs +++ b/common/src/recipe.rs @@ -420,10 +420,7 @@ impl assets::Asset for ItemList { } impl assets::Compound for RecipeBook { - fn load( - cache: &assets::AssetCache, - specifier: &str, - ) -> Result { + fn load(cache: assets::AnyCache, specifier: &str) -> Result { #[inline] fn load_item_def(spec: &(String, u32)) -> Result<(Arc, u32), assets::Error> { let def = Arc::::load_cloned(&spec.0)?; @@ -748,10 +745,7 @@ enum RawComponentOutput { } impl assets::Compound for ComponentRecipeBook { - fn load( - cache: &assets::AssetCache, - specifier: &str, - ) -> Result { + fn load(cache: assets::AnyCache, specifier: &str) -> Result { #[inline] fn create_recipe_key(raw_recipe: &RawComponentRecipe) -> ComponentKey { match &raw_recipe.output { diff --git a/common/src/slowjob.rs b/common/src/slowjob.rs index a1f613b21e..414d4888f8 100644 --- a/common/src/slowjob.rs +++ b/common/src/slowjob.rs @@ -98,7 +98,7 @@ impl Queue { id, name: name.to_owned(), task: Box::new(move || { - common_base::prof_span!(_guard, &name_cloned); + common_base::prof_span_alloc!(_guard, &name_cloned); let execution_start = Instant::now(); f(); let execution_end = Instant::now(); diff --git a/common/src/states/basic_beam.rs b/common/src/states/basic_beam.rs index 620f77f062..9e10dd3254 100644 --- a/common/src/states/basic_beam.rs +++ b/common/src/states/basic_beam.rs @@ -116,6 +116,7 @@ impl CharacterBehavior for Data { value: self.static_data.damage, }, Some(GroupTarget::OutOfGroup), + rand::random(), ); if let Some(effect) = self.static_data.damage_effect { damage = damage.with_effect(effect); diff --git a/common/src/states/basic_summon.rs b/common/src/states/basic_summon.rs index 317e4b183f..ba77b32bd7 100644 --- a/common/src/states/basic_summon.rs +++ b/common/src/states/basic_summon.rs @@ -179,7 +179,7 @@ impl CharacterBehavior for Data { skill_set, health, poise: comp::Poise::new(body), - inventory: comp::Inventory::new_with_loadout(loadout), + inventory: comp::Inventory::with_loadout(loadout, body), body, agent: Some( comp::Agent::from_body(&body) diff --git a/common/src/states/climb.rs b/common/src/states/climb.rs index 0f4bbbb4c4..68c2dd0be0 100644 --- a/common/src/states/climb.rs +++ b/common/src/states/climb.rs @@ -79,7 +79,7 @@ impl CharacterBehavior for Data { CLIMB_BOOST_JUMP_FACTOR * impulse / data.mass.0, )); }; - update.character = CharacterState::Idle(idle::Data { is_sneaking: false }); + update.character = CharacterState::Idle(idle::Data::default()); return update; }; // Move player @@ -103,7 +103,7 @@ impl CharacterBehavior for Data { .try_change_by(-energy_use * data.dt.0) .is_err() { - update.character = CharacterState::Idle(idle::Data { is_sneaking: false }); + update.character = CharacterState::Idle(idle::Data::default()); } // Set orientation direction based on wall direction diff --git a/common/src/states/combo_melee.rs b/common/src/states/combo_melee.rs index 21d8afb667..ee6560fe24 100644 --- a/common/src/states/combo_melee.rs +++ b/common/src/states/combo_melee.rs @@ -264,6 +264,7 @@ impl CharacterBehavior for Data { value: damage as f32, }, Some(GroupTarget::OutOfGroup), + rand::random(), ); if let Some(effect) = self.static_data.stage_data[stage_index].damage_effect { damage = damage.with_effect(effect); diff --git a/common/src/states/dance.rs b/common/src/states/dance.rs index 0dc8653c3c..171e04bb39 100644 --- a/common/src/states/dance.rs +++ b/common/src/states/dance.rs @@ -20,7 +20,7 @@ impl CharacterBehavior for Data { // Try to Fall/Stand up/Move if data.physics.on_ground.is_none() || data.inputs.move_dir.magnitude_squared() > 0.0 { - update.character = CharacterState::Idle(idle::Data { is_sneaking: false }); + update.character = CharacterState::Idle(idle::Data::default()); } update @@ -52,7 +52,7 @@ impl CharacterBehavior for Data { fn stand(&self, data: &JoinData, _: &mut OutputEvents) -> StateUpdate { let mut update = StateUpdate::from(data); // Try to Fall/Stand up/Move - update.character = CharacterState::Idle(idle::Data { is_sneaking: false }); + update.character = CharacterState::Idle(idle::Data::default()); update } } diff --git a/common/src/states/glide.rs b/common/src/states/glide.rs index 35ecfd3ffd..81f437a198 100644 --- a/common/src/states/glide.rs +++ b/common/src/states/glide.rs @@ -89,7 +89,7 @@ impl CharacterBehavior for Data { .and_then(|inv| inv.equipped(EquipSlot::Glider)) .is_none() { - update.character = CharacterState::Idle(idle::Data { is_sneaking: false }); + update.character = CharacterState::Idle(idle::Data::default()); } else if !handle_climb(data, &mut update) { let air_flow = data .physics @@ -207,7 +207,7 @@ impl CharacterBehavior for Data { pos: data.pos.0, wielded: false, })); - update.character = CharacterState::Idle(idle::Data { is_sneaking: false }); + update.character = CharacterState::Idle(idle::Data::default()); update } } diff --git a/common/src/states/glide_wield.rs b/common/src/states/glide_wield.rs index 50261ecae5..f0d0e0b361 100644 --- a/common/src/states/glide_wield.rs +++ b/common/src/states/glide_wield.rs @@ -74,7 +74,7 @@ impl CharacterBehavior for Data { ..*self }) } else { - CharacterState::Idle(idle::Data { is_sneaking: false }) + CharacterState::Idle(idle::Data::default()) }; } @@ -98,7 +98,7 @@ impl CharacterBehavior for Data { pos: data.pos.0, wielded: false, })); - update.character = CharacterState::Idle(idle::Data { is_sneaking: false }); + update.character = CharacterState::Idle(idle::Data::default()); update } diff --git a/common/src/states/idle.rs b/common/src/states/idle.rs index 207f544264..4d46446694 100644 --- a/common/src/states/idle.rs +++ b/common/src/states/idle.rs @@ -1,19 +1,25 @@ use super::utils::*; use crate::{ - comp::{character_state::OutputEvents, CharacterState, InventoryAction, StateUpdate}, + comp::{ + character_state::OutputEvents, inventory::item::armor::Friction, CharacterState, + InventoryAction, StateUpdate, + }, states::behavior::{CharacterBehavior, JoinData}, }; use serde::{Deserialize, Serialize}; -#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize)] +#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize, Default)] pub struct Data { pub is_sneaking: bool, + // None means unknown + pub(crate) footwear: Option, } impl CharacterBehavior for Data { fn behavior(&self, data: &JoinData, output_events: &mut OutputEvents) -> StateUpdate { let mut update = StateUpdate::from(data); + handle_skating(data, &mut update); handle_orientation(data, &mut update, 1.0, None); handle_move(data, &mut update, if self.is_sneaking { 0.4 } else { 1.0 }); handle_jump(data, output_events, &mut update, 1.0); @@ -26,7 +32,10 @@ impl CharacterBehavior for Data { if self.is_sneaking && (data.physics.on_ground.is_none() || data.physics.in_liquid().is_some()) { - update.character = CharacterState::Idle(Data { is_sneaking: false }); + update.character = CharacterState::Idle(Data { + is_sneaking: false, + footwear: self.footwear, + }); } update @@ -75,13 +84,16 @@ impl CharacterBehavior for Data { fn sneak(&self, data: &JoinData, _: &mut OutputEvents) -> StateUpdate { let mut update = StateUpdate::from(data); - update.character = CharacterState::Idle(Data { is_sneaking: true }); + update.character = CharacterState::Idle(Data { + is_sneaking: true, + footwear: self.footwear, + }); update } fn stand(&self, data: &JoinData, _: &mut OutputEvents) -> StateUpdate { let mut update = StateUpdate::from(data); - update.character = CharacterState::Idle(Data { is_sneaking: false }); + update.character = CharacterState::Idle(Data::default()); update } diff --git a/common/src/states/mod.rs b/common/src/states/mod.rs index 10ec478c17..50920d6b11 100644 --- a/common/src/states/mod.rs +++ b/common/src/states/mod.rs @@ -23,6 +23,7 @@ pub mod roll; pub mod self_buff; pub mod shockwave; pub mod sit; +pub mod skate; pub mod spin_melee; pub mod sprite_interact; pub mod sprite_summon; diff --git a/common/src/states/roll.rs b/common/src/states/roll.rs index dbd96c527f..1d44e1428c 100644 --- a/common/src/states/roll.rs +++ b/common/src/states/roll.rs @@ -142,6 +142,7 @@ impl CharacterBehavior for Data { } else { CharacterState::Idle(idle::Data { is_sneaking: self.is_sneaking, + footwear: None, }) } } @@ -151,6 +152,7 @@ impl CharacterBehavior for Data { // If it somehow ends up in an incorrect stage section update.character = CharacterState::Idle(idle::Data { is_sneaking: self.is_sneaking, + footwear: None, }); }, } diff --git a/common/src/states/shockwave.rs b/common/src/states/shockwave.rs index 3be0a48cec..2e63f05eb6 100644 --- a/common/src/states/shockwave.rs +++ b/common/src/states/shockwave.rs @@ -96,6 +96,7 @@ impl CharacterBehavior for Data { value: self.static_data.damage as f32, }, Some(GroupTarget::OutOfGroup), + rand::random(), ); if let Some(effect) = self.static_data.damage_effect { damage = damage.with_effect(effect); diff --git a/common/src/states/sit.rs b/common/src/states/sit.rs index a3f59648dd..3d19ae94f5 100644 --- a/common/src/states/sit.rs +++ b/common/src/states/sit.rs @@ -20,7 +20,7 @@ impl CharacterBehavior for Data { // Try to Fall/Stand up/Move if data.physics.on_ground.is_none() || data.inputs.move_dir.magnitude_squared() > 0.0 { - update.character = CharacterState::Idle(idle::Data { is_sneaking: false }); + update.character = CharacterState::Idle(idle::Data::default()); } update @@ -52,7 +52,7 @@ impl CharacterBehavior for Data { fn stand(&self, data: &JoinData, _: &mut OutputEvents) -> StateUpdate { let mut update = StateUpdate::from(data); // Try to Fall/Stand up/Move - update.character = CharacterState::Idle(idle::Data { is_sneaking: false }); + update.character = CharacterState::Idle(idle::Data::default()); update } } diff --git a/common/src/states/skate.rs b/common/src/states/skate.rs new file mode 100644 index 0000000000..c78e842de0 --- /dev/null +++ b/common/src/states/skate.rs @@ -0,0 +1,118 @@ +use super::utils::*; +use crate::{ + comp::{ + character_state::OutputEvents, item::armor::Friction, CharacterState, InventoryAction, + StateUpdate, + }, + states::{ + behavior::{CharacterBehavior, JoinData}, + idle, + }, +}; +use serde::{Deserialize, Serialize}; + +#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize)] +pub struct Data { + pub(crate) footwear: Friction, + // hints for animation + pub turn: f32, // negative to left, positive to right, 1.0=45° + pub accelerate: f32, // negative to brake + pub sidewalk: f32, // negative to left +} + +impl Data { + pub fn new(_: &JoinData, footwear: Friction) -> Self { + Self { + footwear, + turn: Default::default(), + accelerate: Default::default(), + sidewalk: Default::default(), + } + } +} + +impl CharacterBehavior for Data { + fn behavior(&self, data: &JoinData, output_events: &mut OutputEvents) -> StateUpdate { + let mut update = StateUpdate::from(data); + + handle_wield(data, &mut update); + handle_jump(data, output_events, &mut update, 1.0); + + if !data.physics.skating_active { + update.character = CharacterState::Idle(idle::Data { + is_sneaking: false, + footwear: Some(self.footwear), + }); + } else { + let plane_ori = data.inputs.look_dir.xy(); + let orthogonal = vek::Vec2::new(plane_ori.y, -plane_ori.x); + update.ori = vek::Vec3::new(plane_ori.x, plane_ori.y, 0.0).into(); + let current_planar_velocity = data.vel.0.xy().magnitude(); + let long_input = data.inputs.move_dir.dot(plane_ori); + let lat_input = data.inputs.move_dir.dot(orthogonal); + let acceleration = if long_input.abs() > lat_input.abs() { + if long_input > 0.0 { + if let CharacterState::Skate(data) = &mut update.character { + data.accelerate = 1.0; + data.sidewalk = 0.0; + } + // forward, max at 8u/s + (data.dt.0 * 3.0) + .min(8.0 - current_planar_velocity) + .max(0.0) + } else { + if let CharacterState::Skate(data) = &mut update.character { + data.accelerate = -1.0; + data.sidewalk = 0.0; + } + //brake up to 4u/s², but never backwards + (data.dt.0 * 4.0).min(current_planar_velocity) + } + } else { + if let CharacterState::Skate(data) = &mut update.character { + data.accelerate = 0.0; + data.sidewalk = lat_input; + } + // sideways: constant speed + (0.5 - current_planar_velocity).max(0.0) + }; + if let CharacterState::Skate(skate_data) = &mut update.character { + skate_data.turn = orthogonal.dot(data.vel.0.xy()); + } + let delta_vel = acceleration * data.inputs.move_dir; + update.vel.0 += vek::Vec3::new(delta_vel.x, delta_vel.y, 0.0); + } + + update + } + + fn manipulate_loadout( + &self, + data: &JoinData, + output_events: &mut OutputEvents, + inv_action: InventoryAction, + ) -> StateUpdate { + let mut update = StateUpdate::from(data); + handle_manipulate_loadout(data, output_events, &mut update, inv_action); + update + } + + fn wield(&self, data: &JoinData, _: &mut OutputEvents) -> StateUpdate { + let mut update = StateUpdate::from(data); + attempt_wield(data, &mut update); + update + } + + fn sit(&self, data: &JoinData, _: &mut OutputEvents) -> StateUpdate { + let mut update = StateUpdate::from(data); + attempt_sit(data, &mut update); + update + } + + fn stand(&self, data: &JoinData, _: &mut OutputEvents) -> StateUpdate { + let mut update = StateUpdate::from(data); + // Try to Fall/Stand up/Move + update.character = CharacterState::Idle(idle::Data::default()); + update + } +} diff --git a/common/src/states/sprite_interact.rs b/common/src/states/sprite_interact.rs index 68a556e8cd..8faa350d18 100644 --- a/common/src/states/sprite_interact.rs +++ b/common/src/states/sprite_interact.rs @@ -106,13 +106,14 @@ impl CharacterBehavior for Data { } else { CharacterState::Idle(idle::Data { is_sneaking: self.static_data.was_sneak, + footwear: None, }) } } }, _ => { // If it somehow ends up in an incorrect stage section - update.character = CharacterState::Idle(idle::Data { is_sneaking: false }); + update.character = CharacterState::Idle(idle::Data::default()); }, } diff --git a/common/src/states/stunned.rs b/common/src/states/stunned.rs index e899895145..0c694b71b3 100644 --- a/common/src/states/stunned.rs +++ b/common/src/states/stunned.rs @@ -72,7 +72,7 @@ impl CharacterBehavior for Data { update.character = CharacterState::Wielding(wielding::Data { is_sneaking: false }); } else { - update.character = CharacterState::Idle(idle::Data { is_sneaking: false }); + update.character = CharacterState::Idle(idle::Data::default()); } } }, @@ -82,7 +82,7 @@ impl CharacterBehavior for Data { update.character = CharacterState::Wielding(wielding::Data { is_sneaking: false }); } else { - update.character = CharacterState::Idle(idle::Data { is_sneaking: false }); + update.character = CharacterState::Idle(idle::Data::default()); } }, } diff --git a/common/src/states/talk.rs b/common/src/states/talk.rs index 25a43a1e6f..270166825c 100644 --- a/common/src/states/talk.rs +++ b/common/src/states/talk.rs @@ -42,14 +42,14 @@ impl CharacterBehavior for Data { fn sit(&self, data: &JoinData, _: &mut OutputEvents) -> StateUpdate { let mut update = StateUpdate::from(data); - update.character = CharacterState::Idle(idle::Data { is_sneaking: false }); + update.character = CharacterState::Idle(idle::Data::default()); attempt_sit(data, &mut update); update } fn dance(&self, data: &JoinData, _: &mut OutputEvents) -> StateUpdate { let mut update = StateUpdate::from(data); - update.character = CharacterState::Idle(idle::Data { is_sneaking: false }); + update.character = CharacterState::Idle(idle::Data::default()); attempt_dance(data, &mut update); update } @@ -57,7 +57,7 @@ impl CharacterBehavior for Data { fn stand(&self, data: &JoinData, _: &mut OutputEvents) -> StateUpdate { let mut update = StateUpdate::from(data); // Try to Fall/Stand up/Move - update.character = CharacterState::Idle(idle::Data { is_sneaking: false }); + update.character = CharacterState::Idle(idle::Data::default()); update } } diff --git a/common/src/states/use_item.rs b/common/src/states/use_item.rs index 6279bcebf6..5d6a2fac9c 100644 --- a/common/src/states/use_item.rs +++ b/common/src/states/use_item.rs @@ -132,13 +132,14 @@ impl CharacterBehavior for Data { } else { CharacterState::Idle(idle::Data { is_sneaking: self.static_data.was_sneak, + footwear: None, }) } } }, _ => { // If it somehow ends up in an incorrect stage section - update.character = CharacterState::Idle(idle::Data { is_sneaking: false }); + update.character = CharacterState::Idle(idle::Data::default()); }, } diff --git a/common/src/states/utils.rs b/common/src/states/utils.rs index 4537a37e7a..136913815c 100644 --- a/common/src/states/utils.rs +++ b/common/src/states/utils.rs @@ -4,8 +4,8 @@ use crate::{ comp::{ arthropod, biped_large, biped_small, character_state::OutputEvents, - inventory::slot::{EquipSlot, Slot}, - item::{Hands, ItemKind, ToolKind}, + inventory::slot::{ArmorSlot, EquipSlot, Slot}, + item::{armor::Friction, Hands, ItemKind, ToolKind}, quadruped_low, quadruped_medium, quadruped_small, skills::{Skill, SwimSkill, SKILL_MODIFIERS}, theropod, Body, CharacterAbility, CharacterState, Density, InputAttr, InputKind, @@ -14,7 +14,7 @@ use crate::{ consts::{FRIC_GROUND, GRAVITY, MAX_PICKUP_RANGE}, event::{LocalEvent, ServerEvent}, outcome::Outcome, - states::{behavior::JoinData, *}, + states::{behavior::JoinData, utils::CharacterState::Idle, *}, util::Dir, vol::ReadVol, }; @@ -301,6 +301,35 @@ impl Body { } } +/// set footwear in idle data and potential state change to Skate +pub fn handle_skating(data: &JoinData, update: &mut StateUpdate) { + if let Idle(crate::states::idle::Data { + is_sneaking, + mut footwear, + }) = data.character + { + if footwear.is_none() { + footwear = data.inventory.and_then(|inv| { + inv.equipped(EquipSlot::Armor(ArmorSlot::Feet)) + .map(|armor| match armor.kind().as_ref() { + ItemKind::Armor(a) => a.stats(data.msm).ground_contact, + _ => crate::comp::inventory::item::armor::Friction::Normal, + }) + }); + update.character = Idle(crate::states::idle::Data { + is_sneaking: *is_sneaking, + footwear, + }); + } + if data.physics.skating_active { + update.character = CharacterState::Skate(crate::states::skate::Data::new( + data, + footwear.unwrap_or(Friction::Normal), + )); + } + } +} + /// Handles updating `Components` to move player based on state of `JoinData` pub fn handle_move(data: &JoinData<'_>, update: &mut StateUpdate, efficiency: f32) { let submersion = data @@ -423,6 +452,19 @@ pub fn handle_orientation( efficiency: f32, dir_override: Option, ) { + /// first check for horizontal + fn to_horizontal_fast(ori: &crate::comp::Ori) -> crate::comp::Ori { + if ori.to_quat().into_vec4().xy().is_approx_zero() { + *ori + } else { + ori.to_horizontal() + } + } + /// compute an upper limit for the difference of two orientations + fn ori_absdiff(a: &crate::comp::Ori, b: &crate::comp::Ori) -> f32 { + (a.to_quat().into_vec4() - b.to_quat().into_vec4()).reduce(|a, b| a.abs() + b.abs()) + } + // Direction is set to the override if one is provided, else if entity is // strafing or attacking the horiontal component of the look direction is used, // else the current horizontal movement direction is used @@ -436,24 +478,34 @@ pub fn handle_orientation( .into() } else { Dir::from_unnormalized(data.inputs.move_dir.into()) - .map_or_else(|| data.ori.to_horizontal(), |dir| dir.into()) + .map_or_else(|| to_horizontal_fast(data.ori), |dir| dir.into()) }; - let rate = { - // Angle factor used to keep turning rate approximately constant by - // counteracting slerp turning more with a larger angle - let angle_factor = 2.0 / (1.0 - update.ori.dot(target_ori)).sqrt(); - data.body.base_ori_rate() - * efficiency - * angle_factor - * if data.physics.on_ground.is_some() { - 1.0 - } else { - 0.2 - } + // unit is multiples of 180° + let half_turns_per_tick = data.body.base_ori_rate() + * efficiency + * if data.physics.on_ground.is_some() { + 1.0 + } else { + 0.2 + } + * data.dt.0; + // very rough guess + let ticks_from_target_guess = ori_absdiff(&update.ori, &target_ori) / half_turns_per_tick; + let instantaneous = ticks_from_target_guess < 1.0; + update.ori = if instantaneous { + target_ori + } else { + let target_fraction = { + // Angle factor used to keep turning rate approximately constant by + // counteracting slerp turning more with a larger angle + let angle_factor = 2.0 / (1.0 - update.ori.dot(target_ori)).sqrt(); + + half_turns_per_tick * angle_factor + }; + update + .ori + .slerped_towards(target_ori, target_fraction.min(1.0)) }; - update.ori = update - .ori - .slerped_towards(target_ori, (data.dt.0 * rate).min(1.0)); } /// Updates components to move player as if theyre swimming @@ -635,7 +687,10 @@ pub fn attempt_talk(data: &JoinData<'_>, update: &mut StateUpdate) { pub fn attempt_sneak(data: &JoinData<'_>, update: &mut StateUpdate) { if data.physics.on_ground.is_some() && data.body.is_humanoid() { - update.character = CharacterState::Idle(idle::Data { is_sneaking: true }); + update.character = CharacterState::Idle(idle::Data { + is_sneaking: true, + footwear: data.character.footwear(), + }); } } @@ -1052,7 +1107,7 @@ pub fn get_crit_data(data: &JoinData<'_>, ai: AbilityInfo) -> (f32, f32) { }) .unwrap_or(DEFAULT_CRIT_CHANCE); - let crit_mult = combat::compute_crit_mult(data.inventory); + let crit_mult = combat::compute_crit_mult(data.inventory, data.msm); (crit_chance, crit_mult) } diff --git a/common/src/states/wallrun.rs b/common/src/states/wallrun.rs index 4b802f1cbe..adbba0adee 100644 --- a/common/src/states/wallrun.rs +++ b/common/src/states/wallrun.rs @@ -31,9 +31,14 @@ impl CharacterBehavior for Data { .max(0.2); } - // fall off wall or hit ground - if data.physics.on_wall.is_none() || data.physics.on_ground.is_some() { - update.character = CharacterState::Idle(idle::Data { is_sneaking: false }); + // fall off wall, hit ground, or enter water + // TODO: Rugged way to determine when state change occurs and we need to leave + // this state + if data.physics.on_wall.is_none() + || data.physics.on_ground.is_some() + || data.physics.in_liquid().is_some() + { + update.character = CharacterState::Idle(idle::Data::default()); } update diff --git a/common/src/states/wielding.rs b/common/src/states/wielding.rs index c750cfe42b..0cfea7f298 100644 --- a/common/src/states/wielding.rs +++ b/common/src/states/wielding.rs @@ -58,6 +58,7 @@ impl CharacterBehavior for Data { ) => { update.character = CharacterState::Idle(idle::Data { is_sneaking: self.is_sneaking, + footwear: None, }); }, _ => (), @@ -76,6 +77,7 @@ impl CharacterBehavior for Data { let mut update = StateUpdate::from(data); update.character = CharacterState::Idle(idle::Data { is_sneaking: self.is_sneaking, + footwear: None, }); update } diff --git a/common/src/terrain/block.rs b/common/src/terrain/block.rs index 665d4477d8..62ad01b809 100644 --- a/common/src/terrain/block.rs +++ b/common/src/terrain/block.rs @@ -320,7 +320,15 @@ impl Block { | SpriteKind::Loom | SpriteKind::SpinningWheel | SpriteKind::DismantlingBench - | SpriteKind::TanningRack => None, + | SpriteKind::TanningRack + | SpriteKind::Chest + | SpriteKind::DungeonChest0 + | SpriteKind::DungeonChest1 + | SpriteKind::DungeonChest2 + | SpriteKind::DungeonChest3 + | SpriteKind::DungeonChest4 + | SpriteKind::DungeonChest5 + | SpriteKind::ChestBuried => None, SpriteKind::EnsnaringVines | SpriteKind::EnsnaringWeb => Some(0.1), _ => Some(0.25), }), diff --git a/common/src/terrain/mod.rs b/common/src/terrain/mod.rs index fb2b20f0c4..37c2db61b2 100644 --- a/common/src/terrain/mod.rs +++ b/common/src/terrain/mod.rs @@ -88,6 +88,7 @@ pub struct TerrainChunkMeta { contains_river: bool, river_velocity: Vec3, temp: f32, + humidity: f32, contains_settlement: bool, contains_dungeon: bool, } @@ -102,6 +103,7 @@ impl TerrainChunkMeta { contains_river: bool, river_velocity: Vec3, temp: f32, + humidity: f32, contains_settlement: bool, contains_dungeon: bool, ) -> Self { @@ -114,6 +116,7 @@ impl TerrainChunkMeta { contains_river, river_velocity, temp, + humidity, contains_settlement, contains_dungeon, } @@ -129,6 +132,7 @@ impl TerrainChunkMeta { contains_river: false, river_velocity: Vec3::zero(), temp: 0.0, + humidity: 0.0, contains_settlement: false, contains_dungeon: false, } @@ -153,6 +157,8 @@ impl TerrainChunkMeta { pub fn contains_dungeon(&self) -> bool { self.contains_dungeon } pub fn temp(&self) -> f32 { self.temp } + + pub fn humidity(&self) -> f32 { self.humidity } } // Terrain type aliases diff --git a/common/src/terrain/structure.rs b/common/src/terrain/structure.rs index 11f0f214b8..9be0a51460 100644 --- a/common/src/terrain/structure.rs +++ b/common/src/terrain/structure.rs @@ -71,10 +71,7 @@ impl std::ops::Deref for StructuresGroup { impl assets::Compound for StructuresGroup { const HOT_RELOADED: bool = false; - fn load( - cache: &assets::AssetCache, - specifier: &str, - ) -> Result { + fn load(cache: assets::AnyCache, specifier: &str) -> Result { let specs = cache.load::(specifier)?.read(); Ok(StructuresGroup( @@ -148,10 +145,7 @@ impl ReadVol for Structure { } impl assets::Compound for BaseStructure { - fn load( - cache: &assets::AssetCache, - specifier: &str, - ) -> Result { + fn load(cache: assets::AnyCache, specifier: &str) -> Result { let dot_vox_data = cache.load::(specifier)?.read(); let dot_vox_data = &dot_vox_data.0; diff --git a/common/src/weather.rs b/common/src/weather.rs new file mode 100644 index 0000000000..b2e163be3a --- /dev/null +++ b/common/src/weather.rs @@ -0,0 +1,161 @@ +use std::fmt; + +use serde::{Deserialize, Serialize}; +use vek::{Lerp, Vec2, Vec3}; + +use crate::{grid::Grid, terrain::TerrainChunkSize, vol::RectVolSize}; + +/// Weather::default is Clear, 0 degrees C and no wind +#[derive(Debug, Clone, Copy, Serialize, Deserialize, Default)] +pub struct Weather { + /// Clouds currently in the area between 0 and 1 + pub cloud: f32, + /// Rain per time, between 0 and 1 + pub rain: f32, + /// Wind velocity in block / second + pub wind: Vec2, +} + +impl Weather { + pub fn new(cloud: f32, rain: f32, wind: Vec2) -> Self { Self { cloud, rain, wind } } + + pub fn get_kind(&self) -> WeatherKind { + // Over 24.5 m/s wind is a storm + if self.wind.magnitude_squared() >= 24.5f32.powi(2) { + WeatherKind::Storm + } else if (0.1..=1.0).contains(&self.rain) { + WeatherKind::Rain + } else if (0.2..=1.0).contains(&self.cloud) { + WeatherKind::Cloudy + } else { + WeatherKind::Clear + } + } + + pub fn lerp_unclamped(from: &Self, to: &Self, t: f32) -> Self { + Self { + cloud: f32::lerp_unclamped(from.cloud, to.cloud, t), + rain: f32::lerp_unclamped(from.rain, to.rain, t), + wind: Vec2::::lerp_unclamped(from.wind, to.wind, t), + } + } + + // Get the rain velocity for this weather + pub fn rain_vel(&self) -> Vec3 { + const FALL_RATE: f32 = 50.0; + Vec3::new(self.wind.x, self.wind.y, -FALL_RATE) + } +} + +#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)] +pub enum WeatherKind { + Clear, + Cloudy, + Rain, + Storm, +} + +impl fmt::Display for WeatherKind { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + WeatherKind::Clear => write!(f, "Clear"), + WeatherKind::Cloudy => write!(f, "Cloudy"), + WeatherKind::Rain => write!(f, "Rain"), + WeatherKind::Storm => write!(f, "Storm"), + } + } +} + +// How many chunks wide a weather cell is. +// So one weather cell has (CHUNKS_PER_CELL * CHUNKS_PER_CELL) chunks. +pub const CHUNKS_PER_CELL: u32 = 16; + +pub const CELL_SIZE: u32 = CHUNKS_PER_CELL * TerrainChunkSize::RECT_SIZE.x; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct WeatherGrid { + weather: Grid, +} + +/// Transforms a world position to cell coordinates. Where (0.0, 0.0) in cell +/// coordinates is the center of the weather cell located at (0, 0) in the grid. +fn to_cell_pos(wpos: Vec2) -> Vec2 { wpos / CELL_SIZE as f32 - 0.5 } + +// TODO: Move consts from world to common to avoid duplication +const LOCALITY: [Vec2; 9] = [ + Vec2::new(0, 0), + Vec2::new(0, 1), + Vec2::new(1, 0), + Vec2::new(0, -1), + Vec2::new(-1, 0), + Vec2::new(1, 1), + Vec2::new(1, -1), + Vec2::new(-1, 1), + Vec2::new(-1, -1), +]; + +impl WeatherGrid { + pub fn new(size: Vec2) -> Self { + size.map(|e| debug_assert!(i32::try_from(e).is_ok())); + Self { + weather: Grid::new(size.as_(), Weather::default()), + } + } + + pub fn iter(&self) -> impl Iterator, &Weather)> { self.weather.iter() } + + pub fn iter_mut(&mut self) -> impl Iterator, &mut Weather)> { + self.weather.iter_mut() + } + + pub fn size(&self) -> Vec2 { self.weather.size().as_() } + + /// Get the weather at a given world position by doing bilinear + /// interpolation between four cells. + pub fn get_interpolated(&self, wpos: Vec2) -> Weather { + let cell_pos = to_cell_pos(wpos); + let rpos = cell_pos.map(|e| e.fract() + (1.0 - e.signum()) / 2.0); + let cell_pos = cell_pos.map(|e| e.floor()); + + let cpos = cell_pos.as_::(); + Weather::lerp_unclamped( + &Weather::lerp_unclamped( + self.weather.get(cpos).unwrap_or(&Weather::default()), + self.weather + .get(cpos + Vec2::unit_x()) + .unwrap_or(&Weather::default()), + rpos.x, + ), + &Weather::lerp_unclamped( + self.weather + .get(cpos + Vec2::unit_y()) + .unwrap_or(&Weather::default()), + self.weather + .get(cpos + Vec2::one()) + .unwrap_or(&Weather::default()), + rpos.x, + ), + rpos.y, + ) + } + + /// Get the max weather near a position + pub fn get_max_near(&self, wpos: Vec2) -> Weather { + let cell_pos: Vec2 = to_cell_pos(wpos).as_(); + LOCALITY + .iter() + .map(|l| { + self.weather + .get(cell_pos + l) + .cloned() + .unwrap_or_default() + }) + .reduce(|a, b| Weather { + cloud: a.cloud.max(b.cloud), + rain: a.rain.max(b.rain), + wind: a.wind.map2(b.wind, |a, b| a.max(b)), + }) + // There will always be 9 elements in locality + .unwrap() + } +} diff --git a/common/state/Cargo.toml b/common/state/Cargo.toml index 495ea02eb8..b5e9063e0d 100644 --- a/common/state/Cargo.toml +++ b/common/state/Cargo.toml @@ -22,10 +22,10 @@ tracing = { version = "0.1", default-features = false } vek = { version = "0.15.8", features = ["serde"] } # Data structures -hashbrown = { version = "0.11", features = ["rayon", "serde", "nightly"] } +hashbrown = { version = "0.12", features = ["rayon", "serde", "nightly"] } # ECS -specs = { git = "https://github.com/amethyst/specs.git", features = ["serde", "storage-event-control", "derive"], rev = "f985bec5d456f7b0dd8aae99848f9473c2cd9d46" } +specs = { version = "0.18", features = ["serde", "storage-event-control", "derive"] } # Plugins scopeguard = "1.1.0" diff --git a/common/state/src/state.rs b/common/state/src/state.rs index 3c5f13cb1b..d088bc84d3 100644 --- a/common/state/src/state.rs +++ b/common/state/src/state.rs @@ -21,6 +21,7 @@ use common::{ time::DayPeriod, trade::Trades, vol::{ReadVol, WriteVol}, + weather::{Weather, WeatherGrid}, }; use common_base::span; use common_ecs::{PhysicsMetrics, SysMetrics}; @@ -157,6 +158,7 @@ impl State { ecs.register::(); ecs.register::(); ecs.register::(); + ecs.register::(); // Register components send from clients -> server ecs.register::(); @@ -205,6 +207,7 @@ impl State { // Register synced resources used by the ECS. ecs.insert(TimeOfDay(0.0)); ecs.insert(Calendar::default()); + ecs.insert(WeatherGrid::new(Vec2::zero())); // Register unsynced resources used by the ECS. ecs.insert(Time(0.0)); @@ -345,13 +348,28 @@ impl State { /// last game tick. pub fn terrain_changes(&self) -> Fetch { self.ecs.read_resource() } + /// Get a reference the current in-game weather grid. + pub fn weather_grid(&self) -> Fetch { self.ecs.read_resource() } + + /// Get a mutable reference the current in-game weather grid. + pub fn weather_grid_mut(&mut self) -> FetchMut { self.ecs.write_resource() } + + /// Get the current weather at a position in worldspace. + pub fn weather_at(&self, pos: Vec2) -> Weather { + self.weather_grid().get_interpolated(pos) + } + + /// Get the max weather near a position in worldspace. + pub fn max_weather_near(&self, pos: Vec2) -> Weather { + self.weather_grid().get_max_near(pos) + } + /// Get the current in-game time of day. /// /// Note that this should not be used for physics, animations or other such /// localised timings. pub fn get_time_of_day(&self) -> f64 { self.ecs.read_resource::().0 } - /// Get the current in-game day period (period of the day/night cycle) /// Get the current in-game day period (period of the day/night cycle) pub fn get_day_period(&self) -> DayPeriod { self.get_time_of_day().into() } diff --git a/common/systems/Cargo.toml b/common/systems/Cargo.toml index 68c1cc9d84..2dd50e44ba 100644 --- a/common/systems/Cargo.toml +++ b/common/systems/Cargo.toml @@ -19,15 +19,19 @@ rand = "0.8" rayon = "1.5" tracing = { version = "0.1", default-features = false } vek = { version = "0.15.8", features = ["serde"] } -ordered-float = { version = "2.0.1", default-features = false } +ordered-float = { version = "3", default-features = false } # Data structures -hashbrown = { version = "0.11", features = ["rayon", "serde", "nightly"] } +hashbrown = { version = "0.12", features = ["rayon", "serde", "nightly"] } indexmap = "1.3.0" slab = "0.4.2" # ECS -specs = { git = "https://github.com/amethyst/specs.git", features = ["serde", "storage-event-control", "derive"], rev = "f985bec5d456f7b0dd8aae99848f9473c2cd9d46" } +specs = { version = "0.18", features = ["serde", "storage-event-control", "derive"] } # Tweak running code # inline_tweak = { version = "1.0.8", features = ["release_tweak"] } + +[dev-dependencies] +# Setup a State +common-state = { package = "veloren-common-state", path = "../state" } diff --git a/common/systems/src/buff.rs b/common/systems/src/buff.rs index bd50c13496..228c96f89b 100644 --- a/common/systems/src/buff.rs +++ b/common/systems/src/buff.rs @@ -7,6 +7,7 @@ use common::{ Buffs, }, fluid_dynamics::{Fluid, LiquidKind}, + item::MaterialStatManifest, Energy, Group, Health, HealthChange, Inventory, LightEmitter, ModifierKind, PhysicsState, Stats, }, @@ -21,8 +22,8 @@ use common_ecs::{Job, Origin, ParMode, Phase, System}; use hashbrown::HashMap; use rayon::iter::ParallelIterator; use specs::{ - saveload::MarkerAllocator, shred::ResourceId, Entities, Join, ParJoin, Read, ReadStorage, - SystemData, World, WriteStorage, + saveload::MarkerAllocator, shred::ResourceId, Entities, Join, ParJoin, Read, ReadExpect, + ReadStorage, SystemData, World, WriteStorage, }; use std::time::Duration; @@ -38,6 +39,7 @@ pub struct ReadData<'a> { groups: ReadStorage<'a, Group>, uid_allocator: Read<'a, UidAllocator>, time: Read<'a, Time>, + msm: ReadExpect<'a, MaterialStatManifest>, } #[derive(Default)] @@ -207,6 +209,7 @@ impl<'a> System<'a> for Sys { None, read_data.inventories.get(entity), Some(&stat), + &read_data.msm, ); if (damage_reduction - 1.0).abs() < f32::EPSILON { for (id, buff) in buff_comp.buffs.iter() { @@ -238,6 +241,7 @@ impl<'a> System<'a> for Sys { rate, accumulated, kind, + instance, } => { *accumulated += *rate * dt; // Apply health change only once per second, per health, or @@ -245,7 +249,7 @@ impl<'a> System<'a> for Sys { if accumulated.abs() > rate.abs().min(1.0) || buff.time.map_or(false, |dur| dur == Duration::default()) { - let (cause, by) = if *accumulated < 0.0 { + let (cause, by) = if *accumulated != 0.0 { (Some(DamageSource::Buff(buff.kind)), buff_owner) } else { (None, None) @@ -271,6 +275,8 @@ impl<'a> System<'a> for Sys { by: damage_contributor, cause, time: *read_data.time, + crit: false, + instance: *instance, }, }); *accumulated = 0.0; diff --git a/common/systems/src/character_behavior.rs b/common/systems/src/character_behavior.rs index b82c849978..af268fb325 100644 --- a/common/systems/src/character_behavior.rs +++ b/common/systems/src/character_behavior.rs @@ -213,7 +213,7 @@ impl<'a> System<'a> for Sys { // If mounted, character state is controlled by mount if is_rider.is_some() && !join_struct.char_state.can_perform_mounted() { // TODO: A better way to swap between mount inputs and rider inputs - *join_struct.char_state = CharacterState::Idle(idle::Data { is_sneaking: false }); + *join_struct.char_state = CharacterState::Idle(idle::Data::default()); continue; } diff --git a/common/systems/src/phys.rs b/common/systems/src/phys.rs index 3343050c5f..86fb126403 100644 --- a/common/systems/src/phys.rs +++ b/common/systems/src/phys.rs @@ -2,6 +2,7 @@ use common::{ comp::{ body::ship::figuredata::{VoxelCollider, VOXEL_COLLIDER_MANIFEST}, fluid_dynamics::{Fluid, LiquidKind, Wings}, + inventory::item::armor::Friction, Body, CharacterState, Collider, Density, Immovable, Mass, Ori, PhysicsState, Pos, PosVelOriDefer, PreviousPhysCache, Projectile, Scale, Stats, Sticky, Vel, }, @@ -12,7 +13,7 @@ use common::{ outcome::Outcome, resources::DeltaTime, states, - terrain::{Block, TerrainGrid}, + terrain::{Block, BlockKind, TerrainGrid}, uid::Uid, util::{Projection, SpatialGrid}, vol::{BaseVol, ReadVol}, @@ -780,6 +781,13 @@ impl<'a> PhysicsData<'a> { 1.0 }; + if let Some(state) = character_state { + let footwear = state.footwear().unwrap_or(Friction::Normal); + if footwear != physics_state.footwear { + physics_state.footwear = footwear; + } + } + let in_loaded_chunk = read .terrain .get_key(read.terrain.pos_key(pos.0.map(|e| e.floor() as i32))) @@ -846,6 +854,7 @@ impl<'a> PhysicsData<'a> { climbing, |entity, vel| land_on_ground = Some((entity, vel)), read, + &ori, ); tgt_pos = cpos.0; }, @@ -878,6 +887,7 @@ impl<'a> PhysicsData<'a> { climbing, |entity, vel| land_on_ground = Some((entity, vel)), read, + &ori, ); // Sticky things shouldn't move when on a surface @@ -1142,6 +1152,7 @@ impl<'a> PhysicsData<'a> { Some((entity, Vel(ori_from.mul_direction(vel.0)))); }, read, + &ori, ); cpos.0 = transform_from.mul_point(cpos.0) + wpos; @@ -1339,6 +1350,7 @@ fn box_voxel_collision<'a, T: BaseVol + ReadVol>( climbing: bool, mut land_on_ground: impl FnMut(Entity, Vel), read: &PhysicsRead, + ori: &Ori, ) { // FIXME: Review these #![allow( @@ -1700,19 +1712,84 @@ fn box_voxel_collision<'a, T: BaseVol + ReadVol>( physics_state.on_wall = on_wall; let fric_mod = read.stats.get(entity).map_or(1.0, |s| s.friction_modifier); - let ground_fric = physics_state - .on_ground - .map(|b| b.get_friction()) - .unwrap_or(0.0); - let wall_fric = if physics_state.on_wall.is_some() && climbing { - FRIC_GROUND + // skating (ski) + if !vel.0.xy().is_approx_zero() + && physics_state + .on_ground + .map_or(false, |g| physics_state.footwear.can_skate_on(g.kind())) + { + const DT_SCALE: f32 = 1.0; // other areas use 60.0??? + const POTENTIAL_TO_KINETIC: f32 = 8.0; // * 2.0 * GRAVITY; + + let kind = physics_state.on_ground.map_or(BlockKind::Air, |g| g.kind()); + let (longitudinal_friction, lateral_friction) = physics_state.footwear.get_friction(kind); + // the amount of longitudinal speed preserved + let longitudinal_friction_factor_squared = + (1.0 - longitudinal_friction).powf(dt.0 * DT_SCALE * 2.0); + let lateral_friction_factor = (1.0 - lateral_friction).powf(dt.0 * DT_SCALE); + let groundplane_velocity = vel.0.xy(); + let mut longitudinal_dir = ori.look_vec().xy(); + if longitudinal_dir.is_approx_zero() { + // fall back to travelling dir (in case we look up) + longitudinal_dir = groundplane_velocity; + } + let longitudinal_dir = longitudinal_dir.normalized(); + let lateral_dir = Vec2::new(longitudinal_dir.y, -longitudinal_dir.x); + let squared_velocity = groundplane_velocity.magnitude_squared(); + // if we crossed an edge up or down accelerate in travelling direction, + // as potential energy is converted into kinetic energy we compare it with the + // square of velocity + let vertical_difference = physics_state.skating_last_height - pos.0.z; + // might become negative when skating slowly uphill + let height_factor_squared = if vertical_difference != 0.0 { + // E=½mv², we scale both energies by ½m + let kinetic = squared_velocity; + // positive accelerate, negative decelerate, ΔE=mgΔh + let delta_potential = vertical_difference.max(-1.0).min(2.0) * POTENTIAL_TO_KINETIC; + let new_energy = kinetic + delta_potential; + physics_state.skating_last_height = pos.0.z; + new_energy / kinetic + } else { + 1.0 + }; + + // we calculate these squared as we need to combined them Euclidianly anyway, + // skiing: separate speed into longitudinal and lateral component + let long_speed = groundplane_velocity.dot(longitudinal_dir); + let lat_speed = groundplane_velocity.dot(lateral_dir); + let long_speed_squared = long_speed.powi(2); + + // lateral speed is reduced by lateral_friction, + let new_lateral = lat_speed * lateral_friction_factor; + let lateral_speed_reduction = lat_speed - new_lateral; + // we convert this reduction partically (by the cosine of the angle) into + // longitudinal (elastic collision) and the remainder into heat + let cosine_squared_aoa = long_speed_squared / squared_velocity; + let converted_lateral_squared = cosine_squared_aoa * lateral_speed_reduction.powi(2); + let new_longitudinal_squared = longitudinal_friction_factor_squared + * (long_speed_squared + converted_lateral_squared) + * height_factor_squared; + let new_longitudinal = + new_longitudinal_squared.signum() * new_longitudinal_squared.abs().sqrt(); + let new_ground_speed = new_longitudinal * longitudinal_dir + new_lateral * lateral_dir; + physics_state.skating_active = true; + vel.0 = Vec3::new(new_ground_speed.x, new_ground_speed.y, 0.0); } else { - 0.0 - }; - let fric = ground_fric.max(wall_fric); - if fric > 0.0 { - vel.0 *= (1.0 - fric.min(1.0) * fric_mod).powf(dt.0 * 60.0); - physics_state.ground_vel = ground_vel; + let ground_fric = physics_state + .on_ground + .map(|b| b.get_friction()) + .unwrap_or(0.0); + let wall_fric = if physics_state.on_wall.is_some() && climbing { + FRIC_GROUND + } else { + 0.0 + }; + let fric = ground_fric.max(wall_fric); + if fric > 0.0 { + vel.0 *= (1.0 - fric.min(1.0) * fric_mod).powf(dt.0 * 60.0); + physics_state.ground_vel = ground_vel; + } + physics_state.skating_active = false; } physics_state.in_fluid = liquid diff --git a/common/systems/src/stats.rs b/common/systems/src/stats.rs index 77e29c3bf9..1fb6761f51 100644 --- a/common/systems/src/stats.rs +++ b/common/systems/src/stats.rs @@ -2,6 +2,7 @@ use common::{ combat, comp::{ self, + item::MaterialStatManifest, skills::{GeneralSkill, Skill}, Body, CharacterState, Combo, Energy, Health, Inventory, Poise, PoiseChange, Pos, SkillSet, Stats, StatsModifier, @@ -11,7 +12,8 @@ use common::{ }; use common_ecs::{Job, Origin, Phase, System}; use specs::{ - shred::ResourceId, Entities, Join, Read, ReadStorage, SystemData, World, Write, WriteStorage, + shred::ResourceId, Entities, Join, Read, ReadExpect, ReadStorage, SystemData, World, Write, + WriteStorage, }; use vek::Vec3; @@ -28,6 +30,7 @@ pub struct ReadData<'a> { bodies: ReadStorage<'a, Body>, char_states: ReadStorage<'a, CharacterState>, inventories: ReadStorage<'a, Inventory>, + msm: ReadExpect<'a, MaterialStatManifest>, } /// This system kills players, levels them up, and regenerates energy. @@ -100,7 +103,7 @@ impl<'a> System<'a> for Sys { // Calculates energy scaling from stats and inventory let energy_mods = StatsModifier { add_mod: stat.max_energy_modifiers.add_mod - + combat::compute_max_energy_mod(inventory), + + combat::compute_max_energy_mod(inventory, &read_data.msm), mult_mod: stat.max_energy_modifiers.mult_mod, }; @@ -147,6 +150,7 @@ impl<'a> System<'a> for Sys { | CharacterState::Sit { .. } | CharacterState::Dance { .. } | CharacterState::Glide { .. } + | CharacterState::Skate { .. } | CharacterState::GlideWield { .. } | CharacterState::Wielding { .. } | CharacterState::Equipping { .. } diff --git a/common/systems/tests/character_state.rs b/common/systems/tests/character_state.rs new file mode 100644 index 0000000000..d2f00609c1 --- /dev/null +++ b/common/systems/tests/character_state.rs @@ -0,0 +1,104 @@ +#[cfg(test)] +mod tests { + use common::{ + comp::{ + item::MaterialStatManifest, skills::GeneralSkill, CharacterState, Controller, Energy, + Ori, PhysicsState, Poise, Pos, Skill, Stats, Vel, + }, + resources::{DeltaTime, GameMode, Time}, + uid::Uid, + util::Dir, + SkillSetBuilder, + }; + use common_ecs::dispatch; + use common_state::State; + use rand::thread_rng; + use specs::{Builder, Entity, WorldExt}; + use std::time::Duration; + use vek::{approx::AbsDiffEq, Vec3}; + use veloren_common_systems::character_behavior; + + fn setup() -> State { + let mut state = State::new(GameMode::Server); + let msm = MaterialStatManifest::load().cloned(); + state.ecs_mut().insert(msm); + state.ecs_mut().read_resource::