Sunday, March 30, 2025

Nay Saga Devlog 13: Final Physical Cards, 3D Prints, Tabletop Simulator, & How To Play Video

The physical game is complete! It was exciting to see all of the cards fully printed and everything in the final box. Other than the final post, this will likely be my last post about the physical elements of this game!

When the box came, I started by counting the cards and making sure everything was there. For some reason a lot of blank cards printed and Pigger and Karol were printed twice. I’m not sure how that happened, but I ended up having a lot of extra blank cards because of it.


I played all of the modes with the final cards and it ended up being a lot more fun with the variety of cards! I also realized I may not have to limit as many traits in the Channel 6 Get Together mode because of the large variety.

Then while I was playing, I decided to put a twist on the last mode, the CourtNay Incident. I made some updates to how it plays (so it will slightly differ from what was written in the rulebook). Now the players play all of their 3+ Trait matches at the same time and can collaborate further to decide which characters they should play the cards on if they fit into multiple columns. To help keep track of Type advantages, I also am using the Numbered Character Tiles.

I also decided that once you match 6 characters, you’ll swap that character out for another one so that you can use cards from your hand that didn’t necessarily apply to any of the Active Characters. This could provide more strategy for players. I still need to playtest a few more times to finalize some of the mechanics and make sure it’s all properly balanced, but I’m liking this mode more with these slight adjustments.

In addition to physical playtests, I also exported the Tabletop Simulator version of the game. I exported the cards and imported all of the additional pieces into the game.

I also set up the game to be more themed. I laid out all of the pieces so each player has their own mini-board to keep their pieces on so they don’t have to take pieces out each round and they can all be set up on the tables at once even if not all characters are in play. This will make it easier for players to start playing immediately without having to sort through a lot.

Then I uploaded it all to the Steam Workshop! It was pretty straightforward to upload it. I took some screenshots so I could put them on the page as well.

And with this, I updated my itchio page to include a banner image and link to the Steam Workshop version, as well as the one on TheGameCrafter.

I ended up doing some video recordings of some of the modes with the physical cards because I wanted to make a how to play video. It ended up being fairly difficult to record all of the parts and come up with the plays and what I wanted to talk about without a real script, but I got some footage of all of the modes. I had to finish the final mode later since my camera battery died before I could finish though.

I also did some test playing in Tabletop Simulator. I mostly just recorded a video for each mode so I could potentially use it for the how to play video in case I wasn’t happy enough with the other recordings. So now I have options for how to explain it.

I decided to go with the physical card video recordings and edited all of those together. I wrote a new script and made the recordings a lot more concise to only about 13 minutes long, which was great!

I re-recorded a few clips for the final mode and then recorded the voiceover. I finished editing it all together and officially finished the video!

I also finally painted my 3D printed pieces for The Gek player pawn! I put some primer on them and then painted them over the next few days. It was a long process since I had to wait for the paint to dry and put multiple layers on it. They turned out okay though.


After about a week or two, I finally finished painting them. I put a lot of layers of paint on them so the colors would pop out more.


So a lot of great progress this time! I’m nearing the end of this project; only 2 more posts left.

Thursday, March 27, 2025

RPG Maker 2025 Game Jam Devlog 2: Game Development

This was my first official week working on my RPG Maker 2025 Game Jam project after the initial brainstorming! I spent most of this week focusing on the actual game creation, so you'll see a lot of mechanics working here, but not a lot of final art. I got the entire game loop working and just a few polish areas left in terms of the game design outside of creating the art.

I started by actually doing some lowkey finding assets. This included fonts, music, sound effects, and plugins. I did some light tests just to see how the fonts could look when used in situations like a logo, UI, or dialogue text.

Then I created the RPG Maker project! The first thing I did was import a bunch of assets, remove default assets, and just get a basic debug room where I could start to test some mechanics.

The first mechanic I got working was saving files out to the folder. It was a pretty basic JavaScript command so pretty easy to implement!

Then I used the Visu Stella Core plugin to modify the naming screen so I could essentially use that for inputting the console text commands. It's limited to only 16 characters, but I'm hoping to keep all of them under that so I can just use this since it's more built-in. I also added some UI and updated the spacing of this box to make it more customized.

