Latest Comments by x_wing
The new GOG profile system is out, looks quite slick
23 Apr 2018 at 1:14 pm UTC Likes: 8
23 Apr 2018 at 1:14 pm UTC Likes: 8
The low to nil involvement of GoG with Linux users has make me stay away from their platform in the last years. Right now it's more a Wine "friendly" store than a Linux one.
Rise of the Tomb Raider tested on AMD RX 580
20 Apr 2018 at 4:15 am UTC
20 Apr 2018 at 4:15 am UTC
Quoting: ShmerlYes, I can get dynamic calls symbols. But you won't get nothing from them:Quoting: x_wingThe binary is stripped, there is no symbol I can get from it.Even for dynamic calls? They should be normally preserved, since they are needed at runtime. So unless Feral make it all into a huge static blob, you might be able to find something.
U abort
U accept
U access
U acos
U acosf
U acosh
U aio_error64
U aio_read64
U aio_return64
U aio_write64
U asin
U asinf
U asinh
U __assert_fail
U atan
U atan2
U atan2f
U atanf
U atanh
U backtrace
U backtrace_symbols
U basename
U bind
U bindtextdomain
U bind_textdomain_codeset
U BIO_free
U BIO_new_mem_buf
U btowc
U calloc
U cef_add_cross_origin_whitelist_entry
U cef_add_web_plugin_directory
U cef_add_web_plugin_path
U cef_api_hash
U cef_base64decode
U cef_base64encode
U cef_begin_tracing
U cef_binary_value_create
U cef_browser_host_create_browser
U cef_browser_host_create_browser_sync
U cef_clear_cross_origin_whitelist
U cef_clear_scheme_handler_factories
U cef_command_line_create
U cef_command_line_get_global
U cef_create_url
U cef_currently_on
U cef_dictionary_value_create
U cef_do_message_loop_work
U cef_drag_data_create
U cef_end_tracing
U cef_execute_process
U cef_force_web_plugin_shutdown
U cef_get_extensions_for_mime_type
U cef_get_geolocation
U cef_get_mime_type
U cef_get_path
U cef_initialize
U cef_is_web_plugin_unstable
U cef_launch_process
U cef_list_value_create
U cef_now_from_system_trace_time
U cef_parse_url
U cef_post_data_create
U cef_post_data_element_create
U cef_post_delayed_task
U cef_post_task
U cef_print_settings_create
U cef_process_message_create
U cef_quit_message_loop
U cef_refresh_web_plugins
U cef_register_extension
U cef_register_scheme_handler_factory
U cef_register_web_plugin_crash
U cef_remove_cross_origin_whitelist_entry
U cef_remove_web_plugin_path
U cef_request_context_create_context
U cef_request_context_get_global_context
U cef_request_create
U cef_response_create
U cef_run_message_loop
U cef_set_osmodal_loop
U cef_shutdown
U cef_string_ascii_to_utf16
U cef_string_list_alloc
U cef_string_list_append
U cef_string_list_copy
U cef_string_list_free
U cef_string_list_size
U cef_string_list_value
U cef_string_map_alloc
U cef_string_map_append
U cef_string_map_free
U cef_string_map_key
U cef_string_map_size
U cef_string_map_value
U cef_string_multimap_alloc
U cef_string_multimap_append
U cef_string_multimap_free
U cef_string_multimap_key
U cef_string_multimap_size
U cef_string_multimap_value
U cef_string_userfree_utf16_free
U cef_string_utf16_clear
U cef_string_utf16_cmp
U cef_string_utf16_set
U cef_string_utf16_to_utf8
U cef_string_utf8_clear
U cef_string_utf8_to_utf16
U cef_task_runner_get_for_current_thread
U cef_task_runner_get_for_thread
U cef_unregister_internal_web_plugin
U cef_uridecode
U cef_uriencode
U cef_v8context_get_current_context
U cef_v8context_get_entered_context
U cef_v8context_in_context
U cef_v8stack_trace_get_current
U cef_v8value_create_array
U cef_v8value_create_bool
U cef_v8value_create_date
U cef_v8value_create_double
U cef_v8value_create_function
U cef_v8value_create_int
U cef_v8value_create_null
U cef_v8value_create_object
U cef_v8value_create_string
U cef_v8value_create_uint
U cef_v8value_create_undefined
U cef_visit_web_plugin_info
U ceil
U ceilf
U chmod
U clearerr
U clock
U clock_gettime
U close
U closedir
U confstr
U connect
U cos
U cosf
U cosh
U creat64
U __ctype_b_loc
U __ctype_get_mb_cur_max
U curl_easy_cleanup
U curl_easy_getinfo
U curl_easy_init
U curl_easy_reset
U curl_easy_setopt
U curl_formadd
U curl_formfree
U curl_global_cleanup
U curl_global_init
U curl_multi_add_handle
U curl_multi_cleanup
U curl_multi_info_read
U curl_multi_init
U curl_multi_perform
U curl_multi_remove_handle
U curl_multi_wait
U curl_slist_append
U curl_slist_free_all
U __cxa_atexit
U d2i_X509_bio
U dgettext
U dlclose
U dlerror
U dl_iterate_phdr
U dlopen
U dlsym
U dlvsym
U dprintf
U dup2
U __duplocale
U ecvt
U epoll_create
U epoll_ctl
U epoll_wait
U __errno_location
U euidaccess
U EVP_sha1
U execl
U execlp
U execv
U execvp
U exit
U _exit
U _Exit
U exp
U exp2f
U expf
U FcConfigSubstitute
U FcDefaultSubstitute
U FcFontMatch
U fchmod
U fchown
U FcInit
U fclose
U FcNameParse
U fcntl
U FcPatternAddInteger
U FcPatternAddString
U FcPatternCreate
U FcPatternDestroy
U FcPatternGetString
U fcvt
U __fdelt_chk
U fdopen
U feclearexcept
U fegetexceptflag
U feof
U ferror
U fflush
U fgetc
U fgets
U fileno
U floor
U floorf
U fmax
U fmaxf
U fmin
U fminf
U fmod
U fmodf
U fopen
U fopen64
U fork
U fprintf
U fputc
U fputs
U fread
U fread_unlocked
U free
U freeaddrinfo
U freeifaddrs
U __freelocale
U fscanf
U fseek
U fseeko64
U fsync
U FT_Done_Face
U FT_Done_FreeType
U FT_Done_Glyph
U ftell
U ftello64
U FT_Get_Glyph
U FT_Glyph_To_Bitmap
U FT_Glyph_Transform
U ftime
U FT_Init_FreeType
U FT_Load_Char
U FT_MulFix
U FT_New_Face
U FT_Reference_Face
U ftruncate
U ftruncate64
U FT_Set_Pixel_Sizes
U fwrite
U fwrite_unlocked
U __fxstat64
U gai_strerror
U getaddrinfo
U getc
U getcontext
U getcwd
U getegid
U getenv
U geteuid
U getgid
U getgroups
U gethostbyname
U gethostname
U getifaddrs
U getlogin
U getnameinfo
U get_nprocs
U getpagesize
U getpeername
U getpid
U getppid
U getpwuid
U getrusage
U getsid
U getsockname
U getsockopt
U gettext
U gettimeofday
U getuid
U getwc
w __gmon_start__
U gmtime_r
U HMAC
U HMAC_CTX_cleanup
U HMAC_CTX_init
U HMAC_Final
U HMAC_Init
U HMAC_Update
U iconv
U iconv_close
U iconv_open
U if_indextoname
U if_nametoindex
U IMG_Load_RW
U IMG_LoadTGA_RW
U in6addr_any
U inet_addr
U inet_ntoa
U inet_ntop
U inet_pton
U ioctl
U isalnum
U isalpha
U __isnan
U __isoc99_sscanf
U isprint
U ispunct
U isspace
U iswalnum
U iswalpha
U iswcntrl
U __iswctype_l
U iswdigit
U iswlower
U iswprint
U iswpunct
U iswspace
U iswupper
U iswxdigit
U isxdigit
w _ITM_addUserCommitAction
w _ITM_deregisterTMCloneTable
w _ITM_memcpyRnWt
w _ITM_memcpyRtWn
w _ITM_registerTMCloneTable
w _ITM_RU1
w _ITM_RU8
w _Jv_RegisterClasses
U kill
U ldexp
U ldexpf
U __libc_dlopen_mode
U __libc_dlsym
U __libc_start_main
U link
U listen
U localeconv
U localtime
U localtime_r
U log
U log10
U log10f
U log2
U log2f
U logf
U longjmp
U lseek
U lseek64
U __lxstat64
U madvise
U malloc
U malloc_usable_size
U mbrtowc
U mbsnrtowcs
U mbsrtowcs
U mbstowcs
U MD5
U memalign
U memchr
U memcmp
U memcpy
U __memcpy_chk
U memmem
U memmove
U memset
U mkdir
U mkstemp64
U mktime
U mlock
U mmap64
U modf
U mprotect
U mremap
U msync
U munlock
U munmap
U nanosleep
U __newlocale
U nextafterf
U nice
U __nl_langinfo_l
U open
U open64
U opendir
U pclose
U perror
U pipe
U poll
U popen
U posix_fadvise64
U posix_memalign
U pow
U powf
U printf
U __printf_chk
U pthread_attr_destroy
U pthread_attr_getstack
U pthread_attr_init
U pthread_attr_setdetachstate
U pthread_attr_setschedparam
U pthread_attr_setschedpolicy
U pthread_attr_setstacksize
U pthread_cancel
U pthread_cond_broadcast
U pthread_cond_destroy
U pthread_cond_init
U pthread_cond_signal
U pthread_cond_timedwait
U pthread_cond_wait
U pthread_create
U pthread_detach
U pthread_exit
U pthread_getattr_np
U pthread_getname_np
U pthread_getschedparam
U pthread_getspecific
U pthread_join
w __pthread_key_create
U pthread_key_create
U pthread_key_delete
U pthread_kill
U pthread_mutexattr_destroy
U pthread_mutexattr_init
U pthread_mutexattr_setpshared
U pthread_mutexattr_settype
U pthread_mutex_destroy
U pthread_mutex_init
U pthread_mutex_lock
U pthread_mutex_trylock
U pthread_mutex_unlock
U pthread_once
U pthread_self
U pthread_setcancelstate
U pthread_setcanceltype
U pthread_setname_np
U pthread_setschedparam
U pthread_setspecific
U ptrace
U putc
U putchar
U puts
U putwc
U qsort
U raise
U rand
U random
U read
U readdir64
U readlink
U realloc
U realpath
U recv
U recvfrom
U recvmsg
U regcomp
U regexec
U regfree
U rename
U rint
U rintf
0000000000000000 A RiseOfTheTombRaider
U rmdir
U sched_get_priority_max
U sched_get_priority_min
U sched_yield
U SDL_AddTimer
U SDL_BuildAudioCVT
U SDL_CloseAudioDevice
U SDL_ConvertAudio
U SDL_ConvertSurface
U SDL_CreateColorCursor
U SDL_CreateRGBSurface
U SDL_CreateRGBSurfaceFrom
U SDL_CreateSystemCursor
U SDL_CreateWindow
U SDL_Delay
U SDL_DestroyWindow
U SDL_free
U SDL_FreeCursor
U SDL_FreeSurface
U SDL_GameControllerAddMapping
U SDL_GameControllerClose
U SDL_GameControllerGetAttached
U SDL_GameControllerGetAxis
U SDL_GameControllerGetButton
U SDL_GameControllerGetJoystick
U SDL_GameControllerName
U SDL_GameControllerOpen
U SDL_GetClipboardText
U SDL_GetCurrentDisplayMode
U SDL_GetDesktopDisplayMode
U SDL_GetDisplayBounds
U SDL_GetDisplayMode
U SDL_GetDisplayName
U SDL_GetError
U SDL_GetGlobalMouseState
U SDL_GetHint
U SDL_GetKeyboardFocus
U SDL_GetKeyboardState
U SDL_GetKeyFromScancode
U SDL_GetKeyName
U SDL_GetMouseFocus
U SDL_GetMouseState
U SDL_GetNumDisplayModes
U SDL_GetNumVideoDisplays
U SDL_GetPowerInfo
U SDL_GetRelativeMouseMode
U SDL_GetVersion
U SDL_GetWindowDisplayIndex
U SDL_GetWindowFlags
U SDL_GetWindowFromID
U SDL_GetWindowMaximumSize
U SDL_GetWindowMinimumSize
U SDL_GetWindowPosition
U SDL_GetWindowSize
U SDL_GetWindowTitle
U SDL_GetWindowWMInfo
U SDL_GL_CreateContext
U SDL_GL_DeleteContext
U SDL_GL_GetProcAddress
U SDL_GL_GetSwapInterval
U SDL_GL_MakeCurrent
U SDL_GL_SetAttribute
U SDL_GL_SetSwapInterval
U SDL_GL_SwapWindow
U SDL_HapticClose
U SDL_HapticDestroyEffect
U SDL_HapticNewEffect
U SDL_HapticOpenFromJoystick
U SDL_HapticQuery
U SDL_HapticRunEffect
U SDL_HapticStopEffect
U SDL_HapticUpdateEffect
U SDL_Has3DNow
U SDL_HasClipboardText
U SDL_HasMMX
U SDL_HasRDTSC
U SDL_HasSSE
U SDL_HasSSE2
U SDL_HasSSE3
U SDL_HideWindow
U SDL_Init
U SDL_InitSubSystem
U SDL_IsGameController
U SDL_JoystickClose
U SDL_JoystickGetDeviceGUID
U SDL_JoystickGetGUIDString
U SDL_JoystickInstanceID
U SDL_JoystickName
U SDL_JoystickOpen
U SDL_JoystickUpdate
U SDL_LockSurface
U SDL_memset
U SDL_MinimizeWindow
U SDL_NumHaptics
U SDL_NumJoysticks
U SDL_OpenAudioDevice
U SDL_PauseAudioDevice
U SDL_PeepEvents
U SDL_PixelFormatEnumToMasks
U SDL_PumpEvents
U SDL_Quit
U SDL_QuitSubSystem
U SDL_RaiseWindow
U SDL_RestoreWindow
U SDL_RWFromMem
U SDL_SetClipboardText
U SDL_SetCursor
U SDL_SetHint
U SDL_SetRelativeMouseMode
U SDL_SetWindowBordered
U SDL_SetWindowFullscreen
U SDL_SetWindowGrab
U SDL_SetWindowIcon
U SDL_SetWindowMaximumSize
U SDL_SetWindowMinimumSize
U SDL_SetWindowPosition
U SDL_SetWindowResizable
U SDL_SetWindowSize
U SDL_SetWindowTitle
U SDL_ShowMessageBox
U SDL_ShowWindow
U SDL_StartTextInput
U SDL_StopTextInput
U SDL_UnlockSurface
U SDL_WarpMouseGlobal
U SDL_WarpMouseInWindow
U SDL_WasInit
U select
U sem_destroy
U sem_init
U sem_post
U sem_timedwait
U sem_trywait
U sem_wait
U send
U sendmsg
U sendto
U setenv
U _setjmp
U setlocale
U setpriority
U setrlimit64
U setsockopt
U setvbuf
U shutdown
U sigaction
U sigaddset
U sigemptyset
U signal
U sigprocmask
U sin
U sincos
U sincosf
U sinf
U sinh
U sk_new_null
U sk_pop_free
U sk_push
U sleep
U snprintf
U __snprintf_chk
U socket
U sprintf
U __sprintf_chk
U sqrt
U sqrtf
U srand
U srandom
U sscanf
U SSL_library_init
U __stack_chk_fail
U statfs64
U statvfs64
00000000039bde10 B stderr
00000000039bde08 B stdin
00000000039bde00 B stdout
U stpcpy
U strcasecmp
U strcat
U strchr
U strcmp
U __strcoll_l
U strcpy
U __strcpy_chk
U strcspn
U strdup
U __strdup
U strerror
U strerror_r
U strftime
U __strftime_l
U strlen
U strncasecmp
U strncat
U strncmp
U strncpy
U strndup
U strnlen
U strpbrk
U strrchr
U strspn
U strstr
U strtod
U __strtod_l
U strtof
U __strtof_l
U strtok
U strtol
U strtold_l
U strtoll
U strtoul
U strtoull
U __strxfrm_l
U symlink
U syscall
U sysconf
U syslog
U system
U tan
U tanf
U tanh
U time
U times
U __tls_get_addr
U tolower
U toupper
U towlower
U __towlower_l
U __towupper_l
U truncate64
U truncf
U tzset
U umount
U uname
U ungetc
U ungetwc
U unlink
U unsetenv
U __uselocale
U usleep
U utime
U utimes
U vfprintf
U vfscanf
U vorbis_block_clear
U vorbis_block_init
U vorbis_comment_clear
U vorbis_comment_init
U vorbis_dsp_clear
U vorbis_info_clear
U vorbis_info_init
U vorbis_synthesis
U vorbis_synthesis_blockin
U vorbis_synthesis_headerin
U vorbis_synthesis_init
U vorbis_synthesis_pcmout
U vorbis_synthesis_read
U vorbis_synthesis_restart
U vsnprintf
U __vsnprintf_chk
U vsprintf
U vsscanf
U vswscanf
U waitpid
U wcrtomb
U wcscmp
U __wcscoll_l
U __wcsftime_l
U wcslen
U wcsnrtombs
U wcstod
U wcstof
U wcstol
U wcstoll
U wcstombs
U wcstoul
U wcstoull
U __wcsxfrm_l
U wctob
U __wctype_l
000000000051e880 T WinMain
U wmemchr
U wmemcmp
U wmemcpy
U wmemmove
U wmemset
U write
U writev
U X509_free
U X509_STORE_CTX_free
U X509_STORE_CTX_init
U X509_STORE_CTX_new
U X509_STORE_free
U X509_STORE_new
U X509_STORE_set_default_paths
U X509_verify_cert
U __xstat
U __xstat64
w _ZGTtdlPv
w _ZGTtnam
Rise of the Tomb Raider tested on AMD RX 580
20 Apr 2018 at 4:05 am UTC
20 Apr 2018 at 4:05 am UTC
Quoting: ShmerlThe binary is stripped, there is no symbol I can get from it. In the other hand, probably it's a Square Enix decision to not go with GoG.Quoting: x_wingWell, the game was ported to PS4, so one would spect that the engine is well designed enough in order to not be so tightly embraced to a graphic API (in fact, it support two graphic APIs on Windows). As I said, wrapping not necessary means to translate low level API calls.Well, then someone misinformed me, claiming that Feral translate D3D. It's your guess against theirs. Since they don't publish their code, it's hard to truly evaluate it. And I don't use Steam and Feral staunchly refuse to release anything DRM-free, so I can't analyze the binary either. If you have the game, you can for example check symbol names, and see if anything there hints to D3D to Vulkan translation or not.
Rise of the Tomb Raider tested on AMD RX 580
20 Apr 2018 at 3:56 am UTC
20 Apr 2018 at 3:56 am UTC
Quoting: ShmerlThe difference with proper multiplatform engine is that such abstraction sits above system specific APIs. In case of wrapping, system specific API like D3D takes priority, and everything else is translated from it. I.e. it's a post factum design that needs to retrofit things, rather than proper from scratch one.Well, the game was ported to PS4, so one would spect that the engine is well designed enough in order to not be so tightly embraced to a graphic API (in fact, it support two graphic APIs on Windows). As I said, wrapping not necessary means to translate low level API calls.
Rise of the Tomb Raider tested on AMD RX 580
20 Apr 2018 at 3:42 am UTC
20 Apr 2018 at 3:42 am UTC
Quoting: ShmerlIf you want to have a multiplatform support you will need an abstraction layer that "wraps" the OS API, every software has to do that in order to get multiplatform support (unless you're in a high level language... but the wrapping just goes one layer down). Unless the game has a very bad design, you won't have to implement the DX calls with another API (which is what wine does). So, Feral works is a native implementation.Quoting: x_wingWhy do you think that Feral work it's a "wrapper". If you think as a "wrapper" as DXVK is, I think you're wrong.Because that's what many claimed about Feral games in the past. They don't rewrite renderers from scratch in Linux APIs, they take renderers in D3D, and fit OpenGL / Vulkan backend for them. Exactly same idea as Wine, except they don't do it on the binary loading stage (static translation), but use access to source code to make compiler build resulting binary with translation already cooked in. So unless Feral changed their approach somehow for this game, I expect it to use same wrapper idea as before.
Rise of the Tomb Raider tested on AMD RX 580
20 Apr 2018 at 3:23 am UTC
In the other hand, DXVK implements DX11 over Vulkan API, so it won't be possible to do the DX12 test.
20 Apr 2018 at 3:23 am UTC
Quoting: ShmerlWhy do you think that Feral work it's a "wrapper". If you think as a "wrapper" as DXVK is, I think you're wrong.Quoting: GuestI may give DXVK a go in a couple weeks just out of interest.Can you tell if the game is using D3D11 or D3D12 when translating to Vulkan? No one seems to know this.
Quoting: Guest--edit: I may also play with gallium hud soon, to see how well it's using each cpu core, and any other options I can see. Again, just out of interest.Since it's using Vulkan, you won't be able to use GALLIUM_HUD with it, and Mesa developers didn't come up with Vulkan HUD yet.
In the other hand, DXVK implements DX11 over Vulkan API, so it won't be possible to do the DX12 test.
Rise of the Tomb Raider is now officially available on Linux, here’s a look at it with benchmarks
19 Apr 2018 at 11:00 am UTC Likes: 2
19 Apr 2018 at 11:00 am UTC Likes: 2
Ok, time to make explode my credit card on feral website
XLEngine for Dark Forces and Daggerfall is now open source
9 Apr 2018 at 3:24 pm UTC Likes: 2
9 Apr 2018 at 3:24 pm UTC Likes: 2
Quoting: Guesti just realized that dark forces is on linux on GOG and i have it,that takes care of that lolBut it runs on DosBox (even on Windows). Having a native engine will be very cool in order to play at high res.
XLEngine for Dark Forces and Daggerfall is now open source
9 Apr 2018 at 3:23 pm UTC
9 Apr 2018 at 3:23 pm UTC
Quoting: DolusSo, how much work would it take to get Daggerfall ported natively to Linux?It builds and runs on Linux, so it's already "ported". Unfortunately Blood doesn't work (or at least I get a black window using game data from the GoG version).
The developers of fan-made Halo game 'Project Contingency' have decided not to support Linux
9 Apr 2018 at 2:45 pm UTC
But now, going back to the "crossplatform" commitment, I see as very slim possibility that your project will ever get to our OS having a programmer that makes this statements (In fact, he has already made a technology decision that will affect the portability of your launcher). So, I think that would very important that, if you want to keep your multiplatform commitment, every developer in your team starts getting some experience programming on a Linux environment, because in your current status I believe that the cost of making the changes to get your game to our platform (and even to OSX) won't payback the effort.
9 Apr 2018 at 2:45 pm UTC
Quoting: R93_SniperMy apologies for this too late answer (I was on a travel, shitty internet, no time... you know). To be fair, I don't follow your project nor read any other article out of the one Liam quoted in this article. That said, I would appreciate that you share with us any other post that show us your development process so I can understand your answer.Quoting: x_wingIs the guy a developer? If it is, my theory is that he has only develop on Windows. I mean, it's clear that He only knows how to use Windows dev tools & technology, so when he has to think out of the his sandbox he simply can't (and my statement applies for many devs out there, not only this one).Yes he is a developer, though you're completly correct that most/all of his stuff is on windows based platforms. Its funny you say this as I remarked earlier about how we're doing stuff, but for us I can assure you that we've been having tests to see how easily things begin to cross compile and how they run on other Operating systems. So far the results are promising! [/spoiler]
I think that one of the biggest problem of all gaming/applications projects is that they always start with the multiplatform idea (you know, it sells!), but they just start programming using Windows development tools not even thinking nor testing if what you're doing can crosscompile. So, in essence, I'm convinced that all this guys/enterprise that starts a project and promise multiplatfom support simply think that they can pospone other platform support to a final stage of development, when it MUST be parallel work.
But now, going back to the "crossplatform" commitment, I see as very slim possibility that your project will ever get to our OS having a programmer that makes this statements (In fact, he has already made a technology decision that will affect the portability of your launcher). So, I think that would very important that, if you want to keep your multiplatform commitment, every developer in your team starts getting some experience programming on a Linux environment, because in your current status I believe that the cost of making the changes to get your game to our platform (and even to OSX) won't payback the effort.
- Nexus Mods retire their in-development cross-platform app to focus back on Vortex
- Windows compatibility layer Wine 11 arrives bringing masses of improvements to Linux
- GOG plan to look a bit closer at Linux through 2026
- Hytale has arrived in Early Access with Linux support
- Valve reveal all the Steam events scheduled for 2026
- > See more over 30 days here
- Weekend Players' Club 2026-01-16
- whizse - Venting about open source security.
- rcrit - Away later this week...
- Liam Dawe - Welcome back to the GamingOnLinux Forum
- simplyseven - A New Game Screenshots Thread
- JohnLambrechts - See more posts
How to setup OpenMW for modern Morrowind on Linux / SteamOS and Steam Deck
How to install Hollow Knight: Silksong mods on Linux, SteamOS and Steam Deck