friendly weekly *ping*

(runtime testing as below is a little complicated for now; but just a
review of the build would go a long way...)

On Mon, Aug 09, 2021 at 09:25:01AM -0600, Thomas Frohwein wrote:
> Hi,
> 
> Please find attached a port of the "Goldberg Emulator." This is a
> drop-in replacement for libsteam_api.so, the base steam interface on
> Linux. It has been designed to allow Steam online features for LAN and
> offline use without needing a Steam connection. This makes it useful for
> game compatibility beyond what the current collection of stubs in the
> port games/steamworks-nosteam is capable of. It is LGPLv3+ licensed.
> 
> This came to be because of the problems I encountered with running
> recent versions of the game Northgard that ship Linux' libsteam_api.so
> even with the GOG.com version and only offer limited functionality with
> the stub of steam.hdll in steamworks-nosteam.
> 
> With this port, there is no need anymore to stub Steam wrapper
> libraries for most scenarios, as libsteam_api.so will take care of
> everything.
> 
> For those who own one of the hashlink games that can run with this
> (Northgard, Evoland Legendary Edition, Darksburg, Wartales Demo), you
> can test this port by installing it and building a "full-fat"
> steam.hdll that you drop into the game's directory. Remove all other
> *.hdll, *.dll, and *.so{,.*} in there. Then run one of:
> 
> $ hl                  # Northgard
> $ hl sdlboot.dat      # Evoland Legendary Edition, Wartales Demo
> $ hl hlboot.dat               # Darksburg
> 
> Note this will need the recent update to hashlink-1.11pl0 (NOT p0!).
> 
> To build the full steam.hdll _after_ installing the goldberg_emulator
> port, clone https://github.com/HeapsIO/hlsteam, apply the attached diff
> (diff based on checkout 24265f62c0499a0c4f37d42b33548c24061c2bd7), and
> build with gmake.
> 
> With this port, it will be possible to replace the stub collection in
> steamworks-nosteam with simple, non-stubbed ports of the upstream
> libraries, as libsteam_api.so from the Goldberg Emulator will take care
> of all Steam API calls. The benefits will be less maintenance and
> overall better compatibility.
> 
> A few notes about the port:
> 
> - I've used GL_* variables similar to GH_*, as upstream is on GitLab.
> - Headers are in ${PREFIX}/include/goldberg_emulator/sdk_includes
> - get_lib_path is set to return "." which works with all use cases that
>   I tested.
> - A few linux functions have to be substituted in wrap.cpp. Among them,
>   replacing dlmopen with dlopen seems the worst offender, but I am not
>   aware of a better workaround for Linux' Lmid_t/dlmopen stuff and so
>   far this has not caused problems.
> 
> comments? oks?


> diff --git a/Makefile b/Makefile
> index 6e970fe..bd0e075 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -2,7 +2,7 @@ LBITS := $(shell getconf LONG_BIT)
>  
>  UNAME := $(shell uname)
>  
> -CFLAGS = -Wall -O3 -I src -I native/include -fPIC -I ../sdk/public
> +CFLAGS = -Wall -O3 -I src -I native/include -fPIC -I ../sdk/public 
> -I/usr/local/include
>  
>  ifndef ARCH
>       ARCH = $(LBITS)
> @@ -18,7 +18,7 @@ OS=linux
>  CFLAGS += -std=c++0x
>  endif
>  
> -LFLAGS = -lhl -lsteam_api -lstdc++ -L native/lib/$(OS)$(LIBARCH) -L 
> ../sdk/redistributable_bin/$(OS)$(ARCH)
> +LFLAGS = -lhl -lsteam_api -lstdc++ -L/usr/local/lib
>  
>  SRC = native/cloud.o native/common.o native/controller.o native/friends.o 
> native/gameserver.o \
>       native/matchmaking.o native/networking.o native/stats.o native/ugc.o
> diff --git a/native/gameserver.cpp b/native/gameserver.cpp
> index 165d4ec..f69827e 100644
> --- a/native/gameserver.cpp
> +++ b/native/gameserver.cpp
> @@ -124,7 +124,7 @@ vuid HL_NAME(gameserver_get_steam_id)() {
>  }
>  
>  int HL_NAME(gameserver_get_public_ip)() {
> -     return (int)SteamGameServer()->GetPublicIP();
> +     return (int)SteamGameServer()->GetPublicIP().m_unIPv4;
>  }
>  
>  DEFINE_PRIM(_BOOL, gameserver_init, _I32 _I32 _I32 _I32 _I32 _BYTES);
> @@ -196,4 +196,4 @@ HL_PRIM void HL_NAME(request_internet_server_list)( int 
> appId, varray *filters,
>  
>  DEFINE_PRIM(_VOID, request_internet_server_list, _I32 _ARR _FUN(_VOID, 
> _DYN));
>  
> -// ---------
> \ No newline at end of file
> +// ---------
> diff --git a/native/steamwrap.h b/native/steamwrap.h
> index 70f64fc..506cc5d 100644
> --- a/native/steamwrap.h
> +++ b/native/steamwrap.h
> @@ -11,9 +11,9 @@
>  #include <iostream>
>  #include <map>
>  
> -#include <steam/steam_api.h>
> -#include <steam/steam_gameserver.h>
> -#include <steam/isteamappticket.h>
> +#include <goldberg_emulator/sdk_includes/steam_api.h>
> +#include <goldberg_emulator/sdk_includes/steam_gameserver.h>
> +#include <goldberg_emulator/sdk_includes/isteamappticket.h>
>  
>  typedef vbyte *              vuid;
>  #define _UID         _BYTES

Attachment: goldberg_emulator.tgz
Description: Binary data

Reply via email to