GameMaker exports to HTML5 and GX.games (OperaGX) targets, both of which produce browser-ready builds that work on Wavedash. The export includes index.html, runner.js, runner.wasm, and your game data.
Export your game
Use one of these export targets in GameMaker:
- GX.games / OperaGX — produces a flat zip with
runner.wasm,game.unx, and supporting files. This is the recommended target for Wavedash. - HTML5 — produces a similar folder with an HTML shell and WebGL runner.
Export to a dedicated folder (e.g. build/web) and point upload_dir at it.
SDK integration
Wavedash injects WavedashJS into the page before your game runs. To call it from GML, create a JavaScript extension:
- Create an extension in your project (e.g.
WavedashBridge) - Add a
.jsfile to the extension with wrapper functions:
function wavedash_get_username() {
var user = WavedashJS.getUser();
return user ? user.username : "";
}
function wavedash_submit_score(leaderboard_id, score) {
WavedashJS.uploadLeaderboardScore(leaderboard_id, score, true);
}
function wavedash_set_achievement(achievement_id) {
WavedashJS.setAchievement(achievement_id);
WavedashJS.storeStats();
}
function wavedash_load_complete() {
WavedashJS.loadComplete();
}
- Register each function in the extension editor so GML can call them:
var _username = wavedash_get_username();
show_debug_message("Playing as: " + _username);
wavedash_submit_score("high-scores", global.score);
Load progress
Report loading progress so the Wavedash shell can display its loader:
function wavedash_update_progress(value) {
WavedashJS.updateLoadProgressZeroToOne(value);
}
Call wavedash_load_complete() from GML once the player can interact.
wavedash.toml
Point entrypoint at the exported index.html inside upload_dir. Wavedash loads that page first, and it boots GameMaker's runner.js, runner.wasm, and game data from there.
game_id = "YOUR_GAME_ID_HERE"
upload_dir = "./build/web"
entrypoint = "index.html"
Do not set upload_dir to your project root — that would upload your entire source tree. Always point it at the exported build folder.
Known issues
show_message and alerts. Wavedash hosts games in a sandboxed iframe without allow-modals. GameMaker's show_message compiles to alert(), which will silently fail. Remove all show_message calls or replace them with in-game UI before publishing.
Save data with script references. GameMaker's json_encode can serialize script references as @ref script(...) strings. These do not round-trip on web — json_decode returns undefined for them. Save state by name (string) instead of by script reference.
Ad and mobile extensions. If your project includes Google Mobile Ads, IAP, or other mobile-only extensions, make sure they exit early or are stripped for web builds. Leftover ad snippets in index.html can cause console errors.