Skip to content

Conversation

@akien-mga
Copy link
Contributor

SteamDB app page links to a few games using this

https://steamdb.info/app/757860/
https://steamdb.info/app/499460/
https://steamdb.info/app/324240/
https://steamdb.info/app/1209750/ (this one I've confirmed uses UPBGE)
Everything currently under https://steamdb.info/tech/Engine/UPBGE/

Brief explanation of the change

Edited description to include both projects which have the same signature.
BGE was removed from Blender in 2.80 in 2019, so it's likely that most of
the published titles were made with BGE and not the UPBGE fork.

Follow-up to #61 (comment)

Note: I don't know if there's a way to actually differentiate between BGE and UPBGE titles to see if my above assumption is correct. I could be wrong since while BGE was removed from Blender in 2019, UPBGE did start as a fork in 2015 according to their README.

Note 2: Blender itself is matched even though it no longer contains the code for the BGE. So this might also match other non-game applications that bundle parts of Blender, such as Motion Studio which bundles it as an export tool.

Adobe_AIR = (?:^|/)Adobe AIR(?:$|/)
AdventureGameStudio = (?:^|/)(?:AGSteam\.dll|acsetup\.cfg)$
AGI = (?:^|/)AGIDATA\.OVL$
BlenderGameEngine[] = (?:^|/)BlendThumb(?:64|)\.dll$
Copy link
Contributor Author

@akien-mga akien-mga Sep 11, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This might be too generic and is probably what makes it match Blender or Motion Studio which are not Blender Game Engine nor UPBGE applications.

Could be worth running a test on SteamDB with this rule removed, to see which entries would be removed. I could then have a look and see if they were indeed false positives or not.

Edited description to include both projects which have the same signature.
BGE was removed from Blender in 2.80 in 2019, so it's likely that most of
the published titles were made with BGE and not the UPBGE fork.
@xPaw
Copy link
Member

xPaw commented Sep 11, 2021

Most common base names:

  • blendthumb64.dll - 80 matches
  • blendthumb.dll - 36 matches

Depots that matched:


Most common base names:

  • blenderplayer.exe - 20 matches

Depots that matched:

@akien-mga
Copy link
Contributor Author

Thanks! I've had a quick look at some of the entries with BlendThumb*.dll and no blenderplayer.exe and they do look like BGE games.

I tried Inside The Gear which I seemed to own for some reason, here's the complete file listing:

