Global Game Jam 2025 Devlog


I participated in my 10th Global Game Jam project over the weekend! We told ourselves we would try to be a little less ambitious with our project... and maybe we were in some aspects. But this was definitely our most complex project yet! I spent a bit of time debugging and doing final playtesting after the GGJ so it's now officially ready to play.


Monday - Tuesday: Project Setup & Concepts

So to start out, the theme (bubble) was revealed on Sunday. I created our Google Drive folder, GitHub repository, and empty RPG Maker project first. I like to get these all set up before we officially start so we can dive straight into development during the actual GGJ time. I set up our Google Docs and was throwing ideas in there as I thought of them.

In RPG Maker, I played around with some of the plugins while setting them up. This included a new plugin from VisuStella that allows for quick menu creation! And a new feature in their Events Core plugin that allows you to hide charsets in the game itself but view them in the editor so it's easier to tell what is what while editing.

Then I started to look up inspirations. For some reason I was really inspired by SNES and GBA games to have an "older" feel where it shows small character portrait facesets instead of the higher definition ones I usually make. Maybe it's because I've been playing so much UFO 50, or the fact that we were considering a tactics game and most of those have this style.

So then I sketched out some ideas in my sketchbook for potential dialogue boxes and map layouts. These are all just very rough ideas I did while waiting for the weekend to come so I could start working on the project itself.

I decided to see if there were any plugins that could help with this. I found one, but couldn't get it to work, so I decided it'd probably be easier to just use the usual face image setup, to technically not use facesets, but it'll look like them. So I did some light tests to find the following combination ideal: VisuStella Message Core (for positioning and sizing the box), LWP_Ink (for setting the character name/expression and common events that play before and after messages), and Eli_Pictures (to set the picture to show as a combination of their name and expression). This is how I've shown character portraits in games like Compass Nays previously, so it worked well here too. I threw some placeholder assets in just to test out the combination and positioning.

I played around a bit with controller mapping since I saw that was a new VisuStella feature added. It was a bit more complex than I thought it would be, but I managed to at least have the buttons show and get the remapping system to work. I used the VisuStella icons too since they already had those icons in there, so I wouldn't have to make them myself. I couldn't figure out why the D-Pad wasn't working and I could only use the stick though, so that'll have to be for another time.

I spent some time just organizing my RPG Maker notes about plugins and remembering where everything is so I could be more prepared for the actual game development.

Then I read the World K Eventure that I wrote about 10 years ago and it inspired me to come up with more ideas. I started to think about a system where you challenge characters, and they join your team to add to your abilities in the next battles. So I came up with a few ideas for different menu screens and how that information could be displayed.

We chatted a bit over text about our ideas and different inspirations. At first we were thinking of doing a classic Tactics game, but then we started to think we wanted to do something beyond that and more unique. So we figured we might add some kind of "card" and "deck" mechanic to it.

Wednesday: Brainstorming Session

We had a voice chat night where we talked about ideas and they started to evolve! We decided it would still have some tactics movements, but be more focused on the card aspects. Instead of being full maps to explore, it would have more of an overworld and be focused on the battles. So we brainstormed a lot more. We made a full asset list after coming up with more ideas and inspirations.

Then I did a few more sketches. Mostly trying to figure out the battle system and then also coming up with some ideas for the shops, the victory screen, and what the overworld could look like.

And from there, my brother looked up some royalty music we could use, since that's something we usually save for the end, so thought it'd be good to get a headstart on that. Then I started on the card database. I figured out the basic fields that we'd need for the cards and put together a rough list of a bunch of cards (many of which we likely wouldn't get to).

So we had a really successful brainstorming session and made a lot of progress on our ideas and overall direction!

Thursday - Friday: Sprites and Battle Setup

I started on the first overworld character sprite for our main character, Piko. I drew the front walk cycle first, then proceeded to draw the other directions. I exported the sprite sheet and then imported it into RPG Maker.

Then I finished setting up the framework for the nanDECK files with very placeholder visuals so we could quickly update them once we have a layout. I based a lot of the code for the nanDECK file on the one I made for Nay Saga so it'd go faster.

Then I imported the Google Sheets data into RPG Maker and set up some of the basic Database elements so we could finalize them later.

Then I drew the face drawing for Piko! I decided to draw a few expressions of him in case there's time to implement that. I also added more details and some shading on him since he's the main character.

I finally started on the game mechanics. So I started with making a grid system. I researched Tactics plugins a bit, but none really did what I wanted it to do and would be too involved to learn for the GGJ, so I decided to just make my own with events.

So I set up each of these spaces that takes up about 3 tiles with 1 tile between each of them. So I just had to have the enemy move 4 towards the player to make it work.

