#01 - Life on Neo Kulasai


Source: Hardcore Gaming 101
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!

Neo Malta is meant to be a kind of virtual pet/raising sim with silly little minigames, primarily inspired by the Famicom Disk System game Cocona World, and to a lesser-but-still-significant degree Tomodachi Life and Wonder Project J. You don't actually directly play as Malta, but rather control a cursor that Malta follows. Malta can interact with the game world by using the 1, 2, and 3 number keys to contextually interact with her surroundings, similar to an adventure game.

The premise (at least for this game jam version) is that an alien musician is coming to Malta's home, the space colony Neo Kulasai. The musician keeps a low profile and declines most interviews, but Malta is deeply infatuated with their music, and wants to use this rare opportunity to meet up, make a good impression and possibly... find love?

Unfortunately, Malta doesn't quite know where to start, being hapless about romance. She asks her friend Corsica, another robot, who will randomly suggest one of four traits Malta can work on to impress her idol: Cuteness, Fitness, Sociability, and Intellect. She'll also suggest a second trait to keep high, though it's a secondary priority, and the other two can be ignored, as long as they're above a 0. These traits can be trained by having Malta participate in some very basic minigames, one for each trait. And thus the game begins!

The game takes place over 7 days, where Malta requests the player's help to work on these aspects of her personality while also balancing her more pressing needs, like sleep, food, and her general happiness. Malta is a robot and requires charging in the form of sleep, which limits the activities she can do in one day. Letting Malta's energy drain completely causes her to power down, whereupon she wakes up the next day in her bed. Any activity will reduce her energy. Her hunger depletes constantly and isn't tied to any activities, and if you let it empty, Malta gets annoyed and walks herself to go get food, ignoring the player's inputs. Finally, her happiness is tied to another system: requests!

Occasionally, Malta will hail the player and request they do a certain activity that Malta wants to do: eating a certain food (which will alter her stats slightly, possibly to her detriment), playing a certain minigame, or otherwise asking the player to go out of their way to do something that she wants to do, even if it isn't an optimal use of time. Ignoring a request, repeating a minigame, or allowing her energy or hunger to drain completely will all reduce her happiness, and if it hits zero, she decides this whole thing isn't really worth it and the game ends.

The objective, naturally, is to have Malta's stats at their correct levels by the end of day 7. If they aren't, Malta feels too embarrassed and unready, staying home instead and leading to a game over.

I have full confidence I can get this game in a playable state by the end of the jam. It really won't be that hard to program, and because of this gameplay loop of repeatedly interacting with the same content, I think mapping won't be a problem either, since the entire game essentially takes place in one big area. The theme of this game jam is "beyond expectations", something I really struggled with as I was trying to come up with a concept for an entry. The original idea was that you play as a robot girl created by a professor who wanted to create the perfect omelette-making machine, only the girl can do anything except make omelettes. There was going to be a fishing minigame and maybe some kind of crane game, too. In the end, I remembered I already have a robot oc, and thought it would be more fun for me to construct a world for Malta. She's just been a mascot, so it'd be kind of nice to let people see what her personality is like and where she's from.

Anyway, I believe my entry suits "beyond expectations", since the gameplay objective is all about helping Malta grow beyond her ordinary self. I picked 'Neo Malta' as a name because 1) I knew I wanted the space colony to be named "neo [something]" as a kind of reference to Linda3. 2) It's kind of like Neopets, which in turn is kind of like how the game plays, and 3) The focus of the game is on Malta hustling and grinding to improve herself, so it's like "New Malta" but future-y sounding. Incidentally, "Kulasai" is a country in the world I wanted to set all my games in. I did a lot of worldbuilding a for a tabletop rpg campaign a long time ago and decided that I like my projects to share a universe. There's no fantasy ttrpg flavor to Neo Malta or my other stuff like Net Sorcerer Yoruko, but. Yeah!

I think I'm going to try to create a development diary entry every three days, so that there are 10 by the end of the jam. See you all next time!

#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!