This Week In Veloren 124

11 minute read14 June 2021

Authored by AngelOnFira

This week, 0.10 released! We hear from @Slipped about caves, plugins from @zesterer, and other improvements by @aweinstock and @juliancoffe.

- AngelOnFira, TWiV Editor

Contributor Work

Thanks to this week's contributors, @AsumFace, @xMAC94x, @aweinstock, @SpecificProtagonist, @juliancoffee, @Pfau, @Yusdacra, @Kisa, @XVar, @AngelOnFira, @Cr0ss0vr, @Slipped, @zesterer, @Capucho, @jvck10, @Scott, @tygyh, @Sam, and @Christof!

This past week, 0.10 released! At peak, there were 118 unique players online. Read more about the release in the writeup below.

@Nomagno has been pondering the feasibility of a partial WASM port of veloren-server, veloren-common, and veloren-client, and hopes to put some work into it in the future. @Scott adjusted most of the NPC's hitboxes to better fit their models and lowered a lot of the smaller creatures' health values to make early game easier.

Crafting exp with a different colour and an extra symbol

During the debugging of the meat MR, @aweinstock made a Graphviz generator that processes the recipe book:

@Snowram added some new NPCs, including a roc NPC with a new tornado summoning attack. Look out for it in the sky! @Slipped merged some rebalancing to correct things after the armor MR made everyone stronger. Hopefully, now we have better progression barricades for the tiers of monsters that drop the materials you need to advance through the crafting system, by making lots of stuff stronger. And we have a basilisk petrify attack so that's pretty rad.

@juliancoffee worked on loading EntityInfo from assets. EntityInfo is builder-like structure that is used to populate chunks and then server spawns creatures from that. Now you can describe body (only random for now), loadout, skillset, name, loot, and weapons in asset and then just load them where you need them. Currently, it works only for single entities (so if you need to spawn multiple entities, you are using vector for this) but this is base for things like loading whole dungeon crowd from asset where you can specify enemies for each room or describe what pack of animals will be spawned somewhere in overworld.

Caves by @Slipped

One thing that became super clear once we decided to start adding more ores to caves was that they were due for a tune-up. They took very little advantage of static lighting, weren't very deeply tied to progression and their difficulty was a bit all over the place. However, their actual structure set up by @zesterer was amazing and we were completely underselling that. Caves break down to 4 points of hierarchy:


This is the existing canvas. Caves can be super vertical, super wide or frighteningly narrow. They can have platforms, glider obstacle courses, and a ton of other things. No changes were needed for the lowest level hierarchy, it's already great.


So far, caves have had some really cool stalactites for structure. We needed more of that. First was color, there are now noisy colored floors and ceilings in the caves, which helps break up the old gray. New caves also have different structures depending on depth. Once you enter, there are ridges, which are huge white scaffolds that hold up the ceiling of the cave. They cover some percent of the ceiling at specific intervals of the cave depth, which creates clean structures in narrow hallways and very chaotic bands of scaffold in bigger rooms.

As you go deeper, we trigger the stalactites. Finally, at the lowest levels we trigger pits, which can go 30 blocks deep, along with veins. Veins store the best ores in the game, so look for orange sand and you can pickaxe through for the ore deposits at the bottom.


Sprites are the next level up the hierarchy. A few big changes here were making sprite spawns width dependent so that they mostly spawn closer to the walls, adding ceiling sprites, and adjusting the sprite glow color to be less fire-like and more neutral. Thanks to the artists, we have different layers which use mushroom, crystal, or orb sprites as you go deeper, and caves are very lit up now. We also added dripping particles from the ceiling.


Enemies are on the top level of the hierarchy, and got rebalanced to tune difficulty. On entry, things are still passive so new players can gather basic ore. Next, you hit moderate enemies like asps and salamanders, to give scales and protect the iron. After that you reach the cobalt/coal layer, protected by basilisks and firedrakes, upping the difficulty. Finally, the bottom layer has ogres, cyclops, trolls, and others protecting gold, silver, and bloodstone, the most useful ores in the game.

The next plans are to start getting into biome-specific cave themes, so look out for that!

Plugin Tutorial by @zesterer

I finally got around to writing a tutorial for the new plugin API. It's worth noting that the plugin API is still under heavy development, but I'll try to update the tutorial regularly to reflect changes.

The tutorial takes budding modders all the way from setting up the project to packing, playing in the game, and demonstrates a series of API features. Hopefully, this is going to accelerate activity around plugins and help us push the API to the point that it becomes viable for community modding.

Mining and movement fixes by @aweinstock

