imLinguin / comet

Open Source implementation of GOG Galaxy Communication Service for SDK bundled with GOG games.
GNU General Public License v3.0
246 stars 10 forks source link

Game Compatibility table in Wiki + possible automation #21

Closed kevin-wijnen closed 3 months ago

kevin-wijnen commented 7 months ago

Context

As discussed previously, I am interested into helping maintain (with the library of GOG games I do own) a game compatibility sheet for Comet, to let users know which features do and do not work via Comet.

With this, it was suggested to use the Wiki as the information source for either Steam Deck specific or game compatibility issues/statuses.

This approach however would lead to:

Proposal

My proposal to the above context and issues consists out of two parts:

Use Pull Request and GitHub Actions for adding pages to the Wiki

Using Pull Requests would help with checking if any new pages or edits to pages are of acceptable quality, and prevents overwriting someone else's reports without new evidence.

While the label documentation could be used for labelling additions and edits to the Wiki, it would not automate any changes to the Wiki. Nor is there any basis of editing Wiki pages in the codebase.

That's why I would recommend using automation such as GitHub Wiki Action to have:

If there's interest in automating the Wiki in this way, I would be happy to introduce the automation through a Pull Request as a Proof of Concept.

Game Compatibility Report Standard

To keep tabs on game compatibility, the idea of keeping game compatibility reports in this repository seems like a good one to implement (until Heroic/Lutris/another tool would

For maintaining an easy to read compatibility sheet, I would suggest the following standard to be implemented as a table in the Wiki:

I'm not sure which other features of GOG Galaxy Comet would support (would Stats support be considered different from Leaderboard support?), but this seems like a good baseline for (initial) game compatibility support reports.

Example table

Legend

🟩 = Yes/Supported 🔲 = Not Required / Not Present ❌ = Defective/Not Working

Game Title Game Version Comet Version GalaxyCommunication.exe Service Required GOG Galaxy Features Notes
Cuphead Version 1.3.4 (8/19/2022) commit 55e4025 🟩 Yes 🟩 Achievements 🔲 Leaderboard GalaxyCommunication.exe service required for game to start communicating with GOG. Otherwise, Achievements won't work. No Leaderboards present in-game.
Absolute Drift Version 5f6049d (6/26/2023) commit 55e4025 🔲 No 🟩 Achievements ❌ Leaderboard Achievements do work. Leaderboard support incomplete; errors out on retrieving and updating stats from GOG Galaxy servers. Leaderboards should work fine when not using the GOG Galaxy leaderboards. You can change the leaderboards in Settings > Your Data Rights.
imLinguin commented 7 months ago

I like this idea, let's do it. I hope to get full leaderboards support this week and be ready for initial release of new comet.
I'm fine with having wiki contributions through pull requests, I agree that it makes it more manageable than simple public access.

As to features I believe Achievements and Leaderboards are fine for now, those are the only noticeable ones currently.
We could eventually add statistics to that list as well, however verifying that stats work/exist requires a bit of digging in comet logs/GOG API.

kevin-wijnen commented 7 months ago

Perfect! I'll start messing around with a proof of concept for the automation of the Wiki later on this week.

Forgot about this GitHub feature, but there's also issue templates. While maybe cumbersome to some extend for regular bug issues, they seem to be perfect to make Game Compatibility Reports very accessible, even to those without experience with markdown. Might be worth looking into automating adding them to the evergrowing table if the report's accepted or labelled as "valid report" or the like. Still would have to formulate a plan for this type of setup, however.

Good to know, then only Achievements and Leaderboards will be checked for now.

kevin-wijnen commented 7 months ago

Update

Added the Proof of Concept automation as a Pull Request through #24.

kevin-wijnen commented 7 months ago

@imLinguin I did notice the recent builds failing after merging the recent CI/CD changes by my PR.

You might be able to fix the CI by looking here (as it matches the error): https://github.com/orgs/community/discussions/54970

imLinguin commented 7 months ago

It's fine, it seems like a temporary issue on GitHub side

imLinguin commented 7 months ago

Should we include information about Linux native builds compatibility too? I found two games so far that support Galaxy API, even though GOG says the SDK is not supported on Linux, seems like the games are written in .NET.

We could add a new column called for example Linux build or something along those lines. What do you think?

kevin-wijnen commented 7 months ago

Should we include information about Linux native builds compatibility too? I found two games so far that support Galaxy API, even though GOG says the SDK is not supported on Linux, seems like the games are written in .NET.

* [Stardew Valley](https://www.gog.com/game/stardew_valley)

* [Streets of Rage 4](https://www.gog.com/game/streets_of_rage_4)

We could add a new column called for example Linux build or something along those lines. What do you think?

Now this is really interesting. I do wonder if it would mean that other Linux versions just work with achievements as well just fine, perhaps with a workaround (similar to how GalaxyCommunication.exe is needed for some older SDK Windows builds). Is there anything in particular file wise that points to the functionality? Usually .dll-type of libraries are noted as .so files for Linux. (I can't check it myself as I got neither, and GOGdb doesn't show listings of Linux builds most likely due to the Galaxy API not giving them because of the lack of a Linux launcher.)

I'm all fine adding a column to it with "Linux Native support", or have it mentioned in the "GalaxyCommunication.exe needed" as a secondary answer (like "No / Linux native version works as well").

Another interesting test case would be to check Terraria, as I do reckon that game is developed with the same FNA/.NET framework as Stardew Valley is.

imLinguin commented 7 months ago

I checked the file list of Terraria, it doesn't have any Galaxy libraries. It seems to not use the Galaxy SDK even on windows.

kevin-wijnen commented 7 months ago

Interestingly, playing Crypt of the NecroDancer through its Linux build (I already tested the Windows version, still on my "add to the Wiki" branch for submitting multiple reports at once): Comet successfully identifies the client and sets up the database. Have not tested any achievements yet, due to already having received "the easiest" achievement on that game. I will have to try and get a different one to validate it. 😄

This game is allegedly not built with .NET (neither initially or during its rewrite to support the latest big DLC expansion . Looking through the actual files, Crypt of the NecroDancer uses .exe files in the Linux version without the use of WINE/Proton suggesting it to be a form of .NET export. (Using a start.sh script to start the game.) According to the earlier referenced Reddit comment (although couldn't find any verification so far), Monkey X/Cerberus X can export game source code to C# for actual builds. That would explain the .exe files in the Linux build and it still connecting.

imLinguin commented 7 months ago

Yeah, the way that actually works is really odd in every case, although I saw native builds of the libraries like libGalaxy64.so

kevin-wijnen commented 7 months ago

Yeah, the way that actually works is really odd in every case, although I saw native builds of the libraries like libGalaxy64.so

It might then imply a custom implementation, but by information either they discovered themselves or by GOG giving it to them? Considering it's simply sending standardised messages to a websocket after all, no? Might be leftovers from cross-platform code (coding SDK support for Windows and macOS --> still lingers in Linux export despite no Linux application taking care of the streams of data).

Anyhow, I'm happy to confirm that Crypt of the NecroDancer does work with Achievements on the Linux build as well. Managed to unlock the "finished Zone 2" achievement on the Linux native build.

imLinguin commented 7 months ago

Could you re-check leaderboards related things when you get a chance? I just pushed a change that enables the support. I'll test it myself in Ghostrunner

kevin-wijnen commented 7 months ago

Could you re-check leaderboards related things when you get a chance? I just pushed a change that enables the support. I'll test it myself in Ghostrunner

Can confirm both Crypt of the NecroDancer (native Linux version) as Absolute Drift (Proton/Windows version running via WINE) work as expected: leaderboards get synced up right away, entries are sent and entries are being received (your own + any other ones available to any GOG user such as of their own friends or global ones). I had an initial issue with Crypt of the NecroDancer not loading the leaderboard, but soon after it seemed to fix itself.

The new additions did not break achievement support for either anyway - I still managed to unlock an achievement for each of the two games. :)

I'll put up my current compatibility tests soon (probably tomorrow but no promises) as a Pull Request focused on submitting the reports. Will also add the "Linux native working?" column to it as previously discussed as a good and noteworthy addition.

(I'm still glad to see some Linux native games do still work with Comet for achievement and leaderboard functionality!)

kevin-wijnen commented 7 months ago

Actually, looking at the recent commit for the leaderboard functionality, did you test the recent change from Local time to UTC time @imLinguin? Looking back at GOG's activity feed (to see when the achievements did unlock), it happened "4-5 hours ago", while your request for testing leaderboards only happened 2 hours ago (as of writing). Could the transition from Local to UTC timestamps have messed up unlock times being sent to GOG?

imLinguin commented 7 months ago

The service responsible for activity feed is borked when it comes to calculating time difference.
You are better off checking this in Galaxy. Here's the example image image

5 hours vs 2 hours. The change I made is purely cosmetic nevertheless, since I was doing to_utc() conversion of Local timestamp.

kevin-wijnen commented 7 months ago

New PR (#27) is made with the new Linux Native Works column and some game compatibility reports.

Not a lot of reports this time, but already set up a list of games from my library that should work with Comet that are yet to test. Should be able to test them quicker (as in: check if Comet connects for achievement support) to see if Comet does connect with them to begin with, with my Linux desktop.

(Did not test Leaderboards yet with the latest commit of today, not sure how much it does impact Leaderboard support as my tests yesterday did work just fine.)