11 / Devlog, July 14 '24


GitHub: https://github.com/nebulousmango/All-Filler-No-Killer

Document references:

  • Spec: link
  • Game design doc: link
  • Production timeline: link

When making a new level


July 7 progress
I'm done writing the third level, and setting up all the level scenes. I added a couple additional effects here and there in the level scenes (like having a little animation play next to the scoreboard when either characters earns a point), and made some animation changes to the second cutscene. I added a skip button to both the cutscenes too.

I've also implemented the dialogue for the first and third levels. I've documented all the steps in the game design document, so it'll be easier to remember to do everything if I work on new levels later. For now, most of the implementation is done except the dialogue text itself: I've set up some level backgrounds, set up the level-specific character sprites, set the relevant level bool, set the exposed reading timer, and set up auto-size for the TextMeshPro components. The rest of the game is all done too!

What's left now is audio: I want to switch on the "hmm" sound effect I'd originally set up with a series of tennis ball sound effects. I'll implement this over the next week. And the other three level dialogues will be done by the end of the month. Once all five levels and their two cutscenes are done I'll make the game builds and test them for bugs. And then no more devlogs!

Writing the dialogue is proving to be a little tricky, because we're not using legitimate branching paths. Instead of having relevant Opp responses based on which of the three dialogue options you choose, the Opp response after a multiple dialogue segment is the same for all three options. Which means that the conversation is less coherent, because it doesn't feel like the other character is really listening to you. I'm structuring all the multiple dialogue texts in a way that makes responses to them uniform, even if the dialogues themselves are said in different tones and with different intents.



July 7, later:
Fixed some things here and there:

  • Added a persistent save system
  • Disabled spacebar spamming during animations
  • Added press spacebar functionality during multiple dialogue segment
  • Changed audio for paddle-ball collision
  • Added context popup that plays before each level
  • Fixed minor problem with Ball object in SwitchOnPong coroutine

Persistent save system
I know PlayerPrefs isn't recommended, but it was the simplest thing to do and I had only one value to save from game sessions. I'm using an integer to store the number of levels completed in each session, and saving that to PlayerPrefs. When the player exits and restarts the game, that integer is used to set the bools in the IsLevelComplete array to true. 

If you play through the first three levels in one setting and exit the application, the PlayerPref int is stored as 3. When you load up the game again, the first three bools in IsLevelComplete will be set to true. At least that's what's supposed to happen. It took so long to get it properly working because I was using one integer to do two things: it was both changing the values in the IsLevelComplete array and changing based on the values of the IsLevelComplete array. I added a second integer to store the PlayerPrefs int. I don't know how to properly articulate it, but it fixed the problem. Sometimes it feels like magic, but I think if I properly learnt how logic worked I'd be able to debug these problems much faster. Like another thing I keep doing is setting a value somewhere and then forgetting to reset it. So many times, a function hasn't worked because I set a bool to true and then forgot to s et it to false so I could use it again when the function ran a second time.

I tested the save system with some builds, but this is something I should check more thoroughly during the playtesting phase.

Disabled spacebar spamming during animations
This was a problem I should've fixed sooner, but I could spam the spacebar during dialogue segments and it would play havoc with the activated game objects and mess up my whole structure. I added a little bool system (bools again, bools are carrying this project) to disable spacebar keypresses when animations play. In all those coroutines in the StoryManager script where I've set a waiting time for animations to finish playing, I've added an animPlaying bool. It sets to true at the beginning of the coroutine and false to the end. And then I added animPlaying as a condition to the spacebar keypress IF statement in Update. Makes my testing a lot cleaner too.

Added press spacebar functionality during multiple dialogue segment
I added functionality to end the timer in the multiple dialogue segment if you press the spacebar. Initially I had it set up so that you'd have to sit through the timer whether you wanted to or not. Now if you've made your choice and you don't want to watch the timer count down, you can press the spacebar and start the pong segment right away. Something else that makes my testing go smoother.

Changed audio for paddle-ball collision
I used to have a bunch of "hmm" sound effects for every time the ball makes contact with a paddle, but I switched it out for some sounds of a tennis racket hitting a ball.

Added context popup that plays before each level
Each level (except the first one with Gab v Harpo) has a popup with a little context about who the two characters in the conversation are. I finished the illustrations and implementation for the content for levels 2, 3, 4 and 5. 


Fixed minor problem with Ball object in SwitchOnPong coroutine
The coroutine in which I started the pong segment had a brief (like 0.1 of a second) moment where the ball object was active but not doing anything. It was fine initially, but I was changing some of the gravity scale settings and the ball began to fall for a moment before returning to its starting position and then starting to move.

It was easier to just disable the ball object's physics in that 0.1 second and sort out any future problems, so I added a line to make the rigidbody kinematic before the WaitForSeconds, and set it to not kinematic once the wait was finished.

Also Unity keeps crashing when I search for things in my project! I remember reading about it happening to somebody else and wondered what all of that was about. Now I see what they mean. It crashes so often! Can't get anything done.

July 13
Made some changes to the project:

  • I fixed the values of Gab's multiple dialogue options for levels one through three. It looks like this in the documentation and in the Unity inspector:


  • I added some new physics in an OnCollisionEnter2D function in both the Paddle scripts, to make the ball's bounciness less predictable.
  • I went over the dialogue text for the three complete levels and made some changes here and there.
  • I added sound effects to when the speech bubbles play, and when you're cycling through the multiple dialogue options.

The first three levels are in shippable condition, and ready to playtest for any remaining bugs or whatever.

July 14
Done fixing things up! I've made the desktop and WebGL builds for the first three levels, and will work on the other two levels' dialogues when I've got the time. The game I've got on my hands now feels underwhelmingly smaller than what I thought it would be after all this work. But finally I can say it's done and dusted! And move on to the next thing.


Get All Filler No Killer