After a couple of weeks of solo work on updates to our GGJ project, Macca Masquerade, we met up for 2 weekends to finalize the game and do some final polish. And then we individually worked on it a bit and did some final playtesting in a final session together.
We officially finished Macca Masquerade! We did a lot of debugging and adding new features, so in this post, I'm going to talk about the final polish and steps we took to wrap up this project.
💾 Download and play the game here:
At the start of the first weekend, my brother worked on getting ranged attacks set up for the player, so I helped get some of those events set up. Then I drew the art for Maester Beckon, as he seemed like the next most important character to the story.
Then I helped fix some minor bugs with the battles and mask equipment menus. I also updated the enemy's attacks that don't have a range to now display on the player's space, because it was previously not showing any.
I worked on some polish updates next. I added animations to all of the attacks, when the mask cabinet appears, and when you run out of MP. I just used the built-in ones for now, but I think it helps make the battle a bit more exciting.
Then I made some updates for controllers. My brother tried out his PS4 controller and it was working for displaying the buttons in our custom menus, but not the Options menu. So I made some updates to display that in there.
We also thought the button icons were a little small, so I went into the core files and updated the icon size just so it would be a bit bigger. I had to reposition everything because of it though.
Then I started to work on the individual stats for the masks. I wanted to make them more unique with different stats, so I came up with some base stats like Attack, Defense, and HP per mask, and then Attack multipliers per attack.
I linked these stats to elements in the database and was finding out which parameters were available for reference by typing objects into the console. I found that using class stats for the masks and then skill stats for the individual attacks made the most sense, so I set those up in the Database.
Then I set up the Common Event and streamlined it a bit more so it would set the target and then if there's nothing special that needs to happen and it's just an attack, I set it to move on. And then at the end of every attack, it calls a Common Event that generalizes the attack damage formula so it's easier to keep track of.
I spent a day working on movement ranges. I updated it to allow for you to move 1, 2, or 3 spaces depending on which mask is equipped. It took me awhile to figure out the right ranges and spawning tiles, and I even ended up redoing our movement code so it's more simplified and only checks for the horizontal or vertical axis instead of both.
This fixed the bug where you could move diagonally, and then I started to actually add the movement code update to the specific masks. I tested it out with Meushi's and got it working as intended.
This led me to realizing our base attack code was only really set up for Kali's mask, and that's why none of the code was applying for other masks, even if I added them. So I updated that to optimize it and scale up. I'm still working on getting individual attacks programmed in.
I had a long backtrack to getting the movement range working. For some reason it worked in my tests, but when I actually tested it in battle with the mask abilities, it didn't work. So I had to go back to the drawing board and essentially rewrite all of the code and logic. I finally got it working though after a long troubleshooting night.
I took a break from the programming to make some quick little images like the game over screen and then updates to the options and title screens. These were mostly to update with clearer controls or replace some of the quicker defaults in there.
After another day of working on the project, we tied up a lot of loose ends. I started by implementing many of the different mask attacks like the poison and healing ones. All of them were working for the player other than the traps, and I got most of them working for the player too.
Then I worked on the enemy movement system and trying to make the enemies smarter so they wouldn't always move towards the player. There were still some bugs, but they would at least use attacks sometimes before moving!
I also updated the enemy turn icons to use the specific enemy you're fighting against instead of them all using the default Snull ones.
And then while my brother was working on the traps, I was helping with troubleshooting, but also drawing all of the remaining characters. I finished all of the face drawings of the characters.
And from there, I finished the character select drawings too! I added all of them into the game so they're officially all there.
Then we decided we really just wanted to wrap this game up. We had so many wishlist things left and a lot of polish we still would've liked to do, but we had a lot of other projects we wanted to work on, so we really just decided to give ourselves a deadline and finish it.
So during that time, I finally added the defeat animations for all of the characters. Once you defeat an enemy, you unmask them and take their mask, which you can use in battle. I drew the faces previously, it was just a matter of saving assets out to use here.
I also fixed some of the abilities like Meushi and Orangin, where their movement range wasn't set up yet. I did a pretty rough string of events to basically detect if they're out of the grid or going to move onto the player. I probably could've made this code a little more efficient, but I didn't want to spend too much time on it while we were in our final days of wrapping up the project.I worked quite a bit on trying to fix up the movement overall. I was able to figure out how to prevent the enemy from stepping on the Mask Cabinet space and I updated some of the AI to be a bit smarter with the mask abilities so they wouldn't necessarily always use the ability that costs 0.
Then I updated the battle UI. Some of the buttons were previously overlapping and I wanted to rearrange the buttons so they'd be arranged like you'd see on the keyboard or controller. So I ended up redesigning the buttons a bit to work with that.
When I was making the buttons, I came up with the idea that if you run out of Mask Points, it should gray out the mask abilities to further indicate that you can't use them until you refresh your MP. So it changes the color if that's the case.
I also wanted to update the challenger select screen's HUD to match the battle and the rest of the game. I originally made it before we had done any of the other UI and I wasn't really happy with it. So I updated it to meld it into our theme a little better.
Then I wrote the rest of the story in Ink! There were a few characters I hadn't written story parts for yet, so I wrapped all of those up and then tested the full story.
While doing this, I was fixing some bugs and things that came up with the story, since I wasn't fully testing that. I also added blur effects to the background during the character dialogue to further focus on the characters in the foreground.
Then I finally fixed the bug we were having with the movement squares not showing up on the left after the first battle. I ended up just adding it to call again with a wait and switch because I think it was the timing of how it was loading. This seemed to fix it.
I spent a lot of time working on the enemy AI to try and make it smarter. This involved a lot of condition checking. Essentially I didn't want them to just stop moving if they were backed into a wall. So now it checks if they can't move away from the player and if they're against a wall. If that's the case, then they move the other direction. For example, if they're up against the left wall, they can still move up or down. This helped make them move around and chase the player a bit more and prevent them from using their non-mask abilities.
I did a bit more balancing and updated the values to higher numbers to make the attacks feel more impactful and fun. I also updated the start positions of the enemies so they're different for each character to make the battles a little less predictable.
We did one last night of bug testing and got almost everything finalized and working! We ended up finishing the final tests offline in the next couple of days and then officially finished the game. After about 190 hours, the game was officially done. So while we took about 4x as long as the typical GGJ weekend to finish it, this was the most ambitious GGJ project we ever created.
We're happy with what we ended up creating for this project, but we both agreed that we're looking forward to a more simplified project next so we can scope back down and scale it back next time.
I learned a lot while working on this project, and I'm really looking forward to using that knowledge going forward into my next projects. Thanks for reading through my extended GGJ26 journey this year!




























