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

View File

@ -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
View File

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

View File

@ -1,236 +1,48 @@
image: registry.gitlab.com/veloren/veloren-docker-ci:latest stages:
- check
- build
- publish
variables: variables:
GIT_STRATEGY: fetch # Note: this is deprecated!
GIT_DEPTH: 3 # https://docs.gitlab.com/ee/ci/yaml/#git-strategy
GIT_CLEAN_FLAGS: -f # 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: default:
- optional-builds image: registry.gitlab.com/veloren/veloren-docker-ci:latest
- check-compile # https://docs.gitlab.com/ee/ci/pipelines/settings.html#auto-cancel-pending-pipelines
- build-post interruptible: true
- publish # 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: before_script:
- source $HOME/.cargo/env - source $HOME/.cargo/env
- df -h / - df -h /
- free -h - free -h
- cargo --version - cargo --version
- export DISABLE_GIT_LFS_CHECK=true - export DISABLE_GIT_LFS_CHECK=true
- export VELOREN_ASSETS="$(pwd)/assets" - export VELOREN_ASSETS="$(pwd)/assets"
- echo "VELOREN_ASSETS=$VELOREN_ASSETS" - echo "VELOREN_ASSETS=$VELOREN_ASSETS"
- rm -r target || echo "target doesnt exist, which is fine" - rm -rf target || echo "some quickfix, idk why needed"
- ln -s /dockercache/veloren/target target
# -- optional build workflow:
rules:
- if: $CI_MERGE_REQUEST_IID
- if: $CI_COMMIT_TAG
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
.optional-release: &optional-release include:
stage: optional-builds - local: .gitlab/CI/recompile.yml
tags: - local: .gitlab/CI/release.yml
- veloren-docker - local: .gitlab/CI/check.gitlab-ci.yml
except: - local: .gitlab/CI/build.gitlab-ci.yml
- schedules - local: .gitlab/CI/publish.gitlab-ci.yml
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"
# --

View File

@ -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

View File

@ -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

View File

@ -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
View 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
View 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

View File

@ -1,28 +1,3 @@
# Defines people who should approve to certain parts of the codebase */Cargo.toml @xMAC94x
Cargo.toml @xMAC94x
/assets/ @assetsandvisualdesign @frontend rust-toolchain @xMAC94x
/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

View File

@ -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
View File

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

View File

@ -10,13 +10,51 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added ### Added
- Added context-sensitive crosshair - 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 ### Changed
- Improved camera aiming - 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 ### 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 ## [0.6.0] - 2020-05-16
### Added ### Added
@ -44,6 +82,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Added Italian translation - Added Italian translation
- Added Portuguese translation - Added Portuguese translation
- Added Turkish translation - Added Turkish translation
- Added Traditional Chinese translation
- Complete rewrite of the combat system into a state machine - Complete rewrite of the combat system into a state machine
- Abilities like Dash and Triplestrike - Abilities like Dash and Triplestrike
- Armor can now be equipped as items - 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 dungeon bosses and rare boss loot
- Added 2 sets of armour. One Steel and one Leather. - Added 2 sets of armour. One Steel and one Leather.
### Changed ### Changed
- The /give_item command can now specify the amount of items. Syntax is now `/give_item <name> [num]` - 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

View File

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

View File

@ -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. the "copyright" line and a pointer to where the full notice is found.
Veloren Veloren
Copyright (C) 2019 Project Veloren Copyright (C) 2020 Project Veloren
This program is free software: you can redistribute it and/or modify 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 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 If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode: 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 program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details. under certain conditions; type `show c' for details.

View File

@ -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. [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 #### 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 ## 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) [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**. 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. 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.

View File

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

View File

@ -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),
),
)

View File

@ -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),
),
)

View File

@ -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),
),
)

View File

@ -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),
),
)

View File

@ -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),
),
)

View File

@ -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),
),
)

View File

@ -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),
),
)

View File

@ -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),
),
)

View File

@ -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),
),
)

View File

@ -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),
),
)

View File

@ -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),
),
)

View File

@ -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),
),
)

View File

@ -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),
),
)

View File

@ -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),
),
)

View File

@ -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),
),
)

View File

@ -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),
),
)

View File

@ -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),
),
)

View File

@ -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),
),
)

View File

@ -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),
),
)

View File

@ -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),
),
)

View File

@ -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),
),
)

View File

@ -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),
),
)

View File

@ -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),
),
)

View File

@ -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),
),
)

View File

@ -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),
),
)

View File

@ -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),
),
)

View File

@ -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),
),
)

View File

@ -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),
),
)

View File

@ -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),
),
)

View File

@ -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),
),
)

View File

@ -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),
),
)

View File

@ -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),
),
)

View File

@ -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),
),
)

View File

@ -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),
),
)

View File

@ -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),
),
)

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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,
)),
,
),
)

View File

@ -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,
)),
),
)

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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,
)
),
)

View File

@ -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,
)
),
)

View File

@ -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,
)
),
)

View File

@ -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,
)
),
)

View File

@ -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,
)
),
)

View File

@ -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,
)
),
)

View File

@ -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,
)
),
)

View File

@ -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,
)
),
)

View File

@ -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,
)
),
)

View File

@ -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,
)
),
)

View File

@ -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,
)
),
)

View File

@ -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,
)
),
)

View File

@ -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,
)
),
)

View File

@ -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,
)
),
)

View File

@ -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,
)
),
)

View File

@ -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,
)
),
)

View File

@ -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,
)
),
)

View File

@ -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,
)
),
)

View File

@ -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,
)
),
)

View File

@ -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,
)
),
)

View File

@ -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,
)
),
)

View File

@ -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,
)
),
)

View File

@ -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,
)
),
)

View File

@ -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,
)
),
)

View File

@ -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,
)
),
)

View File

@ -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,
)
),
)

View File

@ -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,
)
),
)

View File

@ -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,
)
),
)

View File

@ -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,
)
),
)

View File

@ -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,
)
),
)

View File

@ -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,
)
),
)

View File

@ -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,
)
),
)

View File

@ -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