Homebrew Homebrew game Unreal and Unreal Gold port/loader

fgsfds

Well-Known Member
OP
Member
Joined
Aug 28, 2018
Messages
445
Trophies
0
Age
123
XP
3,382
Country
Russia
I figured out how to load the aarch64-linux binaries supplied with Unreal 227j on the Switch. Works pretty much the same as the Max Payne loader from before.
The resulting "port" is very unstable and hacky and runs pretty poorly, but you can now play (most of) Unreal and Unreal Gold on the Switch.

Github repo: /fgsfdsfgs/unreal_nx
Latest version: r2 (Dec 27, 2022)
Download link: Github release page

2022122516323400-F1C11A22FAEE3B82F21B330E1B786A39.jpg 2022122518172400-F1C11A22FAEE3B82F21B330E1B786A39.jpg 2022122518180800-F1C11A22FAEE3B82F21B330E1B786A39.jpg

How to install:


You're going to need an Unreal or Unreal Gold installation patched with the OldUnreal 227j patch.
Unfortunately oldunreal.com seems to disallow direct linking to files, so click the link at the bottom of that post to get it.

Ensure that the patch is installed correctly: when installing make sure to tick every box, but only tick "Return to Na Pali support" if you have Unreal Gold.
If you don't have a folder called SystemARM in the Unreal folder, you need to reinstall the patch. Simply run the installer again to do that.

To install:
  1. Create a folder called unreal in the switch folder on your SD card.
  2. Copy the contents of your Unreal or UnrealGold folder into /switch/unreal/.
  3. Extract the contents of the .zip file from the latest release into /switch/unreal/. Replace everything.
Notes:
  • This will only work with Unreal/UnrealGold 227j right now. If 227k is released, the loader will most likely have to be updated to support it.
  • This will likely not work in applet/album mode. Use a proper game override.
  • The performance sucks, mostly because of the dynamic lights. You can disable dynamic lights to get a performance increase at the cost of all the pretty lighting effects in the game (including your flares and flashlight and any time a light turns on or off). To do that, in SystemARM/UnrealLinux.ini look for NoDynamicLights and set it to True.
  • You can also disable volumetric lights to get a small performance increase in some areas with less of an impact on visuals. To do that, in SystemARM/UnrealLinux.ini look for all instances of VolumetricLighting and set them to False. There might be other config parameters that affect performance, but I haven't explored that much yet.
  • Trying to join a multiplayer game or opening the server browser will likely cause the game to crash. Hosting a multiplayer game or playing Botmatch seems to work, though.
  • Exiting and relaunching the game will cause it to crash. Quit out of hbmenu after exiting the game to avoid that.
  • If you see any appThrowf errors, first try to re-extract the .zip file again, replacing everything.
  • Return to Na Pali may crash on new game with an error about UPakFonts. To fix that get the original 3 MB UPakFonts.utx file from the Textures folder on your Unreal Gold CD or unpatched Unreal Gold install and replace the one in /switch/unreal/Textures.
  • Joystick sensitivity can be adjusted for each axis individually in the SystemARM/User.ini file. Search for for SpeedBase and edit the number for each axis to your liking.
  • You can bring up the on-screen keyboard by pressing MINUS at any time.
  • You can enable the advanced XOpenGL renderer, though it hasn't been tested much, does not seem to improve performance and will probably explode. To do that, in SystemARM/UnrealLinux.ini change GameRenderDevice=OpenGLDrv.OpenGLRenderDevice to GameRenderDevice=XOpenGLDrv.XOpenGLRenderDevice.
  • If the game crashes, usually there will be a message on the screen telling you the reason. It will also create logs at SystemARM/fatal.log and SystemARM/UnrealLinux.log. Please attach these to issue reports when possible, along with the last Atmosphere crash report.
Credits:
  • OldUnreal for the 227j patch;
  • Switchbrew for libnx;
  • devkitPro for devkitA64.
This project has no direct affiliation with Epic Games or OldUnreal. No assets or program code from the original game are included in this project.
 
Last edited by fgsfds,

