Skip to main content

2022 May: 666 Bugs Fixed & P2P!

Β· 7 min read
Gabriel T. Nardy

Bugs obliteration, P2P Servers, Better Sync & more!

Bugs shall not pass!​

In this month, we proudly achieved the incredible mark of 666 issues closed (fixed and/or resolved) in our Issue Tracker!

You may say it doesn't count because some of them were just duplicated, invalid or even were closed to move to the Feedback Hub, that's okay. But we are not even mentioning our internal issue tracker which we already had another 500+ issues closed: 😁

Only in May we got 60 reported bugs fixed:

This is a special indicator that demonstrates that all your suggestions and ideas are read and given due attention and ALL bugs are fixed! Thank you all for contributing to that, in special @Voltaism and @Ayanokoji which really do the tap monkey job and find the most unnoticeable bugs! πŸ˜‚

tip

You can find the endless list of all the bug fixes in our Discord Changelog Channel:

New Feedback Page​

Recently, we've launched a new feedback page to collect ideas & suggestions. Before we were doing it on the GitHub's Issue Tracker, but now we have a dedicated platform only for ideas and now the GitHub is not only for bugs.

This new platform is powered by Canny, where you can add a new suggestion and vote for others. Feel free to sign in and upvote the best ideas! It is extremely useful for us to know if a feature is something really required so we can give the right priority to that!

It also provides a roadmap tab which groups all accepted/planned and in-progress ideas! The old Trello board is not going to be used anymore.

Check it out! πŸ‘‰ https://feedback.nanos.world/

P2P Servers​

Something that is fundamentally important is the ability to start a game from menu to play with friends, without worrying about dedicated servers or forwarding router ports stuff.

And now this is possible thanks to the new P2P servers option! This allows you to open a server in P2P mode, which relays all traffic through the Steam Relay Servers and establish a connection between the server and client with the security of none of those knowing each other IPs and so on! 🀯

For this to happen, we had to re-implement our file transfer system (when connecting to a server) which used an HTTP connection for this purpose, and now it can use the built-in connection system to to transfer them! (HTTP transfer is still faster than using the internal sockets, although on P2P connection this is the only possible approach).

note

Transferring files through HTTP is still faster than P2P. We're working to improve this performance as well!

When a server is opened as P2P all transferring are redirected to use the built-in transfer system. In the other hand, opening a server as Dedicated Server will use as it is today: small files through the built-in transfer system and big files through HTTP.

Finally, we are introducing two new "types" of servers: Dedicated Server and P2P, this is just a configuration you can set in the Config.toml or as a parameter --dedicated_server 0/1 to enable it or not. Starting a server through the menu will start it as P2P by default unless explicitly set in the advanced tab.

When starting a P2P server, the Steam Relay Server will generate a new temporary random "fake" IP address which will be used by others to connect to your server. Without the need to forward router ports!

As the connection is established through the Steam Relay Servers, even connecting to localhost all traffic will pass through the closest Steam Server of your computer, meaning even on localhost your ping will not be zero. If you want to test or play alone, we recommend start it as dedicated server.

New Sync Interpolation​

Since UE 5.0, some interpolation started to get weird/flickering when syncing location/rotation with the clients. To fix and improve that, we managed to integrate all our network to the Unreal's build in Physics Replication system!

This system works by being fed by network snapshot packets and handling all interpolation, extrapolation, desyncs and high pings automatically! 😎 It greatly increased the quality of the physics sync!

Currently, all physics entities (Props, Weapons, Melee, Grenade and Vehicles) are simulated using this new system. Other entities (or non simulating physics) are still using the standard method of interpolation which is totally fine and suitable for that.

We are still looking to include Characters in the new system. As they use a separate movement system, it requires a different approach and special attention. πŸ˜‰

New In-game Console​

We've extended our in-game console to provide a new raw visualization. As Unreal Widgets don't provide a better approach to have both colored texts and the ability to select them, we've decided to add a new tab which converts the console into raw text, which you can freely copy them to the clipboard:

Also we added a button to open the log file directly! πŸ˜‰

Noteworthy Changes​

Network Debug Stats​

In addition to the Network Debug drawings in the world, we've included a new screen debug tool which shows network stats information in the screen, it will be displayed if you enable Draw Network Debug in the settings -> debug.

Outline​

Now you can also enable an Outline effect in actors by :SetOutlineEnabled() on it! It works like :SetHighlightEnabled, and you can customize it's color and thickness as well!

We've already replaced the Sandbox Physics Gun effect with this too!

Animation Settings​

We started implementing a new interface for setting animations parameters on entities, it now supports a new parameter play_rate which you can define directly in the :SetAnimation...() of entities.

note

Currently this new interface is only available to Weapons. Soon it will come to all entities!

Sounds Settings​

The same as Animation Settings, but for sounds as well! Now you can define per-entity-per-asset common sound settings on it, it supports volume and pitch parameters:

note

Currently this new interface is only available to Weapons. Soon it will come to all entities!

Internal Control Rigs​

With our efforts to modularize and remove some internal dependencies (mainly related to animations and animation blueprint), we started creating some Control Rigs to replace our old approaches of procedural animations (before they were hardcoded in the Animation Blueprint, and now they are split into several Control Rigs), which also provides better performance and modularization!

We already created and are using Control Rigs for Driving and Aiming, which provides procedural animations for aiming with weapons and for driving wheels.

Sandbox Improvements​

The sandbox game-mode got some improvements as well, such as new icons for the tools:

As well improved PhysicsGun & Resizer linear scaling to have a better handling, a reworked system to attaching entities with the tools (before we were having wrong attach locations due the ping, now the client-side relative location is taken into account), and of course we've got several bugs fixes!

Also we got a PR from Voltaism which added the option to respawn and freeze the time through the Context Menu.

New Docs Tutorials​

Custom Weapon Reload Animations​

We've created a new tutorial page for adding Custom Weapon Reload Animations. This was possible due our efforts to modularizing more and more the game. Reload animations are special because they trigger gameplay actions during it's execution, which needs to be configured inside the Animation Montage!

Conclusion​

With the achievement of implementing P2P servers, we managed to make immensely easier the ability to play and test with friends! Now everyone can start a server and play with friends immediately, without the need of port forwarding and so on! πŸ₯³

Also, with the introduction of the new Roadmap & Suggestions, we are moving even more towards in the feedback-driven approach, so please put all your ideas in there, and vote for the ones you like! We really consider that to take the next steps!

Ah, it's worth mention we got a hit tweet 😁! If you don't follow us yet, please do that now!

Foo

Thank you for more this month, you're loved! πŸ’