Concept:
For my midterm project, I thought of doing a theater management experience. This idea stems from our assigned Crawford reading on interactivity. Crawford argued that activities like reading a book or theater are not actually interactive. A person can only react to them. I decided to do this experience not as a counter to his argument, but rather to give the commoner a playful way to interact with the theatrical world by stepping into the shoes of a stressed director. To be honest, coding this small game is by far the most time-consuming and complex coding I have done so far. At first, I was so full of ideas that I was finding it difficult to ground myself. This is when I came up with my colorful pens and paper. Believe me, this traditional mind-mapping method does wonders! I was able to make a game plan of what I wanted and could do.

Since it was very intimidating to code everything at once, I divided the task into different levels. I started off by making the cover and the 3 sub-games. This way, I did not have to scroll endlessly to find particular snippets of code, and I could debug instantly. Also, seeing some working parts of my code gave me more confidence in my work. However, as of now, I do have 4 different p5 windows. (Sorry if this is making the blog post long.)
Embedded Sketch:
1. Game Cover:
2. Wires Game:
3. Tears Game:
4. Script Game:
The Process:
To save time and focus only on the small games that I wanted to do, I opted to generate my backgrounds using Claude and my characters using pixler.dev (Link – an online tool for generating game characters and props). As for the sound effects I have used so far, I downloaded them from an online library called ‘Pixabay’ (Link). Now, coming to my code, I am really proud of my progress so far. I focused more on polishing my little games (and I have been able to add sound!) I learnt to use new functions like ceil and blend as and when I encountered a few problems. Crucially, I am happy that I was able to implement loops and nested ifs. Here are some code snippets:
This is from the wire game.
function mouseReleased() {
if (DraggingWire != -1) { //checking if the mouse was let go on a right terminal
for (let j = 0; j < 4; j++) {
if (dist(MouseXPosition(), MouseYPosition(), WireRightX, WireY(j)) < 40) {
if (RightOrder[j] == DraggingWire) {
ConnectedWire[DraggingWire] = true; //checking matching colors
}
else {
WireTimeLeft = WireTimeLeft - 2; //wrong color costs 2 seconds
}
}
}
DraggingWire = -1;
}
}
And this one is from the tears game (after countless crashouts, actual tears and trial and error).
if (TearResult == "playing") {
//timer
TearTimeLeft = TearTimeLeft - deltaTime / 1000;
if (TearTimeLeft <= 0) {
TearTimeLeft = 0;
finishTears(false);
}
//a new tear every half second
if (frameCount % 30 == 0) {
Tears.push(new Tear(random(20, Width - 20), 0));
}
//the tissue follows the mouse
TissueX = constrain(MouseXPosition(), TissueW / 2, Width - TissueW / 2);
//check if the tear was caught or missed
for (let i = Tears.length - 1; i >= 0; i--) {
Tears[i].update();
let caught = Tears[i].y > TissueY - 15 && Tears[i].y < TissueY + 15 & abs(Tears[i].x - TissueX) < TissueW / 2;
if (caught) {
CalmLevel = CalmLevel + 7;
Tears.splice(i, 1); //the tissue caught it, so the tear disappears
}
else if (Tears[i].y > Height) {
CalmLevel = CalmLevel - 4
Tears.splice(i, 1); //it fell off the bottom, so removing it
}
}
CalmLevel = constrain(CalmLevel, 0, 100);
if (CalmLevel >= 100) {finishTears(true);}
else if (CalmLevel <= 0) {finishTears(false);} //the calm bar ran out before the timer
}
Reflection:
The next step is to create the backstage scenario where all the problems will be, merge all my code, and work on the final show. As I am writing this sentence, I am realizing how much more work my project is demanding. I also remain a bit worried about whether all my uploaded files will slow down the interface once I merge the code. But, well, I am determined to have a fully working midterm project in one more week. And I believe my strong-will will indeed keep me going.