[gruedorf] slimehunter's devlog
A new GrueDorf blog appears! slimehunter is struck by a strange mood! slimehunter withdraws from society... slimehunter begins work on a roguelike!
This is going to be a relatively short post, but I mainly wanted to start it out to get myself motivated.
So I started a new project…
It’s an Angband variant!
It took me hours to figure out how to get the darn thing running on a modern version of Visual Studio .NET but I finally managed to compile it after hours of troubleshooting dependencies and DLLs and such. I should probably also mention that I have little-to-no experience with C/C++ so this is going to be fun.
Anyway my ultimate goal is to have a fully functional Angband variant (sort of like a total conversion mod?) which draws inspiration from some sources like Beowulf but in a more modern setting. I also want to try to add controller support if possible, which seems more intimidating every time I think about it, but I guess that’s what I get for trying to learn yet another engine.
My gripe with traditional roguelikes running on modern hardware is that they usually lack great UI or are not too approachable (and yes I know what purists are thinking already. fight me). I’d also like to add a few new features other than the controller input, which I’ll probably work on first, but baby steps for now until I can gain a better understanding of the language and the project source code.
slimehunter84 last edited by slimehunter84
So I had an entire post typed up and ready on how I’d been learning more Objective C and diving into the docs for Angband, but as things go, I’ve gotten side-tracked by yet another side project.
This new game that I started in December is actually finished, so I will be picking up my main roguelike project again soonish.
For the mean time, I’ve decided to write up sort of a hybrid postmortem on the completed project, the 2D platformer.
Anyway here’s what I’ve been working on…
The Gamejam Project:
As part of the yearly gamejam, Finally Finish Something (FFS jam), I wanted to use it as a way to complete one of the very first projects that I’d worked on circa 2008. However when I imported my old project in the latest editor version, I ran into a lot of errors and so I decided to basically start over from scratch but use a very similar engine.
Luckily the engine I had used was popular enough that it had been permutated by others and I found a version that worked on the modern editor version.
This gave me a great starting point, and I only had to fill in the blanks. However, I also ran into a snag with the assets I used, so I decided to use some freely available 1-bit sprites for the art, and SFXR for the sounds.
The gameplay loop
The main gameplay loop is a simple 2D platformer. Not really much more than a single 16x16 pixel character that can move around, jump, attack, and wall-grab. I decided against adding any other complex behaviors, but I regret not being able to work in some sort of combo attack to string together.
There’s an unused 3rd action hiding in the code that I was intending to be a dodge-roll or block/heal action, but again didn’t have time for it before the jam submission deadline. I’ll probably add this back in later.
The game framework
I’m using my old favorite, Game Maker with a heavily modified version of the Grandma Engine. However as I pointed out above, I upgraded to the latest version which required some re-learning since the docking windows and UI has changed a lot, along with some other specifics, collisions, surface drawing, audio, etc.
This might’ve been a mistake since I wanted to use a familiar engine and not waste too much time during the jam with learning the IDE and scripting language, so I’d say I was about 60% familiar with everything under the hood.
Weirdly there was no credit given in the project code to Grandma Engine, but very specifically the collision scripts and naming conventions look oddly familiar. So given the benefit of the doubt, maybe this engine was heavily influenced by or learned from the same code that Grandma was based on?
To allow myself to focus mainly on the gameplay loop and writing the narrative, I chose to use a pre-made 1-bit asset set by Kenney. It’s missing a few things, but has 90% of what I need for this prototype-like jam game, so it’ll do! I’ve always wanted to try out something made by Kenney since it seems ubiquitous with game jams and quick prototypes at this point in time.
I ended up spending a few hours making some minor changes to it, and adding a couple tiles and sprites for mapping (longer/wider tiles for specific objects) and enemies with more animation frames, but otherwise it was a great base to use for the minimalist style I was going for.
The narrative is told partially with text and partially with the environment. It’s weighted a little heavier toward the latter which is something I’ve wanted to explore in modern game design for a while, and never really had a good chance to make during a game jam.
A lot of my narratives are taken from my dreams and subconscious thoughts, and also from things that have just floating floating around in my mind. Taking some of those thoughts and fleshing them out and putting them into game form sometimes does not have the 100% representation that I had hoped, but I feel like this one managed to portray most of the look and feel that I was going for.
I’d be very interested to know what others think about the atmosphere in this sense, as I won’t spoil the exact concepts that I was hoping to work into the ludo-narrative.
Code and Content Cuts
There were quite a few things that didn’t make the cut due to the strict deadline, which always happens and are never easy to make. I did feel like during this jam (compared to other jams past) I did improve in this area and at making those decisions.
Some of the cuts made were:
- player actions (2x jump and others)
- inventory screen and other key items
- a larger narrative told through scattered notes (sort of like Bioshock audio journals)
- advanced boss AI and a 2nd transformation with another attack pattern
- a secret room that triggers a hidden ending
- screen transition effects
- animated/fancy title screen
- and more!
[Spoilers Start here- skip to section 6.]
I recommend skipping this section if you want to try out the game first.
What I really wanted to focus on in this jam was a ludo-narrative centered around a pseudo-time loop and multiple endings.
I realized early on that any more than 3 endings in a gamejam game might be a bit too ambitious, which is why I chose to have no less than 8 endings!
Many of these are just controlled by a simple combination of 2 booleans in the code, but what I ended up finding out through this process was that I had to carefully nest these bools in certain objects because I was running into an issue where checking one bool in 1 object was overriding the ending I wanted to trigger with another bool in another object.
There might’ve been an easier way to centralize the checks, but I couldn’t find one. Maybe this’ll come to me at some other time, but I think this was the most crucial piece of info that I took away from this jam.
[End of Spoilers]
Overall I learned a bit more about 2D platformers via this game jam. I didn’t have to wrestle with physics as much as I did with my original project, so I was able to focus more on the Juice and the narrative and adding more features.
Adding the right amount of screenshake intensity as to not disorient the player too much is fine-tuning that’s absolutely necessary in a game.
Also even if the game has very simple 2D platformer controls (literally left, right, jump, attack), there’s no harm in adding a super-short tutorial or sandbox level where the player can familiarize themselves with the controls to have a safe screen where they can experiment with physics before jumping into the main gameplay loop.
There were a few hiccups while finishing the game and I didn’t get everything I wanted implemented. The boss AI attack sequence was especially hard for me to figure out, so going forward I’ll probably focus more on this area in the future.
Displaying text on the screen in a nice readable format is also absolutely necessary. There are so many short games or jam games out there that have sub-par text legibility, and mine was no exception.
I also feel more confident using the latest Gamemaker Studio v2 IDE, which was a huge blind spot for me since the last version I’d used was GM v8 (pre-Studio) and didn’t have nearly as many quality of life features and was largely irrelevant in the current Unity-Unreal-Godot environment of current-day IDEs.
As a solo dev, having a solid understanding of all these fields and features is crucial to completing games whether that’s a full game or a jam game. And I will definitely lean into this going forward. I might even go as far as to split up some of the elements I worked on into compartmentalized bits or libraries for ease of use on later projects.
I’m building a game launcher!
It’s complicated and I’m slightly in over my head, but I’m almost done with it.
My mistake was trying to make it cross-platform*, and also handling multiple forms of media (.exes, local html, PDF, and more).
*Android apks and the filesystem being inside a restrictive sandbox makes it more complicated to launch files and other processes within a process, it turns out. Also having no Android dev experience makes things a little harder.
Launcher Part 2!
Over the last couple weeks I’ve been adding various improvements to the launcher I built, with the intent of getting it ready for production. I’m super excited to say that I’m actually working with a client now who wants their games presented in this anthology-style launcher format, so I’m trying my best to really put the polish on this to the best of my amateur UI/UX designer skill.
Anyway here’s what I’ve added in detail
Really this covers a wide array of things, and luckily after consulting with an super awesome accessibility consultant, I was able to know there were only minimal changes I needed to make.
1. Mouse-only and Keyboard-only support
Luckily, this was already something I’d been working on, so I didn’t have to change much at all here except just clean up the functionality and test it.
2. Controller support
Almost the exact same as above, I just made a couple adjustments to the USB controller logic and was good to go!
3. Font Legibility
So far, I was using a white font on a black background, so it was already high-contrast, and the size was large enough to be read well even with the serif style.
I actually went back and just to make sure it was extra readable, changed to a sans serif style font, which was also a little bolder. Looks good to me!
I had a toggle added to turn off all sounds globally (I couldn’t resist adding some juicy sound effect), so that was good. I lack any sort of slider, though it’s kind of a minor thing since the sounds aren’t complex or only more than 1 channel. No music either.
5. Button Size
I wanted to originally have big, easily clickable buttons because I was planning ahead to mobile support, so I tried to compromise with a size and presentation that would look good on both desktop and mobile OSes.
6. Options Options Options
Button remapping would be nice- I don’t have that yet. Also I had to cut full-screen mode unfortunately because of scaling and tearing issues, but I’ll return to that later, maybe after launch unfortunately in interest of the little time I have.
The current client I’m working with has not localized their work, so I don’t really have a need for it yet, but I do want to refactor a little and make it easier to localize all the strings. This is going to be a pretty huge effort though, considering most of the current strings are hard-coded and not being read from an external file, (I know, don’t @ me) but I at least know what I need to do to remedy this.
That’s it for now. This should actually be followed by another topic discussing my plans post-release and discussing other clients I have who I’d like to work with in the future on new use cases for this launcher, so that’s probably what I’ll start with next time.
Thanks for reading. Bye bye!
Oh right, I almost forgot that I made some more details available on my new web site: https://mangotronics.com/#launcher