Merge remote-tracking branch 'origin/master' into sharp/small-fixes

This commit is contained in:
Joshua Yanovski 2020-07-04 16:17:40 +02:00
commit 4e02024670
973 changed files with 46146 additions and 9791 deletions
.github/workflows
.gitignore.gitlab-ci.yml
.gitlab
.tokeignoreCHANGELOG.mdCargo.lockCargo.tomlLICENSEREADME.md
assets/common/items

@ -1,60 +0,0 @@
# This workflow will create artifacts for all merges into master
# It will include linux, macos binaries with assets and an msi installer.
name: Artifacts
on:
schedule:
- cron: '0 0 * * *'
jobs:
release-macos:
runs-on: [macos-latest]
steps:
# LFS Checkout from Gitlab
- name: Gitlab LFS Checkout
run: |
mkdir -p $RUNNER_WORKSPACE/veloren
git init $RUNNER_WORKSPACE/veloren
cd $RUNNER_WORKSPACE/veloren
git remote add origin https://gitlab.com/veloren/veloren.git/
git -c protocol.version=2 fetch --no-tags --prune --progress --no-recurse-submodules --depth=1 origin +$GITHUB_SHA:refs/remotes/origin/$(echo $GITHUB_REF | cut -c 12-)
git checkout --progress --force -B $(echo $GITHUB_REF | cut -c 12-) refs/remotes/origin/$(echo $GITHUB_REF | cut -c 12-)
git log -1
# Prepare toolchain
- name: Pull toolchain
uses: actions-rs/toolchain@v1
with:
profile: minimal
# Cache
- name: Cache cargo registry
uses: actions/cache@v1
with:
path: ~/.cargo/registry
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
- name: Cache cargo index
uses: actions/cache@v1
with:
path: ~/.cargo/git
key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}
- name: Cache cargo build
uses: actions/cache@v1
with:
path: target
key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }}
# Build & Package airshipper
- name: Build
run: cargo build
- name: Package
run: |
mkdir -p artifact/
mkdir -p artifact/assets
cp -r assets/ artifact/assets/
cp target/debug/veloren-server-cli artifact/
cp target/debug/veloren-voxygen artifact/
# Upload artifact
- name: Upload artifact
uses: actions/upload-artifact@v1
with:
name: airshipper-macos
path: artifact/

11
.gitignore vendored