Purple_Shyguy

Well-Known Member
Member
Joined
Nov 8, 2008
Messages
2,389
Trophies
2
Age
34
Location
Republic of Ireland
XP
4,912
Country
The game crashes for me when I save. Throws up an 'object [area I am in].screenshot' error upon saving.
The game saves just fine but it crashes. I can still use the save.
I THINK it is maybe something to do with the little screenshot preview next to the save file. The images are all corrupted looking for me. Crashing possibly when creating these?

Also I think volumetric lighting should be set to 'False' for off. You recommend "True" in your original post.


Possible performance helping options;
NoDynamicLights=True
VolumetricLighting=False
ShinySurfaces=False
Coronas=False
UsePrecache=True
LODBias=0.000000
TextureDetail=Medium/Low (low is very ugly)
A bit of overclocking helps a little too.
And you can always say 'fuck it' and just cap the game to 30fps with FrameRateLimit=30

And out of curiosity fgsfds, is the reason theres only the 720p/1080p resolutions a limitation? Are they the only res that can be supported? Rendering at 540p or lower would help performance too, obviously you know im just saying I dont understand the technical aspect of why what resolutions are supported.
 

Attachments

  • 2022122617514700.jpg
    2022122617514700.jpg
    39.6 KB · Views: 87
  • 2022122614323400.mp4
    18.8 MB
  • Like
Reactions: mathew77

fgsfds

Well-Known Member
OP
Member
Joined
Aug 28, 2018
Messages
445
Trophies
0
Age
123
XP
3,382
Country
Russia
The game crashes for me when I save. Throws up an 'object [area I am in].screenshot' error upon saving.
The game saves just fine but it crashes. I can still use the save.
I THINK it is maybe something to do with the little screenshot preview next to the save file. The images are all corrupted looking for me. Crashing possibly when creating these?

Also I think volumetric lighting should be set to 'False' for off. You recommend "True" in your original post.


Possible performance helping options;
NoDynamicLights=True
VolumetricLighting=False
ShinySurfaces=False
Coronas=False
UsePrecache=True
LODBias=0.000000
TextureDetail=Medium/Low (low is very ugly)
A bit of overclocking helps a little too.
And you can always say 'fuck it' and just cap the game to 30fps with FrameRateLimit=30

And out of curiosity fgsfds, is the reason theres only the 720p/1080p resolutions a limitation? Are they the only res that can be supported? Rendering at 540p or lower would help performance too, obviously you know im just saying I dont understand the technical aspect of why what resolutions are supported.
That's weird, I tested saving before and it wasn't crashing for me, though I only tested it in the first map. I'll see what I can do about that. It did have the fucked up screencaps in it, however.
You are correct about the volumetric lighting, fixed. You can also disable detail textures since they aren't very important. UsePrecache can actually cause additional lag in some situations, such as the beginning of the first map, so I don't know if I would recommend it.
The reason there are only two resolutions in the list is because that's what SDL2 reports and I didn't bother to patch it. You can manually set it to a lower resolution by editing UnrealLinux.ini, but it doesn't really help performance much, since the biggest problem is the dynamic lightmap updates caused by dynamic lights, and that isn't really affected by the resolution.
The performance gets somewhat better generally after the first map, since that map is choke full of dynamic lights and various cool effects to demonstrate the engine, by the way.
 

mathew77

Lovin' life.
Member
Joined
Jan 19, 2019
Messages
1,226
Trophies
1
Age
47
XP
3,773
Country
Kazakhstan
@fgsfds Thank you again for such a wonderful port!.. :grog:

A little report: Brightness settings didn't work for me, not in a Main menu nor in UnrealLinux.ini file / [SDL2Drv.SDL2Client].

Changing Brightness=0.400000 to Brightness=0.800000 for example do nothing:
brg (2).jpg
 
Last edited by mathew77,

cucholix

00000780 00000438
Member
Joined
Jan 17, 2017
Messages
3,246
Trophies
1
Age
44
XP
6,313
Country
Chile
@fgsfds Thank you again for such a wonderful port!.. :grog:

