This is an average-length (~10 pages) blog post about how to write a parser, AST builder, bytecode compiler, and a bytecode interpreter - in general, and in GameMaker specifically.
Continue readingGameMaker: Recursive drawing
Sometimes, you may want to draw a copy of the game's screen into itself - usually for a purpose-specific effect (proper name is Droste effect) like TV screens.
This small post explains the process of doing so.
GameMaker: Simplest possible custom timelines
This post is about implementing custom timelines in GameMaker.
Admittedly, timelines remain to be one of the more dated features of the software, designed for a specific purpose and kept in their original form for compatibility.
Time to time you'll see someone stopping by on forums to write a big rant about how these are a mess, do not do what they expect them to do, and should be redesigned immediately.
People will usually also argue that doing these things by yourself is too hard.
Since it is far easier than people claim, I decided to write a post about this.
Introducing: GMLive.gml!
(mouseover/click to play GIF)
From Voidigo | full sized video
Roughly this time last year, I released GMLive - a web-based program that allows to write and run small snippets of GameMaker code right in the browser, including live reloading.
Today I'm pleased to announce that situation further improved and I am bringing live-coding to GameMaker: Studio and GameMaker Studio 2 themselves.
Nuclear Throne update 99
(artwork by Justin Chan)
So it has come to this - Nuclear Throne update 99 releases today! (also see AMA on subreddit)
For me it's even slightly more remarkable, as I did additional programming for this update.
This blog post outlines my involvement, changes, and answers some common questions.
GameMaker: Finding collision_line’s point of collision
This is a small post about a method for figuring out collision_line's "contact point" in GameMaker - in other words, obtaining not just whether there's something on the way, but also the nearest point on the nearest matching entity.
Most commonly desired for "hitscan" weapons and laser-sights, but has many uses.
Continue readingGameMaker: Fixing the JSON functions
This post about the issues with GameMaker's built-in JSON functions and an extension I made to address the issues.
Continue readingGameMaker: Opening links in a new tab on HTML5
On some occasions you may want to open a link in a new tab a GameMaker' HTML5 game.
As simple as it may look, this presents a bit of a problem:
- url_open opens links in the same tab.
- url_open_ext can open links in a new tab, but triggers popup blocker.
-
clickables can open links in a new tab, but have to be repositioned manually.
(particularly inconvenient if scaling-positioning the game for mobile browsers) - Adding an actual link (<a> element) into the game template allows to open links in a new tab, but requires basic understanding of JavaScript and HTML to hide/unhide dynamically.
url_open_ext is by far the most convenient of these, so let me explain why that does not work:
To prevent any page from being able to randomly open indefinitely large quantities of new tabs, the browser will automatically block attempts to open new tabs\windows unless they originate from user interaction (click event);
GameMaker handles events, and writes down new input states to later dispatch GML-level events at the right time and place (see event order). This means that your GML code inside a "Mouse Pressed" event does not count as originating from a user interaction (as it executes a few milliseconds later), and thus is not allowed to open new tabs (and do some other things).
However, with a bit of JS (and understanding of internal workings of GM), it is possible to accomplish the intended result, and this post is about that.
Continue readingSetting up portrait orientation on Wacom One / Intuos / Bamboo
This post is about modifying configuration files for Wacom drivers to have a Wacom One tablet function in portrait orientation despite the option not being exposed in configuration UI.
Update: apparently the same applies to Intuos and Bamboo product lines, likely for the entire "generation" of tablets using the same drivers.
Update 2: for One/Intuous, the newer version of driver (6.x) has these options exposed in UI.
Continue readingGameMaker: Recovering lost work
This post is about resolving situations involving loosing parts of GameMaker projects - be that from human error, software glitches, or hardware failure.
Continue reading