Saturday, April 26, 2025

#No_Hacks Devlog 5: Playable Game & Postmortems

For the past month, I've been working on a game for the RPG Maker 2025 Game Jam. I finished it 2 days before the deadline!

The game is called #No_Hacks. Join Murou on his journey through various console-based puzzles as he strives to reunite with his best friend Zandra in the virtual reality world known as ComplexNet.

 

💾 Download and play the game here!

While I've been documenting my game dev journey through blog posts, I wanted to create this final post to mention some of my final thoughts on the project and showcase some final screenshots. I also took a video of myself playing through the game.

 

Overall, I'm happy with how the project turned out. My pacing went fairly well on this project, and it was a lot more relaxed of a timeline without any crunch really. I spent ~140 hours on the project over a month, which honestly wasn't a lot of time. Compared to the GGJ project which was a weekend and only a week or so of fixing up the week after, that one was around ~102 hours. So it evened out.

Going into this project, I knew I would be out of town for a week during that and that it was during a fairly busy time. So I scoped fairly small and made a game that was fairly easy to make in terms of mechanics being mostly puzzles and dialogue. While I had some brand new things I had never done before, it all was fairly familiar and smaller scope than some of my other games, which made it fairly easy to manage with the time I had.

Speaking of new mechanics, the entire console and saving to files was really new for me. I focused a lot on diving into JavaScript with the new things that I did on this project. I really learned a lot about node.js and how much of it is available to use in RPG Maker. It was fun implementing more of this as I made the game. Almost every puzzle I made ended up having script blocks of code where I wrote pure JavaScript to accomplish some of the more complex puzzles and mechanics. I learned a lot during this.

This was also one of the projects where I felt the most organized with my events, code, and Notion page in general. Using what I had learned from previous projects, I organized my Common Events a lot better. This included grouping HUD events together and using emojis in the titles of the Common Events I was referencing the most so I could come back to them. I also used the VisuStella Events plugin for some of the interactions with terrains, so I reserved some of the earlier Common Events to associate the same numbers with those.

With the HUD, I do want to look into organizing those Common Events a bit more in future projects though. There were sometimes when I would make additional switches or variables when I needed them to show or hide in specific situations, and it did make it a bit harder to manage. Usually this happens during playtesting and after the game is complete to stitch some things together, so I wished I had solidified that a bit more earlier on. With my next game, I want to create a smoother system for this.

That also goes for the character portraits. In this game, because I only had a few character portraits, I dimmed characters in the same image file with who they were talking to. It wasn't really scalable for a larger game, but in the future, I'd like to look into a system to just dim whichever other character is on the screen without having to save out so many different files. It wasn't a priority for this project due to the small cast, but it's something I'd be interested in learning more about for next time!

With the dialogue though, I was able to finally solve an issue I had with dialogue in previous projects where it would flash between characters. This was because I would essentially be erasing all of the pictures between each character talking. I updated the Ink plugin to include a method for erasing pictures just at the end of the stitch and not between each line of dialogue, and it worked out fairly well!

I also made use of tracking variables for story progression instead of switches, to help keep the progression streamlined. Learning from the World Bub GGJ game from this year, I set up all of the dialogue to use debug switches to show temporary dialogue until I had the Ink scripts set up. This way, I could set those to show during playtests but not the final version. I learned this when we had forgotten to unskip a dialogue scene towards the start of the game when last-minute playtesting our GGJ project.

My Notion page was also fairly organized this time around. I was archiving tasks that I didn't end up doing and also keeping bugs in a database and setting their status as I tested. This was the most organized I felt in playtesting and tracking those bugs.

I also made use of GitHub a lot on this project. Usually I use GitHub for collaboration and sharing projects, but this was my first mostly solo project that I used GitHub a lot and I'm so grateful I did. I had a few instances where I had to roll back to compare what I changed in versions of the project, and GitHub really helped me do that easier. I also learned a bit about branches and their usage during this project when I was troubleshooting.

This all goes hand-in-hand with the more efficient decisions I made to optimize and reuse code throughout the project. I've really enjoyed using more Common Events for code I want to reuse instead of copying events on the map. It makes updating them a lot easier overall.

And with this, I used the VisuStella Event Core plugin to create event templates that I could spawn onto other maps, to only have to make them once. I combined this with a lot of loops to loop through and spawn or apply code to multiple events to make it more efficient and overall just easier to edit in the end. This saved me a lot of time and made my code more consistent.

I learned more about some of the other plugins I had been using as well. This included the keyboard commands plugin. I've had issues where every time you press a key, it repeats the Common Event even if you're in a dialogue message or some other event. I finally figured out how to fix that and only fire it once if you're in the middle of seeing dialogue from that event. This is something that will make my games run a lot better!

