Modding - joric/supraworld GitHub Wiki

This article is about altering the game with UE4SS and (possibly) Cheat Engine.

UE4SS

Download UE4SS experimental release (#972) here (I use zDEV version): https://github.com/UE4SS-RE/RE-UE4SS/releases/

Put ue4ss folder and dwmapi.dll next to Supraworld-Win64-Shipping.exe. Copy the entire Supraworld directory to ue4ss/Mods (the main script should be ue4ss/Mods/Supraworld/main.lua). UE 5.6+ needs editing UE4SS-settings.ini:

[EngineVersionOverride]
MajorVersion = 5
MinorVersion = 6

Scripts

UE4SS enables console, but standard cheats don't work and toggledebugcamera doesn't untoggle (#514), so you need scripts.

Hotkeys are subject to change and I usually reserve Q and Z for quicksave/quickload so, current hotkeys are:

  • MMB - toggles Debug Camera mode, LMB to teleport.
  • F - Fast Travel
  • G - Spawn Things
  • R - Suit Refill

Debug Camera

Experimental teleport script (uses debug camera). Middle click to fly, left click to teleport, mouse wheel to alter flying speed. Still occasionally crashes on teleport, despite time throttling and thread context. If you know how to fix the crashes, post the solution to issues.

Fast Travel

Open ingame map, point cursor to location, press "T". It is very experimental, but works as a charm.

fast_travel.mp4

Spawn Things

Use StaticFindObject and deferred spawning:

local statics = UEHelpers.GetGameplayStatics
local actorClass = StaticFindObject('/Supraworld/Levelobjects/Carriables/ButtonBattery.ButtonBattery_C')
local transform = UEHelpers.GetKismetMathLibrary:MakeTransform(Location, Rotation, Scale)
local deferredActor = statics.BeginDeferredActorSpawnFromClass(world, actorClass, transform, 0, nil, 0)
statics.FinishSpawningActor(deferredActor, transform, 0)

It also has to be guarded with timeout and run in a game thread.

supraworld_spawning

I will probably add UI or console commands to spawn things from the list (UE4SS enables console that opens with ~ key).

Suit Refill

Apparently, the amount of liquid is stored in double, as 3FF0 is high 16 bits of double 1.0. Addresses may vary.

Cheat Engine, search for 2 bytes, 3FF0 and 0 repeatedly. Freeze the value at 3FF0 (means sponge suit is full).
<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="46">
  <CheatEntries>
    <CheatEntry>
      <ID>0</ID>
      <Description>"Infinite Suit"</Description>
      <ShowAsHex>1</ShowAsHex>
      <VariableType>2 Bytes</VariableType>
      <Address>1DC71BDE6EE</Address>
    </CheatEntry>
  </CheatEntries>
  <UserdefinedSymbols/>
</CheatTable>

Using UE4SS scripting to refill Sponge Suit is much more convenient, you just call an API function on a hotkey.

See API in Supraworld/Plugins/GameFeatures/Supraworld/Supraworld/Content/Abilities/SpongeSuit/Equippable_SpongeSuit.

Unblock EA

Unblocks Early Access walls (sets collision to false) on client restart.

Notes

  • Do not use FindFirstOf("Character") to get the player, because it's also a newly-created enemy in the fight scenes.
  • Debug camera FindFirstOf("DebugCameraController") needs valid (reapplied) CheatManager property to untoggle.
  • Teleport cheat DebugCameraController.CheatManager:Teleport() works, but uses collisions and needs line of sight.
  • The K2_TeleportTo function is unsafe, has to be guarded with ExecuteInGameThread and ExecuteWithDelay.
  • Use F3 key to see the class name of the object you're looking at in the UE4SS console (default LineTraceMod).

References

⚠️ **GitHub.com Fallback** ⚠️