Hacktoberfest 2026:維護者為十月標記出來的 issue,仍然開放、適合新手。 瀏覽 Hacktoberfest issue

Detecting GameMaker

未關閉
#40 13 則留言 1 個 reaction 已指派 0 人 在 GitHub 檢視

還沒有人認領這個 Issue。

評估

難度
5/5
預估耗時
一週以上
新手友好度
25/100
Issue 類型
功能
描述清晰度
需要釐清
活躍度
停滯
領域
tooling

研究方向

Start by reviewing the existing GameMaker detection entry points and how depot file lists are scanned; the issue does not name specific files or tests. Compare the listed false negatives and proposed markers, then define which detection signals to support and verify them against the example depots without introducing false positives.

由索引模型根據 Issue 內容生成。

描述

Type: Engine

Currently there are plenty of false negatives for GM games, which is attributed to the following factors:

  • GMS1..GMS2.2 (or so) games compiled with YYC would embed data.win file into the executable as a resource instead of keeping it external.
  • snd_* naming convention is non-obligatory - mus_ is also common, as is camelCase/PascalCase. And some games might not have external audio at all! (it's a thing you tick a checkbox for on sounds)
    In a way I also personally made the matters worse due to releasing a tool that rewrites audio file paths and moves them to a sub-directory
  • GMS1 had an option to use a compressor (cabinet extractor IIRC) to pack everything into one large executable.
  • Pre-GMS1 games are hard to detect since there was always a single executable.
    Since almost all games would resort to using at least one DLL for specific features, collecting legacy DLL names from GMToolbox could help, but would take a while.
    Binary signature detection is also problematic.
  • options.ini is not required for the game to run so some people would delete it

Suggestions:

  • game.unx and game.ios are Linux/Mac versions of data.win
  • Furthermore, OSX builds will contain libYoYoGamepad.dylib for concrete results.
  • runner (+x) + run.sh + lib/libsteam_api.so + assets is a good tell of a GM Linux build that has not been customized
  • audiogroup<index>.dat are packages of audio files to be loaded on-demand and can be a good tell.
    These are always labelled sequentially starting at 1, so audiogroup1.dat, audiogroup2.dat, and so on.
  • D3DX9_43.dll without D3DCompiler_43.dll can be a good hint of GMS1 YYC game given presence of other evidence.
  • If you can afford to: see if the depot contains a single executable and try extracting it via 7z e that.exe.
    This would also fix some other false negatives with games that used self-extracting executables.
  • If you can afford to, scan the executable bytes for FORM <any 4 bytes> GEN8 - this is a tell of a data.win file embedded into the executable.
    image
    (pictured: Cavern Kings' executable)
  • Checking for GameMaker-specific DLLs could help:
    • CleanMem.dll: this thing.
    • Steamworks.gmk.dll: my Steamworks wrapper for pre-GMS1 GameMaker versions (as far as I can tell, adds a couple games)
    • Steamworks.gml.dll: my Steamworks helper for current GameMaker versions
    • GOG.gml.dll: my GOG wrapper
    • joydll.dll + SDL.dll: a DLL for SDL-based gamepad support
    • GMS-WinDev.dll: an ancient DLL of mine with Windows-specific curiosities.
    • Apollo.dll: my Lua wrapper. Might be worth combining with other evidence since the name is generic enough.
    • gmlive-server.exe: the local server from my live-coding extension. You are not supposed to ship it to the end user, but people sometimes forget.
    • geon_fx: a folder with bits from Geon FX particle editor. Similarly, you are not supposed to distribute it to the end user, but guess what
    • display_mouse_lock.dll: a native mouselock extension of mine.
    • window_set_cursor.dll: an extension for native cursors by me.
    • rousrDissonance.dll: a Discord Rich Presence wrapper extension.
    • window_frame.dll: an extension of mine that prevents the game from getting frozen in an event loop while resized... and causes a handful
    • catch_error.dll: an extension of mine that monkey-patches exception handling and crash reports into versions of GameMaker that didn't have those.

Some false-negatives:

  • Caveblazers: no .win, no options, camelCase sounds - needs .exe scan
  • Circuit Breakers: self-extracting executable on Windows, but Mac version is easily detectable
  • Witchinour: no .win, no sounds, but has display_mouse_lock.
  • Cavern Kings: self-extracting executable, no .win, music_-prefixed OGGs
  • Devolver Bootleg: no options, no sounds - needs .exe scan
  • Downwell: self-extracting executable
  • Duke of Defense: no options, no sounds, has rousrDissonance.dll
  • Ghost Croquet: no .win, custom sound names, Steamworks.gml.dll
  • Gun Done: also a self-extracting executable
  • Heat Signature: no .win, custom sound names - needs .exe scan
  • INK: a self-extracting executable
  • Last Horizon: a self-extracting executable, no .win, no options, custom sound names - needs .exe scan
  • Momodora III: no .win, no options, but has CleanMem.dll
  • Momodora RUtM: same author, same deal
  • Nidhogg 2: no .win, custom sound names, Steamworks.gml.dll, audio groups.
  • Nuclear Throne: no .win, custom sound names, a whole lot of my DLLs (because I extensively worked on this game)
  • Pilot Unknown: no options, no sounds, window_set_cursor.dll
  • Pixel Beef Battle: no options, no sounds, geon_fx folder
  • Prime Mover: no .win, no options, no sounds, window_set_cursor.dll
  • Samurai Gunn: no options, custom sound names, joydll.dll
  • ROFLNAUTS in Awesomenauts: the mini-game is made in GameMaker and spots joydll.dll... but what should SteamDB do if a game uses multiple engines as result?
  • Super Mutant Alien Assault: a self-extracting executable
  • Taco Gun: no options or sounds, but has audiogroup#.dat
  • Wild Glory: no .win or options, but has audiogroup#.dat.
主要語言
PHP
星號
234
分支
113
PR 合併指標
30 天內沒有已合併 PR

環境準備

在 Codespaces 中開啟

在瀏覽器裡用你自己的 GitHub 帳號啟動這個專案的開發容器。

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

SteamDatabase/FileDetectionRuleSets 的其他 Issue

查看 SteamDatabase/FileDetectionRuleSets 的全部 Issue

相似的 Issue

更多 PHP Issue

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。