I also had been trying to make custom options in the Options menu in previous games and never quite got there. This time, with the Kick Assist option, I really researched for a day to get a switch that the player can set in the menu. I still have a bit to learn and it's not perfect, but I was able to set up an event that detects if the Options menu is closed, and then call that switch's status and have it match what's in the menu. So that's something I was proud to make more progress on and can carry over into other projects!

A then a few of the areas I'm looking to improve for future projects is just more polish, which comes with more time! I really want to look into ways to make still dialogue feel more "alive" and animated. Maybe that means character idle animations, animations on text boxes, etc. I'm not sure what it'll be, but I think more effects like that is where I can take my games next. More of those "juice" special effects too, like more sound effects. Just more of those little polish things can make it go a long way!

Lastly, I'm looking to expand into more unique art styles in the future. I was really happy with the overall look of this game where everything was in one coherent theme, but I do feel like this game and my previous one had a feeling of being very "zoomed out". It works really well for these games and the style, but next time I want to make something that looks completely different! I was playing around with a zoom script at first that showed the details of the art a bit more, but it just didn't work with the text labels that I wanted for this game, so that's why I didn't go with it. I might look into drawing small sprites again but using zoom next time to add more focus on the character sprites.

So overall, I learned a lot from creating this game and I had a lot of fun with it! These are just some of the big areas that I learned and am planning to take with me into my future games. But those ~140 hours really taught me a lot and were just a lot of fun overall. I don't know which project I'll be working on next, but I already can't wait to apply some of this to the next one!

Saturday, April 19, 2025

#No_Hacks Devlog 4: Final Playtesting

My RPG Maker Game Jam project, #No_Hacks, is officially complete! I'll probably have 1 more post about this game to showcase the final game with screenshots and post-mortems, but in this post, I'll cover the final playtesting and last updates I made before submitting it.

To start, I finished playtesting all the way through and adding a few minor things along the way while bug testing and polishing. I created a view for my Notion Database that shows the bugs only (or any updates I noticed during playtesting). I also added a few more sorts to help me keep track of which ones I want to work on next and which ones I finished and am just waiting on testing. I also made a category for all of the FINAL updates/ to make/reminders for when the game's done. This really helped me stay organized through all of this.

Then I exported all of the hint image files since the maps are complete.

From there, I did some minor tweaks like updating the camera puzzle so it's more limited to which directions cameras can rotate in, and I added extra dialogue to serve as hints, depending on what they typed in the console, if it's an invalid movement.

Then I added additional tutorial elements to the beginning portion of the game. This included adding dialogue choice options in Inky and then designing what the show choices visual would look like.

I also created an FAQ document that opens if you prompt to view the extra tutorial and need extra help. I also made some back-up measures if things are blocked to ensure the player knows how to progress.

While playtesting, I added more keyboard functionality so you can access all of the menu controls with the keyboard. This way, the game is fully playable without a mouse. I added them to the visuals of the UI as well.

Then I added further instructions for the console to help the player remember what they found in the external files.

And then I added a few extra expressions to make the dialogue feel more involved. It was mostly to Murou, but I did add an extra one to Zandra as well.

So I did a lot of playtesting. Fixing minor bugs and adding quality of life settings. Just overall a lot of polish to get this game out the door. I had a moment where the #Services puzzle just stopped working... and it turns out I accidentally overwrote one of the event pages when I was copying them over. So I went into my GitHub and found the backup before this happened. I didn't want to have to deal with downloading the whole project and making a copy of it, so I found the specific map.json file and then searched for the specific event ID I was missing and was able to copy that line of code from the previous version into my current version. And it fixed it! I'm so glad I've been keeping these GitHub backups or that would've been a lot of work to have to redo that whole puzzle in the last week.

 Another update I did was adding controls to the options screen and custom icons.

Similar to my last RPG Maker Game Jam project, I wanted to add a note about autosaves and controls upfront, so I added a couple of screens at the start as well.

And then I also made a splash screen for myself!

Once it was all in a good enough spot, I asked my friend Jinny to test my game on Tuesday. She was able to get through the game without any game-breaking bugs! Then she helped me a lot to continue to test and try her hardest to break the game. Only one of them truly crashed the game (and that was only after she deliberately went into the game files to rename a folder, which is unlikely to happen!). So I was happy to have thoroughly tested this beforehand so it was fairly hard to completely break. She found a few areas that could make things skipped or slightly confusing though, so I was able to take a lot of notes while she played and come up with solutions. I even added some fail-safe areas to prevent the player from completely breaking their game if they delete files and made the FAQs a bit more prominent in menus and folders.

The biggest area of feedback that was difficult for me to test but was really great to hear from her perspective was a few areas of the game that be clarified a bit more. I was so used to knowing where to go that there was a point that was a bit confusing and I had less hand-holding, so I could help the player with a few more hints there. She was still able to figure it out eventually without my help, but it was a bit difficult. She also let me know which puzzles were too easy or too hard, so I'm planning to look into adjusting the difficulty on those as well.

