link2x101 posted on June 01, 2014 at 10:21 PM

execute_file() and GM:S

That is, why it doesn't exist, shouldn't exist, and how it can exist.

I've spent today thinking about how Studio is lacking the execute_file() and execute_string() commands.

And there's a fair number of reasons why this is so.

  • Piracy concerns.

    It's extremely easy to create your own GML runner. Sure, it makes Game Maker a significantly harder language to use, but it's still possible. This runner can then bypass all of the free-version limitations (provided someone with a paid copy compiled the executable.)

    The only real features lost are things like the loading bar, icon, and game-info.

  • Safety concerns.

    Look, I shouldn't have to tell you that letting your code run someone else's code without any safeguard can be a problem.

    Keyloggers, viruses, various kinds of bots, and any other malicious software can be transmitted this way. (Not to mention older versions of Game Maker weren't so safe with the filesystem access thing. Hello, system32.)

  • Rare usage.

    The most common usage case for these commands that I've ever seen is level editors and readers, which can easily be done in .INI format (depending on the game, though this lacks security) or a custom format (which is really not hard to do).

    Games using this style of saving/loading for maps are particularly at risk of the above safety concerns. I could easily write in some code among the instance_create()s to execute a .DLL saved along with the 'map', or even have the .DLL itself embedded into the map file, creating the actual .DLL file before executing it.

Now, these commands could easily be used to allow modding to a game. That is, you could let people hook in to core gameplay components and change how it's played, or change the music, or add multiplayer. All sorts of things, but I can't say I've ever seen anyone do such a thing with a Game Maker game. (And now it's a bit late for using this method).

However, you can still add such a feature to your game if you wanted. It's just a bit harder.

Now, instead of having free reign over a Game Maker game from an outside script, you have to specifically write in (effectively whitelisting) a parser.

Using file reading functions and more-strict Game Maker code (raise your hand if you don't always use semicolons) it can then be made possible to execute outside code.

That's right, you can still use an instance_create() level system, you just have to work a bit harder on making them load.
It's a pain, but this is a far safer way to go about things, as you probably won't be whitelisting dangerous commands, nor opening a hole for .DLL hooks or keyloggers.
TL;DR: execute_string() and execute_file() are gone because they are lazy and dangerous. You can still execute strings and files if you take the time to do it properly.

link2x101 posted on April 02, 2014 at 12:07 PM

#64DSC Blog?

I got little to nothing done.

Settled on a nice palette, came up with the beginnings of an idea (actually several that I scrapped because I can't prepare the necessary engines without getting too lazy), and have been slowly working on graphics.

It's coming out fairly nicely (for what little there is), and I'll probably show some screens when I have something actually worthy of being seen.

I'll also probably start streaming soon. I'm just too lazy to click OBS right now. ;D


For clarity: I'm working on a game for the compo, but not officially entering it. I want to have fun, but it's a conflict of interest for me to enter.


Additionally I did a thing a month or so ago that I never posted about. So yeah.

New album, "Digital Communication". On iTunes (don't get it from there, it's more expensive!), Amazon, Google Play, Spotify, and Bandcamp, among others.

It's all electronic dance music done in Ableton, and is my first complete album to come out of that software (as well as be released on some actual retailers.)

As usual, I suggest any purchases be through Bandcamp, as they are just obviously the best, and will be posting a (free) download for the awesome people of 64Digits later.

link2x101 posted on June 18, 2013 at 4:40 AM

The best update to Deep Freeze ever.

The game will now have a proper tutorial system.

This is possible due to a small change in the map format, which allows a flag to be set for the level.

This flag is checked just after the primary loading of the map, and can be used to do a huge amount of things.

In this (the most important) case, it can now be used to call up specific textboxes.

They support four lines of text, and will (soon) be advanced using the mouse (to coincide with the predominantly mouse-based controls).

Additionally, you can view a promotional video for Deep Freeze here, although it does not show the textboxes (they're still subject to a lot of design changes).

I wasn't sure whether or not this was enough content for front-paging, so Activity Feed it is.