@ -1,7 +1,5 @@
# Rust
/target/
/*/target/
target
# Vim
@ -36,10 +34,15 @@ todo.txt
# Game data
*.sqlite
*.sqlite-journal
*.sqlite-wal
*.sqlite-shm
# direnv
/.envrc
*.bat
# Mac
.DS_Store
.DS_Store
# Nix
nix/result

@ -1,236 +1,48 @@
image: registry.gitlab.com/veloren/veloren-docker-ci:latest
stages:
- check
- build
- publish
variables:
GIT_STRATEGY: fetch
GIT_DEPTH: 3
GIT_CLEAN_FLAGS: -f
# Note: this is deprecated!
# https://docs.gitlab.com/ee/ci/yaml/#git-strategy
# However in gitlab web ui it's set to fetch so it should be fine ¯\_(ツ)_/¯
GIT_STRATEGY: fetch
# Note: this is deprecated!
# ttps://docs.gitlab.com/ee/ci/yaml/#shallow-cloning
GIT_DEPTH: 3
GIT_CLEAN_FLAGS: -f
stages:
- optional-builds
- check-compile
- build-post
- publish
default:
image: registry.gitlab.com/veloren/veloren-docker-ci:latest
# https://docs.gitlab.com/ee/ci/pipelines/settings.html#auto-cancel-pending-pipelines
interruptible: true
# Retry automatically incase the runner times out or there's a runner failure
retry:
max: 2
when:
- runner_system_failure
- stuck_or_timeout_failure
before_script:
- source $HOME/.cargo/env
- df -h /
- free -h
- cargo --version
- export DISABLE_GIT_LFS_CHECK=true
- export VELOREN_ASSETS="$(pwd)/assets"
- echo "VELOREN_ASSETS=$VELOREN_ASSETS"
- rm -r target || echo "target doesnt exist, which is fine"
- ln -s /dockercache/veloren/target target
- source $HOME/.cargo/env
- df -h /
- free -h
- cargo --version
- export DISABLE_GIT_LFS_CHECK=true
- export VELOREN_ASSETS="$(pwd)/assets"
- echo "VELOREN_ASSETS=$VELOREN_ASSETS"
- rm -rf target || echo "some quickfix, idk why needed"
# -- optional build
workflow:
rules:
- if: $CI_MERGE_REQUEST_IID
- if: $CI_COMMIT_TAG
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
.optional-release: &optional-release
stage: optional-builds
tags:
- veloren-docker
except:
- schedules
when: manual
optional-release:linux:
<<: *optional-release
script:
- cargo build --verbose --release
- cp target/release/veloren-server-cli $CI_PROJECT_DIR
- cp target/release/veloren-voxygen $CI_PROJECT_DIR
- strip --strip-all veloren-server-cli
- strip --strip-all veloren-voxygen
artifacts:
paths:
- veloren-server-cli
- veloren-voxygen
- assets/
- LICENSE
expire_in: 1 week
optional-release:windows:
<<: *optional-release
script:
- cargo build --verbose --target=x86_64-pc-windows-gnu --release
- cp target/x86_64-pc-windows-gnu/release/veloren-server-cli.exe $CI_PROJECT_DIR
- cp target/x86_64-pc-windows-gnu/release/veloren-voxygen.exe $CI_PROJECT_DIR
artifacts:
paths:
- veloren-server-cli.exe
- veloren-voxygen.exe
- assets/
- LICENSE
expire_in: 1 week
# --
# -- check
check:
stage: check-compile
tags:
- veloren-docker
script:
- RUSTFLAGS="-D warnings" cargo check --locked
code-quality:
stage: check-compile
tags:
- veloren-docker
script:
- cargo clippy -- --warn clippy::all
- cargo fmt --all -- --check
security:
stage: check-compile
allow_failure: true
tags:
- veloren-docker
script:
- cargo audit
# --
# -- build-post
unittests:
stage: build-post
when: delayed
start_in: 5 seconds
tags:
- veloren-docker
script:
- echo "Workaround, cargo tests fails due some rust files are already deleted, so we just stack cargo test. if its the os error, it wont appear on them all, if its a real error, it will retry and then fail"
- cargo test || ( sleep 10 && cargo test ) || ( sleep 10 && cargo test ) || cargo test || cargo test || cargo test || cargo test || cargo test || cargo test || cargo test || cargo test || cargo test || cargo test
coverage:
stage: build-post
allow_failure: true
when: delayed
start_in: 5 seconds
tags:
- veloren-docker
script:
- echo "Workaround, tarpaulin fails due some rust files are already deleted, so we just stack tarpaulin. if its the os error, it wont appear on them all, if its a real error, it will retry and then fail"
- cargo tarpaulin -v || ( sleep 10 && cargo tarpaulin -v ) || ( sleep 10 && cargo tarpaulin -v ) || cargo tarpaulin -v || cargo tarpaulin -v || cargo tarpaulin -v || cargo tarpaulin -v || cargo tarpaulin -v || cargo tarpaulin -v || cargo tarpaulin -v || cargo tarpaulin -v
benchmarks:
stage: build-post
when: delayed
start_in: 5 seconds
tags:
- veloren-docker
script:
- unset DISABLE_GIT_LFS_CHECK
- cargo bench
localization-status:
variables:
GIT_DEPTH: 0
stage: build-post
when: delayed
start_in: 5 seconds
allow_failure: true
tags:
- veloren-docker
script:
- cargo test -q test_all_localizations -- --nocapture --ignored
linux:
stage: build-post
when: delayed
start_in: 5 seconds
only:
refs:
- /^r[0-9]+\.[0-9]+\.[0-9]+/
- /^v[0-9]+\.[0-9]+/
- /^master$/
tags:
- veloren-docker
script:
- cargo build --release
- cp -r target/release/veloren-server-cli $CI_PROJECT_DIR
- cp -r target/release/veloren-voxygen $CI_PROJECT_DIR
- strip --strip-all veloren-server-cli
- strip --strip-all veloren-voxygen
artifacts:
paths:
- veloren-server-cli
- veloren-voxygen
- assets/
- LICENSE
expire_in: 1 week
windows:
stage: build-post
when: delayed
start_in: 5 seconds
only:
refs:
- /^r[0-9]+\.[0-9]+\.[0-9]+/
- /^v[0-9]+\.[0-9]+/
- /^master$/
tags:
- veloren-docker
script:
- cargo build --target=x86_64-pc-windows-gnu --release
- cp -r target/x86_64-pc-windows-gnu/release/veloren-server-cli.exe $CI_PROJECT_DIR
- cp -r target/x86_64-pc-windows-gnu/release/veloren-voxygen.exe $CI_PROJECT_DIR
artifacts:
paths:
- veloren-server-cli.exe
- veloren-voxygen.exe
- assets/
- LICENSE
expire_in: 1 week
macos:
stage: build-post
when: delayed
start_in: 5 seconds
only:
refs:
- /^r[0-9]+\.[0-9]+\.[0-9]+/
- /^v[0-9]+\.[0-9]+/
- /^master$/
tags:
- veloren-docker
script:
- PATH="/dockercache/osxcross/target/bin:$PATH" COREAUDIO_SDK_PATH=/dockercache/osxcross/target/SDK/MacOSX10.13.sdk CC=o64-clang CXX=o64-clang++ cargo build --target x86_64-apple-darwin --release
- cp -r target/x86_64-apple-darwin/release/veloren-server-cli $CI_PROJECT_DIR
- cp -r target/x86_64-apple-darwin/release/veloren-voxygen $CI_PROJECT_DIR
artifacts:
paths:
- veloren-server-cli
- veloren-voxygen
- assets/
- LICENSE
expire_in: 1 week
allow_failure: true
# --
# -- publish
docker:
stage: publish
when: delayed
start_in: 5 seconds
image:
name: gcr.io/kaniko-project/executor:debug
entrypoint: [""]
dependencies:
- linux
before_script:
- ls "$CI_PROJECT_DIR/server-cli/"
only:
refs:
- /^r[0-9]+\.[0-9]+\.[0-9]+/
- /^v[0-9]+\.[0-9]+/
- /^master$/
tags:
- veloren-docker
script:
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
- /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/server-cli/Dockerfile --destination "${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_NAME}-server"
# --
include:
- local: .gitlab/CI/recompile.yml
- local: .gitlab/CI/release.yml
- local: .gitlab/CI/check.gitlab-ci.yml
- local: .gitlab/CI/build.gitlab-ci.yml
- local: .gitlab/CI/publish.gitlab-ci.yml

@ -0,0 +1,115 @@
unittests:
extends: .recompile-branch
stage: build
script:
- ln -s /dockercache/cache-all target
- cargo test
retry:
max: 2
benchmarks:
extends: .recompile-branch
stage: build
script:
- unset DISABLE_GIT_LFS_CHECK
- ln -s /dockercache/cache-all target
- cargo bench
retry:
max: 2
localization-status:
extends: .recompile-branch
stage: build
variables:
GIT_DEPTH: 0
allow_failure: true
script:
- ln -s /dockercache/cache-all target
- cargo test test_all_localizations -- --nocapture --ignored
# Coverage is needed on master for the README.md badge to work
coverage:
extends: .recompile
stage: build
script:
- ln -s /dockercache/cache-tarpaulin target
- cargo tarpaulin -v
retry:
max: 2
#linux, windows, macos builds here as template
.tlinux:
script:
- ln -s /dockercache/cache-release-linux target
- cargo build --release
- cp -r target/release/veloren-server-cli $CI_PROJECT_DIR
- cp -r target/release/veloren-voxygen $CI_PROJECT_DIR
- strip --strip-all veloren-server-cli
- strip --strip-all veloren-voxygen
artifacts:
paths:
- veloren-server-cli
- veloren-voxygen
- assets/
- LICENSE
expire_in: 1 week
.twindows:
script:
- ln -s /dockercache/cache-release-windows target
- cargo build --target=x86_64-pc-windows-gnu --release
- cp -r target/x86_64-pc-windows-gnu/release/veloren-server-cli.exe $CI_PROJECT_DIR
- cp -r target/x86_64-pc-windows-gnu/release/veloren-voxygen.exe $CI_PROJECT_DIR
artifacts:
paths:
- veloren-server-cli.exe
- veloren-voxygen.exe
- assets/
- LICENSE
expire_in: 1 week
.tmacos:
script:
- ln -s /dockercache/cache-release-macos target
- PATH="/dockercache/osxcross/target/bin:$PATH" COREAUDIO_SDK_PATH=/dockercache/osxcross/target/SDK/MacOSX10.13.sdk CC=o64-clang CXX=o64-clang++ cargo build --target x86_64-apple-darwin --release
- cp -r target/x86_64-apple-darwin/release/veloren-server-cli $CI_PROJECT_DIR
- cp -r target/x86_64-apple-darwin/release/veloren-voxygen $CI_PROJECT_DIR
artifacts:
paths:
- veloren-server-cli
- veloren-voxygen
- assets/
- LICENSE
expire_in: 1 week
# build on release or master
linux:
extends:
- .tlinux
- .release
windows:
extends:
- .twindows
- .release
macos:
extends:
- .tmacos
- .release
# if NOT release or master, allow optional builds
opt-linux:
extends:
- .tlinux
- .optional-release
opt-windows:
extends:
- .twindows
- .optional-release
opt-macos:
extends:
- .tmacos
- .optional-release

@ -0,0 +1,23 @@
check:
extends: .recompile-branch
stage: check
script:
- ln -s /dockercache/cache-all target
- RUSTFLAGS="-D warnings" cargo check --locked
code-quality:
extends: .recompile-branch
stage: check
script:
- ln -s /dockercache/cache-all target
- cargo clippy -- -D warnings
- cargo clippy --tests -- -D warnings
- cargo fmt --all -- --check
security:
extends: .recompile-branch
stage: check
allow_failure: true
script:
- ln -s /dockercache/cache-all target
- cargo audit

@ -0,0 +1,34 @@
# Publishes veloren-server-cli to the gitlab container registry
# https://gitlab.com/veloren/veloren/container_registry
.publish:
stage: publish
tags:
- veloren-docker
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
when: always
- when: never
docker:
extends: .publish
image:
name: gcr.io/kaniko-project/executor:debug
entrypoint: [""]
dependencies:
- linux
before_script:
- ls "$CI_PROJECT_DIR/server-cli/"
script:
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
- /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/server-cli/Dockerfile --destination "${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_NAME}-server"
pages:
extends: .publish
artifacts:
paths:
- public
script:
- rm -rf public
- mkdir -p public
- cargo doc --no-deps --document-private-items
- mv target/doc/* public

23
.gitlab/CI/recompile.yml Normal file

@ -0,0 +1,23 @@
# Template to only run if actual changes has been made to the code and not just documentation
.recompile-branch:
tags:
- veloren-docker
rules:
- if: $CI_COMMIT_REF_NAME !~ /^master$/
# No '-' here is *very* important: https://docs.gitlab.com/ee/ci/yaml/#complex-rule-clauses
changes:
- "**/*.{rs,ron,toml,vox,png}"
- "rust-toolchain"
- ".gitlab-ci.yml"
- "**/*.yml"
# like .recompile-branch but will run on master too
.recompile:
tags:
- veloren-docker
rules:
- changes:
- "**/*.{rs,ron,toml,vox,png,wav}"
- "rust-toolchain"
- ".gitlab-ci.yml"
- "**/*.yml"

