Passer au contenu principal

· 7 minutes de lecture
Gabriel T. Nardy

CEF, Settings Menu & several Improvements!

After a long time and after innumerous requests (and death threats), I finally announce the big surprise of the integration with the Framework CEF (Chromium embedded framework)!

Chromium Embedded Framework

For those who are not familiar, CEF is a framework for embedding chromium-based browsers in other applications. Roughly our WebUI.

Until then we have been using our dear Ultralight, which at first was very promising, but as it is a proprietary library and unfortunately the dev ended up devoting less time to the project, we started to get harmed by missing features or unsolved bugs.

And since we can't be dependent on that, I made the decision to try to integrate the much consolidated framework CEF. But it was not an easy implementation at all. CEF uses various sub-processes to work, which I figured out I would have to implement on my own. I got several chills while remembering my Operating Systems classes from College. 😜

In the end, I managed to create a totally proper integration, including a build automation to always get the latest CEF safety updates on D+1!

Processes

But since not everything is flowers, there are advantages and disadvantages in using CEF. Due to its multi-process characteristics, on the one hand we have everything running in parallel (+++performance), on the other we have the drawback that rendering will always be 1 or 2 frames late, which may cause an "input lag" effect, but in practice it is not a big problem and is almost imperceptible.

CEF uses sub-processes, which means that each WebUI will run totally independent of the game and other WebUIs, making usage of 100% of computational power with great efficiency!

And that means now all communication is asynchronous. Thus, all the events between Lua <-> WebUI are also asynchronous and this is a paradigm that has changed, which should not be a problem in most cases. But this is an "effect" from having parallelism.

Another thing that changed is that we will have several sub-process starting and closing (like Chrome 😝) while playing nanos world. It depends on the amount of spawned WebUIs and is automatically managed by CEF.

Sounds

Another thing we gained was the Sounds! I have added a new method to the WebUI class: WebUI:SpawnSound() that spawns a Sound object (100% customizable as usual). In other words, you can spawn as many 3D sound entities and even set up a 7:1 cinema with them! 😆

Performance

As said, we gained a lot of performance. Surely I will continue to improve the implementation and boost it even more over time, but we can already see great improvements! Watch this video of me spawning dozens of WebUIs at the same time and rendering them on 3D objects in the world without a single stutter:

How many videos can it handle at the same time? YES.

Debug Tools

It is now possible to inspect your WebUI directly by third party tools, such as Chrome Developer Tools for example! 🥳

Migration

Also, another good news: this migration will have 0% breaking changes! No script will need to be updated to keep working with CEF! 💃

Obviously some things have changed, especially in relation to CSS. In WebKit browsers (as it was before) some styles behaved differently from Chromium ones. Some layouts can appear ill-adjusted (e.g. different scroll bars) now.

Settings Menu

Finally our Settings Menu received the UI Update too! I recreated it from scratch adapting to the new interface style!

Video Settings:

KeyBinding Settings:

We got a new setting tab for House Keeping, where it will be possible to clean up cache files, logs and other files from your installation:

We also had the addition of a new setting: Force no Custom Loading Screen which disables server's custom Loading Screens.

Stats & Achievements

This month I devoted a time to adjust our stats and achievements. And the new Profile Stats tab have been implemented:

I created some new Stats such as swimming or driving, and also I created the concept of "Achievements Ranks", adding levels bronze, silver and gold to them. Let's see how this model stands out. 😉

A great improvement in the notifications of achievements has been made: now they are shown immediately when reached! (Before they were only synchronized once per minute, delaying the notifications).

New Achievements Ideas

I created a new page on Canny to receive suggestions of new Steam Achievements! Please take a look, vote and add new ones! I will always be integrating new ones into the game!

https://feedback.nanos.world/achievements

Vault Changelog

In Vault side, I implemented the Updates Tab for the items, where you can see all changes in their updates!

Caching and Loading

A great improvement I made was the refactoring of the caching system. We already had a cache system that cached the loaded assets in the client side, so then the file validation was instantaneous when re-connecting to a server.

I refactored this system, and now all cache files are in an external folder (inside Packages/ and Assets/ called .cache/), which even facilitates their cleaning.

In addition, when opening a server, every time the assets were loaded and cached in memory, which was really slow. And with this new system, they are still loaded but much faster, the system intelligently identifies changes and only re-caches the files that get dirty since the last load.

This will greatly improve the opening speed of the servers.

Docs Improvements

I took some time to update some pages here in the docs.

  • Quick Start is now even more quick and easy!
  • Server Installation was reworked and split and now is straight to the point.
  • Assets & Modding category got a rewrite so the guides are more linear and have less ambiguity.
  • Static Mesh was completely rewritten and now have lots of new information and tips!

I will continue to improve the docs aiming to reduce redundancy and to make it even more simple for modders and scripters to hop in! I see the docs was starting to get a little big confusing due some duplicities and some tutorials in weird places, that will be improved too!

Notable Changes

Some smaller but notable changes.

WebUI 3D Interaction

This is not totally related to CEF but I took the moment to integrate methods which allow injecting events into WebUI and create a Remote Control for it: 😜

It uses traces to retrieve the UV location from the hit on the TV mesh, then redirects it as WebUI events.

Packages Maps

I added a new setting to Packages: compatible_maps to make pair with the map settings: compatible_game_modes. Both settings are united to display compatible maps in the New Game popup when starting a new server.

Discord FAQ Channel

Our Discord got a new FAQ channel, which contains the most common question about the nanos world. More will be added as the time goes!

Unreal 5.0.3

I've updated the game Unreal Engine version to the last patch 5.0.3 containing lots of engine bug fixes. This update had no breaking change.

Conclusion

This was a month of great advances, several bug fixes and structural improvements in nanos world. We further evolved our IU and solved the WebUI problem that had been haunting us for a long time.

I emphasize the importance of creating and supporting ideas at https://feedback.nanos.world/. It is very important to have them officialized that to know your most request demands! Here's July Feedback summary:

Thank you a lot! You are the best!

· 10 minutes de lecture
Gabriel T. Nardy

Birthday, Rebrand & UI Redesign!

nanos world Birthday 🥳

First of all, we would like to announce that this last week was the birthday of 3 years of nanos world under heavy development! Of course the idea of creating it is older than that.

It has been already a long time since we started working on it, and it has been a time of much learning for me and a lot of progress for nanos world!

I would like (again) to thank you all for the great support over all this time! I really love working on nanos world and love seeing you playing, using and creating on it! Making nanos world has become one of the great passions of my life 😍!

Rebrand

nanos world always has been about multiple worlds, more specifically YOUR worlds which you can express yourself and create the universe you always wanted to.

With the progress of the game development, it has become necessary to evolve in some aspects. When it comes to marketing, the main objective is to deliver nanos world to the right potential players and for this to be possible we had to rethink some things, and one of the things was to recreate our visual identity!

Our old identity lacked in some aspects regarding discoverability and professionalism, so we decided that it was time to make a new version of it! We know that it is possible that this is not yet the definitive version and it will be improved over time, however it's already a big step towards our short-medium term goals!

For the logos we aimed to have something more minimalistic yet professional.

Since nanos world represents a wide range of game-modes and diverse worlds, we decided to create a new version of our current logo, with:

  • 😮 A flat outlined style.
  • 🤯 New title and the subtitle design & fonts.
  • 😶‍🌫️ The ring became an infinity symbol bringing the sense of unlimited.

New Cover Art

To express the idea of diversity, we are creating a new cover art to be used as Capsule Arts on Steam and of course to contribute to the visual identity!

So we idealized the creation of a living planet with many things happening representing the variety of game-modes in nanos world, as a Sandbox game should be.

This will be a huge image (8-16K), which each time you zoom in you will find something new (the full size image will be available in-game and on the website™ 😉)!

note

The Cover Arts are not final and are still in development by the artist™, some adjusts will still be made for the final version!

Some WIP Capsule Art sketches:

tip

Credits to Pablo (PG Ninja) for creating the Art.

Motivation

A very important factor, even within Steam, is how your game promotes itself. And this happens due to two main factors: Capsule Arts & Steam Tags.

The Steam Tags determine whether or not your game will be displayed to the ones browsing Steam store. And the Capsule quality determines whether they will click on your game, Capsule Arts are the first thing seen by the shoppers, they appear in store browser list or when opening the game page.

Our current Capsule is this tedious screenshot with a simple text overlay 😅:

This is even extremely contraindicated because it shows amateurism and makes those who browse Steam unconsciously ignore it, in addition to the fact that the image does not convey the genre of the game, making those interested in sandbox games do not click on the page.

Then for this first version of our Cover Art we wanted to make it a little bit more professional and that at least minimally communicates the "Sandbox" genre.

Inspirations

Our idea was to create an image of a living planet with various things happening, representing the variety of a sandbox game, so we got some inspiration from game arts and images that represent this idea, like the game Universim and some found stock images:

Sketches

Our creative process went through some sketches made in Paint, until reaching the current on-going version: 😜

In addition to the rebrand, we worked hard on redesigning the main menus of nanos world!

First of all, we would like to thank everyone who gave ideas and suggestions for the new design, especially Falaxir who created several threads of ideas related to it, which served as extreme inspiration for us to develop this new version!

Motivation

The main menu is the gateway for all players and the first impression when playing, it needs to be intuitive and to encourage the right actions to be chosen.