I ran into a blocker where I couldn't figure out how to change the font of the text box and I was having an issue where if you press the arrow keys, it prevents you from typing. So I ended up investigating further and found Biud436​'s Input Dialogue plugin that worked better! It also didn't limit me to just 16 characters. I was able to dig through their code and update the CSS  to work with the styling that I wanted.

I tried exporting a version to make sure this mechanic would work when it's not just in RPG Maker and I ran into an issue. It didn't work. So I narrowed it down and was able to get it working in the base folder without the subfolder. I was troubleshooting for about an hour until I realized it was literally just that I forgot a / and somehow it worked without that in RPG Maker but not the exported version. So once I included that, it was officially working in the exported version, so I knew I could continue on with this core mechanic!

Using the Events and Move Core plugin, I set character names to appear above their heads to have more of the chatroom feeling. I got it to work with NPCs pretty easily, but the player was a bit more complicated. I got one working that doesn't move quite as smoothly as the other characters, but did that temporarily for the time being. In the meantime, I asked for some help on the forums!

 

Then I continued to go down the path of creating files and folders. I was able to get a mechanic working where a folder is created after starting the game. This way, it allows for more flexibility so I'm not stuck with creating the folder initially.

I then found a way to move files between folders. I started by testing out moving an image file. Then I made my code more reusable so I could plug variables in for the file names so I could more efficiently reuse the code in a Common Event.

Then I used the KC_CompositeBitmaps plugin to save out image files to a folder. I again ran into the issue of not being able to choose X and Y coordinates, but I came up with a temporary solution where I'm planning to just save out extra files and place them in all of the positions so it's not obvious from the image file which one goes in which order.

Using the VisuStella Options Core as a guide, I then figured out how to force the game into Windowed mode. My plan is to have this happen to further hint to the player that they must look at the folder next.

Then I started to convert my sequence of events into RPG Maker. I was just creating basic maps and rough coding that would progress the story forward. I'm trying to really focus on the MVP with this game, and building the final product in very rough stages earlier on so I can find bugs and things that don't work before the playtesting week at the end. Luckily with the gameplay being more simplified, I'm able to focus more on this.

Eventually, someone got back to me on the forums to help out with my issue and I was able to get it working with the TextPictures plugin instead. It was a bit more of a workaround, but it works!

Then I created some simple buttons for the HUD so I could click on commands like the bringing up the console in the way it's meant to be in the final version. These images are very placeholder, but I just wanted to get the functionality there.

Then I started to lay out the main puzzle areas based on my original sketches. This included the camera hallway and laser hallway. I got some regions in there to plan out where my events would go so my brother could start drawing the final art for these areas.

Then I worked on the camera mechanic. I was able to get it working so you can type a console command, and it changes the directions that a camera and its sight are facing.

Then I started on the laser puzzle, which turned into a lot of research on moving events between two locations. I made a console command that turns off the stationary lasers, and then one that slows down the movement. By slowing down the movement, it turned into much more challenging task than I thought it would be. Because I was using event pages to control this, it would pick up the location the event left off last instead of keeping into account its original position. I eventually got it working through some event commands in the VisuStella Events and Movement Core plugin, but it was a challenge! I also had an issue where it would lag whenever teleporting to the start of the puzzle, so my brother came up with the idea to make the character actually jump backwards instead. I ended up actually liking how it looks a lot better this way than the original method, so I'm glad it worked out better with performance and visuals!

The next mechanics were for one of the later puzzles. I created a sight mechanic where you have to sneak around and avoid being spotted by characters. If you're within 2 spaces from them, they spot you and you must restart the puzzle. I made use of loops to streamline this code across all events of this type.

Then I went back to the camera code. I wanted to streamline it a bit more so I could scale up for multiple cameras, spotlights, and directions. I ended up using string splicing to splice out parts that the player types in the console like the camera number and direction, and applied that to setting the camera's direction and the lights that spot the player.

Then I worked on the kicking mechanic for the stealth puzzle. If you're facing one of the enemies and they're not facing you, you can remove them. This required checking for a lot of directions and I also made a self switch that turns on to remove them. I had a lot journey of figuring out how to make sure they couldn't spot you after their self switch was turned on. I had the code mostly correct, but it was just that I was referencing the event object instead of the event ID, which was throwing errors for me and I ended up troubleshooting that for about an hour. Once I got it figured out, it was a relief and it was all working though!

