So a week ago a friend agreed to teach me some stuff about using GameMaker. For quite some time I've wanted to make stinky little games, but I made no progress because I don't have a lot of experience with programming and without someone personally helping me get into using a given engine, I'm very likely to go nowhere.
On previous programming experience: I first tried learning GameMaker in late-ish 2015 or early 2016, using a tutorial video or two on programming a platformer. It went nowhere. Then in late 2018 I did a python course, which was fun and definitely more successful since I had a direct, tangible incentive to program stuff, but I didn't really have any use for python afterwards and so it also went nowhere. Then in late 2020 a Java course, which... I actually barely remember anything from, there was a lot on my mind at the time.
Pretty much that entire time, I'd been developing an intuition for understanding games through pesudocode-ish logic. I'm not a genius or anything, nor was I reverse-engineering it all, but I was thinking in those terms. So I think my attempts at programming along with that kind of thinking about games and their bugs had primed me decently well to actually get something done if I were given a good shot at trying programming again.
A barrier for a while was which engine to use. I didn't really wanna use Unity, Godot seemed maybe neat but it has a daunting learning curve and I don't know anyone proficient in it, and uhh. I don't really know what else is out there. unreal?? no chance I'd use that
so anyway, this has all been a bit settled for some time now. I spoke to the aforementioned friend about wanting to try out little game dev experiments before, but this time I was upfront about a more recent consideration: I'm probably not in the sort of headspace to learn something that takes too much commitment anyway. He suggested just doing GameMaker because, hey, I already kinda know how to program from a logic standpoint, he's pretty decent at it himself, and it's comparatively simple to just start making shit compared to the engines I mentioned before (to my knowledge). And I conceded. It was a pretty low barrier to entry, after all.
Two days later (5 days ago as of posting) we got into a call to start up a small game. My intentions were to recreate the physics and controls of my favourite game, La-Mulana (the remake), and so he set up some basic movement and collision and I rewrote or altered things to work like LM.
A few days later and an inability to ever stop thinking about this project, here's where it currently stands. It probably won't look all that great unless you're deeply familiar with LM's movement, but I'm quite proud of the progress I've made in what feels like a fairly short amount of time.
To list what's here:
- basic grounded movement
- neutral jumps and directional jumps
- the pause in movement when you initiate a jump
- pixel-perfect collisions on all sides
- the grapple claw (except there's no minimum amount of frames you need to be stuck to the wall before dropping)
- raindrops (a glitch in LM used heavily in speedruns [I've been running it since 2016] to clip through floors and such)
- special terrain-dependent raindrop zips (only two at the moment but I have the infrastructure to add more special behaviour which is cool [I should probably offload it to a script (function) hehe, it's gonna be a long block of code if I add more])
- no "hold-right tech" for the plus-shaped terrain zip unfortunately, that's hard with how I have collision set up and I dunno if I'll still try to implement it
Shoutouts to the TAS tools I complained about months ago, frame advance and all the info you can display helped a ton in coding:
- the gravity constant
- all the horizontal movement speeds
- raindrop behaviour (which I didn't completely recreate but it's good enough I think)
- what the game sets your Y speed to when you either touch a ceiling or let go of jump and your Y speed is too high
- initial jump velocities (I don't have double jumps in but I probably will sometime? I have a constant for it regardless)
- probably more I dunno. my brain is mush I can't stop working on this
It should be said that I don't have any way to buffer the inputs for a raindrop, so I usually just press space to move one pixel to the right. That's why at one point I don't even try grappling or anything and I just get lodged in anyway.
Also god fucking damn figuring out how to do collision such that raindrops are even possible is wack. What I ended up doing is making an array of various points around Lemeza's collision which store whether or not they're being touched, which can be used to simulate a line on each edge of him for basic collisions, and individually contribute to terrain zips. for example, the check for the up-zip is: if (string(colCheckPreciseFlags) == "[ 1,1,1,1,1,1,0,0,1,1,0 ]") which is "if a wall is touching everything but the top left, bottom right, and almost-bottom right of Lemeza, then..."
For reference, the order is:
- Top left wall node
- Middle left wall node
- Bottom left wall node
- Center node
- Top right wall node
- Middle right wall node
- Bottom right wall node
- Left ceiling node (6 pixels above top left wall)
- Right ceiling node
- Left floor node (8 pixels below bottom left wall)
- Right floor node
I'm not actually totally sure what I want to do with this when it's done? I might try my hand at designing a short series of little LM-like puzzles, but of lesser quality. Mostly it'll probably just be about the vibes and weird little dialogues I write. The platforming maybe isn't a great fit for that, and I won't ever require raindrops maybe, but they're my favourite 2D platformer controls so I wanted them anyway.
I'll replace Lemeza's sprite at some point with my fursona, assuming I can do the pixel art well enough. I think a doe with a tummy doing la-mulana things is what the world needs