Midterm Project: Progress Report

Concept

For this project I wanted to make a cafe game. The premise: the player works the night shift at a cafe that’s open 24/7. Because of this, the customers they get are a bit more unusual, both in appearance and behavior (ghosts, skeletons, wizards, etc). Instead of asking for specific items like a latte or an espresso, they describe their mood and the kind of drink they’re looking for, and the player has to figure out what they actually want.

Each ingredient has mood tags: energizing, bold, calming, comforting, mild, sweet, and refreshing. Each customer secretly wants certain tags. When the player serves a drink, the game checks how many of the customer’s tags were met. If all of them are met, the customer is happy; if only some are met, they give an okay reaction; and if none are met, they’re disappointed. The better the drink, the bigger the tip.

User Interaction

  • Title screen: Start, How to Play, and Settings (where music can be turned on or off)
  • Cafe: a customer appears with their order in a speech bubble. Clicking the bubble takes their order.
  • Kitchen: the player clicks up to 3 ingredients to add to the cup. The layers blend together in the cup as they’re added. Clear empties the cup, and Serve finishes the drink.
  • Reaction: back in the cafe, the customer sips the drink and reacts, the tip goes into the tip jar on the counter, and the clock moves forward an hour.
  • End of shift: after 5 customers, the sun starts to rise and the shift is over. The end screen shows total tips, with options to Play Again or go Back to Main.

Design

I’m using a gameState variable to switch between screens (title, instructions, settings, cafe, kitchen, end), and a resetGame() function that resets the tips, clock, and customers so a new shift can start without restarting the sketch.

The main classes are:

  • Ingredient (name, color, tags): display() draws it on the counter, and isHovering() checks if the player is hovering over or clicking it.
  • Cup (x, y, ingredients, max of 3): add() adds an ingredient if there’s room, clear() empties it, and display() draws the cup and blends the ingredient colors into layers.
  • Customer (name, order, wants, reactions): display() draws the character and their speech bubble, score() counts how many wanted tags are in the cup, and serve() scores the drink and starts a timer for the reaction.
  • Button (x, y, label): display() and isHovering(). Used for Start, How to Play, Settings, Clear, Serve, Play Again, and Back to Main.

Uncertainty

Personally, the part I was most worried about was the visuals. I felt the classes and logic would work out with trial and error, but making the game actually look good and cohesive would take more effort.
I initially tried looking for character sprites. However, the only viable option had to be purchased. In addition, the characters were drawn in a pixelated style, I was worried that this wouldn’t match the vibe of a hand drawn backdrop. So instead, to ease this worry, I decided to draw each character myself.
Here are the characters:

Finding a backdrop was also a struggle, but I eventually found one on Magnific cafe image. Its simple, cartoonish style matches the characters well. To make it feel like the night shift, I will add a dark overlay in p5 that slowly warms toward a sunrise color as the night goes on.

Leave a Reply