Skip to main content

ยท 9 min read
Gabriel T. Nardy

Unreal Engine 5 is now the official engine of nanos world!

Unreal Engine 5โ€‹

We are thrilled to announce that Unreal Engine 5 is now the default engine of nanos world!!!โ€‹

It was an intense month of updates, improvements and bug fixes for reaching a reasonable stable version of nanos world. We are very thankful to the testers who helped to test the stability, the migration of assets and finding bugs on it!

It's worth mention that even that UE5 "stable" was released officially by epic, there are still some bugs and improvements that need to be done, in the end of this blog we will list all known bugs we already found on UE5 and are waiting for an official fix.

With this release we are aiming to have the same experience and stability as before on nanos world. We are going to introduce more and more Unreal Engine 5 features in the upcoming updates from now on, granting they will have the proper stability and integration.

Amazing new UE5 Featuresโ€‹

Here's some noteworthy new Unreal Engine 5 features which will be very useful for nanos world Asset creators!

New UIโ€‹

Unreal Engine 5 brings a suite of improvements to the look, feel, and efficiency of the user interface, creating a modern, improved workflow for all users.

It's a way better and pleasant workflow for modders and asset creators!

Geometry Toolsโ€‹

Creating meshes and maps got even easier with the built-in modeling and mesh editing tools inside UE5!

Quixel Bridgeโ€‹

The Quixel Bridge plugin for Unreal Engine gives you full-featured access to the Megascans library within the Unreal Editor. You can browse Collections, search for specific assets, and easily add assets to your Unreal Engine projects.

It comes built-in with UE5! Just drag'n drop and you have the 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! Thank you!

ยท 9 min read
Gabriel T. Nardy

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

Steam Store Pageโ€‹

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!

Please WISHLIST NOW!!!โ€‹

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.

Memoryโ€‹

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:

EntityMemory Usage BeforeMemory Usage AfterReduction
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. ๐Ÿ™

Networkโ€‹

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!

Client Sideโ€‹

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! ๐Ÿ˜€

New Class: 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!

New Class: 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!

Vehicles Tire Skid Markโ€‹

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!

Sandbox Improvementsโ€‹

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.

New Particle Methodsโ€‹

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!

Notable Improvementsโ€‹

Music Concurrencyโ€‹

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

Client-side 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!

Level Static Meshesโ€‹

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!

Async Texture Loadingโ€‹

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.

Async File Loadingโ€‹

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

New Light Methodsโ€‹

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

Assets.toml Changesโ€‹

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 ๐Ÿ˜‰.

Vehicle Collisionsโ€‹

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.

Sun Improvementsโ€‹

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! ๐Ÿฅณ

ยท 9 min read
Gabriel T. Nardy

Unreal Engine 5 Preview, new Network Authority System, Store API and more

Network Authority Systemโ€‹

As everyone knows, nanos world relies on a "server-less" solution for physics and other world operations. All the sync relies of sharing data between the players and replicating in each client. This approach brings several advantages and of course some drawbacks, in the advantages we can include a very lightweight server, where we have all the control over it, without needing to rely on Unreal's server executable or the way it handles the network.

In the other hand we got some challenges on how to distribute physics information and other stuff. Then in the beginning we created our first Network Authority system in which each player is responsible for sharing a specific set of entities from the server to others, similar to Roblox Solution.

However, just like in Roblox, some problems become more noticeable when we have many players connected with many different pings. As some players will receive the "network authority" over entities faster than others, they will start sharing their location/rotation to other players while the 'old' network authority is still the authority over that because he didn't receive the "lost network authority" message yet.

We created this diagram to exemplify the problem:

As you could notice, there is a "gap" and a "overlap" when switching network authority if we have discrepancies between players ping, causing several weird behaviors on physics objects.

Considering this and after much study, we improved our Network Authority system to make it more robust, this new way aims to fill up the gaps and ignore overlaps:

While still in a "beta" version, with this new system we intend to improve all the "warnings" and flickering problems that were occurring since then, all feedback is appreciated!

New Debug Modesโ€‹

With the addition of the new Network Authority system, we are adding a new Debug section in the Settings.

A cool setting is the Draw Network Debug which draws on World all network information:

You can find more information in the Network Authority page.

Also you can fake "packet loss" which will simulate some Sync Data being discarded.

Store APIโ€‹

Last month we released our Store, a place to share and download community Assets & Packages, integrated with the game.