We take into account the following pillars:

  • 🎮 Players First: It must take into consideration the common player as first, those who will choose a game-mode or just connect to a server to play and have fun.
  • 🐣 Noob Friendly: It should be extremely easy and intuitive to start a new game or adding custom addons to it. Even those who don't know anything about servers should be able to easily start a game to play with friends.
  • 🤏 Less is More: The User Experience must be the best possible. Buttons and Navigation must be intuitive without need of explicit tutorials or texts.
  • 🍃 Fluidity: New pages must open immediately, no stutters should happen, filters should apply changes instantly, no desync between pages and data should happen.
  • 🥰 Cozy Place: It must be welcoming, players must want to spend time inside the game, they must want to open the game to see what's going on.
  • 🤩 Motivates Modders & Scripters: It must encourage content creators to create and upload to the vault.
  • 📰 News should be exciting: Updates of vault items and even the game should be pleasant and exciting to read and to update.
  • 🔍 Facilitated Discovery: New game-modes and content should be found easily, as well as the best ones should be praised.
  • 🆕 Expand the Possibilities: The new menu should allow new horizons, it should be easy to integrate notification systems, lobby, favorites, etc.

Home Screen

In the old Home we had friends, achievements and news divided into separate tabs:

Before long we present the new Home page: a HUB where you can view a summary of your friends, your achievements, favorite servers, vault news and game updates!

note

Some buttons and features are not yet enabled and will be available soon™. This initial version was aimed to contain all old features and some more 😉.

Vault

Our Vault was basically just for downloading/managing additional content, where it was possible to browse the store/remote and your local content and see a brief information about them:

Now it has been redesigned for a completely new User Experience, providing filters and a new layout:

The new vault navigation, in addition to continuing to provide quick install/update/uninstall buttons, now also provides a quick Update All button, which updates all outdated items installed at once. Not to mention the improved performance and the interconnection with other pages and systems!

tip

This new version has several optimization improvements, such as disk images caching or virtualized list visualization 😁!

Vault Details

We've completely rethought the Vault concept and created a new details screen, which will open when a Vault (or New Game) item is opened:

The purpose of this screen is to bring all possible information about the Package or Asset Pack: description, screenshots, updates, version, size, reviews, dependencies, and now the possibility of rating and soon™ configuring them through the interface.

You can manage your review, the installation and updates on the right side!

And when selecting a game-mode, a Host New Game button will appear in the lower right corner, this will be explained better below on this blog.

New Game Screen

On the old New Game page, game-modes were separated into two different lists: installed and local, where it was possible to select one of the game-modes (or the "none" one) to start a server.

In the new design, the flow of New Game -> Selecting game-mode -> Play remains. But now we've got a new interface and filters, also it is now possible to order by popular, recently updated or top rating game-modes, and it is possible to filter them by name or by the filter toggles.

Also, now this flow allows you to start a new game even without having the package installed, removing the need to browse and install from Vault before!

When selecting a game-mode, the same detail page will appear (just like Vault). And by pressing Host New Game, a Server Setup popup will appear:

We created the concept of "single-player" game, which actually under-the-hood is the same server but configured to allow only one person and not announced at Server List.

We also improved the selection of additional Packages/Assets Packs, making the choice more functional and intuitive, you are now able to select multiple at a time before closing the selection popup.

The main idea of this new flow is to allow a new game to be created quickly, with less information required right away.

note

Soon™ we have plans to integrate a new concept of "game-mode" config, which each game-mode can setup it's own configuration before starting!

Find Servers

Find Servers's old interface was quite simple:

The new version got some improvements aesthetically and now we got custom filters and improvement of the buttons display (they only appear when hovered):

And now it is possible to favorite ⭐ a server!

Écran de chargement

The loading screen was not left out! We reformulated it so you can have a real notion of the loading progress. Now besides the background color lightening as loading is near the end, there are 4 bars in the lower left corner showing every step needed for the loading to finish!

note

It is planned to have a further improvement on the loading screen, as now when starting a New Game we still don't have "much" information on the server startup progress.

Profile & Friends

We also got dedicated screens for your profile and to see your friends. In this screen you will be able to see information from someone or to follow him into a server.

By clicking on your own profile, you will™ have access to additional tabs like Achievements, Stats and soon Account Config as well!

Conclusion

And this was just the beginning! You know that our evolution always has been very organic, adopting and adapting suggestions and new ideas to make nanos world the best modern sandbox experience ever! And that's what matters most for us!

If you have ideas or suggestions for improvement for both Logos and UI, feel free to make them in our Discord, we will be all ears for you!

Also, if you have content uploaded to the nanos world Store, please update it's description, screenshots and also your Team (now it supports image 😉) so it get prettier in-game!

We will push this blog updates to the game and all official pages as soon as possible in the next days, stay tuned!

Thank you for the support and dedication for this month! 🥰

· 7 minutes de lecture
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.

Améliorations du sandbox

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! 💝

· 9 minutes de lecture
Gabriel T. Nardy

Unreal Engine 5 est maintenant le moteur de jeu officiel de nanos world !

Unreal Engine 5

Nous sommes excités d'annoncer qu'Unreal Engine 5 est désormais le nouveau moteur de jeu de nanos world !!!

C'était un mois intense remplit de mises à jour, d'améliorations et de corrections de bugs pour atteindre une version assez stable de nanos world. Nous sommes très reconnaissants aux testeurs qui ont contribué à tester la stabilité, la migration des assets et la découverte de bugs !

Il convient de mentionner que même si UE5 "stable" a été officiellement publié par Epic Games, il y a encore quelques bugs et améliorations qui doivent êtres fait, à la fin de ce blog, nous allons lister tous les bugs connus que nous avons déjà trouvés sur UE5 et que nous attendons une correction officielle.

Avec cette version, nous visons à avoir la même expérience et la même stabilité qu'avant sur nanos world. Nous allons introduire de plus en plus de fonctionnalités Unreal Engine 5 dans les prochaines mises à jour à partir de maintenant, en leur accordant la stabilité et l'intégration appropriées.

Nouvelles fonctionnalités UE5 exceptionnelles

Voici quelques nouvelles fonctionnalités intéressantes d'Unreal Engine 5 qui seront très utiles pour les créateurs d'assets sur nanos world !

Nouvelle interface

Unreal Engine 5 apporte une suite d'améliorations à l'apparence, la sensation et l'efficacité de l'interface utilisateur, créant un espace de travail moderne et amélioré pour tous les utilisateurs.

C'est un espace de travail bien meilleur et agréable pour les créateurs de mods et d'assets !

Outils géométriques

La création de meshes et de maps a été encore plus facile grâce aux outils de modélisation et meshes intégrés dans l'UE5 !

Quixel Bridge

Le plugin Quixel Bridge pour Unreal Engine vous donne un accès complet à la bibliothèque Megascans à l'intérieur de l'Unreal Editor. Vous pouvez parcourir les collections, rechercher des assets spécifiques et facilement ajouter des assets à vos projets Unreal Engine.

C'est intégré avec UE5 ! Il suffit de glisser-déposer et vous avez l'asset !

tip

We are actively looking for a way to improve the Quixel Bridge pipeline into nanos world.

Chaos Destruction

The Chaos Destruction system is a collection of tools that can be used to achieve cinematic-quality levels of destruction in real time.

We've managed to already integrate an initial version of it with nanos world, you can spawn any Geometry Collection as a StaticMesh, check it out!

tip

We are actively working on improving even more the integration with Chaos Destruction entities!

Lumen

Lumen is Unreal Engine 5's new fully dynamic global illumination and reflections system.

It provides a software-calculated Ray Tracing methods! This is a new very efficient technique for achieving Global Illumination, but it still has a cost. In our tests Lumen in Epic quality hit 50% of the FPS, and 25% on Medium. You can enable/disable it in the Game Settings.

Lumen also provides a Hardware Ray Tracing method for compatible GPUs, this is also now a setting in the Game Settings ;)

DirectX 12

Now nanos world comes with DX12 as the default RHI. Some new features such as Nanite, Lumen, and Virtual Shadow Maps run more efficiently in DX12 than in DX11.

You can switch from DX11 <-> DX12 in the Game Settings. *DX12 is required to use Hardware Ray Tracing.

Much More

You can see a list of all the new features in the Official UE5 Roadmap and also in the Official UE5 Release Notes.

It's worth mentioning other amazing features like MetaHumans, Nanite and Runtime Retargeting. Those (and many others) are still going to be tested to be actively supported on nanos world!

Reworked Water Physics

Also this month we managed to tweak a little bit our Water Physics settings. We use Unreal's Water System integrated into nanos world, and it uses a Pontoon system to make buoyancy on the objects. Props, Pickables and Vehicles have the pontoons spawned automatically in game, and since then the algorithm to calculate the size and it's force was quite primitive.

After several hours testing and doing several extremely hard math calculations we've managed to implement a new procedural algorithm which dynamically spawns pontoons through the object depending on it's size and mass. This makes rectangular objects to react properly for example (before we had only one sphere pontoon which made objects to keep rotating weirdly in water).

This new algorithm fixes the problem of having some Props being ejected and kicking infinitely over the water, and also normalizes their floating capabilities. Right now they all floats equally, we still intend to improve it by allowing custom pontoons to be set through scripting and also through the engine, and also to use Physical Materials to change the buoyancy force depending on it.

New Default Maps