$ find | sort
.
./2.69
./2.69/python
./2.69/python/lib
./2.69/python/lib/abc.py
./2.69/python/lib/aifc.py
./2.69/python/lib/antigravity.py
./2.69/python/lib/argparse.py
./2.69/python/lib/ast.py
./2.69/python/lib/asynchat.py
./2.69/python/lib/asyncore.py
./2.69/python/lib/base64.py
./2.69/python/lib/bdb.py
./2.69/python/lib/binhex.py
./2.69/python/lib/bisect.py
./2.69/python/lib/bz2.py
./2.69/python/lib/_bz2.pyd
./2.69/python/lib/calendar.py
./2.69/python/lib/cgi.py
./2.69/python/lib/cgitb.py
./2.69/python/lib/chunk.py
./2.69/python/lib/cmd.py
./2.69/python/lib/codecs.py
./2.69/python/lib/codeop.py
./2.69/python/lib/code.py
./2.69/python/lib/collections
./2.69/python/lib/collections/abc.py
./2.69/python/lib/collections/__init__.py
./2.69/python/lib/collections/__main__.py
./2.69/python/lib/collections/__pycache__
./2.69/python/lib/collections/__pycache__/abc.cpython-33.pyc
./2.69/python/lib/collections/__pycache__/__init__.cpython-33.pyc
./2.69/python/lib/colorsys.py
./2.69/python/lib/_compat_pickle.py
./2.69/python/lib/compileall.py
./2.69/python/lib/concurrent
./2.69/python/lib/concurrent/futures
./2.69/python/lib/concurrent/futures/_base.py
./2.69/python/lib/concurrent/futures/__init__.py
./2.69/python/lib/concurrent/futures/process.py
./2.69/python/lib/concurrent/futures/thread.py
./2.69/python/lib/concurrent/__init__.py
./2.69/python/lib/configparser.py
./2.69/python/lib/contextlib.py
./2.69/python/lib/copy.py
./2.69/python/lib/copyreg.py
./2.69/python/lib/cProfile.py
./2.69/python/lib/crypt.py
./2.69/python/lib/csv.py
./2.69/python/lib/ctypes
./2.69/python/lib/ctypes/_endian.py
./2.69/python/lib/ctypes/__init__.py
./2.69/python/lib/ctypes/macholib
./2.69/python/lib/ctypes/macholib/dyld.py
./2.69/python/lib/ctypes/macholib/dylib.py
./2.69/python/lib/ctypes/macholib/fetch_macholib
./2.69/python/lib/ctypes/macholib/fetch_macholib.bat
./2.69/python/lib/ctypes/macholib/framework.py
./2.69/python/lib/ctypes/macholib/__init__.py
./2.69/python/lib/ctypes/macholib/README.ctypes
./2.69/python/lib/ctypes/__pycache__
./2.69/python/lib/ctypes/__pycache__/_endian.cpython-33.pyc
./2.69/python/lib/ctypes/__pycache__/__init__.cpython-33.pyc
./2.69/python/lib/_ctypes.pyd
./2.69/python/lib/_ctypes_test.pyd
./2.69/python/lib/ctypes/util.py
./2.69/python/lib/ctypes/wintypes.py
./2.69/python/lib/curses
./2.69/python/lib/curses/ascii.py
./2.69/python/lib/curses/has_key.py
./2.69/python/lib/curses/__init__.py
./2.69/python/lib/curses/panel.py
./2.69/python/lib/curses/textpad.py
./2.69/python/lib/datetime.py
./2.69/python/lib/dbm
./2.69/python/lib/dbm/dumb.py
./2.69/python/lib/dbm/gnu.py
./2.69/python/lib/dbm/__init__.py
./2.69/python/lib/dbm/ndbm.py
./2.69/python/lib/decimal.py
./2.69/python/lib/_decimal.pyd
./2.69/python/lib/difflib.py
./2.69/python/lib/dis.py
./2.69/python/lib/doctest.py
./2.69/python/lib/dummy_threading.py
./2.69/python/lib/_dummy_thread.py
./2.69/python/lib/_elementtree.pyd
./2.69/python/lib/email
./2.69/python/lib/email/architecture.rst
./2.69/python/lib/email/base64mime.py
./2.69/python/lib/email/charset.py
./2.69/python/lib/email/_encoded_words.py
./2.69/python/lib/email/encoders.py
./2.69/python/lib/email/errors.py
./2.69/python/lib/email/feedparser.py
./2.69/python/lib/email/generator.py
./2.69/python/lib/email/header.py
./2.69/python/lib/email/headerregistry.py
./2.69/python/lib/email/_header_value_parser.py
./2.69/python/lib/email/__init__.py
./2.69/python/lib/email/iterators.py
./2.69/python/lib/email/message.py
./2.69/python/lib/email/mime
./2.69/python/lib/email/mime/application.py
./2.69/python/lib/email/mime/audio.py
./2.69/python/lib/email/mime/base.py
./2.69/python/lib/email/mime/image.py
./2.69/python/lib/email/mime/__init__.py
./2.69/python/lib/email/mime/message.py
./2.69/python/lib/email/mime/multipart.py
./2.69/python/lib/email/mime/nonmultipart.py
./2.69/python/lib/email/mime/text.py
./2.69/python/lib/email/_parseaddr.py
./2.69/python/lib/email/parser.py
./2.69/python/lib/email/_policybase.py
./2.69/python/lib/email/policy.py
./2.69/python/lib/email/quoprimime.py
./2.69/python/lib/email/utils.py
./2.69/python/lib/encodings
./2.69/python/lib/encodings/aliases.py
./2.69/python/lib/encodings/ascii.py
./2.69/python/lib/encodings/base64_codec.py
./2.69/python/lib/encodings/big5hkscs.py
./2.69/python/lib/encodings/big5.py
./2.69/python/lib/encodings/bz2_codec.py
./2.69/python/lib/encodings/charmap.py
./2.69/python/lib/encodings/cp037.py
./2.69/python/lib/encodings/cp1006.py
./2.69/python/lib/encodings/cp1026.py
./2.69/python/lib/encodings/cp1140.py
./2.69/python/lib/encodings/cp1250.py
./2.69/python/lib/encodings/cp1251.py
./2.69/python/lib/encodings/cp1252.py
./2.69/python/lib/encodings/cp1253.py
./2.69/python/lib/encodings/cp1254.py
./2.69/python/lib/encodings/cp1255.py
./2.69/python/lib/encodings/cp1256.py
./2.69/python/lib/encodings/cp1257.py
./2.69/python/lib/encodings/cp1258.py
./2.69/python/lib/encodings/cp424.py
./2.69/python/lib/encodings/cp437.py
./2.69/python/lib/encodings/cp500.py
./2.69/python/lib/encodings/cp65001.py
./2.69/python/lib/encodings/cp720.py
./2.69/python/lib/encodings/cp737.py
./2.69/python/lib/encodings/cp775.py
./2.69/python/lib/encodings/cp850.py
./2.69/python/lib/encodings/cp852.py
./2.69/python/lib/encodings/cp855.py
./2.69/python/lib/encodings/cp856.py
./2.69/python/lib/encodings/cp857.py
./2.69/python/lib/encodings/cp858.py
./2.69/python/lib/encodings/cp860.py
./2.69/python/lib/encodings/cp861.py
./2.69/python/lib/encodings/cp862.py
./2.69/python/lib/encodings/cp863.py
./2.69/python/lib/encodings/cp864.py
./2.69/python/lib/encodings/cp865.py
./2.69/python/lib/encodings/cp866.py
./2.69/python/lib/encodings/cp869.py
./2.69/python/lib/encodings/cp874.py
./2.69/python/lib/encodings/cp875.py
./2.69/python/lib/encodings/cp932.py
./2.69/python/lib/encodings/cp949.py
./2.69/python/lib/encodings/cp950.py
./2.69/python/lib/encodings/euc_jis_2004.py
./2.69/python/lib/encodings/euc_jisx0213.py
./2.69/python/lib/encodings/euc_jp.py
./2.69/python/lib/encodings/euc_kr.py
./2.69/python/lib/encodings/gb18030.py
./2.69/python/lib/encodings/gb2312.py
./2.69/python/lib/encodings/gbk.py
./2.69/python/lib/encodings/hex_codec.py
./2.69/python/lib/encodings/hp_roman8.py
./2.69/python/lib/encodings/hz.py
./2.69/python/lib/encodings/idna.py
./2.69/python/lib/encodings/__init__.py
./2.69/python/lib/encodings/iso2022_jp_1.py
./2.69/python/lib/encodings/iso2022_jp_2004.py
./2.69/python/lib/encodings/iso2022_jp_2.py
./2.69/python/lib/encodings/iso2022_jp_3.py
./2.69/python/lib/encodings/iso2022_jp_ext.py
./2.69/python/lib/encodings/iso2022_jp.py
./2.69/python/lib/encodings/iso2022_kr.py
./2.69/python/lib/encodings/iso8859_10.py
./2.69/python/lib/encodings/iso8859_11.py
./2.69/python/lib/encodings/iso8859_13.py
./2.69/python/lib/encodings/iso8859_14.py
./2.69/python/lib/encodings/iso8859_15.py
./2.69/python/lib/encodings/iso8859_16.py
./2.69/python/lib/encodings/iso8859_1.py
./2.69/python/lib/encodings/iso8859_2.py
./2.69/python/lib/encodings/iso8859_3.py
./2.69/python/lib/encodings/iso8859_4.py
./2.69/python/lib/encodings/iso8859_5.py
./2.69/python/lib/encodings/iso8859_6.py
./2.69/python/lib/encodings/iso8859_7.py
./2.69/python/lib/encodings/iso8859_8.py
./2.69/python/lib/encodings/iso8859_9.py
./2.69/python/lib/encodings/johab.py
./2.69/python/lib/encodings/koi8_r.py
./2.69/python/lib/encodings/koi8_u.py
./2.69/python/lib/encodings/latin_1.py
./2.69/python/lib/encodings/mac_arabic.py
./2.69/python/lib/encodings/mac_centeuro.py
./2.69/python/lib/encodings/mac_croatian.py
./2.69/python/lib/encodings/mac_cyrillic.py
./2.69/python/lib/encodings/mac_farsi.py
./2.69/python/lib/encodings/mac_greek.py
./2.69/python/lib/encodings/mac_iceland.py
./2.69/python/lib/encodings/mac_latin2.py
./2.69/python/lib/encodings/mac_romanian.py
./2.69/python/lib/encodings/mac_roman.py
./2.69/python/lib/encodings/mac_turkish.py
./2.69/python/lib/encodings/mbcs.py
./2.69/python/lib/encodings/palmos.py
./2.69/python/lib/encodings/ptcp154.py
./2.69/python/lib/encodings/punycode.py
./2.69/python/lib/encodings/__pycache__
./2.69/python/lib/encodings/__pycache__/aliases.cpython-33.pyc
./2.69/python/lib/encodings/__pycache__/cp1251.cpython-33.pyc
./2.69/python/lib/encodings/__pycache__/cp1252.cpython-33.pyc
./2.69/python/lib/encodings/__pycache__/cp437.cpython-33.pyc
./2.69/python/lib/encodings/__pycache__/cp866.cpython-33.pyc
./2.69/python/lib/encodings/__pycache__/__init__.cpython-33.pyc
./2.69/python/lib/encodings/__pycache__/latin_1.cpython-33.pyc
./2.69/python/lib/encodings/__pycache__/mbcs.cpython-33.pyc
./2.69/python/lib/encodings/__pycache__/utf_8.cpython-33.pyc
./2.69/python/lib/encodings/quopri_codec.py
./2.69/python/lib/encodings/raw_unicode_escape.py
./2.69/python/lib/encodings/rot_13.py
./2.69/python/lib/encodings/shift_jis_2004.py
./2.69/python/lib/encodings/shift_jis.py
./2.69/python/lib/encodings/shift_jisx0213.py
./2.69/python/lib/encodings/tis_620.py
./2.69/python/lib/encodings/undefined.py
./2.69/python/lib/encodings/unicode_escape.py
./2.69/python/lib/encodings/unicode_internal.py
./2.69/python/lib/encodings/utf_16_be.py
./2.69/python/lib/encodings/utf_16_le.py
./2.69/python/lib/encodings/utf_16.py
./2.69/python/lib/encodings/utf_32_be.py
./2.69/python/lib/encodings/utf_32_le.py
./2.69/python/lib/encodings/utf_32.py
./2.69/python/lib/encodings/utf_7.py
./2.69/python/lib/encodings/utf_8.py
./2.69/python/lib/encodings/utf_8_sig.py
./2.69/python/lib/encodings/uu_codec.py
./2.69/python/lib/encodings/zlib_codec.py
./2.69/python/lib/filecmp.py
./2.69/python/lib/fileinput.py
./2.69/python/lib/fnmatch.py
./2.69/python/lib/formatter.py
./2.69/python/lib/fractions.py
./2.69/python/lib/ftplib.py
./2.69/python/lib/functools.py
./2.69/python/lib/__future__.py
./2.69/python/lib/genericpath.py
./2.69/python/lib/getopt.py
./2.69/python/lib/getpass.py
./2.69/python/lib/gettext.py
./2.69/python/lib/glob.py
./2.69/python/lib/gzip.py
./2.69/python/lib/hashlib.py
./2.69/python/lib/_hashlib.pyd
./2.69/python/lib/heapq.py
./2.69/python/lib/hmac.py
./2.69/python/lib/html
./2.69/python/lib/html/entities.py
./2.69/python/lib/html/__init__.py
./2.69/python/lib/html/parser.py
./2.69/python/lib/http
./2.69/python/lib/http/client.py
./2.69/python/lib/http/cookiejar.py
./2.69/python/lib/http/cookies.py
./2.69/python/lib/http/__init__.py
./2.69/python/lib/http/server.py
./2.69/python/lib/imaplib.py
./2.69/python/lib/imghdr.py
./2.69/python/lib/importlib
./2.69/python/lib/importlib/abc.py
./2.69/python/lib/importlib/_bootstrap.py
./2.69/python/lib/importlib/__init__.py
./2.69/python/lib/importlib/machinery.py
./2.69/python/lib/importlib/__pycache__
./2.69/python/lib/importlib/__pycache__/__init__.cpython-33.pyc
./2.69/python/lib/importlib/__pycache__/machinery.cpython-33.pyc
./2.69/python/lib/importlib/util.py
./2.69/python/lib/imp.py
./2.69/python/lib/inspect.py
./2.69/python/lib/io.py
./2.69/python/lib/ipaddress.py
./2.69/python/lib/json
./2.69/python/lib/json/decoder.py
./2.69/python/lib/json/encoder.py
./2.69/python/lib/json/__init__.py
./2.69/python/lib/json/scanner.py
./2.69/python/lib/json/tool.py
./2.69/python/lib/keyword.py
./2.69/python/lib/linecache.py
./2.69/python/lib/locale.py
./2.69/python/lib/logging
./2.69/python/lib/logging/config.py
./2.69/python/lib/logging/handlers.py
./2.69/python/lib/logging/__init__.py
./2.69/python/lib/lzma.py
./2.69/python/lib/macpath.py
./2.69/python/lib/macurl2path.py
./2.69/python/lib/mailbox.py
./2.69/python/lib/mailcap.py
./2.69/python/lib/_markupbase.py
./2.69/python/lib/mimetypes.py
./2.69/python/lib/modulefinder.py
./2.69/python/lib/msilib
./2.69/python/lib/msilib/__init__.py
./2.69/python/lib/msilib/schema.py
./2.69/python/lib/msilib/sequence.py
./2.69/python/lib/msilib/text.py
./2.69/python/lib/_msi.pyd
./2.69/python/lib/multiprocessing
./2.69/python/lib/multiprocessing/connection.py
./2.69/python/lib/multiprocessing/dummy
./2.69/python/lib/multiprocessing/dummy/connection.py
./2.69/python/lib/multiprocessing/dummy/__init__.py
./2.69/python/lib/multiprocessing/forking.py
./2.69/python/lib/multiprocessing/heap.py
./2.69/python/lib/multiprocessing/__init__.py
./2.69/python/lib/multiprocessing/managers.py
./2.69/python/lib/multiprocessing/pool.py
./2.69/python/lib/multiprocessing/process.py
./2.69/python/lib/_multiprocessing.pyd
./2.69/python/lib/multiprocessing/queues.py
./2.69/python/lib/multiprocessing/reduction.py
./2.69/python/lib/multiprocessing/sharedctypes.py
./2.69/python/lib/multiprocessing/synchronize.py
./2.69/python/lib/multiprocessing/util.py
./2.69/python/lib/netrc.py
./2.69/python/lib/nntplib.py
./2.69/python/lib/ntpath.py
./2.69/python/lib/nturl2path.py
./2.69/python/lib/numbers.py
./2.69/python/lib/opcode.py
./2.69/python/lib/optparse.py
./2.69/python/lib/os2emxpath.py
./2.69/python/lib/os.py
./2.69/python/lib/_osx_support.py
./2.69/python/lib/pdb.py
./2.69/python/lib/__phello__.foo.py
./2.69/python/lib/pickle.py
./2.69/python/lib/pickletools.py
./2.69/python/lib/pipes.py
./2.69/python/lib/pkgutil.py
./2.69/python/lib/plat-aix4
./2.69/python/lib/plat-aix4/IN.py
./2.69/python/lib/plat-aix4/regen
./2.69/python/lib/plat-darwin
./2.69/python/lib/plat-darwin/IN.py
./2.69/python/lib/plat-darwin/regen
./2.69/python/lib/platform.py
./2.69/python/lib/plat-freebsd4
./2.69/python/lib/plat-freebsd4/IN.py
./2.69/python/lib/plat-freebsd4/regen
./2.69/python/lib/plat-freebsd5
./2.69/python/lib/plat-freebsd5/IN.py
./2.69/python/lib/plat-freebsd5/regen
./2.69/python/lib/plat-freebsd6
./2.69/python/lib/plat-freebsd6/IN.py
./2.69/python/lib/plat-freebsd6/regen
./2.69/python/lib/plat-freebsd7
./2.69/python/lib/plat-freebsd7/IN.py
./2.69/python/lib/plat-freebsd7/regen
./2.69/python/lib/plat-freebsd8
./2.69/python/lib/plat-freebsd8/IN.py
./2.69/python/lib/plat-freebsd8/regen
./2.69/python/lib/plat-generic
./2.69/python/lib/plat-generic/regen
./2.69/python/lib/plat-linux
./2.69/python/lib/plat-linux/CDROM.py
./2.69/python/lib/plat-linux/DLFCN.py
./2.69/python/lib/plat-linux/IN.py
./2.69/python/lib/plat-linux/regen
./2.69/python/lib/plat-linux/TYPES.py
./2.69/python/lib/plat-netbsd1
./2.69/python/lib/plat-netbsd1/IN.py
./2.69/python/lib/plat-netbsd1/regen
./2.69/python/lib/plat-next3
./2.69/python/lib/plat-next3/regen
./2.69/python/lib/plat-os2emx
./2.69/python/lib/plat-os2emx/_emx_link.py
./2.69/python/lib/plat-os2emx/grp.py
./2.69/python/lib/plat-os2emx/IN.py
./2.69/python/lib/plat-os2emx/pwd.py
./2.69/python/lib/plat-os2emx/regen
./2.69/python/lib/plat-os2emx/SOCKET.py
./2.69/python/lib/plat-sunos5
./2.69/python/lib/plat-sunos5/CDIO.py
./2.69/python/lib/plat-sunos5/DLFCN.py
./2.69/python/lib/plat-sunos5/IN.py
./2.69/python/lib/plat-sunos5/regen
./2.69/python/lib/plat-sunos5/STROPTS.py
./2.69/python/lib/plat-sunos5/TYPES.py
./2.69/python/lib/plat-unixware7
./2.69/python/lib/plat-unixware7/IN.py
./2.69/python/lib/plat-unixware7/regen
./2.69/python/lib/plat-unixware7/STROPTS.py
./2.69/python/lib/plistlib.py
./2.69/python/lib/poplib.py
./2.69/python/lib/posixpath.py
./2.69/python/lib/pprint.py
./2.69/python/lib/profile.py
./2.69/python/lib/pstats.py
./2.69/python/lib/pty.py
./2.69/python/lib/__pycache__
./2.69/python/lib/__pycache__/abc.cpython-33.pyc
./2.69/python/lib/__pycache__/bisect.cpython-33.pyc
./2.69/python/lib/__pycache__/codecs.cpython-33.pyc
./2.69/python/lib/__pycache__/copyreg.cpython-33.pyc
./2.69/python/lib/__pycache__/functools.cpython-33.pyc
./2.69/python/lib/__pycache__/genericpath.cpython-33.pyc
./2.69/python/lib/__pycache__/hashlib.cpython-33.pyc
./2.69/python/lib/__pycache__/heapq.cpython-33.pyc
./2.69/python/lib/__pycache__/imp.cpython-33.pyc
./2.69/python/lib/__pycache__/io.cpython-33.pyc
./2.69/python/lib/__pycache__/keyword.cpython-33.pyc
./2.69/python/lib/__pycache__/linecache.cpython-33.pyc
./2.69/python/lib/__pycache__/locale.cpython-33.pyc
./2.69/python/lib/__pycache__/ntpath.cpython-33.pyc
./2.69/python/lib/__pycache__/os.cpython-33.pyc
./2.69/python/lib/__pycache__/random.cpython-33.pyc
./2.69/python/lib/__pycache__/re.cpython-33.pyc
./2.69/python/lib/__pycache__/reprlib.cpython-33.pyc
./2.69/python/lib/__pycache__/sre_compile.cpython-33.pyc
./2.69/python/lib/__pycache__/sre_constants.cpython-33.pyc
./2.69/python/lib/__pycache__/sre_parse.cpython-33.pyc
./2.69/python/lib/__pycache__/stat.cpython-33.pyc
./2.69/python/lib/__pycache__/struct.cpython-33.pyc
./2.69/python/lib/__pycache__/token.cpython-33.pyc
./2.69/python/lib/__pycache__/tokenize.cpython-33.pyc
./2.69/python/lib/__pycache__/types.cpython-33.pyc
./2.69/python/lib/__pycache__/warnings.cpython-33.pyc
./2.69/python/lib/__pycache__/weakref.cpython-33.pyc
./2.69/python/lib/__pycache__/_weakrefset.cpython-33.pyc
./2.69/python/lib/pyclbr.py
./2.69/python/lib/py_compile.py
./2.69/python/lib/pydoc_data
./2.69/python/lib/pydoc_data/__init__.py
./2.69/python/lib/pydoc_data/_pydoc.css
./2.69/python/lib/pydoc_data/topics.py
./2.69/python/lib/pydoc.py
./2.69/python/lib/pyexpat.pyd
./2.69/python/lib/_pyio.py
./2.69/python/lib/queue.py
./2.69/python/lib/quopri.py
./2.69/python/lib/random.py
./2.69/python/lib/reprlib.py
./2.69/python/lib/re.py
./2.69/python/lib/rlcompleter.py
./2.69/python/lib/runpy.py
./2.69/python/lib/sched.py
./2.69/python/lib/select.pyd
./2.69/python/lib/shelve.py
./2.69/python/lib/shlex.py
./2.69/python/lib/shutil.py
./2.69/python/lib/site-packages
./2.69/python/lib/site-packages/README
./2.69/python/lib/site.py
./2.69/python/lib/smtpd.py
./2.69/python/lib/smtplib.py
./2.69/python/lib/sndhdr.py
./2.69/python/lib/socket.py
./2.69/python/lib/_socket.pyd
./2.69/python/lib/socketserver.py
./2.69/python/lib/sqlite3
./2.69/python/lib/sqlite3/dbapi2.py
./2.69/python/lib/sqlite3.dll
./2.69/python/lib/sqlite3/dump.py
./2.69/python/lib/sqlite3/__init__.py
./2.69/python/lib/_sqlite3.pyd
./2.69/python/lib/sre_compile.py
./2.69/python/lib/sre_constants.py
./2.69/python/lib/sre_parse.py
./2.69/python/lib/ssl.py
./2.69/python/lib/_ssl.pyd
./2.69/python/lib/stat.py
./2.69/python/lib/stringprep.py
./2.69/python/lib/string.py
./2.69/python/lib/_strptime.py
./2.69/python/lib/struct.py
./2.69/python/lib/subprocess.py
./2.69/python/lib/sunau.py
./2.69/python/lib/symbol.py
./2.69/python/lib/symtable.py
./2.69/python/lib/sysconfig.py
./2.69/python/lib/tabnanny.py
./2.69/python/lib/tarfile.py
./2.69/python/lib/telnetlib.py
./2.69/python/lib/tempfile.py
./2.69/python/lib/_testbuffer.pyd
./2.69/python/lib/_testcapi.pyd
./2.69/python/lib/textwrap.py
./2.69/python/lib/this.py
./2.69/python/lib/_threading_local.py
./2.69/python/lib/threading.py
./2.69/python/lib/timeit.py
./2.69/python/lib/tokenize.py
./2.69/python/lib/token.py
./2.69/python/lib/traceback.py
./2.69/python/lib/trace.py
./2.69/python/lib/tty.py
./2.69/python/lib/types.py
./2.69/python/lib/unicodedata.pyd
./2.69/python/lib/unittest
./2.69/python/lib/unittest/case.py
./2.69/python/lib/unittest/__init__.py
./2.69/python/lib/unittest/loader.py
./2.69/python/lib/unittest/__main__.py
./2.69/python/lib/unittest/main.py
./2.69/python/lib/unittest/mock.py
./2.69/python/lib/unittest/result.py
./2.69/python/lib/unittest/runner.py
./2.69/python/lib/unittest/signals.py
./2.69/python/lib/unittest/suite.py
./2.69/python/lib/unittest/util.py
./2.69/python/lib/urllib
./2.69/python/lib/urllib/error.py
./2.69/python/lib/urllib/__init__.py
./2.69/python/lib/urllib/parse.py
./2.69/python/lib/urllib/request.py
./2.69/python/lib/urllib/response.py
./2.69/python/lib/urllib/robotparser.py
./2.69/python/lib/uuid.py
./2.69/python/lib/uu.py
./2.69/python/lib/venv
./2.69/python/lib/venv/__init__.py
./2.69/python/lib/venv/__main__.py
./2.69/python/lib/venv/scripts
./2.69/python/lib/venv/scripts/nt
./2.69/python/lib/venv/scripts/nt/activate.bat
./2.69/python/lib/venv/scripts/nt/Activate.ps1
./2.69/python/lib/venv/scripts/nt/deactivate.bat
./2.69/python/lib/venv/scripts/nt/Deactivate.ps1
./2.69/python/lib/venv/scripts/nt/pydoc.py
./2.69/python/lib/venv/scripts/posix
./2.69/python/lib/venv/scripts/posix/activate
./2.69/python/lib/venv/scripts/posix/pydoc
./2.69/python/lib/warnings.py
./2.69/python/lib/wave.py
./2.69/python/lib/weakref.py
./2.69/python/lib/_weakrefset.py
./2.69/python/lib/webbrowser.py
./2.69/python/lib/winsound.pyd
./2.69/python/lib/wsgiref
./2.69/python/lib/wsgiref/handlers.py
./2.69/python/lib/wsgiref/headers.py
./2.69/python/lib/wsgiref/__init__.py
./2.69/python/lib/wsgiref/simple_server.py
./2.69/python/lib/wsgiref/util.py
./2.69/python/lib/wsgiref/validate.py
./2.69/python/lib/xdrlib.py
./2.69/python/lib/xml
./2.69/python/lib/xml/dom
./2.69/python/lib/xml/dom/domreg.py
./2.69/python/lib/xml/dom/expatbuilder.py
./2.69/python/lib/xml/dom/__init__.py
./2.69/python/lib/xml/dom/minicompat.py
./2.69/python/lib/xml/dom/minidom.py
./2.69/python/lib/xml/dom/NodeFilter.py
./2.69/python/lib/xml/dom/pulldom.py
./2.69/python/lib/xml/dom/xmlbuilder.py
./2.69/python/lib/xml/etree
./2.69/python/lib/xml/etree/cElementTree.py
./2.69/python/lib/xml/etree/ElementInclude.py
./2.69/python/lib/xml/etree/ElementPath.py
./2.69/python/lib/xml/etree/ElementTree.py
./2.69/python/lib/xml/etree/__init__.py
./2.69/python/lib/xml/__init__.py
./2.69/python/lib/xml/parsers
./2.69/python/lib/xml/parsers/expat.py
./2.69/python/lib/xml/parsers/__init__.py
./2.69/python/lib/xmlrpc
./2.69/python/lib/xmlrpc/client.py
./2.69/python/lib/xmlrpc/__init__.py
./2.69/python/lib/xmlrpc/server.py
./2.69/python/lib/xml/sax
./2.69/python/lib/xml/sax/_exceptions.py
./2.69/python/lib/xml/sax/expatreader.py
./2.69/python/lib/xml/sax/handler.py
./2.69/python/lib/xml/sax/__init__.py
./2.69/python/lib/xml/sax/saxutils.py
./2.69/python/lib/xml/sax/xmlreader.py
./2.69/python/lib/xxlimited.pyd
./2.69/python/lib/zipfile.py
./avcodec-53.dll
./avdevice-53.dll
./avformat-53.dll
./avutil-51.dll
./BlendThumb64.dll
./BlendThumb.dll
./Blocks
./Blocks/Textures
./Blocks/Textures/Gears
./Blocks/Textures/Gears/Circle_Color.jpg
./Blocks/Textures/Gears/Circle_Normal.jpg
./Blocks/Textures/Gears/Cube_Color.jpg
./Blocks/Textures/Gears/Cube_Normal.jpg
./Blocks/Textures/Gears/Gear1_Color.jpg
./Blocks/Textures/Gears/Gear1_Normal.jpg
./Blocks/Textures/Gears/Gear2_Color.jpg
./Blocks/Textures/Gears/Gear2_Normal.jpg
./Blocks/Textures/Gears/Gear3_Color.jpg
./Blocks/Textures/Gears/Gear3_Normal.jpg
./Blocks/Textures/Gears/Gear4_Color.jpg
./Blocks/Textures/Gears/Gear4_Normal.jpg
./Blocks/Textures/Gears/Gear5_Color.jpg
./Blocks/Textures/Gears/Gear5_Normal.jpg
./Blocks/Textures/Gears/Gear_New1_Color.jpg
./Blocks/Textures/Gears/Gear_New1_Normal.jpg
./Blocks/Textures/Gears/Gear_New2_Color.jpg
./Blocks/Textures/Gears/Gear_New2_Normal.jpg
./Blocks/Textures/Gears/Gear_New3_Color.jpg
./Blocks/Textures/Gears/Gear_New3_Normal.jpg
./Blocks/Textures/Gears/goldleaf.jpg
./Blocks/Textures/Gears/HelpMenu.jpg
./Blocks/Textures/Gears/LongPlank_Color.jpg
./Blocks/Textures/Gears/LongPlank_Normal.jpg
./Blocks/Textures/Gears/metal_copper_beaten.png
./Blocks/Textures/Gears/Monolit_Color.jpg
./Blocks/Textures/Gears/Monolit_Normal.jpg
./Blocks/Textures/Gears/Platform10_Color.jpg
./Blocks/Textures/Gears/Platform10_Normal.jpg
./Blocks/Textures/Gears/Platform11_Color.jpg
./Blocks/Textures/Gears/Platform11_Normal.jpg
./Blocks/Textures/Gears/Platform12_Color.jpg
./Blocks/Textures/Gears/Platform12_Normal.jpg
./Blocks/Textures/Gears/Platform13_Color.jpg
./Blocks/Textures/Gears/Platform13_Normal.jpg
./Blocks/Textures/Gears/Platform14_Color.jpg
./Blocks/Textures/Gears/Platform14_Normal.jpg
./Blocks/Textures/Gears/Platform16_Color.jpg
./Blocks/Textures/Gears/Platform16_Normal.jpg
./Blocks/Textures/Gears/Platform2_Color.jpg
./Blocks/Textures/Gears/Platform2_Normal.jpg
./Blocks/Textures/Gears/Platform3_Color.jpg
./Blocks/Textures/Gears/Platform3_Normal.jpg
./Blocks/Textures/Gears/Platform4_Color.jpg
./Blocks/Textures/Gears/Platform4_Normal.jpg
./Blocks/Textures/Gears/Platform5_Color.jpg
./Blocks/Textures/Gears/Platform5_Normal.jpg
./Blocks/Textures/Gears/Platform6_Color.jpg
./Blocks/Textures/Gears/Platform6_Normal.jpg
./Blocks/Textures/Gears/Platform7_Color.jpg
./Blocks/Textures/Gears/Platform7_Normal.jpg
./Blocks/Textures/Gears/Platform8_Color.jpg
./Blocks/Textures/Gears/Platform8_Normal.jpg
./Blocks/Textures/Gears/Platform9_Color.jpg
./Blocks/Textures/Gears/Platform9_Normal.jpg
./Blocks/Textures/Gears/Platform_Color.jpg
./Blocks/Textures/Gears/Platform_Color_Small.jpg
./Blocks/Textures/Gears/Platform_Normal.jpg
./Blocks/Textures/Gears/Platform_Stencil.png
./Blocks/Textures/Gears/Post_Color.jpg
./Blocks/Textures/Gears/Post_Normal.jpg
./Blocks/Textures/Gears/Shaft1_Color.jpg
./Blocks/Textures/Gears/Shaft1_Normal.jpg
./Blocks/Textures/Gears/Shaft2_Color.jpg
./Blocks/Textures/Gears/Shaft2_Normal.jpg
./Blocks/Textures/Gears/silver_worn.png
./GameLevels.lvs
./iconv.dll
./InsideTheGear1.01.exe
./libsndfile-1.dll
./msvcm90.dll
./msvcp90.dll
./msvcr90.dll
./OpenAL32.dll
./OpenColorIO.dll
./pthreadVC2.dll
./__pycache__
./__pycache__/steamworks.cpython-33.pyc
./python33.dll
./SDL.dll
./sl.sav
./Sounds
./Sounds/CollisionDynamic.wav
./Sounds/CollisionSound.wav
./Sounds/Enter_Backspace.wav
./Sounds/Env1.mp3
./Sounds/Env2.mp3
./Sounds/Env3.mp3
./Sounds/MenuSelect.wav
./Sounds/MoveStatic.WAV
./Sounds/PressPlatform.wav
./Sounds/RollSound.wav
./Sounds/SawSound.wav
./Sounds/SelectSound.wav
./steam_api64.dll
./steam_api.dll
./steam_appid.txt
./steamworks.py
./SteamworksPy64.dll
./SteamworksPy.dll
./swscale-2.dll
./vcomp90.dll
./wrap_oal.dll