Now we are releasing the Store API: You can download, upload and edit your resources through HTTP requests, check it the Swagger documentation at https://api.nanos.world/store/docs. More tutorials coming soonโ„ข.

Documentation Changesโ€‹

Modulesโ€‹

We've added a new tutorial for creating your own C Module. You can check it out at the Modules page.

Unreal Engine 5: Previewโ€‹

A week ago, Epic Games gave us the wonderful news that they were releasing Unreal Engine 5: Preview. A Preview release means most of the features are already present and almost ready for a final shipping version.

And we, as good enthusiasts, and in addition to our other blog news (November: Unreal Engine 5?) decided to give another try on converting nanos world into Unreal Engine 5. And let's move to our impressions:

Migrating nanos worldโ€‹

This time migrating nanos world to Unreal Engine 5: Preview was more trickier, we've got even more deprecated methods and some functionalities changed and/or removed, which required more hard work converting and debugging what has changed.

We've had to update a lot more code and files than the Early Access version to be able just to launch the Project. Also Vehicles had to be disabled due the new Chaos engine, which completely changes how Vehicles need to be implemented and we didn't want to bother on converting them right now.

Graphicsโ€‹

Unreal Engine 5 introduces Lumen, a new dynamic Global Illumination method, and playing with it is very cool and impressive. Here's some screenshots taken from our Testing Map:

tip

Next you can see how the object colors can reflect dynamically in the environment lights.

tip

Here we can see the contribution of Emissive Materials to the environment.

A cool feature is that we can enable Hardware-Accelerated for calculating Lumen (which replaces Hardware Ray Tracing), and tested with a RTX 3070 makes it even more beauty at a really low GPU cost.

Technicalโ€‹

In the technical aspect, the biggest changes Unreal 5 brings are:

  • Lumen (Dynamic Global Illumination)
  • Nanite (Mesh Virtualization)
  • Chaos (new Physics Engine)
  • and also not less important, the new features regarding World/Level creation (One File Per Actor and World Partition)

While Lumen, Nanite and World features can be toggled on or off (we can choose to use it or not), the same truth is not valid for Chaos. Unreal is completely removing PhysX and replacing by it's new Physics Engine: Chaos. Although we are open to new things, unfortunately Chaos doesn't seem to be in a totally good state, neither at least at the same level/stability as PhysX.

We could experience several Collision glitches, such as objects flickering, wrong "collision boxes", objects flying through walls, bugs with Rope (Cable), objects sleeping randomly, bad Hit events callbacks and so on.

