Skip to content

Commit

Permalink
Docusaurus version updated
Browse files Browse the repository at this point in the history
Fixed code highlights comments
Fixed some typos
Updated Setting Up UE Guide
Video Component autoplay and loop
Base Class shows children
Class Builder Constructor Description
Images border rounded
January 2025 News Blog
  • Loading branch information
gtnardy committed Jan 8, 2025
1 parent 75b4dd5 commit c6e4f6a
Show file tree
Hide file tree
Showing 25 changed files with 2,450 additions and 1,406 deletions.
168 changes: 168 additions & 0 deletions blog/2025-01-08-january.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
---
slug: january-2025
title: "Jan: Unreal Engine 5.5 & Enhanced Input!"
authors: gtnardy
tags: [updates]
image: /img/blog/2023-january/january-news.webp
---

import { Classes, UtilityClasses, MediaLegend, ReferenceLink } from '@site/src/components/_nanos';


**Unreal Engine 5.5 & Enhanced Input System!**

![](/img/blog/2023-january/january-news.webp)

Welcome to our roundup of the latest updates from the last months!

<!--truncate-->


## Unreal Engine 5.5

![](/img/blog/2025-january/ue55.webp)

Although it may feel like just yesterday that we transitioned to 5.4, we decided that we should already upgrade to **5.5** instead of waiting several months for the next 5.6. So we've already started preparing for the transition to Unreal Engine 5.5 and are quite ready for the update!

However, after several testing, we've decided to hold off until hotfix **5.5.2** is released. The current version (5.5.1) has some known issues, particularly with packaging and user-generated content which are already being addressed by Epic in their [Bug Tracker](https://issues.unrealengine.com/issue/UE-228884).

Once they release this hotfix, we'll move forward with the update and allow more space for broad tests with you!


## Enhanced Input System

We have finally implemented the new Unreal's [Enhanced Input System](https://dev.epicgames.com/documentation/en-us/unreal-engine/enhanced-input-in-unreal-engine)!

![](/img/blog/2025-january/input.webp)

<MediaLegend>Input Keybinding Settings reworked to handle Unreal's Enhanced Input System</MediaLegend>

This required a significant internal overhaul of all our gameplay classes (characters, vehicles, weapons, and menu interactions), which will reset all current configurations.

Please make sure to revisit your keybinding settings and adjust them to your preference after this update is launched!


### Scripting Changes

If you were binding to native key bindings, you will need to update your scripts. With the new Enhanced Input System, each Keybinding is now separated in a different name.

Before we registered like this:

```lua title="Client/Input.lua"
Input.Bind("MoveForward", InputEvent.Pressed, function(delta)
-- Before it returned delta from -1.0 (backwards) to 1.0 (forward)
Console.Log("MoveForward: ", delta)
end)
```

Now each Input returns delta from 0.0 - 1.0, meaning just the amount pressed, and we need to Bind for each KeyBinding specifically.

This way, `MoveForward` (W) is just for moving forward, `MoveBackward` (S) is just for moving backwards:

```lua title="Client/Input.lua"
Input.Bind("MoveForward", InputEvent.Pressed, function(delta)
-- Now it returns delta from 0.0 to 1.0
Console.Log("MoveForward: ", delta)
end)

Input.Bind("MoveBackward", InputEvent.Pressed, function(delta)
-- Now it returns delta from 0.0 to 1.0
Console.Log("MoveBackward: ", delta)
end)
```

:::tip

You can find the exact Binding Name for the native bindings at the KeyBindings settings, by hovering them:

![](/img/blog/2025-january/keybindings-names.webp)

<MediaLegend>Keybindings settings showing the KeyBinding Name when hovering</MediaLegend>

:::


## Latest Blog at Main Menu

We've updated the main menu to display the **latest blog news** directly. This new clickable section redirects you to the corresponding post in our news blog!

![](/img/blog/2025-january/rss.webp)

<MediaLegend>Home Menu Blog News showing the latest Blog post</MediaLegend>


## Docs Improvements

We've updated several aspects of our documentation. Here are some improvements:

- It has been updated to the latest **Docusaurus** version.
- The [**Setting Up Unreal Engine**](/docs/next/assets-modding/creating-assets/setting-up-ue) page has been revised and updated. Some dependencies have been removed and the SDK version was updated.
- Several typos and minor bugs have been fixed.
- The **API Generator** got several improvements, tweaks and QoL adjustments.
- Now **Videos** will auto-play muted.
- The **Base Class Pop-up** now shows all its child classes for better clarity:

