This Week In Veloren 94

9 minute read16 November 2020

Authored by AngelOnFira

This week we have a lot of content. Lots of work has been done in preparation for the upcoming 0.8 launch. @zesterer goes over lots of the work he's been doing on many systems. @imbris talks about the transition work from conrod to iced.

- AngelOnFira, TWiV Editor

Contributor Work

Thanks to this week's contributors, @Sam, @Knarkzel, @imbris, @xMAC94x, @zesterer, @XVar, @Treeco, @JasonLee, @Pfau, Yusdacra, @CapsizeGlimmer, and @Slipped!

Veloren will be speaking at MiniDebConf this weekend! It will be at 18:30 GMT+0 on Sunday, the 22nd of November. You can find out more about it here!

@Eden made a new song for the ocean biome. @Knarkzel fixed a bug where you could spam special attacks on certain weapons while out of stamina. @Snowram added some new animals and made overworld spawns saner with the help of @zesterer's new spawning system. Hopefully, this should be ready real soon. @Snowram also made a slight correction to NPC stats so they don't fire beams from their chest or their crotch. @Gemu modeled the animals that @Snowram put in.

@Christof developed a hotfix for broken persistence, which then got replaced by a much better solution the next evening. @Christof had a lengthy discussion with @zesterer about the complex economic simulation in Veloren. @Christof hopes to make NPCs at least talk about local prices and stock amounts in the next few weeks.

@Sam moved all weapon abilities from code to ron files, which allows for them to be more modifiable as tweaking values won't require a complete recompile. @Sam also began work on skill trees. There was already a skeleton of a system implemented by @XVar which allowed for multiple skill groups, and for skills to be associated with each. To that, @Sam made it so that XP is properly split between skill groups, and so that skill points are automatically earned when reaching a threshold of XP.

@XVar continued to work on the modular inventory/loadout feature and got sidetracked into refactoring a lot of how Loadout is used externally around the codebase. @James and @Slipped worked on a bunch of cool animal attacks and AI for them.

@James also added a biome specific music system which can weight songs based on their likelihood to play in a given biome. They made it possible to have cave and dungeon specific songs and added a bunch of ambient SFX by emitting SFX from blocks. They removed the SfxEvent bus in the ECS in favor of simply playing the SFX from voxygen, where the code is already, and finally added a wind SFX system.

0.8 Release Schedule

Veloren will be releasing 0.8 next weekend, on the 28th. To prepare for this, the project will go into code freeze on the 24th. Keep an eye out for the stability testing; we need lots of people to find potential bugs in the version we'll release!

2020-11-24 18:00 Feature freeze - At this point no features will be merged
2020-11-25 18:00 Public Stability Testing with many people
2020-11-26 18:00 NEW - relaxed 0.7 throwback event
2020-11-27 18:00 Fixes freeze - Nothing will be merged except gamebreaking fixes
2020-11-28 09:00 Final Build
2020-11-28 12:00 Prepare a Release Server
2020-11-28 18:00 Release Party

Veloren Screenshot & Trailer Competition

In this upcoming event, we will be reaching out to the community to create a trailer for the release of Veloren 0.8! The idea is simple, the winning video will be used as the official trailer for the game. If recording or video editing isn't your strong suit, don't worry! We will also be running a screenshot competition with multiple categories alongside it. The winning trailer and screenshots will be used to promote the game. More details on the event to come in the following weeks, so stay tuned!

Chest of Goodies by @zesterer

I've been working on the initial implementation of rtsim, a server-side component that allows tens of thousands of NPCs to be simulated simultaneously across the world without being within the player's view distance. While the initial implementation's use is quite simple (just a few thousand travellers walking between sites in the world) in the long term I'm planning to use this for economic simulation, demographic change, simulates wars, battles, migration, and more.

I've also been doing more work on the cloud shaders. Part of that included implementing upscaling so players with less powerful computers can run the game, albeit at a lower internal resolution. I've also been implementing HDR rendering. It also allows players with slightly better hardware to render the scale at a fractional higher resolution, allowing them to get some of the advantages SSAA with a smaller performance hit. Additionally, I've reimplemented the Level of Detail 'fake voxel' effect in a way that much more closely fits patterns visible on actual voxels and reduces the artifacts that previously appeared. I've also added a secret feature for 0.8.

I've also been working on the game's map with @Pfau. Together, we've got it to the state where sites are now shown on the map as icons that can be clicked rather than the original 'brown spot on LoD'. In worldgen, I've made adjustments to the game's tree spawning algorithm. It now uses a Whittaker map to determine appropriate tree biome placement, something that generally results in much more interesting spawn patterns, along with adding a new birch forest kind.

I've also removed the old Snow Pine forest kind and replaced it with fully procedural snow. This means that trees can be partially covered with snow at the borders of a snowy area and also that any kind of tree can have snow cover (this is often visible on oaks and birch trees that are close to the tree line). I've also added procedural sand dunes to deserts to improve their look and am working on adding soil undulation in forests where tree roots would bind together soil, causing the ground to be less smooth.

Iced Transition by @imbris

I finally merged the first step of the iced transition. A core part of the MR is a custom iced renderer built on top of voxygen's rendering abstraction. This gives us flexibility by allowing us to control the details of how the UI is rendered. It also makes it easier to implement novel custom widgets that might need special rendering code as well as allows us to control the types used to specify fonts and styling.

Furthermore, by going through voxygen's rendering abstraction, we don't have to worry about whether the UI renderer is compatible with the rest of the rendering stack. This allows transitions to the voxygen rendering backend (e.g. to wgpu) without having to switch up which crates we are using for the UI. Much of the code for the iced renderer is based on what we were using to render the conrod UI primitives (except with iced we now get to define our own primitives).

This MR converted the main menu and the character selection screen UIs to using iced. The HUD UI code continues to use conrod as it would be a fairly massive undertaking to convert especially all at once. My current plan is to have an incremental conversion of the HUD by setting up a system to route events to the two UI systems based on which one is currently focused and/or under the mouse with one of them being drawn on top of the other.

In the process of switching the main menu and char selection to iced some key fixes and improvements were made:

  • Passwords are no longer limited in length by the size of the input box
  • Tabbing between login fields was added
  • Language selection was added to the main menu

This week I also merged several fixes/improvements:

  • Fixed an issue where projectiles created with speeds > 80 m/s would appear to veer up from the aimed direction when aiming downwards. Code which limited the negative z velocity after applying gravity would cause the direction of the projectile's velocity to change. I switched this to just make gravity not be able to increase the negative z velocity past this limit while allowing existing non-gravity related velocities to remain unclamped. Eventually, we may add a global velocity limit which could replace this specific limit here, we could also look into tweaking air friction to produce a suitable terminal velocity (although care will need to be taken to ensure that this interacts nicely with other stuff like jumping physics).
  • Made changing the UI scale in-game propagate properly when going back to the main menu.
  • Fixed a panic related to a invalid aspect ratio when minimizing the window before the game starts up by adding the same aspect ratio validity check used by the Camera when changing the aspect ratio to the function which initially creates the Camera.
  • Made voxygen save the currently selected character for each server so that the character will still be selected when you return to the char selection menu instead of having the first on no character selected. Also made voxygen automatically select newly created characters.

Something special in the sky. See you next week!