This Week In Veloren 68

8 minute read18 May 2020

Authored by AngelOnFira

This week 0.6 was launched! We take a look at the telemetry from the launch party. @AngelOnFira has done some network analysis on Veloren. A lot of bugs were squashed before the 0.6 release.

- AngelOnFira, TWiV Editor

Contributor Work

Thanks to this week's contributors, @jbeich, @Slipped, @Silentium, @Pfau, @xMAC94x, @imbris, @zesterer, @treeco, @Songtronix, @Shandley, @LunarEclipse, @mockersf, @CapsizeGlimmer, @AngelOnFira, and @Acrimon!

0.6 was finally released last weekend! This update was the combination of many contributors' efforts, and focused on adding content to Veloren. The release party saw nearly 50 concurrent players on the server at once. It turns out that the 0.6 release has brought more players to Veloren as well. Before the update, there were on average 1.57 active players on the server at once, whereas now that has increased to 3.2. The team will be meeting next weekend to have the intro meeting for 0.7.

Leap of Faith by @badbbad

Vestal Cleric Set by @AlbinoAxototl

@Redo11 has been working on adding polish translations. @LunarEclipse fixed bug that caused crashes in the packaged versions of Veloren, and also updated the AUR for 0.6. @DaddyDemon started hosting an NA Veloren server which you can join at @Silentium got their armor branch merged. Persistence saw some quick improvements in anticipation for the launch, including saving the level of players. @YuriMomo and the team working on WGPU found a memory leak in the crate, and created an issue that you can check out here.

Game On! by @sharpie

Big Boy by @Gemu

0.6 Release

Another few months, another Veloren release! The launch server was run on Digital Ocean. Below you'll find lots of telemetry from the launch party. The changelog is quite long, but this is the place for recognition of the efforts made to Veloren, so here it is verbatim!

## [0.6.0] - 2020-05-16

### Added

- Added music system
- Added zoomable and rotatable minimap
- Added rotating orientation marker to main-map
- Added daily Mac builds
- Allow spawning individual pet species, not just generic body kinds
- Configurable fonts
- Configurable keybindings from the Controls menu
- Translation status tracking
- Added gamma setting
- Added new orc hairstyles
- Added SFX for wielding/unwielding weapons
- Fixed NPCs attacking the player forever after killing them
- Added SFX for collecting, dropping and using inventory items
- New attack animation
- Weapon control system
- Game pauses when in single player and pause menu
- Added authentication system (to play on the official server register on
- Added gamepad/controller support
- Added player feedback when attempting to pickup an item with a full inventory
- Added free look
- Added Italian translation
- Added Portuguese translation
- Added Turkish translation
- Complete rewrite of the combat system into a state machine
- Abilities like Dash and Triplestrike
- Armor can now be equipped as items
- Fireball explosions
- Inventory supports stacking
- Many new armors and weapons to find in chests
- Fleshed out "attack" animation into alpha, beta and spin type attacks
- Fleshed out range attack into charging and shooting animations for staff/bow
- Customized attack animation for hammers and axes
- Added German translation
- Added a silhouette for players when they are occluded
- Added transparency to the player when zooming in
- Made armor and hotbar slots actually function
- Added dragging and right-click to use functionality to inventory, armor & hotbar slots
- Added capes, lanterns, tabards, rings, helmets & necklaces as equippable armor
- 6 new music tracks
- Added basic world and civilization simulation
- Added overhauled towns
- Added fields, crops and scarecrows
- Added paths
- Added bridges
- Added procedural house generation
- Added lampposts
- Added NPCs that spawn in towns
- Added simple dungeons
- Added sub-voxel noise effect
- Added waypoints next to dungeons
- Made players spawn in towns
- Added non-uniform block heights
- Added `/sudo` command
- Added a Level of Detail (LoD) system for terrain sprites and entities
- Added owl, hyena, parrot, cockatrice, red dragon NPCs
- Added dungeon entrances
- Villagers tools and clothing
- Cultists clothing
- You can start the game by pressing "enter" from the character selection menu
- Added server-side character saving
- Player now starts with a lantern. Equipping/unequipping a lantern has the same effect as the `/lantern` command
- Added tab completion in chat for player names and chat commands
- Added server persistence for character stats
- Added a popup when setting your character's waypoint
- Added dungeon arenas
- 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]`
- Brighter / higher contrast main-map
- Removed highlighting of non-collectible sprites
- Fixed /give_exp ignoring player argument
- Extend run sfx to small animals to prevent sneak attacks by geese.
- Decreased clientside latency of ServerEvent mediated effects (e.g. projectiles, inventory operations, etc)
- Started changing the visual theme of the UI
- Merge of the Bag and Character-Screen
- Merge of the Map and Questlog
- Overhauled icon art
- Asset cleanup to lower client-size
- Rewrote the humanoid skeleton to be more ideal for attack animations
- Arrows can no longer hurt their owners
- Increased overall character scale
- `/sudo player /tp` is short for `/sudo player /tp me`
- The `/object` command can create any object in comp::object::Body
- The `/help` command takes an optional argument. `/help /sudo` will show you information about only the sudo command.

We almost hit 50 players for this launch party!

Above we see persistence running on the launch party server. In the week leading up to the launch, we started seeing many issues caused by delay in persistence. Below you can see what the length of the delays was. This was likely caused by the fact that normally our main server run on a unit with a hard drive, whereas the launch party ran on a server with a solid-state drive. The times taken for saving are still quite high, since disk input/output takes significantly longer than accessing either RAM or the CPU Cache.

Network Analysis by @AngelOnFira

After playing with Wireshark during the NorthSec CTF last weekend, I felt inspired to check out what Veloren's network packets look like. I started by playing on the server, and running through a few different scenarios. First, I started by just standing in the spawn village. Then, I started flying over unexplored territory. Finally, I fell into a lake and sank to the bottom.

Initial Server Connection

At first, we have a high burst of data being sent and received while connecting to the server. Upon analysis of the packets in that region of time, we find that many packets are making up a larger message. This message appears to be between 30KB up to around 100KB.

Standing in Spawn Village

Here we see two different sections. First, when you load in, you start downloading many chunks of the surrounding area. This sees about 600KB/s of bandwidth use. Once all of the surrounding chunks have been downloaded, the bandwidth goes down to around 300KB/s. There are still packets being sent that update us on all of the entities around us.

Flying Over Unexplored Areas

Similar to the previous chunk downloading, we start asking the server for more areas. We can see that there are some larger and smaller amounts being downloaded. This section stays quite consistent.

Sinking in a Lake

Finally, we see a large drop in the data being sent from the server. All of the chunks around us have already been downloaded. Also, there aren't as many entities around us as in the village, and so we don't get as many updates. Here we are only seeing around 60KB/s of incoming data.

Recived data rate from server

In the coming weeks, I hope to get more into the code behind networking in Veloren. I'm also going to be exploring how we handle authentication, which might include another writeup on some of it's concepts.

The new banner for our GitLab repo. See you next week!