I spent a lot of time working on the sequence of events in RPG Maker. This meant creating every moment for player input and stringing it all together to make sure it worked together in the game. It went fairly well, and while it took about a full day to do, it mostly worked on one of the first playthroughs with just minor edits to make so I was happy no major game-breaking bugs were in there yet!

I also made a quick puzzle where you can cycle through symbols (currently placeholder character sprites). The player has to match symbols to solve it. This was definitely the easiest puzzle to develop for this game so far!


Then I transferred my sequence of events into Ink. This meant crosschecking my Google Doc with my RPG Maker project to ensure everything was in order so I could properly write the dialogue.

Then, I started to do some import tests to make sure text was importing properly from Ink. This plugin has always been great, but one issue I've had is that the character and text box images flash between lines. So I went into the code of the plugin and made my own plugin parameter to call a specific common event that would run at the end of a stitch instead of at the end of each line. This fixed the issue I was having and works a lot better with the types of games I make!

So to display the character's name in a different font, I also have to use a VisuStella Message Core macro in the character's name to display it that way. That meant that my image files had the macro in them, so I created events that would slice that string so it could just include their name. I also updated it so that just Murou, Dark_Wolf, and Zandra will have portraits, because I'm not sure I'll dedicate time to any of the other characters having them. I'm not even sure if I'll include Zandra in the end. This event also checks if it's in the middle of a stitch, and if it is, then it won't re-draw the textbox image.

Then I wanted to start showing image files for the characters so I could test that those are displaying properly. I'm not planning to do the final art until a couple of weeks after this, so I just threw together some visuals using some of my pre-existing art as placeholders for now. I ended up liking how it looks more than I thought, so I might be able to keep this simple for the final versions in the end.

While writing the script, I had a part where I wanted to draw or animate a scene of Zandra putting her headset on, but realized I probably won't have time to do that. So I recorded a "placeholder" video and quickly edited it to put in there. I spent more than placeholder assets time on this though so realizing it'll probably end up in the final version of the game, but that's game jams for you!


So I spent a lot of time writing the entire script in Ink! It was fun expanding upon some parts, as they do when I'm writing and in the moment. It took a bit longer than I planned because the sequence of events took me longer, but I wrote the whole script before moving on! It took a few days to get it all written out.

Then I figured out the switch puzzle. You can turn switches on through the console and can only have one switch on at a time.


While the puzzle itself is pretty simple, I didn't want to copy and paste those events hundreds of  times for the different platforms, so I decided to create a loop that loops through and creates events based on template events (using the VisuStella Events and Movement plugin). It ended up turning out exactly how I was hoping and it set me up for success with my other puzzles.

Then I placed all of the camera events on the actual map. I made use of the spawned template events so I could update all of them if I end up changing them later.

I also placed all of the events in the final puzzle and my brother drew the final background art for it! So this part was fully playable as well.

And that's everything so far! I'm really happy with all of the progress I made on this project so far. The core mechanics and game loop are all in place, so now the main focus will be the polish and testing. I'll have a week break for travel, but excited to dive back into this once I'm back!

Sunday, March 23, 2025

Nay Saga Devlog 12: Revisiting the Digital Game

I came back to the idea of the digital version of my game because I wanted to flesh out my itchio page and really make this playable online after I put all of this work into it.

So I started by revisiting the story. I wanted it to fit in with the new story I had for the board game so I changed some of it up a bit. I started by brainstorming ideas in a Google Doc and then started to split up Eventures into 5 so I could have a set amount per character/mode. I was splitting them up by how many new characters there would be. So there are about ~150-200 characters introduced into the deck for each one, which should give you a lot to start with for each of the following modes. I still have to figure out the overall story and how to fit it all in, but I do want to likely focus on getting the game playable before I even really get into the story of it all.


For saving out the images, I found out how to save them out of nanDECK as the character's name instead of a number so they're easier to sort through. I can also use that same code to save them as different sizes, which will be useful for the digital version of the game.


I took a little bit of a side track to create a Google Sheet program so that players can access a database to view the main stats about characters and it could pull everything from my existing spreadsheets. So you can click the drop-down menu and choose a character, then their information will populate. I haven’t added the images for the characters yet, but I have a couple. You can view it yourself here!


Then I started to plan out the layout of the screen for the digital version of the game. I took the size I had saved out from nanDECK to ensure they would fit on the screen. Some of them I had to resize a bit, so will have to do some resizing in RPG Maker when I’m actually laying things out. I also planned out the order you’ll click certain buttons or cards so I could think through how I’m going to program it.

