Homework 4

Final Milestone

すしゲーム

すしゲーム is a Factorio-style game with much lower stakes, tight audiovisual coupling, and satisfying sonic soundbites. Players create the layout of their conveyor belt sushi restaurant, from which they can manually create sushi to give to customers or set up crazy contraptions that automate the whole process or even crash the game! Customers may sometimes want to order a specific sushi, so watch out for that! Or not, since there are no consequences anyways. Just do what you want to do: treat it as a game or an instrument or a sequencer, or just inspiration for supporting your local Japanese restaurant.

Download, unzip, and run chuck main.ck.

  • WASD or arrow keys to move.
  • Items on the HUD can be clicked on to select (and then clicked again to deselect), or hotkey-ed with 1 to 0.
  • Click anywhere on the sushi mat to place a node (hotkeys 2, 3, and 4).
  • A belt (hotkey 1) can be constructed by clicking on the start node first, and then the end node.
  • "Sushis" (hotkeys 5 to 0) can be placed only on boards (hotkey 3).
  • Click on a board with a sushi selected to place it on the conveyor belt.
  • 🍣🍣🍣🍣🍣🍣🍣

I had a few motivations for creating something like this. First, I wanted to complete the trilogy of 2D (this), 2.5D (visualizer), and 3D (sequencer), which I was able to do. Each new dimension paradigm came with its own set of challenges, and this was no different, from implementing the HUD to the background. Furthermore, since I was much more capable of creating 2D assets than 3D assets, I also decided to challenge myself by not outsourcing any part of my project; not just the visuals, but the audio too. Everything in this project is organic, home-grown. non-GMO goodness. However, one of the biggest challenges was that this project, despite its innocuous look, was actually the most substantial project in terms of SLOC. Beyond organizing and the typical challenge of resolving the dependency tree, I was also tasked with designing and programming much more visual interaction than I had before, as in clicking, selecting, and such.

There are a few achievements in the code that I in particular want to highlight. First, which I've said already, is the surprisingly difficult task of creating an infinitely tessellated background. In bg.ck, you can peruse the code I wrote that acts as a 2D circular buffer where as soon as the camera moves in a direction for a distance larger than the corresponding dimension of a tile, the entire row/column is shifted to the end that the camera is moving towards. Secondly, I want to highlight the directed graph data structure I used to keep track of where the sushi should go. global float graph[10][0][0][0]; // NOTE: [start slot][start index][[end slot, end index, x, y]] is the line of code that keeps everything chugling [sic] along. This 4D matrix keeps track of the entire board state, as well as routing, since the entire system is a directed graph. Thus, a sushi starts on one of the board nodes, then travels along according to the edges in the graph, until it reaches a bento box, in which case it is blissfully consumed.

Finally, I want to talk about the game a little bit. Like I've said in a reading response before, I always try to optimize for minimal mechanics and maximal dynamics and aesthetics; specifically, The relationship between mechanics and dynamics is very important to me in playing a game. This is why I've looked up to games like Exploding Kittens or chess or Mario Kart Wii, since the dynamics of the game emerge from comparatively few mechanics. I think I was able to accomplish something of a similar sort in Sushi Game: for example, with the given nodes and rules, the player is able to create a sequencer, and in other cases, an unstable system that can cause infinite sushi duplication. Beyond this, I had other motivations for adding the game mechanic of ordering food. A theme that I think has persisted throughout this class in my projects is the idea of time. For example in my visualizer, while there is a clear passage of time, the flat narrative arc really emphasizes the fact that it's quite timeless. Similarly, my sequencer is nothing but time and deadlines, yet I think the seamless transitions between soundscape-esque rings and the hyper-awareness of time has that timeless quality to it as well. I kind of wanted to continue with this theme in this. Like my visualizer, this game has a simple interaction loop and a flat narrative arc that I think helps it create that vibe. The fact that the player can choose without consequence whether to ignore or play the game, yet the game having an Overcooked vibe (as a lot of people noted in the milestone comments), I think sets up the juxtaposition of a usually hectic factory/restaurant simulator with the complete calmness of being able to ignore it all.

Milestone 3

I think I did a lot of good work clarifying the theme and doing a lot of the aesthetic work. Furthermore, I think I have also elucidated the direction and categorization of the project, which will be a no commitment and no goal game. I guess this does go in line with that I have done so far, the kind of time-agnotic vibe and low action type. There is one more mechanic that I still want to implement that makes it into that game, but I think the bigger question for me now is how to make it more sonically interesting. Would welcome any suggestions. Though I do think it's cool that with the mechanics I have, there can be a human-powered dynamic but also a sequencer type system that can be implemented. That was actually an unintended consequence, but it's cool how the emergent dynamics of such simple rules can be so complex. One thing I should mention is that the infinite background is a circular buffer that recycles itself so the camera never is able to outrun the background in any axis.

Milestone 2

One of the biggest questions of interaction I faced in implementing idea 2 (Turing machine) was how to make it not so boring when the TM is just executing the commands. While I did take inspiration from the Google Doodle, I don't think it managed that problem too well, given that half the time it's just 1940s code compilation simulator (as in just waiting for stuff to happen once you click the buttons). Thus, the thought of infinite tape evolved into conveyor belts, and the Turing machine into functions, as my thought process shifted to games like Factorio and shapez.io. I think their balance of interaction with the functional side is much better, and I sought to emulate that. Just don't ask me how long everything took to code.

Milestone 1

3 Ideas

  • Birds on a telephone pole. This would be in the spirit of my other projects, but it would be a sort of minigame where you can attract birds with food, and scare them off the pole. I would need to flesh out the mechanics more through testing to find out what would be the most engaging, but in the most "calm" way without too much drama or action. Each bird would have some sort of singing mechanic that could also be triggered, and maybe the goal would be to construct the right set of birds to complete a melody. Homework 3 idea
  • Turing Machine inspired computer instrument. This idea would turn a turing machine into a music instrument rather than a computer. I would probably design the formal rules for how the new musical turing machine works, but the idea is that it would be a sort of code-writing/code-cracking minigame. There can also be a freeplay mode where the player can just make sounds according to the rules. Homework 3 idea
  • A dial-based filter designer where people can add poles and zeros on a dial to create filters. It would be more of a tool to create filters and alter a looping background track. Homework 3 idea