Sunday, May 4, 2025

Nay Saga Devlog 15: The Final Game Links & Reflections

Over the past year, I've been working on a board game called Nay Saga. This is the last blog post I have where I'll wrap up the process!

At the time of writing this (in December 2024), everything is officially wrapping up!


To start off, here are the final links:

🎲 Play digitally through Tabletop Simulator here.

🃏 Physical version for sale on TheGameCrafter here.


🎮 Mini-digital demo of a few game modes on itchio here.

📄 Information & listing on BoardGameGeek here.

The ideal way this game is meant to be played is with the physical version on TheGameCrafter, but I wanted to make free digital alternatives that anyone could experience. So I'd recommend getting the next best experience by downloading the free digital version of the game on Steam Workshop, if you have Tabletop Simulator. That game's pretty cheap especially during Steam sales and is great for playing other board games digitally.


And lastly, I did make a mini-demo of 2 of the game modes that's available on itchio. I couldn't get it to upload and embed in the browser due to some plugins I was using, but it's available for free to download on itchio if you're interested!


So with this update, I did finally publish all of the pages above! Publishing on TheGameCrafter was surprisingly easier than I was expecting. Because I already bought 2 versions of the game physically, it was just a push of a button really to get it live and up for sale. I previously took precautions to split it out into different versions in case people wanted to buy cheaper and smaller alternatives to it. So that's all been implemented.


With those split out versions, I also bought a version of the game for myself. With the base set, I made a new small box to hold just the base set of cards, and it fits nicely into the bigger box.


And while the 3D printed Gek figures aren't included on TheGameCrafter, I do have the 3D print file available on Thingaverse. And I printed and painted 2 versions which I talked about in a previous post.


And finally, after sorting through everything and making sure it was all ready to go, I wrapped the present up to give to my brother for Christmas.


So overall, this was a really fun project! It was very different and involved a lot of moving parts, but I'm really happy with how it all turned out. I love having physical aspects to these kinds of projects, so this was really cool to have overall. And it's the first time I printed 2 versions of a physical gift so I could keep a copy for myself, so that's fun too.

While I didn't make quite as much progress on the digital version as I originally thought I would, I'm okay with that. It was an afterthought and not really the focus of this year. I still learned a lot about JavaScript and RPG Maker from it and I can use that in other projects, so I'm happy with where I ended up.

My favorite moments were seeing the physical game pieces with my art and characters on it. It just all felt so official! I haven't given the gift yet at the time of writing this, but I'm also really looking forward to giving the gift to my brother and playing it with him and my mom as well. I had a lot of fun playtesting with my friends the one time I did a couple of months ago, so I'm looking forward to playing it with others more.

And with that, I've had 15 devlogs about the process on this project. I'll leave you with some final photos I took of the final cards:


Thanks for sticking through these posts and reading about my process!

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!