20
.gitlab/CI/release.yml Normal file

@ -0,0 +1,20 @@
# allow_failure: true makes these pipelines manual and "non-blocking" which changed with except -> rule syntax
.optional-release:
stage: build
tags:
- veloren-docker
rules:
- if: $CI_COMMIT_REF_NAME =~ /^master$/ || $CI_COMMIT_TAG =~ /^v[0-9]+\.[0-9]+\.[0-9]+/ || $CI_COMMIT_REF_NAME =~ /^r[0-9]+\.[0-9]+/ || $CI_PIPELINE_SOURCE == "schedule"
when: never
- when: manual
allow_failure: true
# Template to only run if pushes to master or a tag happened
.release:
stage: build
tags:
- veloren-docker
rules:
- if: $CI_COMMIT_REF_NAME =~ /^master$/ || $CI_COMMIT_TAG =~ /^v[0-9]+\.[0-9]+\.[0-9]+/ || $CI_COMMIT_REF_NAME =~ /^r[0-9]+\.[0-9]+/
when: always
- when: never

@ -1,28 +1,3 @@
# Defines people who should approve to certain parts of the codebase
/assets/ @assetsandvisualdesign @frontend
/chat-cli/ @frontend
/client/ @backend @networking
/common/ @backend @networking
/server/ @backend @networking
/server-cli/ @frontend
#/voxygen/ @someone
/voxygen/anim/ @animation
/voxygen/audio/ @audio
#/voxygen/hud/ @someone
#/voxygen/menu / @someone
#/voxygen/mesh/ @someone
/voxygen/render/ @rendering
#/voxygen/scene/ @someone
#/voxygen/ui/ @someone
/world/ @worldgen
# All files related to documentation or game unrelated content needs to be approved by the meta group
*.md @meta
*.nix @meta
.gitignore @meta
.gitattributes @meta
.gitlab-ci.yml @meta
rust-toolchain @meta
LICENSE @meta
.cargo/ @meta
*/Cargo.toml @xMAC94x
Cargo.toml @xMAC94x
rust-toolchain @xMAC94x