Most of the problems we could find an workaround (like applying force to some objects so they don't sleep, or finding a workaround on the Cables settings), but the main problem we've found using Chaos is the Hit feedback event, which are totally inconsistent, sometimes they are triggered with force 0, which annoys the hit sounds and also the nanos world Hit events from being triggered, and this can break gameplay/scripting functionalities.

Not to mention the objects flickering/disappearing/losing collisions which gives a really bad impression on the game quality.

And we didn't even started implementing the new Chaos Vehicles, can't wait what we gonna find there ๐Ÿ˜….

Stabilityโ€‹

Actually, this version of Unreal surprised us positively, it had less crashes than in early access, but still had some, but in this case it was when we were stressing the game really hard using several balloons, cables and props flying around. Although I was a little disappointed as most of the bugs I found in the Early Access were still prevent in this Preview and weren't yet fixed.

Also some rare bugs could be noticed, like suddenly being teleported to the 0, 0, 0 location, which we couldn't yet find the reason.

UE5 worth it now?โ€‹

Summing up, we've created a list of positive and negative points according to our view regarding if we should or not migrate to Unreal 5 "right now":

Also, another point to consider: we are going to migrate to Unreal Engine 5 soon or later, the decision is "when". ๐Ÿ˜‰

Negative Points ๐Ÿ‘Žโ€‹

  • Gameplay Bugs related to Physics, objects jumping, flickering, bad collisions happening, objects passing through floor/walls due Chaos.
  • Visual Artifacts, not only related to Lumen, but to the standard Rendering methods as well.
  • Random Unreal internal Crashes, which we cannot fix by ourselves.
  • More frequent Unreal updates, much probably we are going to have other Preview version, and after the UE5 release we are going to get several hotfixes, and each one will much likely require us from rebuilding all assets and publishing a new version of them, otherwise they won't work in the new versions. This means the Asset Packs won't work in newer Unreal versions.
  • Using Lumen has it's drawbacks, such as the performance, which can hit from 25% to 50% of the FPS (but can be toggled on/off).

Positive Points ๐Ÿ‘โ€‹

  • We are going to be the first ones to explore Unreal Engine 5 (which can be bad because some problems no one figured out yet, but personally I love exploring new features and using new tools).
  • nanos world will have a great self-marketing potential, and also can bring lots of new enthusiasts on UE5 to know, play and create with the game.
  • Lumen is fun and beautiful.
  • New World/Level tools which allows creating big maps and also improves a lot the co-creations pipelines using the One File Per Actor system and World Partition!
  • New Unreal Editor which has a fresh and pleasing look.
  • Lots of new tools and technology to use, including Nanite, Chaos Destruction, Animation tools (which can help us from dynamically linking your custom Animation Blueprint) and the new MetaSounds.
  • It's really hard to convert nanos world from scratch every update to test it's stability, I can't reuse the previous conversion because many changes are in blueprints (UI) that I can't merge and lots had changed since then. So converting once and right now we can already start digging, fixing stuff and the next unreal updates will be easier and faster to test and maintain.

Unlike Early Access, this version seemed to have more positives than negatives points, and it seems like a better opportunity than before to officially migrate nanos world. Come to our Discord to discuss this idea with us! We are going to make a poll to bring all feedback from the community!

Community Spotlightโ€‹

Here we'd like to share all amazing stuff our community is doing the last weeks!

Timmy is doing an amazing job, and is sharing it's new Inventory System:

Also Timmy created a nice smooth Weather system transition:

MegaThorx released it's brand new EGUI library. A Package for creating GUIs from scripting! It also contains it's own complete documentation!

Voltaism shared a very cool implementation of Bots playing his game-mode VZombies by themselves with no Players:

ยท 10 min read
Gabriel T. Nardy

Introducing Store, New Classes and all Retroactive Updates!

This blog will also summary up the highlights of everything that has been developed since the last blog in November! Detailed Changelog is available in our Discord! Stay tuned!

Introducing: Store & Vault!โ€‹

It is with great joy that we finally announce the long-awaited Store! The Store is a marketplace where everyone will be able to upload their Assets, Packages, release new versions, create Teams and much more! 100% integrated with the Vault and the CLI!

tip

The store development is being headed by @MegaThorx! This is the initial version and several updates will come! All feedback is appreciated!

Features Highlightsโ€‹

  • Creation of Asset Packs & Packages pages, including images and description.

  • Upload of new Versions, with ability to tag as Draft, Beta and Stable.

  • Create a Team and add Team members.

  • Tag & Category system.

tip

Check out the complete documentation here.

nanos world Store available now on https://store.nanos.world/

Server Tokenโ€‹

With the addition of the Store, we've got a new feature: Server Token.

This token is required when downloading any content from the Store using the CLI (and soonโ„ข when using other integration features), you must set it in your Config.toml file as token setting.

To generate a token please refer to https://store.nanos.world/settings/tokens/.

New Class: Canvasโ€‹

We've added a new class to completely replace our old Render Static Class: Canvas! Canvas is like a painting frame, you can draw anything onto it, from Lines, Squares to Materials and Textures!

You can also use it as UI or paint any object with a Canvas using :SetMaterialFromCanvas()!

Now it's way easier to create a basic UI!

-- Spawns a Canvas
local canvas = Canvas(true, Color.TRANSPARENT, 0, true)

-- Subscribes for Update, we can only Draw inside this event
canvas:Subscribe("Update", function(self, width, height)
-- Draws a Text in the middle of the screen
self:DrawText("Hello World!", Vector2D(width / 2, height / 2))

-- Draws a red line Horizontally
self:DrawLine(Vector2D(0, height / 2), Vector2D(width, height / 2), 10, Color.RED)
end)

The Basic HUD (Canvas) Tutorial has been updated as well!

Steam Input + Controllerโ€‹

We've managed to integrate Steam Input. If you are not familiar with that, Steam Input allows you to set up and play with any Controller, and also configure it through Steam Interface.

It is a nice integration because it's a relatively simple implementation that allows nanos world to be played with controllers, and it gives users the possibility to customize bindings and share with the community.

An initial version has been released in the latest update, more bindings and configurations will come next.

New built-in Key Glyphsโ€‹

We've added a utility method to retrieve a Glyph/Image from a given Key. Just use Input.GetKeyIcon(key_name) and it will return the path of the image which can be used as Texture or as an usual image <img> in the HTML!

You can use it combined with Input.GetMappedKey() to dynamically get the Key Glyph based on the user's key binding configuration.

Bullet Trails Improvementโ€‹

We have reworked our default Bullet Trail particles. Before, depending on the point of view you could see a big sphere passing through and also several glitches in the sky. Now it was reworked to be more realistic and without any artifact!

New Map Configurationsโ€‹

Now it is possible to create individual Configuration files for each Map, in which you can define all compatible game-modes, spawn locations and add custom data as well!

Also, it is possible to set up a complete Package which will automatically load when this map is loaded.

Map.toml
# map configurations
[map]
# compatible game-modes
compatible_game_modes = [
"sandbox",
"deathmatch"
]

# list of spawn points
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"

Check the complete documentation at Map Script & Data.

tip

The following changes were added back in 1.1.0-1.3.0 update, we gonna highlight the best ones here!

Interactive CLIโ€‹

An amazing and extremely useful functionality that has been added to the CLI is the creation of Asset Packs & Packages interactively.

Use add [package|assets] NAME and it will create the Asset Pack or Package interactively, it will create the Configuration and Default files as well!

Actor Tagsโ€‹

At the request of our testers, we implemented a interface to access Unreal's Actor Tags, with Actor.SetActorTag() and Actor.GetActorTag() you can set/get unreal Actor Tags directly from Scripting (client side).

Actor Tags are just an array of strings which can be accessed from anywhere, including from Unreal Blueprint. This small addition increases the range of possibilities for integration with blueprints and external implementations.

New Class: SceneCaptureโ€‹

This is a very cool feature released back in 1.1.0 update.

SceneCapture is a Camera Actor which captures the environment in real time, and we can get the outputted result with :SetMaterialFromSceneCapture() into any other Actor!

It has several configurable performance tweaks which makes it more efficient if you are not looking at the actors and also reduces the capture rate if you are too far!

Assets Cachingโ€‹

We've implemented a great feature which improves the performance and reduce stuttering when (re)loading Assets in runtime. Stuttering usually happen when using HDD and when loading something from Disk. Now every loaded asset (including files from disk - .ogg and .jpg) is cached and reused when loading again automatically. We still intend to add some options to auto load all assets from all loaded Asset Packs when entering a server and also a scriptable option to async load an Asset prior the use to further improve the stuttering and add more freedom to the scripters.

Light Profilesโ€‹

We've added a new cool setting for Lights: Light Profile, which allows changing the Light Profile Texture of a Light with Light:SetTextureLightProfile().

It is possible to set to one of our built-in Light Profiles. All built-in Light Profiles were imported from IES Light Profile Pack.

This can add a realistic Flashlight effect to your Lights for example.

Vehicle Improvementsโ€‹

Now it is possible to manually control if the Vehicle Engine is started or not, also if it auto starts when a driver gets in with Vehicle:SetAutoStartEngine().

Also we added a small detail: Taillights, it gets Red when braking and White when going backwards, it is customizable with Vehicle:SetTaillightsSetup():

note

The Vehicle Mesh colors are still not in sync with the Headlights neither the Taillights, this will be improved in the next updates!

Parachute Customizationโ€‹

We've added an useful customization to the built-in parachute, now it's possible to change it's texture with 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.

Community Spotlightโ€‹

Our community has been working hard on several amazing stuff, we would like to share it with you!

T-Dronesโ€‹

by Timmy

Timmy worked on very cool fully functional Drone package, check it out! Fully integrated with the new SceneCapture for a "3D Camera System". Also the Drone has a function to back to home! Amazing!

T-Drones is a script designed to emulate the behavior of hobby drones, and thought to run on the vast majority of game-modes.

It has been conceived to be as modular as possible and to adapt to the needs of anyone who wants to make modifications or additions easily.

KOTOR RPโ€‹

by ERO Team (NegativeName, Mougel, False & Tark)

The ERO Team is working hard on a blasting Star Wars RP game-mode (KOTOR RP), this gonna be dope! Here's some screenshots of the worlds and the Combo system of the Light Saber!

Star Wars KOTOR RP is a french role-play game-mode in the Star Wars universe.

You will play a character in this distant galaxy. Your role will depend on you. Will you join the Sith Empire to enslave the galaxy, protect it by joining the Galactic Republic, or take no side.

The choice is yours! Become a Jedi, a Sith, a soldier, a mercenary, or a simple merchant.

T-Bomberโ€‹

by Timmy

Also Timmy is creating a Bomberman game-mode! Excellent work, I can't wait to play it!

T-Bomber is a Bomberman-like game-mode Heavily inspired by the famous maze game.

It aims to replicate the original Bomberman experience with some extra spice, and to show off some of the scripting possibilities of nanos world.

The rules are very simple, the last one alive wins!

VZombiesโ€‹

by Voltaism

Voltaism is working on his Zombies game-mode based on COD's one. It's incredibly fun and horrifying!

Nearly finished game-mode that is basically a clone of the classic Call Of Duty: Zombies mode where you have to survive against zombies the longer as you can!

This game-mode also has bots that can play with you.

nanos BattleField 2043โ€‹

by LighterChu, Trevor & MemeFrug

Battlefield 2042 came out, we expected the best. Why did we make nanos battlefield 2043, well it is not just Battlefield 2042 it's all battlefields mixed in the future of combine titles are here.

Conclusionโ€‹

Thank you again for your feedback and support, every suggestion and bug found makes the nanos world wheel spin faster and faster!

note

This blog contained several highlights of our progress in the last month. Note that countless improvements, bug fixes and some other new features are available in the changelog on our Discord and also in-game.

We are aware of your biggest requests and we want to implement them as soon as possible to make the nanos world API more and more complete. We still have a long roadmap to go through, and we have big pillars of goals to bring new types of vehicles (including air and sea), customizable characters (any skeleton), direct Blueprint support and more!

Right away we desire to rework our Steam Store Page, it was left behind due to some technical issues and we want to revive it, with that we desire to do a rebranding of the nanos world, we know that logos and great capsule images that relate to the game theme are of great importance for Steam self-marketing to attract new players!

See you in the next! Thank you!

ยท 7 min read
Gabriel T. Nardy

New Classes, Unreal Engine 5 Experiments and Scripting Improvements!

New Class: Decalโ€‹

We've added a new class to spawning Decals! Decals are Materials that are projected onto meshes in your level, including Static Meshes and Skeletal Meshes. You can load any .jpg from disk during runtime and use it as parameter in your Decal Material!

As Decals are inherited from Actors, you can change it's location, rotation, attach it or call any method from Base Actor on it!

New Class: Billboardโ€‹

We've added another new class to spawning Billboards! A Billboard is a 2D Material that will be rendered always facing the camera. It's possible to use all custom methods from Paintable as well and spawning custom textures on it. You can tweak it's material properties with Base Paintable or even use a material of your own.

As Billboards are inherited from Actors, you can change it's location, rotation, attach it or call any method from Base Actor on it!

New Class: Meleeโ€‹

We are getting a brand new very-requested class: Melee! The Melee is coming to replace the former Item class.

Melee is a new Class (which works exactly as the old Item) but now with ability to attack with it. It is possible to add custom animations, a cooldown and tweak the damage of it. The attack physics is procedurally based on the animation, this means you can stab, slash or even smash things only by changing the animation and then the hit will be based on that!

The results are quite fun, the hit/damage also affects the environment dynamically ๐Ÿ˜Š

Scripting Improvementsโ€‹

We've listen to your demand and we're finally bringing long-awaited new amazing scripting features!

Real Hot Reloadโ€‹

After several requests, we've started implementing a real Hot Reload feature!

The real Hot Reloading is an amazing feature which allows you loading new scripting code without needing to lose all the current memory state of your Packages. It works by loading the scripting files over the current running Lua VM.

Currently it works by manually triggering it in the console:

package hotreload [PACKAGE_NAME|all]

This will update the clients with the newer files version and load the Index.lua files from the packages. It will keep the current memory state of the packages as it is. It will also unsubscribe from all registered Events in that package.

In the future, it would be possible to add a real-time checker to automatically update the modified files after saving them.

Extending Classesโ€‹

A new cool feature that is being added is Extending and Inheriting nanos world Classes. This is still experimental and we want to collect your feedback and find remaining bugs.

It is now possible to Add new Methods to nanos world Classes, Override existing Methods and even Override index and newindex.

Adding a new method to a class is easy like this:

-- Adding a new method 'AddScore' to Player class
function Player:AddScore(score)
self:SetValue("score", self:GetValue("score", 0) + score)
end

-- Using it
my_player:AddScore(10)

Read the full documentation here.

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 min read
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. I.e. 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 min read
Gabriel T. Nardy

One of our main focus for nanos world is having fun, and we believe that the small details are the big support for the experience to be complete. In the past weeks, we've been working on improving and adding small features to common actions such as firing, picking up objects and even how you perceive them happening. Here's the highlights!

New Weapon Animationsโ€‹

Since the beginning, our weapons were stiff when shooting giving an impression of rigidity and lack of fluidity. With the simple improvement of adding firing animations to that, look how it looks better:

New effects for Bullet Shellsโ€‹

Besides new animations, we added a subtle detail: Bullet Shells Drop SFX. And not that simple! The sound is precisely played in the location and moment the shells hit the ground or any surface, listen:

Check out a complete before and after comparison of some of the weapons, you can notice all the improvements in detail!



Note that nanos world weapons animations and aiming are completely generated procedurally, that means when you are in First Person, the weapon sight location is calculated dynamically to be positioned right in the middle of your eyes, in a true first person mode.

SFX when Picking Up objectsโ€‹

A subtle sound detail added when you grab and drop a Weapon, and also now the object is slightly thrown to forward:

Scopesโ€‹

Is is really easy to add attachable objects in any Weapon, for example attaching a AWP Scope, we use the SM_Scope_25x56 mesh for that:

-- Spawns a AWP Weapon
local weapon = Weapon(location or Vector(), rotation or Rotator(), "nanos-world::SK_AWP")

-- Attaches a Scope mesh, with configured offset to be perfectly aligned
weapon:AddStaticMeshAttached("sight", "nanos-world::SM_Scope_25x56", "", Vector(20, 0, 11))

-- Adjusts Sight Location to put the Sniper at exact location where the scope center will be when ADS
weapon:SetSightTransform(Vector(-15, 0, -4.6), Rotator(0, 0, 0))

This is completely procedural, it also uses the 3D Mesh scope materials!

tip

You can also check the Official Weapons Package, and see how a RedDot has been added to a P90!

That's it! Thank you all!

ยท 4 min read
Gabriel T. Nardy

Lot's of improvements on Sandbox game-mode has been made in the past month, here's the highlights!

Reworked Spawn Menu UI & UXโ€‹

We thought a lot about how to make the experience of sandbox game-mode even better. And with that we made several improvements, including the addition of categories in the sidebar, new tabs and even new stuff to spawn! Not to mention several bug fixes and the overall usability has been improved! No more movement blocked when opening the Spawn Menu!

New Props ๐Ÿ“ฆโ€‹

We're importing a big pack of props that will come with the base game.

We've been debating a lot what the threshold is between shipping the game with several props or shipping it with no props and just allowing the player to download whatever they want from the Vault. It's a tough decision, but for now we've decided to deliver a basic pack with some cool stuff, including new Construction Props, Fruits, Tools and even new Weapons!

NPCs ๐Ÿค–โ€‹

It's been in there for some time, but we'd like to highlight it! On Spawn Menu now there is a new tab which allows spawning NPCs.

Those NPCs has some basic functionality defined in Lua, they walk around randomly and even run away when they are threatened! Insane!

New Weapons ๐Ÿ”ซโ€‹

This is not strictly related to Sandbox game-mode, but besides the new Props, we are shipping brand new and configured Weapons in the nanos-world-weapons default package!

This includes a P90, UMP-45, M1911 Pistol and many other!

Weapons Pattern ๐ŸŽจโ€‹

Besides the categories in the left-side, we are starting to add a new section to be our "options section", we started by adding a new option in the Weapons tab: Patterns.

You can change and select any pattern from the hundreds included in the game to be applied in your weapon (it is synchronized with other players as well)! It's is really easy to add your own .jpg as pattern in the menu!

Breakable Props ๐Ÿ‰โ€‹

This is an awesome feature which I've been working in the last weeks, it's something 100% scripting side, I'm not sure yet if this should become a built-in thing.

But now on Sandbox we can configure Props to break when Hit or TakeDamage! It is also possible to easily configure which debris will be generated, it's randomness and much more, see an example:

SetBreakableProp("nanos-world::SM_Fruit_Watermelon_01", 700, {
{ mesh = "nanos-world::SM_Fruit_Watermelon_01_Half_01", rotation = Rotator() },
{ mesh = "nanos-world::SM_Fruit_Watermelon_01_Half_01", rotation = Rotator(180, 0, 0) },
{ mesh = "nanos-world::SM_Fruit_Watermelon_01_Crust_01" },
{ mesh = "nanos-world::SM_Fruit_Watermelon_01_Slice_01" },
{ mesh = "nanos-world::SM_Fruit_Watermelon_01_Slice_01" },
})

And voila every time a Watermelon spawns through the Spawn Menu, it will be breakable!

Explosive Props ๐Ÿ’ฅโ€‹

In a sub-category as Breakable Props, we can have Explosive ones! Which will not only break if they take damage or get Hit, but will also EXPLODE! Causing damage, and even start a chain reaction of explosions!

As you can see it can be very dangerous to play with fire! ๐Ÿ˜…

What's next! ๐Ÿ’กโ€‹

We are currently working on making everything ready for the official Alpha 1.0.0 release! We are slowly distributing Beta Keys to some testers, this way we can calmly fix some last bugs and give the finishing touches before the full launch!

We've also implemented a LOT of new content for modding & scripting that will still be announced in the next weeks! This will make a HUGE changelog list so probably I will highlight all features in separated Blog News!

That's all for this blog! Thank you so much for all your support! ๐Ÿฅฐ

ยท 3 min read
Gabriel T. Nardy

So long has passed since we started developing nanos world. In late 2017 we started digging about this ambitious idea, we dreamed of creating a seamless open world sandbox gaming experience without the limitations of reverse engineering games such as Just Cause 3 or Grand Theft Auto. So we decided to create a game from scratch, but only in mid 2019 we started working hard, it was really a very enthusiastic idea, but after a lot of blood, love and sweat we are getting there! ๐Ÿฅฐ

Alpha 1.0.0!โ€‹

And we're finally reaching the long-awaited Alpha announcement! Lots of things have happened, lots of iterations have been done (and lots will come ๐Ÿ˜œ) and thanks to all the support from our community and your feedback, we're getting closer and closer to releasing nanos world!

The official Alpha 1.0.0 update will come with tons of scripting and gaming news!

Steam!โ€‹

Along with the Alpha announcement, we have LOTS of other surprises! As you may have noticed, now nanos world is on STEAM!!! Itch was very good and helped us a lot at the time, and we will always be grateful that their service and support has always been free! But then we made the decision to take this next step moving to the biggest game platform!

tip

๐ŸŽ‹ Please don't forget to WISHLIST and share nanos world steam page!

New Website!โ€‹

We've created a brand new website which contains a lot of information about nanos world which will help us marketing it! If you didn't yet, please take a look at https://nanos.world!

Lot of news to come!โ€‹

In the meantime since the last update (0.73.0), we've accumulated A LOT of new content for nanos world. Most couldn't be released as we were working alongside the Steam integration.

๐Ÿ”ข Versionsโ€‹

With the arrival of Steam, there will be several changes to how we distribute updates! We will now have two branches stable/latest and bleeding-edge, we intend to keep the default branch as stable as possible, while working in upcoming content in the bleeding-edge branch.

By default all testers will have access to bleeding-edge to be able to help us testing the new features before releasing them officially! Also in the docs we are going to have two versions which represent each of the branch!

info

The version a1.0.0 is already present in bleeding-edge branch and will come to stable as soon as possible! Really soon we will start publishing the full changelog of that!

๐Ÿงช Testersโ€‹

With this new stage we decided to start fresh and restart our Tester subscriptions. Please check out Sign Up for Alpha Testing for more information on how to become a Tester.

If you already a Tester, please reach us in discord so you can get a Steam key. We will prioritize active members in the community!

๐Ÿ”ฎ Future plansโ€‹

We've also created a new Roadmap page with all our plans and redirecting to our official Roadmap boards!

In the coming weeks we will gradually start distributing some Steam Keys and as soon we will release the first Steam update with a lot of new content!

Stay tuned! And thank you so much for all your support!

ยท 2 min read
Gabriel T. Nardy

Some time ago, we released our brand new docs version written in Markdown! It was using GitBook services and hosting, the jump was big from the previous version written in Sphinx.

Since then we are exploring the market possibilities, we've tested ReadMe, ReType and MdBook as well.

And then finally we've found Docusaurus! A open source Docs which allows a lot of customization, and even has some amazing built-in features that we can use! This is a next jump towards the success!

Check out the Key Features added in the full post!