Ir para o conteúdo principal

Oct: Alpha released!

· Leitura de 11 minutos
Gabriel T. Nardy
nanos world developer (SyedMuhammad)

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!