I ended up deciding to add a few Easter Eggs for some characters from The Nays. I'm not sure if anyone will ever find these, but it was a fun little writing break while deep in debugging and playtesting.

And then I continued to playtest and debug. I ran into a bug where my camera lights would rotate in weird ways and not follow the camera when you reloaded the map. I was trying everything and it seemed random. Finally, I realized their position was changing but not their direction, and the camera's direction was resetting. So I created an event that sets their default positions and basically regenerates the lights to rotate in the direction that the camera is rotated to fix this.

And from there, I did some final playtests and finished the game! The final updates I made were fixing up the keyboard controls. I found out if you spammed the C or V buttons, it would then spam open the menus repeatedly. So I ended up making a second Common Event specifically for the keyboard press version that calls the clicked event, and sets its status to false so you can't repeatedly open them. It seems to work, so this will likely be how I'll be programming my menus going forward!

After submitting the game online, I got feedback about the kick mechanic being the least favorite part of the game. This was also during the beta test, so I decided to do something about that the day before it was due. I created a new Kick button that appears that you can use (in addition to a key bind) to make that easier.

The most challenging part of this was actually coding it to be an option in the Options menu that the player could turn on or off. This meant figuring out how to control switches properly in the VisuStellaMZ Options plugin, which never worked quite how I wanted it to previously. I eventually got it working.

 

This did mean that I had to run a parallel event on this map that calls a common event immediately upon closing the menu though.

I also updated the plugin to add the switch.

And then sometimes had to manually change the config options to match if I ever changed the switch manually. It took me a few hours to figure out, but I learned a lot from this that I'll be able to use in the future for creating custom options.

I also had to add more dialogue to the Dark_Wolf hint at this time to allow the player to turn it on or off when it first appears and also having her tell you that you can change it in the Options menu at any time. I'm hoping this will make that puzzle more enjoyable!

 

I finished and uploaded about 2 days early, so it feels good to be done. I did a lot of playtesting and didn't run into anything game-breaking, so I'm hoping it's good to go!

Friday, April 11, 2025

#No_Hacks Devlog 3: Art & Polish

I took a weeklong break from this project, but when I came back to it, I focused on the visuals mostly! I added a lot of final art to finally polish how it looks since most of the functionality was there.

I started out by setting up the faces so it would dim the character. I also created variables to track which characters are currently talking to each other. There's only ever 2 characters at a time, so I was able to just set variables at the start of the conversation to set who the 2 characters are so the correct image files would display.

The last bit of mechanics I did before diving into the art was the laser puzzle. You can turn lasers off or slow down the faster ones to progress through. And when you bump into moving lasers, the character jumps back to the previous checkpoint. I tried to find ways to code move routes into scripts so I could just change an event number instead of having to add every move route for each of the events, but it ended up being more complicated than I thought, so it didn't seem in scope for this project. I figured that learning how that works would take me longer than just adding those events in, so I decided to go with just using events instead of a script.

Then I finally drew portraits for the 3 main characters! And I updated the UI to be more customized.

I added a pop-up that appears when you receive a new file in the game so it's a better indicator for the player.

Using the portraits I drew, I made the title screen. I added some glitch effects to fit it into the theme of the game as well.


Then I created the art for the clickable buttons to make them more customized.

I made a "login screen" for when Zandra first logs in. I decided to reuse some assets from my Complex.net GGJ project to fit it into the world better.

Then I finally started animating and drawing the sprites! I started with all of the sketches, then drew some of the more static background characters to figure out the style. Then I transitioned into drawing the walking animation for the main character, Zandra! And I got her charsets imported to walk around.

I drew the sprites for the laser puzzle and camera puzzle, then I did some playtesting! I optimized some of my events a bit more to make sure they were rotating properly with the new sprite drawings.

I continued to draw sprites, so the IRCops for the #Services puzzle were complete and able to turn around in different directions. I decided to keep the left and right positions more simple of just moving his head so it would be fewer drawings and also pose a bit more of a challenge to the player where they may not realize where they're facing at a glance. Hopefully it doesn't make it too difficult though!

I also decided to draw another face of Zandra. I thought about changing the UI a bit for this part, but not sure if it's worth spending the time on right now for that little detail.

Using some of my brother's background art as a base, I revised the layout to create the switch puzzle. I also drew the platforms that appear in between based on the state of the switches.

And with that, all of the main art assets were complete! I dove into playtesting after this, and was continuously leaving notes in my Notion page on what needed fixing as I went. I fixed things, left notes, and prepared for the final week of development on this project.

There might be a few more art assets I add as I put the final polish on this game, but it's getting close to the end! I'll continue to do a lot of playtesting over the next week, but after that, the project will be complete.