Brush it Up! Post Mortem

Ludem Dare 50 Post Mortem

What a jam! It's hard to believe there have been 50 of these things. I've been around since LD32's "An Unconventional Weapon" with a game about a young child waking up in a hospital fighting zombies with a pillow, custom pygame based engine, staying up all night each night. How different this jam was!

Brush it Up!

If you haven't played the game, you can see it here. It is a simple game about brushing your teeth :)

Main View.png

Theme : Delay the Inevitable

An interesting theme this time. I jammed in person with a few people and we thought there would be a lot of games about death, so I didn't want to do that. How did I come up with teeth brushing? Well, my bedtime is usually around 9:30, so when the theme was announced I was sitting on the couch and I realized I needed to brush my teeth! I thought that using the mouse to control a brush would be fun, it reminded me of WarioWare type mini games, and I think I played a flash game back in the day with a similar mechanic (if you didn't know, all ideas were done by flash games back in the day).

3D

3D was a struggle for me. I have always been against 3D games, I find their cameras difficult to control and the whole thing is rather unintuitive to me. But, lately I've been playing Banjo Kazooie on NSO, and it really has been fun to play in 3D! Also, the idea of getting the brush to go in-between teeth was too compelling to pass up, so 3D was decided.

Brushing

The core mechanic of the game. I'm a big believer in having your game (jam games especially) have one core mechanic that the rest of the game builds off of. Platformers have their gimmicks, farming games are about, well, farming, and this game was about moving the mouse to brush your teeth! This immediately hit me with a problem of how that was going to work. Fortunately, I had Math on my side.

There were two problems to solve with brushing: positioning and orienting. These two often come in a pair, and orienting is usually more difficult, Brush it Up! was no exception. Positioning was rather simple, simply raycast from the camera onto the teeth, and place the brush head at the closest intersection.

The idea is to have the brush follow the mouse, trying to get the brush in-line with the movement of the mouse. Orienting was handled with some linear algebra, if you have ever seen the workings of a camera's "look at" function, it is similar to that. Here's the math (using my C# naming convention):

forward = (new_mouse_position - old_mouse_position).Normalize(); up = raycast_hit_result.Normal().Normalize(); right = forward.Cross(up);

And here's a picture so you can see: Brush Movement.png

There is some more logic involved, regarding if the mouse is moving forward or backward in the mouth, and for interpolating the orientation smoothly, but that's the basics!

Overall the brush is my favorite part of the game, and based on the comments I think it resonated with people. The main downside is it is hard to control given the size of the mouth, especially in the back where there isn't much tooth to brush. A better approach could be to have a layered solution, with the brush initially raycasting on a large shell around the teeth, then raycasting down to the teeth from that position. Something to iterate on if Brush it Up! ever gets an update.

Camera

Ah the camera, the most important part of 3D games if the Journey devs are to be believed. Like I said earlier, I've always struggled with 3D cameras, they've always been hard for me to wrap my head around. Brush it Up! definitely had a... clunky camera system to say the least. I wanted to emulate the feeling of a dentist looking down into the mouth, so it was important to me that the mouth itself could not be moved, and the initial main view was looking down into the patient's mouth. And, I did not want the player to have too much freedom in moving the camera around, I really thought it would ruin the internal world of the game, and make it have less of an impact on players. That being said, the players actually needed to see a full 360 degree view of the mouth in order to brush it all.

So, I went with an approach that gave the player four active views into the mouth, one main view and three sub views. The player was also able to double-click one of the sub-views to turn it into the main view. See here: Change View.png

This... honestly did not go well. Definitely not well enough to be proud of the results, although I do think it looks cool. One commenter suggested that it would be nice to have keyboard controls to switch between views, this is probably the way to go. Some commenters pointed out that they really liked having the sub-views, and enjoyed that they could interact with the game world through them, so I don't think the idea was a total loss.

A solution could be a full rethinking of how the players sees the mouth. I'm imagining a dentist and how they use those little mirror friends to be able to see around a patient's mouth. It could be fun to control the mirror friend with the keyboard and the brush with the mouth (or perhaps even use TWO MICE for controls???)

Another solution could be to have nicer camera angles for the player, I'm not convinced the four I chose are the best for the game. Another aspect to iterate on.

Sound

The final note I wanted to touch on was sound. Honestly these were VERY rushed, literally all of it was put in during the final hour of the jam. In addition, I ended up using the song maker from google instead of my usual GarageBand because GarageBand somehow was not installed on my iPad and it is about a 30 minute download.

But a lesson to all you new jammers out there, ALWAYS add sound effects (and music if you can). Even 15 minutes fiddling on SFXR is enough to turn your computer program into a game. I fully believe without those sound effects nobody would have liked brushing their teeth as much as they've commented they do.

Overall

So what of this jam. As always, I had a blast creating something I love with around 5,000 of my closest friends (and a few of my actual closest friends). I got out of my comfort zone and did 3D for the first time, I used Godot's C# implementation (which is much more stable now than it was a year ago), and I learned a lot! The feel of how the player interacts with the game is worth spending even a full day on in my mind, the camera system probably should not be redesigned three times, and even crappy sound effects are better than silence!

Thanks to all who played, rated, and commented on Brush it Up! If you'd like to as well, here is a link.

Feel free to drop your games in the comments and I'll play them :D

Final Image.png