I started to plan out everything I’ll need for the digital game from now until the end, and looking ahead, I’m not so sure I’ll have enough time to do it all. So it’ll have to be either pretty rough or I’ll have to scope down the original idea.

So then I hopped back into the digital game! It had been a long time since I looked at any of this, so I had to remember what I was doing with all of the code. Once I reoriented myself, I started to figure out how the hands would work for the other modes. I started with the Channel 6 Get Together (Mode 2), but most of what I was doing there would apply to the others. I started with 1 hand, then used the same knowledge to make 3 hands total (since it’s intended to be 3 players maximum). So I basically made an array for each of the hands, the deck, and the discard pile. It was a lot of loops and arrays.

I started in p5 as usual and then transferred these over to RPG Maker. After the initial arrays, I made the code for what happens when you draw a card from the face down deck. I realized the order would differ a little from my original thought and you’d have to draw a card before you could actually play a card. So I planned to have the card off to the side so it’s technically not added to your hand until you discard something. So I made this code in a way where you first have to check if there are any cards in the deck, and if not, it shuffles the discard pile into the deck. If there is, then it puts it off to the side.

Then I made the code for when you discard your card, after you’ve drawn one. This one required a lot of work with arrays. I had to slice the player’s hand so it would pull the card you’re discarding out into its own temporary array, then it adds the card you picked from the deck into the location you just discarded from using splicing. And finally, it pushes the discarded card to the top of the discard pile. So this was a lot of work with arrays, but I did it!

Then I started to organize the cards on the screen to match my initial sketch. I mostly just got the hand down at the bottom and then set up the onscreen text for the turn order on the left. I made icons for all of the characters and traits so they could be referenced in text as well. I made a system where when you hover over a card, it moves them slightly upwards and when you’re currently moused over, it turns them slightly lighter as well. They also are sent back down when you select a different card.

To show the correct icon next to the character’s name, I made some big if statements that basically just check if the current player’s name matches a string and then if it does, it sets the icon number that’s associated with the character. And then it shows this on the screen in the Extra Windows plugin.

From there, I created the code for what happens when the player clicks the selected card. Basically it stores all of the traits from the hand array into variables that indicate what the current selections are. This way, it can compare against the active card and do a specific action based on that. This feature will be needed for a lot of the game types, so I wanted to store this somewhere. It’s pretty standard and what I had done previously for hands and figuring out which image to show.

Then I made a lot of progress on the visual progression and game loop! I added clickable buttons where you confirm after each selection, and it prevents you from clicking anything else on the screen that you shouldn’t be able to on the active turn. When you select a card, it adds it to your hand on the side so you can choose which card to discard while comparing everything.

Though not entirely visible in the video above, I created a mechanic that if you go through all of the cards in the deck, it shuffles the discard pile into the deck so you can keep playing. It checks the length of the deck array, and if it’s empty, then it shuffles.

I also added the action text that appears when you hover over a card (and select it). It detects if there’s a type match-up and then prints the text based on that. It also detects if there’s no trait matches, and then otherwise states there are no actions.

Then I added the win conditions on if a player has one of all matching traits for the specific traits. And from there, I started to track turns. So the current player’s hand is stored in a new array and it can pull from that each turn.

I set up the CPUs to play against the player too (as you can see above). I used a lot of the same code as I had from Mode 1 for finding the most frequent variables. And from there, I would have them discard whichever card doesn’t have that value. They also choose between the active card or the deck depending on if the active card has the one they’re currently collecting.

Then I spent a lot of time working on the Type advantages. When you play a card that relates to the type of the active card, an action sometimes happens. I created an opponent’s hand that pops up when you have an action to take a card from their hand. I also created a system where it’ll determine which trait the CPU is collecting, and from there, it’ll search your hand for anything with that trait and take that card so it’s not just random which ones are swapped. And then I also made an action that reverses the playing order.

So I only have a couple more Type matchups to code and then Mode 2 will be done! This one ended up being fairly complex, but I’m happy with how it’s coming out. My goal for next time is to finish this mode and then maybe even start on the next mode! Or potentially some of the general menus. I only have about 2-3 more blog posts at most until the due date, so I’m hoping to wrap things up soon!