We are shipping two new default maps to nanos world: OceanMap and BlankMap. The first contains a small island and a vast ocean (good for testing Water stuff), and the second is literally Empty and all black, good for dynamic scripting created maps!

We've also tweaked the size of BlankMap and it's surface texture to have a modern and UE5 look.

nanos world Migration

As we stated in the last blog we are moving to a new Store Page, the new nanos world version on UE5 will already be on this new game entry, and the old entry will be completely deactivated.

Game

All the current testers will receive a new Steam Key to activate nanos world in your Steam accounts. Here's how to get the new nanos world game key:

  1. WISHLIST the new game entry first 😁
  1. optional: Launch the old game at least once to store your achievements to automatically import them when launching the new game (this is a built-in tool to automatically export and import your stats).
  2. optional: Make a backup of your Server/ folder (if you are developing Packages/Assets).
  3. optional: Uninstall the old game, although it is not obligatory, it's recommended because some problems may happen if you don't, as both games use the same folder name.
  4. You will receive the new Steam Key at the Auth Website. If you didn't, please reach us.
caution

All old game keys will be revoked. You will receive an warning on Steam saying that the "Beta Test has ended".

Assets

The pipeline of exporting assets from Unreal Engine didn't change, all old tutorials are still valid but some are still using the old UE4 interface, we are constantly updating the docs to update the images and add more information to this workflow.

We've already updated the Importing Custom Assets and also the Assets Development Kit pages. There is a new workflow which has been updated to export assets, so now you don't need to package the project, just need to cook the assets - but the old way is still valid tho, the new is just easier.

The Assets Development Kit GitHub Project was updated as well, the only things that changed were the following files:

  • Config/DefaultEngine.ini
  • NanosWorldADK.uproject

You can pull into your current ADK downloaded project or just replace your project with the new files. If you get problems, try deleting the following folders in your project, so you have a clean project (without the old compiled stuff):

  • Binaries/
  • Saved/
  • Intermediate/
note

All Assets will need to be recooked in Unreal Engine 5 to work with the new nanos world version. This is needed as from time to time the shader code or the serialized binaries are changed when the Engine changes, so we need to get in the same version otherwise the game may crash expecting to load a newer version but the file is old.

We already managed to update the official asset packs.

New Testers

We are very sorry for making the recently players which registered to become a tester to wait that long, since we are moving to the new game entry, we didn't want to give you the old keys anymore, but now we are backing to our testing invitations!

tip

We are still aiming to invite only Modders and Scripters, if you are just a player, keep the eye on the future open Playtest sessions!

Known Bugs

Some bugs are known and are listed below, most of them we don't have much to do and are much likely an internal UE5 bug, I am reporting them all to Epic, let's pray they accept the report and fix it.

  • Cables rendering not working sometimes (Epic accepted my report).
  • Balloons/Cables square constraint (Epic accepted my report and already fixed it for 5.1).
  • Hit events/sounds not always triggering (report not accepted yet).
  • SceneCapture not bounces anymore (report not accepted yet).
  • Chaos Physics sometimes freeze an object if he stands still for some small time, I did some workaround to fix it in certain cases on nanos world (when grabbing or dropping props).

Conclusion

This release of nanos world on UE5 represents our efforts to always bring the bleeding edge technology to the game. It is our main pillar to develop a platform with quality, efficiency and modularity. And by doing it right, these updates and new features become easy to integrate or make 😁.

We want to be the reference in sandbox games for the Unreal Engine (5), and we are moving in that direction!

We really appreciate everyone who has supported us so far! Every like, react, emoji or comment makes us much happier! Merci!

· 9 minutes de lecture
Gabriel T. Nardy

New Steam Store Page, Performance Optimization, Databases & Blueprint Integration!

Page de la boutique Steam

Recently we got a hitch in our Store Page which required us from getting a brand new one. And now we finally are re-releasing it! It got new screenshots, videos and a better description!

WISHLIST MAINTENANT!!!

A downside of this whole situation is that the old store and the old game entry will be deactivated. Soonish everyone will receive a new Steam Key to activate the new nanos world in your library!

Also we embedded a tool to export (then import) your Achievements and Stats from the old game to the new one. You just need to launch the old game once before launching the new one and everything is imported automatically!

Performance Optimization

Everyone knows that one of the great aspects of nanos world is the performance and the optimization. And in the last month we had a significant advance in improving some internal critical points of our framework.

Mémoire

The first one to mention was a huge improvement in the memory usage of our spawned entities.

Internally, we use a special system to handle sending and syncing data through the network. Our approach is to have a similar system to Unreal's Replication system. But until then this system was responsible for most of part of the memory usage in each spawned Entity.

With that in mind we aimed to solve this problem, not to mention most of these memory usage was duplicated in all entities unnecessarily. And fortunately we succeeded on reducing up to 90% of the memory usage of the entities. Right now it occupies exactly the data which is strictly needed for it's existence!

We did a small test to compare, spawning 10.000 Characters through Scripting, check the memory usage difference:

Before:

After:

Comparison of some Entities Memory Usage Before x After:

EntitéUtilisation de la mémoire avantUtilisation de la mémoire aprèsRéduction
Cable5.4 KB1.1 KB80%
Character13.1 KB1.8 KB86%
Light4.8 KB1.0 KB79%
Melee7.1 KB1.5 KB79%
Particle4.6 KB1.0 KB78%
Player3.1 KB0.3 KB90%
Prop4.8 KB1.0 KB79%
StaticMesh4.5 KB1.0 KB78%
TextRender5.3 KB1.1 KB79%
Trigger4.0 KB0.8 KB80%
Vehicle7.9 KB2.0 KB75%
Weapon11.1 KB2.0 KB82%
note

This usage was calculated on Server side. On Client side the values would be a little bit bigger, not to mention to the Assets which are loaded together.

This was achieved just by improving one single system, we didn't even start looking for active compression techniques or reducing some variables sizes which are unnecessarily bigger than it needs. 🙏

Réseau

Another great optimization was in our network packets, each data sent through the network has a common "header" to identify some operations. This is a constant "cost" for the network which we managed to reduce up to 75% of it's size, making all data being sent through the network statically lower!

Coté client

We started advancing into optimizing the game in the client side. Which normally is trickier than on Server side because it concerns to dealing to Unreal Engine subsystems. But we managed to add some optimizations based on the Quality Settings selected. For example on the Blood or Bullet Holes particles, now depending on the distance and on the Effects Quality selected, they will be less or not spawned at all.

We've also tweaked the Vehicle System to do similar optimizations using this system. There is still a lot which we can improve! 😀

Nouvelle classe: Blueprint

A very required class is being introduced: Blueprint! Now it is possible to spawn any Blueprint Actor in nanos world!

We've managed to implement the method: CallBlueprintEvent() which you can create any Event or Function with any number of parameters in your Blueprint and call it from Scripting! This expands many possibilities!

Also, you can spawn it on server and it will follow the same rules as any other Actor Entity, and it will be synchronized with other players using the Network Authority system as well!

Nouvelle classe: Database

Something that is extremely fundamental for some game-modes such as roleplay is the Database. Until then we were providing a MySQL Module to be used as a third-party Lua library, but due it's complexity to integrate with your server and also because it wasn't possible to make async queries we dug into a more robust solution.

For that, we present the new class: Database. A all-in-one solution for connecting to a database, it supports MySQL, PostgreSQL and SQLite out of the box! Not to mention the async and thread-safe queries!

Check it's page for complete documentation and examples!

Marque de dérapage sur les véhicules

A small but cool addition we did for vehicles was adding Tire marks when it skids:

Also, an awesome detail was added: the wheels get smeared with blood!

It is 100% dynamic and procedural!

Améliorations du sandbox

We got several improvements regarding the sandbox game-mode! The first one is the sandbox "API": we listed all functions and events it exports so you can integrate your own entities/tools or use it's features.

Also we've modularized the menu, categories and tabs, and you can add your own from your external package!

Check it out the sandbox API in the GitHub page: https://github.com/nanos-world/nanos-world-sandbox.

Finally, we've improved our Physics Gun tool, now you can control it using the mouse and also have a 'snap-to-grid' movement!

Several other adjustments and bug fixes were made on Sandbox as well.

Nouvelles méthodes pour les particules

We've expanded the possibilities for Particles! Now it's possible to set Material parameters on it, and also use any Texture, WebUI and Canvas as parameters as well!

For example you can spawn a Canvas, draw on it and use as a Material Particle parameter!

The following video shows using the WebUI https://nanos.world as a Material parameter into the Particle! Rendering in runtime!

Améliorations notables

Suppression musicale

We finally managed to fix the Music problem, which was making Sounds of type Music from stopping when too many sounds were spawned.

Côté client Props

Props can now be spawned on Client side as well! This allows having "unnetworked" dynamic meshes spawned on client, intended for use as visual effects and non-gameplay features.

We've already updated the Sandbox's Destructable entities to use client-side debris!

Mesh statiques du niveau

Now all StaticMeshActors from a Map are automatically loaded as StaticMesh entity on Client Side! It is possible to paint, destroy, move and everything else on them on client-side!

Chargement asynchrone des textures

We've improved our Client loading system and now textures (e.g. .jpg) are asynchronously loaded and the texture is applied in a deferred way. This system currently is implemented under SetMaterialTextureParameter() for testing, soon we can use it in other methods as well.

