Cafe Terrace : Unreal Game Engine 4 (Blueprint)

Cafe Terrace is a multiplayer game I worked on with two other classmates based on a painting by Van Gogh, Café Terrace at Night. The game supports two players: each session's host plays as a waiter at the cafe, and the second player who joins plays as a mouse. As a waiter, your goal is to complete all the restaurant orders as they appear across the top of the screen. There is a critic at the restaurant, and your goal is to keep the critic happy throughout the evening. If you miss five regular customer orders, you lose the game; if you miss a single one of the critic's orders, you immediately lose. Meanwhile, the mouse is trying to gather crumbs from around the restaurant to bring home to feed his family. The ultimate goal of the mouse is to get the restaurant shut down by running in view of the critic; the mouse must deliver a certain number of crumb "orders" to his family before he can run towards the critic. When the waiter is not holding any dishes, she can switch to holding a broom and sweep up crumbs on the floor to prevent the mouse from reaching his goal, and if she is close enough to the mouse, she can hit him with the broom to send him back to his home and force him to lose all the crumbs he is currently holding. I am responsible for implementing most of the game logic of the game, including the order queues, user interface, waiter logic, mouse logic, and the game's sound effects.

WAITER AND MOUSE ORDER QUEUES   ————

Orders are generated using a series of timers; every x seconds, a new order is generated for the waiter, and a new order is generated for the mouse. The timer interval for the waiter orders gets shorter as the game goes longer. Each order is randomly generated to be one of 3 food types (ratatouille, soup, or baguette for the waiter, and bread, berry, or cheese for the mouse), and each of the waiter's orders is also randomly set to one of the tables 1 through 10. Each order has an expiration time, and once its timer runs out, that order will be considered "missed." Critic orders are generated separately from the other waiter orders; they are set for Table 11, and upon expiration, will cause the waiter to immediately lose (and the mouse to immediately win). The mouse can miss orders without consequence, but the waiter will lose after missing 5 customer orders.

USER INTERFACE   ————

Orders appear across the top of the screen. In the top-left corner of the waiter's in-game interface, there is a "Current Rating" that acts like the number of lives the waiter currently has. When the rating drops to 0, the waiter has lost. For both the mouse and waiter, the orders across the top of the screen have a bar showing the time left for the order to be completed, and when orders are about to expire (10 seconds remaining), the order turns red. If an order is completed or expires, it disappears from the top of the screen. Along the bottom of the screen for both players is a progress bar showing the number of orders fulfilled vs the total number of orders needed to win the game: the waiter wins the game after completing 25 orders, and the mouse can run to the critic to shut down the restaurant after completing 20. The mouse has a list widget on the left side of the screen listing all the crumbs he is currently holding.

WAITER LOGIC   ————

The waiter can hold 1 item at a time: either a dish or a broom. The waiter can pick up and put down items using the spacebar. If the waiter is standing within range of a dish to pick-up, the dish glows, and she can pick it up. Once the dish is picked up, the waiter can put down the dish by either delivering it to a table or discarding it in the trash can. Both the tables and trash can will glow when the waiter is in range. When the waiter is empty-handed, hitting spacebar will allow her to hold a broom. While the broom is held, the waiter can "sweep up" crumbs around the restaurant by walking over them. If the mouse is within a certain range of the waiter, the mouse will glow and the waiter can hit spacebar to hit the mouse and "reset" him back to his starting corner without any of the food he just collected. Hitting spacebar again while holding the broom will put the broom away, making the waiter empty-handed, and this will allow her to pick up a plate once again.

MOUSE LOGIC   ————

The mouse can hold five items at a time: whenever he runs over a crumb, that crumb is "collected" and added to the bottom of a list of items on the left side of the screen. The top item is highlighted; when the mouse tries to collect a sixth crumb, the highlighted item is automatically dropped from his current list of collected crumbs. The mouse can hit spacebar when he is standing near his family, and this will drop all the crumbs he collected and allow him to "feed" them. Once those crumbs are dropped off, that "order" is considered completed. Every time the mouse is hit by the waiter's broom, he is reset to the bottom left corner where his family is and his carried items are all dropped. To win the game, after the mouse has completed all his orders, he must run to the critic sitting in the back corner of the cafe and hit spacebar to climb on to his stand.

SOUND EFFECTS   ————

I added the looping background track to the game and set up a few sound effects: a "ding" sound plays when an order from the kitchen is ready, and there is a ticking sound that lines up with the 10-second warning associated with orders expiring.