Hi all,
I've been researching lately a bit about how to integrate Valve's steam functionality within a game using Love2D. I've seen this post about it so then I learnt that Move or Die was successfully released on Steam.
So I went to steamworks, downloaded the API, played around a bit with their example in C++ and then loaded the DLL they provide from a small example using LOVE, it works, and I can see the steam overlay on my small application.
My question is, there are only a few functions exported into that DLL based on the code I saw from the API, one of them being SteamAPI_Init() which is the one I'm calling to get the overlay. So, in order to use other functionality steamworks has, like achievements, leaderboards and so on, do I need to create my own DLL file exporting the functions I'll use from lua? Or is it easier/quicker to just make a custom wrap in C++ exposing what functions I can call from Lua?
What's the general approach people follow when integrating steamworks into their games?
Thanks!
Loading Steamworks dll from LOVE
Forum rules
Before you make a thread asking for help, read this.
Before you make a thread asking for help, read this.
Loading Steamworks dll from LOVE
Currently working on Breaking Fast, a competitive 2D "mario kart alike" racing game! Already passed steam greenlight, hopefully soon to be released!
Re: Loading Steamworks dll from LOVE
There are two "main" ways : the fast one, and the slow one. I speak in execution speed. The first, and easier is to use FFI to include all C functions exposed by the Steamworks API. The second one, is to create a Lua C library wrapping the API.
I never used it, so I can only speak about a generic C DLL. If you use the API just for the overlay, and other feature not used so often, FFI should be fine. But if you use an API call (let's say) 1 000 times in a second, then you should probably create a Lua C library.
For the achievements and others game features like this, the game must be on Steam. You can't create achievements, leaderboards, etc if you're game isn't published on Steam. And, how to handle achievements in the code, I think it's not the same library (maybe it's a bigger steam_api.dll, I don't know).
By the way, using the Steamworks API with a game you don't plan to publish on Steam is useless. Except for the overlay, the player's name and player's Steam ID.
I never used it, so I can only speak about a generic C DLL. If you use the API just for the overlay, and other feature not used so often, FFI should be fine. But if you use an API call (let's say) 1 000 times in a second, then you should probably create a Lua C library.
For the achievements and others game features like this, the game must be on Steam. You can't create achievements, leaderboards, etc if you're game isn't published on Steam. And, how to handle achievements in the code, I think it's not the same library (maybe it's a bigger steam_api.dll, I don't know).
By the way, using the Steamworks API with a game you don't plan to publish on Steam is useless. Except for the overlay, the player's name and player's Steam ID.
Founder of NeoShadow Studio. Currently working on the project "Sirami".
github / linkpy
github / linkpy
Re: Loading Steamworks dll from LOVE
Thanks for the answer Linkpy!
Yes, I'm using FFI at the moment, my problem is, that as far as I know, I cannot call a function that hasn't been exposed in the DLL, normally in C you do this by using __declspec(dllexport) in the function's definition , so if the function I intend to call is not accessible I don't think FFi can help me here?There are two "main" ways : the fast one, and the slow one. I speak in execution speed. The first, and easier is to use FFI to include all C functions exposed by the Steamworks API. The second one, is to create a Lua C library wrapping the API.
It definitely won't call 1000 times a second, mainly we will use it for the networking and some other features potentiallyI never used it, so I can only speak about a generic C DLL. If you use the API just for the overlay, and other feature not used so often, FFI should be fine. But if you use an API call (let's say) 1 000 times in a second, then you should probably create a Lua C library.
Yes, the game needs to be on steam so you get a valid application ID, we are on greenlight at the moment so I'm starting to prepare everything.For the achievements and others game features like this, the game must be on Steam. You can't create achievements, leaderboards, etc if you're game isn't published on Steam. And, how to handle achievements in the code, I think it's not the same library (maybe it's a bigger steam_api.dll, I don't know).
By the way, using the Steamworks API with a game you don't plan to publish on Steam is useless. Except for the overlay, the player's name and player's Steam ID.
Currently working on Breaking Fast, a competitive 2D "mario kart alike" racing game! Already passed steam greenlight, hopefully soon to be released!
Re: Loading Steamworks dll from LOVE
In case someone bumps into this, I just realised the steam_api.dll file is actually exposing a ton more of funtions than I previously thought, I used http://www.nirsoft.net/utils/dll_export_viewer.html to see what the dll had, so I think it's just a matter of adding them with FFI, maybe I'll write a quick script to do this for me, thanks!
Currently working on Breaking Fast, a competitive 2D "mario kart alike" racing game! Already passed steam greenlight, hopefully soon to be released!
- zorg
- Party member
- Posts: 3465
- Joined: Thu Dec 13, 2012 2:55 pm
- Location: Absurdistan, Hungary
- Contact:
Re: Loading Steamworks dll from LOVE
Me and my stuff True Neutral Aspirant. Why, yes, i do indeed enjoy sarcastically correcting others when they make the most blatant of spelling mistakes. No bullying or trolling the innocent tho.
Re: Loading Steamworks dll from LOVE
I thought you've seen this post and the two links in, I was surprised when you said that there wasn't the functions you need. But like zorg said, https://github.com/CapsAdmin/ffibuild/t ... steamworks this one seams to be good.
Founder of NeoShadow Studio. Currently working on the project "Sirami".
github / linkpy
github / linkpy
Re: Loading Steamworks dll from LOVE
Thanks for the links, I did try them but the steam API has changed since these scripts last run.
I tried to manually run them, but I had some missing modules when parsing the json file. (local json = serializer.ReadFile("json", "steam_api.json"))
Eventually I installed all the requirements but the lua script dies without generating the new lua file with the FFI definitions, I checked and apparently it is the line to require(lpeg) the one killing the script, I did install lpeg as well but I kind of hit a wall with this at the moment, will try to check later but I'll appreciate if someone has more info about this problem
Thanks for the answers chaps!
I tried to manually run them, but I had some missing modules when parsing the json file. (local json = serializer.ReadFile("json", "steam_api.json"))
Eventually I installed all the requirements but the lua script dies without generating the new lua file with the FFI definitions, I checked and apparently it is the line to require(lpeg) the one killing the script, I did install lpeg as well but I kind of hit a wall with this at the moment, will try to check later but I'll appreciate if someone has more info about this problem
Thanks for the answers chaps!
Currently working on Breaking Fast, a competitive 2D "mario kart alike" racing game! Already passed steam greenlight, hopefully soon to be released!
Who is online
Users browsing this forum: No registered users and 5 guests