This tutorial was made for dummies. Don’t worry if you’ve never done this before, we’ll walk you through step by step.
This guide explains how to port GameMaker Studio (GMS) games to ARM-based Linux handheld devices using GMLoader and GMLoader-Next.
It includes example templates, packaging instructions, and troubleshooting advice.
GameMaker Studio is a 2D game development engine. It supports drag-and-drop tools for beginners and scripting for advanced users.
Games can be exported to many platforms (Windows, Linux, macOS, Android, iOS, consoles, etc.), but ARM Linux handhelds are not supported natively.
That’s where GMLoader comes in.
GMLoader (and its successor GMLoader-Next) act as compatibility layers for GameMaker’s Android runner (libyoyo.so).
They create a lightweight Android-like environment, allowing ARM-based Linux devices to run GMS games.
For more background, see GMLoader Research Docs.
| Platform | Bytecode | YYC (YoYo Compiler) |
|---|---|---|
| Android | ✅ | ✅ |
| Windows | ✅ | ❌ |
| Linux | ✅ | ❌ |
| macOS | ✅ | ❌ |
- gmloader – GMS ≤ 2022.x, ARMv7/armhf
- gmloader-next.armhf – All GMS versions, ARMv7/armhf
- gmloader-next.aarch64 – GMS ≥ 2.2.1, ARMv8/aarch64
💡 YYC Games (compiled with YoYo Compiler) run faster, but are less portable. UndertaleModTool will warn you if a game uses YYC.
Find a GMS game:
Start with free games before attempting commercial ones.
- Download UndertaleModTool.
- Extract game files (APK or install folder). Look for:
data.wingame.unxgame.iosgame.droid
- Open them in UndertaleModTool.
Inside UndertaleModTool:
- Look for a YYC warning (means game is compiled with yyc).
- Check Data → General Info for the GMS version.
Download the right wrapper APK:
👉 Wrappers repo
- gmloader-next.aarch64 → GMS 2.2.1+ (ARMv8)
- gmloader-next.armhf → GMS 2.2.1- (ARMv7)
Modify the template package for your chosen game. (only gmloader-next.aarch64 for now)
Add:
- Game assets inside
/assets - Your wrapper renamed to
game.port
Extra, costume port name and folder:
Change portname in line 20 of Portname.sh to your folder name. Example: GAMEDIR="/$directory/ports/applerabbledazzle"
Change Portname in Portname.sh to actual port name. Example: Apple Rabble Dazzle.sh
A port folder usually looks like this:
Portname.sh
portname/
├── lib/ (we don't really touch this folder, unless we know what we are doing)
│ ├── armv8a/
│ ├── armv7a/
│ ├── libopenal.so.1
│ ├── libzip.so.5
│ └── libcrypto.so.1
├── assets/
│ └── (game files here)
├── gmloader.json
├── tools/
│ └── patchscript
├── portname.gptk
└── game.port
Youv'e reached your limit on chetGepT 4.12312, please try again later.
Acknowledgments: Fraxinus88 for his original guide. JanTrueno for writing awsome stuff I stole here. JohnnyonFlame for creating gmloader, the tool that makes these ports possible.