Your First GameMaker Steam Demo Export Sanity Check in One Evening - 2026 Beginner Pipeline
You pressed Create Executable in GameMaker. The folder opened. You zipped it for Steam. Thursday’s fest promotion goes live—and players report a black window, missing fonts, or a crash before the main menu. The IDE run was perfect. The exported folder was not.
May–October 2026 is when HTML5-first and 2D-heavy teams—many on GameMaker 2024.x—add or refresh Steam (Windows) demos for Next Fest. This Tutorials & Beginner-First pipeline is not a full Steamworks depot tutorial (see playtest branch evening); it is the GameMaker-specific export sanity check you run once per build_id before upload: five gates, local boot proof, and gamemaker_steam_export_receipt_v1.json.
Pair with BUILD_RECEIPT, Wednesday demo smoke, and HTML5-first second storefront analysis when your roadmap spans itch and Steam.
Who this is for and what you get
| Audience | You will be able to… |
|---|---|
| First-time GameMaker Steam exporter | Produce a depot-ready folder with documented checks |
| Solo dev | Stop trusting IDE-only tests for fest uploads |
| Producer | Require export receipt before branch promotion |
Time: one evening (3–4 hours first export; 45–60 minutes on repeat).
Prerequisites: GameMaker license with Windows export module, Steamworks app with at least one depot planned, project opens and runs in IDE.
Why this matters now (May 2026)
- GameMaker 2024.x runtime churn — Export templates and default options shift; fest teams need a repeatable gate, not forum archaeology.
- HTML5 → Steam path — Industry pattern includes GameMaker beside Construct; Steam is often the second storefront, not the first toolchain muscle memory.
- Texture page silent failures — Wrong page size or missing Included Files surface only in standalone exe, not Run.
- Fest smoke culture — Wednesday demo smoke assumes a binary that boots; this pipeline is pre-smoke export proof.
- Refund and partner optics — Refund dashboards tag hour-one crashes; export sanity catches them on your desk.
Direct answer: Export Windows VM (or YYC if qualified) → run gates G1–G5 on the folder → write receipt → only then upload to SteamPipe.
What you will have after one evening
Export/SteamDemo/folder matching Steam depot layout expectationsexport_sanity_log.mdwith G1–G5 pass/failgamemaker_steam_export_receipt_v1.jsonwith runtime version and texture page hash- Screenshot of main menu from standalone exe (not IDE)
build_labelstring visible in-game matching receipt
Evening timeline
| Block | Minutes | Output |
|---|---|---|
| 1 — Options audit | 30 | options-notes.md (VM/YYC, graphics, scaling) |
| 2 — Texture pages + Included Files | 45 | G1 pass, page size table |
| 3 — Export + folder layout | 45 | Clean SteamDemo/ tree |
| 4 — Local boot + G2–G5 | 60 | Exe boot, 60s path, quit |
| 5 — Receipt + evidence | 30 | JSON + screenshot in release-evidence/ |
Mental model — IDE run vs standalone exe
| Surface | What it proves |
|---|---|
| Run (F5) | Game logic rough cut |
| Create Executable | What Steam players receive |
| Steam installed build | Depot + branch + Steam runtime |
Tonight stops at standalone exe on a machine without GameMaker installed (Gate G3). Steam upload is tomorrow if you are new to SteamPipe.
Step 1 — Options audit (G1)
Open Game Options → Windows (names may vary slightly by 2024.x UI). Record in options-notes.md:
| Setting | Fest demo recommendation | Why |
|---|---|---|
| VM vs YYC | VM unless you have YYC crash budget | Faster iteration; YYC needs extra QA |
| Graphics API | Default unless Deck-style issues | Document if you force DirectX |
| Scale / resize | Fixed or integer scale for pixel art | Fractional scale blurs HUD in standalone |
| Steam SDK | Enable only when integrating Steamworks features | Unused SDK can confuse first export |
| Display name | Matches store demo title | Players see mismatch in task manager |
G1 pass: Every row has a deliberate value; nothing left at "I did not check."
Outbound reference: GameMaker Windows export documentation (official manual; UI labels drift—verify against your installed version).
VM vs YYC decision (beginner)
| Choose VM when… | Consider YYC when… |
|---|---|
| First Steam demo | You already ship YYC on itch |
| Team has no native crash tooling | Profiler shows VM bottleneck in standalone |
| Fest deadline under 3 weeks | You can add +2 QA days |
Do not switch VM↔YYC the week of fest without re-running all gates.
Step 2 — Texture pages and Included Files (G1 continued)
Gate G1b — texture page sanity
- Open Texture Group / texture page settings.
- List each page: size, sprites assigned, default page overflow.
- Run game in IDE with texture page view enabled (if available in your version).
- Export and confirm no "page 0 overflow" warnings in compile log.
| Symptom in standalone | Likely cause |
|---|---|
| Black or pink sprites | Missing page assignment |
| HUD garbled | Wrong page on UI sprites |
| Crash on first room | Oversized page on low VRAM |
Log page dimensions in receipt texture_pages[].
Gate G1c — Included Files
Audio .ogg, JSON, locale files must appear under Included Files and load via file_exists / bundle APIs—not hardcoded C:\ paths.
// Anti-pattern — breaks standalone
// file_open("C:/Users/dev/project/data.json");
// Pattern — use Included Files + filename
var _map = file_text_read_string("data.json");
Cross-check save migration habits if you ship roguelite JSON saves—semver in filename helps support.
Step 3 — Export folder layout (G2)
Create Executable targeting empty folder Export/SteamDemo/.
Expected shape (names vary by project):
SteamDemo/
YourGame.exe
data.win (or platform data file)
options.ini
(steam_api64.dll only if Steam integrated)
G2 pass checklist:
- [ ] Double-click
YourGame.exeon dev PC without opening GameMaker - [ ] No missing DLL dialog
- [ ] Working directory is exe folder (saves write beside exe or
%LOCALAPPDATA%) - [ ] Version string on title or pause screen (
build_label)
Zip contents of SteamDemo/, not a parent folder named Export, when learning SteamPipe layout—depot roots are picky on first upload.
Common G2 failures
| Failure | Fix |
|---|---|
| "Failed to load texture" | Revisit G1 pages |
| Instant close | Run from cmd.exe to see stderr |
| Wrong resolution | Fix Windows graphics options + room viewport |
| Antivirus quarantine | Whitelist folder; document for team |
Step 4 — Local boot gates (G3–G5)
Align with Wednesday demo smoke vocabulary:
| Gate | Test | Pass |
|---|---|---|
| G3 | Cold double-click launch | Menu within 90s |
| G4 | Golden path start | First gameplay beat reachable |
| G5 | 60s golden path + quit | No soft-lock; clean exit |
Write a five-step golden path in demo-golden-path.md (same discipline as smoke article). Example:
- Press Enter at title
- Start demo run
- Complete tutorial prompt
- Perform one combat or puzzle action
- Quit to desktop
Second machine (recommended monthly): Copy folder to PC without GameMaker—catches "works on dev box" dependency leaks.
Audio and input quick checks
- [ ] First SFX plays (Included File path)
- [ ] Fullscreen toggle works
- [ ] Gamepad detected if you advertise controller support on store
- [ ] No debug overlay keys (console opinion)
gamemaker_steam_export_receipt_v1.json
{
"schema": "gamemaker_steam_export_receipt_v1",
"build_label": "gm-demo-2026-05-23-rc1",
"gamemaker_runtime": "2024.11.0.000",
"export_type": "VM",
"platform": "Windows x64",
"exported_at_utc": "2026-05-23T20:15:00Z",
"gates": {
"G1_options_texture": "pass",
"G2_folder_layout": "pass",
"G3_cold_launch": "pass",
"G4_golden_start": "pass",
"G5_golden_60s_quit": "pass"
},
"texture_pages": [
{ "page": 0, "size": "2048x2048", "overflow": false }
],
"steam_depot_planned": "win64_demo",
"paired_build_receipt": "release-evidence/05-operations/receipts/nextfest-oct-2026-rc1.json",
"notes": "Tested Win11 23H2; no Steam SDK yet"
}
Archive under release-evidence/01-build/gamemaker/. Copy build_label into BUILD_RECEIPT notes.
After export — Steam upload handoff
When G1–G5 pass:
- Copy folder to SteamPipe depot content root per depot discipline.
- Upload; capture Steam build id.
- Merge build id into BUILD_RECEIPT.
- Run Wednesday demo smoke on installed Steam build—not only standalone folder.
- Run metadata diff before promotion.
Standalone pass does not replace installed smoke—it de-risks upload day.
Comparison to Construct NW.js path
| Topic | GameMaker (this pipeline) | Construct NW.js |
|---|---|---|
| Export unit | exe + data.win | NW.js folder |
| Typical silent fail | Texture pages | Event sheet order |
| Deep discipline | Sheet freeze challenge | Different article |
| Shared fest habit | BUILD_RECEIPT + Wednesday smoke | Same |
Teams on both engines should use one receipt culture—do not fork evidence folders per engine brand.
HTML5 export vs Windows Steam (same project)
Many studios ship HTML5 on itch first. Rules:
| Rule | Reason |
|---|---|
| Re-run G1–G5 after switching target | Options differ per platform |
| Do not assume browser save paths on disk | Use localstorage vs ini separately |
Keep build_label format shared |
Support compares SKUs |
See dual-SKU economics when maintaining two demos.
Save files and %LOCALAPPDATA%
GameMaker often writes saves under user appdata on Windows. For fest demos:
- Document whether demo wipes saves on first run
- Match FAQ save claims
- Avoid copying dev machine save into depot
Test fresh Windows user quarterly.
Room order and persistent objects
GameMaker exports carry room order and persistent instances into standalone exactly as in the project—IDE test rooms you never ship can still compile if they are first in the room list.
| Check | Pass |
|---|---|
| First room is retail title / demo entry | Yes |
| Debug rooms removed from build or guarded | Yes |
| Persistent controllers init once | Yes |
| Room goto from title uses correct room id | Yes |
Add a row to export_sanity_log.md:
| first_room | rm_title_demo |
| debug_rooms_excluded | true |
If you use room inheritance, open inherited rooms after export—parent changes sometimes fail silently until full recompile.
Game end and quit discipline
Fest demos should exit cleanly for Wednesday smoke Gate S6:
// Prefer game_end() or structured quit, not abrupt os_close in demo
if (keyboard_check_pressed(vk_escape) && state == "title")
game_end();
Document whether Alt+F4 is the only quit path—smoke testers count hang on close as fail.
Fonts, localization, and Included Files depth
Bitmap and SDF fonts behave differently in standalone:
| Font type | Export check |
|---|---|
| Sprite font | Glyph sprites on correct texture page |
| TTF imported | Antialiasing matches pixel font pass intent |
| Localized CSV | File in Included Files; load once at boot |
Gate G1d — localization smoke
- Switch language once if shipped.
- Confirm no
???boxes on HUD. - Longest German string fits button width.
If demo is English-only, state that in store FAQ—do not leave language menu showing unfinished locales.
SteamPipe depot mapping (conceptual, +30 minutes if first upload)
Export sanity does not upload—but you should preview depot layout tonight:
| Steamworks concept | Your folder tonight |
|---|---|
| Depot root | Contents of SteamDemo/ (exe + data) |
| Launch option | YourGame.exe relative path |
| build id | Filled tomorrow after upload |
Follow Steamworks uploading builds when ready. Cross-read depot and branch discipline before pointing fest branch at this build.
build_label convention
gm-{sku}-{YYYY-MM-DD}-rc{n}
Example: gm-nextfest-2026-05-23-rc1. Display on title screen and pause menu footer.
Worked example (composite, one evening)
Context: Solo dev; HTML5 demo on itch; first Windows Steam export for October fest.
| Hour | Action | Result |
|---|---|---|
| 0 | G1 options → VM, fixed scale | options-notes.md |
| 1 | Texture page 0 overflow fixed | G1b pass |
| 2 | Export to SteamDemo/ |
G2 pass |
| 2.5 | Standalone boot black screen | Missing Included File manifest.json |
| 3 | Add Included File; re-export | G3 pass |
| 3.5 | 60s golden path | G5 pass |
| 4 | Receipt + screenshot | Ready for SteamPipe tomorrow |
Lesson: IDE never loaded manifest.json from disk path; standalone did. Classic fest-week blocker caught before upload.
Extensions and marketplace assets
Third-party extensions can break export when:
- DLL not copied to ext folder
- Extension disabled in IDE but code still calls it
- License forbids redistribution (read EULA)
| Step | Action |
|---|---|
| 1 | List extensions in options-notes.md |
| 2 | Export on clean project copy test if suspicious |
| 3 | Note extension names in receipt notes |
Remove unused extensions before fest freeze—smaller surface for Steam review questions.
Steam Deck and controller (optional gate G6)
If store page mentions Deck or full controller support:
| Test | Pass |
|---|---|
| Launch on Deck (or Big Picture) | Boots to menu |
| A button maps to primary action | Yes |
| Text readable at 1280×800 | Yes |
Log in receipt notes. Not required for desktop-only demos—honesty on store page matters more than checkbox features.
Delta timing and frame skip
Standalone on low-end laptops may stutter while IDE was smooth:
- Enable interpolate / fixed timestep deliberately—document choice
- Avoid physics tied to
delta_timewithout cap in demo slice - Test golden path on min-spec machine if cited in system requirements checklist
Security and anti-tamper (demo scope)
Do not spend fest week on anti-cheat. Do close obvious debug keys:
| Key / combo | Retail demo |
|---|---|
| F1 help with dev commands | Off |
| God mode flag | Off |
| Room skip cheat | Off |
Aligns with developer console opinion.
Partner and publisher packet crosswalk
Attach export receipt to partner ZIP 01_builds/ when GameMaker is declared engine:
## Build proof
- gamemaker_steam_export_receipt_v1.json (G1–G5 pass)
- standalone main_menu screenshot
- BUILD_RECEIPT build_id (after Steam upload)
Q3 diligence asks how you verify exports—receipt answers without invented metrics.
Month-one adoption ladder
| Week | Goal |
|---|---|
| 1 | First receipt + standalone screenshot |
| 2 | Second machine test |
| 3 | Pair with playtest branch upload |
| 4 | Add installed Wednesday smoke |
Snippet-friendly answers
How do I export GameMaker to Steam?
Use Create Executable for Windows, verify texture pages and Included Files, run local boot gates, upload folder via SteamPipe, then promote branch after smoke passes.
Why does GameMaker work in IDE but not Steam?
Usually texture page overflow, wrong Included Files paths, or uploading wrong zip root—not Steam itself.
VM or YYC for fest demo?
VM unless you already ship YYC with spare QA days.
Performance smoke (optional sixth gate)
If standalone FPS is below target on min-spec machine:
| Check | Tool |
|---|---|
| Room transition cost | Built-in profiler |
| Texture swaps | Texture page view |
| Particle overdraw | Disable groups test |
Fest demos rarely need 144fps—they need stable 60 on golden path hardware.
Playtest branch before public fest
Upload to friends-and-family playtest branch before setting fest branch live. Export receipt proves folder sanity; playtest proves Steam install path.
Evidence folder placement
release-evidence/
01-build/
gamemaker/
export_sanity_log.md
gamemaker_steam_export_receipt_v1.json
screenshots/
main_menu_standalone.png
Friday Block 5 can spot-check receipt age vs current build_id.
CI hook (optional)
# Pseudocode — after headless compile job
test -f Export/SteamDemo/YourGame.exe || exit 2
test -f release-evidence/01-build/gamemaker/gamemaker_steam_export_receipt_v1.json || exit 3
jq -e '.gates.G3_cold_launch == "pass"' release-evidence/01-build/gamemaker/gamemaker_steam_export_receipt_v1.json || exit 4
Align exit codes with validate-packet style.
Common mistakes (seven)
- Uploading IDE Run output — Only Create Executable counts.
- Skipping texture page audit — Pink sprites on stream are expensive.
- YYC switch without retest — New crash class.
- Wrong zip root — Steam depot gets nested folder; exe not found.
- No
build_label— Cannot correlate refunds to export. - Smoke only in IDE — Wednesday smoke needs installed build.
- Included Files path drift — JSON moved in repo but not in asset bundle.
Pro tips (six)
- Compile log to file every export—attach to receipt.
- Screenshot main menu from standalone automatically (ShareX).
- Same
build_labelin exe, receipt, BUILD_RECEIPT. - Keep
options-notes.mdin git — diff when someone toggles YYC. - Run G5 before zip — faster than re-upload.
- Pair with 18 playtest tools after smoke passes.
Non-repetition note (editorial)
No existing URL owns GameMaker-specific Steam export sanity for fest demos; HTML5 industry analysis names GameMaker but does not teach export gates. Tutorials category returns after Process + Industry passes; avoids Next Fest metadata checklist cluster.
Key takeaways
- Create Executable is the product; IDE Run is not.
- Gates G1–G5: options/texture, folder, launch, golden path, quit.
- VM default for first fest unless YYC is already battle-tested.
- Texture pages and Included Files cause most standalone surprises.
gamemaker_steam_export_receipt_v1.jsonpairs with BUILD_RECEIPT and Wednesday smoke.- Standalone pass precedes Steam upload; installed smoke still required.
build_labelmust be visible in-game and in receipts.- HTML5 itch and Windows Steam need separate export passes.
- Second machine without GameMaker catches dev-only dependencies.
- Playtest branch before public fest branch promotion.
FAQ
We already use Steamworks GUI upload—skip this?
No—GUI upload does not check texture pages. Run gates first.
Does this replace playtest branch tutorial?
No—this is GameMaker export; that article is branch creation.
GameMaker + Steamworks SDK integration?
Add a sixth gate for achievements/cloud when enabled; start without SDK for first demo.
Same pipeline for macOS depot?
Re-run all gates; texture pages differ.
How does this relate to Construct NW.js?
Parallel engine discipline; shared evidence culture.
We use GameMaker Cloud—different?
Same gates on downloaded source before export; verify cloud build matches local build_label.
Can we skip receipt JSON?
Only for internal QA zips—not for fest or partner-facing depots.
Incident response when export fails after promotion
| Hour | Action |
|---|---|
| 0 | Roll back branch if crash rate spikes |
| 1 | Re-run G1–G5 on hotfix export |
| 2 | New receipt + BUILD_RECEIPT row |
| 3 | Re-smoke installed build |
| 4 | Update demo patch notes if player-visible |
Operating review hook
Four-Friday operating reviews Block 3 add:
- Export receipts filed per
build_idthis month - Count of standalone-only passes without installed smoke
- Top G1 failure mode (texture vs Included Files)
Fest marketing stop rules
No increase on fest marketing cap while G3–G5 fail on standalone—fix binary before buying traffic.
Conclusion
GameMaker makes it easy to feel done when the IDE runs. Steam players run the exe in a folder.
Spend one evening on G1–G5, file the receipt, then upload. Fest week is too late to discover texture page zero was full.
Next reads: BUILD_RECEIPT beginner pipeline, Wednesday demo smoke, Steam playtest branch.