Then I started the long endeavor of the card mechanics. I mostly took the bones from my Nay Saga card game, but was trying to strip it down to only what we needed and modify it to work for this game. I created a mechanic where you can only use 3 bubbles per turn and cards discard as they're used. It was still a little rough where the deck wasn't removing cards and the cards wouldn't remove from the bottom after being used, but it was a starting point!

Then I took a break from programming to work on some of the character faces. I wanted to do more details like shading how I did with Piko, but realistically I knew there probably wouldn't be time, so I tried to finish them pretty quickly.

Then we went to bed around 6 for the night so we could rest and be ready for the next day!

Saturday: Character Face Art and Final Card Mechanics

I got a later start on Saturday because I wanted to make sure I got at least 8 hours of sleep on Friday for what was to come. I started the day by working on some of the character faces so some of our characters who are more central to the story could have portraits. I had fun with the ghostly effects on Poproy.

Then I spent a lot more time on programming the card battle system. The cards now visually remove when you use them and they add to the discard pile. Then, at the end of the turn, the all discard.

I took a break for dinner, then came back to work on more character faces while my brother was working on the lighting system in the game. I decided to actually add shading since it really adds a lot of polish to them. It also meant they would take slightly longer to finish though.

Then I spent a lot more time on programming the card mechanics. It was to the point where I was mostly writing pure code instead of working in RPG Maker. My brother and I hopped on a screen share to figure out the discard, drawing, and shuffling mechanics in p5. It was really helpful to talk through the code together and collaborate on this.

I added that code into the project and finally finished the basic mechanics. My brother finished the card designs and added some of our existing art, so I added those to the game as well.

Then I made a Common Event that sets up a system where we just have to change a variable value to call this event and do these actions. This event basically pushes that card ID into the deck's array and shows you a message that you obtained the card. This made reuse of it a lot easier.

Sunday: Story, Battle Loop, and Final Touches

Not that I slept Saturday night, but transitioning into Sunday, I started to finalize the character art. I finished most of the character art and used nanDECK to auto-populate the cards with the final art and text that would appear on them. My brother designed the card layout though.

I also made the title screen art. I saved all of the assets out and then implemented it into the game using the title plugin.

Then I finally started on the dialogue for the game. I used Inky to write all of it and started listening to the music my brother found earlier to get in the mindset. I picked out which songs would play at which parts between all of the options he downloaded and then had something there for each part along the way.

Then I implemented the HP bar for the player and enemy. I mostly reused what I made for Compass Nays originally and reused for our Biggert City Battle Show game last year.

I added an end to the battles with some text boxes that indicate what rewards you received and that you've won or lost, depending on your health.

My brother added the dialogue boxes and then I added the Ink aspects to the game so the dialogue was implemented in the parts they were supposed to be.

I didn't have time to draw any character sprites on the map, so my brother edited the face drawing I did of Chilzby to add him to the lounge on the screen.

I added some onscreen buttons you could click to save or open the options screen and view some of your stats.

We were really just pushing this GitHub project back and forth and doing final bug fixes from here! It was definitely a race to the finish. By the upload time on Sunday, we only had 1 battle actually working, so that's what was showed during our location's livestream, but it was at least working up until that point!

Monday-Tuesday: Bug Fixing

As usual, our game had quite a few bugs because we didn't have a lot of time to playtest the full game loop. We were playtesting a lot of mechanics as we were making them, but it wasn't all fully put together until late Sunday. So I spent most of the day Monday fixing bugs that we found during those final hours.

I made a new switch that'll help internal testing where if it's on, it skips all of the dialogue in the game. This way, I could still test the game's switches/variable progression, but more quickly. I did it this way so I wouldn't forget to unskip the dialogue in any spots later for the final builds. I want to do something like this going forward for projects so it's easier to export builds without these types of bugs.

Then I was troubleshooting all of our biggest bugs. I finally got more than one battle to work. I think it was due to my health bar system or because we didn't properly reset all of the variables at the end of each battle. But then I ran into an issue that I thought was unsolvable until I looked for external help.

After each battle, you would mysteriously lose cards. I eventually found out it was because I was using a deck variable that tracks cards in the deck. I found out that even when creating a fresh variable, that variable would magically change even though I didn't reference it at all other than initializing it and when the array for the deck sets its own value equal to those.

Well then I found out that apparently if an array takes the value of another array, it will change both of them if you try to change one! And I found out this is apparently something that just happens in programming.

So I dove into p5 and started to test. First I tested and it indeed was the same and not an RPG Maker issue. So I tested manually pushing values one by one from one array to another, and that worked. So I then put together a loop that loops through the other array's values and manually pushes every single one of them so they were different. This fixed my issue and it was such a huge breakthrough!