A little report: Brightness settings didn't work for me, not in a Main menu nor in UnrealLinux.ini file / [SDL2Drv.SDL2Client].

Changing Brightness=0.400000 to Brightness=0.800000 for example do nothing:
View attachment 344860
Seems like NoDynamicLights=True makes everything darker, but yeah you can't adjust brightness
 
  • Sad
Reactions: mathew77

fgsfds

Well-Known Member
OP
Member
Joined
Aug 28, 2018
Messages
445
Trophies
0
Age
123
XP
3,382
Country
Russia
SDL2Drv brightness depends on an SDL2 feature that isn't supported on the Switch. The XOpenGL renderer has a working gamma/brightness slider, though it is by itself much darker by default than the normal renderer.
 

Purple_Shyguy

Well-Known Member
Member
Joined
Nov 8, 2008
Messages
2,389
Trophies
2
Age
34
Location
Republic of Ireland
XP
4,912
Country
I am playing with the dynamic lighting on. The performance isnt *that* bad really. And honestly the game seems to be designed to work with the torch and flares. You can find secret paths by shinging a light on a dark Area and seeing a hidden entrance. Stuff like that.

It also looks so much prettier enabled.

I say power through it with dynamic lights enabled
 

cucholix

00000780 00000438
Member
Joined
Jan 17, 2017
Messages
3,246
Trophies
1
Age
44
XP
6,313
Country
Chile
To increase overall brightness change these lines under UnrealLinux.ini
Code:
;GameRenderDevice=OpenGLDrv.OpenGLRenderDevice
GameRenderDevice=XOpenGLDrv.XOpenGLRenderDevice
GammaOffset=1.000000
GammaOffset at 1.000000 seems to work fine, also you can adjust brightness slider for fine tunning.
 
  • Like
Reactions: mathew77

fgsfds

Well-Known Member
OP
Member
Joined
Aug 28, 2018
Messages
445
Trophies
0
Age
123
XP
3,382
Country
Russia
thank you for this port, invert look in joystick not working.

how to do? thanks
Might actually be impossible, joystick support is pretty barebones in the SDL2 window driver.
Try one of these things (not both at the same time):
1. In SystemARM/UnrealLinux.ini change ScaleJBY=0.000000 to ScaleJBY=-1.000000
2. In SystemARM/User.ini change JoyR=Axis aLookUp SpeedBase=250.0 to JoyR=Axis aLookUp SpeedBase=-250.0
If none of them work, I guess I'll have to patch in an option for that.
 
  • Like
Reactions: jeferey

jeferey

Well-Known Member
Member
Joined
Mar 4, 2019
Messages
106
Trophies
0
Age
39
XP
1,585
Country
France
try 1. In SystemARM/UnrealLinux.ini change ScaleJBY=0.000000 to ScaleJBY=-1.000000 : joystick not works

try 2 ; 2. In SystemARM/User.ini change JoyR=Axis aLookUp SpeedBase=250.0 to JoyR=Axis aLookUp SpeedBase=-250.0 : joystick ok but not inverted
 

fgsfds

Well-Known Member
OP
Member
Joined
Aug 28, 2018
Messages
445
Trophies
0
Age
123
XP
3,382
Country
Russia
o yeah many thanks! I can't play other than inverting axe!
Temporary fix for now: in SystemARM/User.ini replace
Code:
JoyZ=Axis aTurn SpeedBase=250.0
JoyR=Axis aLookUp SpeedBase=250.0
with
Code:
JoyZ=Axis aMouseX SpeedBase=250.0
JoyR=Axis aMouseY SpeedBase=250.0
Then you can use the in-game "Invert mouse" option to invert look. I haven't extensively tested if this works correctly though, so you might have to change the 250 in there to a smaller/larger number according to how sensitive you want it to be.
 
  • Like
Reactions: jeferey

Site & Scene News

Popular threads in this forum

General chit-chat
Help Users
    Psionic Roshambo @ Psionic Roshambo: I do have 1TB of Wii games though