![](/img/blog/2025-january/base-childs.webp)

<MediaLegend>Base Class Popup showing child Classes</MediaLegend>


## Disconnected Popup

We added a new **Retry** button when you are disconnected from a server, to allow fast reconnection:

![](/img/blog/2025-january/retry.webp)

<MediaLegend>Disconnect Popup with Retry button</MediaLegend>


## Cache Files Location

Logs, cache images, cache packages and other temporary files are now stored in the **AppData** directory instead of the game installation directory.

This change resolves issues with restricted directories for non-admin users and centralizes all disposable files for easier management.

We've also updated your House Keeping menu to address the correct new paths.

![](/img/blog/2025-january/house-keeping.webp)

<MediaLegend>House Keeping menu</MediaLegend>


## Updated Dependencies

We've updated our internal dependencies to ensure stability and performance:

- **CEF** updated to version 131.
- **SteamSDK** updated to version 1.61


## Enabled Plugins

As some of you asked, we've enabled the following plugins to be used by your UGC: **PoseSearch**, **AnimationWarping**, **MotionWarping** and **Chooser**.


## Tons of Bug Fixes

Thanks to your reports, we've managed to fix several bugs as well, to list a few:

- Fixed random crash on Linux server.
- Fixed Achievements not displaying correctly.
- Fixed CharacterSimple not syncing Attachables or Paintable data.
- Fixed UI Audio Setting not applying correctly.
- Fixed some game crashes.
- Fixed a Fatal Error related to Highlighting.
- Fixed .ogg sounds not playing.
- Fixed sounds with auto_play not playing when loaded.
- And more.

Once we push the update, you will be able to read all changes in our [Changelog](/changelog).


## Conclusion

Hey all, as this is the first news blog of the year I really hope you enjoyed your holidays and I wish you all a great year 2025!

This news blog was a kick off for us to start off on the right foot, the updates described here are just the beginning of many great news to come! I'm already preparing awesome new features to make nanos world the best sandbox game ever!

