#01 - Life on Neo Kulasai
Welcome to my development diary for my RPG Maker 2025 Game Jam entry, Neo Malta! It stars Malta if you can believe it, the green haired lady that I use all over my website as a mascot, and this is her licensed tie-in video game! We're very proud of her!
#02 - Malta Has Been Framed
Here is what I've accomplished in the three days since the jam started!
As usual, I think it's really fun to give my RPG Maker games this large pc-98 inspired frame that contains the UI elements. The aesthetics of the user interface is something I guess I just really like
working on! Nothing particularly eventful happened while creating the frame asset, though I hemmed and hawed over the colors for the Neo Malta logo in the top left.
Because the premise of this game is
Malta asking the player to help guide her towards self improvement, I thought it was important to add a layer of disconnect between Malta and the player, so I opted for this Runescape-esque movement system that
I briefly mentioned in the last update. The player presses the interact key, whereupon Malta trots over to that spot. RPG Maker's default pathfinding is absolutely terrible (as in non-existent, if anything is
blocking the most direct path to the target, she completely stops). I'd maybe try to fix it if I had the time, maybe having Malta check adjacent tiles when she can't move and try to move in an unblocked direction
before continuing in her path or something, but instead I just added a failsafe where if Malta's X/Y position doesn't update within 5 seconds, Malta must not be able to reach where the player indicated and
the event's loop terminates.
I also worked on some designs for the interaction icons at the bottom of the screen (as is visible in the gif, I just squished down my earliest concept doodles of them as placeholders lmao), and turning them
into pixel art will probably be my next task. I'd like to spend the next three days of development finishing up my basic tileset (as you can see, it's an incomplete mess right now), creating a custom text box,
and doing some mapping.
In my 11-ish years of being in the RPG Maker developer space, I really feel like I've learned that all this frivolous stuff like flashy UI is important to get done early. It helps make
good screenshots and I think it's unfortunately true that the immediate spectacle of a screenshot is what makes people get interested in your project. I've known a lot of incredibly talented RPG Maker
developers get more or less ignored despite having extremely creative game ideas or really impressive eventing because the art isn't being made the number one priority. It really sucks, but that's the
world we live in, I guess. This is all probably obvious to most people though, of course something showy gets more attention. I guess I'm just rambling! Back to work!!!
#03 - Interfacing With The World
I simultaneously feel like I've worked pretty hard and hardly worked at all...! The icons for the interfaction options at the bottom of the screen are all done, each taking about an hour and a half or so.
I felt pretty winded having done them all more or less back to back, but I managed to continue to work on other pixel art-related tasks like the tileset and a textbox that will later be getting some fancy
animations.
I also finished the eventing for getting Malta to respond contextually to a nearby npc/object based on which interaction key you pressed (1 for talking, 2 for looking, 3 for using). Let me just say,
it was a little more annoying than you'd think! If I'm going to talk you through my solution, I'd like to ask you to take a walk with me through the process of implementing this mechanic
(people that don't use RPG Maker, maybe just skip ahead because I'm about to complain about specific engine quirks that may not be all that
interesting).
So clearly, Malta needs to be adjacent to the thing she wants to interact with, so that when you press the key that makes her talk, she has something to face and talk to. In order for Malta to register
that there's someone nearby, there has to be some condition that is being met to confirm to the engine that it's time to run the talking code. Naturally, you think "okay, well what kind of Event Triggers
are options?" and 'Player Touch' would seem to make plenty of sense; Malta has to be touching the object to interact with it, or possibly be standing ontop of some invisible event beneath her. Malta
isn't the player though, the little cursor she follows is what you actually control. "Okay," you may then assume, "There's an 'Event Touch' trigger, that sounds tailor made for this situation!". Not quite!
'Event Touch' is for triggering commands when an event touches the player, rather than the player touching the event. Since Malta is an event, that also means
'Action Button' is out of the question, though we knew that anyway since the interaction options are bound to 1, 2, and 3, as opposed to RPG Maker 2003's default interaction key (Z/Spacebar). When you're
pressed for time during a game jam, "there is no easy, uncomplicated way to get the engine to recognize Malta is in the right spot" is not something you want to find out. So, now let's get to the technical
options!
You can have a variable store an event's X and Y coordinates on the map, so I could have the game use a 'Parallel Process' trigger and have the game continually checking if Malta's X/Y position intersects
with the map coordinates of the 4 possible adjacent tiles around any given event. This seemed kinda shitty though, since I'd have to go back in and remember to tweak these hard-coded map coordinates if I ever
decided to move the npc/object. Instead, I have each interaction key turn on a switch; this switch activates each npc to quickly assign their X and Y position to two variables, then increment and decrement
both values by 1 to check if Malta's X/Y position is the same as these two coordinate variables. (So, for example, NPC1's position is 13, 56. I have them game decrement the Y by 1 to become 55, and then the
game compares the two variables, NPC1's X/Y and Malta's X/Y. If Malta's X/Y is also 13, 55, this means she is north of the NPC, and should face south, and then the talking dialog may play.)
The problem with this solution (even though it's the one I'm going with) is that it requires a lot of variables and a lot of checking. That's O(n) in Big O notation, which isn't ideal, but I also don't
expect there to be too many NPCs in one map at any given time. This is a jam game after all, and I'm willing to let the simplest solution be the one I go with here for expedience's sake. I'm setting an
unofficial limit of 10 things Malta can talk/look/use in any given map, so I don't drown in X/Y variables (that's already 20 variables, sheesh!). I toyed with maybe some other ways to get text to play
without necessarily requiring all these X/Y variables, like using the RPG commands to equip Malta with certain equipment that forces a text string to play from a Common Event when she wears it, and maybe
there is a better solution out there that I'm not seeing right now, but I need to keep things moving and this works, so... yay!
All this work was (obviously) necessary to get done and it's good I did it sooner rather than later, but I still don't feel like I've made particularly large strides towards finishing the game. I guess
that'll be my focus for next time! Next entry will be all about mapping and adding sprites. Ciao!