I added a mining skill tree, which gives XP when mining ore (and not from combat). Skill points in the mining skill tree can be spent on mining faster, and on a chance to gain extra ore and gems when mining. @Scott made the icons for the skill tree, and @Pfau helped to fine-tune the UI. @DrDystopia also helped by refactoring voxygen::hud::diary, which made it easier for me to add the new skill tree to the UI.

I also made it so that character abilities that apply forced movement (primarily leaps and rolls) temporarily disable entity-entity pushback. This fixes a bug with axe/hammer leap where you couldn't deliver the hit because you'd be pushed away on landing from the leap before swinging the axe or hammer. This also makes it possible to roll through creatures, which means that it's now possible to escape being stuck in a corner by a minotaur.

0.10 Release Party by @AngelOnFira

With the release party last Saturday, lots of telemetry was recorded. In comparison to the previous release, 0.10 went a lot smoother. Some of the devs got into a voice chat to talk about the game's development, and this was streamed to Twitch. Check out the recording below!

One of the primary metrics that we can best use to determine server health during releases is the tick time. In the case of this release, we saw healthy tick times of between ~40-50ms. Ideally, it would be best if they were less than 33ms, as this gives the target tick rate of 30 ticks per second. During previous releases, we saw it go as high as 100ms, which would tend to snowball while trying to catch up on work from previous ticks.

For the release, we used a 32 core dedicated server from Hetzner. This time, we made use of the new AMD CPU option, which turned out to help a lot.

As you can see, during the release party each core never really went above 30% usage. This shows that although we can make use of parallel processing, we're still limited by how fast the main thread is working. A key point of future optimizations will be to distribute work across the cores more efficiently.

Tests were done on both the 32 core AMD and Intel chips that could have been provisioned for the dedicated server. Hetzner won't tell us the exact chip models that are used "for security reasons", so instead we ran some of our own tests. The tests were run with sysbench, and although they don't exactly represent more complex problems than just what can calculate primes better, it still showed us some useful information:

Overall, the release party went quite well. We definitely want to do a bigger push for the next release, so we can hopefully blow past our record of 133 players on the server at once!

Balance and UX improvements by @juliancoffee

I was recently working on some balance and UX improvements. This includes slightly buffing the bow, staff (especially at lower stages of the game), sword, and nerfing the hammer. Dungeon enemies were also nerfed; primarily Tidal Warrior and NPC dashes. Also, the bow zoom is less annoying now. /kit and /skill_preset were also updated.

Here is the changelog of weapons:

!!! DISCLAIMER: these values are just coefficients, which is then multiplied by weapon power, weapon kind, skills, and other coefficients !!!

- Bow M1:
  * charge_time reduced from 1.2 to 1.0
  * damage range was changed from [20; 100] to [5; 125]
  * regen range was changed from [20; 140] to [5; 125]
  -> bow now shoots faster

- Staff M1:
  * regen was changed from 50 to 60
  * explosion effect was reworked to more smooth damage distribution over the area
  -> you now can get stamina to roll if you hit two enemies. You also do more AoE damage on lower stages of the game when your explosion radius isn't that great

**Tidal Warrior**
  * damage reduced twice -> you have more chances to not die when doing melee
  * much longer reload time of wave
  * wave now pushes you away of totem, not upward -> orcs aren't dying from fall damage while fighting Tidal Warrior now

- Spear dash (T0-T4 enemies)
  * damage range was reduced from [60;160] to [10;90]
  * poise range was reduced from [45;45] to [0;25]
  * recover duration was increased from 0.5 to 0.8
- Animal Dashes (Lions, Bonerattlers, etc)
  * recover duration was increased from 0.5 to 1.0
  -> you now can move after getting dashed so it's less likely you will get damage twice

- Bow Zoom:
  * starts with 50% of charge
  * more lite zoom at the end of charge
  -> aiming with bow M1 is now easier
- `/kit` command
  * new `tier-5` kit with yellow armour and tier-5 weapons.
  * kits from `tier-0` to `tier-4` were updated to match new armour update.
  * new `endgame` kit with cultist and legendary weapons, cultist rings, and gem of lesser protection
- `/skill_preset` command
  * temporary `middle` preset with random copypasta from `max` :P. I plan to add skill presets for each tier in future.

Bug fixes

Damage from melee weapons is now produced in the middle of swing animation, not
at the start. This solves a bug when you can hit your enemy without swing and roll
away. Now you still can cancel swing animation, but you won't hit your enemy.

Melee Balance changes
- Sword:
  * first stage buildup is boosted from 0.15 to 0.1
  -> you start your attack faster
- Hammer:
  * base poise damage is reduced from 25 to 20
  -> it's less likely hammer can stunlock enemies

Will you please listen? I'm not the Messiah! ( See you next week! )