Thank you for being a part of our journey, and I can't wait to share more exciting updates with you soon!
10 changes: 7 additions & 3 deletions blog/authors.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
gtnardy:
name: Gabriel T. Nardy
title: nanos world developer (SyedMuhammad)
url: https://twitter.com/gtnardy
name: Gabriel • SyedMuhammad
title: lead developer™
page: true
description: 'nanos world Lead Developer.'
image_url: /img/blog/gtnardy.jpg
socials:
x: gtnardy
github: gtnardy
14 changes: 5 additions & 9 deletions docs/assets-modding/creating-assets/setting-up-ue.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,20 +37,16 @@ On Windows, the download of Unreal Engine must be done from inside [Epic Games L

Since newer versions of Unreal, it's required to install some SDKs to be able to cook assets on it. You can install them directly by downloading from Microsoft websites, or using Visual Studio Installer if you already have it installed.

#### .NET Core 3.1

Install [.NET Core 3.1](https://dotnet.microsoft.com/en-us/download/dotnet/3.1) directly from Microsoft website.
#### Windows SDK

- (recommended) If you have [Visual Studio](https://visualstudio.microsoft.com/downloads/) installed, you can use Visual Studio Installer to install Windows 10 SDK through there. Just open the **Individual components** tab and install `Windows 11 SDK (10.0.26100.0)`:

#### Windows 10 SDK
![Windows SDK Installation](/img/docs/windows-10-sdk-vs.webp)

- (recommended) If you have [Visual Studio](https://visualstudio.microsoft.com/downloads/) installed, you can use Visual Studio Installer to install Windows 10 SDK through there. Just open the **Individual components** tab and install `Windows 10 SDK (10.0.20348.0)`:
- Otherwise, you can install Windows SDK directly from [Microsoft website](https://developer.microsoft.com/en-us/windows/downloads/windows-sdk/) and select `Download the Installer >`:

![Windows 10 SDK Installation](/img/docs/windows-10-sdk-vs.webp)

- Otherwise, you can install Windows 10 SDK directly from [Microsoft website](https://developer.microsoft.com/en-us/windows/downloads/windows-sdk/) and select `Windows SDK for Desktop C++ amd64 Apps`:

![Windows 10 SDK Installation](/img/docs/windows-10-sdk.webp)
![Windows SDK Installation](/img/docs/windows-10-sdk.webp)


## On Linux
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ The example above re-renders and updates all health/ammo information ever tick,
HUDCanvas = Canvas(true, Color.TRANSPARENT, 0, true)

-- Use 0.033, so it only updates every 0.033ms (i.e. at 30 fps)
// highlight-next-line
-- highlight-next-line
HUDCanvas = Canvas(true, Color.TRANSPARENT, 0.033, true)
```

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ Inside your Package’s Client folder, create a new folder \(optional\) called `

![](/img/docs/tutorials/html-02.webp)

Inside `UI/` let’s create the following files: `index.html`, `style.cs` and `index.js`:
Inside `UI/` let’s create the following files: `index.html`, `style.css` and `index.js`:

:::info

Expand Down
2 changes: 1 addition & 1 deletion docs/scripting-reference/classes/sound.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ local ogg_sound = Sound(Vector(), "package://my-package/Client/awesome_beep.ogg"

:::info Note

**`auto_destroy`** means the Entity will be immediately destroyed after spawned, losing references to the _Particle System_ spawned in-game. So if the _Particle System_ itself loops indefinitely, it will keep playing until the Player reconnects.
**`auto_destroy`** means the Entity will be immediately destroyed after spawned, losing references to the _Sound_ spawned in-game. So if the _Sound_ itself loops indefinitely, it will keep playing until the Player reconnects.

:::

Expand Down
12 changes: 12 additions & 0 deletions docs/scripting-reference/static-classes/input.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,18 @@ Input.Bind("SpawnMenu", InputEvent.Released, function()
end)
```

```lua title="Client/Index.lua"
-- Subscribes for native Bindings
Input.Bind("MoveForward", InputEvent.Pressed, function(delta)
-- Pressed MoveForward key (usually W)
end)

-- Subscribes for native Bindings
Input.Bind("MoveBackward", InputEvent.Pressed, function(delta)
-- Pressed MoveBackward key (usually S)
end)
```

<ExamplesDeclaration type="StaticClass" name="Input" />


Expand Down
5 changes: 3 additions & 2 deletions docusaurus.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,8 @@ module.exports = {
if (locale !== 'en') {
return `https://crowdin.com/project/nanos-world-docs/${locale}`;
}
return `https://github.com/nanos-world/docs/edit/master/${versionDocsDirPath}/${docPath}`;
// forces bleeding-edge version
return `https://github.com/nanos-world/docs/edit/master/docs/${docPath}`;
},
showLastUpdateAuthor: true,
showLastUpdateTime: true,
Expand All @@ -157,7 +158,7 @@ module.exports = {
label: 'bleeding-edge 🩸',
},
latest: {
label: 'latest - a1.65.x ⚖️',
label: 'latest - a1.66.x ⚖️',
}
},
},
Expand Down
8 changes: 4 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,15 @@
},
"dependencies": {
"@crowdin/cli": "^3.15.0",
"@docusaurus/core": "^3.5.2",
"@docusaurus/preset-classic": "^3.5.2",
"@docusaurus/core": "^3.7.0",
"@docusaurus/preset-classic": "^3.7.0",
"@saucelabs/theme-github-codeblock": "^0.3.0",
"@tippyjs/react": "^4.2.6",
"docusaurus-plugin-image-zoom": "^1.0.1",
"node-polyfill-webpack-plugin": "^2.0.1",
"prism-react-renderer": "^1.3.5",
"react": "^18.2.0",
"react-dom": "^18.2.0"
"react": "^19.0.0",
"react-dom": "^19.0.0"
},
"browserslist": {
"production": [
Expand Down
2 changes: 1 addition & 1 deletion src/api
Submodule api updated 66 files
+1 −1 Classes/Billboard.json
+1 −1 Classes/Blueprint.json
+1 −1 Classes/Cable.json
+1 −1 Classes/Canvas.json
+1 −1 Classes/Character.json
+1 −1 Classes/CharacterSimple.json
+1 −1 Classes/Database.json
+1 −1 Classes/Decal.json
+1 −1 Classes/File.json
+1 −1 Classes/Gizmo.json
+1 −1 Classes/Grenade.json
+1 −1 Classes/Light.json
+1 −1 Classes/Melee.json
+1 −1 Classes/Particle.json
+1 −1 Classes/Prop.json
+1 −1 Classes/SceneCapture.json
+1 −1 Classes/Sound.json
+1 −1 Classes/StaticMesh.json
+1 −1 Classes/TextRender.json
+1 −1 Classes/Trigger.json
+1 −1 Classes/VehicleWater.json
+1 −1 Classes/VehicleWheeled.json
+1 −1 Classes/Weapon.json
+1 −1 Classes/WebUI.json
+4 −2 Classes/Widget.json
+2 −2 Preprocessor.js
+1 −1 Stable/Classes/Billboard.json
+1 −1 Stable/Classes/Blueprint.json
+1 −1 Stable/Classes/Cable.json
+1 −1 Stable/Classes/Canvas.json
+1 −1 Stable/Classes/Character.json
+1 −1 Stable/Classes/CharacterSimple.json
+1 −1 Stable/Classes/Database.json
+1 −1 Stable/Classes/Decal.json
+1 −1 Stable/Classes/File.json
+1 −1 Stable/Classes/Gizmo.json
+1 −1 Stable/Classes/Grenade.json
+1 −1 Stable/Classes/Light.json
+1 −1 Stable/Classes/Melee.json
+1 −1 Stable/Classes/Particle.json
+1 −1 Stable/Classes/Prop.json
+1 −1 Stable/Classes/SceneCapture.json
+1 −1 Stable/Classes/Sound.json
+1 −1 Stable/Classes/StaticMesh.json
+1 −1 Stable/Classes/TextRender.json
+1 −1 Stable/Classes/Trigger.json
+1 −1 Stable/Classes/Vehicle.json
+1 −1 Stable/Classes/VehicleWater.json
+1 −1 Stable/Classes/VehicleWheeled.json
+1 −1 Stable/Classes/Weapon.json
+1 −1 Stable/Classes/WebUI.json
+4 −2 Stable/Classes/Widget.json
+1 −1 Stable/Structs/Color.json
+1 −1 Stable/Structs/Matrix.json
+1 −1 Stable/Structs/Quat.json
+1 −1 Stable/Structs/Rotator.json
+1 −1 Stable/Structs/Vector.json
+1 −1 Stable/Structs/Vector2D.json
+4 −4 StaticClasses/Console.json
+2 −2 StaticClasses/PostProcess.json
+1 −1 Structs/Color.json
+1 −1 Structs/Matrix.json
+1 −1 Structs/Quat.json
+1 −1 Structs/Rotator.json
+1 −1 Structs/Vector.json
+1 −1 Structs/Vector2D.json
15 changes: 8 additions & 7 deletions src/components/ClassBuilder.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -525,12 +525,13 @@ export const ConstructorDeclaration = ({ type, name }) => {
const class_data = GetClassData(type, name);
return class_data.constructors.map((constructor, index) =>
<>
<h4 id={ `constructor-${ constructor.description.toLowerCase().replace(' ', '-') }` }>{ constructor.description }</h4>
<h3 id={ `constructor-${ constructor.name.toLowerCase().replace(' ', '-') }` }>{ constructor.name }</h3>
<p class="subtle-description" style={{ marginTop: "-20px" }}>{ constructor.description || "No description provided" }</p>
<CodeBlock className="language-lua">
{ GetConstructorExample(class_data, index) }
</CodeBlock>
{
constructor.parameters.length == 0 ? <i>This constructor doesn't have parameters.</i> :
constructor.parameters.length == 0 ? <p class="subtle-description">This constructor doesn't have parameters.</p> :
<>
<div className="table-wrapper">
<table>
Expand Down Expand Up @@ -609,7 +610,7 @@ export const FunctionsDeclaration = ({ type, name }) => {
{ class_data.inheritance && class_data.inheritance.includes("Pawn") ?
<InheritedClassFunctions inherited_class_name={class_data.name} parent_class_name={"Pawn"} /> : "" }
{
class_data.functions == null || class_data.functions.length == 0 ? <i>This class doesn't have own functions.</i> :
class_data.functions == null || class_data.functions.length == 0 ? <p class="subtle-description">This class doesn't have own functions.</p> :
<>
<FunctionListDeclaration class_name={class_data.name} functions_list={class_data.functions} />
{ class_data.functions.map((value, index) => <FunctionDeclaration key={ `${value.name}-${index}` } function_data={value} class_name={class_data.name} />) }
Expand All @@ -627,7 +628,7 @@ export const StaticFunctionsDeclaration = ({ type, name }) => {
{/* { class_data.inheritance && class_data.inheritance.includes("Actor") ?
<InheritedClassFunctions inherited_class_name={class_data.name} parent_class_name={"Actor"} is_static={true} /> : "" } */}
{
class_data.static_functions == null || class_data.static_functions.length == 0 ? <i>This class doesn't have own static functions.</i> :
class_data.static_functions == null || class_data.static_functions.length == 0 ? <p class="subtle-description">This class doesn't have own static functions.</p> :
<>
<StaticFunctionListDeclaration class_name={class_data.name} functions_list={class_data.static_functions} />
{ class_data.static_functions.map((value, index) => <FunctionDeclaration key={ `${value.name}-${index}` } function_data={value} is_static class_name={class_data.name} />) }
Expand Down Expand Up @@ -669,7 +670,7 @@ export const EventsDeclaration = ({ type, name }) => {
{ class_data.inheritance && class_data.inheritance.includes("Pawn") ?
<InheritedClassEvents inherited_class_name={class_data.name} parent_class_name={"Pawn"} /> : "" }
{
class_data.events == null || class_data.events.length == 0 ? <i>This class doesn't have own events.</i> :
class_data.events == null || class_data.events.length == 0 ? <p class="subtle-description">This class doesn't have own events.</p> :
<>
<EventListDeclaration type={type} name={class_data.name} inherited_class_name={class_data.name} />
{ class_data.events.map((value, index) => <EventDeclaration key={ `${value.name}-${index}` } event_data={value} class_name={class_data.name} />) }
Expand All @@ -683,7 +684,7 @@ export const PropertiesDeclaration = ({ type, name }) => {
const class_data = GetClassData(type, name);
return (<>
{
class_data.properties == null || class_data.properties.length == 0 ? <i>This class doesn't have properties.</i> :
class_data.properties == null || class_data.properties.length == 0 ? <p class="subtle-description">This class doesn't have properties.</p> :
<div className="table-wrapper">
<table>
<thead>
Expand Down Expand Up @@ -714,7 +715,7 @@ export const StaticPropertiesDeclaration = ({ type, name }) => {

return (<>
{
class_data.static_properties == null || class_data.static_properties.length === 0 ? <i>This class doesn't have static properties.</i> :
class_data.static_properties == null || class_data.static_properties.length === 0 ? <p class="subtle-description">This class doesn't have static properties.</p> :
<div className="table-wrapper">
<table>
<thead>
Expand Down
8 changes: 6 additions & 2 deletions src/components/Tooltips.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import React from 'react';
import CodeBlock from '@theme/CodeBlock';

import { EnumDeclaration } from '@site/src/components/EnumDeclaration';
import { GetFunctionSignature, GetStaticFunctionSignature, GetEventSignature, GetParametersList, FunctionParametersDeclaration } from '@site/src/components/ClassBuilder';
import { GetFunctionSignature, GetStaticFunctionSignature, GetEventSignature, GetParametersList, FunctionParametersDeclaration, GetElementByType } from '@site/src/components/ClassBuilder';


export const AuthorityTooltip = ({ img, title, subtitle, description }) => (
Expand Down Expand Up @@ -30,7 +30,7 @@ export const AssetPathToolTip = ({ label, description, subtitle }) => (
</>
);

export const ClassToolTip = ({ class_name, emoji, description, append_title }) => (
export const ClassToolTip = ({ class_name, emoji, description, append_title, inheritance_children }) => (
<>
<h3 className={"tooltip-header"}>
<span className={"tooltip-img"}>
Expand All @@ -42,6 +42,10 @@ export const ClassToolTip = ({ class_name, emoji, description, append_title }) =
</span>
</h3>
<span dangerouslySetInnerHTML={{ __html: description }}></span>
{ inheritance_children ? <>
<br/><br/>
Child Classes: { inheritance_children.map((inherit, index) => GetElementByType(inherit, index)).reduce((prev, next) => [prev, ", ", next]) }.
</> : "" }
</>
);

Expand Down
Loading

0 comments on commit c6e4f6a

Please sign in to comment.