I have a game already on Steam with achievements using luasteam. In order to release the game on the Epic Games Store, the game apparently also needs (more-or-less) the same achievements using Epic Online Services (Epic has already blocked the game's release because of this). However, as far as I can tell, there's no equivalent port of the Epic Online Services SDK to Lua (which is understandable since it's a smaller market), and the Web API doesn't support anything involving achievements so I can't just make HTTP requests from the game (API docs). Is there a port that I've missed or a methodology that I'm overlooking to use EOS? Or any known LÖVE games on EGS with achievements that I can take a look at?
Failing this, does anyone have experience with contacting any sort of official support for Epic's Dev Portal? All I've found so far is links to their dev forum, which isn't really what I need. I can tell that Epic doesn't enforce this achievements-parity requirement on all games as I've found at least one LÖVE game which has achievements on Steam but not on the Epic Games Store. Not sure if this is an oversight on Epic's part (and I really don't want to grass in that case and get their game taken down), or if this is something they allow exceptions for in specific cases (if I have to wrap/port the SDK myself, I'll probably just pull the EGS release entirely since it's financially not worth the effort).
Thank you!
EDIT: Reddit x-post
Epic Achievements/Online Services SDK/API for LÖVE/Lua?
Forum rules
Before you make a thread asking for help, read this.
Before you make a thread asking for help, read this.
Re: Epic Achievements/Online Services SDK/API for LÖVE/Lua?
Unfortunately no. I checked their API, but as you said, there is no achievements functionality in the web API.
Would it be possible to link their SDK somehow?
https://dev.epicgames.com/docs/epic-onl ... references
They mention: "the EOS SDK in C", but I couldn't find C SDK, only their C# SDK.
Otehrwise Lua allows C language calls:
https://www.lua.org/pil/26.html
Would it be possible to link their SDK somehow?
https://dev.epicgames.com/docs/epic-onl ... references
They mention: "the EOS SDK in C", but I couldn't find C SDK, only their C# SDK.
Otehrwise Lua allows C language calls:
https://www.lua.org/pil/26.html
My boat driving game demo: https://dusoft.itch.io/captain-bradley- ... itius-demo
Re: Epic Achievements/Online Services SDK/API for LÖVE/Lua?
You can use FFI. FFI is enabled in Löve2D.
https://luajit.org/ext_ffi.html
Here you can see how it works with Steam:
https://github.com/CapsAdmin/ffibuild/b ... mworks.lua
https://luajit.org/ext_ffi.html
Here you can see how it works with Steam:
https://github.com/CapsAdmin/ffibuild/b ... mworks.lua
-
- Party member
- Posts: 559
- Joined: Wed Oct 05, 2016 11:53 am
Re: Epic Achievements/Online Services SDK/API for LÖVE/Lua?
I implemented Epic's C SDK directly into löve's source code, and using the resulting executable for distribution via EGS. However, I only implemented the ownership verification (the bare minimum), so I didn't look into achievements or online services. This was acceptable to them in 2023, so if they have since then made achievement implementation a requirement, that's news to me.
If you're curious, the code you need to insert into löve is something like:
You'll need to acquire things like product id, sandbox id, client id, etc from Epic.
If you're curious, the code you need to insert into löve is something like:
Code: Select all
//love.cpp
int initializeEOS()
{
EOS_InitializeOptions initOptions = {
EOS_INITIALIZE_API_LATEST,
NULL,
NULL,
NULL,
"your game name",
"version number",
NULL,
NULL,
NULL,
};
EOS_EResult res = EOS_Initialize (
&initOptions
);
if (res == EOS_EResult::EOS_Success) {
return 0;
}
else {
return 1;
}
}
EOS_HPlatform startEOSPlatform()
{
EOS_Platform_ClientCredentials credentials = {
"asdasd", // client id
"asdasdas", // client secret
};
EOS_Platform_Options platformOptions = {
EOS_INITIALIZE_API_LATEST, // api
NULL, // reserved
"asdasd", // product id
"asdasd", // sandbox id
credentials, // credentials
EOS_FALSE, // bIsServer
NULL, // encryption key
NULL, // override country code
"en", // override locale
"asdasd", // deployment id
EOS_PF_WINDOWS_ENABLE_OVERLAY_OPENGL, // flags
NULL, // cache
3, // tick budget in ms
NULL, // voices on/off
NULL, // integratedplatformoptionshandle
};
EOS_HPlatform platform = EOS_Platform_Create(
&platformOptions
);
return platform;
}
int main(int argc, char **argv)
{
if (strcmp(LOVE_VERSION_STRING, love_version()) != 0)
{
printf("Version mismatch detected!\nLOVE binary is version %s\n"
"LOVE library is version %s\n", LOVE_VERSION_STRING, love_version());
return 1;
}
int initVal = initializeEOS();
if (initVal != 0) {
MessageBox(
NULL,
"EOS failed to initialize. Please check that EOSSDK-Win64-Shipping.dll is included.",
"EOS Launch error",
0x00000000L
);
return 1;
}
else {
// EOS initialized
}
EOS_HPlatform platform = startEOSPlatform();
EOS_EResult res = EOS_Platform_CheckForLauncherAndRestart(platform);
//Test stuff
if (res == EOS_EResult::EOS_Success) {
// relaunching with EGS launcher
return 0;
}
else if (res == EOS_EResult::EOS_NoChange) {
// no change, no need to do anything
}
else if (res == EOS_EResult::EOS_UnexpectedError) {
// error occured, exiting!
printf("Unknown EOS error!");
return 1;
}
else if (res == EOS_EResult::EOS_InvalidParameters) {
// error occured, exiting!
return 1;
}
else {
// Display error that EGS needs to be running.
char str[1000];
sprintf(str, "EOS could not launch properly. Please ensure that Epic Games Store is running. Status code: %d", res);
MessageBox(
NULL,
str,
"EOS status",
0x00000000L
);
return 1;
}
int retval = 0;
DoneAction done = DONE_QUIT;
do
{
EOS_Platform_Tick(platform);
done = runlove(argc, argv, retval);
} while (done != DONE_QUIT);
EOS_Platform_Release(platform);
EOS_Shutdown();
return retval;
}
Re: Epic Achievements/Online Services SDK/API for LÖVE/Lua?
Per their documentation it's only required, if you are already using it in other systems such as Steam. They want to be on par.MrFariator wrote: ↑Tue Oct 15, 2024 10:12 pm I implemented Epic's C SDK directly into löve's source code, and using the resulting executable for distribution via EGS. However, I only implemented the ownership verification (the bare minimum), so I didn't look into achievements or online services. This was acceptable to them in 2023, so if they have since then made achievement implementation a requirement, that's news to me.
My boat driving game demo: https://dusoft.itch.io/captain-bradley- ... itius-demo
Re: Epic Achievements/Online Services SDK/API for LÖVE/Lua?
Major edit:
----
After asking around, you can use EOS by interfacing with the provided "shipping" DLLs using LuaJIT FFI.
MrFariator's example of statically linking to it is probably the proper way of using EOS, though loading the DLL through LuaJIT FFI and calling functions from it should work as well.
The challenge is then creating the cdef definitions for all functions, structures etc. from the DLL.
Edit 2: there's some reference in this Ren'py extension, they interface with the DLLs alone: https://github.com/Ayowel/renpy-epicgam ... s/epic_eos
----
After asking around, you can use EOS by interfacing with the provided "shipping" DLLs using LuaJIT FFI.
MrFariator's example of statically linking to it is probably the proper way of using EOS, though loading the DLL through LuaJIT FFI and calling functions from it should work as well.
The challenge is then creating the cdef definitions for all functions, structures etc. from the DLL.
Edit 2: there's some reference in this Ren'py extension, they interface with the DLLs alone: https://github.com/Ayowel/renpy-epicgam ... s/epic_eos
Who is online
Users browsing this forum: Ahrefs [Bot], Amazon [Bot], Bing [Bot], Google [Bot] and 18 guests