@ -0,0 +1,41 @@
<!---
Please read this!
Before opening a new issue, make sure to search for keywords in the issues
filtered by the "crash" or "bug" label:
- https://gitlab.com/veloren/veloren/-/issues?label_name%5B%5D=type%3A%3Acrash
- https://gitlab.com/veloren/veloren/-/issues?label_name%5B%5D=type%3A%3Abug
and verify the issue you're about to submit isn't a duplicate.
--->
### Summary
(Summarize the bug encountered concisely)
### Steps to reproduce
(How one can reproduce the issue - this is very important)
### Relevant logs and/or screenshots
<details>
<summary>Logs and/or screenshots of the issue</summary>
<pre>
(Paste any relevant logs - please use code blocks (```) to format console output,
logs, and code as it's tough to read otherwise.)
</pre>
</details>
#### System details
(Include important system details like OS and incase it's a graphical issue the gpu)
#### Veloren version
(What version the bug happened e.g. Nightly, Stable 0.X.0, master)
/label ~ status::needs investigation ~type::bug

1
.tokeignore Normal file

@ -0,0 +1 @@
nix/Cargo.nix

@ -10,13 +10,51 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added
- Added context-sensitive crosshair
- Announce alias changes to all clients
- Dance animation
- Speech bubbles appear when nearby players talk
- NPCs call for help when attacked
- Eyebrows and shapes can now be selected
- Character name and level information to chat, social tab and `/players` command
- Added inventory, armour and weapon saving
- Show where screenshots are saved in the chat
- Added basic auto walk
- Added weapon/attack sound effects
- M2 attack for bow
- Hotbar persistence
- Alpha version Disclaimer
- Server whitelist
- Optional server-side maximum view distance
- MOTD on login
- Added group chat `/join_group` `/group`
- Added faction chat `/join_faction` `/faction`
- Added regional, local, and global chat (`/region`, `/say`, and `/world`, respectively)
- Added command shortcuts for each of the above chat modes (`/g`, `/f`, `/r`, `/s`, and `/w`, respectively and `/t` for `/tell`)
- Ability to wield 2 × 1h weapons and shields (Note: 1h weapons & shields are not currently avaliable, see [!1095](https://gitlab.com/veloren/veloren/-/merge_requests/1095) for more info)
- Zoomable Map
- M2 attack for hammer
### Changed
- Improved camera aiming
- Made civsim, sites, etc. deterministic from the same seed
- Improved animations by adding orientation variation
- new tail bone for quad_small body
- slim the game size through lossless asset optimization
- Lanterns now stop glowing if you throw a lit one out of your inventory
- Fixed a crash caused by certain audio devices on OSX
- Bow animations now show held arrows
- Fixed a bug where walk/run sfx played while a character rolled/dodged
- Energy regen resets on last ability use instead of on wield
- Fixed unable to use ability; Secondary and ability3 (fire rod) will now automatically wield
- Gliding is now a toggle that can be triggered from the ground
- Replaced `log` with `tracing` in all crates
### Removed
- Wield requirement to swap loadout; fixes issue with unable swap loadout outside of combat
- Disclaimer wall of text on first startup
## [0.6.0] - 2020-05-16
### Added
@ -44,6 +82,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Added Italian translation
- Added Portuguese translation
- Added Turkish translation
- Added Traditional Chinese translation
- Complete rewrite of the combat system into a state machine
- Abilities like Dash and Triplestrike
- Armor can now be equipped as items
@ -89,7 +128,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Added dungeon bosses and rare boss loot
- Added 2 sets of armour. One Steel and one Leather.
### Changed
- The /give_item command can now specify the amount of items. Syntax is now `/give_item <name> [num]`

1788
Cargo.lock generated

File diff suppressed because it is too large Load Diff

@ -9,6 +9,8 @@ members = [
"server-cli",
"voxygen",
"world",
"network",
"voxygen/src/anim"
]
# default profile for devs, fast to compile, okay enough to run, no debug information
@ -24,6 +26,8 @@ incremental = true
# All dependencies (but not this crate itself)
[profile.dev.package."*"]
opt-level = 3
[profile.dev.package."veloren_network"]
opt-level = 2
[profile.dev.package."veloren-common"]
opt-level = 2
[profile.dev.package."veloren-client"]

@ -632,7 +632,7 @@ state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
Veloren
Copyright (C) 2019 Project Veloren
Copyright (C) 2020 Project Veloren
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -652,7 +652,7 @@ Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
Veloren Copyright (C) 2019 Project Veloren
Veloren Copyright (C) 2020 Project Veloren
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.

@ -23,7 +23,7 @@ This will be needed to play on auth-enabled servers, including the official serv
[The Book](https://book.veloren.net) - A collection of all important information relating to Veloren. It includes information on how to compile Veloren and how to contribute.
[Future Plans](https://gitlab.com/veloren/veloren/milestones) - Go here for information about Veloren's development roadmap and what we're currently working on.
[Future Plans](https://gitlab.com/veloren/veloren/-/milestones) - Go here for information about Veloren's development roadmap and what we're currently working on.
#### Official social media and websites
@ -33,11 +33,9 @@ This will be needed to play on auth-enabled servers, including the official serv
## Get Veloren
Currently we provide 64-bit builds for Linux and Windows which can be downloaded on the official website:
We provide 64-bit builds for Linux, Mac, and Windows, which can be downloaded on the official website:
[https://www.veloren.net](https://veloren.net/welcome)
_Note: Mac and 32-bit systems are supported but you need to [compile the game for them yourself](https://book.veloren.net/compile/index.html)._
Due to rapid developement stable versions become outdated fast and might be **incompatible with the public server**.
If you want to compile Veloren yourself, take a look at the [How to Compile Guide](https://book.veloren.net/compile/index.html) in the book.

@ -6,6 +6,6 @@ Item(
effect: Health((
amount: 20,
cause: Item,
)),
)),
),
)

@ -0,0 +1,8 @@
Item(
name: "Druid's Belt",
description: "Twisted vines to keep everything secure.\n\n<Right-Click to use>",
kind: Armor(
kind: Belt(Druid),
stats: (20),
),
)

@ -0,0 +1,8 @@
Item(
name: "Twig Belt",
description: "A belt made from woven from twigs.\n\n<Right-Click to use>",
kind: Armor(
kind: Belt(Twig),
stats: (20),
),
)

@ -0,0 +1,8 @@
Item(
name: "Flowery Belt",
description: "A belt woven from twigs and flowers.\n\n<Right-Click to use>",
kind: Armor(
kind: Belt(Twigsflowers),
stats: (20),
),
)

@ -0,0 +1,8 @@
Item(
name: "Leafy Belt",
description: "A belt woven from twigs and leaves.\n\n<Right-Click to use>",
kind: Armor(
kind: Belt(Twigsleaves),
stats: (20),
),
)

@ -0,0 +1,8 @@
Item(
name: "Druid's Vest",
description: "Druidic chest wrappings.\n\n<Right-Click to use>",
kind: Armor(
kind: Chest(Druid),
stats: (20),
),
)

@ -0,0 +1,8 @@
Item(
name: "Twig Shirt",
description: "A shirt woven from twigs.\n\n<Right-Click to use>",
kind: Armor(
kind: Chest(Twig),
stats: (20),
),
)

@ -0,0 +1,8 @@
Item(
name: "Flowery Shirt",
description: "A shirt woven from twigs and flowers.\n\n<Right-Click to use>",
kind: Armor(
kind: Chest(Twigsflowers),
stats: (20),
),
)

@ -0,0 +1,8 @@
Item(
name: "Leafy Shirt",
description: "A shirt woven from twigs and leaves.\n\n<Right-Click to use>",
kind: Armor(
kind: Chest(Twigsleaves),
stats: (20),
),
)

@ -0,0 +1,8 @@
Item(
name: "Druid's Slippers",
description: "For treading softly through the woods.\n\n<Right-Click to use>",
kind: Armor(
kind: Foot(Druid),
stats: (20),
),
)

@ -0,0 +1,8 @@
Item(
name: "Fluffy Jackalope Slippers",
description: "So warm and cozy!\n\n<Right-Click to use>",
kind: Armor(
kind: Foot(JackalopeSlips),
stats: (20),
),
)

@ -0,0 +1,8 @@
Item(
name: "Twig Boots",
description: "Boots woven from twigs.\n\n<Right-Click to use>",
kind: Armor(
kind: Foot(Twig),
stats: (20),
),
)

@ -0,0 +1,8 @@
Item(
name: "Flowery Boots",
description: "Boots woven from twigs and flowers.\n\n<Right-Click to use>",
kind: Armor(
kind: Foot(Twigsflowers),
stats: (20),
),
)

@ -0,0 +1,8 @@
Item(
name: "Leafy Boots",
description: "Boots woven from twigs and leaves.\n\n<Right-Click to use>",
kind: Armor(
kind: Foot(Twigsleaves),
stats: (20),
),
)

@ -0,0 +1,8 @@
Item(
name: "Druid's Gloves",
description: "Soft, strong, and flexible.\n\n<Right-Click to use>",
kind: Armor(
kind: Hand(Druid),
stats: (20),
),
)

@ -0,0 +1,8 @@
Item(
name: "Twig Wraps",
description: "Handwraps woven from twigs.\n\n<Right-Click to use>",
kind: Armor(
kind: Hand(Twig),
stats: (20),
),
)

@ -0,0 +1,8 @@
Item(
name: "Flowery Wraps",
description: "Handwraps woven from twigs and flowers.\n\n<Right-Click to use>",
kind: Armor(
kind: Hand(Twigsflowers),
stats: (20),
),
)

@ -0,0 +1,8 @@
Item(
name: "Leafy Wraps",
description: "Handwraps woven from twigs and leaves.\n\n<Right-Click to use>",
kind: Armor(
kind: Hand(Twigsleaves),
stats: (20),
),
)

@ -0,0 +1,8 @@
Item(
name: "Druid's Kilt",
description: "Feel the breeze!\n\n<Right-Click to use>",
kind: Armor(
kind: Pants(Druid),
stats: (20),
),
)

@ -1,8 +0,0 @@
Item(
name: "Hunting Pants",
description: "Legs\n\nArmor: 0\n\n<Right-Click to use>",
kind: Armor(
kind: Pants(Green),
stats: (20),
),
)

@ -0,0 +1,8 @@
Item(
name: "Hunting Pants",
description: "Crafted from soft, supple leather\n\n<Right-Click to use>",
kind: Armor(
kind: Pants(Hunting),
stats: (20),
),
)

@ -0,0 +1,8 @@
Item(
name: "Twig Pants",
description: "Pants woven from twigs. Chafey!\n\n<Right-Click to use>",
kind: Armor(
kind: Pants(Twig),
stats: (20),
),
)

@ -0,0 +1,8 @@
Item(
name: "Flowery Pants",
description: "Pants woven from twigs and flowers. Fragrant!\n\n<Right-Click to use>",
kind: Armor(
kind: Pants(Twigsflowers),
stats: (20),
),
)

@ -0,0 +1,8 @@
Item(
name: "Leafy Pants",
description: "Pants woven from twigs and leaves. Slightly less chafey than the twig pants!\n\n<Right-Click to use>",
kind: Armor(
kind: Pants(Twigsleaves),
stats: (20),
),
)

@ -0,0 +1,8 @@
Item(
name: "Blue Cloth Pads",
description: "Simple shoulderpads made from blue cloth.\n\n<Right-click to use>",
kind: Armor(
kind: Shoulder(ClothBlue1),
stats: (20),
),
)

@ -0,0 +1,8 @@
Item(
name: "Druid Shoulders",
description: "Forged for protectors of the wild.\n\n<Right-Click to use>",
kind: Armor(
kind: Shoulder(DruidShoulder),
stats: (20),
),
)

@ -0,0 +1,8 @@
Item(
name: "Iron Spiked Pauldrons",
description: "Iron shoulder pads with spikes attached.\n\n<Right-click to use>",
kind: Armor(
kind: Shoulder(IronSpikes),
stats: (20),
),
)

@ -0,0 +1,8 @@
Item(
name: "Iron and Leather Spaulders",
description: "Robust spaulders made from iron and leather.\n\n<Right-click to use>",
kind: Armor(
kind: Shoulder(IronLeather0),
stats: (20),
),
)

@ -0,0 +1,8 @@
Item(
name: "Iron and Leather Spaulders",
description: "Robust spaulders made from iron and leather.\n\n<Right-click to use>",
kind: Armor(
kind: Shoulder(IronLeather1),
stats: (20),
),
)

@ -0,0 +1,8 @@
Item(
name: "Iron and Leather Spaulders",
description: "Robust spaulders made from iron and leather.\n\n<Right-click to use>",
kind: Armor(
kind: Shoulder(IronLeather2),
stats: (20),
),
)

@ -0,0 +1,8 @@
Item(
name: "Iron and Leather Spaulders",
description: "Robust spaulders made from iron and leather.\n\n<Right-click to use>",
kind: Armor(
kind: Shoulder(IronLeather3),
stats: (20),
),
)

@ -0,0 +1,8 @@
Item(
name: "Leather Strips",
description: "Shoulder wraps made from leather strips.\n\n<Right-click to use.>",
kind: Armor(
kind: Shoulder(LeatherStrips),
stats: (20),
),
)

@ -0,0 +1,8 @@
Item(
name: "Twiggy Shoulders",
description: "Spaulders made from tightly tied twigs.\n\n<Right-Click to use>",
kind: Armor(
kind: Shoulder(TwiggyShoulder),
stats: (20),
),
)

@ -0,0 +1,8 @@
Item(
name: "Flowery Shoulders",
description: "Flowery, leafy spaulders.\n\n<Right-Click to use>",
kind: Armor(
kind: Shoulder(FlowerShoulder),
stats: (20),
),
)

@ -0,0 +1,8 @@
Item(
name: "Leafy Shoulders",
description: "Spaulders made from tied twigs and leaves.\n\n<Right-Click to use>",
kind: Armor(
kind: Shoulder(LeafyShoulder),
stats: (20),
),
)

@ -0,0 +1,8 @@
Item(
name: "Flask of Velorite Dusk",
description: "Increases Exp by 250\n\nTake with plenty of water\n\n<Right-Click to use>",
kind: Consumable(
kind: PotionExp,
effect: Xp(250),
),
)

@ -1,12 +1,11 @@
Item(
name: "Powerful Potion",
description: "Restores 100 Health\nA great monster was slain for this item\n\n<Right-Click to use>",
name: "Potent Potion",
description: "A potent healing potion.\n\nRestores 100 health on use.\n\n<Right-Click to use>",
kind: Consumable(
kind: Potion,
effect: Health((
amount: 100,
cause: Item,
)),
amount: 15,
),
)

@ -6,6 +6,6 @@ Item(
effect: Health((
amount: 15,
cause: Item,
)),
)),
),
)

@ -6,6 +6,6 @@ Item(
effect: Health((
amount: 30,
cause: Item,
)),
)),
),
)

@ -4,4 +4,5 @@ Item(
kind: Utility(
kind: Collar,
),
amount: 1,
)

@ -1,6 +1,6 @@
Item(
name: "Weightless Rod",
description: "The sky is the limit.",
name: "Belzeshrub the Broom-God",
description: "You can hear him giggle whenever\nyou hit the ground a bit too hard...",
kind: Tool(
(
kind: Debug(Boost),

@ -1,11 +1,11 @@
Item(
name: "Rod of Possession",
description: "It's fixed on my branch.",
name: "Belzeshrub the Broom-God",
description: "You can hear him giggle whenever\nyou hit the ground a bit too hard...",
kind: Tool(
(
kind: Debug(Possess),
kind: Debug(Boost),
equip_time_millis: 0,
)
),
)
// ... as zesterer always uses to tell us.
// And the ground is pretty hard at maximum velocity...

@ -6,6 +6,6 @@ Item(
effect: Health((
amount: 10,
cause: Item,
)),
)),
),
)

@ -0,0 +1,12 @@
Item(
name: "Large Potion",
description: "Restores 100 Health\n\n<Right-Click to use>",
kind: Consumable(
kind: PotionMinor,
effect: Health((
amount: 100,
cause: Item,
)),
,
),
)

@ -0,0 +1,11 @@
Item(
name: "Medium Potion",
description: "Restores 70 Health\n\n<Right-Click to use>",
kind: Consumable(
kind: PotionMinor,
effect: Health((
amount: 70,
cause: Item,
)),
),
)

@ -6,6 +6,6 @@ Item(
effect: Health((
amount: 50,
cause: Item,
)),
)),
),
)

@ -0,0 +1,8 @@
Item(
name: "Testing Boots",
description: "Hopefully this test doesn't break!",
kind: Armor(
kind: Foot(Dark),
stats: (20),
),
)

@ -4,5 +4,5 @@ Item(
kind: Consumable(
kind: Velorite,
effect: Xp(20),
),
),
)

@ -4,5 +4,5 @@ Item(
kind: Consumable(
kind: VeloriteFrag,
effect: Xp(10),
),
),
)

@ -1,6 +1,6 @@
Item(
name: "Sharp Kitchen Knife",
description: "WIP",
name: "Rusty Dagger",
description: "One-Hand Dagger\n\nPower 5-6\n\n#writing.\n\n<Right-Click to use>",
kind: Tool(
(
kind: Dagger(BasicDagger),

@ -1,6 +1,6 @@
Item(
name: "A Shield",
description: "WIP",
name: "A Tattered Targe",
description: "One-Hand Shield\n\nPower 5-6\n\n#writing.\n\n<Right-Click to use>",
kind: Tool (
(
kind: Shield(BasicShield),

@ -0,0 +1,10 @@
Item(
name: "Magical Cultist Greatsword",
description: "Two-Hand Sword\n\nPower: 6-20\n\nThis belonged to an evil Cult Leader\n\n<Right-Click to use>",
kind: Tool(
(
kind: Sword(CultPurp0),
equip_time_millis: 500,
)
),
)

@ -0,0 +1,10 @@
Item(
name: "Damaged Greatsword",
description: "A Damaged Two-Handed Greatsword\n\nPower: 2-10\n\n<Right-Click to use>",
kind: Tool(
(
kind: Sword(GreatswordDam0),
equip_time_millis: 500,
)
),
)

@ -0,0 +1,10 @@
Item(
name: "Damaged Greatsword",
description: "A Damaged Two-Handed Greatsword\n\nPower: 2-10\n\n<Right-Click to use>",
kind: Tool(
(
kind: Sword(GreatswordDam1),
equip_time_millis: 500,
)
),
)

@ -0,0 +1,10 @@
Item(
name: "Damaged Greatsword",
description: "A Damaged Two-Handed Greatsword\n\nPower: 2-10\n\n<Right-Click to use>",
kind: Tool(
(
kind: Sword(GreatswordDam2),
equip_time_millis: 500,
)
),
)

@ -0,0 +1,10 @@
Item(
name: "Fine Greatsword",
description: "A Fine Two-Handed Greatsword\n\nPower: 2-10\n\n<Right-Click to use>",
kind: Tool(
(
kind: Sword(GreatswordFine0),
equip_time_millis: 500,
)
),
)

@ -0,0 +1,10 @@
Item(
name: "Fine Greatsword",
description: "A Fine Two-Handed Greatsword\n\nPower: 2-10\n\n<Right-Click to use>",
kind: Tool(
(
kind: Sword(GreatswordFine1),
equip_time_millis: 500,
)
),
)

@ -0,0 +1,10 @@
Item(
name: "Fine Greatsword",
description: "A Fine Two-Handed Greatsword\n\nPower: 2-10\n\n<Right-Click to use>",
kind: Tool(
(
kind: Sword(GreatswordFine2),
equip_time_millis: 500,
)
),
)

@ -0,0 +1,10 @@
Item(
name: "Ornimented Greatsword",
description: "A Ornimented Two-Handed Greatsword\n\nPower: 2-10\n\n<Right-Click to use>",
kind: Tool(
(
kind: Sword(GreatswordOrn0),
equip_time_millis: 500,
)
),
)

@ -0,0 +1,10 @@
Item(
name: "Ornimented Greatsword",
description: "A Ornimented Two-Handed Greatsword\n\nPower: 2-10\n\n<Right-Click to use>",
kind: Tool(
(
kind: Sword(GreatswordOrn1),
equip_time_millis: 500,
)
),
)

@ -0,0 +1,10 @@
Item(
name: "Ornimented Greatsword",
description: "A Ornimented Two-Handed Greatsword\n\nPower: 2-10\n\n<Right-Click to use>",
kind: Tool(
(
kind: Sword(GreatswordOrn2),
equip_time_millis: 500,
)
),
)

@ -0,0 +1,10 @@
Item(
name: "Simple Greatsword",
description: "A Simple Two-Handed Greatsword\n\nPower: 2-10\n\n<Right-Click to use>",
kind: Tool(
(
kind: Sword(GreatswordSimple0),
equip_time_millis: 500,
)
),
)

@ -0,0 +1,10 @@
Item(
name: "Simple Greatsword",
description: "A Simple Two-Handed Greatsword\n\nPower: 2-10\n\n<Right-Click to use>",
kind: Tool(
(
kind: Sword(GreatswordSimple1),
equip_time_millis: 500,
)
),
)

@ -0,0 +1,10 @@
Item(
name: "Simple Greatsword",
description: "A Simple Two-Handed Greatsword\n\nPower: 2-10\n\n<Right-Click to use>",
kind: Tool(
(
kind: Sword(GreatswordSimple2),
equip_time_millis: 500,
)
),
)

@ -0,0 +1,10 @@
Item(
name: "Damaged Longsword",
description: "A Damaged Double-Edged, Two-Handed Longsword\n\nPower: 2-10\n\n<Right-Click to use>",
kind: Tool(
(
kind: Sword(LongDam0),
equip_time_millis: 500,
)
),
)

@ -0,0 +1,10 @@
Item(
name: "Damaged Longsword",
description: "A Damaged Double-Edged, Two-Handed Longsword\n\nPower: 2-10\n\n<Right-Click to use>",
kind: Tool(
(
kind: Sword(LongDam1),
equip_time_millis: 500,
)
),
)

@ -0,0 +1,10 @@
Item(
name: "Damaged Longsword",
description: "A Damaged Double-Edged, Two-Handed Longsword\n\nPower: 2-10\n\n<Right-Click to use>",
kind: Tool(
(
kind: Sword(LongDam2),
equip_time_millis: 500,
)
),
)

@ -0,0 +1,10 @@
Item(
name: "Damaged Longsword",
description: "A Damaged Single-Edged, Two-Handed Longsword\n\nPower: 2-10\n\n<Right-Click to use>",
kind: Tool(
(
kind: Sword(LongDam3),
equip_time_millis: 500,
)
),
)

@ -0,0 +1,10 @@
Item(
name: "Damaged Longsword",
description: "A Damaged Single-Edged, Two-Handed Longsword\n\nPower: 2-10\n\n<Right-Click to use>",
kind: Tool(
(
kind: Sword(LongDam4),
equip_time_millis: 500,
)
),
)

@ -0,0 +1,10 @@
Item(
name: "Damaged Longsword",
description: "A Damaged Single-Edged, Two-Handed Longsword\n\nPower: 2-10\n\n<Right-Click to use>",
kind: Tool(
(
kind: Sword(LongDam5),
equip_time_millis: 500,
)
),
)

@ -0,0 +1,10 @@
Item(
name: "Fine Longsword",
description: "A Very Fine Double-Edged, Two-Hand LongSword\n\nPower: 2-10\n\n<Right-Click to use>",
kind: Tool(
(
kind: Sword(LongFine0),
equip_time_millis: 500,
)
),
)

@ -0,0 +1,10 @@
Item(
name: "Fine Longsword",
description: "A Very Fine Double-Edged, Two-Hand LongSword\n\nPower: 2-10\n\n<Right-Click to use>",
kind: Tool(
(
kind: Sword(LongFine1),
equip_time_millis: 500,
)
),
)

@ -0,0 +1,10 @@
Item(
name: "Fine Longsword",
description: "A Very Fine Double-Edged, Two-Hand LongSword\n\nPower: 2-10\n\n<Right-Click to use>",
kind: Tool(
(
kind: Sword(LongFine2),
equip_time_millis: 500,
)
),
)

@ -0,0 +1,10 @@
Item(
name: "Fine Longsword",
description: "A Very Fine Single-Edged, Two-Hand LongSword\n\nPower: 2-10\n\n<Right-Click to use>",
kind: Tool(
(
kind: Sword(LongFine3),
equip_time_millis: 500,
)
),
)

@ -0,0 +1,10 @@
Item(
name: "Fine Longsword",
description: "A Very Fine Single-Edged, Two-Hand LongSword\n\nPower: 2-10\n\n<Right-Click to use>",
kind: Tool(
(
kind: Sword(LongFine4),
equip_time_millis: 500,
)
),
)

@ -0,0 +1,10 @@
Item(
name: "Fine Longsword",
description: "A Very Fine Single-Edged, Two-Hand LongSword\n\nPower: 2-10\n\n<Right-Click to use>",
kind: Tool(
(
kind: Sword(LongFine5),
equip_time_millis: 500,
)
),
)

@ -0,0 +1,10 @@
Item(
name: "Ornimented Longsword",
description: "An Ornimanted Double-Edged, Two-Hand LongSword\n\nPower: 2-10\n\n<Right-Click to use>",
kind: Tool(
(
kind: Sword(LongOrn0),
equip_time_millis: 500,
)
),
)

@ -0,0 +1,10 @@
Item(
name: "Ornimented Longsword",
description: "An Ornimanted Double-Edged, Two-Hand LongSword\n\nPower: 2-10\n\n<Right-Click to use>",
kind: Tool(
(
kind: Sword(LongOrn1),
equip_time_millis: 500,
)
),
)

@ -0,0 +1,10 @@
Item(
name: "Ornimented Longsword",
description: "An Ornimanted Double-Edged, Two-Hand LongSword\n\nPower: 2-10\n\n<Right-Click to use>",
kind: Tool(
(
kind: Sword(LongOrn2),
equip_time_millis: 500,
)
),
)

@ -0,0 +1,10 @@
Item(
name: "Ornimented Longsword",
description: "An Ornimanted Single-Edged, Two-Hand LongSword\n\nPower: 2-10\n\n<Right-Click to use>",
kind: Tool(
(
kind: Sword(LongOrn3),
equip_time_millis: 500,
)
),
)

@ -0,0 +1,10 @@
Item(
name: "Ornimented Longsword",
description: "An Ornimanted Single-Edged, Two-Hand LongSword\n\nPower: 2-10\n\n<Right-Click to use>",
kind: Tool(
(
kind: Sword(LongOrn4),
equip_time_millis: 500,
)
),
)

@ -0,0 +1,10 @@
Item(
name: "Ornimented Longsword",
description: "An Ornimanted Single-Edged, Two-Hand LongSword\n\nPower: 2-10\n\n<Right-Click to use>",
kind: Tool(
(
kind: Sword(LongOrn5),
equip_time_millis: 500,
)
),
)

@ -0,0 +1,10 @@
Item(
name: "Simple Longsword",
description: "A Simple Double-Edged, Two-Handed Longsword\n\nPower: 2-10\n\n<Right-Click to use>",
kind: Tool(
(
kind: Sword(LongSimple0),
equip_time_millis: 500,
)
),
)

@ -0,0 +1,10 @@
Item(
name: "Simple Longsword",
description: "A Simple Double-Edged, Two-Handed Longsword\n\nPower: 2-10\n\n<Right-Click to use>",
kind: Tool(
(
kind: Sword(LongSimple1),
equip_time_millis: 500,
)
),
)

Some files were not shown because too many files have changed in this diff Show More