Chargement asynchrone pour File

In addition to the above, we've expanded our Async implementation into File class, which now have the :ReadAsync() method!

Nouvelles méthodes pour Light

We've added a bunch of missing Light setters and getters methods, also the ability to toggle it on/off with SetVisibility().

Changements pour Assets.toml

The Asset.toml got a new category: unreal, where we must specify a new setting unreal_version (the unreal version this Asset Pack was compiled on), this will be an important feature to prevent old Assets versions from crashing the game.

Also it got the new blueprints category for listing Blueprints 😉.

Collisions de véhicules

We've tweaked and improved our Collision configurations and now Vehicles interact better when colliding with other objects, including Networked Characters, Props and other Vehicles.

Before other Networked Characters were desyncing when colliding with vehicles (they started to fly and weird things happened when objects hit the Vehicles wheels), and also the hit between two vehicles were extremely rigid, which has been fixed too and will be more organic now.

Améliorations du soleil

The Default Sun light and shadows has been improved, specially during sunrise/sunset which we had some artifacts and shadows disappearing, now it must be smoother and prettier (and hopefully more efficient).

Conclusion

Thank you for another month of support! There were incredible advances with Blueprint and Database Classes, and also to finally lining up our Steam Page again!

Our north is to continue advancing performance and memory optimizations, as well as bringing essential new features to nanos world!

We also have some important challenges of bringing distance based culling and dimensions system for entities, which is essential for creating special environments.

There are some essential Classes that we want to implement as well, like custom Characters (e.g. for Animals) and other types of Vehicles (Air, Sea).

Finally, we are very excited with the release of Unreal Engine 5 (yesterday 05 April), as with it comes with several solutions to important questions in nanos world (such as Runtime Retargetting which promises solving several animations compatibility issues) and tons of new features to be used! We gonna have good news soon™ for you!

See you next month! 🥳

· 10 minutes de lecture
Gabriel T. Nardy

Aperçu Unreal Engine 5, nouveau système d'autorité réseau, API magasin et plus encore

Autorité Réseau

Comme tout le monde le sait, nanos world repose sur une solution "sans serveur" pour la physique et d'autres opérations dans le monde. Toute la synchronisation repose sur le partage de données entre les joueurs et la réplication dans chaque client. Cette approche apporte plusieurs avantages et bien sûr quelques inconvénients, dans les avantages que nous pouvons inclure un serveur très léger, où nous avons tout le contrôle dessus, sans avoir besoin de compter sur l'exécutable du serveur d'Unreal ou la façon dont il gère le réseau.

D'un autre côté, nous avons eu quelques défis sur la façon de distribuer des informations sur la physique et d'autres choses. Ensuite, au début, nous avons créé notre premier système d'Autorité de Réseau dans lequel chaque joueur est responsable du partage d'un ensemble spécifique d'entités du serveur à d'autres, similaire à Roblox.

Cependant, tout comme dans Roblox, certains problèmes deviennent plus visibles quand nous avons beaucoup de joueurs connectés avec de nombreux pings différents. Comme certains joueurs recevront l'"autorité réseau" sur les entités plus rapidement que d'autres, ils vont commencer à partager leur emplacement/rotation à d'autres joueurs alors que la "vieille" autorité du réseau a toujours l'autorité dessus parce qu'elle n'a pas encore reçu le message "perte d'autorité réseau".

Nous avons créé ce diagramme pour illustrer le problème :

Comme vous pouvez le constater, il y a un "vide" et un "chevauchement" lors du changement d'autorité de réseau si nous avons des différences entre les joueurs, provoquant plusieurs comportements bizarres sur des objets physiques.

Compte tenu de cela et après beaucoup d'études, nous avons amélioré notre système d'autorité de réseau pour le rendre plus robuste, cette nouvelle façon vise à combler les lacunes et à ignorer les chevauchements :

Bien que toujours dans une version "beta", avec ce nouveau système, nous avons l'intention d'améliorer tous les "avertissements" et les glitchs qui se produisaient depuis, tous les commentaires sont appréciés!

Nouveaux Modes de Débogage

Avec l'ajout du nouveau système d'autorité de réseau, nous ajoutons une nouvelle section Debug dans les paramètres.

Un paramètre cool est le Draw Network Debug qui utilise toutes les informations sur le réseau dans le monde:

Vous pouvez trouver plus d'informations sur la page Autorité Réseau.

Vous pouvez également faire une fausse "perte de paquets" qui simulera des données de synchronisation qui seront ignorées.

API du Magasin

Le mois dernier, nous avons publié notre Magasin, un endroit où partager et télécharger des assets de la communauté & Packages, intégrés au jeu.

Maintenant nous libérons l'API duMagasin: Vous pouvez télécharger, envoyer et éditer vos ressources via des requêtes HTTP, consultez la documentation de Swagger sur https://api. anos.world/boutique/docs. Plus de tutoriels à venir bientôt™.

Modifications de la Documentation

Modules

Nous avons ajouté un nouveau tutoriel pour la création de votre propre module C. Vous pouvez le consulter à la page Modules.

Unreal Engine 5 : Aperçu

Il y a une semaine, Epic Games nous a donné la merveilleuse nouvelle qu'ils sortaient Unreal Engine 5: Preview. Une version Preview signifie que la plupart des fonctionnalités sont déjà présentes et presque prêtes pour une version finale de production.

Et nous, en tant que bons enthousiastes, et en plus de nos autres nouvelles blog (Novembre: Unreal Engine 5 ?) avons décidés de donner un autre essai de conversion de nanos world vers Unreal Engine 5. Et passons à nos impressions :

Migration de nanos world

Cette fois-ci la migration du monde nanos vers Unreal Engine 5 : Preview était plus difficile, nous avons encore plus de méthodes obsolètes et certaines fonctionnalités ont été modifiées et/ou supprimées, ce qui a nécessité un travail plus dur pour convertir et déboguer ce qui a changé.

Nous avons dû mettre à jour beaucoup plus de code et de fichiers que la version "Early Access" pour pouvoir simplement lancer le projet. Les véhicules ont également dû être désactivés en raison du nouveau moteur Chaos, qui change complètement la façon dont les véhicules doivent être implémentés et nous ne voulions pas nous soucier de les convertir dès maintenant.

Graphismes

Unreal Engine 5 introduit Lumen, une nouvelle méthode dynamique d'éclairage global, et jouer avec est très cool, et impressionnant. Voici quelques captures d'écran tirées de notre carte Testing Map:

tip

Vous pouvez voir comment les couleurs de l'objet peuvent se refléter dynamiquement dans les lumières d'environnement.

tip

Ici, nous pouvons voir la contribution des matériaux émissifs à l'environnement.

Une fonctionnalité cool est que nous pouvons activer l'accélération matérielle pour le calcul de Lumen (qui remplace Hardware Ray Tracing), et testé avec une RTX 3070 le rend encore plus beau à un coût GPU vraiment bas.

Technique

Sur le plan technique, les plus grands changements qu'Unreal 5 apporte sont :

  • Lumen (Illumination globale dynamique)
  • Nanite (Virtualisation du maillage)
  • Chaos (nouveau moteur physique)
  • et pas moins important, les nouvelles fonctionnalités concernant la création du monde/niveau (One File Per Actor et World Partition)