So I ended up spending the rest of the day debugging the project and finally got a working build from start to finish. On Tuesday, I ended up adding some mechanics after everything was working. I added battle animations to the attacks using the built-in defaults but with custom sound effects.

I also updated the Player/Enemy Turn starts to be image files that now appear in the center and tint the screen. I added a bubble animation for the progression symbol at the bottom too.

I moved the text boxes in the battle to be in the top-right corner using the VisuStella Message Core plugin and made a box for it to fit into.

And then I finally added the card database! It was pretty easy to copy over from Nay Saga. I just tweaked a few things to get it to work with this game.

And from there, I uploaded on itchio! The only feature I added after that was the shops. So you can buy more cards by using the money you earn.

Post-Mortems

I learned a lot from this project and as I mentioned earlier, this was definitely our most advanced GGJ project. While I'd like to plan for next time to be a scoped down game, that was also a goal for this year... but we were just so passionate about the project and having fun with it that we didn't scope everything down. We did anticipate some areas wouldn't make it in and scoped down a bit as we went though, so it was at least going in that direction!

Something we started to do on this project that I want to continue is reusing code through Common Events as much as possible. We did this with our battle system. So once we finished 1 battle, we were able to really scale it up to 10 without much effort. The same goes for cards. Once we had the mechanics in there, we could reuse a lot of those features without a lot of extra work (for the same type of card at least). This was a really smart way to work and it saved us a lot of time in the end.

And speaking of reusing code... I had a lot of the fundamental code written out from Nay Saga already, so that was a huge time saver. I also reused code from Compass Nays and Biggert City Battle Show. It helped me drop mechanics in and fit them with our specific game better. I do wish I had more time to organize the Common Events and variables a bit more though, because there were times when I forgot which ones were in which order and the variables were kind of scattered. So I'd like to spend more time organizing that in the future. 

And while I had those basic mechanics down, there was a lot that needed editing for this specific game. So using p5 for quick JavaScript functions also saved a lot of time. It was a lot quicker to prototype and iterate through. So that's something that I really learned from Nay Saga and brought into this project too. Troubleshooting the code also went so much faster when we were working together. So I really liked that if we were stuck on code, we could just look at the other person's screen and help them through something complex.

Another bit of reusing we did on this project was reusing art assets for the preliminary card art and art that we didn't get to in the beginning. It was a great way to have something there that was technically finished and our own art, but just not made for this project yet. That made me less worried about working on the art before core programming mechanics were done, since our placeholders weren't super rough and in need of replacing. We ended up replacing it all by the end, but it helped us move along on the core mechanics better and I wasn't as hesitant to make in progress posts along the way.

I talked a bit about what I learned about arrays in the section above, but I did learn more about how those work and what you can and can't do with them. Another post-GGJ lesson I learned was making use of a playtest switch. We always end up missing something in our first upload because it's crunch time, and we only notice when our GGJ site organizers are streaming our game. So I'd like to prevent that earlier. Last year we learned from that and made sure to make a list of a few things to check before the upload (the player start position, unskipping the title screen, etc.), but we didn't have unskipping the story dialogue in there. So making use of a script that only skips during playtesting will really help with any last minute uploads we need to do.

And with that,we really get caught up in the mechanics and making sure everything is working independently and playtest a lot there, but we didn't spend enough time playtesting the game as a whole. Usually the game loop with the full writing and progression is done fairly late in the process, so we don't really test the full game working together until very late. This year that led to some real game-breaking bugs. So if we're able to even put some placeholder ink scripts in there and get that progression going earlier on, that will help us spot any big bugs like that before we're in the process of uploading our final version.

It was really helpful that we found our music earlier this year though, because that's usually one of the things we rush towards the end. It helped with writing the dialogue in the scenes.

When I was working on bug fixes and finalizing features afterwards, I made use of more sound effects, but that's something I'd like to bring earlier into the process. It really adds more polish and that "juice" to the game, so it would be good to add those earlier.

I also replaced various other assets at the end to finish up the polish. That included images like the "window.png" where I made note of which area highlights on menus but doesn't have a background. This is always something I forget when I'm quickly removing the default background.

So overall I really enjoyed this project! I was worried we weren't going to have a finished project, especially when we had game breaking bugs towards the end. But because of how easily we could scale the project up, it ended up being a complete project! And I was able to get all of the game-breaking bugs fixed within a day after, so I'd say that was pretty good. The Global Game Jam continues to be one of my favorite yearly traditions and I've learned so much and had so much fun. I can't wait to keep working on fun game dev projects! Thanks for reading this post, I really like reflecting after big projects like this to see how much I've grown over the years. I hope you learned something or at least enjoyed hearing about my process!

Files

World Bub_v1.01.zip 177 MB
14 days ago

Get World Bub

Download NowName your own price

Leave a comment

Log in with itch.io to leave a comment.