GameMaker
GameMaker is a cross-platform game engine designed for creating 2D video games, offering tools for both visual scripting via drag-and-drop interfaces and code-based development using its proprietary GameMaker Language (GML).[1] Originally developed by Dutch computer science professor Mark Overmars in 1999 as "Animo," it evolved into GameMaker version 1.1 and was first publicly released that year, initially as an educational tool for teaching programming concepts through game creation.[2] The engine gained commercial traction under YoYo Games, founded in 2007 to professionalize and expand its capabilities, including support for exporting games to multiple platforms such as Windows, macOS, Linux, iOS, Android, and consoles like Nintendo Switch, PlayStation, and Xbox.[3] In 2015, YoYo Games was acquired by Playtech, a gambling software company, for $16.4 million, but was sold to Opera Software in 2021 for $10 million, where it now forms the basis of Opera's gaming division.[4][5] GameMaker is free for non-commercial use, with paid subscriptions unlocking advanced features like console exports and cloud saves, making it accessible to hobbyists, indie developers, educators, and professional studios worldwide.[6] Renowned for its speed, ease of use, and efficiency in prototyping, GameMaker has powered numerous acclaimed indie titles, including Undertale, Hotline Miami, Hyper Light Drifter, and Chicory: A Colorful Tale, contributing to its role in the indie game revolution and amassing thousands of daily users over its 25-year history.[7][2] Its integrated development environment (IDE) supports asset management, physics simulations via built-in engines, and runtime performance optimizations, enabling rapid iteration without requiring extensive coding expertise.[8]Introduction
Overview
GameMaker is a cross-platform game engine primarily designed for developing 2D games, offering limited support for 3D functionality, and was originally created by Dutch computer science professor Mark Overmars.[2] First released to the public on November 15, 1999, as "The Game Maker," it began as a tool for creating simple 2D animations and games, evolving from Overmars's earlier project Animo.[2] The engine's core purpose is to facilitate rapid prototyping and game development, making it accessible for indie developers, beginners, and professionals alike through its intuitive and efficient tools.[1] What sets GameMaker apart is its strong emphasis on 2D game creation, combining a user-friendly drag-and-drop interface for visual scripting with optional code-based scripting, all within an integrated development environment (IDE) that handles the full workflow from design to deployment.[1] In 2012, it was rebranded and advanced as GameMaker Studio, introducing enhanced cross-platform export capabilities.[2] As of 2025, GameMaker remains under active development by Opera, following their 2021 acquisition of YoYo Games, the studio that had been maintaining it since 2007, with ongoing monthly updates including the October 2025 release (version 2024.14).[9][10] The engine supports deployment to various platforms such as desktop, mobile, web, and consoles, while providing programming options like the GameMaker Language (GML).[1]Development and Licensing
GameMaker was originally developed by Dutch computer scientist Mark Overmars, who created the initial version of the software in 1999 as a tool for teaching game programming. In 2007, Overmars sold the software to YoYo Games, a UK-based company founded to commercialize and expand its capabilities.[11] YoYo Games further developed GameMaker into a professional-grade engine, releasing versions like GameMaker Studio in 2012. In January 2021, YoYo Games was acquired by Opera Software, integrating GameMaker into Opera's gaming division to leverage synergies in browser-based and cross-platform development tools.[9] As of 2025, GameMaker is maintained by Opera's dedicated GameMaker team, headquartered in Dundee, Scotland, United Kingdom, which continues to oversee development, bug fixes, and feature enhancements. The team released version 2024.14 on October 29, 2025, introducing improvements such as a new user onboarding screen and optimizations for the IDE layout, marking it as the final major update before the next long-term support (LTS) version.[12][11] GameMaker operates under a tiered licensing model designed to accommodate hobbyists, educators, and professionals. The free tier allows unlimited non-commercial use, including exports to desktop, mobile, web (HTML5), and even consoles for educational purposes, with access to core tools but restrictions on commercial publishing and certain advanced features like custom runtimes. For commercial development on non-console platforms, the Professional license is a one-time purchase priced at $99.99, granting perpetual access to export modules for Windows, macOS, Linux, iOS, Android, and HTML5 without ongoing fees.[6][13] Console exports, such as for Nintendo Switch or PlayStation platforms, require the Enterprise subscription, which is billed at $79.99 per month or $799.99 annually and includes all non-console exports plus console modules, provided the user is a registered developer with the respective platform holders. This model ensures compliance with console certification processes while limiting free access to prevent unauthorized commercial releases. Paid licenses, including Professional and Enterprise, provide additional benefits such as priority customer support, integration with the GameMaker Marketplace for assets and extensions (including cloud save solutions), and cloud-based project collaboration tools.[6][14][15]Core Features
User Interface and Workflow
GameMaker's Integrated Development Environment (IDE) serves as the central hub for game development, featuring a modular layout that includes the Asset Browser for managing resources such as sprites and sounds, the Room Editor for constructing game levels, and the Code Editor for scripting behaviors.[16] The Asset Browser replaced the traditional resource tree in version 2.3.0, allowing users to organize assets by type or custom folders for efficient navigation during development.[17] Drag-and-drop actions enable visual scripting by providing pre-built blocks that can be assembled without writing code, integrating seamlessly with the Code Editor for hybrid workflows.[16] The typical workflow begins with creating a new project through the IDE's welcome screen, where developers import or create assets like sprites and sounds via the Asset Browser. Objects are then designed in the Object Editor by assigning events—such as Create for initialization, Step for ongoing logic, and Draw for rendering—to define behaviors, often using drag-and-drop actions or code snippets. These objects are placed as instances in rooms using the Room Editor, which supports layering to separate visual and interactive elements, followed by testing through the built-in GameMaker Runner that compiles and launches the project in real-time.[16][18] Key tools enhance this process, including the Debugger, which allows setting breakpoints, stepping through code execution, and inspecting variables to troubleshoot issues during runtime.[19] The layer system in the Room Editor organizes room elements into stacked layers for backgrounds, instances, and UI, facilitating complex scene management without overlapping conflicts.[18] Additionally, the Sequence Editor, akin to a timeline tool, enables the creation of animations and cutscenes by keyframing asset movements and effects over time. Recent updates from 2024 to 2025 have refined the IDE, particularly the Code Editor, which now includes enhanced autocomplete for GML functions and variables, improved syntax highlighting for better code readability, and support for hotkey chords to streamline navigation.[20] These changes, introduced in beta releases like 2024.400 and stabilized in subsequent updates such as 2024.8 and 2024.14, also added Git integration via an optional plugin for version control directly within the IDE.[20][21] For performance optimization, GameMaker includes a built-in Profiler accessible via the Debugger, which measures execution times for functions, scripts, draw calls, and CPU usage to identify bottlenecks, enabling developers to target inefficiencies like excessive rendering or loop overhead without external tools.[22]Asset Management and Tools
GameMaker provides a robust system for managing game assets, enabling developers to handle graphics, audio, and other resources efficiently within the integrated development environment (IDE). Central to this is the Asset Browser, which serves as the primary interface for creating, importing, and organizing assets in a hierarchical resource tree structure, allowing for intuitive navigation and modification of project elements.[23] This organization supports scalability in larger projects by grouping related resources and facilitating quick access during development. Key resource types include sprites, which are 2D images that incorporate collision masks for interaction with game physics; tilesets, derived from imported sprites to construct layered backgrounds and levels; and audio assets such as sounds and music, which support formats like WAV, MP3, and OGG for seamless integration into gameplay.[24][25][26] The asset pipeline begins with importing external files directly into the IDE, where developers can apply optimizations like texture compression to reduce file sizes and improve performance, particularly through texture groups that manage memory usage by loading and unloading graphics as needed.[27] Built-in editors streamline asset creation without requiring external software. The Image Editor supports pixel art design, sprite modification, and frame-by-frame animations for dynamic visuals.[28] The Font Editor allows importing TrueType fonts (TTF) or system fonts, with options to customize size, range, and anti-aliasing for text rendering.[29] Additionally, the Particle System Editor enables real-time preview and configuration of effects, such as fire, explosions, or smoke, using parameters for emission, lifetime, and movement to enhance visual feedback in games.[30] Integration with the GameMaker Marketplace, introduced in 2013, expands asset management by providing access to a community-driven repository for downloading free assets, templates, and extensions. As of 2024, the sale of paid assets has been discontinued, with a transition to the Prefab Library system.[31][32] Examples include shader packs for advanced rendering and UI kits for interface design, which can be imported directly into projects to accelerate development.[15] For more sophisticated features, GameMaker supports a shader language based on GLSL ES, allowing custom vertex and fragment shaders to produce effects like post-processing or dynamic lighting.[33] Skeletal animation is handled via extensions and imports, particularly through Spine JSON files converted to sprite assets, with built-in functions for bone manipulation, posing, and tinting to enable complex character movements.[34][35]Programming in GameMaker
GameMaker Language (GML)
The GameMaker Language (GML) is a proprietary scripting language designed specifically for developing games within the GameMaker environment, enabling users to implement game logic through text-based code. It features a syntax reminiscent of C, incorporating familiar control structures such as conditional statements (e.g.,if/else), loops (for, while, repeat), and functions, which allow for procedural programming tailored to game development tasks. GML operates in an event-driven paradigm, where code is executed in response to predefined events tied to game objects, such as the Create event for initialization, the Step event for per-frame updates, or the Draw event for rendering visuals.[36][37]
A core strength of GML lies in its extensive library of built-in functions that simplify common game programming needs, eliminating the requirement for external libraries to achieve core functionality like rendering, input handling, and simulation. For physics and collision detection, functions such as place_meeting(x, y, obj) check whether a specified position would collide with instances of a given object, facilitating efficient boundary checks without manual coordinate calculations. Mathematical operations are supported through dedicated functions, including point_distance(x1, y1, x2, y2) for computing the Euclidean distance between two points, which is essential for tasks like AI pathfinding or projectile trajectories. Drawing primitives and assets are handled via functions like draw_sprite(spr, subimg, x, y), which renders a sprite at a precise location and frame, allowing developers to build dynamic visuals directly in code.
GML provides robust data structures for managing collections of information, supporting both traditional and modern approaches to organization. Arrays serve as flexible, dynamically resizable containers for ordered data, usable in one or multiple dimensions (e.g., array[0] = [value](/page/Value);), and are recommended for most list-like operations due to their simplicity and automatic memory management. Legacy data structures include DS lists for sequential storage with easy insertion and deletion (created via ds_list_create()), and DS maps for key-value pairs (created via ds_map_create()), though these require manual cleanup with ds_list_destroy() to prevent memory leaks. In GameMaker Studio 2.3.0 (2020), structs were introduced as lightweight, garbage-collected objects that group related variables and methods (e.g., var [player](/page/Player) = { hp: 100, move: [function](/page/Function)() { ... } };), offering a more efficient alternative to DS maps for complex data. Enums, introduced in 2014 as named constant sets (e.g., enum Direction { up, down, left, right };), enhance code readability by assigning integer values to symbolic names, with support for use within structs.[38][39][40][41][42]
Best practices in GML emphasize leveraging instances—runtime manifestations of objects—for pseudo-object-oriented design, where each instance maintains its own state and behaviors through event scripts, promoting modular and reusable code (e.g., multiple enemy instances sharing a parent object but varying in position via x and y variables). Asynchronous programming is recommended for non-blocking operations, particularly in networking, using functions like http_get(url) to request data from web servers and handle responses via the Async - HTTP event, ensuring smooth gameplay without frame drops. Developers are advised to use local variables (var or let) for temporary computations to optimize performance, especially under the YoYo Compiler, and to group related code with #region directives for maintainability.[43][44]
GML has evolved to support more dynamic development workflows. For live reloading during testing, extensions like GMLive enable real-time code updates without restarting the game, a feature particularly updated for compatibility with GameMaker 2022 releases. These advancements maintain GML's self-contained nature, where all essential game features—from input to audio—are accessible via native functions without third-party dependencies.[45][46]