Alors que les fonctionnalités de Lumen, Nanite et World peuvent être activées ou désactivées (nous pouvons choisir de l'utiliser ou pas), la même vérité n'est pas valable pour Chaos. Unreal enlève complètement PhysX et le remplace par son nouveau moteur physique : Chaos. Bien que nous soyons ouverts à de nouvelles choses, Chaos ne semble malheureusement pas être totalement en bon état, ni au moins au même niveau/stabilité que PhysX.

Nous pourrions faire l'expérience de plusieurs bugs de collision, tels que des glitchs d'objets, de mauvaises "boîtes de collision", vols à travers les murs, bugs avec Rope (Cable), objets dormant aléatoirement, appels d'événements de mauvais coups et ainsi de suite.

Pour la plupart des problèmes nous avons pu trouver une solution (comme appliquer une force à certains objets pour qu'ils ne dorment pas, ou trouver un contournement dans les paramètres des câbles), mais le problème principal que nous avons trouvé en utilisant Chaos sont les événements de retours de "Hit" qui sont totalement incohérents, parfois déclenchés avec la force 0, ce qui peut perturber les sons de succès et aussi les événements Hit de nanos world peuvent ne pas être déclenchés, et cela peut casser les fonctionnalités de gameplay/scripting.

Sans parler des objets qui glitch / disparaissent / perdent leurs collisions, ce qui donne une très mauvaise impression sur la qualité du jeu.

Et on n'a même pas commencé à implémenter les nouveaux véhicules de Chaos, on attend de voir ce qu'on va y trouver 😅.

Stability

En fait, cette version d'Unreal nous a surpris positivement, elle avait moins de crashes que dans un accès anticipé, mais en avait quand même quand nous stressions le jeu de manière importante en utilisant énormément de ballons, câbles et accessoires volants. Bien que j'ai été un peu déçue car la plupart des bogues que j'ai trouvés dans l'accès anticipé étaient toujours là dans cet aperçu et n'ont pas encore été corrigés.

Aussi quelques bugs rares pourraient être remarqués, comme celui d'être soudainement téléporté à l'emplacement 0, 0, 0, et auquel nous n'avons pas encore trouvé la raison.

L'UE5 en vaut la peine maintenant ?

Résumé: nous avons créé une liste de points positifs et négatifs selon notre point de vue concernant la migration vers Unreal 5 "maintenant":

En outre, un autre point à considérer : nous allons migrer vers Unreal Engine 5 bientôt ou plus tard, la décision est "quand". 😉

Points négatifs 👎

  • Bugs de Gameplay liés à la physique, les objets qui ont des glitchs/sauts, de mauvaises collisions se produisent, les objets passant à travers le plancher/murs en raison de Chaos.
  • Artefacts visuels, non seulement liés à Lumen, mais aussi aux méthodes standard de rendu.
  • Crashes d'Unreal aléatoires, que nous ne pouvons pas réparer nous-mêmes.
  • Mises à jour Unreal plus fréquentes, nous allons probablement avoir une autre version d'aperçu, et après la sortie de l'UE5, nous allons obtenir plusieurs correctifs, et chacun de nous devra très probablement reconstruire tous ses Assets et publier une nouvelle version de ceux-ci, sinon ils ne fonctionneront pas dans les nouvelles versions. Cela signifie que les Asset Packs ne fonctionneront pas dans les nouvelles versions Unreal.
  • L'utilisation de Lumen a ses inconvénients, comme la performance, qui peut toucher de 25% à 50% des FPS (mais peut être activé/désactivé).

Points positifs 👍

  • Nous allons être les premiers à explorer Unreal Engine 5 (qui peut être mauvais parce que certains problèmes n'ont encore été identifiés par personne, mais personnellement, j'aime explorer de nouvelles fonctionnalités et utiliser de nouveaux outils).
  • nanos world aura un grand potentiel d'auto-marketing, et peut aussi amener de nombreux nouveaux enthousiastes sur UE5 à connaître, jouer et créer avec le jeu.
  • Lumen est amusant et magnifique.
  • Les nouveaux outils World/Level qui permettent de créer de grandes cartes et aussi d'améliorer beaucoup les pipelines de co-création en utilisant le système One File Per Actor et World Partition!
  • Le nouvel éditeur d'Unreal a un look plus moderne et agréable.
  • De nombreux nouveaux outils et technologies à utiliser, y compris Nanite, Chaos Destructions, Des outils d'animation (qui peuvent nous aider à relier dynamiquement votre Animation Blueprint personnalisé) et le nouveau MetaSounds.
  • Il est vraiment difficile de convertir nanos world de zéro à chaque mise à jour pour tester sa stabilité, Je ne peux pas réutiliser la conversion précédente parce que de nombreux changements sont faits en Blueprints (UI) que je ne peux pas fusionner et beaucoup ont changé depuis. Donc en commençant la conversion maintenant nous pouvons déjà commencer à creuser, corriger des choses et les prochaines mises à jour d'Unreal seront plus faciles et plus rapides à tester et à maintenir.

Contrairement à l'accès anticipé, cette version semble avoir plus de points positifs que des points négatifs, et cela semble être une meilleure occasion qu'avant de migrer officiellement nanos world. Venez sur notre Discord pour discuter de cette idée avec nous ! Nous allons faire un sondage afin de prendre en compte tous les commentaires de la communauté!

Spotlight de la Communauté

Ici, nous aimerions partager toutes les choses incroyables que notre communauté fait ces dernières semaines!

Timmy fait un travail incroyable, et partage son nouveau système d'inventaire :

Timmy a également créé un système de météo avec des transitions fluides :

MegaThorx a publié sa toute nouvelle bibliothèque EGUI. Un package pour créer des interfaces à partir de scripting! Il contient également sa propre documentation complète!

Voltaism a partagé une implémentation très cool de Bots jouant à son mode de jeu VZombies entre eux, sans joueurs :

· 11 minutes de lecture
Gabriel T. Nardy

Introduction de la boutique, des nouvelles classes et de toutes les mises à jour rétroactives !

Ce blog résumera également les points forts de tout ce qui a été développé depuis le dernier blog en novembre ! Un Changelog détaillé est disponible dans notre Discord ! Restez à l'écoute !

Boutique & Vault !

C'est avec une grande joie que nous annonçons enfin la Boutique tant attendu ! La boutique est un marketplace où chacun pourra télécharger ses assets, ses packages, sortir de nouvelles versions, créer des équipes et bien plus encore ! 100% intégré avec le Vault et le CLI !

tip

Le développement de la boutique est dirigé par @MegaThorx ! Il s'agit de la version initiale et plusieurs mises à jour sont à venir ! Tous les avis et commentaires sont appréciés !

Fonctionnalités

  • Création des pages Asset Packs & Packages, contenant des images et une description.

  • Téléchargement de nouvelles Versions, avec possibilité de définir des labels comme brouillon, bêta et stable.

  • Créez une équipe et ajoutez des membres de l'équipe.

  • Système de Tag & Categories.

tip

Consultez la documentation complète ici.

la boutique de Nanos World disponible dès maintenant sur https://store.nanos.world/

Token serveur

Avec l'ajout du magasin, nous avons une nouvelle fonctionnalité: Token serveur.

Ce token est requis lors du téléchargement de tout contenu du magasin à l'aide de la CLI (et bientôt lors de l'utilisation d'autres fonctionnalités d'intégration), vous devez le définir dans votre . Config.toml comme paramètre token.

Pour générer un token, veuillez consulter le site https://store.nanos.world/settings/tokens/.

Nouvelle classe: Canvas

Nous avons ajouté une nouvelle classe pour remplacer complètement notre ancienne classe statique Render : Canvas! Canvas est comme un cadre de peinture, vous pouvez dessiner n'importe quoi dessus, des Lignes, aux Carrés, aux Matériaux et Textures !

Vous pouvez également l'utiliser comme interface utilisateur ou peindre n'importe quel objet avec un Canvas en utilisant :SetMaterialFromCanvas()!

Maintenant il est plus facile de créer une interface utilisateur basique!

-- Créer un Canvas
local canvas = Canvas(true, Color.TRANSPARENT, 0, true)

-- S'abonnner aux mises à jour, nous pouvons seulement dessiner dans cet événement.
canvas:Subscribe("Update", function(self, width, height)
-- Dessiner un Texte au milieu de l'écran
self:DrawText("Hello World!", Vector2D(width / 2, height / 2))

-- Dessiner une ligne rouge horizontale
self:DrawLine(Vector2D(0, height / 2), Vector2D(width, height / 2), 10, Color.RED)
end)

Le Tutoriel HUD basique (Canvas) a également été mis à jour !

Steam Input + Contrôleur

Nous avons réussi à intégrer Steam Input. Si vous n'êtes pas familier avec cela, Steam Input vous permet de configurer et de jouer avec n'importe quel contrôleur, et aussi le configurer via l’interface Steam.

C'est une belle intégration car c'est une implémentation relativement simple qui permet de jouer avec les contrôleurs dans nanos world, et il donne aux utilisateurs la possibilité de personnaliser les liaisons et de les partager avec la communauté.

Une version initiale a été publiée dans la dernière mise à jour, plus de liaisons et de configurations viendront ensuite.

Nouveaux Glyphes de touche intégrés

Nous avons ajouté une méthode utilitaire pour récupérer un Glyph/Image d'une touche donnée. Utilisez simplement Input.GetKeyIcon(key_name) et il retournera le chemin de l'image qui peut être utilisé comme Texture ou comme image habituelle <img> dans le HTML !

Vous pouvez l'utiliser combiné avec Input.GetMappedKey() pour obtenir dynamiquement le glyphe clé en fonction de la configuration de la liaison de touche de l'utilisateur.

Amélioration des traces de balles

Nous avons retravaillé nos particules de balle par défaut. Auparavant, selon le point de vue, vous pouviez voir une grande sphère passer à travers et aussi plusieurs bugs dans le ciel. Maintenant, elles ont été retravaillées pour être plus réalistes et sans artefact !

Nouvelle Configurations de Map

Il est maintenant possible de créer des fichiers de configuration individuels pour chaque Map, dans lequel vous pouvez définir tous les modes de jeu compatibles, les emplacements de spawn et ajouter des données personnalisées !

De plus, il est possible de configurer un package complet qui se chargera automatiquement lorsque cette Map sera chargée.

Map.toml
# configurations de la map
[map]
# gamemodes compatibles
compatible_game_modes = [
"sandbox",
"deathmatch"
]

# liste des emplacements de spawn
spawn_points = [
{ location = "Vector(100, 200, 100)", rotation = "Rotator(0, 90, 0)" },
{ location = "Vector(200, 300, 100)", rotation = "Rotator(0, 90, 0)" },
]

[custom_data]
whatever = "anything"

Consultez la documentation complète à Map Script & Data.

tip

Les modifications suivantes ont été ajoutées dans la mise à jour 1.1.0-1.3.0 , nous allons mettre en avant les meilleures ici !

CLI interactif

Une fonctionnalité étonnante et extrêmement utile qui a été ajoutée au CLI est la création de Packs d'Assets & de Packages de manière interactive.

Utilisez add [package|assets] NOM et il créera le Pack d'Assets ou le Package de manière interactive, il va aussi créer les fichiers de configuration et ceux par défaut !

Tags d'acteur

A la demande de nos testeurs, nous avons implémenté une interface pour accéder aux Actor Tags d'Unreal avec Actor.SetActorTag() et Actor.GetActorTag(), vous pouvez donc définir/récupérer des Actor Tags d'Unreal directement à partir de l'Api de Scripting (côté client).

Les Actor Tags sont juste un tableau de chaînes de caractères qui peuvent être accédées depuis n'importe où, y compris à partir d'un Blueprint Unreal. Ce petit ajout augmente la gamme de possibilités d'intégration avec des Blueprints et des implémentations externes.

Nouvelle classe : SceneCapture

C'est une fonctionnalité très cool publiée depuis la mise à jour 1.1.0.

SceneCapture est un acteur de caméra qui capture l'environnement en temps réel et nous pouvons obtenir le résultat affiché avec :SetMaterialFromSceneCapture() sur n'importe quel autre Acteur!

Il a plusieurs réglages de performance configurables qui le rendent plus efficace si vous ne regardez pas les acteurs et aussi réduit la vitesse de capture si vous êtes trop loin !

Cache des Assets

Nous avons implémenté une excellente fonctionnalité qui améliore les performances et réduit le saccage lors du (re)chargement des Assets à l'exécution. Le saccage se produit généralement lors de l'utilisation du disque dur et lors du chargement de quelque chose à partir du disque. Maintenant, chaque asset chargé (y compris les fichiers du disque - .ogg et .jpg) est mis en cache et réutilisé de nouveau lors du chargement automatique. Nous avons toujours l'intention d'ajouter quelques options pour charger automatiquement tous les assets de tous les packs d'assets chargés lors de l'entrée dans un serveur et aussi une option scriptable pour charger un asset avant son utilisation pour réduire encore plus le saccage et ajouter plus de liberté aux scripteurs.

Profils de Lumière

Nous avons ajouté un nouveau paramètre cool pour les lumières : Light Profile, qui permet de changer la texture du profil lumineux d'une lumière avec Light:SetTextureLightProfile().

Il est possible de le définir avec l'un de nos Light Profiles intégrés. Tous les profils lumineux intégrés ont été importés depuis le Pack IES Light Profile Pack.

Cela peut ajouter un effet de lampe torche réaliste à vos lumières par exemple.

Améliorations des Véhicules

Il est maintenant possible de contrôler manuellement si le moteur du véhicule est démarré ou non, ainsi que s'il démarre automatiquement lorsqu'un conducteur s'installe avec Vehicle:SetAutoStartEngine().

Nous avons également ajouté un petit détail : Feux de Stop, ils deviennent rouge lors du freinage, et blanc ensuite. Ils sont personnalisables avec Vehicle:SetTaillightsSetup():

note

Les couleurs du maillage du véhicule ne sont toujours pas synchronisées avec les Feux de Stop ni avec les Feux, cela sera amélioré dans les prochaines mises à jour !

Personnalisation du Parachute

Nous avons ajouté une personnalisation utile au parachute intégré, maintenant il est possible de changer sa texture avec Character:SetParachuteTexture(texture). Also, all built-in Textures can be found at nanos-world/NanosWorld/Content/NanosWorld/Textures/Parachute/ and used like assets://nanos-world/Textures/Parachute.

Spotlight de la Communauté

Notre communauté a travaillé dur sur plusieurs choses étonnantes, nous aimerions les partager avec vous!

T-Drones

par Timmy

Timmy a travaillé sur un packages de Drone très cool et entièrement fonctionnel. Entièrement intégré à le nouveau SceneCapture pour un "système de caméra 3D". Aussi, le Drone a une fonction pour rentrer à la maison tout seul! Incroyable!

T-Drones est un script conçu pour émuler le comportement des drones de loisir, et pensé pour fonctionner sur une grande majorité des modes de jeu.

Il a été conçu pour être le plus modulaire possible et pour s'adapter aux besoins de toute personne désireuse d'apporter des modifications ou des ajouts facilement.

KOTOR RP

par l'équipe ERO (NegativeName, Mougel, False & Tark)

L'équipe ERO travaille dur sur un mode de jeu RP basé sur l'univers de Star Wars (KOTOR RP), ça va être incroyable! Voici quelques captures d'écran de leur monde et du système de Combo du Sabre Laser!

Star Wars KOTOR RP est un mode de jeu roleplay français dans l'univers de Star Wars.

Vous jouerez un personnage dans une galaxie lointaine. Votre rôle dépendra de vous. Allez-vous rejoindre l'Empire Sith pour asservir la galaxie, la protéger en rejoignant la République Galactique, ou ne pas prendre parti dans cette guerre?

Le choix vous appartient ! Devenez un Jedi, un Sith, un soldat, un mercenaire ou un simple marchand.

T-Bomber

par Timmy

Timmy est également en train de créer un mode de jeu Bomberman ! Bon travail, j'ai hâte de jouer !

T-Bomber est un mode de jeu basé sur Bomberman et fortement inspiré du célèbre jeu de labyrinthe.

Il vise à reproduire l'expérience originale de Bomberman avec quelques fonctionnalités supplémentaires, et à montrer certaines des possibilités de scripting de nanos world.

Les règles sont très simples, le dernier en vie gagne la partie!

VZombies

par Voltaism

Voltaism travaille sur son mode de jeu Zombies basé sur celui de COD. C'est incroyablement amusant et effrayant!

Le mode jeu est presque terminé, et est essentiellement un clone du mode classique Call Of Duty: Zombies où vous devez survivre contre des vagues de zombies le plus longtemps possible!

Ce mode de jeu a également des bots qui peuvent jouer avec vous.

nanos BattleField 2043

par LighterChu, Trevor & MemeFrug

Battlefield 2042 est sorti, nous nous attendions au meilleur. Pourquoi avons-nous fait nanos battlefield 2043, et bien ce n'est pas seulement Battlefield 2042 c'est aussi tous les champs de bataille mélangés dans le futur des titres qui sont combinés ici.

Conclusion

Merci encore pour vos commentaires et votre soutien, chaque suggestion et chaque bug trouvé fait avancer nanos world de plus en plus vite!

note

Ce blog contenait plusieurs mises en avant de nos progrès au cours du mois dernier. Notez que d'innombrables améliorations, corrections de bugs et quelques autres nouvelles fonctionnalités sont disponibles dans le changelog sur notre Discord et aussi en jeu.

Nous sommes au courant de vos plus importantes demandes et nous voulons les implémenter dès que possible pour rendre l'API de nanos world de plus en plus complète. Nous avons encore une longue feuille de route à suivre, et nous avons de grands d'objectifs pour apporter de nouveaux types de véhicules (y compris aériens et maritimes), Personnages personnalisables (supportant n'importe quel squelette), supporter les Blueprints d'Unreal et plus encore!

Tout de suite, nous désirons retravailler notre page Steam Store, elle a été laissée à la traîne en raison de problèmes techniques et nous voulons la relancer, avec cela nous désirons faire une refonte de nanos world, nous savons que les logos et les miniatures qui se rapportent au thème du jeu sont d'une grande importance pour l'auto-marketing sur Steam et pour attirer de nouveaux joueurs !

A bientôt ! Merci!

· 7 minutes de lecture
Gabriel T. Nardy

Nouvelles Classes, Expérimentations avec Unreal Engine 5 et Améliorations du Scripting!

Nouvelle Classe: Decal

Nous avons ajouté une nouvelle classe pour faire apparaître des Decals! Decals are Materials that are projected onto meshes in your level, including Static Meshes and Skeletal Meshes. Vous pouvez charger n'importe quel .jpg depuis le disque pendant l'exécution, et l'utiliser comme paramètre dans votre Matériel de Decal !

Comme les statuts sont hérités des Acteurs, vous pouvez changer son emplacement, la rotation, l'attacher ou appeler n'importe quelle méthode de Base Actor sur lui !

Nouvelle Classe: Billboard

Nous avons ajouté une nouvelle classe pour faire apparaître des Billboards! A Billboard is a 2D Material that will be rendered always facing the camera. Il est également possible d'utiliser toutes les méthodes personnalisées de Paintable et de faire apparaître des textures personnalisées. Vous pouvez modifier ses propriétés de matériaux avec Base Paintable ou même utiliser un matériau de votre choix.

Comme les Billboards héritent des Acteurs, vous pouvez changer leur emplacement, leur rotation, les attacher ou appeler n'importe quelle méthode de Base Actor sur eux !

Nouvelle Classe: Melee

Nous recevons une toute nouvelle classe très demandée : Melee! La classe Melee arrive pour remplacer l'ancienne classe Item.

Melee est une nouvelle Classe (qui fonctionne exactement comme l'ancien Item) mais avec la capacité d'attaquer avec. Il est possible d'ajouter des animations personnalisées, un temps de recharge et d'ajuster les dégâts de celles-ci. La physique des attaques est basée sur l'animation de manière procédurale, ce qui signifie que vous pouvez poignarder, taillader ou même frapper des objets en changeant l'animation et le coup sera basé sur celle-ci !

Les résultats sont assez amusants, les coups/dommages affectent également l'environnement dynamiquement 😊

Scripting Improvements

Nous avons écouté votre demande et nous apportons enfin les nouvelles fonctionnalités de scripting tant attendues !

Véritable Hot Reload

Après plusieurs demandes, nous avons commencé à implémenter une vraie fonctionnalité de Hot Reload !

Le vrai Hot Reload est une fonctionnalité étonnante qui vous permet de charger un nouveau code de script sans devoir perdre tout l'état de mémoire actuel de vos Packages. Il fonctionne en chargeant les fichiers de script sur la VM Lua en cours d'exécution.

Actuellement il fonctionne en le déclenchant manuellement dans la console :

package hotreload [NOM_DU_PACKAGE|all]

Cela mettra à jour les clients avec la version plus récente des fichiers et chargera les fichiers Index.lua à partir des packages. Il conservera l'état actuel de la mémoire des paquets. Il désabonnera également tous les événements enregistrés dans ce package.

Dans le futur, il serait possible d'ajouter un vérificateur en temps réel pour mettre à jour automatiquement les fichiers modifiés après les avoir enregistrés.

Extension des Classes

L'extension et l'héritage des Classes de nanos world constituent une nouvelle fonctionnalité intéressante. Ceci est toujours expérimental et nous voulons recueillir vos commentaires et trouver les bogues restants.

Il est maintenant possible d'ajouter de nouvelles méthodes aux Classes de nanos world, Remplacer les Méthodes existantes et même Remplacer index et newindex.

L'ajout d'une nouvelle méthode à une classe est simple comme bonjour :

-- Ajout d'une nouvelle méthode 'AddScore' à la classe Player
function Player:AddScore(score)
self:SetValue("score", self:GetValue("score", 0) + score)
end

-- L'utiliser
my_player:AddScore(10)

Lisez la documentation complète ici.

New View Mode: TopDown

We created a new native View Mode: TopDown!

This ViewMode allows you to fully control Characters from a TopDown perspective.

With just a single line:

my_character:SetViewMode(ViewMode.TopDown)

nanos world becomes a completely different game, the mouse is now a crosshair which the Character aims to. Mechanics of picking up Weapons, grabbing Props and interacting with stuff was slightly modified to work with the ViewMode. Also driving is fully supported as well! 🤩

It also is possible to dynamically change the view mode and switch between them during game-play and also tweak settings such as camera distance and so on.

New Camera Methods

Player got a bunch of new Camera methods: Player:SetCameraSocketOffset(), Player:SetCameraArmLength().

And also ability to detach and attach it to other actors (👀 including Props): Player:AttachCameraTo() and Player:ResetCamera(). It will attach including a Camera SpringArm component!

Note: Spectate methods from Client has been moved to Player: Player:Spectate().

TextRender on Server Side

Now the Class TextRender now can be spawned on Server Side as well!

Other Changes

Besides the major topics covered here, we've got several other new features which were been added during the month:

  • Added a new method for Character: Character:Follow() which will make the AI follow other actor.
  • Added a new Utils method: NanosUtils.Benchmark() which will take a function as parameter and test the performance of it.
  • Now Subscribe will return the callback function (which can be used to Unsubscribe afterwards).
  • Fixed tons of bugs, detailed information can be found in the Discord Changelog channel.

Unreal Engine 5

Lastly, it is already known we have a big objective of porting nanos world to Unreal Engine 5. Personally this is something I wanted to do as soon as possible because Unreal Engine 5 features are amazing, not to mention the publicity and marketing bonuses we would get for nanos world.

In this month, we decided to give a try: we tested porting nanos world to Unreal 5, at first we had some problems because of some Unreal modules have been completely renamed or even removed. And also we got some Unreal methods deprecated by the newer version, so we needed to update them and even reimplement some small stuff.

Currently Unreal Engine 4 uses PhysX physics and in Unreal 5 all the Physics Engine have been replaced by Unreal's Chaos, which is a new Engine replacing the NVIDIA's PhysX.

This made us need to disable Vehicles for this test, as Unreal vehicles are very dependent on the PhysX engine and I would need to reimplement them using the new Chaos API for vehicles (I believe that our Vehicles API will need to change a bit as well once we fully update it).

But after half of dozen adaptions and disabled Vehicles, the results were surprisingly good! nanos world worked on Unreal Engine 5! Personally I got very happy and proud that the biggest problems I had was updating deprecate methods and updating some Unreal modules, thanks to the architecture developed so far in nanos world!

Graphical Results

nanos world on Unreal Engine 5 is beautiful, joying with Lumen and Global Illumination is really fun!

There were some graphical artifacts (such as changing the time of day too fast causing a delay/ghosting effect), but I believe they will improve them for the final Unreal Engine 5 version.

Check it out some screenshots taken during the tests trying the Global Illumination and Lumen:

Stability

Unfortunately the stability was extremely bad. It didn't surprise me too much as Unreal Engine 5 is on Early Access, so bugs and crashes would happen. Several random crashes occurred during gameplay, I could notice mostly of them were caused by the new Chaos Engine (related to Physics).

What now?

I was really happy in being able to port nanos world to Unreal Engine 5, this attempt made us be sure that this would be possible. But I decided that currently is not time yet. During the tests we had several crashes (random ones, related to the low-level of Unreal, mainly coming from Chaos Engine and from Water) that made us conclude that is better to wait a better stable version because it makes nanos world really unplayable. Those random crashes are extremely bad as sometimes it's hard to know if it's my or Unreal's fault.

Fortunately, with this we could prove ourselves that nanos world will, when the time comes, be compatible and updated to Unreal Engine 5!

· 11 minutes de lecture
Gabriel T. Nardy

We proudly present...

...The big long list of Alpha updates!

Initial Thoughts

Thank you everyone for all the support this last month! Our community has grown a lot and it's lovely to see how nice and friendly it is becoming 🥰!

The Playtest session in the Sunday was amazing! We were able to test the stability of the game very well. I can say that most of the crashes we had were related to external integration issues (WebUI or Unreal itself), which shows a great maturity of our Core system. I think about doing it more often, it was a lot of fun playing Halloween mode and testing the community game-modes!

From now on, all updates will start to be versioned (finally!), small updates/non break-changes will get a PATCH version and break-changing will get a MINOR version.

note

The following changelog contains all features since last officially announced release 0.73.0. Many of the next items were already in the bleeding-edge branch.

Materials

Now nanos world supports Materials Assets! 🎨

This means you can configure your own materials in your Assets.toml and reference them using Paintable methods!

The function :SetDefaultMaterial() has been replaced with :SetMaterial(). You can see a list of all built-in Materials read to use here.

Also it is now possible to get the WebUI material and set it to any surface (read more below)!

Some existing methods are suffering a rework due that, e.g. Pickables got a new method :SetCrosshairMaterial(), so you can set the Crosshair from a Material (and not from a predefined list anymore), also all old Crosshair have been converted into materials which you can find here.

Improved WebUI

The WebUI received several improvements, including the ability to run HTML5 Audio and Videos! 📽

caution

We are using a Beta version of Ultralight, which supports Audio and Video, crashes WILL happen, also the Audio is currently 2D only. Ultralight is working on a solution so I can implement 3D audio.

The WebUI constructor received some new parameters: is_transparent, auto_resize, width and height. Width and Height will only be used if Auto Resize is OFF, this is useful if you want to spawn a WebUI to use as Material to any surface (and don't want it to be the size of the screen).

Also it received new methods: :SetFreeze(), :Resize() and :SetAutoResize().

A new Searcher has been added onto it, improving how it can load your .html files, they are now looked in the following order:

  1. Relative to current-file-path/
  2. Relative to current-package/Client/
  3. Relative to current-package/
  4. Relative to Packages/

It is now possible to spawn a Material from a WebUI, which renders dynamic and automatically into any surface: :SetMaterialFromWebUI() (method from Actors).

Actors

New additions for Actors:

  • Added new method for all actors: :SetLifeSpan(time) which will automatically destroy this actor after time seconds.
  • Added new method for all actors: :IsBeingDestroyed() which will return if this actor is being destroyed (useful to check from inside other Events such as Drop or Ungrab).
  • Added new parameter for all actors :AttachTo() method: lifespan_when_detached, which will destroy the actor after time seconds after it's detached.
  • Now event TakeDamage has a new argument: causer (the object/actor which caused the damage). Also added new damage types: RunOverVehicle and RunOverProp.
  • Now event Hit has new arguments: impact_force, normal_impulse, impact_location and velocity.
  • Now :SetLocation() will try to find the better spot to teleport the Actor (to avoid collisions).

Character

New additions for Characters:

Character Methods additions/improvements:

  • Added several new Getters from it's properties.
  • Added :SetDamageMultiplier() change the damage multiplier depending on the bone damaged.
  • Added :SetHiddenBone() to make invisible any part of the body.
  • Added :SetJumpZVelocity() to make the character jump higher.
  • Improved :PlayAnimation() got new parameters (blend times, loop and play rate), and now it supports loading any type of animation (Montage or Sequence).
  • Removed :SetInitialLocation(), it has been replaced with :Respawn().

Character Events additions/improvements:

  • Added AttemptEnterVehicle called when Character tries to enter a vehicle, returns false to prevent it.
  • Added AttemptLeaveVehicle called when Character tries to leave a vehicle, returns false to prevent it.
  • Added AttemptReload called when Character tries to reload it's weapon, returns false to prevent it.
  • Added Interact called when Characters tries to Pick Up a Pickable or Grab a Prop.
  • Added Highlight called when Characters looks at a Prop or Pickable being able to pick up it.

Some Characters animations have been renamed from AM_ to A_ in the Default Asset Pack (as they are not Montages anymore). Also lots of new Animations have been added.

Weapons

New additions for Weapons:

Weapon Methods additions/improvements:

Additional stuff:

  • Now weapons are hidden when Characters are driving.
  • Added sounds of Shell Dropping & hitting the ground for the built-in Shell particles (this is a procedural and 100% precise sound 😉).
  • Added sounds when picking up or dropping weapons, also it will slightly throw the weapon to the front when dropping it.

Grenades

All Properties from Grenades have been deprecated, now access must be done through Methods.

We've added a special Particle for Grenades nanos-world::P_Grenade_Special which will explode different particles depending on the ground the grenade is. Par ex. will explode a "grass explosion" particle if grenade is over a grass surface, and a "water explosion" particle if it's under water. Note: This particle only works for Grenades.

Sounds

New additions for Sounds:

Now it is possible to load .ogg sounds at runtime! You can store them in any Package or Asset Pack and load it using our new pattern for SpecialPath (assets://asset-pack-name/path.ogg or package://package-name/path.ogg).

Added loop_mode parameter to constructor (can loop any sound forever now).

Also, it is possible to pass .ogg using the SpecialPath in any Sound parameter.

Sound Methods additions/improvements:

Input

Added a new class: Input!

Now you can control, create and customize KeyBindings in a proper way! Example:

-- Registers the binding_name 'SpawnMenu' with default key 'Q'
-- This will add 'SpawnMenu' to user KeyBinding Settings automatically
Input.Register("SpawnMenu", "Q")

-- Subscribes for Pressing the key
Input.Bind("SpawnMenu", InputEvent.Pressed, function()
-- Opens the Spawn Menu
end)

-- Subscribes for Releasing the key
Input.Bind("SpawnMenu", InputEvent.Released, function()
-- Closes the Spawn Menu
end)

HTTP

Added a new class: HTTP!

Now we have a proper standalone class for making HTTP requests. Is also features Async HTTP requests (and thread safe!)

Performance Optimization

We have worked hard on performance techniques for Alpha update. Here's the highlights:

  • Now Basic Structs Vector and Rotator are automatically compressed when sending through the Network. Reducing it's size up to 90% in the best case! This was a great gain for network use.
  • A new setting was added Profiling which you can enable with --profiling on server and in Settings on Client. This will log all the time elapsed to run operations/scripting events and some other stuff in the Console.
  • Now HTTP requests (a.k.a. downloading files when joining a server) are automatically compressed, which may reduce the network usage when downloading big files!
  • Now Actors which are very far or not on screen will be synchronized/updated half the time to improve performance. We still want to tweak it and make it more aggressive on some cases.
  • The Assets Loading system have been reworked and is much faster now.
  • Small Props (radius < 200) will not collide with players or dynamic objects anymore. Also Bigger props will have CCD disabled by default (which drastically improved performance), this can be enabled in the Prop constructor.
  • Now VOIP uses Steam system, which provides a great compression and also custom settings through Shift+Tab menu.
  • Several improvements were made on our low-level Lua code to boost scripting performance.

Server

New additions to Server static class:

Client

New additions to Client static class:

Now when joining a server, a Progress Bar will be displayed in the Taskbar, and also it will Flash once the loading is done:

In-game Console

Now it is possible to access Server Console from within the game!

If you open it, 2 tabs will appear: client and server. You can read all server logs, and also input commands.

note

Not all logs will appear in there, only the ones outputted while you are connected to the server.

Timer

New additions to Timer:

CLI

  • Now it is possible to download multiple Assets/Packages at once with CLI, just separate them by spaces, e.g.: cli assets install quaternius city-park.

Steam Achievements

With Steam integration, we are making use of every feature possible it allows 😅!

And this includes the Achievements! We are counting on the support of a talented friend Esther who is drawing the amazing arts for them!

Little by little we will be creating more achievements and releasing them! We also count on your ideas for more!

Scripting Improvements

  • Added new Searchers to Package.Require(), we now currently support 5 searchers, which are looked in the following order:

    1. Relative to current-file-path/
    2. Relative to current-package/Client/ or current-package/Server/ (depending on your side)
    3. Relative to current-package/Shared/
    4. Relative to current-package/
    5. Relative to Packages/
  • Package.Require() now can be called in runtime and at any moment.

  • Package.RequirePackage() now will load a package as a library inside the current package, it means the package loaded will now be automatically sent to clients, and all paths it loads is relative to the package itself (and not to the one which is requiring it anymore).

  • Verbose logs will now display the current thread ID.

Renamed Default Packages

The default Packages NanosWorldWeapons and NanosWorldVehicles were renamed to nanos-world-weapons and nanos-world-vehicles, following the new correct pattern for Packages and Assets names. Including them now should be made like Package.RequirePackage("nanos-world-weapons"), the usage keeps the same (NanosWorldWeapons.AK47()).

General Changes

  • Cable got new methods: :GetAttachedStartTo() and :GetAttachedEndTo() to get if it's attached at any end.
  • Player got new methods: :SetVOIPVolume(), :GetSteamID(),
  • Pickables got new events: ReleaseUse, PullUse when Character pulls or releases its usage (i.e. trigger for weapons)
  • Improved the way the interact trigger enables for Pickables and Props.
  • Trigger got new method: :ForceOverlapChecking() which will checks for overlaps in the game thread and immediately dispatch events.
  • Added new methods for Quaternions (+, -, Normalize).
  • Added new method for generating a random Rotator: Rotator.Random().
  • Added lots of new Sounds, Animations, Props, Meshes in the Default Asset Pack.
  • Added Steam Login.
  • All .config files had it's tabs replaced with spaces.
  • .GetPairs() now only supports pairs.
  • Added Resolutions graphic settings.
  • Make Day button from In-game menu has been removed.
  • Added new Splash Effects when Props or objects enter the Water.
  • :GetValue() now has an additional parameter: fallback which will be returned if the value doesn't exist.
  • Probably many other things that were being added and were forgotten 😜.

Bug Fixes

  • Fixed World.SetFogDensity() not working.
  • Fixed Client.SetCameraLocation not working.
  • Fixed Actors.RotateTo() not doing properly math.
  • Fixed StaticMesh.GetBounds() not working.
  • Fixed Cables methods being able to be called on client side.
  • Fixed several Character properties not syncing.
  • Fixed a crash when changing Map at runtime.
  • Fixed Characters not reseting the life to max_health when Respawning.
  • Fixed dead ragdolls still moving around (from MoveTo()).
  • Fixed infinite recursion with LogEntry event.
  • Fixed Characters Morph Targets not syncing.
  • Fixed Discord custom integration not working sometimes.
  • Fixed a crash when a player had no Steam Profile image.
  • Fixed Server Announce checkbox being disabled when unchecked on New Game screen.
  • Fixed a crash when destroying entities from inside Interact event.
  • Fixed hell lot of other Crashes 💥. Thanks for the Crash Reports!

· 3 minutes de lecture
Gabriel T. Nardy

L'un de nos principaux objectifs pour nanos world est de s'amuser, et nous pensons que les petits détails sont le grand soutien pour que l'expérience soit complète. Au cours des dernières semaines, nous avons travaillé à l'amélioration et à l'ajout de petites fonctionnalités aux actions courantes telles que tirer, ramasser des objets et même à la façon dont vous percevez leur déroulement. Voici les points forts !

Nouvelles animations d'armes

Depuis le début, nos armes étaient rigides au tir donnant une impression de rigidité et de manque de fluidité. Avec la simple amélioration consistant à ajouter des animations de tir à cela, regardez comme c'est mieux :

Nouveaux effets pour les obus à balles

En plus des nouvelles animations, nous avons ajouté un détail subtil : Bullet Shells Drop SFX. Et pas si simple que ça ! Le son est joué avec précision à l'endroit et au moment où les obus frappent le sol ou toute autre surface, écoutez :

Regardez une comparaison complète avant et après de certaines armes, vous pouvez remarquer toutes les améliorations en détail !



Notez que les animations et la visée des armes de nanos world sont entièrement générées de manière procédurale, ce qui signifie que lorsque vous êtes à la première personne, l'emplacement du viseur de l'arme est calculé dynamiquement pour être positionné au milieu de vos yeux, dans un véritable mode première personne.

Sons lors du ramassage d'objets

Un détail sonore subtil a été ajouté lorsque vous saisissez et laissez tomber une arme, et aussi maintenant l'objet est légèrement projeté vers l'avant :

Lunettes de visée

Il est très facile d'ajouter des objets attachables dans n'importe quelle arme, par exemple pour attacher une lunette de visée AWP, nous utilisons le mesh SM_Scope_25x56 pour cela :

-- Crée une arme AWP
local weapon = Weapon(location or Vector(), rotation or Rotator(), "nanos-world::SK_AWP")

-- Attache un mesh statique de lunette de visée, avec un décalage configuré pour être parfaitement aligné
weapon:AddStaticMeshAttached("sight", "nanos-world::SM_Scope_25x56", "", Vector(20, 0, 11))

-- Ajuste l'emplacement du viseur pour placer le sniper à l'endroit exact où sera le centre de la lunette de visée lors de l'ADS
weapon:SetSightTransform(Vector(-15, 0, -4.6), Rotator(0, 0, 0))

Il s'agit d'un processus entièrement procédural, qui utilise également les matériaux des lunettes de visée !

tip

Vous pouvez également consulter le Package d'armes officiel, et voir comment un RedDot a été ajouté à un P90 !

That's it! Merci à tous !