There's not much that immediately identifies Blender Game Engine but there are good hints:

  • 2.[0-9][0-9]/ folder with a minimal Python install (nothing Blender specific per se, but it's a common characteristic for BGE projects)
  • DLLs for SDL or SDL2, BlendThumb, python, ffmpeg, OpenAL. Those are also found in Blender itself (which makes sense, since BGE was practically just bundling a stripped down Blender to run a .blend scene)

No blenderplayer.exe, most likely the name doesn't need to be kept and users could rename it to their game name. Several depots have <game>_launcher.exe but I don't know if it's a reliable pattern suggested by BGE or just a coincidence.

All in all, there's not much to go on with BGE to be 100% sure, but indeed BlendThumb.dll and BlendThumb64.dll should be good hints as those are libraries used to make thumbnails for .blend files on Windows. They could be present in other games where Blender was used for asset creation only, but I would assume that in such projects the BlendThumb64.dll would be in the Blender installation folder in their C:\Program Files\ and not in the game export folder.

@akien-mga
Copy link
Contributor Author

I didn't review the full list but in terms of false positives with the current heuristics, I think it's mostly just:

  • Blender itself - fair enough I think.
  • Motion Studio - which bundles Blender as an exporter, but is not made itself with BGE or UPBGE (AFAICT).

So the current state is satisfactory I think.

Also to clarify, note that this PR doesn't change the heuristics, it just renames/moves things.

@xPaw xPaw merged commit 1663828 into SteamDatabase:main Sep 13, 2021
@xPaw
Copy link
Member

xPaw commented Sep 13, 2021

I merged the rename, you can make an issue if you think the detection can be improved.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants